- // 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();
+ }