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 }