summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clarktown/core.clj2
-rw-r--r--src/clarktown/parser.clj6
-rw-r--r--src/clarktown/parsers.clj16
-rw-r--r--src/clarktown/parsers/bold.clj2
-rw-r--r--src/clarktown/parsers/code_block.clj3
-rw-r--r--src/clarktown/parsers/inline_code.clj2
-rw-r--r--src/clarktown/parsers/italic.clj2
-rw-r--r--src/clarktown/parsers/link_and_image.clj2
-rw-r--r--src/clarktown/parsers/ordered_list_block.clj25
-rw-r--r--src/clarktown/parsers/strikethrough.clj2
10 files changed, 53 insertions, 9 deletions
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 #"<" "&lt;")
(string/replace n #">" "&gt;")
(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)