github.com/seeker-insurance/kit@v0.0.13/str/normalize.go (about) 1 package str 2 3 import ( 4 "bytes" 5 "strings" 6 7 "github.com/seeker-insurance/kit/runeset" 8 "golang.org/x/text/unicode/norm" 9 ) 10 11 //NormEqual returns true if the NKFC normalized forms of both strings are equal. 12 func NormEqual(s, q string) bool { 13 return NKFC(s) == NKFC(q) 14 } 15 16 //NormFoldEqual returns true if the casefolded, NKFC normalized forms of both strings are equal. 17 func NormFoldEqual(s, q string) bool { 18 return strings.EqualFold(NKFC(s), NKFC(q)) 19 } 20 21 //NKFC normalizes a string to it's NKFC form 22 func NKFC(s string) string { 23 return norm.NFKC.String(s) 24 } 25 26 //NFKD normalizes a string to it's NFKD form 27 func NFKD(s string) string { 28 return norm.NFKD.String(s) 29 } 30 31 //NFD normalizes a string to it's NFD form 32 func NFD(s string) string { 33 return norm.NFD.String(s) 34 } 35 36 //NFC normalizes a string to it's NFC form 37 func NFC(s string) string { 38 return norm.NFC.String(s) 39 } 40 41 func removeRunesNotInSet(s string, set runeset.RuneSet) string { 42 var buf bytes.Buffer 43 for _, r := range s { 44 if set.Contains(r) { 45 buf.WriteRune(r) 46 } 47 } 48 return buf.String() 49 } 50 func removeRunesInSet(s string, set runeset.RuneSet) string { 51 var buf bytes.Buffer 52 for _, r := range s { 53 if !set.Contains(r) { 54 buf.WriteRune(r) 55 } 56 } 57 return buf.String() 58 }