public override bool Process(Token t, HtmlTreeBuilder tb) { if (IsWhitespace(t)) { return(tb.Process(t, InBody)); } else if (t.IsComment) { tb.Insert(t.AsComment()); // into html node } else if (t.IsDoctype) { tb.Error(this); return(false); } else if (t.IsStartTag && t.AsStartTag().Name.Equals("html")) { return(tb.Process(t, InBody)); } else if (t.IsEndTag && t.AsEndTag().Name.Equals("html")) { if (tb.IsFragmentParsing()) { tb.Error(this); return(false); } else { tb.Transition(AfterAfterBody); } } else if (t.IsEOF) { // chillax! we're done } else { tb.Error(this); tb.Transition(InBody); return(tb.Process(t)); } return(true); }
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); return(false); } else if (t.IsStartTag) { Token.StartTag start = t.AsStartTag(); switch (start.Name) { case "html": return(tb.Process(start, InBody)); case "frameset": tb.Insert(start); break; case "frame": tb.InsertEmpty(start); break; case "noframes": return(tb.Process(start, InHead)); default: tb.Error(this); return(false); } } else if (t.IsEndTag && t.AsEndTag().Name.Equals("frameset")) { if (tb.CurrentElement.NodeName.Equals("html")) // frag { tb.Error(this); return(false); } else { tb.Pop(); if (!tb.IsFragmentParsing() && !tb.CurrentElement.NodeName.Equals("frameset")) { tb.Transition(AfterFrameset); } } } else if (t.IsEOF) { if (!tb.CurrentElement.NodeName.Equals("html")) { tb.Error(this); return(true); } } else { tb.Error(this); return(false); } return(true); }