00001
00032 #ifndef LL_LLXMLPARSER_H
00033 #define LL_LLXMLPARSER_H
00034
00035 #ifndef XML_STATIC
00036 #define XML_STATIC 1
00037 #endif
00038 #ifdef LL_STANDALONE
00039 #include <expat.h>
00040 #else
00041 #include "expat/expat.h"
00042 #endif
00043
00044 class LLXmlParser
00045 {
00046 public:
00047 LLXmlParser();
00048 virtual ~LLXmlParser();
00049
00050
00051 BOOL parseFile(const std::string &path);
00052
00053
00054
00055
00056 S32 parse( const char* buf, int len, int isFinal );
00057
00058 const char* getErrorString();
00059
00060 S32 getCurrentLineNumber();
00061
00062 S32 getCurrentColumnNumber();
00063
00064 S32 getDepth() { return mDepth; }
00065
00066 protected:
00067
00068
00069 virtual void startElement(const char *name, const char **atts) {}
00070
00071 virtual void endElement(const char *name) {}
00072
00073
00074 virtual void characterData(const char *s, int len) {}
00075
00076
00077 virtual void processingInstruction(const char *target, const char *data) {}
00078
00079
00080 virtual void comment(const char *data) {}
00081
00082 virtual void startCdataSection() {}
00083
00084 virtual void endCdataSection() {}
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098 virtual void defaultData(const char *s, int len) {}
00099
00100
00101
00102
00103
00104 virtual void unparsedEntityDecl(
00105 const char *entityName,
00106 const char *base,
00107 const char *systemId,
00108 const char *publicId,
00109 const char *notationName) {}
00110
00111 public:
00113
00114
00115 static void startElementHandler(void *userData, const XML_Char *name, const XML_Char **atts);
00116 static void endElementHandler(void *userData, const XML_Char *name);
00117 static void characterDataHandler(void *userData, const XML_Char *s, int len);
00118 static void processingInstructionHandler(void *userData, const XML_Char *target, const XML_Char *data);
00119 static void commentHandler(void *userData, const XML_Char *data);
00120 static void startCdataSectionHandler(void *userData);
00121 static void endCdataSectionHandler(void *userData);
00122 static void defaultDataHandler( void *userData, const XML_Char *s, int len);
00123 static void unparsedEntityDeclHandler(
00124 void *userData,
00125 const XML_Char *entityName,
00126 const XML_Char *base,
00127 const XML_Char *systemId,
00128 const XML_Char *publicId,
00129 const XML_Char *notationName);
00130
00131
00132 protected:
00133 XML_Parser mParser;
00134 int mDepth;
00135 char mAuxErrorString[1024];
00136 };
00137
00138 #endif // LL_LLXMLPARSER_H