#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/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 {
using support::dirList;
using support::FileName;
using support::getExtension;
-using support::isFileReadable;
using support::libFileSearch;
using support::libScriptSearch;
using support::makeAbsPath;
using support::makeRelPath;
using support::onlyFilename;
using support::onlyPath;
+using support::package;
using support::prefixIs;
using support::quoteName;
using support::removeExtension;
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;
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)
{}
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")
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);
<< command << endl;
Systemcall one;
one.startscript(Systemcall::Wait, command);
- if (isFileReadable(to_file)) {
+ if (to_file.isFileReadable()) {
if (conversionflags & try_cache)
ConverterCache::get().add(orig_from,
to_format, to_file);
cit != edgepath.end(); ++cit) {
Converter const & conv = converterlist_[*cit];
bool dummy = conv.To->dummy() && conv.to != "program";
- if (!dummy)
+ if (!dummy) {
LYXERR(Debug::FILES) << "Converting from "
<< conv.from << " to " << conv.to << endl;
+ }
infile = outfile;
outfile = FileName(conv.result_dir.empty()
? changeExtension(from_file.absFilename(), conv.To->extension())
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) {
}
// 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));
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,
- to_filesystem8bit(from_utf8(command)));
- } else
- res = one.startscript(type,
+ if (dummy) {
+ res = one.startscript(Systemcall::DontWait,
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) {