From: Jean-Marc Lasgouttes Date: Mon, 7 Nov 2016 09:14:39 +0000 (+0100) Subject: Handle properly unicode paragraph/line break X-Git-Tag: 2.2.3~73 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=59577dea7ad9d6620cb35b84663f236da0bd153b;p=features.git Handle properly unicode paragraph/line break They are shown on screen by arrow or pilcrow symbol and cause a line break. They are still not handled in LaTeX output, though. (cherry picked from commit 6dfbab31245df074df4d1664321e2ff434f3ca6a) --- 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