complete, not working, XMLComment parser.
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 @@
}
-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 @@
const char* cdataHeader = { "<![CDATA[" };
if ( XMLNode::StringEqual( p, xmlHeader, 5 ) ) {
-
+ returnNode = new XMLComment();
}
else {
TIXMLASSERT( 0 );
}
- return true;
+ *node = returnNode;
+ return p;
}