Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 29, 2005, 10:52:08 AM (18 years ago)
Author:
bensch
Message:

orxonox/branches/we: new tinyXML-version (version 2.4.2)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/world_entities/src/lib/tinyxml/tinyxmlparser.cc

    r4491 r5817  
    718718                {
    719719                        encoding = TIXML_ENCODING_UTF8;
     720                        useMicrosoftBOM = true;
    720721                }
    721722        }
     
    786787        if ( pError && data )
    787788        {
    788                 //TiXmlParsingData data( pError, prevData );
    789789                data->Stamp( pError, encoding );
    790790                errorLocation = data->Cursor();
     
    821821        const char* commentHeader = { "<!--" };
    822822        const char* dtdHeader = { "<!" };
     823        const char* cdataHeader = { "<![CDATA[" };
    823824
    824825        if ( StringEqual( p, xmlHeader, true, encoding ) )
     
    835836                #endif
    836837                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;
    837847        }
    838848        else if ( StringEqual( p, dtdHeader, false, encoding ) )
     
    931941                        if ( !in->good() ) return;
    932942                        assert( in->peek() == '<' );
    933                         int tagIndex = tag->length();
     943                        int tagIndex = (int) tag->length();
    934944
    935945                        bool closingTag = false;
     
    10131023        }
    10141024
    1015 //      TiXmlParsingData data( p, prevData );
    10161025        if ( data )
    10171026        {
     
    11271136        TiXmlDocument* document = GetDocument();
    11281137
     1138        // Read in text and elements in any order.
    11291139        const char* pWithWhiteSpace = p;
    1130         // Read in text and elements in any order.
    11311140        p = SkipWhiteSpace( p, encoding );
     1141
    11321142        while ( p && *p )
    11331143        {
     
    11621172                {
    11631173                        // 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.
    11651176                        if ( StringEqual( p, "</", false, encoding ) )
    11661177                        {
     
    11811192                        }
    11821193                }
     1194                pWithWhiteSpace = p;
    11831195                p = SkipWhiteSpace( p, encoding );
    11841196        }
     
    12221234        p = SkipWhiteSpace( p, encoding );
    12231235
    1224 //      TiXmlParsingData data( p, prevData );
    12251236        if ( data )
    12261237        {
     
    12861297        p = SkipWhiteSpace( p, encoding );
    12871298
    1288 //      TiXmlParsingData data( p, prevData );
    12891299        if ( data )
    12901300        {
     
    13151325                tabsize = document->TabSize();
    13161326
    1317 //      TiXmlParsingData data( p, prevData );
    13181327        if ( data )
    13191328        {
     
    13781387void TiXmlText::StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag )
    13791388{
    1380         while ( in->good() )
    1381         {
    1382                 int c = in->peek();     
    1383                 if ( c == '<' )
    1384                         return;
     1389        if ( cdata )
     1390        {
     1391                int c = in->get();     
    13851392                if ( c <= 0 )
    13861393                {
     
    13921399
    13931400                (*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                }
    13951428        }
    13961429}
     
    14001433{
    14011434        value = "";
    1402 //      TiXmlParsingData data( p, prevData );
     1435        TiXmlDocument* document = GetDocument();
     1436
    14031437        if ( data )
    14041438        {
     
    14061440                location = data->Cursor();
    14071441        }
    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        }
    14151480}
    14161481
     
    14501515                return 0;
    14511516        }
    1452 //      TiXmlParsingData data( p, prevData );
    14531517        if ( data )
    14541518        {
Note: See TracChangeset for help on using the changeset viewer.