license and readme
diff --git a/tinyxml2.h b/tinyxml2.h
index b5a908e..d9dee4d 100644
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -1,3 +1,26 @@
+/*
+Original code by Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+

 #ifndef TINYXML_INCLUDED

 #define TINYXML2_INCLUDED

 

@@ -360,30 +383,30 @@
 };

 

 

-/** XMLNode is a base class for every object that is in the
-	XML Document Object Model (DOM), except XMLAttributes.
-	Nodes have siblings, a parent, and children which can
-	be navigated. A node is always in a XMLDocument.
-	The type of a TiXmlNode can be queried, and it can 
-	be cast to its more defined type.
-
-	An XMLDocument allocates memory for all its Nodes.
-	When the XMLDocument gets deleted, all its Nodes
-	will also be deleted.
-
-	@verbatim
-	A Document can contain:	Element	(container or leaf)
-							Comment (leaf)
-							Unknown (leaf)
-							Declaration( leaf )
-
-	An Element can contain:	Element (container or leaf)
-							Text	(leaf)
-							Attributes (not on tree)
-							Comment (leaf)
-							Unknown (leaf)
-
-	@endverbatim
+/** XMLNode is a base class for every object that is in the

+	XML Document Object Model (DOM), except XMLAttributes.

+	Nodes have siblings, a parent, and children which can

+	be navigated. A node is always in a XMLDocument.

+	The type of a TiXmlNode can be queried, and it can 

+	be cast to its more defined type.

+

+	An XMLDocument allocates memory for all its Nodes.

+	When the XMLDocument gets deleted, all its Nodes

+	will also be deleted.

+

+	@verbatim

+	A Document can contain:	Element	(container or leaf)

+							Comment (leaf)

+							Unknown (leaf)

+							Declaration( leaf )

+

+	An Element can contain:	Element (container or leaf)

+							Text	(leaf)

+							Attributes (not on tree)

+							Comment (leaf)

+							Unknown (leaf)

+

+	@endverbatim

 */

 class XMLNode

 {

@@ -410,15 +433,15 @@
 	virtual const XMLDeclaration*	ToDeclaration() const	{ return 0; }

 	virtual const XMLUnknown*		ToUnknown() const		{ return 0; }

 

-	/** The meaning of 'value' changes for the specific type.
-		@verbatim
-		Document:	empy
-		Element:	name of the element
-		Comment:	the comment text
-		Unknown:	the tag contents
-		Text:		the text string
-		@endverbatim
-	*/
+	/** The meaning of 'value' changes for the specific type.

+		@verbatim

+		Document:	empy

+		Element:	name of the element

+		Comment:	the comment text

+		Unknown:	the tag contents

+		Text:		the text string

+		@endverbatim

+	*/

 	const char* Value() const			{ return value.GetStr(); }

 	/** Set the Value of an XML node.

 		@sa Value()

@@ -490,28 +513,28 @@
 	*/

 	void DeleteChild( XMLNode* node );

 

-	/** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the 
-		XML tree will be conditionally visited and the host will be called back
-		via the TiXmlVisitor interface.
-
-		This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse
-		the XML for the callbacks, so the performance of TinyXML is unchanged by using this
-		interface versus any other.)
-
-		The interface has been based on ideas from:
-
-		- http://www.saxproject.org/
-		- http://c2.com/cgi/wiki?HierarchicalVisitorPattern 
-
-		Which are both good references for "visiting".
-
-		An example of using Accept():
-		@verbatim
-		TiXmlPrinter printer;
-		tinyxmlDoc.Accept( &printer );
-		const char* xmlcstr = printer.CStr();
-		@endverbatim
-	*/
+	/** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the 

+		XML tree will be conditionally visited and the host will be called back

+		via the TiXmlVisitor interface.

+

+		This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse

+		the XML for the callbacks, so the performance of TinyXML is unchanged by using this

+		interface versus any other.)

+

+		The interface has been based on ideas from:

+

+		- http://www.saxproject.org/

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

+

+		Which are both good references for "visiting".

+

+		An example of using Accept():

+		@verbatim

+		TiXmlPrinter printer;

+		tinyxmlDoc.Accept( &printer );

+		const char* xmlcstr = printer.CStr();

+		@endverbatim

+	*/

 	virtual bool Accept( XMLVisitor* visitor ) const = 0;

 

 	// internal

@@ -539,18 +562,18 @@
 };

 

 

-/** XML text.
-
-	Note that a text node can have child element nodes, for example:
-	@verbatim
-	<root>This is <b>bold</b></root>
-	@endverbatim
-
-	A text node can have 2 ways to output the next. "normal" output 
-	and CDATA. It will default to the mode it was parsed from the XML file and
-	you generally want to leave it alone, but you can change the output mode with 
-	SetCDATA() and query it with CDATA().
-*/
+/** XML text.

+

+	Note that a text node can have child element nodes, for example:

+	@verbatim

+	<root>This is <b>bold</b></root>

+	@endverbatim

+

+	A text node can have 2 ways to output the next. "normal" output 

+	and CDATA. It will default to the mode it was parsed from the XML file and

+	you generally want to leave it alone, but you can change the output mode with 

+	SetCDATA() and query it with CDATA().

+*/

 class XMLText : public XMLNode

 {

 	friend class XMLBase;

@@ -601,17 +624,17 @@
 };

 

 

-/** In correct XML the declaration is the first entry in the file.
-	@verbatim
-		<?xml version="1.0" standalone="yes"?>
-	@endverbatim
-
-	TinyXML2 will happily read or write files without a declaration,
-	however.
-
-	The text of the declaration isn't interpreted. It is parsed
-	and written as a string.
-*/
+/** In correct XML the declaration is the first entry in the file.

+	@verbatim

+		<?xml version="1.0" standalone="yes"?>

+	@endverbatim

+

+	TinyXML2 will happily read or write files without a declaration,

+	however.

+

+	The text of the declaration isn't interpreted. It is parsed

+	and written as a string.

+*/

 class XMLDeclaration : public XMLNode

 {

 	friend class XMLDocument;

@@ -631,13 +654,13 @@
 };

 

 

-/** Any tag that tinyXml doesn't recognize is saved as an
-	unknown. It is a tag of text, but should not be modified.
-	It will be written back to the XML, unchanged, when the file
-	is saved.
-
-	DTD tags get thrown into TiXmlUnknowns.
-*/
+/** Any tag that tinyXml doesn't recognize is saved as an

+	unknown. It is a tag of text, but should not be modified.

+	It will be written back to the XML, unchanged, when the file

+	is saved.

+

+	DTD tags get thrown into TiXmlUnknowns.

+*/

 class XMLUnknown : public XMLNode

 {

 	friend class XMLDocument;

@@ -679,12 +702,12 @@
 };

 

 

-/** 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.
-*/
+/** 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.

+*/

 class XMLAttribute

 {

 	friend class XMLElement;

@@ -752,10 +775,10 @@
 };

 

 

-/** The element is a container class. It has a value, the element name,
-	and can contain other elements, text, comments, and unknowns.
-	Elements also contain an arbitrary number of attributes.
-*/
+/** The element is a container class. It has a value, the element name,

+	and can contain other elements, text, comments, and unknowns.

+	Elements also contain an arbitrary number of attributes.

+*/

 class XMLElement : public XMLNode

 {

 	friend class XMLBase;

@@ -770,16 +793,16 @@
 	virtual const XMLElement* ToElement() const { return this; }

 	virtual bool Accept( XMLVisitor* visitor ) const;

 

-	/** Given an attribute name, Attribute() returns the value
-		for the attribute of that name, or null if none exists.
-	*/
+	/** Given an attribute name, Attribute() returns the value

+		for the attribute of that name, or null if none exists.

+	*/

 	const char* Attribute( const char* name ) const	{ const XMLAttribute* a = FindAttribute( name ); if ( !a ) return 0; return a->Value(); }

 

-	/** Given an attribute name, IntAttribute() returns the value
-		of the attribute interpreted as an integer. 0 will be
-		returned if there is an error. For a method with error 
-		checking, see QueryIntAttribute()
-	*/
+	/** Given an attribute name, IntAttribute() returns the value

+		of the attribute interpreted as an integer. 0 will be

+		returned if there is an error. For a method with error 

+		checking, see QueryIntAttribute()

+	*/

 	int		 IntAttribute( const char* name ) const		{ int i=0;		QueryIntAttribute( name, &i );		return i; }

 	/// See IntAttribute()

 	unsigned UnsignedAttribute( const char* name ) const{ unsigned i=0; QueryUnsignedAttribute( name, &i ); return i; }

@@ -790,19 +813,19 @@
 	/// See IntAttribute()

 	float	 FloatAttribute( const char* name ) const	{ float f=0;	QueryFloatAttribute( name, &f );		return f; }

 

-	/** Given an attribute name, QueryIntAttribute() returns 
-		XML_NO_ERROR, WRONG_ATTRIBUTE_TYPE if the conversion
-		can't be performed, or NO_ATTRIBUTE if the attribute
-		doesn't exist. If successful, the result of the conversion
-		will be written to 'value'. If not successful, nothing will
-		be written to 'value'. This allows you to provide default
-		value:
-
-		@verbatim
-		int value = 10;
-		QueryIntAttribute( "foo", &value );		// if "foo" isn't found, value will still be 10
-		@endverbatim
-	*/
+	/** Given an attribute name, QueryIntAttribute() returns 

+		XML_NO_ERROR, WRONG_ATTRIBUTE_TYPE if the conversion

+		can't be performed, or NO_ATTRIBUTE if the attribute

+		doesn't exist. If successful, the result of the conversion

+		will be written to 'value'. If not successful, nothing will

+		be written to 'value'. This allows you to provide default

+		value:

+

+		@verbatim

+		int value = 10;

+		QueryIntAttribute( "foo", &value );		// if "foo" isn't found, value will still be 10

+		@endverbatim

+	*/

 	int QueryIntAttribute( const char* name, int* value ) const					{ const XMLAttribute* a = FindAttribute( name ); if ( !a ) return NO_ATTRIBUTE; return a->QueryIntAttribute( value ); } 

 	/// See QueryIntAttribute()

 	int QueryUnsignedAttribute( const char* name, unsigned int* value ) const	{ const XMLAttribute* a = FindAttribute( name ); if ( !a ) return NO_ATTRIBUTE; return a->QueryUnsignedAttribute( value ); }

@@ -834,34 +857,34 @@
 	/// Query a specific attribute in the list.

 	const XMLAttribute* FindAttribute( const char* name ) const;

 

-	/** Convenience function for easy access to the text inside an element. Although easy
-		and concise, GetText() is limited compared to getting the TiXmlText child
-		and accessing it directly.
-	
-		If the first child of 'this' is a TiXmlText, the GetText()
-		returns the character string of the Text node, else null is returned.
-
-		This is a convenient method for getting the text of simple contained text:
-		@verbatim
-		<foo>This is text</foo>
-		const char* str = fooElement->GetText();
-		@endverbatim
-
-		'str' will be a pointer to "This is text". 
-		
-		Note that this function can be misleading. If the element foo was created from
-		this XML:
-		@verbatim
-		<foo><b>This is text</b></foo> 
-		@endverbatim
-
-		then the value of str would be null. The first child node isn't a text node, it is
-		another element. From this XML:
-		@verbatim
-		<foo>This is <b>text</b></foo> 
-		@endverbatim
-		GetText() will return "This is ".
-	*/
+	/** Convenience function for easy access to the text inside an element. Although easy

+		and concise, GetText() is limited compared to getting the TiXmlText child

+		and accessing it directly.

+	

+		If the first child of 'this' is a TiXmlText, the GetText()

+		returns the character string of the Text node, else null is returned.

+

+		This is a convenient method for getting the text of simple contained text:

+		@verbatim

+		<foo>This is text</foo>

+		const char* str = fooElement->GetText();

+		@endverbatim

+

+		'str' will be a pointer to "This is text". 

+		

+		Note that this function can be misleading. If the element foo was created from

+		this XML:

+		@verbatim

+		<foo><b>This is text</b></foo> 

+		@endverbatim

+

+		then the value of str would be null. The first child node isn't a text node, it is

+		another element. From this XML:

+		@verbatim

+		<foo>This is <b>text</b></foo> 

+		@endverbatim

+		GetText() will return "This is ".

+	*/

 	const char* GetText() const;

 

 	// internal:

@@ -889,11 +912,11 @@
 };

 

 

-/** A document binds together all the functionality. 
-	It can be saved, loaded, and printed to the screen.
-	All Nodes are connected and allocated to a Document.
-	If the Document is deleted, all its Nodes are also deleted.
-*/
+/** A document binds together all the functionality. 

+	It can be saved, loaded, and printed to the screen.

+	All Nodes are connected and allocated to a Document.

+	If the Document is deleted, all its Nodes are also deleted.

+*/

 class XMLDocument : public XMLNode

 {

 	friend class XMLElement;