]> git.lyx.org Git - features.git/commitdiff
Use the right latex backend when a converter needs aux files.
authorEnrico Forestieri <forenr@lyx.org>
Wed, 11 Apr 2012 16:19:11 +0000 (18:19 +0200)
committerEnrico Forestieri <forenr@lyx.org>
Wed, 11 Apr 2012 18:32:27 +0000 (20:32 +0200)
If a converter specifies the needaux flag, latex (or xelatex) is
always run to produce the needed auxiliary files. This is wrong
because there are documents that can only be compiled with a specific
backend and thus the conversion may fail. On the other hand, even if
the document specifies the backend to be used, LyX ignores this info.

This commit rectifies this behavior by letting LyX run the same flavor
of the latex backend that shall be used for previewing the document
also for producing the auxiliary files.

(cherry picked from commit 3285ce1d5cb9ba79af700d004401115269e97ada)

Conflicts:

src/Converter.cpp

14 files changed:
lib/fonts/cmex10.ttf [changed mode: 0644->0755]
lib/fonts/cmmi10.ttf [changed mode: 0644->0755]
lib/fonts/cmr10.ttf [changed mode: 0644->0755]
lib/fonts/cmsy10.ttf [changed mode: 0644->0755]
lib/fonts/esint10.ttf [changed mode: 0644->0755]
lib/fonts/eufm10.ttf [changed mode: 0644->0755]
lib/fonts/msam10.ttf [changed mode: 0644->0755]
lib/fonts/msbm10.ttf [changed mode: 0644->0755]
lib/fonts/rsfs10.ttf [changed mode: 0644->0755]
lib/fonts/wasy10.ttf [changed mode: 0644->0755]
src/Buffer.cpp
src/Converter.cpp
src/Converter.h
status.20x

old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index d131491e98dc037abfa5eeddf53cca6ea1964716..2ee94227132a68984b9a252acdd0c21fee510f57 100644 (file)
@@ -3544,7 +3544,7 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
                        }
                        return false;
                }
-               runparams.flavor = converters.getFlavor(path);
+               runparams.flavor = converters.getFlavor(path, this);
 
        } else {
                backend_format = format;
index 631b8475745f6a1538a833916e5e767fdf0417ab..abaae0ea7253709029343b8db18c7a0cfecb5d6a 100644 (file)
@@ -189,16 +189,25 @@ void Converters::add(string const & from, string const & to,
        }
        converter.readFlags();
 
-       // If we have both latex & pdflatex, we set latex_command to latex.
        // The latex_command is used to update the .aux file when running
        // a converter that uses it.
-       if (converter.latex
-           && (latex_command_.empty() || converter.latex_flavor == "latex"))
-               latex_command_ = subst(command, token_from, "");
-       // Similarly, set xelatex_command to xelatex.
-       if (converter.latex
-           && (xelatex_command_.empty() || converter.latex_flavor == "xelatex"))
-               xelatex_command_ = subst(command, token_from, "");
+       if (converter.latex) {
+               if (latex_command_.empty() ||
+                   converter.latex_flavor == "latex")
+                       latex_command_ = subst(command, token_from, "");
+               if (dvilualatex_command_.empty() ||
+                   converter.latex_flavor == "dvilualatex")
+                       dvilualatex_command_ = subst(command, token_from, "");
+               if (lualatex_command_.empty() ||
+                   converter.latex_flavor == "lualatex")
+                       lualatex_command_ = subst(command, token_from, "");
+               if (pdflatex_command_.empty() ||
+                   converter.latex_flavor == "pdflatex")
+                       pdflatex_command_ = subst(command, token_from, "");
+               if (xelatex_command_.empty() ||
+                   converter.latex_flavor == "xelatex")
+                       xelatex_command_ = subst(command, token_from, "");
+       }
 
        if (it == converterlist_.end()) {
                converterlist_.push_back(converter);
@@ -258,6 +267,7 @@ void Converters::sort()
 
 
 OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path)
+                                          Buffer const * buffer)
 {
        for (Graph::EdgePath::const_iterator cit = path.begin();
             cit != path.end(); ++cit) {
@@ -274,7 +284,8 @@ OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path)
                if (conv.xml)
                        return OutputParams::XML;
        }
-       return OutputParams::LATEX;
+       return buffer ? buffer->params().getOutputFlavor()
+                     : OutputParams::LATEX;
 }
 
 
@@ -338,7 +349,7 @@ bool Converters::convert(Buffer const * buffer,
        // buffer is only invalid for importing, and then runparams is not
        // used anyway.
        OutputParams runparams(buffer ? &buffer->params().encoding() : 0);
-       runparams.flavor = getFlavor(edgepath);
+       runparams.flavor = getFlavor(edgepath, buffer);
 
        if (buffer) {
                runparams.use_japanese = buffer->params().bufferFormat() == "platex";
@@ -403,14 +414,33 @@ bool Converters::convert(Buffer const * buffer,
                        if (!runLaTeX(*buffer, command, runparams, errorList))
                                return false;
                } else {
-                       if (conv.need_aux && !run_latex
-                           && !latex_command_.empty()) {
-                               string const command = (buffer && buffer->params().useNonTeXFonts) ?
-                                       xelatex_command_ : latex_command_;
-                               LYXERR(Debug::FILES, "Running " << command
-                                       << " to update aux file");
-                               if (!runLaTeX(*buffer, command, runparams, errorList))
-                                       return false;
+                       if (conv.need_aux && !run_latex) {
+                               string command;
+                               switch (runparams.flavor) {
+                               case OutputParams::DVILUATEX:
+                                       command = dvilualatex_command_;
+                                       break;
+                               case OutputParams::LUATEX:
+                                       command = lualatex_command_;
+                                       break;
+                               case OutputParams::PDFLATEX:
+                                       command = pdflatex_command_;
+                                       break;
+                               case OutputParams::XETEX:
+                                       command = xelatex_command_;
+                                       break;
+                               default:
+                                       command = latex_command_;
+                                       break;
+                               }
+                               if (!command.empty()) {
+                                       LYXERR(Debug::FILES, "Running "
+                                               << command
+                                               << " to update aux file");
+                                       if (!runLaTeX(*buffer, command,
+                                                     runparams, errorList))
+                                               return false;
+                               }
                        }
 
                        // FIXME UNICODE
index 13dc1471f3b9aae84ff57a1de8a6f868247e441d..c0f34e47ae1ec8e90ce47ad6872a618353faa2b1 100644 (file)
@@ -115,7 +115,8 @@ public:
        ///
        Graph::EdgePath getPath(std::string const & from, std::string const & to);
        ///
-       OutputParams::FLAVOR getFlavor(Graph::EdgePath const & path);
+       OutputParams::FLAVOR getFlavor(Graph::EdgePath const & path,
+                                      Buffer const * buffer = 0);
        /// Flags for converting files
        enum ConversionFlags {
                /// No special flags
@@ -158,6 +159,12 @@ private:
        ///
        std::string latex_command_;
        ///
+       std::string dvilualatex_command_;
+       ///
+       std::string lualatex_command_;
+       ///
+       std::string pdflatex_command_;
+       ///
        std::string xelatex_command_;
        /// If \p from = /path/file.ext and \p to = /path2/file2.ext2 then
        /// this method moves each /path/file*.ext file to /path2/file2*.ext2
index 3b13998b73a8b3329028da9056ca493232e16e28..ce42ae5f96028acc7da3f3c7070755c27db6b766 100644 (file)
@@ -85,6 +85,10 @@ What's new
 - Fixed reading the bounding box from EPS figures with negative
   values (bug 8114).
 
+- Fix generation of auxiliary files for converters specifying the needaux
+  flag by using the same latex backend used for previewing the document
+  instead of always using the plain latex backend.
+
 
 * USER INTERFACE