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() }