diff --git a/src/smeagol/formatting.clj b/src/smeagol/formatting.clj index e245749..c9323c6 100644 --- a/src/smeagol/formatting.clj +++ b/src/smeagol/formatting.clj @@ -61,35 +61,43 @@ no-text-error)) -(defn yaml->vis - "Transcode this YAML fragment into the source for a Vega visualisation with this index." - [^String yaml-src ^Integer index] +(defn yaml->json + "Rewrite this string, assumed to be in YAML format, as JSON." + [^String yaml-src] + (json/write-str (yaml/parse-string yaml-src))) + + +(defn process-vega + "Process this `vega-source` string, assumed to be in YAML format, into a specification + of a Vega chart, and add the plumbing to render it." + [^String vega-src ^Integer index] (str "
\n" "")) + (defn process-mermaid - "Lightly mung the mermaid specification." + "Lightly mung this `graph-spec`, assumed to be a mermaid specification." [^String graph-spec ^Integer index] (str "
\n" graph-spec "\n
")) + (defn process-text "Process this `text`, assumed to be markdown potentially containing both local links and YAML visualisation specifications, and return a map comprising JSON visualisation specification, and HTML text with markers for where those should be reinserted. - The map has two top-level keys: `:visualisations`, a map of constructed keywords to - visualisation specifications, and `:text`, an HTML text string with the keywords - present where the corresponding visualisation should be inserted." + The map has two top-level keys: `:inclusions`, a map of constructed keywords to + inclusion specifications, and `:text`, an HTML text string with the keywords + present where the corresponding inclusion should be inserted." ([text] - (process-text 0 {:visualisations {}} (cs/split text #"```") '())) + (process-text 0 {:inclusions {}} (cs/split text #"```") '())) ([index result fragments processed] (cond (empty? fragments) @@ -100,29 +108,29 @@ :heading-anchors true))) ;;; TODO: refactor; generalise extension architecture (clojure.string/starts-with? (first fragments) "vis") - (let [kw (keyword (str "visualisation-" index))] + (let [kw (keyword (str "inclusion-" index))] (process-text (+ index 1) (assoc result - :visualisations + :inclusions (assoc - (:visualisations result) + (:inclusions result) kw - (yaml->vis + (process-vega (subs (first fragments) 3) index))) (rest fragments) (cons kw processed))) (clojure.string/starts-with? (first fragments) "mermaid") - (let [kw (keyword (str "visualisation-" index))] + (let [kw (keyword (str "inclusion-" index))] (process-text (+ index 1) (assoc result - :visualisations + :inclusions (assoc - (:visualisations result) + (:inclusions result) kw (process-mermaid (subs (first fragments) 7) @@ -133,27 +141,27 @@ (process-text (+ index 1) result (rest fragments) (cons (first fragments) processed))))) -(defn reintegrate-visualisations +(defn reintegrate-inclusions "Given a map of the form produced by `process-text`, return a string of HTML text - with the visualisations (if any) reintegrated." + with the inclusions (if any) reintegrated." ([processed-text] - (reintegrate-visualisations (:visualisations processed-text) (:text processed-text))) - ([visualisations text] - (let [ks (keys visualisations)] - (if (empty? (keys visualisations)) + (reintegrate-inclusions (:inclusions processed-text) (:text processed-text))) + ([inclusions text] + (let [ks (keys inclusions)] + (if (empty? (keys inclusions)) text (let [kw (first ks)] - (reintegrate-visualisations - (dissoc visualisations kw) + (reintegrate-inclusions + (dissoc inclusions kw) (cs/replace text (str kw) - (cs/replace (kw visualisations) "\\/" "/")))))))) + (cs/replace (kw inclusions) "\\/" "/")))))))) (defn md->html "Take this markdown source, and return HTML." [md-src] - (reintegrate-visualisations (process-text md-src))) + (reintegrate-inclusions (process-text md-src)))