public override bool Process(Token t, TreeBuilder 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(); string name = start.Name(); if (name.Equals("html")) { return tb.Process(start, InBody); } else if (name.Equals("frameset")) { tb.Insert(start); } else if (name.Equals("frame")) { tb.InsertEmpty(start); } else if (name.Equals("noframes")) { return tb.Process(start, InHead); } else { 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; }
public override bool Process(Token t, TreeBuilder 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; }