]> git.lyx.org Git - lyx.git/blobdiff - src/Text2.cpp
Comment: add matching parenthesis
[lyx.git] / src / Text2.cpp
index 356e4e8dd18bd29742c6458dfce32305a9b176c0..6ce41a6d52fcf41b523b9c9668a8a2fb7e48d4e0 100644 (file)
@@ -781,11 +781,14 @@ bool Text::cursorDownParagraph(Cursor & cur)
 
 namespace {
 
-void deleteSpaces(Paragraph & par, pos_type const from, pos_type to,
+/** delete num_spaces characters between from and to. Return the
+ * number of spaces that got physically deleted (not marked as
+ * deleted) */
+int deleteSpaces(Paragraph & par, pos_type const from, pos_type to,
                                  int num_spaces, bool const trackChanges)
 {
-       if (!num_spaces)
-               return;
+       if (num_spaces <= 0)
+               return 0;
 
        // First, delete spaces marked as inserted
        int pos = from;
@@ -800,7 +803,9 @@ void deleteSpaces(Paragraph & par, pos_type const from, pos_type to,
        }
 
        // Then remove remaining spaces
+       int const psize = par.size();
        par.eraseChars(from, from + num_spaces, trackChanges);
+       return psize - par.size();
 }
 
 }
@@ -812,6 +817,7 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
        //LYXERR(Debug::DEBUG, "DEPM: cur:\n" << cur << "old:\n" << old);
 
        Paragraph & oldpar = old.paragraph();
+       bool const trackChanges = cur.buffer()->params().track_changes;
 
        // We allow all kinds of "mumbo-jumbo" when freespacing.
        if (oldpar.isFreeSpacing())
@@ -857,15 +863,14 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
                       && !oldpar.isDeleted(from - 1))
                        --from;
                pos_type to = old.pos();
-               while (to < oldpar.size() - 1
+               while (to < old.lastpos()
                       && oldpar.isLineSeparator(to)
                       && !oldpar.isDeleted(to))
                        ++to;
 
                int num_spaces = to - from;
-
-               // If we are not at the extremity of the paragraph, keep one space
-               if (from != to && from > 0 && to < oldpar.size())
+               // If we are not at the start of the paragraph, keep one space
+               if (from != to && from > 0)
                        --num_spaces;
 
                // If cursor is inside range, keep one additional space
@@ -874,14 +879,13 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
 
                // Remove spaces and adapt cursor.
                if (num_spaces > 0) {
-                       pos_type const oldsize = oldpar.size();
-                       deleteSpaces(oldpar, from, to, num_spaces,
-                               cur.buffer()->params().track_changes);
+                       int const deleted =
+                               deleteSpaces(oldpar, from, to, num_spaces, trackChanges);
                        // correct cur position
                        // FIXME: there can be other cursors pointing there, we should update them
                        if (same_par) {
                                if (cur[depth].pos() >= to)
-                                       cur[depth].pos() -= oldsize - oldpar.size();
+                                       cur[depth].pos() -= deleted;
                                else if (cur[depth].pos() > from)
                                        cur[depth].pos() = min(from + 1, old.lastpos());
                                need_anchor_change = true;
@@ -930,7 +934,7 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
                return true;
        }
 
-       if (oldpar.stripLeadingSpaces(cur.buffer()->params().track_changes)) {
+       if (oldpar.stripLeadingSpaces(trackChanges)) {
                need_anchor_change = true;
                // We return true here because the Paragraph contents changed and
                // we need a redraw before further action is processed.
@@ -974,7 +978,8 @@ void Text::deleteEmptyParagraphMechanism(pit_type first, pit_type last, bool tra
                                --num_spaces;
 
                        // Remove spaces if needed
-                       deleteSpaces(par, from , to, num_spaces, trackChanges);
+                       int const deleted = deleteSpaces(par, from , to, num_spaces, trackChanges);
+                       from = to - deleted;
                }
 
                // don't delete anything if this is the only remaining paragraph