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  }