        rest-tokens]
       (throw (Exception. (str "parsing error after " a))))))
 
-(defn find-close-tag [tokens]
+(defn find-close-tag [^clojure.lang.LazySeq tokens]  
   (let [[a b c & rest-tokens] tokens]
     (if (and (= (:token a) :open-tag)
              (string? (:token b))

        (and (= c \})
             (= nc \})))))

(defn buffer-string [s fileref i max offset line]
  (let [sb (StringBuffer.)]
    (loop [ni i]
      (if (or (>= ni max)


(declare lex* string->ast ast->groups)

(defn start-of-new-token? [^String s ^Integer i]  
  (let [c (.charAt s i)
        nc (try
             (.charAt s (inc i))
