github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/util/sorting/alphabetic.go (about)

     1  package sorting
     2  
     3  import (
     4  	"unicode"
     5  )
     6  
     7  type AlphabetSorter func([]string) func(i, j int) bool
     8  
     9  // LessIgnoreCase returns true if first is alphabetically less than second.
    10  func LessIgnoreCase(first string, second string) bool {
    11  	iRunes := []rune(first)
    12  	jRunes := []rune(second)
    13  
    14  	max := len(iRunes)
    15  	if max > len(jRunes) {
    16  		max = len(jRunes)
    17  	}
    18  
    19  	for idx := 0; idx < max; idx++ {
    20  		ir := iRunes[idx]
    21  		jr := jRunes[idx]
    22  
    23  		lir := unicode.ToLower(ir)
    24  		ljr := unicode.ToLower(jr)
    25  
    26  		if lir == ljr {
    27  			continue
    28  		}
    29  
    30  		return lir < ljr
    31  	}
    32  
    33  	return false
    34  }
    35  
    36  // SortAlphabeticFunc returns a `less()` comparator for sorting strings while
    37  // respecting case.
    38  func SortAlphabeticFunc(list []string) func(i, j int) bool {
    39  	return func(i, j int) bool {
    40  		return LessIgnoreCase(list[i], list[j])
    41  	}
    42  }