code.gitea.io/gitea@v1.19.3/modules/markup/markdown/math/inline_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  	"bytes"
     8  
     9  	"github.com/yuin/goldmark/ast"
    10  	"github.com/yuin/goldmark/renderer"
    11  	"github.com/yuin/goldmark/util"
    12  )
    13  
    14  // InlineRenderer is an inline renderer
    15  type InlineRenderer struct{}
    16  
    17  // NewInlineRenderer returns a new renderer for inline math
    18  func NewInlineRenderer() renderer.NodeRenderer {
    19  	return &InlineRenderer{}
    20  }
    21  
    22  func (r *InlineRenderer) renderInline(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) {
    23  	if entering {
    24  		_, _ = w.WriteString(`<code class="language-math is-loading">`)
    25  		for c := n.FirstChild(); c != nil; c = c.NextSibling() {
    26  			segment := c.(*ast.Text).Segment
    27  			value := util.EscapeHTML(segment.Value(source))
    28  			if bytes.HasSuffix(value, []byte("\n")) {
    29  				_, _ = w.Write(value[:len(value)-1])
    30  				if c != n.LastChild() {
    31  					_, _ = w.Write([]byte(" "))
    32  				}
    33  			} else {
    34  				_, _ = w.Write(value)
    35  			}
    36  		}
    37  		return ast.WalkSkipChildren, nil
    38  	}
    39  	_, _ = w.WriteString(`</code>`)
    40  	return ast.WalkContinue, nil
    41  }
    42  
    43  // RegisterFuncs registers the renderer for inline math nodes
    44  func (r *InlineRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
    45  	reg.Register(KindInline, r.renderInline)
    46  }