/* * Copyright 2024 the KubeSphere Authors. * Please refer to the LICENSE file in the root directory of the project. * https://github.com/kubesphere/kubesphere/blob/master/LICENSE */ package stringutils import ( "regexp" "strings" "unicode/utf8" "github.com/asaskevich/govalidator" ) const ansi = "[\u001B\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[a-zA-Z\\d]*)*)?\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PRZcf-ntqry=><~]))" var re = regexp.MustCompile(ansi) // Creates an slice of slice values not included in the other given slice. func Diff(base, exclude []string) (result []string) { excludeMap := make(map[string]bool) for _, s := range exclude { excludeMap[s] = true } for _, s := range base { if !excludeMap[s] { result = append(result, s) } } return result } func Unique(ss []string) (result []string) { smap := make(map[string]bool) for _, s := range ss { smap[s] = true } for s := range smap { result = append(result, s) } return result } func CamelCaseToUnderscore(str string) string { return govalidator.CamelCaseToUnderscore(str) } func UnderscoreToCamelCase(str string) string { return govalidator.UnderscoreToCamelCase(str) } func FindString(array []string, str string) int { for index, s := range array { if str == s { return index } } return -1 } func StringIn(str string, array []string) bool { return FindString(array, str) > -1 } func Reverse(s string) string { size := len(s) buf := make([]byte, size) for start := 0; start < size; { r, n := utf8.DecodeRuneInString(s[start:]) start += n utf8.EncodeRune(buf[size-start:], r) } return string(buf) } func Split(str string, sep string) []string { if str == "" { return nil } return strings.Split(str, sep) } func StripAnsi(str string) string { return re.ReplaceAllString(str, "") } func ShortenString(str string, n int) string { if len(str) <= n { return str } return str[:n] }