summaryrefslogtreecommitdiff
path: root/src/clarktown
diff options
context:
space:
mode:
authorAsko Nõmm <ano@ano.ee>2022-05-11 18:10:02 +0300
committerGitHub <noreply@github.com>2022-05-11 18:10:02 +0300
commit94c1c0ca639f55ff9073cb1fdf2ad6015bb6bae1 (patch)
tree8f941e88d070118acf4c807bee380b013912e4c9 /src/clarktown
parentb97891cc45b9a087a372767e25aa36788bc979bf (diff)
parent9276a14c41e95e5ca17c648fe71c162f35551057 (diff)
Merge pull request #30 from askonomm/29-add-id-attributes-to-headings-based-on-value-to-enable-linking-to-a-heading
Add `id` attributes to headings based on value.
Diffstat (limited to 'src/clarktown')
-rw-r--r--src/clarktown/renderers/heading_block.clj28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/clarktown/renderers/heading_block.clj b/src/clarktown/renderers/heading_block.clj
index 7f4c7de..563508e 100644
--- a/src/clarktown/renderers/heading_block.clj
+++ b/src/clarktown/renderers/heading_block.clj
@@ -1,9 +1,23 @@
(ns clarktown.renderers.heading-block
(:require
[clojure.string :as string]
- [clarktown.matchers.heading-block :as matcher]))
+ [clarktown.matchers.heading-block :as matcher])
+ (:import
+ (java.text Normalizer Normalizer$Form)))
+(defn- slugify
+ "Turn `input` in a URL slug."
+ [input]
+ (let [split-s(-> (Normalizer/normalize input Normalizer$Form/NFD)
+ (string/replace #"[\P{ASCII}]+" "")
+ string/lower-case
+ string/triml
+ (string/split #"[\p{Space}\p{P}]+"))
+ combined (string/join "-" split-s)]
+ (apply str (take 250 combined))))
+
+
(defn render-atx-heading
"Renders the hashbang heading block."
[block]
@@ -15,8 +29,9 @@
value (->> (string/split single-line-block #" ")
next
(string/join " ")
- string/trim)]
- (str "<h" size ">" value "</h" size ">")))
+ string/trim)
+ id (slugify value)]
+ (str "<h" size " id=\"" id "\">" value "</h" size ">")))
(defn render-settext-heading
@@ -29,10 +44,11 @@
h1? (= "=" (-> (last lines)
string/trim
(string/split #"")
- first))]
+ first))
+ id (slugify value)]
(if h1?
- (str "<h1>" value "</h1>")
- (str "<h2>" value "</h2>"))))
+ (str "<h1 id=\"" id "\">" value "</h1>")
+ (str "<h2 id=\"" id "\">" value "</h2>"))))
(defn render