susi-qemu 0.0.3 → 0.0.6

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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/bin/susi +9 -4
  3. data/lib/disk.rb +7 -5
  4. data/lib/novnc/core/base64.js +104 -0
  5. data/lib/novnc/core/crypto/aes.js +178 -0
  6. data/lib/novnc/core/crypto/bigint.js +34 -0
  7. data/lib/novnc/core/crypto/crypto.js +90 -0
  8. data/lib/novnc/core/crypto/des.js +330 -0
  9. data/lib/novnc/core/crypto/dh.js +55 -0
  10. data/lib/novnc/core/crypto/md5.js +82 -0
  11. data/lib/novnc/core/crypto/rsa.js +132 -0
  12. data/lib/novnc/core/decoders/copyrect.js +27 -0
  13. data/lib/novnc/core/decoders/h264.js +321 -0
  14. data/lib/novnc/core/decoders/hextile.js +181 -0
  15. data/lib/novnc/core/decoders/jpeg.js +146 -0
  16. data/lib/novnc/core/decoders/raw.js +59 -0
  17. data/lib/novnc/core/decoders/rre.js +44 -0
  18. data/lib/novnc/core/decoders/tight.js +393 -0
  19. data/lib/novnc/core/decoders/tightpng.js +27 -0
  20. data/lib/novnc/core/decoders/zlib.js +51 -0
  21. data/lib/novnc/core/decoders/zrle.js +185 -0
  22. data/lib/novnc/core/deflator.js +84 -0
  23. data/lib/novnc/core/display.js +575 -0
  24. data/lib/novnc/core/encodings.js +53 -0
  25. data/lib/novnc/core/inflator.js +65 -0
  26. data/lib/novnc/core/input/domkeytable.js +311 -0
  27. data/lib/novnc/core/input/fixedkeys.js +129 -0
  28. data/lib/novnc/core/input/gesturehandler.js +567 -0
  29. data/lib/novnc/core/input/keyboard.js +294 -0
  30. data/lib/novnc/core/input/keysym.js +616 -0
  31. data/lib/novnc/core/input/keysymdef.js +688 -0
  32. data/lib/novnc/core/input/util.js +191 -0
  33. data/lib/novnc/core/input/vkeys.js +116 -0
  34. data/lib/novnc/core/input/xtscancodes.js +173 -0
  35. data/lib/novnc/core/ra2.js +312 -0
  36. data/lib/novnc/core/rfb.js +3257 -0
  37. data/lib/novnc/core/util/browser.js +172 -0
  38. data/lib/novnc/core/util/cursor.js +249 -0
  39. data/lib/novnc/core/util/element.js +32 -0
  40. data/lib/novnc/core/util/events.js +138 -0
  41. data/lib/novnc/core/util/eventtarget.js +35 -0
  42. data/lib/novnc/core/util/int.js +15 -0
  43. data/lib/novnc/core/util/logging.js +56 -0
  44. data/lib/novnc/core/util/strings.js +28 -0
  45. data/lib/novnc/core/websock.js +365 -0
  46. data/lib/novnc/screen.html +21 -0
  47. data/lib/novnc/vendor/pako/lib/utils/common.js +45 -0
  48. data/lib/novnc/vendor/pako/lib/zlib/adler32.js +27 -0
  49. data/lib/novnc/vendor/pako/lib/zlib/constants.js +47 -0
  50. data/lib/novnc/vendor/pako/lib/zlib/crc32.js +36 -0
  51. data/lib/novnc/vendor/pako/lib/zlib/deflate.js +1846 -0
  52. data/lib/novnc/vendor/pako/lib/zlib/gzheader.js +35 -0
  53. data/lib/novnc/vendor/pako/lib/zlib/inffast.js +324 -0
  54. data/lib/novnc/vendor/pako/lib/zlib/inflate.js +1527 -0
  55. data/lib/novnc/vendor/pako/lib/zlib/inftrees.js +322 -0
  56. data/lib/novnc/vendor/pako/lib/zlib/messages.js +11 -0
  57. data/lib/novnc/vendor/pako/lib/zlib/trees.js +1195 -0
  58. data/lib/novnc/vendor/pako/lib/zlib/zstream.js +24 -0
  59. data/lib/output.rb +11 -0
  60. data/lib/qmp.rb +6 -0
  61. data/lib/ssh.rb +3 -1
  62. data/lib/susi.rb +7 -6
  63. data/lib/version.rb +1 -1
  64. data/lib/vm.rb +36 -13
  65. data/lib/vnc.rb +34 -30
  66. metadata +85 -1
@@ -0,0 +1,688 @@
1
+ /*
2
+ * Mapping from Unicode codepoints to X11/RFB keysyms
3
+ *
4
+ * This file was automatically generated from keysymdef.h
5
+ * DO NOT EDIT!
6
+ */
7
+
8
+ /* Functions at the bottom */
9
+
10
+ const codepoints = {
11
+ 0x0100: 0x03c0, // XK_Amacron
12
+ 0x0101: 0x03e0, // XK_amacron
13
+ 0x0102: 0x01c3, // XK_Abreve
14
+ 0x0103: 0x01e3, // XK_abreve
15
+ 0x0104: 0x01a1, // XK_Aogonek
16
+ 0x0105: 0x01b1, // XK_aogonek
17
+ 0x0106: 0x01c6, // XK_Cacute
18
+ 0x0107: 0x01e6, // XK_cacute
19
+ 0x0108: 0x02c6, // XK_Ccircumflex
20
+ 0x0109: 0x02e6, // XK_ccircumflex
21
+ 0x010a: 0x02c5, // XK_Cabovedot
22
+ 0x010b: 0x02e5, // XK_cabovedot
23
+ 0x010c: 0x01c8, // XK_Ccaron
24
+ 0x010d: 0x01e8, // XK_ccaron
25
+ 0x010e: 0x01cf, // XK_Dcaron
26
+ 0x010f: 0x01ef, // XK_dcaron
27
+ 0x0110: 0x01d0, // XK_Dstroke
28
+ 0x0111: 0x01f0, // XK_dstroke
29
+ 0x0112: 0x03aa, // XK_Emacron
30
+ 0x0113: 0x03ba, // XK_emacron
31
+ 0x0116: 0x03cc, // XK_Eabovedot
32
+ 0x0117: 0x03ec, // XK_eabovedot
33
+ 0x0118: 0x01ca, // XK_Eogonek
34
+ 0x0119: 0x01ea, // XK_eogonek
35
+ 0x011a: 0x01cc, // XK_Ecaron
36
+ 0x011b: 0x01ec, // XK_ecaron
37
+ 0x011c: 0x02d8, // XK_Gcircumflex
38
+ 0x011d: 0x02f8, // XK_gcircumflex
39
+ 0x011e: 0x02ab, // XK_Gbreve
40
+ 0x011f: 0x02bb, // XK_gbreve
41
+ 0x0120: 0x02d5, // XK_Gabovedot
42
+ 0x0121: 0x02f5, // XK_gabovedot
43
+ 0x0122: 0x03ab, // XK_Gcedilla
44
+ 0x0123: 0x03bb, // XK_gcedilla
45
+ 0x0124: 0x02a6, // XK_Hcircumflex
46
+ 0x0125: 0x02b6, // XK_hcircumflex
47
+ 0x0126: 0x02a1, // XK_Hstroke
48
+ 0x0127: 0x02b1, // XK_hstroke
49
+ 0x0128: 0x03a5, // XK_Itilde
50
+ 0x0129: 0x03b5, // XK_itilde
51
+ 0x012a: 0x03cf, // XK_Imacron
52
+ 0x012b: 0x03ef, // XK_imacron
53
+ 0x012e: 0x03c7, // XK_Iogonek
54
+ 0x012f: 0x03e7, // XK_iogonek
55
+ 0x0130: 0x02a9, // XK_Iabovedot
56
+ 0x0131: 0x02b9, // XK_idotless
57
+ 0x0134: 0x02ac, // XK_Jcircumflex
58
+ 0x0135: 0x02bc, // XK_jcircumflex
59
+ 0x0136: 0x03d3, // XK_Kcedilla
60
+ 0x0137: 0x03f3, // XK_kcedilla
61
+ 0x0138: 0x03a2, // XK_kra
62
+ 0x0139: 0x01c5, // XK_Lacute
63
+ 0x013a: 0x01e5, // XK_lacute
64
+ 0x013b: 0x03a6, // XK_Lcedilla
65
+ 0x013c: 0x03b6, // XK_lcedilla
66
+ 0x013d: 0x01a5, // XK_Lcaron
67
+ 0x013e: 0x01b5, // XK_lcaron
68
+ 0x0141: 0x01a3, // XK_Lstroke
69
+ 0x0142: 0x01b3, // XK_lstroke
70
+ 0x0143: 0x01d1, // XK_Nacute
71
+ 0x0144: 0x01f1, // XK_nacute
72
+ 0x0145: 0x03d1, // XK_Ncedilla
73
+ 0x0146: 0x03f1, // XK_ncedilla
74
+ 0x0147: 0x01d2, // XK_Ncaron
75
+ 0x0148: 0x01f2, // XK_ncaron
76
+ 0x014a: 0x03bd, // XK_ENG
77
+ 0x014b: 0x03bf, // XK_eng
78
+ 0x014c: 0x03d2, // XK_Omacron
79
+ 0x014d: 0x03f2, // XK_omacron
80
+ 0x0150: 0x01d5, // XK_Odoubleacute
81
+ 0x0151: 0x01f5, // XK_odoubleacute
82
+ 0x0152: 0x13bc, // XK_OE
83
+ 0x0153: 0x13bd, // XK_oe
84
+ 0x0154: 0x01c0, // XK_Racute
85
+ 0x0155: 0x01e0, // XK_racute
86
+ 0x0156: 0x03a3, // XK_Rcedilla
87
+ 0x0157: 0x03b3, // XK_rcedilla
88
+ 0x0158: 0x01d8, // XK_Rcaron
89
+ 0x0159: 0x01f8, // XK_rcaron
90
+ 0x015a: 0x01a6, // XK_Sacute
91
+ 0x015b: 0x01b6, // XK_sacute
92
+ 0x015c: 0x02de, // XK_Scircumflex
93
+ 0x015d: 0x02fe, // XK_scircumflex
94
+ 0x015e: 0x01aa, // XK_Scedilla
95
+ 0x015f: 0x01ba, // XK_scedilla
96
+ 0x0160: 0x01a9, // XK_Scaron
97
+ 0x0161: 0x01b9, // XK_scaron
98
+ 0x0162: 0x01de, // XK_Tcedilla
99
+ 0x0163: 0x01fe, // XK_tcedilla
100
+ 0x0164: 0x01ab, // XK_Tcaron
101
+ 0x0165: 0x01bb, // XK_tcaron
102
+ 0x0166: 0x03ac, // XK_Tslash
103
+ 0x0167: 0x03bc, // XK_tslash
104
+ 0x0168: 0x03dd, // XK_Utilde
105
+ 0x0169: 0x03fd, // XK_utilde
106
+ 0x016a: 0x03de, // XK_Umacron
107
+ 0x016b: 0x03fe, // XK_umacron
108
+ 0x016c: 0x02dd, // XK_Ubreve
109
+ 0x016d: 0x02fd, // XK_ubreve
110
+ 0x016e: 0x01d9, // XK_Uring
111
+ 0x016f: 0x01f9, // XK_uring
112
+ 0x0170: 0x01db, // XK_Udoubleacute
113
+ 0x0171: 0x01fb, // XK_udoubleacute
114
+ 0x0172: 0x03d9, // XK_Uogonek
115
+ 0x0173: 0x03f9, // XK_uogonek
116
+ 0x0178: 0x13be, // XK_Ydiaeresis
117
+ 0x0179: 0x01ac, // XK_Zacute
118
+ 0x017a: 0x01bc, // XK_zacute
119
+ 0x017b: 0x01af, // XK_Zabovedot
120
+ 0x017c: 0x01bf, // XK_zabovedot
121
+ 0x017d: 0x01ae, // XK_Zcaron
122
+ 0x017e: 0x01be, // XK_zcaron
123
+ 0x0192: 0x08f6, // XK_function
124
+ 0x01d2: 0x10001d1, // XK_Ocaron
125
+ 0x02c7: 0x01b7, // XK_caron
126
+ 0x02d8: 0x01a2, // XK_breve
127
+ 0x02d9: 0x01ff, // XK_abovedot
128
+ 0x02db: 0x01b2, // XK_ogonek
129
+ 0x02dd: 0x01bd, // XK_doubleacute
130
+ 0x0385: 0x07ae, // XK_Greek_accentdieresis
131
+ 0x0386: 0x07a1, // XK_Greek_ALPHAaccent
132
+ 0x0388: 0x07a2, // XK_Greek_EPSILONaccent
133
+ 0x0389: 0x07a3, // XK_Greek_ETAaccent
134
+ 0x038a: 0x07a4, // XK_Greek_IOTAaccent
135
+ 0x038c: 0x07a7, // XK_Greek_OMICRONaccent
136
+ 0x038e: 0x07a8, // XK_Greek_UPSILONaccent
137
+ 0x038f: 0x07ab, // XK_Greek_OMEGAaccent
138
+ 0x0390: 0x07b6, // XK_Greek_iotaaccentdieresis
139
+ 0x0391: 0x07c1, // XK_Greek_ALPHA
140
+ 0x0392: 0x07c2, // XK_Greek_BETA
141
+ 0x0393: 0x07c3, // XK_Greek_GAMMA
142
+ 0x0394: 0x07c4, // XK_Greek_DELTA
143
+ 0x0395: 0x07c5, // XK_Greek_EPSILON
144
+ 0x0396: 0x07c6, // XK_Greek_ZETA
145
+ 0x0397: 0x07c7, // XK_Greek_ETA
146
+ 0x0398: 0x07c8, // XK_Greek_THETA
147
+ 0x0399: 0x07c9, // XK_Greek_IOTA
148
+ 0x039a: 0x07ca, // XK_Greek_KAPPA
149
+ 0x039b: 0x07cb, // XK_Greek_LAMDA
150
+ 0x039c: 0x07cc, // XK_Greek_MU
151
+ 0x039d: 0x07cd, // XK_Greek_NU
152
+ 0x039e: 0x07ce, // XK_Greek_XI
153
+ 0x039f: 0x07cf, // XK_Greek_OMICRON
154
+ 0x03a0: 0x07d0, // XK_Greek_PI
155
+ 0x03a1: 0x07d1, // XK_Greek_RHO
156
+ 0x03a3: 0x07d2, // XK_Greek_SIGMA
157
+ 0x03a4: 0x07d4, // XK_Greek_TAU
158
+ 0x03a5: 0x07d5, // XK_Greek_UPSILON
159
+ 0x03a6: 0x07d6, // XK_Greek_PHI
160
+ 0x03a7: 0x07d7, // XK_Greek_CHI
161
+ 0x03a8: 0x07d8, // XK_Greek_PSI
162
+ 0x03a9: 0x07d9, // XK_Greek_OMEGA
163
+ 0x03aa: 0x07a5, // XK_Greek_IOTAdieresis
164
+ 0x03ab: 0x07a9, // XK_Greek_UPSILONdieresis
165
+ 0x03ac: 0x07b1, // XK_Greek_alphaaccent
166
+ 0x03ad: 0x07b2, // XK_Greek_epsilonaccent
167
+ 0x03ae: 0x07b3, // XK_Greek_etaaccent
168
+ 0x03af: 0x07b4, // XK_Greek_iotaaccent
169
+ 0x03b0: 0x07ba, // XK_Greek_upsilonaccentdieresis
170
+ 0x03b1: 0x07e1, // XK_Greek_alpha
171
+ 0x03b2: 0x07e2, // XK_Greek_beta
172
+ 0x03b3: 0x07e3, // XK_Greek_gamma
173
+ 0x03b4: 0x07e4, // XK_Greek_delta
174
+ 0x03b5: 0x07e5, // XK_Greek_epsilon
175
+ 0x03b6: 0x07e6, // XK_Greek_zeta
176
+ 0x03b7: 0x07e7, // XK_Greek_eta
177
+ 0x03b8: 0x07e8, // XK_Greek_theta
178
+ 0x03b9: 0x07e9, // XK_Greek_iota
179
+ 0x03ba: 0x07ea, // XK_Greek_kappa
180
+ 0x03bb: 0x07eb, // XK_Greek_lamda
181
+ 0x03bc: 0x07ec, // XK_Greek_mu
182
+ 0x03bd: 0x07ed, // XK_Greek_nu
183
+ 0x03be: 0x07ee, // XK_Greek_xi
184
+ 0x03bf: 0x07ef, // XK_Greek_omicron
185
+ 0x03c0: 0x07f0, // XK_Greek_pi
186
+ 0x03c1: 0x07f1, // XK_Greek_rho
187
+ 0x03c2: 0x07f3, // XK_Greek_finalsmallsigma
188
+ 0x03c3: 0x07f2, // XK_Greek_sigma
189
+ 0x03c4: 0x07f4, // XK_Greek_tau
190
+ 0x03c5: 0x07f5, // XK_Greek_upsilon
191
+ 0x03c6: 0x07f6, // XK_Greek_phi
192
+ 0x03c7: 0x07f7, // XK_Greek_chi
193
+ 0x03c8: 0x07f8, // XK_Greek_psi
194
+ 0x03c9: 0x07f9, // XK_Greek_omega
195
+ 0x03ca: 0x07b5, // XK_Greek_iotadieresis
196
+ 0x03cb: 0x07b9, // XK_Greek_upsilondieresis
197
+ 0x03cc: 0x07b7, // XK_Greek_omicronaccent
198
+ 0x03cd: 0x07b8, // XK_Greek_upsilonaccent
199
+ 0x03ce: 0x07bb, // XK_Greek_omegaaccent
200
+ 0x0401: 0x06b3, // XK_Cyrillic_IO
201
+ 0x0402: 0x06b1, // XK_Serbian_DJE
202
+ 0x0403: 0x06b2, // XK_Macedonia_GJE
203
+ 0x0404: 0x06b4, // XK_Ukrainian_IE
204
+ 0x0405: 0x06b5, // XK_Macedonia_DSE
205
+ 0x0406: 0x06b6, // XK_Ukrainian_I
206
+ 0x0407: 0x06b7, // XK_Ukrainian_YI
207
+ 0x0408: 0x06b8, // XK_Cyrillic_JE
208
+ 0x0409: 0x06b9, // XK_Cyrillic_LJE
209
+ 0x040a: 0x06ba, // XK_Cyrillic_NJE
210
+ 0x040b: 0x06bb, // XK_Serbian_TSHE
211
+ 0x040c: 0x06bc, // XK_Macedonia_KJE
212
+ 0x040e: 0x06be, // XK_Byelorussian_SHORTU
213
+ 0x040f: 0x06bf, // XK_Cyrillic_DZHE
214
+ 0x0410: 0x06e1, // XK_Cyrillic_A
215
+ 0x0411: 0x06e2, // XK_Cyrillic_BE
216
+ 0x0412: 0x06f7, // XK_Cyrillic_VE
217
+ 0x0413: 0x06e7, // XK_Cyrillic_GHE
218
+ 0x0414: 0x06e4, // XK_Cyrillic_DE
219
+ 0x0415: 0x06e5, // XK_Cyrillic_IE
220
+ 0x0416: 0x06f6, // XK_Cyrillic_ZHE
221
+ 0x0417: 0x06fa, // XK_Cyrillic_ZE
222
+ 0x0418: 0x06e9, // XK_Cyrillic_I
223
+ 0x0419: 0x06ea, // XK_Cyrillic_SHORTI
224
+ 0x041a: 0x06eb, // XK_Cyrillic_KA
225
+ 0x041b: 0x06ec, // XK_Cyrillic_EL
226
+ 0x041c: 0x06ed, // XK_Cyrillic_EM
227
+ 0x041d: 0x06ee, // XK_Cyrillic_EN
228
+ 0x041e: 0x06ef, // XK_Cyrillic_O
229
+ 0x041f: 0x06f0, // XK_Cyrillic_PE
230
+ 0x0420: 0x06f2, // XK_Cyrillic_ER
231
+ 0x0421: 0x06f3, // XK_Cyrillic_ES
232
+ 0x0422: 0x06f4, // XK_Cyrillic_TE
233
+ 0x0423: 0x06f5, // XK_Cyrillic_U
234
+ 0x0424: 0x06e6, // XK_Cyrillic_EF
235
+ 0x0425: 0x06e8, // XK_Cyrillic_HA
236
+ 0x0426: 0x06e3, // XK_Cyrillic_TSE
237
+ 0x0427: 0x06fe, // XK_Cyrillic_CHE
238
+ 0x0428: 0x06fb, // XK_Cyrillic_SHA
239
+ 0x0429: 0x06fd, // XK_Cyrillic_SHCHA
240
+ 0x042a: 0x06ff, // XK_Cyrillic_HARDSIGN
241
+ 0x042b: 0x06f9, // XK_Cyrillic_YERU
242
+ 0x042c: 0x06f8, // XK_Cyrillic_SOFTSIGN
243
+ 0x042d: 0x06fc, // XK_Cyrillic_E
244
+ 0x042e: 0x06e0, // XK_Cyrillic_YU
245
+ 0x042f: 0x06f1, // XK_Cyrillic_YA
246
+ 0x0430: 0x06c1, // XK_Cyrillic_a
247
+ 0x0431: 0x06c2, // XK_Cyrillic_be
248
+ 0x0432: 0x06d7, // XK_Cyrillic_ve
249
+ 0x0433: 0x06c7, // XK_Cyrillic_ghe
250
+ 0x0434: 0x06c4, // XK_Cyrillic_de
251
+ 0x0435: 0x06c5, // XK_Cyrillic_ie
252
+ 0x0436: 0x06d6, // XK_Cyrillic_zhe
253
+ 0x0437: 0x06da, // XK_Cyrillic_ze
254
+ 0x0438: 0x06c9, // XK_Cyrillic_i
255
+ 0x0439: 0x06ca, // XK_Cyrillic_shorti
256
+ 0x043a: 0x06cb, // XK_Cyrillic_ka
257
+ 0x043b: 0x06cc, // XK_Cyrillic_el
258
+ 0x043c: 0x06cd, // XK_Cyrillic_em
259
+ 0x043d: 0x06ce, // XK_Cyrillic_en
260
+ 0x043e: 0x06cf, // XK_Cyrillic_o
261
+ 0x043f: 0x06d0, // XK_Cyrillic_pe
262
+ 0x0440: 0x06d2, // XK_Cyrillic_er
263
+ 0x0441: 0x06d3, // XK_Cyrillic_es
264
+ 0x0442: 0x06d4, // XK_Cyrillic_te
265
+ 0x0443: 0x06d5, // XK_Cyrillic_u
266
+ 0x0444: 0x06c6, // XK_Cyrillic_ef
267
+ 0x0445: 0x06c8, // XK_Cyrillic_ha
268
+ 0x0446: 0x06c3, // XK_Cyrillic_tse
269
+ 0x0447: 0x06de, // XK_Cyrillic_che
270
+ 0x0448: 0x06db, // XK_Cyrillic_sha
271
+ 0x0449: 0x06dd, // XK_Cyrillic_shcha
272
+ 0x044a: 0x06df, // XK_Cyrillic_hardsign
273
+ 0x044b: 0x06d9, // XK_Cyrillic_yeru
274
+ 0x044c: 0x06d8, // XK_Cyrillic_softsign
275
+ 0x044d: 0x06dc, // XK_Cyrillic_e
276
+ 0x044e: 0x06c0, // XK_Cyrillic_yu
277
+ 0x044f: 0x06d1, // XK_Cyrillic_ya
278
+ 0x0451: 0x06a3, // XK_Cyrillic_io
279
+ 0x0452: 0x06a1, // XK_Serbian_dje
280
+ 0x0453: 0x06a2, // XK_Macedonia_gje
281
+ 0x0454: 0x06a4, // XK_Ukrainian_ie
282
+ 0x0455: 0x06a5, // XK_Macedonia_dse
283
+ 0x0456: 0x06a6, // XK_Ukrainian_i
284
+ 0x0457: 0x06a7, // XK_Ukrainian_yi
285
+ 0x0458: 0x06a8, // XK_Cyrillic_je
286
+ 0x0459: 0x06a9, // XK_Cyrillic_lje
287
+ 0x045a: 0x06aa, // XK_Cyrillic_nje
288
+ 0x045b: 0x06ab, // XK_Serbian_tshe
289
+ 0x045c: 0x06ac, // XK_Macedonia_kje
290
+ 0x045e: 0x06ae, // XK_Byelorussian_shortu
291
+ 0x045f: 0x06af, // XK_Cyrillic_dzhe
292
+ 0x0490: 0x06bd, // XK_Ukrainian_GHE_WITH_UPTURN
293
+ 0x0491: 0x06ad, // XK_Ukrainian_ghe_with_upturn
294
+ 0x05d0: 0x0ce0, // XK_hebrew_aleph
295
+ 0x05d1: 0x0ce1, // XK_hebrew_bet
296
+ 0x05d2: 0x0ce2, // XK_hebrew_gimel
297
+ 0x05d3: 0x0ce3, // XK_hebrew_dalet
298
+ 0x05d4: 0x0ce4, // XK_hebrew_he
299
+ 0x05d5: 0x0ce5, // XK_hebrew_waw
300
+ 0x05d6: 0x0ce6, // XK_hebrew_zain
301
+ 0x05d7: 0x0ce7, // XK_hebrew_chet
302
+ 0x05d8: 0x0ce8, // XK_hebrew_tet
303
+ 0x05d9: 0x0ce9, // XK_hebrew_yod
304
+ 0x05da: 0x0cea, // XK_hebrew_finalkaph
305
+ 0x05db: 0x0ceb, // XK_hebrew_kaph
306
+ 0x05dc: 0x0cec, // XK_hebrew_lamed
307
+ 0x05dd: 0x0ced, // XK_hebrew_finalmem
308
+ 0x05de: 0x0cee, // XK_hebrew_mem
309
+ 0x05df: 0x0cef, // XK_hebrew_finalnun
310
+ 0x05e0: 0x0cf0, // XK_hebrew_nun
311
+ 0x05e1: 0x0cf1, // XK_hebrew_samech
312
+ 0x05e2: 0x0cf2, // XK_hebrew_ayin
313
+ 0x05e3: 0x0cf3, // XK_hebrew_finalpe
314
+ 0x05e4: 0x0cf4, // XK_hebrew_pe
315
+ 0x05e5: 0x0cf5, // XK_hebrew_finalzade
316
+ 0x05e6: 0x0cf6, // XK_hebrew_zade
317
+ 0x05e7: 0x0cf7, // XK_hebrew_qoph
318
+ 0x05e8: 0x0cf8, // XK_hebrew_resh
319
+ 0x05e9: 0x0cf9, // XK_hebrew_shin
320
+ 0x05ea: 0x0cfa, // XK_hebrew_taw
321
+ 0x060c: 0x05ac, // XK_Arabic_comma
322
+ 0x061b: 0x05bb, // XK_Arabic_semicolon
323
+ 0x061f: 0x05bf, // XK_Arabic_question_mark
324
+ 0x0621: 0x05c1, // XK_Arabic_hamza
325
+ 0x0622: 0x05c2, // XK_Arabic_maddaonalef
326
+ 0x0623: 0x05c3, // XK_Arabic_hamzaonalef
327
+ 0x0624: 0x05c4, // XK_Arabic_hamzaonwaw
328
+ 0x0625: 0x05c5, // XK_Arabic_hamzaunderalef
329
+ 0x0626: 0x05c6, // XK_Arabic_hamzaonyeh
330
+ 0x0627: 0x05c7, // XK_Arabic_alef
331
+ 0x0628: 0x05c8, // XK_Arabic_beh
332
+ 0x0629: 0x05c9, // XK_Arabic_tehmarbuta
333
+ 0x062a: 0x05ca, // XK_Arabic_teh
334
+ 0x062b: 0x05cb, // XK_Arabic_theh
335
+ 0x062c: 0x05cc, // XK_Arabic_jeem
336
+ 0x062d: 0x05cd, // XK_Arabic_hah
337
+ 0x062e: 0x05ce, // XK_Arabic_khah
338
+ 0x062f: 0x05cf, // XK_Arabic_dal
339
+ 0x0630: 0x05d0, // XK_Arabic_thal
340
+ 0x0631: 0x05d1, // XK_Arabic_ra
341
+ 0x0632: 0x05d2, // XK_Arabic_zain
342
+ 0x0633: 0x05d3, // XK_Arabic_seen
343
+ 0x0634: 0x05d4, // XK_Arabic_sheen
344
+ 0x0635: 0x05d5, // XK_Arabic_sad
345
+ 0x0636: 0x05d6, // XK_Arabic_dad
346
+ 0x0637: 0x05d7, // XK_Arabic_tah
347
+ 0x0638: 0x05d8, // XK_Arabic_zah
348
+ 0x0639: 0x05d9, // XK_Arabic_ain
349
+ 0x063a: 0x05da, // XK_Arabic_ghain
350
+ 0x0640: 0x05e0, // XK_Arabic_tatweel
351
+ 0x0641: 0x05e1, // XK_Arabic_feh
352
+ 0x0642: 0x05e2, // XK_Arabic_qaf
353
+ 0x0643: 0x05e3, // XK_Arabic_kaf
354
+ 0x0644: 0x05e4, // XK_Arabic_lam
355
+ 0x0645: 0x05e5, // XK_Arabic_meem
356
+ 0x0646: 0x05e6, // XK_Arabic_noon
357
+ 0x0647: 0x05e7, // XK_Arabic_ha
358
+ 0x0648: 0x05e8, // XK_Arabic_waw
359
+ 0x0649: 0x05e9, // XK_Arabic_alefmaksura
360
+ 0x064a: 0x05ea, // XK_Arabic_yeh
361
+ 0x064b: 0x05eb, // XK_Arabic_fathatan
362
+ 0x064c: 0x05ec, // XK_Arabic_dammatan
363
+ 0x064d: 0x05ed, // XK_Arabic_kasratan
364
+ 0x064e: 0x05ee, // XK_Arabic_fatha
365
+ 0x064f: 0x05ef, // XK_Arabic_damma
366
+ 0x0650: 0x05f0, // XK_Arabic_kasra
367
+ 0x0651: 0x05f1, // XK_Arabic_shadda
368
+ 0x0652: 0x05f2, // XK_Arabic_sukun
369
+ 0x0e01: 0x0da1, // XK_Thai_kokai
370
+ 0x0e02: 0x0da2, // XK_Thai_khokhai
371
+ 0x0e03: 0x0da3, // XK_Thai_khokhuat
372
+ 0x0e04: 0x0da4, // XK_Thai_khokhwai
373
+ 0x0e05: 0x0da5, // XK_Thai_khokhon
374
+ 0x0e06: 0x0da6, // XK_Thai_khorakhang
375
+ 0x0e07: 0x0da7, // XK_Thai_ngongu
376
+ 0x0e08: 0x0da8, // XK_Thai_chochan
377
+ 0x0e09: 0x0da9, // XK_Thai_choching
378
+ 0x0e0a: 0x0daa, // XK_Thai_chochang
379
+ 0x0e0b: 0x0dab, // XK_Thai_soso
380
+ 0x0e0c: 0x0dac, // XK_Thai_chochoe
381
+ 0x0e0d: 0x0dad, // XK_Thai_yoying
382
+ 0x0e0e: 0x0dae, // XK_Thai_dochada
383
+ 0x0e0f: 0x0daf, // XK_Thai_topatak
384
+ 0x0e10: 0x0db0, // XK_Thai_thothan
385
+ 0x0e11: 0x0db1, // XK_Thai_thonangmontho
386
+ 0x0e12: 0x0db2, // XK_Thai_thophuthao
387
+ 0x0e13: 0x0db3, // XK_Thai_nonen
388
+ 0x0e14: 0x0db4, // XK_Thai_dodek
389
+ 0x0e15: 0x0db5, // XK_Thai_totao
390
+ 0x0e16: 0x0db6, // XK_Thai_thothung
391
+ 0x0e17: 0x0db7, // XK_Thai_thothahan
392
+ 0x0e18: 0x0db8, // XK_Thai_thothong
393
+ 0x0e19: 0x0db9, // XK_Thai_nonu
394
+ 0x0e1a: 0x0dba, // XK_Thai_bobaimai
395
+ 0x0e1b: 0x0dbb, // XK_Thai_popla
396
+ 0x0e1c: 0x0dbc, // XK_Thai_phophung
397
+ 0x0e1d: 0x0dbd, // XK_Thai_fofa
398
+ 0x0e1e: 0x0dbe, // XK_Thai_phophan
399
+ 0x0e1f: 0x0dbf, // XK_Thai_fofan
400
+ 0x0e20: 0x0dc0, // XK_Thai_phosamphao
401
+ 0x0e21: 0x0dc1, // XK_Thai_moma
402
+ 0x0e22: 0x0dc2, // XK_Thai_yoyak
403
+ 0x0e23: 0x0dc3, // XK_Thai_rorua
404
+ 0x0e24: 0x0dc4, // XK_Thai_ru
405
+ 0x0e25: 0x0dc5, // XK_Thai_loling
406
+ 0x0e26: 0x0dc6, // XK_Thai_lu
407
+ 0x0e27: 0x0dc7, // XK_Thai_wowaen
408
+ 0x0e28: 0x0dc8, // XK_Thai_sosala
409
+ 0x0e29: 0x0dc9, // XK_Thai_sorusi
410
+ 0x0e2a: 0x0dca, // XK_Thai_sosua
411
+ 0x0e2b: 0x0dcb, // XK_Thai_hohip
412
+ 0x0e2c: 0x0dcc, // XK_Thai_lochula
413
+ 0x0e2d: 0x0dcd, // XK_Thai_oang
414
+ 0x0e2e: 0x0dce, // XK_Thai_honokhuk
415
+ 0x0e2f: 0x0dcf, // XK_Thai_paiyannoi
416
+ 0x0e30: 0x0dd0, // XK_Thai_saraa
417
+ 0x0e31: 0x0dd1, // XK_Thai_maihanakat
418
+ 0x0e32: 0x0dd2, // XK_Thai_saraaa
419
+ 0x0e33: 0x0dd3, // XK_Thai_saraam
420
+ 0x0e34: 0x0dd4, // XK_Thai_sarai
421
+ 0x0e35: 0x0dd5, // XK_Thai_saraii
422
+ 0x0e36: 0x0dd6, // XK_Thai_saraue
423
+ 0x0e37: 0x0dd7, // XK_Thai_sarauee
424
+ 0x0e38: 0x0dd8, // XK_Thai_sarau
425
+ 0x0e39: 0x0dd9, // XK_Thai_sarauu
426
+ 0x0e3a: 0x0dda, // XK_Thai_phinthu
427
+ 0x0e3f: 0x0ddf, // XK_Thai_baht
428
+ 0x0e40: 0x0de0, // XK_Thai_sarae
429
+ 0x0e41: 0x0de1, // XK_Thai_saraae
430
+ 0x0e42: 0x0de2, // XK_Thai_sarao
431
+ 0x0e43: 0x0de3, // XK_Thai_saraaimaimuan
432
+ 0x0e44: 0x0de4, // XK_Thai_saraaimaimalai
433
+ 0x0e45: 0x0de5, // XK_Thai_lakkhangyao
434
+ 0x0e46: 0x0de6, // XK_Thai_maiyamok
435
+ 0x0e47: 0x0de7, // XK_Thai_maitaikhu
436
+ 0x0e48: 0x0de8, // XK_Thai_maiek
437
+ 0x0e49: 0x0de9, // XK_Thai_maitho
438
+ 0x0e4a: 0x0dea, // XK_Thai_maitri
439
+ 0x0e4b: 0x0deb, // XK_Thai_maichattawa
440
+ 0x0e4c: 0x0dec, // XK_Thai_thanthakhat
441
+ 0x0e4d: 0x0ded, // XK_Thai_nikhahit
442
+ 0x0e50: 0x0df0, // XK_Thai_leksun
443
+ 0x0e51: 0x0df1, // XK_Thai_leknung
444
+ 0x0e52: 0x0df2, // XK_Thai_leksong
445
+ 0x0e53: 0x0df3, // XK_Thai_leksam
446
+ 0x0e54: 0x0df4, // XK_Thai_leksi
447
+ 0x0e55: 0x0df5, // XK_Thai_lekha
448
+ 0x0e56: 0x0df6, // XK_Thai_lekhok
449
+ 0x0e57: 0x0df7, // XK_Thai_lekchet
450
+ 0x0e58: 0x0df8, // XK_Thai_lekpaet
451
+ 0x0e59: 0x0df9, // XK_Thai_lekkao
452
+ 0x2002: 0x0aa2, // XK_enspace
453
+ 0x2003: 0x0aa1, // XK_emspace
454
+ 0x2004: 0x0aa3, // XK_em3space
455
+ 0x2005: 0x0aa4, // XK_em4space
456
+ 0x2007: 0x0aa5, // XK_digitspace
457
+ 0x2008: 0x0aa6, // XK_punctspace
458
+ 0x2009: 0x0aa7, // XK_thinspace
459
+ 0x200a: 0x0aa8, // XK_hairspace
460
+ 0x2012: 0x0abb, // XK_figdash
461
+ 0x2013: 0x0aaa, // XK_endash
462
+ 0x2014: 0x0aa9, // XK_emdash
463
+ 0x2015: 0x07af, // XK_Greek_horizbar
464
+ 0x2017: 0x0cdf, // XK_hebrew_doublelowline
465
+ 0x2018: 0x0ad0, // XK_leftsinglequotemark
466
+ 0x2019: 0x0ad1, // XK_rightsinglequotemark
467
+ 0x201a: 0x0afd, // XK_singlelowquotemark
468
+ 0x201c: 0x0ad2, // XK_leftdoublequotemark
469
+ 0x201d: 0x0ad3, // XK_rightdoublequotemark
470
+ 0x201e: 0x0afe, // XK_doublelowquotemark
471
+ 0x2020: 0x0af1, // XK_dagger
472
+ 0x2021: 0x0af2, // XK_doubledagger
473
+ 0x2022: 0x0ae6, // XK_enfilledcircbullet
474
+ 0x2025: 0x0aaf, // XK_doubbaselinedot
475
+ 0x2026: 0x0aae, // XK_ellipsis
476
+ 0x2030: 0x0ad5, // XK_permille
477
+ 0x2032: 0x0ad6, // XK_minutes
478
+ 0x2033: 0x0ad7, // XK_seconds
479
+ 0x2038: 0x0afc, // XK_caret
480
+ 0x203e: 0x047e, // XK_overline
481
+ 0x20a9: 0x0eff, // XK_Korean_Won
482
+ 0x20ac: 0x20ac, // XK_EuroSign
483
+ 0x2105: 0x0ab8, // XK_careof
484
+ 0x2116: 0x06b0, // XK_numerosign
485
+ 0x2117: 0x0afb, // XK_phonographcopyright
486
+ 0x211e: 0x0ad4, // XK_prescription
487
+ 0x2122: 0x0ac9, // XK_trademark
488
+ 0x2153: 0x0ab0, // XK_onethird
489
+ 0x2154: 0x0ab1, // XK_twothirds
490
+ 0x2155: 0x0ab2, // XK_onefifth
491
+ 0x2156: 0x0ab3, // XK_twofifths
492
+ 0x2157: 0x0ab4, // XK_threefifths
493
+ 0x2158: 0x0ab5, // XK_fourfifths
494
+ 0x2159: 0x0ab6, // XK_onesixth
495
+ 0x215a: 0x0ab7, // XK_fivesixths
496
+ 0x215b: 0x0ac3, // XK_oneeighth
497
+ 0x215c: 0x0ac4, // XK_threeeighths
498
+ 0x215d: 0x0ac5, // XK_fiveeighths
499
+ 0x215e: 0x0ac6, // XK_seveneighths
500
+ 0x2190: 0x08fb, // XK_leftarrow
501
+ 0x2191: 0x08fc, // XK_uparrow
502
+ 0x2192: 0x08fd, // XK_rightarrow
503
+ 0x2193: 0x08fe, // XK_downarrow
504
+ 0x21d2: 0x08ce, // XK_implies
505
+ 0x21d4: 0x08cd, // XK_ifonlyif
506
+ 0x2202: 0x08ef, // XK_partialderivative
507
+ 0x2207: 0x08c5, // XK_nabla
508
+ 0x2218: 0x0bca, // XK_jot
509
+ 0x221a: 0x08d6, // XK_radical
510
+ 0x221d: 0x08c1, // XK_variation
511
+ 0x221e: 0x08c2, // XK_infinity
512
+ 0x2227: 0x08de, // XK_logicaland
513
+ 0x2228: 0x08df, // XK_logicalor
514
+ 0x2229: 0x08dc, // XK_intersection
515
+ 0x222a: 0x08dd, // XK_union
516
+ 0x222b: 0x08bf, // XK_integral
517
+ 0x2234: 0x08c0, // XK_therefore
518
+ 0x223c: 0x08c8, // XK_approximate
519
+ 0x2243: 0x08c9, // XK_similarequal
520
+ 0x2245: 0x1002248, // XK_approxeq
521
+ 0x2260: 0x08bd, // XK_notequal
522
+ 0x2261: 0x08cf, // XK_identical
523
+ 0x2264: 0x08bc, // XK_lessthanequal
524
+ 0x2265: 0x08be, // XK_greaterthanequal
525
+ 0x2282: 0x08da, // XK_includedin
526
+ 0x2283: 0x08db, // XK_includes
527
+ 0x22a2: 0x0bfc, // XK_righttack
528
+ 0x22a3: 0x0bdc, // XK_lefttack
529
+ 0x22a4: 0x0bc2, // XK_downtack
530
+ 0x22a5: 0x0bce, // XK_uptack
531
+ 0x2308: 0x0bd3, // XK_upstile
532
+ 0x230a: 0x0bc4, // XK_downstile
533
+ 0x2315: 0x0afa, // XK_telephonerecorder
534
+ 0x2320: 0x08a4, // XK_topintegral
535
+ 0x2321: 0x08a5, // XK_botintegral
536
+ 0x2395: 0x0bcc, // XK_quad
537
+ 0x239b: 0x08ab, // XK_topleftparens
538
+ 0x239d: 0x08ac, // XK_botleftparens
539
+ 0x239e: 0x08ad, // XK_toprightparens
540
+ 0x23a0: 0x08ae, // XK_botrightparens
541
+ 0x23a1: 0x08a7, // XK_topleftsqbracket
542
+ 0x23a3: 0x08a8, // XK_botleftsqbracket
543
+ 0x23a4: 0x08a9, // XK_toprightsqbracket
544
+ 0x23a6: 0x08aa, // XK_botrightsqbracket
545
+ 0x23a8: 0x08af, // XK_leftmiddlecurlybrace
546
+ 0x23ac: 0x08b0, // XK_rightmiddlecurlybrace
547
+ 0x23b7: 0x08a1, // XK_leftradical
548
+ 0x23ba: 0x09ef, // XK_horizlinescan1
549
+ 0x23bb: 0x09f0, // XK_horizlinescan3
550
+ 0x23bc: 0x09f2, // XK_horizlinescan7
551
+ 0x23bd: 0x09f3, // XK_horizlinescan9
552
+ 0x2409: 0x09e2, // XK_ht
553
+ 0x240a: 0x09e5, // XK_lf
554
+ 0x240b: 0x09e9, // XK_vt
555
+ 0x240c: 0x09e3, // XK_ff
556
+ 0x240d: 0x09e4, // XK_cr
557
+ 0x2423: 0x0aac, // XK_signifblank
558
+ 0x2424: 0x09e8, // XK_nl
559
+ 0x2500: 0x08a3, // XK_horizconnector
560
+ 0x2502: 0x08a6, // XK_vertconnector
561
+ 0x250c: 0x08a2, // XK_topleftradical
562
+ 0x2510: 0x09eb, // XK_uprightcorner
563
+ 0x2514: 0x09ed, // XK_lowleftcorner
564
+ 0x2518: 0x09ea, // XK_lowrightcorner
565
+ 0x251c: 0x09f4, // XK_leftt
566
+ 0x2524: 0x09f5, // XK_rightt
567
+ 0x252c: 0x09f7, // XK_topt
568
+ 0x2534: 0x09f6, // XK_bott
569
+ 0x253c: 0x09ee, // XK_crossinglines
570
+ 0x2592: 0x09e1, // XK_checkerboard
571
+ 0x25aa: 0x0ae7, // XK_enfilledsqbullet
572
+ 0x25ab: 0x0ae1, // XK_enopensquarebullet
573
+ 0x25ac: 0x0adb, // XK_filledrectbullet
574
+ 0x25ad: 0x0ae2, // XK_openrectbullet
575
+ 0x25ae: 0x0adf, // XK_emfilledrect
576
+ 0x25af: 0x0acf, // XK_emopenrectangle
577
+ 0x25b2: 0x0ae8, // XK_filledtribulletup
578
+ 0x25b3: 0x0ae3, // XK_opentribulletup
579
+ 0x25b6: 0x0add, // XK_filledrighttribullet
580
+ 0x25b7: 0x0acd, // XK_rightopentriangle
581
+ 0x25bc: 0x0ae9, // XK_filledtribulletdown
582
+ 0x25bd: 0x0ae4, // XK_opentribulletdown
583
+ 0x25c0: 0x0adc, // XK_filledlefttribullet
584
+ 0x25c1: 0x0acc, // XK_leftopentriangle
585
+ 0x25c6: 0x09e0, // XK_soliddiamond
586
+ 0x25cb: 0x0ace, // XK_emopencircle
587
+ 0x25cf: 0x0ade, // XK_emfilledcircle
588
+ 0x25e6: 0x0ae0, // XK_enopencircbullet
589
+ 0x2606: 0x0ae5, // XK_openstar
590
+ 0x260e: 0x0af9, // XK_telephone
591
+ 0x2613: 0x0aca, // XK_signaturemark
592
+ 0x261c: 0x0aea, // XK_leftpointer
593
+ 0x261e: 0x0aeb, // XK_rightpointer
594
+ 0x2640: 0x0af8, // XK_femalesymbol
595
+ 0x2642: 0x0af7, // XK_malesymbol
596
+ 0x2663: 0x0aec, // XK_club
597
+ 0x2665: 0x0aee, // XK_heart
598
+ 0x2666: 0x0aed, // XK_diamond
599
+ 0x266d: 0x0af6, // XK_musicalflat
600
+ 0x266f: 0x0af5, // XK_musicalsharp
601
+ 0x2713: 0x0af3, // XK_checkmark
602
+ 0x2717: 0x0af4, // XK_ballotcross
603
+ 0x271d: 0x0ad9, // XK_latincross
604
+ 0x2720: 0x0af0, // XK_maltesecross
605
+ 0x27e8: 0x0abc, // XK_leftanglebracket
606
+ 0x27e9: 0x0abe, // XK_rightanglebracket
607
+ 0x3001: 0x04a4, // XK_kana_comma
608
+ 0x3002: 0x04a1, // XK_kana_fullstop
609
+ 0x300c: 0x04a2, // XK_kana_openingbracket
610
+ 0x300d: 0x04a3, // XK_kana_closingbracket
611
+ 0x309b: 0x04de, // XK_voicedsound
612
+ 0x309c: 0x04df, // XK_semivoicedsound
613
+ 0x30a1: 0x04a7, // XK_kana_a
614
+ 0x30a2: 0x04b1, // XK_kana_A
615
+ 0x30a3: 0x04a8, // XK_kana_i
616
+ 0x30a4: 0x04b2, // XK_kana_I
617
+ 0x30a5: 0x04a9, // XK_kana_u
618
+ 0x30a6: 0x04b3, // XK_kana_U
619
+ 0x30a7: 0x04aa, // XK_kana_e
620
+ 0x30a8: 0x04b4, // XK_kana_E
621
+ 0x30a9: 0x04ab, // XK_kana_o
622
+ 0x30aa: 0x04b5, // XK_kana_O
623
+ 0x30ab: 0x04b6, // XK_kana_KA
624
+ 0x30ad: 0x04b7, // XK_kana_KI
625
+ 0x30af: 0x04b8, // XK_kana_KU
626
+ 0x30b1: 0x04b9, // XK_kana_KE
627
+ 0x30b3: 0x04ba, // XK_kana_KO
628
+ 0x30b5: 0x04bb, // XK_kana_SA
629
+ 0x30b7: 0x04bc, // XK_kana_SHI
630
+ 0x30b9: 0x04bd, // XK_kana_SU
631
+ 0x30bb: 0x04be, // XK_kana_SE
632
+ 0x30bd: 0x04bf, // XK_kana_SO
633
+ 0x30bf: 0x04c0, // XK_kana_TA
634
+ 0x30c1: 0x04c1, // XK_kana_CHI
635
+ 0x30c3: 0x04af, // XK_kana_tsu
636
+ 0x30c4: 0x04c2, // XK_kana_TSU
637
+ 0x30c6: 0x04c3, // XK_kana_TE
638
+ 0x30c8: 0x04c4, // XK_kana_TO
639
+ 0x30ca: 0x04c5, // XK_kana_NA
640
+ 0x30cb: 0x04c6, // XK_kana_NI
641
+ 0x30cc: 0x04c7, // XK_kana_NU
642
+ 0x30cd: 0x04c8, // XK_kana_NE
643
+ 0x30ce: 0x04c9, // XK_kana_NO
644
+ 0x30cf: 0x04ca, // XK_kana_HA
645
+ 0x30d2: 0x04cb, // XK_kana_HI
646
+ 0x30d5: 0x04cc, // XK_kana_FU
647
+ 0x30d8: 0x04cd, // XK_kana_HE
648
+ 0x30db: 0x04ce, // XK_kana_HO
649
+ 0x30de: 0x04cf, // XK_kana_MA
650
+ 0x30df: 0x04d0, // XK_kana_MI
651
+ 0x30e0: 0x04d1, // XK_kana_MU
652
+ 0x30e1: 0x04d2, // XK_kana_ME
653
+ 0x30e2: 0x04d3, // XK_kana_MO
654
+ 0x30e3: 0x04ac, // XK_kana_ya
655
+ 0x30e4: 0x04d4, // XK_kana_YA
656
+ 0x30e5: 0x04ad, // XK_kana_yu
657
+ 0x30e6: 0x04d5, // XK_kana_YU
658
+ 0x30e7: 0x04ae, // XK_kana_yo
659
+ 0x30e8: 0x04d6, // XK_kana_YO
660
+ 0x30e9: 0x04d7, // XK_kana_RA
661
+ 0x30ea: 0x04d8, // XK_kana_RI
662
+ 0x30eb: 0x04d9, // XK_kana_RU
663
+ 0x30ec: 0x04da, // XK_kana_RE
664
+ 0x30ed: 0x04db, // XK_kana_RO
665
+ 0x30ef: 0x04dc, // XK_kana_WA
666
+ 0x30f2: 0x04a6, // XK_kana_WO
667
+ 0x30f3: 0x04dd, // XK_kana_N
668
+ 0x30fb: 0x04a5, // XK_kana_conjunctive
669
+ 0x30fc: 0x04b0, // XK_prolongedsound
670
+ };
671
+
672
+ export default {
673
+ lookup(u) {
674
+ // Latin-1 is one-to-one mapping
675
+ if ((u >= 0x20) && (u <= 0xff)) {
676
+ return u;
677
+ }
678
+
679
+ // Lookup table (fairly random)
680
+ const keysym = codepoints[u];
681
+ if (keysym !== undefined) {
682
+ return keysym;
683
+ }
684
+
685
+ // General mapping as final fallback
686
+ return 0x01000000 | u;
687
+ },
688
+ };