summaryrefslogtreecommitdiffstats
path: root/modules/util/truncate.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
committerDaniel Baumann <daniel@debian.org>2024-12-12 23:57:56 +0100
commite68b9d00a6e05b3a941f63ffb696f91e554ac5ec (patch)
tree97775d6c13b0f416af55314eb6a89ef792474615 /modules/util/truncate.go
parentInitial commit. (diff)
downloadforgejo-e68b9d00a6e05b3a941f63ffb696f91e554ac5ec.tar.xz
forgejo-e68b9d00a6e05b3a941f63ffb696f91e554ac5ec.zip
Adding upstream version 9.0.3.
Signed-off-by: Daniel Baumann <daniel@debian.org>
Diffstat (limited to '')
-rw-r--r--modules/util/truncate.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/modules/util/truncate.go b/modules/util/truncate.go
new file mode 100644
index 0000000..77b116e
--- /dev/null
+++ b/modules/util/truncate.go
@@ -0,0 +1,54 @@
+// 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 = "..."
+)
+
+// 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:]
+}
+
+// SplitTrimSpace splits the string at given separator and trims leading and trailing space
+func SplitTrimSpace(input, sep string) []string {
+ // 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
+}