X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverter.cpp;h=e674fc9d484cef2d4ccafc013bdea806acf3dcca;hb=0362c6aae73c293d1c20277c12d362acfe0b2ef6;hp=3c8842be121bfbaa88f51b39c0a8d8c6c36c0b41;hpb=3d362bf35c3e84effea416f28a90a524a21f3730;p=lyx.git diff --git a/src/Converter.cpp b/src/Converter.cpp index 3c8842be12..e674fc9d48 100644 --- a/src/Converter.cpp +++ b/src/Converter.cpp @@ -16,53 +16,30 @@ #include "Buffer.h" #include "buffer_funcs.h" #include "BufferParams.h" -#include "debug.h" #include "ErrorList.h" #include "Format.h" -#include "gettext.h" #include "Language.h" #include "LaTeX.h" #include "Mover.h" #include "frontends/alert.h" +#include "support/debug.h" +#include "support/FileNameList.h" #include "support/filetools.h" -#include "support/lyxlib.h" +#include "support/FileZipListDir.h" +#include "support/gettext.h" +#include "support/lstrings.h" #include "support/os.h" +#include "support/Package.h" #include "support/Path.h" #include "support/Systemcall.h" +using namespace std; +using namespace lyx::support; namespace lyx { -using support::addName; -using support::bformat; -using support::changeExtension; -using support::compare_ascii_no_case; -using support::contains; -using support::dirList; -using support::FileName; -using support::getExtension; -using support::isFileReadable; -using support::libFileSearch; -using support::libScriptSearch; -using support::makeAbsPath; -using support::makeRelPath; -using support::onlyFilename; -using support::onlyPath; -using support::prefixIs; -using support::quoteName; -using support::removeExtension; -using support::split; -using support::subst; -using support::Systemcall; - -using std::endl; -using std::find_if; -using std::string; -using std::vector; -using std::distance; - namespace Alert = lyx::frontend::Alert; @@ -88,8 +65,8 @@ string const dvipdfm_options(BufferParams const & bp) string result; if (bp.papersize != PAPER_CUSTOM) { - string const paper_size = bp.paperSizeName(); - if (paper_size != "b5" && paper_size != "foolscap") + string const paper_size = bp.paperSizeName(BufferParams::DVIPDFM); + if (!paper_size.empty()) result = "-p "+ paper_size; if (bp.orientation == ORIENTATION_LANDSCAPE) @@ -100,7 +77,7 @@ string const dvipdfm_options(BufferParams const & bp) } -class ConverterEqual : public std::binary_function { +class ConverterEqual { public: ConverterEqual(string const & from, string const & to) : from_(from), to_(to) {} @@ -309,19 +286,17 @@ bool Converters::convert(Buffer const * buffer, formats.extension(from_format); string const to_ext = formats.extension(to_format); string const command = - support::os::python() + ' ' + + os::python() + ' ' + quoteName(libFileSearch("scripts", "convertDefault.py").toFilesystemEncoding()) + ' ' + quoteName(from_ext + ':' + from_file.toFilesystemEncoding()) + ' ' + quoteName(to_ext + ':' + to_file.toFilesystemEncoding()); - LYXERR(Debug::FILES) - << "No converter defined! " - "I use convertDefault.py:\n\t" - << command << endl; + LYXERR(Debug::FILES, "No converter defined! " + "I use convertDefault.py:\n\t" << command); Systemcall one; one.startscript(Systemcall::Wait, command); - if (isFileReadable(to_file)) { + if (to_file.isReadableFile()) { if (conversionflags & try_cache) ConverterCache::get().add(orig_from, to_format, to_file); @@ -349,7 +324,7 @@ bool Converters::convert(Buffer const * buffer, string const path(onlyPath(from_file.absFilename())); // Prevent the compiler from optimizing away p FileName pp(path); - support::Path p(pp); + PathChanger p(pp); // empty the error list before any new conversion takes place. errorList.clear(); @@ -363,9 +338,10 @@ bool Converters::convert(Buffer const * buffer, cit != edgepath.end(); ++cit) { Converter const & conv = converterlist_[*cit]; bool dummy = conv.To->dummy() && conv.to != "program"; - if (!dummy) - LYXERR(Debug::FILES) << "Converting from " - << conv.from << " to " << conv.to << endl; + if (!dummy) { + LYXERR(Debug::FILES, "Converting from " + << conv.from << " to " << conv.to); + } infile = outfile; outfile = FileName(conv.result_dir.empty() ? changeExtension(from_file.absFilename(), conv.To->extension()) @@ -379,21 +355,25 @@ bool Converters::convert(Buffer const * buffer, FileName real_outfile; if (outfile == infile) { real_outfile = infile; - outfile = FileName(addName(buffer->temppath(), "tmpfile.out")); + // when importing, a buffer does not necessarily exist + if (buffer) + outfile = FileName(addName(buffer->temppath(), "tmpfile.out")); + else + outfile = FileName(addName(package().temp_dir().absFilename(), + "tmpfile.out")); } if (conv.latex) { run_latex = true; string const command = subst(conv.command, token_from, ""); - LYXERR(Debug::FILES) << "Running " << command << endl; + LYXERR(Debug::FILES, "Running " << command); if (!runLaTeX(*buffer, command, runparams, errorList)) return false; } else { if (conv.need_aux && !run_latex && !latex_command_.empty()) { - LYXERR(Debug::FILES) - << "Running " << latex_command_ - << " to update aux file"<< endl; + LYXERR(Debug::FILES, "Running " << latex_command_ + << " to update aux file"); runLaTeX(*buffer, latex_command_, runparams, errorList); } @@ -419,7 +399,7 @@ bool Converters::convert(Buffer const * buffer, command = add_options(command, dvipdfm_options(buffer->params())); - LYXERR(Debug::FILES) << "Calling " << command << endl; + LYXERR(Debug::FILES, "Calling " << command); if (buffer) buffer->message(_("Executing command: ") + from_utf8(command)); @@ -439,10 +419,8 @@ bool Converters::convert(Buffer const * buffer, if (!mover.rename(outfile, real_outfile)) res = -1; else - LYXERR(Debug::FILES) - << "renaming file " << outfile - << " to " << real_outfile - << endl; + LYXERR(Debug::FILES, "renaming file " << outfile + << " to " << real_outfile); // Finally, don't forget to tell any future // converters to use the renamed file... outfile = real_outfile; @@ -518,9 +496,8 @@ bool Converters::move(string const & fmt, string const to_base = removeExtension(to.absFilename()); string const to_extension = getExtension(to.absFilename()); - vector const files = dirList(FileName(path), - getExtension(from.absFilename())); - for (vector::const_iterator it = files.begin(); + FileNameList const files = FileName(path).dirList(getExtension(from.absFilename())); + for (FileNameList::const_iterator it = files.begin(); it != files.end(); ++it) { string const from2 = it->absFilename(); string const file2 = onlyFilename(from2); @@ -528,8 +505,7 @@ bool Converters::move(string const & fmt, string const to2 = changeExtension( to_base + file2.substr(base.length()), to_extension); - LYXERR(Debug::FILES) << "moving " << from2 - << " to " << to2 << endl; + LYXERR(Debug::FILES, "moving " << from2 << " to " << to2); Mover const & mover = getMover(fmt); bool const moved = copy @@ -571,7 +547,7 @@ bool Converters::scanLog(Buffer const & buffer, string const & /*command*/, int const result = latex.scanLogFile(terr); if (result & LaTeX::ERRORS) - bufferErrors(buffer, terr, errorList); + buffer.bufferErrors(terr, errorList); return true; } @@ -579,13 +555,11 @@ bool Converters::scanLog(Buffer const & buffer, string const & /*command*/, namespace { -class showMessage : public std::unary_function, public boost::signals::trackable { +class ShowMessage + : public boost::signals::trackable { public: - showMessage(Buffer const & b) : buffer_(b) {}; - void operator()(docstring const & m) const - { - buffer_.message(m); - } + ShowMessage(Buffer const & b) : buffer_(b) {} + void operator()(docstring const & msg) const { buffer_.message(msg); } private: Buffer const & buffer_; }; @@ -596,21 +570,21 @@ private: bool Converters::runLaTeX(Buffer const & buffer, string const & command, OutputParams const & runparams, ErrorList & errorList) { - buffer.busy(true); + buffer.setBusy(true); buffer.message(_("Running LaTeX...")); runparams.document_language = buffer.params().language->babel(); // do the LaTeX run(s) - string const name = buffer.getLatexName(); + string const name = buffer.latexName(); LaTeX latex(command, runparams, FileName(makeAbsPath(name))); TeXErrors terr; - showMessage show(buffer); + ShowMessage show(buffer); latex.message.connect(show); int const result = latex.run(terr); if (result & LaTeX::ERRORS) - bufferErrors(buffer, terr, errorList); + buffer.bufferErrors(terr, errorList); // check return value from latex.run(). if ((result & LaTeX::NO_LOGFILE)) { @@ -625,7 +599,7 @@ bool Converters::runLaTeX(Buffer const & buffer, string const & command, } - buffer.busy(false); + buffer.setBusy(false); int const ERROR_MASK = LaTeX::NO_LOGFILE | @@ -651,8 +625,8 @@ void Converters::buildGraph() } -std::vector const -Converters::intToFormat(std::vector const & input) +vector const +Converters::intToFormat(vector const & input) { vector result(input.size()); @@ -696,11 +670,34 @@ bool Converters::isReachable(string const & from, string const & to) } -Graph::EdgePath const -Converters::getPath(string const & from, string const & to) +Graph::EdgePath Converters::getPath(string const & from, string const & to) { return G_.getPath(formats.getNumber(from), formats.getNumber(to)); } + +vector Converters::importableFormats() +{ + vector l = loaders(); + vector result = getReachableTo(l[0], true); + for (vector::const_iterator it = l.begin() + 1; + it != l.end(); ++it) { + vector r = getReachableTo(*it, false); + result.insert(result.end(), r.begin(), r.end()); + } + return result; +} + + +vector Converters::loaders() const +{ + vector v; + v.push_back("lyx"); + v.push_back("text"); + v.push_back("textparagraph"); + return v; +} + + } // namespace lyx