X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FExporter.cpp;h=8546b0a8ca8a76e912f02523611d06ff99adcd7e;hb=4056f0ddb150d0e5d60bc5941d51e365eed0ac86;hp=aa85dc6d1a8b9b4117d264020ec9fe58bb2ed324;hpb=f762cbf3c6ea1234b92a3964d7ef19361079a9ef;p=lyx.git diff --git a/src/Exporter.cpp b/src/Exporter.cpp index aa85dc6d1a..8546b0a8ca 100644 --- a/src/Exporter.cpp +++ b/src/Exporter.cpp @@ -18,86 +18,39 @@ #include "Exporter.h" -#include "Buffer.h" -#include "buffer_funcs.h" -#include "BufferParams.h" -#include "Converter.h" -#include "Format.h" -#include "gettext.h" -#include "LyXRC.h" #include "Mover.h" -#include "output_plaintext.h" -#include "OutputParams.h" + #include "frontends/alert.h" #include "support/filetools.h" -#include "support/lyxlib.h" +#include "support/gettext.h" +#include "support/lstrings.h" #include "support/Package.h" -#include - -using std::find; -using std::string; -using std::vector; +#include +using namespace std; +using namespace lyx::support; namespace lyx { -using support::addName; -using support::bformat; -using support::changeExtension; -using support::contains; -using support::FileName; -using support::makeAbsPath; -using support::makeDisplayPath; -using support::onlyFilename; -using support::onlyPath; -using support::package; -using support::prefixIs; - namespace Alert = frontend::Alert; -namespace fs = boost::filesystem; - -namespace { - -vector const Backends(Buffer const & buffer) -{ - vector v; - if (buffer.params().getTextClass().isTeXClassAvailable()) { - v.push_back(buffer.bufferFormat()); - // FIXME: Don't hardcode format names here, but use a flag - if (v.back() == "latex") - v.push_back("pdflatex"); - } - v.push_back("text"); - v.push_back("lyx"); - return v; -} - /// ask the user what to do if a file already exists -int checkOverwrite(FileName const & filename) +static int checkOverwrite(FileName const & filename) { - if (filename.exists()) { - docstring text = bformat(_("The file %1$s already exists.\n\n" - "Do you want to overwrite that file?"), - makeDisplayPath(filename.absFilename())); - return Alert::prompt(_("Overwrite file?"), - text, 0, 2, - _("&Overwrite"), _("Overwrite &all"), - _("&Cancel export")); - } - return 0; + if (!filename.exists()) + return 0; + docstring text = bformat(_("The file %1$s already exists.\n\n" + "Do you want to overwrite that file?"), + makeDisplayPath(filename.absFilename())); + return Alert::prompt(_("Overwrite file?"), + text, 0, 2, + _("&Overwrite"), _("Overwrite &all"), + _("&Cancel export")); } -enum CopyStatus { - SUCCESS, - FORCE, - CANCEL -}; - - /** copy file \p sourceFile to \p destFile. If \p force is false, the user * will be asked before existing files are overwritten. * \return @@ -142,174 +95,10 @@ CopyStatus copyFile(string const & format, return ret; } -} //namespace anon - - -bool Exporter::Export(Buffer * buffer, string const & format, - bool put_in_tempdir, string & result_file) -{ - string backend_format; - OutputParams runparams(&buffer->params().encoding()); - runparams.flavor = OutputParams::LATEX; - runparams.linelen = lyxrc.plaintext_linelen; - vector backends = Backends(*buffer); - if (find(backends.begin(), backends.end(), format) == backends.end()) { - // Get shortest path to format - Graph::EdgePath path; - for (vector::const_iterator it = backends.begin(); - it != backends.end(); ++it) { - Graph::EdgePath p = theConverters().getPath(*it, format); - if (!p.empty() && (path.empty() || p.size() < path.size())) { - backend_format = *it; - path = p; - } - } - 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))); - return false; - } - } else { - backend_format = format; - // FIXME: Don't hardcode format names here, but use a flag - if (backend_format == "pdflatex") - runparams.flavor = OutputParams::PDFLATEX; - } - - string filename = buffer->latexName(false); - filename = addName(buffer->temppath(), filename); - filename = changeExtension(filename, - formats.extension(backend_format)); - - // Plain text backend - if (backend_format == "text") - writePlaintextFile(*buffer, FileName(filename), runparams); - // no backend - else if (backend_format == "lyx") - buffer->writeFile(FileName(filename)); - // Docbook backend - else if (buffer->isDocBook()) { - runparams.nice = !put_in_tempdir; - buffer->makeDocBookFile(FileName(filename), runparams); - } - // LaTeX backend - else if (backend_format == format) { - runparams.nice = true; - if (!buffer->makeLaTeXFile(FileName(filename), string(), runparams)) - return false; - } else if (!lyxrc.tex_allows_spaces - && contains(buffer->filePath(), ' ')) { - Alert::error(_("File name error"), - _("The directory path to the document cannot contain spaces.")); - return false; - } else { - runparams.nice = false; - if (!buffer->makeLaTeXFile(FileName(filename), buffer->filePath(), runparams)) - return false; - } - - string const error_type = (format == "program") - ? "Build" : buffer->bufferFormat(); - string const ext = formats.extension(format); - FileName const tmp_result_file(changeExtension(filename, ext)); - bool const success = theConverters().convert(buffer, FileName(filename), - tmp_result_file, FileName(buffer->absFileName()), backend_format, format, - buffer->errorList(error_type)); - // Emit the signal to show the error list. - if (format != backend_format) - buffer->errors(error_type); - if (!success) - return false; - - if (put_in_tempdir) - result_file = tmp_result_file.absFilename(); - else { - result_file = changeExtension(buffer->absFileName(), ext); - // We need to copy referenced files (e. g. included graphics - // if format == "dvi") to the result dir. - vector const files = - runparams.exportdata->externalFiles(format); - string const dest = onlyPath(result_file); - CopyStatus status = SUCCESS; - for (vector::const_iterator it = files.begin(); - it != files.end() && status != CANCEL; ++it) { - string const fmt = - formats.getFormatFromFile(it->sourceName); - status = copyFile(fmt, it->sourceName, - makeAbsPath(it->exportName, dest), - it->exportName, status == FORCE); - } - if (status == CANCEL) { - buffer->message(_("Document export cancelled.")); - } else if (tmp_result_file.exists()) { - // Finally copy the main file - status = copyFile(format, tmp_result_file, - FileName(result_file), result_file, - status == FORCE); - buffer->message(bformat(_("Document exported as %1$s " - "to file `%2$s'"), - formats.prettyName(format), - makeDisplayPath(result_file))); - } else { - // This must be a dummy converter like fax (bug 1888) - buffer->message(bformat(_("Document exported as %1$s"), - formats.prettyName(format))); - } - } - - return true; -} - - -bool Exporter::Export(Buffer * buffer, string const & format, - bool put_in_tempdir) -{ - string result_file; - return Export(buffer, format, put_in_tempdir, result_file); -} - - -bool Exporter::preview(Buffer * buffer, string const & format) -{ - string result_file; - if (!Export(buffer, format, true, result_file)) - return false; - return formats.view(*buffer, FileName(result_file), format); -} - - -bool Exporter::isExportable(Buffer const & buffer, string const & format) -{ - vector backends = Backends(buffer); - for (vector::const_iterator it = backends.begin(); - it != backends.end(); ++it) - if (theConverters().isReachable(*it, format)) - return true; - return false; -} - - -vector const -Exporter::getExportableFormats(Buffer const & buffer, bool only_viewable) -{ - vector backends = Backends(buffer); - vector result = - theConverters().getReachable(backends[0], only_viewable, true); - for (vector::const_iterator it = backends.begin() + 1; - it != backends.end(); ++it) { - vector r = - theConverters().getReachable(*it, only_viewable, false); - result.insert(result.end(), r.begin(), r.end()); - } - return result; -} - -ExportedFile::ExportedFile(FileName const & s, string const & e) : - sourceName(s), exportName(e) {} +ExportedFile::ExportedFile(FileName const & s, string const & e) + : sourceName(s), exportName(e) +{} bool operator==(ExportedFile const & f1, ExportedFile const & f2)