XMLPrinter: Fix first line indentation

Fix indentation of first line when called with !compactMode.
This commit is contained in:
Chow Loong Jin
2020-03-26 16:30:37 +08:00
parent bd5950bb02
commit 6a514399c2
2 changed files with 24 additions and 23 deletions

View File

@@ -2659,22 +2659,33 @@ void XMLPrinter::PushHeader( bool writeBOM, bool writeDec )
} }
} }
void XMLPrinter::PrepareForNewNode( bool compactMode )
void XMLPrinter::OpenElement( const char* name, bool compactMode )
{ {
SealElementIfJustOpened(); SealElementIfJustOpened();
_stack.Push( name );
if ( _textDepth < 0 && !_firstElement && !compactMode ) { if ( compactMode ) {
return;
}
if ( _firstElement ) {
PrintSpace (_depth);
} else if ( _textDepth < 0) {
Putc( '\n' ); Putc( '\n' );
PrintSpace( _depth ); PrintSpace( _depth );
} }
_firstElement = false;
}
void XMLPrinter::OpenElement( const char* name, bool compactMode )
{
PrepareForNewNode( compactMode );
_stack.Push( name );
Write ( "<" ); Write ( "<" );
Write ( name ); Write ( name );
_elementJustOpened = true; _elementJustOpened = true;
_firstElement = false;
++_depth; ++_depth;
} }
@@ -2850,12 +2861,7 @@ void XMLPrinter::PushText( double value )
void XMLPrinter::PushComment( const char* comment ) void XMLPrinter::PushComment( const char* comment )
{ {
SealElementIfJustOpened(); PrepareForNewNode( _compactMode );
if ( _textDepth < 0 && !_firstElement && !_compactMode) {
Putc( '\n' );
PrintSpace( _depth );
}
_firstElement = false;
Write( "<!--" ); Write( "<!--" );
Write( comment ); Write( comment );
@@ -2865,12 +2871,7 @@ void XMLPrinter::PushComment( const char* comment )
void XMLPrinter::PushDeclaration( const char* value ) void XMLPrinter::PushDeclaration( const char* value )
{ {
SealElementIfJustOpened(); PrepareForNewNode( _compactMode );
if ( _textDepth < 0 && !_firstElement && !_compactMode) {
Putc( '\n' );
PrintSpace( _depth );
}
_firstElement = false;
Write( "<?" ); Write( "<?" );
Write( value ); Write( value );
@@ -2880,12 +2881,7 @@ void XMLPrinter::PushDeclaration( const char* value )
void XMLPrinter::PushUnknown( const char* value ) void XMLPrinter::PushUnknown( const char* value )
{ {
SealElementIfJustOpened(); PrepareForNewNode( _compactMode );
if ( _textDepth < 0 && !_firstElement && !_compactMode) {
Putc( '\n' );
PrintSpace( _depth );
}
_firstElement = false;
Write( "<!" ); Write( "<!" );
Write( value ); Write( value );

View File

@@ -2332,6 +2332,11 @@ protected:
DynArray< const char*, 10 > _stack; DynArray< const char*, 10 > _stack;
private: private:
/**
Prepares to write a new node. This includes sealing an element that was
just opened, and writing any whitespace necessary if not in compact mode.
*/
void PrepareForNewNode( bool compactMode );
void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities. void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities.
bool _firstElement; bool _firstElement;