X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverter.cpp;h=8085b15a8505b23d0f24cf50ccb971bc1215e9d1;hb=f76d6997b710f7fb5180f0cd05415786de5d9417;hp=5d4a1326f9cbab4d2f34fd27c04861d7e57dad92;hpb=dd2185a4a633380466c3f006ffbc040d8f18d52b;p=lyx.git diff --git a/src/Converter.cpp b/src/Converter.cpp index 5d4a1326f9..8085b15a85 100644 --- a/src/Converter.cpp +++ b/src/Converter.cpp @@ -32,7 +32,7 @@ #include "support/lstrings.h" #include "support/os.h" #include "support/Package.h" -#include "support/Path.h" +#include "support/PathChanger.h" #include "support/Systemcall.h" using namespace std; @@ -99,7 +99,7 @@ Converter::Converter(string const & f, string const & t, string const & c, string const & l) : from(f), to(t), command(c), flags(l), From(0), To(0), latex(false), xml(false), - need_aux(false) + need_aux(false), nice(false) {} @@ -125,6 +125,8 @@ void Converter::readFlags() result_file = flag_value; else if (flag_name == "parselog") parselog = flag_value; + else if (flag_name == "nice") + nice = true; } if (!result_dir.empty() && result_file.empty()) result_file = "index." + formats.extension(to); @@ -175,16 +177,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,12 +248,15 @@ 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) { Converter const & conv = converterlist_[*cit]; - if (conv.latex) + if (conv.latex) { + if (conv.latex_flavor == "latex") + return OutputParams::LATEX; if (conv.latex_flavor == "xelatex") return OutputParams::XETEX; if (conv.latex_flavor == "lualatex") @@ -251,10 +265,12 @@ OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path) return OutputParams::DVILUATEX; if (conv.latex_flavor == "pdflatex") return OutputParams::PDFLATEX; + } if (conv.xml) return OutputParams::XML; } - return OutputParams::LATEX; + return buffer ? buffer->params().getOutputFlavor() + : OutputParams::LATEX; } @@ -318,7 +334,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 +407,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 @@ -415,7 +450,6 @@ bool Converters::convert(Buffer const * buffer, command = subst(command, token_orig_path, quoteName(onlyPath(orig_from.absFileName()))); command = subst(command, token_orig_from, quoteName(onlyFileName(orig_from.absFileName()))); command = subst(command, token_encoding, buffer ? buffer->params().encoding().iconvName() : string()); - command = libScriptSearch(command); if (!conv.parselog.empty()) command += " 2> " + quoteName(infile2 + ".out"); @@ -459,8 +493,7 @@ bool Converters::convert(Buffer const * buffer, if (!conv.parselog.empty()) { string const logfile = infile2 + ".log"; - string const script = libScriptSearch(conv.parselog); - string const command2 = script + + string const command2 = conv.parselog + " < " + quoteName(infile2 + ".out") + " > " + quoteName(logfile); one.startscript(Systemcall::Wait, @@ -691,7 +724,7 @@ vector const Converters::getReachable(string const & from, bool const only_viewable, bool const clear_visited, set const & excludes) { - set excluded_numbers;; + set excluded_numbers; set::const_iterator sit = excludes.begin(); set::const_iterator const end = excludes.end();