X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxlex.C;h=958c7a14e680b33cbbc6b05140ae4026a77c1e63;hb=cb52251ccff29d6cbfa13ab90a96be566e3f41ac;hp=6fe01651b427b9d89bf6fe14bbd205fbc9eab5ab;hpb=76938908d7da15b92bad3908e71eb969c9449c0e;p=lyx.git diff --git a/src/lyxlex.C b/src/lyxlex.C index 6fe01651b4..958c7a14e6 100644 --- a/src/lyxlex.C +++ b/src/lyxlex.C @@ -1,8 +1,15 @@ -// Generalized simple lexical analizer. -// It can be used for simple syntax parsers, like lyxrc, -// texclass and others to come. [asierra30/03/96] -// -// Copyright 1996 Lyx Team. +/* This file is part of + * ====================================================== + * + * LyX, The Document Processor + * + * 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] + * + * ====================================================== */ #include @@ -12,7 +19,9 @@ #include "lyxlex.h" #include "lyxlex_pimpl.h" +#include "debug.h" #include "support/filetools.h" +#include "support/lstrings.h" using std::ostream; using std::istream; @@ -30,7 +39,7 @@ LyXLex::~LyXLex() } -bool LyXLex::IsOK() const +bool LyXLex::isOK() const { return pimpl_->is.good(); } @@ -42,12 +51,13 @@ void LyXLex::setLineNo(int l) } -int LyXLex::GetLineNo() const +int LyXLex::getLineNo() const { return pimpl_->lineno; } -char const * LyXLex::text() const + +string const LyXLex::text() const { return &pimpl_->buff[0]; } @@ -95,16 +105,21 @@ void LyXLex::setStream(istream & i) } +void LyXLex::setCommentChar(char c) +{ + pimpl_->setCommentChar(c); +} + int LyXLex::lex() { return pimpl_->lex(); } -int LyXLex::GetInteger() const +int LyXLex::getInteger() const { - if (pimpl_->buff[0] > ' ') - return atoi(pimpl_->buff); + if (isStrInt(pimpl_->getString())) + return strToInt(pimpl_->getString()); else { pimpl_->printError("Bad integer `$$Token'"); return -1; @@ -112,45 +127,49 @@ int LyXLex::GetInteger() const } -float LyXLex::GetFloat() const +float LyXLex::getFloat() const { - if (pimpl_->buff[0] > ' ') - return atof(pimpl_->buff); - else { - pimpl_->printError("Bad float `$$Token'"); - return -1; - } + // replace comma with dot in case the file was written with + // the wrong locale (should be rare, but is easy enough to + // avoid). + string str = subst(pimpl_->getString(), ",", "."); + if (isStrDbl(str)) + return strToDbl(str); + else { + pimpl_->printError("Bad float `$$Token'"); + return -1; + } } -string const LyXLex::GetString() const +string const LyXLex::getString() const { - return pimpl_->GetString(); + return pimpl_->getString(); } // I would prefer to give a tag number instead of an explicit token // here, but it is not possible because Buffer::readLyXformat2 uses // explicit tokens (JMarc) -string LyXLex::getLongString(string const & endtoken) +string const LyXLex::getLongString(string const & endtoken) { string str, prefix; bool firstline = true; - while (IsOK()) { - if (!EatLine()) + while (isOK()) { + if (!eatLine()) // blank line in the file being read continue; - string const token = frontStrip(strip(GetString()), " \t"); + string const token = frontStrip(strip(getString()), " \t"); lyxerr[Debug::PARSER] << "LongString: `" - << GetString() << '\'' << endl; + << getString() << '\'' << endl; // We do a case independent comparison, like search_kw // does. if (compare_no_case(token, endtoken) != 0) { - string tmpstr = GetString(); + string tmpstr = getString(); if (firstline) { unsigned int i = 0; while(i < tmpstr.length() @@ -164,22 +183,22 @@ string LyXLex::getLongString(string const & endtoken) } if (!prefix.empty() - && prefixIs(tmpstr, prefix.c_str())) { + && prefixIs(tmpstr, prefix)) { tmpstr.erase(0, prefix.length() - 1); } - str += tmpstr + '\n'; + str += frontStrip(tmpstr, "\t") + '\n'; } else // token == endtoken break; } - if (!IsOK()) + if (!isOK()) printError("Long string not ended by `" + endtoken + '\''); return str; } -bool LyXLex::GetBool() const +bool LyXLex::getBool() const { if (compare(pimpl_->buff, "true") == 0) return true; @@ -189,9 +208,9 @@ bool LyXLex::GetBool() const } -bool LyXLex::EatLine() +bool LyXLex::eatLine() { - return pimpl_->EatLine(); + return pimpl_->eatLine(); } @@ -207,7 +226,13 @@ bool LyXLex::nextToken() } -int LyXLex::FindToken(char const * str[]) +void LyXLex::pushToken(string const & pt) +{ + pimpl_->pushToken(pt); +} + + +int LyXLex::findToken(char const * str[]) { int i = -1; @@ -225,7 +250,7 @@ int LyXLex::FindToken(char const * str[]) } -int LyXLex::CheckToken(char const * str[], int print_error) +int LyXLex::checkToken(char const * str[], int print_error) { int i = -1;