[LyX/master] Add BabelOpts to languages

Juergen Spitzmueller spitz at lyx.org
Sat Aug 24 12:31:47 UTC 2024


commit 7e09f574ba3b5d1a45088f16a37179abc6a4c08e
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Sat Aug 24 14:30:37 2024 +0200

    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            "<Gui Name>"
 #	HasGuiSupport      <true|false>
 #	BabelName          <babelname>
+#	BabelOpts          "<language-specific options>"
 #       BabelOptFormat     <format of option specification>
 #	PolyglossiaName    <polyglossianame>
 #	PolyglossiaOpts    "<language-specific options>"
@@ -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 at 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_;


More information about the lyx-cvs mailing list