X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FFormat.cpp;h=485715b6e3b23911d622c31897856467f748bd0e;hb=26910d5ec49395d1372dd5b9259f1bf6ed23de0a;hp=4b6e134941d012cec2b4e09b4c05266fb0edfdfe;hpb=3929a71cd0362cea6ca4ea0f7135ad524cfc8309;p=lyx.git diff --git a/src/Format.cpp b/src/Format.cpp index 4b6e134941..485715b6e3 100644 --- a/src/Format.cpp +++ b/src/Format.cpp @@ -23,7 +23,7 @@ #include "support/gettext.h" #include "support/lstrings.h" #include "support/os.h" -#include "support/Path.h" +#include "support/PathChanger.h" #include "support/Systemcall.h" #include "support/textutils.h" #include "support/Translator.h" @@ -59,7 +59,8 @@ string const token_socket_format("$$a"); class FormatNamesEqual : public unary_function { public: FormatNamesEqual(string const & name) - : name_(name) {} + : name_(name) + {} bool operator()(Format const & f) const { return f.name() == name_; @@ -72,7 +73,8 @@ private: class FormatExtensionsEqual : public unary_function { public: FormatExtensionsEqual(string const & extension) - : extension_(extension) {} + : extension_(extension) + {} bool operator()(Format const & f) const { return f.hasExtension(extension_); @@ -85,7 +87,8 @@ private: class FormatMimeEqual : public unary_function { public: FormatMimeEqual(string const & mime) - : mime_(mime) {} + : mime_(mime) + {} bool operator()(Format const & f) const { // The test for empty mime strings is needed since we allow @@ -100,7 +103,8 @@ private: class FormatPrettyNameEqual : public unary_function { public: FormatPrettyNameEqual(string const & prettyname) - : prettyname_(prettyname) {} + : prettyname_(prettyname) + {} bool operator()(Format const & f) const { return f.prettyname() == prettyname_; @@ -111,6 +115,10 @@ private: } //namespace anon +bool Format::formatSorter(Format const * lhs, Format const * rhs) +{ + return _(lhs->prettyname()) < _(rhs->prettyname()); +} bool operator<(Format const & a, Format const & b) { @@ -245,12 +253,11 @@ string guessFormatFromContents(FileName const & fn) string str; string format; bool firstLine = true; + bool backslash = false; + int dollars = 0; while ((count++ < max_count) && format.empty()) { - if (ifs.eof()) { - LYXERR(Debug::GRAPHICS, "filetools(getFormatFromContents)\n" - << "\tFile type not recognised before EOF!"); + if (ifs.eof()) break; - } getline(ifs, str); string const stamp = str.substr(0, 2); @@ -332,7 +339,8 @@ string guessFormatFromContents(FileName const & fn) format = "jpg"; else if (contains(str, "%PDF")) - format = "pdf"; + // autodetect pdf format for graphics inclusion + format = "pdf6"; else if (contains(str, "PNG")) format = "png"; @@ -354,9 +362,32 @@ string guessFormatFromContents(FileName const & fn) else if (contains(str, "BITPIX")) format = "fits"; + + else if (contains(str, "\\documentclass") || + contains(str, "\\chapter") || + contains(str, "\\section") || + contains(str, "\\begin") || + contains(str, "\\end") || + contains(str, "$$") || + contains(str, "\\[") || + contains(str, "\\]")) + format = "latex"; + else { + if (contains(str, '\\')) + backslash = true; + dollars += count_char(str, '$'); + } } - if (!format.empty()) { + if (format.empty() && backslash && dollars > 1) + // inline equation + format = "latex"; + + if (format.empty()) { + if (ifs.eof()) + LYXERR(Debug::GRAPHICS, "filetools(getFormatFromContents)\n" + "\tFile type not recognised before EOF!"); + } else { LYXERR(Debug::GRAPHICS, "Recognised Fileformat: " << format); return format; } @@ -388,7 +419,7 @@ string Formats::getFormatFromFile(FileName const & filename) const filename.toFilesystemEncoding().c_str()); mime = token(mime, ';', 0); // we need our own ps/eps detection - if (mime != "application/postscript") { + if ((mime != "application/postscript") && (mime != "text/plain")) { Formats::const_iterator cit = find_if(formatlist.begin(), formatlist.end(), FormatMimeEqual(mime)); @@ -476,7 +507,7 @@ bool Formats::isZippedFile(support::FileName const & filename) const { return it->second.zipped; string const & format = getFormatFromFile(filename); bool zipped = (format == "gzip" || format == "zip"); - zipped_.insert(pair(fname, ZippedInfo(zipped, timestamp))); + zipped_.insert(make_pair(fname, ZippedInfo(zipped, timestamp))); return zipped; } @@ -677,7 +708,7 @@ bool Formats::edit(Buffer const & buffer, FileName const & filename, // LinkBack files look like PDF, but have the .linkback extension string const ext = getExtension(filename.absFileName()); - if (format_name == "pdf" && ext == "linkback") { + if (format_name == "pdf6" && ext == "linkback") { #ifdef USE_MACOSX_PACKAGING return editLinkBackFile(filename.absFileName().c_str()); #else @@ -763,8 +794,10 @@ string const Formats::extensions(string const & name) const namespace { + typedef Translator FlavorTranslator; + FlavorTranslator initFlavorTranslator() { FlavorTranslator f(OutputParams::LATEX, "latex"); @@ -784,6 +817,7 @@ FlavorTranslator const & flavorTranslator() static FlavorTranslator translator = initFlavorTranslator(); return translator; } + }