00001 #ifndef XSIL_XREADER_HH
00002 #define XSIL_XREADER_HH
00003
00004 #include <iosfwd>
00005 #include <string>
00006 #include "lxr.hh"
00007 #include "xsil.hh"
00008 #include "attrList.hh"
00009
00010 namespace xsil {
00011
00012 class array;
00013 class ligolw;
00014 class XSIL;
00015 class param;
00016 class Stream;
00017 class table;
00018 class time;
00019
00037 class Xreader {
00038 public:
00039
00042 enum LxrTokens {
00043 tkEnd,
00044 tkWord,
00045 tkString,
00046 tkNumber,
00047 tkEqual,
00048 tkOpenTag,
00049 tkOpenETag,
00050 tkOpenCTag,
00051 tkOpenHead,
00052 tkEndTag,
00053 tkEndSTag,
00054 tkCloseHead,
00055 tkEscape,
00056 tkQMark
00057 };
00058
00059 private:
00060 enum CharGroups {
00061 kInvChar,
00062 kAlpha,
00063 kNumer,
00064 kSpace
00065 };
00066
00067 enum LxrStates {
00068 stStart,
00069 stInWord,
00070 stInString,
00071 stNumInt,
00072 stNumFix,
00073 stNumExp ,
00074 stNumSExp,
00075 stTag,
00076 stQMark,
00077 stETag,
00078 stEscape,
00079 stNStates
00080 };
00081
00082 public:
00087 Xreader(std::istream& istr);
00088
00092 ~Xreader(void);
00093
00100 array* readArray(const attr_list& a, int hdronly);
00101
00106 xobj* readDoc(void);
00107
00112 void readEndTag(const std::string& endtag);
00113
00116 void readHeader(void);
00117
00120 ligolw* readLigoLW(const attr_list& a, int tagonly);
00121
00124 xobj* readObject(void);
00125
00128 param* readParam(const attr_list& a, int tagonly);
00129
00132 Stream* readStream(const attr_list& a, int tagonly);
00133
00136 table* readTable(const attr_list& a, int tagonly);
00137
00140 time* readTime(const attr_list& a, int tagonly);
00141
00150 int readTag(std::string& name, attr_list& attrs);
00151
00156 void setDebug(int lvl);
00157
00158 private:
00159
00160 void lxSetup(void);
00161
00162
00163 LxrTokens getToken(std::string& token);
00164
00165 private:
00166 std::istream& mStream;
00167 lxr mLexr;
00168 int mDebug;
00169 };
00170
00171 }
00172
00173 #endif // XSIL_XREADER_HH