Quellcode durchsuchen

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

Uli Kusterer vor 12 Jahren
Ursprung
Commit
5d1d27e88b
2 geänderte Dateien mit 6 neuen und 6 gelöschten Zeilen
  1. 4 3
      tinyxml2.cpp
  2. 2 3
      tinyxml2.h

+ 4 - 3
tinyxml2.cpp

@@ -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;
 }
 

+ 2 - 3
tinyxml2.h

@@ -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;