X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverter.cpp;h=ee17f57445e1b61bed6f33ee0e4c308d003e65dd;hb=0430132aa049f2a97280bcbcff69f71d42ed7d98;hp=307eb23e21f62ebd743162bb102290e55dcc51a1;hpb=9c55af4a223ce4db29d643251109e245665344bd;p=lyx.git diff --git a/src/Converter.cpp b/src/Converter.cpp index 307eb23e21..ee17f57445 100644 --- a/src/Converter.cpp +++ b/src/Converter.cpp @@ -29,6 +29,7 @@ #include "support/FileNameList.h" #include "support/filetools.h" #include "support/gettext.h" +#include "support/lassert.h" #include "support/lstrings.h" #include "support/os.h" #include "support/Package.h" @@ -299,15 +300,16 @@ bool Converters::convert(Buffer const * buffer, string const command = os::python() + ' ' + quoteName(libFileSearch("scripts", "convertDefault.py").toFilesystemEncoding()) + - ' ' + - quoteName(from_ext + ':' + from_file.toFilesystemEncoding()) + - ' ' + - quoteName(to_ext + ':' + to_file.toFilesystemEncoding()); + ' ' + from_ext + ' ' + + quoteName(from_file.toFilesystemEncoding()) + + ' ' + to_ext + ' ' + + quoteName(to_file.toFilesystemEncoding()); LYXERR(Debug::FILES, "No converter defined! " "I use convertDefault.py:\n\t" << command); Systemcall one; - one.startscript(Systemcall::Wait, command, buffer ? - buffer->filePath() : string()); + one.startscript(Systemcall::Wait, command, + buffer ? buffer->filePath() : string(), + buffer ? buffer->layoutPos() : string()); if (to_file.isReadableFile()) { if (conversionflags & try_cache) ConverterCache::get().add(orig_from, @@ -455,10 +457,12 @@ bool Converters::convert(Buffer const * buffer, if (!conv.parselog().empty()) command += " 2> " + quoteName(infile2 + ".out"); - if (conv.from() == "dvi" && conv.to() == "ps") + // it is not actually not necessary to test for buffer here, + // but it pleases coverity. + if (buffer && conv.from() == "dvi" && conv.to() == "ps") command = add_options(command, buffer->params().dvips_options()); - else if (conv.from() == "dvi" && prefixIs(conv.to(), "pdf")) + else if (buffer && conv.from() == "dvi" && prefixIs(conv.to(), "pdf")) command = add_options(command, dvipdfm_options(buffer->params())); @@ -472,13 +476,16 @@ bool Converters::convert(Buffer const * buffer, if (dummy) { res = one.startscript(Systemcall::DontWait, to_filesystem8bit(from_utf8(command)), - buffer ? buffer->filePath() : string()); + buffer ? buffer->filePath() : string(), + buffer ? buffer->layoutPos() : string()); // We're not waiting for the result, so we can't do anything // else here. } else { res = one.startscript(Systemcall::Wait, to_filesystem8bit(from_utf8(command)), buffer ? buffer->filePath() + : string(), + buffer ? buffer->layoutPos() : string()); if (!real_outfile.empty()) { Mover const & mover = getMover(conv.to()); @@ -499,7 +506,8 @@ bool Converters::convert(Buffer const * buffer, " > " + quoteName(logfile); one.startscript(Systemcall::Wait, to_filesystem8bit(from_utf8(command2)), - buffer->filePath()); + buffer->filePath(), + buffer->layoutPos()); if (!scanLog(*buffer, command, makeAbsPath(logfile, path), errorList)) return false; } @@ -642,7 +650,8 @@ bool Converters::runLaTeX(Buffer const & buffer, string const & command, // do the LaTeX run(s) string const name = buffer.latexName(); LaTeX latex(command, runparams, FileName(makeAbsPath(name)), - buffer.filePath()); + buffer.filePath(), buffer.layoutPos(), + buffer.lastPreviewError()); TeXErrors terr; ShowMessage show(buffer); latex.message.connect(show); @@ -651,16 +660,27 @@ bool Converters::runLaTeX(Buffer const & buffer, string const & command, if (result & LaTeX::ERRORS) buffer.bufferErrors(terr, errorList); - // check return value from latex.run(). - if ((result & LaTeX::NO_LOGFILE) && !buffer.isClone()) { + if (!errorList.empty()) { + // We will show the LaTeX Errors GUI later which contains + // specific error messages so it would be repetitive to give + // e.g. the "finished with an error" dialog in addition. + } + else if (result & LaTeX::NO_LOGFILE) { docstring const str = bformat(_("LaTeX did not run successfully. " "Additionally, LyX could not locate " "the LaTeX log %1$s."), from_utf8(name)); Alert::error(_("LaTeX failed"), str); - } else if ((result & LaTeX::NO_OUTPUT) && !buffer.isClone()) { + } else if (result & LaTeX::NONZERO_ERROR) { + docstring const str = + bformat(_( "The external program\n%1$s\n" + "finished with an error. " + "It is recommended you fix the cause of the external " + "program's error (check the logs). "), from_utf8(command)); + Alert::error(_("LaTeX failed"), str); + } else if (result & LaTeX::NO_OUTPUT) { Alert::warning(_("Output is empty"), - _("An empty output file was generated.")); + _("No output file was generated.")); } @@ -672,7 +692,6 @@ bool Converters::runLaTeX(Buffer const & buffer, string const & command, LaTeX::NO_OUTPUT; return (result & ERROR_MASK) == 0; - } @@ -689,6 +708,8 @@ void Converters::buildGraph() for (; it != end ; ++it) { int const from = formats.getNumber(it->from()); int const to = formats.getNumber(it->to()); + LASSERT(from >= 0, continue); + LASSERT(to >= 0, continue); G_.addEdge(from, to); } }