OpenMW
|
00001 #ifndef CSM_FILTER_PARSER_H 00002 #define CSM_FILTER_PARSER_H 00003 00004 #include <boost/shared_ptr.hpp> 00005 00006 #include "node.hpp" 00007 00008 namespace CSMWorld 00009 { 00010 class Data; 00011 } 00012 00013 namespace CSMFilter 00014 { 00015 struct Token; 00016 00017 class Parser 00018 { 00019 boost::shared_ptr<Node> mFilter; 00020 std::string mInput; 00021 int mIndex; 00022 bool mError; 00023 const CSMWorld::Data& mData; 00024 00025 Token getStringToken(); 00026 00027 Token getNumberToken(); 00028 00029 Token getNextToken(); 00030 00031 Token checkKeywords (const Token& token); 00033 00034 boost::shared_ptr<Node> parseImp (bool allowEmpty = false, bool ignoreOneShot = false); 00036 00037 boost::shared_ptr<Node> parseNAry (const Token& keyword); 00038 00039 boost::shared_ptr<Node> parseText(); 00040 00041 boost::shared_ptr<Node> parseValue(); 00042 00043 void error(); 00044 00045 public: 00046 00047 Parser (const CSMWorld::Data& data); 00048 00049 bool parse (const std::string& filter, bool allowPredefined = true); 00053 00054 boost::shared_ptr<Node> getFilter() const; 00056 }; 00057 } 00058 00059 #endif