Changeset 5819 in orxonox.OLD for trunk/src/lib/tinyxml/tinyxmlparser.cc
- Timestamp:
- Nov 29, 2005, 11:07:43 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/tinyxml/tinyxmlparser.cc
r4491 r5819 718 718 { 719 719 encoding = TIXML_ENCODING_UTF8; 720 useMicrosoftBOM = true; 720 721 } 721 722 } … … 786 787 if ( pError && data ) 787 788 { 788 //TiXmlParsingData data( pError, prevData );789 789 data->Stamp( pError, encoding ); 790 790 errorLocation = data->Cursor(); … … 821 821 const char* commentHeader = { "<!--" }; 822 822 const char* dtdHeader = { "<!" }; 823 const char* cdataHeader = { "<![CDATA[" }; 823 824 824 825 if ( StringEqual( p, xmlHeader, true, encoding ) ) … … 835 836 #endif 836 837 returnNode = new TiXmlComment(); 838 } 839 else if ( StringEqual( p, cdataHeader, false, encoding ) ) 840 { 841 #ifdef DEBUG_PARSER 842 TIXML_LOG( "XML parsing CDATA\n" ); 843 #endif 844 TiXmlText* text = new TiXmlText( "" ); 845 text->SetCDATA( true ); 846 returnNode = text; 837 847 } 838 848 else if ( StringEqual( p, dtdHeader, false, encoding ) ) … … 931 941 if ( !in->good() ) return; 932 942 assert( in->peek() == '<' ); 933 int tagIndex = tag->length();943 int tagIndex = (int) tag->length(); 934 944 935 945 bool closingTag = false; … … 1013 1023 } 1014 1024 1015 // TiXmlParsingData data( p, prevData );1016 1025 if ( data ) 1017 1026 { … … 1127 1136 TiXmlDocument* document = GetDocument(); 1128 1137 1138 // Read in text and elements in any order. 1129 1139 const char* pWithWhiteSpace = p; 1130 // Read in text and elements in any order.1131 1140 p = SkipWhiteSpace( p, encoding ); 1141 1132 1142 while ( p && *p ) 1133 1143 { … … 1162 1172 { 1163 1173 // We hit a '<' 1164 // Have we hit a new element or an end tag? 1174 // Have we hit a new element or an end tag? This could also be 1175 // a TiXmlText in the "CDATA" style. 1165 1176 if ( StringEqual( p, "</", false, encoding ) ) 1166 1177 { … … 1181 1192 } 1182 1193 } 1194 pWithWhiteSpace = p; 1183 1195 p = SkipWhiteSpace( p, encoding ); 1184 1196 } … … 1222 1234 p = SkipWhiteSpace( p, encoding ); 1223 1235 1224 // TiXmlParsingData data( p, prevData );1225 1236 if ( data ) 1226 1237 { … … 1286 1297 p = SkipWhiteSpace( p, encoding ); 1287 1298 1288 // TiXmlParsingData data( p, prevData );1289 1299 if ( data ) 1290 1300 { … … 1315 1325 tabsize = document->TabSize(); 1316 1326 1317 // TiXmlParsingData data( p, prevData );1318 1327 if ( data ) 1319 1328 { … … 1378 1387 void TiXmlText::StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag ) 1379 1388 { 1380 while ( in->good() ) 1381 { 1382 int c = in->peek(); 1383 if ( c == '<' ) 1384 return; 1389 if ( cdata ) 1390 { 1391 int c = in->get(); 1385 1392 if ( c <= 0 ) 1386 1393 { … … 1392 1399 1393 1400 (*tag) += (char) c; 1394 in->get(); 1401 1402 if ( c == '>' 1403 && tag->at( tag->length() - 2 ) == ']' 1404 && tag->at( tag->length() - 3 ) == ']' ) 1405 { 1406 // All is well. 1407 return; 1408 } 1409 } 1410 else 1411 { 1412 while ( in->good() ) 1413 { 1414 int c = in->peek(); 1415 if ( c == '<' ) 1416 return; 1417 if ( c <= 0 ) 1418 { 1419 TiXmlDocument* document = GetDocument(); 1420 if ( document ) 1421 document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); 1422 return; 1423 } 1424 1425 (*tag) += (char) c; 1426 in->get(); 1427 } 1395 1428 } 1396 1429 } … … 1400 1433 { 1401 1434 value = ""; 1402 // TiXmlParsingData data( p, prevData ); 1435 TiXmlDocument* document = GetDocument(); 1436 1403 1437 if ( data ) 1404 1438 { … … 1406 1440 location = data->Cursor(); 1407 1441 } 1408 bool ignoreWhite = true; 1409 1410 const char* end = "<"; 1411 p = ReadText( p, &value, ignoreWhite, end, false, encoding ); 1412 if ( p ) 1413 return p-1; // don't truncate the '<' 1414 return 0; 1442 1443 const char* const startTag = "<![CDATA["; 1444 const char* const endTag = "]]>"; 1445 1446 if ( cdata || StringEqual( p, startTag, false, encoding ) ) 1447 { 1448 cdata = true; 1449 1450 if ( !StringEqual( p, startTag, false, encoding ) ) 1451 { 1452 document->SetError( TIXML_ERROR_PARSING_CDATA, p, data, encoding ); 1453 return 0; 1454 } 1455 p += strlen( startTag ); 1456 1457 // Keep all the white space, ignore the encoding, etc. 1458 while ( p && *p 1459 && !StringEqual( p, endTag, false, encoding ) 1460 ) 1461 { 1462 value += *p; 1463 ++p; 1464 } 1465 1466 TIXML_STRING dummy; 1467 p = ReadText( p, &dummy, false, endTag, false, encoding ); 1468 return p; 1469 } 1470 else 1471 { 1472 bool ignoreWhite = true; 1473 1474 const char* end = "<"; 1475 p = ReadText( p, &value, ignoreWhite, end, false, encoding ); 1476 if ( p ) 1477 return p-1; // don't truncate the '<' 1478 return 0; 1479 } 1415 1480 } 1416 1481 … … 1450 1515 return 0; 1451 1516 } 1452 // TiXmlParsingData data( p, prevData );1453 1517 if ( data ) 1454 1518 {
Note: See TracChangeset
for help on using the changeset viewer.