 ! See http://factorcode.org/license.txt for BSD license.
 USING: assocs namespaces make kernel sequences accessors
 combinators strings splitting io io.streams.string present
-xml.writer xml.data xml.entities html.forms
+sets ascii xml.writer xml.data xml.entities html.forms
 html.templates html.templates.chloe.syntax ;
 IN: html.templates.chloe.compiler
 

        "\"" [write]
    ] assoc-each ;

: compile-start-tag ( tag -- )
    "<" [write]
    [ name>string [write] ] [ attrs>> compile-attrs ] bi


ERROR: tag-not-allowed-here ;

CONSTANT: self-closing-tags {
        "area"
        "base"
        "br"
        "embed"
        "hr"
        "iframe"
        "img"
        "input"
        "link"
        "meta"
        "param"
        "source"
        "track"
    }

: check-tag ( -- )
    string-context? get [ tag-not-allowed-here ] when ;

: (compile-tag) ( tag -- )
    dup name>string >lower self-closing-tags in?
    [ compile-self-closing-tag ]
    [
        [ compile-start-tag ]
        [ compile-children ]
        [ compile-end-tag ] tri
    ] if ;

: compile-tag ( tag -- )
    check-tag
    [ main>> tag-stack get push ]
    [ (compile-tag) ] bi
    tag-stack get pop* ;

ERROR: unknown-chloe-tag tag ;
