code.gitea.io/gitea@v1.19.3/modules/markup/markdown/math/block_renderer.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package math 5 6 import ( 7 gast "github.com/yuin/goldmark/ast" 8 "github.com/yuin/goldmark/renderer" 9 "github.com/yuin/goldmark/util" 10 ) 11 12 // BlockRenderer represents a renderer for math Blocks 13 type BlockRenderer struct{} 14 15 // NewBlockRenderer creates a new renderer for math Blocks 16 func NewBlockRenderer() renderer.NodeRenderer { 17 return &BlockRenderer{} 18 } 19 20 // RegisterFuncs registers the renderer for math Blocks 21 func (r *BlockRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) { 22 reg.Register(KindBlock, r.renderBlock) 23 } 24 25 func (r *BlockRenderer) writeLines(w util.BufWriter, source []byte, n gast.Node) { 26 l := n.Lines().Len() 27 for i := 0; i < l; i++ { 28 line := n.Lines().At(i) 29 _, _ = w.Write(util.EscapeHTML(line.Value(source))) 30 } 31 } 32 33 func (r *BlockRenderer) renderBlock(w util.BufWriter, source []byte, node gast.Node, entering bool) (gast.WalkStatus, error) { 34 n := node.(*Block) 35 if entering { 36 _, _ = w.WriteString(`<pre class="code-block is-loading"><code class="chroma language-math display">`) 37 r.writeLines(w, source, n) 38 } else { 39 _, _ = w.WriteString(`</code></pre>` + "\n") 40 } 41 return gast.WalkContinue, nil 42 }