public override bool Process(Token t, HtmlTreeBuilder tb)
            {
                if (IsWhitespace(t))
                {
                    tb.Insert(t.AsCharacter());
                }
                else if (t.IsComment)
                {
                    tb.Insert(t.AsComment());
                }
                else if (t.IsDoctype)
                {
                    tb.Error(this);
                }
                else if (t.IsStartTag)
                {
                    Token.StartTag startTag = t.AsStartTag();
                    string         name     = startTag.Name;

                    switch (name)
                    {
                    case "html":
                        return(tb.Process(t, InBody));

                    case "body":
                        tb.Insert(startTag);
                        tb.FramesetOK = false;
                        tb.Transition(InBody);
                        break;

                    case "frameset":
                        tb.Insert(startTag);
                        tb.Transition(InFrameset);
                        break;

                    case "base":
                    case "basefont":
                    case "bgsound":
                    case "link":
                    case "meta":
                    case "noframes":
                    case "script":
                    case "style":
                    case "title":
                        tb.Error(this);

                        HtmlElement head = tb.HeadElement;
                        tb.Push(head);
                        tb.Process(t, InHead);
                        tb.RemoveFromStack(head);
                        break;

                    case "head":
                        tb.Error(this);
                        return(false);

                    default:
                        AnythingElse(t, tb);
                        break;
                    }
                }
                else if (t.IsEndTag)
                {
                    if (StringUtil.In(t.AsEndTag().Name, "body", "html"))
                    {
                        AnythingElse(t, tb);
                    }
                    else
                    {
                        tb.Error(this);
                        return(false);
                    }
                }
                else
                {
                    AnythingElse(t, tb);
                }
                return(true);
            }