]> git.lyx.org Git - lyx.git/blobdiff - src/lyxlex.C
Fix paragraph spacing
[lyx.git] / src / lyxlex.C
index 6fe01651b427b9d89bf6fe14bbd205fbc9eab5ab..958c7a14e680b33cbbc6b05140ae4026a77c1e63 100644 (file)
@@ -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 <config.h>
 
@@ -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;