diff options
| author | Asko Nõmm <ano@ano.ee> | 2022-05-11 18:10:02 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-11 18:10:02 +0300 |
| commit | 94c1c0ca639f55ff9073cb1fdf2ad6015bb6bae1 (patch) | |
| tree | 8f941e88d070118acf4c807bee380b013912e4c9 /src/clarktown/renderers/heading_block.clj | |
| parent | b97891cc45b9a087a372767e25aa36788bc979bf (diff) | |
| parent | 9276a14c41e95e5ca17c648fe71c162f35551057 (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/renderers/heading_block.clj')
| -rw-r--r-- | src/clarktown/renderers/heading_block.clj | 28 |
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 |
