diff --git a/tinyxml2.cpp b/tinyxml2.cpp index aa3788f..83bafb3 100644 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -7,6 +7,7 @@ using namespace tinyxml2; +// --------- CharBuffer ----------- // /*static*/ CharBuffer* CharBuffer::Construct( const char* in ) { size_t len = strlen( in ); @@ -24,22 +25,132 @@ using namespace tinyxml2; } -const char* XMLNode::SkipWhiteSpace( const char* p ) +// --------- XMLNode ----------- // + +XMLNode::XMLNode( XMLDocument* doc ) : + document( doc ), + parent( 0 ), + firstChild( 0 ), lastChild( 0 ), + prev( 0 ), next( 0 ) { - while( isspace( *p ) ) { - ++p; + +} + + +XMLNode::~XMLNode() +{ + XMLNode* node=firstChild; + while( node ) { + XMLNode* temp = node->next; + delete node; + node = temp; } +} + + +XMLNode* XMLNode::InsertEndChild( XMLNode* addThis ) +{ + if ( lastChild ) { + TIXMLASSERT( firstChild ); + TIXMLASSERT( lastChild->next == 0 ); + lastChild->next = addThis; + addThis->prev = lastChild; + lastChild = addThis; + + addThis->parent = this; + addThis->next = null; + } + else { + TIXMLASSERT( firstChild == 0 ); + firstChild = lastChild = addThis; + + addThis->parent = this; + addThis->prev = 0; + addThis->next = null; + } +} + + +const char* XMLNode::ParseText( char* p, const char* endTag, char** next ) +{ + TIXMLASSERT( endTag && *endTag ); + + char* start = SkipWhiteSpace( p ); + if ( !start ) + return; + + char endChar = *endTag; + p = start; + int length = strlen( endTag ); + + while ( *p ) { + if ( *p == endChar ) { + if ( strncmp( p, endTag, length ) == 0 ) { + *p = 0; + *next = p + length; + return start; + } + } + ++p; + } + return 0; +} + + +// --------- XMLComment ---------- // + +XMLComment::XMLComment( XMLDocument* doc ) : XMLNode( doc ) +{ +} + + +virtual XMLComment::~XMLComment() +{ + +} + + +virtual char* XMLComment::ParseDeep( char* p ) +{ + // Comment parses as text. + value = ParseText( p, "-->", &p ); return p; } +// --------- XMLDocument ----------- // XMLDocument::XMLDocument() : charBuffer( 0 ) { } -bool XMLDocument::Parse( const char* p ) +XMLDocument::~XMLDocument() +{ + delete root; + delete charBuffer; +} + + + +bool XMLDocument::Parse( const char* p ) +{ + charBuffer = CharBuffer.Construct( p ); + XMLNode* node = 0; + Identify( charBuffer., node ); + node->Parse( p ); +} + + +XMLComment* XMLDocument::newComment( XMLNode* parent ) +{ + +} + + + + +char* XMLDocument::Identify( char* p, XMLNode** node ) { XMLNode* returnNode = 0; @@ -62,11 +173,12 @@ bool XMLDocument::Parse( const char* p ) const char* cdataHeader = { "