ntk 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1186 @@
1
+ // GENERATED FILE — do not edit by hand.
2
+ // Regenerate with: node scripts/gen-keysym-unicode.mjs [path/to/keysymdef.h]
3
+ //
4
+ // Maps an X keysym to the Unicode codepoint it types. This is the table Xlib
5
+ // keeps in keysym2ucs.c; ntk carries its own copy so that nothing on the
6
+ // keypress path touches the filesystem — the table has to survive bundling
7
+ // (esbuild), single-executable builds and the browser, where a package that
8
+ // reads JSON tables with fs.readFileSync at import time cannot.
9
+ //
10
+ // 1142 entries, generated from keysymdef.h.
11
+
12
+ const LEGACY = {
13
+ 0x01a1: 0x0104, // Aogonek
14
+ 0x01a2: 0x02d8, // breve
15
+ 0x01a3: 0x0141, // Lstroke
16
+ 0x01a5: 0x013d, // Lcaron
17
+ 0x01a6: 0x015a, // Sacute
18
+ 0x01a9: 0x0160, // Scaron
19
+ 0x01aa: 0x015e, // Scedilla
20
+ 0x01ab: 0x0164, // Tcaron
21
+ 0x01ac: 0x0179, // Zacute
22
+ 0x01ae: 0x017d, // Zcaron
23
+ 0x01af: 0x017b, // Zabovedot
24
+ 0x01b1: 0x0105, // aogonek
25
+ 0x01b2: 0x02db, // ogonek
26
+ 0x01b3: 0x0142, // lstroke
27
+ 0x01b5: 0x013e, // lcaron
28
+ 0x01b6: 0x015b, // sacute
29
+ 0x01b7: 0x02c7, // caron
30
+ 0x01b9: 0x0161, // scaron
31
+ 0x01ba: 0x015f, // scedilla
32
+ 0x01bb: 0x0165, // tcaron
33
+ 0x01bc: 0x017a, // zacute
34
+ 0x01bd: 0x02dd, // doubleacute
35
+ 0x01be: 0x017e, // zcaron
36
+ 0x01bf: 0x017c, // zabovedot
37
+ 0x01c0: 0x0154, // Racute
38
+ 0x01c3: 0x0102, // Abreve
39
+ 0x01c5: 0x0139, // Lacute
40
+ 0x01c6: 0x0106, // Cacute
41
+ 0x01c8: 0x010c, // Ccaron
42
+ 0x01ca: 0x0118, // Eogonek
43
+ 0x01cc: 0x011a, // Ecaron
44
+ 0x01cf: 0x010e, // Dcaron
45
+ 0x01d0: 0x0110, // Dstroke
46
+ 0x01d1: 0x0143, // Nacute
47
+ 0x01d2: 0x0147, // Ncaron
48
+ 0x01d5: 0x0150, // Odoubleacute
49
+ 0x01d8: 0x0158, // Rcaron
50
+ 0x01d9: 0x016e, // Uring
51
+ 0x01db: 0x0170, // Udoubleacute
52
+ 0x01de: 0x0162, // Tcedilla
53
+ 0x01e0: 0x0155, // racute
54
+ 0x01e3: 0x0103, // abreve
55
+ 0x01e5: 0x013a, // lacute
56
+ 0x01e6: 0x0107, // cacute
57
+ 0x01e8: 0x010d, // ccaron
58
+ 0x01ea: 0x0119, // eogonek
59
+ 0x01ec: 0x011b, // ecaron
60
+ 0x01ef: 0x010f, // dcaron
61
+ 0x01f0: 0x0111, // dstroke
62
+ 0x01f1: 0x0144, // nacute
63
+ 0x01f2: 0x0148, // ncaron
64
+ 0x01f5: 0x0151, // odoubleacute
65
+ 0x01f8: 0x0159, // rcaron
66
+ 0x01f9: 0x016f, // uring
67
+ 0x01fb: 0x0171, // udoubleacute
68
+ 0x01fe: 0x0163, // tcedilla
69
+ 0x01ff: 0x02d9, // abovedot
70
+ 0x02a1: 0x0126, // Hstroke
71
+ 0x02a6: 0x0124, // Hcircumflex
72
+ 0x02a9: 0x0130, // Iabovedot
73
+ 0x02ab: 0x011e, // Gbreve
74
+ 0x02ac: 0x0134, // Jcircumflex
75
+ 0x02b1: 0x0127, // hstroke
76
+ 0x02b6: 0x0125, // hcircumflex
77
+ 0x02b9: 0x0131, // idotless
78
+ 0x02bb: 0x011f, // gbreve
79
+ 0x02bc: 0x0135, // jcircumflex
80
+ 0x02c5: 0x010a, // Cabovedot
81
+ 0x02c6: 0x0108, // Ccircumflex
82
+ 0x02d5: 0x0120, // Gabovedot
83
+ 0x02d8: 0x011c, // Gcircumflex
84
+ 0x02dd: 0x016c, // Ubreve
85
+ 0x02de: 0x015c, // Scircumflex
86
+ 0x02e5: 0x010b, // cabovedot
87
+ 0x02e6: 0x0109, // ccircumflex
88
+ 0x02f5: 0x0121, // gabovedot
89
+ 0x02f8: 0x011d, // gcircumflex
90
+ 0x02fd: 0x016d, // ubreve
91
+ 0x02fe: 0x015d, // scircumflex
92
+ 0x03a2: 0x0138, // kra
93
+ 0x03a3: 0x0156, // Rcedilla
94
+ 0x03a5: 0x0128, // Itilde
95
+ 0x03a6: 0x013b, // Lcedilla
96
+ 0x03aa: 0x0112, // Emacron
97
+ 0x03ab: 0x0122, // Gcedilla
98
+ 0x03ac: 0x0166, // Tslash
99
+ 0x03b3: 0x0157, // rcedilla
100
+ 0x03b5: 0x0129, // itilde
101
+ 0x03b6: 0x013c, // lcedilla
102
+ 0x03ba: 0x0113, // emacron
103
+ 0x03bb: 0x0123, // gcedilla
104
+ 0x03bc: 0x0167, // tslash
105
+ 0x03bd: 0x014a, // ENG
106
+ 0x03bf: 0x014b, // eng
107
+ 0x03c0: 0x0100, // Amacron
108
+ 0x03c7: 0x012e, // Iogonek
109
+ 0x03cc: 0x0116, // Eabovedot
110
+ 0x03cf: 0x012a, // Imacron
111
+ 0x03d1: 0x0145, // Ncedilla
112
+ 0x03d2: 0x014c, // Omacron
113
+ 0x03d3: 0x0136, // Kcedilla
114
+ 0x03d9: 0x0172, // Uogonek
115
+ 0x03dd: 0x0168, // Utilde
116
+ 0x03de: 0x016a, // Umacron
117
+ 0x03e0: 0x0101, // amacron
118
+ 0x03e7: 0x012f, // iogonek
119
+ 0x03ec: 0x0117, // eabovedot
120
+ 0x03ef: 0x012b, // imacron
121
+ 0x03f1: 0x0146, // ncedilla
122
+ 0x03f2: 0x014d, // omacron
123
+ 0x03f3: 0x0137, // kcedilla
124
+ 0x03f9: 0x0173, // uogonek
125
+ 0x03fd: 0x0169, // utilde
126
+ 0x03fe: 0x016b, // umacron
127
+ 0x047e: 0x203e, // overline
128
+ 0x04a1: 0x3002, // kana_fullstop
129
+ 0x04a2: 0x300c, // kana_openingbracket
130
+ 0x04a3: 0x300d, // kana_closingbracket
131
+ 0x04a4: 0x3001, // kana_comma
132
+ 0x04a5: 0x30fb, // kana_conjunctive
133
+ 0x04a6: 0x30f2, // kana_WO
134
+ 0x04a7: 0x30a1, // kana_a
135
+ 0x04a8: 0x30a3, // kana_i
136
+ 0x04a9: 0x30a5, // kana_u
137
+ 0x04aa: 0x30a7, // kana_e
138
+ 0x04ab: 0x30a9, // kana_o
139
+ 0x04ac: 0x30e3, // kana_ya
140
+ 0x04ad: 0x30e5, // kana_yu
141
+ 0x04ae: 0x30e7, // kana_yo
142
+ 0x04af: 0x30c3, // kana_tsu
143
+ 0x04b0: 0x30fc, // prolongedsound
144
+ 0x04b1: 0x30a2, // kana_A
145
+ 0x04b2: 0x30a4, // kana_I
146
+ 0x04b3: 0x30a6, // kana_U
147
+ 0x04b4: 0x30a8, // kana_E
148
+ 0x04b5: 0x30aa, // kana_O
149
+ 0x04b6: 0x30ab, // kana_KA
150
+ 0x04b7: 0x30ad, // kana_KI
151
+ 0x04b8: 0x30af, // kana_KU
152
+ 0x04b9: 0x30b1, // kana_KE
153
+ 0x04ba: 0x30b3, // kana_KO
154
+ 0x04bb: 0x30b5, // kana_SA
155
+ 0x04bc: 0x30b7, // kana_SHI
156
+ 0x04bd: 0x30b9, // kana_SU
157
+ 0x04be: 0x30bb, // kana_SE
158
+ 0x04bf: 0x30bd, // kana_SO
159
+ 0x04c0: 0x30bf, // kana_TA
160
+ 0x04c1: 0x30c1, // kana_CHI
161
+ 0x04c2: 0x30c4, // kana_TSU
162
+ 0x04c3: 0x30c6, // kana_TE
163
+ 0x04c4: 0x30c8, // kana_TO
164
+ 0x04c5: 0x30ca, // kana_NA
165
+ 0x04c6: 0x30cb, // kana_NI
166
+ 0x04c7: 0x30cc, // kana_NU
167
+ 0x04c8: 0x30cd, // kana_NE
168
+ 0x04c9: 0x30ce, // kana_NO
169
+ 0x04ca: 0x30cf, // kana_HA
170
+ 0x04cb: 0x30d2, // kana_HI
171
+ 0x04cc: 0x30d5, // kana_FU
172
+ 0x04cd: 0x30d8, // kana_HE
173
+ 0x04ce: 0x30db, // kana_HO
174
+ 0x04cf: 0x30de, // kana_MA
175
+ 0x04d0: 0x30df, // kana_MI
176
+ 0x04d1: 0x30e0, // kana_MU
177
+ 0x04d2: 0x30e1, // kana_ME
178
+ 0x04d3: 0x30e2, // kana_MO
179
+ 0x04d4: 0x30e4, // kana_YA
180
+ 0x04d5: 0x30e6, // kana_YU
181
+ 0x04d6: 0x30e8, // kana_YO
182
+ 0x04d7: 0x30e9, // kana_RA
183
+ 0x04d8: 0x30ea, // kana_RI
184
+ 0x04d9: 0x30eb, // kana_RU
185
+ 0x04da: 0x30ec, // kana_RE
186
+ 0x04db: 0x30ed, // kana_RO
187
+ 0x04dc: 0x30ef, // kana_WA
188
+ 0x04dd: 0x30f3, // kana_N
189
+ 0x04de: 0x309b, // voicedsound
190
+ 0x04df: 0x309c, // semivoicedsound
191
+ 0x0590: 0x06f0, // Farsi_0
192
+ 0x0591: 0x06f1, // Farsi_1
193
+ 0x0592: 0x06f2, // Farsi_2
194
+ 0x0593: 0x06f3, // Farsi_3
195
+ 0x0594: 0x06f4, // Farsi_4
196
+ 0x0595: 0x06f5, // Farsi_5
197
+ 0x0596: 0x06f6, // Farsi_6
198
+ 0x0597: 0x06f7, // Farsi_7
199
+ 0x0598: 0x06f8, // Farsi_8
200
+ 0x0599: 0x06f9, // Farsi_9
201
+ 0x05a5: 0x066a, // Arabic_percent
202
+ 0x05a6: 0x0670, // Arabic_superscript_alef
203
+ 0x05a7: 0x0679, // Arabic_tteh
204
+ 0x05a8: 0x067e, // Arabic_peh
205
+ 0x05a9: 0x0686, // Arabic_tcheh
206
+ 0x05aa: 0x0688, // Arabic_ddal
207
+ 0x05ab: 0x0691, // Arabic_rreh
208
+ 0x05ac: 0x060c, // Arabic_comma
209
+ 0x05ae: 0x06d4, // Arabic_fullstop
210
+ 0x05b0: 0x0660, // Arabic_0
211
+ 0x05b1: 0x0661, // Arabic_1
212
+ 0x05b2: 0x0662, // Arabic_2
213
+ 0x05b3: 0x0663, // Arabic_3
214
+ 0x05b4: 0x0664, // Arabic_4
215
+ 0x05b5: 0x0665, // Arabic_5
216
+ 0x05b6: 0x0666, // Arabic_6
217
+ 0x05b7: 0x0667, // Arabic_7
218
+ 0x05b8: 0x0668, // Arabic_8
219
+ 0x05b9: 0x0669, // Arabic_9
220
+ 0x05bb: 0x061b, // Arabic_semicolon
221
+ 0x05bf: 0x061f, // Arabic_question_mark
222
+ 0x05c1: 0x0621, // Arabic_hamza
223
+ 0x05c2: 0x0622, // Arabic_maddaonalef
224
+ 0x05c3: 0x0623, // Arabic_hamzaonalef
225
+ 0x05c4: 0x0624, // Arabic_hamzaonwaw
226
+ 0x05c5: 0x0625, // Arabic_hamzaunderalef
227
+ 0x05c6: 0x0626, // Arabic_hamzaonyeh
228
+ 0x05c7: 0x0627, // Arabic_alef
229
+ 0x05c8: 0x0628, // Arabic_beh
230
+ 0x05c9: 0x0629, // Arabic_tehmarbuta
231
+ 0x05ca: 0x062a, // Arabic_teh
232
+ 0x05cb: 0x062b, // Arabic_theh
233
+ 0x05cc: 0x062c, // Arabic_jeem
234
+ 0x05cd: 0x062d, // Arabic_hah
235
+ 0x05ce: 0x062e, // Arabic_khah
236
+ 0x05cf: 0x062f, // Arabic_dal
237
+ 0x05d0: 0x0630, // Arabic_thal
238
+ 0x05d1: 0x0631, // Arabic_ra
239
+ 0x05d2: 0x0632, // Arabic_zain
240
+ 0x05d3: 0x0633, // Arabic_seen
241
+ 0x05d4: 0x0634, // Arabic_sheen
242
+ 0x05d5: 0x0635, // Arabic_sad
243
+ 0x05d6: 0x0636, // Arabic_dad
244
+ 0x05d7: 0x0637, // Arabic_tah
245
+ 0x05d8: 0x0638, // Arabic_zah
246
+ 0x05d9: 0x0639, // Arabic_ain
247
+ 0x05da: 0x063a, // Arabic_ghain
248
+ 0x05e0: 0x0640, // Arabic_tatweel
249
+ 0x05e1: 0x0641, // Arabic_feh
250
+ 0x05e2: 0x0642, // Arabic_qaf
251
+ 0x05e3: 0x0643, // Arabic_kaf
252
+ 0x05e4: 0x0644, // Arabic_lam
253
+ 0x05e5: 0x0645, // Arabic_meem
254
+ 0x05e6: 0x0646, // Arabic_noon
255
+ 0x05e7: 0x0647, // Arabic_ha
256
+ 0x05e8: 0x0648, // Arabic_waw
257
+ 0x05e9: 0x0649, // Arabic_alefmaksura
258
+ 0x05ea: 0x064a, // Arabic_yeh
259
+ 0x05eb: 0x064b, // Arabic_fathatan
260
+ 0x05ec: 0x064c, // Arabic_dammatan
261
+ 0x05ed: 0x064d, // Arabic_kasratan
262
+ 0x05ee: 0x064e, // Arabic_fatha
263
+ 0x05ef: 0x064f, // Arabic_damma
264
+ 0x05f0: 0x0650, // Arabic_kasra
265
+ 0x05f1: 0x0651, // Arabic_shadda
266
+ 0x05f2: 0x0652, // Arabic_sukun
267
+ 0x05f3: 0x0653, // Arabic_madda_above
268
+ 0x05f4: 0x0654, // Arabic_hamza_above
269
+ 0x05f5: 0x0655, // Arabic_hamza_below
270
+ 0x05f6: 0x0698, // Arabic_jeh
271
+ 0x05f7: 0x06a4, // Arabic_veh
272
+ 0x05f8: 0x06a9, // Arabic_keheh
273
+ 0x05f9: 0x06af, // Arabic_gaf
274
+ 0x05fa: 0x06ba, // Arabic_noon_ghunna
275
+ 0x05fb: 0x06be, // Arabic_heh_doachashmee
276
+ 0x05fc: 0x06cc, // Farsi_yeh
277
+ 0x05fd: 0x06d2, // Arabic_yeh_baree
278
+ 0x05fe: 0x06c1, // Arabic_heh_goal
279
+ 0x0680: 0x0492, // Cyrillic_GHE_bar
280
+ 0x0681: 0x0496, // Cyrillic_ZHE_descender
281
+ 0x0682: 0x049a, // Cyrillic_KA_descender
282
+ 0x0683: 0x049c, // Cyrillic_KA_vertstroke
283
+ 0x0684: 0x04a2, // Cyrillic_EN_descender
284
+ 0x0685: 0x04ae, // Cyrillic_U_straight
285
+ 0x0686: 0x04b0, // Cyrillic_U_straight_bar
286
+ 0x0687: 0x04b2, // Cyrillic_HA_descender
287
+ 0x0688: 0x04b6, // Cyrillic_CHE_descender
288
+ 0x0689: 0x04b8, // Cyrillic_CHE_vertstroke
289
+ 0x068a: 0x04ba, // Cyrillic_SHHA
290
+ 0x068c: 0x04d8, // Cyrillic_SCHWA
291
+ 0x068d: 0x04e2, // Cyrillic_I_macron
292
+ 0x068e: 0x04e8, // Cyrillic_O_bar
293
+ 0x068f: 0x04ee, // Cyrillic_U_macron
294
+ 0x0690: 0x0493, // Cyrillic_ghe_bar
295
+ 0x0691: 0x0497, // Cyrillic_zhe_descender
296
+ 0x0692: 0x049b, // Cyrillic_ka_descender
297
+ 0x0693: 0x049d, // Cyrillic_ka_vertstroke
298
+ 0x0694: 0x04a3, // Cyrillic_en_descender
299
+ 0x0695: 0x04af, // Cyrillic_u_straight
300
+ 0x0696: 0x04b1, // Cyrillic_u_straight_bar
301
+ 0x0697: 0x04b3, // Cyrillic_ha_descender
302
+ 0x0698: 0x04b7, // Cyrillic_che_descender
303
+ 0x0699: 0x04b9, // Cyrillic_che_vertstroke
304
+ 0x069a: 0x04bb, // Cyrillic_shha
305
+ 0x069c: 0x04d9, // Cyrillic_schwa
306
+ 0x069d: 0x04e3, // Cyrillic_i_macron
307
+ 0x069e: 0x04e9, // Cyrillic_o_bar
308
+ 0x069f: 0x04ef, // Cyrillic_u_macron
309
+ 0x06a1: 0x0452, // Serbian_dje
310
+ 0x06a2: 0x0453, // Macedonia_gje
311
+ 0x06a3: 0x0451, // Cyrillic_io
312
+ 0x06a4: 0x0454, // Ukrainian_ie
313
+ 0x06a5: 0x0455, // Macedonia_dse
314
+ 0x06a6: 0x0456, // Ukrainian_i
315
+ 0x06a7: 0x0457, // Ukrainian_yi
316
+ 0x06a8: 0x0458, // Cyrillic_je
317
+ 0x06a9: 0x0459, // Cyrillic_lje
318
+ 0x06aa: 0x045a, // Cyrillic_nje
319
+ 0x06ab: 0x045b, // Serbian_tshe
320
+ 0x06ac: 0x045c, // Macedonia_kje
321
+ 0x06ad: 0x0491, // Ukrainian_ghe_with_upturn
322
+ 0x06ae: 0x045e, // Byelorussian_shortu
323
+ 0x06af: 0x045f, // Cyrillic_dzhe
324
+ 0x06b0: 0x2116, // numerosign
325
+ 0x06b1: 0x0402, // Serbian_DJE
326
+ 0x06b2: 0x0403, // Macedonia_GJE
327
+ 0x06b3: 0x0401, // Cyrillic_IO
328
+ 0x06b4: 0x0404, // Ukrainian_IE
329
+ 0x06b5: 0x0405, // Macedonia_DSE
330
+ 0x06b6: 0x0406, // Ukrainian_I
331
+ 0x06b7: 0x0407, // Ukrainian_YI
332
+ 0x06b8: 0x0408, // Cyrillic_JE
333
+ 0x06b9: 0x0409, // Cyrillic_LJE
334
+ 0x06ba: 0x040a, // Cyrillic_NJE
335
+ 0x06bb: 0x040b, // Serbian_TSHE
336
+ 0x06bc: 0x040c, // Macedonia_KJE
337
+ 0x06bd: 0x0490, // Ukrainian_GHE_WITH_UPTURN
338
+ 0x06be: 0x040e, // Byelorussian_SHORTU
339
+ 0x06bf: 0x040f, // Cyrillic_DZHE
340
+ 0x06c0: 0x044e, // Cyrillic_yu
341
+ 0x06c1: 0x0430, // Cyrillic_a
342
+ 0x06c2: 0x0431, // Cyrillic_be
343
+ 0x06c3: 0x0446, // Cyrillic_tse
344
+ 0x06c4: 0x0434, // Cyrillic_de
345
+ 0x06c5: 0x0435, // Cyrillic_ie
346
+ 0x06c6: 0x0444, // Cyrillic_ef
347
+ 0x06c7: 0x0433, // Cyrillic_ghe
348
+ 0x06c8: 0x0445, // Cyrillic_ha
349
+ 0x06c9: 0x0438, // Cyrillic_i
350
+ 0x06ca: 0x0439, // Cyrillic_shorti
351
+ 0x06cb: 0x043a, // Cyrillic_ka
352
+ 0x06cc: 0x043b, // Cyrillic_el
353
+ 0x06cd: 0x043c, // Cyrillic_em
354
+ 0x06ce: 0x043d, // Cyrillic_en
355
+ 0x06cf: 0x043e, // Cyrillic_o
356
+ 0x06d0: 0x043f, // Cyrillic_pe
357
+ 0x06d1: 0x044f, // Cyrillic_ya
358
+ 0x06d2: 0x0440, // Cyrillic_er
359
+ 0x06d3: 0x0441, // Cyrillic_es
360
+ 0x06d4: 0x0442, // Cyrillic_te
361
+ 0x06d5: 0x0443, // Cyrillic_u
362
+ 0x06d6: 0x0436, // Cyrillic_zhe
363
+ 0x06d7: 0x0432, // Cyrillic_ve
364
+ 0x06d8: 0x044c, // Cyrillic_softsign
365
+ 0x06d9: 0x044b, // Cyrillic_yeru
366
+ 0x06da: 0x0437, // Cyrillic_ze
367
+ 0x06db: 0x0448, // Cyrillic_sha
368
+ 0x06dc: 0x044d, // Cyrillic_e
369
+ 0x06dd: 0x0449, // Cyrillic_shcha
370
+ 0x06de: 0x0447, // Cyrillic_che
371
+ 0x06df: 0x044a, // Cyrillic_hardsign
372
+ 0x06e0: 0x042e, // Cyrillic_YU
373
+ 0x06e1: 0x0410, // Cyrillic_A
374
+ 0x06e2: 0x0411, // Cyrillic_BE
375
+ 0x06e3: 0x0426, // Cyrillic_TSE
376
+ 0x06e4: 0x0414, // Cyrillic_DE
377
+ 0x06e5: 0x0415, // Cyrillic_IE
378
+ 0x06e6: 0x0424, // Cyrillic_EF
379
+ 0x06e7: 0x0413, // Cyrillic_GHE
380
+ 0x06e8: 0x0425, // Cyrillic_HA
381
+ 0x06e9: 0x0418, // Cyrillic_I
382
+ 0x06ea: 0x0419, // Cyrillic_SHORTI
383
+ 0x06eb: 0x041a, // Cyrillic_KA
384
+ 0x06ec: 0x041b, // Cyrillic_EL
385
+ 0x06ed: 0x041c, // Cyrillic_EM
386
+ 0x06ee: 0x041d, // Cyrillic_EN
387
+ 0x06ef: 0x041e, // Cyrillic_O
388
+ 0x06f0: 0x041f, // Cyrillic_PE
389
+ 0x06f1: 0x042f, // Cyrillic_YA
390
+ 0x06f2: 0x0420, // Cyrillic_ER
391
+ 0x06f3: 0x0421, // Cyrillic_ES
392
+ 0x06f4: 0x0422, // Cyrillic_TE
393
+ 0x06f5: 0x0423, // Cyrillic_U
394
+ 0x06f6: 0x0416, // Cyrillic_ZHE
395
+ 0x06f7: 0x0412, // Cyrillic_VE
396
+ 0x06f8: 0x042c, // Cyrillic_SOFTSIGN
397
+ 0x06f9: 0x042b, // Cyrillic_YERU
398
+ 0x06fa: 0x0417, // Cyrillic_ZE
399
+ 0x06fb: 0x0428, // Cyrillic_SHA
400
+ 0x06fc: 0x042d, // Cyrillic_E
401
+ 0x06fd: 0x0429, // Cyrillic_SHCHA
402
+ 0x06fe: 0x0427, // Cyrillic_CHE
403
+ 0x06ff: 0x042a, // Cyrillic_HARDSIGN
404
+ 0x07a1: 0x0386, // Greek_ALPHAaccent
405
+ 0x07a2: 0x0388, // Greek_EPSILONaccent
406
+ 0x07a3: 0x0389, // Greek_ETAaccent
407
+ 0x07a4: 0x038a, // Greek_IOTAaccent
408
+ 0x07a5: 0x03aa, // Greek_IOTAdieresis
409
+ 0x07a7: 0x038c, // Greek_OMICRONaccent
410
+ 0x07a8: 0x038e, // Greek_UPSILONaccent
411
+ 0x07a9: 0x03ab, // Greek_UPSILONdieresis
412
+ 0x07ab: 0x038f, // Greek_OMEGAaccent
413
+ 0x07ae: 0x0385, // Greek_accentdieresis
414
+ 0x07af: 0x2015, // Greek_horizbar
415
+ 0x07b1: 0x03ac, // Greek_alphaaccent
416
+ 0x07b2: 0x03ad, // Greek_epsilonaccent
417
+ 0x07b3: 0x03ae, // Greek_etaaccent
418
+ 0x07b4: 0x03af, // Greek_iotaaccent
419
+ 0x07b5: 0x03ca, // Greek_iotadieresis
420
+ 0x07b6: 0x0390, // Greek_iotaaccentdieresis
421
+ 0x07b7: 0x03cc, // Greek_omicronaccent
422
+ 0x07b8: 0x03cd, // Greek_upsilonaccent
423
+ 0x07b9: 0x03cb, // Greek_upsilondieresis
424
+ 0x07ba: 0x03b0, // Greek_upsilonaccentdieresis
425
+ 0x07bb: 0x03ce, // Greek_omegaaccent
426
+ 0x07c1: 0x0391, // Greek_ALPHA
427
+ 0x07c2: 0x0392, // Greek_BETA
428
+ 0x07c3: 0x0393, // Greek_GAMMA
429
+ 0x07c4: 0x0394, // Greek_DELTA
430
+ 0x07c5: 0x0395, // Greek_EPSILON
431
+ 0x07c6: 0x0396, // Greek_ZETA
432
+ 0x07c7: 0x0397, // Greek_ETA
433
+ 0x07c8: 0x0398, // Greek_THETA
434
+ 0x07c9: 0x0399, // Greek_IOTA
435
+ 0x07ca: 0x039a, // Greek_KAPPA
436
+ 0x07cb: 0x039b, // Greek_LAMDA
437
+ 0x07cc: 0x039c, // Greek_MU
438
+ 0x07cd: 0x039d, // Greek_NU
439
+ 0x07ce: 0x039e, // Greek_XI
440
+ 0x07cf: 0x039f, // Greek_OMICRON
441
+ 0x07d0: 0x03a0, // Greek_PI
442
+ 0x07d1: 0x03a1, // Greek_RHO
443
+ 0x07d2: 0x03a3, // Greek_SIGMA
444
+ 0x07d4: 0x03a4, // Greek_TAU
445
+ 0x07d5: 0x03a5, // Greek_UPSILON
446
+ 0x07d6: 0x03a6, // Greek_PHI
447
+ 0x07d7: 0x03a7, // Greek_CHI
448
+ 0x07d8: 0x03a8, // Greek_PSI
449
+ 0x07d9: 0x03a9, // Greek_OMEGA
450
+ 0x07e1: 0x03b1, // Greek_alpha
451
+ 0x07e2: 0x03b2, // Greek_beta
452
+ 0x07e3: 0x03b3, // Greek_gamma
453
+ 0x07e4: 0x03b4, // Greek_delta
454
+ 0x07e5: 0x03b5, // Greek_epsilon
455
+ 0x07e6: 0x03b6, // Greek_zeta
456
+ 0x07e7: 0x03b7, // Greek_eta
457
+ 0x07e8: 0x03b8, // Greek_theta
458
+ 0x07e9: 0x03b9, // Greek_iota
459
+ 0x07ea: 0x03ba, // Greek_kappa
460
+ 0x07eb: 0x03bb, // Greek_lamda
461
+ 0x07ec: 0x03bc, // Greek_mu
462
+ 0x07ed: 0x03bd, // Greek_nu
463
+ 0x07ee: 0x03be, // Greek_xi
464
+ 0x07ef: 0x03bf, // Greek_omicron
465
+ 0x07f0: 0x03c0, // Greek_pi
466
+ 0x07f1: 0x03c1, // Greek_rho
467
+ 0x07f2: 0x03c3, // Greek_sigma
468
+ 0x07f3: 0x03c2, // Greek_finalsmallsigma
469
+ 0x07f4: 0x03c4, // Greek_tau
470
+ 0x07f5: 0x03c5, // Greek_upsilon
471
+ 0x07f6: 0x03c6, // Greek_phi
472
+ 0x07f7: 0x03c7, // Greek_chi
473
+ 0x07f8: 0x03c8, // Greek_psi
474
+ 0x07f9: 0x03c9, // Greek_omega
475
+ 0x08a1: 0x23b7, // leftradical
476
+ 0x08a2: 0x250c, // topleftradical
477
+ 0x08a3: 0x2500, // horizconnector
478
+ 0x08a4: 0x2320, // topintegral
479
+ 0x08a5: 0x2321, // botintegral
480
+ 0x08a6: 0x2502, // vertconnector
481
+ 0x08a7: 0x23a1, // topleftsqbracket
482
+ 0x08a8: 0x23a3, // botleftsqbracket
483
+ 0x08a9: 0x23a4, // toprightsqbracket
484
+ 0x08aa: 0x23a6, // botrightsqbracket
485
+ 0x08ab: 0x239b, // topleftparens
486
+ 0x08ac: 0x239d, // botleftparens
487
+ 0x08ad: 0x239e, // toprightparens
488
+ 0x08ae: 0x23a0, // botrightparens
489
+ 0x08af: 0x23a8, // leftmiddlecurlybrace
490
+ 0x08b0: 0x23ac, // rightmiddlecurlybrace
491
+ 0x08bc: 0x2264, // lessthanequal
492
+ 0x08bd: 0x2260, // notequal
493
+ 0x08be: 0x2265, // greaterthanequal
494
+ 0x08bf: 0x222b, // integral
495
+ 0x08c0: 0x2234, // therefore
496
+ 0x08c1: 0x221d, // variation
497
+ 0x08c2: 0x221e, // infinity
498
+ 0x08c5: 0x2207, // nabla
499
+ 0x08c8: 0x223c, // approximate
500
+ 0x08c9: 0x2243, // similarequal
501
+ 0x08cd: 0x21d4, // ifonlyif
502
+ 0x08ce: 0x21d2, // implies
503
+ 0x08cf: 0x2261, // identical
504
+ 0x08d6: 0x221a, // radical
505
+ 0x08da: 0x2282, // includedin
506
+ 0x08db: 0x2283, // includes
507
+ 0x08dc: 0x2229, // intersection
508
+ 0x08dd: 0x222a, // union
509
+ 0x08de: 0x2227, // logicaland
510
+ 0x08df: 0x2228, // logicalor
511
+ 0x08ef: 0x2202, // partialderivative
512
+ 0x08f6: 0x0192, // function
513
+ 0x08fb: 0x2190, // leftarrow
514
+ 0x08fc: 0x2191, // uparrow
515
+ 0x08fd: 0x2192, // rightarrow
516
+ 0x08fe: 0x2193, // downarrow
517
+ 0x09e0: 0x25c6, // soliddiamond
518
+ 0x09e1: 0x2592, // checkerboard
519
+ 0x09e2: 0x2409, // ht
520
+ 0x09e3: 0x240c, // ff
521
+ 0x09e4: 0x240d, // cr
522
+ 0x09e5: 0x240a, // lf
523
+ 0x09e8: 0x2424, // nl
524
+ 0x09e9: 0x240b, // vt
525
+ 0x09ea: 0x2518, // lowrightcorner
526
+ 0x09eb: 0x2510, // uprightcorner
527
+ 0x09ec: 0x250c, // upleftcorner
528
+ 0x09ed: 0x2514, // lowleftcorner
529
+ 0x09ee: 0x253c, // crossinglines
530
+ 0x09ef: 0x23ba, // horizlinescan1
531
+ 0x09f0: 0x23bb, // horizlinescan3
532
+ 0x09f1: 0x2500, // horizlinescan5
533
+ 0x09f2: 0x23bc, // horizlinescan7
534
+ 0x09f3: 0x23bd, // horizlinescan9
535
+ 0x09f4: 0x251c, // leftt
536
+ 0x09f5: 0x2524, // rightt
537
+ 0x09f6: 0x2534, // bott
538
+ 0x09f7: 0x252c, // topt
539
+ 0x09f8: 0x2502, // vertbar
540
+ 0x0aa1: 0x2003, // emspace
541
+ 0x0aa2: 0x2002, // enspace
542
+ 0x0aa3: 0x2004, // em3space
543
+ 0x0aa4: 0x2005, // em4space
544
+ 0x0aa5: 0x2007, // digitspace
545
+ 0x0aa6: 0x2008, // punctspace
546
+ 0x0aa7: 0x2009, // thinspace
547
+ 0x0aa8: 0x200a, // hairspace
548
+ 0x0aa9: 0x2014, // emdash
549
+ 0x0aaa: 0x2013, // endash
550
+ 0x0aac: 0x2423, // signifblank
551
+ 0x0aae: 0x2026, // ellipsis
552
+ 0x0aaf: 0x2025, // doubbaselinedot
553
+ 0x0ab0: 0x2153, // onethird
554
+ 0x0ab1: 0x2154, // twothirds
555
+ 0x0ab2: 0x2155, // onefifth
556
+ 0x0ab3: 0x2156, // twofifths
557
+ 0x0ab4: 0x2157, // threefifths
558
+ 0x0ab5: 0x2158, // fourfifths
559
+ 0x0ab6: 0x2159, // onesixth
560
+ 0x0ab7: 0x215a, // fivesixths
561
+ 0x0ab8: 0x2105, // careof
562
+ 0x0abb: 0x2012, // figdash
563
+ 0x0abc: 0x2329, // leftanglebracket
564
+ 0x0abd: 0x002e, // decimalpoint
565
+ 0x0abe: 0x232a, // rightanglebracket
566
+ 0x0ac3: 0x215b, // oneeighth
567
+ 0x0ac4: 0x215c, // threeeighths
568
+ 0x0ac5: 0x215d, // fiveeighths
569
+ 0x0ac6: 0x215e, // seveneighths
570
+ 0x0ac9: 0x2122, // trademark
571
+ 0x0aca: 0x2613, // signaturemark
572
+ 0x0acc: 0x25c1, // leftopentriangle
573
+ 0x0acd: 0x25b7, // rightopentriangle
574
+ 0x0ace: 0x25cb, // emopencircle
575
+ 0x0acf: 0x25af, // emopenrectangle
576
+ 0x0ad0: 0x2018, // leftsinglequotemark
577
+ 0x0ad1: 0x2019, // rightsinglequotemark
578
+ 0x0ad2: 0x201c, // leftdoublequotemark
579
+ 0x0ad3: 0x201d, // rightdoublequotemark
580
+ 0x0ad4: 0x211e, // prescription
581
+ 0x0ad5: 0x2030, // permille
582
+ 0x0ad6: 0x2032, // minutes
583
+ 0x0ad7: 0x2033, // seconds
584
+ 0x0ad9: 0x271d, // latincross
585
+ 0x0adb: 0x25ac, // filledrectbullet
586
+ 0x0adc: 0x25c0, // filledlefttribullet
587
+ 0x0add: 0x25b6, // filledrighttribullet
588
+ 0x0ade: 0x25cf, // emfilledcircle
589
+ 0x0adf: 0x25ae, // emfilledrect
590
+ 0x0ae0: 0x25e6, // enopencircbullet
591
+ 0x0ae1: 0x25ab, // enopensquarebullet
592
+ 0x0ae2: 0x25ad, // openrectbullet
593
+ 0x0ae3: 0x25b3, // opentribulletup
594
+ 0x0ae4: 0x25bd, // opentribulletdown
595
+ 0x0ae5: 0x2606, // openstar
596
+ 0x0ae6: 0x2022, // enfilledcircbullet
597
+ 0x0ae7: 0x25aa, // enfilledsqbullet
598
+ 0x0ae8: 0x25b2, // filledtribulletup
599
+ 0x0ae9: 0x25bc, // filledtribulletdown
600
+ 0x0aea: 0x261c, // leftpointer
601
+ 0x0aeb: 0x261e, // rightpointer
602
+ 0x0aec: 0x2663, // club
603
+ 0x0aed: 0x2666, // diamond
604
+ 0x0aee: 0x2665, // heart
605
+ 0x0af0: 0x2720, // maltesecross
606
+ 0x0af1: 0x2020, // dagger
607
+ 0x0af2: 0x2021, // doubledagger
608
+ 0x0af3: 0x2713, // checkmark
609
+ 0x0af4: 0x2717, // ballotcross
610
+ 0x0af5: 0x266f, // musicalsharp
611
+ 0x0af6: 0x266d, // musicalflat
612
+ 0x0af7: 0x2642, // malesymbol
613
+ 0x0af8: 0x2640, // femalesymbol
614
+ 0x0af9: 0x260e, // telephone
615
+ 0x0afa: 0x2315, // telephonerecorder
616
+ 0x0afb: 0x2117, // phonographcopyright
617
+ 0x0afc: 0x2038, // caret
618
+ 0x0afd: 0x201a, // singlelowquotemark
619
+ 0x0afe: 0x201e, // doublelowquotemark
620
+ 0x0ba3: 0x003c, // leftcaret
621
+ 0x0ba6: 0x003e, // rightcaret
622
+ 0x0ba8: 0x2228, // downcaret
623
+ 0x0ba9: 0x2227, // upcaret
624
+ 0x0bc0: 0x00af, // overbar
625
+ 0x0bc2: 0x22a4, // downtack
626
+ 0x0bc3: 0x2229, // upshoe
627
+ 0x0bc4: 0x230a, // downstile
628
+ 0x0bc6: 0x005f, // underbar
629
+ 0x0bca: 0x2218, // jot
630
+ 0x0bcc: 0x2395, // quad
631
+ 0x0bce: 0x22a5, // uptack
632
+ 0x0bcf: 0x25cb, // circle
633
+ 0x0bd3: 0x2308, // upstile
634
+ 0x0bd6: 0x222a, // downshoe
635
+ 0x0bd8: 0x2283, // rightshoe
636
+ 0x0bda: 0x2282, // leftshoe
637
+ 0x0bdc: 0x22a3, // lefttack
638
+ 0x0bfc: 0x22a2, // righttack
639
+ 0x0cdf: 0x2017, // hebrew_doublelowline
640
+ 0x0ce0: 0x05d0, // hebrew_aleph
641
+ 0x0ce1: 0x05d1, // hebrew_bet
642
+ 0x0ce2: 0x05d2, // hebrew_gimel
643
+ 0x0ce3: 0x05d3, // hebrew_dalet
644
+ 0x0ce4: 0x05d4, // hebrew_he
645
+ 0x0ce5: 0x05d5, // hebrew_waw
646
+ 0x0ce6: 0x05d6, // hebrew_zain
647
+ 0x0ce7: 0x05d7, // hebrew_chet
648
+ 0x0ce8: 0x05d8, // hebrew_tet
649
+ 0x0ce9: 0x05d9, // hebrew_yod
650
+ 0x0cea: 0x05da, // hebrew_finalkaph
651
+ 0x0ceb: 0x05db, // hebrew_kaph
652
+ 0x0cec: 0x05dc, // hebrew_lamed
653
+ 0x0ced: 0x05dd, // hebrew_finalmem
654
+ 0x0cee: 0x05de, // hebrew_mem
655
+ 0x0cef: 0x05df, // hebrew_finalnun
656
+ 0x0cf0: 0x05e0, // hebrew_nun
657
+ 0x0cf1: 0x05e1, // hebrew_samech
658
+ 0x0cf2: 0x05e2, // hebrew_ayin
659
+ 0x0cf3: 0x05e3, // hebrew_finalpe
660
+ 0x0cf4: 0x05e4, // hebrew_pe
661
+ 0x0cf5: 0x05e5, // hebrew_finalzade
662
+ 0x0cf6: 0x05e6, // hebrew_zade
663
+ 0x0cf7: 0x05e7, // hebrew_qoph
664
+ 0x0cf8: 0x05e8, // hebrew_resh
665
+ 0x0cf9: 0x05e9, // hebrew_shin
666
+ 0x0cfa: 0x05ea, // hebrew_taw
667
+ 0x0da1: 0x0e01, // Thai_kokai
668
+ 0x0da2: 0x0e02, // Thai_khokhai
669
+ 0x0da3: 0x0e03, // Thai_khokhuat
670
+ 0x0da4: 0x0e04, // Thai_khokhwai
671
+ 0x0da5: 0x0e05, // Thai_khokhon
672
+ 0x0da6: 0x0e06, // Thai_khorakhang
673
+ 0x0da7: 0x0e07, // Thai_ngongu
674
+ 0x0da8: 0x0e08, // Thai_chochan
675
+ 0x0da9: 0x0e09, // Thai_choching
676
+ 0x0daa: 0x0e0a, // Thai_chochang
677
+ 0x0dab: 0x0e0b, // Thai_soso
678
+ 0x0dac: 0x0e0c, // Thai_chochoe
679
+ 0x0dad: 0x0e0d, // Thai_yoying
680
+ 0x0dae: 0x0e0e, // Thai_dochada
681
+ 0x0daf: 0x0e0f, // Thai_topatak
682
+ 0x0db0: 0x0e10, // Thai_thothan
683
+ 0x0db1: 0x0e11, // Thai_thonangmontho
684
+ 0x0db2: 0x0e12, // Thai_thophuthao
685
+ 0x0db3: 0x0e13, // Thai_nonen
686
+ 0x0db4: 0x0e14, // Thai_dodek
687
+ 0x0db5: 0x0e15, // Thai_totao
688
+ 0x0db6: 0x0e16, // Thai_thothung
689
+ 0x0db7: 0x0e17, // Thai_thothahan
690
+ 0x0db8: 0x0e18, // Thai_thothong
691
+ 0x0db9: 0x0e19, // Thai_nonu
692
+ 0x0dba: 0x0e1a, // Thai_bobaimai
693
+ 0x0dbb: 0x0e1b, // Thai_popla
694
+ 0x0dbc: 0x0e1c, // Thai_phophung
695
+ 0x0dbd: 0x0e1d, // Thai_fofa
696
+ 0x0dbe: 0x0e1e, // Thai_phophan
697
+ 0x0dbf: 0x0e1f, // Thai_fofan
698
+ 0x0dc0: 0x0e20, // Thai_phosamphao
699
+ 0x0dc1: 0x0e21, // Thai_moma
700
+ 0x0dc2: 0x0e22, // Thai_yoyak
701
+ 0x0dc3: 0x0e23, // Thai_rorua
702
+ 0x0dc4: 0x0e24, // Thai_ru
703
+ 0x0dc5: 0x0e25, // Thai_loling
704
+ 0x0dc6: 0x0e26, // Thai_lu
705
+ 0x0dc7: 0x0e27, // Thai_wowaen
706
+ 0x0dc8: 0x0e28, // Thai_sosala
707
+ 0x0dc9: 0x0e29, // Thai_sorusi
708
+ 0x0dca: 0x0e2a, // Thai_sosua
709
+ 0x0dcb: 0x0e2b, // Thai_hohip
710
+ 0x0dcc: 0x0e2c, // Thai_lochula
711
+ 0x0dcd: 0x0e2d, // Thai_oang
712
+ 0x0dce: 0x0e2e, // Thai_honokhuk
713
+ 0x0dcf: 0x0e2f, // Thai_paiyannoi
714
+ 0x0dd0: 0x0e30, // Thai_saraa
715
+ 0x0dd1: 0x0e31, // Thai_maihanakat
716
+ 0x0dd2: 0x0e32, // Thai_saraaa
717
+ 0x0dd3: 0x0e33, // Thai_saraam
718
+ 0x0dd4: 0x0e34, // Thai_sarai
719
+ 0x0dd5: 0x0e35, // Thai_saraii
720
+ 0x0dd6: 0x0e36, // Thai_saraue
721
+ 0x0dd7: 0x0e37, // Thai_sarauee
722
+ 0x0dd8: 0x0e38, // Thai_sarau
723
+ 0x0dd9: 0x0e39, // Thai_sarauu
724
+ 0x0dda: 0x0e3a, // Thai_phinthu
725
+ 0x0ddf: 0x0e3f, // Thai_baht
726
+ 0x0de0: 0x0e40, // Thai_sarae
727
+ 0x0de1: 0x0e41, // Thai_saraae
728
+ 0x0de2: 0x0e42, // Thai_sarao
729
+ 0x0de3: 0x0e43, // Thai_saraaimaimuan
730
+ 0x0de4: 0x0e44, // Thai_saraaimaimalai
731
+ 0x0de5: 0x0e45, // Thai_lakkhangyao
732
+ 0x0de6: 0x0e46, // Thai_maiyamok
733
+ 0x0de7: 0x0e47, // Thai_maitaikhu
734
+ 0x0de8: 0x0e48, // Thai_maiek
735
+ 0x0de9: 0x0e49, // Thai_maitho
736
+ 0x0dea: 0x0e4a, // Thai_maitri
737
+ 0x0deb: 0x0e4b, // Thai_maichattawa
738
+ 0x0dec: 0x0e4c, // Thai_thanthakhat
739
+ 0x0ded: 0x0e4d, // Thai_nikhahit
740
+ 0x0df0: 0x0e50, // Thai_leksun
741
+ 0x0df1: 0x0e51, // Thai_leknung
742
+ 0x0df2: 0x0e52, // Thai_leksong
743
+ 0x0df3: 0x0e53, // Thai_leksam
744
+ 0x0df4: 0x0e54, // Thai_leksi
745
+ 0x0df5: 0x0e55, // Thai_lekha
746
+ 0x0df6: 0x0e56, // Thai_lekhok
747
+ 0x0df7: 0x0e57, // Thai_lekchet
748
+ 0x0df8: 0x0e58, // Thai_lekpaet
749
+ 0x0df9: 0x0e59, // Thai_lekkao
750
+ 0x0ea1: 0x3131, // Hangul_Kiyeog
751
+ 0x0ea2: 0x3132, // Hangul_SsangKiyeog
752
+ 0x0ea3: 0x3133, // Hangul_KiyeogSios
753
+ 0x0ea4: 0x3134, // Hangul_Nieun
754
+ 0x0ea5: 0x3135, // Hangul_NieunJieuj
755
+ 0x0ea6: 0x3136, // Hangul_NieunHieuh
756
+ 0x0ea7: 0x3137, // Hangul_Dikeud
757
+ 0x0ea8: 0x3138, // Hangul_SsangDikeud
758
+ 0x0ea9: 0x3139, // Hangul_Rieul
759
+ 0x0eaa: 0x313a, // Hangul_RieulKiyeog
760
+ 0x0eab: 0x313b, // Hangul_RieulMieum
761
+ 0x0eac: 0x313c, // Hangul_RieulPieub
762
+ 0x0ead: 0x313d, // Hangul_RieulSios
763
+ 0x0eae: 0x313e, // Hangul_RieulTieut
764
+ 0x0eaf: 0x313f, // Hangul_RieulPhieuf
765
+ 0x0eb0: 0x3140, // Hangul_RieulHieuh
766
+ 0x0eb1: 0x3141, // Hangul_Mieum
767
+ 0x0eb2: 0x3142, // Hangul_Pieub
768
+ 0x0eb3: 0x3143, // Hangul_SsangPieub
769
+ 0x0eb4: 0x3144, // Hangul_PieubSios
770
+ 0x0eb5: 0x3145, // Hangul_Sios
771
+ 0x0eb6: 0x3146, // Hangul_SsangSios
772
+ 0x0eb7: 0x3147, // Hangul_Ieung
773
+ 0x0eb8: 0x3148, // Hangul_Jieuj
774
+ 0x0eb9: 0x3149, // Hangul_SsangJieuj
775
+ 0x0eba: 0x314a, // Hangul_Cieuc
776
+ 0x0ebb: 0x314b, // Hangul_Khieuq
777
+ 0x0ebc: 0x314c, // Hangul_Tieut
778
+ 0x0ebd: 0x314d, // Hangul_Phieuf
779
+ 0x0ebe: 0x314e, // Hangul_Hieuh
780
+ 0x0ebf: 0x314f, // Hangul_A
781
+ 0x0ec0: 0x3150, // Hangul_AE
782
+ 0x0ec1: 0x3151, // Hangul_YA
783
+ 0x0ec2: 0x3152, // Hangul_YAE
784
+ 0x0ec3: 0x3153, // Hangul_EO
785
+ 0x0ec4: 0x3154, // Hangul_E
786
+ 0x0ec5: 0x3155, // Hangul_YEO
787
+ 0x0ec6: 0x3156, // Hangul_YE
788
+ 0x0ec7: 0x3157, // Hangul_O
789
+ 0x0ec8: 0x3158, // Hangul_WA
790
+ 0x0ec9: 0x3159, // Hangul_WAE
791
+ 0x0eca: 0x315a, // Hangul_OE
792
+ 0x0ecb: 0x315b, // Hangul_YO
793
+ 0x0ecc: 0x315c, // Hangul_U
794
+ 0x0ecd: 0x315d, // Hangul_WEO
795
+ 0x0ece: 0x315e, // Hangul_WE
796
+ 0x0ecf: 0x315f, // Hangul_WI
797
+ 0x0ed0: 0x3160, // Hangul_YU
798
+ 0x0ed1: 0x3161, // Hangul_EU
799
+ 0x0ed2: 0x3162, // Hangul_YI
800
+ 0x0ed3: 0x3163, // Hangul_I
801
+ 0x0ed4: 0x11a8, // Hangul_J_Kiyeog
802
+ 0x0ed5: 0x11a9, // Hangul_J_SsangKiyeog
803
+ 0x0ed6: 0x11aa, // Hangul_J_KiyeogSios
804
+ 0x0ed7: 0x11ab, // Hangul_J_Nieun
805
+ 0x0ed8: 0x11ac, // Hangul_J_NieunJieuj
806
+ 0x0ed9: 0x11ad, // Hangul_J_NieunHieuh
807
+ 0x0eda: 0x11ae, // Hangul_J_Dikeud
808
+ 0x0edb: 0x11af, // Hangul_J_Rieul
809
+ 0x0edc: 0x11b0, // Hangul_J_RieulKiyeog
810
+ 0x0edd: 0x11b1, // Hangul_J_RieulMieum
811
+ 0x0ede: 0x11b2, // Hangul_J_RieulPieub
812
+ 0x0edf: 0x11b3, // Hangul_J_RieulSios
813
+ 0x0ee0: 0x11b4, // Hangul_J_RieulTieut
814
+ 0x0ee1: 0x11b5, // Hangul_J_RieulPhieuf
815
+ 0x0ee2: 0x11b6, // Hangul_J_RieulHieuh
816
+ 0x0ee3: 0x11b7, // Hangul_J_Mieum
817
+ 0x0ee4: 0x11b8, // Hangul_J_Pieub
818
+ 0x0ee5: 0x11b9, // Hangul_J_PieubSios
819
+ 0x0ee6: 0x11ba, // Hangul_J_Sios
820
+ 0x0ee7: 0x11bb, // Hangul_J_SsangSios
821
+ 0x0ee8: 0x11bc, // Hangul_J_Ieung
822
+ 0x0ee9: 0x11bd, // Hangul_J_Jieuj
823
+ 0x0eea: 0x11be, // Hangul_J_Cieuc
824
+ 0x0eeb: 0x11bf, // Hangul_J_Khieuq
825
+ 0x0eec: 0x11c0, // Hangul_J_Tieut
826
+ 0x0eed: 0x11c1, // Hangul_J_Phieuf
827
+ 0x0eee: 0x11c2, // Hangul_J_Hieuh
828
+ 0x0eef: 0x316d, // Hangul_RieulYeorinHieuh
829
+ 0x0ef0: 0x3171, // Hangul_SunkyeongeumMieum
830
+ 0x0ef1: 0x3178, // Hangul_SunkyeongeumPieub
831
+ 0x0ef2: 0x317f, // Hangul_PanSios
832
+ 0x0ef3: 0x3181, // Hangul_KkogjiDalrinIeung
833
+ 0x0ef4: 0x3184, // Hangul_SunkyeongeumPhieuf
834
+ 0x0ef5: 0x3186, // Hangul_YeorinHieuh
835
+ 0x0ef6: 0x318d, // Hangul_AraeA
836
+ 0x0ef7: 0x318e, // Hangul_AraeAE
837
+ 0x0ef8: 0x11eb, // Hangul_J_PanSios
838
+ 0x0ef9: 0x11f0, // Hangul_J_KkogjiDalrinIeung
839
+ 0x0efa: 0x11f9, // Hangul_J_YeorinHieuh
840
+ 0x0eff: 0x20a9, // Korean_Won
841
+ 0x12a1: 0x1e02, // Babovedot
842
+ 0x12a2: 0x1e03, // babovedot
843
+ 0x12a6: 0x1e0a, // Dabovedot
844
+ 0x12a8: 0x1e80, // Wgrave
845
+ 0x12aa: 0x1e82, // Wacute
846
+ 0x12ab: 0x1e0b, // dabovedot
847
+ 0x12ac: 0x1ef2, // Ygrave
848
+ 0x12b0: 0x1e1e, // Fabovedot
849
+ 0x12b1: 0x1e1f, // fabovedot
850
+ 0x12b4: 0x1e40, // Mabovedot
851
+ 0x12b5: 0x1e41, // mabovedot
852
+ 0x12b7: 0x1e56, // Pabovedot
853
+ 0x12b8: 0x1e81, // wgrave
854
+ 0x12b9: 0x1e57, // pabovedot
855
+ 0x12ba: 0x1e83, // wacute
856
+ 0x12bb: 0x1e60, // Sabovedot
857
+ 0x12bc: 0x1ef3, // ygrave
858
+ 0x12bd: 0x1e84, // Wdiaeresis
859
+ 0x12be: 0x1e85, // wdiaeresis
860
+ 0x12bf: 0x1e61, // sabovedot
861
+ 0x12d0: 0x0174, // Wcircumflex
862
+ 0x12d7: 0x1e6a, // Tabovedot
863
+ 0x12de: 0x0176, // Ycircumflex
864
+ 0x12f0: 0x0175, // wcircumflex
865
+ 0x12f7: 0x1e6b, // tabovedot
866
+ 0x12fe: 0x0177, // ycircumflex
867
+ 0x13bc: 0x0152, // OE
868
+ 0x13bd: 0x0153, // oe
869
+ 0x13be: 0x0178, // Ydiaeresis
870
+ 0x14a2: 0x0587, // Armenian_ligature_ew
871
+ 0x14a3: 0x0589, // Armenian_verjaket
872
+ 0x14a4: 0x0029, // Armenian_parenright
873
+ 0x14a5: 0x0028, // Armenian_parenleft
874
+ 0x14a6: 0x00bb, // Armenian_guillemotright
875
+ 0x14a7: 0x00ab, // Armenian_guillemotleft
876
+ 0x14a8: 0x2014, // Armenian_em_dash
877
+ 0x14a9: 0x002e, // Armenian_mijaket
878
+ 0x14aa: 0x055d, // Armenian_but
879
+ 0x14ab: 0x002c, // Armenian_comma
880
+ 0x14ac: 0x2013, // Armenian_en_dash
881
+ 0x14ad: 0x058a, // Armenian_yentamna
882
+ 0x14ae: 0x2026, // Armenian_ellipsis
883
+ 0x14af: 0x055c, // Armenian_amanak
884
+ 0x14b0: 0x055b, // Armenian_shesht
885
+ 0x14b1: 0x055e, // Armenian_paruyk
886
+ 0x14b2: 0x0531, // Armenian_AYB
887
+ 0x14b3: 0x0561, // Armenian_ayb
888
+ 0x14b4: 0x0532, // Armenian_BEN
889
+ 0x14b5: 0x0562, // Armenian_ben
890
+ 0x14b6: 0x0533, // Armenian_GIM
891
+ 0x14b7: 0x0563, // Armenian_gim
892
+ 0x14b8: 0x0534, // Armenian_DA
893
+ 0x14b9: 0x0564, // Armenian_da
894
+ 0x14ba: 0x0535, // Armenian_YECH
895
+ 0x14bb: 0x0565, // Armenian_yech
896
+ 0x14bc: 0x0536, // Armenian_ZA
897
+ 0x14bd: 0x0566, // Armenian_za
898
+ 0x14be: 0x0537, // Armenian_E
899
+ 0x14bf: 0x0567, // Armenian_e
900
+ 0x14c0: 0x0538, // Armenian_AT
901
+ 0x14c1: 0x0568, // Armenian_at
902
+ 0x14c2: 0x0539, // Armenian_TO
903
+ 0x14c3: 0x0569, // Armenian_to
904
+ 0x14c4: 0x053a, // Armenian_ZHE
905
+ 0x14c5: 0x056a, // Armenian_zhe
906
+ 0x14c6: 0x053b, // Armenian_INI
907
+ 0x14c7: 0x056b, // Armenian_ini
908
+ 0x14c8: 0x053c, // Armenian_LYUN
909
+ 0x14c9: 0x056c, // Armenian_lyun
910
+ 0x14ca: 0x053d, // Armenian_KHE
911
+ 0x14cb: 0x056d, // Armenian_khe
912
+ 0x14cc: 0x053e, // Armenian_TSA
913
+ 0x14cd: 0x056e, // Armenian_tsa
914
+ 0x14ce: 0x053f, // Armenian_KEN
915
+ 0x14cf: 0x056f, // Armenian_ken
916
+ 0x14d0: 0x0540, // Armenian_HO
917
+ 0x14d1: 0x0570, // Armenian_ho
918
+ 0x14d2: 0x0541, // Armenian_DZA
919
+ 0x14d3: 0x0571, // Armenian_dza
920
+ 0x14d4: 0x0542, // Armenian_GHAT
921
+ 0x14d5: 0x0572, // Armenian_ghat
922
+ 0x14d6: 0x0543, // Armenian_TCHE
923
+ 0x14d7: 0x0573, // Armenian_tche
924
+ 0x14d8: 0x0544, // Armenian_MEN
925
+ 0x14d9: 0x0574, // Armenian_men
926
+ 0x14da: 0x0545, // Armenian_HI
927
+ 0x14db: 0x0575, // Armenian_hi
928
+ 0x14dc: 0x0546, // Armenian_NU
929
+ 0x14dd: 0x0576, // Armenian_nu
930
+ 0x14de: 0x0547, // Armenian_SHA
931
+ 0x14df: 0x0577, // Armenian_sha
932
+ 0x14e0: 0x0548, // Armenian_VO
933
+ 0x14e1: 0x0578, // Armenian_vo
934
+ 0x14e2: 0x0549, // Armenian_CHA
935
+ 0x14e3: 0x0579, // Armenian_cha
936
+ 0x14e4: 0x054a, // Armenian_PE
937
+ 0x14e5: 0x057a, // Armenian_pe
938
+ 0x14e6: 0x054b, // Armenian_JE
939
+ 0x14e7: 0x057b, // Armenian_je
940
+ 0x14e8: 0x054c, // Armenian_RA
941
+ 0x14e9: 0x057c, // Armenian_ra
942
+ 0x14ea: 0x054d, // Armenian_SE
943
+ 0x14eb: 0x057d, // Armenian_se
944
+ 0x14ec: 0x054e, // Armenian_VEV
945
+ 0x14ed: 0x057e, // Armenian_vev
946
+ 0x14ee: 0x054f, // Armenian_TYUN
947
+ 0x14ef: 0x057f, // Armenian_tyun
948
+ 0x14f0: 0x0550, // Armenian_RE
949
+ 0x14f1: 0x0580, // Armenian_re
950
+ 0x14f2: 0x0551, // Armenian_TSO
951
+ 0x14f3: 0x0581, // Armenian_tso
952
+ 0x14f4: 0x0552, // Armenian_VYUN
953
+ 0x14f5: 0x0582, // Armenian_vyun
954
+ 0x14f6: 0x0553, // Armenian_PYUR
955
+ 0x14f7: 0x0583, // Armenian_pyur
956
+ 0x14f8: 0x0554, // Armenian_KE
957
+ 0x14f9: 0x0584, // Armenian_ke
958
+ 0x14fa: 0x0555, // Armenian_O
959
+ 0x14fb: 0x0585, // Armenian_o
960
+ 0x14fc: 0x0556, // Armenian_FE
961
+ 0x14fd: 0x0586, // Armenian_fe
962
+ 0x14fe: 0x055a, // Armenian_apostrophe
963
+ 0x14ff: 0x00a7, // Armenian_section_sign
964
+ 0x15d0: 0x10d0, // Georgian_an
965
+ 0x15d1: 0x10d1, // Georgian_ban
966
+ 0x15d2: 0x10d2, // Georgian_gan
967
+ 0x15d3: 0x10d3, // Georgian_don
968
+ 0x15d4: 0x10d4, // Georgian_en
969
+ 0x15d5: 0x10d5, // Georgian_vin
970
+ 0x15d6: 0x10d6, // Georgian_zen
971
+ 0x15d7: 0x10d7, // Georgian_tan
972
+ 0x15d8: 0x10d8, // Georgian_in
973
+ 0x15d9: 0x10d9, // Georgian_kan
974
+ 0x15da: 0x10da, // Georgian_las
975
+ 0x15db: 0x10db, // Georgian_man
976
+ 0x15dc: 0x10dc, // Georgian_nar
977
+ 0x15dd: 0x10dd, // Georgian_on
978
+ 0x15de: 0x10de, // Georgian_par
979
+ 0x15df: 0x10df, // Georgian_zhar
980
+ 0x15e0: 0x10e0, // Georgian_rae
981
+ 0x15e1: 0x10e1, // Georgian_san
982
+ 0x15e2: 0x10e2, // Georgian_tar
983
+ 0x15e3: 0x10e3, // Georgian_un
984
+ 0x15e4: 0x10e4, // Georgian_phar
985
+ 0x15e5: 0x10e5, // Georgian_khar
986
+ 0x15e6: 0x10e6, // Georgian_ghan
987
+ 0x15e7: 0x10e7, // Georgian_qar
988
+ 0x15e8: 0x10e8, // Georgian_shin
989
+ 0x15e9: 0x10e9, // Georgian_chin
990
+ 0x15ea: 0x10ea, // Georgian_can
991
+ 0x15eb: 0x10eb, // Georgian_jil
992
+ 0x15ec: 0x10ec, // Georgian_cil
993
+ 0x15ed: 0x10ed, // Georgian_char
994
+ 0x15ee: 0x10ee, // Georgian_xan
995
+ 0x15ef: 0x10ef, // Georgian_jhan
996
+ 0x15f0: 0x10f0, // Georgian_hae
997
+ 0x15f1: 0x10f1, // Georgian_he
998
+ 0x15f2: 0x10f2, // Georgian_hie
999
+ 0x15f3: 0x10f3, // Georgian_we
1000
+ 0x15f4: 0x10f4, // Georgian_har
1001
+ 0x15f5: 0x10f5, // Georgian_hoe
1002
+ 0x15f6: 0x10f6, // Georgian_fi
1003
+ 0x16a3: 0x1e8a, // Xabovedot
1004
+ 0x16a6: 0x012c, // Ibreve
1005
+ 0x16a9: 0x01b5, // Zstroke
1006
+ 0x16aa: 0x01e6, // Gcaron
1007
+ 0x16af: 0x019f, // Obarred
1008
+ 0x16b3: 0x1e8b, // xabovedot
1009
+ 0x16b6: 0x012d, // ibreve
1010
+ 0x16b9: 0x01b6, // zstroke
1011
+ 0x16ba: 0x01e7, // gcaron
1012
+ 0x16bd: 0x01d2, // ocaron
1013
+ 0x16bf: 0x0275, // obarred
1014
+ 0x16c6: 0x018f, // SCHWA
1015
+ 0x16d1: 0x1e36, // Lbelowdot
1016
+ 0x16e1: 0x1e37, // lbelowdot
1017
+ 0x16f6: 0x0259, // schwa
1018
+ 0x1e9f: 0x0303, // combining_tilde
1019
+ 0x1ea0: 0x1ea0, // Abelowdot
1020
+ 0x1ea1: 0x1ea1, // abelowdot
1021
+ 0x1ea2: 0x1ea2, // Ahook
1022
+ 0x1ea3: 0x1ea3, // ahook
1023
+ 0x1ea4: 0x1ea4, // Acircumflexacute
1024
+ 0x1ea5: 0x1ea5, // acircumflexacute
1025
+ 0x1ea6: 0x1ea6, // Acircumflexgrave
1026
+ 0x1ea7: 0x1ea7, // acircumflexgrave
1027
+ 0x1ea8: 0x1ea8, // Acircumflexhook
1028
+ 0x1ea9: 0x1ea9, // acircumflexhook
1029
+ 0x1eaa: 0x1eaa, // Acircumflextilde
1030
+ 0x1eab: 0x1eab, // acircumflextilde
1031
+ 0x1eac: 0x1eac, // Acircumflexbelowdot
1032
+ 0x1ead: 0x1ead, // acircumflexbelowdot
1033
+ 0x1eae: 0x1eae, // Abreveacute
1034
+ 0x1eaf: 0x1eaf, // abreveacute
1035
+ 0x1eb0: 0x1eb0, // Abrevegrave
1036
+ 0x1eb1: 0x1eb1, // abrevegrave
1037
+ 0x1eb2: 0x1eb2, // Abrevehook
1038
+ 0x1eb3: 0x1eb3, // abrevehook
1039
+ 0x1eb4: 0x1eb4, // Abrevetilde
1040
+ 0x1eb5: 0x1eb5, // abrevetilde
1041
+ 0x1eb6: 0x1eb6, // Abrevebelowdot
1042
+ 0x1eb7: 0x1eb7, // abrevebelowdot
1043
+ 0x1eb8: 0x1eb8, // Ebelowdot
1044
+ 0x1eb9: 0x1eb9, // ebelowdot
1045
+ 0x1eba: 0x1eba, // Ehook
1046
+ 0x1ebb: 0x1ebb, // ehook
1047
+ 0x1ebc: 0x1ebc, // Etilde
1048
+ 0x1ebd: 0x1ebd, // etilde
1049
+ 0x1ebe: 0x1ebe, // Ecircumflexacute
1050
+ 0x1ebf: 0x1ebf, // ecircumflexacute
1051
+ 0x1ec0: 0x1ec0, // Ecircumflexgrave
1052
+ 0x1ec1: 0x1ec1, // ecircumflexgrave
1053
+ 0x1ec2: 0x1ec2, // Ecircumflexhook
1054
+ 0x1ec3: 0x1ec3, // ecircumflexhook
1055
+ 0x1ec4: 0x1ec4, // Ecircumflextilde
1056
+ 0x1ec5: 0x1ec5, // ecircumflextilde
1057
+ 0x1ec6: 0x1ec6, // Ecircumflexbelowdot
1058
+ 0x1ec7: 0x1ec7, // ecircumflexbelowdot
1059
+ 0x1ec8: 0x1ec8, // Ihook
1060
+ 0x1ec9: 0x1ec9, // ihook
1061
+ 0x1eca: 0x1eca, // Ibelowdot
1062
+ 0x1ecb: 0x1ecb, // ibelowdot
1063
+ 0x1ecc: 0x1ecc, // Obelowdot
1064
+ 0x1ecd: 0x1ecd, // obelowdot
1065
+ 0x1ece: 0x1ece, // Ohook
1066
+ 0x1ecf: 0x1ecf, // ohook
1067
+ 0x1ed0: 0x1ed0, // Ocircumflexacute
1068
+ 0x1ed1: 0x1ed1, // ocircumflexacute
1069
+ 0x1ed2: 0x1ed2, // Ocircumflexgrave
1070
+ 0x1ed3: 0x1ed3, // ocircumflexgrave
1071
+ 0x1ed4: 0x1ed4, // Ocircumflexhook
1072
+ 0x1ed5: 0x1ed5, // ocircumflexhook
1073
+ 0x1ed6: 0x1ed6, // Ocircumflextilde
1074
+ 0x1ed7: 0x1ed7, // ocircumflextilde
1075
+ 0x1ed8: 0x1ed8, // Ocircumflexbelowdot
1076
+ 0x1ed9: 0x1ed9, // ocircumflexbelowdot
1077
+ 0x1eda: 0x1eda, // Ohornacute
1078
+ 0x1edb: 0x1edb, // ohornacute
1079
+ 0x1edc: 0x1edc, // Ohorngrave
1080
+ 0x1edd: 0x1edd, // ohorngrave
1081
+ 0x1ede: 0x1ede, // Ohornhook
1082
+ 0x1edf: 0x1edf, // ohornhook
1083
+ 0x1ee0: 0x1ee0, // Ohorntilde
1084
+ 0x1ee1: 0x1ee1, // ohorntilde
1085
+ 0x1ee2: 0x1ee2, // Ohornbelowdot
1086
+ 0x1ee3: 0x1ee3, // ohornbelowdot
1087
+ 0x1ee4: 0x1ee4, // Ubelowdot
1088
+ 0x1ee5: 0x1ee5, // ubelowdot
1089
+ 0x1ee6: 0x1ee6, // Uhook
1090
+ 0x1ee7: 0x1ee7, // uhook
1091
+ 0x1ee8: 0x1ee8, // Uhornacute
1092
+ 0x1ee9: 0x1ee9, // uhornacute
1093
+ 0x1eea: 0x1eea, // Uhorngrave
1094
+ 0x1eeb: 0x1eeb, // uhorngrave
1095
+ 0x1eec: 0x1eec, // Uhornhook
1096
+ 0x1eed: 0x1eed, // uhornhook
1097
+ 0x1eee: 0x1eee, // Uhorntilde
1098
+ 0x1eef: 0x1eef, // uhorntilde
1099
+ 0x1ef0: 0x1ef0, // Uhornbelowdot
1100
+ 0x1ef1: 0x1ef1, // uhornbelowdot
1101
+ 0x1ef2: 0x0300, // combining_grave
1102
+ 0x1ef3: 0x0301, // combining_acute
1103
+ 0x1ef4: 0x1ef4, // Ybelowdot
1104
+ 0x1ef5: 0x1ef5, // ybelowdot
1105
+ 0x1ef6: 0x1ef6, // Yhook
1106
+ 0x1ef7: 0x1ef7, // yhook
1107
+ 0x1ef8: 0x1ef8, // Ytilde
1108
+ 0x1ef9: 0x1ef9, // ytilde
1109
+ 0x1efa: 0x01a0, // Ohorn
1110
+ 0x1efb: 0x01a1, // ohorn
1111
+ 0x1efc: 0x01af, // Uhorn
1112
+ 0x1efd: 0x01b0, // uhorn
1113
+ 0x1efe: 0x0309, // combining_hook
1114
+ 0x1eff: 0x0323, // combining_belowdot
1115
+ 0x20a0: 0x20a0, // EcuSign
1116
+ 0x20a1: 0x20a1, // ColonSign
1117
+ 0x20a2: 0x20a2, // CruzeiroSign
1118
+ 0x20a3: 0x20a3, // FFrancSign
1119
+ 0x20a4: 0x20a4, // LiraSign
1120
+ 0x20a5: 0x20a5, // MillSign
1121
+ 0x20a6: 0x20a6, // NairaSign
1122
+ 0x20a7: 0x20a7, // PesetaSign
1123
+ 0x20a8: 0x20a8, // RupeeSign
1124
+ 0x20a9: 0x20a9, // WonSign
1125
+ 0x20aa: 0x20aa, // NewSheqelSign
1126
+ 0x20ab: 0x20ab, // DongSign
1127
+ 0x20ac: 0x20ac, // EuroSign
1128
+ 0xff08: 0x0008, // BackSpace
1129
+ 0xff09: 0x0009, // Tab
1130
+ 0xff0a: 0x000a, // Linefeed
1131
+ 0xff0b: 0x000b, // Clear
1132
+ 0xff0d: 0x000d, // Return
1133
+ 0xff1b: 0x001b, // Escape
1134
+ 0xff80: 0x0020, // KP_Space
1135
+ 0xff89: 0x0009, // KP_Tab
1136
+ 0xff8d: 0x000d, // KP_Enter
1137
+ 0xffaa: 0x002a, // KP_Multiply
1138
+ 0xffab: 0x002b, // KP_Add
1139
+ 0xffac: 0x002c, // KP_Separator
1140
+ 0xffad: 0x002d, // KP_Subtract
1141
+ 0xffae: 0x002e, // KP_Decimal
1142
+ 0xffaf: 0x002f, // KP_Divide
1143
+ 0xffb0: 0x0030, // KP_0
1144
+ 0xffb1: 0x0031, // KP_1
1145
+ 0xffb2: 0x0032, // KP_2
1146
+ 0xffb3: 0x0033, // KP_3
1147
+ 0xffb4: 0x0034, // KP_4
1148
+ 0xffb5: 0x0035, // KP_5
1149
+ 0xffb6: 0x0036, // KP_6
1150
+ 0xffb7: 0x0037, // KP_7
1151
+ 0xffb8: 0x0038, // KP_8
1152
+ 0xffb9: 0x0039, // KP_9
1153
+ 0xffbd: 0x003d, // KP_Equal
1154
+ 0xffff: 0x007f, // Delete
1155
+ };
1156
+
1157
+ /**
1158
+ * The Unicode codepoint an X keysym types, or `undefined` when it types
1159
+ * nothing (arrows, function keys, modifiers, dead keys).
1160
+ *
1161
+ * Three rules, in the order Xlib's keysym2ucs.c applies them:
1162
+ *
1163
+ * 1. **Direct-Unicode keysyms.** X reserves `0x01000100`-`0x0110ffff` for
1164
+ * `0x01000000 | codepoint`, which is how every script added since the
1165
+ * 1990s is encoded and what modern non-Latin layouts emit. Like Xlib, the
1166
+ * whole `0x01xxxxxx` plane is accepted and masked, bounded at the largest
1167
+ * real codepoint; results below U+0020 are rejected, since keysyms for
1168
+ * control characters have their own legacy values.
1169
+ * 2. **Latin-1 keysyms map to themselves** over `0x20`-`0x7e` and
1170
+ * `0xa0`-`0xff`.
1171
+ * 3. **Everything else** comes from the generated table: the legacy script
1172
+ * blocks (Cyrillic, Greek, Arabic, Thai, …) plus the handful of keysyms in
1173
+ * `0xff00`-`0xffff` that really do produce a character — Return, Tab,
1174
+ * BackSpace, Escape, Delete and the keypad.
1175
+ *
1176
+ * @param {number} sym X keysym
1177
+ * @returns {number|undefined} Unicode codepoint, or undefined
1178
+ */
1179
+ export function keysymToUnicode(sym) {
1180
+ if (sym >= 0x01000000 && sym <= 0x0110ffff) {
1181
+ const cp = sym & 0x00ffffff;
1182
+ return cp >= 0x20 ? cp : undefined;
1183
+ }
1184
+ if ((sym >= 0x20 && sym <= 0x7e) || (sym >= 0xa0 && sym <= 0xff)) return sym;
1185
+ return LEGACY[sym];
1186
+ }