00001 //$$FILE$$ 00002 //$$VERSION$$ 00003 //$$DATE$$ 00004 //$$LICENSE$$ 00005 00006 00014 #ifndef CIF_PARSER_BASE_H 00015 #define CIF_PARSER_BASE_H 00016 00017 00018 #include <iostream> 00019 #include <stdio.h> 00020 #include <stdlib.h> 00021 #include <string.h> 00022 #include "ISTable.h" 00023 #include "CifFile.h" 00024 #include "CifScannerBase.h" 00025 #include "CifParserInt.h" 00026 #include "CifFileReadDef.h" 00027 00028 00029 #define DATA_TAG "data_" 00030 00031 00041 class CifParser : public CifScanner 00042 { 00043 public: 00061 CifParser(CifFile* cifFileP, bool verbose = false); 00062 00067 CifParser(CifFile* cifFileP, CifFileReadDef readDef, 00068 bool verbose = false); 00069 00087 void Parse(const string& fileName, string& diagnostics); 00088 00102 virtual ~CifParser(); 00103 00108 void Error(const char*); 00109 00114 void Clear(); 00115 00120 void Reset(); 00121 00126 int ProcessLoopDeclaration(void); 00127 00132 int ProcessItemNameList(void); 00133 00138 int ProcessValueList(void); 00139 00144 int ProcessItemValuePair(void); 00145 00150 void ProcessAssignments(void); 00151 00156 void ProcessLoop(void); 00157 00162 void ProcessItemName(void); 00163 00168 void ProcessItemValue(void); 00169 00174 void ProcessLsItemValue(void); 00175 00180 void ProcessUnknownValue(void); 00181 00186 void ProcessMissingValue(void); 00187 00192 void ProcessDataBlockName(void); 00193 00194 private: 00195 CifFile *_fobj; 00196 CifFileReadDef _readDef; 00197 ISTable *_tbl; 00198 int _afterLoop; 00199 int _nTablesInBlock; 00200 int _curItemNo, _curValueNo, _numDataBlocks, _fieldListAlloc, _curRow; 00201 vector<string> _fieldList; 00202 string _pBufValue; 00203 string _tBufKeyword; 00204 string _curCategoryName; 00205 string _curDataBlockName; 00206 string _prevDataBlockName; 00207 void _ComplexWriteTable(); 00208 00209 string errorLog; 00210 int _err, _warn; 00211 }; 00212 00213 #endif /* CIF_PARSER_BASE_H */