diff options
author | mrwastl <mrwastl@users.sourceforge.net> | 2010-04-17 19:16:26 +0200 |
---|---|---|
committer | mrwastl <mrwastl@users.sourceforge.net> | 2010-04-17 19:16:26 +0200 |
commit | 68ac6628a31cb1472275b5282c5cf9a971d9bddd (patch) | |
tree | 0ef788b563efab6688b0381cedd43baaefbc66cc /glcdskin/xml.h | |
parent | 1011961a8af0615ee25b79d2bbd7e6820b851556 (diff) | |
download | graphlcd-base-68ac6628a31cb1472275b5282c5cf9a971d9bddd.tar.gz graphlcd-base-68ac6628a31cb1472275b5282c5cf9a971d9bddd.tar.bz2 |
backport of skin-support from 0.2.x to 0.1.x, changes for gcc 4.3 conformity
Diffstat (limited to 'glcdskin/xml.h')
-rw-r--r-- | glcdskin/xml.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/glcdskin/xml.h b/glcdskin/xml.h new file mode 100644 index 0000000..009679c --- /dev/null +++ b/glcdskin/xml.h @@ -0,0 +1,71 @@ +/* + * 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 <string> +#include <map> + +namespace GLCD +{ + +#define XML_NODE_START_CB(CB) \ +bool (*CB)(const std::string &tag, std::map<std::string, std::string> &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<std::string, std::string> 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 |