HtmlToken ReadAfterDocTypeName ()
{
do {
int nc = Read ();
char c;
if (nc == -1) {
TokenizerState = HtmlTokenizerState.EndOfFile;
doctype.ForceQuirksMode = true;
return EmitDocType ();
}
c = (char) nc;
// Note: we save the data in case we hit a parse error and have to emit a data token
data.Append (c);
switch (c) {
case '\t': case '\r': case '\n': case '\f': case ' ':
break;
case '>':
TokenizerState = HtmlTokenizerState.Data;
return EmitDocType ();
default:
name.Append (c);
if (name.Length < 6)
break;
if (NameIs ("public")) {
TokenizerState = HtmlTokenizerState.AfterDocTypePublicKeyword;
doctype.PublicKeyword = name.ToString ();
} else if (NameIs ("system")) {
TokenizerState = HtmlTokenizerState.AfterDocTypeSystemKeyword;
doctype.SystemKeyword = name.ToString ();
} else {
TokenizerState = HtmlTokenizerState.BogusDocType;
}
name.Length = 0;
return null;
}
} while (true);
}