Keep indentation control fully inside the XMLPrinter. You'll have to subclass it to override its standard behaviour by overwriting CompactMode().
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 5117986..beaeeb8 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -1323,7 +1323,6 @@
else if( !FirstChild() ) {
theBoolElem = GetDocument()->NewElement( inBool ? "true" : "false" );
InsertFirstChild( theBoolElem );
- SetForceCompactMode(true);
}
}
@@ -2190,7 +2189,9 @@
bool XMLPrinter::VisitEnter( const XMLElement& element, const XMLAttribute* attribute )
{
- OpenElement( element.Name(), _compactMode ? true : element.Parent()->GetForceCompactMode() );
+ const XMLElement* parentElem = element.Parent()->ToElement();
+ bool compactMode = parentElem ? CompactMode(*parentElem) : _compactMode;
+ OpenElement( element.Name(), compactMode );
while ( attribute ) {
PushAttribute( attribute->Name(), attribute->Value() );
attribute = attribute->Next();
@@ -2201,7 +2202,7 @@
bool XMLPrinter::VisitExit( const XMLElement& element )
{
- CloseElement( _compactMode ? true : element.GetForceCompactMode() );
+ CloseElement( CompactMode(element) );
return true;
}