mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.3 KiB
46 lines
1.3 KiB
// Copyright 2022 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package math |
|
|
|
import ( |
|
"bytes" |
|
|
|
"github.com/yuin/goldmark/ast" |
|
"github.com/yuin/goldmark/renderer" |
|
"github.com/yuin/goldmark/util" |
|
) |
|
|
|
// InlineRenderer is an inline renderer |
|
type InlineRenderer struct{} |
|
|
|
// NewInlineRenderer returns a new renderer for inline math |
|
func NewInlineRenderer() renderer.NodeRenderer { |
|
return &InlineRenderer{} |
|
} |
|
|
|
func (r *InlineRenderer) renderInline(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) { |
|
if entering { |
|
_, _ = w.WriteString(`<code class="language-math is-loading">`) |
|
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) |
|
}
|
|
|