feat(blogo,markdown): markdown renderer

This commit is contained in:
Guz
2025-01-10 11:38:24 -03:00
parent 18102e99cf
commit 06765efe99
3 changed files with 74 additions and 1 deletions

View File

@@ -0,0 +1,59 @@
package markdown
import (
"io"
"io/fs"
"strings"
"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"
"github.com/yuin/goldmark/text"
"forge.capytal.company/loreddev/x/blogo"
)
const pluginName = "blogo-markdown"
type plugin struct {
parser parser.Parser
renderer renderer.Renderer
}
func New() blogo.Plugin {
m := goldmark.New(
goldmark.WithExtensions(
extension.NewLinkify(),
meta.Meta,
),
)
return &plugin{
parser: m.Parser(),
renderer: m.Renderer(),
}
}
func (p *plugin) Name() string {
return pluginName
}
func (p *plugin) Render(f fs.File, w io.Writer) error {
stat, err := f.Stat()
if err != nil || !strings.HasSuffix(stat.Name(), ".md") {
return blogo.ErrRendererNotSupportedFile
}
src, err := io.ReadAll(f)
if err != nil {
return err
}
txt := text.NewReader(src)
ast := p.parser.Parse(txt)
return p.renderer.Render(w, src, ast)
}

8
go.mod
View File

@@ -2,4 +2,10 @@ module forge.capytal.company/loreddev/x
go 1.23.3
require github.com/a-h/templ v0.2.793
require (
github.com/a-h/templ v0.2.793
github.com/yuin/goldmark v1.7.8
github.com/yuin/goldmark-meta v1.1.0
)
require gopkg.in/yaml.v2 v2.3.0 // indirect

8
go.sum
View File

@@ -2,3 +2,11 @@ github.com/a-h/templ v0.2.793 h1:Io+/ocnfGWYO4VHdR0zBbf39PQlnzVCVVD+wEEs6/qY=
github.com/a-h/templ v0.2.793/go.mod h1:lq48JXoUvuQrU0VThrK31yFwdRjTCnIE5bcPCM9IP1w=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic=
github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=
github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=