summaryrefslogtreecommitdiff
path: root/home/src/highlight.clj
diff options
context:
space:
mode:
authorJake Zerrer <him@jakezerrer.com>2025-11-30 12:31:01 -0500
committerJake Zerrer <him@jakezerrer.com>2025-11-30 17:27:46 -0500
commit119cf7f780375187dbe3d064263a9de3a17f538d (patch)
tree376d48fc42d19ed49ca3f740e7c0e4c15596d11d /home/src/highlight.clj
parent034e30d70aeac7ce18f34be6a1c211730e9fd7fb (diff)
Move from github pages to server
Diffstat (limited to 'home/src/highlight.clj')
-rw-r--r--home/src/highlight.clj50
1 files changed, 50 insertions, 0 deletions
diff --git a/home/src/highlight.clj b/home/src/highlight.clj
new file mode 100644
index 0000000..f229b1a
--- /dev/null
+++ b/home/src/highlight.clj
@@ -0,0 +1,50 @@
+(ns highlight
+ (:require [clojure.java.shell :as shell]
+ [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]
+ (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 [k style]
+ (let [result (shell/sh "pygmentize" "-S" style "-f" "html" "-a" (str "." (name k)))]
+ (:out result)))