diff --git a/src/Buffer.cpp b/src/Buffer.cpp index d5e337603c..76ec7d81ab 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -3695,7 +3695,7 @@ Buffer::ExportStatus Buffer::doExport(string const & target, bool put_in_tempdir } return ExportNoPathToFormat; } - runparams.flavor = converters.getFlavor(path); + runparams.flavor = converters.getFlavor(path, this); } else { backend_format = format; diff --git a/src/Converter.cpp b/src/Converter.cpp index 5d4a1326f9..ed5f893f7b 100644 --- a/src/Converter.cpp +++ b/src/Converter.cpp @@ -175,16 +175,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); @@ -237,7 +246,8 @@ void Converters::updateLast(Formats const & formats) } -OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path) +OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path, + Buffer const * buffer) { for (Graph::EdgePath::const_iterator cit = path.begin(); cit != path.end(); ++cit) { @@ -254,7 +264,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; } @@ -318,7 +329,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"; @@ -391,14 +402,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 diff --git a/src/Converter.h b/src/Converter.h index f71f123a61..8f131bba36 100644 --- a/src/Converter.h +++ b/src/Converter.h @@ -113,7 +113,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 @@ -156,6 +157,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