31 #ifndef DOXYGEN_SHOULD_SKIP_THIS
33 #ifndef TINYXML_INCLUDED
34 #define TINYXML_INCLUDED
37 #pragma warning( push )
38 #pragma warning( disable : 4530 )
39 #pragma warning( disable : 4786 )
49 #if defined( _DEBUG ) && !defined( DEBUG )
56 #define TIXML_STRING std::string
65 #if defined(_MSC_VER) && (_MSC_VER >= 1400 )
67 #define TIXML_SNPRINTF _snprintf_s
68 #define TIXML_SSCANF sscanf_s
69 #elif defined(_MSC_VER) && (_MSC_VER >= 1200 )
72 #define TIXML_SNPRINTF _snprintf
73 #define TIXML_SSCANF sscanf
74 #elif defined(__GNUC__) && (__GNUC__ >= 3 )
77 #define TIXML_SNPRINTF snprintf
78 #define TIXML_SSCANF sscanf
80 #define TIXML_SNPRINTF snprintf
81 #define TIXML_SSCANF sscanf
91 class TiXmlDeclaration;
92 class TiXmlParsingData;
94 const int TIXML_MAJOR_VERSION = 2;
95 const int TIXML_MINOR_VERSION = 6;
96 const int TIXML_PATCH_VERSION = 2;
138 virtual ~TiXmlVisitor() {
142 virtual bool VisitEnter(
const TiXmlDocument& ) {
147 virtual bool VisitExit(
const TiXmlDocument& ) {
152 virtual bool VisitEnter(
const TiXmlElement& ,
const TiXmlAttribute* ) {
157 virtual bool VisitExit(
const TiXmlElement& ) {
162 virtual bool Visit(
const TiXmlDeclaration& ) {
167 virtual bool Visit(
const TiXmlText& ) {
172 virtual bool Visit(
const TiXmlComment& ) {
177 virtual bool Visit(
const TiXmlUnknown& ) {
195 TIXML_ENCODING_UNKNOWN,
197 TIXML_ENCODING_LEGACY
200 const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN;
226 friend class TiXmlNode;
227 friend class TiXmlElement;
228 friend class TiXmlDocument;
231 TiXmlBase() : userData(0) {
234 virtual ~TiXmlBase() {
246 virtual void Print( FILE* cfile,
int depth )
const = 0;
254 static void SetCondenseWhiteSpace(
bool condense ) {
255 condenseWhiteSpace = condense;
259 static bool IsWhiteSpaceCondensed() {
260 return condenseWhiteSpace;
282 return location.row + 1;
286 return location.col + 1;
289 void SetUserData(
void* user ) {
293 void* GetUserData() {
297 const void* GetUserData()
const {
303 static const int utf8ByteTable[256];
305 virtual const char* Parse(
const char* p,
306 TiXmlParsingData*
data,
307 TiXmlEncoding encoding ) = 0;
312 static void EncodeString(
const TIXML_STRING& str, TIXML_STRING* out );
318 TIXML_ERROR_OPENING_FILE,
319 TIXML_ERROR_PARSING_ELEMENT,
320 TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME,
321 TIXML_ERROR_READING_ELEMENT_VALUE,
322 TIXML_ERROR_READING_ATTRIBUTES,
323 TIXML_ERROR_PARSING_EMPTY,
324 TIXML_ERROR_READING_END_TAG,
325 TIXML_ERROR_PARSING_UNKNOWN,
326 TIXML_ERROR_PARSING_COMMENT,
327 TIXML_ERROR_PARSING_DECLARATION,
328 TIXML_ERROR_DOCUMENT_EMPTY,
329 TIXML_ERROR_EMBEDDED_NULL,
330 TIXML_ERROR_PARSING_CDATA,
331 TIXML_ERROR_DOCUMENT_TOP_ONLY,
333 TIXML_ERROR_STRING_COUNT
337 static const char* SkipWhiteSpace(
const char*, TiXmlEncoding encoding );
339 inline static bool IsWhiteSpace(
char c ) {
340 return ( isspace( (
unsigned char) c ) || c ==
'\n' || c ==
'\r' );
343 inline static bool IsWhiteSpace(
int c ) {
345 return IsWhiteSpace( (
char) c );
349 static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag );
350 static bool StreamTo( std::istream * in,
int character, TIXML_STRING * tag );
356 static const char* ReadName(
const char* p, TIXML_STRING* name, TiXmlEncoding encoding );
361 static const char* ReadText(
const char* in,
363 bool ignoreWhiteSpace,
366 TiXmlEncoding encoding );
369 static const char* GetEntity(
const char* in,
char*
value,
int* length, TiXmlEncoding encoding );
373 inline static const char* GetChar(
const char* p,
char* _value,
int* length, TiXmlEncoding encoding ) {
375 if ( encoding == TIXML_ENCODING_UTF8 ) {
376 *length = utf8ByteTable[ *((
const unsigned char*)p) ];
377 assert( *length >= 0 && *length < 5 );
382 if ( *length == 1 ) {
384 return GetEntity( p, _value, length, encoding );
387 }
else if ( *length ) {
390 for (
int i = 0; p[i] && i<*length; ++i ) {
393 return p + (*length);
403 static bool StringEqual(
const char* p,
406 TiXmlEncoding encoding );
408 static const char* errorString[ TIXML_ERROR_STRING_COUNT ];
410 TiXmlCursor location;
417 static int IsAlpha(
unsigned char anyByte, TiXmlEncoding encoding );
418 static int IsAlphaNum(
unsigned char anyByte, TiXmlEncoding encoding );
419 inline static int ToLower(
int v, TiXmlEncoding encoding ) {
420 if ( encoding == TIXML_ENCODING_UTF8 ) {
429 static void ConvertUTF32ToUTF8(
unsigned long input,
char* output,
int* length );
432 TiXmlBase(
const TiXmlBase& );
433 void operator=(
const TiXmlBase& base );
438 unsigned int strLength;
444 MAX_ENTITY_LENGTH = 6
447 static Entity entity[ NUM_ENTITY ];
448 static bool condenseWhiteSpace;
458 class TiXmlNode :
public TiXmlBase
460 friend class TiXmlDocument;
461 friend class TiXmlElement;
467 friend std::istream&
operator >> (std::istream& in, TiXmlNode& base);
485 friend std::ostream&
operator<< (std::ostream& out,
const TiXmlNode& base);
488 friend std::string&
operator<< (std::string& out,
const TiXmlNode& base );
504 virtual ~TiXmlNode();
518 const char *Value()
const {
519 return value.c_str ();
526 const std::string& ValueStr()
const {
530 const TIXML_STRING& ValueTStr()
const {
543 void SetValue(
const char * _value) {
548 void SetValue(
const std::string& _value ) {
556 TiXmlNode* Parent() {
560 const TiXmlNode* Parent()
const {
564 const TiXmlNode* FirstChild()
const {
568 TiXmlNode* FirstChild() {
572 const TiXmlNode* FirstChild(
const char *
value )
const;
574 TiXmlNode* FirstChild(
const char * _value ) {
577 return const_cast< TiXmlNode*
> ((
const_cast< const TiXmlNode*
>(
this))->FirstChild( _value ));
580 const TiXmlNode* LastChild()
const {
584 TiXmlNode* LastChild() {
588 const TiXmlNode* LastChild(
const char *
value )
const;
589 TiXmlNode* LastChild(
const char * _value ) {
590 return const_cast< TiXmlNode*
> ((
const_cast< const TiXmlNode*
>(
this))->LastChild( _value ));
593 const TiXmlNode* FirstChild(
const std::string& _value )
const {
594 return FirstChild (_value.c_str ());
597 TiXmlNode* FirstChild(
const std::string& _value ) {
598 return FirstChild (_value.c_str ());
601 const TiXmlNode* LastChild(
const std::string& _value )
const {
602 return LastChild (_value.c_str ());
605 TiXmlNode* LastChild(
const std::string& _value ) {
606 return LastChild (_value.c_str ());
625 const TiXmlNode* IterateChildren(
const TiXmlNode* previous )
const;
626 TiXmlNode* IterateChildren(
const TiXmlNode* previous ) {
627 return const_cast< TiXmlNode*
>( (
const_cast< const TiXmlNode*
>(
this))->IterateChildren( previous ) );
631 const TiXmlNode* IterateChildren(
const char *
value,
const TiXmlNode* previous )
const;
632 TiXmlNode* IterateChildren(
const char * _value,
const TiXmlNode* previous ) {
633 return const_cast< TiXmlNode*
>( (
const_cast< const TiXmlNode*
>(
this))->IterateChildren( _value, previous ) );
636 const TiXmlNode* IterateChildren(
const std::string& _value,
const TiXmlNode* previous )
const {
637 return IterateChildren (_value.c_str (), previous);
640 TiXmlNode* IterateChildren(
const std::string& _value,
const TiXmlNode* previous ) {
641 return IterateChildren (_value.c_str (), previous);
647 TiXmlNode* InsertEndChild(
const TiXmlNode& addThis );
659 TiXmlNode* LinkEndChild( TiXmlNode* addThis );
664 TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis,
const TiXmlNode& addThis );
669 TiXmlNode* InsertAfterChild( TiXmlNode* afterThis,
const TiXmlNode& addThis );
674 TiXmlNode* ReplaceChild( TiXmlNode* replaceThis,
const TiXmlNode& withThis );
677 bool RemoveChild( TiXmlNode* removeThis );
680 const TiXmlNode* PreviousSibling()
const {
684 TiXmlNode* PreviousSibling() {
689 const TiXmlNode* PreviousSibling(
const char * )
const;
690 TiXmlNode* PreviousSibling(
const char *_prev ) {
691 return const_cast< TiXmlNode*
>( (
const_cast< const TiXmlNode*
>(
this))->PreviousSibling( _prev ) );
694 const TiXmlNode* PreviousSibling(
const std::string& _value )
const {
695 return PreviousSibling (_value.c_str ());
698 TiXmlNode* PreviousSibling(
const std::string& _value ) {
699 return PreviousSibling (_value.c_str ());
702 const TiXmlNode* NextSibling(
const std::string& _value)
const {
703 return NextSibling (_value.c_str ());
706 TiXmlNode* NextSibling(
const std::string& _value) {
707 return NextSibling (_value.c_str ());
711 const TiXmlNode* NextSibling()
const {
715 TiXmlNode* NextSibling() {
720 const TiXmlNode* NextSibling(
const char * )
const;
721 TiXmlNode* NextSibling(
const char* _next ) {
722 return const_cast< TiXmlNode*
>( (
const_cast< const TiXmlNode*
>(
this))->NextSibling( _next ) );
729 const TiXmlElement* NextSiblingElement()
const;
730 TiXmlElement* NextSiblingElement() {
731 return const_cast< TiXmlElement*
>( (
const_cast< const TiXmlNode*
>(
this))->NextSiblingElement() );
738 const TiXmlElement* NextSiblingElement(
const char * )
const;
739 TiXmlElement* NextSiblingElement(
const char *_next ) {
740 return const_cast< TiXmlElement*
>( (
const_cast< const TiXmlNode*
>(
this))->NextSiblingElement( _next ) );
743 const TiXmlElement* NextSiblingElement(
const std::string& _value)
const {
744 return NextSiblingElement (_value.c_str ());
747 TiXmlElement* NextSiblingElement(
const std::string& _value) {
748 return NextSiblingElement (_value.c_str ());
752 const TiXmlElement* FirstChildElement()
const;
753 TiXmlElement* FirstChildElement() {
754 return const_cast< TiXmlElement*
>( (
const_cast< const TiXmlNode*
>(
this))->FirstChildElement() );
758 const TiXmlElement* FirstChildElement(
const char * _value )
const;
759 TiXmlElement* FirstChildElement(
const char * _value ) {
760 return const_cast< TiXmlElement*
>( (
const_cast< const TiXmlNode*
>(
this))->FirstChildElement( _value ) );
763 const TiXmlElement* FirstChildElement(
const std::string& _value )
const {
764 return FirstChildElement (_value.c_str ());
767 TiXmlElement* FirstChildElement(
const std::string& _value ) {
768 return FirstChildElement (_value.c_str ());
782 const TiXmlDocument* GetDocument()
const;
783 TiXmlDocument* GetDocument() {
784 return const_cast< TiXmlDocument*
>( (
const_cast< const TiXmlNode*
>(
this))->GetDocument() );
788 bool NoChildren()
const {
792 virtual const TiXmlDocument* ToDocument()
const {
796 virtual const TiXmlElement* ToElement()
const {
800 virtual const TiXmlComment* ToComment()
const {
804 virtual const TiXmlUnknown* ToUnknown()
const {
808 virtual const TiXmlText* ToText()
const {
812 virtual const TiXmlDeclaration* ToDeclaration()
const {
816 virtual TiXmlDocument* ToDocument() {
820 virtual TiXmlElement* ToElement() {
824 virtual TiXmlComment* ToComment() {
828 virtual TiXmlUnknown* ToUnknown() {
832 virtual TiXmlText* ToText() {
836 virtual TiXmlDeclaration* ToDeclaration() {
843 virtual TiXmlNode* Clone()
const = 0;
867 virtual bool Accept( TiXmlVisitor* visitor )
const = 0;
870 TiXmlNode( NodeType _type );
874 void CopyTo( TiXmlNode* target )
const;
877 virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0;
880 TiXmlNode* Identify(
const char* start, TiXmlEncoding encoding );
885 TiXmlNode* firstChild;
886 TiXmlNode* lastChild;
894 TiXmlNode(
const TiXmlNode& );
895 void operator=(
const TiXmlNode& base );
906 class TiXmlAttribute :
public TiXmlBase
908 friend class TiXmlAttributeSet;
912 TiXmlAttribute() : TiXmlBase() {
918 TiXmlAttribute(
const std::string& _name,
const std::string& _value ) {
926 TiXmlAttribute(
const char * _name,
const char * _value ) {
933 const char* Name()
const {
937 const char* Value()
const {
938 return value.c_str();
941 const std::string& ValueStr()
const {
945 int IntValue()
const;
946 double DoubleValue()
const;
949 const TIXML_STRING& NameTStr()
const {
962 int QueryIntValue(
int* _value )
const;
964 int QueryDoubleValue(
double* _value )
const;
966 void SetName(
const char* _name ) {
970 void SetValue(
const char* _value ) {
974 void SetIntValue(
int _value );
975 void SetDoubleValue(
double _value );
978 void SetName(
const std::string& _name ) {
983 void SetValue(
const std::string& _value ) {
988 const TiXmlAttribute* Next()
const;
989 TiXmlAttribute* Next() {
990 return const_cast< TiXmlAttribute*
>( (
const_cast< const TiXmlAttribute*
>(
this))->Next() );
994 const TiXmlAttribute* Previous()
const;
995 TiXmlAttribute* Previous() {
996 return const_cast< TiXmlAttribute*
>( (
const_cast< const TiXmlAttribute*
>(
this))->Previous() );
999 bool operator==(
const TiXmlAttribute& rhs )
const {
1000 return rhs.name == name;
1003 bool operator<(
const TiXmlAttribute& rhs )
const {
1004 return name < rhs.name;
1007 bool operator>(
const TiXmlAttribute& rhs )
const {
1008 return name > rhs.name;
1014 virtual const char* Parse(
const char* p, TiXmlParsingData*
data, TiXmlEncoding encoding );
1017 virtual void Print( FILE* cfile,
int depth )
const {
1018 Print( cfile, depth, 0 );
1021 void Print( FILE* cfile,
int depth, TIXML_STRING* str )
const;
1025 void SetDocument( TiXmlDocument* doc ) {
1030 TiXmlAttribute(
const TiXmlAttribute& );
1031 void operator=(
const TiXmlAttribute& base );
1033 TiXmlDocument* document;
1036 TiXmlAttribute* prev;
1037 TiXmlAttribute* next;
1053 class TiXmlAttributeSet
1056 TiXmlAttributeSet();
1057 ~TiXmlAttributeSet();
1059 void add( TiXmlAttribute* attribute );
1060 void Remove( TiXmlAttribute* attribute );
1062 const TiXmlAttribute* First()
const {
1063 return ( sentinel.next == &sentinel ) ? 0 : sentinel.next;
1066 TiXmlAttribute* First() {
1067 return ( sentinel.next == &sentinel ) ? 0 : sentinel.next;
1070 const TiXmlAttribute* Last()
const {
1071 return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev;
1074 TiXmlAttribute* Last() {
1075 return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev;
1078 TiXmlAttribute* Find(
const char* _name )
const;
1079 TiXmlAttribute* FindOrCreate(
const char* _name );
1081 TiXmlAttribute* Find(
const std::string& _name )
const;
1082 TiXmlAttribute* FindOrCreate(
const std::string& _name );
1087 TiXmlAttributeSet(
const TiXmlAttributeSet& );
1088 void operator=(
const TiXmlAttributeSet& );
1090 TiXmlAttribute sentinel;
1098 class TiXmlElement :
public TiXmlNode
1102 TiXmlElement (
const char * in_value);
1105 TiXmlElement(
const std::string& _value );
1107 TiXmlElement(
const TiXmlElement& );
1109 TiXmlElement& operator=(
const TiXmlElement& base );
1111 virtual ~TiXmlElement();
1116 const char* Attribute(
const char* name )
const;
1124 const char* Attribute(
const char* name,
int* i )
const;
1132 const char* Attribute(
const char* name,
double* d )
const;
1141 int QueryIntAttribute(
const char* name,
int* _value )
const;
1143 int QueryUnsignedAttribute(
const char* name,
unsigned* _value )
const;
1148 int QueryBoolAttribute(
const char* name,
bool* _value )
const;
1150 int QueryDoubleAttribute(
const char* name,
double* _value )
const;
1152 int QueryFloatAttribute(
const char* name,
float* _value )
const {
1154 int result = QueryDoubleAttribute( name, &d );
1155 if ( result == TIXML_SUCCESS ) {
1162 int QueryStringAttribute(
const char* name, std::string* _value )
const {
1163 const char* cstr = Attribute( name );
1165 *_value = std::string( cstr );
1166 return TIXML_SUCCESS;
1168 return TIXML_NO_ATTRIBUTE;
1179 template<
typename T >
int QueryValueAttribute(
const std::string& name, T* outValue )
const {
1180 const TiXmlAttribute* node = attributeSet.Find( name );
1182 return TIXML_NO_ATTRIBUTE;
1184 std::stringstream sstream( node->ValueStr() );
1185 sstream >> *outValue;
1186 if ( !sstream.fail() )
1187 return TIXML_SUCCESS;
1188 return TIXML_WRONG_TYPE;
1191 int QueryValueAttribute(
const std::string& name, std::string* outValue )
const {
1192 const TiXmlAttribute* node = attributeSet.Find( name );
1194 return TIXML_NO_ATTRIBUTE;
1195 *outValue = node->ValueStr();
1196 return TIXML_SUCCESS;
1202 void SetAttribute(
const char* name,
const char * _value );
1204 const std::string* Attribute(
const std::string& name )
const;
1205 const std::string* Attribute(
const std::string& name,
int* i )
const;
1206 const std::string* Attribute(
const std::string& name,
double* d )
const;
1207 int QueryIntAttribute(
const std::string& name,
int* _value )
const;
1208 int QueryDoubleAttribute(
const std::string& name,
double* _value )
const;
1211 void SetAttribute(
const std::string& name,
const std::string& _value );
1213 void SetAttribute(
const std::string& name,
int _value );
1215 void SetDoubleAttribute(
const std::string& name,
double value );
1220 void SetAttribute(
const char * name,
int value );
1225 void SetDoubleAttribute(
const char * name,
double value );
1229 void RemoveAttribute(
const char * name );
1230 void RemoveAttribute(
const std::string& name ) {
1231 RemoveAttribute (name.c_str ());
1234 const TiXmlAttribute* FirstAttribute()
const {
1235 return attributeSet.First();
1238 TiXmlAttribute* FirstAttribute() {
1239 return attributeSet.First();
1242 const TiXmlAttribute* LastAttribute()
const {
1243 return attributeSet.Last();
1246 TiXmlAttribute* LastAttribute() {
1247 return attributeSet.Last();
1282 const char* GetText()
const;
1285 virtual TiXmlNode* Clone()
const;
1287 virtual void Print( FILE* cfile,
int depth )
const;
1292 virtual const char* Parse(
const char* p, TiXmlParsingData*
data, TiXmlEncoding encoding );
1294 virtual const TiXmlElement* ToElement()
const {
1298 virtual TiXmlElement* ToElement() {
1304 virtual bool Accept( TiXmlVisitor* visitor )
const;
1307 void CopyTo( TiXmlElement* target )
const;
1311 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1316 const char* ReadValue(
const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding );
1319 TiXmlAttributeSet attributeSet;
1325 class TiXmlComment :
public TiXmlNode
1329 TiXmlComment() : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {
1333 TiXmlComment(
const char* _value ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {
1337 TiXmlComment(
const TiXmlComment& );
1338 TiXmlComment& operator=(
const TiXmlComment& base );
1340 virtual ~TiXmlComment() {
1344 virtual TiXmlNode* Clone()
const;
1346 virtual void Print( FILE* cfile,
int depth )
const;
1351 virtual const char* Parse(
const char* p, TiXmlParsingData*
data, TiXmlEncoding encoding );
1353 virtual const TiXmlComment* ToComment()
const {
1357 virtual TiXmlComment* ToComment() {
1363 virtual bool Accept( TiXmlVisitor* visitor )
const;
1366 void CopyTo( TiXmlComment* target )
const;
1369 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1381 class TiXmlText :
public TiXmlNode
1383 friend class TiXmlElement;
1390 TiXmlText (
const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) {
1391 SetValue( initValue );
1395 virtual ~TiXmlText() {
1399 TiXmlText(
const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) {
1400 SetValue( initValue );
1404 TiXmlText(
const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT ) {
1405 copy.CopyTo(
this );
1408 TiXmlText& operator=(
const TiXmlText& base ) {
1409 base.CopyTo(
this );
return *
this;
1413 virtual void Print( FILE* cfile,
int depth )
const;
1416 bool CDATA()
const {
1421 void SetCDATA(
bool _cdata ) {
1425 virtual const char* Parse(
const char* p, TiXmlParsingData*
data, TiXmlEncoding encoding );
1427 virtual const TiXmlText* ToText()
const {
1431 virtual TiXmlText* ToText() {
1437 virtual bool Accept( TiXmlVisitor* content )
const;
1441 virtual TiXmlNode* Clone()
const;
1442 void CopyTo( TiXmlText* target )
const;
1446 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1466 class TiXmlDeclaration :
public TiXmlNode
1470 TiXmlDeclaration() : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) {
1474 TiXmlDeclaration(
const std::string& _version,
1475 const std::string& _encoding,
1476 const std::string& _standalone );
1478 TiXmlDeclaration(
const char* _version,
1479 const char* _encoding,
1480 const char* _standalone );
1482 TiXmlDeclaration(
const TiXmlDeclaration& copy );
1483 TiXmlDeclaration& operator=(
const TiXmlDeclaration& copy );
1485 virtual ~TiXmlDeclaration() {
1489 const char *Version()
const {
1494 const char *Encoding()
const {
1495 return encoding.c_str ();
1499 const char *Standalone()
const {
1500 return standalone.c_str ();
1504 virtual TiXmlNode* Clone()
const;
1506 virtual void Print( FILE* cfile,
int depth, TIXML_STRING* str )
const;
1507 virtual void Print( FILE* cfile,
int depth )
const {
1508 Print( cfile, depth, 0 );
1511 virtual const char* Parse(
const char* p, TiXmlParsingData*
data, TiXmlEncoding encoding );
1513 virtual const TiXmlDeclaration* ToDeclaration()
const {
1517 virtual TiXmlDeclaration* ToDeclaration() {
1523 virtual bool Accept( TiXmlVisitor* visitor )
const;
1526 void CopyTo( TiXmlDeclaration* target )
const;
1528 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1532 TIXML_STRING encoding;
1533 TIXML_STRING standalone;
1544 class TiXmlUnknown :
public TiXmlNode
1547 TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {
1550 virtual ~TiXmlUnknown() {
1553 TiXmlUnknown(
const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {
1554 copy.CopyTo(
this );
1557 TiXmlUnknown& operator=(
const TiXmlUnknown& copy ) {
1558 copy.CopyTo(
this );
return *
this;
1562 virtual TiXmlNode* Clone()
const;
1564 virtual void Print( FILE* cfile,
int depth )
const;
1566 virtual const char* Parse(
const char* p, TiXmlParsingData*
data, TiXmlEncoding encoding );
1568 virtual const TiXmlUnknown* ToUnknown()
const {
1572 virtual TiXmlUnknown* ToUnknown() {
1578 virtual bool Accept( TiXmlVisitor* content )
const;
1581 void CopyTo( TiXmlUnknown* target )
const;
1583 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1593 class TiXmlDocument :
public TiXmlNode
1599 TiXmlDocument(
const char * documentName );
1602 TiXmlDocument(
const std::string& documentName );
1604 TiXmlDocument(
const TiXmlDocument& copy );
1605 TiXmlDocument& operator=(
const TiXmlDocument& copy );
1607 virtual ~TiXmlDocument() {
1614 bool load_file( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
1616 bool SaveFile()
const;
1618 bool load_file(
const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
1620 bool SaveFile(
const char * filename )
const;
1626 bool load_file( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
1628 bool SaveFile( FILE* )
const;
1630 bool load_file(
const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) {
1631 return load_file( filename.c_str(), encoding );
1634 bool SaveFile(
const std::string& filename )
const
1636 return SaveFile( filename.c_str() );
1643 virtual const char* Parse(
const char* p, TiXmlParsingData*
data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
1649 const TiXmlElement* RootElement()
const {
1650 return FirstChildElement();
1653 TiXmlElement* RootElement() {
1654 return FirstChildElement();
1662 bool Error()
const {
1667 const char * Errordesc()
const {
1668 return errorDesc.c_str ();
1674 int ErrorId()
const {
1685 int ErrorRow()
const {
1686 return errorLocation.row+1;
1689 int ErrorCol()
const {
1690 return errorLocation.col+1;
1717 void SetTabSize(
int _tabsize ) {
1721 int TabSize()
const {
1732 errorLocation.row = errorLocation.col = 0;
1737 void Print()
const {
1748 virtual void Print( FILE* cfile,
int depth = 0 )
const;
1750 void SetError(
int err,
const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding );
1752 virtual const TiXmlDocument* ToDocument()
const {
1756 virtual TiXmlDocument* ToDocument() {
1762 virtual bool Accept( TiXmlVisitor* content )
const;
1766 virtual TiXmlNode* Clone()
const;
1767 virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
1770 void CopyTo( TiXmlDocument* target )
const;
1774 TIXML_STRING errorDesc;
1776 TiXmlCursor errorLocation;
1777 bool useMicrosoftBOM;
1865 TiXmlHandle( TiXmlNode* _node ) {
1870 TiXmlHandle(
const TiXmlHandle& ref ) {
1871 this->node = ref.node;
1874 TiXmlHandle operator=(
const TiXmlHandle& ref ) {
1876 this->node = ref.node;
1881 TiXmlHandle FirstChild()
const;
1883 TiXmlHandle FirstChild(
const char *
value )
const;
1885 TiXmlHandle FirstChildElement()
const;
1887 TiXmlHandle FirstChildElement(
const char *
value )
const;
1892 TiXmlHandle Child(
const char*
value,
int index )
const;
1896 TiXmlHandle Child(
int index )
const;
1901 TiXmlHandle ChildElement(
const char*
value,
int index )
const;
1906 TiXmlHandle ChildElement(
int index )
const;
1908 TiXmlHandle FirstChild(
const std::string& _value )
const {
1909 return FirstChild( _value.c_str() );
1912 TiXmlHandle FirstChildElement(
const std::string& _value )
const {
1913 return FirstChildElement( _value.c_str() );
1916 TiXmlHandle Child(
const std::string& _value,
int index )
const {
1917 return Child( _value.c_str(), index );
1920 TiXmlHandle ChildElement(
const std::string& _value,
int index )
const {
1921 return ChildElement( _value.c_str(), index );
1926 TiXmlNode* ToNode()
const {
1932 TiXmlElement* ToElement()
const {
1933 return ( ( node && node->ToElement() ) ? node->ToElement() : 0 );
1938 TiXmlText* ToText()
const {
1939 return ( ( node && node->ToText() ) ? node->ToText() : 0 );
1944 TiXmlUnknown* ToUnknown()
const {
1945 return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 );
1951 TiXmlNode* Node()
const {
1958 TiXmlElement* Element()
const {
1965 TiXmlText* Text()
const {
1972 TiXmlUnknown* Unknown()
const {
2000 class TiXmlPrinter :
public TiXmlVisitor
2003 TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ),
2004 buffer(), indent(
" " ), lineBreak(
"\n" ) {
2007 virtual bool VisitEnter(
const TiXmlDocument& doc );
2008 virtual bool VisitExit(
const TiXmlDocument& doc );
2010 virtual bool VisitEnter(
const TiXmlElement& element,
const TiXmlAttribute* firstAttribute );
2011 virtual bool VisitExit(
const TiXmlElement& element );
2013 virtual bool Visit(
const TiXmlDeclaration& declaration );
2014 virtual bool Visit(
const TiXmlText& text );
2015 virtual bool Visit(
const TiXmlComment& comment );
2016 virtual bool Visit(
const TiXmlUnknown& unknown );
2021 void SetIndent(
const char* _indent ) {
2022 indent = _indent ? _indent :
"";
2026 const char* Indent() {
2027 return indent.c_str();
2034 void SetLineBreak(
const char* _lineBreak ) {
2035 lineBreak = _lineBreak ? _lineBreak :
"";
2039 const char* LineBreak() {
2040 return lineBreak.c_str();
2046 void SetStreamPrinting() {
2052 const char* CStr() {
2053 return buffer.c_str();
2058 return buffer.size();
2062 const std::string& Str() {
2068 for (
int i = 0; i<depth; ++i )
2072 void DoLineBreak() {
2073 buffer += lineBreak;
2077 bool simpleTextPrint;
2078 TIXML_STRING buffer;
2079 TIXML_STRING indent;
2080 TIXML_STRING lineBreak;
2085 #pragma warning( pop )
std::ostream & operator<<(std::ostream &os, const Color &color)
Definition: Color.cpp:38
std::istream & operator>>(std::istream &in, Vector &v)
bool operator==(const EulerAngle &, const EulerAngle &)
T value(details::expression_node< T > *n)
Definition: Exprtk.hpp:15070