HtmlToken ReadDocTypePublicIdentifierQuoted ()
{
do {
int nc = Read ();
char c;
if (nc == -1) {
TokenizerState = HtmlTokenizerState.EndOfFile;
doctype.PublicIdentifier = name.ToString ();
doctype.ForceQuirksMode = true;
name.Length = 0;
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 '\0': // parse error
name.Append ('\uFFFD');
break;
case '>': // parse error
TokenizerState = HtmlTokenizerState.Data;
doctype.PublicIdentifier = name.ToString ();
doctype.ForceQuirksMode = true;
name.Length = 0;
return EmitDocType ();
default:
if (c == quote) {
TokenizerState = HtmlTokenizerState.AfterDocTypePublicIdentifier;
break;
}
name.Append (c);
break;
}
} while (TokenizerState == HtmlTokenizerState.DocTypePublicIdentifierQuoted);
doctype.PublicIdentifier = name.ToString ();
name.Length = 0;
return null;
}