Files
Atay-Makhzan/modules/markup/markdown/math/inline_renderer.go
T

54 lines
1.5 KiB
Go
Raw Normal View History

2022-09-13 17:33:37 +01:00
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2022-09-13 17:33:37 +01:00
package math
import (
"bytes"
2024-11-18 13:25:42 +08:00
"code.gitea.io/gitea/modules/markup/internal"
2022-09-13 17:33:37 +01:00
"github.com/yuin/goldmark/ast"
"github.com/yuin/goldmark/renderer"
"github.com/yuin/goldmark/util"
)
2024-12-13 14:45:32 +08:00
// Inline render output:
// <code class="language-math">...</code>
2022-09-13 17:33:37 +01:00
// InlineRenderer is an inline renderer
2024-11-18 13:25:42 +08:00
type InlineRenderer struct {
renderInternal *internal.RenderInternal
}
2022-09-13 17:33:37 +01:00
// NewInlineRenderer returns a new renderer for inline math
2024-11-18 13:25:42 +08:00
func NewInlineRenderer(renderInternal *internal.RenderInternal) renderer.NodeRenderer {
return &InlineRenderer{renderInternal: renderInternal}
2022-09-13 17:33:37 +01:00
}
func (r *InlineRenderer) renderInline(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) {
if entering {
2025-06-24 01:27:35 +08:00
_, _ = w.WriteString(string(r.renderInternal.ProtectSafeAttrs(`<code class="language-math">`)))
2022-09-13 17:33:37 +01:00
for c := n.FirstChild(); c != nil; c = c.NextSibling() {
segment := c.(*ast.Text).Segment
value := util.EscapeHTML(segment.Value(source))
if bytes.HasSuffix(value, []byte("\n")) {
_, _ = w.Write(value[:len(value)-1])
if c != n.LastChild() {
_, _ = w.Write([]byte(" "))
}
} else {
_, _ = w.Write(value)
}
}
return ast.WalkSkipChildren, nil
}
_, _ = w.WriteString(`</code>`)
return ast.WalkContinue, nil
}
// RegisterFuncs registers the renderer for inline math nodes
func (r *InlineRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
reg.Register(KindInline, r.renderInline)
}