keyboard/altgr: proper function to convert char maps
[sheet.git] / keyboard / altgr / macos-abc.eng.inc.pl
1 use utf8;
2 use strict;
3 use warnings;
4 do './keyboard/altgr/groups.inc.pl';
5
6 my %rows = (
7         'A' => "\N{MACRON}",
8         'a' => "\N{COMBINING MACRON}",
9         'B' => "\N{BREVE}",
10         'b' => "\N{COMBINING BREVE}",
11         'C' => "\N{CEDILLA}",
12         'c' => "\N{COMBINING CEDILLA}",
13         'D' => 'Ð',
14         'd' => 'ð',
15         'E' => "\N{ACUTE ACCENT}",
16         'e' => "\N{COMBINING ACUTE ACCENT}",
17         'f' => 'ƒ',
18         'F' => "\N{COMBINING TILDE BELOW}",
19         'G' => "\N{COMBINING CIRCUMFLEX ACCENT BELOW}",
20         'g' => '©',
21         'H' => "\N{MODIFIER LETTER LOW MACRON}",
22         'h' => "\N{COMBINING MACRON BELOW}",
23         'I' => "\N{MODIFIER LETTER APOSTROPHE}",
24         'i' => "\N{COMBINING COMMA ABOVE}",
25         'J' => "\N{DOUBLE ACUTE ACCENT}",
26         'j' => "\N{COMBINING DOUBLE ACUTE ACCENT}",
27         'K' => '°',
28         'k' => "\N{COMBINING RING ABOVE}",
29         'L' => '-',
30         'l' => "\N{COMBINING SHORT STROKE OVERLAY}", #XXX
31         'M' => "\N{OGONEK}",
32         'm' => "\N{COMBINING OGONEK}",
33         'N' => "\N{SMALL TILDE}",
34         'n' => "\N{COMBINING TILDE}",
35         'O' => 'Ø',
36         'o' => 'ø',
37         'P' => "\N{SINGLE LOW-9 QUOTATION MARK}", #XXX
38         'p' => "\N{COMBINING COMMA BELOW}",
39         'Q' => 'Œ',
40         'q' => 'œ',
41         'R' => '‰',
42         'r' => '®',
43         'S' => "\N{COMBINING INVERTED BREVE}",
44         's' => 'ß',
45         'T' => 'Þ',
46         't' => 'þ',
47         'U' => "\N{DIAERESIS}",
48         'u' => "\N{COMBINING DIAERESIS}",
49         'V' => "\N{CARON}",
50         'v' => "\N{COMBINING CARON}",
51         'W' => "\N{DOT ABOVE}",
52         'w' => "\N{COMBINING DOT ABOVE}",
53         'X' => "\N{MODIFIER LETTER LOW RING}", #XXX
54         'x' => "\N{COMBINING DOT BELOW}",
55         'Y' => "\N{COMBINING DOUBLE GRAVE ACCENT}",
56         'y' => '¥',
57         'Z' => "\N{MODIFIER LETTER GLOTTAL STOP}",
58         'z' => "\N{COMBINING HOOK ABOVE}",
59         '[' => "\N{LEFT DOUBLE QUOTATION MARK}",
60         '{' => "\N{RIGHT DOUBLE QUOTATION MARK}",
61         ']' => "\N{LEFT SINGLE QUOTATION MARK}",
62         '}' => "\N{RIGHT SINGLE QUOTATION MARK}",
63         ';' => '…',
64         ':' => '№',
65         '"' => 'Æ',
66         "'" => 'æ',
67         '|' => '»',
68         '\\'=> '«',
69         '<' => "\N{DOUBLE LOW-9 QUOTATION MARK}",
70         ',' => '≤',
71         '>' => 'ʔ',
72         '.' => '≥',
73         '/' => '÷',
74         '?' => '¿',
75         '~' => "\N{GRAVE ACCENT}",
76         '`' => "\N{COMBINING GRAVE ACCENT}",
77         '1' => '¡',
78         '!' => '⁄',
79         '2' => '™',
80         '@' => '€',
81         '3' => '£',
82         '#' => '‹',
83         '4' => '¢',
84         '$' => '›',
85         '5' => '§',
86         '%' => '†',
87         '6' => "\N{COMBINING CIRCUMFLEX ACCENT}",
88         '^' => "\N{MODIFIER LETTER CIRCUMFLEX ACCENT}", #XXX
89         '7' => '¶',
90         '&' => '‡',
91         '8' => '•',
92         '*' => '°',
93         '9' => 'ª',
94         '(' => '·',
95         '0' => 'º',
96         ')' => '‚',
97         '-' => '–',
98         '_' => '—',
99         '+' => '±',
100         '=' => '≠',
101
102         '::' => ' ',
103         ':@' => 'Ƨ',
104         ':2' => 'ƨ',
105         ':#' => 'Ɛ',
106         ':3' => 'ɛ',
107         ':%' => 'Ƽ',
108         ':5' => 'ƽ',
109         ':^' => 'Ƅ',
110         ':6' => 'ƅ', #XXX
111         ':7' => '⁊',
112         ':*' => 'Ȣ',
113         ':8' => 'ȣ',
114         ':Q' => 'Ƣ',
115         ':q' => 'ƣ',
116         ':W' => 'Ƿ',
117         ':w' => 'ƿ',
118         ':E' => 'Ǝ',
119         ':e' => 'ǝ', #XXX ə
120         ':R' => 'Ʀ',
121         ':r' => 'ʀ', #XXX
122         ':k' => 'ĸ',
123         ':Y' => 'Ɜ',
124         ':y' => 'ɜ',
125         ':U' => 'Ʊ',
126         ':u' => 'ʊ',
127         ':A' => 'Ə',
128         ':a' => 'ə',
129         ':s' => 'ſ',
130         ':G' => 'Ɣ',
131         ':g' => 'ɣ',
132         ':H' => 'Ƕ',
133         ':h' => 'ƕ',
134         ':J' => 'Ƞ',
135         ':j' => 'ƞ', #XXX ɳ
136         ':K' => 'Ǩ',
137         ':Z' => 'Ʒ',
138         ':z' => 'ʒ',
139         ':C' => 'Ɔ',
140         ':c' => 'ɔ',
141         ':v' => 'ʌ',
142         ':N' => 'Ŋ', #XXX
143         ':n' => 'ŋ',
144         ':M' => 'Ɯ',
145         ':m' => 'ɯ',
146         ':"' => '″', #XXX ʺ
147         ":'" => '′', #XXX ʹ
148
149         '>>' => ' ',
150         '>q' => 'ʠ',
151         '>R' => 'Ʈ', #XXX mirrored?
152         '>r' => 'ʈ',
153         '>T' => 'Ƭ',
154         '>t' => 'ƭ',
155         '>Y' => 'Ƴ',
156         '>y' => 'ƴ',
157         '>U' => 'Ʋ',
158         '>u' => 'ʋ',
159         '>I' => 'Ɩ',
160         '>i' => 'ɩ',
161         '>P' => 'Ƥ',
162         '>p' => 'ƥ',
163         '>S' => 'Ʃ',
164         '>s' => 'ʃ',
165         '>D' => 'Ɗ',
166         '>d' => 'ɗ',
167         '>F' => 'Ƒ',
168         '>f' => 'ƒ',
169         '>G' => 'Ɠ',
170         '>g' => 'ɠ',
171         '>h' => 'ɦ',
172         '>K' => 'Ƙ',
173         '>k' => 'ƙ',
174         '>Z' => 'Ȥ',
175         '>z' => 'ȥ',
176         '>X' => 'Ɖ',
177         '>x' => 'ɖ',
178         '>C' => 'Ƈ',
179         '>c' => 'ƈ',
180         '>N' => 'Ɲ',
181         '>n' => 'ɲ',
182         '>B' => 'Ɓ',
183         '>b' => 'ɓ',
184 );
185
186 my $groups = kbchars(\%rows);
187 $groups->{mode} = {
188         ''  => 'option-shifted ⌥',
189         ':' => '№ number prefix ⌥:',
190         '>' => 'ʔ hook prefix ⌥>',
191 };
192 for my $m (qw' : > ') {
193         $groups->{def}->{''}->{$m} = "g1 mode$m";
194         $groups->{mode}->{$m} //= "mode $m";
195         $groups->{def}->{$m} = {
196                 (map {s/^.//r => 'g0'} grep {/^\Q$m/} keys %rows),
197                 $m => 'g1 mode',
198         };
199 }
200 $groups->{flag}->{g1} = ['mode' => "switch to an alternate set of keys"];
201
202 +{
203         %{$groups},
204         version => '1.0',
205         title => 'ABC option',
206         intro => join("\n",
207                 'Resulting <a href="/unicode">selection</a> of <a href="/charset">Unicode</a> characters',
208                 "while pressing ⌥ Option (Alt) with Apple's ABC Extended",
209                 "(formerly US Extended and Extended Roman) layout",
210                 'on <abbr title="at least in Ventura 13.2">macOS</abbr>.',
211                 'Significant changes from standard',
212                 '<a href="/keyboard/altgr/macos">US</a> or local options.',
213         ),
214         description => [
215                 "Apple ABC Extended keyboard layout table",
216                 "with the Option modifier key.",
217         ],
218         image => 'keyboard/altgr/macbook-gray.jpg',
219 }