Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
tinyxml.h
Go to the documentation of this file.
1/*
2www.sourceforge.net/projects/tinyxml
3Original code by Lee Thomason (www.grinninglizard.com)
4
5This software is provided 'as-is', without any express or implied
6warranty. In no event will the authors be held liable for any
7damages arising from the use of this software.
8
9Permission is granted to anyone to use this software for any
10purpose, including commercial applications, and to alter it and
11redistribute it freely, subject to the following restrictions:
12
131. The origin of this software must not be misrepresented; you must
14not claim that you wrote the original software. If you use this
15software in a product, an acknowledgment in the product documentation
16would be appreciated but is not required.
17
182. Altered source versions must be plainly marked as such, and
19must not be misrepresented as being the original software.
20
213. This notice may not be removed or altered from any source
22distribution.
23*/
24
25
26#ifndef PANDORA_TINYXML_INCLUDED
27#define PANDORA_TINYXML_INCLUDED
28
29#ifndef TIXML_USE_STL // Allowed use of the stl
30#define TIXML_USE_STL
31#endif
32
33#ifdef _MSC_VER
34#pragma warning( push )
35#pragma warning( disable : 4530 )
36#pragma warning( disable : 4786 )
37#endif
38
39#include <ctype.h>
40#include <stdio.h>
41#include <stdlib.h>
42#include <string.h>
43#include <assert.h>
44
45// Help out windows:
46#if defined( _DEBUG ) && !defined( DEBUG )
47#define DEBUG
48#endif
49
50#ifdef TIXML_USE_STL
51 #include <string>
52 #include <iostream>
53 #include <sstream>
54 #define TIXML_STRING std::string
55#else
56 #include "tinystr.h"
57 #define TIXML_STRING TiXmlString
58#endif
59
60// Deprecated library function hell. Compilers want to use the
61// new safe versions. This probably doesn't fully address the problem,
62// but it gets closer. There are too many compilers for me to fully
63// test. If you get compilation troubles, undefine TIXML_SAFE
64#define TIXML_SAFE
65
66#ifdef TIXML_SAFE
67 #if defined(_MSC_VER) && (_MSC_VER >= 1400 )
68 // Microsoft visual studio, version 2005 and higher.
69 #define TIXML_SNPRINTF _snprintf_s
70 #define TIXML_SSCANF sscanf_s
71 #elif defined(_MSC_VER) && (_MSC_VER >= 1200 )
72 // Microsoft visual studio, version 6 and higher.
73 //#pragma message( "Using _sn* functions." )
74 #define TIXML_SNPRINTF _snprintf
75 #define TIXML_SSCANF sscanf
76 #elif defined(__GNUC__) && (__GNUC__ >= 3 )
77 // GCC version 3 and higher.s
78 //#warning( "Using sn* functions." )
79 #define TIXML_SNPRINTF snprintf
80 #define TIXML_SSCANF sscanf
81 #else
82 #define TIXML_SNPRINTF snprintf
83 #define TIXML_SSCANF sscanf
84 #endif
85#endif
86
87namespace pandora // Added namespace
88{
89
90class TiXmlDocument;
91class TiXmlElement;
92class TiXmlComment;
93class TiXmlUnknown;
94class TiXmlAttribute;
95class TiXmlText;
96class TiXmlDeclaration;
97class TiXmlParsingData;
98
99const int TIXML_MAJOR_VERSION = 2;
102
103/* Internal structure for tracking location of items
104 in the XML file.
105*/
107{
109 void Clear() { row = col = -1; }
110
111 int row; // 0 based.
112 int col; // 0 based.
113};
114
115
136{
137public:
138 virtual ~TiXmlVisitor() {}
139
141 virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) { return true; }
143 virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) { return true; }
144
146 virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) { return true; }
148 virtual bool VisitExit( const TiXmlElement& /*element*/ ) { return true; }
149
151 virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) { return true; }
153 virtual bool Visit( const TiXmlText& /*text*/ ) { return true; }
155 virtual bool Visit( const TiXmlComment& /*comment*/ ) { return true; }
157 virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) { return true; }
158};
159
160// Only used by Attribute::Query functions
161enum
162{
167
168
169// Used by the parsing routines.
176
178
202{
203 friend class TiXmlNode;
204 friend class TiXmlElement;
205 friend class TiXmlDocument;
206
207public:
209 virtual ~TiXmlBase() {}
210
220 virtual void Print( FILE* cfile, int depth ) const = 0;
221
228 static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; }
229
232
251 int Row() const { return location.row + 1; }
252 int Column() const { return location.col + 1; }
253
254 void SetUserData( void* user ) { userData = user; }
255 void* GetUserData() { return userData; }
256 const void* GetUserData() const { return userData; }
257
258 // Table that returs, for a given lead byte, the total number of bytes
259 // in the UTF-8 sequence.
260 static const int utf8ByteTable[256];
261
262 virtual const char* Parse( const char* p,
263 TiXmlParsingData* data,
264 TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0;
265
269 static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out );
270
271 enum
272 {
289
291 };
292
293protected:
294
295 static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding );
296
297 inline static bool IsWhiteSpace( char c )
298 {
299 return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' );
300 }
301 inline static bool IsWhiteSpace( int c )
302 {
303 if ( c < 256 )
304 return IsWhiteSpace( (char) c );
305 return false; // Again, only truly correct for English/Latin...but usually works.
306 }
307
308 #ifdef TIXML_USE_STL
309 static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag );
310 static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag );
311 #endif
312
313 /* Reads an XML name into the string provided. Returns
314 a pointer just past the last character of the name,
315 or 0 if the function has an error.
316 */
317 static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding );
318
319 /* Reads text. Returns a pointer past the given end tag.
320 Wickedly complex options, but it keeps the (sensitive) code in one place.
321 */
322 static const char* ReadText( const char* in, // where to start
323 TIXML_STRING* text, // the string read
324 bool ignoreWhiteSpace, // whether to keep the white space
325 const char* endTag, // what ends this text
326 bool ignoreCase, // whether to ignore case in the end tag
327 TiXmlEncoding encoding ); // the current encoding
328
329 // If an entity has been found, transform it into a character.
330 static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding );
331
332 // Get a character, while interpreting entities.
333 // The length can be from 0 to 4 bytes.
334 inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding )
335 {
336 assert( p );
337 if ( encoding == TIXML_ENCODING_UTF8 )
338 {
339 *length = utf8ByteTable[ *((const unsigned char*)p) ];
340 assert( *length >= 0 && *length < 5 );
341 }
342 else
343 {
344 *length = 1;
345 }
346
347 if ( *length == 1 )
348 {
349 if ( *p == '&' )
350 return GetEntity( p, _value, length, encoding );
351 *_value = *p;
352 return p+1;
353 }
354 else if ( *length )
355 {
356 //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe),
357 // and the null terminator isn't needed
358 for( int i=0; p[i] && i<*length; ++i ) {
359 _value[i] = p[i];
360 }
361 return p + (*length);
362 }
363 else
364 {
365 // Not valid text.
366 return 0;
367 }
368 }
369
370 // Return true if the next characters in the stream are any of the endTag sequences.
371 // Ignore case only works for english, and should only be relied on when comparing
372 // to English words: StringEqual( p, "version", true ) is fine.
373 static bool StringEqual( const char* p,
374 const char* endTag,
375 bool ignoreCase,
376 TiXmlEncoding encoding );
377
379
381
383 void* userData;
384
385 // None of these methods are reliable for any language except English.
386 // Good for approximation, not great for accuracy.
387 static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding );
388 static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding );
389 inline static int ToLower( int v, TiXmlEncoding encoding )
390 {
391 if ( encoding == TIXML_ENCODING_UTF8 )
392 {
393 if ( v < 128 ) return tolower( v );
394 return v;
395 }
396 else
397 {
398 return tolower( v );
399 }
400 }
401 static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );
402
403private:
404 TiXmlBase( const TiXmlBase& ); // not implemented.
405 void operator=( const TiXmlBase& base ); // not allowed.
406
407 struct Entity
408 {
409 const char* str;
410 unsigned int strLength;
411 char chr;
412 };
413 enum
414 {
417
418 };
421};
422
423
430class TiXmlNode : public TiXmlBase
431{
432 friend class TiXmlDocument;
433 friend class TiXmlElement;
434
435public:
436 #ifdef TIXML_USE_STL
437
441 friend std::istream& operator >> (std::istream& in, TiXmlNode& base);
442
459 friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base);
460
462 friend std::string& operator<< (std::string& out, const TiXmlNode& base );
463
464 #endif
465
479
480 virtual ~TiXmlNode();
481
494 const char *Value() const { return value.c_str (); }
495
496 #ifdef TIXML_USE_STL
501 const std::string& ValueStr() const { return value; }
502 #endif
503
504 const TIXML_STRING& ValueTStr() const { return value; }
505
515 void SetValue(const char * _value) { value = _value;}
516
517 #ifdef TIXML_USE_STL
519 void SetValue( const std::string& _value ) { value = _value; }
520 #endif
521
523 void Clear();
524
526 TiXmlNode* Parent() { return parent; }
527 const TiXmlNode* Parent() const { return parent; }
528
529 const TiXmlNode* FirstChild() const { return firstChild; }
531 const TiXmlNode* FirstChild( const char * value ) const;
533 TiXmlNode* FirstChild( const char * _value ) {
534 // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe)
535 // call the method, cast the return back to non-const.
536 return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value ));
537 }
538 const TiXmlNode* LastChild() const { return lastChild; }
540
541 const TiXmlNode* LastChild( const char * value ) const;
542 TiXmlNode* LastChild( const char * _value ) {
543 return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value ));
544 }
545
546 #ifdef TIXML_USE_STL
547 const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); }
548 TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); }
549 const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); }
550 TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); }
551 #endif
552
569 const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const;
570 TiXmlNode* IterateChildren( const TiXmlNode* previous ) {
571 return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) );
572 }
573
575 const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const;
576 TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) {
577 return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) );
578 }
579
580 #ifdef TIXML_USE_STL
581 const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); }
582 TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); }
583 #endif
584
588 TiXmlNode* InsertEndChild( const TiXmlNode& addThis );
589
590
600 TiXmlNode* LinkEndChild( TiXmlNode* addThis );
601
605 TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis );
606
610 TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis );
611
615 TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis );
616
618 bool RemoveChild( TiXmlNode* removeThis );
619
621 const TiXmlNode* PreviousSibling() const { return prev; }
623
625 const TiXmlNode* PreviousSibling( const char * ) const;
626 TiXmlNode* PreviousSibling( const char *_prev ) {
627 return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) );
628 }
629
630 #ifdef TIXML_USE_STL
631 const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); }
632 TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); }
633 const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); }
634 TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); }
635 #endif
636
638 const TiXmlNode* NextSibling() const { return next; }
640
642 const TiXmlNode* NextSibling( const char * ) const;
643 TiXmlNode* NextSibling( const char* _next ) {
644 return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) );
645 }
646
651 const TiXmlElement* NextSiblingElement() const;
653 return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() );
654 }
655
660 const TiXmlElement* NextSiblingElement( const char * ) const;
661 TiXmlElement* NextSiblingElement( const char *_next ) {
662 return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) );
663 }
664
665 #ifdef TIXML_USE_STL
666 const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); }
667 TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); }
668 #endif
669
671 const TiXmlElement* FirstChildElement() const;
673 return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() );
674 }
675
677 const TiXmlElement* FirstChildElement( const char * _value ) const;
678 TiXmlElement* FirstChildElement( const char * _value ) {
679 return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) );
680 }
681
682 #ifdef TIXML_USE_STL
683 const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); }
684 TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); }
685 #endif
686
691 int Type() const { return type; }
692
696 const TiXmlDocument* GetDocument() const;
698 return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() );
699 }
700
702 bool NoChildren() const { return !firstChild; }
703
704 virtual const TiXmlDocument* ToDocument() const { return 0; }
705 virtual const TiXmlElement* ToElement() const { return 0; }
706 virtual const TiXmlComment* ToComment() const { return 0; }
707 virtual const TiXmlUnknown* ToUnknown() const { return 0; }
708 virtual const TiXmlText* ToText() const { return 0; }
709 virtual const TiXmlDeclaration* ToDeclaration() const { return 0; }
710
711 virtual TiXmlDocument* ToDocument() { return 0; }
712 virtual TiXmlElement* ToElement() { return 0; }
713 virtual TiXmlComment* ToComment() { return 0; }
714 virtual TiXmlUnknown* ToUnknown() { return 0; }
715 virtual TiXmlText* ToText() { return 0; }
716 virtual TiXmlDeclaration* ToDeclaration() { return 0; }
717
721 virtual TiXmlNode* Clone() const = 0;
722
745 virtual bool Accept( TiXmlVisitor* visitor ) const = 0;
746
747protected:
748 TiXmlNode( NodeType _type );
749
750 // Copy to the allocated object. Shared functionality between Clone, Copy constructor,
751 // and the assignment operator.
752 void CopyTo( TiXmlNode* target ) const;
753
754 #ifdef TIXML_USE_STL
755 // The real work of the input operator.
756 virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0;
757 #endif
758
759 // Figure out what is at *p, and parse it. Returns null if it is not an xml node.
760 TiXmlNode* Identify( const char* start, TiXmlEncoding encoding );
761
764
767
769
772
773private:
774 TiXmlNode( const TiXmlNode& ); // not implemented.
775 void operator=( const TiXmlNode& base ); // not allowed.
776};
777
778
787{
788 friend class TiXmlAttributeSet;
789
790public:
793 {
794 document = 0;
795 prev = next = 0;
796 }
797
798 #ifdef TIXML_USE_STL
800 TiXmlAttribute( const std::string& _name, const std::string& _value )
801 {
802 name = _name;
803 value = _value;
804 document = 0;
805 prev = next = 0;
806 }
807 #endif
808
810 TiXmlAttribute( const char * _name, const char * _value )
811 {
812 name = _name;
813 value = _value;
814 document = 0;
815 prev = next = 0;
816 }
817
818 const char* Name() const { return name.c_str(); }
819 const char* Value() const { return value.c_str(); }
820 #ifdef TIXML_USE_STL
821 const std::string& ValueStr() const { return value; }
822 #endif
823 int IntValue() const;
824 double DoubleValue() const;
825
826 // Get the tinyxml string representation
827 const TIXML_STRING& NameTStr() const { return name; }
828
838 int QueryIntValue( int* _value ) const;
840 int QueryDoubleValue( double* _value ) const;
841
842 void SetName( const char* _name ) { name = _name; }
843 void SetValue( const char* _value ) { value = _value; }
844
845 void SetIntValue( int _value );
846 void SetDoubleValue( double _value );
847
848 #ifdef TIXML_USE_STL
850 void SetName( const std::string& _name ) { name = _name; }
852 void SetValue( const std::string& _value ) { value = _value; }
853 #endif
854
856 const TiXmlAttribute* Next() const;
858 return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() );
859 }
860
862 const TiXmlAttribute* Previous() const;
864 return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() );
865 }
866
867 bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; }
868 bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; }
869 bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; }
870
871 /* Attribute parsing starts: first letter of the name
872 returns: the next char after the value end quote
873 */
874 virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
875
876 // Prints this Attribute to a FILE stream.
877 virtual void Print( FILE* cfile, int depth ) const {
878 Print( cfile, depth, 0 );
879 }
880 void Print( FILE* cfile, int depth, TIXML_STRING* str ) const;
881
882 // [internal use]
883 // Set the document pointer so the attribute can report errors.
884 void SetDocument( TiXmlDocument* doc ) { document = doc; }
885
886private:
887 TiXmlAttribute( const TiXmlAttribute& ); // not implemented.
888 void operator=( const TiXmlAttribute& base ); // not allowed.
889
890 TiXmlDocument* document; // A pointer back to a document, for error reporting.
895};
896
897
898/* A class used to manage a group of attributes.
899 It is only used internally, both by the ELEMENT and the DECLARATION.
900
901 The set can be changed transparent to the Element and Declaration
902 classes that use it, but NOT transparent to the Attribute
903 which has to implement a next() and previous() method. Which makes
904 it a bit problematic and prevents the use of STL.
905
906 This version is implemented with circular lists because:
907 - I like circular lists
908 - it demonstrates some independence from the (typical) doubly linked list.
909*/
911{
912public:
915
916 void Add( TiXmlAttribute* attribute );
917 void Remove( TiXmlAttribute* attribute );
918
919 const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; }
921 const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; }
922 TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; }
923
924 TiXmlAttribute* Find( const char* _name ) const;
925 TiXmlAttribute* FindOrCreate( const char* _name );
926
927# ifdef TIXML_USE_STL
928 TiXmlAttribute* Find( const std::string& _name ) const;
929 TiXmlAttribute* FindOrCreate( const std::string& _name );
930# endif
931
932
933private:
934 //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element),
935 //*ME: this class must be also use a hidden/disabled copy-constructor !!!
936 TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed
937 void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute)
938
940};
941
942
948{
949public:
951 TiXmlElement (const char * in_value);
952
953 #ifdef TIXML_USE_STL
955 TiXmlElement( const std::string& _value );
956 #endif
957
958 TiXmlElement( const TiXmlElement& );
959
960 TiXmlElement& operator=( const TiXmlElement& base );
961
962 virtual ~TiXmlElement();
963
967 const char* Attribute( const char* name ) const;
968
975 const char* Attribute( const char* name, int* i ) const;
976
983 const char* Attribute( const char* name, double* d ) const;
984
992 int QueryIntAttribute( const char* name, int* _value ) const;
994 int QueryUnsignedAttribute( const char* name, unsigned* _value ) const;
999 int QueryBoolAttribute( const char* name, bool* _value ) const;
1001 int QueryDoubleAttribute( const char* name, double* _value ) const;
1003 int QueryFloatAttribute( const char* name, float* _value ) const {
1004 double d;
1005 int result = QueryDoubleAttribute( name, &d );
1006 if ( result == TIXML_SUCCESS ) {
1007 *_value = (float)d;
1008 }
1009 return result;
1010 }
1011
1012 #ifdef TIXML_USE_STL
1014 int QueryStringAttribute( const char* name, std::string* _value ) const {
1015 const char* cstr = Attribute( name );
1016 if ( cstr ) {
1017 *_value = std::string( cstr );
1018 return TIXML_SUCCESS;
1019 }
1020 return TIXML_NO_ATTRIBUTE;
1021 }
1022
1031 template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const
1032 {
1033 const TiXmlAttribute* node = attributeSet.Find( name );
1034 if ( !node )
1035 return TIXML_NO_ATTRIBUTE;
1036
1037 std::stringstream sstream( node->ValueStr() );
1038 sstream >> *outValue;
1039 if ( !sstream.fail() )
1040 return TIXML_SUCCESS;
1041 return TIXML_WRONG_TYPE;
1042 }
1043
1044 int QueryValueAttribute( const std::string& name, std::string* outValue ) const
1045 {
1046 const TiXmlAttribute* node = attributeSet.Find( name );
1047 if ( !node )
1048 return TIXML_NO_ATTRIBUTE;
1049 *outValue = node->ValueStr();
1050 return TIXML_SUCCESS;
1051 }
1052 #endif
1053
1057 void SetAttribute( const char* name, const char * _value );
1058
1059 #ifdef TIXML_USE_STL
1060 const std::string* Attribute( const std::string& name ) const;
1061 const std::string* Attribute( const std::string& name, int* i ) const;
1062 const std::string* Attribute( const std::string& name, double* d ) const;
1063 int QueryIntAttribute( const std::string& name, int* _value ) const;
1064 int QueryDoubleAttribute( const std::string& name, double* _value ) const;
1065
1067 void SetAttribute( const std::string& name, const std::string& _value );
1069 void SetAttribute( const std::string& name, int _value );
1071 void SetDoubleAttribute( const std::string& name, double value );
1072 #endif
1073
1077 void SetAttribute( const char * name, int value );
1078
1082 void SetDoubleAttribute( const char * name, double value );
1083
1086 void RemoveAttribute( const char * name );
1087 #ifdef TIXML_USE_STL
1088 void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); }
1089 #endif
1090
1091 const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); }
1093 const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); }
1095
1128 const char* GetText() const;
1129
1131 virtual TiXmlNode* Clone() const;
1132 // Print the Element to a FILE stream.
1133 virtual void Print( FILE* cfile, int depth ) const;
1134
1135 /* Attribtue parsing starts: next char past '<'
1136 returns: next char past '>'
1137 */
1138 virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
1139
1140 virtual const TiXmlElement* ToElement() const { return this; }
1141 virtual TiXmlElement* ToElement() { return this; }
1142
1145 virtual bool Accept( TiXmlVisitor* visitor ) const;
1146
1147protected:
1148
1149 void CopyTo( TiXmlElement* target ) const;
1150 void ClearThis(); // like clear, but initializes 'this' object as well
1151
1152 // Used to be public [internal use]
1153 #ifdef TIXML_USE_STL
1154 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1155 #endif
1156 /* [internal use]
1157 Reads the "value" of the element -- another element, or text.
1158 This should terminate with the current end tag.
1159 */
1160 const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding );
1161
1162private:
1164};
1165
1166
1170{
1171public:
1175 TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {
1176 SetValue( _value );
1177 }
1178 TiXmlComment( const TiXmlComment& );
1179 TiXmlComment& operator=( const TiXmlComment& base );
1180
1181 virtual ~TiXmlComment() {}
1182
1184 virtual TiXmlNode* Clone() const;
1185 // Write this Comment to a FILE stream.
1186 virtual void Print( FILE* cfile, int depth ) const;
1187
1188 /* Attribtue parsing starts: at the ! of the !--
1189 returns: next char past '>'
1190 */
1191 virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
1192
1193 virtual const TiXmlComment* ToComment() const { return this; }
1194 virtual TiXmlComment* ToComment() { return this; }
1195
1198 virtual bool Accept( TiXmlVisitor* visitor ) const;
1199
1200protected:
1201 void CopyTo( TiXmlComment* target ) const;
1202
1203 // used to be public
1204 #ifdef TIXML_USE_STL
1205 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1206 #endif
1207// virtual void StreamOut( TIXML_OSTREAM * out ) const;
1208
1209private:
1210
1211};
1212
1213
1219class TiXmlText : public TiXmlNode
1220{
1221 friend class TiXmlElement;
1222public:
1227 TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT)
1228 {
1229 SetValue( initValue );
1230 cdata = false;
1231 }
1232 virtual ~TiXmlText() {}
1233
1234 #ifdef TIXML_USE_STL
1236 TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT)
1237 {
1238 SetValue( initValue );
1239 cdata = false;
1240 }
1241 #endif
1242
1243 TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT ) { copy.CopyTo( this ); }
1244 TiXmlText& operator=( const TiXmlText& base ) { base.CopyTo( this ); return *this; }
1245
1246 // Write this text object to a FILE stream.
1247 virtual void Print( FILE* cfile, int depth ) const;
1248
1250 bool CDATA() const { return cdata; }
1252 void SetCDATA( bool _cdata ) { cdata = _cdata; }
1253
1254 virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
1255
1256 virtual const TiXmlText* ToText() const { return this; }
1257 virtual TiXmlText* ToText() { return this; }
1258
1261 virtual bool Accept( TiXmlVisitor* content ) const;
1262
1263protected :
1265 virtual TiXmlNode* Clone() const;
1266 void CopyTo( TiXmlText* target ) const;
1267
1268 bool Blank() const; // returns true if all white space and new lines
1269 // [internal use]
1270 #ifdef TIXML_USE_STL
1271 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1272 #endif
1273
1274private:
1275 bool cdata; // true if this should be input and output as a CDATA style text element
1276};
1277
1278
1293{
1294public:
1297
1298#ifdef TIXML_USE_STL
1300 TiXmlDeclaration( const std::string& _version,
1301 const std::string& _encoding,
1302 const std::string& _standalone );
1303#endif
1304
1306 TiXmlDeclaration( const char* _version,
1307 const char* _encoding,
1308 const char* _standalone );
1309
1310 TiXmlDeclaration( const TiXmlDeclaration& copy );
1312
1314
1316 const char *Version() const { return version.c_str (); }
1318 const char *Encoding() const { return encoding.c_str (); }
1320 const char *Standalone() const { return standalone.c_str (); }
1321
1323 virtual TiXmlNode* Clone() const;
1324 // Print this declaration to a FILE stream.
1325 virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const;
1326 virtual void Print( FILE* cfile, int depth ) const {
1327 Print( cfile, depth, 0 );
1328 }
1329
1330 virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
1331
1332 virtual const TiXmlDeclaration* ToDeclaration() const { return this; }
1333 virtual TiXmlDeclaration* ToDeclaration() { return this; }
1334
1337 virtual bool Accept( TiXmlVisitor* visitor ) const;
1338
1339protected:
1340 void CopyTo( TiXmlDeclaration* target ) const;
1341 // used to be public
1342 #ifdef TIXML_USE_STL
1343 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1344 #endif
1345
1346private:
1347
1351};
1352
1353
1362{
1363public:
1365 virtual ~TiXmlUnknown() {}
1366
1368 TiXmlUnknown& operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); return *this; }
1369
1371 virtual TiXmlNode* Clone() const;
1372 // Print this Unknown to a FILE stream.
1373 virtual void Print( FILE* cfile, int depth ) const;
1374
1375 virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
1376
1377 virtual const TiXmlUnknown* ToUnknown() const { return this; }
1378 virtual TiXmlUnknown* ToUnknown() { return this; }
1379
1382 virtual bool Accept( TiXmlVisitor* content ) const;
1383
1384protected:
1385 void CopyTo( TiXmlUnknown* target ) const;
1386
1387 #ifdef TIXML_USE_STL
1388 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1389 #endif
1390
1391private:
1392
1393};
1394
1395
1401{
1402public:
1404 TiXmlDocument();
1406 TiXmlDocument( const char * documentName );
1407
1408 #ifdef TIXML_USE_STL
1410 TiXmlDocument( const std::string& documentName );
1411 #endif
1412
1413 TiXmlDocument( const TiXmlDocument& copy );
1414 TiXmlDocument& operator=( const TiXmlDocument& copy );
1415
1416 virtual ~TiXmlDocument() {}
1417
1424 bool SaveFile() const;
1426 bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
1428 bool SaveFile( const char * filename ) const;
1434 bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
1436 bool SaveFile( FILE* ) const;
1437
1438 #ifdef TIXML_USE_STL
1439 bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING )
1440 {
1441 return LoadFile( filename.c_str(), encoding );
1442 }
1443 bool SaveFile( const std::string& filename ) const
1444 {
1445 return SaveFile( filename.c_str() );
1446 }
1447 #endif
1448
1453 virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
1454
1459 const TiXmlElement* RootElement() const { return FirstChildElement(); }
1461
1467 bool Error() const { return error; }
1468
1470 const char * ErrorDesc() const { return errorDesc.c_str (); }
1471
1475 int ErrorId() const { return errorId; }
1476
1484 int ErrorRow() const { return errorLocation.row+1; }
1485 int ErrorCol() const { return errorLocation.col+1; }
1486
1511 void SetTabSize( int _tabsize ) { tabsize = _tabsize; }
1512
1513 int TabSize() const { return tabsize; }
1514
1518 void ClearError() { error = false;
1519 errorId = 0;
1520 errorDesc = "";
1522 //errorLocation.last = 0;
1523 }
1524
1526 void Print() const { Print( stdout, 0 ); }
1527
1528 /* Write the document to a string using formatted printing ("pretty print"). This
1529 will allocate a character array (new char[]) and return it as a pointer. The
1530 calling code pust call delete[] on the return char* to avoid a memory leak.
1531 */
1532 //char* PrintToMemory() const;
1533
1535 virtual void Print( FILE* cfile, int depth = 0 ) const;
1536 // [internal use]
1537 void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding );
1538
1539 virtual const TiXmlDocument* ToDocument() const { return this; }
1540 virtual TiXmlDocument* ToDocument() { return this; }
1541
1544 virtual bool Accept( TiXmlVisitor* content ) const;
1545
1546protected :
1547 // [internal use]
1548 virtual TiXmlNode* Clone() const;
1549 #ifdef TIXML_USE_STL
1550 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1551 #endif
1552
1553private:
1554 void CopyTo( TiXmlDocument* target ) const;
1555
1556 bool error;
1561 bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write.
1562};
1563
1564
1646{
1647public:
1649 TiXmlHandle( TiXmlNode* _node ) { this->node = _node; }
1651 TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; }
1652 TiXmlHandle operator=( const TiXmlHandle& ref ) { if ( &ref != this ) this->node = ref.node; return *this; }
1653
1655 TiXmlHandle FirstChild() const;
1657 TiXmlHandle FirstChild( const char * value ) const;
1661 TiXmlHandle FirstChildElement( const char * value ) const;
1662
1666 TiXmlHandle Child( const char* value, int index ) const;
1670 TiXmlHandle Child( int index ) const;
1675 TiXmlHandle ChildElement( const char* value, int index ) const;
1680 TiXmlHandle ChildElement( int index ) const;
1681
1682 #ifdef TIXML_USE_STL
1683 TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); }
1684 TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); }
1685
1686 TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); }
1687 TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); }
1688 #endif
1689
1692 TiXmlNode* ToNode() const { return node; }
1695 TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); }
1698 TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); }
1701 TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); }
1702
1706 TiXmlNode* Node() const { return ToNode(); }
1710 TiXmlElement* Element() const { return ToElement(); }
1714 TiXmlText* Text() const { return ToText(); }
1718 TiXmlUnknown* Unknown() const { return ToUnknown(); }
1719
1720private:
1722};
1723
1724
1745{
1746public:
1748 buffer(), indent( " " ), lineBreak( "\n" ) {}
1749
1750 virtual bool VisitEnter( const TiXmlDocument& doc );
1751 virtual bool VisitExit( const TiXmlDocument& doc );
1752
1753 virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute );
1754 virtual bool VisitExit( const TiXmlElement& element );
1755
1756 virtual bool Visit( const TiXmlDeclaration& declaration );
1757 virtual bool Visit( const TiXmlText& text );
1758 virtual bool Visit( const TiXmlComment& comment );
1759 virtual bool Visit( const TiXmlUnknown& unknown );
1760
1764 void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; }
1766 const char* Indent() { return indent.c_str(); }
1771 void SetLineBreak( const char* _lineBreak ) { lineBreak = _lineBreak ? _lineBreak : ""; }
1773 const char* LineBreak() { return lineBreak.c_str(); }
1774
1779 lineBreak = "";
1780 }
1782 const char* CStr() { return buffer.c_str(); }
1784 size_t Size() { return buffer.size(); }
1785
1786 #ifdef TIXML_USE_STL
1788 const std::string& Str() { return buffer; }
1789 #endif
1790
1791private:
1792 void DoIndent() {
1793 for( int i=0; i<depth; ++i )
1794 buffer += indent;
1795 }
1797 buffer += lineBreak;
1798 }
1799
1805};
1806
1807
1808#ifdef _MSC_VER
1809#pragma warning( pop )
1810#endif
1811
1812} // Added namespace pandora
1813
1814#endif // PANDORA_TINYXML_INCLUDED
const char * Name() const
Return the name of this attribute.
Definition tinyxml.h:818
int QueryIntValue(int *_value) const
Definition tinyxml.cc:1239
double DoubleValue() const
Return the value of this attribute, converted to a double.
Definition tinyxml.cc:1280
const char * Value() const
Return the value of this attribute.
Definition tinyxml.h:819
TIXML_STRING name
Definition tinyxml.h:891
bool operator<(const TiXmlAttribute &rhs) const
Definition tinyxml.h:868
void SetValue(const char *_value)
Set the value.
Definition tinyxml.h:843
TiXmlAttribute * prev
Definition tinyxml.h:893
bool operator==(const TiXmlAttribute &rhs) const
Definition tinyxml.h:867
TiXmlAttribute(const char *_name, const char *_value)
Construct an attribute with a name and value.
Definition tinyxml.h:810
TiXmlAttribute * Next()
Definition tinyxml.h:857
void operator=(const TiXmlAttribute &base)
TiXmlAttribute(const TiXmlAttribute &)
TiXmlAttribute * Previous()
Definition tinyxml.h:863
virtual void Print(FILE *cfile, int depth) const
Definition tinyxml.h:877
void SetValue(const std::string &_value)
STL std::string form.
Definition tinyxml.h:852
const TiXmlAttribute * Previous() const
Get the previous sibling attribute in the DOM. Returns null at beginning.
Definition tinyxml.cc:1193
TiXmlDocument * document
Definition tinyxml.h:890
void SetName(const char *_name)
Set the name of this attribute.
Definition tinyxml.h:842
int QueryDoubleValue(double *_value) const
QueryDoubleValue examines the value string. See QueryIntValue().
Definition tinyxml.cc:1246
void SetIntValue(int _value)
Set the value from an integer.
Definition tinyxml.cc:1253
void SetDoubleValue(double _value)
Set the value from a double.
Definition tinyxml.cc:1264
const TiXmlAttribute * Next() const
Get the next sibling attribute in the DOM. Returns null at end.
Definition tinyxml.cc:1173
TiXmlAttribute * next
Definition tinyxml.h:894
bool operator>(const TiXmlAttribute &rhs) const
Definition tinyxml.h:869
int IntValue() const
Return the value of this attribute, converted to an integer.
Definition tinyxml.cc:1275
virtual const char * Parse(const char *p, TiXmlParsingData *data, TiXmlEncoding encoding)
void SetName(const std::string &_name)
STL std::string form.
Definition tinyxml.h:850
TiXmlAttribute(const std::string &_name, const std::string &_value)
std::string constructor.
Definition tinyxml.h:800
void SetDocument(TiXmlDocument *doc)
Definition tinyxml.h:884
TIXML_STRING value
Definition tinyxml.h:892
const std::string & ValueStr() const
Return the value of this attribute.
Definition tinyxml.h:821
const TIXML_STRING & NameTStr() const
Definition tinyxml.h:827
TiXmlAttribute()
Construct an empty attribute.
Definition tinyxml.h:792
TiXmlAttribute * FindOrCreate(const char *_name)
Definition tinyxml.cc:1586
TiXmlAttribute * Last()
Definition tinyxml.h:922
const TiXmlAttribute * First() const
Definition tinyxml.h:919
const TiXmlAttribute * Last() const
Definition tinyxml.h:921
TiXmlAttribute * Find(const char *_name) const
Definition tinyxml.cc:1575
TiXmlAttribute sentinel
Definition tinyxml.h:939
TiXmlAttribute * FindOrCreate(const std::string &_name)
void Add(TiXmlAttribute *attribute)
Definition tinyxml.cc:1517
TiXmlAttribute * Find(const std::string &_name) const
TiXmlAttributeSet(const TiXmlAttributeSet &)
void Remove(TiXmlAttribute *attribute)
Definition tinyxml.cc:1532
TiXmlAttribute * First()
Definition tinyxml.h:920
void operator=(const TiXmlAttributeSet &)
static const char * ReadText(const char *in, TIXML_STRING *text, bool ignoreWhiteSpace, const char *endTag, bool ignoreCase, TiXmlEncoding encoding)
static int ToLower(int v, TiXmlEncoding encoding)
Definition tinyxml.h:389
static void ConvertUTF32ToUTF8(unsigned long input, char *output, int *length)
virtual const char * Parse(const char *p, TiXmlParsingData *data, TiXmlEncoding encoding)=0
friend class TiXmlNode
Definition tinyxml.h:203
static bool IsWhiteSpace(char c)
Definition tinyxml.h:297
int Column() const
See Row()
Definition tinyxml.h:252
static const char * errorString[TIXML_ERROR_STRING_COUNT]
Definition tinyxml.h:378
static Entity entity[NUM_ENTITY]
Definition tinyxml.h:419
static bool condenseWhiteSpace
Definition tinyxml.h:420
static bool StreamTo(std::istream *in, int character, TIXML_STRING *tag)
@ TIXML_ERROR_PARSING_DECLARATION
Definition tinyxml.h:284
@ TIXML_ERROR_DOCUMENT_TOP_ONLY
Definition tinyxml.h:288
@ TIXML_ERROR_READING_ATTRIBUTES
Definition tinyxml.h:279
@ TIXML_ERROR_PARSING_UNKNOWN
Definition tinyxml.h:282
@ TIXML_ERROR_READING_ELEMENT_VALUE
Definition tinyxml.h:278
@ TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME
Definition tinyxml.h:277
@ TIXML_ERROR_PARSING_COMMENT
Definition tinyxml.h:283
@ TIXML_ERROR_PARSING_ELEMENT
Definition tinyxml.h:276
@ TIXML_ERROR_READING_END_TAG
Definition tinyxml.h:281
virtual ~TiXmlBase()
Definition tinyxml.h:209
static void EncodeString(const TIXML_STRING &str, TIXML_STRING *out)
Definition tinyxml.cc:55
static const int utf8ByteTable[256]
Definition tinyxml.h:260
static const char * SkipWhiteSpace(const char *, TiXmlEncoding encoding)
int Row() const
Definition tinyxml.h:251
static int IsAlphaNum(unsigned char anyByte, TiXmlEncoding encoding)
static void SetCondenseWhiteSpace(bool condense)
Definition tinyxml.h:228
void operator=(const TiXmlBase &base)
void * GetUserData()
Get a pointer to arbitrary user data.
Definition tinyxml.h:255
void SetUserData(void *user)
Set a pointer to arbitrary user data.
Definition tinyxml.h:254
static const char * ReadName(const char *p, TIXML_STRING *name, TiXmlEncoding encoding)
static bool StreamWhiteSpace(std::istream *in, TIXML_STRING *tag)
static bool IsWhiteSpace(int c)
Definition tinyxml.h:301
TiXmlBase(const TiXmlBase &)
static const char * GetChar(const char *p, char *_value, int *length, TiXmlEncoding encoding)
Definition tinyxml.h:334
const void * GetUserData() const
Get a pointer to arbitrary user data.
Definition tinyxml.h:256
void * userData
Field containing a generic user pointer.
Definition tinyxml.h:383
virtual void Print(FILE *cfile, int depth) const =0
TiXmlCursor location
Definition tinyxml.h:380
static const char * GetEntity(const char *in, char *value, int *length, TiXmlEncoding encoding)
static int IsAlpha(unsigned char anyByte, TiXmlEncoding encoding)
static bool IsWhiteSpaceCondensed()
Return the current white space setting.
Definition tinyxml.h:231
static bool StringEqual(const char *p, const char *endTag, bool ignoreCase, TiXmlEncoding encoding)
void CopyTo(TiXmlComment *target) const
Definition tinyxml.cc:1311
TiXmlComment(const char *_value)
Construct a comment from text.
Definition tinyxml.h:1175
virtual const char * Parse(const char *p, TiXmlParsingData *data, TiXmlEncoding encoding)
TiXmlComment & operator=(const TiXmlComment &base)
Definition tinyxml.cc:1292
virtual TiXmlNode * Clone() const
Returns a copy of this Comment.
Definition tinyxml.cc:1323
virtual bool Accept(TiXmlVisitor *visitor) const
Definition tinyxml.cc:1317
TiXmlComment()
Constructs an empty comment.
Definition tinyxml.h:1173
virtual void StreamIn(std::istream *in, TIXML_STRING *tag)
virtual TiXmlComment * ToComment()
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1194
virtual ~TiXmlComment()
Definition tinyxml.h:1181
virtual const TiXmlComment * ToComment() const
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1193
virtual void Print(FILE *cfile, int depth) const
Definition tinyxml.cc:1300
const char * Encoding() const
Encoding. Will return an empty string if none was found.
Definition tinyxml.h:1318
virtual const char * Parse(const char *p, TiXmlParsingData *data, TiXmlEncoding encoding)
virtual void StreamIn(std::istream *in, TIXML_STRING *tag)
virtual const TiXmlDeclaration * ToDeclaration() const
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1332
TiXmlDeclaration()
Construct an empty declaration.
Definition tinyxml.h:1296
TiXmlDeclaration(const std::string &_version, const std::string &_encoding, const std::string &_standalone)
Constructor.
void CopyTo(TiXmlDeclaration *target) const
Definition tinyxml.cc:1443
virtual void Print(FILE *cfile, int depth, TIXML_STRING *str) const
Definition tinyxml.cc:1421
TIXML_STRING standalone
Definition tinyxml.h:1350
TiXmlDeclaration & operator=(const TiXmlDeclaration &copy)
Definition tinyxml.cc:1413
const char * Standalone() const
Is this a standalone document?
Definition tinyxml.h:1320
virtual bool Accept(TiXmlVisitor *visitor) const
Definition tinyxml.cc:1453
virtual TiXmlDeclaration * ToDeclaration()
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1333
virtual TiXmlNode * Clone() const
Creates a copy of this Declaration and returns it.
Definition tinyxml.cc:1459
virtual void Print(FILE *cfile, int depth) const
Definition tinyxml.h:1326
const char * Version() const
Version. Will return an empty string if none was found.
Definition tinyxml.h:1316
TiXmlDocument(const std::string &documentName)
Constructor.
virtual TiXmlNode * Clone() const
Definition tinyxml.cc:1137
const char * ErrorDesc() const
Contains a textual (english) description of the error if one occurs.
Definition tinyxml.h:1470
int TabSize() const
Definition tinyxml.h:1513
virtual const TiXmlDocument * ToDocument() const
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1539
bool SaveFile(const std::string &filename) const
< STL std::string version.
Definition tinyxml.h:1443
virtual bool Accept(TiXmlVisitor *content) const
Definition tinyxml.cc:1159
virtual ~TiXmlDocument()
Definition tinyxml.h:1416
int ErrorId() const
Definition tinyxml.h:1475
TIXML_STRING errorDesc
Definition tinyxml.h:1558
virtual const char * Parse(const char *p, TiXmlParsingData *data=0, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)
bool LoadFile(const std::string &filename, TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)
Definition tinyxml.h:1439
TiXmlDocument & operator=(const TiXmlDocument &copy)
Definition tinyxml.cc:949
void CopyTo(TiXmlDocument *target) const
Definition tinyxml.cc:1118
TiXmlCursor errorLocation
Definition tinyxml.h:1560
const TiXmlElement * RootElement() const
Definition tinyxml.h:1459
TiXmlDocument()
Create an empty document, that has no name.
Definition tinyxml.cc:916
int ErrorRow() const
Definition tinyxml.h:1484
virtual TiXmlDocument * ToDocument()
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1540
bool SaveFile() const
Save a file using the current document value. Returns true if successful.
Definition tinyxml.cc:963
TiXmlElement * RootElement()
Definition tinyxml.h:1460
bool Error() const
Definition tinyxml.h:1467
void SetError(int err, const char *errorLocation, TiXmlParsingData *prevData, TiXmlEncoding encoding)
void Print() const
Definition tinyxml.h:1526
bool LoadFile(TiXmlEncoding encoding=TIXML_DEFAULT_ENCODING)
Definition tinyxml.cc:957
void SetTabSize(int _tabsize)
Definition tinyxml.h:1511
int ErrorCol() const
The column where the error occured. See ErrorRow()
Definition tinyxml.h:1485
virtual void StreamIn(std::istream *in, TIXML_STRING *tag)
void CopyTo(TiXmlElement *target) const
Definition tinyxml.cc:856
int QueryValueAttribute(const std::string &name, std::string *outValue) const
Definition tinyxml.h:1044
virtual ~TiXmlElement()
Definition tinyxml.cc:562
const std::string * Attribute(const std::string &name) const
int QueryDoubleAttribute(const std::string &name, double *_value) const
virtual const TiXmlElement * ToElement() const
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1140
TiXmlElement & operator=(const TiXmlElement &base)
Definition tinyxml.cc:554
int QueryDoubleAttribute(const char *name, double *_value) const
QueryDoubleAttribute examines the attribute - see QueryIntAttribute().
Definition tinyxml.cc:723
int QueryIntAttribute(const std::string &name, int *_value) const
TiXmlElement(const std::string &_value)
std::string constructor.
const std::string * Attribute(const std::string &name, double *d) const
void SetAttribute(const std::string &name, int _value)
STL std::string form.
virtual bool Accept(TiXmlVisitor *visitor) const
Definition tinyxml.cc:878
int QueryUnsignedAttribute(const char *name, unsigned *_value) const
QueryUnsignedAttribute examines the attribute - see QueryIntAttribute().
Definition tinyxml.cc:673
int QueryStringAttribute(const char *name, std::string *_value) const
QueryStringAttribute examines the attribute - see QueryIntAttribute().
Definition tinyxml.h:1014
const TiXmlAttribute * FirstAttribute() const
Access the first attribute in this element.
Definition tinyxml.h:1091
const char * Attribute(const char *name) const
Definition tinyxml.cc:580
TiXmlAttribute * LastAttribute()
Definition tinyxml.h:1094
void SetAttribute(const char *name, const char *_value)
Definition tinyxml.cc:783
TiXmlAttribute * FirstAttribute()
Definition tinyxml.h:1092
const std::string * Attribute(const std::string &name, int *i) const
virtual const char * Parse(const char *p, TiXmlParsingData *data, TiXmlEncoding encoding)
const TiXmlAttribute * LastAttribute() const
Access the last attribute in this element.
Definition tinyxml.h:1093
void SetDoubleAttribute(const std::string &name, double value)
void SetAttribute(const std::string &name, const std::string &_value)
STL std::string form.
virtual TiXmlNode * Clone() const
Creates a new Element and returns it - the returned element is a copy.
Definition tinyxml.cc:892
int QueryValueAttribute(const std::string &name, T *outValue) const
Definition tinyxml.h:1031
virtual TiXmlElement * ToElement()
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1141
virtual void Print(FILE *cfile, int depth) const
Definition tinyxml.cc:803
int QueryFloatAttribute(const char *name, float *_value) const
QueryFloatAttribute examines the attribute - see QueryIntAttribute().
Definition tinyxml.h:1003
virtual void StreamIn(std::istream *in, TIXML_STRING *tag)
TiXmlAttributeSet attributeSet
Definition tinyxml.h:1163
const char * GetText() const
Definition tinyxml.cc:903
int QueryIntAttribute(const char *name, int *_value) const
Definition tinyxml.cc:664
void RemoveAttribute(const std::string &name)
STL std::string form.
Definition tinyxml.h:1088
const char * ReadValue(const char *in, TiXmlParsingData *prevData, TiXmlEncoding encoding)
int QueryBoolAttribute(const char *name, bool *_value) const
Definition tinyxml.cc:686
void RemoveAttribute(const char *name)
Definition tinyxml.cc:440
TiXmlHandle FirstChildElement() const
Return a handle to the first child element.
Definition tinyxml.cc:1659
TiXmlElement * Element() const
Definition tinyxml.h:1710
TiXmlHandle FirstChildElement(const std::string &_value) const
Definition tinyxml.h:1684
TiXmlUnknown * ToUnknown() const
Definition tinyxml.h:1701
TiXmlHandle ChildElement(const std::string &_value, int index) const
Definition tinyxml.h:1687
TiXmlHandle FirstChild() const
Return a handle to the first child node.
Definition tinyxml.cc:1635
TiXmlHandle Child(const char *value, int index) const
Definition tinyxml.cc:1702
TiXmlText * Text() const
Definition tinyxml.h:1714
TiXmlNode * ToNode() const
Definition tinyxml.h:1692
TiXmlText * ToText() const
Definition tinyxml.h:1698
TiXmlElement * ToElement() const
Definition tinyxml.h:1695
TiXmlNode * node
Definition tinyxml.h:1721
TiXmlHandle ChildElement(const char *value, int index) const
Definition tinyxml.cc:1740
TiXmlHandle FirstChild(const std::string &_value) const
Definition tinyxml.h:1683
TiXmlHandle(TiXmlNode *_node)
Create a handle from any node (at any depth of the tree.) This can be a null pointer.
Definition tinyxml.h:1649
TiXmlHandle operator=(const TiXmlHandle &ref)
Definition tinyxml.h:1652
TiXmlNode * Node() const
Definition tinyxml.h:1706
TiXmlUnknown * Unknown() const
Definition tinyxml.h:1718
TiXmlHandle Child(const std::string &_value, int index) const
Definition tinyxml.h:1686
TiXmlHandle(const TiXmlHandle &ref)
Copy constructor.
Definition tinyxml.h:1651
virtual void StreamIn(std::istream *in, TIXML_STRING *tag)=0
const TiXmlNode * LastChild() const
Definition tinyxml.h:538
const TiXmlNode * FirstChild() const
The first child of this node. Will be null if there are no children.
Definition tinyxml.h:529
TiXmlNode * LastChild(const char *_value)
The last child of this node matching 'value'. Will be null if there are no children.
Definition tinyxml.h:542
virtual TiXmlText * ToText()
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:715
TiXmlNode * lastChild
Definition tinyxml.h:766
void Clear()
Delete all the children of this node. Does not affect 'this'.
Definition tinyxml.cc:172
virtual const TiXmlUnknown * ToUnknown() const
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:707
TiXmlNode * NextSibling(const char *_next)
Definition tinyxml.h:643
virtual TiXmlNode * Clone() const =0
TiXmlNode * PreviousSibling()
Definition tinyxml.h:622
virtual const TiXmlDeclaration * ToDeclaration() const
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:709
TiXmlNode * FirstChild(const char *_value)
The first child of this node with the matching 'value'. Will be null if none found.
Definition tinyxml.h:533
virtual const TiXmlComment * ToComment() const
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:706
const TiXmlNode * LastChild(const std::string &_value) const
STL std::string form.
Definition tinyxml.h:549
TiXmlElement * NextSiblingElement(const char *_next)
Definition tinyxml.h:661
virtual const TiXmlElement * ToElement() const
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:705
const std::string & ValueStr() const
Definition tinyxml.h:501
TiXmlNode * prev
Definition tinyxml.h:770
const TiXmlNode * NextSibling() const
Navigate to a sibling node.
Definition tinyxml.h:638
TiXmlNode * NextSibling(const std::string &_value)
STL std::string form.
Definition tinyxml.h:634
virtual const TiXmlDocument * ToDocument() const
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:704
const TiXmlElement * NextSiblingElement(const std::string &_value) const
STL std::string form.
Definition tinyxml.h:666
virtual ~TiXmlNode()
Definition tinyxml.cc:150
bool RemoveChild(TiXmlNode *removeThis)
Delete a child of this node.
Definition tinyxml.cc:338
int Type() const
Definition tinyxml.h:691
TiXmlNode * IterateChildren(const char *_value, const TiXmlNode *previous)
Definition tinyxml.h:576
TiXmlElement * NextSiblingElement()
Definition tinyxml.h:652
TiXmlNode * FirstChild(const std::string &_value)
STL std::string form.
Definition tinyxml.h:548
virtual TiXmlDeclaration * ToDeclaration()
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:716
virtual TiXmlElement * ToElement()
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:712
const TiXmlNode * Parent() const
Definition tinyxml.h:527
TiXmlNode * InsertEndChild(const TiXmlNode &addThis)
Definition tinyxml.cc:217
TiXmlElement * FirstChildElement(const char *_value)
Definition tinyxml.h:678
TiXmlNode * IterateChildren(const std::string &_value, const TiXmlNode *previous)
STL std::string form.
Definition tinyxml.h:582
const TiXmlNode * IterateChildren(const std::string &_value, const TiXmlNode *previous) const
STL std::string form.
Definition tinyxml.h:581
TiXmlNode(const TiXmlNode &)
TiXmlNode * NextSibling()
Definition tinyxml.h:639
TiXmlNode * PreviousSibling(const std::string &_value)
STL std::string form.
Definition tinyxml.h:632
void SetValue(const char *_value)
Definition tinyxml.h:515
bool NoChildren() const
Returns true if this node has no children.
Definition tinyxml.h:702
TiXmlNode * next
Definition tinyxml.h:771
const TiXmlNode * PreviousSibling() const
Navigate to a sibling node.
Definition tinyxml.h:621
virtual const TiXmlText * ToText() const
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:708
void operator=(const TiXmlNode &base)
TiXmlNode * LinkEndChild(TiXmlNode *addThis)
Definition tinyxml.cc:189
const TiXmlElement * NextSiblingElement() const
Definition tinyxml.cc:485
TiXmlElement * NextSiblingElement(const std::string &_value)
STL std::string form.
Definition tinyxml.h:667
TiXmlNode * FirstChild()
Definition tinyxml.h:530
TiXmlNode * Parent()
One step up the DOM.
Definition tinyxml.h:526
void CopyTo(TiXmlNode *target) const
Definition tinyxml.cc:164
const TiXmlNode * FirstChild(const std::string &_value) const
STL std::string form.
Definition tinyxml.h:547
TiXmlNode * ReplaceChild(TiXmlNode *replaceThis, const TiXmlNode &withThis)
Definition tinyxml.cc:299
const TiXmlNode * IterateChildren(const TiXmlNode *previous) const
Definition tinyxml.cc:388
TiXmlDocument * GetDocument()
Definition tinyxml.h:697
TiXmlNode * InsertBeforeChild(TiXmlNode *beforeThis, const TiXmlNode &addThis)
Definition tinyxml.cc:233
virtual bool Accept(TiXmlVisitor *visitor) const =0
TiXmlNode * parent
Definition tinyxml.h:762
virtual TiXmlUnknown * ToUnknown()
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:714
friend class TiXmlElement
Definition tinyxml.h:433
TiXmlNode * IterateChildren(const TiXmlNode *previous)
Definition tinyxml.h:570
const char * Value() const
Definition tinyxml.h:494
const TiXmlElement * FirstChildElement(const std::string &_value) const
STL std::string form.
Definition tinyxml.h:683
TiXmlNode * firstChild
Definition tinyxml.h:765
const TiXmlDocument * GetDocument() const
Definition tinyxml.cc:515
TiXmlNode * PreviousSibling(const char *_prev)
Definition tinyxml.h:626
TiXmlNode * InsertAfterChild(TiXmlNode *afterThis, const TiXmlNode &addThis)
Definition tinyxml.cc:266
const TIXML_STRING & ValueTStr() const
Definition tinyxml.h:504
virtual TiXmlComment * ToComment()
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:713
const TiXmlNode * PreviousSibling(const std::string &_value) const
STL std::string form.
Definition tinyxml.h:631
TIXML_STRING value
Definition tinyxml.h:768
const TiXmlNode * NextSibling(const std::string &_value) const
STL std::string form.
Definition tinyxml.h:633
virtual TiXmlDocument * ToDocument()
Cast to a more defined type. Will return null if not of the requested type.
Definition tinyxml.h:711
friend std::istream & operator>>(std::istream &in, TiXmlNode &base)
TiXmlElement * FirstChildElement()
Definition tinyxml.h:672
TiXmlNode * LastChild(const std::string &_value)
STL std::string form.
Definition tinyxml.h:550
const TiXmlElement * FirstChildElement() const
Convenience function to get through elements.
Definition tinyxml.cc:455
TiXmlNode * Identify(const char *start, TiXmlEncoding encoding)
TiXmlElement * FirstChildElement(const std::string &_value)
STL std::string form.
Definition tinyxml.h:684
TiXmlNode * LastChild()
The last child of this node. Will be null if there are no children.
Definition tinyxml.h:539
void SetValue(const std::string &_value)
STL std::string form.
Definition tinyxml.h:519
friend std::ostream & operator<<(std::ostream &out, const TiXmlNode &base)
TIXML_STRING indent
Definition tinyxml.h:1803
void SetLineBreak(const char *_lineBreak)
Definition tinyxml.h:1771
const char * CStr()
Return the result.
Definition tinyxml.h:1782
const char * LineBreak()
Query the current line breaking string.
Definition tinyxml.h:1773
const std::string & Str()
Return the result.
Definition tinyxml.h:1788
virtual bool VisitEnter(const TiXmlDocument &doc)
Visit a document.
Definition tinyxml.cc:1759
void SetIndent(const char *_indent)
Definition tinyxml.h:1764
TIXML_STRING buffer
Definition tinyxml.h:1802
const char * Indent()
Query the indention string.
Definition tinyxml.h:1766
virtual bool Visit(const TiXmlDeclaration &declaration)
Visit a declaration.
Definition tinyxml.cc:1860
size_t Size()
Return the length of the result string.
Definition tinyxml.h:1784
TIXML_STRING lineBreak
Definition tinyxml.h:1804
virtual bool VisitExit(const TiXmlDocument &doc)
Visit a document.
Definition tinyxml.cc:1764
virtual const TiXmlText * ToText() const
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1256
virtual void StreamIn(std::istream *in, TIXML_STRING *tag)
bool CDATA() const
Queries whether this represents text using a CDATA section.
Definition tinyxml.h:1250
virtual TiXmlNode * Clone() const
[internal use] Creates a new Element and returns it.
Definition tinyxml.cc:1369
virtual TiXmlText * ToText()
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1257
virtual bool Accept(TiXmlVisitor *content) const
Definition tinyxml.cc:1363
void SetCDATA(bool _cdata)
Turns on or off a CDATA representation of text.
Definition tinyxml.h:1252
virtual const char * Parse(const char *p, TiXmlParsingData *data, TiXmlEncoding encoding)
TiXmlText & operator=(const TiXmlText &base)
Definition tinyxml.h:1244
TiXmlText(const char *initValue)
Definition tinyxml.h:1227
TiXmlText(const TiXmlText &copy)
Definition tinyxml.h:1243
TiXmlText(const std::string &initValue)
Constructor.
Definition tinyxml.h:1236
virtual void Print(FILE *cfile, int depth) const
Definition tinyxml.cc:1335
void CopyTo(TiXmlText *target) const
Definition tinyxml.cc:1356
virtual ~TiXmlText()
Definition tinyxml.h:1232
virtual void Print(FILE *cfile, int depth) const
Definition tinyxml.cc:1471
virtual ~TiXmlUnknown()
Definition tinyxml.h:1365
virtual void StreamIn(std::istream *in, TIXML_STRING *tag)
virtual const char * Parse(const char *p, TiXmlParsingData *data, TiXmlEncoding encoding)
virtual bool Accept(TiXmlVisitor *content) const
Definition tinyxml.cc:1485
TiXmlUnknown(const TiXmlUnknown &copy)
Definition tinyxml.h:1367
void CopyTo(TiXmlUnknown *target) const
Definition tinyxml.cc:1479
virtual TiXmlUnknown * ToUnknown()
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1378
virtual const TiXmlUnknown * ToUnknown() const
Cast to a more defined type. Will return null not of the requested type.
Definition tinyxml.h:1377
virtual TiXmlNode * Clone() const
Creates a copy of this Unknown and returns it.
Definition tinyxml.cc:1491
TiXmlUnknown & operator=(const TiXmlUnknown &copy)
Definition tinyxml.h:1368
virtual bool Visit(const TiXmlUnknown &)
Visit an unknown node.
Definition tinyxml.h:157
virtual bool Visit(const TiXmlComment &)
Visit a comment node.
Definition tinyxml.h:155
virtual ~TiXmlVisitor()
Definition tinyxml.h:138
virtual bool Visit(const TiXmlText &)
Visit a text node.
Definition tinyxml.h:153
virtual bool Visit(const TiXmlDeclaration &)
Visit a declaration.
Definition tinyxml.h:151
virtual bool VisitEnter(const TiXmlDocument &)
Visit a document.
Definition tinyxml.h:141
virtual bool VisitExit(const TiXmlElement &)
Visit an element.
Definition tinyxml.h:148
virtual bool VisitEnter(const TiXmlElement &, const TiXmlAttribute *)
Visit an element.
Definition tinyxml.h:146
virtual bool VisitExit(const TiXmlDocument &)
Visit a document.
Definition tinyxml.h:143
const int TIXML_PATCH_VERSION
Definition tinyxml.h:101
@ TIXML_WRONG_TYPE
Definition tinyxml.h:165
@ TIXML_SUCCESS
Definition tinyxml.h:163
@ TIXML_NO_ATTRIBUTE
Definition tinyxml.h:164
TiXmlEncoding
Definition tinyxml.h:171
@ TIXML_ENCODING_LEGACY
Definition tinyxml.h:174
@ TIXML_ENCODING_UTF8
Definition tinyxml.h:173
@ TIXML_ENCODING_UNKNOWN
Definition tinyxml.h:172
const int TIXML_MINOR_VERSION
Definition tinyxml.h:100
const TiXmlEncoding TIXML_DEFAULT_ENCODING
Definition tinyxml.h:177
const int TIXML_MAJOR_VERSION
Definition tinyxml.h:99
#define TIXML_STRING
Definition tinyxml.h:54