commit 6bed142bffdcdedd90a31f3f71636e6ca356922c parent 92811857431e49e1c22a468f5b2bfc55c3688ce3 Author: Daniel Barlow <dan@telent.net> Date: Sun, 27 Jul 2025 22:00:07 +0100 introduce syntax for inline search implementation is kind o fhacky Diffstat:
| M | main.fnl | | | 27 | ++++++++++++++++++++++----- |
| M | site.fnl | | | 2 | ++ |
2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/main.fnl b/main.fnl @@ -6,7 +6,7 @@ (local textile (require :textile)) (local site (require :site)) -(local { : view } (require :fennel)) +(local { : view &as fennel } (require :fennel)) (local post-index (site.for-pathname "data/blogs/telent.blog/posts/")) @@ -167,16 +167,33 @@ in the Fediverse at <a href=\"https://axillae.telent.net/\">@dan@axillae.telent. (define-tests :sidebar (print (view (all-months post-index)))) +(fn subst-search-result [text] + (let [(ok? terms) ((fennel.parser text))] + (case terms + { : filter : format } + (let [results (post-index:search terms)] + (table.concat + (icollect [_ post (ipairs results)] + (string.format "* [[%s]]\n" post.slug)))) + _ + "search syntax error"))) + + + (fn translate-markdown [md] ;; lcmark/cmark doesn't have any extension points that allow us ;; to add actual new syntax so we're just going to postprocess - (let [html (lcmark.convert md "html" { :yaml_parser #($1) })] - (string.gsub html "%[%[([%w_-]+)%]%]" - (fn [slug] + (let [subst-links (fn [slug title] (string.format "<a href=%q class=internal>%s</a>" slug - (. (post-index:get slug) :title)))))) + (or title (. (post-index:get slug) :title))))] + (-> md + (string.gsub "\n/(%b{})" + subst-search-result) + (lcmark.convert "html" { :yaml_parser #($1) }) + (string.gsub "%[%[([%w_-]+)|(.-)%]%]" subst-links) + (string.gsub "%[%[([%w_-]+)%]%]" subst-links)))) (fn send-post [post stream excerpt?] (let [path (. post :full-path) diff --git a/site.fnl b/site.fnl @@ -137,6 +137,8 @@ (case filter { : newer : older } (and post.date (> post.date newer) (< post.date older)) + { : topic } + (. post.topics topic) _ true) post))] (if order