#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include <cctype>
-
#include "converter.h"
#include "lyxrc.h"
#include "buffer.h"
#include "bufferview_funcs.h"
#include "LaTeX.h"
-#include "LyXView.h"
#include "lyx_cb.h" // ShowMessage()
#include "gettext.h"
#include "BufferView.h"
#include "debug.h"
#include "frontends/Alert.h"
+#include "frontends/LyXView.h"
#include "support/filetools.h"
#include "support/lyxfunctional.h"
#include "support/path.h"
#include "support/systemcall.h"
+#include "BoostFormat.h"
+
+#include <cctype>
+
+#ifndef CXX_GLOBAL_CSTD
+using std::isdigit;
+#endif
+
using std::vector;
using std::queue;
using std::endl;
string const token_from("$$i");
string const token_base("$$b");
string const token_to("$$o");
+string const token_path("$$p");
//////////////////////////////////////////////////////////////////////////////
}
+// FIXME: horrednously mis-named, especially given the other ::add
+// function
void Formats::add(string const & name, string const & extension,
string const & prettyname, string const & shortcut)
{
format->isChildFormat())
format = getFormat(format->parentFormat());
if (!format || format->viewer().empty()) {
+#if USE_BOOST_FORMAT
Alert::alert(_("Cannot view file"),
- _("No information for viewing ")
- + prettyName(format_name));
+ boost::io::str(boost::format(_("No information for viewing %1$s"))
+ % prettyName(format_name)));
+#else
+ Alert::alert(_("Cannot view file"),
+ _("No information for viewing ")
+ + prettyName(format_name));
+#endif
return false;
}
if (format_name == "dvi" &&
!lyxrc.view_dvi_paper_option.empty()) {
- command += " " + lyxrc.view_dvi_paper_option;
+ command += ' ' + lyxrc.view_dvi_paper_option;
string paper_size = converters.papersize(buffer);
if (paper_size == "letter")
paper_size = "us";
- command += " " + paper_size;
+ command += ' ' + paper_size;
if (buffer->params.orientation
== BufferParams::ORIENTATION_LANDSCAPE)
command += 'r';
}
- command += " " + QuoteName(OnlyFilename((filename)));
+ if (!contains(command, token_from))
+ command += ' ' + token_from;
+
+ command = subst(command, token_from,
+ QuoteName(OnlyFilename(filename)));
+ command = subst(command, token_path, QuoteName(OnlyPath(filename)));
lyxerr[Debug::FILES] << "Executing command: " << command << endl;
ShowMessage(buffer, _("Executing command:"), command);
bool operator<(Converter const & a, Converter const & b)
{
- int const i = compare_no_case(a.From->prettyname(),
- b.From->prettyname());
+ // use the compare_ascii_no_case instead of compare_no_case,
+ // because in turkish, 'i' is not the lowercase version of 'I',
+ // and thus turkish locale breaks parsing of tags.
+ int const i = compare_ascii_no_case(a.From->prettyname(),
+ b.From->prettyname());
if (i == 0)
- return compare_no_case(a.To->prettyname(), b.To->prettyname())
+ return compare_ascii_no_case(a.To->prettyname(), b.To->prettyname())
< 0;
else
return i < 0;
EdgePath edgepath = getPath(from_format, to_format);
if (edgepath.empty()) {
- Alert::alert(_("Cannot convert file"),
- _("No information for converting from ")
- + formats.prettyName(from_format) + _(" to ")
- + formats.prettyName(to_format));
return false;
}
subst(conv.result_file,
token_base, OnlyFilename(from_base)));
+ // if input and output files are equal, we use a
+ // temporary file as intermediary (JMarc)
+ string real_outfile;
+ if (outfile == infile) {
+ real_outfile = infile;
+ outfile = AddName(buffer->tmppath, "tmpfile.out");
+ }
+
if (conv.latex) {
run_latex = true;
string command = subst(conv.command, token_from, "");
command = subst(command, token_from, QuoteName(infile2));
command = subst(command, token_base, QuoteName(from_base));
command = subst(command, token_to, QuoteName(outfile2));
+ command = LibScriptSearch(command);
if (!conv.parselog.empty())
command += " 2> " + QuoteName(infile2 + ".out");
} else
res = one.startscript(type, command);
+ if (!real_outfile.empty()) {
+ if (!lyx::rename(outfile, real_outfile))
+ res = -1;
+ else
+ lyxerr[Debug::FILES]
+ << "renaming file " << outfile
+ << " to " << real_outfile
+ << endl;
+ }
+
if (!conv.parselog.empty()) {
string const logfile = infile2 + ".log";
- string script =
- LibFileSearch("scripts",
- conv.parselog);
- if (script.empty())
- script = conv.parselog;
+ string const script = LibScriptSearch(conv.parselog);
string const command2 = script +
" < " + QuoteName(infile2 + ".out") +
" > " + QuoteName(logfile);
_("You should try to fix them."));
else
Alert::alert(_("Cannot convert file"),
- "Error while executing",
+ _("Error while executing"),
command.substr(0, 50));
return false;
}
string to = subst(conv.result_dir,
token_base, to_base);
if (!lyx::rename(from, to)) {
+#if USE_BOOST_FORMAT
+ Alert::alert(_("Error while trying to move directory:"),
+ from, boost::io::str(boost::format(_("to %1$s")) % to));
+#else
Alert::alert(_("Error while trying to move directory:"),
- from, ("to ") + to);
+ from, _("to ") + to);
+#endif
return false;
}
}
return move(outfile, to_file, conv.latex);
}
+
// If from = /path/file.ext and to = /path2/file2.ext2 then this method
// moves each /path/file*.ext file to /path2/file2*.ext2'
bool Converters::move(string const & from, string const & to, bool copy)
for (vector<string>::const_iterator it = files.begin();
it != files.end(); ++it)
if (prefixIs(*it, base)) {
- string from2 = path + *it;
+ string const from2 = path + *it;
string to2 = to_base + it->substr(base.length());
to2 = ChangeExtension(to2, to_extension);
lyxerr[Debug::FILES] << "moving " << from2
<< " to " << to2 << endl;
- bool moved = (copy)
+ bool const moved = (copy)
? lyx::copy(from2, to2)
: lyx::rename(from2, to2);
if (!moved && no_errors) {
+#if USE_BOOST_FORMAT
+ Alert::alert(_("Error while trying to move file:"),
+ from2, boost::io::str(boost::format(_("to %1$s")) % to2));
+#else
Alert::alert(_("Error while trying to move file:"),
from2, _("to ") + to2);
+#endif
no_errors = false;
}
}
BufferView * bv = buffer->getUser();
if (bv) {
- bv->owner()->prohibitInput();
+ bv->owner()->busy(true);
// all error insets should have been removed by now
}
if ((result & LaTeX::ERRORS)) {
// Insert all errors as errors boxes
bv->insertErrors(terr);
- bv->redraw();
+#warning repaint() or update() or nothing ?
+ bv->repaint();
bv->fitCursor();
}
- bv->owner()->allowInput();
+ bv->owner()->busy(false);
}
if ((result & LaTeX::ERRORS)) {
}
string head;
split(command, head, ' ');
+#if USE_BOOST_FORMAT
+ Alert::alert(boost::io::str(boost::format(_("There were errors during running of %1$s")) % head),
+ s, t);
+#else
Alert::alert(_("There were errors during running of ") + head,
s, t);
+#endif
return false;
} else if (result & LaTeX::NO_OUTPUT) {
string const s = _("The operation resulted in");
BufferView * bv = buffer->getUser();
if (bv) {
- bv->owner()->prohibitInput();
+ bv->owner()->busy(true);
bv->owner()->message(_("Running LaTeX..."));
// all the autoinsets have already been removed
}
LaTeX latex(command, name, buffer->filePath());
TeXErrors terr;
int result = latex.run(terr,
- bv ? bv->owner()->getLyXFunc() : 0);
+ bv ? &bv->owner()->getLyXFunc() : 0);
if (bv) {
if ((result & LaTeX::ERRORS)) {
// Insert all errors as errors boxes
bv->insertErrors(terr);
- bv->redraw();
+#warning repaint() or update() or nothing ?
+ bv->repaint();
bv->fitCursor();
}
}
}
if (bv)
- bv->owner()->allowInput();
+ bv->owner()->busy(false);
int const ERROR_MASK =
LaTeX::NO_LOGFILE |