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
|
||||
(:require
|
||||
[clojure.string :as cs]
|
||||
[schema.core :as s]
|
||||
[com.stuartsierra.component :as component]
|
||||
[smeagol.include.parse :as parse]
|
||||
|
|
@ -11,15 +12,42 @@
|
|||
(defprotocol IncludeMd
|
||||
(expand-include-md
|
||||
[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
|
||||
IncludeMd
|
||||
(expand-include-md [includer md-src]
|
||||
(let [includes (parse/parse-include-md md-src)]
|
||||
;resolve found includes
|
||||
;indent & integrate
|
||||
md-src)))
|
||||
(do-expand-includes includer (parse/parse-include-md md-src) md-src)))
|
||||
|
||||
(s/defn
|
||||
new-includer
|
||||
|
|
|
|||
|
|
@ -47,11 +47,12 @@ more text.")
|
|||
(= uri "./simple.md") "Simple content."))
|
||||
|
||||
(def system-under-test
|
||||
(component/system-map
|
||||
:resolver (resolve/new-resolver :test-mock)
|
||||
:includer (component/using
|
||||
(sut/new-includer)
|
||||
{:resolver :resolver})))
|
||||
(component/start
|
||||
(component/system-map
|
||||
:resolver (resolve/new-resolver :test-mock)
|
||||
:includer (component/using
|
||||
(sut/new-includer)
|
||||
[:resolver]))))
|
||||
|
||||
(deftest test-expand-include-md
|
||||
(testing "The whole integration of include"
|
||||
|
|
@ -59,7 +60,7 @@ more text.")
|
|||
(= "# Heading"
|
||||
(sut/expand-include-md (:includer system-under-test) "# Heading")))
|
||||
(is
|
||||
(= "# Heading 1
|
||||
(= "# Heading1
|
||||
Simple content."
|
||||
(sut/expand-include-md
|
||||
(:includer system-under-test)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue