diff --git a/src/output_latex.cpp b/src/output_latex.cpp index 67f9bdd08c..fa890f5b3c 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); @@ -905,7 +910,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; @@ -964,11 +971,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); } @@ -1135,7 +1144,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; diff --git a/status.23x b/status.23x index e828faa997..715c252ea0 100644 --- a/status.23x +++ b/status.23x @@ -60,6 +60,8 @@ What's new - Do not embrace numbers in \beginL ... \endL with polyglossia in Right- to-Left languages, since bidi handles the numbers automatically. +- Fix polyglossia language switches for Arabic (bug 11057). + * LYX2LYX