#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 {
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")
<< 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,
+ 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) {
int const result = latex.scanLogFile(terr);
if (result & LaTeX::ERRORS)
- bufferErrors(buffer, terr, errorList);
+ buffer.bufferErrors(terr, errorList);
return true;
}
namespace {
-class showMessage : public std::unary_function<docstring, void>, public boost::signals::trackable {
+class ShowMessage
+ : public boost::signals::trackable {
public:
- showMessage(Buffer const & b) : buffer_(b) {};
- void operator()(docstring const & m) const
- {
- buffer_.message(m);
- }
+ ShowMessage(Buffer const & b) : buffer_(b) {}
+ void operator()(docstring const & msg) const { buffer_.message(msg); }
private:
Buffer const & buffer_;
};
bool Converters::runLaTeX(Buffer const & buffer, string const & command,
OutputParams const & runparams, ErrorList & errorList)
{
- buffer.busy(true);
+ buffer.setBusy(true);
buffer.message(_("Running LaTeX..."));
runparams.document_language = buffer.params().language->babel();
// do the LaTeX run(s)
- string const name = buffer.getLatexName();
+ string const name = buffer.latexName();
LaTeX latex(command, runparams, FileName(makeAbsPath(name)));
TeXErrors terr;
- showMessage show(buffer);
+ ShowMessage show(buffer);
latex.message.connect(show);
int const result = latex.run(terr);
if (result & LaTeX::ERRORS)
- bufferErrors(buffer, terr, errorList);
+ buffer.bufferErrors(terr, errorList);
// check return value from latex.run().
if ((result & LaTeX::NO_LOGFILE)) {
}
- buffer.busy(false);
+ buffer.setBusy(false);
int const ERROR_MASK =
LaTeX::NO_LOGFILE |