mirror of
https://gitcode.com/gitea/gitea.git
synced 2025-12-13 02:37:49 +08:00
Backport #36124 by @wxiaoguang Fix #36108 Fix #36107 Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
@@ -30,6 +30,10 @@ func TestMathRender(t *testing.T) {
|
|||||||
"$ a $",
|
"$ a $",
|
||||||
`<p><code class="language-math">a</code></p>` + nl,
|
`<p><code class="language-math">a</code></p>` + nl,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"$a$$b$",
|
||||||
|
`<p><code class="language-math">a</code><code class="language-math">b</code></p>` + nl,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"$a$ $b$",
|
"$a$ $b$",
|
||||||
`<p><code class="language-math">a</code> <code class="language-math">b</code></p>` + nl,
|
`<p><code class="language-math">a</code> <code class="language-math">b</code></p>` + nl,
|
||||||
@@ -59,7 +63,7 @@ func TestMathRender(t *testing.T) {
|
|||||||
`<p>a$b $a a$b b$</p>` + nl,
|
`<p>a$b $a a$b b$</p>` + nl,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"a$x$",
|
"a$x$", // Pattern: "word$other$" The real world example is: "Price is between US$1 and US$2.", so don't parse this.
|
||||||
`<p>a$x$</p>` + nl,
|
`<p>a$x$</p>` + nl,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -70,6 +74,10 @@ func TestMathRender(t *testing.T) {
|
|||||||
"$a$ ($b$) [$c$] {$d$}",
|
"$a$ ($b$) [$c$] {$d$}",
|
||||||
`<p><code class="language-math">a</code> (<code class="language-math">b</code>) [$c$] {$d$}</p>` + nl,
|
`<p><code class="language-math">a</code> (<code class="language-math">b</code>) [$c$] {$d$}</p>` + nl,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"[$a$](link)",
|
||||||
|
`<p><a href="/link" rel="nofollow"><code class="language-math">a</code></a></p>` + nl,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"$$a$$",
|
"$$a$$",
|
||||||
`<p><code class="language-math">a</code></p>` + nl,
|
`<p><code class="language-math">a</code></p>` + nl,
|
||||||
|
|||||||
@@ -54,6 +54,10 @@ func isAlphanumeric(b byte) bool {
|
|||||||
return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9')
|
return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isInMarkdownLinkText(block text.Reader, lineAfter []byte) bool {
|
||||||
|
return block.PrecendingCharacter() == '[' && bytes.HasPrefix(lineAfter, []byte("]("))
|
||||||
|
}
|
||||||
|
|
||||||
// Parse parses the current line and returns a result of parsing.
|
// Parse parses the current line and returns a result of parsing.
|
||||||
func (parser *inlineParser) Parse(parent ast.Node, block text.Reader, pc parser.Context) ast.Node {
|
func (parser *inlineParser) Parse(parent ast.Node, block text.Reader, pc parser.Context) ast.Node {
|
||||||
line, _ := block.PeekLine()
|
line, _ := block.PeekLine()
|
||||||
@@ -115,7 +119,9 @@ func (parser *inlineParser) Parse(parent ast.Node, block text.Reader, pc parser.
|
|||||||
}
|
}
|
||||||
// check valid ending character
|
// check valid ending character
|
||||||
isValidEndingChar := isPunctuation(succeedingCharacter) || isParenthesesClose(succeedingCharacter) ||
|
isValidEndingChar := isPunctuation(succeedingCharacter) || isParenthesesClose(succeedingCharacter) ||
|
||||||
succeedingCharacter == ' ' || succeedingCharacter == '\n' || succeedingCharacter == 0
|
succeedingCharacter == ' ' || succeedingCharacter == '\n' || succeedingCharacter == 0 ||
|
||||||
|
succeedingCharacter == '$' ||
|
||||||
|
isInMarkdownLinkText(block, line[i+len(stopMark):])
|
||||||
if checkSurrounding && !isValidEndingChar {
|
if checkSurrounding && !isValidEndingChar {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user