فهرست منبع

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

Uli Kusterer 12 سال پیش
والد
کامیت
5d1d27e88b
2فایلهای تغییر یافته به همراه6 افزوده شده و 6 حذف شده
  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;