Initial commit, source code of Gitea 1.23.1
This commit is contained in:
44
modules/util/truncate.go
Normal file
44
modules/util/truncate.go
Normal file
@@ -0,0 +1,44 @@
|
||||
// Copyright 2021 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package util
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
// in UTF8 "…" is 3 bytes so doesn't really gain us anything...
|
||||
const (
|
||||
utf8Ellipsis = "…"
|
||||
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 {
|
||||
return input, ""
|
||||
}
|
||||
|
||||
if !utf8.ValidString(input) {
|
||||
if n-3 < 0 {
|
||||
return input, ""
|
||||
}
|
||||
return input[:n-3] + asciiEllipsis, asciiEllipsis + input[n-3:]
|
||||
}
|
||||
|
||||
end := 0
|
||||
for end <= n-3 {
|
||||
_, size := utf8.DecodeRuneInString(input[end:])
|
||||
if end+size > n-3 {
|
||||
break
|
||||
}
|
||||
end += size
|
||||
}
|
||||
|
||||
return input[:end] + utf8Ellipsis, utf8Ellipsis + input[end:]
|
||||
}
|
Reference in New Issue
Block a user