private void ScanNmtoken()
{
_tokenStartPos = _curPos;
for (;;)
{
unsafe
{
for (;;)
{
if ( _xmlCharType.IsNCNameSingleChar(_chars[_curPos]) || _chars[_curPos] == ':' )
{
_curPos++;
}
#if XML10_FIFTH_EDITION
else if (curPos + 1 < charsUsed && xmlCharType.IsNCNameSurrogateChar(chars[curPos + 1], chars[curPos])) {
curPos += 2;
}
#endif
else
{
break;
}
}
}
if (_curPos < _charsUsed
#if XML10_FIFTH_EDITION
&& ( !xmlCharType.IsNCNameHighSurrogateChar( chars[curPos] ) || curPos + 1 < charsUsed )
#endif
)
{
if (_curPos - _tokenStartPos == 0)
{
Throw(_curPos, SR.Xml_BadNameChar, XmlException.BuildCharExceptionArgs(_chars, _charsUsed, _curPos));
}
return;
}
int len = _curPos - _tokenStartPos;
_curPos = _tokenStartPos;
if (ReadData() == 0)
{
if (len > 0)
{
_tokenStartPos = _curPos;
_curPos += len;
return;
}
Throw(_curPos, SR.Xml_UnexpectedEOF, "NmToken");
}
_tokenStartPos = _curPos;
_curPos += len;
}
}