X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxlex.C;h=e77c893b082d84d0765b039a254fcf04db86ae5b;hb=09e01879979643949f1f2c7216023f1f35d5ada2;hp=2e8e8e32f1b510245e37236b1adfa1e5eb88d3dc;hpb=57e89ae2bfa4c0cee3d6d8feee11651b3d37d54d;p=lyx.git diff --git a/src/lyxlex.C b/src/lyxlex.C index 2e8e8e32f1..e77c893b08 100644 --- a/src/lyxlex.C +++ b/src/lyxlex.C @@ -1,28 +1,25 @@ -/* This file is part of - * ====================================================== +/** + * \file lyxlex.C + * Copyright 1996-2002 the LyX Team + * Read the file COPYING * - * LyX, The Document Processor + * Generalized simple lexical analyzer. + * It can be used for simple syntax parsers, like lyxrc, + * texclass and others to come. * - * Copyright 1996-2001 The LyX Team. - * - * Generalized simple lexical analizer. - * It can be used for simple syntax parsers, like lyxrc, - * texclass and others to come. [asierra30/03/96] - * - * ====================================================== */ + * \author Alejandro Aguilar Sierra + */ #include -#ifdef __GNUG__ -#pragma implementation "lyxlex.h" -#endif - #include "lyxlex.h" #include "lyxlex_pimpl.h" #include "debug.h" #include "support/filetools.h" #include "support/lstrings.h" +using namespace lyx::support; + using std::ostream; using std::istream; using std::endl; @@ -57,12 +54,6 @@ int LyXLex::getLineNo() const } -string const LyXLex::text() const -{ - return &pimpl_->buff[0]; -} - - istream & LyXLex::getStream() { return pimpl_->is; @@ -118,12 +109,10 @@ int LyXLex::lex() int LyXLex::getInteger() const { - if (isStrInt(pimpl_->getString())) { + if (isStrInt(pimpl_->getString())) return strToInt(pimpl_->getString()); - } else { - pimpl_->printError("Bad integer `$$Token'"); - return -1; - } + pimpl_->printError("Bad integer `$$Token'"); + return -1; } @@ -135,10 +124,8 @@ float LyXLex::getFloat() const string str = subst(pimpl_->getString(), ",", "."); if (isStrDbl(str)) return strToDbl(str); - else { - pimpl_->printError("Bad float `$$Token'"); - return -1; - } + pimpl_->printError("Bad float `$$Token'"); + return -1; } @@ -149,7 +136,7 @@ string const LyXLex::getString() const // I would prefer to give a tag number instead of an explicit token -// here, but it is not possible because Buffer::readLyXformat2 uses +// here, but it is not possible because Buffer::readBody uses // explicit tokens (JMarc) string const LyXLex::getLongString(string const & endtoken) { @@ -161,36 +148,35 @@ string const LyXLex::getLongString(string const & endtoken) // blank line in the file being read continue; - string const token = frontStrip(strip(getString()), " \t"); + string const token = trim(getString(), " \t"); lyxerr[Debug::PARSER] << "LongString: `" << getString() << '\'' << endl; // We do a case independent comparison, like search_kw // does. - if (compare_ascii_no_case(token, endtoken) != 0) { - string tmpstr = getString(); - if (firstline) { - unsigned int i = 0; - while (i < tmpstr.length() - && tmpstr[i] == ' ') { - ++i; - prefix += ' '; - } - firstline = false; - lyxerr[Debug::PARSER] << "Prefix = `" << prefix - << '\'' << endl; - } - - if (!prefix.empty() - && prefixIs(tmpstr, prefix)) { - tmpstr.erase(0, prefix.length() - 1); - } - str += frontStrip(tmpstr, "\t") + '\n'; - } - else // token == endtoken + if (compare_ascii_no_case(token, endtoken) == 0) break; + + string tmpstr = getString(); + if (firstline) { + string::size_type i(tmpstr.find_first_not_of(' ')); + if (i != string::npos) + prefix = tmpstr.substr(0, i); + firstline = false; + lyxerr[Debug::PARSER] + << "Prefix = `" << prefix << "\'" << endl; + } + + // further lines in long strings may have the same + // whitespace prefix as the first line. Remove it. + if (prefix.length() && prefixIs(tmpstr, prefix)) { + tmpstr.erase(0, prefix.length() - 1); + } + + str += ltrim(tmpstr, "\t") + '\n'; } + if (!isOK()) { printError("Long string not ended by `" + endtoken + '\''); } @@ -201,9 +187,9 @@ string const LyXLex::getLongString(string const & endtoken) bool LyXLex::getBool() const { - if (compare(pimpl_->buff, "true") == 0) { + if (pimpl_->getString() == "true") { return true; - } else if (compare(pimpl_->buff, "false") != 0) { + } else if (pimpl_->getString() != "false") { pimpl_->printError("Bad boolean `$$Token'. Use \"false\" or \"true\""); } return false; @@ -240,11 +226,13 @@ int LyXLex::findToken(char const * str[]) pimpl_->printError("file ended while scanning string token"); return -1; } - + int i = 0; - - if (compare(pimpl_->buff, "default")) { - while (str[i][0] && compare(str[i], pimpl_->buff)) { + + string const search_token = pimpl_->getString(); + + if (search_token != "default") { + while (str[i][0] && str[i] != search_token) { ++i; } if (!str[i][0]) { @@ -252,6 +240,6 @@ int LyXLex::findToken(char const * str[]) i = -1; } } - + return i; }