add replacement

This commit is contained in:
jem 2018-05-18 14:31:46 +02:00
parent 78a534349b
commit 6768d71429
2 changed files with 40 additions and 11 deletions

View file

@ -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

View file

@ -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)