From 4ed5044dea94872e025f585debf7a16e6bd6bbdb Mon Sep 17 00:00:00 2001 From: charles <30816317+charles7668@users.noreply.github.com> Date: Thu, 20 Jun 2024 10:12:54 +0800 Subject: [PATCH] Fix markdown math brackets render problem (#31420) Close #31371, support `($ ... $)` like GitHub Co-authored-by: wxiaoguang (cherry picked from commit 90a3c20e7996e2db577a51d37f2190e2e990a22a) Conflicts: modules/markup/markdown/markdown_test.go trivial context conflict (cherry picked from commit b53be9d45c7f12c9a8c8f3c9b71340d37dfc9fec) (cherry picked from commit 7fbcc58062c5cad5c4c8674915ea0fffa659b51d) --- modules/markup/markdown/markdown_test.go | 4 ++++ modules/markup/markdown/math/inline_parser.go | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/markup/markdown/markdown_test.go b/modules/markup/markdown/markdown_test.go index 3e1d75b291..5d33d89748 100644 --- a/modules/markup/markdown/markdown_test.go +++ b/modules/markup/markdown/markdown_test.go @@ -549,6 +549,10 @@ func TestMathBlock(t *testing.T) { `$$a`, `

$$a

` + nl, }, + { + "$a$ ($b$) [$c$] {$d$}", + `

a (b) [$c$] {$d$}

` + nl, + }, } for _, test := range testcases { diff --git a/modules/markup/markdown/math/inline_parser.go b/modules/markup/markdown/math/inline_parser.go index 862234e69b..614cf329af 100644 --- a/modules/markup/markdown/math/inline_parser.go +++ b/modules/markup/markdown/math/inline_parser.go @@ -45,6 +45,10 @@ func isPunctuation(b byte) bool { return b == '.' || b == '!' || b == '?' || b == ',' || b == ';' || b == ':' } +func isBracket(b byte) bool { + return b == ')' +} + func isAlphanumeric(b byte) bool { return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9') } @@ -84,7 +88,7 @@ func (parser *inlineParser) Parse(parent ast.Node, block text.Reader, pc parser. break } suceedingCharacter := line[pos] - if !isPunctuation(suceedingCharacter) && !(suceedingCharacter == ' ') { + if !isPunctuation(suceedingCharacter) && !(suceedingCharacter == ' ') && !isBracket(suceedingCharacter) { return nil } if line[ender-1] != '\\' {