X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverter.cpp;h=a27d742a713c70bd0c6f9eb021b60d19cd5880a3;hb=fa6b388cb3b77995a88ef98987b542ee7bf5d98f;hp=c76b574995795c71119d30d382c6940c127a1004;hpb=665405da0a4d238ec998c5122e84efaca98a51a8;p=lyx.git diff --git a/src/Converter.cpp b/src/Converter.cpp index c76b574995..a27d742a71 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; @@ -50,6 +50,7 @@ string const token_base("$$b"); string const token_to("$$o"); string const token_path("$$p"); string const token_orig_path("$$r"); +string const token_orig_from("$$f"); string const token_encoding("$$e"); string const token_latex_encoding("$$E"); @@ -98,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) {} @@ -124,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); @@ -174,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); @@ -236,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") @@ -250,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; } @@ -317,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"; @@ -333,6 +350,8 @@ bool Converters::convert(Buffer const * buffer, // This has the added benefit that all other files that may be // generated by the converter are deleted when LyX closes and do not // clutter the real working directory. + // FIXME: This does not work if path is an UNC path on windows + // (bug 6127). string const path(onlyPath(from_file.absFileName())); // Prevent the compiler from optimizing away p FileName pp(path); @@ -388,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 @@ -410,6 +448,7 @@ bool Converters::convert(Buffer const * buffer, command = subst(command, token_to, quoteName(outfile2)); command = subst(command, token_path, quoteName(onlyPath(infile.absFileName()))); 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); @@ -687,7 +726,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();