| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Copyright 2022 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package math
-
- import (
- "code.gitea.io/gitea/modules/markup/internal"
- giteaUtil "code.gitea.io/gitea/modules/util"
-
- "github.com/yuin/goldmark"
- "github.com/yuin/goldmark/parser"
- "github.com/yuin/goldmark/renderer"
- "github.com/yuin/goldmark/util"
- )
-
- type Options struct {
- Enabled bool
- ParseInlineDollar bool // inline $$ xxx $$ text
- ParseInlineParentheses bool // inline \( xxx \) text
- ParseBlockDollar bool // block $$ multiple-line $$ text
- ParseBlockSquareBrackets bool // block \[ multiple-line \] text
- }
-
- // Extension is a math extension
- type Extension struct {
- renderInternal *internal.RenderInternal
- options Options
- }
-
- // NewExtension creates a new math extension with the provided options
- func NewExtension(renderInternal *internal.RenderInternal, opts ...Options) *Extension {
- opt := giteaUtil.OptionalArg(opts)
- r := &Extension{
- renderInternal: renderInternal,
- options: opt,
- }
- return r
- }
-
- // Extend extends goldmark with our parsers and renderers
- func (e *Extension) Extend(m goldmark.Markdown) {
- if !e.options.Enabled {
- return
- }
-
- var inlines []util.PrioritizedValue
- if e.options.ParseInlineParentheses {
- inlines = append(inlines, util.Prioritized(NewInlineParenthesesParser(), 501))
- }
- inlines = append(inlines, util.Prioritized(NewInlineDollarParser(e.options.ParseInlineDollar), 502))
-
- m.Parser().AddOptions(parser.WithInlineParsers(inlines...))
- m.Parser().AddOptions(parser.WithBlockParsers(
- util.Prioritized(NewBlockParser(e.options.ParseBlockDollar, e.options.ParseBlockSquareBrackets), 701),
- ))
- m.Renderer().AddOptions(renderer.WithNodeRenderers(
- util.Prioritized(NewBlockRenderer(e.renderInternal), 501),
- util.Prioritized(NewInlineRenderer(e.renderInternal), 502),
- ))
- }
|