internal override bool Process(Token t, HtmlTreeBuilder tb) { if (HtmlTreeBuilderState.IsWhitespace(t)) { tb.Insert(t.AsCharacter()); return true; } switch (t.type) { case TokenType.Comment: { tb.Insert(t.AsComment()); break; } case TokenType.Doctype: { tb.Error(this); return false; } case TokenType.StartTag: { Token.StartTag start = t.AsStartTag(); string name = start.Name(); if (name.Equals("html")) { return HtmlTreeBuilderState.InBody.Process(t, tb); } else if (StringUtil.In(name, "base", "basefont", "bgsound", "command", "link")) { Element el = tb.InsertEmpty(start); // jsoup special: update base the frist time it is seen if (name.Equals("base") && el.HasAttr("href")) { tb.MaybeSetBaseUri(el); } } else if (name.Equals("meta")) { tb.InsertEmpty(start); //Element meta = tb.insertEmpty(start); // todo: charset switches } else if (name.Equals("title")) { HtmlTreeBuilderState.HandleRcData(start, tb); } else if (StringUtil.In(name, "noframes", "style")) { HtmlTreeBuilderState.HandleRawtext(start, tb); } else if (name.Equals("noscript")) { // else if noscript && scripting flag = true: rawtext (jsoup doesn't run script, to handle as noscript) tb.Insert(start); tb.Transition(HtmlTreeBuilderState.InHeadNoscript); } else if (name.Equals("script")) { // skips some script rules as won't execute them tb.tokeniser.Transition(TokeniserState.ScriptData); tb.MarkInsertionMode(); tb.Transition(HtmlTreeBuilderState.Text); tb.Insert(start); } else if (name.Equals("head")) { tb.Error(this); return false; } else { return this.AnythingElse(t, tb); } break; } case TokenType.EndTag: { Token.EndTag end = t.AsEndTag(); string name = end.Name(); if (name.Equals("head")) { tb.Pop(); tb.Transition(HtmlTreeBuilderState.AfterHead); } else if (StringUtil.In(name, "body", "html", "br")) { return this.AnythingElse(t, tb); } else { tb.Error(this); return false; } break; } default: { return this.AnythingElse(t, tb); } } return true; }