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;
}
diff --git a/tinyxml2.h b/tinyxml2.h
index 431088d..a584010 100755
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -822,9 +822,6 @@
// internal
virtual char* ParseDeep( char*, StrPair* );
- bool GetForceCompactMode() const { if( _forceCompactMode || !Parent() ) return _forceCompactMode; return Parent()->GetForceCompactMode(); };
- void SetForceCompactMode( bool b ) { _forceCompactMode = b; };
-
protected:
XMLNode( XMLDocument* );
virtual ~XMLNode();
@@ -2079,6 +2076,8 @@
}
protected:
+ virtual bool CompactMode( const XMLElement& elem ) { return _compactMode; };
+
void SealElement();
bool _elementJustOpened;
DynArray< const char*, 10 > _stack;