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