The branch, master, has been updated. - Log -----------------------------------------------------------------
commit 6c1326cdeba128486cc46deadf6b1dde50ab9c77 Author: Juergen Spitzmueller <[email protected]> Date: Mon Jul 23 14:34:24 2012 +0200 Rework language package detection This puts the diverse use[LangPack] function into one (less error-prone) function and differentiates the custom package from the babel case diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 6c975d6..36edd59 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -1923,6 +1923,15 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, } } + // Load custom language package here + if (features.langPackage() == LaTeXFeatures::LANG_PACK_CUSTOM) { + if (lang_package == "default") + lyxpreamble += from_utf8(lyxrc.language_custom_package); + else + lyxpreamble += from_utf8(lang_package); + lyxpreamble += '\n'; + } + docstring const i18npreamble = features.getTClassI18nPreamble(use_babel, use_polyglossia); if (!i18npreamble.empty()) @@ -2645,12 +2654,6 @@ string const BufferParams::font_encoding() const string BufferParams::babelCall(string const & lang_opts, bool const langoptions) const { - if (lang_package != "auto" && lang_package != "babel" - && lang_package != "default" && lang_package != "none") - return lang_package; - if (lang_package == "default" - && lyxrc.language_package_selection == LyXRC::LP_CUSTOM) - return lyxrc.language_custom_package; // suppress the babel call if there is no BabelName defined // for the document language in the lib/languages file and if no // other languages are used (lang_opts is then empty) diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 489d7a4..1a976f9 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -290,33 +290,69 @@ LaTeXFeatures::LaTeXFeatures(Buffer const & b, BufferParams const & p, {} -bool LaTeXFeatures::useBabel() const +LaTeXFeatures::LangPackage LaTeXFeatures::langPackage() const { - if (usePolyglossia() - || bufferParams().lang_package == "none" - || (bufferParams().lang_package == "default" - && lyxrc.language_package_selection == LyXRC::LP_NONE)) - return false; - - return (bufferParams().language->lang() != lyxrc.default_language - && !bufferParams().language->babel().empty()) - || this->hasLanguages(); -} - - -bool LaTeXFeatures::usePolyglossia() const -{ - if (bufferParams().lang_package == "default") - return (lyxrc.language_package_selection == LyXRC::LP_AUTO) - && isRequired("polyglossia") - && isAvailable("polyglossia") - && !params_.documentClass().provides("babel") - && this->hasOnlyPolyglossiaLanguages(); - return (bufferParams().lang_package == "auto") - && isRequired("polyglossia") + string const local_lp = bufferParams().lang_package; + + // Locally, custom is just stored as a string + // in bufferParams().lang_package. + if (local_lp != "auto" + && local_lp != "babel" + && local_lp != "default" + && local_lp != "none") + return LANG_PACK_CUSTOM; + + if (local_lp == "none") + return LANG_PACK_NONE; + + /* If "auto" is selected, we load polyglossia if required, + * else we select babel. + * If babel is selected (either directly or via the "auto" + * mechanism), we really do only require it if we have + * a language that needs it. + */ + bool const polyglossia_required = + isRequired("polyglossia") && isAvailable("polyglossia") && !params_.documentClass().provides("babel") && this->hasOnlyPolyglossiaLanguages(); + bool const babel_required = + (bufferParams().language->lang() != lyxrc.default_language + && !bufferParams().language->babel().empty()) + || !this->getBabelLanguages().empty(); + + if (local_lp == "auto") { + // polyglossia requirement has priority over babel + if (polyglossia_required) + return LANG_PACK_POLYGLOSSIA; + else if (babel_required) + return LANG_PACK_BABEL; + } + + if (local_lp == "babel") { + if (babel_required) + return LANG_PACK_BABEL; + } + + if (local_lp == "default") { + switch (lyxrc.language_package_selection) { + case LyXRC::LP_AUTO: + // polyglossia requirement has priority over babel + if (polyglossia_required) + return LANG_PACK_POLYGLOSSIA; + else if (babel_required) + return LANG_PACK_BABEL; + case LyXRC::LP_BABEL: + if (babel_required) + return LANG_PACK_BABEL; + case LyXRC::LP_CUSTOM: + return LANG_PACK_CUSTOM; + case LyXRC::LP_NONE: + return LANG_PACK_NONE; + } + } + + return LANG_PACK_NONE; } diff --git a/src/LaTeXFeatures.h b/src/LaTeXFeatures.h index ed824d8..7c3d9e3 100644 --- a/src/LaTeXFeatures.h +++ b/src/LaTeXFeatures.h @@ -43,6 +43,13 @@ class Language; */ class LaTeXFeatures { public: + /// Which Language package do we use? + enum LangPackage { + LANG_PACK_NONE, + LANG_PACK_BABEL, + LANG_PACK_POLYGLOSSIA, + LANG_PACK_CUSTOM + }; /// LaTeXFeatures(Buffer const &, BufferParams const &, OutputParams const &); @@ -125,10 +132,12 @@ public: void setBuffer(Buffer const &); /// BufferParams const & bufferParams() const; - /// the return value is dependent upon both LyXRC and LaTeXFeatures. - bool useBabel() const; - /// - bool usePolyglossia() const; + /// Which language package do we need? + LangPackage langPackage() const; + /// Convenience function to test if we use babel + bool useBabel() const { return langPackage() == LANG_PACK_BABEL; } + /// Convenience function to test if we use polyglossia + bool usePolyglossia() const { return langPackage() == LANG_PACK_POLYGLOSSIA; } /// are we in a float? bool inFloat() const { return in_float_; } /// are we in a float? ----------------------------------------------------------------------- Summary of changes: src/BufferParams.cpp | 15 +++++--- src/LaTeXFeatures.cpp | 82 +++++++++++++++++++++++++++++++++++-------------- src/LaTeXFeatures.h | 17 ++++++++-- 3 files changed, 81 insertions(+), 33 deletions(-) hooks/post-receive -- The LyX Source Repository
