From 3f57d278e7b0cb8a6c34b6682ad3d8a2d1d3d3e8 Mon Sep 17 00:00:00 2001 From: Lee Thomason Date: Wed, 11 Jan 2012 15:30:03 -0800 Subject: [PATCH] complete, not working, XMLComment parser. --- tinyxml2.cpp | 124 ++++++++++++++++++++++++++++++++++++++++++++++++--- tinyxml2.h | 47 +++++++++++++++++-- tinyxml2.suo | Bin 25600 -> 25600 bytes 3 files changed, 161 insertions(+), 10 deletions(-) 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 = { "V6u!5VTI;2&rCvx^OX=EDw3dDWT??hqj;|G3%7-u!3OM}OCJb>SZW`yZ zA6wjlJcej89cE@RW?69chatu=CC(VbU}5{=mY6O3WsJduKid!4xo?rNHgE3RbI&>N z^FHS}rzh|6C-3poF*&~-h4KQ$a_q-nZY*F#{;P6z?Sn{B3UY6zXa`M`|!81Lojq^ENHkn@9XkN)p$OI`}&IT(+ z#RXvt8S?&T%u5KGHN!f9l{^9Ai%S}5CU-M*mx6}E(@eYqjo;$r# zAjmMW-GNk{7EfN&;db1G1+x=v=4LE;$=AQ*b}d6TZ_Y=*T`w!+P`$^8;T;Ox zE*`^N+>eXJ7A)8&DT$v#6*#n0pyQl$F&j*@_q9}D*rsLoIF2DlH34%X;V?5$nvej6 z!vI;-kMDNsWC1#$-=D>C=jh5oNU!s~0>j;aMQaexyR~>4RkL)Za5q-su|uEcovS=n zOSbR@SS<`f-Jrm9DY4{AF^rnJe3s%UuDRY!kGMr1OP)?TR01O4wnvMzF^M4!?t0ab zQB9_c4D1XA)#5lV6TGKB2j7oAR}jvi30Hk|H5{fzJZ@gvSS0z(|Az zFjcI_@~Z;HWpaP%Qf_i`l4=g)k3^726mkZ*Vfu31DOw>6wU^*AWxh-~_0DaB=0 z;XP8O8C#Sw+088JfdR#??Z#gM14Ub(nFBtjH0jlczot^De?_#Eq4j z!z_ooLCbt<&>LxDLJUVVI2}+i-y=oiOGaTaT#D{zkpZ(7=b{2}6r*}1vyxl{ z&&rFWY;e|gGVGc<)0%eFpt|6Gt(tg}xHv&}Kgm+hay>8C;9k9&uVA--yPjC0hRL)y zwS_bZY#LIF2z#S|Qw?o&(+~z5GHo*7NGfUU$DfU3m<{RIs-MfSPg!65ehX(}T`bp0 zvw%e0h|@78%$@*LF$Y64Mk+fSBL#Z|Sen`(p?cW#Axw$Ggu0tG^l7To&A5^j?x!3( zaJ_k7249N-7n?;^{V6MrrDSF=&5Q>vT59?Z(%A`2l?n*?6qrwlY|7k98d&_YMT_C2 ziFL~x<*Idce8gsx*sABhz@q)*oPFFuZivh1n-mfAGF{EI>7Z>JB8Iq7vQ?NBisn>y17;^%Hi7XZP?b)z@~FP-tQQp-J`A=ICgh1 zTLgD^UuC;4F-2{V`PgPhX``YQ{S=ov>es`Iai~k&TDj&XJqBngai*(@kE9=UP4ZhO zKj_W2esy&5fGy9P^dDOm&^M5a^LzGV-cLlfi&W46)Ls>O_8J+f;avu3_NrL3CgO60 zqDstk3-EMDCDJB(L{ee^zXw#9-7EbCWI9gOOH*QP>U`THO`XgfpJ@};IsP2(-k;!- z3lph3Is7KVYNYkwKUyjw7|2kt(Ky-{$DKUtqrOkJ8b|gF{dVw*^}>yU;lInC9a2h{ NNnhx9^E6^S{{mRar~d!| delta 1962 zcmYjSUrbYH6u%b=mU^kB)KcrUlzJ&eYi$9cQs`P*5wL}V6(tra&^R=ke@HW#*$gmd zVwNcOXACAv*s}PrxD72?Hll_EV$9|YEXIeuIA4}MEiU0nsvhTs!ErK-)!czO|vzpkjo)m!FqjC+reW|M{@(>kMc($JMlF`S5qQXWs5C{}E)bVMBE`9YjL;<#s84EVuj#I=|cXS`a(ZCdjaardWW1@Nv1)N@ zr;;K&Fk{nW%AzS4&< zZ>mnvD+bZN@rc;#1tK8N$~=H>R7+ zEGIw8YL8;p;$91+gjlOYa?b$K>_E#NJIr;r8Pzi`71VWFk~iSTS`*VRgpClJRSZfe zirgLKs0RPl8F8#WNX2ttAuM3puFBFjjt6@?St;*Vig@K$@?Jt&M|ZSYn+UGPTyO@B zS;;WQ%3TCk1+T|I={vAoUyBsA+N8(8Pok{uG@OIxT#mbee!C04fWAO(zytL9Sb3k* zJsHuAO=8(zCD>~opL)&EMw>A1)iF}zF?%-dcFM$qhm9gNicF`73yn%f^<+SUe4mj& zpKYGo?@?>Z5hzP5o#i%8`W>tgzx(y@`jwfY$wk!SPC&_bW1H_oc5B&hXRJ&&+4uyF z!hX!V^vou}5Un-M$z(?e_(_yz`Xu0_Y72sD`^Eovg4b<9ja zz_Lrh+p$vahoMcR5p!U!)yl>^Qme&$tq$i~h0HJrH1;;sw1pTN&4D)DIUvc-COIyuErz6HWK8m7bg2Vu&8ihwg2;?UneB#