X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fconverter.C;h=0ffdc49179d8a669ba48d5bc720fd28a9aa92da8;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=1463e6e79274daf3833dd13596d62415f4c5593e;hpb=6ada61e182f55c612b4d743f37b14c10d032ccad;p=lyx.git diff --git a/src/converter.C b/src/converter.C index 1463e6e792..0ffdc49179 100644 --- a/src/converter.C +++ b/src/converter.C @@ -12,6 +12,7 @@ #include "converter.h" +#include "ConverterCache.h" #include "buffer.h" #include "buffer_funcs.h" #include "bufferparams.h" @@ -30,27 +31,29 @@ #include "support/path.h" #include "support/systemcall.h" -using lyx::support::addName; -using lyx::support::bformat; -using lyx::support::changeExtension; -using lyx::support::compare_ascii_no_case; -using lyx::support::contains; -using lyx::support::dirList; -using lyx::support::getExtension; -using lyx::support::isFileReadable; -using lyx::support::libFileSearch; -using lyx::support::libScriptSearch; -using lyx::support::makeRelPath; -using lyx::support::onlyFilename; -using lyx::support::onlyPath; -using lyx::support::Path; -using lyx::support::prefixIs; -using lyx::support::quoteName; -using lyx::support::split; -using lyx::support::subst; -using lyx::support::Systemcall; - -using lyx::docstring; + +namespace lyx { + +using support::absolutePath; +using support::addName; +using support::bformat; +using support::changeExtension; +using support::compare_ascii_no_case; +using support::contains; +using support::dirList; +using support::getExtension; +using support::isFileReadable; +using support::libFileSearch; +using support::libScriptSearch; +using support::makeRelPath; +using support::onlyFilename; +using support::onlyPath; +using support::Path; +using support::prefixIs; +using support::quoteName; +using support::split; +using support::subst; +using support::Systemcall; using std::endl; using std::find_if; @@ -284,26 +287,33 @@ OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path) bool Converters::convert(Buffer const * buffer, - string const & from_file, string const & to_file_base, - string const & from_format, string const & to_format, - string & to_file, ErrorList & errorList, bool try_default) + string const & from_file, string const & to_file, + string const & orig_from, + string const & from_format, string const & to_format, + ErrorList & errorList, int conversionflags) { - string const to_ext = formats.extension(to_format); - to_file = changeExtension(to_file_base, to_ext); + BOOST_ASSERT(absolutePath(from_file)); + BOOST_ASSERT(absolutePath(to_file)); + BOOST_ASSERT(absolutePath(orig_from)); if (from_format == to_format) return move(from_format, from_file, to_file, false); + if ((conversionflags & try_cache) && + ConverterCache::get().inCache(orig_from, to_format)) + return ConverterCache::get().copy(orig_from, to_format, to_file); + Graph::EdgePath edgepath = getPath(from_format, to_format); if (edgepath.empty()) { - if (try_default) { + if (conversionflags & try_default) { // if no special converter defined, then we take the // default one from ImageMagic. string const from_ext = from_format.empty() ? getExtension(from_file) : formats.extension(from_format); + string const to_ext = formats.extension(to_format); string const command = - lyx::support::os::python() + ' ' + + support::os::python() + ' ' + quoteName(libFileSearch("scripts", "convertDefault.py")) + ' ' + quoteName(from_ext + ':' + from_file) + @@ -316,14 +326,17 @@ bool Converters::convert(Buffer const * buffer, Systemcall one; one.startscript(Systemcall::Wait, command); if (isFileReadable(to_file)) { + if (conversionflags & try_cache) + ConverterCache::get().add(orig_from, + to_format, to_file); return true; } } Alert::error(_("Cannot convert file"), bformat(_("No information for converting %1$s " "format files to %2$s.\n" - "Define a convertor in the preferences."), - lyx::from_ascii(from_format), lyx::from_ascii(to_format))); + "Define a converter in the preferences."), + from_ascii(from_format), from_ascii(to_format))); return false; } OutputParams runparams; @@ -407,7 +420,7 @@ bool Converters::convert(Buffer const * buffer, lyxerr[Debug::FILES] << "Calling " << command << endl; if (buffer) buffer->message(_("Executing command: ") - + lyx::from_utf8(command)); + + from_utf8(command)); Systemcall::Starttype const type = (dummy) ? Systemcall::DontWait : Systemcall::Wait; @@ -453,7 +466,7 @@ bool Converters::convert(Buffer const * buffer, // it is a document (.lyx) or something else. Same goes for elsewhere. Alert::error(_("Cannot convert file"), bformat(_("An error occurred whilst running %1$s"), - lyx::from_ascii(command.substr(0, 50)))); + from_ascii(command.substr(0, 50)))); } return false; } @@ -465,9 +478,8 @@ bool Converters::convert(Buffer const * buffer, return true; if (!conv.result_dir.empty()) { - to_file = addName(subst(conv.result_dir, token_base, to_base), - subst(conv.result_file, - token_base, onlyFilename(to_base))); + // The converter has put the file(s) in a directory. + // In this case we ignore the given to_file. if (from_base != to_base) { string const from = subst(conv.result_dir, token_base, from_base); @@ -476,14 +488,17 @@ bool Converters::convert(Buffer const * buffer, Mover const & mover = movers(conv.from); if (!mover.rename(from, to)) { Alert::error(_("Cannot convert file"), - bformat(_("Could not move a temporary file from %1$s to %2$s."), - lyx::from_ascii(from), lyx::from_ascii(to))); + bformat(_("Could not move a temporary directory from %1$s to %2$s."), + from_ascii(from), from_ascii(to))); return false; } } return true; - } else + } else { + if (conversionflags & try_cache) + ConverterCache::get().add(orig_from, to_format, outfile); return move(conv.to, outfile, to_file, conv.latex); + } } @@ -518,7 +533,7 @@ bool Converters::move(string const & fmt, bformat(copy ? _("Could not copy a temporary file from %1$s to %2$s.") : _("Could not move a temporary file from %1$s to %2$s."), - lyx::from_ascii(from2), lyx::from_ascii(to2))); + from_ascii(from2), from_ascii(to2))); no_errors = false; } } @@ -526,17 +541,6 @@ bool Converters::move(string const & fmt, } -bool Converters::convert(Buffer const * buffer, - string const & from_file, string const & to_file_base, - string const & from_format, string const & to_format, - ErrorList & errorList, bool try_default) -{ - string to_file; - return convert(buffer, from_file, to_file_base, from_format, to_format, - to_file, errorList, try_default); -} - - bool Converters::formatIsUsed(string const & format) { ConverterList::const_iterator cit = converterlist_.begin(); @@ -605,7 +609,7 @@ bool Converters::runLaTeX(Buffer const & buffer, string const & command, docstring const str = bformat(_("LaTeX did not run successfully. " "Additionally, LyX could not locate " - "the LaTeX log %1$s."), lyx::from_utf8(name)); + "the LaTeX log %1$s."), from_utf8(name)); Alert::error(_("LaTeX failed"), str); } else if (result & LaTeX::NO_OUTPUT) { Alert::warning(_("Output is empty"), @@ -697,3 +701,6 @@ Converters converters; // The global copy after reading lyxrc.defaults Converters system_converters; + + +} // namespace lyx