00001 00002 00003 00004 00005 00006
00007 #include "skAlist.h"
00008
00009 const int MAXBUFFER=20000;
00010
00011
00012 EXTERN_TEMPLATE template class CLASSEXPORT skTAList<skTreeNode>;
00013
00017 class CLASSEXPORT skTreeNodeList : public skTAList<skTreeNode>
00018 {
00019 public:
00020 skTreeNodeList();
00021 skTreeNodeList(const skTreeNodeList&);
00022 virtual ~skTreeNodeList();
00023 skTreeNode * findItem(const skString& label) const;
00024 skTreeNode * findItem(const skString& label,const skString& data) const;
00025 skTreeNode * nthElt(USize i) const;
00026 skTreeNodeList& operator=(const skTreeNodeList& );
00027 };
00028
00029 #define USECLASSBUFFER
00030
00031 class P_TreeNodeReader
00032 {
00033 public:
00034 #ifdef STREAMS_ENABLED
00035 P_TreeNodeReader(istream& in);
00036 #endif
00037 enum Lexeme { L_IDENT, L_TEXT, L_LBRACE, L_RBRACE, L_EOF, L_ERROR };
00038
00039 void grabBuffer();
00040 void error(const skString& msg);
00041 bool eof();
00042 int get();
00043 int peek();
00044 Lexeme lex();
00045 void unLex();
00046 skTreeNode * parseTreeNode(skTreeNode * pparent);
00047 void parseTreeNodeList(skTreeNode *);
00048 void addToLexText(Char c);
00049
00050 skString m_FileName;
00051 int m_UnLex;
00052 Lexeme m_LastLexeme;
00053 Char * m_LexText;
00054 unsigned short m_Pos;
00055 unsigned short m_LineNum;
00056 #ifdef STREAMS_ENABLED
00057 istream& m_In;
00058 #endif
00059 bool m_Error;
00060 bool m_UsingClassLexText;
00061
00062 #ifdef USECLASSBUFFER
00063 static Char g_ClassLexText[MAXBUFFER];
00064 static bool g_LexTextUsed;
00065 #endif
00066 };
00067
00068
00069
00070
00071
00072
00073
00074