keyboard/altgr: proper function to convert char maps
[sheet.git] / keyboard / altgr / eurkey.eng.inc.pl
1 use utf8;
2 use strict;
3 use warnings;
4 do './keyboard/altgr/groups.inc.pl';
5
6 my $V = v1.3;
7
8 my $presymbol = $V ge v1.3 ? '\\' : '-';
9 my %arrows = (
10         'h' => '←',
11         'H' => '⇐',
12         'j' => '↓',
13         'J' => '⇓',
14         'k' => '↑',
15         'K' => '⇑',
16         'l' => '→',
17         'L' => '⇒',
18         'u' => '↖',
19         'U' => '⇖',
20         'i' => '↗',
21         'I' => '⇗',
22         'n' => '↙',
23         'N' => '⇙',
24         'm' => '↘',
25         'M' => '⇘',
26         '=' => '↔',
27         '+' => '⇔',
28 );
29
30 my %rows = (
31         '1' => '¡',
32         '!' => '¹',
33         '2' => 'ª',
34         '@' => '²',
35         '3' => 'º',
36         '#' => '³',
37         '4' => $V ge v1.1 ? '£' : '€',
38         '$' => '¥',
39         '5' => $V ge v1.1 ? '€' : '£',
40         '%' => '¢',
41         '6' => "\N{COMBINING CIRCUMFLEX ACCENT}",
42         '^' => "\N{COMBINING CARON}",
43         '7' => "\N{COMBINING RING ABOVE}",
44         '&' => "\N{COMBINING MACRON}",
45         '8' => "\N{DOUBLE LOW-9 QUOTATION MARK}",
46         '*' => "\N{SINGLE LOW-9 QUOTATION MARK}",
47         '9' => "\N{LEFT DOUBLE QUOTATION MARK}",
48         '(' => "\N{LEFT SINGLE QUOTATION MARK}",
49         '0' => "\N{RIGHT DOUBLE QUOTATION MARK}",
50         ')' => "\N{RIGHT SINGLE QUOTATION MARK}",
51         '-' => $V ge v1.3 ? '✓' : '©',
52         '_' => $V ge v1.3 ? '✗' : '№',
53         '=' => '×',
54         '+' => '÷',
55         'q' => 'æ',
56         'Q' => 'Æ',
57         'w' => 'å',
58         'W' => 'Å',
59         'e' => 'ë',
60         'E' => 'Ë',
61         'r' => 'ý',
62         'R' => 'Ý',
63         't' => 'þ',
64         'T' => 'Þ',
65         'y' => 'ÿ',
66         'Y' => 'Ÿ',
67         'u' => 'ü',
68         'U' => 'Ü',
69         'i' => 'ï',
70         'I' => 'Ï',
71         'o' => 'ö',
72         'O' => 'Ö',
73         'p' => 'œ',
74         'P' => 'Œ',
75         '[' => '«',
76         '{' => '‹',
77         ']' => '»',
78         '}' => '›',
79
80         'a' => 'ä',
81         'A' => 'Ä',
82         's' => 'ß',
83         'S' => $V ge v1.3 ? 'ẞ' : '¶',
84         'd' => $V ge v1.2 ? 'đ' : 'ð',
85         'D' => $V ge v1.2 ? 'Đ' : 'Ð',
86         'f' => 'è',
87         'F' => 'È',
88         'g' => 'é',
89         'G' => 'É',
90         'h' => 'ù',
91         'H' => 'Ù',
92         'j' => 'ú',
93         'J' => 'Ú',
94         'k' => 'ij',
95         'K' => 'IJ',
96         'l' => 'ø',
97         'L' => 'Ø',
98         ';' => $V ge v1.2 ? '°' : "\N{COMBINING DIAERESIS}",
99         ':' => '·',
100         "'" => "\N{COMBINING ACUTE ACCENT}",
101         '"' => $V ge v1.2 ? "\N{COMBINING DIAERESIS}" : '†',
102         '`' => "\N{COMBINING GRAVE ACCENT}",
103         '~' => "\N{COMBINING TILDE}",
104
105         '\\'=> '¬',
106         '|' => '¦',
107         'z' => 'à',
108         'Z' => 'À',
109         'x' => 'á',
110         'X' => 'Á',
111         'c' => 'ç',
112         'C' => 'Ç',
113         'v' => 'ì',
114         'V' => 'Ì',
115         'b' => 'í',
116         'B' => 'Í',
117         'n' => 'ñ',
118         'N' => 'Ñ',
119         'm' => 'Ω',
120         'M' => '√', # ±
121         ',' => 'ò',
122         '<' => 'Ò',
123         '.' => 'ó',
124         '>' => 'Ó',
125         '/' => '¿',
126         '?' => '…',
127
128         # greek
129         'ma' => 'α',
130         'mb' => 'β', # v
131         'mg' => 'γ',
132         'md' => 'δ',
133         'me' => 'ε',
134         'mz' => 'ζ',
135         'mi' => 'η',
136         'mh' => 'θ',
137         'mj' => 'ι',
138         'mk' => 'κ',
139         'ml' => 'λ',
140         'mm' => 'μ',
141         'mn' => 'ν',
142         'mx' => 'ξ',
143         'mo' => 'ο',
144         'mp' => 'π',
145         'mr' => 'ρ',
146         'ms' => 'σ',
147         'mt' => 'τ',
148         'my' => 'υ',
149         'mf' => 'φ',
150         'mc' => 'χ',
151         'mw' => 'ψ',
152         'mq' => 'ω', # u
153
154         # suþscript
155         'm1' => '¹',
156         'm2' => '²',
157         'm3' => '³',
158         'm4' => '⁴',
159         'm5' => '⁵',
160         'm6' => '⁶',
161         'm7' => '⁷',
162         'm8' => '⁸',
163         'm9' => '⁹',
164         'm0' => '⁰',
165         'm!' => '₁',
166         'm@' => '₂',
167         'm#' => '₃',
168         'm$' => '₄',
169         'm%' => '₅',
170         'm^' => '₆',
171         'm&' => '₇',
172         'm*' => '₈',
173         'm(' => '₉',
174         'm)' => '₀',
175
176         # maths
177         'M!' => '≠',
178         'M~' => '≈',
179         'M=' => '≝',
180         'M>' => '≥',
181         'M<' => '≤',
182         'M-' => '±',
183         'Mi' => '∞',
184         'Mn' => 'ⁿ',
185         'Mr' => '√',
186         'M3' => '∛',
187         'M4' => '∜',
188         'M%' => '‰',
189
190         'Mf' => 'ƒ',
191         'MS' => '∫',
192         "M'" => '′',
193         'M"' => '″',
194         'Mp' => '∂',
195         'Md' => 'Δ',
196         'MD' => '∇',
197         'M+' => '⊕',
198         'M*' => '⊗',
199         'M^' => '℘',
200
201         'Ms' => '∩',
202         'Mu' => '∪',
203         'MU' => '∖',
204         'MO' => '∅',
205         'Mg' => '⊂',
206         'MG' => '⊃',
207         'Mh' => '⊄',
208         'MH' => '⊅',
209         'Mb' => '⊆',
210         'MB' => '⊇',
211         'Mm' => '∈',
212         'MM' => '∉',
213         'Mk' => '∋',
214         'MK' => '∌',
215
216         'MA' => '∀',
217         'ME' => '∃',
218         'MX' => '∄',
219         'M&' => '∧',
220         'M|' => '∨',
221         'Mc' => '∝',
222         'M.' => '⋅',
223         'Mo' => '∘',
224         'M:' => '∴',
225         'M;' => '∵',
226         'Mz' => '↯',
227         'MF' => '∎',
228
229         'MR' => 'ℝ',
230         'MC' => 'ℂ',
231         'MN' => 'ℕ',
232         'MP' => 'ℙ',
233         'MQ' => 'ℚ',
234         'MZ' => 'ℤ',
235         'M9' => '∟',
236         'M8' => '∠',
237         'M7' => '∡',
238         'Ml' => '∥',
239         'ML' => '∦',
240
241         # symbols
242         '-1' => '¼',
243         '-2' => '½',
244         '-3' => '¾',
245         '-4' => '⅓',
246         '-5' => '⅔',
247         '-c' => '©',
248         '-p' => '℗',
249         '-r' => '®',
250         '-s' => '℠',
251         '-t' => '™',
252
253         '\s' => '§',
254         '\1' => '№',
255         '\2' => '½',
256         '\3' => '⅓',
257         '\4' => '¼',
258         '\5' => '⅔',
259         '\6' => '¾',
260         '\c' => '©',
261         '\p' => '℗',
262         '\r' => '®',
263         '\t' => '™',
264         '\T' => '℠',
265
266         (map { ($presymbol.$_ => $arrows{$_}) } keys %arrows),
267 );
268
269 my $groups = kbchars(\%rows);
270 $groups->{mode} = {
271         ''  => 'option-shifted ⌥',
272         'm' => 'Ω greek prefix ⌥m',
273         'M' => '√ maths prefix ⌥M',
274         $presymbol => "$rows{$presymbol} symbol prefix ⌥$presymbol",
275 };
276 for my $m (qw' m M ', $presymbol) {
277         $groups->{def}->{''}->{$m} = "g1 mode$m";
278         $groups->{mode}->{$m} //= "mode $m";
279         $groups->{def}->{$m} = {
280                 (map {s/^.//r => 'g0'} grep {/^\Q$m/} keys %rows),
281                 $m => 'g1 mode',
282         };
283 }
284 $groups->{flag}->{g1} = ['mode' => "switch to an alternate set of keys"];
285
286 +{
287         %{$groups},
288         version => '1.0',
289         title => 'EurKEY',
290         intro => join("\n",
291                 'Third-party proposal <a href="https://eurkey.steffen.bruentjen.eu/">EurKEY</a>',
292                 '<abbr title="last updated 2017-05-15">v1.3</abbr> by Steffen Brüntjen',
293                 'supporting most European languages while pressing AltGr or ⌥ Option.',
294                 'Selectable in <abbr title="distributed with X since 2014">Linux</abbr>',
295                 'and available for <a href="/keyboard/altgr/windows">Windows</a>',
296                 'or <a href="/keyboard/altgr/macos">macOS</a>.',
297         ),
298         description => [
299                 "An interactive map of EurKEY, the European Keyboard Layout.",
300         ],
301         image => 'keyboard/altgr/eurkeyboard.jpg',
302 }