]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
Fix -Winconsistent-missing-override
[lyx.git] / src / BufferParams.cpp
index f1425b83354277384b7e38e39554b3a97df7d461..4d7550ac480532304ec8b45a9484e576d87ce382 100644 (file)
@@ -1703,7 +1703,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
                              FileName const & filepath) const
 {
        // DocumentMetadata must come before anything else
-       if (features.isAvailable("LaTeX-2022/06/01")
+       if (features.isAvailableAtLeastFrom("LaTeX", 2022, 6)
            && !containsOnly(document_metadata, " \n\t")) {
                // Check if the user preamble contains uncodable glyphs
                odocstringstream doc_metadata;
@@ -1922,7 +1922,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
        if (useNonTeXFonts) {
                // Babel (as of 2017/11/03) loads fontspec itself
                if (!features.isProvided("fontspec")
-                   && !(features.useBabel() && features.isAvailable("babel-2017/11/03")))
+                   && !(features.useBabel() && features.isAvailableAtLeastFrom("babel", 2017, 11, 3)))
                        os << "\\usepackage{fontspec}\n";
                if (features.mustProvide("unicode-math")
                    && features.isAvailable("unicode-math"))
@@ -3388,56 +3388,51 @@ void BufferParams::writeEncodingPreamble(otexstream & os,
        if (useNonTeXFonts)
                return;
 
+       string const doc_encoding = encoding().latexName();
+       Encoding::Package const package = encoding().package();
+       // (dvi)lualatex uses luainputenc rather than inputenc
+       string const inputenc_package = 
+               (features.runparams().flavor == Flavor::LuaTeX
+                || features.runparams().flavor == Flavor::DviLuaTeX)
+               ? "luainputenc" : "inputenc";
+
        if (inputenc == "auto-legacy") {
-               string const doc_encoding =
-                       language->encoding()->latexName();
-               Encoding::Package const package =
-                       language->encoding()->package();
-
-               // Create list of inputenc options:
-               set<string> encoding_set;
-               // luainputenc fails with more than one encoding
-               if (features.runparams().flavor != Flavor::LuaTeX
-                       && features.runparams().flavor != Flavor::DviLuaTeX)
-                       // list all input encodings used in the document
-                       encoding_set = features.getEncodingSet(doc_encoding);
-
-               // The "japanese" babel-language requires  the pLaTeX engine
+               // The "japanese" babel language requires the pLaTeX engine
                // which conflicts with "inputenc".
                // See http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg129680.html
-               if ((!encoding_set.empty() || package == Encoding::inputenc)
-                   && !features.isRequired("japanese")
+               if (!features.isRequired("japanese")
                    && !features.isProvided("inputenc")) {
-                       os << "\\usepackage[";
-                       set<string>::const_iterator it = encoding_set.begin();
-                       set<string>::const_iterator const end = encoding_set.end();
-                       if (it != end) {
-                               os << from_ascii(*it);
-                               ++it;
-                       }
-                       for (; it != end; ++it)
-                               os << ',' << from_ascii(*it);
                        if (package == Encoding::inputenc) {
-                               if (!encoding_set.empty())
-                                       os << ',';
-                               os << from_ascii(doc_encoding);
+                               // Main language requires (lua)inputenc
+                               os << "\\usepackage[" << doc_encoding << "]{"
+                                  << inputenc_package << "}\n";
+                       } else {
+                               // We might have an additional language that requires inputenc
+                               set<string> encoding_set = features.getEncodingSet(doc_encoding);
+                               bool inputenc = false;
+                               for (auto const & enc : encoding_set) {
+                                       if (encodings.fromLaTeXName(enc)
+                                           && encodings.fromLaTeXName(enc)->package() == Encoding::inputenc) {
+                                               inputenc = true;
+                                               break;
+                                       }
+                               }
+                               if (inputenc)
+                                       // load (lua)inputenc without options
+                                       // (the encoding is loaded later)
+                                       os << "\\usepackage{" << inputenc_package << "}\n";
                        }
-                       if (features.runparams().flavor == Flavor::LuaTeX
-                           || features.runparams().flavor == Flavor::DviLuaTeX)
-                               os << "]{luainputenc}\n";
-                       else
-                               os << "]{inputenc}\n";
                }
        } else if (inputenc != "auto-legacy-plain") {
-               switch (encoding().package()) {
+               switch (package) {
                case Encoding::none:
                case Encoding::CJK:
                case Encoding::japanese:
                        if (encoding().iconvName() != "UTF-8"
-                               && !features.runparams().isFullUnicode())
-                         // don't default to [utf8]{inputenc} with TeXLive >= 18
-                         os << "\\ifdefined\\UseRawInputEncoding\n"
-                                << "  \\UseRawInputEncoding\\fi\n";
+                           && !features.runparams().isFullUnicode()
+                           && features.isAvailableAtLeastFrom("LaTeX", 2018, 4))
+                               // don't default to [utf8]{inputenc} with LaTeX >= 2018/04
+                               os << "\\UseRawInputEncoding\n";
                        break;
                case Encoding::inputenc:
                        // do not load inputenc if japanese is used
@@ -3445,7 +3440,6 @@ void BufferParams::writeEncodingPreamble(otexstream & os,
                        if (features.isRequired("japanese")
                            || features.isProvided("inputenc"))
                                break;
-                       string const doc_encoding = encoding().latexName();
                        // The 2022 release of ucs.sty uses the default utf8
                        // inputenc encoding with 'utf8x' inputenc if the ucs
                        // package is not loaded before inputenc.
@@ -3454,23 +3448,18 @@ void BufferParams::writeEncodingPreamble(otexstream & os,
                        // Thus we load ucs.sty in order to keep functionality
                        // that would otherwise be silently dropped.
                        if (doc_encoding == "utf8x"
-                           && features.isAvailable("ucs-2022/08/07")
+                           && features.isAvailableAtLeastFrom("ucs", 2022, 8, 7)
                            && !features.isProvided("ucs"))
                                os << "\\usepackage{ucs}\n";
-                       os << "\\usepackage[" << from_ascii(doc_encoding);
-                       if (features.runparams().flavor == Flavor::LuaTeX
-                           || features.runparams().flavor == Flavor::DviLuaTeX)
-                               os << "]{luainputenc}\n";
-                       else
-                               os << "]{inputenc}\n";
+                       os << "\\usepackage[" << doc_encoding << "]{"
+                          << inputenc_package << "}\n";
                        break;
                }
        }
-       if (inputenc == "auto-legacy-plain" || features.isRequired("japanese")) {
-               // don't default to [utf8]{inputenc} with TeXLive >= 18
-               os << "\\ifdefined\\UseRawInputEncoding\n";
-               os << "  \\UseRawInputEncoding\\fi\n";
-       }
+       if ((inputenc == "auto-legacy-plain" || features.isRequired("japanese"))
+           && features.isAvailableAtLeastFrom("LaTeX", 2018, 4))
+               // don't default to [utf8]{inputenc} with LaTeX >= 2018/04
+               os << "\\UseRawInputEncoding\n";
 }
 
 
@@ -3518,7 +3507,7 @@ string const BufferParams::loadFonts(LaTeXFeatures & features) const
                // As of 2017/11/03, Babel has its own higher-level
                // interface on top of fontspec that is to be used.
                bool const babelfonts = features.useBabel()
-                               && features.isAvailable("babel-2017/11/03");
+                               && features.isAvailableAtLeastFrom("babel", 2017, 11, 3);
                string const texmapping =
                        (features.runparams().flavor == Flavor::XeTeX) ?
                        "Mapping=tex-text" : "Ligatures=TeX";