Merge pull request #513 from leethomason/bool-write

Bool serialization.
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index e9b275b..ad3acbf 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -368,6 +368,19 @@
 

 // --------- XMLUtil ----------- //

 

+const char* XMLUtil::writeBoolTrue  = "true";

+const char* XMLUtil::writeBoolFalse = "false";

+

+void XMLUtil::SetBoolSerialization(const char* writeTrue, const char* writeFalse)

+{

+	static const char* defTrue  = "true";

+	static const char* defFalse = "false";

+

+	writeBoolTrue = (writeTrue) ? writeTrue : defTrue;

+	writeBoolFalse = (writeFalse) ? writeFalse : defFalse;

+}

+

+

 const char* XMLUtil::ReadBOM( const char* p, bool* bom )

 {

     TIXMLASSERT( p );

@@ -545,7 +558,7 @@
 

 void XMLUtil::ToStr( bool v, char* buffer, int bufferSize )

 {

-    TIXML_SNPRINTF( buffer, bufferSize, "%s", v ? "true" : "false" );

+    TIXML_SNPRINTF( buffer, bufferSize, "%s", v ? writeBoolTrue : writeBoolFalse);

 }

 

 /*

diff --git a/tinyxml2.h b/tinyxml2.h
index 034f002..25352ee 100755
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -527,7 +527,7 @@
 /*

 	Utility functionality.

 */

-class XMLUtil

+class TINYXML2_LIB XMLUtil

 {

 public:

     static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr )	{

@@ -605,6 +605,17 @@
     static bool	ToFloat( const char* str, float* value );

     static bool ToDouble( const char* str, double* value );

 	static bool ToInt64(const char* str, int64_t* value);

+

+	// Changes what is serialized for a boolean value.

+	// Default to "true" and "false". Shouldn't be changed

+	// unless you have a special testing or compatibility need.

+	// Be careful: static, global, & not thread safe.

+	// Be sure to set static const memory as parameters.

+	static void SetBoolSerialization(const char* writeTrue, const char* writeFalse);

+

+private:

+	static const char* writeBoolTrue;

+	static const char* writeBoolFalse;

 };

 

 

diff --git a/xmltest.cpp b/xmltest.cpp
index b6bb76f..7c11389 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -753,6 +753,18 @@
 			XMLTest("Attribute: bool", true, element->BoolAttribute("attrib"), true);

 		}

 		{

+			element->SetAttribute("attrib", true);

+			const char* result = element->Attribute("attrib");

+			XMLTest("Bool true is 'true'", "true", result);

+

+			XMLUtil::SetBoolSerialization("1", "0");

+			element->SetAttribute("attrib", true);

+			result = element->Attribute("attrib");

+			XMLTest("Bool true is '1'", "1", result);

+

+			XMLUtil::SetBoolSerialization(0, 0);

+		}

+		{

 			element->SetAttribute("attrib", 100.0);

 			double v = 0;

 			element->QueryDoubleAttribute("attrib", &v);