Fix local polyglossia switch for Arabic

We need to lowercase the language again (it's \begin{Arabic},
but \textarabic)

Fixes: #11057.
This commit is contained in:
Juergen Spitzmueller 2018-03-06 15:31:43 +01:00
parent 1dcb2a0976
commit 27584f5f70

View File

@ -142,11 +142,16 @@ string const getPolyglossiaEnvName(Language const * lang)
string const getPolyglossiaBegin(string const & lang_begin_command, 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; string result;
if (!lang.empty()) if (!lang.empty()) {
result = subst(lang_begin_command, "$$lang", lang); // 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 options = opts.empty() ?
string() : "[" + opts + "]"; string() : "[" + opts + "]";
result = subst(result, "$$opts", options); result = subst(result, "$$opts", options);
@ -903,7 +908,9 @@ void TeXOnePar(Buffer const & buf,
&& (par_lang != openLanguageName(state) || localswitch) && (par_lang != openLanguageName(state) || localswitch)
&& !par_lang.empty()) { && !par_lang.empty()) {
string bc = use_polyglossia ? 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); : subst(lang_begin_command, "$$lang", par_lang);
os << bc; os << bc;
os << lang_command_termination; os << lang_command_termination;
@ -962,11 +969,13 @@ void TeXOnePar(Buffer const & buf,
if (runparams.encoding->package() == Encoding::CJK if (runparams.encoding->package() == Encoding::CJK
&& par_lang != openLanguageName(state) && par_lang != openLanguageName(state)
&& !par_lang.empty()) { && !par_lang.empty()) {
os << from_ascii(subst( string bc = use_polyglossia ?
lang_begin_command, getPolyglossiaBegin(lang_begin_command, par_lang,
"$$lang", par_language->polyglossiaOpts(),
par_lang)) localswitch)
<< lang_command_termination; : subst(lang_begin_command, "$$lang", par_lang);
os << bc
<< lang_command_termination;
if (using_begin_end) if (using_begin_end)
pushLanguageName(par_lang, localswitch); pushLanguageName(par_lang, localswitch);
} }
@ -1133,7 +1142,8 @@ void TeXOnePar(Buffer const & buf,
&& current_lang != openLanguageName(state)) { && current_lang != openLanguageName(state)) {
string bc = use_polyglossia ? string bc = use_polyglossia ?
getPolyglossiaBegin(lang_begin_command, current_lang, getPolyglossiaBegin(lang_begin_command, current_lang,
current_language->polyglossiaOpts()) current_language->polyglossiaOpts(),
localswitch)
: subst(lang_begin_command, "$$lang", current_lang); : subst(lang_begin_command, "$$lang", current_lang);
os << bc; os << bc;
pending_newline = !localswitch; pending_newline = !localswitch;