all repos

mugit @ 9718c0f3da9512866c9e7e4e63b66a5dc7db8019

🐮 git server that your cow will love

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package markdown

import (
	"bytes"
	"path/filepath"

	"github.com/yuin/goldmark"
	emoji "github.com/yuin/goldmark-emoji"
	"github.com/yuin/goldmark/extension"
	"github.com/yuin/goldmark/parser"
	"github.com/yuin/goldmark/renderer/html"
	callout "gitlab.com/staticnoise/goldmark-callout"
)

var (
	repoNameKey = parser.NewContextKey()
	repoRefKey  = parser.NewContextKey()
	baseDirKey  = parser.NewContextKey()

	markdown = goldmark.New(
		goldmark.WithRendererOptions(html.WithUnsafe()),
		goldmark.WithParserOptions(parser.WithAutoHeadingID()),
		goldmark.WithExtensions(
			extension.GFM,
			emoji.Emoji,
			callout.CalloutExtention,
			&relativeLink{},
		))
)

func Render(repoName, repoRef, readmePath, readmeSource string) (string, error) {
	ctx := parser.NewContext()
	ctx.Set(repoNameKey, repoName)
	ctx.Set(repoRefKey, repoRef)
	ctx.Set(baseDirKey, filepath.Dir(readmePath))
	parserOpts := parser.WithContext(ctx)

	var buf bytes.Buffer
	if err := markdown.Convert([]byte(readmeSource), &buf, parserOpts); err != nil {
		return "", err
	}
	return buf.String(), nil
}