From: Juergen Spitzmueller Date: Mon, 23 Jul 2012 12:56:00 +0000 (+0200) Subject: Fix direction of brackets in Hebrew when using Polyglossia (bug #8251) X-Git-Tag: 2.0.5~80 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=2d9c9ae77d46d4842c5b6b1d9b5a3e24bad05447;p=features.git Fix direction of brackets in Hebrew when using Polyglossia (bug #8251) --- diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 55df8b4520..7bb585905a 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -331,6 +331,7 @@ public: /// void latexSpecialChar( otexstream & os, + BufferParams const & bparams, OutputParams const & runparams, Font const & running_font, Change const & running_change, @@ -1148,6 +1149,7 @@ void Paragraph::Private::latexInset(BufferParams const & bparams, void Paragraph::Private::latexSpecialChar(otexstream & os, + BufferParams const & bparams, OutputParams const & runparams, Font const & running_font, Change const & running_change, @@ -1156,7 +1158,10 @@ void Paragraph::Private::latexSpecialChar(otexstream & os, pos_type end_pos, unsigned int & column) { - char_type const c = text_[i]; + // With polyglossia, brackets and stuff need not be reversed + // in RTL scripts (see bug #8251) + char_type const c = (runparams.use_polyglossia) ? + owner_->getUChar(bparams, i) : text_[i]; if (style.pass_thru || runparams.pass_thru) { if (c != '\0') { @@ -1835,16 +1840,23 @@ FontSize Paragraph::highestFontInRange char_type Paragraph::getUChar(BufferParams const & bparams, pos_type pos) const { char_type c = d->text_[pos]; - if (!lyxrc.rtl_support) + if (!lyxrc.rtl_support || !getFontSettings(bparams, pos).isRightToLeft()) return c; + // FIXME: The arabic special casing is due to the difference of arabic + // round brackets input introduced in r18599. Check if this should be + // unified with Hebrew or at least if all bracket types should be + // handled the same (file format change in either case). + string const & lang = getFontSettings(bparams, pos).language()->lang(); + bool const arabic = lang == "arabic_arabtex" || lang == "arabic_arabi" || + lang == "farsi"; char_type uc = c; switch (c) { case '(': - uc = ')'; + uc = arabic ? c : ')'; break; case ')': - uc = '('; + uc = arabic ? c : '('; break; case '[': uc = ']'; @@ -1865,9 +1877,8 @@ char_type Paragraph::getUChar(BufferParams const & bparams, pos_type pos) const uc = '<'; break; } - if (uc != c && getFontSettings(bparams, pos).isRightToLeft()) - return uc; - return c; + + return uc; } @@ -2505,7 +2516,7 @@ void Paragraph::latex(BufferParams const & bparams, } else { if (i >= start_pos && (end_pos == -1 || i < end_pos)) { try { - d->latexSpecialChar(os, rp, running_font, runningChange, + d->latexSpecialChar(os, bparams, rp, running_font, runningChange, style, i, end_pos, column); } catch (EncodingException & e) { if (runparams.dryrun) { diff --git a/src/rowpainter.cpp b/src/rowpainter.cpp index 0ee4280d12..41f50af903 100644 --- a/src/rowpainter.cpp +++ b/src/rowpainter.cpp @@ -237,6 +237,8 @@ void RowPainter::paintChars(pos_type & vpos, FontInfo const & font, str.reserve(100); str.push_back(prev_char); + // FIXME: Why only round brackets and why the difference to + // Hebrew? See also Paragraph::getUChar if (arabic) { char_type c = str[0]; if (c == '(') @@ -326,6 +328,8 @@ void RowPainter::paintChars(pos_type & vpos, FontInfo const & font, break; */ + // FIXME: Why only round brackets and why the difference to + // Hebrew? See also Paragraph::getUChar if (arabic) { if (c == '(') c = ')'; diff --git a/status.20x b/status.20x index e82643d4ac..4a5206d4b1 100644 --- a/status.20x +++ b/status.20x @@ -96,6 +96,9 @@ What's new - Fix LaTeX errors with right-to-left text when using XeTeX/Polyglossia (part of bug 8251). +- Fix brackets direction in Hebrew documents when using XeTeX/Polyglossia + and in Arabic documents on plain text output (part of bug 8251). + - Fix babel call with Arabic (arabi). - Fix suppression of language package.