public override bool Process(Token t, HtmlTreeBuilder tb) { if (t.IsStartTag) { Token.StartTag startTag = t.AsStartTag(); string name = startTag.Name; if (StringUtil.In(name, "th", "td")) { tb.ClearStackToTableRowContext(); tb.Insert(startTag); tb.Transition(InCell); tb.InsertMarkerToFormattingElements(); } else if (StringSet.Create("caption col colgroup tbody tfoot thead tr").Contains(name)) { return(HandleMissingTr(t, tb)); } else { return(AnythingElse(t, tb)); } } else if (t.IsEndTag) { Token.EndTag endTag = t.AsEndTag(); string name = endTag.Name; if (name.Equals("tr")) { if (!tb.InTableScope(name)) { tb.Error(this); // frag return(false); } tb.ClearStackToTableRowContext(); tb.Pop(); // tr tb.Transition(InTableBody); } else if (name.Equals("table")) { return(HandleMissingTr(t, tb)); } else if (StringUtil.In(name, "tbody", "tfoot", "thead")) { if (!tb.InTableScope(name)) { tb.Error(this); return(false); } tb.Process(new Token.EndTag("tr")); return(tb.Process(t)); } else if (StringSet.Create("body caption col colgroup html td th").Contains(name)) { tb.Error(this); return(false); } else { return(AnythingElse(t, tb)); } } else { return(AnythingElse(t, tb)); } return(true); }