summaryrefslogtreecommitdiff
path: root/src/xmlreader.cpp
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2006-06-06 07:52:12 +0000
committerMike Buland <eichlan@xagasoft.com>2006-06-06 07:52:12 +0000
commit5c3263289b3e10c49badd416e12075af0f2f294e (patch)
tree9d0b1f3bb167f794ec18466f94f7e8ce6b1d02fa /src/xmlreader.cpp
parent579a58106e541ef4a005eceaf4577048c69fa539 (diff)
downloadlibbu++-5c3263289b3e10c49badd416e12075af0f2f294e.tar.gz
libbu++-5c3263289b3e10c49badd416e12075af0f2f294e.tar.bz2
libbu++-5c3263289b3e10c49badd416e12075af0f2f294e.tar.xz
libbu++-5c3263289b3e10c49badd416e12075af0f2f294e.zip
Added comment handling to the XML system. It just discards them completely, but
later it will retain them so that even after modifying the nodes the comments could be kept in place so they aren't destroyed if something changes. Also added necesarry functions to the XmlDocument that lets the tests run again and fixes some issues with multiple ownernership when transfering the contents to a new document.
Diffstat (limited to 'src/xmlreader.cpp')
-rw-r--r--src/xmlreader.cpp43
1 files changed, 41 insertions, 2 deletions
diff --git a/src/xmlreader.cpp b/src/xmlreader.cpp
index 76c6258..70fd1d7 100644
--- a/src/xmlreader.cpp
+++ b/src/xmlreader.cpp
@@ -332,8 +332,7 @@ bool XmlReader::content()
332 } 332 }
333 setContent( fbContent.getData() ); 333 setContent( fbContent.getData() );
334 } 334 }
335 usedChar(); 335 usedChar( 2 );
336 usedChar();
337 gcall( ws() ); 336 gcall( ws() );
338 FlexBuf fbName; 337 FlexBuf fbName;
339 while( true ) 338 while( true )
@@ -368,6 +367,46 @@ bool XmlReader::content()
368 throw XmlException("Malformed close tag."); 367 throw XmlException("Malformed close tag.");
369 } 368 }
370 } 369 }
370 else if( getChar(1) == '!' )
371 {
372 // We know it's a comment, let's see if it's proper
373 if( getChar(2) != '-' ||
374 getChar(3) != '-' )
375 {
376 // Not a valid XML comment
377 throw XmlException("Malformed comment start tag found.");
378 }
379
380 usedChar( 4 );
381
382 // Now burn text until we find the close tag
383 for(;;)
384 {
385 if( getChar() == '-' )
386 {
387 if( getChar( 1 ) == '-' )
388 {
389 // The next one has to be a '>' now
390 if( getChar( 2 ) != '>' )
391 {
392 throw XmlException("Malformed comment close tag found. You cannot have a '--' that isn't followed by a '>' in a comment.");
393 }
394 usedChar( 3 );
395 break;
396 }
397 else
398 {
399 // Found a dash followed by a non dash, that's ok...
400 usedChar( 2 );
401 }
402 }
403 else
404 {
405 // Burn comment chars
406 usedChar();
407 }
408 }
409 }
371 else 410 else
372 { 411 {
373 if( fbContent.getLength() > 0 ) 412 if( fbContent.getLength() > 0 )