示例#1
0
        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);
        }
示例#2
0
            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);
            }