]> git.lyx.org Git - lyx.git/blobdiff - src/Converter.cpp
rev 19644: I forgot this.
[lyx.git] / src / Converter.cpp
index cd6ec60146d6d3bfbfb80e9caab969b14dc0ef48..f2a463868e381d2badae7bd5aa23ee1304a32261 100644 (file)
@@ -17,6 +17,7 @@
 #include "buffer_funcs.h"
 #include "BufferParams.h"
 #include "debug.h"
+#include "ErrorList.h"
 #include "Format.h"
 #include "gettext.h"
 #include "Language.h"
 #include "support/filetools.h"
 #include "support/lyxlib.h"
 #include "support/os.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) {