diff options
Diffstat (limited to 'src/highlight.clj')
| -rw-r--r-- | src/highlight.clj | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/src/highlight.clj b/src/highlight.clj index 0bd1335..f229b1a 100644 --- a/src/highlight.clj +++ b/src/highlight.clj @@ -1,20 +1,50 @@ (ns highlight (:require [clojure.java.shell :as shell] - [borkdude.html :refer [html]])) + [borkdude.html :refer [html]] + [zprint.core :as zp] + [clojure.string :refer [join]])) (defn highlight [lang src] (let [result (shell/sh "pygmentize" "-l" lang "-f" "html" :in src)] (:out result))) +(defn code [style v] + (html + (let [s style] + [:div + {:class s} + v]))) + (defmacro highlight-clj [& body] - `(highlight "clojure" ~(apply str (map pr-str body)))) + (let [out (atom []) + _res ;; return value of final form; currently unused + (let [prev-ns *ns* + t #(swap! out conj %)] + (ns example) + (add-tap (bound-fn* t)) + (let [res + (last (map eval body))] + (remove-tap (bound-fn* t)) + (in-ns (ns-name prev-ns)) + res)) + code + (join "\n\n" (map zp/zprint-str body)) + tap-out (join "\n" (map zp/zprint-str @out {:style :backtranslate})) + joined (apply str + (concat code))] + `(html + [:div + {:style {:border-left "5px solid #ddd"}} + [:div {:class "code"} + [:$ + (highlight "clojure" + ~joined)]] + [:p {:style {:padding-left "6px"}} "tap contents:"] + [:div {:class "output"} + [:$ + (highlight "clojure" + ~tap-out)]]]))) -(defn highlight-styles [style] - (let [result (shell/sh "pygmentize" "-S" style "-f" "html" "-a" ".code")] +(defn highlight-styles [k style] + (let [result (shell/sh "pygmentize" "-S" style "-f" "html" "-a" (str "." (name k)))] (:out result))) - -(defn code [v] - (html - [:div - {:class "code"} - [:$ v]])) |
