#pragma interface
#endif
-#include <fstream>
-using std::filebuf;
-
-#include "support/LIstream.h"
+#include <iosfwd>
#include "LString.h"
public:
///
LyXLex (keyword_item *, int);
-
+ ///
+ ~LyXLex();
+
/// Lex basic codes
enum {
///
/// 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();
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;
///
///
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);
///
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.
*/
/**
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)