all repos

mugit @ 5480fecc5931f4fe96f0f56f88df41d2439d7632

🐮 git server that your cow will love

mugit/internal/markdown/markdown.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
run gofumpt, 1 month ago
1
package markdown
2
3
import (
4
	"bytes"
5
	"path/filepath"
6
7
	"github.com/yuin/goldmark"
8
	emoji "github.com/yuin/goldmark-emoji"
9
	"github.com/yuin/goldmark/extension"
10
	"github.com/yuin/goldmark/parser"
11
	"github.com/yuin/goldmark/renderer/html"
12
	callout "gitlab.com/staticnoise/goldmark-callout"
13
)
14
15
var (
16
	repoNameKey = parser.NewContextKey()
17
	repoRefKey  = parser.NewContextKey()
18
	baseDirKey  = parser.NewContextKey()
19
20
	markdown = goldmark.New(
21
		goldmark.WithRendererOptions(html.WithUnsafe()),
22
		goldmark.WithParserOptions(parser.WithAutoHeadingID()),
23
		goldmark.WithExtensions(
24
			extension.GFM,
25
			emoji.Emoji,
26
			callout.CalloutExtention,
27
			&relativeLink{},
28
		),
29
	)
30
)
31
32
func Render(repoName, repoRef, readmePath, readmeSource string) (string, error) {
33
	ctx := parser.NewContext()
34
	ctx.Set(repoNameKey, repoName)
35
	ctx.Set(repoRefKey, repoRef)
36
	ctx.Set(baseDirKey, filepath.Dir(readmePath))
37
	parserOpts := parser.WithContext(ctx)
38
39
	var buf bytes.Buffer
40
	if err := markdown.Convert([]byte(readmeSource), &buf, parserOpts); err != nil {
41
		return "", err
42
	}
43
	return buf.String(), nil
44
}