+/// 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);
+}
+