mirror of
https://github.com/journeyman-cc/smeagol.git
synced 2026-04-12 18:05:06 +00:00
add replacement
This commit is contained in:
parent
78a534349b
commit
6768d71429
2 changed files with 40 additions and 11 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
(ns smeagol.include
|
(ns smeagol.include
|
||||||
(:require
|
(:require
|
||||||
|
[clojure.string :as cs]
|
||||||
[schema.core :as s]
|
[schema.core :as s]
|
||||||
[com.stuartsierra.component :as component]
|
[com.stuartsierra.component :as component]
|
||||||
[smeagol.include.parse :as parse]
|
[smeagol.include.parse :as parse]
|
||||||
|
|
@ -11,15 +12,42 @@
|
||||||
(defprotocol IncludeMd
|
(defprotocol IncludeMd
|
||||||
(expand-include-md
|
(expand-include-md
|
||||||
[includer md-src]
|
[includer md-src]
|
||||||
"return a markfown file content for given uri."))
|
"return a markdown containing resolved includes"))
|
||||||
|
|
||||||
|
(s/defn
|
||||||
|
do-expand-one-include :- s/Str
|
||||||
|
[includer :- Includer
|
||||||
|
include :- parse/IncludeLink
|
||||||
|
md-src :- s/Str]
|
||||||
|
(let [{:keys [uri replace]} include]
|
||||||
|
(cs/replace
|
||||||
|
md-src
|
||||||
|
(re-pattern (cs/escape
|
||||||
|
replace
|
||||||
|
{\[ "\\["
|
||||||
|
\] "\\]"
|
||||||
|
\( "\\("
|
||||||
|
\) "\\)"}))
|
||||||
|
(resolve/resolve-md (:resolver includer) uri))))
|
||||||
|
;indent
|
||||||
|
|
||||||
|
(s/defn
|
||||||
|
do-expand-includes :- s/Str
|
||||||
|
[includer :- Includer
|
||||||
|
includes :- [parse/IncludeLink]
|
||||||
|
md-src :- s/Str]
|
||||||
|
(loop [loop-includes includes
|
||||||
|
result md-src]
|
||||||
|
(if (empty? loop-includes)
|
||||||
|
result
|
||||||
|
(recur
|
||||||
|
(rest loop-includes)
|
||||||
|
(do-expand-one-include includer (first loop-includes) result)))))
|
||||||
|
|
||||||
(extend-type Includer
|
(extend-type Includer
|
||||||
IncludeMd
|
IncludeMd
|
||||||
(expand-include-md [includer md-src]
|
(expand-include-md [includer md-src]
|
||||||
(let [includes (parse/parse-include-md md-src)]
|
(do-expand-includes includer (parse/parse-include-md md-src) md-src)))
|
||||||
;resolve found includes
|
|
||||||
;indent & integrate
|
|
||||||
md-src)))
|
|
||||||
|
|
||||||
(s/defn
|
(s/defn
|
||||||
new-includer
|
new-includer
|
||||||
|
|
|
||||||
|
|
@ -47,11 +47,12 @@ more text.")
|
||||||
(= uri "./simple.md") "Simple content."))
|
(= uri "./simple.md") "Simple content."))
|
||||||
|
|
||||||
(def system-under-test
|
(def system-under-test
|
||||||
(component/system-map
|
(component/start
|
||||||
:resolver (resolve/new-resolver :test-mock)
|
(component/system-map
|
||||||
:includer (component/using
|
:resolver (resolve/new-resolver :test-mock)
|
||||||
(sut/new-includer)
|
:includer (component/using
|
||||||
{:resolver :resolver})))
|
(sut/new-includer)
|
||||||
|
[:resolver]))))
|
||||||
|
|
||||||
(deftest test-expand-include-md
|
(deftest test-expand-include-md
|
||||||
(testing "The whole integration of include"
|
(testing "The whole integration of include"
|
||||||
|
|
@ -59,7 +60,7 @@ more text.")
|
||||||
(= "# Heading"
|
(= "# Heading"
|
||||||
(sut/expand-include-md (:includer system-under-test) "# Heading")))
|
(sut/expand-include-md (:includer system-under-test) "# Heading")))
|
||||||
(is
|
(is
|
||||||
(= "# Heading 1
|
(= "# Heading1
|
||||||
Simple content."
|
Simple content."
|
||||||
(sut/expand-include-md
|
(sut/expand-include-md
|
||||||
(:includer system-under-test)
|
(:includer system-under-test)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue