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 6dfbab3124)
This commit is contained in:
Jean-Marc Lasgouttes 2016-11-07 10:14:39 +01:00
parent 990af0ae08
commit 59577dea7a
3 changed files with 25 additions and 1 deletions

View File

@ -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;
}

View File

@ -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());
}

View File

@ -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