summaryrefslogtreecommitdiff
path: root/src/highlight.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/highlight.clj')
-rw-r--r--src/highlight.clj50
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]]))