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

View File

@ -1329,7 +1329,7 @@ public:
this will print to the FILE. Else it will print
to memory, and the result is available in CStr()
*/
XMLPrinter( FILE* file=0 );
XMLPrinter( FILE* file=0, bool compact = false );
~XMLPrinter() {}
/** If streaming, write the BOM and declaration. */
@ -1378,6 +1378,14 @@ public:
*/
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:
void SealElement();
void PrintSpace( int depth );
@ -1390,6 +1398,7 @@ private:
int depth;
int textDepth;
bool processEntities;
bool compactMode;
enum {
ENTITY_RANGE = 64,