130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunwww.sourceforge.net/projects/tinyxml 330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunOriginal code by Lee Thomason (www.grinninglizard.com) 430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunThis software is provided 'as-is', without any express or implied 630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunwarranty. In no event will the authors be held liable for any 730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurundamages arising from the use of this software. 830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunPermission is granted to anyone to use this software for any 1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunpurpose, including commercial applications, and to alter it and 1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunredistribute it freely, subject to the following restrictions: 1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun1. The origin of this software must not be misrepresented; you must 1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnot claim that you wrote the original software. If you use this 1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunsoftware in a product, an acknowledgment in the product documentation 1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunwould be appreciated but is not required. 1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun2. Altered source versions must be plainly marked as such, and 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunmust not be misrepresented as being the original software. 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun3. This notice may not be removed or altered from any source 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurundistribution. 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun*/ 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <ctype.h> 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <sstream> 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <iostream> 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "tinyxml.h" 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunFILE* TiXmlFOpen( const char* filename, const char* mode ); 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlBase::condenseWhiteSpace = true; 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Microsoft compiler security 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunFILE* TiXmlFOpen( const char* filename, const char* mode ) 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FILE* fp = 0; 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun errno_t err = fopen_s( &fp, filename, mode ); 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !err && fp ) 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return fp; 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #else 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return fopen( filename, mode ); 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #endif 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlBase::EncodeString( const TIXML_STRING& str, TIXML_STRING* outString ) 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int i=0; 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun while( i<(int)str.length() ) 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun unsigned char c = (unsigned char) str[i]; 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( c == '&' 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun && i < ( (int)str.length() - 2 ) 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun && str[i+1] == '#' 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun && str[i+2] == 'x' ) 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Hexadecimal character reference. 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Pass through unchanged. 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // © -- copyright symbol, for example. 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // The -1 is a bug fix from Rob Laveaux. It keeps 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // an overflow from happening if there is no ';'. 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // There are actually 2 ways to exit this loop - 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // while fails (error case) and break (semicolon found). 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // However, there is no mechanism (currently) for 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // this function to return an error. 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun while ( i<(int)str.length()-1 ) 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun outString->append( str.c_str() + i, 1 ); 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ++i; 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( str[i] == ';' ) 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun break; 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else if ( c == '&' ) 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun outString->append( entity[0].str, entity[0].strLength ); 8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ++i; 8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else if ( c == '<' ) 8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun outString->append( entity[1].str, entity[1].strLength ); 9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ++i; 9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else if ( c == '>' ) 9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun outString->append( entity[2].str, entity[2].strLength ); 9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ++i; 9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else if ( c == '\"' ) 9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun outString->append( entity[3].str, entity[3].strLength ); 10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ++i; 10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else if ( c == '\'' ) 10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun outString->append( entity[4].str, entity[4].strLength ); 10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ++i; 10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else if ( c < 32 ) 10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Easy pass at non-alpha/numeric/symbol 11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Below 32 is symbolic. 11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun char buf[ 32 ]; 11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #if defined(TIXML_SNPRINTF) 11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_SNPRINTF( buf, sizeof(buf), "&#x%02X;", (unsigned) ( c & 0xff ) ); 11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #else 11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) ); 11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #endif 11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun //*ME: warning C4267: convert 'size_t' to 'int' 12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun //*ME: Int-Cast to make compiler happy ... 12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun outString->append( buf, (int)strlen( buf ) ); 12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ++i; 12430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 12530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 12630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 12730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun //char realc = (char) c; 12830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun //outString->append( &realc, 1 ); 12930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *outString += (char) c; // somewhat more efficient function call. 13030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ++i; 13130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 13230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 13330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 13430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode::TiXmlNode( NodeType _type ) : TiXmlBase() 13730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 13830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun parent = 0; 13930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun type = _type; 14030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild = 0; 14130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun lastChild = 0; 14230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun prev = 0; 14330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun next = 0; 14430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 14530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode::~TiXmlNode() 14830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 14930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* node = firstChild; 15030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* temp = 0; 15130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 15230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun while ( node ) 15330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 15430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun temp = node; 15530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node = node->next; 15630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete temp; 15730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 15830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 15930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlNode::CopyTo( TiXmlNode* target ) const 16230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 16330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->SetValue (value.c_str() ); 16430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->userData = userData; 16530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->location = location; 16630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 16730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlNode::Clear() 17030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 17130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* node = firstChild; 17230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* temp = 0; 17330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 17430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun while ( node ) 17530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 17630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun temp = node; 17730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node = node->next; 17830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete temp; 17930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 18030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild = 0; 18230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun lastChild = 0; 18330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 18430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node ) 18730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 18830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( node->parent == 0 || node->parent == this ); 18930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() ); 19030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 19130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node->Type() == TiXmlNode::TINYXML_DOCUMENT ) 19230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 19330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete node; 19430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( GetDocument() ) 19530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); 19630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 19730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 19830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 19930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->parent = this; 20030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 20130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->prev = lastChild; 20230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->next = 0; 20330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 20430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( lastChild ) 20530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun lastChild->next = node; 20630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 20730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild = node; // it was an empty list. 20830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 20930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun lastChild = node; 21030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 21130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 21230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 21330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 21430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis ) 21530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 21630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) 21730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 21830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( GetDocument() ) 21930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); 22030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 22130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 22230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* node = addThis.Clone(); 22330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !node ) 22430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 22530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 22630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return LinkEndChild( node ); 22730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 22830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 22930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 23030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ) 23130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 23230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !beforeThis || beforeThis->parent != this ) { 23330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 23430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 23530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) 23630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 23730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( GetDocument() ) 23830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); 23930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 24030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 24130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 24230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* node = addThis.Clone(); 24330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !node ) 24430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 24530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->parent = this; 24630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 24730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->next = beforeThis; 24830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->prev = beforeThis->prev; 24930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( beforeThis->prev ) 25030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 25130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun beforeThis->prev->next = node; 25230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 25330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 25430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 25530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( firstChild == beforeThis ); 25630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild = node; 25730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 25830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun beforeThis->prev = node; 25930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 26030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 26130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 26230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 26330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ) 26430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 26530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !afterThis || afterThis->parent != this ) { 26630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 26730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 26830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) 26930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 27030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( GetDocument() ) 27130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); 27230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 27330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 27430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 27530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* node = addThis.Clone(); 27630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !node ) 27730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 27830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->parent = this; 27930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 28030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->prev = afterThis; 28130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->next = afterThis->next; 28230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( afterThis->next ) 28330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 28430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun afterThis->next->prev = node; 28530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 28630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 28730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 28830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( lastChild == afterThis ); 28930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun lastChild = node; 29030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 29130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun afterThis->next = node; 29230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 29330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 29430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 29530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 29630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ) 29730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 29830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !replaceThis ) 29930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 30030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 30130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( replaceThis->parent != this ) 30230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 30330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 30430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( withThis.ToDocument() ) { 30530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // A document can never be a child. Thanks to Noam. 30630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlDocument* document = GetDocument(); 30730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( document ) 30830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun document->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); 30930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 31030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 31130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 31230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* node = withThis.Clone(); 31330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !node ) 31430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 31530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 31630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->next = replaceThis->next; 31730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->prev = replaceThis->prev; 31830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 31930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( replaceThis->next ) 32030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun replaceThis->next->prev = node; 32130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 32230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun lastChild = node; 32330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 32430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( replaceThis->prev ) 32530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun replaceThis->prev->next = node; 32630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 32730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild = node; 32830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 32930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete replaceThis; 33030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->parent = this; 33130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 33230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 33330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 33430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 33530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlNode::RemoveChild( TiXmlNode* removeThis ) 33630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 33730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !removeThis ) { 33830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return false; 33930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 34030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 34130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( removeThis->parent != this ) 34230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 34330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( 0 ); 34430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return false; 34530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 34630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 34730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( removeThis->next ) 34830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun removeThis->next->prev = removeThis->prev; 34930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 35030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun lastChild = removeThis->prev; 35130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 35230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( removeThis->prev ) 35330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun removeThis->prev->next = removeThis->next; 35430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 35530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild = removeThis->next; 35630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 35730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete removeThis; 35830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 35930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 36030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 36130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const 36230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 36330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* node; 36430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = firstChild; node; node = node->next ) 36530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 36630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( strcmp( node->Value(), _value ) == 0 ) 36730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 36830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 36930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 37030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 37130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 37230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 37330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlNode* TiXmlNode::LastChild( const char * _value ) const 37430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 37530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* node; 37630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = lastChild; node; node = node->prev ) 37730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 37830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( strcmp( node->Value(), _value ) == 0 ) 37930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 38030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 38130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 38230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 38330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 38430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 38530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlNode* TiXmlNode::IterateChildren( const TiXmlNode* previous ) const 38630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 38730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !previous ) 38830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 38930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return FirstChild(); 39030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 39130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 39230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 39330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( previous->parent == this ); 39430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return previous->NextSibling(); 39530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 39630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 39730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 39830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 39930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* previous ) const 40030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 40130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !previous ) 40230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 40330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return FirstChild( val ); 40430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 40530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 40630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 40730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( previous->parent == this ); 40830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return previous->NextSibling( val ); 40930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 41030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 41130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 41230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 41330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const 41430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 41530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* node; 41630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = next; node; node = node->next ) 41730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 41830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( strcmp( node->Value(), _value ) == 0 ) 41930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 42030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 42130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 42230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 42330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 42430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 42530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlNode* TiXmlNode::PreviousSibling( const char * _value ) const 42630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 42730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* node; 42830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = prev; node; node = node->prev ) 42930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 43030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( strcmp( node->Value(), _value ) == 0 ) 43130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 43230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 43330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 43430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 43530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 43630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 43730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::RemoveAttribute( const char * name ) 43830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 43930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #ifdef TIXML_USE_STL 44030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_STRING str( name ); 44130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* node = attributeSet.Find( str ); 44230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #else 44330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* node = attributeSet.Find( name ); 44430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #endif 44530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 44630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 44730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attributeSet.Remove( node ); 44830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete node; 44930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 45030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 45130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 45230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlElement* TiXmlNode::FirstChildElement() const 45330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 45430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* node; 45530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 45630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = FirstChild(); 45730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node; 45830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node = node->NextSibling() ) 45930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 46030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node->ToElement() ) 46130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node->ToElement(); 46230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 46330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 46430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 46530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 46630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 46730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlElement* TiXmlNode::FirstChildElement( const char * _value ) const 46830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 46930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* node; 47030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 47130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = FirstChild( _value ); 47230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node; 47330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node = node->NextSibling( _value ) ) 47430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 47530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node->ToElement() ) 47630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node->ToElement(); 47730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 47830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 47930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 48030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 48130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 48230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlElement* TiXmlNode::NextSiblingElement() const 48330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 48430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* node; 48530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 48630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = NextSibling(); 48730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node; 48830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node = node->NextSibling() ) 48930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 49030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node->ToElement() ) 49130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node->ToElement(); 49230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 49330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 49430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 49530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 49630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 49730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlElement* TiXmlNode::NextSiblingElement( const char * _value ) const 49830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 49930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* node; 50030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 50130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = NextSibling( _value ); 50230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node; 50330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node = node->NextSibling( _value ) ) 50430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 50530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node->ToElement() ) 50630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node->ToElement(); 50730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 50830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 50930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 51030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 51130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 51230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlDocument* TiXmlNode::GetDocument() const 51330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 51430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* node; 51530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 51630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for( node = this; node; node = node->parent ) 51730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 51830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node->ToDocument() ) 51930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node->ToDocument(); 52030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 52130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 52230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 52330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 52430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 52530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlElement::TiXmlElement (const char * _value) 52630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) 52730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 52830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild = lastChild = 0; 52930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun value = _value; 53030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 53130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 53230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 53330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 53430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlElement::TiXmlElement( const std::string& _value ) 53530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) 53630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 53730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild = lastChild = 0; 53830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun value = _value; 53930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 54030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 54130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 54230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 54330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlElement::TiXmlElement( const TiXmlElement& copy) 54430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) 54530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 54630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild = lastChild = 0; 54730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun copy.CopyTo( this ); 54830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 54930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 55030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 55130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlElement& TiXmlElement::operator=( const TiXmlElement& base ) 55230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 55330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ClearThis(); 55430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun base.CopyTo( this ); 55530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return *this; 55630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 55730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 55830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 55930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlElement::~TiXmlElement() 56030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 56130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ClearThis(); 56230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 56330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 56430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 56530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::ClearThis() 56630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 56730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Clear(); 56830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun while( attributeSet.First() ) 56930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 57030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* node = attributeSet.First(); 57130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attributeSet.Remove( node ); 57230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete node; 57330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 57430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 57530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 57630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 57730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst char* TiXmlElement::Attribute( const char* name ) const 57830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 57930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* node = attributeSet.Find( name ); 58030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 58130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node->Value(); 58230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 58330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 58430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 58530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 58630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 58730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst std::string* TiXmlElement::Attribute( const std::string& name ) const 58830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 58930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib = attributeSet.Find( name ); 59030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) 59130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return &attrib->ValueStr(); 59230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 59330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 59430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 59530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 59630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 59730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst char* TiXmlElement::Attribute( const char* name, int* i ) const 59830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 59930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib = attributeSet.Find( name ); 60030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* result = 0; 60130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 60230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 60330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun result = attrib->Value(); 60430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( i ) { 60530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->QueryIntValue( i ); 60630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 60730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 60830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return result; 60930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 61030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 61130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 61230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 61330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst std::string* TiXmlElement::Attribute( const std::string& name, int* i ) const 61430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 61530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib = attributeSet.Find( name ); 61630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const std::string* result = 0; 61730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 61830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 61930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun result = &attrib->ValueStr(); 62030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( i ) { 62130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->QueryIntValue( i ); 62230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 62330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 62430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return result; 62530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 62630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 62730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 62830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 62930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst char* TiXmlElement::Attribute( const char* name, double* d ) const 63030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 63130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib = attributeSet.Find( name ); 63230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* result = 0; 63330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 63430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 63530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun result = attrib->Value(); 63630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( d ) { 63730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->QueryDoubleValue( d ); 63830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 63930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 64030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return result; 64130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 64230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 64330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 64430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 64530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst std::string* TiXmlElement::Attribute( const std::string& name, double* d ) const 64630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 64730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib = attributeSet.Find( name ); 64830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const std::string* result = 0; 64930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 65030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 65130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun result = &attrib->ValueStr(); 65230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( d ) { 65330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->QueryDoubleValue( d ); 65430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 65530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 65630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return result; 65730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 65830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 65930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 66030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 66130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint TiXmlElement::QueryIntAttribute( const char* name, int* ival ) const 66230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 66330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib = attributeSet.Find( name ); 66430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !attrib ) 66530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_NO_ATTRIBUTE; 66630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return attrib->QueryIntValue( ival ); 66730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 66830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 66930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 67030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint TiXmlElement::QueryUnsignedAttribute( const char* name, unsigned* value ) const 67130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 67230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* node = attributeSet.Find( name ); 67330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !node ) 67430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_NO_ATTRIBUTE; 67530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 67630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int ival = 0; 67730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int result = node->QueryIntValue( &ival ); 67830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *value = (unsigned)ival; 67930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return result; 68030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 68130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 68230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 68330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint TiXmlElement::QueryBoolAttribute( const char* name, bool* bval ) const 68430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 68530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* node = attributeSet.Find( name ); 68630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !node ) 68730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_NO_ATTRIBUTE; 68830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 68930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int result = TIXML_WRONG_TYPE; 69030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( StringEqual( node->Value(), "true", true, TIXML_ENCODING_UNKNOWN ) 69130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun || StringEqual( node->Value(), "yes", true, TIXML_ENCODING_UNKNOWN ) 69230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun || StringEqual( node->Value(), "1", true, TIXML_ENCODING_UNKNOWN ) ) 69330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 69430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *bval = true; 69530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun result = TIXML_SUCCESS; 69630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 69730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else if ( StringEqual( node->Value(), "false", true, TIXML_ENCODING_UNKNOWN ) 69830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun || StringEqual( node->Value(), "no", true, TIXML_ENCODING_UNKNOWN ) 69930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun || StringEqual( node->Value(), "0", true, TIXML_ENCODING_UNKNOWN ) ) 70030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 70130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *bval = false; 70230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun result = TIXML_SUCCESS; 70330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 70430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return result; 70530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 70630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 70730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 70830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 70930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 71030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint TiXmlElement::QueryIntAttribute( const std::string& name, int* ival ) const 71130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 71230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib = attributeSet.Find( name ); 71330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !attrib ) 71430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_NO_ATTRIBUTE; 71530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return attrib->QueryIntValue( ival ); 71630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 71730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 71830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 71930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 72030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint TiXmlElement::QueryDoubleAttribute( const char* name, double* dval ) const 72130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 72230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib = attributeSet.Find( name ); 72330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !attrib ) 72430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_NO_ATTRIBUTE; 72530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return attrib->QueryDoubleValue( dval ); 72630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 72730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 72830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 72930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 73030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint TiXmlElement::QueryDoubleAttribute( const std::string& name, double* dval ) const 73130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 73230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib = attributeSet.Find( name ); 73330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !attrib ) 73430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_NO_ATTRIBUTE; 73530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return attrib->QueryDoubleValue( dval ); 73630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 73730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 73830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 73930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 74030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::SetAttribute( const char * name, int val ) 74130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 74230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); 74330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 74430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->SetIntValue( val ); 74530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 74630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 74730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 74830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 74930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 75030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::SetAttribute( const std::string& name, int val ) 75130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 75230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); 75330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 75430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->SetIntValue( val ); 75530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 75630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 75730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 75830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 75930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 76030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::SetDoubleAttribute( const char * name, double val ) 76130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 76230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); 76330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 76430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->SetDoubleValue( val ); 76530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 76630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 76730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 76830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 76930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 77030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::SetDoubleAttribute( const std::string& name, double val ) 77130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 77230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); 77330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 77430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->SetDoubleValue( val ); 77530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 77630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 77730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 77830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 77930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 78030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::SetAttribute( const char * cname, const char * cvalue ) 78130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 78230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* attrib = attributeSet.FindOrCreate( cname ); 78330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 78430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->SetValue( cvalue ); 78530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 78630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 78730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 78830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 78930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 79030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::SetAttribute( const std::string& _name, const std::string& _value ) 79130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 79230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* attrib = attributeSet.FindOrCreate( _name ); 79330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( attrib ) { 79430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->SetValue( _value ); 79530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 79630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 79730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 79830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 79930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 80030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::Print( FILE* cfile, int depth ) const 80130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 80230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int i; 80330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( cfile ); 80430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( i=0; i<depth; i++ ) { 80530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, " " ); 80630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 80730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 80830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "<%s", value.c_str() ); 80930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 81030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attrib; 81130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() ) 81230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 81330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, " " ); 81430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->Print( cfile, depth ); 81530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 81630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 81730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // There are 3 different formatting approaches: 81830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // 1) An element without children is printed as a <foo /> node 81930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // 2) An element with only a text child is printed as <foo> text </foo> 82030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // 3) An element with children is printed on multiple lines. 82130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* node; 82230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !firstChild ) 82330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 82430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, " />" ); 82530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 82630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else if ( firstChild == lastChild && firstChild->ToText() ) 82730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 82830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, ">" ); 82930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun firstChild->Print( cfile, depth + 1 ); 83030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "</%s>", value.c_str() ); 83130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 83230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 83330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 83430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, ">" ); 83530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 83630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = firstChild; node; node=node->NextSibling() ) 83730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 83830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !node->ToText() ) 83930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 84030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "\n" ); 84130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 84230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->Print( cfile, depth+1 ); 84330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 84430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "\n" ); 84530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for( i=0; i<depth; ++i ) { 84630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, " " ); 84730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 84830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "</%s>", value.c_str() ); 84930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 85030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 85130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 85230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 85330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlElement::CopyTo( TiXmlElement* target ) const 85430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 85530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // superclass: 85630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode::CopyTo( target ); 85730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 85830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Element class: 85930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Clone the attributes, then clone the children. 86030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlAttribute* attribute = 0; 86130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for( attribute = attributeSet.First(); 86230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attribute; 86330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attribute = attribute->Next() ) 86430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 86530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->SetAttribute( attribute->Name(), attribute->Value() ); 86630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 86730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 86830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* node = 0; 86930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = firstChild; node; node = node->NextSibling() ) 87030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 87130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->LinkEndChild( node->Clone() ); 87230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 87330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 87430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 87530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlElement::Accept( TiXmlVisitor* visitor ) const 87630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 87730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( visitor->VisitEnter( *this, attributeSet.First() ) ) 87830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 87930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) 88030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 88130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !node->Accept( visitor ) ) 88230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun break; 88330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 88430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 88530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return visitor->VisitExit( *this ); 88630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 88730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 88830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 88930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlElement::Clone() const 89030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 89130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlElement* clone = new TiXmlElement( Value() ); 89230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !clone ) 89330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 89430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 89530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CopyTo( clone ); 89630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return clone; 89730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 89830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 89930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 90030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst char* TiXmlElement::GetText() const 90130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 90230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlNode* child = this->FirstChild(); 90330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( child ) { 90430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const TiXmlText* childText = child->ToText(); 90530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( childText ) { 90630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return childText->Value(); 90730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 90830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 90930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 91030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 91130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 91230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 91330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) 91430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 91530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun tabsize = 4; 91630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun useMicrosoftBOM = false; 91730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ClearError(); 91830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 91930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 92030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) 92130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 92230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun tabsize = 4; 92330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun useMicrosoftBOM = false; 92430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun value = documentName; 92530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ClearError(); 92630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 92730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 92830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 92930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 93030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) 93130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 93230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun tabsize = 4; 93330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun useMicrosoftBOM = false; 93430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun value = documentName; 93530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ClearError(); 93630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 93730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 93830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 93930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 94030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlDocument::TiXmlDocument( const TiXmlDocument& copy ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) 94130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 94230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun copy.CopyTo( this ); 94330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 94430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 94530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 94630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlDocument& TiXmlDocument::operator=( const TiXmlDocument& copy ) 94730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 94830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Clear(); 94930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun copy.CopyTo( this ); 95030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return *this; 95130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 95230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 95330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 95430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlDocument::LoadFile( TiXmlEncoding encoding ) 95530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 95630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return LoadFile( Value(), encoding ); 95730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 95830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 95930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 96030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlDocument::SaveFile() const 96130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 96230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return SaveFile( Value() ); 96330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 96430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 96530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding ) 96630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 96730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_STRING filename( _filename ); 96830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun value = filename; 96930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 97030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // reading in binary mode so that tinyxml can normalize the EOL 97130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FILE* file = TiXmlFOpen( value.c_str (), "rb" ); 97230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 97330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( file ) 97430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 97530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool result = LoadFile( file, encoding ); 97630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fclose( file ); 97730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return result; 97830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 97930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 98030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 98130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); 98230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return false; 98330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 98430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 98530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 98630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding ) 98730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 98830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !file ) 98930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 99030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); 99130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return false; 99230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 99330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 99430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Delete the existing data: 99530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Clear(); 99630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun location.Clear(); 99730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 99830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Get the file size, so we can pre-allocate the string. HUGE speed impact. 99930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun long length = 0; 100030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fseek( file, 0, SEEK_END ); 100130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun length = ftell( file ); 100230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fseek( file, 0, SEEK_SET ); 100330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 100430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Strange case, but good to handle up front. 100530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( length <= 0 ) 100630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 100730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); 100830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return false; 100930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 101030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 101130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Subtle bug here. TinyXml did use fgets. But from the XML spec: 101230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // 2.11 End-of-Line Handling 101330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // <snip> 101430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // <quote> 101530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // ...the XML processor MUST behave as if it normalized all line breaks in external 101630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // parsed entities (including the document entity) on input, before parsing, by translating 101730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to 101830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // a single #xA character. 101930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // </quote> 102030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // 102130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // It is not clear fgets does that, and certainly isn't clear it works cross platform. 102230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Generally, you expect fgets to translate from the convention of the OS to the c/unix 102330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // convention, and not work generally. 102430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 102530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun /* 102630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun while( fgets( buf, sizeof(buf), file ) ) 102730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 102830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun data += buf; 102930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 103030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun */ 103130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 103230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun char* buf = new char[ length+1 ]; 103330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buf[0] = 0; 103430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 103530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( fread( buf, length, 1, file ) != 1 ) { 103630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete [] buf; 103730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); 103830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return false; 103930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 104030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 104130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Process the buffer in place to normalize new lines. (See comment above.) 104230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Copies from the 'p' to 'q' pointer, where p can advance faster if 104330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // a newline-carriage return is hit. 104430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // 104530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Wikipedia: 104630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or 104730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // CR (Carriage return, '\r', 0x0D, 13 in decimal) individually, or CR followed by LF (CR+LF, 0x0D 0x0A)... 104830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // * LF: Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others 104930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // * CR+LF: DEC RT-11 and most other early non-Unix, non-IBM OSes, CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS 105030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // * CR: Commodore 8-bit machines, Apple II family, Mac OS up to version 9 and OS-9 105130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 105230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* p = buf; // the read head 105330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun char* q = buf; // the write head 105430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char CR = 0x0d; 105530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char LF = 0x0a; 105630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 105730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buf[length] = 0; 105830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun while( *p ) { 105930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( p < (buf+length) ); 106030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( q <= (buf+length) ); 106130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( q <= p ); 106230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 106330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( *p == CR ) { 106430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *q++ = LF; 106530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun p++; 106630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( *p == LF ) { // check for CR+LF (and skip LF) 106730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun p++; 106830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 106930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 107030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else { 107130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *q++ = *p++; 107230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 107330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 107430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( q <= (buf+length) ); 107530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun *q = 0; 107630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 107730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Parse( buf, 0, encoding ); 107830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 107930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete [] buf; 108030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return !Error(); 108130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 108230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 108330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 108430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlDocument::SaveFile( const char * filename ) const 108530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 108630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // The old c stuff lives on... 108730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FILE* fp = TiXmlFOpen( filename, "w" ); 108830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( fp ) 108930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 109030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool result = SaveFile( fp ); 109130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fclose( fp ); 109230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return result; 109330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 109430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return false; 109530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 109630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 109730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 109830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlDocument::SaveFile( FILE* fp ) const 109930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 110030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( useMicrosoftBOM ) 110130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 110230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const unsigned char TIXML_UTF_LEAD_0 = 0xefU; 110330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; 110430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; 110530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 110630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fputc( TIXML_UTF_LEAD_0, fp ); 110730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fputc( TIXML_UTF_LEAD_1, fp ); 110830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fputc( TIXML_UTF_LEAD_2, fp ); 110930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 111030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Print( fp, 0 ); 111130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return (ferror(fp) == 0); 111230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 111330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 111430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 111530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlDocument::CopyTo( TiXmlDocument* target ) const 111630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 111730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode::CopyTo( target ); 111830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 111930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->error = error; 112030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->errorId = errorId; 112130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->errorDesc = errorDesc; 112230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->tabsize = tabsize; 112330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->errorLocation = errorLocation; 112430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->useMicrosoftBOM = useMicrosoftBOM; 112530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 112630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* node = 0; 112730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( node = firstChild; node; node = node->NextSibling() ) 112830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 112930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->LinkEndChild( node->Clone() ); 113030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 113130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 113230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 113330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 113430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlDocument::Clone() const 113530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 113630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlDocument* clone = new TiXmlDocument(); 113730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !clone ) 113830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 113930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 114030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CopyTo( clone ); 114130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return clone; 114230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 114330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 114430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 114530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlDocument::Print( FILE* cfile, int depth ) const 114630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 114730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( cfile ); 114830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) 114930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 115030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->Print( cfile, depth ); 115130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "\n" ); 115230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 115330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 115430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 115530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 115630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlDocument::Accept( TiXmlVisitor* visitor ) const 115730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 115830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( visitor->VisitEnter( *this ) ) 115930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 116030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) 116130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 116230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !node->Accept( visitor ) ) 116330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun break; 116430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 116530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 116630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return visitor->VisitExit( *this ); 116730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 116830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 116930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 117030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlAttribute* TiXmlAttribute::Next() const 117130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 117230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // We are using knowledge of the sentinel. The sentinel 117330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // have a value or name. 117430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( next->value.empty() && next->name.empty() ) 117530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 117630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return next; 117730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 117830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 117930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 118030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlAttribute* TiXmlAttribute::Next() 118130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 118230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // We are using knowledge of the sentinel. The sentinel 118330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // have a value or name. 118430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( next->value.empty() && next->name.empty() ) 118530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 118630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return next; 118730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 118830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun*/ 118930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 119030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst TiXmlAttribute* TiXmlAttribute::Previous() const 119130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 119230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // We are using knowledge of the sentinel. The sentinel 119330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // have a value or name. 119430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( prev->value.empty() && prev->name.empty() ) 119530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 119630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return prev; 119730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 119830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 119930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 120030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlAttribute* TiXmlAttribute::Previous() 120130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 120230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // We are using knowledge of the sentinel. The sentinel 120330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // have a value or name. 120430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( prev->value.empty() && prev->name.empty() ) 120530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 120630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return prev; 120730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 120830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun*/ 120930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 121030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlAttribute::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const 121130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 121230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_STRING n, v; 121330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 121430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EncodeString( name, &n ); 121530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EncodeString( value, &v ); 121630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 121730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if (value.find ('\"') == TIXML_STRING::npos) { 121830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( cfile ) { 121930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf (cfile, "%s=\"%s\"", n.c_str(), v.c_str() ); 122030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 122130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( str ) { 122230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun (*str) += n; (*str) += "=\""; (*str) += v; (*str) += "\""; 122330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 122430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 122530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else { 122630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( cfile ) { 122730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf (cfile, "%s='%s'", n.c_str(), v.c_str() ); 122830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 122930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( str ) { 123030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun (*str) += n; (*str) += "='"; (*str) += v; (*str) += "'"; 123130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 123230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 123330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 123430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 123530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 123630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint TiXmlAttribute::QueryIntValue( int* ival ) const 123730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 123830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( TIXML_SSCANF( value.c_str(), "%d", ival ) == 1 ) 123930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_SUCCESS; 124030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_WRONG_TYPE; 124130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 124230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 124330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint TiXmlAttribute::QueryDoubleValue( double* dval ) const 124430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 124530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( TIXML_SSCANF( value.c_str(), "%lf", dval ) == 1 ) 124630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_SUCCESS; 124730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TIXML_WRONG_TYPE; 124830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 124930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 125030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlAttribute::SetIntValue( int _value ) 125130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 125230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun char buf [64]; 125330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #if defined(TIXML_SNPRINTF) 125430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_SNPRINTF(buf, sizeof(buf), "%d", _value); 125530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #else 125630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun sprintf (buf, "%d", _value); 125730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #endif 125830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun SetValue (buf); 125930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 126030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 126130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlAttribute::SetDoubleValue( double _value ) 126230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 126330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun char buf [256]; 126430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #if defined(TIXML_SNPRINTF) 126530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_SNPRINTF( buf, sizeof(buf), "%g", _value); 126630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #else 126730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun sprintf (buf, "%g", _value); 126830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #endif 126930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun SetValue (buf); 127030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 127130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 127230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint TiXmlAttribute::IntValue() const 127330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 127430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return atoi (value.c_str ()); 127530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 127630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 127730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurundouble TiXmlAttribute::DoubleValue() const 127830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 127930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return atof (value.c_str ()); 128030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 128130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 128230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 128330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlComment::TiXmlComment( const TiXmlComment& copy ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) 128430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 128530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun copy.CopyTo( this ); 128630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 128730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 128830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 128930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlComment& TiXmlComment::operator=( const TiXmlComment& base ) 129030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 129130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Clear(); 129230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun base.CopyTo( this ); 129330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return *this; 129430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 129530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 129630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 129730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlComment::Print( FILE* cfile, int depth ) const 129830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 129930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( cfile ); 130030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( int i=0; i<depth; i++ ) 130130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 130230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, " " ); 130330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 130430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "<!--%s-->", value.c_str() ); 130530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 130630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 130730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 130830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlComment::CopyTo( TiXmlComment* target ) const 130930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 131030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode::CopyTo( target ); 131130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 131230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 131330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 131430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlComment::Accept( TiXmlVisitor* visitor ) const 131530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 131630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return visitor->Visit( *this ); 131730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 131830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 131930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 132030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlComment::Clone() const 132130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 132230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlComment* clone = new TiXmlComment(); 132330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 132430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !clone ) 132530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 132630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 132730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CopyTo( clone ); 132830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return clone; 132930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 133030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 133130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 133230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlText::Print( FILE* cfile, int depth ) const 133330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 133430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( cfile ); 133530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( cdata ) 133630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 133730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int i; 133830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "\n" ); 133930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( i=0; i<depth; i++ ) { 134030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, " " ); 134130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 134230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "<![CDATA[%s]]>\n", value.c_str() ); // unformatted output 134330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 134430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 134530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 134630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_STRING buffer; 134730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EncodeString( value, &buffer ); 134830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "%s", buffer.c_str() ); 134930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 135030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 135130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 135230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 135330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlText::CopyTo( TiXmlText* target ) const 135430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 135530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode::CopyTo( target ); 135630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->cdata = cdata; 135730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 135830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 135930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 136030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlText::Accept( TiXmlVisitor* visitor ) const 136130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 136230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return visitor->Visit( *this ); 136330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 136430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 136530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 136630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlText::Clone() const 136730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 136830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlText* clone = 0; 136930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun clone = new TiXmlText( "" ); 137030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 137130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !clone ) 137230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 137330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 137430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CopyTo( clone ); 137530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return clone; 137630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 137730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 137830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 137930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlDeclaration::TiXmlDeclaration( const char * _version, 138030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char * _encoding, 138130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char * _standalone ) 138230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) 138330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 138430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun version = _version; 138530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun encoding = _encoding; 138630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun standalone = _standalone; 138730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 138830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 138930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 139030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 139130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlDeclaration::TiXmlDeclaration( const std::string& _version, 139230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const std::string& _encoding, 139330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const std::string& _standalone ) 139430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) 139530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 139630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun version = _version; 139730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun encoding = _encoding; 139830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun standalone = _standalone; 139930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 140030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 140130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 140230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 140330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy ) 140430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) 140530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 140630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun copy.CopyTo( this ); 140730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 140830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 140930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 141030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlDeclaration& TiXmlDeclaration::operator=( const TiXmlDeclaration& copy ) 141130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 141230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Clear(); 141330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun copy.CopyTo( this ); 141430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return *this; 141530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 141630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 141730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 141830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlDeclaration::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const 141930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 142030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( cfile ) fprintf( cfile, "<?xml " ); 142130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( str ) (*str) += "<?xml "; 142230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 142330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !version.empty() ) { 142430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( cfile ) fprintf (cfile, "version=\"%s\" ", version.c_str ()); 142530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( str ) { (*str) += "version=\""; (*str) += version; (*str) += "\" "; } 142630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 142730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !encoding.empty() ) { 142830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( cfile ) fprintf (cfile, "encoding=\"%s\" ", encoding.c_str ()); 142930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( str ) { (*str) += "encoding=\""; (*str) += encoding; (*str) += "\" "; } 143030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 143130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !standalone.empty() ) { 143230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( cfile ) fprintf (cfile, "standalone=\"%s\" ", standalone.c_str ()); 143330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( str ) { (*str) += "standalone=\""; (*str) += standalone; (*str) += "\" "; } 143430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 143530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( cfile ) fprintf( cfile, "?>" ); 143630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( str ) (*str) += "?>"; 143730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 143830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 143930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 144030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const 144130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 144230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode::CopyTo( target ); 144330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 144430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->version = version; 144530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->encoding = encoding; 144630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target->standalone = standalone; 144730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 144830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 144930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 145030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const 145130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 145230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return visitor->Visit( *this ); 145330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 145430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 145530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 145630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlDeclaration::Clone() const 145730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 145830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlDeclaration* clone = new TiXmlDeclaration(); 145930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 146030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !clone ) 146130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 146230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 146330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CopyTo( clone ); 146430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return clone; 146530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 146630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 146730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 146830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlUnknown::Print( FILE* cfile, int depth ) const 146930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 147030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( int i=0; i<depth; i++ ) 147130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, " " ); 147230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf( cfile, "<%s>", value.c_str() ); 147330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 147430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 147530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 147630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const 147730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 147830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode::CopyTo( target ); 147930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 148030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 148130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 148230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlUnknown::Accept( TiXmlVisitor* visitor ) const 148330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 148430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return visitor->Visit( *this ); 148530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 148630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 148730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 148830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlNode* TiXmlUnknown::Clone() const 148930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 149030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlUnknown* clone = new TiXmlUnknown(); 149130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 149230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !clone ) 149330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 149430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 149530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CopyTo( clone ); 149630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return clone; 149730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 149830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 149930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 150030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlAttributeSet::TiXmlAttributeSet() 150130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 150230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun sentinel.next = &sentinel; 150330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun sentinel.prev = &sentinel; 150430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 150530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 150630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 150730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlAttributeSet::~TiXmlAttributeSet() 150830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 150930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( sentinel.next == &sentinel ); 151030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( sentinel.prev == &sentinel ); 151130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 151230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 151330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 151430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlAttributeSet::Add( TiXmlAttribute* addMe ) 151530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 151630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #ifdef TIXML_USE_STL 151730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( !Find( TIXML_STRING( addMe->Name() ) ) ); // Shouldn't be multiply adding to the set. 151830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #else 151930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( !Find( addMe->Name() ) ); // Shouldn't be multiply adding to the set. 152030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun #endif 152130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 152230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun addMe->next = &sentinel; 152330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun addMe->prev = sentinel.prev; 152430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 152530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun sentinel.prev->next = addMe; 152630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun sentinel.prev = addMe; 152730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 152830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 152930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe ) 153030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 153130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* node; 153230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 153330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for( node = sentinel.next; node != &sentinel; node = node->next ) 153430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 153530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node == removeMe ) 153630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 153730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->prev->next = node->next; 153830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->next->prev = node->prev; 153930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->next = 0; 154030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun node->prev = 0; 154130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return; 154230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 154330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 154430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert( 0 ); // we tried to remove a non-linked attribute. 154530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 154630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 154730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 154830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 154930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const 155030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 155130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) 155230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 155330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node->name == name ) 155430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 155530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 155630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 155730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 155830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 155930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const std::string& _name ) 156030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 156130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* attrib = Find( _name ); 156230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !attrib ) { 156330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib = new TiXmlAttribute(); 156430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Add( attrib ); 156530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->SetName( _name ); 156630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 156730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return attrib; 156830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 156930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 157030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 157130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 157230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) const 157330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 157430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) 157530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 157630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( strcmp( node->name.c_str(), name ) == 0 ) 157730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return node; 157830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 157930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return 0; 158030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 158130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 158230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 158330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const char* _name ) 158430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 158530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlAttribute* attrib = Find( _name ); 158630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !attrib ) { 158730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib = new TiXmlAttribute(); 158830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Add( attrib ); 158930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->SetName( _name ); 159030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 159130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return attrib; 159230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 159330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 159430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 159530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 159630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunstd::istream& operator>> (std::istream & in, TiXmlNode & base) 159730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 159830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_STRING tag; 159930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun tag.reserve( 8 * 1000 ); 160030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun base.StreamIn( &in, &tag ); 160130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 160230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun base.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING ); 160330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return in; 160430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 160530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 160630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 160730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 160830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef TIXML_USE_STL 160930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunstd::ostream& operator<< (std::ostream & out, const TiXmlNode & base) 161030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 161130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlPrinter printer; 161230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun printer.SetStreamPrinting(); 161330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun base.Accept( &printer ); 161430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun out << printer.Str(); 161530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 161630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return out; 161730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 161830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 161930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 162030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunstd::string& operator<< (std::string& out, const TiXmlNode& base ) 162130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 162230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlPrinter printer; 162330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun printer.SetStreamPrinting(); 162430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun base.Accept( &printer ); 162530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun out.append( printer.Str() ); 162630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 162730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return out; 162830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 162930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 163030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 163130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 163230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlHandle TiXmlHandle::FirstChild() const 163330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 163430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 163530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 163630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* child = node->FirstChild(); 163730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( child ) 163830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( child ); 163930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 164030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( 0 ); 164130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 164230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 164330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 164430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlHandle TiXmlHandle::FirstChild( const char * value ) const 164530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 164630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 164730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 164830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* child = node->FirstChild( value ); 164930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( child ) 165030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( child ); 165130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 165230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( 0 ); 165330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 165430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 165530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 165630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlHandle TiXmlHandle::FirstChildElement() const 165730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 165830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 165930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 166030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlElement* child = node->FirstChildElement(); 166130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( child ) 166230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( child ); 166330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 166430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( 0 ); 166530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 166630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 166730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 166830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const 166930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 167030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 167130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 167230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlElement* child = node->FirstChildElement( value ); 167330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( child ) 167430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( child ); 167530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 167630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( 0 ); 167730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 167830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 167930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 168030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlHandle TiXmlHandle::Child( int count ) const 168130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 168230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 168330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 168430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int i; 168530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* child = node->FirstChild(); 168630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( i=0; 168730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun child && i<count; 168830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun child = child->NextSibling(), ++i ) 168930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 169030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // nothing 169130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 169230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( child ) 169330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( child ); 169430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 169530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( 0 ); 169630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 169730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 169830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 169930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlHandle TiXmlHandle::Child( const char* value, int count ) const 170030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 170130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 170230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 170330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int i; 170430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlNode* child = node->FirstChild( value ); 170530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( i=0; 170630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun child && i<count; 170730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun child = child->NextSibling( value ), ++i ) 170830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 170930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // nothing 171030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 171130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( child ) 171230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( child ); 171330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 171430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( 0 ); 171530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 171630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 171730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 171830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlHandle TiXmlHandle::ChildElement( int count ) const 171930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 172030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 172130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 172230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int i; 172330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlElement* child = node->FirstChildElement(); 172430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( i=0; 172530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun child && i<count; 172630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun child = child->NextSiblingElement(), ++i ) 172730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 172830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // nothing 172930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 173030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( child ) 173130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( child ); 173230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 173330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( 0 ); 173430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 173530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 173630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 173730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const 173830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 173930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( node ) 174030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 174130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int i; 174230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlElement* child = node->FirstChildElement( value ); 174330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for ( i=0; 174430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun child && i<count; 174530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun child = child->NextSiblingElement( value ), ++i ) 174630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 174730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // nothing 174830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 174930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( child ) 175030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( child ); 175130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 175230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return TiXmlHandle( 0 ); 175330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 175430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 175530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 175630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlPrinter::VisitEnter( const TiXmlDocument& ) 175730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 175830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 175930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 176030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 176130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlPrinter::VisitExit( const TiXmlDocument& ) 176230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 176330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 176430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 176530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 176630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ) 176730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 176830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoIndent(); 176930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += "<"; 177030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += element.Value(); 177130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 177230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for( const TiXmlAttribute* attrib = firstAttribute; attrib; attrib = attrib->Next() ) 177330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 177430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += " "; 177530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun attrib->Print( 0, 0, &buffer ); 177630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 177730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 177830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !element.FirstChild() ) 177930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 178030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += " />"; 178130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoLineBreak(); 178230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 178330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 178430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 178530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += ">"; 178630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( element.FirstChild()->ToText() 178730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun && element.LastChild() == element.FirstChild() 178830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun && element.FirstChild()->ToText()->CDATA() == false ) 178930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 179030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun simpleTextPrint = true; 179130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // no DoLineBreak()! 179230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 179330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 179430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 179530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoLineBreak(); 179630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 179730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 179830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ++depth; 179930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 180030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 180130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 180230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 180330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlPrinter::VisitExit( const TiXmlElement& element ) 180430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 180530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun --depth; 180630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( !element.FirstChild() ) 180730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 180830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // nothing. 180930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 181030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 181130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 181230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( simpleTextPrint ) 181330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 181430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun simpleTextPrint = false; 181530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 181630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 181730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 181830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoIndent(); 181930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 182030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += "</"; 182130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += element.Value(); 182230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += ">"; 182330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoLineBreak(); 182430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 182530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 182630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 182730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 182830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 182930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlPrinter::Visit( const TiXmlText& text ) 183030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 183130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if ( text.CDATA() ) 183230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 183330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoIndent(); 183430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += "<![CDATA["; 183530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += text.Value(); 183630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += "]]>"; 183730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoLineBreak(); 183830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 183930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else if ( simpleTextPrint ) 184030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 184130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_STRING str; 184230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlBase::EncodeString( text.ValueTStr(), &str ); 184330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += str; 184430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 184530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun else 184630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun { 184730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoIndent(); 184830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TIXML_STRING str; 184930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun TiXmlBase::EncodeString( text.ValueTStr(), &str ); 185030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += str; 185130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoLineBreak(); 185230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 185330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 185430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 185530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 185630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 185730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlPrinter::Visit( const TiXmlDeclaration& declaration ) 185830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 185930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoIndent(); 186030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun declaration.Print( 0, 0, &buffer ); 186130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoLineBreak(); 186230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 186330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 186430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 186530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 186630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlPrinter::Visit( const TiXmlComment& comment ) 186730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 186830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoIndent(); 186930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += "<!--"; 187030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += comment.Value(); 187130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += "-->"; 187230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoLineBreak(); 187330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 187430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 187530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 187630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 187730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TiXmlPrinter::Visit( const TiXmlUnknown& unknown ) 187830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun{ 187930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoIndent(); 188030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += "<"; 188130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += unknown.Value(); 188230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun buffer += ">"; 188330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun DoLineBreak(); 188430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 188530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 188630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1887