/* * GraphLCD skin library * * xml.h - xml parser class * * This file is released under the GNU General Public License. Refer * to the COPYING file distributed with this package. * * based on text2skin xml parser * */ #ifndef _GLCDSKIN_XML_H_ #define _GLCDSKIN_XML_H_ #include #include namespace GLCD { #define XML_NODE_START_CB(CB) \ bool (*CB)(const std::string &tag, std::map &attr) #define XML_NODE_END_CB(CB) \ bool (*CB)(const std::string &tag) #define XML_CDATA_CB(CB) \ bool (*CB)(const std::string &text) #define XML_PARSE_ERROR_CB(CB) \ void (*CB)(int line, const char *txt, char c) #define XML_PROGRESS_CB(CB) \ void (*CB)(int percent) class cXML { private: bool skipping; int state; int linenr; int delim; std::string data, cdata, tag, attrn, attrv; std::map attr; XML_NODE_START_CB(nodestartcb); XML_NODE_END_CB(nodeendcb); XML_CDATA_CB(cdatacb); XML_PARSE_ERROR_CB(parseerrorcb); XML_PROGRESS_CB(progresscb); protected: bool IsTokenChar(bool start, int c); int ReadChar(int c); public: cXML(const std::string & file); cXML(const char * mem, unsigned int len); void SetNodeStartCB(XML_NODE_START_CB(cb)); void SetNodeEndCB(XML_NODE_END_CB(cb)); void SetCDataCB(XML_CDATA_CB(cb)); void SetParseErrorCB(XML_PARSE_ERROR_CB(cb)); void SetProgressCB(XML_PROGRESS_CB(cb)); int Parse(void); int LineNr(void) const { return linenr; } }; } // end of namespace #endif