]> git.lyx.org Git - lyx.git/blobdiff - src/exporter.C
* src/LaTeX.C
[lyx.git] / src / exporter.C
index c45256208da4349ec139565e9a373f71580db98d..d3ff74a95ef7e4e2df0315353e267d19c2e17312 100644 (file)
@@ -132,7 +132,7 @@ CopyStatus copyFile(string const & format,
                }
        }
 
-       Mover const & mover = movers(format);
+       Mover const & mover = getMover(format);
        if (!mover.copy(sourceFile, destFile, latexFile))
                Alert::error(_("Couldn't copy file"),
                             bformat(_("Copying %1$s to %2$s failed."),
@@ -153,27 +153,20 @@ bool Exporter::Export(Buffer * buffer, string const & format,
        runparams.flavor = OutputParams::LATEX;
        runparams.linelen = lyxrc.plaintext_linelen;
        vector<string> backends = Backends(*buffer);
-       // FIXME: Without this test export to lyx1[34] would be through
-       // latex -> lyx -> lyx1[34], because the first backend below with a
-       // working conversion path is used. We should replace this test and
-       // the explicit loop below with a method
-       // getShortestPath(vector<string> const & from, string const & to)
-       // which returns the shortest path from one of the formats in 'from'
-       // to 'to'.
-       if ((format == "lyx13x" || format == "lyx14x") &&
-           !converters.getPath("lyx", format).empty())
-               backend_format = "lyx";
-       else if (find(backends.begin(), backends.end(), format) == backends.end()) {
+       if (find(backends.begin(), backends.end(), format) == backends.end()) {
+               // Get shortest path to format
+               Graph::EdgePath path;
                for (vector<string>::const_iterator it = backends.begin();
                     it != backends.end(); ++it) {
-                       Graph::EdgePath p = converters.getPath(*it, format);
-                       if (!p.empty()) {
-                               runparams.flavor = converters.getFlavor(p);
+                       Graph::EdgePath p = theConverters().getPath(*it, format);
+                       if (!p.empty() && (path.empty() || p.size() < path.size())) {
                                backend_format = *it;
-                               break;
+                               path = p;
                        }
                }
-               if (backend_format.empty()) {
+               if (!path.empty())
+                       runparams.flavor = theConverters().getFlavor(path);
+               else {
                        Alert::error(_("Couldn't export file"),
                                bformat(_("No information for exporting the format %1$s."),
                                   formats.prettyName(format)));
@@ -191,9 +184,9 @@ bool Exporter::Export(Buffer * buffer, string const & format,
        filename = changeExtension(filename,
                                   formats.extension(backend_format));
 
-       // Ascii backend
+       // Plain text backend
        if (backend_format == "text")
-               writeFileAscii(*buffer, FileName(filename), runparams);
+               writePlaintextFile(*buffer, FileName(filename), runparams);
        // no backend
        else if (backend_format == "lyx")
                buffer->writeFile(FileName(filename));
@@ -221,11 +214,12 @@ bool Exporter::Export(Buffer * buffer, string const & format,
        string const error_type = (format == "program")? "Build" : bufferFormat(*buffer);
        string const ext = formats.extension(format);
        FileName const tmp_result_file(changeExtension(filename, ext));
-       bool const success = converters.convert(buffer, FileName(filename),
+       bool const success = theConverters().convert(buffer, FileName(filename),
                tmp_result_file, FileName(buffer->fileName()), backend_format, format,
                buffer->errorList(error_type));
        // Emit the signal to show the error list.
-       buffer->errors(error_type);
+       if (format != backend_format)
+               buffer->errors(error_type);
        if (!success)
                return false;
 
@@ -291,7 +285,7 @@ bool Exporter::isExportable(Buffer const & buffer, string const & format)
        vector<string> backends = Backends(buffer);
        for (vector<string>::const_iterator it = backends.begin();
             it != backends.end(); ++it)
-               if (converters.isReachable(*it, format))
+               if (theConverters().isReachable(*it, format))
                        return true;
        return false;
 }
@@ -302,11 +296,11 @@ Exporter::getExportableFormats(Buffer const & buffer, bool only_viewable)
 {
        vector<string> backends = Backends(buffer);
        vector<Format const *> result =
-               converters.getReachable(backends[0], only_viewable, true);
+               theConverters().getReachable(backends[0], only_viewable, true);
        for (vector<string>::const_iterator it = backends.begin() + 1;
             it != backends.end(); ++it) {
                vector<Format const *>  r =
-                       converters.getReachable(*it, only_viewable, false);
+                       theConverters().getReachable(*it, only_viewable, false);
                result.insert(result.end(), r.begin(), r.end());
        }
        return result;