diff options
| author | Asko Nomm <asko@bien.ee> | 2022-04-05 01:38:03 +0200 |
|---|---|---|
| committer | Asko Nomm <asko@bien.ee> | 2022-04-05 01:38:03 +0200 |
| commit | 3770175783d53f9008d81dca8b19741b218d925f (patch) | |
| tree | b56482908485599d23afde3de3a91340eb96fb0a | |
| parent | a17bb85a5a7170efc92f110d11cff1cef43e92b2 (diff) | |
bump
| -rw-r--r-- | project.clj | 5 | ||||
| -rw-r--r-- | src/clarktown/core.clj | 2 | ||||
| -rw-r--r-- | src/clarktown/parser.clj | 6 | ||||
| -rw-r--r-- | src/clarktown/parsers.clj | 16 | ||||
| -rw-r--r-- | src/clarktown/parsers/bold.clj | 2 | ||||
| -rw-r--r-- | src/clarktown/parsers/code_block.clj | 3 | ||||
| -rw-r--r-- | src/clarktown/parsers/inline_code.clj | 2 | ||||
| -rw-r--r-- | src/clarktown/parsers/italic.clj | 2 | ||||
| -rw-r--r-- | src/clarktown/parsers/link_and_image.clj | 2 | ||||
| -rw-r--r-- | src/clarktown/parsers/ordered_list_block.clj | 25 | ||||
| -rw-r--r-- | src/clarktown/parsers/strikethrough.clj | 2 |
11 files changed, 56 insertions, 11 deletions
diff --git a/project.clj b/project.clj index 8ea158e..284c054 100644 --- a/project.clj +++ b/project.clj @@ -1,7 +1,8 @@ -(defproject clarktown "0.1.0-SNAPSHOT" +(defproject clarktown "1.0" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0" :url "https://www.eclipse.org/legal/epl-2.0/"} - :dependencies [[org.clojure/clojure "1.10.3"]] + :dependencies [[org.clojure/clojure "1.11.0"]] + :plugins [[lein-auto "0.1.3"]] :repl-options {:init-ns clarktown.core}) diff --git a/src/clarktown/core.clj b/src/clarktown/core.clj index 43db7c6..3663c11 100644 --- a/src/clarktown/core.clj +++ b/src/clarktown/core.clj @@ -27,4 +27,4 @@ (parser/parse markdown given-parsers))) -(render (slurp "/Users/asko/Documents/work/clarktown/quote-block.md")) +(render (slurp "/Users/asko/work/clarktown/test.md"))
\ No newline at end of file diff --git a/src/clarktown/parser.clj b/src/clarktown/parser.clj index 53a96c7..95776d7 100644 --- a/src/clarktown/parser.clj +++ b/src/clarktown/parser.clj @@ -82,8 +82,10 @@ [blocks parsers] (for [block blocks] (if-let [parser (find-parser-by-block parsers block)] - (parse-block-with-known-parser parser parsers block) - (parse-block-with-unknown-parsers parsers block)))) + (->> (string/trim block) + (parse-block-with-known-parser parser parsers)) + (->> (string/trim block) + (parse-block-with-unknown-parsers parsers))))) (defn parse diff --git a/src/clarktown/parsers.clj b/src/clarktown/parsers.clj index bb3be45..01a6351 100644 --- a/src/clarktown/parsers.clj +++ b/src/clarktown/parsers.clj @@ -10,6 +10,8 @@ [clarktown.parsers.quote-block :as quote-block] [clarktown.parsers.heading-block :as heading-block] [clarktown.parsers.code-block :as code-block] + [clarktown.parsers.unordered-list-block :as unordered-list-block] + [clarktown.parsers.ordered-list-block :as ordered-list-block] [clarktown.parsers.paragraph-block :as paragraph-block])) @@ -29,6 +31,20 @@ :renderers [quote-block/render]} {:matcher code-block/is? :renderers [code-block/render]} + {:matcher unordered-list-block/is? + :renderers [bold/render + italic/render + inline-code/render + strikethrough/render + link-and-image/render + unordered-list-block/render]} + {:matcher ordered-list-block/is? + :renderers [bold/render + italic/render + inline-code/render + strikethrough/render + link-and-image/render + ordered-list-block/render]} {:renderers [bold/render italic/render inline-code/render diff --git a/src/clarktown/parsers/bold.clj b/src/clarktown/parsers/bold.clj index 296f002..cc209e6 100644 --- a/src/clarktown/parsers/bold.clj +++ b/src/clarktown/parsers/bold.clj @@ -4,7 +4,7 @@ (defn render - "Renders all occuring bold text as bold." + "Renders all occurring bold text as bold." [block _] (loop [block block matches (-> (re-seq #"\*\*.*?\*\*" block) diff --git a/src/clarktown/parsers/code_block.clj b/src/clarktown/parsers/code_block.clj index 9d41ae7..b1699d7 100644 --- a/src/clarktown/parsers/code_block.clj +++ b/src/clarktown/parsers/code_block.clj @@ -4,7 +4,7 @@ (defn is? - "Determines whether or not we're dealing with a code block." + "Determines whether we're dealing with a code block." [block] (and (string/starts-with? block "```") (string/ends-with? block "```"))) @@ -23,6 +23,7 @@ (string/replace n #"<" "<") (string/replace n #">" ">") (string/replace n #"\n" "<br>") + (string/replace n #"\tab" "<tab>") (string/trim n))] (if language (str "<pre class=\"language-" language "\"><code>" code "</code></pre>") diff --git a/src/clarktown/parsers/inline_code.clj b/src/clarktown/parsers/inline_code.clj index c75adf4..1de73bf 100644 --- a/src/clarktown/parsers/inline_code.clj +++ b/src/clarktown/parsers/inline_code.clj @@ -4,7 +4,7 @@ (defn render - "Renders all occuring inline code." + "Renders all occurring inline code." [block _] (loop [block block matches (-> (re-seq #"\`.*?\`" block) diff --git a/src/clarktown/parsers/italic.clj b/src/clarktown/parsers/italic.clj index d8c7c03..5dfe46e 100644 --- a/src/clarktown/parsers/italic.clj +++ b/src/clarktown/parsers/italic.clj @@ -4,7 +4,7 @@ (defn render - "Renders all occuring italic text as italic." + "Renders all occurring italic text as italic." [block _] (loop [block block matches (-> (re-seq #"_.*?_" block) diff --git a/src/clarktown/parsers/link_and_image.clj b/src/clarktown/parsers/link_and_image.clj index 7964448..dd8c9d0 100644 --- a/src/clarktown/parsers/link_and_image.clj +++ b/src/clarktown/parsers/link_and_image.clj @@ -4,7 +4,7 @@ (defn render - "Renders all occuring links and images." + "Renders all occurring links and images." [block _] (loop [block block matches (-> (re-seq #"\!?\[(.*?)\]\((.*?)\)" block) diff --git a/src/clarktown/parsers/ordered_list_block.clj b/src/clarktown/parsers/ordered_list_block.clj new file mode 100644 index 0000000..4dfaf38 --- /dev/null +++ b/src/clarktown/parsers/ordered_list_block.clj @@ -0,0 +1,25 @@ +(ns clarktown.parsers.ordered-list-block + (:require + [clojure.string :as string] + [clarktown.parser :as parser])) + + +(defn is? + "Determines whether we're dealing with a list block or not." + [block] + (re-matches #"(?s)^\d\..*$" (string/trim block))) + + +(defn render + "Renders the ordered list block" + [block parsers] + (loop [result "" + items (string/split-lines block)] + (if (empty? items) + (str "<ol>" result "</ol>") + (let [value (-> (first items) + (string/replace-first #"\d\." "") + string/trim + (parser/parse parsers))] + (recur (str result "<li>" value "</li>") + (drop 1 items)))))) diff --git a/src/clarktown/parsers/strikethrough.clj b/src/clarktown/parsers/strikethrough.clj index 31e4cc3..6f03152 100644 --- a/src/clarktown/parsers/strikethrough.clj +++ b/src/clarktown/parsers/strikethrough.clj @@ -4,7 +4,7 @@ (defn render - "Renders all occuring strikethrough text." + "Renders all occurring strikethrough text." [block _] (loop [block block matches (-> (re-seq #"~~.*?~~" block) |
