Fix usage of multiple varieties of the same polyglossia language.

1. We must always output all (diverging) options, including
   default options; if not, default options might get overwritten.

2. Do not output options in \setotherlanguage, since we might have
   multiple "other languages" varieties from the same language (such
   as naustrian, nswissgerman). And the options are output for the
   language switches anyway.

Hence, LaTeXFeatures::getPolyglossiaLanguages() does not have to record
varieties. This was not done correctly anyway, since the map allowed
for one entry per language only.
This commit is contained in:
Juergen Spitzmueller 2016-11-02 18:04:26 +01:00
parent 065cd36922
commit 008c229041
5 changed files with 31 additions and 15 deletions

View File

@ -30,6 +30,9 @@
# #
# NOTES: # NOTES:
# #
# * If we provide Polyglossia languages with different options, the default
# options (such as "variant=american", "spelling=modern") should be
# explicitely spelled out (in order to provide mixing of such variants).
# * Omitted elements will be treated as empty (if string) or "false" # * Omitted elements will be treated as empty (if string) or "false"
# (if boolean). # (if boolean).
# * When HasGuiSupport is true, the language is candidate to appear in # * When HasGuiSupport is true, the language is candidate to appear in
@ -138,7 +141,7 @@ Language ancientgreek
\languageattribute{greek}{ancient} \languageattribute{greek}{ancient}
EndPostBabelPreamble EndPostBabelPreamble
PolyglossiaName greek PolyglossiaName greek
PolyglossiaOpts variant=ancient PolyglossiaOpts "variant=ancient"
QuoteStyle french QuoteStyle french
Encoding iso8859-7 Encoding iso8859-7
InternalEncoding true InternalEncoding true
@ -208,7 +211,7 @@ Language naustrian
GuiName "German (Austria)" GuiName "German (Austria)"
BabelName naustrian BabelName naustrian
PolyglossiaName german PolyglossiaName german
PolyglossiaOpts "variant=austrian,babelshorthands=true" PolyglossiaOpts "variant=austrian,spelling=new,babelshorthands=true"
QuoteStyle german QuoteStyle german
Encoding iso8859-15 Encoding iso8859-15
LangCode de_AT LangCode de_AT
@ -307,6 +310,8 @@ Language canadian
End End
# not yet supported by polyglossia # not yet supported by polyglossia
# Note: If polyglossia support gets implemented, french needs
# PolyglossiaOpts "variant=french"
Language canadien Language canadien
GuiName "French (Canada)" GuiName "French (Canada)"
BabelName canadien BabelName canadien
@ -409,6 +414,7 @@ Language english
HasGuiSupport true HasGuiSupport true
BabelName english BabelName english
PolyglossiaName english PolyglossiaName english
PolyglossiaOpts "variant=american"
QuoteStyle english QuoteStyle english
Encoding iso8859-15 Encoding iso8859-15
LangCode en_US LangCode en_US
@ -507,7 +513,7 @@ Language german
GuiName "German (old spelling)" GuiName "German (old spelling)"
BabelName german BabelName german
PolyglossiaName german PolyglossiaName german
PolyglossiaOpts "spelling=old,babelshorthands=true" PolyglossiaOpts "variant=german,spelling=old,babelshorthands=true"
QuoteStyle german QuoteStyle german
Encoding iso8859-15 Encoding iso8859-15
LangCode de LangCode de
@ -519,7 +525,7 @@ Language ngerman
HasGuiSupport true HasGuiSupport true
BabelName ngerman BabelName ngerman
PolyglossiaName german PolyglossiaName german
PolyglossiaOpts "babelshorthands=true" PolyglossiaOpts "variant=german,spelling=new,babelshorthands=true"
QuoteStyle german QuoteStyle german
Encoding iso8859-15 Encoding iso8859-15
LangCode de_DE LangCode de_DE
@ -534,7 +540,7 @@ Language german-ch
BabelName nswissgerman BabelName nswissgerman
PolyglossiaName german PolyglossiaName german
PolyglossiaOpts "babelshorthands=true" PolyglossiaOpts "babelshorthands=true"
# PolyglossiaOpts "variant=swiss,babelshorthands=true" # PolyglossiaOpts "variant=swiss,spelling=new,babelshorthands=true"
QuoteStyle danish QuoteStyle danish
Encoding iso8859-15 Encoding iso8859-15
LangCode de_CH LangCode de_CH
@ -559,6 +565,7 @@ Language greek
HasGuiSupport true HasGuiSupport true
BabelName greek BabelName greek
PolyglossiaName greek PolyglossiaName greek
PolyglossiaOpts "variant=monotonic"
QuoteStyle french QuoteStyle french
Encoding iso8859-7 Encoding iso8859-7
InternalEncoding true InternalEncoding true
@ -830,6 +837,8 @@ End
# Currently not supported (file format change!) # Currently not supported (file format change!)
# Russian orthography from the Petrine orthographic reforms of # Russian orthography from the Petrine orthographic reforms of
# 1708 to the 1917 orthographic reform # 1708 to the 1917 orthographic reform
# Note: If this is enabled, russian needs to get
# PolyglossiaOpts "spelling=modern"
# Language oldrussian # Language oldrussian
# GuiName "Russian (Petrine orthography)" # GuiName "Russian (Petrine orthography)"
# PolyglossiaName russian # PolyglossiaName russian
@ -909,6 +918,7 @@ Language serbian
HasGuiSupport true HasGuiSupport true
BabelName serbianc BabelName serbianc
PolyglossiaName serbian PolyglossiaName serbian
PolyglossiaOpts "script=cyrillic"
QuoteStyle german QuoteStyle german
Encoding utf8 Encoding utf8
FontEncoding T2A FontEncoding T2A
@ -920,7 +930,7 @@ Language serbian-latin
GuiName "Serbian (Latin)" GuiName "Serbian (Latin)"
BabelName serbian BabelName serbian
PolyglossiaName serbian PolyglossiaName serbian
PolyglossiaOpts "script=Latin" PolyglossiaOpts "script=latin"
QuoteStyle german QuoteStyle german
Encoding iso8859-2 Encoding iso8859-2
LangCode sr_RS-Latin LangCode sr_RS-Latin

View File

@ -2173,14 +2173,17 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
lyxpreamble += "[" + from_ascii(language->polyglossiaOpts()) + "]"; lyxpreamble += "[" + from_ascii(language->polyglossiaOpts()) + "]";
lyxpreamble += "{" + from_ascii(language->polyglossia()) + "}\n"; lyxpreamble += "{" + from_ascii(language->polyglossia()) + "}\n";
// now setup the other languages // now setup the other languages
std::map<std::string, std::string> const polylangs = set<string> const polylangs =
features.getPolyglossiaLanguages(); features.getPolyglossiaLanguages();
for (std::map<std::string, std::string>::const_iterator mit = polylangs.begin(); for (set<string>::const_iterator mit = polylangs.begin();
mit != polylangs.end() ; ++mit) { mit != polylangs.end() ; ++mit) {
// We do not output the options here; they are output in
// the language switch commands. This is safer if multiple
// varieties are used.
if (*mit == language->polyglossia())
continue;
lyxpreamble += "\\setotherlanguage"; lyxpreamble += "\\setotherlanguage";
if (!mit->second.empty()) lyxpreamble += "{" + from_ascii(*mit) + "}\n";
lyxpreamble += "[" + from_ascii(mit->second) + "]";
lyxpreamble += "{" + from_ascii(mit->first) + "}\n";
} }
} }

View File

@ -740,15 +740,16 @@ string LaTeXFeatures::getBabelLanguages() const
} }
std::map<std::string, std::string> LaTeXFeatures::getPolyglossiaLanguages() const set<string> LaTeXFeatures::getPolyglossiaLanguages() const
{ {
std::map<std::string, std::string> languages; set<string> languages;
LanguageList::const_iterator const begin = UsedLanguages_.begin(); LanguageList::const_iterator const begin = UsedLanguages_.begin();
for (LanguageList::const_iterator cit = begin; for (LanguageList::const_iterator cit = begin;
cit != UsedLanguages_.end(); cit != UsedLanguages_.end();
++cit) { ++cit) {
languages[(*cit)->polyglossia()] = (*cit)->polyglossiaOpts(); // We do not need the variants here
languages.insert((*cit)->polyglossia());
} }
return languages; return languages;
} }

View File

@ -129,7 +129,7 @@ public:
/// ///
std::string getBabelLanguages() const; std::string getBabelLanguages() const;
/// ///
std::map<std::string, std::string> getPolyglossiaLanguages() const; std::set<std::string> getPolyglossiaLanguages() const;
/// ///
std::set<std::string> getEncodingSet(std::string const & doc_encoding) const; std::set<std::string> getEncodingSet(std::string const & doc_encoding) const;
/// ///

View File

@ -69,6 +69,8 @@ What's new
- Fix nested language handling with polyglossia (bug 9633). - Fix nested language handling with polyglossia (bug 9633).
- Fix usage of multiple varieties of the same polyglossia language.
- Fix LaTeX output of fixed-width cells with decimal separator (bug 9568). - Fix LaTeX output of fixed-width cells with decimal separator (bug 9568).
- Do not hardcode required packages for Note inset. - Do not hardcode required packages for Note inset.