Something went wrong on our end
-
Volker Schukai authoredVolker Schukai authored
util.go 1.75 KiB
package data
import (
"bytes"
"unicode"
)
func inArray(needle any, hystack any) bool {
switch key := needle.(type) {
case string:
for _, item := range hystack.([]string) {
if key == item {
return true
}
}
case int:
for _, item := range hystack.([]int) {
if key == item {
return true
}
}
case int64:
for _, item := range hystack.([]int64) {
if key == item {
return true
}
}
default:
return false
}
return false
}
func wordWrap(str string, width uint, br string) string {
init := make([]byte, 0, len(str))
buf := bytes.NewBuffer(init)
var current uint
var wordbuf, spacebuf bytes.Buffer
for _, char := range str {
if char == '\n' {
if wordbuf.Len() == 0 {
if current+uint(spacebuf.Len()) > width {
current = 0
} else {
current += uint(spacebuf.Len())
_, _ = spacebuf.WriteTo(buf)
}
spacebuf.Reset()
} else {
current += uint(spacebuf.Len() + wordbuf.Len())
_, _ = spacebuf.WriteTo(buf)
spacebuf.Reset()
_, _ = wordbuf.WriteTo(buf)
wordbuf.Reset()
}
buf.WriteRune(char)
current = 0
} else if unicode.IsSpace(char) {
if spacebuf.Len() == 0 || wordbuf.Len() > 0 {
current += uint(spacebuf.Len() + wordbuf.Len())
_, _ = spacebuf.WriteTo(buf)
spacebuf.Reset()
_, _ = wordbuf.WriteTo(buf)
wordbuf.Reset()
}
spacebuf.WriteRune(char)
} else {
wordbuf.WriteRune(char)
if current+uint(spacebuf.Len()+wordbuf.Len()) > width && uint(wordbuf.Len()) < width {
buf.WriteString(br)
current = 0
spacebuf.Reset()
}
}
}
if wordbuf.Len() == 0 {
if current+uint(spacebuf.Len()) <= width {
_, _ = spacebuf.WriteTo(buf)
}
} else {
_, _ = spacebuf.WriteTo(buf)
_, _ = wordbuf.WriteTo(buf)
}
return buf.String()
}