summaryrefslogtreecommitdiffstats
path: root/internal/builder/markdown.go
diff options
context:
space:
mode:
authorIvar Løvlie <38570165+ivarlovlie@users.noreply.github.com>2026-03-31 12:27:46 +0200
committerGitHub <noreply@github.com>2026-03-31 12:27:46 +0200
commit8d7cda6e578e684483c0b5c7391c48e5b9ac5192 (patch)
treed2b6506db2de72b3a6982cfbe69925b88936de90 /internal/builder/markdown.go
parent33f214f6cd9729473bb55fd7b3b923d5d960bb98 (diff)
parent3cb7c82cf7c4e050148f69be23590a7fbe587a27 (diff)
downloadnebbet.no-8d7cda6e578e684483c0b5c7391c48e5b9ac5192.tar.xz
nebbet.no-8d7cda6e578e684483c0b5c7391c48e5b9ac5192.zip
Merge pull request #1 from ivarlovlie/claude/static-site-sqlite-setup-mrcAr
Diffstat (limited to 'internal/builder/markdown.go')
-rw-r--r--internal/builder/markdown.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/internal/builder/markdown.go b/internal/builder/markdown.go
new file mode 100644
index 0000000..4e00ca3
--- /dev/null
+++ b/internal/builder/markdown.go
@@ -0,0 +1,49 @@
+package builder
+
+import (
+ "bytes"
+ "regexp"
+ "strings"
+
+ "github.com/yuin/goldmark"
+ "github.com/yuin/goldmark/extension"
+ "github.com/yuin/goldmark/parser"
+ "github.com/yuin/goldmark/renderer/html"
+)
+
+var md = goldmark.New(
+ goldmark.WithExtensions(
+ extension.GFM,
+ extension.Table,
+ extension.Strikethrough,
+ extension.TaskList,
+ ),
+ goldmark.WithParserOptions(
+ parser.WithAutoHeadingID(),
+ ),
+ goldmark.WithRendererOptions(
+ // Allow raw HTML pass-through so component tags survive round-trip.
+ html.WithUnsafe(),
+ ),
+)
+
+// MarkdownToHTML converts a markdown string to an HTML fragment.
+func MarkdownToHTML(body string) (string, error) {
+ var buf bytes.Buffer
+ if err := md.Convert([]byte(body), &buf); err != nil {
+ return "", err
+ }
+ return buf.String(), nil
+}
+
+var (
+ htmlTagRe = regexp.MustCompile(`<[^>]+>`)
+ multiSpaceRe = regexp.MustCompile(`\s+`)
+)
+
+// StripHTML removes HTML tags and normalises whitespace for search indexing.
+func StripHTML(h string) string {
+ plain := htmlTagRe.ReplaceAllString(h, " ")
+ plain = multiSpaceRe.ReplaceAllString(plain, " ")
+ return strings.TrimSpace(plain)
+}