00001 #ifndef _FL_XMLDOC_H_ 00002 #define _FL_XMLDOC_H_ 00003 00004 #include "Fl_XmlNode.h" 00005 #include "Fl_XmlTokenizer.h" 00006 00007 #include "../Fl_Buffer.h" 00008 00013 00017 class Fl_XmlEntities : public Fl_String_String_Map { 00018 public: 00019 typedef Fl_String_String_Iterator Iterator; 00020 00021 Fl_XmlEntities() { } 00022 00028 bool remove_entity(const char *name) { return remove(name); } 00029 00036 void set_entity(const char *name, const char *replacement) { set_value(name, replacement); } 00037 }; 00038 00044 class Fl_XmlDocType { 00045 friend class Fl_XmlParser; 00046 public: 00047 00048 Fl_XmlDocType() { m_html = false; } 00049 Fl_XmlDocType(const char *name, const char *public_id=0, const char *system_id=0); 00050 00054 const Fl_String &name() const { return m_name; } 00055 00060 const Fl_String &public_id() const { return m_public_id; } 00061 00066 const Fl_String &system_id() const { return m_system_id; } 00067 00072 Fl_XmlEntities &entities() { return m_entities; } 00073 const Fl_XmlEntities &entities() const { return m_entities; } 00074 00082 bool encode_entities(const char *str, Fl_String &ret); 00083 00091 bool decode_entities(const char *str, Fl_String &ret); 00092 00098 bool has_entity(const char *name) const; 00099 00105 bool remove_entity(const char *name) { return m_entities.remove_entity(name); } 00106 00112 Fl_String get_replacement(const char *name) const; 00113 00120 void set_entity(const char *name, const char *replacement) { m_entities.set_entity(name, replacement); } 00121 00122 private: 00123 Fl_XmlEntities m_entities; 00124 00125 Fl_String m_name; 00126 Fl_String m_public_id; 00127 Fl_String m_system_id; 00128 00129 bool m_html; 00130 }; 00131 00143 class Fl_XmlDoc: public Fl_XmlNode 00144 { 00145 friend class Fl_XmlParser; 00146 public: 00150 Fl_XmlDoc(); 00157 Fl_XmlDoc(const char *name, const char *public_id=0, const char *system_id=0); 00158 00162 virtual ~Fl_XmlDoc() { clear(); } 00163 00167 virtual void clear(); 00168 00175 Fl_XmlNode *create_element(const char *tagname); 00176 00183 Fl_XmlNode *create_text(const char *data); 00184 00191 Fl_XmlNode *create_comment(const char *data); 00192 00199 Fl_XmlNode *create_CDATA_section(const char *data); 00200 00208 Fl_XmlNode *create_PI(const char *target, const char *data); 00209 00217 Fl_XmlDocType &doctype() { return m_doctype; } 00218 const Fl_XmlDocType &doctype() const { return m_doctype; } 00219 00223 Fl_XmlNode *root_node(); 00224 00228 static int indent_spaces() { return m_indent_spaces; } 00229 00234 static void indent_spaces(int i) { m_indent_spaces = i; } 00235 00240 void save(Fl_Buffer &buffer) const; 00241 00242 private: 00243 Fl_XmlDocType m_doctype; 00244 static int m_indent_spaces; 00245 }; 00246 00249 #endif 00250