summaryrefslogtreecommitdiff
path: root/glcdskin/xml.h
diff options
context:
space:
mode:
authormrwastl <mrwastl@users.sourceforge.net>2010-04-17 19:16:26 +0200
committermrwastl <mrwastl@users.sourceforge.net>2010-04-17 19:16:26 +0200
commit68ac6628a31cb1472275b5282c5cf9a971d9bddd (patch)
tree0ef788b563efab6688b0381cedd43baaefbc66cc /glcdskin/xml.h
parent1011961a8af0615ee25b79d2bbd7e6820b851556 (diff)
downloadgraphlcd-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.h71
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