]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
inputenc only expects one option
[lyx.git] / src / BufferParams.cpp
index 95aa9136d25c59ce5aad57f45b9ebb6bc17bd453..71390d747960d026484d4e81b55010f6463cdf83 100644 (file)
@@ -370,6 +370,9 @@ BufferParams::Impl::Impl()
        authorlist.record(Author(from_utf8(lyxrc.user_name),
                                 from_utf8(lyxrc.user_email),
                                 from_utf8(lyxrc.user_initials)));
+       // set comparison author
+       authorlist.record(Author(from_utf8("Document Comparison"),
+                                docstring(), docstring()));
 }
 
 
@@ -1979,6 +1982,8 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
        if (!features.runparams().includeall && !included_children_.empty()) {
                os << "\\includeonly{";
                bool first = true;
+               // we do not use "auto const &" here, because incfile is modified later
+               // coverity[auto_causes_copy]
                for (auto incfile : included_children_) {
                        FileName inc = makeAbsPath(incfile, filepath.absFileName());
                        string mangled = DocFileName(changeExtension(inc.absFileName(), ".tex")).
@@ -2191,7 +2196,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
                        os << from_utf8(output_sync_macro) +"\n";
                else if (features.runparams().flavor == Flavor::LaTeX)
                        os << "\\usepackage[active]{srcltx}\n";
-               else if (features.runparams().flavor == Flavor::PdfLaTeX)
+               else
                        os << "\\synctex=-1\n";
        }
 
@@ -2275,7 +2280,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
                if (!tmppreamble.str.empty())
                        atlyxpreamble << "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
                                         "LyX specific LaTeX commands.\n"
-                                     << move(tmppreamble)
+                                     << std::move(tmppreamble)
                                      << '\n';
        }
        // the text class specific preamble
@@ -3389,35 +3394,15 @@ void BufferParams::writeEncodingPreamble(otexstream & os,
                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
                // which conflicts with "inputenc".
                // See http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg129680.html
-               if ((!encoding_set.empty() || package == Encoding::inputenc)
+               if (package == Encoding::inputenc
                    && !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);
-                       }
-                       if (features.runparams().flavor == Flavor::LuaTeX
+                       os << "\\usepackage["
+                          << from_ascii(doc_encoding);
+                       if (features.runparams().flavor == Flavor::LuaTeX
                            || features.runparams().flavor == Flavor::DviLuaTeX)
                                os << "]{luainputenc}\n";
                        else
@@ -3440,8 +3425,20 @@ void BufferParams::writeEncodingPreamble(otexstream & os,
                        if (features.isRequired("japanese")
                            || features.isProvided("inputenc"))
                                break;
-                       os << "\\usepackage[" << from_ascii(encoding().latexName());
-                       if (features.runparams().flavor == Flavor::LuaTeX
+                       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.
+                       // This breaks existing documents that use utf8x
+                       // and also makes utf8x redundant.
+                       // 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.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
@@ -3805,6 +3802,7 @@ void BufferParams::copyForAdvFR(const BufferParams & bp)
 {
        string const & lang = bp.language->lang();
        setLanguage(lang);
+       quotes_style = bp.quotes_style;
        layout_modules_ = bp.layout_modules_;
        string const & doc_class = bp.documentClass().name();
        setBaseClass(doc_class);
@@ -3825,5 +3823,11 @@ string const BufferParams::bibFileEncoding(string const & file) const
 }
 
 
+BufferParams const & defaultBufferParams()
+{
+       static BufferParams default_params;
+       return default_params;
+}
+
 
 } // namespace lyx