private Token ScanAttlist2()
{
for (;;)
{
switch (_chars[_curPos])
{
case '(':
_curPos++;
_scanningFunction = ScanningFunction.Nmtoken;
_nextScaningFunction = ScanningFunction.Attlist5;
return Token.LeftParen;
case 'C':
if (_charsUsed - _curPos < 5)
goto ReadData;
if (_chars[_curPos + 1] != 'D' || _chars[_curPos + 2] != 'A' ||
_chars[_curPos + 3] != 'T' || _chars[_curPos + 4] != 'A')
{
Throw(_curPos, SR.Xml_InvalidAttributeType1);
}
_curPos += 5;
_scanningFunction = ScanningFunction.Attlist6;
return Token.CDATA;
case 'E':
if (_charsUsed - _curPos < 9)
goto ReadData;
_scanningFunction = ScanningFunction.Attlist6;
if (_chars[_curPos + 1] != 'N' || _chars[_curPos + 2] != 'T' ||
_chars[_curPos + 3] != 'I' || _chars[_curPos + 4] != 'T')
{
Throw(_curPos, SR.Xml_InvalidAttributeType);
}
switch (_chars[_curPos + 5])
{
case 'I':
if (_chars[_curPos + 6] != 'E' || _chars[_curPos + 7] != 'S')
{
Throw(_curPos, SR.Xml_InvalidAttributeType);
}
_curPos += 8;
return Token.ENTITIES;
case 'Y':
_curPos += 6;
return Token.ENTITY;
default:
Throw(_curPos, SR.Xml_InvalidAttributeType);
break;
}
break;
case 'I':
if (_charsUsed - _curPos < 6)
goto ReadData;
_scanningFunction = ScanningFunction.Attlist6;
if (_chars[_curPos + 1] != 'D')
{
Throw(_curPos, SR.Xml_InvalidAttributeType);
}
if (_chars[_curPos + 2] != 'R')
{
_curPos += 2;
return Token.ID;
}
if (_chars[_curPos + 3] != 'E' || _chars[_curPos + 4] != 'F')
{
Throw(_curPos, SR.Xml_InvalidAttributeType);
}
if (_chars[_curPos + 5] != 'S')
{
_curPos += 5;
return Token.IDREF;
}
else
{
_curPos += 6;
return Token.IDREFS;
}
case 'N':
if (_charsUsed - _curPos < 8 && !_readerAdapter.IsEof)
{
goto ReadData;
}
switch (_chars[_curPos + 1])
{
case 'O':
if (_chars[_curPos + 2] != 'T' || _chars[_curPos + 3] != 'A' ||
_chars[_curPos + 4] != 'T' || _chars[_curPos + 5] != 'I' ||
_chars[_curPos + 6] != 'O' || _chars[_curPos + 7] != 'N')
{
Throw(_curPos, SR.Xml_InvalidAttributeType);
}
_curPos += 8;
_scanningFunction = ScanningFunction.Attlist3;
return Token.NOTATION;
case 'M':
if (_chars[_curPos + 2] != 'T' || _chars[_curPos + 3] != 'O' ||
_chars[_curPos + 4] != 'K' || _chars[_curPos + 5] != 'E' ||
_chars[_curPos + 6] != 'N')
{
Throw(_curPos, SR.Xml_InvalidAttributeType);
}
_scanningFunction = ScanningFunction.Attlist6;
if (_chars[_curPos + 7] == 'S')
{
_curPos += 8;
return Token.NMTOKENS;
}
else
{
_curPos += 7;
return Token.NMTOKEN;
}
default:
Throw(_curPos, SR.Xml_InvalidAttributeType);
break;
}
break;
default:
Throw(_curPos, SR.Xml_InvalidAttributeType);
break;
}
ReadData:
if (ReadData() == 0)
{
Throw(_curPos, SR.Xml_IncompleteDtdContent);
}
}
}