From 9276a14c41e95e5ca17c648fe71c162f35551057 Mon Sep 17 00:00:00 2001 From: Asko Nõmm Date: Wed, 11 May 2022 18:09:16 +0300 Subject: Add `id` attributes to headings based on value. --- src/clarktown/renderers/heading_block.clj | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'src') 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 "" value ""))) + string/trim) + id (slugify value)] + (str "" value ""))) (defn render-settext-heading @@ -29,10 +44,11 @@ h1? (= "=" (-> (last lines) string/trim (string/split #"") - first))] + first)) + id (slugify value)] (if h1? - (str "

" value "

") - (str "

" value "

")))) + (str "

" value "

") + (str "

" value "

")))) (defn render -- cgit v1.2.3