Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
wxiaoguang committed Dec 25, 2024
1 parent 5feb1a6 commit 4bf8172
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 17 deletions.
5 changes: 5 additions & 0 deletions modules/markup/html_link.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"strings"

"code.gitea.io/gitea/modules/markup/common"
"code.gitea.io/gitea/modules/util"

"golang.org/x/net/html"
"golang.org/x/net/html/atom"
Expand Down Expand Up @@ -171,6 +172,10 @@ func linkProcessor(ctx *RenderContext, node *html.Node) {
}

uri := node.Data[m[0]:m[1]]
remaining := node.Data[m[1]:]
if util.IsLikelySplitLeftPart(remaining) {
return
}
replaceContent(node, m[0], m[1], createLink(ctx, uri, uri, "" /*link*/))
node = node.NextSibling.NextSibling
}
Expand Down
10 changes: 10 additions & 0 deletions modules/markup/html_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,16 @@ func TestRender_links(t *testing.T) {
test(
"ftps://gitea.com",
`<p>ftps://gitea.com</p>`)

t.Run("LinkSplit", func(t *testing.T) {
input, _ := util.SplitStringAtByteN("http://10.1.2.3", 12)
assert.Equal(t, "http://10…", input)
test(input, "<p>http://10…</p>")

input, _ = util.SplitStringAtByteN("http://10.1.2.3", 13)
assert.Equal(t, "http://10.…", input)
test(input, "<p>http://10.…</p>")
})
}

func TestRender_email(t *testing.T) {
Expand Down
17 changes: 16 additions & 1 deletion modules/util/string.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@

package util

import "unsafe"
import (
"strings"
"unsafe"
)

func isSnakeCaseUpper(c byte) bool {
return 'A' <= c && c <= 'Z'
Expand Down Expand Up @@ -95,3 +98,15 @@ func UnsafeBytesToString(b []byte) string {
func UnsafeStringToBytes(s string) []byte {
return unsafe.Slice(unsafe.StringData(s), len(s))
}

// SplitTrimSpace splits the string at given separator and trims leading and trailing space
func SplitTrimSpace(input, sep string) []string {
input = strings.TrimSpace(input)
var stringList []string
for _, s := range strings.Split(input, sep) {
if s = strings.TrimSpace(s); s != "" {
stringList = append(stringList, s)
}
}
return stringList
}
5 changes: 5 additions & 0 deletions modules/util/string_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,8 @@ func TestToSnakeCase(t *testing.T) {
assert.Equal(t, expected, ToSnakeCase(input))
}
}

func TestSplitTrimSpace(t *testing.T) {
assert.Equal(t, []string{"a", "b", "c"}, SplitTrimSpace("a\nb\nc", "\n"))
assert.Equal(t, []string{"a", "b"}, SplitTrimSpace("\r\na\n\r\nb\n\n", "\n"))
}
20 changes: 4 additions & 16 deletions modules/util/truncate.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ const (
asciiEllipsis = "..."
)

func IsLikelySplitLeftPart(s string) bool {
return strings.HasSuffix(s, utf8Ellipsis) || strings.HasSuffix(s, asciiEllipsis)
}

// SplitStringAtByteN splits a string at byte n accounting for rune boundaries. (Combining characters are not accounted for.)
func SplitStringAtByteN(input string, n int) (left, right string) {
if len(input) <= n {
Expand All @@ -38,19 +42,3 @@ func SplitStringAtByteN(input string, n int) (left, right string) {

return input[:end] + utf8Ellipsis, utf8Ellipsis + input[end:]
}

// SplitTrimSpace splits the string at given separator and trims leading and trailing space
func SplitTrimSpace(input, sep string) []string {
// Trim initial leading & trailing space
input = strings.TrimSpace(input)
// replace CRLF with LF
input = strings.ReplaceAll(input, "\r\n", "\n")

var stringList []string
for _, s := range strings.Split(input, sep) {
// trim leading and trailing space
stringList = append(stringList, strings.TrimSpace(s))
}

return stringList
}

0 comments on commit 4bf8172

Please sign in to comment.