commit 27584f5f7033f6abe127e66b4f5114663e043157 Author: Juergen Spitzmueller <sp...@lyx.org> Date: Tue Mar 6 15:31:43 2018 +0100
Fix local polyglossia switch for Arabic We need to lowercase the language again (it's \begin{Arabic}, but \textarabic) Fixes: #11057. --- src/output_latex.cpp | 30 ++++++++++++++++++++---------- 1 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/output_latex.cpp b/src/output_latex.cpp index c57663d..c91c069 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -142,11 +142,16 @@ string const getPolyglossiaEnvName(Language const * lang) string const getPolyglossiaBegin(string const & lang_begin_command, - string const & lang, string const & opts) + string const & lang, string const & opts, + bool const localswitch = false) { string result; - if (!lang.empty()) - result = subst(lang_begin_command, "$$lang", lang); + if (!lang.empty()) { + // we need to revert the upcasing done in getPolyglossiaEnvName() + // in case we have a local polyglossia command (\textarabic). + string language = localswitch ? ascii_lowercase(lang) : lang; + result = subst(lang_begin_command, "$$lang", language); + } string options = opts.empty() ? string() : "[" + opts + "]"; result = subst(result, "$$opts", options); @@ -903,7 +908,9 @@ void TeXOnePar(Buffer const & buf, && (par_lang != openLanguageName(state) || localswitch) && !par_lang.empty()) { string bc = use_polyglossia ? - getPolyglossiaBegin(lang_begin_command, par_lang, par_language->polyglossiaOpts()) + getPolyglossiaBegin(lang_begin_command, par_lang, + par_language->polyglossiaOpts(), + localswitch) : subst(lang_begin_command, "$$lang", par_lang); os << bc; os << lang_command_termination; @@ -962,11 +969,13 @@ void TeXOnePar(Buffer const & buf, if (runparams.encoding->package() == Encoding::CJK && par_lang != openLanguageName(state) && !par_lang.empty()) { - os << from_ascii(subst( - lang_begin_command, - "$$lang", - par_lang)) - << lang_command_termination; + string bc = use_polyglossia ? + getPolyglossiaBegin(lang_begin_command, par_lang, + par_language->polyglossiaOpts(), + localswitch) + : subst(lang_begin_command, "$$lang", par_lang); + os << bc + << lang_command_termination; if (using_begin_end) pushLanguageName(par_lang, localswitch); } @@ -1133,7 +1142,8 @@ void TeXOnePar(Buffer const & buf, && current_lang != openLanguageName(state)) { string bc = use_polyglossia ? getPolyglossiaBegin(lang_begin_command, current_lang, - current_language->polyglossiaOpts()) + current_language->polyglossiaOpts(), + localswitch) : subst(lang_begin_command, "$$lang", current_lang); os << bc; pending_newline = !localswitch;