X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLexer.cpp;h=c4b738f119bcf13fe903d8a74df6e53e1514bc28;hb=51cc8aa9f6b784f806b1d9cc97fe0749ffac29af;hp=e99875b28660286882eea04638e53b0848df2b3a;hpb=e31e71a7a9d978778b9c1f39b71a2491c1e31498;p=lyx.git diff --git a/src/Lexer.cpp b/src/Lexer.cpp index e99875b286..c4b738f119 100644 --- a/src/Lexer.cpp +++ b/src/Lexer.cpp @@ -14,6 +14,7 @@ #include #include "Lexer.h" +#include "Format.h" #include "support/convert.h" #include "support/debug.h" @@ -238,9 +239,7 @@ void Lexer::Pimpl::popTable() bool Lexer::Pimpl::setFile(FileName const & filename) { // Check the format of the file. - string const format = filename.guessFormatFromContents(); - - if (format == "gzip" || format == "zip" || format == "compress") { + if (formats.isZippedFile(filename)) { LYXERR(Debug::LYXLEX, "lyxlex: compressed"); // The check only outputs a debug message, because it triggers // a bug in compaq cxx 6.2, where is_open() returns 'true' for @@ -250,7 +249,7 @@ bool Lexer::Pimpl::setFile(FileName const & filename) "file or stream already set."); gz_.open(filename.toFilesystemEncoding().c_str(), ios::in); is.rdbuf(&gz_); - name = filename.absFilename(); + name = filename.absFileName(); lineno = 0; if (!gz_.is_open() || !is.good()) return false; @@ -264,9 +263,9 @@ bool Lexer::Pimpl::setFile(FileName const & filename) LYXERR(Debug::LYXLEX, "Error in Lexer::setFile: " "file or stream already set."); } - fb_.open(filename.toFilesystemEncoding().c_str(), ios::in); + fb_.open(filename.toSafeFilesystemEncoding().c_str(), ios::in); is.rdbuf(&fb_); - name = filename.absFilename(); + name = filename.absFileName(); lineno = 0; if (!fb_.is_open() || !is.good()) return false; @@ -274,9 +273,9 @@ bool Lexer::Pimpl::setFile(FileName const & filename) // Skip byte order mark. if (is.peek() == 0xef) { - int c = is.get(); + is.get(); if (is.peek() == 0xbb) { - c = is.get(); + is.get(); LASSERT(is.get() == 0xbf, /**/); } else is.unget(); @@ -473,7 +472,7 @@ bool Lexer::Pimpl::eatLine() is.get(cc); c = cc; //LYXERR(Debug::LYXLEX, "Lexer::EatLine read char: `" << c << '\''); - if (c != '\r') + if (c != '\r' && is) buff.push_back(c); } @@ -570,7 +569,7 @@ void Lexer::Pimpl::pushToken(string const & pt) ////////////////////////////////////////////////////////////////////// Lexer::Lexer() - : pimpl_(new Pimpl(0, 0)) + : pimpl_(new Pimpl(0, 0)), lastReadOk_(false) {}