summaryrefslogtreecommitdiff
path: root/src/clarktown/correctors
diff options
context:
space:
mode:
authorAsko Nõmm <84135165+askonomm@users.noreply.github.com>2022-04-23 02:43:49 +0300
committerGitHub <noreply@github.com>2022-04-23 02:43:49 +0300
commit70d88384ea788f7b2ad5ebb725762f7d27300504 (patch)
treeb371f12617949daf2b40538ba9a2e4457b657d0f /src/clarktown/correctors
parent059bfa7bd9bfdde0c75646bf1dfc20d23da8a02c (diff)
parentdc921cbe1c786995a8670efd9f5556ee9df064f9 (diff)
Merge pull request #17 from askonomm/16-improve-architecture
Improve architecture
Diffstat (limited to 'src/clarktown/correctors')
-rw-r--r--src/clarktown/correctors/atx_heading_block.clj29
-rw-r--r--src/clarktown/correctors/code_block.clj37
2 files changed, 66 insertions, 0 deletions
diff --git a/src/clarktown/correctors/atx_heading_block.clj b/src/clarktown/correctors/atx_heading_block.clj
new file mode 100644
index 0000000..9ff789e
--- /dev/null
+++ b/src/clarktown/correctors/atx_heading_block.clj
@@ -0,0 +1,29 @@
+(ns clarktown.correctors.atx-heading-block
+ (:require
+ [clojure.string :as string]))
+
+
+(defn empty-line-above?
+ "Determines whether there's a need for an empty new line
+ above the `line` at the current `index`. In the case of a
+ ATX heading block that starts with the `#` character, if
+ there's no empty newline above, we need to create one, and
+ so this function must then return `true`."
+ [lines line index]
+ (and (string/starts-with? (string/trim line) "#")
+ (> index 0)
+ (not (= (-> (nth lines (- index 1))
+ string/trim) ""))))
+
+
+(defn empty-line-below?
+ "Determines whether there's a need for an empty new line
+ below the `line` at the current `index`. In the case of a
+ ATX heading block that starts with the `#` character, if
+ there's no empty newline below, we need to create one, and
+ so this function must then return `true`."
+ [lines line index]
+ (and (string/starts-with? (string/trim line) "#")
+ (< index (- (count lines) 1))
+ (not (= (-> (nth lines (+ index 1))
+ string/trim) ""))))
diff --git a/src/clarktown/correctors/code_block.clj b/src/clarktown/correctors/code_block.clj
new file mode 100644
index 0000000..73989fe
--- /dev/null
+++ b/src/clarktown/correctors/code_block.clj
@@ -0,0 +1,37 @@
+(ns clarktown.correctors.code-block
+ (:require
+ [clojure.string :as string]))
+
+
+(defn empty-line-above?
+ "Determines whether there's a need for an empty new line
+ above the `line` at the current `index`. In the case of a
+ code block, which starts with three backticks (```), if there's
+ no empty newline above, we need to create one, and so this
+ function must then return `true`."
+ [lines line index]
+ (and (string/starts-with? (string/trim line) "```")
+ (> index 0)
+ (->> (take index lines)
+ (filter #(string/starts-with? (string/trim %) "```"))
+ count
+ even?)
+ (not (= (-> (nth lines (- index 1))
+ string/trim) ""))))
+
+
+(defn empty-line-below?
+ "Determines whether there's a need for an empty new line
+ below the `line` at the current `index`. In the case of a
+ code block, which ends with three backticks (```), if there's
+ no empty newline above, we need to create one, and so this
+ function must then return `true`."
+ [lines line index]
+ (and (string/starts-with? (string/trim line) "```")
+ (< index (- (count lines) 1))
+ (->> (take index lines)
+ (filter #(string/starts-with? (string/trim %) "```"))
+ count
+ odd?)
+ (not (= (-> (nth lines (+ index 1))
+ string/trim) ""))))