pages-server/render/markdown.go
hazycora 4db7fc335c
All checks were successful
Deploy to VPS / build_site (push) Successful in 4s
rework PageRouters heavily
2024-04-05 16:31:05 -05:00

67 lines
1.3 KiB
Go

package render
import (
"bytes"
"fmt"
"io"
"github.com/yuin/goldmark"
meta "github.com/yuin/goldmark-meta"
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/parser"
"github.com/yuin/goldmark/renderer/html"
)
var (
md = goldmark.New(
goldmark.WithExtensions(extension.GFM, meta.Meta),
goldmark.WithParserOptions(
parser.WithAutoHeadingID(),
),
goldmark.WithRendererOptions(
html.WithUnsafe(),
),
)
)
type MarkdownPageData struct {
Meta MetaTags
Rendered string
}
func Markdown(reader io.ReadCloser) (htmlReader io.ReadCloser, err error) {
// Convert markdown to HTML
var buf bytes.Buffer
// Read the body of the file
body, err := io.ReadAll(reader)
if err != nil {
return nil, err
}
context := parser.NewContext()
if err := md.Convert(body, &buf, parser.WithContext(context)); err != nil {
return nil, err
}
metaData := meta.Get(context)
markdownPageDate := MarkdownPageData{
Rendered: buf.String(),
}
if title, ok := metaData["title"]; ok {
markdownPageDate.Meta.Title = fmt.Sprintf("%v", title)
}
if description, ok := metaData["description"]; ok {
markdownPageDate.Meta.Description = fmt.Sprintf("%v", description)
}
var page bytes.Buffer
err = Template(&page, "markdown.tmpl", markdownPageDate)
if err != nil {
return nil, err
}
return io.NopCloser(&page), nil
}