51 lines · 1.4 KB · Go
RawDownload
// 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 renderertype InlineRenderer struct{} // NewInlineRenderer returns a new renderer for inline mathfunc NewInlineRenderer() renderer.NodeRenderer {	return &InlineRenderer{}} func (r *InlineRenderer) renderInline(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) {	if entering {		extraClass := ""		if _, ok := n.(*InlineBlock); ok {			extraClass = "display "		}		_, _ = w.WriteString(`<code class="language-math ` + extraClass + `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 nodesfunc (r *InlineRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {	reg.Register(KindInline, r.renderInline)	reg.Register(KindInlineBlock, r.renderInline)}