diff --git a/tinyxml2.cpp b/tinyxml2.cpp index bdb626e..ab1fbb0 100644 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -70,7 +70,7 @@ struct Entity { }; static const int NUM_ENTITIES = 5; -static const Entity entities[NUM_ENTITIES] = +static const Entity entities[NUM_ENTITIES] = { { "quot", 4, DOUBLE_QUOTE }, { "amp", 3, '&' }, @@ -123,7 +123,7 @@ char* StrPair::ParseText( char* p, const char* endTag, int strFlags ) return p + length; } ++p; - } + } return 0; } @@ -137,7 +137,7 @@ char* StrPair::ParseName( char* p ) } while( *p && ( - XMLUtil::IsAlphaNum( (unsigned char) *p ) + XMLUtil::IsAlphaNum( (unsigned char) *p ) || *p == '_' || *p == ':' || (*p == '-' && p>start ) // can be in a name, but not lead it. @@ -166,7 +166,7 @@ void StrPair::CollapseWhitespace() while( *p ) { if ( XMLUtil::IsWhiteSpace( *p )) { p = XMLUtil::SkipWhiteSpace( p ); - if ( *p == 0 ) + if ( *p == 0 ) break; // don't write to q; this trims the trailing space. *q = ' '; ++q; @@ -231,7 +231,7 @@ const char* StrPair::GetStr() int i=0; for(; i(p); // Check for BOM: - if ( *(pu+0) == TIXML_UTF_LEAD_0 + if ( *(pu+0) == TIXML_UTF_LEAD_0 && *(pu+1) == TIXML_UTF_LEAD_1 - && *(pu+2) == TIXML_UTF_LEAD_2 ) + && *(pu+2) == TIXML_UTF_LEAD_2 ) { *bom = true; p += 3; @@ -292,7 +292,7 @@ void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length const unsigned long BYTE_MARK = 0x80; const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - if (input < 0x80) + if (input < 0x80) *length = 1; else if ( input < 0x800 ) *length = 2; @@ -306,22 +306,22 @@ void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length output += *length; // Scary scary fall throughs. - switch (*length) + switch (*length) { case 4: - --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 3: - --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 2: - --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 1: - --output; + --output; *output = (char)(input | FIRST_BYTE_MARK[*length]); } } @@ -359,7 +359,7 @@ const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length ) ucs += mult * (*q - 'a' + 10); else if ( *q >= 'A' && *q <= 'F' ) ucs += mult * (*q - 'A' + 10 ); - else + else return 0; mult *= 16; --q; @@ -382,7 +382,7 @@ const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length ) { if ( *q >= '0' && *q <= '9' ) ucs += mult * (*q - '0'); - else + else return 0; mult *= 10; --q; @@ -396,33 +396,33 @@ const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length ) } -void XMLUtil::ToStr( int v, char* buffer, int bufferSize ) +void XMLUtil::ToStr( int v, char* buffer, int bufferSize ) { - TIXML_SNPRINTF( buffer, bufferSize, "%d", v ); + TIXML_SNPRINTF( buffer, bufferSize, "%d", v ); } void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize ) { - TIXML_SNPRINTF( buffer, bufferSize, "%u", v ); + TIXML_SNPRINTF( buffer, bufferSize, "%u", v ); } void XMLUtil::ToStr( bool v, char* buffer, int bufferSize ) { - TIXML_SNPRINTF( buffer, bufferSize, "%d", v ? 1 : 0 ); + TIXML_SNPRINTF( buffer, bufferSize, "%d", v ? 1 : 0 ); } void XMLUtil::ToStr( float v, char* buffer, int bufferSize ) { - TIXML_SNPRINTF( buffer, bufferSize, "%f", v ); + TIXML_SNPRINTF( buffer, bufferSize, "%f", v ); } void XMLUtil::ToStr( double v, char* buffer, int bufferSize ) { - TIXML_SNPRINTF( buffer, bufferSize, "%f", v ); + TIXML_SNPRINTF( buffer, bufferSize, "%f", v ); } @@ -476,7 +476,7 @@ bool XMLUtil::ToDouble( const char* str, double* value ) } -char* XMLDocument::Identify( char* p, XMLNode** node ) +char* XMLDocument::Identify( char* p, XMLNode** node ) { XMLNode* returnNode = 0; char* start = p; @@ -486,7 +486,7 @@ char* XMLDocument::Identify( char* p, XMLNode** node ) return p; } - // What is this thing? + // What is this thing? // - Elements start with a letter or underscore, but xml is reserved. // - Comments: - // + // // Where the closing element (/foo) *must* be the next thing after the opening // element, and the names must match. BUT the tricky bit is that the closing // element will be read by the child. - // + // // 'endTag' is the end tag for this node, it is returned by a call to a child. // 'parentEnd' is the end tag for the parent, which is filled in and returned. @@ -814,7 +814,7 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEnd ) p = 0; } else if ( !endTag.Empty() ) { - if ( !XMLUtil::StringEqual( endTag.GetStr(), node->Value() )) { + if ( !XMLUtil::StringEqual( endTag.GetStr(), node->Value() )) { document->SetError( XML_ERROR_MISMATCHED_ELEMENT, node->Value(), 0 ); p = 0; } @@ -1177,10 +1177,10 @@ const XMLAttribute* XMLElement::FindAttribute( const char* name ) const const char* XMLElement::Attribute( const char* name, const char* value ) const -{ - const XMLAttribute* a = FindAttribute( name ); - if ( !a ) - return 0; +{ + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) + return 0; if ( !value || XMLUtil::StringEqual( a->Value(), value )) return a->Value(); return 0; @@ -1269,7 +1269,7 @@ XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name ) for( attrib = rootAttribute; attrib; last = attrib, attrib = attrib->next ) - { + { if ( XMLUtil::StringEqual( attrib->Name(), name ) ) { break; } @@ -1337,12 +1337,12 @@ char* XMLElement::ParseAttributes( char* p ) // attribute will be doubly added. However, tracking the 'prevAttribute' // avoids re-scanning the attribute list. Preferring performance for // now, may reconsider in the future. - if ( prevAttribute ) { + if ( prevAttribute ) { prevAttribute->next = attrib; } else { rootAttribute = attrib; - } + } prevAttribute = attrib; } // end of the tag @@ -1386,7 +1386,7 @@ char* XMLElement::ParseDeep( char* p, StrPair* strPair ) if ( value.Empty() ) return 0; p = ParseAttributes( p ); - if ( !p || !*p || closingType ) + if ( !p || !*p || closingType ) return p; p = XMLNode::ParseDeep( p, strPair ); @@ -1422,7 +1422,7 @@ bool XMLElement::ShallowEqual( const XMLNode* compare ) const } a = a->Next(); b = b->Next(); - } + } if ( a || b ) { // different count return false; @@ -1435,7 +1435,7 @@ bool XMLElement::ShallowEqual( const XMLNode* compare ) const bool XMLElement::Accept( XMLVisitor* visitor ) const { - if ( visitor->VisitEnter( *this, rootAttribute ) ) + if ( visitor->VisitEnter( *this, rootAttribute ) ) { for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) { @@ -1560,7 +1560,7 @@ int XMLDocument::LoadFile( const char* filename ) } -int XMLDocument::LoadFile( FILE* fp ) +int XMLDocument::LoadFile( FILE* fp ) { DeleteChildren(); InitDocument(); @@ -1579,7 +1579,7 @@ int XMLDocument::LoadFile( FILE* fp ) SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); return errorID; } - + charBuffer[size] = 0; const char* p = charBuffer; @@ -1642,13 +1642,13 @@ int XMLDocument::Parse( const char* p ) charBuffer = new char[ len+1 ]; memcpy( charBuffer, p, len+1 ); - + ParseDeep( charBuffer, 0 ); return errorID; } -void XMLDocument::Print( XMLPrinter* streamer ) +void XMLDocument::Print( XMLPrinter* streamer ) { XMLPrinter stdStreamer( stdout ); if ( !streamer ) @@ -1665,13 +1665,13 @@ void XMLDocument::SetError( int error, const char* str1, const char* str2 ) } -void XMLDocument::PrintError() const +void XMLDocument::PrintError() const { if ( errorID ) { static const int LEN = 20; char buf1[LEN] = { 0 }; char buf2[LEN] = { 0 }; - + if ( errorStr1 ) { TIXML_SNPRINTF( buf1, LEN, "%s", errorStr1 ); } @@ -1685,11 +1685,11 @@ void XMLDocument::PrintError() const } -XMLPrinter::XMLPrinter( FILE* file, bool compact ) : - elementJustOpened( false ), +XMLPrinter::XMLPrinter( FILE* file, bool compact ) : + elementJustOpened( false ), firstElement( true ), - fp( file ), - depth( 0 ), + fp( file ), + depth( 0 ), textDepth( -1 ), processEntities( true ), compactMode( compact ) @@ -1738,7 +1738,7 @@ void XMLPrinter::Print( const char* format, ... ) int len = vsnprintf( 0, 0, format, va ); // Close out and re-start the va-args va_end( va ); - va_start( va, format ); + va_start( va, format ); char* p = buffer.PushArr( len ) - 1; vsnprintf( p, len+1, format, va ); #endif @@ -1766,7 +1766,7 @@ void XMLPrinter::PrintString( const char* p, bool restricted ) // Remember, char is sometimes signed. (How many times has that bitten me?) if ( *q > 0 && *q < ENTITY_RANGE ) { // Check for entities. If one is found, flush - // the stream up until the entity, write the + // the stream up until the entity, write the // entity, and keep looking. if ( flag[(unsigned)(*q)] ) { while ( p < q ) { @@ -1913,7 +1913,7 @@ void XMLPrinter::PushText( const char* text, bool cdata ) } } -void XMLPrinter::PushText( int value ) +void XMLPrinter::PushText( int value ) { char buf[BUF_SIZE]; XMLUtil::ToStr( value, buf, BUF_SIZE ); @@ -1921,7 +1921,7 @@ void XMLPrinter::PushText( int value ) } -void XMLPrinter::PushText( unsigned value ) +void XMLPrinter::PushText( unsigned value ) { char buf[BUF_SIZE]; XMLUtil::ToStr( value, buf, BUF_SIZE ); @@ -1929,7 +1929,7 @@ void XMLPrinter::PushText( unsigned value ) } -void XMLPrinter::PushText( bool value ) +void XMLPrinter::PushText( bool value ) { char buf[BUF_SIZE]; XMLUtil::ToStr( value, buf, BUF_SIZE ); @@ -1937,7 +1937,7 @@ void XMLPrinter::PushText( bool value ) } -void XMLPrinter::PushText( float value ) +void XMLPrinter::PushText( float value ) { char buf[BUF_SIZE]; XMLUtil::ToStr( value, buf, BUF_SIZE ); @@ -1945,7 +1945,7 @@ void XMLPrinter::PushText( float value ) } -void XMLPrinter::PushText( double value ) +void XMLPrinter::PushText( double value ) { char buf[BUF_SIZE]; XMLUtil::ToStr( value, buf, BUF_SIZE ); diff --git a/tinyxml2.h b/tinyxml2.h index e7f723e..a573f94 100644 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -40,7 +40,7 @@ distribution. #include #endif -/* +/* TODO: intern strings instead of allocation. */ /* @@ -74,9 +74,9 @@ distribution. /*int _snprintf_s( char *buffer, size_t sizeOfBuffer, - size_t count, + size_t count, const char *format [, - argument] ... + argument] ... );*/ inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... ) { va_list va; @@ -145,7 +145,7 @@ public: void SetInternedStr( const char* str ) { Reset(); this->start = const_cast(str); } void SetStr( const char* str, int flags=0 ); - char* ParseText( char* in, const char* endTag, int strFlags ); + char* ParseText( char* in, const char* endTag, int strFlags ); char* ParseName( char* in ); @@ -160,7 +160,7 @@ private: // After parsing, if *end != 0, it can be set to zero. int flags; - char* start; + char* start; char* end; }; @@ -174,7 +174,7 @@ template class DynArray { public: - DynArray< T, INIT >() + DynArray< T, INIT >() { mem = pool; allocated = INIT; @@ -202,7 +202,7 @@ public: T Pop() { return mem[--size]; } - void PopArr( int count ) + void PopArr( int count ) { TIXMLASSERT( size >= count ); size -= count; @@ -248,7 +248,7 @@ public: virtual int ItemSize() const = 0; virtual void* Alloc() = 0; - virtual void Free( void* ) = 0; + virtual void Free( void* ) = 0; }; @@ -334,7 +334,7 @@ private: If you return 'true' from a Visit method, recursive parsing will continue. If you return false, no children of this node or its sibilings will be visited. - All flavors of Visit methods have a default implementation that returns 'true' (continue + All flavors of Visit methods have a default implementation that returns 'true' (continue visiting). You need to only override methods that are interesting to you. Generally Accept() is called on the TiXmlDocument, although all nodes support visiting. @@ -375,7 +375,7 @@ public: class XMLUtil { public: - // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't + // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't // correct, but simple, and usually works. static const char* SkipWhiteSpace( const char* p ) { while( !IsUTF8Continuation(*p) && isspace( *reinterpret_cast(p) ) ) { ++p; } return p; } static char* SkipWhiteSpace( char* p ) { while( !IsUTF8Continuation(*p) && isspace( *reinterpret_cast(p) ) ) { ++p; } return p; } @@ -424,7 +424,7 @@ public: XML Document Object Model (DOM), except XMLAttributes. Nodes have siblings, a parent, and children which can be navigated. A node is always in a XMLDocument. - The type of a XMLNode can be queried, and it can + The type of a XMLNode can be queried, and it can be cast to its more defined type. A XMLDocument allocates memory for all its Nodes. @@ -510,7 +510,7 @@ public: */ const XMLElement* LastChildElement( const char* value=0 ) const; XMLElement* LastChildElement( const char* _value=0 ) { return const_cast(const_cast(this)->LastChildElement(_value) ); } - + /// Get the previous (left) sibling node of this node. const XMLNode* PreviousSibling() const { return prev; } XMLNode* PreviousSibling() { return prev; } @@ -518,11 +518,11 @@ public: /// Get the previous (left) sibling element of this node, with an opitionally supplied name. const XMLElement* PreviousSiblingElement( const char* value=0 ) const ; XMLElement* PreviousSiblingElement( const char* _value=0 ) { return const_cast(const_cast(this)->PreviousSiblingElement( _value ) ); } - + /// Get the next (right) sibling node of this node. const XMLNode* NextSibling() const { return next; } XMLNode* NextSibling() { return next; } - + /// Get the next (right) sibling element of this node, with an opitionally supplied name. const XMLElement* NextSiblingElement( const char* value=0 ) const; XMLElement* NextSiblingElement( const char* _value=0 ) { return const_cast(const_cast(this)->NextSiblingElement( _value ) ); } @@ -541,7 +541,7 @@ public: Add a node after the specified child node. */ XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis ); - + /** Delete all the children of this node. */ @@ -555,7 +555,7 @@ public: /** Make a copy of this node, but not its children. You may pass in a Document pointer that will be - the owner of the new Node. If the 'document' is + the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument()) @@ -571,7 +571,7 @@ public: */ virtual bool ShallowEqual( const XMLNode* compare ) const = 0; - /** Accept a hierarchical visit of the nodes in the TinyXML DOM. Every node in the + /** Accept a hierarchical visit of the nodes in the TinyXML DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the TiXmlVisitor interface. @@ -582,7 +582,7 @@ public: The interface has been based on ideas from: - http://www.saxproject.org/ - - http://c2.com/cgi/wiki?HierarchicalVisitorPattern + - http://c2.com/cgi/wiki?HierarchicalVisitorPattern Which are both good references for "visiting". @@ -603,7 +603,7 @@ protected: virtual ~XMLNode(); XMLNode( const XMLNode& ); // not supported XMLNode& operator=( const XMLNode& ); // not supported - + XMLDocument* document; XMLNode* parent; mutable StrPair value; @@ -627,9 +627,9 @@ private: This is bold @endverbatim - A text node can have 2 ways to output the next. "normal" output + A text node can have 2 ways to output the next. "normal" output and CDATA. It will default to the mode it was parsed from the XML file and - you generally want to leave it alone, but you can change the output mode with + you generally want to leave it alone, but you can change the output mode with SetCDATA() and query it with CDATA(). */ class XMLText : public XMLNode @@ -867,15 +867,15 @@ public: virtual bool Accept( XMLVisitor* visitor ) const; /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none + for the attribute of that name, or null if none exists. For example: @verbatim const char* value = ele->Attribute( "foo" ); @endverbatim - The 'value' parameter is normally null. However, if specified, - the attribute will only be returned if the 'name' and 'value' + The 'value' parameter is normally null. However, if specified, + the attribute will only be returned if the 'name' and 'value' match. This allow you to write code: @verbatim @@ -893,7 +893,7 @@ public: /** Given an attribute name, IntAttribute() returns the value of the attribute interpreted as an integer. 0 will be - returned if there is an error. For a method with error + returned if there is an error. For a method with error checking, see QueryIntAttribute() */ int IntAttribute( const char* name ) const { int i=0; QueryIntAttribute( name, &i ); return i; } @@ -906,7 +906,7 @@ public: /// See IntAttribute() float FloatAttribute( const char* name ) const { float f=0; QueryFloatAttribute( name, &f ); return f; } - /** Given an attribute name, QueryIntAttribute() returns + /** Given an attribute name, QueryIntAttribute() returns XML_NO_ERROR, XML_WRONG_ATTRIBUTE_TYPE if the conversion can't be performed, or XML_NO_ATTRIBUTE if the attribute doesn't exist. If successful, the result of the conversion @@ -919,7 +919,7 @@ public: QueryIntAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10 @endverbatim */ - int QueryIntAttribute( const char* name, int* _value ) const { const XMLAttribute* a = FindAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->QueryIntValue( _value ); } + int QueryIntAttribute( const char* name, int* _value ) const { const XMLAttribute* a = FindAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->QueryIntValue( _value ); } /// See QueryIntAttribute() int QueryUnsignedAttribute( const char* name, unsigned int* _value ) const { const XMLAttribute* a = FindAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->QueryUnsignedValue( _value ); } /// See QueryIntAttribute() @@ -953,7 +953,7 @@ public: /** Convenience function for easy access to the text inside an element. Although easy and concise, GetText() is limited compared to getting the TiXmlText child and accessing it directly. - + If the first child of 'this' is a TiXmlText, the GetText() returns the character string of the Text node, else null is returned. @@ -963,24 +963,24 @@ public: const char* str = fooElement->GetText(); @endverbatim - 'str' will be a pointer to "This is text". - + 'str' will be a pointer to "This is text". + Note that this function can be misleading. If the element foo was created from this XML: @verbatim - This is text + This is text @endverbatim then the value of str would be null. The first child node isn't a text node, it is another element. From this XML: @verbatim - This is text + This is text @endverbatim GetText() will return "This is ". */ const char* GetText() const; - /** + /** Convenience method to query the value of a child text node. This is probably best shown by example. Given you have a document is this form: @verbatim @@ -1004,7 +1004,7 @@ public: @returns XML_SUCCESS (0) on success, XML_CAN_NOT_CONVERT_TEXT if the text cannot be converted to the requested type, and XML_NO_TEXT_NODE if there is no child text to query. - + */ int QueryIntText( int* _value ) const; /// See QueryIntText() @@ -1049,10 +1049,10 @@ private: enum Whitespace { PRESERVE_WHITESPACE, COLLAPSE_WHITESPACE -}; +}; - -/** A Document binds together all the functionality. + +/** A Document binds together all the functionality. It can be saved, loaded, and printed to the screen. All Nodes are connected and allocated to a Document. If the Document is deleted, all its Nodes are also deleted. @@ -1062,7 +1062,7 @@ class XMLDocument : public XMLNode friend class XMLElement; public: /// constructor - XMLDocument( bool processEntities = true, Whitespace = PRESERVE_WHITESPACE ); + XMLDocument( bool processEntities = true, Whitespace = PRESERVE_WHITESPACE ); ~XMLDocument(); virtual XMLDocument* ToDocument() { return this; } @@ -1074,23 +1074,23 @@ public: an errorID. */ int Parse( const char* xml ); - + /** Load an XML file from disk. Returns XML_NO_ERROR (0) on success, or an errorID. - */ + */ int LoadFile( const char* filename ); - + /** Load an XML file from disk. You are responsible for providing and closing the FILE*. Returns XML_NO_ERROR (0) on success, or an errorID. - */ + */ int LoadFile( FILE* ); - + /** Save the XML file to disk. Returns XML_NO_ERROR (0) on success, or @@ -1185,7 +1185,7 @@ public: void DeleteNode( XMLNode* node ) { node->parent->DeleteChild( node ); } void SetError( int error, const char* str1, const char* str2 ); - + /// Return true if there was an error parsing the document. bool Error() const { return errorID != XML_NO_ERROR; } /// Return the errorID. @@ -1238,7 +1238,7 @@ private: @endverbatim - Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very + Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very easy to write a *lot* of code that looks like: @verbatim @@ -1258,7 +1258,7 @@ private: @endverbatim And that doesn't even cover "else" cases. XMLHandle addresses the verbosity - of such code. A XMLHandle checks for null pointers so it is perfectly safe + of such code. A XMLHandle checks for null pointers so it is perfectly safe and correct to use: @verbatim @@ -1303,12 +1303,12 @@ public: /// Get the previous sibling element of this handle. XMLHandle PreviousSiblingElement( const char* _value=0 ) { return XMLHandle( node ? node->PreviousSiblingElement( _value ) : 0 ); } /// Get the next sibling of this handle. - XMLHandle NextSibling() { return XMLHandle( node ? node->NextSibling() : 0 ); } + XMLHandle NextSibling() { return XMLHandle( node ? node->NextSibling() : 0 ); } /// Get the next sibling element of this handle. XMLHandle NextSiblingElement( const char* _value=0 ) { return XMLHandle( node ? node->NextSiblingElement( _value ) : 0 ); } /// Safe cast to XMLNode. This can return null. - XMLNode* ToNode() { return node; } + XMLNode* ToNode() { return node; } /// Safe cast to XMLElement. This can return null. XMLElement* ToElement() { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } /// Safe cast to XMLText. This can return null. @@ -1346,7 +1346,7 @@ public: const XMLConstHandle NextSiblingElement( const char* _value=0 ) const { return XMLConstHandle( node ? node->NextSiblingElement( _value ) : 0 ); } - const XMLNode* ToNode() const { return node; } + const XMLNode* ToNode() const { return node; } const XMLElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } const XMLText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } const XMLUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } @@ -1375,7 +1375,7 @@ private: @endverbatim Print to a File - + You provide the file pointer. @verbatim XMLPrinter printer( fp ); @@ -1462,7 +1462,7 @@ public: */ const char* CStr() const { return buffer.Mem(); } /** - If in print to memory mode, return the size + If in print to memory mode, return the size of the XML file in memory. (Note the size returned includes the terminating null.) */ diff --git a/xmltest.cpp b/xmltest.cpp index 3e7c123..55300b8 100644 --- a/xmltest.cpp +++ b/xmltest.cpp @@ -97,7 +97,7 @@ int example_2() int example_3() { - static const char* xml = + static const char* xml = "" "" "" @@ -110,7 +110,7 @@ int example_3() XMLElement* titleElement = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" ); const char* title = titleElement->GetText(); printf( "Name of play (1): %s\n", title ); - + XMLText* textNode = titleElement->FirstChild()->ToText(); title = textNode->Value(); printf( "Name of play (2): %s\n", title ); @@ -128,7 +128,7 @@ bool example_4() " 2" " " ""; - + XMLDocument doc; doc.Parse( xml ); @@ -151,7 +151,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) { #if defined( _MSC_VER ) && defined( DEBUG ) _CrtMemCheckpoint( &startMemState ); - #endif + #endif #if defined(_MSC_VER) #pragma warning ( push ) @@ -187,7 +187,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) XMLTest( "Example-3", 0, example_3() ); XMLTest( "Example-4", true, example_4() ); - /* ------ Example 2: Lookup information. ---- */ + /* ------ Example 2: Lookup information. ---- */ { static const char* test[] = { "", @@ -268,7 +268,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) XMLTest( "Programmatic DOM", "comment", doc->FirstChildElement( "element" )->FirstChild()->Value() ); XMLTest( "Programmatic DOM", "0", doc->FirstChildElement( "element" )->FirstChildElement()->Attribute( "attrib" ) ); XMLTest( "Programmatic DOM", 2, doc->FirstChildElement()->LastChildElement( "sub" )->IntAttribute( "attrib" ) ); - XMLTest( "Programmatic DOM", "& Text!", + XMLTest( "Programmatic DOM", "& Text!", doc->FirstChildElement()->LastChildElement( "sub" )->FirstChild()->ToText()->Value() ); // And now deletion: @@ -402,7 +402,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) // Get the attribute "value" from the "Russian" element and check it. XMLElement* element = doc.FirstChildElement( "document" )->FirstChildElement( "Russian" ); - const unsigned char correctValue[] = { 0xd1U, 0x86U, 0xd0U, 0xb5U, 0xd0U, 0xbdU, 0xd0U, 0xbdU, + const unsigned char correctValue[] = { 0xd1U, 0x86U, 0xd0U, 0xb5U, 0xd0U, 0xbdU, 0xd0U, 0xbdU, 0xd0U, 0xbeU, 0xd1U, 0x81U, 0xd1U, 0x82U, 0xd1U, 0x8cU, 0 }; XMLTest( "UTF-8: Russian value.", (const char*)correctValue, element->Attribute( "value" ) ); @@ -491,7 +491,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) doc.Parse( str ); doc.Print(); - XMLTest( "CDATA parse.", doc.FirstChildElement()->FirstChild()->Value(), + XMLTest( "CDATA parse.", doc.FirstChildElement()->FirstChild()->Value(), "I am > the rules!\n...since I make symbolic puns", false ); } @@ -508,7 +508,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) doc.Parse( str ); doc.Print(); - XMLTest( "CDATA parse. [ tixml1:1480107 ]", doc.FirstChildElement()->FirstChild()->Value(), + XMLTest( "CDATA parse. [ tixml1:1480107 ]", doc.FirstChildElement()->FirstChild()->Value(), "I am > the rules!\n...since I make symbolic puns", false ); } @@ -590,11 +590,11 @@ int main( int /*argc*/, const char ** /*argv*/ ) "" "Crazy &ttk;" ""; - + XMLDocument doc( false ); doc.Parse( passages ); - XMLTest( "No entity parsing.", doc.FirstChildElement()->FirstChildElement()->Attribute( "context" ), + XMLTest( "No entity parsing.", doc.FirstChildElement()->FirstChildElement()->Attribute( "context" ), "Line 5 has "quotation marks" and 'apostrophe marks'." ); XMLTest( "No entity parsing.", doc.FirstChildElement()->FirstChildElement()->FirstChild()->Value(), "Crazy &ttk;" ); @@ -625,7 +625,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) { // DOCTYPE not preserved (950171) - // + // const char* doctype = "" "" @@ -639,7 +639,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) doc.DeleteChild( doc.RootElement() ); doc.LoadFile( "resources/out/test7.xml" ); doc.Print(); - + const XMLUnknown* decl = doc.FirstChild()->NextSibling()->ToUnknown(); XMLTest( "Correct value of unknown.", "DOCTYPE PLAY SYSTEM 'play.dtd'", decl->Value() ); @@ -647,7 +647,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) { // Comments do not stream out correctly. - const char* doctype = + const char* doctype = ""; XMLDocument doc; doc.Parse( doctype ); @@ -662,7 +662,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) XMLDocument doc; doc.Parse( doctype ); - + XMLTest( "Parsing repeated attributes.", (int)XML_ERROR_PARSING_ATTRIBUTE, doc.ErrorID() ); // is an error to tinyxml (didn't use to be, but caused issues) doc.PrintError(); } @@ -709,7 +709,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) XMLTest("Missing end tag with trailing whitespace", xml.Error(), true); xml.Parse(""); XMLTest("Mismatched tags", xml.ErrorID(), (int)XML_ERROR_MISMATCHED_ELEMENT); - } + } { @@ -756,7 +756,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) XMLDocument doc; doc.Parse( (const char*)buf); - } + } { @@ -806,14 +806,14 @@ int main( int /*argc*/, const char ** /*argv*/ ) } XMLTest( "Error in snprinf handling.", true, doc.Error() ); } - + { // Attribute ordering. static const char* xml = ""; XMLDocument doc; doc.Parse( xml ); XMLElement* ele = doc.FirstChildElement(); - + const XMLAttribute* a = ele->FirstAttribute(); XMLTest( "Attribute order", "1", a->Value() ); a = a->Next(); @@ -821,13 +821,13 @@ int main( int /*argc*/, const char ** /*argv*/ ) a = a->Next(); XMLTest( "Attribute order", "3", a->Value() ); XMLTest( "Attribute order", "attrib3", a->Name() ); - + ele->DeleteAttribute( "attrib2" ); a = ele->FirstAttribute(); XMLTest( "Attribute order", "1", a->Value() ); a = a->Next(); XMLTest( "Attribute order", "3", a->Value() ); - + ele->DeleteAttribute( "attrib1" ); ele->DeleteAttribute( "attrib3" ); XMLTest( "Attribute order (empty)", false, ele->FirstAttribute() ? true : false ); @@ -879,7 +879,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) ele = docH.FirstChildElement( "none" ).FirstChildElement( "element" ).ToElement(); XMLTest( "Handle, dne, mutable", false, ele != 0 ); } - + { static const char* xml = "Text"; XMLDocument doc; @@ -897,7 +897,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) XMLDocument doc; doc.InsertEndChild( doc.NewDeclaration() ); doc.SetBOM( true ); - + XMLPrinter printer; doc.Print( &printer ); @@ -972,7 +972,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) doc.Parse( xml ); XMLTest( "Whitespace all space", true, 0 == doc.FirstChildElement()->FirstChild() ); } - + // ----------- Performance tracking -------------- { #if defined( _MSC_VER ) @@ -1015,7 +1015,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) delete [] mem; - static const char* note = + static const char* note = #ifdef DEBUG "DEBUG"; #else @@ -1030,7 +1030,7 @@ int main( int /*argc*/, const char ** /*argv*/ ) } #if defined( _MSC_VER ) && defined( DEBUG ) - _CrtMemCheckpoint( &endMemState ); + _CrtMemCheckpoint( &endMemState ); //_CrtMemDumpStatistics( &endMemState ); _CrtMemState diffMemState;