]> git.lyx.org Git - lyx.git/blobdiff - src/converter.C
Lars says _(_(b)) is a bug ... fix
[lyx.git] / src / converter.C
index 0881b06d213aaa9805dda78ec8f3e957f56fa29c..c37a0028855308fd9db5a3156a92a895167c8caf 100644 (file)
 #pragma implementation
 #endif
 
-#include <cctype>
-
 #include "converter.h"
 #include "lyxrc.h"
 #include "buffer.h"
 #include "bufferview_funcs.h"
 #include "LaTeX.h"
-#include "frontends/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
@@ -51,6 +53,7 @@ namespace {
 string const token_from("$$i");
 string const token_base("$$b");
 string const token_to("$$o");
+string const token_path("$$p");
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -174,9 +177,15 @@ bool Formats::view(Buffer const * buffer, string const & filename,
            format->isChildFormat())
                format = getFormat(format->parentFormat());
        if (!format || format->viewer().empty()) {
+#if USE_BOOST_FORMAT
+               Alert::alert(_("Cannot view file"),
+                            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));
+                            _("No information for viewing ")
+                            + prettyName(format_name));
+#endif
                           return false;
        }
 
@@ -184,17 +193,22 @@ bool Formats::view(Buffer const * buffer, string const & filename,
 
        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);
@@ -264,10 +278,13 @@ void Converter::readFlags()
 
 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;
@@ -606,6 +623,14 @@ bool Converters::convert(Buffer const * buffer,
                                  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, "");
@@ -630,6 +655,7 @@ bool Converters::convert(Buffer const * buffer,
                        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");
@@ -655,6 +681,16 @@ bool Converters::convert(Buffer const * buffer,
                        } 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 const script = LibScriptSearch(conv.parselog);
@@ -672,7 +708,7 @@ bool Converters::convert(Buffer const * buffer,
                                                   _("You should try to fix them."));
                                else
                                        Alert::alert(_("Cannot convert file"),
-                                                  "Error while executing",
+                                                  _("Error while executing"),
                                                   command.substr(0, 50));
                                return false;
                        }
@@ -694,8 +730,13 @@ bool Converters::convert(Buffer const * buffer,
                        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, ("to ") + to);
+                                          from, boost::io::str(boost::format(_("to %1$s")) % to));
+#else
+                               Alert::alert(_("Error while trying to move directory:"),
+                                          from, _("to ") + to);
+#endif
                                return false;
                        }
                }
@@ -704,6 +745,7 @@ bool Converters::convert(Buffer const * buffer,
                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)
@@ -730,8 +772,13 @@ bool Converters::move(string const & from, string const & to, bool 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;
                        }
                }
@@ -796,7 +843,8 @@ bool Converters::scanLog(Buffer const * buffer, string const & command,
                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();
@@ -816,8 +864,13 @@ bool Converters::scanLog(Buffer const * buffer, string const & command,
                }
                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");
@@ -847,13 +900,14 @@ bool Converters::runLaTeX(Buffer const * buffer, string const & command)
        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();
                }
        }