]> git.lyx.org Git - lyx.git/blobdiff - src/lyxlex_pimpl.C
architectural changes to tex2lyx
[lyx.git] / src / lyxlex_pimpl.C
index 90e68b8ecdc75e8b8343293687f24263b4273646..d384bd8e3c4ca8d9185b855fff2c7c2cda9aebf4 100644 (file)
@@ -9,6 +9,8 @@
 
 #include <algorithm>
 
+using namespace lyx::support;
+
 using std::sort;
 using std::ostream;
 using std::ios;
@@ -56,7 +58,7 @@ void LyXLex::Pimpl::printError(string const & message) const
 
 void LyXLex::Pimpl::printTable(ostream & os)
 {
-       os << "\nNumber of tags: " << no_items << '\n';
+       os << "\nNumber of tags: " << no_items << endl;
        for (int i= 0; i < no_items; ++i)
                os << "table[" << i
                   << "]:  tag: `" << table[i].tag
@@ -73,11 +75,11 @@ void LyXLex::Pimpl::verifyTable()
                lyxerr << "The table passed to LyXLex is not sorted!\n"
                       << "Tell the developers to fix it!" << endl;
                // We sort it anyway to avoid problems.
-               lyxerr << "\nUnsorted:\n";
+               lyxerr << "\nUnsorted:" << endl;
                printTable(lyxerr);
 
                sort(table, table + no_items, compare_tags());
-               lyxerr << "\nSorted:\n";
+               lyxerr << "\nSorted:" << endl;
                printTable(lyxerr);
        }
 }
@@ -111,17 +113,39 @@ void LyXLex::Pimpl::popTable()
 
 bool LyXLex::Pimpl::setFile(string const & filename)
 {
-       // The check only outputs a debug message, because it triggers
-       // a bug in compaq cxx 6.2, where is_open() returns 'true' for a
-       // fresh new filebuf.  (JMarc)
-       if (fb__.is_open() || is.tellg() > 0)
-               lyxerr[Debug::LYXLEX] << "Error in LyXLex::setFile: "
-                       "file or stream already set." << endl;
-       fb__.open(filename.c_str(), ios::in);
-       is.rdbuf(&fb__);
-       name = filename;
-       lineno = 0;
-       return fb__.is_open() && is.good();
+
+       // Check the format of the file.
+       string const format = getExtFromContents(filename);
+
+       if (format == "gzip" || format == "zip" || format == "compress") {
+               lyxerr << "lyxlex: compressed" << endl;
+
+               // The check only outputs a debug message, because it triggers
+               // a bug in compaq cxx 6.2, where is_open() returns 'true' for
+               // a fresh new filebuf.  (JMarc)
+               if (gz__.is_open() || is.tellg() > 0)
+                       lyxerr[Debug::LYXLEX] << "Error in LyXLex::setFile: "
+                               "file or stream already set." << endl;
+               gz__.open(filename.c_str(), ios::in);
+               is.rdbuf(&gz__);
+               name = filename;
+               lineno = 0;
+               return gz__.is_open() && is.good();
+       } else {
+               lyxerr << "lyxlex: UNcompressed" << endl;
+
+               // The check only outputs a debug message, because it triggers
+               // a bug in compaq cxx 6.2, where is_open() returns 'true' for
+               // a fresh new filebuf.  (JMarc)
+               if (fb__.is_open() || is.tellg() > 0)
+                       lyxerr[Debug::LYXLEX] << "Error in LyXLex::setFile: "
+                               "file or stream already set." << endl;
+               fb__.open(filename.c_str(), ios::in);
+               is.rdbuf(&fb__);
+               name = filename;
+               lineno = 0;
+               return fb__.is_open() && is.good();
+       }
 }