summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
606e6d7)
* src/changes.C: fix erase() and insert()
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15453
a592a061-630c-0410-9148-
cb99ea01b6c8
void Changes::erase(pos_type const pos)
{
void Changes::erase(pos_type const pos)
{
+ if (lyxerr.debugging(Debug::CHANGES)) {
+ lyxerr[Debug::CHANGES] << "Erasing change at position " << pos << endl;
+ }
+
ChangeTable::iterator it = table_.begin();
ChangeTable::iterator end = table_.end();
ChangeTable::iterator it = table_.begin();
ChangeTable::iterator end = table_.end();
for (; it != end; ++it) {
for (; it != end; ++it) {
- Range & range(it->range);
-
- if (lyxerr.debugging(Debug::CHANGES)) {
- lyxerr[Debug::CHANGES] << "era:Range of type " << it->change.type << " is "
- << it->range.start << "," << it->range.end << endl;
+ // range (pos,pos+x) becomes (pos,pos+x-1)
+ if (it->range.start > pos) {
+ --(it->range.start);
+ }
+ // range (pos-x,pos) stays (pos-x,pos)
+ if (it->range.end > pos) {
+ --(it->range.end);
- if (range.contains(pos)) {
- found = true;
- --range.end;
- continue;
+ merge();
+}
+
+
+void Changes::insert(Change const & change, lyx::pos_type pos)
+{
+ if (lyxerr.debugging(Debug::CHANGES)) {
+ lyxerr[Debug::CHANGES] << "Inserting change of type " << change.type
+ << " at position " << pos << endl;
+ }
+
+ ChangeTable::iterator it = table_.begin();
+ ChangeTable::iterator end = table_.end();
+
+ for (; it != end; ++it) {
+ // range (pos,pos+x) becomes (pos+1,pos+x+1)
+ if (it->range.start >= pos) {
+ ++(it->range.start);
- if (found) {
- --range.start;
- --range.end;
+ // range (pos-x,pos) stays as it is
+ if (it->range.end > pos) {
+ ++(it->range.end);
+
+ set(change, pos, pos + 1); // set will call merge