]> git.lyx.org Git - features.git/commitdiff
Fix export of xfig external insets (bug #9244).
authorEnrico Forestieri <forenr@lyx.org>
Sun, 28 Sep 2014 19:28:16 +0000 (21:28 +0200)
committerEnrico Forestieri <forenr@lyx.org>
Sun, 28 Sep 2014 19:28:16 +0000 (21:28 +0200)
The check for a latex format is very fragile. Both libmagic and our
guessing from contents cannot distinguish the pstex and pdftex formats
used by the xfig external inset. Moreover, it may also happen that
lyx files are mistaken as latex ones. Thus, when the guessed format
is latex, the only solution is to give precedence to the format
determined by the file extension.

src/Format.cpp
status.21x

index 71437de3ead5cdc5c64b62dc55f9cd7a06f631fa..9e221be3528ed0d56ec767d1167e276d2ca8f11a 100644 (file)
@@ -408,11 +408,11 @@ string Formats::getFormatFromFile(FileName const & filename) const
        if (filename.empty())
                return string();
 
+       string format;
 #ifdef HAVE_MAGIC_H
        if (filename.exists()) {
                magic_t magic_cookie = magic_open(MAGIC_MIME);
                if (magic_cookie) {
-                       string format;
                        if (magic_load(magic_cookie, NULL) != 0) {
                                LYXERR(Debug::GRAPHICS, "Formats::getFormatFromFile\n"
                                        << "\tCouldn't load magic database - "
@@ -442,24 +442,38 @@ string Formats::getFormatFromFile(FileName const & filename) const
                                }
                        }
                        magic_close(magic_cookie);
-                       if (!format.empty())
+                       // libmagic recognizes as latex also some formats of ours
+                       // such as pstex and pdftex. Therefore we have to perform
+                       // additional checks in this case (bug 9244).
+                       if (!format.empty() && format != "latex")
                                return format;
                }
        }
 #endif
 
-       string const format = guessFormatFromContents(filename);
        string const ext = getExtension(filename.absFileName());
-       if (isZippedFileFormat(format) && !ext.empty()) {
-               string const & fmt_name = formats.getFormatFromExtension(ext);
-               if (!fmt_name.empty()) {
-                       Format const * p_format = formats.getFormat(fmt_name);
-                       if (p_format && p_format->zippedNative())
-                               return p_format->name();
+       if (format.empty()) {
+               string const format = guessFormatFromContents(filename);
+               if (isZippedFileFormat(format) && !ext.empty()) {
+                       string const & fmt_name = formats.getFormatFromExtension(ext);
+                       if (!fmt_name.empty()) {
+                               Format const * p_format = formats.getFormat(fmt_name);
+                               if (p_format && p_format->zippedNative())
+                                       return p_format->name();
+                       }
                }
+               // Don't simply return latex (bug 9244).
+               if (!format.empty() && format != "latex")
+                       return format;
+       }
+
+       // Both libmagic and our guessing from contents may return as latex
+       // also lyx files and our pstex and pdftex formats. In this case we
+       // give precedence to the format determined by the extension.
+       if (format == "latex") {
+               format = getFormatFromExtension(ext);
+               return format.empty() ? "latex" : format;
        }
-       if (!format.empty())
-               return format;
 
        // try to find a format from the file extension.
        return getFormatFromExtension(ext);
index 0b5973089db729285e70b1201602307aedbea354..1ea3e612e020a74331e7d07dae054870f1f5b00e 100644 (file)
@@ -60,6 +60,8 @@ What's new
 
 - Fix baseline calculation in last paragraph (bug 9231).
 
+- Fix export of xfig external insets (bug 9244).
+
 
 * LYX2LYX