package progdoc
import (
"bytes"
"html/template"
"io"
"os"
"github.com/yuin/goldmark"
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/parser"
"github.com/yuin/goldmark/renderer/html"
)
type mdSource struct {
MDFile string
}
func (m mdSource) HTML(w io.Writer, srcCtx *SourceCtx) error {
srcBytes, err := os.ReadFile(m.MDFile)
if err != nil {
return err
}
md := goldmark.New(
goldmark.WithExtensions(extension.GFM),
goldmark.WithParserOptions(
parser.WithAutoHeadingID(),
),
goldmark.WithRendererOptions(
html.WithUnsafe(),
),
)
return md.Convert(srcBytes, w)
}
type mdTemplateSource struct {
Template *template.Template
Data interface{}
}
func (m mdTemplateSource) HTML(w io.Writer, srcCtx *SourceCtx) error {
var tmplOut bytes.Buffer
if err := m.Template.Execute(&tmplOut, m.Data); err != nil {
return err
}
md := goldmark.New(
goldmark.WithExtensions(extension.GFM),
goldmark.WithParserOptions(
parser.WithAutoHeadingID(),
),
goldmark.WithRendererOptions(
html.WithUnsafe(),
),
)
return md.Convert(tmplOut.Bytes(), w)
}