public override bool Process(Token token) { // start tag, end tag, doctype, comment, character, eof switch (token.Type) { case TokenType.StartTag: Insert(token.AsStartTag()); break; case TokenType.EndTag: PopStackToClose(token.AsEndTag()); break; case TokenType.Comment: Insert(token.AsComment()); break; case TokenType.Character: Insert(token.AsCharacter()); break; case TokenType.Doctype: Insert(token.AsDoctype()); break; case TokenType.EOF: // could put some normalisation here if desired break; default: HtmlWarning.UnexpectedTokenType(); break; } return(true); }
public override bool Process(Token t, HtmlTreeBuilder tb) { if (IsWhitespace(t)) { return(true); // ignore whitespace } else if (t.IsComment) { tb.Insert(t.AsComment()); } else if (t.IsDoctype) { // TODO: parse error check on expected doctypes // TODO: quirk state check on doctype ids Token.Doctype d = t.AsDoctype(); var doctype = tb.Document.CreateDocumentType( d.Name, d.PublicIdentifier, d.SystemIdentifier ); doctype.BaseUri = tb.BaseUri; tb.Document.Append(doctype); if (d.ForceQuirks) { tb.Document.QuirksMode = QuirksMode.Quirks; } tb.Transition(BeforeHtml); } else { // TODO: check not iframe srcdoc tb.Transition(BeforeHtml); return(tb.Process(t)); // re-process token } return(true); }