Merge remote-tracking branch 'sniperbat/master'

This commit is contained in:
Lee Thomason 2012-06-04 16:50:30 -07:00
commit 6e0e38b372
2 changed files with 19 additions and 9 deletions

View File

@ -1501,13 +1501,14 @@ void XMLDocument::PrintError() const
} }
XMLPrinter::XMLPrinter( FILE* file ) : XMLPrinter::XMLPrinter( FILE* file, bool compact ) :
elementJustOpened( false ), elementJustOpened( false ),
firstElement( true ), firstElement( true ),
fp( file ), fp( file ),
depth( 0 ), depth( 0 ),
textDepth( -1 ), textDepth( -1 ),
processEntities( true ) processEntities( true ),
compactMode( compact )
{ {
for( int i=0; i<ENTITY_RANGE; ++i ) { for( int i=0; i<ENTITY_RANGE; ++i ) {
entityFlag[i] = false; entityFlag[i] = false;
@ -1627,7 +1628,7 @@ void XMLPrinter::OpenElement( const char* name )
} }
stack.Push( name ); stack.Push( name );
if ( textDepth < 0 && !firstElement ) { if ( textDepth < 0 && !firstElement && !compactMode ) {
Print( "\n" ); Print( "\n" );
PrintSpace( depth ); PrintSpace( depth );
} }
@ -1689,7 +1690,7 @@ void XMLPrinter::CloseElement()
Print( "/>" ); Print( "/>" );
} }
else { else {
if ( textDepth < 0 ) { if ( textDepth < 0 && !compactMode) {
Print( "\n" ); Print( "\n" );
PrintSpace( depth ); PrintSpace( depth );
} }
@ -1698,7 +1699,7 @@ void XMLPrinter::CloseElement()
if ( textDepth == depth ) if ( textDepth == depth )
textDepth = -1; textDepth = -1;
if ( depth == 0 ) if ( depth == 0 && !compactMode)
Print( "\n" ); Print( "\n" );
elementJustOpened = false; elementJustOpened = false;
} }
@ -1734,7 +1735,7 @@ void XMLPrinter::PushComment( const char* comment )
if ( elementJustOpened ) { if ( elementJustOpened ) {
SealElement(); SealElement();
} }
if ( textDepth < 0 && !firstElement ) { if ( textDepth < 0 && !firstElement && !compactMode) {
Print( "\n" ); Print( "\n" );
PrintSpace( depth ); PrintSpace( depth );
} }
@ -1748,7 +1749,7 @@ void XMLPrinter::PushDeclaration( const char* value )
if ( elementJustOpened ) { if ( elementJustOpened ) {
SealElement(); SealElement();
} }
if ( textDepth < 0 && !firstElement) { if ( textDepth < 0 && !firstElement && !compactMode) {
Print( "\n" ); Print( "\n" );
PrintSpace( depth ); PrintSpace( depth );
} }
@ -1762,7 +1763,7 @@ void XMLPrinter::PushUnknown( const char* value )
if ( elementJustOpened ) { if ( elementJustOpened ) {
SealElement(); SealElement();
} }
if ( textDepth < 0 && !firstElement ) { if ( textDepth < 0 && !firstElement && !compactMode) {
Print( "\n" ); Print( "\n" );
PrintSpace( depth ); PrintSpace( depth );
} }

View File

@ -1329,7 +1329,7 @@ public:
this will print to the FILE. Else it will print this will print to the FILE. Else it will print
to memory, and the result is available in CStr() to memory, and the result is available in CStr()
*/ */
XMLPrinter( FILE* file=0 ); XMLPrinter( FILE* file=0, bool compact = false );
~XMLPrinter() {} ~XMLPrinter() {}
/** If streaming, write the BOM and declaration. */ /** If streaming, write the BOM and declaration. */
@ -1378,6 +1378,14 @@ public:
*/ */
const int CStrSize()const{ return buffer.Size(); } const int CStrSize()const{ return buffer.Size(); }
/**
Set printer to compact mode, for printing without '\n' and space,
let output file smaller.
*/
void SetCompactMode( bool on ){ compactMode = on; }
bool IsCompactMode()const{ return compactMode; };
private: private:
void SealElement(); void SealElement();
void PrintSpace( int depth ); void PrintSpace( int depth );
@ -1390,6 +1398,7 @@ private:
int depth; int depth;
int textDepth; int textDepth;
bool processEntities; bool processEntities;
bool compactMode;
enum { enum {
ENTITY_RANGE = 64, ENTITY_RANGE = 64,