all repos

mugit @ a744b78e4350e823249d6153b8392a34fce6f880

🐮 git server that your cow will love

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
refactor: markdown renderer , 3 months 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
func Render(repoName, repoRef, readmePath, readmeSource string) (string, error) {
32
	ctx := parser.NewContext()
33
	ctx.Set(repoNameKey, repoName)
34
	ctx.Set(repoRefKey, repoRef)
35
	ctx.Set(baseDirKey, filepath.Dir(readmePath))
36
	parserOpts := parser.WithContext(ctx)
37
38
	var buf bytes.Buffer
39
	if err := markdown.Convert([]byte(readmeSource), &buf, parserOpts); err != nil {
40
		return "", err
41
	}
42
	return buf.String(), nil
43
}