XMLParser.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef ROCKETCOREXMLPARSER_H
00029 #define ROCKETCOREXMLPARSER_H
00030
00031 #include <stack>
00032 #include <Rocket/Core/Header.h>
00033 #include <Rocket/Core/BaseXMLParser.h>
00034
00035 namespace Rocket {
00036 namespace Core {
00037
00038 class DocumentHeader;
00039 class Element;
00040 class XMLNodeHandler;
00041
00048 class ROCKETCORE_API XMLParser : public BaseXMLParser
00049 {
00050 public:
00051 XMLParser(Element* root);
00052 ~XMLParser();
00053
00058 static XMLNodeHandler* RegisterNodeHandler(const String& tag, XMLNodeHandler* handler);
00060 static void ReleaseHandlers();
00061
00064 DocumentHeader* GetDocumentHeader();
00067 const URL& GetSourceURL() const;
00068
00069
00070 struct ParseFrame
00071 {
00072
00073 String tag;
00074
00075
00076 Element* element;
00077
00078
00079 XMLNodeHandler* node_handler;
00080
00081
00082 XMLNodeHandler* child_handler;
00083 };
00084
00088 bool PushHandler(const String& tag);
00090 void PushDefaultHandler();
00091
00094 const ParseFrame* GetParseFrame() const;
00095
00096 protected:
00098 virtual void HandleElementStart(const String& name, const XMLAttributes& attributes);
00100 virtual void HandleElementEnd(const String& name);
00102 virtual void HandleData(const String& data);
00103
00104 private:
00105
00106 DocumentHeader* header;
00107
00108 Element* parse_root;
00109
00110
00111 XMLNodeHandler* active_handler;
00112
00113
00114 typedef std::stack< ParseFrame > ParserStack;
00115 ParserStack stack;
00116 };
00117
00118 }
00119 }
00120
00121 #endif