arche / internal/markdown/markdown.go

commit 154431fd
 1package markdown
 2
 3import (
 4	"bytes"
 5	"html/template"
 6
 7	"github.com/yuin/goldmark"
 8	"github.com/yuin/goldmark/extension"
 9	"github.com/yuin/goldmark/parser"
10	"github.com/yuin/goldmark/renderer/html"
11)
12
13var md = goldmark.New(
14	goldmark.WithExtensions(
15		extension.GFM,
16		extension.Footnote,
17	),
18	goldmark.WithParserOptions(
19		parser.WithAutoHeadingID(),
20	),
21	goldmark.WithRendererOptions(
22		html.WithHardWraps(),
23		html.WithXHTML(),
24	),
25)
26
27func Render(src string) template.HTML {
28	var buf bytes.Buffer
29	if err := md.Convert([]byte(src), &buf); err != nil {
30		return template.HTML("<pre>" + template.HTMLEscapeString(src) + "</pre>")
31	}
32	return template.HTML(buf.String())
33}