Keep indentation control fully inside the XMLPrinter. You'll have to subclass it to override its standard behaviour by overwriting CompactMode().

This commit is contained in:
Uli Kusterer 2014-02-20 11:50:22 +01:00
parent 07ac762b80
commit 5d1d27e88b
2 changed files with 6 additions and 6 deletions

View File

@ -1323,7 +1323,6 @@ void XMLElement::SetBoolFirstChild( bool inBool )
else if( !FirstChild() ) {
theBoolElem = GetDocument()->NewElement( inBool ? "true" : "false" );
InsertFirstChild( theBoolElem );
SetForceCompactMode(true);
}
}
@ -2190,7 +2189,9 @@ bool XMLPrinter::VisitEnter( const XMLDocument& doc )
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::VisitEnter( const XMLElement& element, const XMLAttribute* attr
bool XMLPrinter::VisitExit( const XMLElement& element )
{
CloseElement( _compactMode ? true : element.GetForceCompactMode() );
CloseElement( CompactMode(element) );
return true;
}

View File

@ -822,9 +822,6 @@ public:
// 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 @@ public:
}
protected:
virtual bool CompactMode( const XMLElement& elem ) { return _compactMode; };
void SealElement();
bool _elementJustOpened;
DynArray< const char*, 10 > _stack;