46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package converter
|
|
|
|
import (
|
|
"github.com/yuin/goldmark/ast"
|
|
"github.com/yuin/goldmark/renderer"
|
|
"github.com/yuin/goldmark/util"
|
|
)
|
|
|
|
type escapedRawHTMLRenderer struct{}
|
|
|
|
func (r *escapedRawHTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
|
|
reg.Register(ast.KindHTMLBlock, r.renderHTMLBlock)
|
|
reg.Register(ast.KindRawHTML, r.renderRawHTML)
|
|
}
|
|
|
|
func (r *escapedRawHTMLRenderer) renderHTMLBlock(w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
|
|
n := node.(*ast.HTMLBlock)
|
|
if entering {
|
|
for i := 0; i < n.Lines().Len(); i++ {
|
|
line := n.Lines().At(i)
|
|
_, _ = w.Write(util.EscapeHTML(line.Value(source)))
|
|
}
|
|
return ast.WalkContinue, nil
|
|
}
|
|
|
|
if n.HasClosure() {
|
|
_, _ = w.Write(util.EscapeHTML(n.ClosureLine.Value(source)))
|
|
}
|
|
|
|
return ast.WalkContinue, nil
|
|
}
|
|
|
|
func (r *escapedRawHTMLRenderer) renderRawHTML(w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
|
|
if !entering {
|
|
return ast.WalkSkipChildren, nil
|
|
}
|
|
|
|
n := node.(*ast.RawHTML)
|
|
for i := 0; i < n.Segments.Len(); i++ {
|
|
segment := n.Segments.At(i)
|
|
_, _ = w.Write(util.EscapeHTML(segment.Value(source)))
|
|
}
|
|
|
|
return ast.WalkSkipChildren, nil
|
|
}
|