]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
Correct tex2lyx/roundtrip/test-structure.tex test.
[lyx.git] / src / BufferParams.cpp
index a73194d310854746e4e24eb8b092e6ee157f2451..029e5b524c27cbb1c2c900b99c57f76b5e7f8f64 100644 (file)
@@ -429,6 +429,9 @@ BufferParams::BufferParams()
 
        output_sync = false;
        use_refstyle = true;
+
+       // map current author
+       author_map_[pimpl_->authorlist.get(0).bufferId()] = 0;
 }
 
 
@@ -504,6 +507,12 @@ AuthorList const & BufferParams::authors() const
 }
 
 
+void BufferParams::addAuthor(Author a)
+{
+       author_map_[a.bufferId()] = pimpl_->authorlist.record(a);
+}
+
+
 BranchList & BufferParams::branchlist()
 {
        return pimpl_->branchlist;
@@ -876,7 +885,7 @@ string BufferParams::readToken(Lexer & lex, string const & token,
                istringstream ss(lex.getString());
                Author a;
                ss >> a;
-               author_map[a.bufferId()] = pimpl_->authorlist.record(a);
+               addAuthor(a);
        } else if (token == "\\paperorientation") {
                string orient;
                lex >> orient;
@@ -1106,7 +1115,7 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const
           << "\" \"" << fonts_sans[1] << '"'
           << "\n\\font_typewriter \"" << fonts_typewriter[0]
           << "\" \"" << fonts_typewriter[1] << '"'
-          << "\n\\font_math " << fonts_math[0]
+          << "\n\\font_math \"" << fonts_math[0]
           << "\" \"" << fonts_math[1] << '"'
           << "\n\\font_default_family " << fonts_default_family
           << "\n\\use_non_tex_fonts " << convert<string>(useNonTeXFonts)
@@ -2321,7 +2330,7 @@ string BufferParams::bufferFormat() const
        string format = documentClass().outputFormat();
        if (format == "latex") {
                if (useNonTeXFonts)
-                       return "xetex"; // FIXME: why not "luatex"?
+                       return "xetex"; // actually "xetex or luatex"
                if (encoding().package() == Encoding::japanese)
                        return "platex";
        }
@@ -2941,15 +2950,13 @@ docstring BufferParams::getGraphicsDriver(string const & package) const
 void BufferParams::writeEncodingPreamble(otexstream & os,
                                         LaTeXFeatures & features) const
 {
-       // "inputenc" package not required with non-TeX fonts.
-       if (useNonTeXFonts)
-               return;
-       // "inputenc"  fails with XeTeX (even in 8-bit compatiblitly mode) and with TeX fonts,
-       // (this is a bug in the "inputenc" package see #9740).
-       if (features.runparams().flavor == OutputParams::XETEX)
+       // XeTeX/LuaTeX: (see also #9740)
+       // With Unicode fonts we use utf8-plain without encoding package.
+       // With TeX fonts, we cannot use utf8-plain, but "inputenc" fails.
+       // XeTeX must use ASCII encoding, for LuaTeX, we load
+       // "luainputenc" (see below).
+       if (useNonTeXFonts || features.runparams().flavor == OutputParams::XETEX)
                return;
-       // For LuaTeX with TeX fonts, we can load
-       // the "luainputenc" package with the specified encoding(s) (see below).
 
        if (inputenc == "auto") {
                string const doc_encoding =
@@ -2957,10 +2964,12 @@ void BufferParams::writeEncodingPreamble(otexstream & os,
                Encoding::Package const package =
                        language->encoding()->package();
 
-               // Create a list with all the input encodings used
-               // in the document
-               set<string> encodings =
-                       features.getEncodingSet(doc_encoding);
+               // Create list of inputenc options:
+               set<string> encodings;
+               // luainputenc fails with more than one encoding
+               if (!features.runparams().isFullUnicode()) // if we reach this point, this means LuaTeX with TeX fonts
+                       // list all input encodings used in the document
+                       encodings = features.getEncodingSet(doc_encoding);
 
                // If the "japanese" package (i.e. pLaTeX) is used,
                // inputenc must be omitted.
@@ -3141,11 +3150,13 @@ string const BufferParams::loadFonts(LaTeXFeatures & features) const
 
 Encoding const & BufferParams::encoding() const
 {
-       // FIXME: additionally, we must check for runparams().flavor == XeTeX
-       // or runparams.isFullUnicode() to care for the combination
-       // of XeTeX and TeX-fonts (see #9740).
-       // Currently, we reset the encoding in Buffer::makeLaTeXFile
-       // (for export) and Buffer::writeLaTeXSource (for preview).
+       // Main encoding for LaTeX output.
+       // 
+       // Exception: XeTeX with 8-bit TeX fonts requires ASCII (see #9740).
+       // As the "flavor" is only known once export started, this
+       // cannot be handled here. Instead, runparams.encoding is set
+       // to ASCII in Buffer::makeLaTeXFile (for export)
+       // and Buffer::writeLaTeXSource (for preview).
        if (useNonTeXFonts)
                return *(encodings.fromLyXName("utf8-plain"));
        if (inputenc == "auto" || inputenc == "default")