diff --git a/docs/html/annotated.html b/docs/html/annotated.html new file mode 100644 index 0000000..92baeb6 --- /dev/null +++ b/docs/html/annotated.html @@ -0,0 +1,37 @@ + +
+| pugi::transfer_ownership_tag | Struct used to distinguish parsing with ownership transfer from parsing without it |
| pugi::xml_attribute | A light-weight wrapper for manipulating attributes in DOM tree |
| pugi::xml_attribute_iterator | Attribute iterator |
| pugi::xml_document | Document class (DOM tree root) |
| pugi::xml_node | A light-weight wrapper for manipulating nodes in DOM tree |
| pugi::xml_node_iterator | Child node iterator |
| pugi::xml_tree_walker | Abstract tree walker class |
| pugi::xpath_exception | XPath exception class |
| pugi::xpath_node | XPath node class |
| pugi::xpath_node_set | Not necessarily ordered constant collection of XPath nodes |
| pugi::xpath_query | A class that holds compiled XPath query and allows to evaluate query result |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__attribute-members.html b/docs/html/classpugi_1_1xml__attribute-members.html
new file mode 100644
index 0000000..83c136c
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute-members.html
@@ -0,0 +1,52 @@
+
+
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__attribute.html b/docs/html/classpugi_1_1xml__attribute.html
new file mode 100644
index 0000000..840a4a7
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute.html
@@ -0,0 +1,881 @@
+
+
+
+Note: xml_attribute does not allocate any memory for the attribute it wraps; it only wraps a pointer to existing attribute. +
+
Public Member Functions | |
| xml_attribute () | |
| Default ctor. | |
| operator unspecified_bool_type () const | |
| Safe bool conversion. | |
| +bool | operator! () const |
| bool | operator== (const xml_attribute &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator!= (const xml_attribute &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator< (const xml_attribute &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator> (const xml_attribute &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator<= (const xml_attribute &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator>= (const xml_attribute &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| xml_attribute | next_attribute () const |
| Get next attribute in attribute list of node that contains the attribute. | |
| xml_attribute | previous_attribute () const |
| Get previous attribute in attribute list of node that contains the attribute. | |
| int | as_int () const |
| Cast attribute value as int. | |
| double | as_double () const |
| Cast attribute value as double. | |
| float | as_float () const |
| Cast attribute value as float. | |
| bool | as_bool () const |
| Cast attribute value as bool. | |
| +unsigned int | document_order () const |
| xml_attribute & | operator= (const char *rhs) |
| Set attribute value to rhs. | |
| xml_attribute & | operator= (int rhs) |
| Set attribute value to rhs. | |
| xml_attribute & | operator= (double rhs) |
| Set attribute value to rhs. | |
| xml_attribute & | operator= (bool rhs) |
| Set attribute value to either 'true' or 'false' (depends on whether rhs is true or false). | |
| bool | set_name (const char *rhs) |
| Set attribute name to rhs. | |
| bool | set_value (const char *rhs) |
| Set attribute value to rhs. | |
| bool | empty () const |
| Check if attribute is empty. | |
| const char * | name () const |
| Get attribute name. | |
| const char * | value () const |
| Get attribute value. | |
Friends | |
| +class | xml_attribute_iterator |
| +class | xml_node |
+
+
|
+
| + + | +
+
+ +Default ctor. + +Constructs an empty attribute. |
+
+
+
|
+
| + + | +
+
+ +Safe bool conversion. + +Allows xml_node to be used in a context where boolean variable is expected, such as 'if (node)'. |
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Get next attribute in attribute list of node that contains the attribute. + +
|
+
+
+
|
+
| + + | +
+
+ +Get previous attribute in attribute list of node that contains the attribute. + +
|
+
+
+
|
+
| + + | +
+
+ +Cast attribute value as int. + +
|
+
+
+
|
+
| + + | +
+
+ +Cast attribute value as double. + +
|
+
+
+
|
+
| + + | +
+
+ +Cast attribute value as float. + +
|
+
+
+
|
+
| + + | +
+
+ +Cast attribute value as bool. + +Returns true for attributes with values that start with '1', 't', 'T', 'y', 'Y', returns false for other attributes. +
|
+
+
+
|
+
| + + | +
+
+ +Set attribute value to rhs. + +
|
+
+
+
|
+
| + + | +
+
+ +Set attribute value to rhs. + +
|
+
+
+
|
+
| + + | +
+
+ +Set attribute value to rhs. + +
|
+
+
+
|
+
| + + | +
+
+ +Set attribute value to either 'true' or 'false' (depends on whether rhs is true or false). + +
|
+
+
+
|
+
| + + | +
+
+ +Set attribute name to rhs. + +
|
+
+
+
|
+
| + + | +
+
+ +Set attribute value to rhs. + +
|
+
+
+
|
+
| + + | +
+
+ +Check if attribute is empty. + +
|
+
+
+
|
+
| + + | +
+
+ +Get attribute name. + +
|
+
+
+
|
+
| + + | +
+
+ +Get attribute value. + +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__attribute__coll__graph.map b/docs/html/classpugi_1_1xml__attribute__coll__graph.map
new file mode 100644
index 0000000..5a14779
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute__coll__graph.map
@@ -0,0 +1 @@
+base referer
diff --git a/docs/html/classpugi_1_1xml__attribute__coll__graph.md5 b/docs/html/classpugi_1_1xml__attribute__coll__graph.md5
new file mode 100644
index 0000000..5c6e354
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute__coll__graph.md5
@@ -0,0 +1 @@
+bbcc1bb9d46dc6d7963d87bb57d9c972
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__attribute__coll__graph.png b/docs/html/classpugi_1_1xml__attribute__coll__graph.png
new file mode 100644
index 0000000..92a5dc0
Binary files /dev/null and b/docs/html/classpugi_1_1xml__attribute__coll__graph.png differ
diff --git a/docs/html/classpugi_1_1xml__attribute__iterator-members.html b/docs/html/classpugi_1_1xml__attribute__iterator-members.html
new file mode 100644
index 0000000..48c5720
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute__iterator-members.html
@@ -0,0 +1,37 @@
+
+
+| operator *() | pugi::xml_attribute_iterator | |
| operator!=(const xml_attribute_iterator &rhs) const | pugi::xml_attribute_iterator | |
| operator++() | pugi::xml_attribute_iterator | |
| operator++(int) | pugi::xml_attribute_iterator | |
| operator--() | pugi::xml_attribute_iterator | |
| operator--(int) | pugi::xml_attribute_iterator | |
| operator->() | pugi::xml_attribute_iterator | |
| operator==(const xml_attribute_iterator &rhs) const | pugi::xml_attribute_iterator | |
| xml_attribute_iterator() | pugi::xml_attribute_iterator | |
| xml_attribute_iterator(const xml_attribute &node) | pugi::xml_attribute_iterator | |
| xml_attribute_iterator(xml_attribute_struct *ref, xml_attribute_struct *prev) | pugi::xml_attribute_iterator | |
| xml_node (defined in pugi::xml_attribute_iterator) | pugi::xml_attribute_iterator | [friend] |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__attribute__iterator.html b/docs/html/classpugi_1_1xml__attribute__iterator.html
new file mode 100644
index 0000000..81b80cb
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute__iterator.html
@@ -0,0 +1,414 @@
+
+
+

+It's a bidirectional iterator with value type 'xml_attribute'. +
+
Public Member Functions | |
| + | xml_attribute_iterator () |
| Default ctor. | |
| xml_attribute_iterator (const xml_attribute &node) | |
| Initializing ctor. | |
| xml_attribute_iterator (xml_attribute_struct *ref, xml_attribute_struct *prev) | |
| Initializing ctor (for past-the-end). | |
| bool | operator== (const xml_attribute_iterator &rhs) const |
| Check if this iterator is equal to rhs. | |
| bool | operator!= (const xml_attribute_iterator &rhs) const |
| Check if this iterator is not equal to rhs. | |
| xml_attribute & | operator * () |
| Dereferencing operator. | |
| xml_attribute * | operator-> () |
| Member access operator. | |
| const xml_attribute_iterator & | operator++ () |
| Pre-increment operator. | |
| xml_attribute_iterator | operator++ (int) |
| Post-increment operator. | |
| const xml_attribute_iterator & | operator-- () |
| Pre-decrement operator. | |
| xml_attribute_iterator | operator-- (int) |
| Post-decrement operator. | |
Friends | |
| +class | xml_node |
+
+
|
+
| + + | +
+
+ +Initializing ctor. + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Initializing ctor (for past-the-end). + +
|
+
+
+
|
+
| + + | +
+
+ +Check if this iterator is equal to rhs. + +
|
+
+
+
|
+
| + + | +
+
+ +Check if this iterator is not equal to rhs. + +
|
+
+
+
|
+
| + + | +
+
+ +Dereferencing operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Member access operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Pre-increment operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Post-increment operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Pre-decrement operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Post-decrement operator. + +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.map b/docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.map
new file mode 100644
index 0000000..8ab0214
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xml__attribute.html 394,98 528,125
diff --git a/docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.md5 b/docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.md5
new file mode 100644
index 0000000..374ea03
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.md5
@@ -0,0 +1 @@
+fca591ae465868d5d6efde7fe15693de
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.png b/docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.png
new file mode 100644
index 0000000..d188df2
Binary files /dev/null and b/docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.png differ
diff --git a/docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.map b/docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.map
new file mode 100644
index 0000000..5a14779
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.map
@@ -0,0 +1 @@
+base referer
diff --git a/docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.md5 b/docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.md5
new file mode 100644
index 0000000..c6bbcb8
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.md5
@@ -0,0 +1 @@
+4426af196a7b9222c3d5e7c1a18fcd84
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.png b/docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.png
new file mode 100644
index 0000000..8b08b13
Binary files /dev/null and b/docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.png differ
diff --git a/docs/html/classpugi_1_1xml__document-members.html b/docs/html/classpugi_1_1xml__document-members.html
new file mode 100644
index 0000000..e25d78d
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__document-members.html
@@ -0,0 +1,103 @@
+
+
+| _root (defined in pugi::xml_node) | pugi::xml_node | [protected] |
| all_elements_by_name(const char *name, OutputIterator it) const | pugi::xml_node | |
| all_elements_by_name_w(const char *name, OutputIterator it) const | pugi::xml_node | |
| append_attribute(const char *name) | pugi::xml_node | |
| append_child(xml_node_type type=node_element) | pugi::xml_node | |
| attribute(const char *name) const | pugi::xml_node | |
| attribute_iterator typedef | pugi::xml_node | |
| attribute_w(const char *name) const | pugi::xml_node | |
| attributes_begin() const | pugi::xml_node | |
| attributes_end() const | pugi::xml_node | |
| begin() const | pugi::xml_node | |
| child(const char *name) const | pugi::xml_node | |
| child_value() const | pugi::xml_node | |
| child_value(const char *name) const | pugi::xml_node | |
| child_value_w(const char *name) const | pugi::xml_node | |
| child_w(const char *name) const | pugi::xml_node | |
| document_order() const (defined in pugi::xml_node) | pugi::xml_node | |
| empty() const | pugi::xml_node | |
| end() const | pugi::xml_node | |
| find_attribute(Predicate pred) const | pugi::xml_node | [inline] |
| find_child(Predicate pred) const | pugi::xml_node | [inline] |
| find_node(Predicate pred) const | pugi::xml_node | [inline] |
| first_attribute() const | pugi::xml_node | |
| first_child() const | pugi::xml_node | |
| first_element_by_path(const char *path, char delimiter= '/') const | pugi::xml_node | |
| get_allocator() const (defined in pugi::xml_node) | pugi::xml_node | [protected] |
| insert_attribute_after(const char *name, const xml_attribute &attr) | pugi::xml_node | |
| insert_attribute_before(const char *name, const xml_attribute &attr) | pugi::xml_node | |
| insert_child_after(xml_node_type type, const xml_node &node) | pugi::xml_node | |
| insert_child_before(xml_node_type type, const xml_node &node) | pugi::xml_node | |
| iterator typedef | pugi::xml_node | |
| last_attribute() const | pugi::xml_node | |
| last_child() const | pugi::xml_node | |
| load(std::istream &stream, unsigned int options=parse_default) | pugi::xml_document | |
| load(const char *contents, unsigned int options=parse_default) | pugi::xml_document | |
| load_file(const char *name, unsigned int options=parse_default) | pugi::xml_document | |
| name() const | pugi::xml_node | |
| next_sibling(const char *name) const | pugi::xml_node | |
| next_sibling() const | pugi::xml_node | |
| next_sibling_w(const char *name) const | pugi::xml_node | |
| operator unspecified_bool_type() const | pugi::xml_node | |
| operator!() const (defined in pugi::xml_node) | pugi::xml_node | |
| operator!=(const xml_node &r) const | pugi::xml_node | |
| operator<(const xml_node &r) const | pugi::xml_node | |
| operator<=(const xml_node &r) const | pugi::xml_node | |
| operator==(const xml_node &r) const | pugi::xml_node | |
| operator>(const xml_node &r) const | pugi::xml_node | |
| operator>=(const xml_node &r) const | pugi::xml_node | |
| parent() const | pugi::xml_node | |
| parse(char *xmlstr, unsigned int options=parse_default) | pugi::xml_document | |
| parse(const transfer_ownership_tag &, char *xmlstr, unsigned int options=parse_default) | pugi::xml_document | |
| path(char delimiter= '/') const | pugi::xml_node | |
| precompute_document_order() | pugi::xml_document | |
| precompute_document_order_impl() (defined in pugi::xml_node) | pugi::xml_node | [protected] |
| previous_sibling(const char *name) const | pugi::xml_node | |
| previous_sibling() const | pugi::xml_node | |
| previous_sibling_w(const char *name) const | pugi::xml_node | |
| print(std::ostream &os, const char *indent="\t", unsigned int flags=format_default, unsigned int depth=0) | pugi::xml_node | |
| remove_attribute(const xml_attribute &a) | pugi::xml_node | |
| remove_attribute(const char *name) | pugi::xml_node | |
| remove_child(const xml_node &n) | pugi::xml_node | |
| remove_child(const char *name) | pugi::xml_node | |
| root() const | pugi::xml_node | |
| save_file(const char *name, const char *indent="\t", unsigned int flags=format_default) | pugi::xml_document | |
| select_nodes(const char *query) const | pugi::xml_node | |
| select_nodes(xpath_query &query) const | pugi::xml_node | |
| select_single_node(const char *query) const | pugi::xml_node | |
| select_single_node(xpath_query &query) const | pugi::xml_node | |
| set_name(const char *rhs) | pugi::xml_node | |
| set_value(const char *rhs) | pugi::xml_node | |
| traverse(xml_tree_walker &walker) | pugi::xml_node | |
| type() const | pugi::xml_node | |
| unspecified_bool_type typedef (defined in pugi::xml_node) | pugi::xml_node | [protected] |
| value() const | pugi::xml_node | |
| xml_document() | pugi::xml_document | |
| xml_node(xml_node_struct *p) (defined in pugi::xml_node) | pugi::xml_node | [explicit, protected] |
| xml_node() | pugi::xml_node | |
| ~xml_document() | pugi::xml_document |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__document.html b/docs/html/classpugi_1_1xml__document.html
new file mode 100644
index 0000000..c3a4bd4
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__document.html
@@ -0,0 +1,365 @@
+
+
+

+This class has noncopyable semantics (private copy ctor/assignment operator). +
+
Public Member Functions | |
| + | xml_document () |
| Default ctor, makes empty document. | |
| + | ~xml_document () |
| Dtor. | |
| bool | load (std::istream &stream, unsigned int options=parse_default) |
| Load document from stream. | |
| bool | load (const char *contents, unsigned int options=parse_default) |
| Load document from string. | |
| bool | load_file (const char *name, unsigned int options=parse_default) |
| Load document from file. | |
| bool | parse (char *xmlstr, unsigned int options=parse_default) |
| Parse the given XML string in-situ. | |
| bool | parse (const transfer_ownership_tag &, char *xmlstr, unsigned int options=parse_default) |
| Parse the given XML string in-situ (gains ownership). | |
| bool | save_file (const char *name, const char *indent="\t", unsigned int flags=format_default) |
| Save XML to file. | |
| +void | precompute_document_order () |
| Compute document order for the whole tree Sometimes this makes evaluation of XPath queries faster. | |
+
+
|
+ ||||||||||||
| + + | +
+
+ +Load document from stream. + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Load document from string. + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Load document from file. + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Parse the given XML string in-situ. + +The string is modified; you should ensure that string data will persist throughout the document's lifetime. Although, document does not gain ownership over the string, so you should free the memory occupied by it manually. +
|
+
+
+
|
+ ||||||||||||||||
| + + | +
+
+ +Parse the given XML string in-situ (gains ownership). + +The string is modified; document gains ownership over the string, so you don't have to worry about it's lifetime. Call example: doc.parse(transfer_ownership_tag(), string, options); +
|
+
+
+
|
+ ||||||||||||||||
| + + | +
+
+ +Save XML to file. + +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__document__coll__graph.map b/docs/html/classpugi_1_1xml__document__coll__graph.map
new file mode 100644
index 0000000..78dbed9
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__document__coll__graph.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xml__node.html 17,98 129,125
diff --git a/docs/html/classpugi_1_1xml__document__coll__graph.md5 b/docs/html/classpugi_1_1xml__document__coll__graph.md5
new file mode 100644
index 0000000..6da3440
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__document__coll__graph.md5
@@ -0,0 +1 @@
+3e4052a1037be38a0cdf2df3c750dd84
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__document__coll__graph.png b/docs/html/classpugi_1_1xml__document__coll__graph.png
new file mode 100644
index 0000000..ac5f77f
Binary files /dev/null and b/docs/html/classpugi_1_1xml__document__coll__graph.png differ
diff --git a/docs/html/classpugi_1_1xml__document__inherit__graph.map b/docs/html/classpugi_1_1xml__document__inherit__graph.map
new file mode 100644
index 0000000..a324f1d
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__document__inherit__graph.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xml__node.html 24,7 136,34
diff --git a/docs/html/classpugi_1_1xml__document__inherit__graph.md5 b/docs/html/classpugi_1_1xml__document__inherit__graph.md5
new file mode 100644
index 0000000..71d9ecc
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__document__inherit__graph.md5
@@ -0,0 +1 @@
+68a77824c939d2564bd1548379a7c1e1
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__document__inherit__graph.png b/docs/html/classpugi_1_1xml__document__inherit__graph.png
new file mode 100644
index 0000000..8f89193
Binary files /dev/null and b/docs/html/classpugi_1_1xml__document__inherit__graph.png differ
diff --git a/docs/html/classpugi_1_1xml__node-members.html b/docs/html/classpugi_1_1xml__node-members.html
new file mode 100644
index 0000000..0a4dcee
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node-members.html
@@ -0,0 +1,95 @@
+
+
+| _root (defined in pugi::xml_node) | pugi::xml_node | [protected] |
| all_elements_by_name(const char *name, OutputIterator it) const | pugi::xml_node | |
| all_elements_by_name_w(const char *name, OutputIterator it) const | pugi::xml_node | |
| append_attribute(const char *name) | pugi::xml_node | |
| append_child(xml_node_type type=node_element) | pugi::xml_node | |
| attribute(const char *name) const | pugi::xml_node | |
| attribute_iterator typedef | pugi::xml_node | |
| attribute_w(const char *name) const | pugi::xml_node | |
| attributes_begin() const | pugi::xml_node | |
| attributes_end() const | pugi::xml_node | |
| begin() const | pugi::xml_node | |
| child(const char *name) const | pugi::xml_node | |
| child_value() const | pugi::xml_node | |
| child_value(const char *name) const | pugi::xml_node | |
| child_value_w(const char *name) const | pugi::xml_node | |
| child_w(const char *name) const | pugi::xml_node | |
| document_order() const (defined in pugi::xml_node) | pugi::xml_node | |
| empty() const | pugi::xml_node | |
| end() const | pugi::xml_node | |
| find_attribute(Predicate pred) const | pugi::xml_node | [inline] |
| find_child(Predicate pred) const | pugi::xml_node | [inline] |
| find_node(Predicate pred) const | pugi::xml_node | [inline] |
| first_attribute() const | pugi::xml_node | |
| first_child() const | pugi::xml_node | |
| first_element_by_path(const char *path, char delimiter= '/') const | pugi::xml_node | |
| get_allocator() const (defined in pugi::xml_node) | pugi::xml_node | [protected] |
| insert_attribute_after(const char *name, const xml_attribute &attr) | pugi::xml_node | |
| insert_attribute_before(const char *name, const xml_attribute &attr) | pugi::xml_node | |
| insert_child_after(xml_node_type type, const xml_node &node) | pugi::xml_node | |
| insert_child_before(xml_node_type type, const xml_node &node) | pugi::xml_node | |
| iterator typedef | pugi::xml_node | |
| last_attribute() const | pugi::xml_node | |
| last_child() const | pugi::xml_node | |
| name() const | pugi::xml_node | |
| next_sibling(const char *name) const | pugi::xml_node | |
| next_sibling() const | pugi::xml_node | |
| next_sibling_w(const char *name) const | pugi::xml_node | |
| operator unspecified_bool_type() const | pugi::xml_node | |
| operator!() const (defined in pugi::xml_node) | pugi::xml_node | |
| operator!=(const xml_node &r) const | pugi::xml_node | |
| operator<(const xml_node &r) const | pugi::xml_node | |
| operator<=(const xml_node &r) const | pugi::xml_node | |
| operator==(const xml_node &r) const | pugi::xml_node | |
| operator>(const xml_node &r) const | pugi::xml_node | |
| operator>=(const xml_node &r) const | pugi::xml_node | |
| parent() const | pugi::xml_node | |
| path(char delimiter= '/') const | pugi::xml_node | |
| precompute_document_order_impl() (defined in pugi::xml_node) | pugi::xml_node | [protected] |
| previous_sibling(const char *name) const | pugi::xml_node | |
| previous_sibling() const | pugi::xml_node | |
| previous_sibling_w(const char *name) const | pugi::xml_node | |
| print(std::ostream &os, const char *indent="\t", unsigned int flags=format_default, unsigned int depth=0) | pugi::xml_node | |
| remove_attribute(const xml_attribute &a) | pugi::xml_node | |
| remove_attribute(const char *name) | pugi::xml_node | |
| remove_child(const xml_node &n) | pugi::xml_node | |
| remove_child(const char *name) | pugi::xml_node | |
| root() const | pugi::xml_node | |
| select_nodes(const char *query) const | pugi::xml_node | |
| select_nodes(xpath_query &query) const | pugi::xml_node | |
| select_single_node(const char *query) const | pugi::xml_node | |
| select_single_node(xpath_query &query) const | pugi::xml_node | |
| set_name(const char *rhs) | pugi::xml_node | |
| set_value(const char *rhs) | pugi::xml_node | |
| traverse(xml_tree_walker &walker) | pugi::xml_node | |
| type() const | pugi::xml_node | |
| unspecified_bool_type typedef (defined in pugi::xml_node) | pugi::xml_node | [protected] |
| value() const | pugi::xml_node | |
| xml_node(xml_node_struct *p) (defined in pugi::xml_node) | pugi::xml_node | [explicit, protected] |
| xml_node() | pugi::xml_node | |
| xml_node_iterator (defined in pugi::xml_node) | pugi::xml_node | [friend] |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__node.html b/docs/html/classpugi_1_1xml__node.html
new file mode 100644
index 0000000..2be96f3
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node.html
@@ -0,0 +1,2473 @@
+
+
+

+Note: xml_node does not allocate any memory for the node it wraps; it only wraps a pointer to existing node. +
+
Public Types | |
| typedef xml_node_iterator | iterator |
| Node iterator type (for child nodes). | |
| typedef xml_attribute_iterator | attribute_iterator |
| Node iterator type (for child nodes). | |
Public Member Functions | |
| xml_node () | |
| Default ctor. | |
| operator unspecified_bool_type () const | |
| Safe bool conversion. | |
| +bool | operator! () const |
| bool | operator== (const xml_node &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator!= (const xml_node &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator< (const xml_node &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator> (const xml_node &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator<= (const xml_node &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| bool | operator>= (const xml_node &r) const |
| Compare wrapped pointer to the attribute to the pointer that is wrapped by r. | |
| iterator | begin () const |
| Access the begin iterator for this node's collection of child nodes. | |
| iterator | end () const |
| Access the end iterator for this node's collection of child nodes. | |
| attribute_iterator | attributes_begin () const |
| Access the begin iterator for this node's collection of attributes. | |
| attribute_iterator | attributes_end () const |
| Access the end iterator for this node's collection of attributes. | |
| bool | empty () const |
| Check if node is empty. | |
| xml_node_type | type () const |
| Get node type. | |
| const char * | name () const |
| Get node name (element name for element nodes, PI target for PI). | |
| const char * | value () const |
| Get node value (comment/PI/PCDATA/CDATA contents, depending on node type). | |
| xml_node | child (const char *name) const |
| Get child with the specified name. | |
| xml_node | child_w (const char *name) const |
| Get child with the name that matches specified pattern. | |
| xml_attribute | attribute (const char *name) const |
| Get attribute with the specified name. | |
| xml_attribute | attribute_w (const char *name) const |
| Get attribute with the name that matches specified pattern. | |
| xml_node | next_sibling (const char *name) const |
| Get first of following sibling nodes with the specified name. | |
| xml_node | next_sibling_w (const char *name) const |
| Get first of the following sibling nodes with the name that matches specified pattern. | |
| xml_node | next_sibling () const |
| Get following sibling. | |
| xml_node | previous_sibling (const char *name) const |
| Get first of preceding sibling nodes with the specified name. | |
| xml_node | previous_sibling_w (const char *name) const |
| Get first of the preceding sibling nodes with the name that matches specified pattern. | |
| xml_node | previous_sibling () const |
| Get preceding sibling. | |
| xml_node | parent () const |
| Get parent node. | |
| xml_node | root () const |
| Get root of DOM tree this node belongs to. | |
| const char * | child_value () const |
| Get child value of current node; that is, value of the first child node of type PCDATA/CDATA. | |
| const char * | child_value (const char *name) const |
| Get child value of child with specified name. | |
| const char * | child_value_w (const char *name) const |
| Get child value of child with name that matches the specified pattern. | |
| bool | set_name (const char *rhs) |
| Set node name to rhs (for PI/element nodes). | |
| bool | set_value (const char *rhs) |
| Set node value to rhs (for PI/PCDATA/CDATA/comment nodes). | |
| xml_attribute | append_attribute (const char *name) |
| Add attribute with specified name (for element nodes). | |
| xml_attribute | insert_attribute_after (const char *name, const xml_attribute &attr) |
| Insert attribute with specified name after attr (for element nodes). | |
| xml_attribute | insert_attribute_before (const char *name, const xml_attribute &attr) |
| Insert attribute with specified name before attr (for element nodes). | |
| xml_node | append_child (xml_node_type type=node_element) |
| Add child node with specified type (for element nodes). | |
| xml_node | insert_child_after (xml_node_type type, const xml_node &node) |
| Insert child node with specified type after node (for element nodes). | |
| xml_node | insert_child_before (xml_node_type type, const xml_node &node) |
| Insert child node with specified type before node (for element nodes). | |
| void | remove_attribute (const xml_attribute &a) |
| Remove specified attribute. | |
| void | remove_attribute (const char *name) |
| Remove attribute with the specified name, if any. | |
| void | remove_child (const xml_node &n) |
| Remove specified child. | |
| void | remove_child (const char *name) |
| Remove child with the specified name, if any. | |
| xml_attribute | first_attribute () const |
| Get first attribute. | |
| xml_attribute | last_attribute () const |
| Get last attribute. | |
| template<typename OutputIterator> | |
| void | all_elements_by_name (const char *name, OutputIterator it) const |
| Get all elements from subtree with given name. | |
| template<typename OutputIterator> | |
| void | all_elements_by_name_w (const char *name, OutputIterator it) const |
| Get all elements from subtree with name that matches given pattern. | |
| xml_node | first_child () const |
| Get first child. | |
| xml_node | last_child () const |
| Get last child. | |
| template<typename Predicate> | |
| xml_attribute | find_attribute (Predicate pred) const |
| Find attribute using predicate. | |
| template<typename Predicate> | |
| xml_node | find_child (Predicate pred) const |
| Find child node using predicate. | |
| template<typename Predicate> | |
| xml_node | find_node (Predicate pred) const |
| Find node from subtree using predicate. | |
| std::string | path (char delimiter= '/') const |
| Get the absolute node path from root as a text string. | |
| xml_node | first_element_by_path (const char *path, char delimiter= '/') const |
| Search for a node by path. | |
| bool | traverse (xml_tree_walker &walker) |
| Recursively traverse subtree with xml_tree_walker. | |
| xpath_node | select_single_node (const char *query) const |
| Select single node by evaluating XPath query. | |
| xpath_node | select_single_node (xpath_query &query) const |
| Select single node by evaluating XPath query. | |
| xpath_node_set | select_nodes (const char *query) const |
| Select node set by evaluating XPath query. | |
| xpath_node_set | select_nodes (xpath_query &query) const |
| Select node set by evaluating XPath query. | |
| +unsigned int | document_order () const |
| void | print (std::ostream &os, const char *indent="\t", unsigned int flags=format_default, unsigned int depth=0) |
| Print subtree to stream. | |
Protected Types | |
| +typedef xml_node_struct *xml_node::* | unspecified_bool_type |
Protected Member Functions | |
| + | xml_node (xml_node_struct *p) |
| +void | precompute_document_order_impl () |
| +xml_allocator & | get_allocator () const |
Protected Attributes | |
| +xml_node_struct * | _root |
Friends | |
| +class | xml_node_iterator |
+
+
|
+
| + + | +
+
+ +Node iterator type (for child nodes). + +
|
+
+
+
|
+
| + + | +
+
+ +Node iterator type (for child nodes). + +
|
+
+
+
|
+
| + + | +
+
+ +Default ctor. + +Constructs an empty node. |
+
+
+
|
+
| + + | +
+
+ +Safe bool conversion. + +Allows xml_node to be used in a context where boolean variable is expected, such as 'if (node)'. |
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Compare wrapped pointer to the attribute to the pointer that is wrapped by r. + +
|
+
+
+
|
+
| + + | +
+
+ +Access the begin iterator for this node's collection of child nodes. + +
|
+
+
+
|
+
| + + | +
+
+ +Access the end iterator for this node's collection of child nodes. + +
|
+
+
+
|
+
| + + | +
+
+ +Access the begin iterator for this node's collection of attributes. + +
|
+
+
+
|
+
| + + | +
+
+ +Access the end iterator for this node's collection of attributes. + +
|
+
+
+
|
+
| + + | +
+
+ +Check if node is empty. + +
|
+
+
+
|
+
| + + | +
+
+ +Get node type. + +
|
+
+
+
|
+
| + + | +
+
+ +Get node name (element name for element nodes, PI target for PI). + +
|
+
+
+
|
+
| + + | +
+
+ +Get node value (comment/PI/PCDATA/CDATA contents, depending on node type). + +
|
+
+
+
|
+
| + + | +
+
+ +Get child with the specified name. + +
|
+
+
+
|
+
| + + | +
+
+ +Get child with the name that matches specified pattern. + +
|
+
+
+
|
+
| + + | +
+
+ +Get attribute with the specified name. + +
|
+
+
+
|
+
| + + | +
+
+ +Get attribute with the name that matches specified pattern. + +
|
+
+
+
|
+
| + + | +
+
+ +Get first of following sibling nodes with the specified name. + +
|
+
+
+
|
+
| + + | +
+
+ +Get first of the following sibling nodes with the name that matches specified pattern. + +
|
+
+
+
|
+
| + + | +
+
+ +Get following sibling. + +
|
+
+
+
|
+
| + + | +
+
+ +Get first of preceding sibling nodes with the specified name. + +
|
+
+
+
|
+
| + + | +
+
+ +Get first of the preceding sibling nodes with the name that matches specified pattern. + +
|
+
+
+
|
+
| + + | +
+
+ +Get preceding sibling. + +
|
+
+
+
|
+
| + + | +
+
+ +Get parent node. + +
|
+
+
+
|
+
| + + | +
+
+ +Get root of DOM tree this node belongs to. + +
|
+
+
+
|
+
| + + | +
+
+ +Get child value of current node; that is, value of the first child node of type PCDATA/CDATA. + +
|
+
+
+
|
+
| + + | +
+
+ +Get child value of child with specified name. + +
|
+
+
+
|
+
| + + | +
+
+ +Get child value of child with name that matches the specified pattern. + +
|
+
+
+
|
+
| + + | +
+
+ +Set node name to rhs (for PI/element nodes). + +
|
+
+
+
|
+
| + + | +
+
+ +Set node value to rhs (for PI/PCDATA/CDATA/comment nodes). + +
|
+
+
+
|
+
| + + | +
+
+ +Add attribute with specified name (for element nodes). + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Insert attribute with specified name after attr (for element nodes). + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Insert attribute with specified name before attr (for element nodes). + +
|
+
+
+
|
+
| + + | +
+
+ +Add child node with specified type (for element nodes). + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Insert child node with specified type after node (for element nodes). + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Insert child node with specified type before node (for element nodes). + +
|
+
+
+
|
+
| + + | +
+
+ +Remove specified attribute. + +
|
+
+
+
|
+
| + + | +
+
+ +Remove attribute with the specified name, if any. + +
|
+
+
+
|
+
| + + | +
+
+ +Remove specified child. + +
|
+
+
+
|
+
| + + | +
+
+ +Remove child with the specified name, if any. + +
|
+
+
+
|
+
| + + | +
+
+ +Get first attribute. + +
|
+
+
+
|
+
| + + | +
+
+ +Get last attribute. + +
|
+
+
+
|
+ ||||||||||||||||
| + + | +
+
+ +Get all elements from subtree with given name. + +
|
+
+
+
|
+ ||||||||||||||||
| + + | +
+
+ +Get all elements from subtree with name that matches given pattern. + +
|
+
+
+
|
+
| + + | +
+
+ +Get first child. + +
|
+
+
+
|
+
| + + | +
+
+ +Get last child. + +
|
+
+
+
|
+ ||||||||||
| + + | +
+
+ +Find attribute using predicate. + +
|
+
+
+
|
+ ||||||||||
| + + | +
+
+ +Find child node using predicate. + +
|
+
+
+
|
+ ||||||||||
| + + | +
+
+ +Find node from subtree using predicate. + +
|
+
+
+
|
+
| + + | +
+
+ +Get the absolute node path from root as a text string. + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Search for a node by path. + +
|
+
+
+
|
+
| + + | +
+
+ +Recursively traverse subtree with xml_tree_walker. + + +
|
+
+
+
|
+
| + + | +
+
+ +Select single node by evaluating XPath query. + +
|
+
+
+
|
+
| + + | +
+
+ +Select single node by evaluating XPath query. + +
|
+
+
+
|
+
| + + | +
+
+ +Select node set by evaluating XPath query. + +
|
+
+
+
|
+
| + + | +
+
+ +Select node set by evaluating XPath query. + +
|
+
+
+
|
+ ||||||||||||||||||||
| + + | +
+
+ +Print subtree to stream. + +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__node__coll__graph.map b/docs/html/classpugi_1_1xml__node__coll__graph.map
new file mode 100644
index 0000000..5a14779
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__coll__graph.map
@@ -0,0 +1 @@
+base referer
diff --git a/docs/html/classpugi_1_1xml__node__coll__graph.md5 b/docs/html/classpugi_1_1xml__node__coll__graph.md5
new file mode 100644
index 0000000..2572420
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__coll__graph.md5
@@ -0,0 +1 @@
+8b5be5e31df5c5adb3a803e79757f0d2
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__node__coll__graph.png b/docs/html/classpugi_1_1xml__node__coll__graph.png
new file mode 100644
index 0000000..db6620e
Binary files /dev/null and b/docs/html/classpugi_1_1xml__node__coll__graph.png differ
diff --git a/docs/html/classpugi_1_1xml__node__inherit__graph.map b/docs/html/classpugi_1_1xml__node__inherit__graph.map
new file mode 100644
index 0000000..e1b3a3b
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__inherit__graph.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xml__document.html 8,82 152,109
diff --git a/docs/html/classpugi_1_1xml__node__inherit__graph.md5 b/docs/html/classpugi_1_1xml__node__inherit__graph.md5
new file mode 100644
index 0000000..a6ac927
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__inherit__graph.md5
@@ -0,0 +1 @@
+feb1f5b174d36f4f52a15fdc9a9e8309
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__node__inherit__graph.png b/docs/html/classpugi_1_1xml__node__inherit__graph.png
new file mode 100644
index 0000000..d889c51
Binary files /dev/null and b/docs/html/classpugi_1_1xml__node__inherit__graph.png differ
diff --git a/docs/html/classpugi_1_1xml__node__iterator-members.html b/docs/html/classpugi_1_1xml__node__iterator-members.html
new file mode 100644
index 0000000..0910691
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__iterator-members.html
@@ -0,0 +1,37 @@
+
+
+| operator *() | pugi::xml_node_iterator | |
| operator!=(const xml_node_iterator &rhs) const | pugi::xml_node_iterator | |
| operator++() | pugi::xml_node_iterator | |
| operator++(int) | pugi::xml_node_iterator | |
| operator--() | pugi::xml_node_iterator | |
| operator--(int) | pugi::xml_node_iterator | |
| operator->() | pugi::xml_node_iterator | |
| operator==(const xml_node_iterator &rhs) const | pugi::xml_node_iterator | |
| xml_node (defined in pugi::xml_node_iterator) | pugi::xml_node_iterator | [friend] |
| xml_node_iterator() | pugi::xml_node_iterator | |
| xml_node_iterator(const xml_node &node) | pugi::xml_node_iterator | |
| xml_node_iterator(xml_node_struct *ref, xml_node_struct *prev) | pugi::xml_node_iterator |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__node__iterator.html b/docs/html/classpugi_1_1xml__node__iterator.html
new file mode 100644
index 0000000..225c11a
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__iterator.html
@@ -0,0 +1,414 @@
+
+
+

+It's a bidirectional iterator with value type 'xml_node'. +
+
Public Member Functions | |
| + | xml_node_iterator () |
| Default ctor. | |
| xml_node_iterator (const xml_node &node) | |
| Initializing ctor. | |
| xml_node_iterator (xml_node_struct *ref, xml_node_struct *prev) | |
| Initializing ctor (for past-the-end). | |
| bool | operator== (const xml_node_iterator &rhs) const |
| Check if this iterator is equal to rhs. | |
| bool | operator!= (const xml_node_iterator &rhs) const |
| Check if this iterator is not equal to rhs. | |
| xml_node & | operator * () |
| Dereferencing operator. | |
| xml_node * | operator-> () |
| Member access operator. | |
| const xml_node_iterator & | operator++ () |
| Pre-increment operator. | |
| xml_node_iterator | operator++ (int) |
| Post-increment operator. | |
| const xml_node_iterator & | operator-- () |
| Pre-decrement operator. | |
| xml_node_iterator | operator-- (int) |
| Post-decrement operator. | |
Friends | |
| +class | xml_node |
+
+
|
+
| + + | +
+
+ +Initializing ctor. + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Initializing ctor (for past-the-end). + +
|
+
+
+
|
+
| + + | +
+
+ +Check if this iterator is equal to rhs. + +
|
+
+
+
|
+
| + + | +
+
+ +Check if this iterator is not equal to rhs. + +
|
+
+
+
|
+
| + + | +
+
+ +Dereferencing operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Member access operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Pre-increment operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Post-increment operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Pre-decrement operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Post-decrement operator. + +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__node__iterator__coll__graph.map b/docs/html/classpugi_1_1xml__node__iterator__coll__graph.map
new file mode 100644
index 0000000..a1778b4
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__iterator__coll__graph.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xml__node.html 375,98 487,125
diff --git a/docs/html/classpugi_1_1xml__node__iterator__coll__graph.md5 b/docs/html/classpugi_1_1xml__node__iterator__coll__graph.md5
new file mode 100644
index 0000000..90c4c46
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__iterator__coll__graph.md5
@@ -0,0 +1 @@
+22bd4d00266db939271000f74fa43d5f
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__node__iterator__coll__graph.png b/docs/html/classpugi_1_1xml__node__iterator__coll__graph.png
new file mode 100644
index 0000000..820aee7
Binary files /dev/null and b/docs/html/classpugi_1_1xml__node__iterator__coll__graph.png differ
diff --git a/docs/html/classpugi_1_1xml__node__iterator__inherit__graph.map b/docs/html/classpugi_1_1xml__node__iterator__inherit__graph.map
new file mode 100644
index 0000000..5a14779
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__iterator__inherit__graph.map
@@ -0,0 +1 @@
+base referer
diff --git a/docs/html/classpugi_1_1xml__node__iterator__inherit__graph.md5 b/docs/html/classpugi_1_1xml__node__iterator__inherit__graph.md5
new file mode 100644
index 0000000..c91b5e0
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__node__iterator__inherit__graph.md5
@@ -0,0 +1 @@
+0215459dad00cd6fcdc98555bd24087b
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__node__iterator__inherit__graph.png b/docs/html/classpugi_1_1xml__node__iterator__inherit__graph.png
new file mode 100644
index 0000000..e3f04ba
Binary files /dev/null and b/docs/html/classpugi_1_1xml__node__iterator__inherit__graph.png differ
diff --git a/docs/html/classpugi_1_1xml__tree__walker-members.html b/docs/html/classpugi_1_1xml__tree__walker-members.html
new file mode 100644
index 0000000..956ef8a
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__tree__walker-members.html
@@ -0,0 +1,32 @@
+
+
+| begin(xml_node &) | pugi::xml_tree_walker | [virtual] |
| depth() const | pugi::xml_tree_walker | [protected] |
| end(xml_node &) | pugi::xml_tree_walker | [virtual] |
| for_each(xml_node &)=0 | pugi::xml_tree_walker | [pure virtual] |
| xml_node (defined in pugi::xml_tree_walker) | pugi::xml_tree_walker | [friend] |
| xml_tree_walker() | pugi::xml_tree_walker | |
| ~xml_tree_walker() | pugi::xml_tree_walker | [virtual] |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__tree__walker.html b/docs/html/classpugi_1_1xml__tree__walker.html
new file mode 100644
index 0000000..2e73c1a
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__tree__walker.html
@@ -0,0 +1,186 @@
+
+
+
+
+
Public Member Functions | |
| + | xml_tree_walker () |
| Default ctor. | |
| +virtual | ~xml_tree_walker () |
| Virtual dtor. | |
| virtual bool | begin (xml_node &) |
| Callback that is called when traversal of node begins. | |
| virtual bool | for_each (xml_node &)=0 |
| Callback that is called for each node traversed. | |
| virtual bool | end (xml_node &) |
| Callback that is called when traversal of node ends. | |
Protected Member Functions | |
| int | depth () const |
| Get node depth. | |
Friends | |
| +class | xml_node |
+
+
|
+
| + + | +
+
+ +Get node depth. + +
|
+
+
+
|
+
| + + | +
+
+ +Callback that is called when traversal of node begins. + +
|
+
+
+
|
+
| + + | +
+
+ +Callback that is called for each node traversed. + +
|
+
+
+
|
+
| + + | +
+
+ +Callback that is called when traversal of node ends. + +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xml__tree__walker__coll__graph.map b/docs/html/classpugi_1_1xml__tree__walker__coll__graph.map
new file mode 100644
index 0000000..5a14779
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__tree__walker__coll__graph.map
@@ -0,0 +1 @@
+base referer
diff --git a/docs/html/classpugi_1_1xml__tree__walker__coll__graph.md5 b/docs/html/classpugi_1_1xml__tree__walker__coll__graph.md5
new file mode 100644
index 0000000..a7106de
--- /dev/null
+++ b/docs/html/classpugi_1_1xml__tree__walker__coll__graph.md5
@@ -0,0 +1 @@
+d990bdcfb4fd4dd9f8f3a6fe4ee6759b
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xml__tree__walker__coll__graph.png b/docs/html/classpugi_1_1xml__tree__walker__coll__graph.png
new file mode 100644
index 0000000..39c90dd
Binary files /dev/null and b/docs/html/classpugi_1_1xml__tree__walker__coll__graph.png differ
diff --git a/docs/html/classpugi_1_1xpath__exception-members.html b/docs/html/classpugi_1_1xpath__exception-members.html
new file mode 100644
index 0000000..3fa5c6f
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__exception-members.html
@@ -0,0 +1,27 @@
+
+
+| what() const | pugi::xpath_exception | [virtual] |
| xpath_exception(const char *message) | pugi::xpath_exception | [explicit] |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xpath__exception.html b/docs/html/classpugi_1_1xpath__exception.html
new file mode 100644
index 0000000..4278767
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__exception.html
@@ -0,0 +1,108 @@
+
+
+

+
Public Member Functions | |
| xpath_exception (const char *message) | |
| Construct exception from static error string. | |
| virtual const char * | what () const throw () |
| Return error message. | |
+
+
|
+
| + + | +
+
+ +Construct exception from static error string. + +
|
+
+
+
|
+
| + + | +
+
+ +Return error message. + +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xpath__exception__coll__graph.map b/docs/html/classpugi_1_1xpath__exception__coll__graph.map
new file mode 100644
index 0000000..5a14779
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__exception__coll__graph.map
@@ -0,0 +1 @@
+base referer
diff --git a/docs/html/classpugi_1_1xpath__exception__coll__graph.md5 b/docs/html/classpugi_1_1xpath__exception__coll__graph.md5
new file mode 100644
index 0000000..c917263
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__exception__coll__graph.md5
@@ -0,0 +1 @@
+e513ec4c3dceb21149d86032837e55f8
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xpath__exception__coll__graph.png b/docs/html/classpugi_1_1xpath__exception__coll__graph.png
new file mode 100644
index 0000000..f713014
Binary files /dev/null and b/docs/html/classpugi_1_1xpath__exception__coll__graph.png differ
diff --git a/docs/html/classpugi_1_1xpath__exception__inherit__graph.map b/docs/html/classpugi_1_1xpath__exception__inherit__graph.map
new file mode 100644
index 0000000..5a14779
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__exception__inherit__graph.map
@@ -0,0 +1 @@
+base referer
diff --git a/docs/html/classpugi_1_1xpath__exception__inherit__graph.md5 b/docs/html/classpugi_1_1xpath__exception__inherit__graph.md5
new file mode 100644
index 0000000..900b385
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__exception__inherit__graph.md5
@@ -0,0 +1 @@
+531210d868031d4dfad14e6148fd793e
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xpath__exception__inherit__graph.png b/docs/html/classpugi_1_1xpath__exception__inherit__graph.png
new file mode 100644
index 0000000..a88837e
Binary files /dev/null and b/docs/html/classpugi_1_1xpath__exception__inherit__graph.png differ
diff --git a/docs/html/classpugi_1_1xpath__node-members.html b/docs/html/classpugi_1_1xpath__node-members.html
new file mode 100644
index 0000000..f1efe50
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__node-members.html
@@ -0,0 +1,34 @@
+
+
+| attribute() const | pugi::xpath_node | |
| node() const | pugi::xpath_node | |
| operator unspecified_bool_type() const | pugi::xpath_node | |
| operator!=(const xpath_node &n) const | pugi::xpath_node | |
| operator==(const xpath_node &n) const | pugi::xpath_node | |
| parent() const | pugi::xpath_node | |
| xpath_node() | pugi::xpath_node | |
| xpath_node(const xml_node &node) | pugi::xpath_node | |
| xpath_node(const xml_attribute &attribute, const xml_node &parent) | pugi::xpath_node |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xpath__node.html b/docs/html/classpugi_1_1xpath__node.html
new file mode 100644
index 0000000..87b5b59
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__node.html
@@ -0,0 +1,341 @@
+
+
+
+XPath defines node to be either xml_node or xml_attribute in pugixml terminology, so xpath_node is either xml_node or xml_attribute. +
+
Public Member Functions | |
| + | xpath_node () |
| Construct empty XPath node. | |
| xpath_node (const xml_node &node) | |
| Construct XPath node from XML node. | |
| xpath_node (const xml_attribute &attribute, const xml_node &parent) | |
| Construct XPath node from XML attribute. | |
| xml_node | node () const |
| Get XML node, if any. | |
| xml_attribute | attribute () const |
| Get XML attribute, if any. | |
| xml_node | parent () const |
| Get parent of contained XML attribute, if any. | |
| operator unspecified_bool_type () const | |
| Safe bool conversion. | |
| bool | operator== (const xpath_node &n) const |
| Compares two XPath nodes. | |
| bool | operator!= (const xpath_node &n) const |
| Compares two XPath nodes. | |
+
+
|
+
| + + | +
+
+ +Construct XPath node from XML node. + +
|
+
+
+
|
+ ||||||||||||
| + + | +
+
+ +Construct XPath node from XML attribute. + +
|
+
+
+
|
+
| + + | +
+
+ +Get XML node, if any. + +
|
+
+
+
|
+
| + + | +
+
+ +Get XML attribute, if any. + +
|
+
+
+
|
+
| + + | +
+
+ +Get parent of contained XML attribute, if any. + +
|
+
+
+
|
+
| + + | +
+
+ +Safe bool conversion. + +Allows xpath_node to be used in a context where boolean variable is expected, such as 'if (node)'. |
+
+
+
|
+
| + + | +
+
+ +Compares two XPath nodes. + +
|
+
+
+
|
+
| + + | +
+
+ +Compares two XPath nodes. + +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xpath__node__coll__graph.map b/docs/html/classpugi_1_1xpath__node__coll__graph.map
new file mode 100644
index 0000000..dd6359e
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__node__coll__graph.map
@@ -0,0 +1,3 @@
+base referer
+rect $classpugi_1_1xml__node.html 22,98 134,125
+rect $classpugi_1_1xml__attribute.html 166,98 300,125
diff --git a/docs/html/classpugi_1_1xpath__node__coll__graph.md5 b/docs/html/classpugi_1_1xpath__node__coll__graph.md5
new file mode 100644
index 0000000..5b4d30d
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__node__coll__graph.md5
@@ -0,0 +1 @@
+6221c8e84c73ffa18f2147cf42452f28
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xpath__node__coll__graph.png b/docs/html/classpugi_1_1xpath__node__coll__graph.png
new file mode 100644
index 0000000..ba8c62b
Binary files /dev/null and b/docs/html/classpugi_1_1xpath__node__coll__graph.png differ
diff --git a/docs/html/classpugi_1_1xpath__node__set-members.html b/docs/html/classpugi_1_1xpath__node__set-members.html
new file mode 100644
index 0000000..4f9a678
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__node__set-members.html
@@ -0,0 +1,42 @@
+
+
+| begin() const | pugi::xpath_node_set | |
| const_iterator typedef | pugi::xpath_node_set | |
| empty() const | pugi::xpath_node_set | |
| end() const | pugi::xpath_node_set | |
| first() const | pugi::xpath_node_set | |
| operator=(const xpath_node_set &ns) | pugi::xpath_node_set | |
| size() const | pugi::xpath_node_set | |
| sort(bool reverse=false) | pugi::xpath_node_set | |
| type() const | pugi::xpath_node_set | |
| type_sorted enum value | pugi::xpath_node_set | |
| type_sorted_reverse enum value | pugi::xpath_node_set | |
| type_t enum name | pugi::xpath_node_set | |
| type_unsorted enum value | pugi::xpath_node_set | |
| xpath_ast_node (defined in pugi::xpath_node_set) | pugi::xpath_node_set | [friend] |
| xpath_node_set() | pugi::xpath_node_set | |
| xpath_node_set(const xpath_node_set &ns) | pugi::xpath_node_set | |
| ~xpath_node_set() | pugi::xpath_node_set |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xpath__node__set.html b/docs/html/classpugi_1_1xpath__node__set.html
new file mode 100644
index 0000000..2773fb6
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__node__set.html
@@ -0,0 +1,413 @@
+
+
+
+
Public Types | |
| +typedef const xpath_node * | const_iterator |
| Constant iterator type. | |
| enum | type_t { type_unsorted, +type_sorted, +type_sorted_reverse + } |
| Collection type. More... | |
Public Member Functions | |
| + | xpath_node_set () |
| Default ctor Constructs empty set. | |
| + | ~xpath_node_set () |
| Dtor. | |
| xpath_node_set (const xpath_node_set &ns) | |
| Copy ctor. | |
| xpath_node_set & | operator= (const xpath_node_set &ns) |
| Assignment operator. | |
| type_t | type () const |
| Get collection type. | |
| size_t | size () const |
| Get collection size. | |
| const_iterator | begin () const |
| Get begin constant iterator for collection. | |
| const_iterator | end () const |
| Get end iterator for collection. | |
| void | sort (bool reverse=false) |
| Sort the collection in ascending/descending order by document order. | |
| xpath_node | first () const |
| Get first node in the collection by document order. | |
| bool | empty () const |
| Return true if collection is empty. | |
Friends | |
| +class | xpath_ast_node |
+
+
|
+
| + + | +
+
+ +Collection type. + + + |
+
+
+
|
+
| + + | +
+
+ +Copy ctor. + +
|
+
+
+
|
+
| + + | +
+
+ +Assignment operator. + +
|
+
+
+
|
+
| + + | +
+
+ +Get collection type. + +
|
+
+
+
|
+
| + + | +
+
+ +Get collection size. + +
|
+
+
+
|
+
| + + | +
+
+ +Get begin constant iterator for collection. + +
|
+
+
+
|
+
| + + | +
+
+ +Get end iterator for collection. + +
|
+
+
+
|
+
| + + | +
+
+ +Sort the collection in ascending/descending order by document order. + +
|
+
+
+
|
+
| + + | +
+
+ +Get first node in the collection by document order. + +
|
+
+
+
|
+
| + + | +
+
+ +Return true if collection is empty. + +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xpath__node__set__coll__graph.map b/docs/html/classpugi_1_1xpath__node__set__coll__graph.map
new file mode 100644
index 0000000..6f67906
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__node__set__coll__graph.map
@@ -0,0 +1,4 @@
+base referer
+rect $classpugi_1_1xpath__node.html 82,189 207,216
+rect $classpugi_1_1xml__node.html 25,98 137,125
+rect $classpugi_1_1xml__attribute.html 166,98 299,125
diff --git a/docs/html/classpugi_1_1xpath__node__set__coll__graph.md5 b/docs/html/classpugi_1_1xpath__node__set__coll__graph.md5
new file mode 100644
index 0000000..f36e93e
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__node__set__coll__graph.md5
@@ -0,0 +1 @@
+dae803c90d7e38f8b78eec2188afc6b8
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xpath__node__set__coll__graph.png b/docs/html/classpugi_1_1xpath__node__set__coll__graph.png
new file mode 100644
index 0000000..81c6982
Binary files /dev/null and b/docs/html/classpugi_1_1xpath__node__set__coll__graph.png differ
diff --git a/docs/html/classpugi_1_1xpath__query-members.html b/docs/html/classpugi_1_1xpath__query-members.html
new file mode 100644
index 0000000..5edc682
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__query-members.html
@@ -0,0 +1,31 @@
+
+
+| evaluate_boolean(const xml_node &n) | pugi::xpath_query | |
| evaluate_node_set(const xml_node &n) | pugi::xpath_query | |
| evaluate_number(const xml_node &n) | pugi::xpath_query | |
| evaluate_string(const xml_node &n) | pugi::xpath_query | |
| xpath_query(const char *query) | pugi::xpath_query | [explicit] |
| ~xpath_query() | pugi::xpath_query |
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xpath__query.html b/docs/html/classpugi_1_1xpath__query.html
new file mode 100644
index 0000000..a55cb0d
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__query.html
@@ -0,0 +1,239 @@
+
+
+
+
Public Member Functions | |
| xpath_query (const char *query) | |
| Ctor from string with XPath expression. | |
| + | ~xpath_query () |
| Dtor. | |
| bool | evaluate_boolean (const xml_node &n) |
| Evaluate expression as boolean value for the context node n. | |
| double | evaluate_number (const xml_node &n) |
| Evaluate expression as double value for the context node n. | |
| std::string | evaluate_string (const xml_node &n) |
| Evaluate expression as string value for the context node n. | |
| xpath_node_set | evaluate_node_set (const xml_node &n) |
| Evaluate expression as node set for the context node n. | |
+
+
|
+
| + + | +
+
+ +Ctor from string with XPath expression. + +Throws xpath_exception on compilation error, std::bad_alloc on out of memory error. +
|
+
+
+
|
+
| + + | +
+
+ +Evaluate expression as boolean value for the context node n. + +If expression does not directly evaluate to boolean, the expression result is converted as through boolean() XPath function call. Throws std::bad_alloc on out of memory error. +
|
+
+
+
|
+
| + + | +
+
+ +Evaluate expression as double value for the context node n. + +If expression does not directly evaluate to double, the expression result is converted as through number() XPath function call. Throws std::bad_alloc on out of memory error. +
|
+
+
+
|
+
| + + | +
+
+ +Evaluate expression as string value for the context node n. + +If expression does not directly evaluate to string, the expression result is converted as through string() XPath function call. Throws std::bad_alloc on out of memory error. +
|
+
+
+
|
+
| + + | +
+
+ +Evaluate expression as node set for the context node n. + +If expression does not directly evaluate to node set, function returns empty node set. Throws std::bad_alloc on out of memory error. +
|
+
1.4.6-NO
+
+
diff --git a/docs/html/classpugi_1_1xpath__query__coll__graph.map b/docs/html/classpugi_1_1xpath__query__coll__graph.map
new file mode 100644
index 0000000..5a14779
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__query__coll__graph.map
@@ -0,0 +1 @@
+base referer
diff --git a/docs/html/classpugi_1_1xpath__query__coll__graph.md5 b/docs/html/classpugi_1_1xpath__query__coll__graph.md5
new file mode 100644
index 0000000..f1a2247
--- /dev/null
+++ b/docs/html/classpugi_1_1xpath__query__coll__graph.md5
@@ -0,0 +1 @@
+8954c6e562b8b9c0f96734834320e6c2
\ No newline at end of file
diff --git a/docs/html/classpugi_1_1xpath__query__coll__graph.png b/docs/html/classpugi_1_1xpath__query__coll__graph.png
new file mode 100644
index 0000000..f7b3e06
Binary files /dev/null and b/docs/html/classpugi_1_1xpath__query__coll__graph.png differ
diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css
new file mode 100644
index 0000000..05615b2
--- /dev/null
+++ b/docs/html/doxygen.css
@@ -0,0 +1,310 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+ font-size: 90%;
+}
+H1 {
+ text-align: center;
+ font-size: 160%;
+}
+H2 {
+ font-size: 120%;
+}
+H3 {
+ font-size: 100%;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.nav {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.navtab {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+TD.navtab {
+ font-size: 70%;
+}
+A.qindex {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D;
+}
+A.qindex:visited {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D
+}
+A.qindex:hover {
+ text-decoration: none;
+ background-color: #ddddff;
+}
+A.qindexHL {
+ text-decoration: none;
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+ text-decoration: none;
+ background-color: #6666cc;
+ color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+ font-family: Fixed, monospace;
+ font-size: 95%;
+}
+PRE.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ margin-right: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+ background-color: #F4F4FB;
+ color: #606060;
+ font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+TD.indexkey {
+ background-color: #e8eef2;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+ background-color: #e8eef2;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TR.memlist {
+ background-color: #f0f0f0;
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword { color: #008000 }
+SPAN.keywordtype { color: #604020 }
+SPAN.keywordflow { color: #e08000 }
+SPAN.comment { color: #800000 }
+SPAN.preprocessor { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral { color: #008080 }
+.mdTable {
+ border: 1px solid #868686;
+ background-color: #F4F4FB;
+}
+.mdRow {
+ padding: 8px 10px;
+}
+.mdescLeft {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.mdescRight {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.memItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplParams {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.search { color: #003399;
+ font-weight: bold;
+}
+FORM.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+TD.tiny { font-size: 75%;
+}
+a {
+ color: #1A41A8;
+}
+a:visited {
+ color: #2A3798;
+}
+.dirtab { padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+ font-weight: bold;
+}
+HR { height: 1px;
+ border: none;
+ border-top: 1px solid black;
+}
+
diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png
new file mode 100644
index 0000000..f0a274b
Binary files /dev/null and b/docs/html/doxygen.png differ
diff --git a/docs/html/functions.html b/docs/html/functions.html
new file mode 100644
index 0000000..7870ea7
--- /dev/null
+++ b/docs/html/functions.html
@@ -0,0 +1,195 @@
+
+
++Here is a list of all documented class members with links to the class documentation for each member: +
+
1.4.6-NO
+
+
diff --git a/docs/html/functions_enum.html b/docs/html/functions_enum.html
new file mode 100644
index 0000000..5f676d1
--- /dev/null
+++ b/docs/html/functions_enum.html
@@ -0,0 +1,38 @@
+
+
++
1.4.6-NO
+
+
diff --git a/docs/html/functions_eval.html b/docs/html/functions_eval.html
new file mode 100644
index 0000000..ae211d9
--- /dev/null
+++ b/docs/html/functions_eval.html
@@ -0,0 +1,40 @@
+
+
++
1.4.6-NO
+
+
diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html
new file mode 100644
index 0000000..a68a6c0
--- /dev/null
+++ b/docs/html/functions_func.html
@@ -0,0 +1,188 @@
+
+
++ +
+
1.4.6-NO
+
+
diff --git a/docs/html/functions_type.html b/docs/html/functions_type.html
new file mode 100644
index 0000000..e732be9
--- /dev/null
+++ b/docs/html/functions_type.html
@@ -0,0 +1,40 @@
+
+
++
1.4.6-NO
+
+
diff --git a/docs/html/graph_legend.dot b/docs/html/graph_legend.dot
new file mode 100644
index 0000000..5420927
--- /dev/null
+++ b/docs/html/graph_legend.dot
@@ -0,0 +1,22 @@
+digraph G
+{
+ edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
+ node [fontname="Helvetica",fontsize=10,shape=record];
+ Node9 [shape="box",label="Inherited",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",style="filled" fontcolor="white"];
+ Node10 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"];
+ Node10 [shape="box",label="PublicBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classPublicBase.html"];
+ Node11 -> Node10 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"];
+ Node11 [shape="box",label="Truncated",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="red",URL="$classTruncated.html"];
+ Node13 -> Node9 [dir=back,color="darkgreen",fontsize=10,style="solid",fontname="Helvetica"];
+ Node13 [shape="box",label="ProtectedBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classProtectedBase.html"];
+ Node14 -> Node9 [dir=back,color="firebrick4",fontsize=10,style="solid",fontname="Helvetica"];
+ Node14 [shape="box",label="PrivateBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classPrivateBase.html"];
+ Node15 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"];
+ Node15 [shape="box",label="Undocumented",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="grey75"];
+ Node16 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"];
+ Node16 [shape="box",label="Templ< int >",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classTempl.html"];
+ Node17 -> Node16 [dir=back,color="orange",fontsize=10,style="dashed",label="< int >",fontname="Helvetica"];
+ Node17 [shape="box",label="Templ< T >",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classTempl.html"];
+ Node18 -> Node9 [dir=back,color="darkorchid3",fontsize=10,style="dashed",label="m_usedClass",fontname="Helvetica"];
+ Node18 [shape="box",label="Used",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classUsed.html"];
+}
diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html
new file mode 100644
index 0000000..a07c58e
--- /dev/null
+++ b/docs/html/graph_legend.html
@@ -0,0 +1,80 @@
+
+
++Consider the following example:
/*! Invisible class because of truncation */ +class Invisible { }; + +/*! Truncated class, inheritance relation is hidden */ +class Truncated : public Invisible { }; + +/* Class not documented with doxygen comments */ +class Undocumented { }; + +/*! Class that is inherited using public inheritance */ +class PublicBase : public Truncated { }; + +/*! A template class */ +template<class T> class Templ { }; + +/*! Class that is inherited using protected inheritance */ +class ProtectedBase { }; + +/*! Class that is inherited using private inheritance */ +class PrivateBase { }; + +/*! Class that is used by the Inherited class */ +class Used { }; + +/*! Super class that inherits a number of other classes */ +class Inherited : public PublicBase, + protected ProtectedBase, + private PrivateBase, + public Undocumented + public Templ<int> +{ + private: + Used *m_usedClass; +}; +
MAX_DOT_GRAPH_HEIGHT tag in the configuration file is set to 240 this will result in the following graph:+
++The boxes in the above graph have the following meaning:
1.4.6-NO
+
+
diff --git a/docs/html/graph_legend.png b/docs/html/graph_legend.png
new file mode 100644
index 0000000..b8cfe42
Binary files /dev/null and b/docs/html/graph_legend.png differ
diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html
new file mode 100644
index 0000000..bcd7f02
--- /dev/null
+++ b/docs/html/hierarchy.html
@@ -0,0 +1,45 @@
+
+
++This inheritance list is sorted roughly, but not completely, alphabetically:
1.4.6-NO
+
+
diff --git a/docs/html/index.html b/docs/html/index.html
new file mode 100644
index 0000000..39fb2e8
--- /dev/null
+++ b/docs/html/index.html
@@ -0,0 +1,20 @@
+
+
++
1.4.6-NO
+
+
diff --git a/docs/html/inherit__graph__0.map b/docs/html/inherit__graph__0.map
new file mode 100644
index 0000000..795e91c
--- /dev/null
+++ b/docs/html/inherit__graph__0.map
@@ -0,0 +1,2 @@
+base referer
+rect $structpugi_1_1transfer__ownership__tag.html 8,8 202,34
diff --git a/docs/html/inherit__graph__0.md5 b/docs/html/inherit__graph__0.md5
new file mode 100644
index 0000000..dcd3819
--- /dev/null
+++ b/docs/html/inherit__graph__0.md5
@@ -0,0 +1 @@
+fa65747bb299b27710c65a261c62df42
\ No newline at end of file
diff --git a/docs/html/inherit__graph__0.png b/docs/html/inherit__graph__0.png
new file mode 100644
index 0000000..1f839bd
Binary files /dev/null and b/docs/html/inherit__graph__0.png differ
diff --git a/docs/html/inherit__graph__1.map b/docs/html/inherit__graph__1.map
new file mode 100644
index 0000000..8f51b91
--- /dev/null
+++ b/docs/html/inherit__graph__1.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xml__attribute.html 7,8 141,34
diff --git a/docs/html/inherit__graph__1.md5 b/docs/html/inherit__graph__1.md5
new file mode 100644
index 0000000..584e00e
--- /dev/null
+++ b/docs/html/inherit__graph__1.md5
@@ -0,0 +1 @@
+8a34c90a8a44150412d4efe4e02856c6
\ No newline at end of file
diff --git a/docs/html/inherit__graph__1.png b/docs/html/inherit__graph__1.png
new file mode 100644
index 0000000..1984539
Binary files /dev/null and b/docs/html/inherit__graph__1.png differ
diff --git a/docs/html/inherit__graph__2.map b/docs/html/inherit__graph__2.map
new file mode 100644
index 0000000..c81fa55
--- /dev/null
+++ b/docs/html/inherit__graph__2.map
@@ -0,0 +1,3 @@
+base referer
+rect $classpugi_1_1xml__attribute__iterator.html 121,7 302,34
+rect $classpugi_1_1xml__node__iterator.html 130,58 293,85
diff --git a/docs/html/inherit__graph__2.md5 b/docs/html/inherit__graph__2.md5
new file mode 100644
index 0000000..0ced39c
--- /dev/null
+++ b/docs/html/inherit__graph__2.md5
@@ -0,0 +1 @@
+0a31bb256f9ea1e428ad381426e2138a
\ No newline at end of file
diff --git a/docs/html/inherit__graph__2.png b/docs/html/inherit__graph__2.png
new file mode 100644
index 0000000..c0f9a3f
Binary files /dev/null and b/docs/html/inherit__graph__2.png differ
diff --git a/docs/html/inherit__graph__3.map b/docs/html/inherit__graph__3.map
new file mode 100644
index 0000000..ac3e60d
--- /dev/null
+++ b/docs/html/inherit__graph__3.map
@@ -0,0 +1,3 @@
+base referer
+rect $classpugi_1_1xml__node.html 9,8 121,34
+rect $classpugi_1_1xml__document.html 170,8 314,34
diff --git a/docs/html/inherit__graph__3.md5 b/docs/html/inherit__graph__3.md5
new file mode 100644
index 0000000..0b2554a
--- /dev/null
+++ b/docs/html/inherit__graph__3.md5
@@ -0,0 +1 @@
+3ac52082f65d390a3aa62f772b82deb2
\ No newline at end of file
diff --git a/docs/html/inherit__graph__3.png b/docs/html/inherit__graph__3.png
new file mode 100644
index 0000000..4d9a231
Binary files /dev/null and b/docs/html/inherit__graph__3.png differ
diff --git a/docs/html/inherit__graph__4.map b/docs/html/inherit__graph__4.map
new file mode 100644
index 0000000..a42cb31
--- /dev/null
+++ b/docs/html/inherit__graph__4.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xml__tree__walker.html 9,8 161,34
diff --git a/docs/html/inherit__graph__4.md5 b/docs/html/inherit__graph__4.md5
new file mode 100644
index 0000000..0ef35dc
--- /dev/null
+++ b/docs/html/inherit__graph__4.md5
@@ -0,0 +1 @@
+660d4318c9e8103b2831b4787c62da46
\ No newline at end of file
diff --git a/docs/html/inherit__graph__4.png b/docs/html/inherit__graph__4.png
new file mode 100644
index 0000000..96d08a5
Binary files /dev/null and b/docs/html/inherit__graph__4.png differ
diff --git a/docs/html/inherit__graph__5.map b/docs/html/inherit__graph__5.map
new file mode 100644
index 0000000..4cda6cd
--- /dev/null
+++ b/docs/html/inherit__graph__5.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xpath__exception.html 137,8 289,34
diff --git a/docs/html/inherit__graph__5.md5 b/docs/html/inherit__graph__5.md5
new file mode 100644
index 0000000..68b862c
--- /dev/null
+++ b/docs/html/inherit__graph__5.md5
@@ -0,0 +1 @@
+fffb0beaca2cbe6da35b67b995ae9ff1
\ No newline at end of file
diff --git a/docs/html/inherit__graph__5.png b/docs/html/inherit__graph__5.png
new file mode 100644
index 0000000..f833cf9
Binary files /dev/null and b/docs/html/inherit__graph__5.png differ
diff --git a/docs/html/inherit__graph__6.map b/docs/html/inherit__graph__6.map
new file mode 100644
index 0000000..a984b26
--- /dev/null
+++ b/docs/html/inherit__graph__6.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xpath__node.html 7,8 133,34
diff --git a/docs/html/inherit__graph__6.md5 b/docs/html/inherit__graph__6.md5
new file mode 100644
index 0000000..2019dc5
--- /dev/null
+++ b/docs/html/inherit__graph__6.md5
@@ -0,0 +1 @@
+0a388cc004e983eab729bc6d5c666cce
\ No newline at end of file
diff --git a/docs/html/inherit__graph__6.png b/docs/html/inherit__graph__6.png
new file mode 100644
index 0000000..1468a8b
Binary files /dev/null and b/docs/html/inherit__graph__6.png differ
diff --git a/docs/html/inherit__graph__7.map b/docs/html/inherit__graph__7.map
new file mode 100644
index 0000000..95b7466
--- /dev/null
+++ b/docs/html/inherit__graph__7.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xpath__node__set.html 9,8 158,34
diff --git a/docs/html/inherit__graph__7.md5 b/docs/html/inherit__graph__7.md5
new file mode 100644
index 0000000..e3b0507
--- /dev/null
+++ b/docs/html/inherit__graph__7.md5
@@ -0,0 +1 @@
+7052cf580394885a252e97fd06476596
\ No newline at end of file
diff --git a/docs/html/inherit__graph__7.png b/docs/html/inherit__graph__7.png
new file mode 100644
index 0000000..adc2e3a
Binary files /dev/null and b/docs/html/inherit__graph__7.png differ
diff --git a/docs/html/inherit__graph__8.map b/docs/html/inherit__graph__8.map
new file mode 100644
index 0000000..442f8f7
--- /dev/null
+++ b/docs/html/inherit__graph__8.map
@@ -0,0 +1,2 @@
+base referer
+rect $classpugi_1_1xpath__query.html 9,8 137,34
diff --git a/docs/html/inherit__graph__8.md5 b/docs/html/inherit__graph__8.md5
new file mode 100644
index 0000000..563962a
--- /dev/null
+++ b/docs/html/inherit__graph__8.md5
@@ -0,0 +1 @@
+965d93716ac65e345066d158b1bec3f1
\ No newline at end of file
diff --git a/docs/html/inherit__graph__8.png b/docs/html/inherit__graph__8.png
new file mode 100644
index 0000000..6bfb42e
Binary files /dev/null and b/docs/html/inherit__graph__8.png differ
diff --git a/docs/html/inherits.html b/docs/html/inherits.html
new file mode 100644
index 0000000..310e5fa
--- /dev/null
+++ b/docs/html/inherits.html
@@ -0,0 +1,66 @@
+
+
++
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
1.4.6-NO
+
+
diff --git a/docs/html/namespacemembers.html b/docs/html/namespacemembers.html
new file mode 100644
index 0000000..3a874c4
--- /dev/null
+++ b/docs/html/namespacemembers.html
@@ -0,0 +1,62 @@
+
+
++
1.4.6-NO
+
+
diff --git a/docs/html/namespacemembers_enum.html b/docs/html/namespacemembers_enum.html
new file mode 100644
index 0000000..e682fba
--- /dev/null
+++ b/docs/html/namespacemembers_enum.html
@@ -0,0 +1,37 @@
+
+
++
1.4.6-NO
+
+
diff --git a/docs/html/namespacemembers_eval.html b/docs/html/namespacemembers_eval.html
new file mode 100644
index 0000000..4c55750
--- /dev/null
+++ b/docs/html/namespacemembers_eval.html
@@ -0,0 +1,43 @@
+
+
++
1.4.6-NO
+
+
diff --git a/docs/html/namespacemembers_func.html b/docs/html/namespacemembers_func.html
new file mode 100644
index 0000000..1c6e897
--- /dev/null
+++ b/docs/html/namespacemembers_func.html
@@ -0,0 +1,38 @@
+
+
++
+
1.4.6-NO
+
+
diff --git a/docs/html/namespacemembers_vars.html b/docs/html/namespacemembers_vars.html
new file mode 100644
index 0000000..9c6d3e2
--- /dev/null
+++ b/docs/html/namespacemembers_vars.html
@@ -0,0 +1,52 @@
+
+
++
1.4.6-NO
+
+
diff --git a/docs/html/namespacepugi.html b/docs/html/namespacepugi.html
new file mode 100644
index 0000000..30b9247
--- /dev/null
+++ b/docs/html/namespacepugi.html
@@ -0,0 +1,668 @@
+
+
++ +
+
Classes | |
| class | xpath_query |
| A class that holds compiled XPath query and allows to evaluate query result. More... | |
| class | xml_attribute |
| A light-weight wrapper for manipulating attributes in DOM tree. More... | |
| class | xml_node |
| A light-weight wrapper for manipulating nodes in DOM tree. More... | |
| class | xml_node_iterator |
| Child node iterator. More... | |
| class | xml_attribute_iterator |
| Attribute iterator. More... | |
| class | xml_tree_walker |
| Abstract tree walker class. More... | |
| struct | xml_memory_block |
| struct | transfer_ownership_tag |
| Struct used to distinguish parsing with ownership transfer from parsing without it. More... | |
| class | xml_document |
| Document class (DOM tree root). More... | |
| class | xpath_exception |
| XPath exception class. More... | |
| class | xpath_node |
| XPath node class. More... | |
| class | xpath_node_set |
| Not necessarily ordered constant collection of XPath nodes. More... | |
Enumerations | |
| enum | xml_node_type { + node_null, +node_document, +node_element, +node_pcdata, + + node_cdata, +node_comment, +node_pi + + } |
| Tree node classification. More... | |
Functions | |
| std::string | as_utf8 (const wchar_t *str) |
| Convert utf16 to utf8. | |
| std::wstring | as_utf16 (const char *str) |
| Convert utf8 to utf16. | |
Variables | |
| const size_t | memory_block_size = 32768 |
| Memory block size, used for fast allocator. | |
| const unsigned int | parse_minimal = 0x0000 |
| Minimal parsing mode. | |
| const unsigned int | parse_pi = 0x0001 |
| This flag determines if processing instructions (nodes with type node_pi; such nodes have the form of <? target content ?> or <? target ?> in XML) are to be put in DOM tree. | |
| const unsigned int | parse_comments = 0x0002 |
| This flag determines if comments (nodes with type node_comment; such nodes have the form of in XML) are to be put in DOM tree. | |
| const unsigned int | parse_cdata = 0x0004 |
| This flag determines if CDATA sections (nodes with type node_cdata; such nodes have the form of <![CDATA[[content]]> in XML) are to be put in DOM tree. | |
| const unsigned int | parse_ws_pcdata = 0x0008 |
| This flag determines if nodes with PCDATA (regular text) that consist only of whitespace characters are to be put in DOM tree. | |
| const unsigned int | parse_escapes = 0x0010 |
| This flag determines if character and entity references are to be expanded during the parsing process. | |
| const unsigned int | parse_eol = 0x0020 |
| This flag determines if EOL handling (that is, replacing sequences 0x0d 0x0a by a single 0x0a character, and replacing all standalone 0x0d characters by 0x0a) is to be performed on input data (that is, comments contents, PCDATA/CDATA contents and attribute values). | |
| const unsigned int | parse_wnorm_attribute = 0x0040 |
| This flag determines if attribute value normalization should be performed for all attributes, assuming that their type is not CDATA. | |
| const unsigned int | parse_wconv_attribute = 0x0080 |
| This flag determines if attribute value normalization should be performed for all attributes, assuming that their type is CDATA. | |
| const unsigned int | parse_default = parse_cdata | parse_escapes | parse_wconv_attribute | parse_eol |
| This is the default set of flags. | |
| const unsigned int | format_indent = 0x01 |
| Indent the nodes that are written to output stream with as many indentation strings as deep the node is in DOM tree. | |
| const unsigned int | format_utf8 = 0x02 |
| This flag determines how the non-printable symbols are written to output stream - they are either considered UTF-8 and are written as UTF-8 character, escaped with &#. | |
| const unsigned int | format_write_bom = 0x04 |
| This flag determines if UTF-8 BOM is to be written to output stream. | |
| const unsigned int | format_raw = 0x08 |
| If this flag is on, no indentation is performed and no line breaks are written to output file. | |
| const unsigned int | format_default = format_indent | format_utf8 |
| This is the default set of formatting flags. | |
+
+
|
+
| + + | +
+
+ +Tree node classification. + + + |
+
+
+
|
+
| + + | +
+
+ +Convert utf16 to utf8. + +
|
+
+
+
|
+
| + + | +
+
+ +Convert utf8 to utf16. + +
|
+
+
+
|
+
| + + | +
+
+ +Memory block size, used for fast allocator. + +Memory for DOM tree is allocated in blocks of memory_block_size + 4. This value affects size of xml_memory class. |
+
+
+
|
+
| + + | +
+
+ +Minimal parsing mode. + +Equivalent to turning all other flags off. This set of flags means that pugixml does not add pi/cdata sections or comments to DOM tree and does not perform any conversions for input data, meaning fastest parsing. |
+
+
+
|
+
| + + | +
+
+ +This flag determines if processing instructions (nodes with type node_pi; such nodes have the form of <? target content ?> or <? target ?> in XML) are to be put in DOM tree. + +If this flag is off, they are not put in the tree, but are still parsed and checked for correctness. +The corresponding node in DOM tree will have type node_pi, name "target" and value "content", if any. +Note that <?xml ...?> (document declaration) is not considered to be a PI. +This flag is off by default. |
+
+
+
|
+
| + + | +
+
+ +This flag determines if comments (nodes with type node_comment; such nodes have the form of in XML) are to be put in DOM tree. + +If this flag is off, they are not put in the tree, but are still parsed and checked for correctness. +The corresponding node in DOM tree will have type node_comment, empty name and value "content". +This flag is off by default. |
+
+
+
|
+
| + + | +
+
+ +This flag determines if CDATA sections (nodes with type node_cdata; such nodes have the form of <![CDATA[[content]]> in XML) are to be put in DOM tree. + +If this flag is off, they are not put in the tree, but are still parsed and checked for correctness. +The corresponding node in DOM tree will have type node_cdata, empty name and value "content". +This flag is on by default. |
+
+
+
|
+
| + + | +
+
+ +This flag determines if nodes with PCDATA (regular text) that consist only of whitespace characters are to be put in DOM tree. + +Often whitespace-only data is not significant for the application, and the cost of allocating and storing such nodes (both memory and speed-wise) can be significant. For example, after parsing XML string "<node> <a/> </node>", <node> element will have 3 children when parse_ws_pcdata is set (child with type node_pcdata and value=" ", child with type node_element and name "a", and another child with type node_pcdata and value=" "), and only 1 child when parse_ws_pcdata is not set. +This flag is off by default. |
+
+
+
|
+
| + + | +
+
+ +This flag determines if character and entity references are to be expanded during the parsing process. + +Character references are &#...; or &x...; (... is Unicode numeric representation of character in either decimal (&#...;) or hexadecimal (&x...;) form), entity references are &...; Note that as pugixml does not handle DTD, the only allowed entities are predefined ones - <, >, &, ' and ". If character/entity reference can not be expanded, it is leaved as is, so you can do additional processing later. Reference expansion is performed in attribute values and PCDATA content. +This flag is on by default. |
+
+
+
|
+
| + + | +
+
+ +This flag determines if EOL handling (that is, replacing sequences 0x0d 0x0a by a single 0x0a character, and replacing all standalone 0x0d characters by 0x0a) is to be performed on input data (that is, comments contents, PCDATA/CDATA contents and attribute values). + +This flag is on by default. |
+
+
+
|
+
| + + | +
+
+ +This flag determines if attribute value normalization should be performed for all attributes, assuming that their type is not CDATA. + +This means, that: 1. Whitespace characters (new line, tab and space) are replaced with space (' ') 2. Afterwards sequences of spaces are replaced with a single space 3. Leading/trailing whitespace characters are trimmed +This flag is off by default. |
+
+
+
|
+
| + + | +
+
+ +This flag determines if attribute value normalization should be performed for all attributes, assuming that their type is CDATA. + +This means, that whitespace characters (new line, tab and space) are replaced with space (' '). Note, that the actions performed while this flag is on are also performed if parse_wnorm_attribute is on, so this flag has no effect if parse_wnorm_attribute flag is set. +This flag is on by default. |
+
+
+
|
+
| + + | +
+
+ +This is the default set of flags. + +It includes parsing CDATA sections (comments/PIs are not parsed), performing character and entity reference expansion, replacing whitespace characters with spaces in attribute values and performing EOL handling. Note, that PCDATA sections consisting only of whitespace characters are not parsed (by default) for performance reasons. |
+
+
+
|
+
| + + | +
+
+ +Indent the nodes that are written to output stream with as many indentation strings as deep the node is in DOM tree. + +This flag is on by default. |
+
+
+
|
+
| + + | +
+
+ +This flag determines how the non-printable symbols are written to output stream - they are either considered UTF-8 and are written as UTF-8 character, escaped with &#. + +..;, or they are considered to be ASCII and each ASCII character is escaped separately. +This flag is on by default. |
+
+
+
|
+
| + + | +
+
+ +This flag determines if UTF-8 BOM is to be written to output stream. + +This flag is off by default. |
+
+
+
|
+
| + + | +
+
+ +If this flag is on, no indentation is performed and no line breaks are written to output file. + +This means that the data is written to output stream as is. +This flag is off by default. |
+
+
+
|
+
| + + | +
+
+ +This is the default set of formatting flags. + +It includes indenting nodes depending on their depth in DOM tree and considering input data to be UTF-8. |
+
1.4.6-NO
+
+
diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html
new file mode 100644
index 0000000..b52fc10
--- /dev/null
+++ b/docs/html/namespaces.html
@@ -0,0 +1,26 @@
+
+
+| pugi | The PugiXML Parser namespace |
1.4.6-NO
+
+
diff --git a/docs/html/structpugi_1_1transfer__ownership__tag.html b/docs/html/structpugi_1_1transfer__ownership__tag.html
new file mode 100644
index 0000000..aea2270
--- /dev/null
+++ b/docs/html/structpugi_1_1transfer__ownership__tag.html
@@ -0,0 +1,35 @@
+
+
++
+
1.4.6-NO
+
+
diff --git a/docs/html/tab_b.gif b/docs/html/tab_b.gif
new file mode 100644
index 0000000..0d62348
Binary files /dev/null and b/docs/html/tab_b.gif differ
diff --git a/docs/html/tab_l.gif b/docs/html/tab_l.gif
new file mode 100644
index 0000000..9b1e633
Binary files /dev/null and b/docs/html/tab_l.gif differ
diff --git a/docs/html/tab_r.gif b/docs/html/tab_r.gif
new file mode 100644
index 0000000..ce9dd9f
Binary files /dev/null and b/docs/html/tab_r.gif differ
diff --git a/docs/html/tabs.css b/docs/html/tabs.css
new file mode 100644
index 0000000..a61552a
--- /dev/null
+++ b/docs/html/tabs.css
@@ -0,0 +1,102 @@
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+ float : left;
+ width : 100%;
+ background : url("tab_b.gif") repeat-x bottom;
+ margin-bottom : 4px;
+}
+
+DIV.tabs UL
+{
+ margin : 0px;
+ padding-left : 10px;
+ list-style : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+ display : inline;
+ margin : 0px;
+ padding : 0px;
+}
+
+DIV.tabs FORM
+{
+ float : right;
+}
+
+DIV.tabs A
+{
+ float : left;
+ background : url("tab_r.gif") no-repeat right top;
+ border-bottom : 1px solid #84B0C7;
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+DIV.tabs A:hover
+{
+ background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+ color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+ float : left;
+ display : block;
+ background : url("tab_l.gif") no-repeat left top;
+ padding : 5px 9px;
+ white-space : nowrap;
+}
+
+DIV.tabs INPUT
+{
+ float : right;
+ display : inline;
+ font-size : 1em;
+}
+
+DIV.tabs TD
+{
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+ background-position: 0% -150px;
+}
+
+DIV.tabs LI#current A
+{
+ background-position: 100% -150px;
+ border-width : 0px;
+}
+
+DIV.tabs LI#current SPAN
+{
+ background-position: 0% -150px;
+ padding-bottom : 6px;
+}
+
+DIV.nav
+{
+ background : none;
+ border : none;
+ border-bottom : 1px solid #84B0C7;
+}
diff --git a/docs/index.html b/docs/index.html
index c843bdb..7c8392f 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -15,17 +15,8 @@
pugixml is just another XML parser. This is a successor to pugxml (well, to be honest, the only part that is left as is is wildcard matching code; the rest was either heavily refactored or rewritten -from scratch). The main features (call it USP) are:
+from scratch). The main features are:pugixml is a DOM-based parser. This means, that the XML document is converted to a tree. -Each XML tag is converted to a node in DOM tree. If a tag is contained in some other tag, its node -is a child to the outer tag's one. Comments, CDATA sections and PIs (Processing Instructions) also are -transformed into tree nodes, as is the standalone text. Each node has its type.
+Here there is a small collection of code snippets to help the reader begin using pugixml.
-Here is an example of an XML document: - -
-<?xml version="1.0"?> -<mesh name="mesh_root"> - <!-- here is a mesh node --> - some text - <![CDATA[[someothertext]]> - some more text - <node attr1="value1" /> - <node attr1="value2"> - <?TARGET somedata?> - <innernode/> - </node> -</mesh> -- -It gets converted to the following tree (note, that with some parsing options comments, PIs and CDATA -sections are not stored in the tree, and with some options there are also nodes with whitespaces -and the contents of PCDATA sections is a bit different (with trailing/leading whitespaces). So generally -the resulting DOM tree depends on the parsing options): - -

The parent-children relations are shown with lines. Some nodes have previous and next siblings -(for example, the next sibling for node_comment node is node_pcdata with value "some text", and the -previous sibling for node_element with name "mesh" is node_pi with target "xml" (target for PI nodes -is stored in the node name)).
-pugixml is a library for parsing XML files, which means that you give it XML data some way, -and it gives you the DOM tree and the ways to traverse it and to get some useful information from it. -The library source consist of two files, the header pugixml.hpp, and the source code pugixml.cpp. -You can either compile cpp file in your project, or build a static library (or perhaps even a DLL), -or make the whole code use inline linkage and make one big file (as it was done in pugxml). -All library classes reside in namespace pugi, so you can either use fully qualified -names (pugi::xml_node) or write a using declaration (using namespace pugi;, using -pugi::xml_node) and use plain names. All classes have the xml_ prefix.
- -By default it's supposed that you compile the source file with your project (add it into your -project, or add relevant entry in your Makefile, or do whatever you need to do with your compilation -environment). The library is written in standard-conformant C++ and was tested on win32 platform -(MSVC 7.1 (2003), MSVC 8.0 (2005)).
- - -xml_parser class is the core of parsing process; you initiate parsing with it, you get DOM -tree from it, the nodes and attributes are stored in it. You have two ways to load a file: either -provide a string with XML-data (it has to be null-terminated, and it will be modified during parsing -process, so it can not be a piece of read-only memory), or with an std::istream object (any input -stream, like std::ifstream, std::istringstream, etc.) - in this case the parser will allocate -the necessary amount of memory (equivalent to stream's size) and read everything from the stream.
- -The functions for parsing are: -
- void parse(std::istream& stream, unsigned int optmsk = parse_noset); |
stream,
-read the chunk of data from the stream and parse it with provided options (optmsk).
-The stream does not have to persist after the call to the function, the lifetime of internal buffer
-with stream's data is managed by pugixml.
-- char* parse(char* xmlstr, unsigned int optmsk = parse_noset); - |
- char* parse(const ownership_transfer_tag&, char* xmlstr, unsigned int optmsk = parse_noset); - |
- xml_parser(std::istream& stream, unsigned int optmsk = parse_default); |
- xml_parser(char* xmlstr, unsigned int optmsk = parse_default); |
- xml_parser(const ownership_transfer_tag&, char* xmlstr, unsigned int optmsk = parse_default); |
If you want to provide XML data after the creation of the parser, use the default ctor. Otherwise -you are free to use either parsing ctors or default ctor and later - parsing function.
- -After parsing an XML file, you'll get a DOM tree. To get access to it (or, more precisely, to its -root), call either document() function or cast xml_parser object to xml_node by -using the following functions:
- -- operator xml_node() const; - xml_node document() const; - |
Ok, easy part is behind - now let's dive into parsing options. There is a variety of them, and you -must choose them wisely to get the needed results and the best speed/least memory overhead. At first, -there are flags that determine which parts of the document will be put into DOM tree, and which will -be just skipped:
- -Then there are flags that determine how the processing of the retrieved data is done. There are -several reasons for these flags, mainly: -
Finally, there are two more flags, that indicate closing tag parsing. When pugixml meets a -close tags, there are three ways: -
Did I say finally? Ok, so finally there are some helper flags, or better groups of flags. -These are: -
A couple of words on flag usage. The parsing options are just a set of bits, with each bit corresponding -to one flag. You can turn the flag on by OR-ing the options value with this flag's constant: -
- parse_w3c | parse_wnorm_attribute --or turn the flag off by AND-ing the options value with the NEGation of this flag's constant: -
- parse_w3c & ~parse_comments --You can access the current options of parser by options() method: -
- unsigned int options() const; - unsigned int options(unsigned int optmsk); - |
If xml_parser is a heart of constructing a DOM tree from file, xml_node is a heart -of processing the tree. This is a simple wrapper, so it's small (4/8 bytes, depending on the size of -pointer), you're free to copy it and it does not own anything. I'll continue with a list of methods -with their description, with one note in advance. Some functions, that do something according to a -string-like parameter, have a pair with a suffix _w. The _w suffix tells, that this -function is doing a wildcard matching, instead of simple string comparison. You're free to use wildcards -* (that is equal to any sequence of characters (possibly empty)), ? (that is equal to -any character) and character sets ([Abc] means 'any symbol of A, b and c', [A-Z4] means -'any symbol from A to Z, or 4', [!0-9] means 'any symbol, that is not a digit'). So the wildcard -?ell_[0-9][0-9]_* will match strings like 'cell_23_xref', 'hell_00_', but will not match the -strings like 'ell_23_xref', 'cell_0_x' or 'cell_0a_x'.
- -- /// Access iterators for this node's collection of child nodes. - iterator begin() const; - iterator end() const; - - /// Access iterators for this node's collection of child nodes (same as begin/end). - iterator children_begin() const; - iterator children_end() const; - - /// Access iterators for this node's collection of attributes. - attribute_iterator attributes_begin() const; - attribute_iterator attributes_end() const; - - /// Access iterators for this node's collection of siblings. - iterator siblings_begin() const; - iterator siblings_end() const; - |
Functions, returning the iterators to walk through children/siblings/attributes. More on that in -Iterators section.
- -- operator unspecified_bool_type() const; - |
This is a safe bool-like conversion operator. You can check node's validity (if (xml_node), - if (!xml_node), if (node1 && node2 && !node3 && cond1 && ...) - you get the idea) with -it. -
- -- bool operator==(const xml_node& r) const; - bool operator!=(const xml_node& r) const; - bool operator<(const xml_node& r) const; - bool operator>(const xml_node& r) const; - bool operator<=(const xml_node& r) const; - bool operator>=(const xml_node& r) const; - |
Comparison operators
- -- bool empty() const; - |
if (node.empty()) is equivalent to if (!node)
- xml_node_type type() const; - const char* name() const; - const char* value() const; - |
Access node's properties (type, name and value). If there is no name/value, the corresponding functions -return "" - they never return NULL.
- -- xml_node child(const char* name) const; - xml_node child_w(const char* name) const; - |
Get a child node with specified name, or xml_node() (this is an invalid node) if nothing is -found
- -- xml_attribute attribute(const char* name) const; - xml_attribute attribute_w(const char* name) const; - |
Get an attribute with specified name, or xml_attribute() (this is an invalid attribute) if -nothing is found
- -- xml_node sibling(const char* name) const; - xml_node sibling_w(const char* name) const; - |
Get a node's sibling with specified name, or xml_node() if nothing is found.
-node.sibling(name) is equivalent to node.parent().child(name).
- xml_node next_sibling(const char* name) const; - xml_node next_sibling_w(const char* name) const; - xml_node next_sibling() const; - |
These functions get the next sibling, that is, one of the siblings of that node, that is to the
-right. next_sibling() just returns the right brother of the node (or xml_node()),
-the two other functions are searching for the sibling with the given name
- xml_node previous_sibling(const char* name) const; - xml_node previous_sibling_w(const char* name) const; - xml_node previous_sibling() const; - |
These functions do exactly the same as next_sibling ones, with the exception that they
-search for the left siblings.
- xml_node parent() const; - |
Get a parent node. The parent node for the root one (the document) is considered to be the document -itself.
- -- const char* child_value() const; - |
Look for the first node of type node_pcdata or node_cdata among the -children of the current node and return its contents (or "" if nothing is found)
- -- const char* child_value(const char* name) const; - |
This is the convenient way of looking into child's child value - that is, node.child_value(name) is equivalent to node.child(name).child_value().
- -- const char* child_value_w(const char* name) const; - |
This is the convenient way of looking into child's child value - that is, node.child_value_w(name) is equivalent to node.child_w(name).child_value().
- -- xml_attribute first_attribute() const; - xml_attribute last_attribute() const; - |
These functions get the first and last attributes of the node (or xml_attribute() if the node -has no attributes).
- -- xml_node first_child() const; - xml_node last_child() const; - |
These functions get the first and last children of the node (or xml_node() if the node has -no children).
- -- template <typename OutputIterator> void all_elements_by_name(const char* name, OutputIterator it) const; - template <typename OutputIterator> void all_elements_by_name_w(const char* name, OutputIterator it) const; - |
Get all elements with the specified name in the subtree (depth-first search) and return them with -the help of output iterator (i.e. std::back_inserter)
- -- template <typename Predicate> xml_attribute find_attribute(Predicate pred) const; - template <typename Predicate> xml_node find_child(Predicate pred) const; - template <typename Predicate> xml_node find_element(Predicate pred) const; - |
Find attribute, child or a node in the subtree (find_element - depth-first search) with the help -of the given predicate. Predicate should behave like a function which accepts a xml_node or -xml_attribute (for find_attribute) parameter and returns bool. The first entity for which -the predicate returned true is returned. If predicate returned false for all entities, xml_node() -or xml_attribute() is returned.
- -- xml_node first_element(const char* name) const; - xml_node first_element_w(const char* name) const; - - xml_node first_element_by_value(const char* name, const char* value) const; - xml_node first_element_by_value_w(const char* name, const char* value) const; - - xml_node first_element_by_attribute(const char* name, const char* attr_name, const char* attr_value) const; - xml_node first_element_by_attribute_w(const char* name, const char* attr_name, const char* attr_value) const; - - xml_node first_element_by_attribute(const char* attr_name, const char* attr_value) const; - xml_node first_element_by_attribute_w(const char* attr_name, const char* attr_value) const; - |
Find the first node (depth-first search), which corresponds to the given criteria (i.e. either has -a matching name, or a matching value, or has an attribute with given name/value, or has an attribute -and has a matching name). Note that _w versions treat all parameters as wildcards.
- -- xml_node first_node(xml_node_type type) const; - |
Return a first node (depth-first search) with a given type, or xml_node().
- -- std::string path(char delimiter = '/') const; - |
Get a path of the node (i.e. the string of names of the nodes on the path from the DOM tree root -to the node, separated with delimiter (/ by default).
- -- xml_node first_element_by_path(const char* path, char delimiter = '/') const; - |
Get the first element that has the following path. The path can be absolute (beginning with delimiter) or -relative, '..' means 'up-level' (so if we are at the path mesh/fragment/geometry/stream, ../.. -will lead us to mesh/fragment, and /mesh will lead us to mesh).
- -- bool traverse(xml_tree_walker& walker) const; - |
Traverse the subtree (beginning with current node) with the walker, return the result. See -Miscellaneous section for details.
- - -Like xml_node, xml_attribute is a simple wrapper of the node's attribute.
- -- bool operator==(const xml_attribute& r) const; - bool operator!=(const xml_attribute& r) const; - bool operator<(const xml_attribute& r) const; - bool operator>(const xml_attribute& r) const; - bool operator<=(const xml_attribute& r) const; - bool operator>=(const xml_attribute& r) const; - |
Comparison operators.
- -- operator unspecified_bool_type() const; - |
Safe bool conversion - like in xml_node, use this to check for validity.
- -- bool empty() const; - |
Like with xml_node, if (attr.empty()) is equivalent to if (!attr).
-
- xml_attribute next_attribute() const; - xml_attribute previous_attribute() const; - |
Get the next/previous attribute of the node, that owns the current attribute. Return xml_attribute() -if no such attribute is found.
- -- const char* name() const; - const char* value() const; - |
Get the name and value of the attribute. These methods never return NULL - they return "" instead.
- -- int as_int() const; - double as_double() const; - float as_float() const; - |
Convert the value of an attribute to the desired type. If the conversion is not successfull, return -default value (0 for int, 0.0 for double, 0.0f for float). These functions rely on CRT functions ato*.
- -- bool as_bool() const; - |
Convert the value of an attribute to bool. This method returns true if the first character of the -value is '1', 't', 'T', 'y' or 'Y'. Otherwise it returns false.
- - -Sometimes you have to cycle through the children or the attributes of the node. You can do it either -by using next_sibling, previous_sibling, next_attribute and previous_attribute -(along with first_child, last_child, first_attribute and last_attribute), -or you can use an iterator-like interface. There are two iterator types, xml_node_iterator and -xml_attribute_iterator. They are bidirectional constant iterators, which means that you can -either increment or decrement them, and use dereferencing and member access operators to get constant -access to node/attribute (the constness of iterators may change with the introducing of mutable trees).
- -In order to get the iterators, use corresponding functions of xml_node. Note that _end() -functions return past-the-end iterator, that is, in order to get the last attribute, you'll have to -do something like: - -
- if (node.attributes_begin() != node.attributes_end()) // we have at least one attribute
- {
- xml_attribute last_attrib = *(--node.attributes_end());
- ...
- }
- |
If you want to traverse a subtree, you can use traverse function. There is a class -xml_tree_walker, which has some functions that you can override in order to get custom traversing -(the default one just does nothing). - -
- virtual bool begin(const xml_node&); - virtual bool end(const xml_node&); - |
These functions are called when the processing of the node starts/ends. First begin() -is called, then all children of the node are processed recursively, then end() is called. If -any of these functions returns false, the traversing is stopped and the traverse() function -returns false.
- -- virtual void push(); - virtual void pop(); - |
These functions are called before and after the processing of node's children. If node has no children, -none of these is called. The default behavior is to increment/decrement current node depth.
- -- virtual int depth() const; - |
Get the current depth. You can use this function to do your own indentation, for example.
- -Lets get to some minor notes. You can safely write something like: - -
- bool value = node.child("stream").attribute("compress").as_bool();
- |
As parsing is done in-situ, the XML data is to persist during the lifetime of xml_parser. If -the parsing is called via a function of xml_parser, that accepts char*, you have to ensure -yourself, that the string will outlive the xml_parser object.
- -The memory for nodes and attributes is allocated in blocks of data (the blocks form a linked list; -the default size of the block is 32 kb, though you can change it via changing a memory_block_size -constant in pugixml.hpp file. Remember that the first block is allocated on stack (it resides -inside xml_parser object), and all subsequent blocks are allocated on heap, so expect a stack overflow -when setting too large memory block size), so the xml_parser object (which contains the blocks) -should outlive all xml_node and xml_attribute objects (as well as iterators), which belong -to the parser's tree. Again, you should ensure it yourself.
- -Ok, so you are not much of documentation reader, are you? So am I. Let's assume that you're going -to parse an xml file... something like this: - -
-<?xml version="1.0" encoding="UTF-8"?> -<mesh name="Cathedral"> - <fragment name="Cathedral"> - <geometry> - <stream usage="main" source="StAnna.dmesh" compress="true" /> - <stream usage="ao" source="StAnna.ao" /> - </geometry> - </fragment> - <fragment name="Cathedral"> - ... - </fragment> - ... -</mesh> -- -
<mesh> is a root node, it has 0 or more <fragment>s, each of them has a <geometry> -node, and there are <stream> nodes with the shown attributes. We'd like to parse the file and... -well, and do something with it's contents. There are several methods of doing that; I'll show 2 of them -(the remaining one is using iterators).
- -Here we exploit the knowledge of the strict hierarchy of our XML document and read the nodes from -DOM tree accordingly. When we have an xml_node object, we can get the desired information from -it (name, value, attributes list, nearby nodes in a tree - siblings, parent and children).
+For everything you can do with pugixml, you need a document. There are several ways to obtain it:
#include <fstream>
-#include <vector>
-#include <algorithm>
-#include <iterator>
+#include <iostream>
#include "pugixml.hpp"
+using namespace std;
using namespace pugi;
int main()
{
- std::ifstream in("mesh.xml");
- in.unsetf(std::ios::skipws);
-
- std::vector<char> buf;
- std::copy(std::istream_iterator<char>(in), std::istream_iterator<char>(), std::back_inserter(buf));
- buf.push_back(0); // zero-terminate
-
- xml_parser parser(&buf[0], pugi::parse_w3c);
+ // Several ways to get XML document
- xml_node doc = parser.document();
-
- if (xml_node mesh = doc.first_element("mesh"))
{
- // store mesh.attribute("name").value()
+ // Load from string
+ xml_document doc;
- for (xml_node fragment = mesh.first_element("fragment"); fragment; fragment = fragment.next_sibling())
- {
- // store fragment.attribute("name").value()
-
- if (xml_node geometry = fragment.first_element("geometry"))
- for (xml_node stream = geometry.first_element("stream"); stream; stream = stream.next_sibling())
- {
- // store stream.attribute("usage").value()
- // store stream.attribute("source").value()
-
- if (stream.attribute("compress"))
- // store stream.attribute("compress").as_bool()
-
- }
- }
+ cout << doc.load("<sample-xml>some text <b>in bold</b> here</sample-xml>") << endl;
+ }
+
+ {
+ // Load from file
+ xml_document doc;
+
+ cout << doc.load_file("sample.xml") << endl;
+ }
+
+ {
+ // Load from any input stream (STL)
+ xml_document doc;
+
+ std::ifstream in("sample.xml");
+ cout << doc.load(in) << endl;
+ }
+
+ {
+ // More advanced: parse the specified string without duplicating it
+ xml_document doc;
+
+ char* s = new char[100];
+ strcpy(s, "<sample-xml>some text <b>in bold</b> here</sample-xml>");
+ cout << doc.parse(transfer_ownership_tag(), s) << endl;
+ }
+
+ {
+ // Even more advanced: assume manual lifetime control
+ xml_document doc;
+
+ char* s = new char[100];
+ strcpy(s, "<sample-xml>some text <b>in bold</b> here</sample-xml>");
+ cout << doc.parse(transfer_ownership_tag(), s) << endl;
+
+ delete[] s; // <-- after this point, all string contents of document is invalid!
+ }
+
+ {
+ // Or just create document from code?
+ xml_document doc;
+
+ // add nodes to document (see next samples)
}
}
- |
We can also write a class that will traverse the DOM tree and store the information from nodes based -on their names, depths, attributes, etc. This way is well known by the users of SAX parsers. To do that, -we have to write an implementation of xml_tree_walker interface
+This sample should print a row of 1, meaning that all load/parse functions returned true (of course, if sample.xml does not exist or is malformed, there will be 0's)
--#include <fstream> -#include <vector> -#include <algorithm> -#include <iterator> + | |
| _Winnie C++ Colorizer |
Finally, let's get into more details about tree modification and saving.
+ +
+#include <iostream>
+
+#include "pugixml.hpp"
+
+using namespace std;
+using namespace pugi;
+
+int main()
+{
+ // For this example, we'll start with an empty document and create nodes in it from code
+ xml_document doc;
+
+ // Append several children and set values/names at once
+ doc.append_child(node_comment).set_value("This is a test comment");
+ doc.append_child().set_name("application");
+
+ // Let's add a few modules
+ xml_node application = doc.child("application");
+
+ // Save node wrapper for convenience
+ xml_node module_a = application.append_child();
+ module_a.set_name("module");
+
+ // Add an attribute, immediately setting it's value
+ module_a.append_attribute("name").set_value("A");
+
+ // You can use operator=
+ module_a.append_attribute("folder") = "/work/app/module_a";
+
+ // Or even assign numbers
+ module_a.append_attribute("status") = 85.4;
+
+ // Let's add another module
+ xml_node module_c = application.append_child();
+ module_c.set_name("module");
+ module_c.append_attribute("name") = "C";
+ module_c.append_attribute("folder") = "/work/app/module_c";
+
+ // Oh, we missed module B. Not a problem, let's insert it before module C
+ xml_node module_b = application.insert_child_before(node_element, module_c);
+ module_b.set_name("module");
+ module_b.append_attribute("folder") = "/work/app/module_b";
+
+ // We can do the same thing for attributes
+ module_b.insert_attribute_before("name", module_b.attribute("folder")) = "B";
+
+ // Let's add some text in module A
+ module_a.append_child(node_pcdata).set_value("Module A description");
+
+ // Well, there's not much left to do here. Let's output our document to file using several formatting options
+
+ doc.save_file("sample_saved_1.xml");
+
+ // Contents of file sample_saved_1.xml (tab size = 4):
+ // <?xml version="1.0"?>
+ // <!--This is a test comment-->
+ // <application>
+ // <module name="A" folder="/work/app/module_a" status="85.4">Module A description</module>
+ // <module name="B" folder="/work/app/module_b" />
+ // <module name="C" folder="/work/app/module_c" />
+ // </application>
+
+ // Let's use two spaces for indentation instead of tab character
+ doc.save_file("sample_saved_2.xml", " ");
+
+ // Contents of file sample_saved_2.xml:
+ // <?xml version="1.0"?>
+ // <!--This is a test comment-->
+ // <application>
+ // <module name="A" folder="/work/app/module_a" status="85.4">Module A description</module>
+ // <module name="B" folder="/work/app/module_b" />
+ // <module name="C" folder="/work/app/module_c" />
+ // </application>
+
+ // Let's save a raw XML file
+ doc.save_file("sample_saved_3.xml", "", format_raw);
+
+ // Contents of file sample_saved_3.xml:
+ // <?xml version="1.0"?><!--This is a test comment--><application><module name="A" folder="/work/app/module_a" status="85.4">Module A description</module><module name="B" folder="/work/app/module_b" /><module name="C" folder="/work/app/module_c" /></application>
+
+ // Finally, you can print a subtree to any output stream (including cout)
+ doc.child("application").child("module").print(cout);
+
+ // Output:
+ // <module name="A" folder="/work/app/module_a" status="85.4">Module A description</module>
+}
+ |
| _Winnie C++ Colorizer |
Note, that these examples do not cover the whole pugixml API. For further information, look into reference section.
So, let's talk a bit about parsing process, and about the reason for providing XML data as a contiguous -writeable block of memory. Parsing is done in-situ. This means, that the strings, representing the -parts of DOM tree (node names, attribute names and values, CDATA content, etc.) are not separately -allocated on heap, but instead are parts of the original data. This is the keypoint to parsing speed, -because it helps achieve the minimal amount of memory allocations (more on that below) and minimal -amount of copying data.
+pugixml is a library for parsing XML files, which means that you give it XML data some way, +and it gives you the DOM tree and the ways to traverse it and to get some useful information from it. +The library source consist of two headers, pugixml.hpp and pugiconfig.hpp, and two source +files, pugixml.cpp and pugixpath.cpp. +You can either compile cpp files in your project, or build a static library. +All library classes reside in namespace pugi, so you can either use fully qualified +names (pugi::xml_node) or write a using declaration (using namespace pugi;, using +pugi::xml_node) and use plain names. All classes have eitther xml_ or xpath_ prefix.
-In-situ parsing can be done in two ways, with zero-segmenting the string (that is, set the past-the-end -character for the part of XML string to 0, see -this image for further details), and storing pointer + size of the string instead of pointer to -the beginning of ASCIIZ string.
+By default it's supposed that you compile the source file with your project (add it into your +project, or add relevant entry in your Makefile, or do whatever you need to do with your compilation +environment). The library is written in standard-conformant C++ and was tested on following platforms:
-Originally, pugxml had only the first way, but then authors added the second method, 'non-segmenting' -or non-destructive parsing. The advantages of this method are: you no longer need non-constant storage; -you can even read data from memory-mapped files directly. Well, there are disadvantages. -For one thing, you can not do any of the transformations in-situ. The transformations that are required -by XML standard are: +
The documentation for pugixml classes, functions and constants is available here.
-In order to be able to modify the tree (change attribute/node names & values) with in-situ parsing, -one needs to implement two ways of storing data (both in-situ and not). The DOM tree is now mutable, -but it will change in the future releases (without introducing speed/memory overhead, except on clean- -up stage).
+The parsing process itself is more or less straightforward, when you see it - but the impression -is fake, because the explicit jumps are made (i.e. we know, that if we come to a closing brace (>), -we should expect CDATA after it (or a new tag), so let's just jump to the corresponding code), and, -well, there can be bugs (see Bugs section).
- -And, to make things worse, memory allocation (which is done only for node and attribute structures) -is done in pools. The pools are single-linked lists with predefined block size (32 kb by default), and -well, it increases speed a lot (allocations are slow, and the memory gets fragmented when allocating -a bunch of 16-byte (attribute) or 40-byte (node) structures)
+3 MSVC is Microsoft Visual C++ CompilerQ: I do not have/want STL support. How can I compile pugixml without STL?
A: There is an undocumented define PUGIXML_NO_STL. If you uncomment the relevant line in pugixml header file, it will compile without any STL classes. The reason it is undocumented -are that it will make some documented functions not available (specifically, xml_parser() ctor and -parse() function that operate on std::istream, xml_node::path function, utf16 and utf8 conversion -functions). Otherwise, it will work fine.
+are that it will make some documented functions not available (specifically, xml_document::load, that +operates on std::istream, xml_node::path function, saving functions (xml_node::print, xml_document::save), +XPath-related functions and classes and as_utf16 and as_utf8 conversion functions). Otherwise, it will +work fine.Q: Do paths that are accepted by first_element_by_path have to end with delimiter?
A: Either way will work, both /path/to/node/ and /path/to/node is fine.
@@ -1048,16 +577,10 @@ do not send executable files. upper ones will get there sooner).The pugixml parser is distributed under the MIT license:
-Copyright (c) 2006 Arseny Kapoulkine +Copyright (c) 2006-2007 Arseny Kapoulkine Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation @@ -1125,7 +670,7 @@ OTHER DEALINGS IN THE SOFTWARE.
-Revised 8 December, 2006
-© Copyright Arseny Kapoulkine 2006. All Rights Reserved.
+Revised 21 February, 2007
+© Copyright Arseny Kapoulkine 2006-2007. All Rights Reserved.