       (do (println usage banner)
         (System/exit 1))
       (binding [*single-comment* (:comment amap)
-                *brush* (:brush amap)
                 *theme* (:theme amap)
                 *language* (or (:language amap) *language*)
                 *stylesheet* (:stylesheet amap)]
+        (swap! brushes #(or (set (:brush amap)) %))
 
 ; When no output file is given, the program renders to standard-out.
 

(defn look-and-feel []
  (inline-js (slurp-resource "XRegExp.js"))
  (inline-js (slurp-resource "shCore.js"))
  (inline-brush)
  (inline-theme)
  (inline-js (slurp-resource "outliner.0.5.0.62.js"))
  (inline-css (slurp-resource "page.css"))

; be determined by the largest comment or code chunk and not the total size of
; the source file.

(defn render-file [tag path & [token lang]]
  (let [lang (or lang (re-find #"(?<=\.)[^.]+$" path))
        token (or token (first (languages lang)))]
    (when-let [b (and lang (second (languages lang)))]
      (message path " auto-associated with brush " b)
      (swap! brushes conj b))
    (with-open [r (io/reader path)]
      (binding [*single-comment* (or token *single-comment*)
                *language* (or lang *language*)]
        (println (str "<" tag ">"))
        (each html<- (gather-lines (line-seq r)))
        (println (str "</" tag ">"))))))

; Code chunks are wrapped in a `pre` with the correct incantation for
; SyntaxHighlighter in its `class` attribute; comments are run through the
