]> git.lyx.org Git - lyx.git/blobdiff - src/lyxlex.h
Fix small bug in reading \set_color in lyxrc
[lyx.git] / src / lyxlex.h
index dcfca5eb9b932157ea3711f08ff17ffa2c3854a2..9f260653db8eb88aa7eafbd813cf55a8b9e66c8f 100644 (file)
 #pragma interface
 #endif
 
-#include <fstream>
-using std::filebuf;
-
-#include "support/LIstream.h"
+#include <iosfwd>
 
 #include "LString.h"
 
@@ -36,7 +33,9 @@ class LyXLex {
 public:
        ///
        LyXLex (keyword_item *, int);
-
+       ///
+       ~LyXLex();
+       
        /// Lex basic codes
        enum {
                ///
@@ -54,11 +53,12 @@ public:
        /// return true if able to open file, else false
        bool setFile(string const & filename);
        ///
-       void setStream(istream & i);
+       void setStream(std::istream & i);
        ///
-       istream & getStream() { return is; }
+       std::istream & getStream();
        /// Danger! Don't use it unless you know what you are doing.
-       void setLineNo(int l) { lineno = l; }
+       void setLineNo(int l);
+       
        /// returns a lex code
        int lex();
 
@@ -71,9 +71,12 @@ public:
          split a word if it contains a backslash.
          */
        bool nextToken();
+       /// Push a token, that next token got from lyxlex.
+       void pushToken(string const &);
        
        /// 
-       int GetLineNo() const { return lineno; }
+       int GetLineNo() const;
+       
        ///
        int GetInteger() const;
        ///
@@ -83,7 +86,14 @@ public:
        ///
        string GetString() const;
        
-       /// get a long string, ended by the tag `endtag'
+       /**
+        * Get a long string, ended by the tag `endtag'
+        * This string can span several lines. The first line
+        * serves as a template for how many spaces the lines
+        * are indented. This much white space is skipped from
+        * each following line. This mechanism does not work
+        * perfectly if you use tabs.
+        */
        string getLongString(string const & endtag);
        
        ///
@@ -94,7 +104,7 @@ public:
        int CheckToken(char const * str[], int print_error);
 
        ///
-       char const * text() const { return &buff[0]; }
+       char const * text() const;
 
        /** Pushes a token list on a stack and replaces it with a new one.
         */
@@ -114,59 +124,13 @@ public:
        /**
          Prints the current token table on the supplied ostream.
          */
-       void printTable(ostream &);
-protected:
-       ///
-       enum {
-               ///
-               LEX_MAX_BUFF = 2048
-       };
-
-       ///
-       struct pushed_table {
-               ///
-               pushed_table(){
-                       next= 0;
-                       table_elem= 0;
-               }
-               ///
-               pushed_table * next;
-               ///
-               keyword_item * table_elem;
-               ///
-               int table_siz;
-       };
-
-       /// fb__ is only used to open files, the stream is accessed through is
-       filebuf fb__;
-       /// the stream that we use.
-       istream is;
-       /// 
-       string name;
-       ///
-       int lineno;
-       ///
-       keyword_item * table;
-       ///
-       int no_items;
-       ///
-       char buff[LEX_MAX_BUFF];
-       ///
-       pushed_table * pushed;
-       ///
-       int search_kw(char const * const) const;
-       ///
-       short status;
+       void printTable(std::ostream &);
+private:
+       struct Pimpl;
+       Pimpl * pimpl_;
 };
 
 
-inline
-bool LyXLex::IsOK() const
-{
-       return is.good();
-}
-
-
 // This is needed to ensure that the pop is done upon exit from methods
 // with more than one exit point or that can return as a response to
 // exceptions. (Lgb)