Merge remote-tracking branch 'origin/master' into clone
This commit is contained in:
79
tinyxml2.cpp
79
tinyxml2.cpp
@@ -368,6 +368,19 @@ const char* StrPair::GetStr()
|
||||
|
||||
// --------- XMLUtil ----------- //
|
||||
|
||||
const char* XMLUtil::writeBoolTrue = "true";
|
||||
const char* XMLUtil::writeBoolFalse = "false";
|
||||
|
||||
void XMLUtil::SetBoolSerialization(const char* writeTrue, const char* writeFalse)
|
||||
{
|
||||
static const char* defTrue = "true";
|
||||
static const char* defFalse = "false";
|
||||
|
||||
writeBoolTrue = (writeTrue) ? writeTrue : defTrue;
|
||||
writeBoolFalse = (writeFalse) ? writeFalse : defFalse;
|
||||
}
|
||||
|
||||
|
||||
const char* XMLUtil::ReadBOM( const char* p, bool* bom )
|
||||
{
|
||||
TIXMLASSERT( p );
|
||||
@@ -545,7 +558,7 @@ void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize )
|
||||
|
||||
void XMLUtil::ToStr( bool v, char* buffer, int bufferSize )
|
||||
{
|
||||
TIXML_SNPRINTF( buffer, bufferSize, "%s", v ? "true" : "false" );
|
||||
TIXML_SNPRINTF( buffer, bufferSize, "%s", v ? writeBoolTrue : writeBoolFalse);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -665,46 +678,34 @@ char* XMLDocument::Identify( char* p, XMLNode** node )
|
||||
TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLDeclaration ) ); // use same memory pool
|
||||
XMLNode* returnNode = 0;
|
||||
if ( XMLUtil::StringEqual( p, xmlHeader, xmlHeaderLen ) ) {
|
||||
TIXMLASSERT( sizeof( XMLDeclaration ) == _commentPool.ItemSize() );
|
||||
returnNode = new (_commentPool.Alloc()) XMLDeclaration( this );
|
||||
returnNode = CreateUnlinkedNode<XMLDeclaration>( _commentPool );
|
||||
returnNode->_parseLineNum = _parseCurLineNum;
|
||||
returnNode->_memPool = &_commentPool;
|
||||
p += xmlHeaderLen;
|
||||
}
|
||||
else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) {
|
||||
TIXMLASSERT( sizeof( XMLComment ) == _commentPool.ItemSize() );
|
||||
returnNode = new (_commentPool.Alloc()) XMLComment( this );
|
||||
returnNode = CreateUnlinkedNode<XMLComment>( _commentPool );
|
||||
returnNode->_parseLineNum = _parseCurLineNum;
|
||||
returnNode->_memPool = &_commentPool;
|
||||
p += commentHeaderLen;
|
||||
}
|
||||
else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) {
|
||||
TIXMLASSERT( sizeof( XMLText ) == _textPool.ItemSize() );
|
||||
XMLText* text = new (_textPool.Alloc()) XMLText( this );
|
||||
XMLText* text = CreateUnlinkedNode<XMLText>( _textPool );
|
||||
returnNode = text;
|
||||
returnNode->_parseLineNum = _parseCurLineNum;
|
||||
returnNode->_memPool = &_textPool;
|
||||
p += cdataHeaderLen;
|
||||
text->SetCData( true );
|
||||
}
|
||||
else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) {
|
||||
TIXMLASSERT( sizeof( XMLUnknown ) == _commentPool.ItemSize() );
|
||||
returnNode = new (_commentPool.Alloc()) XMLUnknown( this );
|
||||
returnNode = CreateUnlinkedNode<XMLUnknown>( _commentPool );
|
||||
returnNode->_parseLineNum = _parseCurLineNum;
|
||||
returnNode->_memPool = &_commentPool;
|
||||
p += dtdHeaderLen;
|
||||
}
|
||||
else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) {
|
||||
TIXMLASSERT( sizeof( XMLElement ) == _elementPool.ItemSize() );
|
||||
returnNode = new (_elementPool.Alloc()) XMLElement( this );
|
||||
returnNode = CreateUnlinkedNode<XMLElement>( _elementPool );
|
||||
returnNode->_parseLineNum = _parseCurLineNum;
|
||||
returnNode->_memPool = &_elementPool;
|
||||
p += elementHeaderLen;
|
||||
}
|
||||
else {
|
||||
TIXMLASSERT( sizeof( XMLText ) == _textPool.ItemSize() );
|
||||
returnNode = new (_textPool.Alloc()) XMLText( this );
|
||||
returnNode->_memPool = &_textPool;
|
||||
returnNode = CreateUnlinkedNode<XMLText>( _textPool );
|
||||
returnNode->_parseLineNum = _parseCurLineNum; // Report line of first non-whitespace character
|
||||
p = start; // Back it up, all the text counts.
|
||||
_parseCurLineNum = startLine;
|
||||
@@ -966,7 +967,7 @@ const XMLElement* XMLNode::PreviousSiblingElement( const char* name ) const
|
||||
}
|
||||
|
||||
|
||||
char* XMLNode::ParseDeep( char* p, StrPair* parentEnd, int* curLineNumPtr )
|
||||
char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr )
|
||||
{
|
||||
// This is a recursive method, but thinking about it "at the current level"
|
||||
// it is a pretty simple flat list:
|
||||
@@ -1031,8 +1032,8 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEnd, int* curLineNumPtr )
|
||||
if ( ele ) {
|
||||
// We read the end tag. Return it to the parent.
|
||||
if ( ele->ClosingType() == XMLElement::CLOSING ) {
|
||||
if ( parentEnd ) {
|
||||
ele->_value.TransferTo( parentEnd );
|
||||
if ( parentEndTag ) {
|
||||
ele->_value.TransferTo( parentEndTag );
|
||||
}
|
||||
node->_memPool->SetTracked(); // created and then immediately deleted.
|
||||
DeleteNode( node );
|
||||
@@ -1144,6 +1145,7 @@ XMLNode* XMLText::ShallowClone( XMLDocument* doc ) const
|
||||
|
||||
bool XMLText::ShallowEqual( const XMLNode* compare ) const
|
||||
{
|
||||
TIXMLASSERT( compare );
|
||||
const XMLText* text = compare->ToText();
|
||||
return ( text && XMLUtil::StringEqual( text->Value(), Value() ) );
|
||||
}
|
||||
@@ -1459,7 +1461,7 @@ void XMLAttribute::SetAttribute( float v )
|
||||
|
||||
// --------- XMLElement ---------- //
|
||||
XMLElement::XMLElement( XMLDocument* doc ) : XMLNode( doc ),
|
||||
_closingType( 0 ),
|
||||
_closingType( OPEN ),
|
||||
_rootAttribute( 0 )
|
||||
{
|
||||
}
|
||||
@@ -1849,6 +1851,7 @@ XMLAttribute* XMLElement::CreateAttribute()
|
||||
{
|
||||
TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() );
|
||||
XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();
|
||||
TIXMLASSERT( attrib );
|
||||
attrib->_memPool = &_document->_attributePool;
|
||||
attrib->_memPool->SetTracked();
|
||||
return attrib;
|
||||
@@ -1858,7 +1861,7 @@ XMLAttribute* XMLElement::CreateAttribute()
|
||||
// <ele></ele>
|
||||
// <ele>foo<b>bar</b></ele>
|
||||
//
|
||||
char* XMLElement::ParseDeep( char* p, StrPair* strPair, int* curLineNumPtr )
|
||||
char* XMLElement::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr )
|
||||
{
|
||||
// Read the element name.
|
||||
p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr );
|
||||
@@ -1877,11 +1880,11 @@ char* XMLElement::ParseDeep( char* p, StrPair* strPair, int* curLineNumPtr )
|
||||
}
|
||||
|
||||
p = ParseAttributes( p, curLineNumPtr );
|
||||
if ( !p || !*p || _closingType ) {
|
||||
if ( !p || !*p || _closingType != OPEN ) {
|
||||
return p;
|
||||
}
|
||||
|
||||
p = XMLNode::ParseDeep( p, strPair, curLineNumPtr );
|
||||
p = XMLNode::ParseDeep( p, parentEndTag, curLineNumPtr );
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -1967,12 +1970,12 @@ const char* XMLDocument::_errorNames[XML_ERROR_COUNT] = {
|
||||
};
|
||||
|
||||
|
||||
XMLDocument::XMLDocument( bool processEntities, Whitespace whitespace ) :
|
||||
XMLDocument::XMLDocument( bool processEntities, Whitespace whitespaceMode ) :
|
||||
XMLNode( 0 ),
|
||||
_writeBOM( false ),
|
||||
_processEntities( processEntities ),
|
||||
_errorID(XML_SUCCESS),
|
||||
_whitespace( whitespace ),
|
||||
_whitespaceMode( whitespaceMode ),
|
||||
_errorLineNum( 0 ),
|
||||
_charBuffer( 0 ),
|
||||
_parseCurLineNum( 0 )
|
||||
@@ -2031,9 +2034,7 @@ void XMLDocument::DeepCopy(XMLDocument* target)
|
||||
|
||||
XMLElement* XMLDocument::NewElement( const char* name )
|
||||
{
|
||||
TIXMLASSERT( sizeof( XMLElement ) == _elementPool.ItemSize() );
|
||||
XMLElement* ele = new (_elementPool.Alloc()) XMLElement( this );
|
||||
ele->_memPool = &_elementPool;
|
||||
XMLElement* ele = CreateUnlinkedNode<XMLElement>( _elementPool );
|
||||
ele->SetName( name );
|
||||
return ele;
|
||||
}
|
||||
@@ -2041,9 +2042,7 @@ XMLElement* XMLDocument::NewElement( const char* name )
|
||||
|
||||
XMLComment* XMLDocument::NewComment( const char* str )
|
||||
{
|
||||
TIXMLASSERT( sizeof( XMLComment ) == _commentPool.ItemSize() );
|
||||
XMLComment* comment = new (_commentPool.Alloc()) XMLComment( this );
|
||||
comment->_memPool = &_commentPool;
|
||||
XMLComment* comment = CreateUnlinkedNode<XMLComment>( _commentPool );
|
||||
comment->SetValue( str );
|
||||
return comment;
|
||||
}
|
||||
@@ -2051,9 +2050,7 @@ XMLComment* XMLDocument::NewComment( const char* str )
|
||||
|
||||
XMLText* XMLDocument::NewText( const char* str )
|
||||
{
|
||||
TIXMLASSERT( sizeof( XMLText ) == _textPool.ItemSize() );
|
||||
XMLText* text = new (_textPool.Alloc()) XMLText( this );
|
||||
text->_memPool = &_textPool;
|
||||
XMLText* text = CreateUnlinkedNode<XMLText>( _textPool );
|
||||
text->SetValue( str );
|
||||
return text;
|
||||
}
|
||||
@@ -2061,9 +2058,7 @@ XMLText* XMLDocument::NewText( const char* str )
|
||||
|
||||
XMLDeclaration* XMLDocument::NewDeclaration( const char* str )
|
||||
{
|
||||
TIXMLASSERT( sizeof( XMLDeclaration ) == _commentPool.ItemSize() );
|
||||
XMLDeclaration* dec = new (_commentPool.Alloc()) XMLDeclaration( this );
|
||||
dec->_memPool = &_commentPool;
|
||||
XMLDeclaration* dec = CreateUnlinkedNode<XMLDeclaration>( _commentPool );
|
||||
dec->SetValue( str ? str : "xml version=\"1.0\" encoding=\"UTF-8\"" );
|
||||
return dec;
|
||||
}
|
||||
@@ -2071,9 +2066,7 @@ XMLDeclaration* XMLDocument::NewDeclaration( const char* str )
|
||||
|
||||
XMLUnknown* XMLDocument::NewUnknown( const char* str )
|
||||
{
|
||||
TIXMLASSERT( sizeof( XMLUnknown ) == _commentPool.ItemSize() );
|
||||
XMLUnknown* unk = new (_commentPool.Alloc()) XMLUnknown( this );
|
||||
unk->_memPool = &_commentPool;
|
||||
XMLUnknown* unk = CreateUnlinkedNode<XMLUnknown>( _commentPool );
|
||||
unk->SetValue( str );
|
||||
return unk;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user