             (if (= tag-open ch)
               (do
                 ;we hit a tag so we append the buffer content to the template
-                ; and empty the buffer, then we proceed to parse the tag                  
+                ; and empty the buffer, then we proceed to parse the tag
                 (conj! template (.toString buf))
                 (.setLength buf 0)
                 (conj! template (handle-tag rdr))

    (handler args rdr)
    (throw (Exception. (str "unrecognized tag: " tag-name)))))

(defn filter-tag [{:keys [tag-value]}]  
  (let [value (map keyword (.split tag-value "\\."))]
    (fn [args] (get-in args value))))


           ch2 (read-char rdr)]
      (when-not (and (or (= filter-close ch1) (= tag-second ch1))
                     (= tag-close ch2))
        (.append buf ch1)
        (recur ch2 (read-char rdr))))
    (let [content (->>  (.split (.toString buf ) " ") (remove empty?) (map (memfn trim)))]
      (merge {:tag-type tag-type}
             (if (= :filter tag-type)
