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