all repos — emoji @ v1.0.0

A minimalistic emoji package for Go (golang)

internal/generator/strutil.go (view raw)

  1package main
  2
  3import (
  4	"regexp"
  5	"strings"
  6	"unicode"
  7)
  8
  9var (
 10	nonAlphaNumRegex = regexp.MustCompile(`[^\w\d]+`)
 11	whitespaceRegex  = regexp.MustCompile(`\s+`)
 12
 13	changes = map[string]string{
 14		"*":    "asterisk",
 15		"#":    "hash",
 16		"1st":  "first",
 17		"2nd":  "second",
 18		"3rd":  "third",
 19		"&":    "and",
 20		"U.S.": "US",
 21		"Š":    "S",
 22		"š":    "s",
 23		"Đ":    "Dj",
 24		"đ":    "dj",
 25		"Ž":    "Z",
 26		"ž":    "z",
 27		"Č":    "C",
 28		"č":    "c",
 29		"Ć":    "C",
 30		"ć":    "c",
 31		"À":    "A",
 32		"Á":    "A",
 33		"Â":    "A",
 34		"Ã":    "A",
 35		"Ä":    "A",
 36		"Å":    "A",
 37		"Æ":    "A",
 38		"Ç":    "C",
 39		"È":    "E",
 40		"É":    "E",
 41		"Ê":    "E",
 42		"Ë":    "E",
 43		"Ì":    "I",
 44		"Í":    "I",
 45		"Î":    "I",
 46		"Ï":    "I",
 47		"Ñ":    "N",
 48		"Ò":    "O",
 49		"Ó":    "O",
 50		"Ô":    "O",
 51		"Õ":    "O",
 52		"Ö":    "O",
 53		"Ø":    "O",
 54		"Ù":    "U",
 55		"Ú":    "U",
 56		"Û":    "U",
 57		"Ü":    "U",
 58		"Ý":    "Y",
 59		"Þ":    "B",
 60		"ß":    "Ss",
 61		"à":    "a",
 62		"á":    "a",
 63		"â":    "a",
 64		"ã":    "a",
 65		"ä":    "a",
 66		"å":    "a",
 67		"æ":    "a",
 68		"ç":    "c",
 69		"è":    "e",
 70		"é":    "e",
 71		"ê":    "e",
 72		"ë":    "e",
 73		"ì":    "i",
 74		"í":    "i",
 75		"î":    "i",
 76		"ï":    "i",
 77		"ð":    "o",
 78		"ñ":    "n",
 79		"ò":    "o",
 80		"ó":    "o",
 81		"ô":    "o",
 82		"õ":    "o",
 83		"ö":    "o",
 84		"ø":    "o",
 85		"ù":    "u",
 86		"ú":    "u",
 87		"û":    "u",
 88		"ý":    "y",
 89		"þ":    "b",
 90		"ÿ":    "y",
 91		"Ŕ":    "R",
 92		"ŕ":    "r",
 93	}
 94)
 95
 96// clean makes string more cleaner.
 97// It changes non-latin letters with latin version.
 98// It removes non–alpha-numeric characters.
 99func clean(str string) string {
100	for o, n := range changes {
101		str = strings.ReplaceAll(str, o, n)
102	}
103
104	str = nonAlphaNumRegex.ReplaceAllString(str, " ")
105
106	return str
107}
108
109// removeSpaces removes consecutive whitespaces.
110func removeSpaces(str string) string {
111	return whitespaceRegex.ReplaceAllString(str, "")
112}
113
114// snakeCase converts string to snake_case from PascalCase
115func snakeCase(str string) string {
116	var output strings.Builder
117	for i, r := range str {
118		switch {
119		case unicode.IsUpper(r):
120			if i != 0 {
121				output.WriteRune('_')
122			}
123			output.WriteRune(unicode.ToLower(r))
124		case unicode.IsDigit(r):
125			if i != 0 && !unicode.IsDigit(rune(str[i-1])) {
126				output.WriteRune('_')
127			}
128			output.WriteRune(r)
129		default:
130			output.WriteRune(r)
131		}
132	}
133
134	return output.String()
135}
136
137func makeAlias(str string) string {
138	return ":" + str + ":"
139}