public override BaseState Process(HtmlTokenizer tokenizer, StreamReader reader) { int c = Read(reader); if (IsWhitespace(c)) { if (tokenizer.IsAppropriateEndTagToken(Token)) { return BeforeAttributeNameState.Instance; } } else if (c == '/') { if (tokenizer.IsAppropriateEndTagToken(Token)) { return SelfClosingStartTagState.Instance; } } else if (c == '>') { if (tokenizer.IsAppropriateEndTagToken(Token)) { tokenizer.EmitToken(Token); // TODO - is this the right token to emit? return DataState.Instance; } } else if (IsUppercaseAsciiLetter(c)) { Token.TagName += Char.ToLower((char)c); tokenizer.TemporaryBuffer.Add((char)c); return this; } else if (IsLowercaseAsciiLetter(c)) { Token.TagName += (char)c; tokenizer.TemporaryBuffer.Add((char)c); return this; } tokenizer.EmitChar('<'); tokenizer.EmitChar('/'); foreach (char bc in tokenizer.TemporaryBuffer) { tokenizer.EmitChar(bc); } RCDATAState.Instance.LastConsumedCharacters.Enqueue((char)c); return RCDATAState.Instance; }