- if (fb__.is_open() || is.tellg() > 0)
- lyxerr << "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 = getFormatFromContents(filename);
+
+ if (format == "gzip" || format == "zip" || format == "compress") {
+ lyxerr[Debug::LYXLEX] << "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() || istream::off_type(is.tellg()) > -1)
+ 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[Debug::LYXLEX] << "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() || istream::off_type(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();
+ }