private Token NextName(char firstchar)
{
StringBuilder sb = new StringBuilder(10);
sb.Append(firstchar);
int ch;
ch = this.NextChar();
while (ch >= 0 && char.IsLetterOrDigit((char)ch))
{
sb.Append((char)ch);
ch = this.NextChar();
}
if (ch >= 0 && ch == '.' && char.IsUpper(firstchar))
{
var peek = this.PeekChar();
if (peek >= 0 && char.IsLetter((char)peek) && char.IsUpper((char)peek))
{
sb.Append((char)ch);
return this.NextDottedName(sb.ToString());
}
this.PushChar(ch);
}
else if (ch >= 0 && ch == ':')
{
sb.Append((char)ch);
}
else
{
this.PushChar(ch);
}
Token token = new Token();
token.Type = TokenType.Name;
token.Value = sb.ToString();
return token;
}