Merge git://github.com/leethomason/tinyxml2

This commit is contained in:
hasufell 2012-05-26 23:51:47 +02:00
commit 9a0eb46d71
8 changed files with 69 additions and 103 deletions

View File

@ -28,15 +28,14 @@ if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
${TARGET_DATA_COPY}
COMMAND ${CMAKE_COMMAND} -E echo "In source build")
else(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
make_directory(${CMAKE_CURRENT_BINARY_DIR}/resources/)
add_custom_target(
${TARGET_DATA_COPY}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/dream.xml ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/utf8test.xml ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/utf8testverify.xml ${CMAKE_CURRENT_BINARY_DIR})
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/resources/dream.xml ${CMAKE_CURRENT_BINARY_DIR}/resources/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/resources/utf8test.xml ${CMAKE_CURRENT_BINARY_DIR}/resources/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/resources/utf8testverify.xml ${CMAKE_CURRENT_BINARY_DIR}/resources/)
endif(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
set(OGL_DATA_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data)
################################
# Add definitions

View File

@ -23,18 +23,10 @@ distribution.
#include "tinyxml2.h"
#if 1
#include <cstdio>
#include <cstdlib>
#include <new>
#else
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <new>
#include <stdarg.h>
#endif
#include <cstdio>
#include <cstdlib>
#include <new>
#include <cstddef>
using namespace tinyxml2;
@ -120,7 +112,7 @@ char* StrPair::ParseText( char* p, const char* endTag, int strFlags )
char* start = p; // fixme: hides a member
char endChar = *endTag;
int length = strlen( endTag );
size_t length = strlen( endTag );
// Inner loop of text parsing.
while ( *p ) {
@ -316,7 +308,7 @@ const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length )
if ( *(p+1) == '#' && *(p+2) )
{
unsigned long ucs = 0;
int delta = 0;
ptrdiff_t delta = 0;
unsigned mult = 1;
if ( *(p+2) == 'x' )
@ -329,7 +321,7 @@ const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length )
if ( !q || !*q ) return 0;
delta = (q-p);
delta = q-p;
--q;
while ( *q != 'x' )

View File

@ -171,7 +171,7 @@ public:
~DynArray()
{
if ( mem != pool ) {
delete mem;
delete [] mem;
}
}
void Push( T t )
@ -225,7 +225,7 @@ private:
/*
Parent virtual class a a pool for fast allocation
Parent virtual class of a pool for fast allocation
and deallocation of objects.
*/
class MemPool
@ -314,16 +314,16 @@ private:
Implements the interface to the "Visitor pattern" (see the Accept() method.)
If you call the Accept() method, it requires being passed a XMLVisitor
class to handle callbacks. For nodes that contain other nodes (Document, Element)
you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves
you will get called with a VisitEnter/VisitExit pair. Nodes that are always leafs
are simply called with Visit().
If you return 'true' from a Visit method, recursive parsing will continue. If you return
false, <b>no children of this node or its sibilings</b> will be Visited.
false, <b>no children of this node or its sibilings</b> will be visited.
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 suppert Visiting.
Generally Accept() is called on the TiXmlDocument, although all nodes support visiting.
You should never change the document from a callback.
@ -344,13 +344,13 @@ public:
/// Visit an element.
virtual bool VisitExit( const XMLElement& /*element*/ ) { return true; }
/// Visit a declaration
/// Visit a declaration.
virtual bool Visit( const XMLDeclaration& /*declaration*/ ) { return true; }
/// Visit a text node
/// Visit a text node.
virtual bool Visit( const XMLText& /*text*/ ) { return true; }
/// Visit a comment node
/// Visit a comment node.
virtual bool Visit( const XMLComment& /*comment*/ ) { return true; }
/// Visit an unknown node
/// Visit an unknown node.
virtual bool Visit( const XMLUnknown& /*unknown*/ ) { return true; }
};
@ -398,7 +398,7 @@ public:
The type of a XMLNode can be queried, and it can
be cast to its more defined type.
An XMLDocument allocates memory for all its Nodes.
A XMLDocument allocates memory for all its Nodes.
When the XMLDocument gets deleted, all its Nodes
will also be deleted.
@ -443,7 +443,7 @@ public:
/** The meaning of 'value' changes for the specific type.
@verbatim
Document: empy
Document: empty
Element: name of the element
Comment: the comment text
Unknown: the tag contents
@ -542,7 +542,7 @@ public:
*/
virtual bool ShallowEqual( const XMLNode* compare ) const = 0;
/** Accept a hierchical visit 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.
@ -869,9 +869,9 @@ public:
/// See IntAttribute()
bool BoolAttribute( const char* name ) const { bool b=false; QueryBoolAttribute( name, &b ); return b; }
/// See IntAttribute()
double DoubleAttribute( const char* name ) const { double d=0; QueryDoubleAttribute( name, &d ); return d; }
double DoubleAttribute( const char* name ) const { double d=0; QueryDoubleAttribute( name, &d ); return d; }
/// See IntAttribute()
float FloatAttribute( const char* name ) const { float f=0; QueryFloatAttribute( name, &f ); return f; }
float FloatAttribute( const char* name ) const { float f=0; QueryFloatAttribute( name, &f ); return f; }
/** Given an attribute name, QueryIntAttribute() returns
XML_NO_ERROR, XML_WRONG_ATTRIBUTE_TYPE if the conversion
@ -886,7 +886,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()
@ -894,7 +894,7 @@ public:
/// See QueryIntAttribute()
int QueryDoubleAttribute( const char* name, double* _value ) const { const XMLAttribute* a = FindAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->QueryDoubleValue( _value ); }
/// See QueryIntAttribute()
int QueryFloatAttribute( const char* name, float* _value ) const { const XMLAttribute* a = FindAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->QueryFloatValue( _value ); }
int QueryFloatAttribute( const char* name, float* _value ) const { const XMLAttribute* a = FindAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->QueryFloatValue( _value ); }
/// Sets the named attribute to value.
void SetAttribute( const char* name, const char* _value ) { XMLAttribute* a = FindOrCreateAttribute( name ); a->SetAttribute( _value ); }
@ -905,7 +905,7 @@ public:
/// Sets the named attribute to value.
void SetAttribute( const char* name, bool _value ) { XMLAttribute* a = FindOrCreateAttribute( name ); a->SetAttribute( _value ); }
/// Sets the named attribute to value.
void SetAttribute( const char* name, double _value ) { XMLAttribute* a = FindOrCreateAttribute( name ); a->SetAttribute( _value ); }
void SetAttribute( const char* name, double _value ) { XMLAttribute* a = FindOrCreateAttribute( name ); a->SetAttribute( _value ); }
/**
Delete an attribute.
@ -977,7 +977,7 @@ private:
};
/** 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.
@ -1024,7 +1024,7 @@ public:
int SaveFile( const char* filename );
/**
Save the XML file to disk. You are responsible
Save the XML file to disk. You are responsible
for providing and closing the FILE*.
Returns XML_NO_ERROR (0) on success, or
@ -1103,7 +1103,7 @@ public:
XMLUnknown* NewUnknown( const char* text );
/**
Delete a node associated with this documented.
Delete a node associated with this document.
It will be unlinked from the DOM.
*/
void DeleteNode( XMLNode* node ) { node->parent->DeleteChild( node ); }
@ -1116,9 +1116,9 @@ public:
int ErrorID() const { return errorID; }
/// Return a possibly helpful diagnostic location or string.
const char* GetErrorStr1() const { return errorStr1; }
/// Return possibly helpful secondary diagnostic location or string.
/// Return a possibly helpful secondary diagnostic location or string.
const char* GetErrorStr2() const { return errorStr2; }
/// If there is an error, print it to stdout
/// If there is an error, print it to stdout.
void PrintError() const;
// internal
@ -1158,7 +1158,7 @@ private:
<Child attributeB = "value1" />
<Child attributeB = "value2" />
</Element>
<Document>
</Document>
@endverbatim
Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very
@ -1286,7 +1286,7 @@ private:
It can:
-# Print to memory.
-# Print to a file you provide
-# Print to a file you provide.
-# Print XML without a XMLDocument.
Print to Memory
@ -1294,7 +1294,7 @@ private:
@verbatim
XMLPrinter printer;
doc->Print( &printer );
SomeFunctior( printer.CStr() );
SomeFunction( printer.CStr() );
@endverbatim
Print to a File
@ -1349,7 +1349,7 @@ public:
/// Add a text node.
void PushText( const char* text, bool cdata=false );
/// Add a comment
/// Add a comment.
void PushComment( const char* comment );
void PushDeclaration( const char* value );
@ -1371,6 +1371,12 @@ public:
the XML file in memory.
*/
const char* CStr() const { return buffer.Mem(); }
/**
If in print to memory mode, return the size
of the XML file in memory. (Note the size returned
includes the terminating null.)
*/
const int CStrSize()const{ return buffer.Size(); }
private:
void SealElement();

View File

@ -8,32 +8,11 @@
/* Begin PBXBuildFile section */
037AE8A5151E692700E0F29F /* xmltest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 037AE8A3151E692700E0F29F /* xmltest.cpp */; };
037AE9BE151E694400E0F29F /* dream.xml in CopyFiles */ = {isa = PBXBuildFile; fileRef = 037AE062151CCC6D00E0F29F /* dream.xml */; };
037AE9BF151E694400E0F29F /* utf8test.xml in CopyFiles */ = {isa = PBXBuildFile; fileRef = 037AE065151CCC6D00E0F29F /* utf8test.xml */; };
037AE9C0151E694400E0F29F /* utf8testverify.xml in CopyFiles */ = {isa = PBXBuildFile; fileRef = 037AE066151CCC6D00E0F29F /* utf8testverify.xml */; };
03F28B53152E9B1B00D4CD90 /* tinyxml2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 03F28B4A152E9B1B00D4CD90 /* tinyxml2.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
037AE9CF151E697800E0F29F /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 7;
files = (
037AE9BE151E694400E0F29F /* dream.xml in CopyFiles */,
037AE9BF151E694400E0F29F /* utf8test.xml in CopyFiles */,
037AE9C0151E694400E0F29F /* utf8testverify.xml in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
037AE062151CCC6D00E0F29F /* dream.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = dream.xml; sourceTree = "<group>"; };
037AE065151CCC6D00E0F29F /* utf8test.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = utf8test.xml; sourceTree = "<group>"; };
037AE066151CCC6D00E0F29F /* utf8testverify.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = utf8testverify.xml; sourceTree = "<group>"; };
037AE86D151E685F00E0F29F /* tinyxml2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tinyxml2; sourceTree = BUILT_PRODUCTS_DIR; };
037AE86D151E685F00E0F29F /* xmltest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = xmltest; sourceTree = BUILT_PRODUCTS_DIR; };
037AE8A3151E692700E0F29F /* xmltest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = xmltest.cpp; path = ../xmltest.cpp; sourceTree = SOURCE_ROOT; };
03F28B4A152E9B1B00D4CD90 /* tinyxml2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml2.cpp; sourceTree = "<group>"; };
03F28B4B152E9B1B00D4CD90 /* tinyxml2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml2.h; sourceTree = "<group>"; };
@ -54,7 +33,6 @@
isa = PBXGroup;
children = (
037AE069151CCC7000E0F29F /* Classes */,
037AE06A151CCC7C00E0F29F /* Resources */,
03F28B60152E9B4C00D4CD90 /* Libraries */,
037AE06F151CCCB900E0F29F /* Products */,
);
@ -68,21 +46,10 @@
name = Classes;
sourceTree = "<group>";
};
037AE06A151CCC7C00E0F29F /* Resources */ = {
isa = PBXGroup;
children = (
037AE062151CCC6D00E0F29F /* dream.xml */,
037AE065151CCC6D00E0F29F /* utf8test.xml */,
037AE066151CCC6D00E0F29F /* utf8testverify.xml */,
);
name = Resources;
path = ..;
sourceTree = "<group>";
};
037AE06F151CCCB900E0F29F /* Products */ = {
isa = PBXGroup;
children = (
037AE86D151E685F00E0F29F /* tinyxml2 */,
037AE86D151E685F00E0F29F /* xmltest */,
);
name = Products;
sourceTree = "<group>";
@ -108,21 +75,20 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
037AE86C151E685F00E0F29F /* tinyxml2 */ = {
037AE86C151E685F00E0F29F /* xmltest */ = {
isa = PBXNativeTarget;
buildConfigurationList = 037AE873151E687E00E0F29F /* Build configuration list for PBXNativeTarget "tinyxml2" */;
buildConfigurationList = 037AE873151E687E00E0F29F /* Build configuration list for PBXNativeTarget "xmltest" */;
buildPhases = (
037AE86A151E685F00E0F29F /* Sources */,
037AE86B151E685F00E0F29F /* Frameworks */,
037AE9CF151E697800E0F29F /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = tinyxml2;
name = xmltest;
productName = tinyxml2;
productReference = 037AE86D151E685F00E0F29F /* tinyxml2 */;
productReference = 037AE86D151E685F00E0F29F /* xmltest */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
@ -145,7 +111,7 @@
projectDirPath = "";
projectRoot = "";
targets = (
037AE86C151E685F00E0F29F /* tinyxml2 */,
037AE86C151E685F00E0F29F /* xmltest */,
);
};
/* End PBXProject section */
@ -183,6 +149,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CONFIGURATION_BUILD_DIR = ..;
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
@ -190,7 +157,7 @@
GCC_OPTIMIZATION_LEVEL = 0;
INSTALL_PATH = /usr/local/bin;
PREBINDING = NO;
PRODUCT_NAME = tinyxml2;
PRODUCT_NAME = xmltest;
};
name = Debug;
};
@ -198,6 +165,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CONFIGURATION_BUILD_DIR = ..;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_ENABLE_FIX_AND_CONTINUE = NO;
@ -221,7 +189,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
037AE873151E687E00E0F29F /* Build configuration list for PBXNativeTarget "tinyxml2" */ = {
037AE873151E687E00E0F29F /* Build configuration list for PBXNativeTarget "xmltest" */ = {
isa = XCConfigurationList;
buildConfigurations = (
037AE86F151E686000E0F29F /* Debug */,

View File

@ -75,7 +75,7 @@ void NullLineEndings( char* p )
int example_1()
{
XMLDocument doc;
doc.LoadFile( "dream.xml" );
doc.LoadFile( "resources/dream.xml" );
return doc.ErrorID();
}
@ -127,7 +127,7 @@ int main( int /*argc*/, const char ** /*argv*/ )
#pragma warning ( disable : 4996 ) // Fail to see a compelling reason why this should be deprecated.
#endif
FILE* fp = fopen( "dream.xml", "r" );
FILE* fp = fopen( "resources/dream.xml", "r" );
if ( !fp ) {
printf( "Error opening test file 'dream.xml'.\n"
"Is your working directory the same as where \n"
@ -260,9 +260,9 @@ int main( int /*argc*/, const char ** /*argv*/ )
// XML2 : 469,073 bytes in 323 allocations
//int newStart = gNew;
XMLDocument doc;
doc.LoadFile( "dream.xml" );
doc.LoadFile( "resources/dream.xml" );
doc.SaveFile( "dreamout.xml" );
doc.SaveFile( "resources/dreamout.xml" );
doc.PrintError();
XMLTest( "Dream", "xml version=\"1.0\"",
@ -276,7 +276,7 @@ int main( int /*argc*/, const char ** /*argv*/ )
doc.LastChild()->LastChild()->LastChild()->LastChild()->LastChildElement()->GetText() );
XMLDocument doc2;
doc2.LoadFile( "dreamout.xml" );
doc2.LoadFile( "resources/dreamout.xml" );
XMLTest( "Dream-out", "xml version=\"1.0\"",
doc2.FirstChild()->ToDeclaration()->Value() );
XMLTest( "Dream-out", true, doc2.FirstChild()->NextSibling()->ToUnknown() ? true : false );
@ -352,7 +352,7 @@ int main( int /*argc*/, const char ** /*argv*/ )
{
XMLDocument doc;
doc.LoadFile( "utf8test.xml" );
doc.LoadFile( "resources/utf8test.xml" );
// Get the attribute "value" from the "Russian" element and check it.
XMLElement* element = doc.FirstChildElement( "document" )->FirstChildElement( "Russian" );
@ -373,7 +373,7 @@ int main( int /*argc*/, const char ** /*argv*/ )
text->Value() );
// Now try for a round trip.
doc.SaveFile( "utf8testout.xml" );
doc.SaveFile( "resources/utf8testout.xml" );
// Check the round trip.
char savedBuf[256];
@ -385,8 +385,8 @@ int main( int /*argc*/, const char ** /*argv*/ )
#pragma warning ( push )
#pragma warning ( disable : 4996 ) // Fail to see a compelling reason why this should be deprecated.
#endif
FILE* saved = fopen( "utf8testout.xml", "r" );
FILE* verify = fopen( "utf8testverify.xml", "r" );
FILE* saved = fopen( "resources/utf8testout.xml", "r" );
FILE* verify = fopen( "resources/utf8testverify.xml", "r" );
#if defined(_MSC_VER)
#pragma warning ( pop )
#endif
@ -506,7 +506,7 @@ int main( int /*argc*/, const char ** /*argv*/ )
#pragma warning ( push )
#pragma warning ( disable : 4996 ) // Fail to see a compelling reason why this should be deprecated.
#endif
FILE* textfile = fopen( "textfile.txt", "w" );
FILE* textfile = fopen( "resources/textfile.txt", "w" );
#if defined(_MSC_VER)
#pragma warning ( pop )
#endif
@ -520,7 +520,7 @@ int main( int /*argc*/, const char ** /*argv*/ )
#pragma warning ( push )
#pragma warning ( disable : 4996 ) // Fail to see a compelling reason why this should be deprecated.
#endif
textfile = fopen( "textfile.txt", "r" );
textfile = fopen( "resources/textfile.txt", "r" );
#if defined(_MSC_VER)
#pragma warning ( pop )
#endif
@ -589,9 +589,9 @@ int main( int /*argc*/, const char ** /*argv*/ )
XMLDocument doc;
doc.Parse( doctype );
doc.SaveFile( "test7.xml" );
doc.SaveFile( "resources/test7.xml" );
doc.DeleteChild( doc.RootElement() );
doc.LoadFile( "test7.xml" );
doc.LoadFile( "resources/test7.xml" );
doc.Print();
const XMLUnknown* decl = doc.FirstChild()->NextSibling()->ToUnknown();
@ -824,6 +824,7 @@ int main( int /*argc*/, const char ** /*argv*/ )
static const char* result = "\xef\xbb\xbf<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
XMLTest( "BOM and default declaration", printer.CStr(), result, false );
XMLTest( "CStrSize", printer.CStrSize(), 42, false );
}
@ -838,7 +839,7 @@ int main( int /*argc*/, const char ** /*argv*/ )
#pragma warning ( push )
#pragma warning ( disable : 4996 ) // Fail to see a compelling reason why this should be deprecated.
#endif
FILE* fp = fopen( "dream.xml", "r" );
FILE* fp = fopen( "resources/dream.xml", "r" );
#if defined(_MSC_VER)
#pragma warning ( pop )
#endif