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  }