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
|
||||
|
||||
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/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=
|
||||
|
||||
Reference in New Issue
Block a user