     {
         { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
         { [ dup CHAR: / = ] [ drop self-closing-start-tag-state ] }
-        { [ dup CHAR: > = ] [ drop data-state ] }
+        { [ dup CHAR: > = ] [ drop pick emit-tag data-state ] }
         { [ dup f = ] [ eof-in-tag ] }
         [ missing-whitespace-between-attributes (before-attribute-name-state) ]
     } cond ;

        { [ dup "\t\n\f\s" member? ] [ drop after-attribute-name-state ] }
        { [ dup CHAR: / = ] [ drop self-closing-start-tag-state ] }
        { [ dup CHAR: = = ] [ drop before-attribute-value-state ] }
        { [ dup CHAR: > = ] [ drop data-state ] }
        { [ dup f = ] [ eof-in-tag ] }
        [ "start a new attribute" unimplemented ]
    } cond ;

: after-attribute-name-state ( document n/f string -- document n'/f string )


: <doctype> ( -- doctype )
    doctype new
        SBUF" " clone >>name ; inline

: make-doctype-token ( ch -- doctype )
    doctype new
        swap ?1sbuf >>name ; inline

TUPLE: tag
    name
    attributes ;

: <tag> ( -- tag )
    tag new
        SBUF" " clone >>name
        V{ } clone >>attributes ;


: <document> ( -- document )
