commit 047dee5a3b934a115db0d5497eda4cbf4865400d
Author: Juergen Spitzmueller <[email protected]>
Date: Sun Aug 25 09:46:29 2024 +0200
Basic support for \babelprovide
This is the new(er) babel mechanism to load languages via babel *.ini
files.
Some languages (or varieties) are only supported this way, some work
better with unicode engines this way (for the latter case, we have
BabelProvide 2)
---
lib/languages | 4 ++++
src/BufferParams.cpp | 16 +++++++++++++---
src/LaTeXFeatures.cpp | 2 +-
src/Language.cpp | 5 +++++
src/Language.h | 7 ++++++-
src/tex2lyx/Preamble.cpp | 8 ++++----
6 files changed, 33 insertions(+), 9 deletions(-)
diff --git a/lib/languages b/lib/languages
index efd83a6666..7fc89b1d41 100644
--- a/lib/languages
+++ b/lib/languages
@@ -8,6 +8,7 @@
# GuiName "<Gui Name>"
# HasGuiSupport <true|false>
# BabelName <babelname>
+# BabelProvide <0|1|2>
# BabelOpts "<language-specific options>"
# BabelOptFormat <format of option specification>
# PolyglossiaName <polyglossianame>
@@ -130,6 +131,9 @@
# 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.
+# * BabelProvide determines if and when a language should be loaded from
+# babel *.ini files with babel. Possible values:
+# 0 (= never, default), 1 (always), 2 (with Unicode engines/non-TeX fonts)
# * BabelOpts are comma separated, no matter how they shall be represented
# in the output.
# * BabelOptFormat specifies how the language-specific options shall be
diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 3644acf13f..e8f302537c 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -3503,6 +3503,7 @@ string BufferParams::babelCall(LaTeXFeatures const &
features, string lang_opts,
std::set<Language const *> langs = features.getLanguages();
// add main language
langs.insert(language);
+ ostringstream os;
for (auto const & l : langs) {
string blang = l->babel();
bool use_opt = langoptions;
@@ -3522,7 +3523,16 @@ string BufferParams::babelCall(LaTeXFeatures const &
features, string lang_opts,
use_opt = true;
}
}
- if (use_opt)
+ if (l->useBabelProvide() == 1 || (l->useBabelProvide() == 2 &&
useNonTeXFonts)) {
+ os << "\n\\babelprovide[import";
+ if (l == language)
+ os << ", main";
+ if (!babelLangOptions(l->lang()).empty())
+ os << ", " << babelLangOptions(l->lang());
+ os << "]{" << blang << "}";
+ have_mods = true;
+ }
+ else if (use_opt)
blangs.push_back(blang);
}
if (have_mods)
@@ -3530,8 +3540,8 @@ string BufferParams::babelCall(LaTeXFeatures const &
features, string lang_opts,
// The prefs may require the languages to
// be submitted to babel itself (not the class).
if (langoptions || have_mods)
- return "\\usepackage[" + lang_opts + "]{babel}";
- return "\\usepackage{babel}";
+ return "\\usepackage[" + lang_opts + "]{babel}" + os.str();
+ return "\\usepackage{babel}" + os.str();
}
diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index 3737938338..f1319facb5 100644
--- a/src/LaTeXFeatures.cpp
+++ b/src/LaTeXFeatures.cpp
@@ -1822,7 +1822,7 @@ docstring const LaTeXFeatures::getBabelPostsettings()
const
for (auto const & lang : langs) {
if (!lang->babel_postsettings().empty())
tmp << lang->babel_postsettings() << '\n';
- if (lang->babelOptFormat() != "modifier") {
+ if (lang->babelOptFormat() != "modifier" &&
lang->useBabelProvide() == 0) {
// user-set options
string const opts =
bufferParams().babelLangOptions(lang->lang());
if (!opts.empty())
diff --git a/src/Language.cpp b/src/Language.cpp
index bd2dd589fb..f178f9abd9 100644
--- a/src/Language.cpp
+++ b/src/Language.cpp
@@ -133,6 +133,7 @@ bool Language::readLanguage(Lexer & lex)
LA_BABELNAME = 1,
LA_BABELOPTFORMAT,
LA_BABELOPTS,
+ LA_BABELPROVIDE,
LA_DATEFORMATS,
LA_ENCODING,
LA_END,
@@ -161,6 +162,7 @@ bool Language::readLanguage(Lexer & lex)
{ "babelname", LA_BABELNAME },
{ "babeloptformat", LA_BABELOPTFORMAT },
{ "babelopts", LA_BABELOPTS },
+ { "babelprovide", LA_BABELPROVIDE },
{ "dateformats", LA_DATEFORMATS },
{ "encoding", LA_ENCODING },
{ "end", LA_END },
@@ -214,6 +216,9 @@ bool Language::readLanguage(Lexer & lex)
case LA_BABELOPTS:
lex >> babel_opts_;
break;
+ case LA_BABELPROVIDE:
+ lex >> use_babel_provide_;
+ break;
case LA_POLYGLOSSIANAME:
lex >> polyglossia_name_;
break;
diff --git a/src/Language.h b/src/Language.h
index db06a79c1b..4465809805 100644
--- a/src/Language.h
+++ b/src/Language.h
@@ -38,7 +38,8 @@ class Language {
public:
///
Language() : rightToLeft_(false), encoding_(0), internal_enc_(false),
- has_gui_support_(false), word_wrap_(true) {}
+ has_gui_support_(false), word_wrap_(true),
+ use_babel_provide_(0){}
/// LyX language name
std::string const lang() const { return lang_; }
/// Babel language name
@@ -47,6 +48,8 @@ public:
std::string const babelOpts() const { return babel_opts_; }
/// Babel option format
std::string const babelOptFormat() const { return babeloptformat_; }
+ /// Use \babelprovide with babel?
+ int useBabelProvide() const { return use_babel_provide_; }
/// polyglossia language name
std::string const polyglossia() const { return polyglossia_name_; }
/// polyglossia language options
@@ -165,6 +168,8 @@ private:
bool word_wrap_;
///
TranslationMap layoutTranslations_;
+ ///
+ int use_babel_provide_;
};
diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp
index 7802eae0b5..05a80ef025 100644
--- a/src/tex2lyx/Preamble.cpp
+++ b/src/tex2lyx/Preamble.cpp
@@ -50,7 +50,7 @@ namespace {
* please keep this in sync with known_coded_languages line by line!
*/
const char * const known_languages[] = {"acadian", "afrikaans", "albanian",
-"american", "arabic", "arabtex", "australian", "austrian", "azerbaijani",
"bahasa", "bahasai",
+"american", "ancientgreek", "arabic", "arabtex", "australian", "austrian",
"azerbaijani", "bahasa", "bahasai",
"bahasam", "basque", "belarusian", "bosnian", "brazil", "brazilian", "breton",
"british",
"bulgarian", "canadian", "canadien", "catalan", "croatian", "czech", "danish",
"dutch", "english", "esperanto", "estonian", "farsi", "finnish", "francais",
@@ -58,7 +58,7 @@ const char * const known_languages[] = {"acadian",
"afrikaans", "albanian",
"georgian", "greek", "hebrew", "hungarian", "icelandic", "indon", "indonesian",
"interlingua", "irish", "italian", "japanese", "kazakh", "kurmanji", "latin",
"latvian", "lithuanian", "lowersorbian", "lsorbian", "macedonian", "magyar",
"malay", "meyalu",
-"mongolian", "naustrian", "newzealand", "ngerman", "ngermanb", "norsk",
"nswissgerman",
+"mexican", "mongolian", "naustrian", "newzealand", "ngerman", "ngermanb",
"norsk", "nswissgerman",
"nynorsk", "piedmontese", "polutonikogreek", "polish", "portuges",
"portuguese",
"romanian", "romansh", "russian", "russianb", "samin", "scottish", "serbian",
"serbian-latin",
"slovak", "slovene", "spanish", "swedish", "swissgerman", "thai", "turkish",
"turkmen",
@@ -71,7 +71,7 @@ const char * const known_languages[] = {"acadian",
"afrikaans", "albanian",
* please keep this in sync with known_languages line by line!
*/
const char * const known_coded_languages[] = {"french", "afrikaans",
"albanian",
-"american", "arabic_arabi", "arabic_arabtex", "australian", "austrian",
"azerbaijani", "bahasa", "bahasa",
+"american", "ancientgreek", "arabic_arabi", "arabic_arabtex", "australian",
"austrian", "azerbaijani", "bahasa", "bahasa",
"bahasam", "basque", "belarusian", "bosnian", "brazilian", "brazilian",
"breton", "british",
"bulgarian", "canadian", "canadien", "catalan", "croatian", "czech", "danish",
"dutch", "english", "esperanto", "estonian", "farsi", "finnish", "french",
@@ -79,7 +79,7 @@ const char * const known_coded_languages[] = {"french",
"afrikaans", "albanian",
"georgian", "greek", "hebrew", "magyar", "icelandic", "bahasa", "bahasa",
"interlingua", "irish", "italian", "japanese", "kazakh", "kurmanji", "latin",
"latvian", "lithuanian", "lowersorbian", "lowersorbian", "macedonian",
"magyar", "bahasam", "bahasam",
-"mongolian", "naustrian", "newzealand", "ngerman", "ngerman", "norsk",
"german-ch",
+"spanish-mexico", "mongolian", "naustrian", "newzealand", "ngerman",
"ngerman", "norsk", "german-ch",
"nynorsk", "piedmontese", "polutonikogreek", "polish", "portuguese",
"portuguese",
"romanian", "romansh", "russian", "russian", "samin", "scottish", "serbian",
"serbian-latin",
"slovak", "slovene", "spanish", "swedish", "german-ch-old", "thai", "turkish",
"turkmen",
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs