mirror of
https://github.com/go-gitea/gitea
synced 2025-07-06 02:27:20 +00:00
Fix markdown render behaviors (#34122)
* Fix #27645 * Add config options `MATH_CODE_BLOCK_DETECTION`, problematic syntaxes are disabled by default * Fix #33639 * Add config options `RENDER_OPTIONS_*`, old behaviors are kept
This commit is contained in:
@ -8,6 +8,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
)
|
||||
|
||||
// ExternalMarkupRenderers represents the external markup renderers
|
||||
@ -23,18 +24,33 @@ const (
|
||||
RenderContentModeIframe = "iframe"
|
||||
)
|
||||
|
||||
type MarkdownRenderOptions struct {
|
||||
NewLineHardBreak bool
|
||||
ShortIssuePattern bool // Actually it is a "markup" option because it is used in "post processor"
|
||||
}
|
||||
|
||||
type MarkdownMathCodeBlockOptions struct {
|
||||
ParseInlineDollar bool
|
||||
ParseInlineParentheses bool
|
||||
ParseBlockDollar bool
|
||||
ParseBlockSquareBrackets bool
|
||||
}
|
||||
|
||||
// Markdown settings
|
||||
var Markdown = struct {
|
||||
EnableHardLineBreakInComments bool
|
||||
EnableHardLineBreakInDocuments bool
|
||||
CustomURLSchemes []string `ini:"CUSTOM_URL_SCHEMES"`
|
||||
FileExtensions []string
|
||||
EnableMath bool
|
||||
RenderOptionsComment MarkdownRenderOptions `ini:"-"`
|
||||
RenderOptionsWiki MarkdownRenderOptions `ini:"-"`
|
||||
RenderOptionsRepoFile MarkdownRenderOptions `ini:"-"`
|
||||
|
||||
CustomURLSchemes []string `ini:"CUSTOM_URL_SCHEMES"` // Actually it is a "markup" option because it is used in "post processor"
|
||||
FileExtensions []string
|
||||
|
||||
EnableMath bool
|
||||
MathCodeBlockDetection []string
|
||||
MathCodeBlockOptions MarkdownMathCodeBlockOptions `ini:"-"`
|
||||
}{
|
||||
EnableHardLineBreakInComments: true,
|
||||
EnableHardLineBreakInDocuments: false,
|
||||
FileExtensions: strings.Split(".md,.markdown,.mdown,.mkd,.livemd", ","),
|
||||
EnableMath: true,
|
||||
FileExtensions: strings.Split(".md,.markdown,.mdown,.mkd,.livemd", ","),
|
||||
EnableMath: true,
|
||||
}
|
||||
|
||||
// MarkupRenderer defines the external parser configured in ini
|
||||
@ -60,6 +76,56 @@ type MarkupSanitizerRule struct {
|
||||
|
||||
func loadMarkupFrom(rootCfg ConfigProvider) {
|
||||
mustMapSetting(rootCfg, "markdown", &Markdown)
|
||||
const none = "none"
|
||||
|
||||
const renderOptionShortIssuePattern = "short-issue-pattern"
|
||||
const renderOptionNewLineHardBreak = "new-line-hard-break"
|
||||
cfgMarkdown := rootCfg.Section("markdown")
|
||||
parseMarkdownRenderOptions := func(key string, defaults []string) (ret MarkdownRenderOptions) {
|
||||
options := cfgMarkdown.Key(key).Strings(",")
|
||||
options = util.IfEmpty(options, defaults)
|
||||
for _, opt := range options {
|
||||
switch opt {
|
||||
case renderOptionShortIssuePattern:
|
||||
ret.ShortIssuePattern = true
|
||||
case renderOptionNewLineHardBreak:
|
||||
ret.NewLineHardBreak = true
|
||||
case none:
|
||||
ret = MarkdownRenderOptions{}
|
||||
case "":
|
||||
default:
|
||||
log.Error("Unknown markdown render option in %s: %s", key, opt)
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
Markdown.RenderOptionsComment = parseMarkdownRenderOptions("RENDER_OPTIONS_COMMENT", []string{renderOptionShortIssuePattern, renderOptionNewLineHardBreak})
|
||||
Markdown.RenderOptionsWiki = parseMarkdownRenderOptions("RENDER_OPTIONS_WIKI", []string{renderOptionShortIssuePattern})
|
||||
Markdown.RenderOptionsRepoFile = parseMarkdownRenderOptions("RENDER_OPTIONS_REPO_FILE", nil)
|
||||
|
||||
const mathCodeInlineDollar = "inline-dollar"
|
||||
const mathCodeInlineParentheses = "inline-parentheses"
|
||||
const mathCodeBlockDollar = "block-dollar"
|
||||
const mathCodeBlockSquareBrackets = "block-square-brackets"
|
||||
Markdown.MathCodeBlockDetection = util.IfEmpty(Markdown.MathCodeBlockDetection, []string{mathCodeInlineDollar, mathCodeBlockDollar})
|
||||
Markdown.MathCodeBlockOptions = MarkdownMathCodeBlockOptions{}
|
||||
for _, s := range Markdown.MathCodeBlockDetection {
|
||||
switch s {
|
||||
case mathCodeInlineDollar:
|
||||
Markdown.MathCodeBlockOptions.ParseInlineDollar = true
|
||||
case mathCodeInlineParentheses:
|
||||
Markdown.MathCodeBlockOptions.ParseInlineParentheses = true
|
||||
case mathCodeBlockDollar:
|
||||
Markdown.MathCodeBlockOptions.ParseBlockDollar = true
|
||||
case mathCodeBlockSquareBrackets:
|
||||
Markdown.MathCodeBlockOptions.ParseBlockSquareBrackets = true
|
||||
case none:
|
||||
Markdown.MathCodeBlockOptions = MarkdownMathCodeBlockOptions{}
|
||||
case "":
|
||||
default:
|
||||
log.Error("Unknown math code block detection option: %s", s)
|
||||
}
|
||||
}
|
||||
|
||||
MermaidMaxSourceCharacters = rootCfg.Section("markup").Key("MERMAID_MAX_SOURCE_CHARACTERS").MustInt(5000)
|
||||
ExternalMarkupRenderers = make([]*MarkupRenderer, 0, 10)
|
||||
|
Reference in New Issue
Block a user