]> git.lyx.org Git - features.git/commitdiff
Revert "Remove 'premature optimization' that proved buggy"
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sat, 27 Jan 2018 11:03:09 +0000 (12:03 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sat, 27 Jan 2018 11:18:25 +0000 (12:18 +0100)
This reverts commit 894ae19224d0537c0c9ebd9ad45e547279769bd8.

Fixes bug 10996.

src/TextMetrics.cpp

index 620514421b78e9764be8eab39d66875379a15383..6c5a3222772cf794f6bc31fa27327477e951f3cc 100644 (file)
@@ -834,6 +834,11 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const
        // the width available for the row.
        int const width = max_width_ - row.right_margin;
 
+       if (pos >= end || row.width() > width) {
+               row.endpos(end);
+               return need_new_row;
+       }
+
 #if 0
        //FIXME: As long as leftMargin() is not correctly implemented for
        // MARGIN_RIGHT_ADDRESS_BOX, we should also not do this here.
@@ -852,7 +857,10 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const
        // or the end of the par, then build a representation of the row.
        pos_type i = pos;
        FontIterator fi = FontIterator(*this, par, row.pit(), pos);
-       while (i < end && row.width() <= width) {
+       do {
+               // this can happen for an empty row after a newline
+               if (i >= end)
+                       break;
                char_type c = par.getChar(i);
                // The most special cases are handled first.
                if (par.isInset(i)) {
@@ -934,7 +942,7 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const
 
                ++i;
                ++fi;
-       }
+       } while (i < end && row.width() <= width);
        row.finalizeLast();
        row.endpos(i);