#include <config.h>
#include "paragraph_pimpl.h"
+#include "paragraph.h"
#include "bufferparams.h"
#include "debug.h"
}
-void Paragraph::Pimpl::cleanChanges()
+void Paragraph::Pimpl::cleanChanges(Paragraph::ChangeTracking ct)
{
- // if we're not tracking, we don't want to reset...
- if (!tracking())
+ // if the paragraph was not tracked and we don't know the buffer's
+ // change tracking state, we do nothing
+ if ((ct == Paragraph::trackingUnknown) && !tracking())
return;
+ // untrack everything if we are in a buffer where ct is disabled
+ else if (ct == Paragraph::trackingOff) {
+ untrackChanges();
+ return;
+ }
+
+ // in a buffer where ct is enabled, set everything to INSERTED
changes_.reset(new Changes(Change::INSERTED));
changes_->set(Change::INSERTED, 0, size() + 1);
}
}
-void Paragraph::Pimpl::setChange(pos_type pos, Change::Type type)
+void Paragraph::Pimpl::setChangeType(pos_type pos, Change::Type type)
{
if (!tracking())
return;
}
-void Paragraph::Pimpl::setChangeFull(pos_type pos, Change change)
+void Paragraph::Pimpl::setChange(pos_type pos, Change change)
{
if (!tracking())
return;
changes_->set(change, pos);
}
-Change::Type Paragraph::Pimpl::lookupChange(pos_type pos) const
-{
- if (!tracking())
- return Change::UNCHANGED;
-
- return changes_->lookup(pos);
-}
-
-Change const Paragraph::Pimpl::lookupChangeFull(pos_type pos) const
+Change const Paragraph::Pimpl::lookupChange(pos_type pos) const
{
if (!tracking())
return Change(Change::UNCHANGED);
- return changes_->lookupFull(pos);
+ return changes_->lookup(pos);
}
pos_type i = start;
for (; i < end; ++i) {
- switch (lookupChange(i)) {
+ switch (lookupChange(i).type) {
case Change::UNCHANGED:
break;
pos_type i = start;
for (; i < end; ++i) {
- switch (lookupChange(i)) {
+ switch (lookupChange(i).type) {
case Change::UNCHANGED:
break;
BOOST_ASSERT(pos <= size());
if (tracking()) {
- Change::Type changetype(changes_->lookup(pos));
- changes_->record(Change(Change::DELETED), pos);
+ Change::Type changetype(changes_->lookup(pos).type);
// only allow the actual removal if it was /new/ text
if (changetype != Change::INSERTED) {
+ changes_->record(Change(Change::DELETED), pos);
if (pos < size() && owner_->isInset(pos))
owner_->getInset(pos)->markErased(true);
return false;
if ((bparams.inputenc == "latin1" ||
bparams.inputenc == "latin9") ||
(bparams.inputenc == "auto" &&
- (font.language()->encoding()->LatexName()
+ (font.language()->encoding()->latexName()
== "latin1" ||
- font.language()->encoding()->LatexName()
+ font.language()->encoding()->latexName()
== "latin9"))) {
os << "\\ensuremath{"
<< c