00001 #ifndef _FL_XMLPARSER_H_
00002 #define _FL_XMLPARSER_H_
00003
00004 #include "Fl_Xml.h"
00005 #include "Fl_XmlHandler.h"
00006 #include "Fl_XmlTokenizer.h"
00007
00008 class Fl_XmlNode;
00009 class Fl_XmlDoc;
00010
00015
00024 class Fl_XmlParser
00025 {
00026 friend class Fl_XmlTokenizer;
00027
00028 public:
00037 static Fl_XmlDoc *create_dom(Fl_XmlTokenizer &tokenizer, Fl_XmlLocator *locator=0, bool html_mode=false);
00038
00047 static Fl_XmlDoc *create_dom(const char *buffer, int buffer_len, Fl_XmlLocator *locator=0, bool html_mode=false);
00048
00057 static Fl_XmlDoc *create_dom(FILE *fp, Fl_XmlLocator *locator=0, bool html_mode=false);
00058
00068 static bool create_sax(Fl_XmlHandler &handler, Fl_XmlTokenizer &tokenizer, bool html_mode=false);
00069
00080 static bool create_sax(Fl_XmlHandler &handler, const char *buffer, int buffer_len, bool html_mode=false);
00081
00091 static bool create_sax(Fl_XmlHandler &handler, FILE *fp, bool html_mode=false);
00092
00098 void handler(Fl_XmlHandler *handler) { m_eventhandler = handler; }
00099
00103 Fl_XmlHandler *handler() const { return m_eventhandler; }
00104
00105 protected:
00110 Fl_XmlParser(Fl_XmlTokenizer &tokenizer);
00111
00113 bool parse_document(Fl_XmlDoc *doc);
00114
00116 bool parse_doctype(Fl_XmlDocType *doc);
00117
00119 bool parse_node(Fl_XmlDoc *doc, Fl_XmlNode *node);
00120
00122 bool parse_attributes(Fl_XmlDoc *doc, Fl_XmlAttributes *attr);
00123
00125 bool parse_comment(Fl_XmlNode *node);
00126
00128 void html_mode(bool val) { m_html_mode = val; }
00130 bool html_mode() const { return m_html_mode; }
00131
00132 private:
00133
00134 Fl_XmlTokenizer &tokenizer;
00135
00136
00137 Fl_XmlHandler *m_eventhandler;
00138
00139
00140 bool m_html_mode;
00141 bool tag_end;
00142 int force_ret;
00143 Fl_String last_block;
00144 Fl_String parent_name;
00145 };
00146
00149 #endif