Added a very simple-minded as-html pretty-printer
This commit is contained in:
parent
26d4889cff
commit
2d8d9ea514
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +1,4 @@
|
|||
|
||||
*.log
|
||||
|
||||
\.lein-repl-history
|
||||
|
|
10
project.clj
10
project.clj
|
@ -4,8 +4,10 @@
|
|||
:license {:name "GNU General Public License,version 2.0 or (at your option) any later version"
|
||||
:url "https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"}
|
||||
:dependencies [[org.clojure/clojure "1.8.0"]
|
||||
[jline "2.11"]
|
||||
[org.clojure/clojurescript "1.9.908"]
|
||||
[hiccup "1.0.5"]
|
||||
[jline "2.11"]
|
||||
[markdown-clj "1.0.2"]
|
||||
[reagent "0.7.0"]
|
||||
[re-frame "0.10.5"]]
|
||||
|
||||
|
@ -13,7 +15,7 @@
|
|||
|
||||
:min-lein-version "2.5.3"
|
||||
|
||||
:source-paths ["src/clj"]
|
||||
:source-paths ["src/clj" "src/cljc"]
|
||||
|
||||
:clean-targets ^{:protect false} ["resources/public/js/compiled" "target" "classes" "bin"]
|
||||
|
||||
|
@ -28,7 +30,7 @@
|
|||
:cljsbuild
|
||||
{:builds
|
||||
[{:id "dev"
|
||||
:source-paths ["src/cljs"]
|
||||
:source-paths ["src/cljs" "src/cljc"]
|
||||
:figwheel {:on-jsload "fedit.core/mount-root"}
|
||||
:compiler {:main fedit.core
|
||||
:output-to "resources/public/js/compiled/app.js"
|
||||
|
@ -40,7 +42,7 @@
|
|||
}}
|
||||
|
||||
{:id "min"
|
||||
:source-paths ["src/cljs"]
|
||||
:source-paths ["src/cljs" "src/cljc"]
|
||||
:compiler {:main fedit.core
|
||||
:output-to "resources/public/js/compiled/app.js"
|
||||
:optimizations :advanced
|
||||
|
|
81
src/cljc/fedit/format.cljc
Normal file
81
src/cljc/fedit/format.cljc
Normal file
|
@ -0,0 +1,81 @@
|
|||
(ns fedit.format
|
||||
"Essentially, a pretty-printer which renders Clojure as HTML"
|
||||
(:require [clojure.string :as s]
|
||||
[hiccup.core :refer [html]]
|
||||
[markdown.core :refer [md-to-html-string]]))
|
||||
|
||||
(declare format-object)
|
||||
|
||||
(defn format-inline
|
||||
[o]
|
||||
[:span {:class "clojure"} o])
|
||||
|
||||
(defn format-string
|
||||
[o]
|
||||
[:span (md-to-html-string o)])
|
||||
|
||||
(defn format-block
|
||||
[o]
|
||||
[:div {:class "clojure"} o])
|
||||
|
||||
(defn format-quoted
|
||||
[q]
|
||||
(format-inline (str "'" (nth q 1))))
|
||||
|
||||
|
||||
(defn format-sequence
|
||||
[s]
|
||||
(let [lpar (if (vector? s) "[" "(")
|
||||
rpar (if (vector? s) "]" ")")]
|
||||
(conj
|
||||
(vec
|
||||
(cons
|
||||
:div
|
||||
(cons
|
||||
{:class "clojure"}
|
||||
(cons
|
||||
lpar
|
||||
(map format-object s)))))
|
||||
rpar)))
|
||||
|
||||
(defn format-map
|
||||
[m]
|
||||
(let [c (count (keys m))]
|
||||
(vec
|
||||
(cons
|
||||
:table
|
||||
(for
|
||||
[i (range c) k (keys m)]
|
||||
[:tr
|
||||
[:td (if (zero? i) "{")]
|
||||
[:th (format-object k)]
|
||||
[:td (format-object (m k))]
|
||||
[:td (if (= (inc i) c) "}")]])))))
|
||||
|
||||
(defn format-object
|
||||
[o]
|
||||
(cond
|
||||
(and
|
||||
(list? o)
|
||||
(= (first o) 'quote)
|
||||
(not (seq? (nth o 1))))
|
||||
(format-quoted o)
|
||||
(or
|
||||
(nil? o)
|
||||
(true? o)
|
||||
(number? o)
|
||||
(symbol? o))
|
||||
(format-inline o)
|
||||
(keyword? o)
|
||||
(format-inline (str ":" (name o)))
|
||||
(string? o)
|
||||
(format-string o)
|
||||
(or
|
||||
(vector? o)
|
||||
(list? o))
|
||||
(format-sequence o)
|
||||
(map? o)
|
||||
(format-map o)
|
||||
true
|
||||
(format-block o)))
|
||||
|
Loading…
Reference in a new issue