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 }