HtmlToken EmitTagToken ()
{
if (!tag.IsEndTag && !tag.IsEmptyElement) {
switch (tag.Id) {
case HtmlTagId.Style: case HtmlTagId.Xmp: case HtmlTagId.IFrame: case HtmlTagId.NoEmbed: case HtmlTagId.NoFrames:
TokenizerState = HtmlTokenizerState.RawText;
activeTagName = tag.Name.ToLowerInvariant ();
break;
case HtmlTagId.Title: case HtmlTagId.TextArea:
TokenizerState = HtmlTokenizerState.RcData;
activeTagName = tag.Name.ToLowerInvariant ();
break;
case HtmlTagId.PlainText:
TokenizerState = HtmlTokenizerState.PlainText;
break;
case HtmlTagId.Script:
TokenizerState = HtmlTokenizerState.ScriptData;
break;
case HtmlTagId.NoScript:
// TODO: only switch into the RawText state if scripting is enabled
TokenizerState = HtmlTokenizerState.RawText;
activeTagName = tag.Name.ToLowerInvariant ();
break;
case HtmlTagId.Html:
TokenizerState = HtmlTokenizerState.Data;
for (int i = tag.Attributes.Count; i > 0; i--) {
var attr = tag.Attributes[i - 1];
if (attr.Id == HtmlAttributeId.XmlNS && attr.Value != null) {
HtmlNamespace = attr.Value.ToHtmlNamespace ();
break;
}
}
break;
default:
TokenizerState = HtmlTokenizerState.Data;
break;
}
} else {
TokenizerState = HtmlTokenizerState.Data;
}
var token = tag;
data.Length = 0;
tag = null;
return token;
}