feat(blogo,markdown): markdown renderer
This commit is contained in:
59
blogo/markdown/markdown.go
Normal file
59
blogo/markdown/markdown.go
Normal 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
8
go.mod
@@ -2,4 +2,10 @@ module forge.capytal.company/loreddev/x
|
|||||||
|
|
||||||
go 1.23.3
|
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
8
go.sum
@@ -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/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 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
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=
|
||||||
|
|||||||
Reference in New Issue
Block a user