HtmlToken ReadCharacterReference (HtmlTokenizerState next)
{
int nc = Peek ();
char c;
if (nc == -1) {
TokenizerState = HtmlTokenizerState.EndOfFile;
data.Append ('&');
return EmitDataToken (true);
}
c = (char) nc;
switch (c) {
case '\t': case '\r': case '\n': case '\f': case ' ': case '<': case '&':
// no character is consumed, emit '&'
TokenizerState = next;
data.Append ('&');
return null;
}
entity.Push ('&');
while (entity.Push (c)) {
Read ();
if ((nc = Peek ()) == -1) {
TokenizerState = HtmlTokenizerState.EndOfFile;
data.Append (entity.GetPushedInput ());
entity.Reset ();
return EmitDataToken (true);
}
c = (char) nc;
}
TokenizerState = next;
data.Append (entity.GetValue ());
entity.Reset ();
if (c == ';') {
// consume the ';'
Read ();
}
return null;
}