diff --git a/src/smeagol/include/parse.clj b/src/smeagol/include/parse.clj index 0c4dbae..2212e0d 100644 --- a/src/smeagol/include/parse.clj +++ b/src/smeagol/include/parse.clj @@ -3,7 +3,8 @@ [schema.core :as s])) (def IncludeLink - {:uri s/Str + {:replace s/Str + :uri s/Str :indent-heading s/Num :indent-list s/Num}) @@ -27,7 +28,7 @@ (s/defn parse-include-link [md-src :- s/Str] - (re-seq #".*&\[\w*(.*)\w*\]\((.*)\).*" md-src)) + (re-seq #".*(&\[\w*(.*)\w*\]\((.*)\)).*" md-src)) (s/defn parse-include-md :- [IncludeLink] @@ -35,9 +36,11 @@ (vec (map (fn [parse-element] - (let [uri (nth parse-element 2) - indents-text (nth parse-element 1)] - {:uri uri + (let [replace (nth parse-element 1) + uri (nth parse-element 3) + indents-text (nth parse-element 2)] + {:replace replace + :uri uri :indent-heading (convert-indent-to-int (parse-indent-heading indents-text)) :indent-list (convert-indent-to-int (parse-indent-list indents-text))})) (parse-include-link md-src)))) diff --git a/test/smeagol/test/include/parse.clj b/test/smeagol/test/include/parse.clj index 60a22bf..af27abf 100644 --- a/test/smeagol/test/include/parse.clj +++ b/test/smeagol/test/include/parse.clj @@ -45,37 +45,47 @@ more text.") (= [] (sut/parse-include-md "# Heading"))) (is - (= [{:uri "./simple.md", :indent-heading 0, :indent-list 0}] + (= [{:replace "&[](./simple.md)" :uri "./simple.md", :indent-heading 0, :indent-list 0}] (sut/parse-include-md include-simple))) (is - (= [{:uri "./simple.md", :indent-heading 0, :indent-list 0}] + (= [{:replace "&[](./simple.md)" :uri "./simple.md", :indent-heading 0, :indent-list 0}] (sut/parse-include-md include-surounding-simple))) (is - (= [{:uri "./with-heading.md", :indent-heading 0, :indent-list 0}] + (= [{:replace "&[:indent-heading 0](./with-heading.md)" :uri "./with-heading.md", :indent-heading 0, :indent-list 0}] (sut/parse-include-md include-heading-0))) (is - (= [{:uri "./with-heading-and-list.md", :indent-heading 1, :indent-list 1}] + (= [{:replace + "&[:indent-heading 1 :indent-list 1](./with-heading-and-list.md)" + :uri "./with-heading-and-list.md", :indent-heading 1, :indent-list 1}] (sut/parse-include-md include-heading-list-1))) (is - (= [{:uri "./with-heading-and-list.md", :indent-heading 0, :indent-list 0}] + (= [{:replace + "&[:indent-list 0 :indent-heading 0](./with-heading-and-list.md)" + :uri "./with-heading-and-list.md", :indent-heading 0, :indent-list 0}] (sut/parse-include-md include-heading-list-0))) (is - (= [{:uri "./simple.md", :indent-heading 0, :indent-list 0}] + (= [{:replace + "&[ invalid input should default to indent 0 ](./simple.md)" + :uri "./simple.md", :indent-heading 0, :indent-list 0}] (sut/parse-include-md include-invalid-indent))) (is - (= [{:uri "./with-heading-and-list.md", :indent-heading 2, :indent-list 3}] + (= [{:replace + "&[ :indent-heading 2 :indent-list 33 ](./with-heading-and-list.md)" + :uri "./with-heading-and-list.md", :indent-heading 2, :indent-list 3}] (sut/parse-include-md include-spaced-indent))) (is - (= [{:uri "./with-heading-and-list.md", + (= [{:replace + "&[ :indent-heading 2 :indent-list 33 ](./with-heading-and-list.md)" + :uri "./with-heading-and-list.md", :indent-heading 2, :indent-list 3} - {:uri "./simple.md", :indent-heading 0, :indent-list 0}] + {:replace "&[](./simple.md)" :uri "./simple.md", :indent-heading 0, :indent-list 0}] (sut/parse-include-md multi)))))