X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverter.cpp;h=f2a463868e381d2badae7bd5aa23ee1304a32261;hb=e08e5afeea7194d95be1f02fe9484383574d203f;hp=02a5ba6d9670686a695f7cf41a35a4f3ece1a6ad;hpb=f630be890494c849981e4fb52ea4740506e92bed;p=lyx.git diff --git a/src/Converter.cpp b/src/Converter.cpp index 02a5ba6d96..f2a463868e 100644 --- a/src/Converter.cpp +++ b/src/Converter.cpp @@ -17,19 +17,27 @@ #include "buffer_funcs.h" #include "BufferParams.h" #include "debug.h" +#include "ErrorList.h" #include "Format.h" #include "gettext.h" #include "Language.h" #include "LaTeX.h" #include "Mover.h" -#include "frontends/Alert.h" +#include "frontends/alert.h" #include "support/filetools.h" #include "support/lyxlib.h" #include "support/os.h" -#include "support/path.h" -#include "support/systemcall.h" +#include "support/Package.h" +#include "support/Path.h" +#include "support/Systemcall.h" + +using std::endl; +using std::find_if; +using std::string; +using std::vector; +using std::distance; namespace lyx { @@ -49,6 +57,7 @@ using support::makeAbsPath; using support::makeRelPath; using support::onlyFilename; using support::onlyPath; +using support::package; using support::prefixIs; using support::quoteName; using support::removeExtension; @@ -56,12 +65,6 @@ using support::split; using support::subst; using support::Systemcall; -using std::endl; -using std::find_if; -using std::string; -using std::vector; -using std::distance; - namespace Alert = lyx::frontend::Alert; @@ -118,7 +121,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), - original_dir(false), need_aux(false) + need_aux(false) {} @@ -133,8 +136,6 @@ void Converter::readFlags() latex = true; else if (flag_name == "xml") xml = true; - else if (flag_name == "originaldir") - original_dir = true; else if (flag_name == "needaux") need_aux = true; else if (flag_name == "resultdir") @@ -288,10 +289,10 @@ OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path) bool Converters::convert(Buffer const * buffer, - FileName const & from_file, FileName const & to_file, - FileName const & orig_from, - string const & from_format, string const & to_format, - ErrorList & errorList, int conversionflags) + FileName const & from_file, FileName const & to_file, + FileName const & orig_from, + string const & from_format, string const & to_format, + ErrorList & errorList, int conversionflags) { if (from_format == to_format) return move(from_format, from_file, to_file, false); @@ -380,7 +381,12 @@ bool Converters::convert(Buffer const * buffer, FileName real_outfile; if (outfile == infile) { real_outfile = infile; - outfile = FileName(addName(buffer->temppath(), "tmpfile.out")); + // when importing, a buffer does not necessarily exist + if (buffer) + outfile = FileName(addName(buffer->temppath(), "tmpfile.out")); + else + outfile = FileName(addName(package().temp_dir().absFilename(), + "tmpfile.out")); } if (conv.latex) { @@ -399,12 +405,10 @@ bool Converters::convert(Buffer const * buffer, } // FIXME UNICODE - string const infile2 = (conv.original_dir) - ? infile.absFilename() : to_utf8(makeRelPath(from_utf8(infile.absFilename()), - from_utf8(path))); - string const outfile2 = (conv.original_dir) - ? outfile.absFilename() : to_utf8(makeRelPath(from_utf8(outfile.absFilename()), - from_utf8(path))); + string const infile2 = + to_utf8(makeRelPath(from_utf8(infile.absFilename()), from_utf8(path))); + string const outfile2 = + to_utf8(makeRelPath(from_utf8(outfile.absFilename()), from_utf8(path))); string command = conv.command; command = subst(command, token_from, quoteName(infile2)); @@ -427,43 +431,41 @@ bool Converters::convert(Buffer const * buffer, buffer->message(_("Executing command: ") + from_utf8(command)); - Systemcall::Starttype const type = (dummy) - ? Systemcall::DontWait : Systemcall::Wait; Systemcall one; int res; - if (conv.original_dir) { - FileName path(buffer->filePath()); - support::Path p(path); - res = one.startscript(type, + if (dummy) { + res = one.startscript(Systemcall::DontWait, to_filesystem8bit(from_utf8(command))); - } else - res = one.startscript(type, - to_filesystem8bit(from_utf8(command))); - - if (!real_outfile.empty()) { - Mover const & mover = getMover(conv.to); - if (!mover.rename(outfile, real_outfile)) - res = -1; - else - LYXERR(Debug::FILES) - << "renaming file " << outfile - << " to " << real_outfile - << endl; - // Finally, don't forget to tell any future - // converters to use the renamed file... - outfile = real_outfile; - } - - if (!conv.parselog.empty()) { - string const logfile = infile2 + ".log"; - string const script = libScriptSearch(conv.parselog); - string const command2 = script + - " < " + quoteName(infile2 + ".out") + - " > " + quoteName(logfile); - one.startscript(Systemcall::Wait, - to_filesystem8bit(from_utf8(command2))); - if (!scanLog(*buffer, command, makeAbsPath(logfile, path), errorList)) - return false; + // 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))); + if (!real_outfile.empty()) { + Mover const & mover = getMover(conv.to); + if (!mover.rename(outfile, real_outfile)) + res = -1; + else + LYXERR(Debug::FILES) + << "renaming file " << outfile + << " to " << real_outfile + << endl; + // Finally, don't forget to tell any future + // converters to use the renamed file... + outfile = real_outfile; + } + + if (!conv.parselog.empty()) { + string const logfile = infile2 + ".log"; + string const script = libScriptSearch(conv.parselog); + string const command2 = script + + " < " + quoteName(infile2 + ".out") + + " > " + quoteName(logfile); + one.startscript(Systemcall::Wait, + to_filesystem8bit(from_utf8(command2))); + if (!scanLog(*buffer, command, makeAbsPath(logfile, path), errorList)) + return false; + } } if (res) {