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