added whitespace=collapse support. tests work. code needs review
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 8069d04..b20d9f0 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -23,10 +23,12 @@
#include "tinyxml2.h"
-#include <cstdio>
-#include <cstdlib>
-#include <new>
-#include <cstddef>
+#include <new> // yes, this one new style header, is in the Android SDK.
+#ifdef ANDROID_NDK
+ #include <stddef.h>
+#else
+ #include <cstddef>
+#endif
using namespace tinyxml2;
@@ -156,6 +158,31 @@
}
+void StrPair::CollapseWhitespace()
+{
+ // Trim leading space.
+ start = XMLUtil::SkipWhiteSpace( start );
+
+ if ( start && *start ) {
+ char* p = start; // the read pointer
+ char* q = start; // the write pointer
+
+ while( *p ) {
+ if ( XMLUtil::IsWhiteSpace( *p )) {
+ p = XMLUtil::SkipWhiteSpace( p );
+ if ( *p == 0 )
+ break; // don't write to q; this trims the trailing space.
+ *q = ' ';
+ ++q;
+ }
+ *q = *p;
+ ++q;
+ ++p;
+ }
+ *q = 0;
+ }
+}
+
const char* StrPair::GetStr()
{
@@ -232,6 +259,11 @@
}
*q = 0;
}
+ // The loop below has plenty going on, and this
+ // is a less useful mode. Break it out.
+ if ( flags & COLLAPSE_WHITESPACE ) {
+ CollapseWhitespace();
+ }
flags = (flags & NEEDS_DELETE);
}
return start;
@@ -815,7 +847,11 @@
return p;
}
else {
- p = value.ParseText( p, "<", document->ProcessEntities() ? StrPair::TEXT_ELEMENT : StrPair::TEXT_ELEMENT_LEAVE_ENTITIES );
+ int flags = document->ProcessEntities() ? StrPair::TEXT_ELEMENT : StrPair::TEXT_ELEMENT_LEAVE_ENTITIES;
+ if ( document->WhitespaceMode() == COLLAPSE_WHITESPACE )
+ flags |= StrPair::COLLAPSE_WHITESPACE;
+
+ p = value.ParseText( p, "<", flags );
if ( !p ) {
document->SetError( XML_ERROR_PARSING_TEXT, start, 0 );
}
@@ -1416,11 +1452,12 @@
// --------- XMLDocument ----------- //
-XMLDocument::XMLDocument( bool _processEntities ) :
+XMLDocument::XMLDocument( bool _processEntities, Whitespace _whitespace ) :
XMLNode( 0 ),
writeBOM( false ),
processEntities( _processEntities ),
errorID( 0 ),
+ whitespace( _whitespace ),
errorStr1( 0 ),
errorStr2( 0 ),
charBuffer( 0 )