internal override bool Process(Token t, HtmlTreeBuilder tb) { switch (t.type) { case TokenType.Character: { Token.Character c = t.AsCharacter(); if (c.GetData().Equals(HtmlTreeBuilderState.nullString)) { tb.Error(this); return false; } else { tb.GetPendingTableCharacters().Add(c); } break; } default: { if (tb.GetPendingTableCharacters().Count > 0) { foreach (Token.Character character in tb.GetPendingTableCharacters()) { if (!HtmlTreeBuilderState.IsWhitespace(character)) { // InTable anything else section: tb.Error(this); if (StringUtil.In(tb.CurrentElement().NodeName, "table", "tbody", "tfoot", "thead", "tr")) { tb.SetFosterInserts(true); tb.Process(character, HtmlTreeBuilderState.InBody); tb.SetFosterInserts(false); } else { tb.Process(character, HtmlTreeBuilderState.InBody); } } else { tb.Insert(character); } } tb.NewPendingTableCharacters(); } tb.Transition(tb.OriginalState()); return tb.Process(t); } } return true; }
// in script, style etc. normally treated as data tags internal override bool Process(Token t, HtmlTreeBuilder tb) { if (t.IsCharacter()) { tb.Insert(t.AsCharacter()); } else if (t.IsEOF()) { tb.Error(this); // if current node is script: already started tb.Pop(); tb.Transition(tb.OriginalState()); return tb.Process(t); } else if (t.IsEndTag()) { // if: An end tag whose tag name is "script" -- scripting nesting level, if evaluating scripts tb.Pop(); tb.Transition(tb.OriginalState()); } return true; }