private Token ScanCondSection1()
{
if (_chars[_curPos] != 'I')
{
Throw(_curPos, SR.Xml_ExpectIgnoreOrInclude);
}
_curPos++;
for (;;)
{
if (_charsUsed - _curPos < 5)
{
goto ReadData;
}
switch (_chars[_curPos])
{
case 'N':
if (_charsUsed - _curPos < 6)
{
goto ReadData;
}
if (_chars[_curPos + 1] != 'C' || _chars[_curPos + 2] != 'L' ||
_chars[_curPos + 3] != 'U' || _chars[_curPos + 4] != 'D' ||
_chars[_curPos + 5] != 'E' || _xmlCharType.IsNameSingleChar(_chars[_curPos + 6])
#if XML10_FIFTH_EDITION
|| xmlCharType.IsNCNameHighSurrogateChar( chars[curPos+6] )
#endif
)
{
goto default;
}
_nextScaningFunction = ScanningFunction.SubsetContent;
_scanningFunction = ScanningFunction.CondSection2;
_curPos += 6;
return Token.INCLUDE;
case 'G':
if (_chars[_curPos + 1] != 'N' || _chars[_curPos + 2] != 'O' ||
_chars[_curPos + 3] != 'R' || _chars[_curPos + 4] != 'E' ||
_xmlCharType.IsNameSingleChar(_chars[_curPos + 5])
#if XML10_FIFTH_EDITION
||xmlCharType.IsNCNameHighSurrogateChar( chars[curPos+5] )
#endif
)
{
goto default;
}
_nextScaningFunction = ScanningFunction.CondSection3;
_scanningFunction = ScanningFunction.CondSection2;
_curPos += 5;
return Token.IGNORE;
default:
Throw(_curPos - 1, SR.Xml_ExpectIgnoreOrInclude);
return Token.None;
}
ReadData:
if (ReadData() == 0)
{
Throw(_curPos, SR.Xml_IncompleteDtdContent);
}
}
}