 	'address 'article 'header 'footer 'main 'section 'aside 'figure 'figcaption
 	'form 'legend 'fieldset 'select 'option 'optgroup 'label 'input 'button 'progress
 	'html 'head 'title 'link 'style 'script 'base 'body 'noscript]))
-
-(defn literal [& content] (Literal. (str-join content)))
 
 (defn !-- [& content] (literal (str-join "<!-- " content " -->")))
 


(def empty-css (Css.))

(dorun (map (fn [sym] (eval `(def ~(symbol (lower-case (str sym "?"))) (partial instance? ~sym)))) [
	'Literal 'Tag 'Css]))

(defn attrs? [x] (and (map? x) (not (css? x)) (not (tag? x)) (not (literal? x))))

(defn child-item? [x] (not (or (attrs? x) (css? x))))

(dorun (map (fn [sym] (let [k (keyword sym) sym (symbol (str "assoc-" sym))]
	(eval `(defn ~sym [~'t & ~'kvs] (assoc ~'t ~k (merge (~k ~'t) (apply hash-map ~'kvs))))))) [
		'attrs 'css]))

(defn css [& key-vals] (merge empty-css (apply hash-map key-vals)))


			\" "&quot;"
			\' "&#39;"})))

(defn- readable-string [id]
	(if-not (keyword? id) id
		(join " " (map capitalize (split (name id) #"-")))))

(defn- $lift [& fs] (partial map #(%1 %2) fs))

