Merge branch 'master' of https://github.com/leethomason/tinyxml2

Conflicts:
	tinyxml2.cpp
	xmltest.cpp
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 399c4c2..12cac92 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,7 +10,7 @@
 ################################

 # set lib version here

 

-set(GENERIC_LIB_VERSION "1.0.13")
+set(GENERIC_LIB_VERSION "1.0.14")
 set(GENERIC_LIB_SOVERSION "1")
 

 

diff --git a/dox b/dox
index 2413b2e..10878f4 100755
--- a/dox
+++ b/dox
@@ -32,7 +32,7 @@
 # This could be handy for archiving the generated documentation or

 # if some version control system is used.

 

-PROJECT_NUMBER = 1.0.13
+PROJECT_NUMBER = 1.0.14
 

 # 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

diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index efaa29a..6081856 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -1293,71 +1293,46 @@
 }

 

 

-void	XMLElement::SetText( int inNum )

+void XMLElement::SetText( int v ) 

 {

     char buf[BUF_SIZE];

-    XMLUtil::ToStr( inNum, buf, BUF_SIZE );

-	if ( FirstChild() && FirstChild()->ToText() )

-		FirstChild()->SetValue( buf );

-	else {

-		XMLText*	theText = GetDocument()->NewText( buf );

-		InsertFirstChild( theText );

-	}

+    XMLUtil::ToStr( v, buf, BUF_SIZE );

+    SetText( buf );

 }

 

 

-void	XMLElement::SetText( unsigned inNum )

+void XMLElement::SetText( unsigned v ) 

 {

     char buf[BUF_SIZE];

-    XMLUtil::ToStr( inNum, buf, BUF_SIZE );

-	if ( FirstChild() && FirstChild()->ToText() )

-		FirstChild()->SetValue( buf );

-	else {

-		XMLText*	theText = GetDocument()->NewText( buf );

-		InsertFirstChild( theText );

-	}

+    XMLUtil::ToStr( v, buf, BUF_SIZE );

+    SetText( buf );

 }

 

 

-void	XMLElement::SetText( double inNum )

+void XMLElement::SetText( bool v ) 

 {

     char buf[BUF_SIZE];

-    XMLUtil::ToStr( inNum, buf, BUF_SIZE );

-	if ( FirstChild() && FirstChild()->ToText() )

-		FirstChild()->SetValue( buf );

-	else {

-		XMLText*	theText = GetDocument()->NewText( buf );

-		InsertFirstChild( theText );

-	}

+    XMLUtil::ToStr( v, buf, BUF_SIZE );

+    SetText( buf );

 }

 

 

-void	XMLElement::SetText( float inNum )

+void XMLElement::SetText( float v ) 

 {

     char buf[BUF_SIZE];

-    XMLUtil::ToStr( inNum, buf, BUF_SIZE );

-	if ( FirstChild() && FirstChild()->ToText() )

-		FirstChild()->SetValue( buf );

-	else {

-		XMLText*	theText = GetDocument()->NewText( buf );

-		InsertFirstChild( theText );

-	}

+    XMLUtil::ToStr( v, buf, BUF_SIZE );

+    SetText( buf );

 }

 

-void	XMLElement::SetText( long long inNum )

+

+void XMLElement::SetText( double v ) 

 {

     char buf[BUF_SIZE];

-    XMLUtil::ToStr( inNum, buf, BUF_SIZE );

-	if ( FirstChild() && FirstChild()->ToText() )

-		FirstChild()->SetValue( buf );

-	else {

-		XMLText*	theText = GetDocument()->NewText( buf );

-		InsertFirstChild( theText );

-	}

+    XMLUtil::ToStr( v, buf, BUF_SIZE );

+    SetText( buf );

 }

 

 

-

 void	XMLElement::SetBoolFirstChild( bool inBool )

 {

 	if( FirstChild() && FirstChild()->ToElement()

diff --git a/tinyxml2.h b/tinyxml2.h
index f1be6ca..f9269a1 100755
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -118,7 +118,7 @@
 

 static const int TIXML2_MAJOR_VERSION = 1;

 static const int TIXML2_MINOR_VERSION = 0;

-static const int TIXML2_PATCH_VERSION = 13;

+static const int TIXML2_PATCH_VERSION = 14;

 

 namespace tinyxml2

 {

@@ -1413,7 +1413,17 @@
     		<foo>Hullaballoo!</foo>

     	@endverbatim

     */

-	void	SetText( const char* inText );

+	void SetText( const char* inText );

+    /// Convenince method for setting text inside and element. See SetText() for important limitations.

+    void SetText( int value );

+    /// Convenince method for setting text inside and element. See SetText() for important limitations.

+    void SetText( unsigned value );  

+    /// Convenince method for setting text inside and element. See SetText() for important limitations.

+    void SetText( bool value );  

+    /// Convenince method for setting text inside and element. See SetText() for important limitations.

+    void SetText( double value );  

+    /// Convenince method for setting text inside and element. See SetText() for important limitations.

+    void SetText( float value );  

 

     /// Sets the text to the given number.

 	void	SetText( int inNum );

@@ -1547,6 +1557,7 @@
     //void LinkAttribute( XMLAttribute* attrib );

     char* ParseAttributes( char* p );

 

+    enum { BUF_SIZE = 200 };

     int _closingType;

     // The attribute list is ordered; there is no 'lastAttribute'

     // because the list needs to be scanned for dupes before adding

diff --git a/xmltest.cpp b/xmltest.cpp
index 9fb021a..6fdc162 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -624,83 +624,51 @@
 		doc.Parse( str );

 		XMLElement* element = doc.RootElement();

 

-		element->SetText("He kept turning his head to left and right, but I could not see anything through the darkness.");

-		XMLTest( "SetText() normal use (open/close).", "He kept turning his head to left and right, but I could not see anything through the darkness.", element->GetText() );

+		element->SetText("darkness.");

+		XMLTest( "SetText() normal use (open/close).", "darkness.", element->GetText() );

 

-		element->SetText("Suddenly, away on our left I saw a faint flickering blue flame.");

-		XMLTest( "SetText() replace.", "Suddenly, away on our left I saw a faint flickering blue flame.", element->GetText() );

+		element->SetText("blue flame.");

+		XMLTest( "SetText() replace.", "blue flame.", element->GetText() );

 

 		str = "<foo/>";

 		doc.Parse( str );

 		element = doc.RootElement();

 

-		element->SetText("The driver saw it at the same moment.");

-		XMLTest( "SetText() normal use. (self-closing)", "The driver saw it at the same moment.", element->GetText() );

+		element->SetText("The driver");

+		XMLTest( "SetText() normal use. (self-closing)", "The driver", element->GetText() );

 

-		element->SetText("<b>He at once checked the horses, and, jumping to the ground, disappeared into the darkness.</b>");

-		XMLTest( "SetText() replace with tag-like text.", "<b>He at once checked the horses, and, jumping to the ground, disappeared into the darkness.</b>", element->GetText() );

+		element->SetText("<b>horses</b>");

+		XMLTest( "SetText() replace with tag-like text.", "<b>horses</b>", element->GetText() );

+		//doc.Print();

 

 		str = "<foo><bar>Text in nested element</bar></foo>";

 		doc.Parse( str );

 		element = doc.RootElement();

 		

-		element->SetText("I did not know what to do, the less as the howling of the wolves grew closer.");

-		XMLTest( "SetText() prefix to nested non-text children.", "I did not know what to do, the less as the howling of the wolves grew closer.", element->GetText() );

-	}

-

-

-	// --------SetBoolFirstChild()-----------

-	{

-		const char* str = "<foo></foo>";

-		XMLDocument doc;

-		doc.Parse( str );

-		XMLElement* element = doc.RootElement();

-

-		element->SetBoolFirstChild(true);

-		XMLTest( "SetBoolFirstChild() normal use (open/close).", "true", element->FirstChild()->ToElement()->Value() );

-

-		element->SetBoolFirstChild(false);

-		XMLTest( "SetBoolFirstChild() replace.", "false", element->FirstChild()->ToElement()->Value() );

+		element->SetText("wolves");

+		XMLTest( "SetText() prefix to nested non-text children.", "wolves", element->GetText() );

 

 		str = "<foo/>";

 		doc.Parse( str );

 		element = doc.RootElement();

-

-		element->SetBoolFirstChild(false);

-		XMLTest( "SetBoolFirstChild() normal use (self-closing).", "false", element->FirstChild()->ToElement()->Value() );

-	}

-

-

-	// --------BoolFirstChild()-----------

-	{

-		const char* str = "<foo><false /></foo>";

-		XMLDocument doc;

-		doc.Parse( str );

-		XMLElement* element = doc.RootElement();

-

-		XMLTest( "BoolFirstChild() normal use (open/close).", false, element->BoolFirstChild() );

-

-		str = "<foo><true /></foo>";

-		doc.Parse( str );

-		element = doc.RootElement();

-		XMLTest( "BoolFirstChild() normal use (open/close).", true, element->BoolFirstChild() );

-

-		str = "<foo></foo>";

-		doc.Parse( str );

-		element = doc.RootElement();

 		

-		element->SetBoolFirstChild(true);

-		XMLTest( "BoolFirstChild() after SetBoolFirstChild().", true, element->BoolFirstChild() );

+		element->SetText( "str" );

+		XMLTest( "SetText types", "str", element->GetText() );

 

-		element->SetBoolFirstChild(false);

-		XMLTest( "BoolFirstChild() after SetBoolFirstChild() replace.", false, element->BoolFirstChild() );

+		element->SetText( 1 );

+		XMLTest( "SetText types", "1", element->GetText() );

 

-		str = "<foo/>";

-		doc.Parse( str );

-		

-		element = doc.RootElement();

-		element->SetBoolFirstChild(false);

-		XMLTest( "BoolFirstChild() (self-closing) after SetBoolFirstChild() replace.", false, element->BoolFirstChild() );

+		element->SetText( 1U );

+		XMLTest( "SetText types", "1", element->GetText() );

+

+		element->SetText( true );

+		XMLTest( "SetText types", "1", element->GetText() ); // TODO: should be 'true'?

+

+		element->SetText( 1.5f );

+		XMLTest( "SetText types", "1.5", element->GetText() );

+

+		element->SetText( 1.5 );

+		XMLTest( "SetText types", "1.5", element->GetText() );

 	}