diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 7ac0a666cf..4b07afa8a9 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -3153,6 +3153,11 @@ bool Paragraph::isHfill(pos_type pos) const bool Paragraph::isNewline(pos_type pos) const { + // U+2028 LINE SEPARATOR + // U+2029 PARAGRAPH SEPARATOR + char_type const c = d->text_[pos]; + if (c == 0x2028 || c == 0x2029) + return true; Inset const * inset = getInset(pos); return inset && inset->lyxCode() == NEWLINE_CODE; } diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index a26b88dc72..c537e4536b 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -851,7 +851,23 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit } else if (c == '\t') row.addSpace(i, theFontMetrics(*fi).width(from_ascii(" ")), *fi, par.lookupChange(i)); - else { + else if (c == 0x2028 || c == 0x2029) { + /** + * U+2028 LINE SEPARATOR + * U+2029 PARAGRAPH SEPARATOR + + * These are special unicode characters that break + * lines/pragraphs. Not handling them lead to trouble wrt + * Qt QTextLayout formatting. We add a visible character + * on screen so that the user can see that something is + * happening. + */ + row.finalizeLast(); + // ⤶ U+2936 ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS + // ¶ U+00B6 PILCROW SIGN + char_type const screen_char = (c == 0x2028) ? 0x2936 : 0x00B6; + row.add(i, screen_char, *fi, par.lookupChange(i)); + } else { // FIXME: please someone fix the Hebrew/Arabic parenthesis mess! // see also Paragraph::getUChar. if (fi->language()->lang() == "hebrew") { @@ -911,6 +927,7 @@ void TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit BufferParams const & bparams = text_->inset().buffer().params(); f.setLanguage(par.getParLanguage(bparams)); + // ¶ U+00B6 PILCROW SIGN row.addVirtual(end, docstring(1, char_type(0x00B6)), f, Change()); } diff --git a/status.22x b/status.22x index 34afd0d0a2..5c969b2bf6 100644 --- a/status.22x +++ b/status.22x @@ -161,6 +161,8 @@ What's new - Fix cursor movement when the document contains high-plane Unicode characters (bug 10443). +- Fix crash when the document contains Unicode line-breaking characters. + - Allow using colors supported by xcolor inside mathed (bug 10417). - Change description of "frame of button" color to "button frame" (bug