diff --git a/modules/markup/markdown/goldmark.go b/modules/markup/markdown/goldmark.go index 4a560517f22..b2b16f5d9ff 100644 --- a/modules/markup/markdown/goldmark.go +++ b/modules/markup/markdown/goldmark.go @@ -119,12 +119,33 @@ func (r *HTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) { reg.Register(KindDetails, r.renderDetails) reg.Register(KindSummary, r.renderSummary) reg.Register(ast.KindCodeSpan, r.renderCodeSpan) + reg.Register(ast.KindCodeBlock, r.renderCodeBlock) reg.Register(KindAttention, r.renderAttention) reg.Register(KindTaskCheckBoxListItem, r.renderTaskCheckBoxListItem) reg.Register(east.KindTaskCheckBox, r.renderTaskCheckBox) reg.Register(KindRawHTML, r.renderRawHTML) } +// renderCodeBlock wraps indented code blocks like the fenced renderer +func (r *HTMLRenderer) renderCodeBlock(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) { + if entering { + opening := r.renderInternal.ProtectSafeAttrs(`
`)
+ if _, err := w.WriteString(string(opening)); err != nil {
+ return ast.WalkStop, err
+ }
+ lines := n.Lines()
+ for i := 0; i < lines.Len(); i++ {
+ line := lines.At(i)
+ r.Writer.RawWrite(w, line.Value(source))
+ }
+ } else {
+ if _, err := w.WriteString("code`+nl+``+suffix)
+ testRender(" \n", prefix+`<script>alert(1)</script>`+nl+``+suffix)
}