     [ current CHAR: < = ] take-until ;
 
 : parse-text ( state-parser -- )
-    read-until-< [ make-text-tag push-tag ] unless-empty ;
+    read-until-< [ text new-tag push-tag ] unless-empty ;
 
 : (parse-attributes) ( state-parser -- )
     skip-whitespace

: make-tag ( string attribs -- tag )
    [ [ closing-tag? ] keep "/" trim1 ] dip rot <tag> ;

: new-tag ( string type -- tag )
    tag new
        swap >>name
        swap >>text ; inline

: make-text-tag ( string -- tag ) text new-tag ; inline

: make-comment-tag ( string -- tag ) comment new-tag ; inline

: make-dtd-tag ( string -- tag ) dtd new-tag ; inline

: read-single-quote ( state-parser -- string )
    [ [ current CHAR: ' = ] take-until ] [ next drop ] bi ;

    ] [
        [
            [ read-key >lower ] [ read-= ] [ read-value ] tri
            swap set
        ] keep (parse-attributes)
    ] if ;

: parse-attributes ( state-parser -- hashtable )
    [ (parse-attributes) ] H{ } make-assoc ;

: (parse-tag) ( string -- string' hashtable )
    [
