26 #ifndef TINYXML_INCLUDED 27 #define TINYXML_INCLUDED 30 #pragma warning( disable : 4530 ) 31 #pragma warning( disable : 4786 ) 41 #if defined( _DEBUG ) && !defined( DEBUG ) 45 #if defined( DEBUG ) && defined( _MSC_VER ) 46 #define WIN32_LEAN_AND_MEAN 48 #define TIXML_LOG OutputDebugString 50 #define TIXML_LOG printf 56 #define TIXML_STRING std::string 57 #define TIXML_ISTREAM std::istream 58 #define TIXML_OSTREAM std::ostream 61 #define TIXML_STRING TiXmlString 62 #define TIXML_OSTREAM TiXmlOutStream 147 virtual void Print( FILE* cfile,
int depth )
const = 0;
188 virtual const char*
Parse(
const char* p,
225 static const char* SkipWhiteSpace(
const char*,
TiXmlEncoding encoding );
228 return ( isspace( (
unsigned char) c ) || c ==
'\n' || c ==
'\r' );
234 static bool StreamWhiteSpace( TIXML_ISTREAM * in,
TIXML_STRING * tag );
235 static bool StreamTo( TIXML_ISTREAM * in,
int character,
TIXML_STRING * tag );
247 static const char* ReadText(
const char* in,
249 bool ignoreWhiteSpace,
255 static const char* GetEntity(
const char* in,
char* value,
int* length,
TiXmlEncoding encoding );
264 *length = utf8ByteTable[ *((
unsigned char*)p) ];
265 assert( *length >= 0 && *length < 5 );
275 return GetEntity( p, _value, length, encoding );
281 strncpy( _value, p, *length );
282 return p + (*length);
300 static bool StringEqual(
const char* p,
305 static const char* errorString[ TIXML_ERROR_STRING_COUNT ];
314 static int IsAlpha(
unsigned char anyByte,
TiXmlEncoding encoding );
315 static int IsAlphaNum(
unsigned char anyByte,
TiXmlEncoding encoding );
320 if ( v < 128 )
return tolower( v );
328 static void ConvertUTF32ToUTF8(
unsigned long input,
char* output,
int* length );
337 unsigned int strLength;
343 MAX_ENTITY_LENGTH = 6
346 static Entity entity[ NUM_ENTITY ];
347 static bool condenseWhiteSpace;
368 friend std::istream& operator >> (std::istream& in,
TiXmlNode& base);
438 void SetValue(
const std::string& _value )
631 virtual void StreamIn( TIXML_ISTREAM* in,
TIXML_STRING* tag ) = 0;
677 TiXmlAttribute(
const std::string& _name,
const std::string& _value )
696 const char*
Name()
const {
return name.c_str (); }
697 const char*
Value()
const {
return value.c_str (); }
698 const int IntValue()
const;
699 const double DoubleValue()
const;
710 int QueryIntValue(
int* value )
const;
712 int QueryDoubleValue(
double* value )
const;
714 void SetName(
const char* _name ) { name = _name; }
715 void SetValue(
const char* _value ) { value = _value; }
717 void SetIntValue(
int value );
718 void SetDoubleValue(
double value );
721 void SetName(
const std::string& _name )
728 void SetValue(
const std::string& _value )
752 virtual void Print( FILE* cfile,
int depth )
const;
834 const char* Attribute(
const char* name )
const;
842 const char* Attribute(
const char* name,
int* i )
const;
850 const char* Attribute(
const char* name,
double* d )
const;
859 int QueryIntAttribute(
const char* name,
int* value )
const;
861 int QueryDoubleAttribute(
const char* name,
double* value )
const;
865 int result = QueryDoubleAttribute( name, &d );
873 void SetAttribute(
const char* name,
const char * value );
876 const char* Attribute(
const std::string& name )
const {
return Attribute( name.c_str() ); }
877 const char* Attribute(
const std::string& name,
int* i )
const {
return Attribute( name.c_str(), i ); }
878 const char* Attribute(
const std::string& name,
double* d )
const {
return Attribute( name.c_str(), d ); }
879 int QueryIntAttribute(
const std::string& name,
int* value )
const {
return QueryIntAttribute( name.c_str(), value ); }
880 int QueryDoubleAttribute(
const std::string& name,
double* value )
const {
return QueryDoubleAttribute( name.c_str(), value ); }
883 void SetAttribute(
const std::string& name,
const std::string& _value )
891 void SetAttribute(
const std::string& name,
int _value )
895 SetAttribute (n.
buffer, _value);
902 void SetAttribute(
const char * name,
int value );
907 void SetDoubleAttribute(
const char * name,
double value );
911 void RemoveAttribute(
const char * name );
913 void RemoveAttribute(
const std::string& name ) { RemoveAttribute (name.c_str ()); }
924 virtual void Print( FILE* cfile,
int depth )
const;
938 virtual void StreamIn( TIXML_ISTREAM * in,
TIXML_STRING * tag );
969 virtual void Print( FILE* cfile,
int depth )
const;
981 virtual void StreamIn( TIXML_ISTREAM * in,
TIXML_STRING * tag );
1003 #ifdef TIXML_USE_STL 1015 virtual void Print( FILE* cfile,
int depth )
const;
1027 #ifdef TIXML_USE_STL 1028 virtual void StreamIn( TIXML_ISTREAM * in,
TIXML_STRING * tag );
1054 #ifdef TIXML_USE_STL 1057 const std::string& _encoding,
1058 const std::string& _standalone );
1063 const char* _encoding,
1064 const char* _standalone );
1072 const char *
Version()
const {
return version.c_str (); }
1074 const char *
Encoding()
const {
return encoding.c_str (); }
1081 virtual void Print( FILE* cfile,
int depth )
const;
1088 #ifdef TIXML_USE_STL 1089 virtual void StreamIn( TIXML_ISTREAM * in,
TIXML_STRING * tag );
1120 virtual void Print( FILE* cfile,
int depth )
const;
1127 #ifdef TIXML_USE_STL 1128 virtual void StreamIn( TIXML_ISTREAM * in,
TIXML_STRING * tag );
1149 #ifdef TIXML_USE_STL 1165 bool SaveFile()
const;
1169 bool SaveFile(
const char * filename )
const;
1171 #ifdef TIXML_USE_STL 1177 bool SaveFile(
const std::string& filename )
const 1205 const char *
ErrorDesc()
const {
return errorDesc.c_str (); }
1252 errorLocation.row = errorLocation.col = 0;
1260 virtual void Print( FILE* cfile,
int depth = 0 )
const;
1268 #ifdef TIXML_USE_STL 1269 virtual void StreamIn( TIXML_ISTREAM * in,
TIXML_STRING * tag );
1375 TiXmlHandle FirstChild(
const char * value )
const;
1379 TiXmlHandle FirstChildElement(
const char * value )
const;
1384 TiXmlHandle Child(
const char* value,
int index )
const;
1393 TiXmlHandle ChildElement(
const char* value,
int index )
const;
1400 #ifdef TIXML_USE_STL 1401 TiXmlHandle FirstChild(
const std::string& _value )
const {
return FirstChild( _value.c_str() ); }
1402 TiXmlHandle FirstChildElement(
const std::string& _value )
const {
return FirstChildElement( _value.c_str() ); }
1404 TiXmlHandle Child(
const std::string& _value,
int index )
const {
return Child( _value.c_str(), index ); }
1405 TiXmlHandle ChildElement(
const std::string& _value,
int index )
const {
return ChildElement( _value.c_str(), index ); }
1413 TiXmlText*
Text()
const {
return ( ( node && node->ToText() ) ? node->ToText() : 0 ); }
1422 #pragma warning( default : 4530 ) 1423 #pragma warning( default : 4786 ) const int ErrorId() const
Definition: tinyxml.h:1210
TiXmlNode * NextSibling()
Definition: tinyxml.h:550
const char * Value() const
Return the value of this attribute.
Definition: tinyxml.h:697
bool operator>(const TiXmlAttribute &rhs) const
Definition: tinyxml.h:744
Definition: tinyxml.h:1141
TiXmlNode * Node() const
Return the handle as a TiXmlNode. This may return null.
Definition: tinyxml.h:1409
const TiXmlComment * ToComment() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:605
TiXmlElement * RootElement()
Definition: tinyxml.h:1195
Definition: tinyxml.h:198
const TiXmlDeclaration * ToDeclaration() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:608
TiXmlHandle(const TiXmlHandle &ref)
Copy constructor.
Definition: tinyxml.h:1369
const TiXmlAttribute * First() const
Definition: tinyxml.h:792
const TiXmlUnknown * ToUnknown() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:606
TiXmlAttribute(const char *_name, const char *_value)
Construct an attribute with a name and value.
Definition: tinyxml.h:688
int row
Definition: tinyxml.h:86
const TiXmlElement * FirstChildElement() const
Convenience function to get through elements.
Definition: tinyxml.cpp:477
void Print() const
Definition: tinyxml.h:1257
int Column() const
See Row()
Definition: tinyxml.h:179
TiXmlText * Text() const
Return the handle as a TiXmlText. This may return null.
Definition: tinyxml.h:1413
Definition: tinyxml.h:205
int col
Definition: tinyxml.h:87
TiXmlNode * FirstChild()
Definition: tinyxml.h:454
int QueryDoubleAttribute(const char *name, float *value) const
QueryFloatAttribute examines the attribute - see QueryIntAttribute().
Definition: tinyxml.h:863
TiXmlDeclaration * ToDeclaration()
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:615
Definition: tinyxml.h:197
void SetUserData(void *user)
Definition: tinyxml.h:181
Definition: tinyxml.h:203
TiXmlCursor location
Definition: tinyxml.h:307
Definition: tinyxml.h:403
Definition: tinyxml.h:194
const TiXmlText * ToText() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:607
Definition: tinyxml.h:202
Definition: tinyxml.h:1108
const char * Value() const
Definition: tinyxml.h:424
static const int utf8ByteTable[256]
Definition: tinyxml.h:186
TiXmlNode * Parent()
One step up the DOM.
Definition: tinyxml.h:450
virtual ~TiXmlBase()
Definition: tinyxml.h:140
Definition: tinyxml.h:1363
Definition: tinyxml.h:199
TiXmlCursor()
Definition: tinyxml.h:83
TiXmlUnknown * Unknown() const
Return the handle as a TiXmlUnknown. This may return null;.
Definition: tinyxml.h:1415
TiXmlText * ToText()
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:614
TIXML_OSTREAM & operator<<(TIXML_OSTREAM &out, const TiXmlNode &base)
Definition: tinyxml.cpp:1482
Definition: tinyxml.h:200
Definition: tinyxml.h:406
const char * Name() const
Return the name of this attribute.
Definition: tinyxml.h:696
Definition: tinyxml.h:208
TiXmlHandle(TiXmlNode *node)
Create a handle from any node (at any depth of the tree.) This can be a null pointer.
Definition: tinyxml.h:1367
bool Error() const
Definition: tinyxml.h:1202
bool NoChildren() const
Returns true if this node has no children.
Definition: tinyxml.h:601
Definition: tinyxml.h:204
const int TIXML_PATCH_VERSION
Definition: tinyxml.h:76
const TiXmlAttribute * LastAttribute() const
Access the last attribute in this element.
Definition: tinyxml.h:918
TiXmlDeclaration()
Construct an empty declaration.
Definition: tinyxml.h:1052
static bool IsWhiteSpaceCondensed()
Return the current white space setting.
Definition: tinyxml.h:158
Definition: tinyxml.h:405
Definition: tinyxml.h:201
TiXmlNode * InsertEndChild(const TiXmlNode &addThis)
Definition: tinyxml.cpp:213
TiXmlElement * Element() const
Return the handle as a TiXmlElement. This may return null.
Definition: tinyxml.h:1411
const TiXmlNode * Parent() const
Definition: tinyxml.h:451
Definition: tinyxml.h:196
const char * ErrorDesc() const
Contains a textual (english) description of the error if one occurs.
Definition: tinyxml.h:1205
virtual TiXmlNode * Clone() const
Creates a new Element and returns it - the returned element is a copy.
Definition: tinyxml.cpp:866
Definition: tinyxml.h:103
void CopyTo(TiXmlText *target) const
Definition: tinyxml.cpp:1252
virtual ~TiXmlText()
Definition: tinyxml.h:1001
Definition: tinyxml.h:357
static void SetCondenseWhiteSpace(bool condense)
Definition: tinyxml.h:155
virtual void Print(FILE *cfile, int depth) const
Definition: tinyxml.cpp:761
void CopyTo(TiXmlElement *target) const
Definition: tinyxml.cpp:843
const TiXmlElement * ToElement() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:604
TiXmlNode * InsertBeforeChild(TiXmlNode *beforeThis, const TiXmlNode &addThis)
Definition: tinyxml.cpp:223
virtual ~TiXmlUnknown()
Definition: tinyxml.h:1112
TiXmlAttribute * LastAttribute()
Definition: tinyxml.h:919
TiXmlNode * lastChild
Definition: tinyxml.h:644
#define TIXML_OSTREAM
Definition: tinyxml.h:62
Definition: tinyxml.h:104
int ErrorRow()
Definition: tinyxml.h:1219
const TiXmlDocument * ToDocument() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:603
const TiXmlNode * PreviousSibling() const
Navigate to a sibling node.
Definition: tinyxml.h:534
const TiXmlEncoding TIXML_DEFAULT_ENCODING
Definition: tinyxml.h:108
const TiXmlNode * NextSibling() const
Navigate to a sibling node.
Definition: tinyxml.h:549
static int ToLower(int v, TiXmlEncoding encoding)
Definition: tinyxml.h:316
const TiXmlNode * LastChild() const
Definition: tinyxml.h:458
static bool IsWhiteSpace(char c)
Definition: tinyxml.h:226
Definition: tinyxml.h:664
virtual void StreamOut(TIXML_OSTREAM *out) const
Definition: tinyxml.cpp:812
const int TIXML_MAJOR_VERSION
Definition: tinyxml.h:74
void CopyTo(TiXmlUnknown *target) const
Definition: tinyxml.cpp:1384
TiXmlNode * LinkEndChild(TiXmlNode *addThis)
Definition: tinyxml.cpp:196
TiXmlNode * Identify(const char *start, TiXmlEncoding encoding)
Definition: tinyxmlparser.cpp:797
virtual ~TiXmlNode()
Definition: tinyxml.cpp:158
Definition: tinyxml.h:401
TiXmlNode * ReplaceChild(TiXmlNode *replaceThis, const TiXmlNode &withThis)
Definition: tinyxml.cpp:275
Definition: tinyxml.h:132
Definition: tinyxmlparser.cpp:162
Definition: tinyxml.h:1048
TiXmlNode * LastChild()
The last child of this node. Will be null if there are no children.
Definition: tinyxml.h:459
virtual ~TiXmlDeclaration()
Definition: tinyxml.h:1069
TiXmlAttribute * FirstAttribute()
Definition: tinyxml.h:917
TiXmlText(const TiXmlText ©)
Definition: tinyxml.h:1011
TiXmlEncoding
Definition: tinyxml.h:101
void operator=(const TiXmlText &base)
Definition: tinyxml.h:1012
const char * Encoding() const
Encoding. Will return an empty string if none was found.
Definition: tinyxml.h:1074
Definition: tinyxml.h:217
TiXmlBase()
Definition: tinyxml.h:139
const TiXmlElement * RootElement() const
Definition: tinyxml.h:1194
void SetName(const char *_name)
Set the name of this attribute.
Definition: tinyxml.h:714
bool operator==(const TiXmlAttribute &rhs) const
Definition: tinyxml.h:742
Definition: tinyxml.h:195
void SetDocument(TiXmlDocument *doc)
Definition: tinyxml.h:757
Definition: tinyxml.h:407
TiXmlUnknown * ToUnknown()
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:613
void operator=(const TiXmlElement &base)
Definition: tinyxml.cpp:640
bool operator<(const TiXmlAttribute &rhs) const
Definition: tinyxml.h:743
TiXmlAttribute()
Construct an empty attribute.
Definition: tinyxml.h:670
TiXmlHandle operator=(const TiXmlHandle &ref)
Definition: tinyxml.h:1370
const TiXmlNode * FirstChild() const
The first child of this node. Will be null if there are no children.
Definition: tinyxml.h:453
static const char * GetChar(const char *p, char *_value, int *length, TiXmlEncoding encoding)
Definition: tinyxml.h:259
bool RemoveChild(TiXmlNode *removeThis)
Delete a child of this node.
Definition: tinyxml.cpp:303
#define assert(exp)
Definition: WinCEFixups.h:37
void ClearError()
Definition: tinyxml.h:1249
Definition: tinyxml.h:207
NodeType
Definition: tinyxml.h:399
TiXmlNode * InsertAfterChild(TiXmlNode *afterThis, const TiXmlNode &addThis)
Definition: tinyxml.cpp:249
void * GetUserData()
Definition: tinyxml.h:182
Definition: tinyxml.h:992
virtual const char * Parse(const char *p, TiXmlParsingData *data=0, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)
Definition: tinyxmlparser.cpp:683
Definition: tinyxml.h:404
char * buffer
Definition: tinyxml.h:222
const TiXmlDocument * GetDocument() const
Definition: tinyxml.cpp:590
TiXmlAttribute * Last()
Definition: tinyxml.h:795
void Clear()
Definition: tinyxml.h:84
void SetValue(const char *_value)
Set the value.
Definition: tinyxml.h:715
Definition: tinyxml.h:402
virtual int Type() const
Definition: tinyxml.h:592
TiXmlNode * next
Definition: tinyxml.h:649
virtual ~TiXmlDocument()
Definition: tinyxml.h:1157
TiXmlNode * firstChild
Definition: tinyxml.h:643
Definition: tinyxml.h:783
Definition: tinyxml.h:814
NodeType type
Definition: tinyxml.h:641
TiXmlNode(NodeType _type)
Definition: tinyxml.cpp:147
int TabSize() const
Definition: tinyxml.h:1244
const TiXmlElement * NextSiblingElement() const
Definition: tinyxml.cpp:533
void operator=(const TiXmlUnknown ©)
Definition: tinyxml.h:1115
TiXmlDocument * ToDocument()
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:610
Definition: tinyxml.h:206
TiXmlNode * parent
Definition: tinyxml.h:640
const TiXmlNode * IterateChildren(const TiXmlNode *previous) const
Definition: tinyxml.cpp:371
const char * Version() const
Version. Will return an empty string if none was found.
Definition: tinyxml.h:1072
const TIXML_STRING & SValue() const
Definition: tinyxml.h:638
TiXmlText(const char *initValue)
Constructor.
Definition: tinyxml.h:997
TiXmlElement * ToElement()
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:611
TiXmlComment * ToComment()
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:612
const TiXmlAttribute * FirstAttribute() const
Access the first attribute in this element.
Definition: tinyxml.h:916
void * userData
Field containing a generic user pointer.
Definition: tinyxml.h:310
int ErrorCol()
The column where the error occured. See ErrorRow()
Definition: tinyxml.h:1220
TIXML_STRING value
Definition: tinyxml.h:646
virtual const char * Parse(const char *p, TiXmlParsingData *data, TiXmlEncoding encoding)
Definition: tinyxmlparser.cpp:1006
TiXmlUnknown()
Definition: tinyxml.h:1111
TiXmlNode * PreviousSibling()
Definition: tinyxml.h:535
const TiXmlAttribute * Last() const
Definition: tinyxml.h:794
int Row() const
Definition: tinyxml.h:178
void SetValue(const char *_value)
Definition: tinyxml.h:435
void SetTabSize(int _tabsize)
Definition: tinyxml.h:1242
const char * Standalone() const
Is this a standalone document?
Definition: tinyxml.h:1076
TiXmlUnknown(const TiXmlUnknown ©)
Definition: tinyxml.h:1114
Definition: tinyxml.h:210
#define TIXML_STRING
Definition: tinyxml.h:61
const int TIXML_MINOR_VERSION
Definition: tinyxml.h:75
TiXmlAttribute * First()
Definition: tinyxml.h:793
TiXmlNode * prev
Definition: tinyxml.h:648
Definition: tinyxml.h:105