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
}
|