X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverter.cpp;h=b63f77146a6f57e4dee563ef07d0e3066a553071;hb=a99f76477da0a61247f2c886ecd3598eb2dc09ac;hp=747dd88ada8e5824d29ced4da4a50e1d938c6a1c;hpb=a7018252b75316b7855f04c51be2342dc269f96c;p=features.git diff --git a/src/Converter.cpp b/src/Converter.cpp index 747dd88ada..b63f77146a 100644 --- a/src/Converter.cpp +++ b/src/Converter.cpp @@ -15,6 +15,7 @@ #include "Buffer.h" #include "BufferParams.h" #include "ConverterCache.h" +#include "TextClass.h" #include "Encoding.h" #include "ErrorList.h" #include "Format.h" @@ -23,6 +24,7 @@ #include "LaTeX.h" #include "LyXRC.h" #include "Mover.h" +#include "OutputParams.h" #include "ParagraphList.h" #include "Session.h" @@ -57,9 +59,11 @@ 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_textclass("$$c"); +string const token_modules("$$m"); string const token_encoding("$$e"); string const token_latex_encoding("$$E"); - +string const token_python("$${python}"); string const add_options(string const & command, string const & options) { @@ -147,6 +151,12 @@ void Converter::readFlags() } +void Converter::setCommand(std::string const & command) +{ + command_ = subst(command, token_python, os::python()); +} + + Converter const * Converters::getConverter(string const & from, string const & to) const { @@ -258,28 +268,28 @@ void Converters::updateLast(Formats const & formats) } -OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path, +Flavor Converters::getFlavor(Graph::EdgePath const & path, Buffer const * buffer) const { for (auto const & edge : path) { Converter const & conv = converterlist_[edge]; if (conv.latex() || conv.need_aux()) { if (conv.latex_flavor() == "latex") - return OutputParams::LATEX; + return Flavor::LaTeX; if (conv.latex_flavor() == "xelatex") - return OutputParams::XETEX; + return Flavor::XeTeX; if (conv.latex_flavor() == "lualatex") - return OutputParams::LUATEX; + return Flavor::LuaTeX; if (conv.latex_flavor() == "dvilualatex") - return OutputParams::DVILUATEX; + return Flavor::DviLuaTeX; if (conv.latex_flavor() == "pdflatex") - return OutputParams::PDFLATEX; + return Flavor::PdfLaTeX; } if (conv.docbook()) - return OutputParams::DOCBOOK5; + return Flavor::DocBook5; } return buffer ? buffer->params().getOutputFlavor() - : OutputParams::LATEX; + : Flavor::LaTeX; } @@ -465,7 +475,7 @@ Converters::RetVal Converters::convert(Buffer const * buffer, return FAILURE; } - // buffer is only invalid for importing, and then runparams is not + // buffer can only be null for importing, and then runparams is not // used anyway. OutputParams runparams(buffer ? &buffer->params().encoding() : nullptr); runparams.flavor = getFlavor(edgepath, buffer); @@ -477,7 +487,7 @@ Converters::RetVal Converters::convert(Buffer const * buffer, || suffixIs(bp.bufferFormat(), "-ja")) && bp.encoding().package() == Encoding::japanese; runparams.use_indices = bp.use_indices; - runparams.bibtex_command = bp.bibtexCommand(); + runparams.bibtex_command = bp.bibtexCommand(true); runparams.index_command = (bp.index_command == "default") ? string() : bp.index_command; runparams.document_language = bp.language->lang(); @@ -601,16 +611,16 @@ Converters::RetVal Converters::convert(Buffer const * buffer, LASSERT(buffer, return FAILURE); string command; switch (runparams.flavor) { - case OutputParams::DVILUATEX: + case Flavor::DviLuaTeX: command = dvilualatex_command_; break; - case OutputParams::LUATEX: + case Flavor::LuaTeX: command = lualatex_command_; break; - case OutputParams::PDFLATEX: + case Flavor::PdfLaTeX: command = pdflatex_command_; break; - case OutputParams::XETEX: + case Flavor::XeTeX: command = xelatex_command_; break; default: @@ -636,13 +646,25 @@ Converters::RetVal Converters::convert(Buffer const * buffer, to_utf8(makeRelPath(from_utf8(outfile.absFileName()), from_utf8(path))); string command = conv.command(); + BufferParams const & bparams = buffer ? buffer->params() : defaultBufferParams(); command = subst(command, token_from, quoteName(infile2)); command = subst(command, token_base, quoteName(from_base)); 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 = subst(command, token_textclass, quoteName(bparams.documentClass().name())); + string modules = bparams.getModules().asString(); + // FIXME: remove when SystemCall uses QProcess with the list API. + // Currently the QProcess parser is not able to encode an + // empty argument as ""; work around this by passing a + // single comma, that will be interpreted as a list of two + // empty module names. + if (modules.empty()) + modules = ","; + command = subst(command, token_modules, quoteName(modules)); + command = subst(command, token_encoding, quoteName(bparams.encoding().iconvName())); + command = subst(command, token_python, os::python()); if (!conv.parselog().empty()) command += " 2> " + quoteName(infile2 + ".out"); @@ -683,11 +705,11 @@ Converters::RetVal Converters::convert(Buffer const * buffer, if (res == Systemcall::KILLED) { frontend::Alert::warning( _("Converter killed"), - bformat(_("The following converter was killed by the user.\n %1$s\n"), + bformat(_("The following converter was killed by the user.\n %1$s\n"), from_utf8(command))); return KILLED; } - + if (!real_outfile.empty()) { Mover const & mover = getMover(conv.to()); if (!mover.rename(outfile, real_outfile)) @@ -712,7 +734,7 @@ Converters::RetVal Converters::convert(Buffer const * buffer, if (res == Systemcall::KILLED) { frontend::Alert::warning( _("Converter killed"), - bformat(_("The following converter was killed by the user.\n %1$s\n"), + bformat(_("The following converter was killed by the user.\n %1$s\n"), from_utf8(command))); return KILLED; } @@ -727,13 +749,13 @@ Converters::RetVal Converters::convert(Buffer const * buffer, bformat(_("The conversion process was killed while running:\n%1$s"), wrapParas(from_utf8(command)))); return KILLED; - } + } if (res == Systemcall::TIMEOUT) { Alert::information(_("Process Timed Out"), bformat(_("The conversion process:\n%1$s\ntimed out before completing."), wrapParas(from_utf8(command)))); return KILLED; - } + } if (conv.to() == "program") { Alert::error(_("Build errors"), _("There were errors during the build process.")); @@ -832,7 +854,7 @@ bool Converters::scanLog(Buffer const & buffer, string const & /*command*/, FileName const & filename, ErrorList & errorList) { OutputParams runparams(nullptr); - runparams.flavor = OutputParams::LATEX; + runparams.flavor = Flavor::LaTeX; LaTeX latex("", runparams, filename); TeXErrors terr; int const result = latex.scanLogFile(terr); @@ -852,7 +874,7 @@ Converters::RetVal Converters::runLaTeX(Buffer const & buffer, string const & co // do the LaTeX run(s) string const name = buffer.latexName(); - LaTeX latex(command, runparams, FileName(makeAbsPath(name)), + LaTeX latex(command, runparams, makeAbsPath(name), buffer.filePath(), buffer.layoutPos(), buffer.isClone(), buffer.freshStartRequired()); TeXErrors terr;