diff --git a/tinyxml2.cpp b/tinyxml2.cpp index 018f9a9..7f5641e 100755 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -368,6 +368,25 @@ const char* StrPair::GetStr() // --------- XMLUtil ----------- // +char* XMLUtil::writeBoolTrue = "true"; +char* XMLUtil::writeBoolFalse = "false"; + +void XMLUtil::SetBool(const char* writeTrue, const char* writeFalse) +{ + static const char* defTrue = "true"; + static const char* defFalse = "false"; + if (writeTrue) + writeBoolTrue = (char*) writeTrue; + else + writeBoolTrue = (char*) defTrue; + + if (writeFalse) + writeBoolFalse = (char*) writeFalse; + else + writeBoolFalse = (char*) defFalse; +} + + const char* XMLUtil::ReadBOM( const char* p, bool* bom ) { TIXMLASSERT( p ); @@ -545,7 +564,7 @@ void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize ) 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 de589bd..53f411a 100755 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -527,7 +527,7 @@ enum XMLError { /* Utility functionality. */ -class XMLUtil +class TINYXML2_LIB XMLUtil { public: static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr ) { @@ -605,6 +605,19 @@ public: 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); + + // Default to "true" and "false". If you + // need different values, can assign them. (For instance + // if you need "true" to be "1".) + // Be careful: static, global, & not thread safe. + // Be sure to set static const memory as parameters. + // Shouldn't be set unless you have a special reason + // such as back-compatibility or testing. + static void SetBool(const char* writeTrue, const char* writeFalse); + +private: + static char* writeBoolTrue; + static char* writeBoolFalse; }; diff --git a/xmltest.cpp b/xmltest.cpp index b6bb76f..27c9665 100644 --- a/xmltest.cpp +++ b/xmltest.cpp @@ -752,6 +752,18 @@ int main( int argc, const char ** argv ) XMLTest("Attribute: bool", true, v, true); 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::SetBool("1", "0"); + element->SetAttribute("attrib", true); + result = element->Attribute("attrib"); + XMLTest("Bool true is '1'", "1", result); + + XMLUtil::SetBool(0, 0); + } { element->SetAttribute("attrib", 100.0); double v = 0;