X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxlex.C;h=4dc6bbfa51db87b5c22b78e0c8a557e6df234ca0;hb=2b300d130c21037e9ae9cb547024be53111d2014;hp=178ad888337526791704706f1cd90ee35ab5c1bb;hpb=e5f1824f33b51af675f8d345d5871a76dbd54465;p=lyx.git diff --git a/src/lyxlex.C b/src/lyxlex.C index 178ad88833..4dc6bbfa51 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-2000 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 @@ -13,6 +20,7 @@ #include "lyxlex.h" #include "lyxlex_pimpl.h" #include "support/filetools.h" +#include "support/lstrings.h" using std::ostream; using std::istream; @@ -47,7 +55,8 @@ int LyXLex::GetLineNo() const return pimpl_->lineno; } -char const * LyXLex::text() const + +string const LyXLex::text() const { return &pimpl_->buff[0]; } @@ -103,8 +112,8 @@ int LyXLex::lex() 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; @@ -114,16 +123,20 @@ int LyXLex::GetInteger() 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 LyXLex::GetString() const +string const LyXLex::GetString() const { return pimpl_->GetString(); } @@ -132,7 +145,7 @@ string 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 // explicit tokens (JMarc) -string LyXLex::getLongString(string const & endtoken) +string const LyXLex::getLongString(string const & endtoken) { string str, prefix; bool firstline = true; @@ -164,7 +177,7 @@ string LyXLex::getLongString(string const & endtoken) } if (!prefix.empty() - && prefixIs(tmpstr, prefix.c_str())) { + && prefixIs(tmpstr, prefix)) { tmpstr.erase(0, prefix.length() - 1); } str += frontStrip(tmpstr, "\t") + '\n';