From 7e09f574ba3b5d1a45088f16a37179abc6a4c08e Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sat, 24 Aug 2024 14:30:37 +0200 Subject: [PATCH] Add BabelOpts to languages This way, some settings that were hardcoded in BabelPreamble are customizable in document settings --- lib/languages | 24 ++++++++++-------------- src/BufferParams.cpp | 10 +++++++--- src/Language.cpp | 5 +++++ src/Language.h | 4 ++++ 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/lib/languages b/lib/languages index 9c5ba04a4c..f867b6c0a6 100644 --- a/lib/languages +++ b/lib/languages @@ -8,6 +8,7 @@ # GuiName "" # HasGuiSupport # BabelName +# BabelOpts "" # BabelOptFormat # PolyglossiaName # PolyglossiaOpts "" @@ -129,6 +130,8 @@ # be de-activated in some contexts (such as - or =). # * XindyName holds the value to the (te)xindy -L option. We only give it # if a corresponding language module exists. +# * BabelOpts are comma separated, no matter how they shall be represented +# in the output. # * BabelOptFormat specifies how the language-specific options shall be # passed with babel (which differs between languages). # You can use the placeholders $lang$ and $opts$ (as in @@ -218,10 +221,8 @@ End Language ancientgreek GuiName "Greek (ancient)" BabelName greek + BabelOpts "ancient" BabelOptFormat modifier - PostBabelPreamble - \languageattribute{greek}{ancient} - EndPostBabelPreamble PolyglossiaName greek PolyglossiaOpts "variant=ancient" XindyName greek @@ -670,6 +671,7 @@ End Language estonian GuiName "Estonian" BabelName estonian + BabelOpts notilde BabelOptFormat modifier PolyglossiaName estonian XindyName estonian @@ -678,9 +680,6 @@ Language estonian FontEncoding T1|OT1 DateFormats "d MMMM yyyy|d MMM yyyy|dd.MM.yyyy" LangCode et_EE - PostBabelPreamble - \addto\extrasestonian{\bbl@deactivate{~}} - EndPostBabelPreamble End # the preamble definitions are only used due to bugs in the @@ -1450,6 +1449,7 @@ Language spanish GuiName "Spanish" HasGuiSupport true BabelName spanish + BabelOpts "noquoting, nodecimaldot" BabelOptFormat modifier PolyglossiaName spanish XindyName spanish-modern @@ -1458,27 +1458,23 @@ Language spanish FontEncoding T1|OT1 DateFormats "d 'de' MMMM 'de' yyyy|d MMM yyyy|dd/MM/yyyy" LangCode es_ES - PostBabelPreamble - \addto\shorthandsspanish{\spanishdeactivate{~<>}} - \deactivatequoting - EndPostBabelPreamble End # there are no spanish shorthands in polyglossia Language spanish-mexico GuiName "Spanish (Mexico)" BabelName spanish +# mexico implies nodecimaldot + BabelOpts "mexico, noquoting" + BabelOptFormat modifier PolyglossiaName spanish + PolyglossiaOpts "variant=mexican" XindyName spanish-modern QuoteStyle french Encoding iso8859-15 FontEncoding T1|OT1 DateFormats "d 'de' MMMM 'de' yyyy|d MMM yyyy|dd/MM/yyyy" LangCode es_MX - PostBabelPreamble - \addto\shorthandsspanish{\spanishdeactivate{~<>.}} - \deactivatequoting - EndPostBabelPreamble End Language swedish diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index b6ca0e3eab..3644acf13f 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -1371,7 +1371,9 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const if (language != ignore_language) os << "\\language " << language->lang() << '\n'; for (auto const & s : lang_options_babel_) { - if (!s.second.empty()) + Language const * l = languages.getLanguage(s.first); + if (l && l->babelOpts() != s.second) + // babel options can be empty os << "\\language_options_babel " << s.first << " \"" << s.second << "\"\n"; } for (auto const & s : lang_options_polyglossia_) { @@ -4039,8 +4041,10 @@ string const BufferParams::bibFileEncoding(string const & file) const string const BufferParams::babelLangOptions(string const & lang) const { - if (lang_options_babel_.find(lang) == lang_options_babel_.end()) - return string(); + if (lang_options_babel_.find(lang) == lang_options_babel_.end()) { + Language const * l = languages.getLanguage(lang); + return l ? l->babelOpts() :string(); + } return lang_options_babel_.find(lang)->second; } diff --git a/src/Language.cpp b/src/Language.cpp index c8d77411b1..bd2dd589fb 100644 --- a/src/Language.cpp +++ b/src/Language.cpp @@ -132,6 +132,7 @@ bool Language::readLanguage(Lexer & lex) enum LanguageTags { LA_BABELNAME = 1, LA_BABELOPTFORMAT, + LA_BABELOPTS, LA_DATEFORMATS, LA_ENCODING, LA_END, @@ -159,6 +160,7 @@ bool Language::readLanguage(Lexer & lex) { "activechars", LA_ACTIVECHARS }, { "babelname", LA_BABELNAME }, { "babeloptformat", LA_BABELOPTFORMAT }, + { "babelopts", LA_BABELOPTS }, { "dateformats", LA_DATEFORMATS }, { "encoding", LA_ENCODING }, { "end", LA_END }, @@ -209,6 +211,9 @@ bool Language::readLanguage(Lexer & lex) case LA_BABELOPTFORMAT: lex >> babeloptformat_; break; + case LA_BABELOPTS: + lex >> babel_opts_; + break; case LA_POLYGLOSSIANAME: lex >> polyglossia_name_; break; diff --git a/src/Language.h b/src/Language.h index 1d1b7f0ead..db06a79c1b 100644 --- a/src/Language.h +++ b/src/Language.h @@ -43,6 +43,8 @@ public: std::string const lang() const { return lang_; } /// Babel language name std::string const babel() const { return babel_; } + /// babel language options + std::string const babelOpts() const { return babel_opts_; } /// Babel option format std::string const babelOptFormat() const { return babeloptformat_; } /// polyglossia language name @@ -118,6 +120,8 @@ private: /// trivstring babel_; /// + trivstring babel_opts_; + /// trivstring babeloptformat_; /// trivstring polyglossia_name_;