]> git.lyx.org Git - lyx.git/blobdiff - src/converter.C
Fixes for/in insettabular/text.
[lyx.git] / src / converter.C
index 90babcaa0d66945604b5ea664c2782c8e9e956f1..01fe135b0b2e84756fdffd9c85741d142ca19adb 100644 (file)
@@ -179,18 +179,19 @@ bool Formats::View(Buffer const * buffer, string const & filename,
                        command += 'r';
         }
 
-       string command2 = command + " " + OnlyFilename(filename);
-       lyxerr << "Executing command: " << command2 << endl;
-       ShowMessage(buffer, _("Executing command:"), command2);
+       command += " " + QuoteName(OnlyFilename((filename)));
 
-       command += " " + QuoteName(filename);
+       lyxerr << "Executing command: " << command << endl;
+       ShowMessage(buffer, _("Executing command:"), command);
+
+       Path p(OnlyPath(filename));
        Systemcalls one;
-       int res = one.startscript(Systemcalls::SystemDontWait, command);
+       int const res = one.startscript(Systemcalls::SystemDontWait, command);
 
        if (res) {
                WriteAlert(_("Can not view file"),
                           _("Error while executing"),
-                          command2.substr(0, 50));
+                          command.substr(0, 50));
                return false;
        }
        return true;
@@ -248,7 +249,8 @@ void Converter::ReadFlags()
 
 bool operator<(Converter const & a, Converter const & b)
 {
-       int i = compare_no_case(a.From->prettyname(), b.From->prettyname());
+       int const i = compare_no_case(a.From->prettyname(),
+                                     b.From->prettyname());
        if (i == 0)
                return compare_no_case(a.To->prettyname(), b.To->prettyname())
                        < 0;
@@ -266,8 +268,8 @@ public:
                return c.from == from && c.to == to;
        }
 private:
-       string from;
-       string to;
+       string const & from;
+       string const & to;
 };
 
 
@@ -314,7 +316,7 @@ void Converters::Add(string const & from, string const & to,
        converter.ReadFlags();
        
        if (converter.latex && (latex_command.empty() || to == "dvi"))
-               latex_command = command;
+               latex_command = subst(command, token_from, "");
        // If we have both latex & pdflatex, we set latex_command to latex.
        // The latex_command is used to update the .aux file when running
        // a converter that uses it.
@@ -376,7 +378,7 @@ void Converters::Sort()
 
 int Converters::BFS_init(string const & start, bool clear_visited)
 {
-       int s = formats.GetNumber(start);
+       int const s = formats.GetNumber(start);
        if (s < 0)
                return s;
 
@@ -395,12 +397,12 @@ vector<Format const *> const
 Converters::GetReachableTo(string const & target, bool clear_visited)
 {
        vector<Format const *> result;
-       int s = BFS_init(target, clear_visited);
+       int const s = BFS_init(target, clear_visited);
        if (s < 0)
                return result;
 
        while (!Q.empty()) {
-               int i = Q.front();
+               int const i = Q.front();
                Q.pop();
                if (i != s || target != "lyx")
                        result.push_back(&formats.Get(i));
@@ -426,7 +428,7 @@ Converters::GetReachable(string const & from, bool only_viewable,
                return result;
 
        while (!Q.empty()) {
-               int i = Q.front();
+               int const i = Q.front();
                Q.pop();
                Format const & format = formats.Get(i);
                if (format.name() == "lyx")
@@ -451,13 +453,13 @@ bool Converters::IsReachable(string const & from, string const & to)
        if (from == to)
                return true;
 
-       int s = BFS_init(from);
-       int t = formats.GetNumber(to);
+       int const s = BFS_init(from);
+       int const t = formats.GetNumber(to);
        if (s < 0 || t < 0)
                return false;
 
        while (!Q.empty()) {
-               int i = Q.front();
+               int const i = Q.front();
                Q.pop();
                if (i == t)
                        return true;
@@ -480,7 +482,7 @@ Converters::GetPath(string const & from, string const & to)
        if (from == to)
                return path;
 
-       int s = BFS_init(from);
+       int const s = BFS_init(from);
        int t = formats.GetNumber(to);
        if (s < 0 || t < 0)
                return path;
@@ -490,7 +492,7 @@ Converters::GetPath(string const & from, string const & to)
 
        bool found = false;
        while (!Q.empty()) {
-               int i = Q.front();
+               int const i = Q.front();
                Q.pop();
                if (i == t) {
                        found = true;
@@ -499,10 +501,10 @@ Converters::GetPath(string const & from, string const & to)
                for (vector<int>::iterator it = vertices[i].out_vertices.begin();
                     it != vertices[i].out_vertices.end(); ++it)
                        if (!visited[*it]) {
-                               int j = *it;
+                               int const j = *it;
                                visited[j] = true;
                                Q.push(j);
-                               int k = it - vertices[i].out_vertices.begin();
+                               int const k = it - vertices[i].out_vertices.begin();
                                prev_edge[j] = vertices[i].out_edges[k];
                                prev_vertex[j] = i;
                        }
@@ -540,10 +542,7 @@ bool Converters::Convert(Buffer const * buffer,
                                  formats.Extension(to_format));
 
        if (from_format == to_format)
-               if (from_file != to_file)
-                       return lyx::rename(from_file, to_file);
-               else
-                       return true;
+               return Move(from_file, to_file, false);
 
        EdgePath edgepath = GetPath(from_format, to_format);
        if (edgepath.empty()) {
@@ -665,20 +664,43 @@ bool Converters::Convert(Buffer const * buffer,
                                return false;
                        }
                }
-       } else if (outfile != to_file) {
-               bool moved = (conv.latex)
-                       ? lyx::copy(outfile, to_file)
-                       : lyx::rename(outfile, to_file);
-               if (!moved) {
-                       WriteAlert(_("Error while trying to move file:"),
-                                  outfile, _("to ") + to_file);
-                       return false;
-               }
-       }
-
-        return true;
+               return true;
+       } else 
+               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)
+{
+       if (from == to)
+               return true;
+
+       bool no_errors = true;
+       string const path = OnlyPath(from);
+       string const base = OnlyFilename(ChangeExtension(from, ""));
+       string const to_base = ChangeExtension(to, "");
+       string const to_extension = GetExtension(to);
+
+       vector<string> files = DirList(OnlyPath(from), GetExtension(from));
+       for (vector<string>::const_iterator it = files.begin();
+            it != files.end(); ++it)
+               if (prefixIs(*it, base)) {
+                       string from2 = path + *it;
+                       string to2 = to_base + (*it).substr(base.length());
+                       to2 = ChangeExtension(to2, to_extension);
+                       lyxerr << "moving " << from2 << " to " << to2 << endl;
+                       bool moved = (copy)
+                               ? lyx::copy(from2, to2)
+                               : lyx::rename(from2, to2);
+                       if (!moved && no_errors) {
+                               WriteAlert(_("Error while trying to move file:"),
+                                          from2, _("to ") + to2);
+                               no_errors = false;
+                       }
+               }
+       return no_errors;
+}
 
 bool Converters::Convert(Buffer const * buffer,
                        string const & from_file, string const & to_file_base,
@@ -690,6 +712,7 @@ bool Converters::Convert(Buffer const * buffer,
 }
 
 
+
 void Converters::BuildGraph()
 {
        vertices = vector<Vertex>(formats.size());
@@ -697,8 +720,8 @@ void Converters::BuildGraph()
 
        for (ConverterList::iterator it = converterlist.begin();
             it != converterlist.end(); ++it) {
-               int s = formats.GetNumber(it->from);
-               int t = formats.GetNumber(it->to);
+               int const s = formats.GetNumber(it->from);
+               int const t = formats.GetNumber(it->to);
                vertices[t].in_vertices.push_back(s);
                vertices[s].out_vertices.push_back(t);
                vertices[s].out_edges.push_back(it - converterlist.begin());