blog/markdown/markdown.go

47 lines
1.0 KiB
Go

package markdown
import (
"bytes"
"io"
chromahtml "github.com/alecthomas/chroma/formatters/html"
"github.com/yuin/goldmark"
highlighting "github.com/yuin/goldmark-highlighting"
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/parser"
"github.com/yuin/goldmark/renderer/html"
)
var gm = goldmark.New(
goldmark.WithExtensions(
extension.GFM,
highlighting.NewHighlighting(
highlighting.WithStyle("monokai"),
highlighting.WithFormatOptions(
chromahtml.WithLineNumbers(true),
chromahtml.LinkableLineNumbers(true, "code-"),
chromahtml.LineNumbersInTable(true),
),
),
),
goldmark.WithParserOptions(
parser.WithAutoHeadingID(),
),
goldmark.WithRendererOptions(
html.WithHardWraps(),
),
)
// Convert transforms a markdown document into HTML
func Convert(r io.Reader) (string, error) {
content, err := Content(r)
if err != nil {
return "", err
}
var buf bytes.Buffer
if err := gm.Convert([]byte(content), &buf); err != nil {
return "", err
}
return buf.String(), nil
}