1package entity
2
3import "unicode"
4
5// AccentMap maps base characters to their accented variants.
6// The order determines display order in the accent picker.
7var AccentMap = map[rune][]rune{
8 'a': {'à', 'á', 'â', 'ä', 'ã', 'å', 'æ'},
9 'c': {'ç', 'ć', 'č'},
10 'e': {'è', 'é', 'ê', 'ë', 'ę', 'ė'},
11 'i': {'ì', 'í', 'î', 'ï', 'į'},
12 'n': {'ñ', 'ń'},
13 'o': {'ò', 'ó', 'ô', 'ö', 'õ', 'ø', 'œ'},
14 's': {'ß', 'ś', 'š'},
15 'u': {'ù', 'ú', 'û', 'ü', 'ū'},
16 'y': {'ÿ', 'ý'},
17}
18
19// HasAccents returns true if the given character has accent variants.
20func HasAccents(char rune) bool {
21 lower := unicode.ToLower(char)
22 _, ok := AccentMap[lower]
23 return ok
24}
25
26// GetAccents returns the accent variants for a character.
27// If uppercase is true, returns uppercase variants.
28// Returns nil if the character has no accent variants.
29func GetAccents(char rune, uppercase bool) []rune {
30 lower := unicode.ToLower(char)
31 accents, ok := AccentMap[lower]
32 if !ok {
33 return nil
34 }
35
36 if !uppercase {
37 return accents
38 }
39
40 // Return uppercase versions
41 result := make([]rune, len(accents))
42 for i, a := range accents {
43 result[i] = unicode.ToUpper(a)
44 }
45 return result
46}