aboutsummaryrefslogtreecommitdiffstats
path: root/modules/markup
diff options
context:
space:
mode:
authorCaiCandong <50507092+CaiCandong@users.noreply.github.com>2023-08-09 17:30:31 +0800
committerGitHub <noreply@github.com>2023-08-09 09:30:31 +0000
commitd41aee1d1e1cb07ccf71330dd3414beff603e48a (patch)
treef889c363d90ab967cfbd348093a6a9adbf4ae03c /modules/markup
parent220f236ff550edd670fbe660eb6dcbeb7552a061 (diff)
downloadgitea-d41aee1d1e1cb07ccf71330dd3414beff603e48a.tar.gz
gitea-d41aee1d1e1cb07ccf71330dd3414beff603e48a.zip
Make `user-content-* ` consistent with github (#26388)
Fix #26367 Related #19745 Thanks @lazyky for providing test cases
Diffstat (limited to 'modules/markup')
-rw-r--r--modules/markup/common/footnote.go13
-rw-r--r--modules/markup/common/footnote_test.go60
2 files changed, 64 insertions, 9 deletions
diff --git a/modules/markup/common/footnote.go b/modules/markup/common/footnote.go
index 0e75e2adfd..4406803694 100644
--- a/modules/markup/common/footnote.go
+++ b/modules/markup/common/footnote.go
@@ -29,17 +29,12 @@ func CleanValue(value []byte) []byte {
value = bytes.TrimSpace(value)
rs := bytes.Runes(value)
result := make([]rune, 0, len(rs))
- needsDash := false
for _, r := range rs {
- switch {
- case unicode.IsLetter(r) || unicode.IsNumber(r) || r == '_':
- if needsDash && len(result) > 0 {
- result = append(result, '-')
- }
- needsDash = false
+ if unicode.IsLetter(r) || unicode.IsNumber(r) || r == '_' || r == '-' {
result = append(result, unicode.ToLower(r))
- default:
- needsDash = true
+ }
+ if unicode.IsSpace(r) {
+ result = append(result, '-')
}
}
return []byte(string(result))
diff --git a/modules/markup/common/footnote_test.go b/modules/markup/common/footnote_test.go
new file mode 100644
index 0000000000..2327a7b14b
--- /dev/null
+++ b/modules/markup/common/footnote_test.go
@@ -0,0 +1,60 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+package common
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestCleanValue(t *testing.T) {
+ tests := []struct {
+ param string
+ expect string
+ }{
+ // Github behavior test cases
+ {"", ""},
+ {"test(0)", "test0"},
+ {"test!1", "test1"},
+ {"test:2", "test2"},
+ {"test*3", "test3"},
+ {"test!4", "test4"},
+ {"test:5", "test5"},
+ {"test*6", "test6"},
+ {"test:6 a", "test6-a"},
+ {"test:6 !b", "test6-b"},
+ {"test:ad # df", "testad--df"},
+ {"test:ad #23 df 2*/*", "testad-23-df-2"},
+ {"test:ad 23 df 2*/*", "testad-23-df-2"},
+ {"test:ad # 23 df 2*/*", "testad--23-df-2"},
+ {"Anchors in Markdown", "anchors-in-markdown"},
+ {"a_b_c", "a_b_c"},
+ {"a-b-c", "a-b-c"},
+ {"a-b-c----", "a-b-c----"},
+ {"test:6a", "test6a"},
+ {"test:a6", "testa6"},
+ {"tes a a a a", "tes-a-a---a--a"},
+ {" tes a a a a ", "tes-a-a---a--a"},
+ {"Header with \"double quotes\"", "header-with-double-quotes"},
+ {"Placeholder to force scrolling on link's click", "placeholder-to-force-scrolling-on-links-click"},
+ {"tes()", "tes"},
+ {"tes(0)", "tes0"},
+ {"tes{0}", "tes0"},
+ {"tes[0]", "tes0"},
+ {"test【0】", "test0"},
+ {"tes…@a", "tesa"},
+ {"tes¥& a", "tes-a"},
+ {"tes= a", "tes-a"},
+ {"tes|a", "tesa"},
+ {"tes\\a", "tesa"},
+ {"tes/a", "tesa"},
+ {"a啊啊b", "a啊啊b"},
+ {"c🤔️🤔️d", "cd"},
+ {"a⚡a", "aa"},
+ {"e.~f", "ef"},
+ }
+ for _, test := range tests {
+ assert.Equal(t, []byte(test.expect), CleanValue([]byte(test.param)), test.param)
+ }
+}