From 6768d71429e53aae58e26ed2e6a3db820e9e4d39 Mon Sep 17 00:00:00 2001 From: jem Date: Fri, 18 May 2018 14:31:46 +0200 Subject: [PATCH] add replacement --- src/smeagol/include.clj | 38 ++++++++++++++++++++++++++++++----- test/smeagol/test/include.clj | 13 ++++++------ 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/smeagol/include.clj b/src/smeagol/include.clj index 14a97da..440f1ab 100644 --- a/src/smeagol/include.clj +++ b/src/smeagol/include.clj @@ -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 diff --git a/test/smeagol/test/include.clj b/test/smeagol/test/include.clj index 45219e1..628ad75 100644 --- a/test/smeagol/test/include.clj +++ b/test/smeagol/test/include.clj @@ -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)