diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a45e459..76320221 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.15) -project(tinyxml2 VERSION 9.0.0) +project(tinyxml2 VERSION 10.0.0) include(CTest) option(tinyxml2_BUILD_TESTING "Build tests for tinyxml2" "${BUILD_TESTING}") diff --git a/docs/_example_1.html b/docs/_example_1.html index bac9a0c7..9659fcbd 100644 --- a/docs/_example_1.html +++ b/docs/_example_1.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Load an XML File + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
-
Load an XML File
+
+
Load an XML File

Basic XML file loading. The basic syntax to load an XML file from disk and check for an error. (ErrorID() will return 0 for no error.)

int example_1()
@@ -77,7 +85,7 @@
diff --git a/docs/_example_2.html b/docs/_example_2.html index 58e70a59..0fda91bc 100644 --- a/docs/_example_2.html +++ b/docs/_example_2.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Parse an XML from char buffer + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
-
Parse an XML from char buffer
+
+
Parse an XML from char buffer

Basic XML string parsing. The basic syntax to parse an XML for a char* and check for an error. (ErrorID() will return 0 for no error.)

int example_2()
@@ -78,7 +86,7 @@
diff --git a/docs/_example_3.html b/docs/_example_3.html index 8b58d0ea..b63348a3 100644 --- a/docs/_example_3.html +++ b/docs/_example_3.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Get information out of XML + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
-
Get information out of XML
+
+
Get information out of XML

In this example, we navigate a simple XML file, and read some interesting text. Note that this example doesn't use error checking; working code should check for null pointers when walking an XML tree, or use XMLHandle.

@@ -115,7 +123,7 @@
diff --git a/docs/_example_4.html b/docs/_example_4.html index f07bf9e3..5a14aeeb 100644 --- a/docs/_example_4.html +++ b/docs/_example_4.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Read attributes and text information. + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
-
Read attributes and text information.
+
+
Read attributes and text information.

@@ -88,7 +96,7 @@
diff --git a/docs/annotated.html b/docs/annotated.html index 7e51f65b..03f06407 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class List + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,37 +58,43 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
Class List
+
Class List
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 12]
- - - - - - - - - - - - - +
[detail level 12]
 Ntinyxml2
 CXMLVisitor
 CXMLNode
 CXMLText
 CXMLComment
 CXMLDeclaration
 CXMLUnknown
 CXMLAttribute
 CXMLElement
 CXMLDocument
 CXMLHandle
 CXMLConstHandle
 CXMLPrinter
+ + + + + + + + + + + + +
 Ntinyxml2
 CXMLAttribute
 CXMLComment
 CXMLConstHandle
 CXMLDeclaration
 CXMLDocument
 CXMLElement
 CXMLHandle
 CXMLNode
 CXMLPrinter
 CXMLText
 CXMLUnknown
 CXMLVisitor
diff --git a/docs/bc_sd.png b/docs/bc_sd.png new file mode 100644 index 00000000..31ca888d Binary files /dev/null and b/docs/bc_sd.png differ diff --git a/docs/classes.html b/docs/classes.html index de2170a0..3c50e5ae 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Index + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,26 +58,32 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
Class Index
+
Class Index
-
X
+
X
XMLAttribute (tinyxml2)
XMLComment (tinyxml2)
XMLConstHandle (tinyxml2)
XMLDeclaration (tinyxml2)
XMLDocument (tinyxml2)
XMLElement (tinyxml2)
XMLHandle (tinyxml2)
XMLNode (tinyxml2)
XMLPrinter (tinyxml2)
XMLText (tinyxml2)
XMLUnknown (tinyxml2)
XMLVisitor (tinyxml2)
diff --git a/docs/classtinyxml2_1_1_x_m_l_attribute-members.html b/docs/classtinyxml2_1_1_x_m_l_attribute-members.html index b8234a22..9f3f9902 100644 --- a/docs/classtinyxml2_1_1_x_m_l_attribute-members.html +++ b/docs/classtinyxml2_1_1_x_m_l_attribute-members.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Member List + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
tinyxml2::XMLAttribute Member List
+
tinyxml2::XMLAttribute Member List

This is the complete list of members for tinyxml2::XMLAttribute, including all inherited members.

- + - + - - - + + + - + - + - + - + - + - + - + - +
BoolValue() consttinyxml2::XMLAttributeinline
DoubleValue() consttinyxml2::XMLAttributeinline
DoubleValue() consttinyxml2::XMLAttributeinline
FloatValue() consttinyxml2::XMLAttributeinline
GetLineNum() consttinyxml2::XMLAttributeinline
GetLineNum() consttinyxml2::XMLAttributeinline
IntValue() consttinyxml2::XMLAttributeinline
Name() consttinyxml2::XMLAttribute
Next() consttinyxml2::XMLAttributeinline
QueryBoolValue(bool *value) consttinyxml2::XMLAttribute
Name() consttinyxml2::XMLAttribute
Next() consttinyxml2::XMLAttributeinline
QueryBoolValue(bool *value) consttinyxml2::XMLAttribute
QueryDoubleValue(double *value) consttinyxml2::XMLAttribute
QueryFloatValue(float *value) consttinyxml2::XMLAttribute
QueryFloatValue(float *value) consttinyxml2::XMLAttribute
QueryInt64Value(int64_t *value) consttinyxml2::XMLAttribute
QueryIntValue(int *value) consttinyxml2::XMLAttribute
QueryIntValue(int *value) consttinyxml2::XMLAttribute
QueryUnsigned64Value(uint64_t *value) consttinyxml2::XMLAttribute
QueryUnsignedValue(unsigned int *value) consttinyxml2::XMLAttribute
QueryUnsignedValue(unsigned int *value) consttinyxml2::XMLAttribute
SetAttribute(const char *value)tinyxml2::XMLAttribute
SetAttribute(int value)tinyxml2::XMLAttribute
SetAttribute(int value)tinyxml2::XMLAttribute
SetAttribute(unsigned value)tinyxml2::XMLAttribute
SetAttribute(int64_t value)tinyxml2::XMLAttribute
SetAttribute(int64_t value)tinyxml2::XMLAttribute
SetAttribute(uint64_t value)tinyxml2::XMLAttribute
SetAttribute(bool value)tinyxml2::XMLAttribute
SetAttribute(bool value)tinyxml2::XMLAttribute
SetAttribute(double value)tinyxml2::XMLAttribute
SetAttribute(float value)tinyxml2::XMLAttribute
SetAttribute(float value)tinyxml2::XMLAttribute
UnsignedValue() consttinyxml2::XMLAttributeinline
Value() consttinyxml2::XMLAttribute
Value() consttinyxml2::XMLAttribute
diff --git a/docs/classtinyxml2_1_1_x_m_l_attribute.html b/docs/classtinyxml2_1_1_x_m_l_attribute.html index 2353b5fd..e1b88e61 100644 --- a/docs/classtinyxml2_1_1_x_m_l_attribute.html +++ b/docs/classtinyxml2_1_1_x_m_l_attribute.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: tinyxml2::XMLAttribute Class Reference + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+

#include <tinyxml2.h>

- - - - - - - - + + + + + + + - - - - + + + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

+

Public Member Functions

-const char * Name () const
 The name of the attribute.
 
-const char * Value () const
 The value of the attribute.
 
-int GetLineNum () const
+const char * Name () const
 The name of the attribute.
 
+const char * Value () const
 The value of the attribute.
 
+int GetLineNum () const
 Gets the line number the attribute is in, if the document was parsed from a file.
 
-const XMLAttributeNext () const
 The next attribute in the list.
 
int IntValue () const
+const XMLAttributeNext () const
 The next attribute in the list.
 
int IntValue () const
 
-unsigned UnsignedValue () const
 Query as an unsigned integer. See IntValue()
+unsigned UnsignedValue () const
 Query as an unsigned integer. See IntValue()
 
-bool BoolValue () const
 Query as a boolean. See IntValue()
+bool BoolValue () const
 Query as a boolean. See IntValue()
 
-double DoubleValue () const
 Query as a double. See IntValue()
+double DoubleValue () const
 Query as a double. See IntValue()
 
-float FloatValue () const
 Query as a float. See IntValue()
+float FloatValue () const
 Query as a float. See IntValue()
 
XMLError QueryIntValue (int *value) const
XMLError QueryIntValue (int *value) const
 
-XMLError QueryUnsignedValue (unsigned int *value) const
+XMLError QueryUnsignedValue (unsigned int *value) const
 See QueryIntValue.
 
-XMLError QueryInt64Value (int64_t *value) const
+XMLError QueryInt64Value (int64_t *value) const
 See QueryIntValue.
 
-XMLError QueryUnsigned64Value (uint64_t *value) const
+XMLError QueryUnsigned64Value (uint64_t *value) const
 See QueryIntValue.
 
-XMLError QueryBoolValue (bool *value) const
+XMLError QueryBoolValue (bool *value) const
 See QueryIntValue.
 
-XMLError QueryDoubleValue (double *value) const
+XMLError QueryDoubleValue (double *value) const
 See QueryIntValue.
 
-XMLError QueryFloatValue (float *value) const
+XMLError QueryFloatValue (float *value) const
 See QueryIntValue.
 
-void SetAttribute (const char *value)
+void SetAttribute (const char *value)
 Set the attribute to a string value.
 
-void SetAttribute (int value)
+void SetAttribute (int value)
 Set the attribute to value.
 
-void SetAttribute (unsigned value)
+void SetAttribute (unsigned value)
 Set the attribute to value.
 
-void SetAttribute (int64_t value)
+void SetAttribute (int64_t value)
 Set the attribute to value.
 
-void SetAttribute (uint64_t value)
+void SetAttribute (uint64_t value)
 Set the attribute to value.
 
-void SetAttribute (bool value)
+void SetAttribute (bool value)
 Set the attribute to value.
 
-void SetAttribute (double value)
+void SetAttribute (double value)
 Set the attribute to value.
 
-void SetAttribute (float value)
+void SetAttribute (float value)
 Set the attribute to value.
 

Detailed Description

An attribute is a name-value pair. Elements have an arbitrary number of attributes, each with a unique name.

-
Note
The attributes are not XMLNodes. You may only query the Next() attribute in a list.
+
Note
The attributes are not XMLNodes. You may only query the Next() attribute in a list.

Member Function Documentation

- -

◆ IntValue()

+ +

◆ IntValue()

@@ -187,7 +195,7 @@

int tinyxml2::XMLAttribute::IntValue ( - ) + ) const @@ -197,12 +205,12 @@

-

IntValue interprets the attribute as an integer, and returns the value. If the value isn't an integer, 0 will be returned. There is no error checking; use QueryIntValue() if you need error checking.

+

IntValue interprets the attribute as an integer, and returns the value. If the value isn't an integer, 0 will be returned. There is no error checking; use QueryIntValue() if you need error checking.

- -

◆ QueryIntValue()

+ +

◆ QueryIntValue()

@@ -210,8 +218,7 @@

XMLError tinyxml2::XMLAttribute::QueryIntValue ( - int *  - value) + int * value) const @@ -226,7 +233,7 @@

diff --git a/docs/classtinyxml2_1_1_x_m_l_comment-members.html b/docs/classtinyxml2_1_1_x_m_l_comment-members.html index ee0ddfb0..4ea42ba3 100644 --- a/docs/classtinyxml2_1_1_x_m_l_comment-members.html +++ b/docs/classtinyxml2_1_1_x_m_l_comment-members.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Member List + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
tinyxml2::XMLComment Member List
+
tinyxml2::XMLComment Member List

This is the complete list of members for tinyxml2::XMLComment, including all inherited members.

- - + + - - - - - + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLCommentvirtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
Accept(XMLVisitor *visitor) const overridetinyxml2::XMLCommentvirtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLCommentvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLCommentvirtual
ToComment()tinyxml2::XMLCommentinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
ShallowClone(XMLDocument *document) const overridetinyxml2::XMLCommentvirtual
ShallowEqual(const XMLNode *compare) const overridetinyxml2::XMLCommentvirtual
ToComment() overridetinyxml2::XMLCommentinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
diff --git a/docs/classtinyxml2_1_1_x_m_l_comment.html b/docs/classtinyxml2_1_1_x_m_l_comment.html index d9374655..bd85209a 100644 --- a/docs/classtinyxml2_1_1_x_m_l_comment.html +++ b/docs/classtinyxml2_1_1_x_m_l_comment.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: tinyxml2::XMLComment Class Reference + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -85,113 +93,113 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - + +

+

Public Member Functions

-virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
virtual bool Accept (XMLVisitor *visitor) const
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
-const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
-XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
-virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
-virtual XMLTextToText ()
 Safely cast to Text, or null.
 
-virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
-virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
-virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
+virtual XMLCommentToComment () override
 Safely cast to a Comment, or null.
 
virtual bool Accept (XMLVisitor *visitor) const override
 
virtual XMLNodeShallowClone (XMLDocument *document) const override
 
virtual bool ShallowEqual (const XMLNode *compare) const override
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
-int GetLineNum () const
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
-const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
-bool NoChildren () const
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
-const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
-const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
-const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
-const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
-const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
-const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
void * GetUserData () const
 

Detailed Description

An XML Comment.

Member Function Documentation

- -

◆ Accept()

+ +

◆ Accept()

@@ -202,14 +210,13 @@

virtual bool tinyxml2::XMLComment::Accept ( - XMLVisitor *  - visitor) + XMLVisitor * visitor) const -virtual +overridevirtual

@@ -221,7 +228,7 @@

http://c2.com/cgi/wiki?HierarchicalVisitorPattern

Which are both good references for "visiting".

-

An example of using Accept():

XMLPrinter printer;
+

An example of using Accept():

XMLPrinter printer;
 tinyxmlDoc.Accept( &printer );
 const char* xmlcstr = printer.CStr();
 
@@ -229,8 +236,8 @@

-

◆ ShallowClone()

+ +

◆ ShallowClone()

- -

◆ ShallowEqual()

+ +

◆ ShallowEqual()

@@ -271,14 +277,13 @@

virtual bool tinyxml2::XMLComment::ShallowEqual ( - const XMLNode *  - compare) + const XMLNode * compare) const -virtual +overridevirtual

@@ -295,7 +300,7 @@

diff --git a/docs/classtinyxml2_1_1_x_m_l_comment.png b/docs/classtinyxml2_1_1_x_m_l_comment.png index 3a076f05..273dd1fc 100644 Binary files a/docs/classtinyxml2_1_1_x_m_l_comment.png and b/docs/classtinyxml2_1_1_x_m_l_comment.png differ diff --git a/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html b/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html index 58e1f4bd..672929bc 100644 --- a/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html +++ b/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Member List + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
tinyxml2::XMLConstHandle Member List
+
tinyxml2::XMLConstHandle Member List
@@ -75,7 +83,7 @@
diff --git a/docs/classtinyxml2_1_1_x_m_l_const_handle.html b/docs/classtinyxml2_1_1_x_m_l_const_handle.html index cd0f7e27..94d59f6d 100644 --- a/docs/classtinyxml2_1_1_x_m_l_const_handle.html +++ b/docs/classtinyxml2_1_1_x_m_l_const_handle.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: tinyxml2::XMLConstHandle Class Reference + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -56,32 +58,31 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- e -

diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html index d56b182e..5ffbe363 100644 --- a/docs/functions_func_f.html +++ b/docs/functions_func_f.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,43 +58,34 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- f -

diff --git a/docs/functions_func_g.html b/docs/functions_func_g.html index bf695bf4..991a6a2d 100644 --- a/docs/functions_func_g.html +++ b/docs/functions_func_g.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +

@@ -56,33 +58,31 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- g -

diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html index ee8745b5..474456b6 100644 --- a/docs/functions_func_h.html +++ b/docs/functions_func_h.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,23 +58,28 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- h -

diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html index 098aaf34..c1723c62 100644 --- a/docs/functions_func_i.html +++ b/docs/functions_func_i.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +

@@ -56,56 +58,39 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- i -

diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html index dc2addba..0924fd9d 100644 --- a/docs/functions_func_l.html +++ b/docs/functions_func_l.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,31 +58,30 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- l -

diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html index cd184976..aecb5292 100644 --- a/docs/functions_func_n.html +++ b/docs/functions_func_n.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +

@@ -56,53 +58,37 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- n -

diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html index d6b07a28..9c9b9b2e 100644 --- a/docs/functions_func_o.html +++ b/docs/functions_func_o.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,26 +58,29 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- o -

diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html index 7f27652c..7993545a 100644 --- a/docs/functions_func_p.html +++ b/docs/functions_func_p.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,55 +58,38 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- p -

diff --git a/docs/functions_func_q.html b/docs/functions_func_q.html index 23a8cd3d..1d7dd9bc 100644 --- a/docs/functions_func_q.html +++ b/docs/functions_func_q.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,89 +58,50 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- q -

diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html index 434602a8..59100bea 100644 --- a/docs/functions_func_r.html +++ b/docs/functions_func_r.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,23 +58,28 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- r -

diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html index c2235bdf..c860fa89 100644 --- a/docs/functions_func_s.html +++ b/docs/functions_func_s.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,63 +58,37 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
diff --git a/docs/functions_func_t.html b/docs/functions_func_t.html index ad90bb17..7d98c7d1 100644 --- a/docs/functions_func_t.html +++ b/docs/functions_func_t.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,51 +58,34 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- t -

diff --git a/docs/functions_func_u.html b/docs/functions_func_u.html index 1209ce90..bd4f9509 100644 --- a/docs/functions_func_u.html +++ b/docs/functions_func_u.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,35 +58,32 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- u -

diff --git a/docs/functions_func_v.html b/docs/functions_func_v.html index c7be00d4..9c13ad73 100644 --- a/docs/functions_func_v.html +++ b/docs/functions_func_v.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,36 +58,31 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- v -

diff --git a/docs/functions_func_x.html b/docs/functions_func_x.html index 286c1cb4..6b0c6610 100644 --- a/docs/functions_func_x.html +++ b/docs/functions_func_x.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members - Functions + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,29 +58,30 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the class documentation for each member:
-

- x -

diff --git a/docs/functions_g.html b/docs/functions_g.html index 8ae86735..2bca2cdf 100644 --- a/docs/functions_g.html +++ b/docs/functions_g.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,33 +58,31 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- g -

diff --git a/docs/functions_h.html b/docs/functions_h.html index 6d08f60b..49c2488c 100644 --- a/docs/functions_h.html +++ b/docs/functions_h.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,23 +58,28 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- h -

diff --git a/docs/functions_i.html b/docs/functions_i.html index 05dac1b5..15936533 100644 --- a/docs/functions_i.html +++ b/docs/functions_i.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,56 +58,39 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- i -

diff --git a/docs/functions_l.html b/docs/functions_l.html index b73bf6b4..75ae7912 100644 --- a/docs/functions_l.html +++ b/docs/functions_l.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,31 +58,30 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- l -

diff --git a/docs/functions_n.html b/docs/functions_n.html index 87619ee2..7f6707bf 100644 --- a/docs/functions_n.html +++ b/docs/functions_n.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,53 +58,37 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- n -

diff --git a/docs/functions_o.html b/docs/functions_o.html index 215a4560..78a18ea3 100644 --- a/docs/functions_o.html +++ b/docs/functions_o.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,26 +58,29 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- o -

diff --git a/docs/functions_p.html b/docs/functions_p.html index 41e1dd57..51069975 100644 --- a/docs/functions_p.html +++ b/docs/functions_p.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,55 +58,38 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- p -

diff --git a/docs/functions_q.html b/docs/functions_q.html index 19e35436..fa7c8a52 100644 --- a/docs/functions_q.html +++ b/docs/functions_q.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,89 +58,50 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- q -

diff --git a/docs/functions_r.html b/docs/functions_r.html index 579ce04f..a88893b3 100644 --- a/docs/functions_r.html +++ b/docs/functions_r.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,23 +58,28 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- r -

diff --git a/docs/functions_s.html b/docs/functions_s.html index 5b64911e..e184e576 100644 --- a/docs/functions_s.html +++ b/docs/functions_s.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ +
@@ -56,63 +58,37 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- s -

diff --git a/docs/functions_t.html b/docs/functions_t.html index 20ece1dc..187154c4 100644 --- a/docs/functions_t.html +++ b/docs/functions_t.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ + @@ -56,51 +58,34 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- t -

diff --git a/docs/functions_u.html b/docs/functions_u.html index 5d8ff3b1..4c5bee75 100644 --- a/docs/functions_u.html +++ b/docs/functions_u.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ + @@ -56,35 +58,32 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- u -

diff --git a/docs/functions_v.html b/docs/functions_v.html index 879617dd..9b4fb1ea 100644 --- a/docs/functions_v.html +++ b/docs/functions_v.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ + @@ -56,36 +58,31 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- v -

diff --git a/docs/functions_x.html b/docs/functions_x.html index 6c04f740..4a9df22c 100644 --- a/docs/functions_x.html +++ b/docs/functions_x.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Members + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ + @@ -56,29 +58,30 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
-

- x -

diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 5930913c..ade52fb5 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Class Hierarchy + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ + @@ -56,36 +58,42 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
Class Hierarchy
+
Class Hierarchy
This inheritance list is sorted roughly, but not completely, alphabetically:
-
[detail level 12]
+
[detail level 12]
- + - + - + - + - - - + + +
 Ctinyxml2::XMLAttribute
 Ctinyxml2::XMLConstHandle
 Ctinyxml2::XMLConstHandle
 Ctinyxml2::XMLHandle
 Ctinyxml2::XMLNode
 Ctinyxml2::XMLNode
 Ctinyxml2::XMLComment
 Ctinyxml2::XMLDeclaration
 Ctinyxml2::XMLDeclaration
 Ctinyxml2::XMLDocument
 Ctinyxml2::XMLElement
 Ctinyxml2::XMLElement
 Ctinyxml2::XMLText
 Ctinyxml2::XMLUnknown
 Ctinyxml2::XMLVisitor
 Ctinyxml2::XMLPrinter
 Ctinyxml2::XMLUnknown
 Ctinyxml2::XMLVisitor
 Ctinyxml2::XMLPrinter
diff --git a/docs/index.html b/docs/index.html index eea651ad..57993bb9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: TinyXML-2 + + @@ -19,10 +21,9 @@
- - + @@ -30,21 +31,22 @@
-
TinyXML-2 -  9.0.0 +
+
TinyXML-2 10.0.0
- + +/* @license-end */ + @@ -56,19 +58,24 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
-
TinyXML-2
+
+
TinyXML-2

-

Build

-

TinyXML-2 Logo

+

Test

TinyXML-2 is a simple, small, efficient, C++ XML parser that can be easily integrated into other programs.

The master is hosted on github: https://github.com/leethomason/tinyxml2

The online HTML version of these docs: http://leethomason.github.io/tinyxml2/

@@ -95,7 +102,7 @@

Memory Model

An XMLDocument is a C++ object like any other, that can be on the stack, or new'd and deleted on the heap.

However, any sub-node of the Document, XMLElement, XMLText, etc, can only be created by calling the appropriate XMLDocument::NewElement, NewText, etc. method. Although you have pointers to these objects, they are still owned by the Document. When the Document is deleted, so are all the nodes it contains.

White Space

-

Whitespace Preservation (default)

+

Whitespace Preservation (default, PRESERVE_WHITESPACE)

Microsoft has an excellent article on white space: http://msdn.microsoft.com/en-us/library/ms256097.aspx

By default, TinyXML-2 preserves white space in a (hopefully) sane way that is almost compliant with the spec. (TinyXML-1 used a completely different model, much more similar to 'collapse', below.)

As a first step, all newlines / carriage-returns / line-feeds are normalized to a line-feed character, as required by the XML spec.

@@ -109,7 +116,7 @@

Whitespace Preservation (default)

</document> <document><data>1</data><data>2</data><data>3</data></document> -

Whitespace Collapse

+

Whitespace Collapse (COLLAPSE_WHITESPACE)

For some applications, it is preferable to collapse whitespace. Collapsing whitespace gives you "HTML-like" behavior, which is sometimes more suitable for hand typed documents.

TinyXML-2 supports this with the 'whitespace' parameter to the XMLDocument constructor. (The default is to preserve whitespace, as described above.)

However, you may also use COLLAPSE_WHITESPACE, which will:

@@ -119,7 +126,10 @@

Whitespace Preservation (default)

  • Collapse a run of any number of space characters into a single space character
  • Note that (currently) there is a performance impact for using COLLAPSE_WHITESPACE. It essentially causes the XML to be parsed twice.

    -

    Error Reporting

    +

    Pedantic Whitespace (PEDANTIC_WHITESPACE)

    +

    For applications that need to know about text nodes that are composed entirely of whitespace, PEDANTIC_WHITESPACE is available. PEDANTIC_WHITESPACE maintains all the whilespace between elements.

    +

    PEDANTIC_WHITESPACE is a new mode and not as tested as the other whitespace modes.

    +

    Error Reporting

    TinyXML-2 reports the line number of any errors in an XML document that cannot be parsed correctly. In addition, all nodes (elements, declarations, text, comments etc.) and attributes have a line number recorded as they are parsed. This allows an application that performs additional validation of the parsed XML document (e.g. application-implemented DTD validation) to report line number information for error messages.

    Entities

    TinyXML-2 recognizes the pre-defined "character entities", meaning special characters. Namely:

    &amp;   &
    @@ -186,8 +196,8 @@ 

    Load and parse an XML file.

  • xmltest.cpp
  • Generally speaking, the intent is that you simply include the tinyxml2.cpp and tinyxml2.h files in your project and build with your other source code.

    -

    There is also a CMake build included. CMake is the general build for TinyXML-2. Additional build systems are costly to maintain, and tend to bit-rot.

    -

    A Visual Studio project is included, but that is largely for developer convenience, and is not intended to integrate well with other builds.

    +

    There is also a CMake build included. CMake is the general build for TinyXML-2.

    +

    (Additional build systems are costly to maintain, and tend to bit-rot. They are being removed over time.)

    Building TinyXML-2 - Using vcpkg

    You can download and install TinyXML-2 using the vcpkg dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
     cd vcpkg
    @@ -213,10 +223,11 @@ 

    Contributors

    TinyXML-2 grew from that effort. Lee Thomason is the original author of TinyXML-2 (and TinyXML-1) but TinyXML-2 has been and is being improved by many contributors.

    Thanks to John Mackay at http://john.mackay.rosalilastudio.com for the TinyXML-2 logo!

    +
    diff --git a/docs/jquery.js b/docs/jquery.js index 103c32d7..1dffb65b 100644 --- a/docs/jquery.js +++ b/docs/jquery.js @@ -1,12 +1,11 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
    "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element -},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(y){"use strict";y.ui=y.ui||{};y.ui.version="1.13.2";var n,i=0,h=Array.prototype.hasOwnProperty,a=Array.prototype.slice;y.cleanData=(n=y.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=y._data(i,"events"))&&e.remove&&y(i).triggerHandler("remove");n(t)}),y.widget=function(t,i,e){var s,n,o,h={},a=t.split(".")[0],r=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=y.Widget),Array.isArray(e)&&(e=y.extend.apply(null,[{}].concat(e))),y.expr.pseudos[r.toLowerCase()]=function(t){return!!y.data(t,r)},y[a]=y[a]||{},s=y[a][t],n=y[a][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},y.extend(n,s,{version:e.version,_proto:y.extend({},e),_childConstructors:[]}),(o=new i).options=y.widget.extend({},o.options),y.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}h[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=y.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},h,{constructor:n,namespace:a,widgetName:t,widgetFullName:r}),s?(y.each(s._childConstructors,function(t,e){var i=e.prototype;y.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),y.widget.bridge(t,n),n},y.widget.extend=function(t){for(var e,i,s=a.call(arguments,1),n=0,o=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
    "),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n
    ").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e
    ").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0'+ + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ data.children[i].text+''+ makeTree(data.children[i],relPath)+'
  • '; } @@ -36,15 +43,91 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { } return result; } - - $('#main-nav').append(makeTree(menudata,relPath)); - $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + let searchBoxHtml; if (searchEnabled) { if (serverSide) { - $('#main-menu').append('
  • '); + searchBoxHtml='
    '+ + '
    '+ + '
     '+ + ''+ + '
    '+ + '
    '+ + '
    '+ + '
    '; } else { - $('#main-menu').append('
  • '); + searchBoxHtml='
    '+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
    '; + } + } + + $('#main-nav').before('
    '+ + ''+ + ''+ + '
    '); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); } $('#main-menu').smartmenus(); } diff --git a/docs/minus.svg b/docs/minus.svg new file mode 100644 index 00000000..f70d0c1a --- /dev/null +++ b/docs/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/minusd.svg b/docs/minusd.svg new file mode 100644 index 00000000..5f8e8796 --- /dev/null +++ b/docs/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/nav_fd.png b/docs/nav_fd.png new file mode 100644 index 00000000..032fbdd4 Binary files /dev/null and b/docs/nav_fd.png differ diff --git a/docs/nav_hd.png b/docs/nav_hd.png new file mode 100644 index 00000000..de80f18a Binary files /dev/null and b/docs/nav_hd.png differ diff --git a/docs/pages.html b/docs/pages.html index ea4b2d9a..0c7428d7 100644 --- a/docs/pages.html +++ b/docs/pages.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: Related Pages + + @@ -19,10 +21,9 @@
    - - + @@ -30,21 +31,22 @@
    -
    TinyXML-2 -  9.0.0 +
    +
    TinyXML-2 10.0.0
    - + +/* @license-end */ +
    @@ -56,28 +58,34 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    Related Pages
    +
    Related Pages
    Here is a list of all related documentation pages:
    - + - +
     Load an XML File
     Parse an XML from char buffer
     Parse an XML from char buffer
     Get information out of XML
     Read attributes and text information.
     Read attributes and text information.
    diff --git a/docs/plus.svg b/docs/plus.svg new file mode 100644 index 00000000..07520165 --- /dev/null +++ b/docs/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/plusd.svg b/docs/plusd.svg new file mode 100644 index 00000000..0c65bfe9 --- /dev/null +++ b/docs/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/search/all_0.js b/docs/search/all_0.js index 69ff10e1..5da8a554 100644 --- a/docs/search/all_0.js +++ b/docs/search/all_0.js @@ -1,5 +1,4 @@ var searchData= [ - ['accept_0',['Accept',['../classtinyxml2_1_1_x_m_l_node.html#a81e66df0a44c67a7af17f3b77a152785',1,'tinyxml2::XMLNode::Accept()'],['../classtinyxml2_1_1_x_m_l_text.html#a1b2c1448f1a21299d0a7913f18b55206',1,'tinyxml2::XMLText::Accept()'],['../classtinyxml2_1_1_x_m_l_comment.html#a4a33dc32fae0285b03f9cfcb3e43e122',1,'tinyxml2::XMLComment::Accept()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a5f376019fb34752eb248548f42f32045',1,'tinyxml2::XMLDeclaration::Accept()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a70983aa1b1cff3d3aa6d4d0a80e5ee48',1,'tinyxml2::XMLUnknown::Accept()'],['../classtinyxml2_1_1_x_m_l_element.html#a3ea8a40e788fb9ad876c28a32932c6d5',1,'tinyxml2::XMLElement::Accept()'],['../classtinyxml2_1_1_x_m_l_document.html#a9efa54f7ecb37c17ab1fa2b3078ccca1',1,'tinyxml2::XMLDocument::Accept()']]], - ['attribute_1',['Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a70e49ed60b11212ae35f7e354cfe1de9',1,'tinyxml2::XMLElement']]] + ['2_0',['TinyXML-2',['../index.html',1,'']]] ]; diff --git a/docs/search/all_1.js b/docs/search/all_1.js index a8b11676..9843f184 100644 --- a/docs/search/all_1.js +++ b/docs/search/all_1.js @@ -1,6 +1,9 @@ var searchData= [ - ['boolattribute_2',['BoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a53eda26131e1ad1031ef8ec8adb51bd8',1,'tinyxml2::XMLElement']]], - ['booltext_3',['BoolText',['../classtinyxml2_1_1_x_m_l_element.html#a68569f59f6382bcea7f5013ec59736d2',1,'tinyxml2::XMLElement']]], - ['boolvalue_4',['BoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a98ce5207344ad33a265b0422addae1ff',1,'tinyxml2::XMLAttribute']]] + ['accept_0',['Accept',['../classtinyxml2_1_1_x_m_l_node.html#a81e66df0a44c67a7af17f3b77a152785',1,'tinyxml2::XMLNode::Accept()'],['../classtinyxml2_1_1_x_m_l_text.html#a4022fa0089f2964203c7a69cd0f3726f',1,'tinyxml2::XMLText::Accept()'],['../classtinyxml2_1_1_x_m_l_comment.html#a171ccb71232b90cd0d6945b92cfc4aec',1,'tinyxml2::XMLComment::Accept()'],['../classtinyxml2_1_1_x_m_l_declaration.html#afd861abee3ed6c88e9a6965dac32f8b7',1,'tinyxml2::XMLDeclaration::Accept()'],['../classtinyxml2_1_1_x_m_l_unknown.html#ab510bfaa18873a3968964655353d2946',1,'tinyxml2::XMLUnknown::Accept()'],['../classtinyxml2_1_1_x_m_l_element.html#acae4a763d74c13ce4a31eb70b4db9f82',1,'tinyxml2::XMLElement::Accept()'],['../classtinyxml2_1_1_x_m_l_document.html#a853f05e2f7f51eb598e32ec61d8bc53c',1,'tinyxml2::XMLDocument::Accept()']]], + ['an_20xml_20file_1',['Load an XML File',['../_example_1.html',1,'']]], + ['an_20xml_20from_20char_20buffer_2',['Parse an XML from char buffer',['../_example_2.html',1,'']]], + ['and_20text_20information_3',['Read attributes and text information.',['../_example_4.html',1,'']]], + ['attribute_4',['Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a48cf4a315cfbac7d74cd0d5ff2c5df51',1,'tinyxml2::XMLElement']]], + ['attributes_20and_20text_20information_5',['Read attributes and text information.',['../_example_4.html',1,'']]] ]; diff --git a/docs/search/all_10.js b/docs/search/all_10.js index cac5f2a7..c29ac63b 100644 --- a/docs/search/all_10.js +++ b/docs/search/all_10.js @@ -1,11 +1,13 @@ var searchData= [ - ['tinyxml_2d2_113',['TinyXML-2',['../index.html',1,'']]], - ['tocomment_114',['ToComment',['../classtinyxml2_1_1_x_m_l_node.html#aff47671055aa99840a1c1ebd661e63e3',1,'tinyxml2::XMLNode::ToComment()'],['../classtinyxml2_1_1_x_m_l_comment.html#a8093e1dc8a34fa446d9dc3fde0e6c0ee',1,'tinyxml2::XMLComment::ToComment()']]], - ['todeclaration_115',['ToDeclaration',['../classtinyxml2_1_1_x_m_l_node.html#a174fd4c22c010b58138c1b84a0dfbd51',1,'tinyxml2::XMLNode::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a159d8ac45865215e88059ea1e5b52fc5',1,'tinyxml2::XMLDeclaration::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_handle.html#a108858be7ee3eb53f73b5194c1aa8ff0',1,'tinyxml2::XMLHandle::ToDeclaration()']]], - ['todocument_116',['ToDocument',['../classtinyxml2_1_1_x_m_l_node.html#a836e2966ed736fc3c94f70e12a2a3357',1,'tinyxml2::XMLNode::ToDocument()'],['../classtinyxml2_1_1_x_m_l_document.html#a3e185f880882bd978367bb55937735ec',1,'tinyxml2::XMLDocument::ToDocument()']]], - ['toelement_117',['ToElement',['../classtinyxml2_1_1_x_m_l_node.html#aab516e699567f75cc9ab2ef2eee501e8',1,'tinyxml2::XMLNode::ToElement()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ff5c2dbc15df36cf664ce1b0ea0a5d',1,'tinyxml2::XMLElement::ToElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a5e73ed8f3f6f9619d5a8bb1862c47d99',1,'tinyxml2::XMLHandle::ToElement()']]], - ['tonode_118',['ToNode',['../classtinyxml2_1_1_x_m_l_handle.html#a03ea6ec970a021b71bf1219a0f6717df',1,'tinyxml2::XMLHandle']]], - ['totext_119',['ToText',['../classtinyxml2_1_1_x_m_l_node.html#a41c55dab9162d1eb62db2008430e376b',1,'tinyxml2::XMLNode::ToText()'],['../classtinyxml2_1_1_x_m_l_text.html#ab1213b4ddebe9b17ec7e7040e9f1caf7',1,'tinyxml2::XMLText::ToText()'],['../classtinyxml2_1_1_x_m_l_handle.html#a6ab9e8cbfb41417246e5657e3842c62a',1,'tinyxml2::XMLHandle::ToText()']]], - ['tounknown_120',['ToUnknown',['../classtinyxml2_1_1_x_m_l_node.html#a8675a74aa0ada6eccab0c77ef3e5b9bd',1,'tinyxml2::XMLNode::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_unknown.html#af4374856421921cad578c8affae872b6',1,'tinyxml2::XMLUnknown::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_handle.html#aa387368a1ad8d843a9f12df863d298de',1,'tinyxml2::XMLHandle::ToUnknown()']]] + ['savefile_0',['SaveFile',['../classtinyxml2_1_1_x_m_l_document.html#a73ac416b4a2aa0952e841220eb3da18f',1,'tinyxml2::XMLDocument::SaveFile(const char *filename, bool compact=false)'],['../classtinyxml2_1_1_x_m_l_document.html#a8b95779479a0035acc67b3a61dfe1b74',1,'tinyxml2::XMLDocument::SaveFile(FILE *fp, bool compact=false)']]], + ['setattribute_1',['SetAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html#a406d2c4a13c7af99a65edb59dd9f7581',1,'tinyxml2::XMLAttribute::SetAttribute(const char *value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ad86d7d7058d76761c3a80662566a57e5',1,'tinyxml2::XMLAttribute::SetAttribute(int value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae70468c0f6df2748ba3529c716999fae',1,'tinyxml2::XMLAttribute::SetAttribute(unsigned value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a7c1240f479722b9aa29b6c030aa116c2',1,'tinyxml2::XMLAttribute::SetAttribute(int64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a10964060a5c0d92486ecf8705bdf37da',1,'tinyxml2::XMLAttribute::SetAttribute(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ab3516def4fe058fe328f2b89fc2d77da',1,'tinyxml2::XMLAttribute::SetAttribute(bool value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a9a65ab3147abe8ccbbd373ce8791e818',1,'tinyxml2::XMLAttribute::SetAttribute(double value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae95e843313aaf5d56c32530b6456df02',1,'tinyxml2::XMLAttribute::SetAttribute(float value)'],['../classtinyxml2_1_1_x_m_l_element.html#a11943abf2d0831548c3790dd5d9f119c',1,'tinyxml2::XMLElement::SetAttribute(const char *name, const char *value)'],['../classtinyxml2_1_1_x_m_l_element.html#aae6568c64c7f1cc88be8461ba41a79cf',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae143997e90064ba82326b29a9930ea8f',1,'tinyxml2::XMLElement::SetAttribute(const char *name, unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#aaeefdf9171fec91b13a776b42299b0dd',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ad598868c0599ddc4695dab18552c308d',1,'tinyxml2::XMLElement::SetAttribute(const char *name, uint64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#aa848b696e6a75e4e545c6da9893b11e1',1,'tinyxml2::XMLElement::SetAttribute(const char *name, bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a233397ee81e70eb5d4b814c5f8698533',1,'tinyxml2::XMLElement::SetAttribute(const char *name, double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a554b70d882e65b28fc084b23df9b9759',1,'tinyxml2::XMLElement::SetAttribute(const char *name, float value)']]], + ['setbom_2',['SetBOM',['../classtinyxml2_1_1_x_m_l_document.html#a14419b698f7c4b140df4e80f3f0c93b0',1,'tinyxml2::XMLDocument']]], + ['setcdata_3',['SetCData',['../classtinyxml2_1_1_x_m_l_text.html#ad080357d76ab7cc59d7651249949329d',1,'tinyxml2::XMLText']]], + ['setname_4',['SetName',['../classtinyxml2_1_1_x_m_l_element.html#a97712009a530d8cb8a63bf705f02b4f1',1,'tinyxml2::XMLElement']]], + ['settext_5',['SetText',['../classtinyxml2_1_1_x_m_l_element.html#a1f9c2cd61b72af5ae708d37b7ad283ce',1,'tinyxml2::XMLElement::SetText(const char *inText)'],['../classtinyxml2_1_1_x_m_l_element.html#aeae8917b5ea6060b3c08d4e3d8d632d7',1,'tinyxml2::XMLElement::SetText(int value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7bbfcc11d516598bc924a8fba4d08597',1,'tinyxml2::XMLElement::SetText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7b62cd33acdfeff7ea2b1b330d4368e4',1,'tinyxml2::XMLElement::SetText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#a6e615bc745afd1ca8ded56d7aac02657',1,'tinyxml2::XMLElement::SetText(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae4b543d6770de76fb6ab68e541c192a4',1,'tinyxml2::XMLElement::SetText(bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a67bd77ac9aaeff58ff20b4275a65ba4e',1,'tinyxml2::XMLElement::SetText(double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a51d560da5ae3ad6b75e0ab9ffb2ae42a',1,'tinyxml2::XMLElement::SetText(float value)']]], + ['setuserdata_6',['SetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a002978fc889cc011d143185f2377eca2',1,'tinyxml2::XMLNode']]], + ['setvalue_7',['SetValue',['../classtinyxml2_1_1_x_m_l_node.html#a09dd68cf9eae137579f6e50f36487513',1,'tinyxml2::XMLNode']]], + ['shallowclone_8',['ShallowClone',['../classtinyxml2_1_1_x_m_l_node.html#a9046880c05b81ad99ee645f4b2a53ecd',1,'tinyxml2::XMLNode::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_text.html#a277bbcf2e0e1326ca7f6f7c4d0820bb0',1,'tinyxml2::XMLText::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_comment.html#a5396d702a6ca251ee1493707a3ac6086',1,'tinyxml2::XMLComment::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a0e1151bfb4c2a42ed8a1991169cbc59e',1,'tinyxml2::XMLDeclaration::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a5ffeb6cd9e55008ebc160c1ceb4115ec',1,'tinyxml2::XMLUnknown::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_element.html#a6dc4d8774d1e77a8c37a7b3d039d3049',1,'tinyxml2::XMLElement::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_document.html#a01ab2fc16fbce5f4456d67d24090e70b',1,'tinyxml2::XMLDocument::ShallowClone()']]], + ['shallowequal_9',['ShallowEqual',['../classtinyxml2_1_1_x_m_l_node.html#a7ce18b751c3ea09eac292dca264f9226',1,'tinyxml2::XMLNode::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_text.html#a032269f8d4d0357912fcb9bdc796f50c',1,'tinyxml2::XMLText::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_comment.html#a5d905bdee77945cf8473987911fbe581',1,'tinyxml2::XMLComment::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a125d70baaba44a55c2f10e185f70d478',1,'tinyxml2::XMLDeclaration::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a300a119859a7c25a64f400c16535d8b4',1,'tinyxml2::XMLUnknown::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_element.html#aaba88737610559755425b8a59179817e',1,'tinyxml2::XMLElement::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_document.html#ac538345c44f521e418ff86b4bdc20ca8',1,'tinyxml2::XMLDocument::ShallowEqual()']]] ]; diff --git a/docs/search/all_11.js b/docs/search/all_11.js index aa21f644..494ed06e 100644 --- a/docs/search/all_11.js +++ b/docs/search/all_11.js @@ -1,8 +1,12 @@ var searchData= [ - ['unsigned64attribute_121',['Unsigned64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a226502bab8f1be7ede1fdd255398eb85',1,'tinyxml2::XMLElement']]], - ['unsigned64text_122',['Unsigned64Text',['../classtinyxml2_1_1_x_m_l_element.html#af48c1023abbac1acdf4927c51c3a5f0c',1,'tinyxml2::XMLElement']]], - ['unsignedattribute_123',['UnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#afea43a1d4aa33e3703ddee5fc9adc26c',1,'tinyxml2::XMLElement']]], - ['unsignedtext_124',['UnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a49bad014ffcc17b0b6119d5b2c97dfb5',1,'tinyxml2::XMLElement']]], - ['unsignedvalue_125',['UnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a0be5343b08a957c42c02c5d32c35d338',1,'tinyxml2::XMLAttribute']]] + ['text_20information_0',['Read attributes and text information.',['../_example_4.html',1,'']]], + ['tinyxml_202_1',['TinyXML-2',['../index.html',1,'']]], + ['tocomment_2',['ToComment',['../classtinyxml2_1_1_x_m_l_node.html#a5dc13f02ae49e3fa609e426f47c8466d',1,'tinyxml2::XMLNode::ToComment()'],['../classtinyxml2_1_1_x_m_l_comment.html#a7bd0df98fc2bb55d1d4445bfd2ec0053',1,'tinyxml2::XMLComment::ToComment()']]], + ['todeclaration_3',['ToDeclaration',['../classtinyxml2_1_1_x_m_l_node.html#a12aa783a3a4445ad5557c7d56cd8dc4a',1,'tinyxml2::XMLNode::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_declaration.html#ac485f175252b0d838d86de5fa22455cd',1,'tinyxml2::XMLDeclaration::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_handle.html#a85d0c76920a013ea2a29456dbf7d160d',1,'tinyxml2::XMLHandle::ToDeclaration()']]], + ['todocument_4',['ToDocument',['../classtinyxml2_1_1_x_m_l_node.html#a6107c3f57ab6e0755959947762953652',1,'tinyxml2::XMLNode::ToDocument()'],['../classtinyxml2_1_1_x_m_l_document.html#a290ad241e05e6aeeccbc78a4f3454f55',1,'tinyxml2::XMLDocument::ToDocument()']]], + ['toelement_5',['ToElement',['../classtinyxml2_1_1_x_m_l_node.html#a9417e1f8a9787ae27741605493514b18',1,'tinyxml2::XMLNode::ToElement()'],['../classtinyxml2_1_1_x_m_l_element.html#a88621376780280c0695458e30212eebe',1,'tinyxml2::XMLElement::ToElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#ab2371c4adb8b04afe04ed216bf9b0676',1,'tinyxml2::XMLHandle::ToElement()']]], + ['tonode_6',['ToNode',['../classtinyxml2_1_1_x_m_l_handle.html#a689453c96dd3d4016437d2298d1de691',1,'tinyxml2::XMLHandle']]], + ['totext_7',['ToText',['../classtinyxml2_1_1_x_m_l_node.html#a0aea8c9c5853c35a06da1988486abc60',1,'tinyxml2::XMLNode::ToText()'],['../classtinyxml2_1_1_x_m_l_text.html#a221e45ee1026407049d89786cbbfe145',1,'tinyxml2::XMLText::ToText()'],['../classtinyxml2_1_1_x_m_l_handle.html#accc80bcbd81e816f13a23c172587c288',1,'tinyxml2::XMLHandle::ToText()']]], + ['tounknown_8',['ToUnknown',['../classtinyxml2_1_1_x_m_l_node.html#aa8a2dd38b786c3b8d406c2047753cbfd',1,'tinyxml2::XMLNode::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a7d2238fe165736605de3ba2e2e5a99d1',1,'tinyxml2::XMLUnknown::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_handle.html#add97784cbe14ef42bb36e158ad6e6082',1,'tinyxml2::XMLHandle::ToUnknown()']]] ]; diff --git a/docs/search/all_12.js b/docs/search/all_12.js index 886312d9..d1602adc 100644 --- a/docs/search/all_12.js +++ b/docs/search/all_12.js @@ -1,7 +1,8 @@ var searchData= [ - ['value_126',['Value',['../classtinyxml2_1_1_x_m_l_node.html#a66344989a4b436155bcda72bd6b07b82',1,'tinyxml2::XMLNode::Value()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a1aab1dd0e43ecbcfa306adbcf3a3d853',1,'tinyxml2::XMLAttribute::Value()']]], - ['visit_127',['Visit',['../classtinyxml2_1_1_x_m_l_visitor.html#adc75bd459fc7ba8223b50f0616767f9a',1,'tinyxml2::XMLVisitor::Visit(const XMLDeclaration &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af30233565856480ea48b6fa0d6dec65b',1,'tinyxml2::XMLVisitor::Visit(const XMLText &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#acc8147fb5a85f6c65721654e427752d7',1,'tinyxml2::XMLVisitor::Visit(const XMLComment &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a14e4748387c34bf53d24e8119bb1f292',1,'tinyxml2::XMLVisitor::Visit(const XMLUnknown &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a275ae25544a12199ae40b6994ca6e4de',1,'tinyxml2::XMLPrinter::Visit(const XMLText &text)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3f16a30be1537ac141d9bd2db824ba9e',1,'tinyxml2::XMLPrinter::Visit(const XMLComment &comment)'],['../classtinyxml2_1_1_x_m_l_printer.html#a9ceff5cd85e5db65838962174fcdcc46',1,'tinyxml2::XMLPrinter::Visit(const XMLDeclaration &declaration)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa15e1da81e17dea5da6499ac5b08d9d8',1,'tinyxml2::XMLPrinter::Visit(const XMLUnknown &unknown)']]], - ['visitenter_128',['VisitEnter',['../classtinyxml2_1_1_x_m_l_visitor.html#acb3c22fc5f60eb9db98f533f2761f67d',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af97980a17dd4e37448b181f5ddfa92b5',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLElement &, const XMLAttribute *)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae966b988a7a28c41e91c5ca17fb2054b',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a2ce2aa508c21ac91615093ddb9c282c5',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLElement &element, const XMLAttribute *attribute)']]], - ['visitexit_129',['VisitExit',['../classtinyxml2_1_1_x_m_l_visitor.html#a170e9989cd046ba904f302d087e07086',1,'tinyxml2::XMLVisitor::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a772f10ddc83f881956d32628faa16eb6',1,'tinyxml2::XMLVisitor::VisitExit(const XMLElement &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a15fc1f2b922f540917dcf52808737b29',1,'tinyxml2::XMLPrinter::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae99e0a7086543591edfb565f24689098',1,'tinyxml2::XMLPrinter::VisitExit(const XMLElement &element)']]] + ['unsigned64attribute_0',['Unsigned64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a226502bab8f1be7ede1fdd255398eb85',1,'tinyxml2::XMLElement']]], + ['unsigned64text_1',['Unsigned64Text',['../classtinyxml2_1_1_x_m_l_element.html#af48c1023abbac1acdf4927c51c3a5f0c',1,'tinyxml2::XMLElement']]], + ['unsignedattribute_2',['UnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#afea43a1d4aa33e3703ddee5fc9adc26c',1,'tinyxml2::XMLElement']]], + ['unsignedtext_3',['UnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a49bad014ffcc17b0b6119d5b2c97dfb5',1,'tinyxml2::XMLElement']]], + ['unsignedvalue_4',['UnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a0be5343b08a957c42c02c5d32c35d338',1,'tinyxml2::XMLAttribute']]] ]; diff --git a/docs/search/all_13.js b/docs/search/all_13.js index a438148c..cc7cc15c 100644 --- a/docs/search/all_13.js +++ b/docs/search/all_13.js @@ -1,15 +1,7 @@ var searchData= [ - ['xmlattribute_130',['XMLAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html',1,'tinyxml2']]], - ['xmlcomment_131',['XMLComment',['../classtinyxml2_1_1_x_m_l_comment.html',1,'tinyxml2']]], - ['xmlconsthandle_132',['XMLConstHandle',['../classtinyxml2_1_1_x_m_l_const_handle.html',1,'tinyxml2']]], - ['xmldeclaration_133',['XMLDeclaration',['../classtinyxml2_1_1_x_m_l_declaration.html',1,'tinyxml2']]], - ['xmldocument_134',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html',1,'tinyxml2::XMLDocument'],['../classtinyxml2_1_1_x_m_l_document.html#a57ddf17b6e054dda10af98991b1b8f70',1,'tinyxml2::XMLDocument::XMLDocument()']]], - ['xmlelement_135',['XMLElement',['../classtinyxml2_1_1_x_m_l_element.html',1,'tinyxml2']]], - ['xmlhandle_136',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html',1,'tinyxml2::XMLHandle'],['../classtinyxml2_1_1_x_m_l_handle.html#a9c240a35c18f053509b4b97ddccd9793',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode *node)'],['../classtinyxml2_1_1_x_m_l_handle.html#aa2edbc1c0d3e3e8259bd98de7f1cf500',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode &node)'],['../classtinyxml2_1_1_x_m_l_handle.html#afd8e01e6018c07347b8e6d80272466aa',1,'tinyxml2::XMLHandle::XMLHandle(const XMLHandle &ref)']]], - ['xmlnode_137',['XMLNode',['../classtinyxml2_1_1_x_m_l_node.html',1,'tinyxml2']]], - ['xmlprinter_138',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html',1,'tinyxml2::XMLPrinter'],['../classtinyxml2_1_1_x_m_l_printer.html#aa6d3841c069085f5b8a27bc7103c04f7',1,'tinyxml2::XMLPrinter::XMLPrinter()']]], - ['xmltext_139',['XMLText',['../classtinyxml2_1_1_x_m_l_text.html',1,'tinyxml2']]], - ['xmlunknown_140',['XMLUnknown',['../classtinyxml2_1_1_x_m_l_unknown.html',1,'tinyxml2']]], - ['xmlvisitor_141',['XMLVisitor',['../classtinyxml2_1_1_x_m_l_visitor.html',1,'tinyxml2']]] + ['value_0',['Value',['../classtinyxml2_1_1_x_m_l_node.html#a0485e51c670e741884cfd8362274d680',1,'tinyxml2::XMLNode::Value()'],['../classtinyxml2_1_1_x_m_l_attribute.html#ab1c5cd993f836a771818ca408994b14e',1,'tinyxml2::XMLAttribute::Value()']]], + ['visit_1',['Visit',['../classtinyxml2_1_1_x_m_l_visitor.html#adc75bd459fc7ba8223b50f0616767f9a',1,'tinyxml2::XMLVisitor::Visit(const XMLDeclaration &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af30233565856480ea48b6fa0d6dec65b',1,'tinyxml2::XMLVisitor::Visit(const XMLText &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#acc8147fb5a85f6c65721654e427752d7',1,'tinyxml2::XMLVisitor::Visit(const XMLComment &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a14e4748387c34bf53d24e8119bb1f292',1,'tinyxml2::XMLVisitor::Visit(const XMLUnknown &)'],['../classtinyxml2_1_1_x_m_l_printer.html#ad903ea1672831f797130b4cddddfa532',1,'tinyxml2::XMLPrinter::Visit(const XMLText &text) override'],['../classtinyxml2_1_1_x_m_l_printer.html#a76fe434cdd4c39cb9963e3025e53609a',1,'tinyxml2::XMLPrinter::Visit(const XMLComment &comment) override'],['../classtinyxml2_1_1_x_m_l_printer.html#a63df55647c0e170e5b8702842b82008e',1,'tinyxml2::XMLPrinter::Visit(const XMLDeclaration &declaration) override'],['../classtinyxml2_1_1_x_m_l_printer.html#a31002765840bc4ea7b22332f71d83c74',1,'tinyxml2::XMLPrinter::Visit(const XMLUnknown &unknown) override']]], + ['visitenter_2',['VisitEnter',['../classtinyxml2_1_1_x_m_l_visitor.html#acb3c22fc5f60eb9db98f533f2761f67d',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af97980a17dd4e37448b181f5ddfa92b5',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLElement &, const XMLAttribute *)'],['../classtinyxml2_1_1_x_m_l_printer.html#a73eba3d1aab34c4c3ac38d7d2d186671',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLDocument &) override'],['../classtinyxml2_1_1_x_m_l_printer.html#a5cab997d51b0387c21e2274bd1147755',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLElement &element, const XMLAttribute *attribute) override']]], + ['visitexit_3',['VisitExit',['../classtinyxml2_1_1_x_m_l_visitor.html#a170e9989cd046ba904f302d087e07086',1,'tinyxml2::XMLVisitor::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a772f10ddc83f881956d32628faa16eb6',1,'tinyxml2::XMLVisitor::VisitExit(const XMLElement &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a261a24986e3507258a74405a7dc08cbf',1,'tinyxml2::XMLPrinter::VisitExit(const XMLDocument &) override'],['../classtinyxml2_1_1_x_m_l_printer.html#a9a397f4c809a4de7ba27902b3ae1bbf7',1,'tinyxml2::XMLPrinter::VisitExit(const XMLElement &element) override']]] ]; diff --git a/docs/search/all_14.js b/docs/search/all_14.js new file mode 100644 index 00000000..5ada783a --- /dev/null +++ b/docs/search/all_14.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['xml_0',['Get information out of XML',['../_example_3.html',1,'']]], + ['xml_20file_1',['Load an XML File',['../_example_1.html',1,'']]], + ['xml_20from_20char_20buffer_2',['Parse an XML from char buffer',['../_example_2.html',1,'']]], + ['xmlattribute_3',['XMLAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html',1,'tinyxml2']]], + ['xmlcomment_4',['XMLComment',['../classtinyxml2_1_1_x_m_l_comment.html',1,'tinyxml2']]], + ['xmlconsthandle_5',['XMLConstHandle',['../classtinyxml2_1_1_x_m_l_const_handle.html',1,'tinyxml2']]], + ['xmldeclaration_6',['XMLDeclaration',['../classtinyxml2_1_1_x_m_l_declaration.html',1,'tinyxml2']]], + ['xmldocument_7',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html',1,'tinyxml2::XMLDocument'],['../classtinyxml2_1_1_x_m_l_document.html#a57ddf17b6e054dda10af98991b1b8f70',1,'tinyxml2::XMLDocument::XMLDocument()']]], + ['xmlelement_8',['XMLElement',['../classtinyxml2_1_1_x_m_l_element.html',1,'tinyxml2']]], + ['xmlhandle_9',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html',1,'tinyxml2::XMLHandle'],['../classtinyxml2_1_1_x_m_l_handle.html#a9c240a35c18f053509b4b97ddccd9793',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode *node)'],['../classtinyxml2_1_1_x_m_l_handle.html#aa2edbc1c0d3e3e8259bd98de7f1cf500',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode &node)'],['../classtinyxml2_1_1_x_m_l_handle.html#afd8e01e6018c07347b8e6d80272466aa',1,'tinyxml2::XMLHandle::XMLHandle(const XMLHandle &ref)']]], + ['xmlnode_10',['XMLNode',['../classtinyxml2_1_1_x_m_l_node.html',1,'tinyxml2']]], + ['xmlprinter_11',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html',1,'tinyxml2::XMLPrinter'],['../classtinyxml2_1_1_x_m_l_printer.html#aa6d3841c069085f5b8a27bc7103c04f7',1,'tinyxml2::XMLPrinter::XMLPrinter()']]], + ['xmltext_12',['XMLText',['../classtinyxml2_1_1_x_m_l_text.html',1,'tinyxml2']]], + ['xmlunknown_13',['XMLUnknown',['../classtinyxml2_1_1_x_m_l_unknown.html',1,'tinyxml2']]], + ['xmlvisitor_14',['XMLVisitor',['../classtinyxml2_1_1_x_m_l_visitor.html',1,'tinyxml2']]] +]; diff --git a/docs/search/all_2.js b/docs/search/all_2.js index 211e24ef..afeff4b9 100644 --- a/docs/search/all_2.js +++ b/docs/search/all_2.js @@ -1,10 +1,7 @@ var searchData= [ - ['cdata_5',['CData',['../classtinyxml2_1_1_x_m_l_text.html#ac1bb5ea4166c320882d9e0ad16fd385b',1,'tinyxml2::XMLText']]], - ['clear_6',['Clear',['../classtinyxml2_1_1_x_m_l_document.html#a65656b0b2cbc822708eb351504178aaf',1,'tinyxml2::XMLDocument']]], - ['clearbuffer_7',['ClearBuffer',['../classtinyxml2_1_1_x_m_l_printer.html#a690cb140ba98b7339734ff865f56b0b3',1,'tinyxml2::XMLPrinter']]], - ['clearerror_8',['ClearError',['../classtinyxml2_1_1_x_m_l_document.html#a4085d9c52f1d93214311459d6d1fcf17',1,'tinyxml2::XMLDocument']]], - ['closeelement_9',['CloseElement',['../classtinyxml2_1_1_x_m_l_printer.html#ad04d29562b46fcdb23ab320f8b664240',1,'tinyxml2::XMLPrinter']]], - ['cstr_10',['CStr',['../classtinyxml2_1_1_x_m_l_printer.html#a180671d73844f159f2d4aafbc11d106e',1,'tinyxml2::XMLPrinter']]], - ['cstrsize_11',['CStrSize',['../classtinyxml2_1_1_x_m_l_printer.html#a3256cf3523d4898b91abb18b924be04c',1,'tinyxml2::XMLPrinter']]] + ['boolattribute_0',['BoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a53eda26131e1ad1031ef8ec8adb51bd8',1,'tinyxml2::XMLElement']]], + ['booltext_1',['BoolText',['../classtinyxml2_1_1_x_m_l_element.html#a68569f59f6382bcea7f5013ec59736d2',1,'tinyxml2::XMLElement']]], + ['boolvalue_2',['BoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a98ce5207344ad33a265b0422addae1ff',1,'tinyxml2::XMLAttribute']]], + ['buffer_3',['Parse an XML from char buffer',['../_example_2.html',1,'']]] ]; diff --git a/docs/search/all_3.js b/docs/search/all_3.js index 6520bfaa..7565a621 100644 --- a/docs/search/all_3.js +++ b/docs/search/all_3.js @@ -1,12 +1,11 @@ var searchData= [ - ['deepclone_12',['DeepClone',['../classtinyxml2_1_1_x_m_l_node.html#a62c71b6bf8734b5424063b8d9a61c266',1,'tinyxml2::XMLNode']]], - ['deepcopy_13',['DeepCopy',['../classtinyxml2_1_1_x_m_l_document.html#af592ffc91514e25a39664521ac83db45',1,'tinyxml2::XMLDocument']]], - ['deleteattribute_14',['DeleteAttribute',['../classtinyxml2_1_1_x_m_l_element.html#aebd45aa7118964c30b32fe12e944628a',1,'tinyxml2::XMLElement']]], - ['deletechild_15',['DeleteChild',['../classtinyxml2_1_1_x_m_l_node.html#a363b6edbd6ebd55f8387d2b89f2b0921',1,'tinyxml2::XMLNode']]], - ['deletechildren_16',['DeleteChildren',['../classtinyxml2_1_1_x_m_l_node.html#a0360085cc54df5bff85d5c5da13afdce',1,'tinyxml2::XMLNode']]], - ['deletenode_17',['DeleteNode',['../classtinyxml2_1_1_x_m_l_document.html#ac1d6e2c7fcc1a660624ac4f68e96380d',1,'tinyxml2::XMLDocument']]], - ['doubleattribute_18',['DoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a10a90c505aea716bf073eea1c97f33b5',1,'tinyxml2::XMLElement']]], - ['doubletext_19',['DoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a81b1ff0cf2f2cd09be8badc08b39a2b7',1,'tinyxml2::XMLElement']]], - ['doublevalue_20',['DoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a4aa73513f54ff0087d3e804f0f54e30f',1,'tinyxml2::XMLAttribute']]] + ['cdata_0',['CData',['../classtinyxml2_1_1_x_m_l_text.html#ac1bb5ea4166c320882d9e0ad16fd385b',1,'tinyxml2::XMLText']]], + ['char_20buffer_1',['Parse an XML from char buffer',['../_example_2.html',1,'']]], + ['clear_2',['Clear',['../classtinyxml2_1_1_x_m_l_document.html#a65656b0b2cbc822708eb351504178aaf',1,'tinyxml2::XMLDocument']]], + ['clearbuffer_3',['ClearBuffer',['../classtinyxml2_1_1_x_m_l_printer.html#a690cb140ba98b7339734ff865f56b0b3',1,'tinyxml2::XMLPrinter']]], + ['clearerror_4',['ClearError',['../classtinyxml2_1_1_x_m_l_document.html#a4085d9c52f1d93214311459d6d1fcf17',1,'tinyxml2::XMLDocument']]], + ['closeelement_5',['CloseElement',['../classtinyxml2_1_1_x_m_l_printer.html#ad04d29562b46fcdb23ab320f8b664240',1,'tinyxml2::XMLPrinter']]], + ['cstr_6',['CStr',['../classtinyxml2_1_1_x_m_l_printer.html#abfa772366c44a17cdeb8aea294d57f78',1,'tinyxml2::XMLPrinter']]], + ['cstrsize_7',['CStrSize',['../classtinyxml2_1_1_x_m_l_printer.html#a3256cf3523d4898b91abb18b924be04c',1,'tinyxml2::XMLPrinter']]] ]; diff --git a/docs/search/all_4.js b/docs/search/all_4.js index 52bdc46b..389526f0 100644 --- a/docs/search/all_4.js +++ b/docs/search/all_4.js @@ -1,7 +1,12 @@ var searchData= [ - ['error_21',['Error',['../classtinyxml2_1_1_x_m_l_document.html#a34e6318e182e40e3cc4f4ba5d59ed9ed',1,'tinyxml2::XMLDocument']]], - ['errorid_22',['ErrorID',['../classtinyxml2_1_1_x_m_l_document.html#afa3ed33b3107f920ec2b301f805ac17d',1,'tinyxml2::XMLDocument']]], - ['errorlinenum_23',['ErrorLineNum',['../classtinyxml2_1_1_x_m_l_document.html#a57400f816dbe7799ece33615ead9ab76',1,'tinyxml2::XMLDocument']]], - ['errorstr_24',['ErrorStr',['../classtinyxml2_1_1_x_m_l_document.html#ad75aa9d32c4e8b300655186808aa9abf',1,'tinyxml2::XMLDocument']]] + ['deepclone_0',['DeepClone',['../classtinyxml2_1_1_x_m_l_node.html#a3bb369fd733f1989b751d99a9417adab',1,'tinyxml2::XMLNode']]], + ['deepcopy_1',['DeepCopy',['../classtinyxml2_1_1_x_m_l_document.html#af592ffc91514e25a39664521ac83db45',1,'tinyxml2::XMLDocument']]], + ['deleteattribute_2',['DeleteAttribute',['../classtinyxml2_1_1_x_m_l_element.html#aebd45aa7118964c30b32fe12e944628a',1,'tinyxml2::XMLElement']]], + ['deletechild_3',['DeleteChild',['../classtinyxml2_1_1_x_m_l_node.html#a363b6edbd6ebd55f8387d2b89f2b0921',1,'tinyxml2::XMLNode']]], + ['deletechildren_4',['DeleteChildren',['../classtinyxml2_1_1_x_m_l_node.html#a0360085cc54df5bff85d5c5da13afdce',1,'tinyxml2::XMLNode']]], + ['deletenode_5',['DeleteNode',['../classtinyxml2_1_1_x_m_l_document.html#ac1d6e2c7fcc1a660624ac4f68e96380d',1,'tinyxml2::XMLDocument']]], + ['doubleattribute_6',['DoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a10a90c505aea716bf073eea1c97f33b5',1,'tinyxml2::XMLElement']]], + ['doubletext_7',['DoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a81b1ff0cf2f2cd09be8badc08b39a2b7',1,'tinyxml2::XMLElement']]], + ['doublevalue_8',['DoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a4aa73513f54ff0087d3e804f0f54e30f',1,'tinyxml2::XMLAttribute']]] ]; diff --git a/docs/search/all_5.js b/docs/search/all_5.js index 1d4413af..45f017ad 100644 --- a/docs/search/all_5.js +++ b/docs/search/all_5.js @@ -1,10 +1,7 @@ var searchData= [ - ['findattribute_25',['FindAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a2dcd4d5d6fb63396cd2f257c318b42c4',1,'tinyxml2::XMLElement']]], - ['firstattribute_26',['FirstAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a3e191704c8d499906ec11fe2f60c6686',1,'tinyxml2::XMLElement']]], - ['firstchild_27',['FirstChild',['../classtinyxml2_1_1_x_m_l_node.html#ae7dc225e1018cdd685f7563593a1fe08',1,'tinyxml2::XMLNode::FirstChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a536447dc7f54c0cd11e031dad94795ae',1,'tinyxml2::XMLHandle::FirstChild()']]], - ['firstchildelement_28',['FirstChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a1795a35852dc8aae877cc8ded986e59b',1,'tinyxml2::XMLNode::FirstChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a74b04dd0f15e0bf01860e282b840b6a3',1,'tinyxml2::XMLHandle::FirstChildElement()']]], - ['floatattribute_29',['FloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#ab1f4be2332e27dc640e9b6abd01d64dd',1,'tinyxml2::XMLElement']]], - ['floattext_30',['FloatText',['../classtinyxml2_1_1_x_m_l_element.html#a45444eb21f99ca46101545992dc2e927',1,'tinyxml2::XMLElement']]], - ['floatvalue_31',['FloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a27797b45d21c981257720db94f5f8801',1,'tinyxml2::XMLAttribute']]] + ['error_0',['Error',['../classtinyxml2_1_1_x_m_l_document.html#a34e6318e182e40e3cc4f4ba5d59ed9ed',1,'tinyxml2::XMLDocument']]], + ['errorid_1',['ErrorID',['../classtinyxml2_1_1_x_m_l_document.html#afa3ed33b3107f920ec2b301f805ac17d',1,'tinyxml2::XMLDocument']]], + ['errorlinenum_2',['ErrorLineNum',['../classtinyxml2_1_1_x_m_l_document.html#a57400f816dbe7799ece33615ead9ab76',1,'tinyxml2::XMLDocument']]], + ['errorstr_3',['ErrorStr',['../classtinyxml2_1_1_x_m_l_document.html#ae97fff2402a0d01e0509c430b37996b3',1,'tinyxml2::XMLDocument']]] ]; diff --git a/docs/search/all_6.js b/docs/search/all_6.js index 9dddc4ff..c0f7a60d 100644 --- a/docs/search/all_6.js +++ b/docs/search/all_6.js @@ -1,8 +1,12 @@ var searchData= [ - ['get_20information_20out_20of_20xml_32',['Get information out of XML',['../_example_3.html',1,'']]], - ['getdocument_33',['GetDocument',['../classtinyxml2_1_1_x_m_l_node.html#a2de84cfa4ec3fe249bad745069d145f1',1,'tinyxml2::XMLNode::GetDocument() const'],['../classtinyxml2_1_1_x_m_l_node.html#af343d1ef0b45c0020e62d784d7e67a68',1,'tinyxml2::XMLNode::GetDocument()']]], - ['getlinenum_34',['GetLineNum',['../classtinyxml2_1_1_x_m_l_node.html#a9b5fc636646fda761d342c72e91cb286',1,'tinyxml2::XMLNode::GetLineNum()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a02d5ea924586e35f9c13857d1671b765',1,'tinyxml2::XMLAttribute::GetLineNum()']]], - ['gettext_35',['GetText',['../classtinyxml2_1_1_x_m_l_element.html#a6d5c8d115561ade4e4456b71d91b6f51',1,'tinyxml2::XMLElement']]], - ['getuserdata_36',['GetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a7f0687574afa03bc479dc44f29db0afe',1,'tinyxml2::XMLNode']]] + ['file_0',['Load an XML File',['../_example_1.html',1,'']]], + ['findattribute_1',['FindAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a157750dac8037a316fd1af1a973dfa2c',1,'tinyxml2::XMLElement']]], + ['firstattribute_2',['FirstAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a4a7c4392658833bb8138c474d15a805a',1,'tinyxml2::XMLElement']]], + ['firstchild_3',['FirstChild',['../classtinyxml2_1_1_x_m_l_node.html#abcc2e572dce329539689b426a0840661',1,'tinyxml2::XMLNode::FirstChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a536447dc7f54c0cd11e031dad94795ae',1,'tinyxml2::XMLHandle::FirstChild()']]], + ['firstchildelement_4',['FirstChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a1bec132dcf085284e0a10755f2cf0d57',1,'tinyxml2::XMLNode::FirstChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a74b04dd0f15e0bf01860e282b840b6a3',1,'tinyxml2::XMLHandle::FirstChildElement()']]], + ['floatattribute_5',['FloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#ab1f4be2332e27dc640e9b6abd01d64dd',1,'tinyxml2::XMLElement']]], + ['floattext_6',['FloatText',['../classtinyxml2_1_1_x_m_l_element.html#a45444eb21f99ca46101545992dc2e927',1,'tinyxml2::XMLElement']]], + ['floatvalue_7',['FloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a27797b45d21c981257720db94f5f8801',1,'tinyxml2::XMLAttribute']]], + ['from_20char_20buffer_8',['Parse an XML from char buffer',['../_example_2.html',1,'']]] ]; diff --git a/docs/search/all_7.js b/docs/search/all_7.js index 118d61e2..43a46e02 100644 --- a/docs/search/all_7.js +++ b/docs/search/all_7.js @@ -1,4 +1,8 @@ var searchData= [ - ['hasbom_37',['HasBOM',['../classtinyxml2_1_1_x_m_l_document.html#a33fc5d159db873a179fa26338adb05bd',1,'tinyxml2::XMLDocument']]] + ['get_20information_20out_20of_20xml_0',['Get information out of XML',['../_example_3.html',1,'']]], + ['getdocument_1',['GetDocument',['../classtinyxml2_1_1_x_m_l_node.html#a6ce3bbe80357f5a4dc5db31a66f2bb18',1,'tinyxml2::XMLNode::GetDocument() const'],['../classtinyxml2_1_1_x_m_l_node.html#a48d1695f7c834129e072548957a50501',1,'tinyxml2::XMLNode::GetDocument()']]], + ['getlinenum_2',['GetLineNum',['../classtinyxml2_1_1_x_m_l_node.html#a9b5fc636646fda761d342c72e91cb286',1,'tinyxml2::XMLNode::GetLineNum()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a02d5ea924586e35f9c13857d1671b765',1,'tinyxml2::XMLAttribute::GetLineNum()']]], + ['gettext_3',['GetText',['../classtinyxml2_1_1_x_m_l_element.html#a0fa5bea0a4daf3ddd503dcabb823eba6',1,'tinyxml2::XMLElement']]], + ['getuserdata_4',['GetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a18cc02ebd0b06f6bf5db7ef87653e00e',1,'tinyxml2::XMLNode']]] ]; diff --git a/docs/search/all_8.js b/docs/search/all_8.js index 9256a19a..ad187459 100644 --- a/docs/search/all_8.js +++ b/docs/search/all_8.js @@ -1,15 +1,4 @@ var searchData= [ - ['insertafterchild_38',['InsertAfterChild',['../classtinyxml2_1_1_x_m_l_node.html#a85adb8f0b7477eec30f9a41d420b09c2',1,'tinyxml2::XMLNode']]], - ['insertendchild_39',['InsertEndChild',['../classtinyxml2_1_1_x_m_l_node.html#aeb249ed60f4e8bfad3709151c3ee4286',1,'tinyxml2::XMLNode']]], - ['insertfirstchild_40',['InsertFirstChild',['../classtinyxml2_1_1_x_m_l_node.html#a8ff7dc071f3a1a6ae2ac25a37492865d',1,'tinyxml2::XMLNode']]], - ['insertnewchildelement_41',['InsertNewChildElement',['../classtinyxml2_1_1_x_m_l_element.html#abc9506eff9780f666f49dc3d5e5cae13',1,'tinyxml2::XMLElement']]], - ['insertnewcomment_42',['InsertNewComment',['../classtinyxml2_1_1_x_m_l_element.html#ae4f2c2e781b8dc030411d84cd20fa46d',1,'tinyxml2::XMLElement']]], - ['insertnewdeclaration_43',['InsertNewDeclaration',['../classtinyxml2_1_1_x_m_l_element.html#adec237e788b50c4ed73c918a166adde6',1,'tinyxml2::XMLElement']]], - ['insertnewtext_44',['InsertNewText',['../classtinyxml2_1_1_x_m_l_element.html#a189e155810fc9fdd4da1409cbadee187',1,'tinyxml2::XMLElement']]], - ['insertnewunknown_45',['InsertNewUnknown',['../classtinyxml2_1_1_x_m_l_element.html#acaa5fe3957760e68185006965e2c11c2',1,'tinyxml2::XMLElement']]], - ['int64attribute_46',['Int64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a66d96972adecd816194191f13cc4a0a0',1,'tinyxml2::XMLElement']]], - ['int64text_47',['Int64Text',['../classtinyxml2_1_1_x_m_l_element.html#aab6151f7e3b4c2c0a8234e262d7b6b8a',1,'tinyxml2::XMLElement']]], - ['intattribute_48',['IntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a95a89b13bb14a2d4655e2b5b406c00d4',1,'tinyxml2::XMLElement']]], - ['intvalue_49',['IntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#adfa2433f0fdafd5c3880936de9affa80',1,'tinyxml2::XMLAttribute']]] + ['hasbom_0',['HasBOM',['../classtinyxml2_1_1_x_m_l_document.html#a33fc5d159db873a179fa26338adb05bd',1,'tinyxml2::XMLDocument']]] ]; diff --git a/docs/search/all_9.js b/docs/search/all_9.js index f6023fe3..d5de6ebc 100644 --- a/docs/search/all_9.js +++ b/docs/search/all_9.js @@ -1,7 +1,17 @@ var searchData= [ - ['lastchild_50',['LastChild',['../classtinyxml2_1_1_x_m_l_node.html#a9b8583a277e8e26f4cbbb5492786778e',1,'tinyxml2::XMLNode::LastChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a9d09f04435f0f2f7d0816b0198d0517b',1,'tinyxml2::XMLHandle::LastChild()']]], - ['lastchildelement_51',['LastChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a173e9d1341bc56992e2d320a35936551',1,'tinyxml2::XMLNode::LastChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a42cccd0ce8b1ce704f431025e9f19e0c',1,'tinyxml2::XMLHandle::LastChildElement()']]], - ['load_20an_20xml_20file_52',['Load an XML File',['../_example_1.html',1,'']]], - ['loadfile_53',['LoadFile',['../classtinyxml2_1_1_x_m_l_document.html#a2ebd4647a8af5fc6831b294ac26a150a',1,'tinyxml2::XMLDocument::LoadFile(const char *filename)'],['../classtinyxml2_1_1_x_m_l_document.html#a5f1d330fad44c52f3d265338dd2a6dc2',1,'tinyxml2::XMLDocument::LoadFile(FILE *)']]] + ['information_0',['Read attributes and text information.',['../_example_4.html',1,'']]], + ['information_20out_20of_20xml_1',['Get information out of XML',['../_example_3.html',1,'']]], + ['insertafterchild_2',['InsertAfterChild',['../classtinyxml2_1_1_x_m_l_node.html#a9275138a1b8dd5d8e2c26789bdc23ac8',1,'tinyxml2::XMLNode']]], + ['insertendchild_3',['InsertEndChild',['../classtinyxml2_1_1_x_m_l_node.html#ae3b422e98914d6002ca99bb1d2837103',1,'tinyxml2::XMLNode']]], + ['insertfirstchild_4',['InsertFirstChild',['../classtinyxml2_1_1_x_m_l_node.html#ac609a8f3ea949027f439280c640bbaf2',1,'tinyxml2::XMLNode']]], + ['insertnewchildelement_5',['InsertNewChildElement',['../classtinyxml2_1_1_x_m_l_element.html#abf01fdeb702165fddbc97bcc8af8a1ad',1,'tinyxml2::XMLElement']]], + ['insertnewcomment_6',['InsertNewComment',['../classtinyxml2_1_1_x_m_l_element.html#aaed36d3a8082b083ec4f1de55ee68cc2',1,'tinyxml2::XMLElement']]], + ['insertnewdeclaration_7',['InsertNewDeclaration',['../classtinyxml2_1_1_x_m_l_element.html#a7f11671a928649add7e3e18de7adf84a',1,'tinyxml2::XMLElement']]], + ['insertnewtext_8',['InsertNewText',['../classtinyxml2_1_1_x_m_l_element.html#ac30367a5e25ff30e178b56e0e1456d23',1,'tinyxml2::XMLElement']]], + ['insertnewunknown_9',['InsertNewUnknown',['../classtinyxml2_1_1_x_m_l_element.html#afe6cfefb48f8fbcb29a790f2042b55a4',1,'tinyxml2::XMLElement']]], + ['int64attribute_10',['Int64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a66d96972adecd816194191f13cc4a0a0',1,'tinyxml2::XMLElement']]], + ['int64text_11',['Int64Text',['../classtinyxml2_1_1_x_m_l_element.html#aab6151f7e3b4c2c0a8234e262d7b6b8a',1,'tinyxml2::XMLElement']]], + ['intattribute_12',['IntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a95a89b13bb14a2d4655e2b5b406c00d4',1,'tinyxml2::XMLElement']]], + ['intvalue_13',['IntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#adfa2433f0fdafd5c3880936de9affa80',1,'tinyxml2::XMLAttribute']]] ]; diff --git a/docs/search/all_a.js b/docs/search/all_a.js index 5211f98c..474fb717 100644 --- a/docs/search/all_a.js +++ b/docs/search/all_a.js @@ -1,13 +1,7 @@ var searchData= [ - ['name_54',['Name',['../classtinyxml2_1_1_x_m_l_attribute.html#ab886c486ec19f02ed826f8dc129e5ad8',1,'tinyxml2::XMLAttribute::Name()'],['../classtinyxml2_1_1_x_m_l_element.html#a63e057fb5baee1dd29f323cb85907b35',1,'tinyxml2::XMLElement::Name()']]], - ['newcomment_55',['NewComment',['../classtinyxml2_1_1_x_m_l_document.html#ade4874bcb439954972ef2b3723ff3259',1,'tinyxml2::XMLDocument']]], - ['newdeclaration_56',['NewDeclaration',['../classtinyxml2_1_1_x_m_l_document.html#aee2eb3435923f5494dcc70ac225b60a2',1,'tinyxml2::XMLDocument']]], - ['newelement_57',['NewElement',['../classtinyxml2_1_1_x_m_l_document.html#a8aa7817d4a1001364b06373763ab99d6',1,'tinyxml2::XMLDocument']]], - ['newtext_58',['NewText',['../classtinyxml2_1_1_x_m_l_document.html#ab7e8b29ae4099092a8bb947da6361296',1,'tinyxml2::XMLDocument']]], - ['newunknown_59',['NewUnknown',['../classtinyxml2_1_1_x_m_l_document.html#a5385c937734ff6db9226ab707d2c7147',1,'tinyxml2::XMLDocument']]], - ['next_60',['Next',['../classtinyxml2_1_1_x_m_l_attribute.html#aee53571b21e7ce5421eb929523a8bbe6',1,'tinyxml2::XMLAttribute']]], - ['nextsibling_61',['NextSibling',['../classtinyxml2_1_1_x_m_l_node.html#a79db9ef0fe014d27790f2218b87bcbb5',1,'tinyxml2::XMLNode::NextSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#aad2eccc7c7c7b18145877c978c3850b5',1,'tinyxml2::XMLHandle::NextSibling()']]], - ['nextsiblingelement_62',['NextSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a1264c86233328f0cd36297552d982f80',1,'tinyxml2::XMLNode::NextSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#ae41d88ee061f3c49a081630ff753b2c5',1,'tinyxml2::XMLHandle::NextSiblingElement()']]], - ['nochildren_63',['NoChildren',['../classtinyxml2_1_1_x_m_l_node.html#ac3ab489e6e202a3cd1762d3b332e89d4',1,'tinyxml2::XMLNode']]] + ['lastchild_0',['LastChild',['../classtinyxml2_1_1_x_m_l_node.html#a69a29bb8263ff5e9815be180bf27e7af',1,'tinyxml2::XMLNode::LastChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a9d09f04435f0f2f7d0816b0198d0517b',1,'tinyxml2::XMLHandle::LastChild()']]], + ['lastchildelement_1',['LastChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a609e02f02044f39b928d1a3e0de9f532',1,'tinyxml2::XMLNode::LastChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a42cccd0ce8b1ce704f431025e9f19e0c',1,'tinyxml2::XMLHandle::LastChildElement()']]], + ['load_20an_20xml_20file_2',['Load an XML File',['../_example_1.html',1,'']]], + ['loadfile_3',['LoadFile',['../classtinyxml2_1_1_x_m_l_document.html#a2ebd4647a8af5fc6831b294ac26a150a',1,'tinyxml2::XMLDocument::LoadFile(const char *filename)'],['../classtinyxml2_1_1_x_m_l_document.html#a5f1d330fad44c52f3d265338dd2a6dc2',1,'tinyxml2::XMLDocument::LoadFile(FILE *)']]] ]; diff --git a/docs/search/all_b.js b/docs/search/all_b.js index 38c0c2a3..acaea4fd 100644 --- a/docs/search/all_b.js +++ b/docs/search/all_b.js @@ -1,5 +1,13 @@ var searchData= [ - ['openelement_64',['OpenElement',['../classtinyxml2_1_1_x_m_l_printer.html#a20fb06c83bd13e5140d7dd13af06c010',1,'tinyxml2::XMLPrinter']]], - ['operator_3d_65',['operator=',['../classtinyxml2_1_1_x_m_l_handle.html#a75b908322bb4b83be3281b6845252b20',1,'tinyxml2::XMLHandle']]] + ['name_0',['Name',['../classtinyxml2_1_1_x_m_l_attribute.html#a5a5c135d24cce7abda6f17301c6274d8',1,'tinyxml2::XMLAttribute::Name()'],['../classtinyxml2_1_1_x_m_l_element.html#abd36e34e4428a8eeeffbe87eab0b124d',1,'tinyxml2::XMLElement::Name()']]], + ['newcomment_1',['NewComment',['../classtinyxml2_1_1_x_m_l_document.html#a386df0befd06aadb5e0cd21381aa955a',1,'tinyxml2::XMLDocument']]], + ['newdeclaration_2',['NewDeclaration',['../classtinyxml2_1_1_x_m_l_document.html#ae519030c0262fa2daff8993681990e16',1,'tinyxml2::XMLDocument']]], + ['newelement_3',['NewElement',['../classtinyxml2_1_1_x_m_l_document.html#a3c335a700a43d7c363a393142a23f234',1,'tinyxml2::XMLDocument']]], + ['newtext_4',['NewText',['../classtinyxml2_1_1_x_m_l_document.html#acece5de77a0819f2341b08c1e1ed9987',1,'tinyxml2::XMLDocument']]], + ['newunknown_5',['NewUnknown',['../classtinyxml2_1_1_x_m_l_document.html#a4954f502c5fd7f49de54c3c0c99bb73d',1,'tinyxml2::XMLDocument']]], + ['next_6',['Next',['../classtinyxml2_1_1_x_m_l_attribute.html#aa8c7cf4c94a636ae75046658e551614e',1,'tinyxml2::XMLAttribute']]], + ['nextsibling_7',['NextSibling',['../classtinyxml2_1_1_x_m_l_node.html#af986c568061b020cf6232bec091388c0',1,'tinyxml2::XMLNode::NextSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#aad2eccc7c7c7b18145877c978c3850b5',1,'tinyxml2::XMLHandle::NextSibling()']]], + ['nextsiblingelement_8',['NextSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a14ea560df31110ff07a9f566171bf797',1,'tinyxml2::XMLNode::NextSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#ae41d88ee061f3c49a081630ff753b2c5',1,'tinyxml2::XMLHandle::NextSiblingElement()']]], + ['nochildren_9',['NoChildren',['../classtinyxml2_1_1_x_m_l_node.html#ac3ab489e6e202a3cd1762d3b332e89d4',1,'tinyxml2::XMLNode']]] ]; diff --git a/docs/search/all_c.js b/docs/search/all_c.js index 1ec43192..6f24aaf1 100644 --- a/docs/search/all_c.js +++ b/docs/search/all_c.js @@ -1,15 +1,7 @@ var searchData= [ - ['parent_66',['Parent',['../classtinyxml2_1_1_x_m_l_node.html#ae0f62bc186c56c2e0483ebd52dbfbe34',1,'tinyxml2::XMLNode']]], - ['parse_67',['Parse',['../classtinyxml2_1_1_x_m_l_document.html#af2b616169e6517182f6725f2498e9a01',1,'tinyxml2::XMLDocument']]], - ['parse_20an_20xml_20from_20char_20buffer_68',['Parse an XML from char buffer',['../_example_2.html',1,'']]], - ['previoussibling_69',['PreviousSibling',['../classtinyxml2_1_1_x_m_l_node.html#aac667c513d445f8b783e1e15ef9d3551',1,'tinyxml2::XMLNode::PreviousSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#a428374e756f4db4cbc287fec64eae02c',1,'tinyxml2::XMLHandle::PreviousSibling()']]], - ['previoussiblingelement_70',['PreviousSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a872936cae46fb473eb47fec99129fc70',1,'tinyxml2::XMLNode::PreviousSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a786957e498039554ed334cdc36612a7e',1,'tinyxml2::XMLHandle::PreviousSiblingElement()']]], - ['print_71',['Print',['../classtinyxml2_1_1_x_m_l_document.html#a867cf5fa3e3ff6ae4847a8b7ee8ec083',1,'tinyxml2::XMLDocument']]], - ['printerror_72',['PrintError',['../classtinyxml2_1_1_x_m_l_document.html#a1d033945b42e125d933d6231e4571552',1,'tinyxml2::XMLDocument']]], - ['printspace_73',['PrintSpace',['../classtinyxml2_1_1_x_m_l_printer.html#a01148e2ebe6776e38c5a3e41bc5feb74',1,'tinyxml2::XMLPrinter']]], - ['pushattribute_74',['PushAttribute',['../classtinyxml2_1_1_x_m_l_printer.html#a9a4e2c9348b42e147629d5a99f4af3f0',1,'tinyxml2::XMLPrinter']]], - ['pushcomment_75',['PushComment',['../classtinyxml2_1_1_x_m_l_printer.html#afc8416814219591c2fd5656e0c233140',1,'tinyxml2::XMLPrinter']]], - ['pushheader_76',['PushHeader',['../classtinyxml2_1_1_x_m_l_printer.html#a178c608ce8476043d5d6513819cde903',1,'tinyxml2::XMLPrinter']]], - ['pushtext_77',['PushText',['../classtinyxml2_1_1_x_m_l_printer.html#a1cc16a9362df4332012cb13cff6441b3',1,'tinyxml2::XMLPrinter::PushText(const char *text, bool cdata=false)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3e0d4d78de25d4cf081009e1431cea7e',1,'tinyxml2::XMLPrinter::PushText(int value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a661fb50e7e0a4918d2d259cb0fae647e',1,'tinyxml2::XMLPrinter::PushText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a96b0a0bfe105154a0a6c37d725258f0a',1,'tinyxml2::XMLPrinter::PushText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a60b0a4cf57371ff8679c2c7556ccb708',1,'tinyxml2::XMLPrinter::PushText(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a4390e5fa1ed05189a8686647345ab29f',1,'tinyxml2::XMLPrinter::PushText(bool value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a1dbb1390e829d0673af66b9cd1928bd7',1,'tinyxml2::XMLPrinter::PushText(float value)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa715302dfc09473c77c853cbd5431965',1,'tinyxml2::XMLPrinter::PushText(double value)']]] + ['of_20xml_0',['Get information out of XML',['../_example_3.html',1,'']]], + ['openelement_1',['OpenElement',['../classtinyxml2_1_1_x_m_l_printer.html#a20fb06c83bd13e5140d7dd13af06c010',1,'tinyxml2::XMLPrinter']]], + ['operator_3d_2',['operator=',['../classtinyxml2_1_1_x_m_l_handle.html#aa07c9a53f78d7b2dc1018668641521d8',1,'tinyxml2::XMLHandle']]], + ['out_20of_20xml_3',['Get information out of XML',['../_example_3.html',1,'']]] ]; diff --git a/docs/search/all_d.js b/docs/search/all_d.js index cab2932b..32d019a7 100644 --- a/docs/search/all_d.js +++ b/docs/search/all_d.js @@ -1,26 +1,15 @@ var searchData= [ - ['queryattribute_78',['QueryAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5b7df3bed2b8954eabf227fa204522eb',1,'tinyxml2::XMLElement']]], - ['queryboolattribute_79',['QueryBoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a14c1bb77c39689838be01838d86ca872',1,'tinyxml2::XMLElement']]], - ['querybooltext_80',['QueryBoolText',['../classtinyxml2_1_1_x_m_l_element.html#a3fe5417d59eb8f5c4afe924b7d332736',1,'tinyxml2::XMLElement']]], - ['queryboolvalue_81',['QueryBoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a5f32e038954256f61c21ff20fd13a09c',1,'tinyxml2::XMLAttribute']]], - ['querydoubleattribute_82',['QueryDoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5f0964e2dbd8e2ee7fce9beab689443c',1,'tinyxml2::XMLElement']]], - ['querydoubletext_83',['QueryDoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a684679c99bb036a25652744cec6c4d96',1,'tinyxml2::XMLElement']]], - ['querydoublevalue_84',['QueryDoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a2aa6e55e8ea03af0609cf6690bff79b9',1,'tinyxml2::XMLAttribute']]], - ['queryfloatattribute_85',['QueryFloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#acd5eeddf6002ef90806af794b9d9a5a5',1,'tinyxml2::XMLElement']]], - ['queryfloattext_86',['QueryFloatText',['../classtinyxml2_1_1_x_m_l_element.html#afa332afedd93210daa6d44b88eb11e29',1,'tinyxml2::XMLElement']]], - ['queryfloatvalue_87',['QueryFloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a049dea6449a6259b6cfed44a9427b607',1,'tinyxml2::XMLAttribute']]], - ['queryint64attribute_88',['QueryInt64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a7c0955d80b6f8d196744eacb0f6e90a8',1,'tinyxml2::XMLElement']]], - ['queryint64text_89',['QueryInt64Text',['../classtinyxml2_1_1_x_m_l_element.html#a120c538c8eead169e635dbc70fb226d8',1,'tinyxml2::XMLElement']]], - ['queryint64value_90',['QueryInt64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#a4e25344d6e4159026be34dbddf1dcac2',1,'tinyxml2::XMLAttribute']]], - ['queryintattribute_91',['QueryIntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a8a78bc1187c1c45ad89f2690eab567b1',1,'tinyxml2::XMLElement']]], - ['queryinttext_92',['QueryIntText',['../classtinyxml2_1_1_x_m_l_element.html#a926357996bef633cb736e1a558419632',1,'tinyxml2::XMLElement']]], - ['queryintvalue_93',['QueryIntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a6d5176260db00ea301c01af8457cd993',1,'tinyxml2::XMLAttribute']]], - ['querystringattribute_94',['QueryStringAttribute',['../classtinyxml2_1_1_x_m_l_element.html#adb8ae765f98d0c5037faec48deea78bc',1,'tinyxml2::XMLElement']]], - ['queryunsigned64attribute_95',['QueryUnsigned64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a13dd590b5d3958ce2ed79844aacd9405',1,'tinyxml2::XMLElement']]], - ['queryunsigned64text_96',['QueryUnsigned64Text',['../classtinyxml2_1_1_x_m_l_element.html#ac2239b3bd172ad8f5b78d04d4236144b',1,'tinyxml2::XMLElement']]], - ['queryunsigned64value_97',['QueryUnsigned64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#af793c695e7ee65cf20b8010d38b1d157',1,'tinyxml2::XMLAttribute']]], - ['queryunsignedattribute_98',['QueryUnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a26fc84cbfba6769dafcfbf256c05e22f',1,'tinyxml2::XMLElement']]], - ['queryunsignedtext_99',['QueryUnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a14d38aa4b5e18a46274a27425188a6a1',1,'tinyxml2::XMLElement']]], - ['queryunsignedvalue_100',['QueryUnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a48a7f3496f1415832e451bd8d09c9cb9',1,'tinyxml2::XMLAttribute']]] + ['parent_0',['Parent',['../classtinyxml2_1_1_x_m_l_node.html#a4d76b30d1bf4b166d3e4fa3419d51595',1,'tinyxml2::XMLNode']]], + ['parse_1',['Parse',['../classtinyxml2_1_1_x_m_l_document.html#af2b616169e6517182f6725f2498e9a01',1,'tinyxml2::XMLDocument']]], + ['parse_20an_20xml_20from_20char_20buffer_2',['Parse an XML from char buffer',['../_example_2.html',1,'']]], + ['previoussibling_3',['PreviousSibling',['../classtinyxml2_1_1_x_m_l_node.html#a92ee96b0d8628bc609f1d34e56d69dfa',1,'tinyxml2::XMLNode::PreviousSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#a428374e756f4db4cbc287fec64eae02c',1,'tinyxml2::XMLHandle::PreviousSibling()']]], + ['previoussiblingelement_4',['PreviousSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a9453cda5e970375a7b1b2099f8a7c40a',1,'tinyxml2::XMLNode::PreviousSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a786957e498039554ed334cdc36612a7e',1,'tinyxml2::XMLHandle::PreviousSiblingElement()']]], + ['print_5',['Print',['../classtinyxml2_1_1_x_m_l_document.html#a867cf5fa3e3ff6ae4847a8b7ee8ec083',1,'tinyxml2::XMLDocument']]], + ['printerror_6',['PrintError',['../classtinyxml2_1_1_x_m_l_document.html#a1d033945b42e125d933d6231e4571552',1,'tinyxml2::XMLDocument']]], + ['printspace_7',['PrintSpace',['../classtinyxml2_1_1_x_m_l_printer.html#a01148e2ebe6776e38c5a3e41bc5feb74',1,'tinyxml2::XMLPrinter']]], + ['pushattribute_8',['PushAttribute',['../classtinyxml2_1_1_x_m_l_printer.html#a9a4e2c9348b42e147629d5a99f4af3f0',1,'tinyxml2::XMLPrinter']]], + ['pushcomment_9',['PushComment',['../classtinyxml2_1_1_x_m_l_printer.html#afc8416814219591c2fd5656e0c233140',1,'tinyxml2::XMLPrinter']]], + ['pushheader_10',['PushHeader',['../classtinyxml2_1_1_x_m_l_printer.html#a178c608ce8476043d5d6513819cde903',1,'tinyxml2::XMLPrinter']]], + ['pushtext_11',['PushText',['../classtinyxml2_1_1_x_m_l_printer.html#a1cc16a9362df4332012cb13cff6441b3',1,'tinyxml2::XMLPrinter::PushText(const char *text, bool cdata=false)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3e0d4d78de25d4cf081009e1431cea7e',1,'tinyxml2::XMLPrinter::PushText(int value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a661fb50e7e0a4918d2d259cb0fae647e',1,'tinyxml2::XMLPrinter::PushText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a96b0a0bfe105154a0a6c37d725258f0a',1,'tinyxml2::XMLPrinter::PushText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a60b0a4cf57371ff8679c2c7556ccb708',1,'tinyxml2::XMLPrinter::PushText(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a4390e5fa1ed05189a8686647345ab29f',1,'tinyxml2::XMLPrinter::PushText(bool value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a1dbb1390e829d0673af66b9cd1928bd7',1,'tinyxml2::XMLPrinter::PushText(float value)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa715302dfc09473c77c853cbd5431965',1,'tinyxml2::XMLPrinter::PushText(double value)']]] ]; diff --git a/docs/search/all_e.js b/docs/search/all_e.js index 0ccf8e1a..c090f7a1 100644 --- a/docs/search/all_e.js +++ b/docs/search/all_e.js @@ -1,5 +1,26 @@ var searchData= [ - ['read_20attributes_20and_20text_20information_2e_101',['Read attributes and text information.',['../_example_4.html',1,'']]], - ['rootelement_102',['RootElement',['../classtinyxml2_1_1_x_m_l_document.html#ad2b70320d3c2a071c2f36928edff3e1c',1,'tinyxml2::XMLDocument']]] + ['queryattribute_0',['QueryAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5b7df3bed2b8954eabf227fa204522eb',1,'tinyxml2::XMLElement']]], + ['queryboolattribute_1',['QueryBoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a14c1bb77c39689838be01838d86ca872',1,'tinyxml2::XMLElement']]], + ['querybooltext_2',['QueryBoolText',['../classtinyxml2_1_1_x_m_l_element.html#a3fe5417d59eb8f5c4afe924b7d332736',1,'tinyxml2::XMLElement']]], + ['queryboolvalue_3',['QueryBoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a5f32e038954256f61c21ff20fd13a09c',1,'tinyxml2::XMLAttribute']]], + ['querydoubleattribute_4',['QueryDoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5f0964e2dbd8e2ee7fce9beab689443c',1,'tinyxml2::XMLElement']]], + ['querydoubletext_5',['QueryDoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a684679c99bb036a25652744cec6c4d96',1,'tinyxml2::XMLElement']]], + ['querydoublevalue_6',['QueryDoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a2aa6e55e8ea03af0609cf6690bff79b9',1,'tinyxml2::XMLAttribute']]], + ['queryfloatattribute_7',['QueryFloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#acd5eeddf6002ef90806af794b9d9a5a5',1,'tinyxml2::XMLElement']]], + ['queryfloattext_8',['QueryFloatText',['../classtinyxml2_1_1_x_m_l_element.html#afa332afedd93210daa6d44b88eb11e29',1,'tinyxml2::XMLElement']]], + ['queryfloatvalue_9',['QueryFloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a049dea6449a6259b6cfed44a9427b607',1,'tinyxml2::XMLAttribute']]], + ['queryint64attribute_10',['QueryInt64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a7c0955d80b6f8d196744eacb0f6e90a8',1,'tinyxml2::XMLElement']]], + ['queryint64text_11',['QueryInt64Text',['../classtinyxml2_1_1_x_m_l_element.html#a120c538c8eead169e635dbc70fb226d8',1,'tinyxml2::XMLElement']]], + ['queryint64value_12',['QueryInt64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#a4e25344d6e4159026be34dbddf1dcac2',1,'tinyxml2::XMLAttribute']]], + ['queryintattribute_13',['QueryIntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a8a78bc1187c1c45ad89f2690eab567b1',1,'tinyxml2::XMLElement']]], + ['queryinttext_14',['QueryIntText',['../classtinyxml2_1_1_x_m_l_element.html#a926357996bef633cb736e1a558419632',1,'tinyxml2::XMLElement']]], + ['queryintvalue_15',['QueryIntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a6d5176260db00ea301c01af8457cd993',1,'tinyxml2::XMLAttribute']]], + ['querystringattribute_16',['QueryStringAttribute',['../classtinyxml2_1_1_x_m_l_element.html#adb8ae765f98d0c5037faec48deea78bc',1,'tinyxml2::XMLElement']]], + ['queryunsigned64attribute_17',['QueryUnsigned64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a13dd590b5d3958ce2ed79844aacd9405',1,'tinyxml2::XMLElement']]], + ['queryunsigned64text_18',['QueryUnsigned64Text',['../classtinyxml2_1_1_x_m_l_element.html#ac2239b3bd172ad8f5b78d04d4236144b',1,'tinyxml2::XMLElement']]], + ['queryunsigned64value_19',['QueryUnsigned64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#af793c695e7ee65cf20b8010d38b1d157',1,'tinyxml2::XMLAttribute']]], + ['queryunsignedattribute_20',['QueryUnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a26fc84cbfba6769dafcfbf256c05e22f',1,'tinyxml2::XMLElement']]], + ['queryunsignedtext_21',['QueryUnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a14d38aa4b5e18a46274a27425188a6a1',1,'tinyxml2::XMLElement']]], + ['queryunsignedvalue_22',['QueryUnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a48a7f3496f1415832e451bd8d09c9cb9',1,'tinyxml2::XMLAttribute']]] ]; diff --git a/docs/search/all_f.js b/docs/search/all_f.js index 54bdc74a..404f651c 100644 --- a/docs/search/all_f.js +++ b/docs/search/all_f.js @@ -1,13 +1,5 @@ var searchData= [ - ['savefile_103',['SaveFile',['../classtinyxml2_1_1_x_m_l_document.html#a73ac416b4a2aa0952e841220eb3da18f',1,'tinyxml2::XMLDocument::SaveFile(const char *filename, bool compact=false)'],['../classtinyxml2_1_1_x_m_l_document.html#a8b95779479a0035acc67b3a61dfe1b74',1,'tinyxml2::XMLDocument::SaveFile(FILE *fp, bool compact=false)']]], - ['setattribute_104',['SetAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html#a406d2c4a13c7af99a65edb59dd9f7581',1,'tinyxml2::XMLAttribute::SetAttribute(const char *value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ad86d7d7058d76761c3a80662566a57e5',1,'tinyxml2::XMLAttribute::SetAttribute(int value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae70468c0f6df2748ba3529c716999fae',1,'tinyxml2::XMLAttribute::SetAttribute(unsigned value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a7c1240f479722b9aa29b6c030aa116c2',1,'tinyxml2::XMLAttribute::SetAttribute(int64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a10964060a5c0d92486ecf8705bdf37da',1,'tinyxml2::XMLAttribute::SetAttribute(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ab3516def4fe058fe328f2b89fc2d77da',1,'tinyxml2::XMLAttribute::SetAttribute(bool value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a9a65ab3147abe8ccbbd373ce8791e818',1,'tinyxml2::XMLAttribute::SetAttribute(double value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae95e843313aaf5d56c32530b6456df02',1,'tinyxml2::XMLAttribute::SetAttribute(float value)'],['../classtinyxml2_1_1_x_m_l_element.html#a11943abf2d0831548c3790dd5d9f119c',1,'tinyxml2::XMLElement::SetAttribute(const char *name, const char *value)'],['../classtinyxml2_1_1_x_m_l_element.html#aae6568c64c7f1cc88be8461ba41a79cf',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae143997e90064ba82326b29a9930ea8f',1,'tinyxml2::XMLElement::SetAttribute(const char *name, unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#aaeefdf9171fec91b13a776b42299b0dd',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ad598868c0599ddc4695dab18552c308d',1,'tinyxml2::XMLElement::SetAttribute(const char *name, uint64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#aa848b696e6a75e4e545c6da9893b11e1',1,'tinyxml2::XMLElement::SetAttribute(const char *name, bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a233397ee81e70eb5d4b814c5f8698533',1,'tinyxml2::XMLElement::SetAttribute(const char *name, double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a554b70d882e65b28fc084b23df9b9759',1,'tinyxml2::XMLElement::SetAttribute(const char *name, float value)']]], - ['setbom_105',['SetBOM',['../classtinyxml2_1_1_x_m_l_document.html#a14419b698f7c4b140df4e80f3f0c93b0',1,'tinyxml2::XMLDocument']]], - ['setcdata_106',['SetCData',['../classtinyxml2_1_1_x_m_l_text.html#ad080357d76ab7cc59d7651249949329d',1,'tinyxml2::XMLText']]], - ['setname_107',['SetName',['../classtinyxml2_1_1_x_m_l_element.html#a97712009a530d8cb8a63bf705f02b4f1',1,'tinyxml2::XMLElement']]], - ['settext_108',['SetText',['../classtinyxml2_1_1_x_m_l_element.html#a1f9c2cd61b72af5ae708d37b7ad283ce',1,'tinyxml2::XMLElement::SetText(const char *inText)'],['../classtinyxml2_1_1_x_m_l_element.html#aeae8917b5ea6060b3c08d4e3d8d632d7',1,'tinyxml2::XMLElement::SetText(int value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7bbfcc11d516598bc924a8fba4d08597',1,'tinyxml2::XMLElement::SetText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7b62cd33acdfeff7ea2b1b330d4368e4',1,'tinyxml2::XMLElement::SetText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#a6e615bc745afd1ca8ded56d7aac02657',1,'tinyxml2::XMLElement::SetText(uint64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae4b543d6770de76fb6ab68e541c192a4',1,'tinyxml2::XMLElement::SetText(bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a67bd77ac9aaeff58ff20b4275a65ba4e',1,'tinyxml2::XMLElement::SetText(double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a51d560da5ae3ad6b75e0ab9ffb2ae42a',1,'tinyxml2::XMLElement::SetText(float value)']]], - ['setuserdata_109',['SetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a002978fc889cc011d143185f2377eca2',1,'tinyxml2::XMLNode']]], - ['setvalue_110',['SetValue',['../classtinyxml2_1_1_x_m_l_node.html#a09dd68cf9eae137579f6e50f36487513',1,'tinyxml2::XMLNode']]], - ['shallowclone_111',['ShallowClone',['../classtinyxml2_1_1_x_m_l_node.html#a8402cbd3129d20e9e6024bbcc0531283',1,'tinyxml2::XMLNode::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_text.html#af3a81ed4dd49d5151c477b3f265a3011',1,'tinyxml2::XMLText::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_comment.html#a08991cc63fadf7e95078ac4f9ea1b073',1,'tinyxml2::XMLComment::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a118d47518dd9e522644e42efa259aed7',1,'tinyxml2::XMLDeclaration::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0125f41c89763dea06619b5fd5246b4c',1,'tinyxml2::XMLUnknown::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_element.html#ac035742d68b0c50c3f676374e59fe750',1,'tinyxml2::XMLElement::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_document.html#aa37cc1709d7e1e988bc17dcfb24a69b8',1,'tinyxml2::XMLDocument::ShallowClone()']]], - ['shallowequal_112',['ShallowEqual',['../classtinyxml2_1_1_x_m_l_node.html#a7ce18b751c3ea09eac292dca264f9226',1,'tinyxml2::XMLNode::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_text.html#ae0fff8a24e2de7eb073fd192e9db0331',1,'tinyxml2::XMLText::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_comment.html#a6f7d227b25afa8cc3c763b7cc8833739',1,'tinyxml2::XMLComment::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_declaration.html#aa26b70011694e9b9e9480b929e9b78d6',1,'tinyxml2::XMLDeclaration::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0715ab2c05d7f74845c188122213b116',1,'tinyxml2::XMLUnknown::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ea913a460b48979bd83cf9871c99f6',1,'tinyxml2::XMLElement::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_document.html#a6fe5ef18699091844fcf64b56ffa5bf9',1,'tinyxml2::XMLDocument::ShallowEqual()']]] + ['read_20attributes_20and_20text_20information_0',['Read attributes and text information.',['../_example_4.html',1,'']]], + ['rootelement_1',['RootElement',['../classtinyxml2_1_1_x_m_l_document.html#a0e6855771cbe87d839fb301d3646f5b8',1,'tinyxml2::XMLDocument']]] ]; diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js index a9be1214..a377ed4e 100644 --- a/docs/search/classes_0.js +++ b/docs/search/classes_0.js @@ -1,15 +1,15 @@ var searchData= [ - ['xmlattribute_142',['XMLAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html',1,'tinyxml2']]], - ['xmlcomment_143',['XMLComment',['../classtinyxml2_1_1_x_m_l_comment.html',1,'tinyxml2']]], - ['xmlconsthandle_144',['XMLConstHandle',['../classtinyxml2_1_1_x_m_l_const_handle.html',1,'tinyxml2']]], - ['xmldeclaration_145',['XMLDeclaration',['../classtinyxml2_1_1_x_m_l_declaration.html',1,'tinyxml2']]], - ['xmldocument_146',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html',1,'tinyxml2']]], - ['xmlelement_147',['XMLElement',['../classtinyxml2_1_1_x_m_l_element.html',1,'tinyxml2']]], - ['xmlhandle_148',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html',1,'tinyxml2']]], - ['xmlnode_149',['XMLNode',['../classtinyxml2_1_1_x_m_l_node.html',1,'tinyxml2']]], - ['xmlprinter_150',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html',1,'tinyxml2']]], - ['xmltext_151',['XMLText',['../classtinyxml2_1_1_x_m_l_text.html',1,'tinyxml2']]], - ['xmlunknown_152',['XMLUnknown',['../classtinyxml2_1_1_x_m_l_unknown.html',1,'tinyxml2']]], - ['xmlvisitor_153',['XMLVisitor',['../classtinyxml2_1_1_x_m_l_visitor.html',1,'tinyxml2']]] + ['xmlattribute_0',['XMLAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html',1,'tinyxml2']]], + ['xmlcomment_1',['XMLComment',['../classtinyxml2_1_1_x_m_l_comment.html',1,'tinyxml2']]], + ['xmlconsthandle_2',['XMLConstHandle',['../classtinyxml2_1_1_x_m_l_const_handle.html',1,'tinyxml2']]], + ['xmldeclaration_3',['XMLDeclaration',['../classtinyxml2_1_1_x_m_l_declaration.html',1,'tinyxml2']]], + ['xmldocument_4',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html',1,'tinyxml2']]], + ['xmlelement_5',['XMLElement',['../classtinyxml2_1_1_x_m_l_element.html',1,'tinyxml2']]], + ['xmlhandle_6',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html',1,'tinyxml2']]], + ['xmlnode_7',['XMLNode',['../classtinyxml2_1_1_x_m_l_node.html',1,'tinyxml2']]], + ['xmlprinter_8',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html',1,'tinyxml2']]], + ['xmltext_9',['XMLText',['../classtinyxml2_1_1_x_m_l_text.html',1,'tinyxml2']]], + ['xmlunknown_10',['XMLUnknown',['../classtinyxml2_1_1_x_m_l_unknown.html',1,'tinyxml2']]], + ['xmlvisitor_11',['XMLVisitor',['../classtinyxml2_1_1_x_m_l_visitor.html',1,'tinyxml2']]] ]; diff --git a/docs/search/close.svg b/docs/search/close.svg index a933eea1..337d6cc1 100644 --- a/docs/search/close.svg +++ b/docs/search/close.svg @@ -1,27 +1,14 @@ + - - - - image/svg+xml - - - - - + + + + + + diff --git a/docs/search/mag_d.svg b/docs/search/mag_d.svg new file mode 100644 index 00000000..4122773f --- /dev/null +++ b/docs/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/search/mag_sel.svg b/docs/search/mag_sel.svg index 03626f64..553dba87 100644 --- a/docs/search/mag_sel.svg +++ b/docs/search/mag_sel.svg @@ -1,59 +1,17 @@ - + - - - - image/svg+xml - - - - - + > - + /> + /> diff --git a/docs/search/mag_seld.svg b/docs/search/mag_seld.svg new file mode 100644 index 00000000..c906f84c --- /dev/null +++ b/docs/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js index d992ed08..5da8a554 100644 --- a/docs/search/pages_0.js +++ b/docs/search/pages_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['get_20information_20out_20of_20xml_282',['Get information out of XML',['../_example_3.html',1,'']]] + ['2_0',['TinyXML-2',['../index.html',1,'']]] ]; diff --git a/docs/search/pages_1.js b/docs/search/pages_1.js index 2d10aa6f..f9619a20 100644 --- a/docs/search/pages_1.js +++ b/docs/search/pages_1.js @@ -1,4 +1,7 @@ var searchData= [ - ['load_20an_20xml_20file_283',['Load an XML File',['../_example_1.html',1,'']]] + ['an_20xml_20file_0',['Load an XML File',['../_example_1.html',1,'']]], + ['an_20xml_20from_20char_20buffer_1',['Parse an XML from char buffer',['../_example_2.html',1,'']]], + ['and_20text_20information_2',['Read attributes and text information.',['../_example_4.html',1,'']]], + ['attributes_20and_20text_20information_3',['Read attributes and text information.',['../_example_4.html',1,'']]] ]; diff --git a/docs/search/pages_2.js b/docs/search/pages_2.js index e7cdf36f..d3e9de97 100644 --- a/docs/search/pages_2.js +++ b/docs/search/pages_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['parse_20an_20xml_20from_20char_20buffer_284',['Parse an XML from char buffer',['../_example_2.html',1,'']]] + ['buffer_0',['Parse an XML from char buffer',['../_example_2.html',1,'']]] ]; diff --git a/docs/search/pages_3.js b/docs/search/pages_3.js index 8f6a8fc8..9a095ad2 100644 --- a/docs/search/pages_3.js +++ b/docs/search/pages_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['read_20attributes_20and_20text_20information_2e_285',['Read attributes and text information.',['../_example_4.html',1,'']]] + ['char_20buffer_0',['Parse an XML from char buffer',['../_example_2.html',1,'']]] ]; diff --git a/docs/search/pages_4.js b/docs/search/pages_4.js index e97fabfa..568316d0 100644 --- a/docs/search/pages_4.js +++ b/docs/search/pages_4.js @@ -1,4 +1,5 @@ var searchData= [ - ['tinyxml_2d2_286',['TinyXML-2',['../index.html',1,'']]] + ['file_0',['Load an XML File',['../_example_1.html',1,'']]], + ['from_20char_20buffer_1',['Parse an XML from char buffer',['../_example_2.html',1,'']]] ]; diff --git a/docs/search/pages_5.js b/docs/search/pages_5.js new file mode 100644 index 00000000..098aa655 --- /dev/null +++ b/docs/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['get_20information_20out_20of_20xml_0',['Get information out of XML',['../_example_3.html',1,'']]] +]; diff --git a/docs/search/pages_6.js b/docs/search/pages_6.js new file mode 100644 index 00000000..ad78bd85 --- /dev/null +++ b/docs/search/pages_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['information_0',['Read attributes and text information.',['../_example_4.html',1,'']]], + ['information_20out_20of_20xml_1',['Get information out of XML',['../_example_3.html',1,'']]] +]; diff --git a/docs/search/pages_7.js b/docs/search/pages_7.js new file mode 100644 index 00000000..8bd34d13 --- /dev/null +++ b/docs/search/pages_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['load_20an_20xml_20file_0',['Load an XML File',['../_example_1.html',1,'']]] +]; diff --git a/docs/search/pages_8.js b/docs/search/pages_8.js new file mode 100644 index 00000000..9271697a --- /dev/null +++ b/docs/search/pages_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['of_20xml_0',['Get information out of XML',['../_example_3.html',1,'']]], + ['out_20of_20xml_1',['Get information out of XML',['../_example_3.html',1,'']]] +]; diff --git a/docs/search/pages_9.js b/docs/search/pages_9.js new file mode 100644 index 00000000..e74d27f3 --- /dev/null +++ b/docs/search/pages_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parse_20an_20xml_20from_20char_20buffer_0',['Parse an XML from char buffer',['../_example_2.html',1,'']]] +]; diff --git a/docs/search/pages_a.js b/docs/search/pages_a.js new file mode 100644 index 00000000..a6596782 --- /dev/null +++ b/docs/search/pages_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['read_20attributes_20and_20text_20information_0',['Read attributes and text information.',['../_example_4.html',1,'']]] +]; diff --git a/docs/search/pages_b.js b/docs/search/pages_b.js new file mode 100644 index 00000000..e7e3775d --- /dev/null +++ b/docs/search/pages_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['text_20information_0',['Read attributes and text information.',['../_example_4.html',1,'']]], + ['tinyxml_202_1',['TinyXML-2',['../index.html',1,'']]] +]; diff --git a/docs/search/pages_c.js b/docs/search/pages_c.js new file mode 100644 index 00000000..e0ed4f36 --- /dev/null +++ b/docs/search/pages_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['xml_0',['Get information out of XML',['../_example_3.html',1,'']]], + ['xml_20file_1',['Load an XML File',['../_example_1.html',1,'']]], + ['xml_20from_20char_20buffer_2',['Parse an XML from char buffer',['../_example_2.html',1,'']]] +]; diff --git a/docs/search/search.css b/docs/search/search.css index 9074198f..19f76f9d 100644 --- a/docs/search/search.css +++ b/docs/search/search.css @@ -1,10 +1,33 @@ -/*---------------- Search Box */ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} #MSearchBox { + display: inline-block; white-space : nowrap; - background: white; + background: var(--search-background-color); border-radius: 0.65em; - box-shadow: inset 0.5px 0.5px 3px 0px #555; + box-shadow: var(--search-box-shadow); z-index: 102; } @@ -17,28 +40,47 @@ #MSearchSelect { display: inline-block; vertical-align: middle; - height: 1.4em; - padding: 0 0 0 0.3em; - margin: 0; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; } + #MSearchField { display: inline-block; vertical-align: middle; width: 7.5em; - height: 1.1em; + height: 19px; margin: 0 0.15em; padding: 0; line-height: 1em; border:none; - color: #909090; + color: var(--search-foreground-color); outline: none; - font-family: Arial, Verdana, sans-serif; + font-family: var(--font-family-search); -webkit-border-radius: 0px; border-radius: 0px; background: none; } +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} #MSearchBox .right { display: inline-block; @@ -59,23 +101,15 @@ } #MSearchCloseImg { - height: 1.4em; padding: 0.3em; margin: 0; } .MSearchBoxActive #MSearchField { - color: #000000; + color: var(--search-active-color); } -#main-menu > li:last-child { - /* This
  • object is the parent of the search bar */ - display: flex; - justify-content: center; - align-items: center; - height: 36px; - margin-right: 1em; -} + /*---------------- Search filter selection */ @@ -83,8 +117,8 @@ display: none; position: absolute; left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); z-index: 10001; padding-top: 4px; padding-bottom: 4px; @@ -97,7 +131,7 @@ } .SelectItem { - font: 8pt Arial, Verdana, sans-serif; + font: 8pt var(--font-family-search); padding-left: 2px; padding-right: 12px; border: 0px; @@ -105,7 +139,7 @@ span.SelectionMark { margin-right: 4px; - font-family: monospace; + font-family: var(--font-family-monospace); outline-style: none; text-decoration: none; } @@ -113,7 +147,7 @@ span.SelectionMark { a.SelectItem { display: block; outline-style: none; - color: #000000; + color: var(--search-filter-foreground-color); text-decoration: none; padding-left: 6px; padding-right: 12px; @@ -121,14 +155,14 @@ a.SelectItem { a.SelectItem:focus, a.SelectItem:active { - color: #000000; + color: var(--search-filter-foreground-color); outline-style: none; text-decoration: none; } a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); outline-style: none; text-decoration: none; cursor: pointer; @@ -138,7 +172,7 @@ a.SelectItem:hover { /*---------------- Search results window */ iframe#MSearchResults { - width: 60ex; + /*width: 60ex;*/ height: 15em; } @@ -146,9 +180,12 @@ iframe#MSearchResults { display: none; position: absolute; left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); z-index:10000; + width: 300px; + height: 400px; + overflow: auto; } /* ----------------------------------- */ @@ -156,7 +193,6 @@ iframe#MSearchResults { #SRIndex { clear:both; - padding-bottom: 15px; } .SREntry { @@ -169,8 +205,9 @@ iframe#MSearchResults { padding: 1px 5px; } -body.SRPage { +div.SRPage { margin: 5px 2px; + background-color: var(--search-results-background-color); } .SRChildren { @@ -182,17 +219,18 @@ body.SRPage { } .SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); text-decoration: none; outline: none; } a.SRScope { display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; text-decoration: none; outline: none; } @@ -204,14 +242,14 @@ a.SRScope:focus, a.SRScope:active { span.SRScope { padding-left: 4px; - font-family: Arial, Verdana, sans-serif; + font-family: var(--font-family-search); } .SRPage .SRStatus { padding: 2px 5px; font-size: 8pt; font-style: italic; - font-family: Arial, Verdana, sans-serif; + font-family: var(--font-family-search); } .SRResult { @@ -225,14 +263,10 @@ div.searchresults { /*---------------- External search page results */ -.searchresult { - background-color: #F0F3F8; -} - .pages b { color: white; padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); + background-image: var(--nav-gradient-active-image-parent); background-repeat: repeat-x; text-shadow: 0 1px 1px #000000; } diff --git a/docs/search/search.js b/docs/search/search.js index fb226f73..666af01e 100644 --- a/docs/search/search.js +++ b/docs/search/search.js @@ -22,56 +22,9 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -function convertToId(search) -{ - var result = ''; - for (i=0;i document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); // ------------ Event Handlers // Called when focus is added or removed from the search field. - this.OnSearchFieldFocus = function(isActive) - { + this.OnSearchFieldFocus = function(isActive) { this.Activate(isActive); } - this.OnSearchSelectShow = function() - { - var searchSelectWindow = this.DOMSearchSelectWindow(); - var searchField = this.DOMSearchSelect(); - - if (this.insideFrame) - { - var left = getXPos(searchField); - var top = getYPos(searchField); - left += searchField.offsetWidth + 6; - top += searchField.offsetHeight; - - // show search selection popup - searchSelectWindow.style.display='block'; - left -= searchSelectWindow.offsetWidth; - searchSelectWindow.style.left = left + 'px'; - searchSelectWindow.style.top = top + 'px'; - } - else - { - var left = getXPos(searchField); - var top = getYPos(searchField); - top += searchField.offsetHeight; - - // show search selection popup - searchSelectWindow.style.display='block'; - searchSelectWindow.style.left = left + 'px'; - searchSelectWindow.style.top = top + 'px'; - } + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; // stop selection hide timer - if (this.hideTimeout) - { + if (this.hideTimeout) { clearTimeout(this.hideTimeout); this.hideTimeout=0; } return false; // to avoid "image drag" default event } - this.OnSearchSelectHide = function() - { - this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()", + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), this.closeSelectionTimeout); } // Called when the content of the search field is changed. - this.OnSearchFieldChange = function(evt) - { - if (this.keyTimeout) // kill running timer - { + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer clearTimeout(this.keyTimeout); this.keyTimeout = 0; } - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 || e.keyCode==13) - { - if (e.shiftKey==1) - { + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { this.OnSearchSelectShow(); - var win=this.DOMSearchSelectWindow(); - for (i=0;i do a search - { + const searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + if (searchValue!="" && this.searchActive) { // something was found -> do a search this.Search(); } } - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { + } else if (e.keyCode==38 && this.searchIndex>0) { // Up this.searchIndex--; this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); this.DOMSearchField().focus(); @@ -314,111 +239,108 @@ function SearchBox(name, resultsPath, inFrame, label, extension) // --------- Actions // Closes the results window. - this.CloseResultsWindow = function() - { + this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; this.Activate(false); } - this.CloseSelectionWindow = function() - { + this.CloseSelectionWindow = function() { this.DOMSearchSelectWindow().style.display = 'none'; } // Performs a search. - this.Search = function() - { + this.Search = function() { this.keyTimeout = 0; // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair idxChar = searchValue.substr(0, 2); } - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches' + this.extension; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } } - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline-block'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); } this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; } // -------- Activation Functions // Activates or deactivates the search panel, resetting things to // their default values if necessary. - this.Activate = function(isActive) - { + this.Activate = function(isActive) { if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { + this.searchActive = true; + } else if (!isActive) { // directly remove the panel this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; this.searchActive = false; this.lastSearchValue = '' this.lastResultsPage = ''; + this.DOMSearchField().value = ''; } } } @@ -426,391 +348,347 @@ function SearchBox(name, resultsPath, inFrame, label, extension) // ----------------------------------------------------------------------- // The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') - { - return element; - } +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; } - } - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; } - else - { - element.style.display = 'block'; + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; } } } + } - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; } + } + } - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; + i++; } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; } - return focusItem; + focusItem=null; + index++; } + return focusItem; + } - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; } - return focusItem; + focusItem=null; + index--; } + return focusItem; + } - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; } + return this.lastKey!=0; + } - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; } + n++; } } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; } + return false; + } - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); } - else if (this.lastKey==13) // Enter - { - return true; + if (elem) { + elem.focus(); } - return false; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; } + return false; + } } -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} +function createResults(resultsPath) { -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; e { + const id = elem[0]; + const srResult = document.createElement('div'); srResult.setAttribute('id','SR_'+id); setClassAttr(srResult,'SRResult'); - var srEntry = document.createElement('div'); + const srEntry = document.createElement('div'); setClassAttr(srEntry,'SREntry'); - var srLink = document.createElement('a'); - srLink.setAttribute('id','Item'+e); - setKeyActions(srLink,'return searchResults.Nav(event,'+e+')'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); setClassAttr(srLink,'SRSymbol'); - srLink.innerHTML = searchData[e][1][0]; + srLink.innerHTML = elem[1][0]; srEntry.appendChild(srLink); - if (searchData[e][1].length==2) // single result - { - srLink.setAttribute('href',searchData[e][1][1][0]); - if (searchData[e][1][1][1]) - { + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); } - var srScope = document.createElement('span'); + const srScope = document.createElement('span'); setClassAttr(srScope,'SRScope'); - srScope.innerHTML = searchData[e][1][1][2]; + srScope.innerHTML = elem[1][1][2]; srEntry.appendChild(srScope); - } - else // multiple results - { + } else { // multiple results srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); - var srChildren = document.createElement('div'); + const srChildren = document.createElement('div'); setClassAttr(srChildren,'SRChildren'); - for (var c=0; cli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/docs/tinyxml2_8h_source.html b/docs/tinyxml2_8h_source.html index fa6f77fd..553613e6 100644 --- a/docs/tinyxml2_8h_source.html +++ b/docs/tinyxml2_8h_source.html @@ -1,14 +1,16 @@ - + - - + + TinyXML-2: tinyxml2.h Source File + + @@ -19,10 +21,9 @@
    - - + @@ -30,22 +31,28 @@
    -
    TinyXML-2 -  9.0.0 +
    +
    TinyXML-2 10.0.0
    - + +/* @license-end */ + +
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    tinyxml2.h
    +
    tinyxml2.h
    -
    1 /*
    -
    2 Original code by Lee Thomason (www.grinninglizard.com)
    -
    3 
    -
    4 This software is provided 'as-is', without any express or implied
    -
    5 warranty. In no event will the authors be held liable for any
    -
    6 damages arising from the use of this software.
    -
    7 
    -
    8 Permission is granted to anyone to use this software for any
    -
    9 purpose, including commercial applications, and to alter it and
    -
    10 redistribute it freely, subject to the following restrictions:
    -
    11 
    -
    12 1. The origin of this software must not be misrepresented; you must
    -
    13 not claim that you wrote the original software. If you use this
    -
    14 software in a product, an acknowledgment in the product documentation
    -
    15 would be appreciated but is not required.
    -
    16 
    -
    17 2. Altered source versions must be plainly marked as such, and
    -
    18 must not be misrepresented as being the original software.
    -
    19 
    -
    20 3. This notice may not be removed or altered from any source
    -
    21 distribution.
    -
    22 */
    -
    23 
    -
    24 #ifndef TINYXML2_INCLUDED
    -
    25 #define TINYXML2_INCLUDED
    -
    26 
    -
    27 #if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__)
    -
    28 # include <ctype.h>
    -
    29 # include <limits.h>
    -
    30 # include <stdio.h>
    -
    31 # include <stdlib.h>
    -
    32 # include <string.h>
    -
    33 # if defined(__PS3__)
    -
    34 # include <stddef.h>
    -
    35 # endif
    -
    36 #else
    -
    37 # include <cctype>
    -
    38 # include <climits>
    -
    39 # include <cstdio>
    -
    40 # include <cstdlib>
    -
    41 # include <cstring>
    -
    42 #endif
    -
    43 #include <stdint.h>
    -
    44 
    -
    45 /*
    -
    46  TODO: intern strings instead of allocation.
    -
    47 */
    -
    48 /*
    -
    49  gcc:
    -
    50  g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe
    -
    51 
    -
    52  Formatting, Artistic Style:
    -
    53  AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h
    -
    54 */
    -
    55 
    -
    56 #if defined( _DEBUG ) || defined (__DEBUG__)
    -
    57 # ifndef TINYXML2_DEBUG
    -
    58 # define TINYXML2_DEBUG
    -
    59 # endif
    -
    60 #endif
    -
    61 
    -
    62 #ifdef _MSC_VER
    -
    63 # pragma warning(push)
    -
    64 # pragma warning(disable: 4251)
    -
    65 #endif
    -
    66 
    -
    67 #ifdef _WIN32
    -
    68 # ifdef TINYXML2_EXPORT
    -
    69 # define TINYXML2_LIB __declspec(dllexport)
    -
    70 # elif defined(TINYXML2_IMPORT)
    -
    71 # define TINYXML2_LIB __declspec(dllimport)
    -
    72 # else
    -
    73 # define TINYXML2_LIB
    -
    74 # endif
    -
    75 #elif __GNUC__ >= 4
    -
    76 # define TINYXML2_LIB __attribute__((visibility("default")))
    -
    77 #else
    -
    78 # define TINYXML2_LIB
    -
    79 #endif
    -
    80 
    -
    81 
    -
    82 #if !defined(TIXMLASSERT)
    -
    83 #if defined(TINYXML2_DEBUG)
    -
    84 # if defined(_MSC_VER)
    -
    85 # // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like
    -
    86 # define TIXMLASSERT( x ) if ( !((void)0,(x))) { __debugbreak(); }
    -
    87 # elif defined (ANDROID_NDK)
    -
    88 # include <android/log.h>
    -
    89 # define TIXMLASSERT( x ) if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); }
    -
    90 # else
    -
    91 # include <assert.h>
    -
    92 # define TIXMLASSERT assert
    -
    93 # endif
    -
    94 #else
    -
    95 # define TIXMLASSERT( x ) {}
    -
    96 #endif
    -
    97 #endif
    -
    98 
    -
    99 /* Versioning, past 1.0.14:
    -
    100  http://semver.org/
    -
    101 */
    -
    102 static const int TIXML2_MAJOR_VERSION = 9;
    -
    103 static const int TIXML2_MINOR_VERSION = 0;
    -
    104 static const int TIXML2_PATCH_VERSION = 0;
    -
    105 
    -
    106 #define TINYXML2_MAJOR_VERSION 9
    -
    107 #define TINYXML2_MINOR_VERSION 0
    -
    108 #define TINYXML2_PATCH_VERSION 0
    -
    109 
    -
    110 // A fixed element depth limit is problematic. There needs to be a
    -
    111 // limit to avoid a stack overflow. However, that limit varies per
    -
    112 // system, and the capacity of the stack. On the other hand, it's a trivial
    -
    113 // attack that can result from ill, malicious, or even correctly formed XML,
    -
    114 // so there needs to be a limit in place.
    -
    115 static const int TINYXML2_MAX_ELEMENT_DEPTH = 100;
    -
    116 
    -
    117 namespace tinyxml2
    -
    118 {
    -
    119 class XMLDocument;
    -
    120 class XMLElement;
    -
    121 class XMLAttribute;
    -
    122 class XMLComment;
    -
    123 class XMLText;
    -
    124 class XMLDeclaration;
    -
    125 class XMLUnknown;
    -
    126 class XMLPrinter;
    -
    127 
    -
    128 /*
    -
    129  A class that wraps strings. Normally stores the start and end
    -
    130  pointers into the XML file itself, and will apply normalization
    -
    131  and entity translation if actually read. Can also store (and memory
    -
    132  manage) a traditional char[]
    -
    133 
    -
    134  Isn't clear why TINYXML2_LIB is needed; but seems to fix #719
    -
    135 */
    -
    136 class TINYXML2_LIB StrPair
    -
    137 {
    -
    138 public:
    -
    139  enum Mode {
    -
    140  NEEDS_ENTITY_PROCESSING = 0x01,
    -
    141  NEEDS_NEWLINE_NORMALIZATION = 0x02,
    -
    142  NEEDS_WHITESPACE_COLLAPSING = 0x04,
    -
    143 
    -
    144  TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
    -
    145  TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
    -
    146  ATTRIBUTE_NAME = 0,
    -
    147  ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
    -
    148  ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
    -
    149  COMMENT = NEEDS_NEWLINE_NORMALIZATION
    -
    150  };
    -
    151 
    -
    152  StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {}
    -
    153  ~StrPair();
    -
    154 
    -
    155  void Set( char* start, char* end, int flags ) {
    -
    156  TIXMLASSERT( start );
    -
    157  TIXMLASSERT( end );
    -
    158  Reset();
    -
    159  _start = start;
    -
    160  _end = end;
    -
    161  _flags = flags | NEEDS_FLUSH;
    -
    162  }
    -
    163 
    -
    164  const char* GetStr();
    -
    165 
    -
    166  bool Empty() const {
    -
    167  return _start == _end;
    -
    168  }
    -
    169 
    -
    170  void SetInternedStr( const char* str ) {
    -
    171  Reset();
    -
    172  _start = const_cast<char*>(str);
    -
    173  }
    -
    174 
    -
    175  void SetStr( const char* str, int flags=0 );
    -
    176 
    -
    177  char* ParseText( char* in, const char* endTag, int strFlags, int* curLineNumPtr );
    -
    178  char* ParseName( char* in );
    -
    179 
    -
    180  void TransferTo( StrPair* other );
    -
    181  void Reset();
    -
    182 
    -
    183 private:
    -
    184  void CollapseWhitespace();
    -
    185 
    -
    186  enum {
    -
    187  NEEDS_FLUSH = 0x100,
    -
    188  NEEDS_DELETE = 0x200
    -
    189  };
    -
    190 
    -
    191  int _flags;
    -
    192  char* _start;
    -
    193  char* _end;
    -
    194 
    -
    195  StrPair( const StrPair& other ); // not supported
    -
    196  void operator=( const StrPair& other ); // not supported, use TransferTo()
    -
    197 };
    -
    198 
    -
    199 
    -
    200 /*
    -
    201  A dynamic array of Plain Old Data. Doesn't support constructors, etc.
    -
    202  Has a small initial memory pool, so that low or no usage will not
    -
    203  cause a call to new/delete
    -
    204 */
    -
    205 template <class T, int INITIAL_SIZE>
    -
    206 class DynArray
    -
    207 {
    -
    208 public:
    -
    209  DynArray() :
    -
    210  _mem( _pool ),
    -
    211  _allocated( INITIAL_SIZE ),
    -
    212  _size( 0 )
    -
    213  {
    -
    214  }
    -
    215 
    -
    216  ~DynArray() {
    -
    217  if ( _mem != _pool ) {
    -
    218  delete [] _mem;
    -
    219  }
    -
    220  }
    -
    221 
    -
    222  void Clear() {
    -
    223  _size = 0;
    -
    224  }
    -
    225 
    -
    226  void Push( T t ) {
    -
    227  TIXMLASSERT( _size < INT_MAX );
    -
    228  EnsureCapacity( _size+1 );
    -
    229  _mem[_size] = t;
    -
    230  ++_size;
    -
    231  }
    -
    232 
    -
    233  T* PushArr( int count ) {
    -
    234  TIXMLASSERT( count >= 0 );
    -
    235  TIXMLASSERT( _size <= INT_MAX - count );
    -
    236  EnsureCapacity( _size+count );
    -
    237  T* ret = &_mem[_size];
    -
    238  _size += count;
    -
    239  return ret;
    -
    240  }
    -
    241 
    -
    242  T Pop() {
    -
    243  TIXMLASSERT( _size > 0 );
    -
    244  --_size;
    -
    245  return _mem[_size];
    -
    246  }
    -
    247 
    -
    248  void PopArr( int count ) {
    -
    249  TIXMLASSERT( _size >= count );
    -
    250  _size -= count;
    -
    251  }
    -
    252 
    -
    253  bool Empty() const {
    -
    254  return _size == 0;
    -
    255  }
    -
    256 
    -
    257  T& operator[](int i) {
    -
    258  TIXMLASSERT( i>= 0 && i < _size );
    -
    259  return _mem[i];
    -
    260  }
    -
    261 
    -
    262  const T& operator[](int i) const {
    -
    263  TIXMLASSERT( i>= 0 && i < _size );
    -
    264  return _mem[i];
    -
    265  }
    -
    266 
    -
    267  const T& PeekTop() const {
    -
    268  TIXMLASSERT( _size > 0 );
    -
    269  return _mem[ _size - 1];
    -
    270  }
    -
    271 
    -
    272  int Size() const {
    -
    273  TIXMLASSERT( _size >= 0 );
    -
    274  return _size;
    -
    275  }
    -
    276 
    -
    277  int Capacity() const {
    -
    278  TIXMLASSERT( _allocated >= INITIAL_SIZE );
    -
    279  return _allocated;
    -
    280  }
    -
    281 
    -
    282  void SwapRemove(int i) {
    -
    283  TIXMLASSERT(i >= 0 && i < _size);
    -
    284  TIXMLASSERT(_size > 0);
    -
    285  _mem[i] = _mem[_size - 1];
    -
    286  --_size;
    -
    287  }
    -
    288 
    -
    289  const T* Mem() const {
    -
    290  TIXMLASSERT( _mem );
    -
    291  return _mem;
    -
    292  }
    -
    293 
    -
    294  T* Mem() {
    -
    295  TIXMLASSERT( _mem );
    -
    296  return _mem;
    -
    297  }
    -
    298 
    -
    299 private:
    -
    300  DynArray( const DynArray& ); // not supported
    -
    301  void operator=( const DynArray& ); // not supported
    -
    302 
    -
    303  void EnsureCapacity( int cap ) {
    -
    304  TIXMLASSERT( cap > 0 );
    -
    305  if ( cap > _allocated ) {
    -
    306  TIXMLASSERT( cap <= INT_MAX / 2 );
    -
    307  const int newAllocated = cap * 2;
    -
    308  T* newMem = new T[newAllocated];
    -
    309  TIXMLASSERT( newAllocated >= _size );
    -
    310  memcpy( newMem, _mem, sizeof(T)*_size ); // warning: not using constructors, only works for PODs
    -
    311  if ( _mem != _pool ) {
    -
    312  delete [] _mem;
    -
    313  }
    -
    314  _mem = newMem;
    -
    315  _allocated = newAllocated;
    -
    316  }
    -
    317  }
    -
    318 
    -
    319  T* _mem;
    -
    320  T _pool[INITIAL_SIZE];
    -
    321  int _allocated; // objects allocated
    -
    322  int _size; // number objects in use
    -
    323 };
    -
    324 
    -
    325 
    -
    326 /*
    -
    327  Parent virtual class of a pool for fast allocation
    -
    328  and deallocation of objects.
    -
    329 */
    -
    330 class MemPool
    -
    331 {
    -
    332 public:
    -
    333  MemPool() {}
    -
    334  virtual ~MemPool() {}
    -
    335 
    -
    336  virtual int ItemSize() const = 0;
    -
    337  virtual void* Alloc() = 0;
    -
    338  virtual void Free( void* ) = 0;
    -
    339  virtual void SetTracked() = 0;
    -
    340 };
    -
    341 
    -
    342 
    -
    343 /*
    -
    344  Template child class to create pools of the correct type.
    -
    345 */
    -
    346 template< int ITEM_SIZE >
    -
    347 class MemPoolT : public MemPool
    -
    348 {
    -
    349 public:
    -
    350  MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {}
    -
    351  ~MemPoolT() {
    -
    352  MemPoolT< ITEM_SIZE >::Clear();
    -
    353  }
    -
    354 
    -
    355  void Clear() {
    -
    356  // Delete the blocks.
    -
    357  while( !_blockPtrs.Empty()) {
    -
    358  Block* lastBlock = _blockPtrs.Pop();
    -
    359  delete lastBlock;
    -
    360  }
    -
    361  _root = 0;
    -
    362  _currentAllocs = 0;
    -
    363  _nAllocs = 0;
    -
    364  _maxAllocs = 0;
    -
    365  _nUntracked = 0;
    -
    366  }
    -
    367 
    -
    368  virtual int ItemSize() const {
    -
    369  return ITEM_SIZE;
    -
    370  }
    -
    371  int CurrentAllocs() const {
    -
    372  return _currentAllocs;
    -
    373  }
    -
    374 
    -
    375  virtual void* Alloc() {
    -
    376  if ( !_root ) {
    -
    377  // Need a new block.
    -
    378  Block* block = new Block();
    -
    379  _blockPtrs.Push( block );
    -
    380 
    -
    381  Item* blockItems = block->items;
    -
    382  for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) {
    -
    383  blockItems[i].next = &(blockItems[i + 1]);
    -
    384  }
    -
    385  blockItems[ITEMS_PER_BLOCK - 1].next = 0;
    -
    386  _root = blockItems;
    -
    387  }
    -
    388  Item* const result = _root;
    -
    389  TIXMLASSERT( result != 0 );
    -
    390  _root = _root->next;
    -
    391 
    -
    392  ++_currentAllocs;
    -
    393  if ( _currentAllocs > _maxAllocs ) {
    -
    394  _maxAllocs = _currentAllocs;
    -
    395  }
    -
    396  ++_nAllocs;
    -
    397  ++_nUntracked;
    -
    398  return result;
    -
    399  }
    -
    400 
    -
    401  virtual void Free( void* mem ) {
    -
    402  if ( !mem ) {
    -
    403  return;
    -
    404  }
    -
    405  --_currentAllocs;
    -
    406  Item* item = static_cast<Item*>( mem );
    -
    407 #ifdef TINYXML2_DEBUG
    -
    408  memset( item, 0xfe, sizeof( *item ) );
    -
    409 #endif
    -
    410  item->next = _root;
    -
    411  _root = item;
    -
    412  }
    -
    413  void Trace( const char* name ) {
    -
    414  printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
    -
    415  name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs,
    -
    416  ITEM_SIZE, _nAllocs, _blockPtrs.Size() );
    -
    417  }
    -
    418 
    -
    419  void SetTracked() {
    -
    420  --_nUntracked;
    -
    421  }
    -
    422 
    -
    423  int Untracked() const {
    -
    424  return _nUntracked;
    -
    425  }
    -
    426 
    -
    427  // This number is perf sensitive. 4k seems like a good tradeoff on my machine.
    -
    428  // The test file is large, 170k.
    -
    429  // Release: VS2010 gcc(no opt)
    -
    430  // 1k: 4000
    -
    431  // 2k: 4000
    -
    432  // 4k: 3900 21000
    -
    433  // 16k: 5200
    -
    434  // 32k: 4300
    -
    435  // 64k: 4000 21000
    -
    436  // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK
    -
    437  // in private part if ITEMS_PER_BLOCK is private
    -
    438  enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE };
    -
    439 
    -
    440 private:
    -
    441  MemPoolT( const MemPoolT& ); // not supported
    -
    442  void operator=( const MemPoolT& ); // not supported
    -
    443 
    -
    444  union Item {
    -
    445  Item* next;
    -
    446  char itemData[ITEM_SIZE];
    -
    447  };
    -
    448  struct Block {
    -
    449  Item items[ITEMS_PER_BLOCK];
    -
    450  };
    -
    451  DynArray< Block*, 10 > _blockPtrs;
    -
    452  Item* _root;
    -
    453 
    -
    454  int _currentAllocs;
    -
    455  int _nAllocs;
    -
    456  int _maxAllocs;
    -
    457  int _nUntracked;
    -
    458 };
    -
    459 
    -
    460 
    -
    461 
    -
    481 class TINYXML2_LIB XMLVisitor
    -
    482 {
    -
    483 public:
    -
    484  virtual ~XMLVisitor() {}
    -
    485 
    -
    487  virtual bool VisitEnter( const XMLDocument& /*doc*/ ) {
    -
    488  return true;
    -
    489  }
    -
    491  virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
    -
    492  return true;
    -
    493  }
    -
    494 
    -
    496  virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) {
    -
    497  return true;
    -
    498  }
    -
    500  virtual bool VisitExit( const XMLElement& /*element*/ ) {
    -
    501  return true;
    -
    502  }
    -
    503 
    -
    505  virtual bool Visit( const XMLDeclaration& /*declaration*/ ) {
    -
    506  return true;
    -
    507  }
    -
    509  virtual bool Visit( const XMLText& /*text*/ ) {
    -
    510  return true;
    -
    511  }
    -
    513  virtual bool Visit( const XMLComment& /*comment*/ ) {
    -
    514  return true;
    -
    515  }
    -
    517  virtual bool Visit( const XMLUnknown& /*unknown*/ ) {
    -
    518  return true;
    -
    519  }
    -
    520 };
    -
    521 
    -
    522 // WARNING: must match XMLDocument::_errorNames[]
    -
    523 enum XMLError {
    -
    524  XML_SUCCESS = 0,
    -
    525  XML_NO_ATTRIBUTE,
    -
    526  XML_WRONG_ATTRIBUTE_TYPE,
    -
    527  XML_ERROR_FILE_NOT_FOUND,
    -
    528  XML_ERROR_FILE_COULD_NOT_BE_OPENED,
    -
    529  XML_ERROR_FILE_READ_ERROR,
    -
    530  XML_ERROR_PARSING_ELEMENT,
    -
    531  XML_ERROR_PARSING_ATTRIBUTE,
    -
    532  XML_ERROR_PARSING_TEXT,
    -
    533  XML_ERROR_PARSING_CDATA,
    -
    534  XML_ERROR_PARSING_COMMENT,
    -
    535  XML_ERROR_PARSING_DECLARATION,
    -
    536  XML_ERROR_PARSING_UNKNOWN,
    -
    537  XML_ERROR_EMPTY_DOCUMENT,
    -
    538  XML_ERROR_MISMATCHED_ELEMENT,
    -
    539  XML_ERROR_PARSING,
    -
    540  XML_CAN_NOT_CONVERT_TEXT,
    -
    541  XML_NO_TEXT_NODE,
    -
    542  XML_ELEMENT_DEPTH_EXCEEDED,
    -
    543 
    -
    544  XML_ERROR_COUNT
    -
    545 };
    -
    546 
    -
    547 
    -
    548 /*
    -
    549  Utility functionality.
    -
    550 */
    -
    551 class TINYXML2_LIB XMLUtil
    -
    552 {
    -
    553 public:
    -
    554  static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr ) {
    -
    555  TIXMLASSERT( p );
    -
    556 
    -
    557  while( IsWhiteSpace(*p) ) {
    -
    558  if (curLineNumPtr && *p == '\n') {
    -
    559  ++(*curLineNumPtr);
    -
    560  }
    -
    561  ++p;
    -
    562  }
    -
    563  TIXMLASSERT( p );
    -
    564  return p;
    -
    565  }
    -
    566  static char* SkipWhiteSpace( char* const p, int* curLineNumPtr ) {
    -
    567  return const_cast<char*>( SkipWhiteSpace( const_cast<const char*>(p), curLineNumPtr ) );
    -
    568  }
    -
    569 
    -
    570  // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't
    -
    571  // correct, but simple, and usually works.
    -
    572  static bool IsWhiteSpace( char p ) {
    -
    573  return !IsUTF8Continuation(p) && isspace( static_cast<unsigned char>(p) );
    -
    574  }
    -
    575 
    -
    576  inline static bool IsNameStartChar( unsigned char ch ) {
    -
    577  if ( ch >= 128 ) {
    -
    578  // This is a heuristic guess in attempt to not implement Unicode-aware isalpha()
    -
    579  return true;
    -
    580  }
    -
    581  if ( isalpha( ch ) ) {
    -
    582  return true;
    -
    583  }
    -
    584  return ch == ':' || ch == '_';
    -
    585  }
    -
    586 
    -
    587  inline static bool IsNameChar( unsigned char ch ) {
    -
    588  return IsNameStartChar( ch )
    -
    589  || isdigit( ch )
    -
    590  || ch == '.'
    -
    591  || ch == '-';
    -
    592  }
    -
    593 
    -
    594  inline static bool IsPrefixHex( const char* p) {
    -
    595  p = SkipWhiteSpace(p, 0);
    -
    596  return p && *p == '0' && ( *(p + 1) == 'x' || *(p + 1) == 'X');
    -
    597  }
    -
    598 
    -
    599  inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) {
    -
    600  if ( p == q ) {
    -
    601  return true;
    -
    602  }
    -
    603  TIXMLASSERT( p );
    -
    604  TIXMLASSERT( q );
    -
    605  TIXMLASSERT( nChar >= 0 );
    -
    606  return strncmp( p, q, nChar ) == 0;
    -
    607  }
    -
    608 
    -
    609  inline static bool IsUTF8Continuation( const char p ) {
    -
    610  return ( p & 0x80 ) != 0;
    -
    611  }
    -
    612 
    -
    613  static const char* ReadBOM( const char* p, bool* hasBOM );
    -
    614  // p is the starting location,
    -
    615  // the UTF-8 value of the entity will be placed in value, and length filled in.
    -
    616  static const char* GetCharacterRef( const char* p, char* value, int* length );
    -
    617  static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );
    -
    618 
    -
    619  // converts primitive types to strings
    -
    620  static void ToStr( int v, char* buffer, int bufferSize );
    -
    621  static void ToStr( unsigned v, char* buffer, int bufferSize );
    -
    622  static void ToStr( bool v, char* buffer, int bufferSize );
    -
    623  static void ToStr( float v, char* buffer, int bufferSize );
    -
    624  static void ToStr( double v, char* buffer, int bufferSize );
    -
    625  static void ToStr(int64_t v, char* buffer, int bufferSize);
    -
    626  static void ToStr(uint64_t v, char* buffer, int bufferSize);
    -
    627 
    -
    628  // converts strings to primitive types
    -
    629  static bool ToInt( const char* str, int* value );
    -
    630  static bool ToUnsigned( const char* str, unsigned* value );
    -
    631  static bool ToBool( const char* str, bool* value );
    -
    632  static bool ToFloat( const char* str, float* value );
    -
    633  static bool ToDouble( const char* str, double* value );
    -
    634  static bool ToInt64(const char* str, int64_t* value);
    -
    635  static bool ToUnsigned64(const char* str, uint64_t* value);
    -
    636  // Changes what is serialized for a boolean value.
    -
    637  // Default to "true" and "false". Shouldn't be changed
    -
    638  // unless you have a special testing or compatibility need.
    -
    639  // Be careful: static, global, & not thread safe.
    -
    640  // Be sure to set static const memory as parameters.
    -
    641  static void SetBoolSerialization(const char* writeTrue, const char* writeFalse);
    -
    642 
    -
    643 private:
    -
    644  static const char* writeBoolTrue;
    -
    645  static const char* writeBoolFalse;
    -
    646 };
    -
    647 
    -
    648 
    -
    674 class TINYXML2_LIB XMLNode
    -
    675 {
    -
    676  friend class XMLDocument;
    -
    677  friend class XMLElement;
    -
    678 public:
    -
    679 
    -
    681  const XMLDocument* GetDocument() const {
    -
    682  TIXMLASSERT( _document );
    -
    683  return _document;
    -
    684  }
    - -
    687  TIXMLASSERT( _document );
    -
    688  return _document;
    -
    689  }
    -
    690 
    -
    692  virtual XMLElement* ToElement() {
    -
    693  return 0;
    -
    694  }
    -
    696  virtual XMLText* ToText() {
    -
    697  return 0;
    -
    698  }
    -
    700  virtual XMLComment* ToComment() {
    -
    701  return 0;
    -
    702  }
    -
    704  virtual XMLDocument* ToDocument() {
    -
    705  return 0;
    -
    706  }
    - -
    709  return 0;
    -
    710  }
    -
    712  virtual XMLUnknown* ToUnknown() {
    -
    713  return 0;
    -
    714  }
    -
    715 
    -
    716  virtual const XMLElement* ToElement() const {
    -
    717  return 0;
    -
    718  }
    -
    719  virtual const XMLText* ToText() const {
    -
    720  return 0;
    -
    721  }
    -
    722  virtual const XMLComment* ToComment() const {
    -
    723  return 0;
    -
    724  }
    -
    725  virtual const XMLDocument* ToDocument() const {
    -
    726  return 0;
    -
    727  }
    -
    728  virtual const XMLDeclaration* ToDeclaration() const {
    -
    729  return 0;
    -
    730  }
    -
    731  virtual const XMLUnknown* ToUnknown() const {
    -
    732  return 0;
    -
    733  }
    -
    734 
    -
    744  const char* Value() const;
    -
    745 
    -
    749  void SetValue( const char* val, bool staticMem=false );
    -
    750 
    -
    752  int GetLineNum() const { return _parseLineNum; }
    -
    753 
    -
    755  const XMLNode* Parent() const {
    -
    756  return _parent;
    -
    757  }
    -
    758 
    -
    759  XMLNode* Parent() {
    -
    760  return _parent;
    -
    761  }
    -
    762 
    -
    764  bool NoChildren() const {
    -
    765  return !_firstChild;
    -
    766  }
    -
    767 
    -
    769  const XMLNode* FirstChild() const {
    -
    770  return _firstChild;
    -
    771  }
    -
    772 
    -
    773  XMLNode* FirstChild() {
    -
    774  return _firstChild;
    -
    775  }
    -
    776 
    -
    780  const XMLElement* FirstChildElement( const char* name = 0 ) const;
    -
    781 
    -
    782  XMLElement* FirstChildElement( const char* name = 0 ) {
    -
    783  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->FirstChildElement( name ));
    -
    784  }
    -
    785 
    -
    787  const XMLNode* LastChild() const {
    -
    788  return _lastChild;
    -
    789  }
    -
    790 
    -
    791  XMLNode* LastChild() {
    -
    792  return _lastChild;
    -
    793  }
    -
    794 
    -
    798  const XMLElement* LastChildElement( const char* name = 0 ) const;
    -
    799 
    -
    800  XMLElement* LastChildElement( const char* name = 0 ) {
    -
    801  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->LastChildElement(name) );
    -
    802  }
    -
    803 
    -
    805  const XMLNode* PreviousSibling() const {
    -
    806  return _prev;
    -
    807  }
    -
    808 
    -
    809  XMLNode* PreviousSibling() {
    -
    810  return _prev;
    -
    811  }
    -
    812 
    -
    814  const XMLElement* PreviousSiblingElement( const char* name = 0 ) const ;
    -
    815 
    -
    816  XMLElement* PreviousSiblingElement( const char* name = 0 ) {
    -
    817  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->PreviousSiblingElement( name ) );
    -
    818  }
    -
    819 
    -
    821  const XMLNode* NextSibling() const {
    -
    822  return _next;
    -
    823  }
    -
    824 
    -
    825  XMLNode* NextSibling() {
    -
    826  return _next;
    -
    827  }
    -
    828 
    -
    830  const XMLElement* NextSiblingElement( const char* name = 0 ) const;
    -
    831 
    -
    832  XMLElement* NextSiblingElement( const char* name = 0 ) {
    -
    833  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->NextSiblingElement( name ) );
    -
    834  }
    -
    835 
    - -
    844 
    -
    845  XMLNode* LinkEndChild( XMLNode* addThis ) {
    -
    846  return InsertEndChild( addThis );
    -
    847  }
    - -
    864  XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis );
    -
    865 
    - -
    870 
    -
    874  void DeleteChild( XMLNode* node );
    -
    875 
    -
    885  virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0;
    -
    886 
    -
    900  XMLNode* DeepClone( XMLDocument* target ) const;
    -
    901 
    -
    908  virtual bool ShallowEqual( const XMLNode* compare ) const = 0;
    -
    909 
    -
    932  virtual bool Accept( XMLVisitor* visitor ) const = 0;
    -
    933 
    -
    939  void SetUserData(void* userData) { _userData = userData; }
    -
    940 
    -
    946  void* GetUserData() const { return _userData; }
    -
    947 
    -
    948 protected:
    -
    949  explicit XMLNode( XMLDocument* );
    -
    950  virtual ~XMLNode();
    -
    951 
    -
    952  virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
    -
    953 
    -
    954  XMLDocument* _document;
    -
    955  XMLNode* _parent;
    -
    956  mutable StrPair _value;
    -
    957  int _parseLineNum;
    -
    958 
    -
    959  XMLNode* _firstChild;
    -
    960  XMLNode* _lastChild;
    -
    961 
    -
    962  XMLNode* _prev;
    -
    963  XMLNode* _next;
    -
    964 
    -
    965  void* _userData;
    -
    966 
    -
    967 private:
    -
    968  MemPool* _memPool;
    -
    969  void Unlink( XMLNode* child );
    -
    970  static void DeleteNode( XMLNode* node );
    -
    971  void InsertChildPreamble( XMLNode* insertThis ) const;
    -
    972  const XMLElement* ToElementWithName( const char* name ) const;
    -
    973 
    -
    974  XMLNode( const XMLNode& ); // not supported
    -
    975  XMLNode& operator=( const XMLNode& ); // not supported
    -
    976 };
    -
    977 
    -
    978 
    -
    991 class TINYXML2_LIB XMLText : public XMLNode
    -
    992 {
    -
    993  friend class XMLDocument;
    -
    994 public:
    -
    995  virtual bool Accept( XMLVisitor* visitor ) const;
    -
    996 
    -
    997  virtual XMLText* ToText() {
    -
    998  return this;
    -
    999  }
    -
    1000  virtual const XMLText* ToText() const {
    -
    1001  return this;
    -
    1002  }
    -
    1003 
    -
    1005  void SetCData( bool isCData ) {
    -
    1006  _isCData = isCData;
    -
    1007  }
    -
    1009  bool CData() const {
    -
    1010  return _isCData;
    -
    1011  }
    -
    1012 
    -
    1013  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    -
    1014  virtual bool ShallowEqual( const XMLNode* compare ) const;
    -
    1015 
    -
    1016 protected:
    -
    1017  explicit XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {}
    -
    1018  virtual ~XMLText() {}
    -
    1019 
    -
    1020  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
    -
    1021 
    -
    1022 private:
    -
    1023  bool _isCData;
    -
    1024 
    -
    1025  XMLText( const XMLText& ); // not supported
    -
    1026  XMLText& operator=( const XMLText& ); // not supported
    -
    1027 };
    -
    1028 
    -
    1029 
    -
    1031 class TINYXML2_LIB XMLComment : public XMLNode
    -
    1032 {
    -
    1033  friend class XMLDocument;
    -
    1034 public:
    -
    1035  virtual XMLComment* ToComment() {
    -
    1036  return this;
    -
    1037  }
    -
    1038  virtual const XMLComment* ToComment() const {
    -
    1039  return this;
    -
    1040  }
    -
    1041 
    -
    1042  virtual bool Accept( XMLVisitor* visitor ) const;
    -
    1043 
    -
    1044  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    -
    1045  virtual bool ShallowEqual( const XMLNode* compare ) const;
    -
    1046 
    -
    1047 protected:
    -
    1048  explicit XMLComment( XMLDocument* doc );
    -
    1049  virtual ~XMLComment();
    -
    1050 
    -
    1051  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
    -
    1052 
    -
    1053 private:
    -
    1054  XMLComment( const XMLComment& ); // not supported
    -
    1055  XMLComment& operator=( const XMLComment& ); // not supported
    -
    1056 };
    -
    1057 
    -
    1058 
    -
    1070 class TINYXML2_LIB XMLDeclaration : public XMLNode
    -
    1071 {
    -
    1072  friend class XMLDocument;
    -
    1073 public:
    - -
    1075  return this;
    -
    1076  }
    -
    1077  virtual const XMLDeclaration* ToDeclaration() const {
    -
    1078  return this;
    -
    1079  }
    -
    1080 
    -
    1081  virtual bool Accept( XMLVisitor* visitor ) const;
    -
    1082 
    -
    1083  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    -
    1084  virtual bool ShallowEqual( const XMLNode* compare ) const;
    -
    1085 
    -
    1086 protected:
    -
    1087  explicit XMLDeclaration( XMLDocument* doc );
    -
    1088  virtual ~XMLDeclaration();
    -
    1089 
    -
    1090  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
    -
    1091 
    -
    1092 private:
    -
    1093  XMLDeclaration( const XMLDeclaration& ); // not supported
    -
    1094  XMLDeclaration& operator=( const XMLDeclaration& ); // not supported
    -
    1095 };
    -
    1096 
    -
    1097 
    -
    1105 class TINYXML2_LIB XMLUnknown : public XMLNode
    -
    1106 {
    -
    1107  friend class XMLDocument;
    -
    1108 public:
    -
    1109  virtual XMLUnknown* ToUnknown() {
    -
    1110  return this;
    -
    1111  }
    -
    1112  virtual const XMLUnknown* ToUnknown() const {
    -
    1113  return this;
    -
    1114  }
    -
    1115 
    -
    1116  virtual bool Accept( XMLVisitor* visitor ) const;
    -
    1117 
    -
    1118  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    -
    1119  virtual bool ShallowEqual( const XMLNode* compare ) const;
    -
    1120 
    -
    1121 protected:
    -
    1122  explicit XMLUnknown( XMLDocument* doc );
    -
    1123  virtual ~XMLUnknown();
    -
    1124 
    -
    1125  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
    -
    1126 
    -
    1127 private:
    -
    1128  XMLUnknown( const XMLUnknown& ); // not supported
    -
    1129  XMLUnknown& operator=( const XMLUnknown& ); // not supported
    -
    1130 };
    -
    1131 
    -
    1132 
    -
    1133 
    -
    1140 class TINYXML2_LIB XMLAttribute
    -
    1141 {
    -
    1142  friend class XMLElement;
    -
    1143 public:
    -
    1145  const char* Name() const;
    -
    1146 
    -
    1148  const char* Value() const;
    -
    1149 
    -
    1151  int GetLineNum() const { return _parseLineNum; }
    -
    1152 
    -
    1154  const XMLAttribute* Next() const {
    -
    1155  return _next;
    -
    1156  }
    -
    1157 
    -
    1162  int IntValue() const {
    -
    1163  int i = 0;
    -
    1164  QueryIntValue(&i);
    -
    1165  return i;
    -
    1166  }
    -
    1167 
    -
    1168  int64_t Int64Value() const {
    -
    1169  int64_t i = 0;
    -
    1170  QueryInt64Value(&i);
    -
    1171  return i;
    -
    1172  }
    -
    1173 
    -
    1174  uint64_t Unsigned64Value() const {
    -
    1175  uint64_t i = 0;
    -
    1176  QueryUnsigned64Value(&i);
    -
    1177  return i;
    -
    1178  }
    -
    1179 
    -
    1181  unsigned UnsignedValue() const {
    -
    1182  unsigned i=0;
    -
    1183  QueryUnsignedValue( &i );
    -
    1184  return i;
    -
    1185  }
    -
    1187  bool BoolValue() const {
    -
    1188  bool b=false;
    -
    1189  QueryBoolValue( &b );
    -
    1190  return b;
    -
    1191  }
    -
    1193  double DoubleValue() const {
    -
    1194  double d=0;
    -
    1195  QueryDoubleValue( &d );
    -
    1196  return d;
    -
    1197  }
    -
    1199  float FloatValue() const {
    -
    1200  float f=0;
    -
    1201  QueryFloatValue( &f );
    -
    1202  return f;
    -
    1203  }
    -
    1204 
    -
    1209  XMLError QueryIntValue( int* value ) const;
    -
    1211  XMLError QueryUnsignedValue( unsigned int* value ) const;
    -
    1213  XMLError QueryInt64Value(int64_t* value) const;
    -
    1215  XMLError QueryUnsigned64Value(uint64_t* value) const;
    -
    1217  XMLError QueryBoolValue( bool* value ) const;
    -
    1219  XMLError QueryDoubleValue( double* value ) const;
    -
    1221  XMLError QueryFloatValue( float* value ) const;
    -
    1222 
    -
    1224  void SetAttribute( const char* value );
    -
    1226  void SetAttribute( int value );
    -
    1228  void SetAttribute( unsigned value );
    -
    1230  void SetAttribute(int64_t value);
    -
    1232  void SetAttribute(uint64_t value);
    -
    1234  void SetAttribute( bool value );
    -
    1236  void SetAttribute( double value );
    -
    1238  void SetAttribute( float value );
    -
    1239 
    -
    1240 private:
    -
    1241  enum { BUF_SIZE = 200 };
    -
    1242 
    -
    1243  XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {}
    -
    1244  virtual ~XMLAttribute() {}
    -
    1245 
    -
    1246  XMLAttribute( const XMLAttribute& ); // not supported
    -
    1247  void operator=( const XMLAttribute& ); // not supported
    -
    1248  void SetName( const char* name );
    -
    1249 
    -
    1250  char* ParseDeep( char* p, bool processEntities, int* curLineNumPtr );
    -
    1251 
    -
    1252  mutable StrPair _name;
    -
    1253  mutable StrPair _value;
    -
    1254  int _parseLineNum;
    -
    1255  XMLAttribute* _next;
    -
    1256  MemPool* _memPool;
    -
    1257 };
    -
    1258 
    -
    1259 
    -
    1264 class TINYXML2_LIB XMLElement : public XMLNode
    -
    1265 {
    -
    1266  friend class XMLDocument;
    -
    1267 public:
    -
    1269  const char* Name() const {
    -
    1270  return Value();
    -
    1271  }
    -
    1273  void SetName( const char* str, bool staticMem=false ) {
    -
    1274  SetValue( str, staticMem );
    -
    1275  }
    -
    1276 
    -
    1277  virtual XMLElement* ToElement() {
    -
    1278  return this;
    -
    1279  }
    -
    1280  virtual const XMLElement* ToElement() const {
    -
    1281  return this;
    -
    1282  }
    -
    1283  virtual bool Accept( XMLVisitor* visitor ) const;
    -
    1284 
    -
    1308  const char* Attribute( const char* name, const char* value=0 ) const;
    -
    1309 
    -
    1316  int IntAttribute(const char* name, int defaultValue = 0) const;
    -
    1318  unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const;
    -
    1320  int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const;
    -
    1322  uint64_t Unsigned64Attribute(const char* name, uint64_t defaultValue = 0) const;
    -
    1324  bool BoolAttribute(const char* name, bool defaultValue = false) const;
    -
    1326  double DoubleAttribute(const char* name, double defaultValue = 0) const;
    -
    1328  float FloatAttribute(const char* name, float defaultValue = 0) const;
    -
    1329 
    -
    1343  XMLError QueryIntAttribute( const char* name, int* value ) const {
    -
    1344  const XMLAttribute* a = FindAttribute( name );
    -
    1345  if ( !a ) {
    -
    1346  return XML_NO_ATTRIBUTE;
    -
    1347  }
    -
    1348  return a->QueryIntValue( value );
    -
    1349  }
    -
    1350 
    -
    1352  XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const {
    -
    1353  const XMLAttribute* a = FindAttribute( name );
    -
    1354  if ( !a ) {
    -
    1355  return XML_NO_ATTRIBUTE;
    -
    1356  }
    -
    1357  return a->QueryUnsignedValue( value );
    -
    1358  }
    -
    1359 
    -
    1361  XMLError QueryInt64Attribute(const char* name, int64_t* value) const {
    -
    1362  const XMLAttribute* a = FindAttribute(name);
    -
    1363  if (!a) {
    -
    1364  return XML_NO_ATTRIBUTE;
    -
    1365  }
    -
    1366  return a->QueryInt64Value(value);
    -
    1367  }
    -
    1368 
    -
    1370  XMLError QueryUnsigned64Attribute(const char* name, uint64_t* value) const {
    -
    1371  const XMLAttribute* a = FindAttribute(name);
    -
    1372  if(!a) {
    -
    1373  return XML_NO_ATTRIBUTE;
    -
    1374  }
    -
    1375  return a->QueryUnsigned64Value(value);
    -
    1376  }
    -
    1377 
    -
    1379  XMLError QueryBoolAttribute( const char* name, bool* value ) const {
    -
    1380  const XMLAttribute* a = FindAttribute( name );
    -
    1381  if ( !a ) {
    -
    1382  return XML_NO_ATTRIBUTE;
    -
    1383  }
    -
    1384  return a->QueryBoolValue( value );
    -
    1385  }
    -
    1387  XMLError QueryDoubleAttribute( const char* name, double* value ) const {
    -
    1388  const XMLAttribute* a = FindAttribute( name );
    -
    1389  if ( !a ) {
    -
    1390  return XML_NO_ATTRIBUTE;
    -
    1391  }
    -
    1392  return a->QueryDoubleValue( value );
    -
    1393  }
    -
    1395  XMLError QueryFloatAttribute( const char* name, float* value ) const {
    -
    1396  const XMLAttribute* a = FindAttribute( name );
    -
    1397  if ( !a ) {
    -
    1398  return XML_NO_ATTRIBUTE;
    -
    1399  }
    -
    1400  return a->QueryFloatValue( value );
    -
    1401  }
    -
    1402 
    -
    1404  XMLError QueryStringAttribute(const char* name, const char** value) const {
    -
    1405  const XMLAttribute* a = FindAttribute(name);
    -
    1406  if (!a) {
    -
    1407  return XML_NO_ATTRIBUTE;
    -
    1408  }
    -
    1409  *value = a->Value();
    -
    1410  return XML_SUCCESS;
    -
    1411  }
    -
    1412 
    -
    1413 
    -
    1414 
    -
    1432  XMLError QueryAttribute( const char* name, int* value ) const {
    -
    1433  return QueryIntAttribute( name, value );
    -
    1434  }
    -
    1435 
    -
    1436  XMLError QueryAttribute( const char* name, unsigned int* value ) const {
    -
    1437  return QueryUnsignedAttribute( name, value );
    -
    1438  }
    -
    1439 
    -
    1440  XMLError QueryAttribute(const char* name, int64_t* value) const {
    -
    1441  return QueryInt64Attribute(name, value);
    -
    1442  }
    -
    1443 
    -
    1444  XMLError QueryAttribute(const char* name, uint64_t* value) const {
    -
    1445  return QueryUnsigned64Attribute(name, value);
    -
    1446  }
    -
    1447 
    -
    1448  XMLError QueryAttribute( const char* name, bool* value ) const {
    -
    1449  return QueryBoolAttribute( name, value );
    -
    1450  }
    -
    1451 
    -
    1452  XMLError QueryAttribute( const char* name, double* value ) const {
    -
    1453  return QueryDoubleAttribute( name, value );
    -
    1454  }
    -
    1455 
    -
    1456  XMLError QueryAttribute( const char* name, float* value ) const {
    -
    1457  return QueryFloatAttribute( name, value );
    -
    1458  }
    -
    1459 
    -
    1460  XMLError QueryAttribute(const char* name, const char** value) const {
    -
    1461  return QueryStringAttribute(name, value);
    -
    1462  }
    -
    1463 
    -
    1465  void SetAttribute( const char* name, const char* value ) {
    -
    1466  XMLAttribute* a = FindOrCreateAttribute( name );
    -
    1467  a->SetAttribute( value );
    -
    1468  }
    -
    1470  void SetAttribute( const char* name, int value ) {
    -
    1471  XMLAttribute* a = FindOrCreateAttribute( name );
    -
    1472  a->SetAttribute( value );
    -
    1473  }
    -
    1475  void SetAttribute( const char* name, unsigned value ) {
    -
    1476  XMLAttribute* a = FindOrCreateAttribute( name );
    -
    1477  a->SetAttribute( value );
    -
    1478  }
    -
    1479 
    -
    1481  void SetAttribute(const char* name, int64_t value) {
    -
    1482  XMLAttribute* a = FindOrCreateAttribute(name);
    -
    1483  a->SetAttribute(value);
    -
    1484  }
    -
    1485 
    -
    1487  void SetAttribute(const char* name, uint64_t value) {
    -
    1488  XMLAttribute* a = FindOrCreateAttribute(name);
    -
    1489  a->SetAttribute(value);
    -
    1490  }
    -
    1491 
    -
    1493  void SetAttribute( const char* name, bool value ) {
    -
    1494  XMLAttribute* a = FindOrCreateAttribute( name );
    -
    1495  a->SetAttribute( value );
    -
    1496  }
    -
    1498  void SetAttribute( const char* name, double value ) {
    -
    1499  XMLAttribute* a = FindOrCreateAttribute( name );
    -
    1500  a->SetAttribute( value );
    -
    1501  }
    -
    1503  void SetAttribute( const char* name, float value ) {
    -
    1504  XMLAttribute* a = FindOrCreateAttribute( name );
    -
    1505  a->SetAttribute( value );
    -
    1506  }
    -
    1507 
    -
    1511  void DeleteAttribute( const char* name );
    -
    1512 
    -
    1514  const XMLAttribute* FirstAttribute() const {
    -
    1515  return _rootAttribute;
    -
    1516  }
    -
    1518  const XMLAttribute* FindAttribute( const char* name ) const;
    -
    1519 
    -
    1548  const char* GetText() const;
    -
    1549 
    -
    1584  void SetText( const char* inText );
    -
    1586  void SetText( int value );
    -
    1588  void SetText( unsigned value );
    -
    1590  void SetText(int64_t value);
    -
    1592  void SetText(uint64_t value);
    -
    1594  void SetText( bool value );
    -
    1596  void SetText( double value );
    -
    1598  void SetText( float value );
    -
    1599 
    -
    1626  XMLError QueryIntText( int* ival ) const;
    -
    1628  XMLError QueryUnsignedText( unsigned* uval ) const;
    -
    1630  XMLError QueryInt64Text(int64_t* uval) const;
    -
    1632  XMLError QueryUnsigned64Text(uint64_t* uval) const;
    -
    1634  XMLError QueryBoolText( bool* bval ) const;
    -
    1636  XMLError QueryDoubleText( double* dval ) const;
    -
    1638  XMLError QueryFloatText( float* fval ) const;
    -
    1639 
    -
    1640  int IntText(int defaultValue = 0) const;
    -
    1641 
    -
    1643  unsigned UnsignedText(unsigned defaultValue = 0) const;
    -
    1645  int64_t Int64Text(int64_t defaultValue = 0) const;
    -
    1647  uint64_t Unsigned64Text(uint64_t defaultValue = 0) const;
    -
    1649  bool BoolText(bool defaultValue = false) const;
    -
    1651  double DoubleText(double defaultValue = 0) const;
    -
    1653  float FloatText(float defaultValue = 0) const;
    -
    1654 
    -
    1659  XMLElement* InsertNewChildElement(const char* name);
    -
    1661  XMLComment* InsertNewComment(const char* comment);
    -
    1663  XMLText* InsertNewText(const char* text);
    - -
    1667  XMLUnknown* InsertNewUnknown(const char* text);
    -
    1668 
    -
    1669 
    -
    1670  // internal:
    -
    1671  enum ElementClosingType {
    -
    1672  OPEN, // <foo>
    -
    1673  CLOSED, // <foo/>
    -
    1674  CLOSING // </foo>
    -
    1675  };
    -
    1676  ElementClosingType ClosingType() const {
    -
    1677  return _closingType;
    -
    1678  }
    -
    1679  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
    -
    1680  virtual bool ShallowEqual( const XMLNode* compare ) const;
    -
    1681 
    -
    1682 protected:
    -
    1683  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
    -
    1684 
    -
    1685 private:
    -
    1686  XMLElement( XMLDocument* doc );
    -
    1687  virtual ~XMLElement();
    -
    1688  XMLElement( const XMLElement& ); // not supported
    -
    1689  void operator=( const XMLElement& ); // not supported
    -
    1690 
    -
    1691  XMLAttribute* FindOrCreateAttribute( const char* name );
    -
    1692  char* ParseAttributes( char* p, int* curLineNumPtr );
    -
    1693  static void DeleteAttribute( XMLAttribute* attribute );
    -
    1694  XMLAttribute* CreateAttribute();
    -
    1695 
    -
    1696  enum { BUF_SIZE = 200 };
    -
    1697  ElementClosingType _closingType;
    -
    1698  // The attribute list is ordered; there is no 'lastAttribute'
    -
    1699  // because the list needs to be scanned for dupes before adding
    -
    1700  // a new attribute.
    -
    1701  XMLAttribute* _rootAttribute;
    -
    1702 };
    -
    1703 
    -
    1704 
    -
    1705 enum Whitespace {
    -
    1706  PRESERVE_WHITESPACE,
    -
    1707  COLLAPSE_WHITESPACE
    -
    1708 };
    -
    1709 
    -
    1710 
    -
    1716 class TINYXML2_LIB XMLDocument : public XMLNode
    -
    1717 {
    -
    1718  friend class XMLElement;
    -
    1719  // Gives access to SetError and Push/PopDepth, but over-access for everything else.
    -
    1720  // Wishing C++ had "internal" scope.
    -
    1721  friend class XMLNode;
    -
    1722  friend class XMLText;
    -
    1723  friend class XMLComment;
    -
    1724  friend class XMLDeclaration;
    -
    1725  friend class XMLUnknown;
    -
    1726 public:
    -
    1728  XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE );
    -
    1729  ~XMLDocument();
    -
    1730 
    - -
    1732  TIXMLASSERT( this == _document );
    -
    1733  return this;
    -
    1734  }
    -
    1735  virtual const XMLDocument* ToDocument() const {
    -
    1736  TIXMLASSERT( this == _document );
    -
    1737  return this;
    -
    1738  }
    -
    1739 
    -
    1750  XMLError Parse( const char* xml, size_t nBytes=static_cast<size_t>(-1) );
    -
    1751 
    -
    1757  XMLError LoadFile( const char* filename );
    -
    1758 
    -
    1770  XMLError LoadFile( FILE* );
    -
    1771 
    -
    1777  XMLError SaveFile( const char* filename, bool compact = false );
    -
    1778 
    -
    1786  XMLError SaveFile( FILE* fp, bool compact = false );
    -
    1787 
    -
    1788  bool ProcessEntities() const {
    -
    1789  return _processEntities;
    -
    1790  }
    -
    1791  Whitespace WhitespaceMode() const {
    -
    1792  return _whitespaceMode;
    -
    1793  }
    -
    1794 
    -
    1798  bool HasBOM() const {
    -
    1799  return _writeBOM;
    -
    1800  }
    -
    1803  void SetBOM( bool useBOM ) {
    -
    1804  _writeBOM = useBOM;
    -
    1805  }
    -
    1806 
    - -
    1811  return FirstChildElement();
    -
    1812  }
    -
    1813  const XMLElement* RootElement() const {
    -
    1814  return FirstChildElement();
    -
    1815  }
    -
    1816 
    -
    1831  void Print( XMLPrinter* streamer=0 ) const;
    -
    1832  virtual bool Accept( XMLVisitor* visitor ) const;
    -
    1833 
    -
    1839  XMLElement* NewElement( const char* name );
    -
    1845  XMLComment* NewComment( const char* comment );
    -
    1851  XMLText* NewText( const char* text );
    -
    1863  XMLDeclaration* NewDeclaration( const char* text=0 );
    -
    1869  XMLUnknown* NewUnknown( const char* text );
    -
    1870 
    -
    1875  void DeleteNode( XMLNode* node );
    -
    1876 
    -
    1878  void ClearError();
    -
    1879 
    -
    1881  bool Error() const {
    -
    1882  return _errorID != XML_SUCCESS;
    -
    1883  }
    -
    1885  XMLError ErrorID() const {
    -
    1886  return _errorID;
    -
    1887  }
    -
    1888  const char* ErrorName() const;
    -
    1889  static const char* ErrorIDToName(XMLError errorID);
    -
    1890 
    -
    1894  const char* ErrorStr() const;
    -
    1895 
    -
    1897  void PrintError() const;
    -
    1898 
    -
    1900  int ErrorLineNum() const
    -
    1901  {
    -
    1902  return _errorLineNum;
    -
    1903  }
    -
    1904 
    -
    1906  void Clear();
    -
    1907 
    -
    1915  void DeepCopy(XMLDocument* target) const;
    -
    1916 
    -
    1917  // internal
    -
    1918  char* Identify( char* p, XMLNode** node );
    -
    1919 
    -
    1920  // internal
    -
    1921  void MarkInUse(const XMLNode* const);
    -
    1922 
    -
    1923  virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const {
    -
    1924  return 0;
    -
    1925  }
    -
    1926  virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const {
    -
    1927  return false;
    -
    1928  }
    -
    1929 
    -
    1930 private:
    -
    1931  XMLDocument( const XMLDocument& ); // not supported
    -
    1932  void operator=( const XMLDocument& ); // not supported
    -
    1933 
    -
    1934  bool _writeBOM;
    -
    1935  bool _processEntities;
    -
    1936  XMLError _errorID;
    -
    1937  Whitespace _whitespaceMode;
    -
    1938  mutable StrPair _errorStr;
    -
    1939  int _errorLineNum;
    -
    1940  char* _charBuffer;
    -
    1941  int _parseCurLineNum;
    -
    1942  int _parsingDepth;
    -
    1943  // Memory tracking does add some overhead.
    -
    1944  // However, the code assumes that you don't
    -
    1945  // have a bunch of unlinked nodes around.
    -
    1946  // Therefore it takes less memory to track
    -
    1947  // in the document vs. a linked list in the XMLNode,
    -
    1948  // and the performance is the same.
    -
    1949  DynArray<XMLNode*, 10> _unlinked;
    -
    1950 
    -
    1951  MemPoolT< sizeof(XMLElement) > _elementPool;
    -
    1952  MemPoolT< sizeof(XMLAttribute) > _attributePool;
    -
    1953  MemPoolT< sizeof(XMLText) > _textPool;
    -
    1954  MemPoolT< sizeof(XMLComment) > _commentPool;
    -
    1955 
    -
    1956  static const char* _errorNames[XML_ERROR_COUNT];
    -
    1957 
    -
    1958  void Parse();
    -
    1959 
    -
    1960  void SetError( XMLError error, int lineNum, const char* format, ... );
    -
    1961 
    -
    1962  // Something of an obvious security hole, once it was discovered.
    -
    1963  // Either an ill-formed XML or an excessively deep one can overflow
    -
    1964  // the stack. Track stack depth, and error out if needed.
    -
    1965  class DepthTracker {
    -
    1966  public:
    -
    1967  explicit DepthTracker(XMLDocument * document) {
    -
    1968  this->_document = document;
    -
    1969  document->PushDepth();
    -
    1970  }
    -
    1971  ~DepthTracker() {
    -
    1972  _document->PopDepth();
    -
    1973  }
    -
    1974  private:
    -
    1975  XMLDocument * _document;
    -
    1976  };
    -
    1977  void PushDepth();
    -
    1978  void PopDepth();
    -
    1979 
    -
    1980  template<class NodeType, int PoolElementSize>
    -
    1981  NodeType* CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool );
    -
    1982 };
    -
    1983 
    -
    1984 template<class NodeType, int PoolElementSize>
    -
    1985 inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool )
    -
    1986 {
    -
    1987  TIXMLASSERT( sizeof( NodeType ) == PoolElementSize );
    -
    1988  TIXMLASSERT( sizeof( NodeType ) == pool.ItemSize() );
    -
    1989  NodeType* returnNode = new (pool.Alloc()) NodeType( this );
    -
    1990  TIXMLASSERT( returnNode );
    -
    1991  returnNode->_memPool = &pool;
    -
    1992 
    -
    1993  _unlinked.Push(returnNode);
    -
    1994  return returnNode;
    -
    1995 }
    -
    1996 
    -
    2052 class TINYXML2_LIB XMLHandle
    -
    2053 {
    -
    2054 public:
    -
    2056  explicit XMLHandle( XMLNode* node ) : _node( node ) {
    -
    2057  }
    -
    2059  explicit XMLHandle( XMLNode& node ) : _node( &node ) {
    -
    2060  }
    -
    2062  XMLHandle( const XMLHandle& ref ) : _node( ref._node ) {
    -
    2063  }
    -
    2065  XMLHandle& operator=( const XMLHandle& ref ) {
    -
    2066  _node = ref._node;
    -
    2067  return *this;
    -
    2068  }
    -
    2069 
    - -
    2072  return XMLHandle( _node ? _node->FirstChild() : 0 );
    -
    2073  }
    -
    2075  XMLHandle FirstChildElement( const char* name = 0 ) {
    -
    2076  return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 );
    -
    2077  }
    - -
    2080  return XMLHandle( _node ? _node->LastChild() : 0 );
    -
    2081  }
    -
    2083  XMLHandle LastChildElement( const char* name = 0 ) {
    -
    2084  return XMLHandle( _node ? _node->LastChildElement( name ) : 0 );
    -
    2085  }
    - -
    2088  return XMLHandle( _node ? _node->PreviousSibling() : 0 );
    -
    2089  }
    -
    2091  XMLHandle PreviousSiblingElement( const char* name = 0 ) {
    -
    2092  return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
    -
    2093  }
    - -
    2096  return XMLHandle( _node ? _node->NextSibling() : 0 );
    -
    2097  }
    -
    2099  XMLHandle NextSiblingElement( const char* name = 0 ) {
    -
    2100  return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 );
    -
    2101  }
    -
    2102 
    - -
    2105  return _node;
    -
    2106  }
    - -
    2109  return ( _node ? _node->ToElement() : 0 );
    -
    2110  }
    - -
    2113  return ( _node ? _node->ToText() : 0 );
    -
    2114  }
    - -
    2117  return ( _node ? _node->ToUnknown() : 0 );
    -
    2118  }
    - -
    2121  return ( _node ? _node->ToDeclaration() : 0 );
    -
    2122  }
    -
    2123 
    -
    2124 private:
    -
    2125  XMLNode* _node;
    -
    2126 };
    -
    2127 
    -
    2128 
    -
    2133 class TINYXML2_LIB XMLConstHandle
    -
    2134 {
    -
    2135 public:
    -
    2136  explicit XMLConstHandle( const XMLNode* node ) : _node( node ) {
    -
    2137  }
    -
    2138  explicit XMLConstHandle( const XMLNode& node ) : _node( &node ) {
    -
    2139  }
    -
    2140  XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) {
    -
    2141  }
    -
    2142 
    -
    2143  XMLConstHandle& operator=( const XMLConstHandle& ref ) {
    -
    2144  _node = ref._node;
    -
    2145  return *this;
    -
    2146  }
    -
    2147 
    -
    2148  const XMLConstHandle FirstChild() const {
    -
    2149  return XMLConstHandle( _node ? _node->FirstChild() : 0 );
    -
    2150  }
    -
    2151  const XMLConstHandle FirstChildElement( const char* name = 0 ) const {
    -
    2152  return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 );
    -
    2153  }
    -
    2154  const XMLConstHandle LastChild() const {
    -
    2155  return XMLConstHandle( _node ? _node->LastChild() : 0 );
    -
    2156  }
    -
    2157  const XMLConstHandle LastChildElement( const char* name = 0 ) const {
    -
    2158  return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 );
    -
    2159  }
    -
    2160  const XMLConstHandle PreviousSibling() const {
    -
    2161  return XMLConstHandle( _node ? _node->PreviousSibling() : 0 );
    -
    2162  }
    -
    2163  const XMLConstHandle PreviousSiblingElement( const char* name = 0 ) const {
    -
    2164  return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
    -
    2165  }
    -
    2166  const XMLConstHandle NextSibling() const {
    -
    2167  return XMLConstHandle( _node ? _node->NextSibling() : 0 );
    -
    2168  }
    -
    2169  const XMLConstHandle NextSiblingElement( const char* name = 0 ) const {
    -
    2170  return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 );
    -
    2171  }
    -
    2172 
    -
    2173 
    -
    2174  const XMLNode* ToNode() const {
    -
    2175  return _node;
    -
    2176  }
    -
    2177  const XMLElement* ToElement() const {
    -
    2178  return ( _node ? _node->ToElement() : 0 );
    -
    2179  }
    -
    2180  const XMLText* ToText() const {
    -
    2181  return ( _node ? _node->ToText() : 0 );
    -
    2182  }
    -
    2183  const XMLUnknown* ToUnknown() const {
    -
    2184  return ( _node ? _node->ToUnknown() : 0 );
    -
    2185  }
    -
    2186  const XMLDeclaration* ToDeclaration() const {
    -
    2187  return ( _node ? _node->ToDeclaration() : 0 );
    -
    2188  }
    -
    2189 
    -
    2190 private:
    -
    2191  const XMLNode* _node;
    -
    2192 };
    -
    2193 
    -
    2194 
    -
    2237 class TINYXML2_LIB XMLPrinter : public XMLVisitor
    -
    2238 {
    -
    2239 public:
    -
    2246  XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 );
    -
    2247  virtual ~XMLPrinter() {}
    -
    2248 
    -
    2250  void PushHeader( bool writeBOM, bool writeDeclaration );
    -
    2254  void OpenElement( const char* name, bool compactMode=false );
    -
    2256  void PushAttribute( const char* name, const char* value );
    -
    2257  void PushAttribute( const char* name, int value );
    -
    2258  void PushAttribute( const char* name, unsigned value );
    -
    2259  void PushAttribute( const char* name, int64_t value );
    -
    2260  void PushAttribute( const char* name, uint64_t value );
    -
    2261  void PushAttribute( const char* name, bool value );
    -
    2262  void PushAttribute( const char* name, double value );
    -
    2264  virtual void CloseElement( bool compactMode=false );
    -
    2265 
    -
    2267  void PushText( const char* text, bool cdata=false );
    -
    2269  void PushText( int value );
    -
    2271  void PushText( unsigned value );
    -
    2273  void PushText( int64_t value );
    -
    2275  void PushText( uint64_t value );
    -
    2277  void PushText( bool value );
    -
    2279  void PushText( float value );
    -
    2281  void PushText( double value );
    -
    2282 
    -
    2284  void PushComment( const char* comment );
    -
    2285 
    -
    2286  void PushDeclaration( const char* value );
    -
    2287  void PushUnknown( const char* value );
    -
    2288 
    -
    2289  virtual bool VisitEnter( const XMLDocument& /*doc*/ );
    -
    2290  virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
    -
    2291  return true;
    -
    2292  }
    -
    2293 
    -
    2294  virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute );
    -
    2295  virtual bool VisitExit( const XMLElement& element );
    -
    2296 
    -
    2297  virtual bool Visit( const XMLText& text );
    -
    2298  virtual bool Visit( const XMLComment& comment );
    -
    2299  virtual bool Visit( const XMLDeclaration& declaration );
    -
    2300  virtual bool Visit( const XMLUnknown& unknown );
    -
    2301 
    -
    2306  const char* CStr() const {
    -
    2307  return _buffer.Mem();
    -
    2308  }
    -
    2314  int CStrSize() const {
    -
    2315  return _buffer.Size();
    -
    2316  }
    -
    2321  void ClearBuffer( bool resetToFirstElement = true ) {
    -
    2322  _buffer.Clear();
    -
    2323  _buffer.Push(0);
    -
    2324  _firstElement = resetToFirstElement;
    -
    2325  }
    -
    2326 
    -
    2327 protected:
    -
    2328  virtual bool CompactMode( const XMLElement& ) { return _compactMode; }
    -
    2329 
    -
    2333  virtual void PrintSpace( int depth );
    -
    2334  virtual void Print( const char* format, ... );
    -
    2335  virtual void Write( const char* data, size_t size );
    -
    2336  virtual void Putc( char ch );
    -
    2337 
    -
    2338  inline void Write(const char* data) { Write(data, strlen(data)); }
    -
    2339 
    -
    2340  void SealElementIfJustOpened();
    -
    2341  bool _elementJustOpened;
    -
    2342  DynArray< const char*, 10 > _stack;
    -
    2343 
    -
    2344 private:
    -
    2349  void PrepareForNewNode( bool compactMode );
    -
    2350  void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities.
    -
    2351 
    -
    2352  bool _firstElement;
    -
    2353  FILE* _fp;
    -
    2354  int _depth;
    -
    2355  int _textDepth;
    -
    2356  bool _processEntities;
    -
    2357  bool _compactMode;
    -
    2358 
    -
    2359  enum {
    -
    2360  ENTITY_RANGE = 64,
    -
    2361  BUF_SIZE = 200
    -
    2362  };
    -
    2363  bool _entityFlag[ENTITY_RANGE];
    -
    2364  bool _restrictedEntityFlag[ENTITY_RANGE];
    -
    2365 
    -
    2366  DynArray< char, 20 > _buffer;
    -
    2367 
    -
    2368  // Prohibit cloning, intentionally not implemented
    -
    2369  XMLPrinter( const XMLPrinter& );
    -
    2370  XMLPrinter& operator=( const XMLPrinter& );
    -
    2371 };
    -
    2372 
    -
    2373 
    -
    2374 } // tinyxml2
    -
    2375 
    -
    2376 #if defined(_MSC_VER)
    -
    2377 # pragma warning(pop)
    -
    2378 #endif
    -
    2379 
    -
    2380 #endif // TINYXML2_INCLUDED
    -
    Definition: tinyxml2.h:1141
    -
    int GetLineNum() const
    Gets the line number the attribute is in, if the document was parsed from a file.
    Definition: tinyxml2.h:1151
    +
    1/*
    +
    2Original code by Lee Thomason (www.grinninglizard.com)
    +
    3
    +
    4This software is provided 'as-is', without any express or implied
    +
    5warranty. In no event will the authors be held liable for any
    +
    6damages arising from the use of this software.
    +
    7
    +
    8Permission is granted to anyone to use this software for any
    +
    9purpose, including commercial applications, and to alter it and
    +
    10redistribute it freely, subject to the following restrictions:
    +
    11
    +
    121. The origin of this software must not be misrepresented; you must
    +
    13not claim that you wrote the original software. If you use this
    +
    14software in a product, an acknowledgment in the product documentation
    +
    15would be appreciated but is not required.
    +
    16
    +
    172. Altered source versions must be plainly marked as such, and
    +
    18must not be misrepresented as being the original software.
    +
    19
    +
    203. This notice may not be removed or altered from any source
    +
    21distribution.
    +
    22*/
    +
    23
    +
    24#ifndef TINYXML2_INCLUDED
    +
    25#define TINYXML2_INCLUDED
    +
    26
    +
    27#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__)
    +
    28# include <ctype.h>
    +
    29# include <limits.h>
    +
    30# include <stdio.h>
    +
    31# include <stdlib.h>
    +
    32# include <string.h>
    +
    33# if defined(__PS3__)
    +
    34# include <stddef.h>
    +
    35# endif
    +
    36#else
    +
    37# include <cctype>
    +
    38# include <climits>
    +
    39# include <cstdio>
    +
    40# include <cstdlib>
    +
    41# include <cstring>
    +
    42#endif
    +
    43#include <stdint.h>
    +
    44
    +
    45/*
    +
    46 gcc:
    +
    47 g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe
    +
    48
    +
    49 Formatting, Artistic Style:
    +
    50 AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h
    +
    51*/
    +
    52
    +
    53#if defined( _DEBUG ) || defined (__DEBUG__)
    +
    54# ifndef TINYXML2_DEBUG
    +
    55# define TINYXML2_DEBUG
    +
    56# endif
    +
    57#endif
    +
    58
    +
    59#ifdef _MSC_VER
    +
    60# pragma warning(push)
    +
    61# pragma warning(disable: 4251)
    +
    62#endif
    +
    63
    +
    64#ifdef _MSC_VER
    +
    65# ifdef TINYXML2_EXPORT
    +
    66# define TINYXML2_LIB __declspec(dllexport)
    +
    67# elif defined(TINYXML2_IMPORT)
    +
    68# define TINYXML2_LIB __declspec(dllimport)
    +
    69# else
    +
    70# define TINYXML2_LIB
    +
    71# endif
    +
    72#elif __GNUC__ >= 4
    +
    73# define TINYXML2_LIB __attribute__((visibility("default")))
    +
    74#else
    +
    75# define TINYXML2_LIB
    +
    76#endif
    +
    77
    +
    78
    +
    79#if !defined(TIXMLASSERT)
    +
    80#if defined(TINYXML2_DEBUG)
    +
    81# if defined(_MSC_VER)
    +
    82# // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like
    +
    83# define TIXMLASSERT( x ) do { if ( !((void)0,(x))) { __debugbreak(); } } while(false)
    +
    84# elif defined (ANDROID_NDK)
    +
    85# include <android/log.h>
    +
    86# define TIXMLASSERT( x ) do { if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); } } while(false)
    +
    87# else
    +
    88# include <assert.h>
    +
    89# define TIXMLASSERT assert
    +
    90# endif
    +
    91#else
    +
    92# define TIXMLASSERT( x ) do {} while(false)
    +
    93#endif
    +
    94#endif
    +
    95
    +
    96/* Versioning, past 1.0.14:
    +
    97 http://semver.org/
    +
    98*/
    +
    99static const int TIXML2_MAJOR_VERSION = 10;
    +
    100static const int TIXML2_MINOR_VERSION = 0;
    +
    101static const int TIXML2_PATCH_VERSION = 0;
    +
    102
    +
    103#define TINYXML2_MAJOR_VERSION 10
    +
    104#define TINYXML2_MINOR_VERSION 0
    +
    105#define TINYXML2_PATCH_VERSION 0
    +
    106
    +
    107// A fixed element depth limit is problematic. There needs to be a
    +
    108// limit to avoid a stack overflow. However, that limit varies per
    +
    109// system, and the capacity of the stack. On the other hand, it's a trivial
    +
    110// attack that can result from ill, malicious, or even correctly formed XML,
    +
    111// so there needs to be a limit in place.
    +
    112static const int TINYXML2_MAX_ELEMENT_DEPTH = 500;
    +
    113
    +
    114namespace tinyxml2
    +
    115{
    +
    116class XMLDocument;
    +
    117class XMLElement;
    +
    118class XMLAttribute;
    +
    119class XMLComment;
    +
    120class XMLText;
    +
    121class XMLDeclaration;
    +
    122class XMLUnknown;
    +
    123class XMLPrinter;
    +
    124
    +
    125/*
    +
    126 A class that wraps strings. Normally stores the start and end
    +
    127 pointers into the XML file itself, and will apply normalization
    +
    128 and entity translation if actually read. Can also store (and memory
    +
    129 manage) a traditional char[]
    +
    130
    +
    131 Isn't clear why TINYXML2_LIB is needed; but seems to fix #719
    +
    132*/
    +
    133class TINYXML2_LIB StrPair
    +
    134{
    +
    135public:
    +
    136 enum Mode {
    +
    137 NEEDS_ENTITY_PROCESSING = 0x01,
    +
    138 NEEDS_NEWLINE_NORMALIZATION = 0x02,
    +
    139 NEEDS_WHITESPACE_COLLAPSING = 0x04,
    +
    140
    +
    141 TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
    +
    142 TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
    +
    143 ATTRIBUTE_NAME = 0,
    +
    144 ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
    +
    145 ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
    +
    146 COMMENT = NEEDS_NEWLINE_NORMALIZATION
    +
    147 };
    +
    148
    +
    149 StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {}
    +
    150 ~StrPair();
    +
    151
    +
    152 void Set( char* start, char* end, int flags ) {
    +
    153 TIXMLASSERT( start );
    +
    154 TIXMLASSERT( end );
    +
    155 Reset();
    +
    156 _start = start;
    +
    157 _end = end;
    +
    158 _flags = flags | NEEDS_FLUSH;
    +
    159 }
    +
    160
    +
    161 const char* GetStr();
    +
    162
    +
    163 bool Empty() const {
    +
    164 return _start == _end;
    +
    165 }
    +
    166
    +
    167 void SetInternedStr( const char* str ) {
    +
    168 Reset();
    +
    169 _start = const_cast<char*>(str);
    +
    170 }
    +
    171
    +
    172 void SetStr( const char* str, int flags=0 );
    +
    173
    +
    174 char* ParseText( char* in, const char* endTag, int strFlags, int* curLineNumPtr );
    +
    175 char* ParseName( char* in );
    +
    176
    +
    177 void TransferTo( StrPair* other );
    +
    178 void Reset();
    +
    179
    +
    180private:
    +
    181 void CollapseWhitespace();
    +
    182
    +
    183 enum {
    +
    184 NEEDS_FLUSH = 0x100,
    +
    185 NEEDS_DELETE = 0x200
    +
    186 };
    +
    187
    +
    188 int _flags;
    +
    189 char* _start;
    +
    190 char* _end;
    +
    191
    +
    192 StrPair( const StrPair& other ); // not supported
    +
    193 void operator=( const StrPair& other ); // not supported, use TransferTo()
    +
    194};
    +
    195
    +
    196
    +
    197/*
    +
    198 A dynamic array of Plain Old Data. Doesn't support constructors, etc.
    +
    199 Has a small initial memory pool, so that low or no usage will not
    +
    200 cause a call to new/delete
    +
    201*/
    +
    202template <class T, int INITIAL_SIZE>
    +
    203class DynArray
    +
    204{
    +
    205public:
    +
    206 DynArray() :
    +
    207 _mem( _pool ),
    +
    208 _allocated( INITIAL_SIZE ),
    +
    209 _size( 0 )
    +
    210 {
    +
    211 }
    +
    212
    +
    213 ~DynArray() {
    +
    214 if ( _mem != _pool ) {
    +
    215 delete [] _mem;
    +
    216 }
    +
    217 }
    +
    218
    +
    219 void Clear() {
    +
    220 _size = 0;
    +
    221 }
    +
    222
    +
    223 void Push( T t ) {
    +
    224 TIXMLASSERT( _size < INT_MAX );
    +
    225 EnsureCapacity( _size+1 );
    +
    226 _mem[_size] = t;
    +
    227 ++_size;
    +
    228 }
    +
    229
    +
    230 T* PushArr( int count ) {
    +
    231 TIXMLASSERT( count >= 0 );
    +
    232 TIXMLASSERT( _size <= INT_MAX - count );
    +
    233 EnsureCapacity( _size+count );
    +
    234 T* ret = &_mem[_size];
    +
    235 _size += count;
    +
    236 return ret;
    +
    237 }
    +
    238
    +
    239 T Pop() {
    +
    240 TIXMLASSERT( _size > 0 );
    +
    241 --_size;
    +
    242 return _mem[_size];
    +
    243 }
    +
    244
    +
    245 void PopArr( int count ) {
    +
    246 TIXMLASSERT( _size >= count );
    +
    247 _size -= count;
    +
    248 }
    +
    249
    +
    250 bool Empty() const {
    +
    251 return _size == 0;
    +
    252 }
    +
    253
    +
    254 T& operator[](int i) {
    +
    255 TIXMLASSERT( i>= 0 && i < _size );
    +
    256 return _mem[i];
    +
    257 }
    +
    258
    +
    259 const T& operator[](int i) const {
    +
    260 TIXMLASSERT( i>= 0 && i < _size );
    +
    261 return _mem[i];
    +
    262 }
    +
    263
    +
    264 const T& PeekTop() const {
    +
    265 TIXMLASSERT( _size > 0 );
    +
    266 return _mem[ _size - 1];
    +
    267 }
    +
    268
    +
    269 int Size() const {
    +
    270 TIXMLASSERT( _size >= 0 );
    +
    271 return _size;
    +
    272 }
    +
    273
    +
    274 int Capacity() const {
    +
    275 TIXMLASSERT( _allocated >= INITIAL_SIZE );
    +
    276 return _allocated;
    +
    277 }
    +
    278
    +
    279 void SwapRemove(int i) {
    +
    280 TIXMLASSERT(i >= 0 && i < _size);
    +
    281 TIXMLASSERT(_size > 0);
    +
    282 _mem[i] = _mem[_size - 1];
    +
    283 --_size;
    +
    284 }
    +
    285
    +
    286 const T* Mem() const {
    +
    287 TIXMLASSERT( _mem );
    +
    288 return _mem;
    +
    289 }
    +
    290
    +
    291 T* Mem() {
    +
    292 TIXMLASSERT( _mem );
    +
    293 return _mem;
    +
    294 }
    +
    295
    +
    296private:
    +
    297 DynArray( const DynArray& ); // not supported
    +
    298 void operator=( const DynArray& ); // not supported
    +
    299
    +
    300 void EnsureCapacity( int cap ) {
    +
    301 TIXMLASSERT( cap > 0 );
    +
    302 if ( cap > _allocated ) {
    +
    303 TIXMLASSERT( cap <= INT_MAX / 2 );
    +
    304 const int newAllocated = cap * 2;
    +
    305 T* newMem = new T[static_cast<unsigned int>(newAllocated)];
    +
    306 TIXMLASSERT( newAllocated >= _size );
    +
    307 memcpy( newMem, _mem, sizeof(T)*static_cast<size_t>(_size) ); // warning: not using constructors, only works for PODs
    +
    308 if ( _mem != _pool ) {
    +
    309 delete [] _mem;
    +
    310 }
    +
    311 _mem = newMem;
    +
    312 _allocated = newAllocated;
    +
    313 }
    +
    314 }
    +
    315
    +
    316 T* _mem;
    +
    317 T _pool[static_cast<size_t>(INITIAL_SIZE)];
    +
    318 int _allocated; // objects allocated
    +
    319 int _size; // number objects in use
    +
    320};
    +
    321
    +
    322
    +
    323/*
    +
    324 Parent virtual class of a pool for fast allocation
    +
    325 and deallocation of objects.
    +
    326*/
    +
    327class MemPool
    +
    328{
    +
    329public:
    +
    330 MemPool() {}
    +
    331 virtual ~MemPool() {}
    +
    332
    +
    333 virtual int ItemSize() const = 0;
    +
    334 virtual void* Alloc() = 0;
    +
    335 virtual void Free( void* ) = 0;
    +
    336 virtual void SetTracked() = 0;
    +
    337};
    +
    338
    +
    339
    +
    340/*
    +
    341 Template child class to create pools of the correct type.
    +
    342*/
    +
    343template< int ITEM_SIZE >
    +
    344class MemPoolT : public MemPool
    +
    345{
    +
    346public:
    +
    347 MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {}
    +
    348 ~MemPoolT() {
    +
    349 MemPoolT< ITEM_SIZE >::Clear();
    +
    350 }
    +
    351
    +
    352 void Clear() {
    +
    353 // Delete the blocks.
    +
    354 while( !_blockPtrs.Empty()) {
    +
    355 Block* lastBlock = _blockPtrs.Pop();
    +
    356 delete lastBlock;
    +
    357 }
    +
    358 _root = 0;
    +
    359 _currentAllocs = 0;
    +
    360 _nAllocs = 0;
    +
    361 _maxAllocs = 0;
    +
    362 _nUntracked = 0;
    +
    363 }
    +
    364
    +
    365 virtual int ItemSize() const override{
    +
    366 return ITEM_SIZE;
    +
    367 }
    +
    368 int CurrentAllocs() const {
    +
    369 return _currentAllocs;
    +
    370 }
    +
    371
    +
    372 virtual void* Alloc() override{
    +
    373 if ( !_root ) {
    +
    374 // Need a new block.
    +
    375 Block* block = new Block;
    +
    376 _blockPtrs.Push( block );
    +
    377
    +
    378 Item* blockItems = block->items;
    +
    379 for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) {
    +
    380 blockItems[i].next = &(blockItems[i + 1]);
    +
    381 }
    +
    382 blockItems[ITEMS_PER_BLOCK - 1].next = 0;
    +
    383 _root = blockItems;
    +
    384 }
    +
    385 Item* const result = _root;
    +
    386 TIXMLASSERT( result != 0 );
    +
    387 _root = _root->next;
    +
    388
    +
    389 ++_currentAllocs;
    +
    390 if ( _currentAllocs > _maxAllocs ) {
    +
    391 _maxAllocs = _currentAllocs;
    +
    392 }
    +
    393 ++_nAllocs;
    +
    394 ++_nUntracked;
    +
    395 return result;
    +
    396 }
    +
    397
    +
    398 virtual void Free( void* mem ) override {
    +
    399 if ( !mem ) {
    +
    400 return;
    +
    401 }
    +
    402 --_currentAllocs;
    +
    403 Item* item = static_cast<Item*>( mem );
    +
    404#ifdef TINYXML2_DEBUG
    +
    405 memset( item, 0xfe, sizeof( *item ) );
    +
    406#endif
    +
    407 item->next = _root;
    +
    408 _root = item;
    +
    409 }
    +
    410 void Trace( const char* name ) {
    +
    411 printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
    +
    412 name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs,
    +
    413 ITEM_SIZE, _nAllocs, _blockPtrs.Size() );
    +
    414 }
    +
    415
    +
    416 void SetTracked() override {
    +
    417 --_nUntracked;
    +
    418 }
    +
    419
    +
    420 int Untracked() const {
    +
    421 return _nUntracked;
    +
    422 }
    +
    423
    +
    424 // This number is perf sensitive. 4k seems like a good tradeoff on my machine.
    +
    425 // The test file is large, 170k.
    +
    426 // Release: VS2010 gcc(no opt)
    +
    427 // 1k: 4000
    +
    428 // 2k: 4000
    +
    429 // 4k: 3900 21000
    +
    430 // 16k: 5200
    +
    431 // 32k: 4300
    +
    432 // 64k: 4000 21000
    +
    433 // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK
    +
    434 // in private part if ITEMS_PER_BLOCK is private
    +
    435 enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE };
    +
    436
    +
    437private:
    +
    438 MemPoolT( const MemPoolT& ); // not supported
    +
    439 void operator=( const MemPoolT& ); // not supported
    +
    440
    +
    441 union Item {
    +
    442 Item* next;
    +
    443 char itemData[static_cast<size_t>(ITEM_SIZE)];
    +
    444 };
    +
    445 struct Block {
    +
    446 Item items[ITEMS_PER_BLOCK];
    +
    447 };
    +
    448 DynArray< Block*, 10 > _blockPtrs;
    +
    449 Item* _root;
    +
    450
    +
    451 int _currentAllocs;
    +
    452 int _nAllocs;
    +
    453 int _maxAllocs;
    +
    454 int _nUntracked;
    +
    455};
    +
    456
    +
    457
    +
    458
    +
    +
    478class TINYXML2_LIB XMLVisitor
    +
    479{
    +
    480public:
    +
    481 virtual ~XMLVisitor() {}
    +
    482
    +
    +
    484 virtual bool VisitEnter( const XMLDocument& /*doc*/ ) {
    +
    485 return true;
    +
    486 }
    +
    +
    +
    488 virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
    +
    489 return true;
    +
    490 }
    +
    +
    491
    +
    +
    493 virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) {
    +
    494 return true;
    +
    495 }
    +
    +
    +
    497 virtual bool VisitExit( const XMLElement& /*element*/ ) {
    +
    498 return true;
    +
    499 }
    +
    +
    500
    +
    +
    502 virtual bool Visit( const XMLDeclaration& /*declaration*/ ) {
    +
    503 return true;
    +
    504 }
    +
    +
    +
    506 virtual bool Visit( const XMLText& /*text*/ ) {
    +
    507 return true;
    +
    508 }
    +
    +
    +
    510 virtual bool Visit( const XMLComment& /*comment*/ ) {
    +
    511 return true;
    +
    512 }
    +
    +
    +
    514 virtual bool Visit( const XMLUnknown& /*unknown*/ ) {
    +
    515 return true;
    +
    516 }
    +
    +
    517};
    +
    +
    518
    +
    519// WARNING: must match XMLDocument::_errorNames[]
    +
    520enum XMLError {
    +
    521 XML_SUCCESS = 0,
    +
    522 XML_NO_ATTRIBUTE,
    +
    523 XML_WRONG_ATTRIBUTE_TYPE,
    +
    524 XML_ERROR_FILE_NOT_FOUND,
    +
    525 XML_ERROR_FILE_COULD_NOT_BE_OPENED,
    +
    526 XML_ERROR_FILE_READ_ERROR,
    +
    527 XML_ERROR_PARSING_ELEMENT,
    +
    528 XML_ERROR_PARSING_ATTRIBUTE,
    +
    529 XML_ERROR_PARSING_TEXT,
    +
    530 XML_ERROR_PARSING_CDATA,
    +
    531 XML_ERROR_PARSING_COMMENT,
    +
    532 XML_ERROR_PARSING_DECLARATION,
    +
    533 XML_ERROR_PARSING_UNKNOWN,
    +
    534 XML_ERROR_EMPTY_DOCUMENT,
    +
    535 XML_ERROR_MISMATCHED_ELEMENT,
    +
    536 XML_ERROR_PARSING,
    +
    537 XML_CAN_NOT_CONVERT_TEXT,
    +
    538 XML_NO_TEXT_NODE,
    +
    539 XML_ELEMENT_DEPTH_EXCEEDED,
    +
    540
    +
    541 XML_ERROR_COUNT
    +
    542};
    +
    543
    +
    544
    +
    545/*
    +
    546 Utility functionality.
    +
    547*/
    +
    548class TINYXML2_LIB XMLUtil
    +
    549{
    +
    550public:
    +
    551 static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr ) {
    +
    552 TIXMLASSERT( p );
    +
    553
    +
    554 while( IsWhiteSpace(*p) ) {
    +
    555 if (curLineNumPtr && *p == '\n') {
    +
    556 ++(*curLineNumPtr);
    +
    557 }
    +
    558 ++p;
    +
    559 }
    +
    560 TIXMLASSERT( p );
    +
    561 return p;
    +
    562 }
    +
    563 static char* SkipWhiteSpace( char* const p, int* curLineNumPtr ) {
    +
    564 return const_cast<char*>( SkipWhiteSpace( const_cast<const char*>(p), curLineNumPtr ) );
    +
    565 }
    +
    566
    +
    567 // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't
    +
    568 // correct, but simple, and usually works.
    +
    569 static bool IsWhiteSpace( char p ) {
    +
    570 return !IsUTF8Continuation(p) && isspace( static_cast<unsigned char>(p) );
    +
    571 }
    +
    572
    +
    573 inline static bool IsNameStartChar( unsigned char ch ) {
    +
    574 if ( ch >= 128 ) {
    +
    575 // This is a heuristic guess in attempt to not implement Unicode-aware isalpha()
    +
    576 return true;
    +
    577 }
    +
    578 if ( isalpha( ch ) ) {
    +
    579 return true;
    +
    580 }
    +
    581 return ch == ':' || ch == '_';
    +
    582 }
    +
    583
    +
    584 inline static bool IsNameChar( unsigned char ch ) {
    +
    585 return IsNameStartChar( ch )
    +
    586 || isdigit( ch )
    +
    587 || ch == '.'
    +
    588 || ch == '-';
    +
    589 }
    +
    590
    +
    591 inline static bool IsPrefixHex( const char* p) {
    +
    592 p = SkipWhiteSpace(p, 0);
    +
    593 return p && *p == '0' && ( *(p + 1) == 'x' || *(p + 1) == 'X');
    +
    594 }
    +
    595
    +
    596 inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) {
    +
    597 if ( p == q ) {
    +
    598 return true;
    +
    599 }
    +
    600 TIXMLASSERT( p );
    +
    601 TIXMLASSERT( q );
    +
    602 TIXMLASSERT( nChar >= 0 );
    +
    603 return strncmp( p, q, static_cast<size_t>(nChar) ) == 0;
    +
    604 }
    +
    605
    +
    606 inline static bool IsUTF8Continuation( const char p ) {
    +
    607 return ( p & 0x80 ) != 0;
    +
    608 }
    +
    609
    +
    610 static const char* ReadBOM( const char* p, bool* hasBOM );
    +
    611 // p is the starting location,
    +
    612 // the UTF-8 value of the entity will be placed in value, and length filled in.
    +
    613 static const char* GetCharacterRef( const char* p, char* value, int* length );
    +
    614 static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );
    +
    615
    +
    616 // converts primitive types to strings
    +
    617 static void ToStr( int v, char* buffer, int bufferSize );
    +
    618 static void ToStr( unsigned v, char* buffer, int bufferSize );
    +
    619 static void ToStr( bool v, char* buffer, int bufferSize );
    +
    620 static void ToStr( float v, char* buffer, int bufferSize );
    +
    621 static void ToStr( double v, char* buffer, int bufferSize );
    +
    622 static void ToStr(int64_t v, char* buffer, int bufferSize);
    +
    623 static void ToStr(uint64_t v, char* buffer, int bufferSize);
    +
    624
    +
    625 // converts strings to primitive types
    +
    626 static bool ToInt( const char* str, int* value );
    +
    627 static bool ToUnsigned( const char* str, unsigned* value );
    +
    628 static bool ToBool( const char* str, bool* value );
    +
    629 static bool ToFloat( const char* str, float* value );
    +
    630 static bool ToDouble( const char* str, double* value );
    +
    631 static bool ToInt64(const char* str, int64_t* value);
    +
    632 static bool ToUnsigned64(const char* str, uint64_t* value);
    +
    633 // Changes what is serialized for a boolean value.
    +
    634 // Default to "true" and "false". Shouldn't be changed
    +
    635 // unless you have a special testing or compatibility need.
    +
    636 // Be careful: static, global, & not thread safe.
    +
    637 // Be sure to set static const memory as parameters.
    +
    638 static void SetBoolSerialization(const char* writeTrue, const char* writeFalse);
    +
    639
    +
    640private:
    +
    641 static const char* writeBoolTrue;
    +
    642 static const char* writeBoolFalse;
    +
    643};
    +
    644
    +
    645
    +
    +
    671class TINYXML2_LIB XMLNode
    +
    672{
    +
    673 friend class XMLDocument;
    +
    674 friend class XMLElement;
    +
    675public:
    +
    676
    +
    +
    678 const XMLDocument* GetDocument() const {
    +
    679 TIXMLASSERT( _document );
    +
    680 return _document;
    +
    681 }
    +
    +
    + +
    684 TIXMLASSERT( _document );
    +
    685 return _document;
    +
    686 }
    +
    +
    687
    +
    + +
    690 return 0;
    +
    691 }
    +
    +
    +
    693 virtual XMLText* ToText() {
    +
    694 return 0;
    +
    695 }
    +
    +
    + +
    698 return 0;
    +
    699 }
    +
    +
    + +
    702 return 0;
    +
    703 }
    +
    +
    + +
    706 return 0;
    +
    707 }
    +
    +
    + +
    710 return 0;
    +
    711 }
    +
    +
    712
    +
    713 virtual const XMLElement* ToElement() const {
    +
    714 return 0;
    +
    715 }
    +
    716 virtual const XMLText* ToText() const {
    +
    717 return 0;
    +
    718 }
    +
    719 virtual const XMLComment* ToComment() const {
    +
    720 return 0;
    +
    721 }
    +
    722 virtual const XMLDocument* ToDocument() const {
    +
    723 return 0;
    +
    724 }
    +
    725 virtual const XMLDeclaration* ToDeclaration() const {
    +
    726 return 0;
    +
    727 }
    +
    728 virtual const XMLUnknown* ToUnknown() const {
    +
    729 return 0;
    +
    730 }
    +
    731
    +
    732 // ChildElementCount was originally suggested by msteiger on the sourceforge page for TinyXML and modified by KB1SPH for TinyXML-2.
    +
    733
    +
    734 int ChildElementCount(const char *value) const;
    +
    735
    +
    736 int ChildElementCount() const;
    +
    737
    +
    747 const char* Value() const;
    +
    748
    +
    752 void SetValue( const char* val, bool staticMem=false );
    +
    753
    +
    755 int GetLineNum() const { return _parseLineNum; }
    +
    756
    +
    +
    758 const XMLNode* Parent() const {
    +
    759 return _parent;
    +
    760 }
    +
    +
    761
    +
    762 XMLNode* Parent() {
    +
    763 return _parent;
    +
    764 }
    +
    765
    +
    +
    767 bool NoChildren() const {
    +
    768 return !_firstChild;
    +
    769 }
    +
    +
    770
    +
    +
    772 const XMLNode* FirstChild() const {
    +
    773 return _firstChild;
    +
    774 }
    +
    +
    775
    +
    776 XMLNode* FirstChild() {
    +
    777 return _firstChild;
    +
    778 }
    +
    779
    +
    783 const XMLElement* FirstChildElement( const char* name = 0 ) const;
    +
    784
    +
    785 XMLElement* FirstChildElement( const char* name = 0 ) {
    +
    786 return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->FirstChildElement( name ));
    +
    787 }
    +
    788
    +
    +
    790 const XMLNode* LastChild() const {
    +
    791 return _lastChild;
    +
    792 }
    +
    +
    793
    +
    794 XMLNode* LastChild() {
    +
    795 return _lastChild;
    +
    796 }
    +
    797
    +
    801 const XMLElement* LastChildElement( const char* name = 0 ) const;
    +
    802
    +
    803 XMLElement* LastChildElement( const char* name = 0 ) {
    +
    804 return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->LastChildElement(name) );
    +
    805 }
    +
    806
    +
    +
    808 const XMLNode* PreviousSibling() const {
    +
    809 return _prev;
    +
    810 }
    +
    +
    811
    +
    812 XMLNode* PreviousSibling() {
    +
    813 return _prev;
    +
    814 }
    +
    815
    +
    817 const XMLElement* PreviousSiblingElement( const char* name = 0 ) const ;
    +
    818
    +
    819 XMLElement* PreviousSiblingElement( const char* name = 0 ) {
    +
    820 return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->PreviousSiblingElement( name ) );
    +
    821 }
    +
    822
    +
    +
    824 const XMLNode* NextSibling() const {
    +
    825 return _next;
    +
    826 }
    +
    +
    827
    +
    828 XMLNode* NextSibling() {
    +
    829 return _next;
    +
    830 }
    +
    831
    +
    833 const XMLElement* NextSiblingElement( const char* name = 0 ) const;
    +
    834
    +
    835 XMLElement* NextSiblingElement( const char* name = 0 ) {
    +
    836 return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->NextSiblingElement( name ) );
    +
    837 }
    +
    838
    + +
    847
    +
    848 XMLNode* LinkEndChild( XMLNode* addThis ) {
    +
    849 return InsertEndChild( addThis );
    +
    850 }
    + +
    867 XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis );
    +
    868
    + +
    873
    +
    877 void DeleteChild( XMLNode* node );
    +
    878
    +
    888 virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0;
    +
    889
    +
    903 XMLNode* DeepClone( XMLDocument* target ) const;
    +
    904
    +
    911 virtual bool ShallowEqual( const XMLNode* compare ) const = 0;
    +
    912
    +
    935 virtual bool Accept( XMLVisitor* visitor ) const = 0;
    +
    936
    +
    942 void SetUserData(void* userData) { _userData = userData; }
    +
    943
    +
    949 void* GetUserData() const { return _userData; }
    +
    950
    +
    951protected:
    +
    952 explicit XMLNode( XMLDocument* );
    +
    953 virtual ~XMLNode();
    +
    954
    +
    955 virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
    +
    956
    +
    957 XMLDocument* _document;
    +
    958 XMLNode* _parent;
    +
    959 mutable StrPair _value;
    +
    960 int _parseLineNum;
    +
    961
    +
    962 XMLNode* _firstChild;
    +
    963 XMLNode* _lastChild;
    +
    964
    +
    965 XMLNode* _prev;
    +
    966 XMLNode* _next;
    +
    967
    +
    968 void* _userData;
    +
    969
    +
    970private:
    +
    971 MemPool* _memPool;
    +
    972 void Unlink( XMLNode* child );
    +
    973 static void DeleteNode( XMLNode* node );
    +
    974 void InsertChildPreamble( XMLNode* insertThis ) const;
    +
    975 const XMLElement* ToElementWithName( const char* name ) const;
    +
    976
    +
    977 XMLNode( const XMLNode& ); // not supported
    +
    978 XMLNode& operator=( const XMLNode& ); // not supported
    +
    979};
    +
    +
    980
    +
    981
    +
    +
    994class TINYXML2_LIB XMLText : public XMLNode
    +
    995{
    +
    996 friend class XMLDocument;
    +
    997public:
    +
    998 virtual bool Accept( XMLVisitor* visitor ) const override;
    +
    999
    +
    +
    1000 virtual XMLText* ToText() override {
    +
    1001 return this;
    +
    1002 }
    +
    +
    1003 virtual const XMLText* ToText() const override {
    +
    1004 return this;
    +
    1005 }
    +
    1006
    +
    +
    1008 void SetCData( bool isCData ) {
    +
    1009 _isCData = isCData;
    +
    1010 }
    +
    +
    +
    1012 bool CData() const {
    +
    1013 return _isCData;
    +
    1014 }
    +
    +
    1015
    +
    1016 virtual XMLNode* ShallowClone( XMLDocument* document ) const override;
    +
    1017 virtual bool ShallowEqual( const XMLNode* compare ) const override;
    +
    1018
    +
    1019protected:
    +
    1020 explicit XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {}
    +
    1021 virtual ~XMLText() {}
    +
    1022
    +
    1023 char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) override;
    +
    1024
    +
    1025private:
    +
    1026 bool _isCData;
    +
    1027
    +
    1028 XMLText( const XMLText& ); // not supported
    +
    1029 XMLText& operator=( const XMLText& ); // not supported
    +
    1030};
    +
    +
    1031
    +
    1032
    +
    +
    1034class TINYXML2_LIB XMLComment : public XMLNode
    +
    1035{
    +
    1036 friend class XMLDocument;
    +
    1037public:
    +
    +
    1038 virtual XMLComment* ToComment() override {
    +
    1039 return this;
    +
    1040 }
    +
    +
    1041 virtual const XMLComment* ToComment() const override {
    +
    1042 return this;
    +
    1043 }
    +
    1044
    +
    1045 virtual bool Accept( XMLVisitor* visitor ) const override;
    +
    1046
    +
    1047 virtual XMLNode* ShallowClone( XMLDocument* document ) const override;
    +
    1048 virtual bool ShallowEqual( const XMLNode* compare ) const override;
    +
    1049
    +
    1050protected:
    +
    1051 explicit XMLComment( XMLDocument* doc );
    +
    1052 virtual ~XMLComment();
    +
    1053
    +
    1054 char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr) override;
    +
    1055
    +
    1056private:
    +
    1057 XMLComment( const XMLComment& ); // not supported
    +
    1058 XMLComment& operator=( const XMLComment& ); // not supported
    +
    1059};
    +
    +
    1060
    +
    1061
    +
    +
    1073class TINYXML2_LIB XMLDeclaration : public XMLNode
    +
    1074{
    +
    1075 friend class XMLDocument;
    +
    1076public:
    +
    +
    1077 virtual XMLDeclaration* ToDeclaration() override {
    +
    1078 return this;
    +
    1079 }
    +
    +
    1080 virtual const XMLDeclaration* ToDeclaration() const override {
    +
    1081 return this;
    +
    1082 }
    +
    1083
    +
    1084 virtual bool Accept( XMLVisitor* visitor ) const override;
    +
    1085
    +
    1086 virtual XMLNode* ShallowClone( XMLDocument* document ) const override;
    +
    1087 virtual bool ShallowEqual( const XMLNode* compare ) const override;
    +
    1088
    +
    1089protected:
    +
    1090 explicit XMLDeclaration( XMLDocument* doc );
    +
    1091 virtual ~XMLDeclaration();
    +
    1092
    +
    1093 char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) override;
    +
    1094
    +
    1095private:
    +
    1096 XMLDeclaration( const XMLDeclaration& ); // not supported
    +
    1097 XMLDeclaration& operator=( const XMLDeclaration& ); // not supported
    +
    1098};
    +
    +
    1099
    +
    1100
    +
    +
    1108class TINYXML2_LIB XMLUnknown : public XMLNode
    +
    1109{
    +
    1110 friend class XMLDocument;
    +
    1111public:
    +
    +
    1112 virtual XMLUnknown* ToUnknown() override {
    +
    1113 return this;
    +
    1114 }
    +
    +
    1115 virtual const XMLUnknown* ToUnknown() const override {
    +
    1116 return this;
    +
    1117 }
    +
    1118
    +
    1119 virtual bool Accept( XMLVisitor* visitor ) const override;
    +
    1120
    +
    1121 virtual XMLNode* ShallowClone( XMLDocument* document ) const override;
    +
    1122 virtual bool ShallowEqual( const XMLNode* compare ) const override;
    +
    1123
    +
    1124protected:
    +
    1125 explicit XMLUnknown( XMLDocument* doc );
    +
    1126 virtual ~XMLUnknown();
    +
    1127
    +
    1128 char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) override;
    +
    1129
    +
    1130private:
    +
    1131 XMLUnknown( const XMLUnknown& ); // not supported
    +
    1132 XMLUnknown& operator=( const XMLUnknown& ); // not supported
    +
    1133};
    +
    +
    1134
    +
    1135
    +
    1136
    +
    +
    1143class TINYXML2_LIB XMLAttribute
    +
    1144{
    +
    1145 friend class XMLElement;
    +
    1146public:
    +
    1148 const char* Name() const;
    +
    1149
    +
    1151 const char* Value() const;
    +
    1152
    +
    1154 int GetLineNum() const { return _parseLineNum; }
    +
    1155
    +
    +
    1157 const XMLAttribute* Next() const {
    +
    1158 return _next;
    +
    1159 }
    +
    +
    1160
    +
    +
    1165 int IntValue() const {
    +
    1166 int i = 0;
    +
    1167 QueryIntValue(&i);
    +
    1168 return i;
    +
    1169 }
    +
    +
    1170
    +
    1171 int64_t Int64Value() const {
    +
    1172 int64_t i = 0;
    +
    1173 QueryInt64Value(&i);
    +
    1174 return i;
    +
    1175 }
    +
    1176
    +
    1177 uint64_t Unsigned64Value() const {
    +
    1178 uint64_t i = 0;
    +
    1179 QueryUnsigned64Value(&i);
    +
    1180 return i;
    +
    1181 }
    +
    1182
    +
    +
    1184 unsigned UnsignedValue() const {
    +
    1185 unsigned i=0;
    +
    1186 QueryUnsignedValue( &i );
    +
    1187 return i;
    +
    1188 }
    +
    +
    +
    1190 bool BoolValue() const {
    +
    1191 bool b=false;
    +
    1192 QueryBoolValue( &b );
    +
    1193 return b;
    +
    1194 }
    +
    +
    +
    1196 double DoubleValue() const {
    +
    1197 double d=0;
    +
    1198 QueryDoubleValue( &d );
    +
    1199 return d;
    +
    1200 }
    +
    +
    +
    1202 float FloatValue() const {
    +
    1203 float f=0;
    +
    1204 QueryFloatValue( &f );
    +
    1205 return f;
    +
    1206 }
    +
    +
    1207
    +
    1212 XMLError QueryIntValue( int* value ) const;
    +
    1214 XMLError QueryUnsignedValue( unsigned int* value ) const;
    +
    1216 XMLError QueryInt64Value(int64_t* value) const;
    +
    1218 XMLError QueryUnsigned64Value(uint64_t* value) const;
    +
    1220 XMLError QueryBoolValue( bool* value ) const;
    +
    1222 XMLError QueryDoubleValue( double* value ) const;
    +
    1224 XMLError QueryFloatValue( float* value ) const;
    +
    1225
    +
    1227 void SetAttribute( const char* value );
    +
    1229 void SetAttribute( int value );
    +
    1231 void SetAttribute( unsigned value );
    +
    1233 void SetAttribute(int64_t value);
    +
    1235 void SetAttribute(uint64_t value);
    +
    1237 void SetAttribute( bool value );
    +
    1239 void SetAttribute( double value );
    +
    1241 void SetAttribute( float value );
    +
    1242
    +
    1243private:
    +
    1244 enum { BUF_SIZE = 200 };
    +
    1245
    +
    1246 XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {}
    +
    1247 virtual ~XMLAttribute() {}
    +
    1248
    +
    1249 XMLAttribute( const XMLAttribute& ); // not supported
    +
    1250 void operator=( const XMLAttribute& ); // not supported
    +
    1251 void SetName( const char* name );
    +
    1252
    +
    1253 char* ParseDeep( char* p, bool processEntities, int* curLineNumPtr );
    +
    1254
    +
    1255 mutable StrPair _name;
    +
    1256 mutable StrPair _value;
    +
    1257 int _parseLineNum;
    +
    1258 XMLAttribute* _next;
    +
    1259 MemPool* _memPool;
    +
    1260};
    +
    +
    1261
    +
    1262
    +
    +
    1267class TINYXML2_LIB XMLElement : public XMLNode
    +
    1268{
    +
    1269 friend class XMLDocument;
    +
    1270public:
    +
    +
    1272 const char* Name() const {
    +
    1273 return Value();
    +
    1274 }
    +
    +
    +
    1276 void SetName( const char* str, bool staticMem=false ) {
    +
    1277 SetValue( str, staticMem );
    +
    1278 }
    +
    +
    1279
    +
    +
    1280 virtual XMLElement* ToElement() override {
    +
    1281 return this;
    +
    1282 }
    +
    +
    1283 virtual const XMLElement* ToElement() const override {
    +
    1284 return this;
    +
    1285 }
    +
    1286 virtual bool Accept( XMLVisitor* visitor ) const override;
    +
    1287
    +
    1311 const char* Attribute( const char* name, const char* value=0 ) const;
    +
    1312
    +
    1319 int IntAttribute(const char* name, int defaultValue = 0) const;
    +
    1321 unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const;
    +
    1323 int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const;
    +
    1325 uint64_t Unsigned64Attribute(const char* name, uint64_t defaultValue = 0) const;
    +
    1327 bool BoolAttribute(const char* name, bool defaultValue = false) const;
    +
    1329 double DoubleAttribute(const char* name, double defaultValue = 0) const;
    +
    1331 float FloatAttribute(const char* name, float defaultValue = 0) const;
    +
    1332
    +
    +
    1346 XMLError QueryIntAttribute( const char* name, int* value ) const {
    +
    1347 const XMLAttribute* a = FindAttribute( name );
    +
    1348 if ( !a ) {
    +
    1349 return XML_NO_ATTRIBUTE;
    +
    1350 }
    +
    1351 return a->QueryIntValue( value );
    +
    1352 }
    +
    +
    1353
    +
    +
    1355 XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const {
    +
    1356 const XMLAttribute* a = FindAttribute( name );
    +
    1357 if ( !a ) {
    +
    1358 return XML_NO_ATTRIBUTE;
    +
    1359 }
    +
    1360 return a->QueryUnsignedValue( value );
    +
    1361 }
    +
    +
    1362
    +
    +
    1364 XMLError QueryInt64Attribute(const char* name, int64_t* value) const {
    +
    1365 const XMLAttribute* a = FindAttribute(name);
    +
    1366 if (!a) {
    +
    1367 return XML_NO_ATTRIBUTE;
    +
    1368 }
    +
    1369 return a->QueryInt64Value(value);
    +
    1370 }
    +
    +
    1371
    +
    +
    1373 XMLError QueryUnsigned64Attribute(const char* name, uint64_t* value) const {
    +
    1374 const XMLAttribute* a = FindAttribute(name);
    +
    1375 if(!a) {
    +
    1376 return XML_NO_ATTRIBUTE;
    +
    1377 }
    +
    1378 return a->QueryUnsigned64Value(value);
    +
    1379 }
    +
    +
    1380
    +
    +
    1382 XMLError QueryBoolAttribute( const char* name, bool* value ) const {
    +
    1383 const XMLAttribute* a = FindAttribute( name );
    +
    1384 if ( !a ) {
    +
    1385 return XML_NO_ATTRIBUTE;
    +
    1386 }
    +
    1387 return a->QueryBoolValue( value );
    +
    1388 }
    +
    +
    +
    1390 XMLError QueryDoubleAttribute( const char* name, double* value ) const {
    +
    1391 const XMLAttribute* a = FindAttribute( name );
    +
    1392 if ( !a ) {
    +
    1393 return XML_NO_ATTRIBUTE;
    +
    1394 }
    +
    1395 return a->QueryDoubleValue( value );
    +
    1396 }
    +
    +
    +
    1398 XMLError QueryFloatAttribute( const char* name, float* value ) const {
    +
    1399 const XMLAttribute* a = FindAttribute( name );
    +
    1400 if ( !a ) {
    +
    1401 return XML_NO_ATTRIBUTE;
    +
    1402 }
    +
    1403 return a->QueryFloatValue( value );
    +
    1404 }
    +
    +
    1405
    +
    +
    1407 XMLError QueryStringAttribute(const char* name, const char** value) const {
    +
    1408 const XMLAttribute* a = FindAttribute(name);
    +
    1409 if (!a) {
    +
    1410 return XML_NO_ATTRIBUTE;
    +
    1411 }
    +
    1412 *value = a->Value();
    +
    1413 return XML_SUCCESS;
    +
    1414 }
    +
    +
    1415
    +
    1416
    +
    1417
    +
    +
    1435 XMLError QueryAttribute( const char* name, int* value ) const {
    +
    1436 return QueryIntAttribute( name, value );
    +
    1437 }
    +
    +
    1438
    +
    1439 XMLError QueryAttribute( const char* name, unsigned int* value ) const {
    +
    1440 return QueryUnsignedAttribute( name, value );
    +
    1441 }
    +
    1442
    +
    1443 XMLError QueryAttribute(const char* name, int64_t* value) const {
    +
    1444 return QueryInt64Attribute(name, value);
    +
    1445 }
    +
    1446
    +
    1447 XMLError QueryAttribute(const char* name, uint64_t* value) const {
    +
    1448 return QueryUnsigned64Attribute(name, value);
    +
    1449 }
    +
    1450
    +
    1451 XMLError QueryAttribute( const char* name, bool* value ) const {
    +
    1452 return QueryBoolAttribute( name, value );
    +
    1453 }
    +
    1454
    +
    1455 XMLError QueryAttribute( const char* name, double* value ) const {
    +
    1456 return QueryDoubleAttribute( name, value );
    +
    1457 }
    +
    1458
    +
    1459 XMLError QueryAttribute( const char* name, float* value ) const {
    +
    1460 return QueryFloatAttribute( name, value );
    +
    1461 }
    +
    1462
    +
    1463 XMLError QueryAttribute(const char* name, const char** value) const {
    +
    1464 return QueryStringAttribute(name, value);
    +
    1465 }
    +
    1466
    +
    +
    1468 void SetAttribute( const char* name, const char* value ) {
    +
    1469 XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1470 a->SetAttribute( value );
    +
    1471 }
    +
    +
    +
    1473 void SetAttribute( const char* name, int value ) {
    +
    1474 XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1475 a->SetAttribute( value );
    +
    1476 }
    +
    +
    +
    1478 void SetAttribute( const char* name, unsigned value ) {
    +
    1479 XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1480 a->SetAttribute( value );
    +
    1481 }
    +
    +
    1482
    +
    +
    1484 void SetAttribute(const char* name, int64_t value) {
    +
    1485 XMLAttribute* a = FindOrCreateAttribute(name);
    +
    1486 a->SetAttribute(value);
    +
    1487 }
    +
    +
    1488
    +
    +
    1490 void SetAttribute(const char* name, uint64_t value) {
    +
    1491 XMLAttribute* a = FindOrCreateAttribute(name);
    +
    1492 a->SetAttribute(value);
    +
    1493 }
    +
    +
    1494
    +
    +
    1496 void SetAttribute( const char* name, bool value ) {
    +
    1497 XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1498 a->SetAttribute( value );
    +
    1499 }
    +
    +
    +
    1501 void SetAttribute( const char* name, double value ) {
    +
    1502 XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1503 a->SetAttribute( value );
    +
    1504 }
    +
    +
    +
    1506 void SetAttribute( const char* name, float value ) {
    +
    1507 XMLAttribute* a = FindOrCreateAttribute( name );
    +
    1508 a->SetAttribute( value );
    +
    1509 }
    +
    +
    1510
    +
    1514 void DeleteAttribute( const char* name );
    +
    1515
    +
    + +
    1518 return _rootAttribute;
    +
    1519 }
    +
    +
    1521 const XMLAttribute* FindAttribute( const char* name ) const;
    +
    1522
    +
    1551 const char* GetText() const;
    +
    1552
    +
    1587 void SetText( const char* inText );
    +
    1589 void SetText( int value );
    +
    1591 void SetText( unsigned value );
    +
    1593 void SetText(int64_t value);
    +
    1595 void SetText(uint64_t value);
    +
    1597 void SetText( bool value );
    +
    1599 void SetText( double value );
    +
    1601 void SetText( float value );
    +
    1602
    +
    1629 XMLError QueryIntText( int* ival ) const;
    +
    1631 XMLError QueryUnsignedText( unsigned* uval ) const;
    +
    1633 XMLError QueryInt64Text(int64_t* uval) const;
    +
    1635 XMLError QueryUnsigned64Text(uint64_t* uval) const;
    +
    1637 XMLError QueryBoolText( bool* bval ) const;
    +
    1639 XMLError QueryDoubleText( double* dval ) const;
    +
    1641 XMLError QueryFloatText( float* fval ) const;
    +
    1642
    +
    1643 int IntText(int defaultValue = 0) const;
    +
    1644
    +
    1646 unsigned UnsignedText(unsigned defaultValue = 0) const;
    +
    1648 int64_t Int64Text(int64_t defaultValue = 0) const;
    +
    1650 uint64_t Unsigned64Text(uint64_t defaultValue = 0) const;
    +
    1652 bool BoolText(bool defaultValue = false) const;
    +
    1654 double DoubleText(double defaultValue = 0) const;
    +
    1656 float FloatText(float defaultValue = 0) const;
    +
    1657
    + +
    1664 XMLComment* InsertNewComment(const char* comment);
    +
    1666 XMLText* InsertNewText(const char* text);
    + +
    1670 XMLUnknown* InsertNewUnknown(const char* text);
    +
    1671
    +
    1672
    +
    1673 // internal:
    +
    1674 enum ElementClosingType {
    +
    1675 OPEN, // <foo>
    +
    1676 CLOSED, // <foo/>
    +
    1677 CLOSING // </foo>
    +
    1678 };
    +
    1679 ElementClosingType ClosingType() const {
    +
    1680 return _closingType;
    +
    1681 }
    +
    1682 virtual XMLNode* ShallowClone( XMLDocument* document ) const override;
    +
    1683 virtual bool ShallowEqual( const XMLNode* compare ) const override;
    +
    1684
    +
    1685protected:
    +
    1686 char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) override;
    +
    1687
    +
    1688private:
    +
    1689 XMLElement( XMLDocument* doc );
    +
    1690 virtual ~XMLElement();
    +
    1691 XMLElement( const XMLElement& ); // not supported
    +
    1692 void operator=( const XMLElement& ); // not supported
    +
    1693
    +
    1694 XMLAttribute* FindOrCreateAttribute( const char* name );
    +
    1695 char* ParseAttributes( char* p, int* curLineNumPtr );
    +
    1696 static void DeleteAttribute( XMLAttribute* attribute );
    +
    1697 XMLAttribute* CreateAttribute();
    +
    1698
    +
    1699 enum { BUF_SIZE = 200 };
    +
    1700 ElementClosingType _closingType;
    +
    1701 // The attribute list is ordered; there is no 'lastAttribute'
    +
    1702 // because the list needs to be scanned for dupes before adding
    +
    1703 // a new attribute.
    +
    1704 XMLAttribute* _rootAttribute;
    +
    1705};
    +
    +
    1706
    +
    1707
    +
    1708enum Whitespace {
    +
    1709 PRESERVE_WHITESPACE,
    +
    1710 COLLAPSE_WHITESPACE,
    +
    1711 PEDANTIC_WHITESPACE
    +
    1712};
    +
    1713
    +
    1714
    +
    +
    1720class TINYXML2_LIB XMLDocument : public XMLNode
    +
    1721{
    +
    1722 friend class XMLElement;
    +
    1723 // Gives access to SetError and Push/PopDepth, but over-access for everything else.
    +
    1724 // Wishing C++ had "internal" scope.
    +
    1725 friend class XMLNode;
    +
    1726 friend class XMLText;
    +
    1727 friend class XMLComment;
    +
    1728 friend class XMLDeclaration;
    +
    1729 friend class XMLUnknown;
    +
    1730public:
    +
    1732 XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE );
    +
    1733 ~XMLDocument();
    +
    1734
    +
    +
    1735 virtual XMLDocument* ToDocument() override {
    +
    1736 TIXMLASSERT( this == _document );
    +
    1737 return this;
    +
    1738 }
    +
    +
    1739 virtual const XMLDocument* ToDocument() const override {
    +
    1740 TIXMLASSERT( this == _document );
    +
    1741 return this;
    +
    1742 }
    +
    1743
    +
    1754 XMLError Parse( const char* xml, size_t nBytes=static_cast<size_t>(-1) );
    +
    1755
    +
    1761 XMLError LoadFile( const char* filename );
    +
    1762
    +
    1774 XMLError LoadFile( FILE* );
    +
    1775
    +
    1781 XMLError SaveFile( const char* filename, bool compact = false );
    +
    1782
    +
    1790 XMLError SaveFile( FILE* fp, bool compact = false );
    +
    1791
    +
    1792 bool ProcessEntities() const {
    +
    1793 return _processEntities;
    +
    1794 }
    +
    1795 Whitespace WhitespaceMode() const {
    +
    1796 return _whitespaceMode;
    +
    1797 }
    +
    1798
    +
    +
    1802 bool HasBOM() const {
    +
    1803 return _writeBOM;
    +
    1804 }
    +
    +
    +
    1807 void SetBOM( bool useBOM ) {
    +
    1808 _writeBOM = useBOM;
    +
    1809 }
    +
    +
    1810
    +
    + +
    1815 return FirstChildElement();
    +
    1816 }
    +
    +
    1817 const XMLElement* RootElement() const {
    +
    1818 return FirstChildElement();
    +
    1819 }
    +
    1820
    +
    1835 void Print( XMLPrinter* streamer=0 ) const;
    +
    1836 virtual bool Accept( XMLVisitor* visitor ) const override;
    +
    1837
    +
    1843 XMLElement* NewElement( const char* name );
    +
    1849 XMLComment* NewComment( const char* comment );
    +
    1855 XMLText* NewText( const char* text );
    +
    1867 XMLDeclaration* NewDeclaration( const char* text=0 );
    +
    1873 XMLUnknown* NewUnknown( const char* text );
    +
    1874
    +
    1879 void DeleteNode( XMLNode* node );
    +
    1880
    + +
    1883
    +
    +
    1885 bool Error() const {
    +
    1886 return _errorID != XML_SUCCESS;
    +
    1887 }
    +
    +
    +
    1889 XMLError ErrorID() const {
    +
    1890 return _errorID;
    +
    1891 }
    +
    +
    1892 const char* ErrorName() const;
    +
    1893 static const char* ErrorIDToName(XMLError errorID);
    +
    1894
    +
    1898 const char* ErrorStr() const;
    +
    1899
    +
    1901 void PrintError() const;
    +
    1902
    +
    +
    1904 int ErrorLineNum() const
    +
    1905 {
    +
    1906 return _errorLineNum;
    +
    1907 }
    +
    +
    1908
    +
    1910 void Clear();
    +
    1911
    +
    1919 void DeepCopy(XMLDocument* target) const;
    +
    1920
    +
    1921 // internal
    +
    1922 char* Identify( char* p, XMLNode** node, bool first );
    +
    1923
    +
    1924 // internal
    +
    1925 void MarkInUse(const XMLNode* const);
    +
    1926
    +
    +
    1927 virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const override{
    +
    1928 return 0;
    +
    1929 }
    +
    +
    +
    1930 virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const override{
    +
    1931 return false;
    +
    1932 }
    +
    +
    1933
    +
    1934private:
    +
    1935 XMLDocument( const XMLDocument& ); // not supported
    +
    1936 void operator=( const XMLDocument& ); // not supported
    +
    1937
    +
    1938 bool _writeBOM;
    +
    1939 bool _processEntities;
    +
    1940 XMLError _errorID;
    +
    1941 Whitespace _whitespaceMode;
    +
    1942 mutable StrPair _errorStr;
    +
    1943 int _errorLineNum;
    +
    1944 char* _charBuffer;
    +
    1945 int _parseCurLineNum;
    +
    1946 int _parsingDepth;
    +
    1947 // Memory tracking does add some overhead.
    +
    1948 // However, the code assumes that you don't
    +
    1949 // have a bunch of unlinked nodes around.
    +
    1950 // Therefore it takes less memory to track
    +
    1951 // in the document vs. a linked list in the XMLNode,
    +
    1952 // and the performance is the same.
    +
    1953 DynArray<XMLNode*, 10> _unlinked;
    +
    1954
    +
    1955 MemPoolT< sizeof(XMLElement) > _elementPool;
    +
    1956 MemPoolT< sizeof(XMLAttribute) > _attributePool;
    +
    1957 MemPoolT< sizeof(XMLText) > _textPool;
    +
    1958 MemPoolT< sizeof(XMLComment) > _commentPool;
    +
    1959
    +
    1960 static const char* _errorNames[XML_ERROR_COUNT];
    +
    1961
    +
    1962 void Parse();
    +
    1963
    +
    1964 void SetError( XMLError error, int lineNum, const char* format, ... );
    +
    1965
    +
    1966 // Something of an obvious security hole, once it was discovered.
    +
    1967 // Either an ill-formed XML or an excessively deep one can overflow
    +
    1968 // the stack. Track stack depth, and error out if needed.
    +
    1969 class DepthTracker {
    +
    1970 public:
    +
    1971 explicit DepthTracker(XMLDocument * document) {
    +
    1972 this->_document = document;
    +
    1973 document->PushDepth();
    +
    1974 }
    +
    1975 ~DepthTracker() {
    +
    1976 _document->PopDepth();
    +
    1977 }
    +
    1978 private:
    +
    1979 XMLDocument * _document;
    +
    1980 };
    +
    1981 void PushDepth();
    +
    1982 void PopDepth();
    +
    1983
    +
    1984 template<class NodeType, int PoolElementSize>
    +
    1985 NodeType* CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool );
    +
    1986};
    +
    +
    1987
    +
    1988template<class NodeType, int PoolElementSize>
    +
    1989inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool )
    +
    1990{
    +
    1991 TIXMLASSERT( sizeof( NodeType ) == PoolElementSize );
    +
    1992 TIXMLASSERT( sizeof( NodeType ) == pool.ItemSize() );
    +
    1993 NodeType* returnNode = new (pool.Alloc()) NodeType( this );
    +
    1994 TIXMLASSERT( returnNode );
    +
    1995 returnNode->_memPool = &pool;
    +
    1996
    +
    1997 _unlinked.Push(returnNode);
    +
    1998 return returnNode;
    +
    1999}
    +
    2000
    +
    +
    2056class TINYXML2_LIB XMLHandle
    +
    2057{
    +
    2058public:
    +
    +
    2060 explicit XMLHandle( XMLNode* node ) : _node( node ) {
    +
    2061 }
    +
    +
    +
    2063 explicit XMLHandle( XMLNode& node ) : _node( &node ) {
    +
    2064 }
    +
    +
    +
    2066 XMLHandle( const XMLHandle& ref ) : _node( ref._node ) {
    +
    2067 }
    +
    +
    + +
    2070 _node = ref._node;
    +
    2071 return *this;
    +
    2072 }
    +
    +
    2073
    +
    + +
    2076 return XMLHandle( _node ? _node->FirstChild() : 0 );
    +
    2077 }
    +
    +
    +
    2079 XMLHandle FirstChildElement( const char* name = 0 ) {
    +
    2080 return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 );
    +
    2081 }
    +
    +
    + +
    2084 return XMLHandle( _node ? _node->LastChild() : 0 );
    +
    2085 }
    +
    +
    +
    2087 XMLHandle LastChildElement( const char* name = 0 ) {
    +
    2088 return XMLHandle( _node ? _node->LastChildElement( name ) : 0 );
    +
    2089 }
    +
    +
    + +
    2092 return XMLHandle( _node ? _node->PreviousSibling() : 0 );
    +
    2093 }
    +
    +
    +
    2095 XMLHandle PreviousSiblingElement( const char* name = 0 ) {
    +
    2096 return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
    +
    2097 }
    +
    +
    + +
    2100 return XMLHandle( _node ? _node->NextSibling() : 0 );
    +
    2101 }
    +
    +
    +
    2103 XMLHandle NextSiblingElement( const char* name = 0 ) {
    +
    2104 return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 );
    +
    2105 }
    +
    +
    2106
    +
    + +
    2109 return _node;
    +
    2110 }
    +
    +
    + +
    2113 return ( _node ? _node->ToElement() : 0 );
    +
    2114 }
    +
    +
    + +
    2117 return ( _node ? _node->ToText() : 0 );
    +
    2118 }
    +
    +
    + +
    2121 return ( _node ? _node->ToUnknown() : 0 );
    +
    2122 }
    +
    +
    + +
    2125 return ( _node ? _node->ToDeclaration() : 0 );
    +
    2126 }
    +
    +
    2127
    +
    2128private:
    +
    2129 XMLNode* _node;
    +
    2130};
    +
    +
    2131
    +
    2132
    +
    +
    2137class TINYXML2_LIB XMLConstHandle
    +
    2138{
    +
    2139public:
    +
    2140 explicit XMLConstHandle( const XMLNode* node ) : _node( node ) {
    +
    2141 }
    +
    2142 explicit XMLConstHandle( const XMLNode& node ) : _node( &node ) {
    +
    2143 }
    +
    2144 XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) {
    +
    2145 }
    +
    2146
    +
    2147 XMLConstHandle& operator=( const XMLConstHandle& ref ) {
    +
    2148 _node = ref._node;
    +
    2149 return *this;
    +
    2150 }
    +
    2151
    +
    2152 const XMLConstHandle FirstChild() const {
    +
    2153 return XMLConstHandle( _node ? _node->FirstChild() : 0 );
    +
    2154 }
    +
    2155 const XMLConstHandle FirstChildElement( const char* name = 0 ) const {
    +
    2156 return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 );
    +
    2157 }
    +
    2158 const XMLConstHandle LastChild() const {
    +
    2159 return XMLConstHandle( _node ? _node->LastChild() : 0 );
    +
    2160 }
    +
    2161 const XMLConstHandle LastChildElement( const char* name = 0 ) const {
    +
    2162 return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 );
    +
    2163 }
    +
    2164 const XMLConstHandle PreviousSibling() const {
    +
    2165 return XMLConstHandle( _node ? _node->PreviousSibling() : 0 );
    +
    2166 }
    +
    2167 const XMLConstHandle PreviousSiblingElement( const char* name = 0 ) const {
    +
    2168 return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
    +
    2169 }
    +
    2170 const XMLConstHandle NextSibling() const {
    +
    2171 return XMLConstHandle( _node ? _node->NextSibling() : 0 );
    +
    2172 }
    +
    2173 const XMLConstHandle NextSiblingElement( const char* name = 0 ) const {
    +
    2174 return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 );
    +
    2175 }
    +
    2176
    +
    2177
    +
    2178 const XMLNode* ToNode() const {
    +
    2179 return _node;
    +
    2180 }
    +
    2181 const XMLElement* ToElement() const {
    +
    2182 return ( _node ? _node->ToElement() : 0 );
    +
    2183 }
    +
    2184 const XMLText* ToText() const {
    +
    2185 return ( _node ? _node->ToText() : 0 );
    +
    2186 }
    +
    2187 const XMLUnknown* ToUnknown() const {
    +
    2188 return ( _node ? _node->ToUnknown() : 0 );
    +
    2189 }
    +
    2190 const XMLDeclaration* ToDeclaration() const {
    +
    2191 return ( _node ? _node->ToDeclaration() : 0 );
    +
    2192 }
    +
    2193
    +
    2194private:
    +
    2195 const XMLNode* _node;
    +
    2196};
    +
    +
    2197
    +
    2198
    +
    +
    2241class TINYXML2_LIB XMLPrinter : public XMLVisitor
    +
    2242{
    +
    2243public:
    +
    2250 XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 );
    +
    2251 virtual ~XMLPrinter() {}
    +
    2252
    +
    2254 void PushHeader( bool writeBOM, bool writeDeclaration );
    +
    2258 void OpenElement( const char* name, bool compactMode=false );
    +
    2260 void PushAttribute( const char* name, const char* value );
    +
    2261 void PushAttribute( const char* name, int value );
    +
    2262 void PushAttribute( const char* name, unsigned value );
    +
    2263 void PushAttribute( const char* name, int64_t value );
    +
    2264 void PushAttribute( const char* name, uint64_t value );
    +
    2265 void PushAttribute( const char* name, bool value );
    +
    2266 void PushAttribute( const char* name, double value );
    +
    2268 virtual void CloseElement( bool compactMode=false );
    +
    2269
    +
    2271 void PushText( const char* text, bool cdata=false );
    +
    2273 void PushText( int value );
    +
    2275 void PushText( unsigned value );
    +
    2277 void PushText( int64_t value );
    +
    2279 void PushText( uint64_t value );
    +
    2281 void PushText( bool value );
    +
    2283 void PushText( float value );
    +
    2285 void PushText( double value );
    +
    2286
    +
    2288 void PushComment( const char* comment );
    +
    2289
    +
    2290 void PushDeclaration( const char* value );
    +
    2291 void PushUnknown( const char* value );
    +
    2292
    +
    2293 virtual bool VisitEnter( const XMLDocument& /*doc*/ ) override;
    +
    +
    2294 virtual bool VisitExit( const XMLDocument& /*doc*/ ) override {
    +
    2295 return true;
    +
    2296 }
    +
    +
    2297
    +
    2298 virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute ) override;
    +
    2299 virtual bool VisitExit( const XMLElement& element ) override;
    +
    2300
    +
    2301 virtual bool Visit( const XMLText& text ) override;
    +
    2302 virtual bool Visit( const XMLComment& comment ) override;
    +
    2303 virtual bool Visit( const XMLDeclaration& declaration ) override;
    +
    2304 virtual bool Visit( const XMLUnknown& unknown ) override;
    +
    2305
    +
    +
    2310 const char* CStr() const {
    +
    2311 return _buffer.Mem();
    +
    2312 }
    +
    +
    +
    2318 int CStrSize() const {
    +
    2319 return _buffer.Size();
    +
    2320 }
    +
    +
    +
    2325 void ClearBuffer( bool resetToFirstElement = true ) {
    +
    2326 _buffer.Clear();
    +
    2327 _buffer.Push(0);
    +
    2328 _firstElement = resetToFirstElement;
    +
    2329 }
    +
    +
    2330
    +
    2331protected:
    +
    2332 virtual bool CompactMode( const XMLElement& ) { return _compactMode; }
    +
    2333
    +
    2337 virtual void PrintSpace( int depth );
    +
    2338 virtual void Print( const char* format, ... );
    +
    2339 virtual void Write( const char* data, size_t size );
    +
    2340 virtual void Putc( char ch );
    +
    2341
    +
    2342 inline void Write(const char* data) { Write(data, strlen(data)); }
    +
    2343
    +
    2344 void SealElementIfJustOpened();
    +
    2345 bool _elementJustOpened;
    +
    2346 DynArray< const char*, 10 > _stack;
    +
    2347
    +
    2348private:
    +
    2353 void PrepareForNewNode( bool compactMode );
    +
    2354 void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities.
    +
    2355
    +
    2356 bool _firstElement;
    +
    2357 FILE* _fp;
    +
    2358 int _depth;
    +
    2359 int _textDepth;
    +
    2360 bool _processEntities;
    +
    2361 bool _compactMode;
    +
    2362
    +
    2363 enum {
    +
    2364 ENTITY_RANGE = 64,
    +
    2365 BUF_SIZE = 200
    +
    2366 };
    +
    2367 bool _entityFlag[ENTITY_RANGE];
    +
    2368 bool _restrictedEntityFlag[ENTITY_RANGE];
    +
    2369
    +
    2370 DynArray< char, 20 > _buffer;
    +
    2371
    +
    2372 // Prohibit cloning, intentionally not implemented
    +
    2373 XMLPrinter( const XMLPrinter& );
    +
    2374 XMLPrinter& operator=( const XMLPrinter& );
    +
    2375};
    +
    +
    2376
    +
    2377
    +
    2378} // tinyxml2
    +
    2379
    +
    2380#if defined(_MSC_VER)
    +
    2381# pragma warning(pop)
    +
    2382#endif
    +
    2383
    +
    2384#endif // TINYXML2_INCLUDED
    +
    Definition tinyxml2.h:1144
    +
    int GetLineNum() const
    Gets the line number the attribute is in, if the document was parsed from a file.
    Definition tinyxml2.h:1154
    XMLError QueryFloatValue(float *value) const
    See QueryIntValue.
    -
    unsigned UnsignedValue() const
    Query as an unsigned integer. See IntValue()
    Definition: tinyxml2.h:1181
    +
    unsigned UnsignedValue() const
    Query as an unsigned integer. See IntValue()
    Definition tinyxml2.h:1184
    void SetAttribute(uint64_t value)
    Set the attribute to value.
    -
    const char * Value() const
    The value of the attribute.
    -
    float FloatValue() const
    Query as a float. See IntValue()
    Definition: tinyxml2.h:1199
    +
    float FloatValue() const
    Query as a float. See IntValue()
    Definition tinyxml2.h:1202
    XMLError QueryDoubleValue(double *value) const
    See QueryIntValue.
    void SetAttribute(const char *value)
    Set the attribute to a string value.
    XMLError QueryUnsignedValue(unsigned int *value) const
    See QueryIntValue.
    -
    double DoubleValue() const
    Query as a double. See IntValue()
    Definition: tinyxml2.h:1193
    +
    double DoubleValue() const
    Query as a double. See IntValue()
    Definition tinyxml2.h:1196
    XMLError QueryInt64Value(int64_t *value) const
    See QueryIntValue.
    +
    const char * Name() const
    The name of the attribute.
    XMLError QueryBoolValue(bool *value) const
    See QueryIntValue.
    XMLError QueryIntValue(int *value) const
    void SetAttribute(int64_t value)
    Set the attribute to value.
    -
    bool BoolValue() const
    Query as a boolean. See IntValue()
    Definition: tinyxml2.h:1187
    +
    bool BoolValue() const
    Query as a boolean. See IntValue()
    Definition tinyxml2.h:1190
    void SetAttribute(double value)
    Set the attribute to value.
    +
    const XMLAttribute * Next() const
    The next attribute in the list.
    Definition tinyxml2.h:1157
    +
    const char * Value() const
    The value of the attribute.
    void SetAttribute(bool value)
    Set the attribute to value.
    -
    const char * Name() const
    The name of the attribute.
    void SetAttribute(int value)
    Set the attribute to value.
    -
    int IntValue() const
    Definition: tinyxml2.h:1162
    +
    int IntValue() const
    Definition tinyxml2.h:1165
    void SetAttribute(unsigned value)
    Set the attribute to value.
    void SetAttribute(float value)
    Set the attribute to value.
    -
    const XMLAttribute * Next() const
    The next attribute in the list.
    Definition: tinyxml2.h:1154
    XMLError QueryUnsigned64Value(uint64_t *value) const
    See QueryIntValue.
    -
    Definition: tinyxml2.h:1032
    -
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    -
    virtual bool Accept(XMLVisitor *visitor) const
    -
    virtual bool ShallowEqual(const XMLNode *compare) const
    -
    virtual XMLComment * ToComment()
    Safely cast to a Comment, or null.
    Definition: tinyxml2.h:1035
    -
    Definition: tinyxml2.h:2134
    -
    Definition: tinyxml2.h:1071
    -
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    -
    virtual XMLDeclaration * ToDeclaration()
    Safely cast to a Declaration, or null.
    Definition: tinyxml2.h:1074
    -
    virtual bool Accept(XMLVisitor *visitor) const
    -
    virtual bool ShallowEqual(const XMLNode *compare) const
    -
    Definition: tinyxml2.h:1717
    -
    void SetBOM(bool useBOM)
    Definition: tinyxml2.h:1803
    +
    Definition tinyxml2.h:1035
    +
    virtual bool Accept(XMLVisitor *visitor) const override
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const override
    +
    virtual bool ShallowEqual(const XMLNode *compare) const override
    +
    virtual XMLComment * ToComment() override
    Safely cast to a Comment, or null.
    Definition tinyxml2.h:1038
    +
    Definition tinyxml2.h:2138
    +
    Definition tinyxml2.h:1074
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const override
    +
    virtual bool ShallowEqual(const XMLNode *compare) const override
    +
    virtual XMLDeclaration * ToDeclaration() override
    Safely cast to a Declaration, or null.
    Definition tinyxml2.h:1077
    +
    virtual bool Accept(XMLVisitor *visitor) const override
    +
    Definition tinyxml2.h:1721
    +
    virtual XMLNode * ShallowClone(XMLDocument *) const override
    Definition tinyxml2.h:1927
    +
    XMLElement * RootElement()
    Definition tinyxml2.h:1814
    +
    void SetBOM(bool useBOM)
    Definition tinyxml2.h:1807
    void PrintError() const
    A (trivial) utility function that prints the ErrorStr() to stdout.
    +
    virtual XMLDocument * ToDocument() override
    Safely cast to a Document, or null.
    Definition tinyxml2.h:1735
    XMLError LoadFile(const char *filename)
    -
    bool HasBOM() const
    Definition: tinyxml2.h:1798
    -
    bool Error() const
    Return true if there was an error parsing the document.
    Definition: tinyxml2.h:1881
    -
    virtual XMLDocument * ToDocument()
    Safely cast to a Document, or null.
    Definition: tinyxml2.h:1731
    +
    bool HasBOM() const
    Definition tinyxml2.h:1802
    +
    bool Error() const
    Return true if there was an error parsing the document.
    Definition tinyxml2.h:1885
    +
    XMLComment * NewComment(const char *comment)
    +
    XMLElement * NewElement(const char *name)
    void ClearError()
    Clears the error flags.
    -
    XMLUnknown * NewUnknown(const char *text)
    -
    int ErrorLineNum() const
    Return the line where the error occurred, or zero if unknown.
    Definition: tinyxml2.h:1900
    +
    XMLUnknown * NewUnknown(const char *text)
    +
    int ErrorLineNum() const
    Return the line where the error occurred, or zero if unknown.
    Definition tinyxml2.h:1904
    XMLDocument(bool processEntities=true, Whitespace whitespaceMode=PRESERVE_WHITESPACE)
    constructor
    XMLError LoadFile(FILE *)
    void Clear()
    Clear the document, resetting it to the initial state.
    -
    virtual bool ShallowEqual(const XMLNode *) const
    Definition: tinyxml2.h:1926
    XMLError SaveFile(const char *filename, bool compact=false)
    +
    virtual bool Accept(XMLVisitor *visitor) const override
    void Print(XMLPrinter *streamer=0) const
    -
    XMLElement * NewElement(const char *name)
    XMLError SaveFile(FILE *fp, bool compact=false)
    -
    virtual bool Accept(XMLVisitor *visitor) const
    -
    virtual XMLNode * ShallowClone(XMLDocument *) const
    Definition: tinyxml2.h:1923
    -
    XMLText * NewText(const char *text)
    void DeleteNode(XMLNode *node)
    -
    XMLElement * RootElement()
    Definition: tinyxml2.h:1810
    -
    const char * ErrorStr() const
    -
    XMLComment * NewComment(const char *comment)
    -
    XMLDeclaration * NewDeclaration(const char *text=0)
    +
    virtual bool ShallowEqual(const XMLNode *) const override
    Definition tinyxml2.h:1930
    +
    XMLText * NewText(const char *text)
    +
    XMLDeclaration * NewDeclaration(const char *text=0)
    +
    const char * ErrorStr() const
    XMLError Parse(const char *xml, size_t nBytes=static_cast< size_t >(-1))
    void DeepCopy(XMLDocument *target) const
    -
    XMLError ErrorID() const
    Return the errorID.
    Definition: tinyxml2.h:1885
    -
    Definition: tinyxml2.h:1265
    +
    XMLError ErrorID() const
    Return the errorID.
    Definition tinyxml2.h:1889
    +
    Definition tinyxml2.h:1268
    +
    const char * GetText() const
    double DoubleAttribute(const char *name, double defaultValue=0) const
    See IntAttribute()
    -
    void SetAttribute(const char *name, const char *value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1465
    +
    void SetAttribute(const char *name, const char *value)
    Sets the named attribute to value.
    Definition tinyxml2.h:1468
    XMLError QueryInt64Text(int64_t *uval) const
    See QueryIntText()
    -
    XMLError QueryUnsigned64Attribute(const char *name, uint64_t *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1370
    -
    XMLError QueryBoolAttribute(const char *name, bool *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1379
    +
    XMLError QueryUnsigned64Attribute(const char *name, uint64_t *value) const
    See QueryIntAttribute()
    Definition tinyxml2.h:1373
    +
    XMLError QueryBoolAttribute(const char *name, bool *value) const
    See QueryIntAttribute()
    Definition tinyxml2.h:1382
    XMLError QueryUnsignedText(unsigned *uval) const
    See QueryIntText()
    -
    XMLText * InsertNewText(const char *text)
    See InsertNewChildElement()
    +
    const XMLAttribute * FindAttribute(const char *name) const
    Query a specific attribute in the list.
    void SetText(const char *inText)
    uint64_t Unsigned64Attribute(const char *name, uint64_t defaultValue=0) const
    See IntAttribute()
    -
    void SetAttribute(const char *name, double value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1498
    -
    XMLError QueryUnsignedAttribute(const char *name, unsigned int *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1352
    -
    const XMLAttribute * FindAttribute(const char *name) const
    Query a specific attribute in the list.
    -
    const XMLAttribute * FirstAttribute() const
    Return the first attribute in the list.
    Definition: tinyxml2.h:1514
    -
    virtual bool Accept(XMLVisitor *visitor) const
    +
    void SetAttribute(const char *name, double value)
    Sets the named attribute to value.
    Definition tinyxml2.h:1501
    +
    XMLError QueryUnsignedAttribute(const char *name, unsigned int *value) const
    See QueryIntAttribute()
    Definition tinyxml2.h:1355
    XMLError QueryBoolText(bool *bval) const
    See QueryIntText()
    float FloatText(float defaultValue=0) const
    See QueryIntText()
    +
    const char * Attribute(const char *name, const char *value=0) const
    unsigned UnsignedText(unsigned defaultValue=0) const
    See QueryIntText()
    +
    const XMLAttribute * FirstAttribute() const
    Return the first attribute in the list.
    Definition tinyxml2.h:1517
    void SetText(float value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    bool BoolAttribute(const char *name, bool defaultValue=false) const
    See IntAttribute()
    -
    void SetAttribute(const char *name, float value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1503
    -
    XMLError QueryAttribute(const char *name, int *value) const
    Definition: tinyxml2.h:1432
    -
    XMLError QueryDoubleAttribute(const char *name, double *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1387
    -
    const char * Name() const
    Get the name of an element (which is the Value() of the node.)
    Definition: tinyxml2.h:1269
    +
    void SetAttribute(const char *name, float value)
    Sets the named attribute to value.
    Definition tinyxml2.h:1506
    +
    XMLError QueryAttribute(const char *name, int *value) const
    Definition tinyxml2.h:1435
    +
    XMLError QueryDoubleAttribute(const char *name, double *value) const
    See QueryIntAttribute()
    Definition tinyxml2.h:1390
    int64_t Int64Attribute(const char *name, int64_t defaultValue=0) const
    See IntAttribute()
    void SetText(double value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    XMLError QueryDoubleText(double *dval) const
    See QueryIntText()
    bool BoolText(bool defaultValue=false) const
    See QueryIntText()
    -
    const char * GetText() const
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const override
    void SetText(uint64_t value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    -
    const char * Attribute(const char *name, const char *value=0) const
    void SetText(int64_t value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    void SetText(unsigned value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    -
    XMLError QueryInt64Attribute(const char *name, int64_t *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1361
    +
    XMLError QueryInt64Attribute(const char *name, int64_t *value) const
    See QueryIntAttribute()
    Definition tinyxml2.h:1364
    +
    XMLDeclaration * InsertNewDeclaration(const char *text)
    See InsertNewChildElement()
    double DoubleText(double defaultValue=0) const
    See QueryIntText()
    -
    XMLError QueryIntAttribute(const char *name, int *value) const
    Definition: tinyxml2.h:1343
    +
    virtual XMLElement * ToElement() override
    Safely cast to an Element, or null.
    Definition tinyxml2.h:1280
    +
    XMLError QueryIntAttribute(const char *name, int *value) const
    Definition tinyxml2.h:1346
    XMLError QueryIntText(int *ival) const
    int IntAttribute(const char *name, int defaultValue=0) const
    -
    void SetName(const char *str, bool staticMem=false)
    Set the name of the element.
    Definition: tinyxml2.h:1273
    -
    void SetAttribute(const char *name, bool value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1493
    +
    void SetName(const char *str, bool staticMem=false)
    Set the name of the element.
    Definition tinyxml2.h:1276
    +
    void SetAttribute(const char *name, bool value)
    Sets the named attribute to value.
    Definition tinyxml2.h:1496
    int64_t Int64Text(int64_t defaultValue=0) const
    See QueryIntText()
    -
    void SetAttribute(const char *name, int value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1470
    -
    void SetAttribute(const char *name, int64_t value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1481
    +
    virtual bool ShallowEqual(const XMLNode *compare) const override
    +
    void SetAttribute(const char *name, int value)
    Sets the named attribute to value.
    Definition tinyxml2.h:1473
    +
    XMLComment * InsertNewComment(const char *comment)
    See InsertNewChildElement()
    +
    void SetAttribute(const char *name, int64_t value)
    Sets the named attribute to value.
    Definition tinyxml2.h:1484
    float FloatAttribute(const char *name, float defaultValue=0) const
    See IntAttribute()
    -
    XMLElement * InsertNewChildElement(const char *name)
    -
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    +
    const char * Name() const
    Get the name of an element (which is the Value() of the node.)
    Definition tinyxml2.h:1272
    +
    XMLElement * InsertNewChildElement(const char *name)
    XMLError QueryUnsigned64Text(uint64_t *uval) const
    See QueryIntText()
    -
    XMLUnknown * InsertNewUnknown(const char *text)
    See InsertNewChildElement()
    -
    XMLError QueryFloatAttribute(const char *name, float *value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1395
    -
    void SetAttribute(const char *name, uint64_t value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1487
    -
    virtual bool ShallowEqual(const XMLNode *compare) const
    -
    virtual XMLElement * ToElement()
    Safely cast to an Element, or null.
    Definition: tinyxml2.h:1277
    -
    XMLError QueryStringAttribute(const char *name, const char **value) const
    See QueryIntAttribute()
    Definition: tinyxml2.h:1404
    -
    XMLDeclaration * InsertNewDeclaration(const char *text)
    See InsertNewChildElement()
    -
    void SetAttribute(const char *name, unsigned value)
    Sets the named attribute to value.
    Definition: tinyxml2.h:1475
    +
    XMLText * InsertNewText(const char *text)
    See InsertNewChildElement()
    +
    virtual bool Accept(XMLVisitor *visitor) const override
    +
    XMLError QueryFloatAttribute(const char *name, float *value) const
    See QueryIntAttribute()
    Definition tinyxml2.h:1398
    +
    void SetAttribute(const char *name, uint64_t value)
    Sets the named attribute to value.
    Definition tinyxml2.h:1490
    +
    XMLError QueryStringAttribute(const char *name, const char **value) const
    See QueryIntAttribute()
    Definition tinyxml2.h:1407
    +
    void SetAttribute(const char *name, unsigned value)
    Sets the named attribute to value.
    Definition tinyxml2.h:1478
    void SetText(bool value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    -
    XMLComment * InsertNewComment(const char *comment)
    See InsertNewChildElement()
    void SetText(int value)
    Convenience method for setting text inside an element. See SetText() for important limitations.
    void DeleteAttribute(const char *name)
    uint64_t Unsigned64Text(uint64_t defaultValue=0) const
    See QueryIntText()
    XMLError QueryFloatText(float *fval) const
    See QueryIntText()
    +
    XMLUnknown * InsertNewUnknown(const char *text)
    See InsertNewChildElement()
    unsigned UnsignedAttribute(const char *name, unsigned defaultValue=0) const
    See IntAttribute()
    -
    Definition: tinyxml2.h:2053
    -
    XMLNode * ToNode()
    Safe cast to XMLNode. This can return null.
    Definition: tinyxml2.h:2104
    -
    XMLDeclaration * ToDeclaration()
    Safe cast to XMLDeclaration. This can return null.
    Definition: tinyxml2.h:2120
    -
    XMLHandle PreviousSibling()
    Get the previous sibling of this handle.
    Definition: tinyxml2.h:2087
    -
    XMLHandle LastChildElement(const char *name=0)
    Get the last child element of this handle.
    Definition: tinyxml2.h:2083
    -
    XMLHandle FirstChild()
    Get the first child of this handle.
    Definition: tinyxml2.h:2071
    -
    XMLElement * ToElement()
    Safe cast to XMLElement. This can return null.
    Definition: tinyxml2.h:2108
    -
    XMLText * ToText()
    Safe cast to XMLText. This can return null.
    Definition: tinyxml2.h:2112
    -
    XMLHandle FirstChildElement(const char *name=0)
    Get the first child element of this handle.
    Definition: tinyxml2.h:2075
    -
    XMLHandle & operator=(const XMLHandle &ref)
    Assignment.
    Definition: tinyxml2.h:2065
    -
    XMLHandle PreviousSiblingElement(const char *name=0)
    Get the previous sibling element of this handle.
    Definition: tinyxml2.h:2091
    -
    XMLHandle(XMLNode *node)
    Create a handle from any node (at any depth of the tree.) This can be a null pointer.
    Definition: tinyxml2.h:2056
    -
    XMLHandle LastChild()
    Get the last child of this handle.
    Definition: tinyxml2.h:2079
    -
    XMLHandle(XMLNode &node)
    Create a handle from a node.
    Definition: tinyxml2.h:2059
    -
    XMLUnknown * ToUnknown()
    Safe cast to XMLUnknown. This can return null.
    Definition: tinyxml2.h:2116
    -
    XMLHandle NextSibling()
    Get the next sibling of this handle.
    Definition: tinyxml2.h:2095
    -
    XMLHandle NextSiblingElement(const char *name=0)
    Get the next sibling element of this handle.
    Definition: tinyxml2.h:2099
    -
    XMLHandle(const XMLHandle &ref)
    Copy constructor.
    Definition: tinyxml2.h:2062
    -
    Definition: tinyxml2.h:675
    -
    void SetUserData(void *userData)
    Definition: tinyxml2.h:939
    +
    Definition tinyxml2.h:2057
    +
    XMLHandle PreviousSibling()
    Get the previous sibling of this handle.
    Definition tinyxml2.h:2091
    +
    XMLHandle LastChildElement(const char *name=0)
    Get the last child element of this handle.
    Definition tinyxml2.h:2087
    +
    XMLHandle FirstChild()
    Get the first child of this handle.
    Definition tinyxml2.h:2075
    +
    XMLNode * ToNode()
    Safe cast to XMLNode. This can return null.
    Definition tinyxml2.h:2108
    +
    XMLHandle FirstChildElement(const char *name=0)
    Get the first child element of this handle.
    Definition tinyxml2.h:2079
    +
    XMLHandle PreviousSiblingElement(const char *name=0)
    Get the previous sibling element of this handle.
    Definition tinyxml2.h:2095
    +
    XMLDeclaration * ToDeclaration()
    Safe cast to XMLDeclaration. This can return null.
    Definition tinyxml2.h:2124
    +
    XMLHandle(XMLNode *node)
    Create a handle from any node (at any depth of the tree.) This can be a null pointer.
    Definition tinyxml2.h:2060
    +
    XMLHandle LastChild()
    Get the last child of this handle.
    Definition tinyxml2.h:2083
    +
    XMLHandle & operator=(const XMLHandle &ref)
    Assignment.
    Definition tinyxml2.h:2069
    +
    XMLHandle(XMLNode &node)
    Create a handle from a node.
    Definition tinyxml2.h:2063
    +
    XMLHandle NextSibling()
    Get the next sibling of this handle.
    Definition tinyxml2.h:2099
    +
    XMLElement * ToElement()
    Safe cast to XMLElement. This can return null.
    Definition tinyxml2.h:2112
    +
    XMLText * ToText()
    Safe cast to XMLText. This can return null.
    Definition tinyxml2.h:2116
    +
    XMLUnknown * ToUnknown()
    Safe cast to XMLUnknown. This can return null.
    Definition tinyxml2.h:2120
    +
    XMLHandle NextSiblingElement(const char *name=0)
    Get the next sibling element of this handle.
    Definition tinyxml2.h:2103
    +
    XMLHandle(const XMLHandle &ref)
    Copy constructor.
    Definition tinyxml2.h:2066
    +
    Definition tinyxml2.h:672
    +
    void SetUserData(void *userData)
    Definition tinyxml2.h:942
    +
    const char * Value() const
    void SetValue(const char *val, bool staticMem=false)
    -
    const XMLElement * NextSiblingElement(const char *name=0) const
    Get the next (right) sibling element of this node, with an optionally supplied name.
    -
    const XMLElement * LastChildElement(const char *name=0) const
    -
    virtual XMLDeclaration * ToDeclaration()
    Safely cast to a Declaration, or null.
    Definition: tinyxml2.h:708
    -
    const XMLElement * FirstChildElement(const char *name=0) const
    -
    const XMLDocument * GetDocument() const
    Get the XMLDocument that owns this XMLNode.
    Definition: tinyxml2.h:681
    +
    virtual XMLText * ToText()
    Safely cast to Text, or null.
    Definition tinyxml2.h:693
    +
    virtual XMLDeclaration * ToDeclaration()
    Safely cast to a Declaration, or null.
    Definition tinyxml2.h:705
    +
    const XMLElement * NextSiblingElement(const char *name=0) const
    Get the next (right) sibling element of this node, with an optionally supplied name.
    +
    void * GetUserData() const
    Definition tinyxml2.h:949
    +
    const XMLElement * FirstChildElement(const char *name=0) const
    void DeleteChild(XMLNode *node)
    -
    virtual XMLText * ToText()
    Safely cast to Text, or null.
    Definition: tinyxml2.h:696
    -
    XMLNode * DeepClone(XMLDocument *target) const
    -
    const char * Value() const
    -
    const XMLNode * NextSibling() const
    Get the next (right) sibling node of this node.
    Definition: tinyxml2.h:821
    +
    XMLNode * DeepClone(XMLDocument *target) const
    +
    XMLDocument * GetDocument()
    Get the XMLDocument that owns this XMLNode.
    Definition tinyxml2.h:683
    +
    const XMLNode * Parent() const
    Get the parent of this node on the DOM.
    Definition tinyxml2.h:758
    +
    virtual XMLComment * ToComment()
    Safely cast to a Comment, or null.
    Definition tinyxml2.h:697
    +
    const XMLElement * LastChildElement(const char *name=0) const
    +
    virtual XMLDocument * ToDocument()
    Safely cast to a Document, or null.
    Definition tinyxml2.h:701
    +
    const XMLNode * LastChild() const
    Get the last child node, or null if none exists.
    Definition tinyxml2.h:790
    +
    const XMLDocument * GetDocument() const
    Get the XMLDocument that owns this XMLNode.
    Definition tinyxml2.h:678
    virtual bool ShallowEqual(const XMLNode *compare) const =0
    -
    void * GetUserData() const
    Definition: tinyxml2.h:946
    virtual bool Accept(XMLVisitor *visitor) const =0
    -
    virtual XMLDocument * ToDocument()
    Safely cast to a Document, or null.
    Definition: tinyxml2.h:704
    -
    virtual XMLNode * ShallowClone(XMLDocument *document) const =0
    -
    XMLNode * InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)
    -
    virtual XMLUnknown * ToUnknown()
    Safely cast to an Unknown, or null.
    Definition: tinyxml2.h:712
    -
    const XMLElement * PreviousSiblingElement(const char *name=0) const
    Get the previous (left) sibling element of this node, with an optionally supplied name.
    -
    XMLNode * InsertFirstChild(XMLNode *addThis)
    -
    int GetLineNum() const
    Gets the line number the node is in, if the document was parsed from a file.
    Definition: tinyxml2.h:752
    -
    const XMLNode * LastChild() const
    Get the last child node, or null if none exists.
    Definition: tinyxml2.h:787
    -
    virtual XMLElement * ToElement()
    Safely cast to an Element, or null.
    Definition: tinyxml2.h:692
    -
    const XMLNode * PreviousSibling() const
    Get the previous (left) sibling node of this node.
    Definition: tinyxml2.h:805
    -
    bool NoChildren() const
    Returns true if this node has no children.
    Definition: tinyxml2.h:764
    -
    const XMLNode * Parent() const
    Get the parent of this node on the DOM.
    Definition: tinyxml2.h:755
    -
    const XMLNode * FirstChild() const
    Get the first child node, or null if none exists.
    Definition: tinyxml2.h:769
    -
    XMLNode * InsertEndChild(XMLNode *addThis)
    -
    XMLDocument * GetDocument()
    Get the XMLDocument that owns this XMLNode.
    Definition: tinyxml2.h:686
    -
    virtual XMLComment * ToComment()
    Safely cast to a Comment, or null.
    Definition: tinyxml2.h:700
    -
    Definition: tinyxml2.h:2238
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const =0
    +
    XMLNode * InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)
    +
    const XMLNode * PreviousSibling() const
    Get the previous (left) sibling node of this node.
    Definition tinyxml2.h:808
    +
    virtual XMLElement * ToElement()
    Safely cast to an Element, or null.
    Definition tinyxml2.h:689
    +
    const XMLElement * PreviousSiblingElement(const char *name=0) const
    Get the previous (left) sibling element of this node, with an optionally supplied name.
    +
    int GetLineNum() const
    Gets the line number the node is in, if the document was parsed from a file.
    Definition tinyxml2.h:755
    +
    virtual XMLUnknown * ToUnknown()
    Safely cast to an Unknown, or null.
    Definition tinyxml2.h:709
    +
    const XMLNode * FirstChild() const
    Get the first child node, or null if none exists.
    Definition tinyxml2.h:772
    +
    bool NoChildren() const
    Returns true if this node has no children.
    Definition tinyxml2.h:767
    +
    XMLNode * InsertFirstChild(XMLNode *addThis)
    +
    XMLNode * InsertEndChild(XMLNode *addThis)
    +
    const XMLNode * NextSibling() const
    Get the next (right) sibling node of this node.
    Definition tinyxml2.h:824
    +
    Definition tinyxml2.h:2242
    virtual void PrintSpace(int depth)
    -
    virtual bool VisitExit(const XMLDocument &)
    Visit a document.
    Definition: tinyxml2.h:2290
    void PushHeader(bool writeBOM, bool writeDeclaration)
    -
    const char * CStr() const
    Definition: tinyxml2.h:2306
    void PushText(const char *text, bool cdata=false)
    Add a text node.
    void PushText(float value)
    Add a text node from a float.
    void OpenElement(const char *name, bool compactMode=false)
    -
    virtual bool Visit(const XMLText &text)
    Visit a text node.
    -
    virtual bool VisitEnter(const XMLElement &element, const XMLAttribute *attribute)
    Visit an element.
    -
    int CStrSize() const
    Definition: tinyxml2.h:2314
    +
    virtual bool VisitExit(const XMLDocument &) override
    Visit a document.
    Definition tinyxml2.h:2294
    +
    virtual bool Visit(const XMLUnknown &unknown) override
    Visit an unknown node.
    +
    int CStrSize() const
    Definition tinyxml2.h:2318
    void PushText(int value)
    Add a text node from an integer.
    -
    virtual bool Visit(const XMLComment &comment)
    Visit a comment node.
    void PushText(bool value)
    Add a text node from a bool.
    +
    virtual bool VisitEnter(const XMLElement &element, const XMLAttribute *attribute) override
    Visit an element.
    void PushText(uint64_t value)
    Add a text node from an unsigned 64bit integer.
    +
    virtual bool Visit(const XMLDeclaration &declaration) override
    Visit a declaration.
    void PushText(unsigned value)
    Add a text node from an unsigned.
    -
    void ClearBuffer(bool resetToFirstElement=true)
    Definition: tinyxml2.h:2321
    +
    void ClearBuffer(bool resetToFirstElement=true)
    Definition tinyxml2.h:2325
    +
    virtual bool VisitEnter(const XMLDocument &) override
    Visit a document.
    +
    virtual bool Visit(const XMLComment &comment) override
    Visit a comment node.
    void PushText(int64_t value)
    Add a text node from a signed 64bit integer.
    +
    virtual bool VisitExit(const XMLElement &element) override
    Visit an element.
    void PushAttribute(const char *name, const char *value)
    If streaming, add an attribute to an open element.
    -
    virtual bool Visit(const XMLDeclaration &declaration)
    Visit a declaration.
    -
    virtual bool Visit(const XMLUnknown &unknown)
    Visit an unknown node.
    XMLPrinter(FILE *file=0, bool compact=false, int depth=0)
    void PushText(double value)
    Add a text node from a double.
    +
    const char * CStr() const
    Definition tinyxml2.h:2310
    virtual void CloseElement(bool compactMode=false)
    If streaming, close the Element.
    -
    virtual bool VisitEnter(const XMLDocument &)
    Visit a document.
    -
    virtual bool VisitExit(const XMLElement &element)
    Visit an element.
    +
    virtual bool Visit(const XMLText &text) override
    Visit a text node.
    void PushComment(const char *comment)
    Add a comment.
    -
    Definition: tinyxml2.h:992
    -
    virtual bool Accept(XMLVisitor *visitor) const
    -
    virtual XMLText * ToText()
    Safely cast to Text, or null.
    Definition: tinyxml2.h:997
    -
    bool CData() const
    Returns true if this is a CDATA text element.
    Definition: tinyxml2.h:1009
    -
    void SetCData(bool isCData)
    Declare whether this should be CDATA or standard text.
    Definition: tinyxml2.h:1005
    -
    virtual bool ShallowEqual(const XMLNode *compare) const
    -
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    -
    Definition: tinyxml2.h:1106
    -
    virtual XMLNode * ShallowClone(XMLDocument *document) const
    -
    virtual bool ShallowEqual(const XMLNode *compare) const
    -
    virtual bool Accept(XMLVisitor *visitor) const
    -
    virtual XMLUnknown * ToUnknown()
    Safely cast to an Unknown, or null.
    Definition: tinyxml2.h:1109
    -
    Definition: tinyxml2.h:482
    -
    virtual bool Visit(const XMLUnknown &)
    Visit an unknown node.
    Definition: tinyxml2.h:517
    -
    virtual bool VisitExit(const XMLDocument &)
    Visit a document.
    Definition: tinyxml2.h:491
    -
    virtual bool VisitExit(const XMLElement &)
    Visit an element.
    Definition: tinyxml2.h:500
    -
    virtual bool VisitEnter(const XMLDocument &)
    Visit a document.
    Definition: tinyxml2.h:487
    -
    virtual bool Visit(const XMLComment &)
    Visit a comment node.
    Definition: tinyxml2.h:513
    -
    virtual bool Visit(const XMLDeclaration &)
    Visit a declaration.
    Definition: tinyxml2.h:505
    -
    virtual bool Visit(const XMLText &)
    Visit a text node.
    Definition: tinyxml2.h:509
    -
    virtual bool VisitEnter(const XMLElement &, const XMLAttribute *)
    Visit an element.
    Definition: tinyxml2.h:496
    +
    Definition tinyxml2.h:995
    +
    virtual bool ShallowEqual(const XMLNode *compare) const override
    +
    virtual XMLText * ToText() override
    Safely cast to Text, or null.
    Definition tinyxml2.h:1000
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const override
    +
    virtual bool Accept(XMLVisitor *visitor) const override
    +
    bool CData() const
    Returns true if this is a CDATA text element.
    Definition tinyxml2.h:1012
    +
    void SetCData(bool isCData)
    Declare whether this should be CDATA or standard text.
    Definition tinyxml2.h:1008
    +
    Definition tinyxml2.h:1109
    +
    virtual bool ShallowEqual(const XMLNode *compare) const override
    +
    virtual XMLNode * ShallowClone(XMLDocument *document) const override
    +
    virtual XMLUnknown * ToUnknown() override
    Safely cast to an Unknown, or null.
    Definition tinyxml2.h:1112
    +
    virtual bool Accept(XMLVisitor *visitor) const override
    +
    Definition tinyxml2.h:479
    +
    virtual bool Visit(const XMLUnknown &)
    Visit an unknown node.
    Definition tinyxml2.h:514
    +
    virtual bool VisitExit(const XMLDocument &)
    Visit a document.
    Definition tinyxml2.h:488
    +
    virtual bool VisitExit(const XMLElement &)
    Visit an element.
    Definition tinyxml2.h:497
    +
    virtual bool VisitEnter(const XMLDocument &)
    Visit a document.
    Definition tinyxml2.h:484
    +
    virtual bool Visit(const XMLComment &)
    Visit a comment node.
    Definition tinyxml2.h:510
    +
    virtual bool Visit(const XMLDeclaration &)
    Visit a declaration.
    Definition tinyxml2.h:502
    +
    virtual bool Visit(const XMLText &)
    Visit a text node.
    Definition tinyxml2.h:506
    +
    virtual bool VisitEnter(const XMLElement &, const XMLAttribute *)
    Visit an element.
    Definition tinyxml2.h:493
    diff --git a/dox b/dox index 99921de0..2d23d73d 100644 --- a/dox +++ b/dox @@ -38,7 +38,7 @@ PROJECT_NAME = "TinyXML-2" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 9.0.0 +PROJECT_NUMBER = 10.0.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/meson.build b/meson.build index 91f228ba..b8b41fea 100644 --- a/meson.build +++ b/meson.build @@ -22,7 +22,7 @@ project( 'tinyxml2', ['cpp'], - version : '9.0.0', + version : '10.0.0', meson_version : '>= 0.49.0', ) diff --git a/tinyxml2.h b/tinyxml2.h index bab582c3..7586f7b8 100755 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -42,9 +42,6 @@ distribution. #endif #include -/* - TODO: intern strings instead of allocation. -*/ /* gcc: g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe @@ -99,11 +96,11 @@ distribution. /* Versioning, past 1.0.14: http://semver.org/ */ -static const int TIXML2_MAJOR_VERSION = 9; +static const int TIXML2_MAJOR_VERSION = 10; static const int TIXML2_MINOR_VERSION = 0; static const int TIXML2_PATCH_VERSION = 0; -#define TINYXML2_MAJOR_VERSION 9 +#define TINYXML2_MAJOR_VERSION 10 #define TINYXML2_MINOR_VERSION 0 #define TINYXML2_PATCH_VERSION 0