MCPcopy Create free account
hub / github.com/ajkhoury/ReClassEx / Identify

Method Identify

ReClass/tinyxml2.cpp:657–724  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

655
656
657char* XMLDocument::Identify( char* p, XMLNode** node )
658{
659 TIXMLASSERT( node );
660 TIXMLASSERT( p );
661 char* const start = p;
662 int const startLine = _parseCurLineNum;
663 p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum );
664 if( !*p ) {
665 *node = 0;
666 TIXMLASSERT( p );
667 return p;
668 }
669
670 // These strings define the matching patterns:
671 static const char* xmlHeader = { "<?" };
672 static const char* commentHeader = { "<!--" };
673 static const char* cdataHeader = { "<![CDATA[" };
674 static const char* dtdHeader = { "<!" };
675 static const char* elementHeader = { "<" }; // and a header for everything else; check last.
676
677 static const int xmlHeaderLen = 2;
678 static const int commentHeaderLen = 4;
679 static const int cdataHeaderLen = 9;
680 static const int dtdHeaderLen = 2;
681 static const int elementHeaderLen = 1;
682
683 TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLUnknown ) ); // use same memory pool
684 TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLDeclaration ) ); // use same memory pool
685 XMLNode* returnNode = 0;
686 if ( XMLUtil::StringEqual( p, xmlHeader, xmlHeaderLen ) ) {
687 returnNode = CreateUnlinkedNode<XMLDeclaration>( _commentPool );
688 returnNode->_parseLineNum = _parseCurLineNum;
689 p += xmlHeaderLen;
690 }
691 else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) {
692 returnNode = CreateUnlinkedNode<XMLComment>( _commentPool );
693 returnNode->_parseLineNum = _parseCurLineNum;
694 p += commentHeaderLen;
695 }
696 else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) {
697 XMLText* text = CreateUnlinkedNode<XMLText>( _textPool );
698 returnNode = text;
699 returnNode->_parseLineNum = _parseCurLineNum;
700 p += cdataHeaderLen;
701 text->SetCData( true );
702 }
703 else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) {
704 returnNode = CreateUnlinkedNode<XMLUnknown>( _commentPool );
705 returnNode->_parseLineNum = _parseCurLineNum;
706 p += dtdHeaderLen;
707 }
708 else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) {
709 returnNode = CreateUnlinkedNode<XMLElement>( _elementPool );
710 returnNode->_parseLineNum = _parseCurLineNum;
711 p += elementHeaderLen;
712 }
713 else {
714 returnNode = CreateUnlinkedNode<XMLText>( _textPool );

Callers 1

ParseDeepMethod · 0.80

Calls 2

SkipWhiteSpaceFunction · 0.85
StringEqualFunction · 0.85

Tested by

no test coverage detected