updated to use parser modules
This commit is contained in:
parent
cc16110f10
commit
96502bd517
3 changed files with 23 additions and 51 deletions
|
@ -1,4 +1,4 @@
|
||||||
(defproject cryogen-core "0.1.15"
|
(defproject cryogen-core "0.1.16"
|
||||||
:description "Cryogen's compiler"
|
:description "Cryogen's compiler"
|
||||||
:url "https://github.com/lacarmen/cryogen-core"
|
:url "https://github.com/lacarmen/cryogen-core"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
|
@ -12,6 +12,4 @@
|
||||||
[io.aviso/pretty "0.1.13"]
|
[io.aviso/pretty "0.1.13"]
|
||||||
[hiccup "1.0.5"]
|
[hiccup "1.0.5"]
|
||||||
[selmer "0.7.8"]
|
[selmer "0.7.8"]
|
||||||
[markdown-clj "0.9.62"]
|
[pandect "0.4.1"]])
|
||||||
[pandect "0.4.1"]
|
|
||||||
[org.asciidoctor/asciidoctorj "1.5.2"]])
|
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
(ns cryogen-core.markup
|
(ns cryogen-core.markup
|
||||||
(:require [markdown.core :refer [md-to-html-string]]
|
(:import java.util.Collections))
|
||||||
[markdown.transformers :refer [transformer-vector]]
|
|
||||||
[clojure.string :as s])
|
(defonce markup-registry (atom []))
|
||||||
(:import org.asciidoctor.Asciidoctor$Factory
|
|
||||||
java.util.Collections))
|
|
||||||
|
|
||||||
(defprotocol Markup
|
(defprotocol Markup
|
||||||
"A markup engine comprising a dir(ectory) containing markup files,
|
"A markup engine comprising a dir(ectory) containing markup files,
|
||||||
|
@ -13,56 +11,16 @@
|
||||||
(ext [this])
|
(ext [this])
|
||||||
(render-fn [this]))
|
(render-fn [this]))
|
||||||
|
|
||||||
(defn- rewrite-hrefs
|
(defn rewrite-hrefs
|
||||||
"Injects the blog prefix in front of any local links
|
"Injects the blog prefix in front of any local links
|
||||||
|
|
||||||
ex. <img src='/img/cryogen.png'/> becomes <img src='/blog/img/cryogen.png'/>"
|
ex. <img src='/img/cryogen.png'/> becomes <img src='/blog/img/cryogen.png'/>"
|
||||||
[blog-prefix text]
|
[blog-prefix text]
|
||||||
(clojure.string/replace text #"href=.?/|src=.?/" #(str (subs % 0 (dec (count %))) blog-prefix "/")))
|
(clojure.string/replace text #"href=.?/|src=.?/" #(str (subs % 0 (dec (count %))) blog-prefix "/")))
|
||||||
|
|
||||||
(defn- rewrite-hrefs-transformer
|
|
||||||
"A :replacement-transformer for use in markdown.core that will inject the
|
|
||||||
given blog prefix in front of local links."
|
|
||||||
[{:keys [blog-prefix]} text state]
|
|
||||||
[(rewrite-hrefs blog-prefix text) state])
|
|
||||||
|
|
||||||
(defn- markdown
|
|
||||||
"Returns a Markdown (https://daringfireball.net/projects/markdown/)
|
|
||||||
implementation of the Markup protocol."
|
|
||||||
[]
|
|
||||||
(reify Markup
|
|
||||||
(dir [this] "md")
|
|
||||||
(ext [this] ".md")
|
|
||||||
(render-fn [this]
|
|
||||||
(fn [rdr config]
|
|
||||||
(md-to-html-string
|
|
||||||
(->> (java.io.BufferedReader. rdr)
|
|
||||||
(line-seq)
|
|
||||||
(s/join "\n"))
|
|
||||||
:reference-links? true
|
|
||||||
:heading-anchors true
|
|
||||||
:replacement-transformers (conj transformer-vector (partial rewrite-hrefs-transformer config)))))))
|
|
||||||
|
|
||||||
(defn- asciidoc
|
|
||||||
"Returns an Asciidoc (http://asciidoc.org/) implementation of the
|
|
||||||
Markup protocol."
|
|
||||||
[]
|
|
||||||
(reify Markup
|
|
||||||
(dir [this] "asc")
|
|
||||||
(ext [this] ".asc")
|
|
||||||
(render-fn [this]
|
|
||||||
(fn [rdr config]
|
|
||||||
(->>
|
|
||||||
(.convert (Asciidoctor$Factory/create)
|
|
||||||
(->> (java.io.BufferedReader. rdr)
|
|
||||||
(line-seq)
|
|
||||||
(s/join "\n"))
|
|
||||||
(Collections/emptyMap))
|
|
||||||
(rewrite-hrefs (:blog-prefix config)))))))
|
|
||||||
|
|
||||||
(defn markups
|
(defn markups
|
||||||
"Return a vector of Markup implementations. This is the primary entry point
|
"Return a vector of Markup implementations. This is the primary entry point
|
||||||
for a client of this ns. This vector should be used to iterate over supported
|
for a client of this ns. This vector should be used to iterate over supported
|
||||||
Markups."
|
Markups."
|
||||||
[]
|
[]
|
||||||
[(markdown) (asciidoc)])
|
@markup-registry)
|
||||||
|
|
16
src/cryogen_core/plugins.clj
Normal file
16
src/cryogen_core/plugins.clj
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
(ns cryogen-core.plugins
|
||||||
|
(:require [cryogen-core.compiler :refer [compile-assets-timed]]
|
||||||
|
[clojure.edn :as edn]
|
||||||
|
[text-decoration.core :refer :all]))
|
||||||
|
|
||||||
|
(defn load-plugin [url]
|
||||||
|
(let [config (edn/read-string (slurp url))]
|
||||||
|
(println (green (str "loading module: " (:description config))))
|
||||||
|
(require (:namespace config))))
|
||||||
|
|
||||||
|
(defn load-plugins []
|
||||||
|
(let [plugins (.getResources (ClassLoader/getSystemClassLoader) "plugin.edn")]
|
||||||
|
(loop []
|
||||||
|
(load-plugin (.. plugins nextElement openStream))
|
||||||
|
(when (.hasMoreElements plugins)
|
||||||
|
(recur)))))
|
Loading…
Reference in a new issue