From 4331cbf30f6b5e9089cd79ba1d0183d1135b9587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20St=C3=B6hr?= Date: Sun, 12 Oct 2008 17:21:18 +0000 Subject: [PATCH] babel handling: revert r26857 and r26858 for the reasons I posted o the list git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@26870 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/BufferParams.cpp | 101 ++++++++++++++++++++++-------------------- src/BufferParams.h | 2 + src/LaTeXFeatures.cpp | 12 ----- src/LaTeXFeatures.h | 2 - 4 files changed, 56 insertions(+), 61 deletions(-) diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index b177409dd1..aa0c011259 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -942,49 +942,6 @@ void BufferParams::validate(LaTeXFeatures & features) const features.require("japanese"); } -/// Find out if we need special treatment for babel. -static bool needsSpecialBabelCall(LaTeXFeatures const & features) -{ - // FIXME: don't hardcode this!! - // If Vietnamese is used, babel must directly be loaded with the - // language options, see - // http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg129417.html - // - // viet = string::npos when not found - // the same is for all other languages that are not directly supported by - // babel, but where LaTeX-packages add babel support. - // this is currently the case for Latvian, Lithuanian, and Mongolian - // - // If Japanese is used, babel must directly be loaded with the - // language options, see - // http://bugzilla.lyx.org/show_bug.cgi?id=4597#c4 - return !lyxrc.language_global_options - || features.hasLanguage("vietnam") - || features.hasLanguage("latvian") - || features.hasLanguage("japanese") - || features.hasLanguage("lithuanian") - || features.hasLanguage("mongolian"); -} - -/// set up if and how babel is called -static docstring babelCall(LaTeXFeatures const & features, - string const & lang_opts) -{ - string babel_call = lyxrc.language_package; - if (babel_call != "\\usepackage{babel}") - return from_utf8(babel_call); - // suppress the babel call when there is no babel language defined - // for the document language in the lib/languages file and if no - // other languages are used (lang_opts is then empty) - if (!features.hasLanguages()) - return docstring(); - - if (needsSpecialBabelCall(features)) - babel_call = "\\usepackage[" + lang_opts + "]{babel}"; - - return from_utf8(babel_call); -} - bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, TexRow & texrow) const @@ -1075,8 +1032,25 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, language_options << ','; language_options << language->babel(); } - if (!language_options.str().empty() - && !needsSpecialBabelCall(features)) + // if Vietnamese is used, babel must directly be loaded + // with language options, not in the class options, see + // http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg129417.html + size_t viet = language_options.str().find("vietnam"); + // viet = string::npos when not found + // the same is for all other languages that are not directly supported by + // babel, but where LaTeX-packages add babel support. + // this is currently the case for Latvian, Lithuanian, and Mongolian + size_t latvian = language_options.str().find("latvian"); + size_t lithu = language_options.str().find("lithuanian"); + size_t mongo = language_options.str().find("mongolian"); + // if Japanese is used, babel must directly be loaded + // with language options, not in the class options, see + // http://bugzilla.lyx.org/show_bug.cgi?id=4597#c4 + size_t japan = language_options.str().find("japanese"); + if (lyxrc.language_global_options && !language_options.str().empty() + && viet == string::npos && japan == string::npos + && latvian == string::npos && lithu == string::npos + && mongo == string::npos) clsoptions << language_options.str() << ','; } @@ -1319,7 +1293,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, || features.isRequired("vietnamese") || features.isRequired("japanese") ) ) { // FIXME UNICODE - lyxpreamble += babelCall(features, language_options.str()) + '\n'; + lyxpreamble += from_utf8(babelCall(language_options.str())) + '\n'; lyxpreamble += from_utf8(features.getBabelOptions()) + '\n'; } @@ -1433,7 +1407,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, && !features.isRequired("vietnamese") && !features.isRequired("japanese")) { // FIXME UNICODE - lyxpreamble += babelCall(features, language_options.str()) + '\n'; + lyxpreamble += from_utf8(babelCall(language_options.str())) + '\n'; lyxpreamble += from_utf8(features.getBabelOptions()) + '\n'; } @@ -1895,6 +1869,39 @@ string const BufferParams::dvips_options() const } +string BufferParams::babelCall(string const & lang_opts) const +{ + string lang_pack = lyxrc.language_package; + if (lang_pack != "\\usepackage{babel}") + return lang_pack; + // suppress the babel call when there is no babel language defined + // for the document language in the lib/languages file and if no + // other languages are used (lang_opts is then empty) + if (lang_opts.empty()) + return string(); + // If Vietnamese is used, babel must directly be loaded with the + // language options, see + // http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg129417.html + size_t viet = lang_opts.find("vietnam"); + // viet = string::npos when not found + // the same is for all other languages that are not directly supported by + // babel, but where LaTeX-packages add babel support. + // this is currently the case for Latvian, Lithuanian, and Mongolian + size_t latvian = lang_opts.find("latvian"); + size_t lithu = lang_opts.find("lithuanian"); + size_t mongo = lang_opts.find("mongolian"); + // If Japanese is used, babel must directly be loaded with the + // language options, see + // http://bugzilla.lyx.org/show_bug.cgi?id=4597#c4 + size_t japan = lang_opts.find("japanese"); + if (!lyxrc.language_global_options || viet != string::npos + || japan != string::npos || latvian != string::npos + || lithu != string::npos || mongo != string::npos) + return "\\usepackage[" + lang_opts + "]{babel}"; + return lang_pack; +} + + void BufferParams::writeEncodingPreamble(odocstream & os, LaTeXFeatures & features, TexRow & texrow) const { diff --git a/src/BufferParams.h b/src/BufferParams.h index 743467a9a6..a0d8c6bbf2 100644 --- a/src/BufferParams.h +++ b/src/BufferParams.h @@ -306,6 +306,8 @@ public: }; /// std::string paperSizeName(PapersizePurpose purpose) const; + /// set up if and how babel is called + std::string babelCall(std::string const & lang_opts) const; /// handle inputenc etc. void writeEncodingPreamble(odocstream & os, LaTeXFeatures & features, TexRow & texrow) const; diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 6c6994ff17..02c4748195 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -431,18 +431,6 @@ bool LaTeXFeatures::hasLanguages() const } -bool LaTeXFeatures::hasLanguage(string const & lang) const -{ - LanguageList::const_iterator cit = UsedLanguages_.begin(); - LanguageList::const_iterator const end = UsedLanguages_.end(); - for (; cit != end; ++cit) { - if ((*cit)->babel() == lang) - return true; - } - return false; -} - - string LaTeXFeatures::getLanguages() const { ostringstream languages; diff --git a/src/LaTeXFeatures.h b/src/LaTeXFeatures.h index d93b96b092..1a484f730c 100644 --- a/src/LaTeXFeatures.h +++ b/src/LaTeXFeatures.h @@ -89,8 +89,6 @@ public: void useLanguage(Language const *); /// bool hasLanguages() const; - /// \return true if the passed language name is used in the document. - bool hasLanguage(std::string const & lang) const; /// std::string getLanguages() const; ///