rs/
resources.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
/*! Statically linked resources.
 * This could be done using GResource, but that would need additional work.
 */

// TODO: keep a list of what is a language layout,
// and what a convenience layout. "_wide" is not a layout,
// neither is "number"
/// List of builtin layouts
static KEYBOARDS: &[(&'static str, &'static str)] = &[
    // layouts: us must be left as first, as it is the,
    // fallback layout.
    ("us", include_str!("../data/keyboards/us.yaml")),
    ("us_wide", include_str!("../data/keyboards/us_wide.yaml")),

    // Language layouts: keep alphabetical.
    ("am", include_str!("../data/keyboards/am.yaml")),
    ("am_wide", include_str!("../data/keyboards/am_wide.yaml")),
    ("am+phonetic", include_str!("../data/keyboards/am+phonetic.yaml")),
    ("am+phonetic_wide", include_str!("../data/keyboards/am+phonetic_wide.yaml")),

    ("ara", include_str!("../data/keyboards/ara.yaml")),
    ("ara_wide", include_str!("../data/keyboards/ara_wide.yaml")),

    ("be", include_str!("../data/keyboards/be.yaml")),
    ("be_wide", include_str!("../data/keyboards/be_wide.yaml")),

    ("bg", include_str!("../data/keyboards/bg.yaml")),
    ("bg_wide", include_str!("../data/keyboards/bg_wide.yaml")),
    ("bg+phonetic", include_str!("../data/keyboards/bg+phonetic.yaml")),
    ("bg+phonetic_wide", include_str!("../data/keyboards/bg+phonetic_wide.yaml")),

    ("br", include_str!("../data/keyboards/br.yaml")),
    ("br_wide", include_str!("../data/keyboards/br_wide.yaml")),
    
    ("by", include_str!("../data/keyboards/by.yaml")),
    ("by_wide", include_str!("../data/keyboards/by_wide.yaml")),

    ("ca", include_str!("../data/keyboards/ca.yaml")),
    ("ca_wide", include_str!("../data/keyboards/ca_wide.yaml")),
    
    ("ch", include_str!("../data/keyboards/ch.yaml")),
    ("ch_wide", include_str!("../data/keyboards/ch_wide.yaml")),
    ("ch+de", include_str!("../data/keyboards/ch+de.yaml")),
    ("ch+de_wide", include_str!("../data/keyboards/ch+de_wide.yaml")),
    ("ch+fr", include_str!("../data/keyboards/ch+fr.yaml")),
    ("ch+fr_wide", include_str!("../data/keyboards/ch+fr_wide.yaml")),

    ("cz", include_str!("../data/keyboards/cz.yaml")),
    ("cz_wide", include_str!("../data/keyboards/cz_wide.yaml")),
    ("cz+qwerty", include_str!("../data/keyboards/cz+qwerty.yaml")),
    ("cz+qwerty_wide", include_str!("../data/keyboards/cz+qwerty_wide.yaml")),

    ("de", include_str!("../data/keyboards/de.yaml")),
    ("de_wide", include_str!("../data/keyboards/de_wide.yaml")),
    ("de+bone", include_str!("../data/keyboards/de+bone.yaml")),
    ("de+bone_wide", include_str!("../data/keyboards/de+bone_wide.yaml")),
    ("de+neo", include_str!("../data/keyboards/de+neo.yaml")),
    ("de+neo_wide", include_str!("../data/keyboards/de+neo_wide.yaml")),

    ("dk", include_str!("../data/keyboards/dk.yaml")),
    ("dk_wide", include_str!("../data/keyboards/dk_wide.yaml")),

    ("epo", include_str!("../data/keyboards/epo.yaml")),
    ("epo_wide", include_str!("../data/keyboards/epo_wide.yaml")),

    ("es", include_str!("../data/keyboards/es.yaml")),
    ("es_wide", include_str!("../data/keyboards/es_wide.yaml")),
    ("es+cat", include_str!("../data/keyboards/es+cat.yaml")),
    ("es+cat_wide", include_str!("../data/keyboards/es+cat_wide.yaml")),

    ("fi", include_str!("../data/keyboards/fi.yaml")),
    ("fi_wide", include_str!("../data/keyboards/fi_wide.yaml")),

    ("fr", include_str!("../data/keyboards/fr.yaml")),
    ("fr_wide", include_str!("../data/keyboards/fr_wide.yaml")),
    ("fr+bepo", include_str!("../data/keyboards/fr+bepo.yaml")),
    ("fr+bepo_wide", include_str!("../data/keyboards/fr+bepo_wide.yaml")),

    ("ge", include_str!("../data/keyboards/ge.yaml")),
    ("ge_wide", include_str!("../data/keyboards/ge_wide.yaml")),

    ("gr", include_str!("../data/keyboards/gr.yaml")),
    ("gr_wide", include_str!("../data/keyboards/gr_wide.yaml")),
    ("gr+polytonic", include_str!("../data/keyboards/gr+polytonic.yaml")),
    ("gr+polytonic_wide", include_str!("../data/keyboards/gr+polytonic_wide.yaml")),

    ("hu", include_str!("../data/keyboards/hu.yaml")),
    ("hu_wide", include_str!("../data/keyboards/hu_wide.yaml")),

    ("il", include_str!("../data/keyboards/il.yaml")),
    ("il_wide", include_str!("../data/keyboards/il_wide.yaml")),
    
    ("in+mal", include_str!("../data/keyboards/in+mal.yaml")),
    ("in+mal_wide", include_str!("../data/keyboards/in+mal_wide.yaml")),

    ("ir", include_str!("../data/keyboards/ir.yaml")),
    ("ir_wide", include_str!("../data/keyboards/ir_wide.yaml")),

    ("it", include_str!("../data/keyboards/it.yaml")),
    ("it_wide", include_str!("../data/keyboards/it_wide.yaml")),
    ("it+fur", include_str!("../data/keyboards/it+fur.yaml")),
    ("it+fur_wide", include_str!("../data/keyboards/it+fur_wide.yaml")),

    ("jp", include_str!("../data/keyboards/jp.yaml")),
    ("jp_wide", include_str!("../data/keyboards/jp_wide.yaml")),
    ("jp+kana", include_str!("../data/keyboards/jp+kana.yaml")),
    ("jp+kana_wide", include_str!("../data/keyboards/jp+kana_wide.yaml")),

    ("no", include_str!("../data/keyboards/no.yaml")),
    ("no_wide", include_str!("../data/keyboards/no_wide.yaml")),

    ("pl", include_str!("../data/keyboards/pl.yaml")),
    ("pl_wide", include_str!("../data/keyboards/pl_wide.yaml")),

    ("pt", include_str!("../data/keyboards/pt.yaml")),
    ("pt_wide", include_str!("../data/keyboards/pt_wide.yaml")),

    ("ro", include_str!("../data/keyboards/ro.yaml")),
    ("ro_wide", include_str!("../data/keyboards/ro_wide.yaml")),

    ("rs", include_str!("../data/keyboards/rs.yaml")),
    ("rs_wide", include_str!("../data/keyboards/rs_wide.yaml")),
    ("rs+latin", include_str!("../data/keyboards/rs+latin.yaml")),
    ("rs+latin_wide", include_str!("../data/keyboards/rs+latin_wide.yaml")),
    ("rs+latinunicode", include_str!("../data/keyboards/rs+latinunicode.yaml")),
    ("rs+latinunicode_wide", include_str!("../data/keyboards/rs+latinunicode_wide.yaml")),

    ("ru", include_str!("../data/keyboards/ru.yaml")),
    ("ru_wide", include_str!("../data/keyboards/ru_wide.yaml")),

    ("se", include_str!("../data/keyboards/se.yaml")),
    ("se_wide", include_str!("../data/keyboards/se_wide.yaml")),

    ("si", include_str!("../data/keyboards/si.yaml")),
    ("si_wide", include_str!("../data/keyboards/si_wide.yaml")),

    ("th", include_str!("../data/keyboards/th.yaml")),
    ("th_wide", include_str!("../data/keyboards/th_wide.yaml")),

    ("tr", include_str!("../data/keyboards/tr.yaml")),
    ("tr_wide", include_str!("../data/keyboards/tr_wide.yaml")),
    ("tr+f", include_str!("../data/keyboards/tr+f.yaml")),
    ("tr+f_wide", include_str!("../data/keyboards/tr+f_wide.yaml")),

    ("ua", include_str!("../data/keyboards/ua.yaml")),
    ("ua_wide", include_str!("../data/keyboards/ua_wide.yaml")),

    ("us+colemak", include_str!("../data/keyboards/us+colemak.yaml")),
    ("us+colemak_wide", include_str!("../data/keyboards/us+colemak_wide.yaml")),
    ("us+dvorak", include_str!("../data/keyboards/us+dvorak.yaml")),
    ("us+dvorak_wide", include_str!("../data/keyboards/us+dvorak_wide.yaml")),

    // Email
    ("email/us", include_str!("../data/keyboards/email/us.yaml")),
    ("email/us_wide", include_str!("../data/keyboards/email/us_wide.yaml")),

    // URL
    ("url/us", include_str!("../data/keyboards/url/us.yaml")),
    ("url/us_wide", include_str!("../data/keyboards/url/us_wide.yaml")),

    // Others
    ("number/us", include_str!("../data/keyboards/number/us.yaml")),
    ("number/us_wide", include_str!("../data/keyboards/number/us_wide.yaml")),
    ("pin/us", include_str!("../data/keyboards/pin/us.yaml")),
    ("pin/us_wide", include_str!("../data/keyboards/pin/us_wide.yaml")),

    // Terminal
    ("terminal/de", include_str!("../data/keyboards/terminal/de.yaml")),
    ("terminal/de_wide",   include_str!("../data/keyboards/terminal/de_wide.yaml")),

    ("terminal/es", include_str!("../data/keyboards/terminal/es.yaml")),
    ("terminal/es_wide",   include_str!("../data/keyboards/terminal/es_wide.yaml")),

    ("terminal/fr", include_str!("../data/keyboards/terminal/fr.yaml")),
    ("terminal/fr_wide", include_str!("../data/keyboards/terminal/fr_wide.yaml")),
    ("terminal/fr+bepo", include_str!("../data/keyboards/terminal/fr+bepo.yaml")),
    ("terminal/fr+bepo_wide", include_str!("../data/keyboards/terminal/fr+bepo_wide.yaml")),

    ("terminal/us", include_str!("../data/keyboards/terminal/us.yaml")),
    ("terminal/us_wide",   include_str!("../data/keyboards/terminal/us_wide.yaml")),
    ("terminal/us+dvorak", include_str!("../data/keyboards/terminal/us+dvorak.yaml")),
    ("terminal/us+dvorak_wide",   include_str!("../data/keyboards/terminal/us+dvorak_wide.yaml")),

    // Overlays
    ("emoji/us", include_str!("../data/keyboards/emoji/us.yaml")),
    ("emoji/us_wide", include_str!("../data/keyboards/emoji/us_wide.yaml")),

    // Workaround: Fallback to more appropriate layouts than US-English.
    // TODO: Consider creating layouts for these, if these are supposed to be different.
    ("at", include_str!("../data/keyboards/de.yaml")),
    ("at_wide", include_str!("../data/keyboards/de_wide.yaml")),

    ("latam", include_str!("../data/keyboards/es.yaml")),
    ("latam_wide", include_str!("../data/keyboards/es_wide.yaml")),

    ("terminal/at", include_str!("../data/keyboards/terminal/de.yaml")),
    ("terminal/at_wide",   include_str!("../data/keyboards/terminal/de_wide.yaml")),

    ("terminal/latam", include_str!("../data/keyboards/terminal/es.yaml")),
    ("terminal/latam_wide",   include_str!("../data/keyboards/terminal/es_wide.yaml")),

    ("terminal/ch+fr", include_str!("../data/keyboards/terminal/de.yaml")),
    ("terminal/ch+fr_wide", include_str!("../data/keyboards/terminal/de_wide.yaml")),
];

pub fn get_keyboard(needle: &str) -> Option<&'static str> {
    KEYBOARDS.iter().find(|(name, _)| *name == needle).map(|(_, layout)| *layout)
}

static OVERLAY_NAMES: &[&'static str] = &[
    "emoji",
    "terminal",
];

pub fn get_overlays() -> Vec<&'static str> {
    OVERLAY_NAMES.to_vec()
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn check_overlays_present() {
        for name in get_overlays() {
            assert!(get_keyboard(&format!("{}/us", name)).is_some());
        }
    }
}