-} //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<string> backends = Backends(*buffer);
- 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 = 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->getLatexName(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" : bufferFormat(*buffer);
- 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->fileName()), 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->fileName(), ext);
- // We need to copy referenced files (e. g. included graphics
- // if format == "dvi") to the result dir.
- vector<ExportedFile> const files =
- runparams.exportdata->externalFiles(format);
- string const dest = onlyPath(result_file);
- CopyStatus status = SUCCESS;
- for (vector<ExportedFile>::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 (fs::exists(tmp_result_file.toFilesystemEncoding())) {
- // 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<string> backends = Backends(buffer);
- for (vector<string>::const_iterator it = backends.begin();
- it != backends.end(); ++it)
- if (theConverters().isReachable(*it, format))
- return true;
- return false;
-}
-
-
-vector<Format const *> const
-Exporter::getExportableFormats(Buffer const & buffer, bool only_viewable)
-{
- vector<string> backends = Backends(buffer);
- vector<Format const *> result =
- theConverters().getReachable(backends[0], only_viewable, true);
- for (vector<string>::const_iterator it = backends.begin() + 1;
- it != backends.end(); ++it) {
- vector<Format const *> r =
- theConverters().getReachable(*it, only_viewable, false);
- result.insert(result.end(), r.begin(), r.end());
- }
- return result;
-}
-