                     (list* tag# (merge (first r#) atts#) (next r#))
                     (list* tag# atts# r#))))
            (apply f# args#))))))
-

                    [(conj m (last fdecl)) (butlast fdecl)]
                    [m fdecl])
        m (conj (or (meta name) {}) m)]

    `(defn ~name ~m [& [atts# & more# :as args#]]
       (let [f# (fn ~name ~@fdecl)]
         (if (map? atts#)

      (make-html (cons options content)))))

(defmacro defelem
  "Defines a function that will return a tag vector. If the first argument
  passed to the resulting function is a map, it merges it with the attribute
  map of the returned tag value."
  [name & fdecl]
  (let [[m fdecl] (if (string? (first fdecl))
                    [{:doc (first fdecl)} (next fdecl)]
