Factorize out the hardcoded babel tests. This whole thing is a real mess...

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@26858 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2008-10-12 07:56:06 +00:00
parent bc8e829ce0
commit 4d4ee5d7a6
2 changed files with 47 additions and 55 deletions

View File

@ -935,6 +935,49 @@ void BufferParams::validate(LaTeXFeatures & features) const
features.require("japanese"); 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, bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
TexRow & texrow) const TexRow & texrow) const
@ -1025,24 +1068,8 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
language_options << ','; language_options << ',';
language_options << language->babel(); language_options << language->babel();
} }
// FIXME: don't hardcode this! if (!language_options.str().empty()
// if Vietnamese is used, babel must directly be loaded && !needsSpecialBabelCall(features))
// with language options, not in the class options, see
// http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg129417.html
//
// 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 language options, not in the class options, see
// http://bugzilla.lyx.org/show_bug.cgi?id=4597#c4
if (lyxrc.language_global_options && !language_options.str().empty()
&& !features.hasLanguage("vietnam")
&& !features.hasLanguage("latvian")
&& !features.hasLanguage("lithuanian")
&& !features.hasLanguage("mongolian")
&& !features.hasLanguage("japanese"))
clsoptions << language_options.str() << ','; clsoptions << language_options.str() << ',';
} }
@ -1281,7 +1308,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
|| features.isRequired("vietnamese") || features.isRequired("vietnamese")
|| features.isRequired("japanese") ) ) { || features.isRequired("japanese") ) ) {
// FIXME UNICODE // FIXME UNICODE
lyxpreamble += from_utf8(babelCall(language_options.str())) + '\n'; lyxpreamble += babelCall(features, language_options.str()) + '\n';
lyxpreamble += from_utf8(features.getBabelOptions()) + '\n'; lyxpreamble += from_utf8(features.getBabelOptions()) + '\n';
} }
@ -1395,7 +1422,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
&& !features.isRequired("vietnamese") && !features.isRequired("vietnamese")
&& !features.isRequired("japanese")) { && !features.isRequired("japanese")) {
// FIXME UNICODE // FIXME UNICODE
lyxpreamble += from_utf8(babelCall(language_options.str())) + '\n'; lyxpreamble += babelCall(features, language_options.str()) + '\n';
lyxpreamble += from_utf8(features.getBabelOptions()) + '\n'; lyxpreamble += from_utf8(features.getBabelOptions()) + '\n';
} }
@ -1857,39 +1884,6 @@ 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, void BufferParams::writeEncodingPreamble(odocstream & os,
LaTeXFeatures & features, TexRow & texrow) const LaTeXFeatures & features, TexRow & texrow) const
{ {

View File

@ -304,8 +304,6 @@ public:
}; };
/// ///
std::string paperSizeName(PapersizePurpose purpose) const; 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. /// handle inputenc etc.
void writeEncodingPreamble(odocstream & os, LaTeXFeatures & features, void writeEncodingPreamble(odocstream & os, LaTeXFeatures & features,
TexRow & texrow) const; TexRow & texrow) const;