X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fexporter.C;h=853e8b7db18a73ba8b4506178224bbeb33916d52;hb=b02d655347adec5e866e5014f4656b47e09cd269;hp=5e6b2aad6ab240a18c3e2dc3dc47d134d6ce7ca3;hpb=a6444784dca48da8b1f7723be12069b2e1dbb4c5;p=lyx.git diff --git a/src/exporter.C b/src/exporter.C index 5e6b2aad6a..853e8b7db1 100644 --- a/src/exporter.C +++ b/src/exporter.C @@ -36,23 +36,26 @@ #include -using lyx::support::addName; -using lyx::support::bformat; -using lyx::support::changeExtension; -using lyx::support::contains; -using lyx::support::makeAbsPath; -using lyx::support::makeDisplayPath; -using lyx::support::onlyFilename; -using lyx::support::onlyPath; -using lyx::support::package; -using lyx::support::prefixIs; - -using lyx::docstring; + +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; using std::find; using std::string; using std::vector; +namespace Alert = frontend::Alert; namespace fs = boost::filesystem; namespace { @@ -73,12 +76,12 @@ vector const Backends(Buffer const & buffer) /// ask the user what to do if a file already exists -int checkOverwrite(string const & filename) +int checkOverwrite(FileName const & filename) { - if (fs::exists(filename)) { + if (fs::exists(filename.toFilesystemEncoding())) { docstring text = bformat(_("The file %1$s already exists.\n\n" "Do you want to over-write that file?"), - makeDisplayPath(filename)); + makeDisplayPath(filename.absFilename())); return Alert::prompt(_("Over-write file?"), text, 0, 2, _("&Over-write"), _("Over-write &all"), @@ -104,7 +107,7 @@ enum CopyStatus { * - CANCEL if the export should be cancelled */ CopyStatus copyFile(string const & format, - string const & sourceFile, string const & destFile, + FileName const & sourceFile, FileName const & destFile, string const & latexFile, bool force) { CopyStatus ret = force ? FORCE : SUCCESS; @@ -113,7 +116,7 @@ CopyStatus copyFile(string const & format, // overwrite themselves. This check could be changed to // boost::filesystem::equivalent(sourceFile, destFile) if export to // other directories than the document directory is desired. - if (!prefixIs(onlyPath(sourceFile), package().temp_dir())) + if (!prefixIs(onlyPath(sourceFile.absFilename()), package().temp_dir())) return ret; if (!force) { @@ -133,8 +136,8 @@ CopyStatus copyFile(string const & format, if (!mover.copy(sourceFile, destFile, latexFile)) Alert::error(_("Couldn't copy file"), bformat(_("Copying %1$s to %2$s failed."), - makeDisplayPath(sourceFile), - makeDisplayPath(destFile))); + makeDisplayPath(sourceFile.absFilename()), + makeDisplayPath(destFile.absFilename()))); return ret; } @@ -189,19 +192,20 @@ bool Exporter::Export(Buffer * buffer, string const & format, // Ascii backend if (backend_format == "text") - writeFileAscii(*buffer, filename, runparams); + writeFileAscii(*buffer, FileName(filename), runparams); // no backend else if (backend_format == "lyx") - buffer->writeFile(filename); + buffer->writeFile(FileName(filename)); // Docbook backend else if (buffer->isDocBook()) { runparams.nice = !put_in_tempdir; - buffer->makeDocBookFile(filename, runparams); + buffer->makeDocBookFile(FileName(filename), runparams); } // LaTeX backend else if (backend_format == format) { runparams.nice = true; - buffer->makeLaTeXFile(filename, string(), runparams); + if (!buffer->makeLaTeXFile(FileName(filename), string(), runparams)) + return false; } else if (!lyxrc.tex_allows_spaces && contains(buffer->filePath(), ' ')) { Alert::error(_("File name error"), @@ -209,22 +213,25 @@ bool Exporter::Export(Buffer * buffer, string const & format, return false; } else { runparams.nice = false; - buffer->makeLaTeXFile(filename, buffer->filePath(), runparams); + if (!buffer->makeLaTeXFile(FileName(filename), buffer->filePath(), runparams)) + return false; } string const error_type = (format == "program")? "Build" : bufferFormat(*buffer); - bool const success = converters.convert(buffer, filename, filename, - backend_format, format, result_file, + string const ext = formats.extension(format); + FileName const tmp_result_file(changeExtension(filename, ext)); + bool const success = converters.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 (!success) return false; - if (!put_in_tempdir) { - string const tmp_result_file = result_file; - result_file = changeExtension(buffer->fileName(), - formats.extension(format)); + 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 const files = @@ -236,15 +243,15 @@ bool Exporter::Export(Buffer * buffer, string const & format, string const fmt = formats.getFormatFromFile(it->sourceName); status = copyFile(fmt, it->sourceName, - makeAbsPath(it->exportName, dest), + FileName(makeAbsPath(it->exportName, dest)), it->exportName, status == FORCE); } if (status == CANCEL) { buffer->message(_("Document export cancelled.")); - } else if (fs::exists(tmp_result_file)) { + } else if (fs::exists(tmp_result_file.toFilesystemEncoding())) { // Finally copy the main file status = copyFile(format, tmp_result_file, - result_file, result_file, + FileName(result_file), result_file, status == FORCE); buffer->message(bformat(_("Document exported as %1$s " "to file `%2$s'"), @@ -274,7 +281,7 @@ bool Exporter::preview(Buffer * buffer, string const & format) string result_file; if (!Export(buffer, format, true, result_file)) return false; - return formats.view(*buffer, result_file, format); + return formats.view(*buffer, FileName(result_file), format); } @@ -305,7 +312,7 @@ Exporter::getExportableFormats(Buffer const & buffer, bool only_viewable) } -ExportedFile::ExportedFile(string const & s, string const & e) : +ExportedFile::ExportedFile(FileName const & s, string const & e) : sourceName(s), exportName(e) {} @@ -318,11 +325,9 @@ bool operator==(ExportedFile const & f1, ExportedFile const & f2) void ExportData::addExternalFile(string const & format, - string const & sourceName, + FileName const & sourceName, string const & exportName) { - BOOST_ASSERT(lyx::support::absolutePath(sourceName)); - // Make sure that we have every file only once, otherwise copyFile() // would ask several times if it should overwrite a file. vector & files = externalfiles[format]; @@ -333,9 +338,9 @@ void ExportData::addExternalFile(string const & format, void ExportData::addExternalFile(string const & format, - string const & sourceName) + FileName const & sourceName) { - addExternalFile(format, sourceName, onlyFilename(sourceName)); + addExternalFile(format, sourceName, onlyFilename(sourceName.absFilename())); } @@ -347,3 +352,6 @@ ExportData::externalFiles(string const & format) const return cit->second; return vector(); } + + +} // namespace lyx