- if (usePolyglossia())
- return false;
- if (bufferParams().lang_package == "default")
- return (lyxrc.language_package_selection != LyXRC::LP_NONE)
- || (bufferParams().language->lang() != lyxrc.default_language
- && !bufferParams().language->babel().empty())
- || this->hasLanguages();
- return (bufferParams().lang_package != "none")
- || (bufferParams().language->lang() != lyxrc.default_language
- && !bufferParams().language->babel().empty())
- || this->hasLanguages();
-}
+ 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.
+ * English alone normally does not require babel (since it is
+ * the default language of LaTeX). However, in some cases we
+ * need to surpass this exception (see Font::validate).
+ */
+ bool const polyglossia_required =
+ isRequired("polyglossia")
+ && isAvailable("polyglossia")
+ && !isProvided("babel")
+ && this->hasOnlyPolyglossiaLanguages();
+ bool const babel_required =
+ ((englishbabel || bufferParams().language->lang() != "english")
+ && !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;
+ }