]>
Commit | Line | Data |
---|---|---|
d3796c14 JM |
1 | /* |
2 | * noVNC: HTML5 VNC client | |
3 | * Copyright (C) 2011 Joel Martin | |
b7c9657b | 4 | * Licensed under LGPL-2 or any later version (see LICENSE.txt) |
d3796c14 JM |
5 | */ |
6 | ||
7 | /*jslint browser: true, white: false, bitwise: false */ | |
8 | /*global window, Util */ | |
9 | ||
10 | ||
11 | // | |
12 | // Keyboard event handler | |
13 | // | |
14 | ||
5210330a | 15 | function Keyboard(defaults) { |
d890e864 | 16 | "use strict"; |
d3796c14 | 17 | |
5210330a JM |
18 | var that = {}, // Public API methods |
19 | conf = {}, // Configuration attributes | |
c96f9003 JM |
20 | |
21 | keyDownList = []; // List of depressed keys | |
22 | // (even if they are happy) | |
d3796c14 | 23 | |
5210330a JM |
24 | // Configuration attributes |
25 | Util.conf_defaults(conf, that, defaults, [ | |
26 | ['target', 'wo', 'dom', document, 'DOM element that captures keyboard input'], | |
27 | ['focused', 'rw', 'bool', true, 'Capture and send key events'], | |
d3796c14 | 28 | |
5210330a JM |
29 | ['onKeyPress', 'rw', 'func', null, 'Handler for key press/release'] |
30 | ]); | |
d3796c14 | 31 | |
d3796c14 JM |
32 | |
33 | // | |
34 | // Private functions | |
35 | // | |
36 | ||
c96f9003 JM |
37 | // From the event keyCode return the keysym value for keys that need |
38 | // to be suppressed otherwise they may trigger unintended browser | |
39 | // actions | |
fac149dd | 40 | function getKeysymSpecial(evt) { |
c96f9003 | 41 | var keysym = null; |
d3796c14 | 42 | |
d3796c14 | 43 | switch ( evt.keyCode ) { |
fac149dd | 44 | // These generate a keyDown and keyPress in Firefox and Opera |
d3796c14 | 45 | case 8 : keysym = 0xFF08; break; // BACKSPACE |
d3796c14 | 46 | case 13 : keysym = 0xFF0D; break; // ENTER |
c96f9003 | 47 | |
fac149dd JM |
48 | // This generates a keyDown and keyPress in Opera |
49 | case 9 : keysym = 0xFF09; break; // TAB | |
c96f9003 | 50 | default : break; |
d3796c14 JM |
51 | } |
52 | ||
fac149dd | 53 | if (evt.type === 'keydown') { |
c96f9003 | 54 | switch ( evt.keyCode ) { |
fac149dd JM |
55 | case 27 : keysym = 0xFF1B; break; // ESCAPE |
56 | case 46 : keysym = 0xFFFF; break; // DELETE | |
57 | ||
58 | case 36 : keysym = 0xFF50; break; // HOME | |
59 | case 35 : keysym = 0xFF57; break; // END | |
60 | case 33 : keysym = 0xFF55; break; // PAGE_UP | |
61 | case 34 : keysym = 0xFF56; break; // PAGE_DOWN | |
c96f9003 JM |
62 | case 45 : keysym = 0xFF63; break; // INSERT |
63 | // '-' during keyPress | |
fac149dd JM |
64 | case 37 : keysym = 0xFF51; break; // LEFT |
65 | case 38 : keysym = 0xFF52; break; // UP | |
66 | case 39 : keysym = 0xFF53; break; // RIGHT | |
67 | case 40 : keysym = 0xFF54; break; // DOWN | |
68 | case 16 : keysym = 0xFFE1; break; // SHIFT | |
69 | case 17 : keysym = 0xFFE3; break; // CONTROL | |
70 | //case 18 : keysym = 0xFFE7; break; // Left Meta (Mac Option) | |
71 | case 18 : keysym = 0xFFE9; break; // Left ALT (Mac Command) | |
72 | ||
c96f9003 JM |
73 | case 112 : keysym = 0xFFBE; break; // F1 |
74 | case 113 : keysym = 0xFFBF; break; // F2 | |
75 | case 114 : keysym = 0xFFC0; break; // F3 | |
76 | case 115 : keysym = 0xFFC1; break; // F4 | |
77 | case 116 : keysym = 0xFFC2; break; // F5 | |
78 | case 117 : keysym = 0xFFC3; break; // F6 | |
79 | case 118 : keysym = 0xFFC4; break; // F7 | |
80 | case 119 : keysym = 0xFFC5; break; // F8 | |
81 | case 120 : keysym = 0xFFC6; break; // F9 | |
82 | case 121 : keysym = 0xFFC7; break; // F10 | |
83 | case 122 : keysym = 0xFFC8; break; // F11 | |
84 | case 123 : keysym = 0xFFC9; break; // F12 | |
85 | ||
86 | default : break; | |
87 | } | |
d3796c14 | 88 | } |
c96f9003 JM |
89 | |
90 | if ((!keysym) && (evt.ctrlKey || evt.altKey)) { | |
91 | if ((typeof(evt.which) !== "undefined") && (evt.which > 0)) { | |
92 | keysym = evt.which; | |
93 | } else { | |
94 | // IE9 always | |
95 | // Firefox and Opera when ctrl/alt + special | |
96 | Util.Warn("which not set, using keyCode"); | |
97 | keysym = evt.keyCode; | |
d3796c14 | 98 | } |
c96f9003 JM |
99 | |
100 | /* Remap symbols */ | |
d3796c14 | 101 | switch (keysym) { |
c96f9003 JM |
102 | case 186 : keysym = 59; break; // ; (IE) |
103 | case 187 : keysym = 61; break; // = (IE) | |
104 | case 188 : keysym = 44; break; // , (Mozilla, IE) | |
105 | case 109 : // - (Mozilla, Opera) | |
106 | if (Util.Engine.gecko || Util.Engine.presto) { | |
107 | keysym = 45; } | |
108 | break; | |
109 | case 189 : keysym = 45; break; // - (IE) | |
110 | case 190 : keysym = 46; break; // . (Mozilla, IE) | |
111 | case 191 : keysym = 47; break; // / (Mozilla, IE) | |
112 | case 192 : keysym = 96; break; // ` (Mozilla, IE) | |
113 | case 219 : keysym = 91; break; // [ (Mozilla, IE) | |
114 | case 220 : keysym = 92; break; // \ (Mozilla, IE) | |
115 | case 221 : keysym = 93; break; // ] (Mozilla, IE) | |
116 | case 222 : keysym = 39; break; // ' (Mozilla, IE) | |
117 | } | |
118 | ||
119 | /* Remap shifted and unshifted keys */ | |
120 | if (!!evt.shiftKey) { | |
121 | switch (keysym) { | |
122 | case 48 : keysym = 41 ; break; // ) (shifted 0) | |
123 | case 49 : keysym = 33 ; break; // ! (shifted 1) | |
124 | case 50 : keysym = 64 ; break; // @ (shifted 2) | |
125 | case 51 : keysym = 35 ; break; // # (shifted 3) | |
126 | case 52 : keysym = 36 ; break; // $ (shifted 4) | |
127 | case 53 : keysym = 37 ; break; // % (shifted 5) | |
128 | case 54 : keysym = 94 ; break; // ^ (shifted 6) | |
129 | case 55 : keysym = 38 ; break; // & (shifted 7) | |
130 | case 56 : keysym = 42 ; break; // * (shifted 8) | |
131 | case 57 : keysym = 40 ; break; // ( (shifted 9) | |
132 | ||
133 | case 59 : keysym = 58 ; break; // : (shifted `) | |
134 | case 61 : keysym = 43 ; break; // + (shifted ;) | |
135 | case 44 : keysym = 60 ; break; // < (shifted ,) | |
136 | case 45 : keysym = 95 ; break; // _ (shifted -) | |
137 | case 46 : keysym = 62 ; break; // > (shifted .) | |
138 | case 47 : keysym = 63 ; break; // ? (shifted /) | |
139 | case 96 : keysym = 126; break; // ~ (shifted `) | |
140 | case 91 : keysym = 123; break; // { (shifted [) | |
141 | case 92 : keysym = 124; break; // | (shifted \) | |
142 | case 93 : keysym = 125; break; // } (shifted ]) | |
143 | case 39 : keysym = 34 ; break; // " (shifted ') | |
144 | } | |
145 | } else if ((keysym >= 65) && (keysym <=90)) { | |
146 | /* Remap unshifted A-Z */ | |
147 | keysym += 32; | |
148 | } else if (evt.keyLocation === 3) { | |
149 | // numpad keys | |
150 | switch (keysym) { | |
151 | case 96 : keysym = 48; break; // 0 | |
152 | case 97 : keysym = 49; break; // 1 | |
153 | case 98 : keysym = 50; break; // 2 | |
154 | case 99 : keysym = 51; break; // 3 | |
155 | case 100: keysym = 52; break; // 4 | |
156 | case 101: keysym = 53; break; // 5 | |
157 | case 102: keysym = 54; break; // 6 | |
158 | case 103: keysym = 55; break; // 7 | |
159 | case 104: keysym = 56; break; // 8 | |
160 | case 105: keysym = 57; break; // 9 | |
161 | case 109: keysym = 45; break; // - | |
162 | case 110: keysym = 46; break; // . | |
163 | case 111: keysym = 47; break; // / | |
164 | } | |
d3796c14 JM |
165 | } |
166 | } | |
167 | ||
168 | return keysym; | |
c96f9003 JM |
169 | } |
170 | ||
171 | /* Translate DOM keyPress event to keysym value */ | |
172 | function getKeysym(evt) { | |
173 | var keysym, msg; | |
174 | ||
175 | if (typeof(evt.which) !== "undefined") { | |
176 | // WebKit, Firefox, Opera | |
177 | keysym = evt.which; | |
178 | } else { | |
179 | // IE9 | |
180 | Util.Warn("which not set, using keyCode"); | |
181 | keysym = evt.keyCode; | |
182 | } | |
183 | ||
184 | if ((keysym > 255) && (keysym < 0xFF00)) { | |
d890e864 | 185 | msg = "Mapping character code " + keysym; |
c96f9003 JM |
186 | // Map Unicode outside Latin 1 to X11 keysyms |
187 | keysym = unicodeTable[keysym]; | |
188 | if (typeof(keysym) === 'undefined') { | |
189 | keysym = 0; | |
190 | } | |
191 | Util.Debug(msg + " to " + keysym); | |
192 | } | |
193 | ||
194 | return keysym; | |
195 | } | |
d3796c14 | 196 | |
c96f9003 | 197 | function show_keyDownList(kind) { |
d890e864 | 198 | var c; |
c96f9003 | 199 | var msg = "keyDownList (" + kind + "):\n"; |
d890e864 | 200 | for (c = 0; c < keyDownList.length; c++) { |
c96f9003 JM |
201 | msg = msg + " " + c + " - keyCode: " + keyDownList[c].keyCode + |
202 | " - which: " + keyDownList[c].which + "\n"; | |
203 | } | |
d890e864 | 204 | Util.Debug(msg); |
c96f9003 JM |
205 | } |
206 | ||
207 | function copyKeyEvent(evt) { | |
fac149dd | 208 | var members = ['type', 'keyCode', 'charCode', 'which', |
c96f9003 JM |
209 | 'altKey', 'ctrlKey', 'shiftKey', |
210 | 'keyLocation', 'keyIdentifier'], i, obj = {}; | |
211 | for (i = 0; i < members.length; i++) { | |
212 | if (typeof(evt[members[i]]) !== "undefined") { | |
213 | obj[members[i]] = evt[members[i]]; | |
214 | } | |
215 | } | |
216 | return obj; | |
217 | } | |
218 | ||
219 | function pushKeyEvent(fevt) { | |
220 | keyDownList.push(fevt); | |
221 | } | |
222 | ||
223 | function getKeyEvent(keyCode, pop) { | |
224 | var i, fevt = null; | |
225 | for (i = keyDownList.length-1; i >= 0; i--) { | |
226 | if (keyDownList[i].keyCode === keyCode) { | |
227 | if ((typeof(pop) !== "undefined") && (pop)) { | |
228 | fevt = keyDownList.splice(i, 1)[0]; | |
229 | } else { | |
230 | fevt = keyDownList[i]; | |
231 | } | |
232 | break; | |
233 | } | |
234 | } | |
235 | return fevt; | |
236 | } | |
237 | ||
238 | function ignoreKeyEvent(evt) { | |
239 | // Blarg. Some keys have a different keyCode on keyDown vs keyUp | |
240 | if (evt.keyCode === 229) { | |
241 | // French AZERTY keyboard dead key. | |
242 | // Lame thing is that the respective keyUp is 219 so we can't | |
243 | // properly ignore the keyUp event | |
244 | return true; | |
245 | } | |
246 | return false; | |
247 | } | |
248 | ||
249 | ||
250 | // | |
251 | // Key Event Handling: | |
252 | // | |
253 | // There are several challenges when dealing with key events: | |
254 | // - The meaning and use of keyCode, charCode and which depends on | |
255 | // both the browser and the event type (keyDown/Up vs keyPress). | |
256 | // - We cannot automatically determine the keyboard layout | |
257 | // - The keyDown and keyUp events have a keyCode value that has not | |
258 | // been translated by modifier keys. | |
259 | // - The keyPress event has a translated (for layout and modifiers) | |
260 | // character code but the attribute containing it differs. keyCode | |
261 | // contains the translated value in WebKit (Chrome/Safari), Opera | |
262 | // 11 and IE9. charCode contains the value in WebKit and Firefox. | |
263 | // The which attribute contains the value on WebKit, Firefox and | |
264 | // Opera 11. | |
265 | // - The keyDown/Up keyCode value indicates (sort of) the physical | |
266 | // key was pressed but only for standard US layout. On a US | |
267 | // keyboard, the '-' and '_' characters are on the same key and | |
268 | // generate a keyCode value of 189. But on an AZERTY keyboard even | |
269 | // though they are different physical keys they both still | |
270 | // generate a keyCode of 189! | |
271 | // - To prevent a key event from propagating to the browser and | |
272 | // causing unwanted default actions (such as closing a tab, | |
273 | // opening a menu, shifting focus, etc) we must suppress this | |
274 | // event in both keyDown and keyPress because not all key strokes | |
275 | // generate on a keyPress event. Also, in WebKit and IE9 | |
276 | // suppressing the keyDown prevents a keyPress but other browsers | |
277 | // still generated a keyPress even if keyDown is suppressed. | |
278 | // | |
279 | // For safe key events, we wait until the keyPress event before | |
280 | // reporting a key down event. For unsafe key events, we report a key | |
281 | // down event when the keyDown event fires and we suppress any further | |
282 | // actions (including keyPress). | |
283 | // | |
284 | // In order to report a key up event that matches what we reported | |
285 | // for the key down event, we keep a list of keys that are currently | |
286 | // down. When the keyDown event happens, we add the key event to the | |
287 | // list. If it is a safe key event, then we update the which attribute | |
288 | // in the most recent item on the list when we received a keyPress | |
289 | // event (keyPress should immediately follow keyDown). When we | |
290 | // received a keyUp event we search for the event on the list with | |
291 | // a matching keyCode and we report the character code using the value | |
292 | // in the 'which' attribute that was stored with that key. | |
293 | // | |
294 | ||
295 | function onKeyDown(e) { | |
296 | if (! conf.focused) { | |
297 | return true; | |
298 | } | |
299 | var fevt = null, evt = (e ? e : window.event), | |
300 | keysym = null, suppress = false; | |
d890e864 | 301 | //Util.Debug("onKeyDown kC:" + evt.keyCode + " cC:" + evt.charCode + " w:" + evt.which); |
c96f9003 JM |
302 | |
303 | fevt = copyKeyEvent(evt); | |
304 | ||
fac149dd | 305 | keysym = getKeysymSpecial(evt); |
c96f9003 JM |
306 | // Save keysym decoding for use in keyUp |
307 | fevt.keysym = keysym; | |
308 | if (keysym) { | |
309 | // If it is a key or key combination that might trigger | |
310 | // browser behaviors or it has no corresponding keyPress | |
311 | // event, then send it immediately | |
d890e864 JM |
312 | if (conf.onKeyPress && !ignoreKeyEvent(evt)) { |
313 | Util.Debug("onKeyPress down, keysym: " + keysym + | |
314 | " (onKeyDown key: " + evt.keyCode + | |
315 | ", which: " + evt.which + ")"); | |
316 | conf.onKeyPress(keysym, 1, evt); | |
c96f9003 JM |
317 | } |
318 | suppress = true; | |
319 | } | |
320 | ||
321 | if (! ignoreKeyEvent(evt)) { | |
322 | // Add it to the list of depressed keys | |
323 | pushKeyEvent(fevt); | |
d890e864 | 324 | //show_keyDownList('down'); |
c96f9003 JM |
325 | } |
326 | ||
327 | if (suppress) { | |
328 | // Suppress bubbling/default actions | |
329 | Util.stopEvent(e); | |
330 | return false; | |
331 | } else { | |
332 | // Allow the event to bubble and become a keyPress event which | |
333 | // will have the character code translated | |
334 | return true; | |
335 | } | |
336 | } | |
337 | ||
338 | function onKeyPress(e) { | |
339 | if (! conf.focused) { | |
340 | return true; | |
341 | } | |
342 | var evt = (e ? e : window.event), | |
343 | kdlen = keyDownList.length, keysym = null; | |
d890e864 | 344 | //Util.Debug("onKeyPress kC:" + evt.keyCode + " cC:" + evt.charCode + " w:" + evt.which); |
c96f9003 JM |
345 | |
346 | if (((evt.which !== "undefined") && (evt.which === 0)) || | |
fac149dd | 347 | (getKeysymSpecial(evt))) { |
c96f9003 JM |
348 | // Firefox and Opera generate a keyPress event even if keyDown |
349 | // is suppressed. But the keys we want to suppress will have | |
350 | // either: | |
351 | // - the which attribute set to 0 | |
fac149dd | 352 | // - getKeysymSpecial() will identify it |
c96f9003 JM |
353 | Util.Debug("Ignoring special key in keyPress"); |
354 | Util.stopEvent(e); | |
355 | return false; | |
356 | } | |
357 | ||
358 | keysym = getKeysym(evt); | |
359 | ||
360 | // Modify the the which attribute in the depressed keys list so | |
361 | // that the keyUp event will be able to have the character code | |
362 | // translation available. | |
363 | if (kdlen > 0) { | |
364 | keyDownList[kdlen-1].keysym = keysym; | |
365 | } else { | |
366 | Util.Warn("keyDownList empty when keyPress triggered"); | |
367 | } | |
368 | ||
d890e864 | 369 | //show_keyDownList('press'); |
c96f9003 JM |
370 | |
371 | // Send the translated keysym | |
d890e864 JM |
372 | if (conf.onKeyPress && (keysym > 0)) { |
373 | Util.Debug("onKeyPress down, keysym: " + keysym + | |
374 | " (onKeyPress key: " + evt.keyCode + | |
375 | ", which: " + evt.which + ")"); | |
376 | conf.onKeyPress(keysym, 1, evt); | |
c96f9003 JM |
377 | } |
378 | ||
379 | // Stop keypress events just in case | |
380 | Util.stopEvent(e); | |
381 | return false; | |
382 | } | |
383 | ||
384 | function onKeyUp(e) { | |
385 | if (! conf.focused) { | |
386 | return true; | |
387 | } | |
d890e864 JM |
388 | var fevt = null, evt = (e ? e : window.event), keysym; |
389 | //Util.Debug("onKeyUp kC:" + evt.keyCode + " cC:" + evt.charCode + " w:" + evt.which); | |
c96f9003 JM |
390 | |
391 | fevt = getKeyEvent(evt.keyCode, true); | |
392 | ||
393 | if (fevt) { | |
394 | keysym = fevt.keysym; | |
395 | } else { | |
396 | Util.Warn("Key event (keyCode = " + evt.keyCode + | |
397 | ") not found on keyDownList"); | |
398 | keysym = 0; | |
399 | } | |
400 | ||
d890e864 | 401 | //show_keyDownList('up'); |
c96f9003 | 402 | |
d890e864 JM |
403 | if (conf.onKeyPress && (keysym > 0)) { |
404 | //Util.Debug("keyPress up, keysym: " + keysym + | |
405 | // " (key: " + evt.keyCode + ", which: " + evt.which + ")"); | |
406 | Util.Debug("onKeyPress up, keysym: " + keysym + | |
407 | " (onKeyPress key: " + evt.keyCode + | |
408 | ", which: " + evt.which + ")"); | |
409 | conf.onKeyPress(keysym, 0, evt); | |
c96f9003 JM |
410 | } |
411 | Util.stopEvent(e); | |
412 | return false; | |
413 | } | |
414 | ||
6671c762 JM |
415 | function allKeysUp() { |
416 | Util.Debug(">> Keyboard.allKeysUp"); | |
417 | if (keyDownList.length > 0) { | |
418 | Util.Info("Releasing pressed/down keys"); | |
419 | } | |
420 | var i, keysym, fevt = null; | |
421 | for (i = keyDownList.length-1; i >= 0; i--) { | |
422 | fevt = keyDownList.splice(i, 1)[0]; | |
423 | keysym = fevt.keysym; | |
424 | if (conf.onKeyPress && (keysym > 0)) { | |
425 | Util.Debug("allKeysUp, keysym: " + keysym + | |
426 | " (keyCode: " + fevt.keyCode + | |
427 | ", which: " + fevt.which + ")"); | |
428 | conf.onKeyPress(keysym, 0, fevt); | |
429 | } | |
430 | } | |
431 | Util.Debug("<< Keyboard.allKeysUp"); | |
432 | return; | |
433 | } | |
434 | ||
c96f9003 JM |
435 | // |
436 | // Public API interface functions | |
437 | // | |
d3796c14 JM |
438 | |
439 | that.grab = function() { | |
440 | //Util.Debug(">> Keyboard.grab"); | |
441 | var c = conf.target; | |
442 | ||
443 | Util.addEvent(c, 'keydown', onKeyDown); | |
444 | Util.addEvent(c, 'keyup', onKeyUp); | |
445 | Util.addEvent(c, 'keypress', onKeyPress); | |
446 | ||
6671c762 JM |
447 | // Release (key up) if window loses focus |
448 | Util.addEvent(window, 'blur', allKeysUp); | |
449 | ||
d3796c14 JM |
450 | //Util.Debug("<< Keyboard.grab"); |
451 | }; | |
452 | ||
453 | that.ungrab = function() { | |
454 | //Util.Debug(">> Keyboard.ungrab"); | |
455 | var c = conf.target; | |
456 | ||
457 | Util.removeEvent(c, 'keydown', onKeyDown); | |
458 | Util.removeEvent(c, 'keyup', onKeyUp); | |
459 | Util.removeEvent(c, 'keypress', onKeyPress); | |
6671c762 JM |
460 | Util.removeEvent(window, 'blur', allKeysUp); |
461 | ||
462 | // Release (key up) all keys that are in a down state | |
463 | allKeysUp(); | |
d3796c14 JM |
464 | |
465 | //Util.Debug(">> Keyboard.ungrab"); | |
466 | }; | |
467 | ||
468 | return that; // Return the public API interface | |
469 | ||
470 | } // End of Keyboard() | |
471 | ||
472 | ||
473 | // | |
474 | // Mouse event handler | |
475 | // | |
476 | ||
5210330a | 477 | function Mouse(defaults) { |
d890e864 | 478 | "use strict"; |
d3796c14 | 479 | |
5210330a JM |
480 | var that = {}, // Public API methods |
481 | conf = {}; // Configuration attributes | |
d3796c14 | 482 | |
5210330a JM |
483 | // Configuration attributes |
484 | Util.conf_defaults(conf, that, defaults, [ | |
485 | ['target', 'ro', 'dom', document, 'DOM element that captures mouse input'], | |
486 | ['focused', 'rw', 'bool', true, 'Capture and send mouse clicks/movement'], | |
487 | ['scale', 'rw', 'float', 1.0, 'Viewport scale factor 0.0 - 1.0'], | |
d3796c14 | 488 | |
5210330a | 489 | ['onMouseButton', 'rw', 'func', null, 'Handler for mouse button click/release'], |
ad3f7624 JM |
490 | ['onMouseMove', 'rw', 'func', null, 'Handler for mouse movement'], |
491 | ['touchButton', 'rw', 'int', 1, 'Button mask (1, 2, 4) for touch devices (0 means ignore clicks)'] | |
5210330a | 492 | ]); |
d3796c14 | 493 | |
d3796c14 JM |
494 | |
495 | // | |
496 | // Private functions | |
497 | // | |
498 | ||
499 | function onMouseButton(e, down) { | |
500 | var evt, pos, bmask; | |
501 | if (! conf.focused) { | |
502 | return true; | |
503 | } | |
504 | evt = (e ? e : window.event); | |
505 | pos = Util.getEventPosition(e, conf.target, conf.scale); | |
ad3f7624 JM |
506 | if (e.touches || e.changedTouches) { |
507 | // Touch device | |
508 | bmask = conf.touchButton; | |
509 | // If bmask is set | |
510 | } else if (evt.which) { | |
d3796c14 JM |
511 | /* everything except IE */ |
512 | bmask = 1 << evt.button; | |
513 | } else { | |
514 | /* IE including 9 */ | |
515 | bmask = (evt.button & 0x1) + // Left | |
516 | (evt.button & 0x2) * 2 + // Right | |
517 | (evt.button & 0x4) / 2; // Middle | |
518 | } | |
519 | //Util.Debug("mouse " + pos.x + "," + pos.y + " down: " + down + | |
520 | // " bmask: " + bmask + "(evt.button: " + evt.button + ")"); | |
ad3f7624 | 521 | if (bmask > 0 && conf.onMouseButton) { |
d890e864 JM |
522 | Util.Debug("onMouseButton " + (down ? "down" : "up") + |
523 | ", x: " + pos.x + ", y: " + pos.y + ", bmask: " + bmask); | |
524 | conf.onMouseButton(pos.x, pos.y, down, bmask); | |
d3796c14 JM |
525 | } |
526 | Util.stopEvent(e); | |
527 | return false; | |
528 | } | |
529 | ||
530 | function onMouseDown(e) { | |
531 | onMouseButton(e, 1); | |
532 | } | |
533 | ||
534 | function onMouseUp(e) { | |
535 | onMouseButton(e, 0); | |
536 | } | |
537 | ||
538 | function onMouseWheel(e) { | |
539 | var evt, pos, bmask, wheelData; | |
540 | if (! conf.focused) { | |
541 | return true; | |
542 | } | |
543 | evt = (e ? e : window.event); | |
544 | pos = Util.getEventPosition(e, conf.target, conf.scale); | |
545 | wheelData = evt.detail ? evt.detail * -1 : evt.wheelDelta / 40; | |
546 | if (wheelData > 0) { | |
547 | bmask = 1 << 3; | |
548 | } else { | |
549 | bmask = 1 << 4; | |
550 | } | |
551 | //Util.Debug('mouse scroll by ' + wheelData + ':' + pos.x + "," + pos.y); | |
d890e864 JM |
552 | if (conf.onMouseButton) { |
553 | conf.onMouseButton(pos.x, pos.y, 1, bmask); | |
554 | conf.onMouseButton(pos.x, pos.y, 0, bmask); | |
d3796c14 JM |
555 | } |
556 | Util.stopEvent(e); | |
557 | return false; | |
558 | } | |
559 | ||
560 | function onMouseMove(e) { | |
561 | var evt, pos; | |
562 | if (! conf.focused) { | |
563 | return true; | |
564 | } | |
565 | evt = (e ? e : window.event); | |
566 | pos = Util.getEventPosition(e, conf.target, conf.scale); | |
567 | //Util.Debug('mouse ' + evt.which + '/' + evt.button + ' up:' + pos.x + "," + pos.y); | |
d890e864 JM |
568 | if (conf.onMouseMove) { |
569 | conf.onMouseMove(pos.x, pos.y); | |
d3796c14 | 570 | } |
ad3f7624 JM |
571 | Util.stopEvent(e); |
572 | return false; | |
d3796c14 JM |
573 | } |
574 | ||
575 | function onMouseDisable(e) { | |
576 | var evt, pos; | |
577 | if (! conf.focused) { | |
578 | return true; | |
579 | } | |
580 | evt = (e ? e : window.event); | |
581 | pos = Util.getEventPosition(e, conf.target, conf.scale); | |
582 | /* Stop propagation if inside canvas area */ | |
583 | if ((pos.x >= 0) && (pos.y >= 0) && | |
584 | (pos.x < conf.target.offsetWidth) && | |
585 | (pos.y < conf.target.offsetHeight)) { | |
586 | //Util.Debug("mouse event disabled"); | |
587 | Util.stopEvent(e); | |
588 | return false; | |
589 | } | |
590 | //Util.Debug("mouse event not disabled"); | |
591 | return true; | |
592 | } | |
593 | ||
594 | // | |
595 | // Public API interface functions | |
596 | // | |
597 | ||
598 | that.grab = function() { | |
599 | //Util.Debug(">> Mouse.grab"); | |
600 | var c = conf.target; | |
601 | ||
ad3f7624 JM |
602 | if ('ontouchstart' in document.documentElement) { |
603 | Util.addEvent(c, 'touchstart', onMouseDown); | |
604 | Util.addEvent(c, 'touchend', onMouseUp); | |
605 | Util.addEvent(c, 'touchmove', onMouseMove); | |
606 | } else { | |
607 | Util.addEvent(c, 'mousedown', onMouseDown); | |
608 | Util.addEvent(c, 'mouseup', onMouseUp); | |
609 | Util.addEvent(c, 'mousemove', onMouseMove); | |
610 | Util.addEvent(c, (Util.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel', | |
611 | onMouseWheel); | |
612 | } | |
d3796c14 JM |
613 | |
614 | /* Work around right and middle click browser behaviors */ | |
615 | Util.addEvent(document, 'click', onMouseDisable); | |
616 | Util.addEvent(document.body, 'contextmenu', onMouseDisable); | |
617 | ||
618 | //Util.Debug("<< Mouse.grab"); | |
619 | }; | |
620 | ||
621 | that.ungrab = function() { | |
622 | //Util.Debug(">> Mouse.ungrab"); | |
623 | var c = conf.target; | |
624 | ||
ad3f7624 JM |
625 | if ('ontouchstart' in document.documentElement) { |
626 | Util.removeEvent(c, 'touchstart', onMouseDown); | |
627 | Util.removeEvent(c, 'touchend', onMouseUp); | |
628 | Util.removeEvent(c, 'touchmove', onMouseMove); | |
629 | } else { | |
630 | Util.removeEvent(c, 'mousedown', onMouseDown); | |
631 | Util.removeEvent(c, 'mouseup', onMouseUp); | |
632 | Util.removeEvent(c, 'mousemove', onMouseMove); | |
633 | Util.removeEvent(c, (Util.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel', | |
634 | onMouseWheel); | |
635 | } | |
d3796c14 JM |
636 | |
637 | /* Work around right and middle click browser behaviors */ | |
638 | Util.removeEvent(document, 'click', onMouseDisable); | |
639 | Util.removeEvent(document.body, 'contextmenu', onMouseDisable); | |
640 | ||
641 | //Util.Debug(">> Mouse.ungrab"); | |
642 | }; | |
643 | ||
644 | return that; // Return the public API interface | |
645 | ||
646 | } // End of Mouse() | |
647 | ||
c96f9003 JM |
648 | |
649 | /* | |
650 | * Browser keypress to X11 keysym for Unicode characters > U+00FF | |
651 | */ | |
652 | unicodeTable = { | |
653 | 0x0104 : 0x01a1, | |
654 | 0x02D8 : 0x01a2, | |
655 | 0x0141 : 0x01a3, | |
656 | 0x013D : 0x01a5, | |
657 | 0x015A : 0x01a6, | |
658 | 0x0160 : 0x01a9, | |
659 | 0x015E : 0x01aa, | |
660 | 0x0164 : 0x01ab, | |
661 | 0x0179 : 0x01ac, | |
662 | 0x017D : 0x01ae, | |
663 | 0x017B : 0x01af, | |
664 | 0x0105 : 0x01b1, | |
665 | 0x02DB : 0x01b2, | |
666 | 0x0142 : 0x01b3, | |
667 | 0x013E : 0x01b5, | |
668 | 0x015B : 0x01b6, | |
669 | 0x02C7 : 0x01b7, | |
670 | 0x0161 : 0x01b9, | |
671 | 0x015F : 0x01ba, | |
672 | 0x0165 : 0x01bb, | |
673 | 0x017A : 0x01bc, | |
674 | 0x02DD : 0x01bd, | |
675 | 0x017E : 0x01be, | |
676 | 0x017C : 0x01bf, | |
677 | 0x0154 : 0x01c0, | |
678 | 0x0102 : 0x01c3, | |
679 | 0x0139 : 0x01c5, | |
680 | 0x0106 : 0x01c6, | |
681 | 0x010C : 0x01c8, | |
682 | 0x0118 : 0x01ca, | |
683 | 0x011A : 0x01cc, | |
684 | 0x010E : 0x01cf, | |
685 | 0x0110 : 0x01d0, | |
686 | 0x0143 : 0x01d1, | |
687 | 0x0147 : 0x01d2, | |
688 | 0x0150 : 0x01d5, | |
689 | 0x0158 : 0x01d8, | |
690 | 0x016E : 0x01d9, | |
691 | 0x0170 : 0x01db, | |
692 | 0x0162 : 0x01de, | |
693 | 0x0155 : 0x01e0, | |
694 | 0x0103 : 0x01e3, | |
695 | 0x013A : 0x01e5, | |
696 | 0x0107 : 0x01e6, | |
697 | 0x010D : 0x01e8, | |
698 | 0x0119 : 0x01ea, | |
699 | 0x011B : 0x01ec, | |
700 | 0x010F : 0x01ef, | |
701 | 0x0111 : 0x01f0, | |
702 | 0x0144 : 0x01f1, | |
703 | 0x0148 : 0x01f2, | |
704 | 0x0151 : 0x01f5, | |
705 | 0x0171 : 0x01fb, | |
706 | 0x0159 : 0x01f8, | |
707 | 0x016F : 0x01f9, | |
708 | 0x0163 : 0x01fe, | |
709 | 0x02D9 : 0x01ff, | |
710 | 0x0126 : 0x02a1, | |
711 | 0x0124 : 0x02a6, | |
712 | 0x0130 : 0x02a9, | |
713 | 0x011E : 0x02ab, | |
714 | 0x0134 : 0x02ac, | |
715 | 0x0127 : 0x02b1, | |
716 | 0x0125 : 0x02b6, | |
717 | 0x0131 : 0x02b9, | |
718 | 0x011F : 0x02bb, | |
719 | 0x0135 : 0x02bc, | |
720 | 0x010A : 0x02c5, | |
721 | 0x0108 : 0x02c6, | |
722 | 0x0120 : 0x02d5, | |
723 | 0x011C : 0x02d8, | |
724 | 0x016C : 0x02dd, | |
725 | 0x015C : 0x02de, | |
726 | 0x010B : 0x02e5, | |
727 | 0x0109 : 0x02e6, | |
728 | 0x0121 : 0x02f5, | |
729 | 0x011D : 0x02f8, | |
730 | 0x016D : 0x02fd, | |
731 | 0x015D : 0x02fe, | |
732 | 0x0138 : 0x03a2, | |
733 | 0x0156 : 0x03a3, | |
734 | 0x0128 : 0x03a5, | |
735 | 0x013B : 0x03a6, | |
736 | 0x0112 : 0x03aa, | |
737 | 0x0122 : 0x03ab, | |
738 | 0x0166 : 0x03ac, | |
739 | 0x0157 : 0x03b3, | |
740 | 0x0129 : 0x03b5, | |
741 | 0x013C : 0x03b6, | |
742 | 0x0113 : 0x03ba, | |
743 | 0x0123 : 0x03bb, | |
744 | 0x0167 : 0x03bc, | |
745 | 0x014A : 0x03bd, | |
746 | 0x014B : 0x03bf, | |
747 | 0x0100 : 0x03c0, | |
748 | 0x012E : 0x03c7, | |
749 | 0x0116 : 0x03cc, | |
750 | 0x012A : 0x03cf, | |
751 | 0x0145 : 0x03d1, | |
752 | 0x014C : 0x03d2, | |
753 | 0x0136 : 0x03d3, | |
754 | 0x0172 : 0x03d9, | |
755 | 0x0168 : 0x03dd, | |
756 | 0x016A : 0x03de, | |
757 | 0x0101 : 0x03e0, | |
758 | 0x012F : 0x03e7, | |
759 | 0x0117 : 0x03ec, | |
760 | 0x012B : 0x03ef, | |
761 | 0x0146 : 0x03f1, | |
762 | 0x014D : 0x03f2, | |
763 | 0x0137 : 0x03f3, | |
764 | 0x0173 : 0x03f9, | |
765 | 0x0169 : 0x03fd, | |
766 | 0x016B : 0x03fe, | |
767 | 0x1E02 : 0x1001e02, | |
768 | 0x1E03 : 0x1001e03, | |
769 | 0x1E0A : 0x1001e0a, | |
770 | 0x1E80 : 0x1001e80, | |
771 | 0x1E82 : 0x1001e82, | |
772 | 0x1E0B : 0x1001e0b, | |
773 | 0x1EF2 : 0x1001ef2, | |
774 | 0x1E1E : 0x1001e1e, | |
775 | 0x1E1F : 0x1001e1f, | |
776 | 0x1E40 : 0x1001e40, | |
777 | 0x1E41 : 0x1001e41, | |
778 | 0x1E56 : 0x1001e56, | |
779 | 0x1E81 : 0x1001e81, | |
780 | 0x1E57 : 0x1001e57, | |
781 | 0x1E83 : 0x1001e83, | |
782 | 0x1E60 : 0x1001e60, | |
783 | 0x1EF3 : 0x1001ef3, | |
784 | 0x1E84 : 0x1001e84, | |
785 | 0x1E85 : 0x1001e85, | |
786 | 0x1E61 : 0x1001e61, | |
787 | 0x0174 : 0x1000174, | |
788 | 0x1E6A : 0x1001e6a, | |
789 | 0x0176 : 0x1000176, | |
790 | 0x0175 : 0x1000175, | |
791 | 0x1E6B : 0x1001e6b, | |
792 | 0x0177 : 0x1000177, | |
793 | 0x0152 : 0x13bc, | |
794 | 0x0153 : 0x13bd, | |
795 | 0x0178 : 0x13be, | |
796 | 0x203E : 0x047e, | |
797 | 0x3002 : 0x04a1, | |
798 | 0x300C : 0x04a2, | |
799 | 0x300D : 0x04a3, | |
800 | 0x3001 : 0x04a4, | |
801 | 0x30FB : 0x04a5, | |
802 | 0x30F2 : 0x04a6, | |
803 | 0x30A1 : 0x04a7, | |
804 | 0x30A3 : 0x04a8, | |
805 | 0x30A5 : 0x04a9, | |
806 | 0x30A7 : 0x04aa, | |
807 | 0x30A9 : 0x04ab, | |
808 | 0x30E3 : 0x04ac, | |
809 | 0x30E5 : 0x04ad, | |
810 | 0x30E7 : 0x04ae, | |
811 | 0x30C3 : 0x04af, | |
812 | 0x30FC : 0x04b0, | |
813 | 0x30A2 : 0x04b1, | |
814 | 0x30A4 : 0x04b2, | |
815 | 0x30A6 : 0x04b3, | |
816 | 0x30A8 : 0x04b4, | |
817 | 0x30AA : 0x04b5, | |
818 | 0x30AB : 0x04b6, | |
819 | 0x30AD : 0x04b7, | |
820 | 0x30AF : 0x04b8, | |
821 | 0x30B1 : 0x04b9, | |
822 | 0x30B3 : 0x04ba, | |
823 | 0x30B5 : 0x04bb, | |
824 | 0x30B7 : 0x04bc, | |
825 | 0x30B9 : 0x04bd, | |
826 | 0x30BB : 0x04be, | |
827 | 0x30BD : 0x04bf, | |
828 | 0x30BF : 0x04c0, | |
829 | 0x30C1 : 0x04c1, | |
830 | 0x30C4 : 0x04c2, | |
831 | 0x30C6 : 0x04c3, | |
832 | 0x30C8 : 0x04c4, | |
833 | 0x30CA : 0x04c5, | |
834 | 0x30CB : 0x04c6, | |
835 | 0x30CC : 0x04c7, | |
836 | 0x30CD : 0x04c8, | |
837 | 0x30CE : 0x04c9, | |
838 | 0x30CF : 0x04ca, | |
839 | 0x30D2 : 0x04cb, | |
840 | 0x30D5 : 0x04cc, | |
841 | 0x30D8 : 0x04cd, | |
842 | 0x30DB : 0x04ce, | |
843 | 0x30DE : 0x04cf, | |
844 | 0x30DF : 0x04d0, | |
845 | 0x30E0 : 0x04d1, | |
846 | 0x30E1 : 0x04d2, | |
847 | 0x30E2 : 0x04d3, | |
848 | 0x30E4 : 0x04d4, | |
849 | 0x30E6 : 0x04d5, | |
850 | 0x30E8 : 0x04d6, | |
851 | 0x30E9 : 0x04d7, | |
852 | 0x30EA : 0x04d8, | |
853 | 0x30EB : 0x04d9, | |
854 | 0x30EC : 0x04da, | |
855 | 0x30ED : 0x04db, | |
856 | 0x30EF : 0x04dc, | |
857 | 0x30F3 : 0x04dd, | |
858 | 0x309B : 0x04de, | |
859 | 0x309C : 0x04df, | |
860 | 0x06F0 : 0x10006f0, | |
861 | 0x06F1 : 0x10006f1, | |
862 | 0x06F2 : 0x10006f2, | |
863 | 0x06F3 : 0x10006f3, | |
864 | 0x06F4 : 0x10006f4, | |
865 | 0x06F5 : 0x10006f5, | |
866 | 0x06F6 : 0x10006f6, | |
867 | 0x06F7 : 0x10006f7, | |
868 | 0x06F8 : 0x10006f8, | |
869 | 0x06F9 : 0x10006f9, | |
870 | 0x066A : 0x100066a, | |
871 | 0x0670 : 0x1000670, | |
872 | 0x0679 : 0x1000679, | |
873 | 0x067E : 0x100067e, | |
874 | 0x0686 : 0x1000686, | |
875 | 0x0688 : 0x1000688, | |
876 | 0x0691 : 0x1000691, | |
877 | 0x060C : 0x05ac, | |
878 | 0x06D4 : 0x10006d4, | |
879 | 0x0660 : 0x1000660, | |
880 | 0x0661 : 0x1000661, | |
881 | 0x0662 : 0x1000662, | |
882 | 0x0663 : 0x1000663, | |
883 | 0x0664 : 0x1000664, | |
884 | 0x0665 : 0x1000665, | |
885 | 0x0666 : 0x1000666, | |
886 | 0x0667 : 0x1000667, | |
887 | 0x0668 : 0x1000668, | |
888 | 0x0669 : 0x1000669, | |
889 | 0x061B : 0x05bb, | |
890 | 0x061F : 0x05bf, | |
891 | 0x0621 : 0x05c1, | |
892 | 0x0622 : 0x05c2, | |
893 | 0x0623 : 0x05c3, | |
894 | 0x0624 : 0x05c4, | |
895 | 0x0625 : 0x05c5, | |
896 | 0x0626 : 0x05c6, | |
897 | 0x0627 : 0x05c7, | |
898 | 0x0628 : 0x05c8, | |
899 | 0x0629 : 0x05c9, | |
900 | 0x062A : 0x05ca, | |
901 | 0x062B : 0x05cb, | |
902 | 0x062C : 0x05cc, | |
903 | 0x062D : 0x05cd, | |
904 | 0x062E : 0x05ce, | |
905 | 0x062F : 0x05cf, | |
906 | 0x0630 : 0x05d0, | |
907 | 0x0631 : 0x05d1, | |
908 | 0x0632 : 0x05d2, | |
909 | 0x0633 : 0x05d3, | |
910 | 0x0634 : 0x05d4, | |
911 | 0x0635 : 0x05d5, | |
912 | 0x0636 : 0x05d6, | |
913 | 0x0637 : 0x05d7, | |
914 | 0x0638 : 0x05d8, | |
915 | 0x0639 : 0x05d9, | |
916 | 0x063A : 0x05da, | |
917 | 0x0640 : 0x05e0, | |
918 | 0x0641 : 0x05e1, | |
919 | 0x0642 : 0x05e2, | |
920 | 0x0643 : 0x05e3, | |
921 | 0x0644 : 0x05e4, | |
922 | 0x0645 : 0x05e5, | |
923 | 0x0646 : 0x05e6, | |
924 | 0x0647 : 0x05e7, | |
925 | 0x0648 : 0x05e8, | |
926 | 0x0649 : 0x05e9, | |
927 | 0x064A : 0x05ea, | |
928 | 0x064B : 0x05eb, | |
929 | 0x064C : 0x05ec, | |
930 | 0x064D : 0x05ed, | |
931 | 0x064E : 0x05ee, | |
932 | 0x064F : 0x05ef, | |
933 | 0x0650 : 0x05f0, | |
934 | 0x0651 : 0x05f1, | |
935 | 0x0652 : 0x05f2, | |
936 | 0x0653 : 0x1000653, | |
937 | 0x0654 : 0x1000654, | |
938 | 0x0655 : 0x1000655, | |
939 | 0x0698 : 0x1000698, | |
940 | 0x06A4 : 0x10006a4, | |
941 | 0x06A9 : 0x10006a9, | |
942 | 0x06AF : 0x10006af, | |
943 | 0x06BA : 0x10006ba, | |
944 | 0x06BE : 0x10006be, | |
945 | 0x06CC : 0x10006cc, | |
946 | 0x06D2 : 0x10006d2, | |
947 | 0x06C1 : 0x10006c1, | |
948 | 0x0492 : 0x1000492, | |
949 | 0x0493 : 0x1000493, | |
950 | 0x0496 : 0x1000496, | |
951 | 0x0497 : 0x1000497, | |
952 | 0x049A : 0x100049a, | |
953 | 0x049B : 0x100049b, | |
954 | 0x049C : 0x100049c, | |
955 | 0x049D : 0x100049d, | |
956 | 0x04A2 : 0x10004a2, | |
957 | 0x04A3 : 0x10004a3, | |
958 | 0x04AE : 0x10004ae, | |
959 | 0x04AF : 0x10004af, | |
960 | 0x04B0 : 0x10004b0, | |
961 | 0x04B1 : 0x10004b1, | |
962 | 0x04B2 : 0x10004b2, | |
963 | 0x04B3 : 0x10004b3, | |
964 | 0x04B6 : 0x10004b6, | |
965 | 0x04B7 : 0x10004b7, | |
966 | 0x04B8 : 0x10004b8, | |
967 | 0x04B9 : 0x10004b9, | |
968 | 0x04BA : 0x10004ba, | |
969 | 0x04BB : 0x10004bb, | |
970 | 0x04D8 : 0x10004d8, | |
971 | 0x04D9 : 0x10004d9, | |
972 | 0x04E2 : 0x10004e2, | |
973 | 0x04E3 : 0x10004e3, | |
974 | 0x04E8 : 0x10004e8, | |
975 | 0x04E9 : 0x10004e9, | |
976 | 0x04EE : 0x10004ee, | |
977 | 0x04EF : 0x10004ef, | |
978 | 0x0452 : 0x06a1, | |
979 | 0x0453 : 0x06a2, | |
980 | 0x0451 : 0x06a3, | |
981 | 0x0454 : 0x06a4, | |
982 | 0x0455 : 0x06a5, | |
983 | 0x0456 : 0x06a6, | |
984 | 0x0457 : 0x06a7, | |
985 | 0x0458 : 0x06a8, | |
986 | 0x0459 : 0x06a9, | |
987 | 0x045A : 0x06aa, | |
988 | 0x045B : 0x06ab, | |
989 | 0x045C : 0x06ac, | |
990 | 0x0491 : 0x06ad, | |
991 | 0x045E : 0x06ae, | |
992 | 0x045F : 0x06af, | |
993 | 0x2116 : 0x06b0, | |
994 | 0x0402 : 0x06b1, | |
995 | 0x0403 : 0x06b2, | |
996 | 0x0401 : 0x06b3, | |
997 | 0x0404 : 0x06b4, | |
998 | 0x0405 : 0x06b5, | |
999 | 0x0406 : 0x06b6, | |
1000 | 0x0407 : 0x06b7, | |
1001 | 0x0408 : 0x06b8, | |
1002 | 0x0409 : 0x06b9, | |
1003 | 0x040A : 0x06ba, | |
1004 | 0x040B : 0x06bb, | |
1005 | 0x040C : 0x06bc, | |
1006 | 0x0490 : 0x06bd, | |
1007 | 0x040E : 0x06be, | |
1008 | 0x040F : 0x06bf, | |
1009 | 0x044E : 0x06c0, | |
1010 | 0x0430 : 0x06c1, | |
1011 | 0x0431 : 0x06c2, | |
1012 | 0x0446 : 0x06c3, | |
1013 | 0x0434 : 0x06c4, | |
1014 | 0x0435 : 0x06c5, | |
1015 | 0x0444 : 0x06c6, | |
1016 | 0x0433 : 0x06c7, | |
1017 | 0x0445 : 0x06c8, | |
1018 | 0x0438 : 0x06c9, | |
1019 | 0x0439 : 0x06ca, | |
1020 | 0x043A : 0x06cb, | |
1021 | 0x043B : 0x06cc, | |
1022 | 0x043C : 0x06cd, | |
1023 | 0x043D : 0x06ce, | |
1024 | 0x043E : 0x06cf, | |
1025 | 0x043F : 0x06d0, | |
1026 | 0x044F : 0x06d1, | |
1027 | 0x0440 : 0x06d2, | |
1028 | 0x0441 : 0x06d3, | |
1029 | 0x0442 : 0x06d4, | |
1030 | 0x0443 : 0x06d5, | |
1031 | 0x0436 : 0x06d6, | |
1032 | 0x0432 : 0x06d7, | |
1033 | 0x044C : 0x06d8, | |
1034 | 0x044B : 0x06d9, | |
1035 | 0x0437 : 0x06da, | |
1036 | 0x0448 : 0x06db, | |
1037 | 0x044D : 0x06dc, | |
1038 | 0x0449 : 0x06dd, | |
1039 | 0x0447 : 0x06de, | |
1040 | 0x044A : 0x06df, | |
1041 | 0x042E : 0x06e0, | |
1042 | 0x0410 : 0x06e1, | |
1043 | 0x0411 : 0x06e2, | |
1044 | 0x0426 : 0x06e3, | |
1045 | 0x0414 : 0x06e4, | |
1046 | 0x0415 : 0x06e5, | |
1047 | 0x0424 : 0x06e6, | |
1048 | 0x0413 : 0x06e7, | |
1049 | 0x0425 : 0x06e8, | |
1050 | 0x0418 : 0x06e9, | |
1051 | 0x0419 : 0x06ea, | |
1052 | 0x041A : 0x06eb, | |
1053 | 0x041B : 0x06ec, | |
1054 | 0x041C : 0x06ed, | |
1055 | 0x041D : 0x06ee, | |
1056 | 0x041E : 0x06ef, | |
1057 | 0x041F : 0x06f0, | |
1058 | 0x042F : 0x06f1, | |
1059 | 0x0420 : 0x06f2, | |
1060 | 0x0421 : 0x06f3, | |
1061 | 0x0422 : 0x06f4, | |
1062 | 0x0423 : 0x06f5, | |
1063 | 0x0416 : 0x06f6, | |
1064 | 0x0412 : 0x06f7, | |
1065 | 0x042C : 0x06f8, | |
1066 | 0x042B : 0x06f9, | |
1067 | 0x0417 : 0x06fa, | |
1068 | 0x0428 : 0x06fb, | |
1069 | 0x042D : 0x06fc, | |
1070 | 0x0429 : 0x06fd, | |
1071 | 0x0427 : 0x06fe, | |
1072 | 0x042A : 0x06ff, | |
1073 | 0x0386 : 0x07a1, | |
1074 | 0x0388 : 0x07a2, | |
1075 | 0x0389 : 0x07a3, | |
1076 | 0x038A : 0x07a4, | |
1077 | 0x03AA : 0x07a5, | |
1078 | 0x038C : 0x07a7, | |
1079 | 0x038E : 0x07a8, | |
1080 | 0x03AB : 0x07a9, | |
1081 | 0x038F : 0x07ab, | |
1082 | 0x0385 : 0x07ae, | |
1083 | 0x2015 : 0x07af, | |
1084 | 0x03AC : 0x07b1, | |
1085 | 0x03AD : 0x07b2, | |
1086 | 0x03AE : 0x07b3, | |
1087 | 0x03AF : 0x07b4, | |
1088 | 0x03CA : 0x07b5, | |
1089 | 0x0390 : 0x07b6, | |
1090 | 0x03CC : 0x07b7, | |
1091 | 0x03CD : 0x07b8, | |
1092 | 0x03CB : 0x07b9, | |
1093 | 0x03B0 : 0x07ba, | |
1094 | 0x03CE : 0x07bb, | |
1095 | 0x0391 : 0x07c1, | |
1096 | 0x0392 : 0x07c2, | |
1097 | 0x0393 : 0x07c3, | |
1098 | 0x0394 : 0x07c4, | |
1099 | 0x0395 : 0x07c5, | |
1100 | 0x0396 : 0x07c6, | |
1101 | 0x0397 : 0x07c7, | |
1102 | 0x0398 : 0x07c8, | |
1103 | 0x0399 : 0x07c9, | |
1104 | 0x039A : 0x07ca, | |
1105 | 0x039B : 0x07cb, | |
1106 | 0x039C : 0x07cc, | |
1107 | 0x039D : 0x07cd, | |
1108 | 0x039E : 0x07ce, | |
1109 | 0x039F : 0x07cf, | |
1110 | 0x03A0 : 0x07d0, | |
1111 | 0x03A1 : 0x07d1, | |
1112 | 0x03A3 : 0x07d2, | |
1113 | 0x03A4 : 0x07d4, | |
1114 | 0x03A5 : 0x07d5, | |
1115 | 0x03A6 : 0x07d6, | |
1116 | 0x03A7 : 0x07d7, | |
1117 | 0x03A8 : 0x07d8, | |
1118 | 0x03A9 : 0x07d9, | |
1119 | 0x03B1 : 0x07e1, | |
1120 | 0x03B2 : 0x07e2, | |
1121 | 0x03B3 : 0x07e3, | |
1122 | 0x03B4 : 0x07e4, | |
1123 | 0x03B5 : 0x07e5, | |
1124 | 0x03B6 : 0x07e6, | |
1125 | 0x03B7 : 0x07e7, | |
1126 | 0x03B8 : 0x07e8, | |
1127 | 0x03B9 : 0x07e9, | |
1128 | 0x03BA : 0x07ea, | |
1129 | 0x03BB : 0x07eb, | |
1130 | 0x03BC : 0x07ec, | |
1131 | 0x03BD : 0x07ed, | |
1132 | 0x03BE : 0x07ee, | |
1133 | 0x03BF : 0x07ef, | |
1134 | 0x03C0 : 0x07f0, | |
1135 | 0x03C1 : 0x07f1, | |
1136 | 0x03C3 : 0x07f2, | |
1137 | 0x03C2 : 0x07f3, | |
1138 | 0x03C4 : 0x07f4, | |
1139 | 0x03C5 : 0x07f5, | |
1140 | 0x03C6 : 0x07f6, | |
1141 | 0x03C7 : 0x07f7, | |
1142 | 0x03C8 : 0x07f8, | |
1143 | 0x03C9 : 0x07f9, | |
1144 | 0x23B7 : 0x08a1, | |
1145 | 0x2320 : 0x08a4, | |
1146 | 0x2321 : 0x08a5, | |
1147 | 0x23A1 : 0x08a7, | |
1148 | 0x23A3 : 0x08a8, | |
1149 | 0x23A4 : 0x08a9, | |
1150 | 0x23A6 : 0x08aa, | |
1151 | 0x239B : 0x08ab, | |
1152 | 0x239D : 0x08ac, | |
1153 | 0x239E : 0x08ad, | |
1154 | 0x23A0 : 0x08ae, | |
1155 | 0x23A8 : 0x08af, | |
1156 | 0x23AC : 0x08b0, | |
1157 | 0x2264 : 0x08bc, | |
1158 | 0x2260 : 0x08bd, | |
1159 | 0x2265 : 0x08be, | |
1160 | 0x222B : 0x08bf, | |
1161 | 0x2234 : 0x08c0, | |
1162 | 0x221D : 0x08c1, | |
1163 | 0x221E : 0x08c2, | |
1164 | 0x2207 : 0x08c5, | |
1165 | 0x223C : 0x08c8, | |
1166 | 0x2243 : 0x08c9, | |
1167 | 0x21D4 : 0x08cd, | |
1168 | 0x21D2 : 0x08ce, | |
1169 | 0x2261 : 0x08cf, | |
1170 | 0x221A : 0x08d6, | |
1171 | 0x2282 : 0x08da, | |
1172 | 0x2283 : 0x08db, | |
1173 | 0x2229 : 0x08dc, | |
1174 | 0x222A : 0x08dd, | |
1175 | 0x2227 : 0x08de, | |
1176 | 0x2228 : 0x08df, | |
1177 | 0x2202 : 0x08ef, | |
1178 | 0x0192 : 0x08f6, | |
1179 | 0x2190 : 0x08fb, | |
1180 | 0x2191 : 0x08fc, | |
1181 | 0x2192 : 0x08fd, | |
1182 | 0x2193 : 0x08fe, | |
1183 | 0x25C6 : 0x09e0, | |
1184 | 0x2592 : 0x09e1, | |
1185 | 0x2409 : 0x09e2, | |
1186 | 0x240C : 0x09e3, | |
1187 | 0x240D : 0x09e4, | |
1188 | 0x240A : 0x09e5, | |
1189 | 0x2424 : 0x09e8, | |
1190 | 0x240B : 0x09e9, | |
1191 | 0x2518 : 0x09ea, | |
1192 | 0x2510 : 0x09eb, | |
1193 | 0x250C : 0x09ec, | |
1194 | 0x2514 : 0x09ed, | |
1195 | 0x253C : 0x09ee, | |
1196 | 0x23BA : 0x09ef, | |
1197 | 0x23BB : 0x09f0, | |
1198 | 0x2500 : 0x09f1, | |
1199 | 0x23BC : 0x09f2, | |
1200 | 0x23BD : 0x09f3, | |
1201 | 0x251C : 0x09f4, | |
1202 | 0x2524 : 0x09f5, | |
1203 | 0x2534 : 0x09f6, | |
1204 | 0x252C : 0x09f7, | |
1205 | 0x2502 : 0x09f8, | |
1206 | 0x2003 : 0x0aa1, | |
1207 | 0x2002 : 0x0aa2, | |
1208 | 0x2004 : 0x0aa3, | |
1209 | 0x2005 : 0x0aa4, | |
1210 | 0x2007 : 0x0aa5, | |
1211 | 0x2008 : 0x0aa6, | |
1212 | 0x2009 : 0x0aa7, | |
1213 | 0x200A : 0x0aa8, | |
1214 | 0x2014 : 0x0aa9, | |
1215 | 0x2013 : 0x0aaa, | |
1216 | 0x2026 : 0x0aae, | |
1217 | 0x2025 : 0x0aaf, | |
1218 | 0x2153 : 0x0ab0, | |
1219 | 0x2154 : 0x0ab1, | |
1220 | 0x2155 : 0x0ab2, | |
1221 | 0x2156 : 0x0ab3, | |
1222 | 0x2157 : 0x0ab4, | |
1223 | 0x2158 : 0x0ab5, | |
1224 | 0x2159 : 0x0ab6, | |
1225 | 0x215A : 0x0ab7, | |
1226 | 0x2105 : 0x0ab8, | |
1227 | 0x2012 : 0x0abb, | |
1228 | 0x215B : 0x0ac3, | |
1229 | 0x215C : 0x0ac4, | |
1230 | 0x215D : 0x0ac5, | |
1231 | 0x215E : 0x0ac6, | |
1232 | 0x2122 : 0x0ac9, | |
1233 | 0x2018 : 0x0ad0, | |
1234 | 0x2019 : 0x0ad1, | |
1235 | 0x201C : 0x0ad2, | |
1236 | 0x201D : 0x0ad3, | |
1237 | 0x211E : 0x0ad4, | |
1238 | 0x2032 : 0x0ad6, | |
1239 | 0x2033 : 0x0ad7, | |
1240 | 0x271D : 0x0ad9, | |
1241 | 0x2663 : 0x0aec, | |
1242 | 0x2666 : 0x0aed, | |
1243 | 0x2665 : 0x0aee, | |
1244 | 0x2720 : 0x0af0, | |
1245 | 0x2020 : 0x0af1, | |
1246 | 0x2021 : 0x0af2, | |
1247 | 0x2713 : 0x0af3, | |
1248 | 0x2717 : 0x0af4, | |
1249 | 0x266F : 0x0af5, | |
1250 | 0x266D : 0x0af6, | |
1251 | 0x2642 : 0x0af7, | |
1252 | 0x2640 : 0x0af8, | |
1253 | 0x260E : 0x0af9, | |
1254 | 0x2315 : 0x0afa, | |
1255 | 0x2117 : 0x0afb, | |
1256 | 0x2038 : 0x0afc, | |
1257 | 0x201A : 0x0afd, | |
1258 | 0x201E : 0x0afe, | |
1259 | 0x22A4 : 0x0bc2, | |
1260 | 0x230A : 0x0bc4, | |
1261 | 0x2218 : 0x0bca, | |
1262 | 0x2395 : 0x0bcc, | |
1263 | 0x22A5 : 0x0bce, | |
1264 | 0x25CB : 0x0bcf, | |
1265 | 0x2308 : 0x0bd3, | |
1266 | 0x22A3 : 0x0bdc, | |
1267 | 0x22A2 : 0x0bfc, | |
1268 | 0x2017 : 0x0cdf, | |
1269 | 0x05D0 : 0x0ce0, | |
1270 | 0x05D1 : 0x0ce1, | |
1271 | 0x05D2 : 0x0ce2, | |
1272 | 0x05D3 : 0x0ce3, | |
1273 | 0x05D4 : 0x0ce4, | |
1274 | 0x05D5 : 0x0ce5, | |
1275 | 0x05D6 : 0x0ce6, | |
1276 | 0x05D7 : 0x0ce7, | |
1277 | 0x05D8 : 0x0ce8, | |
1278 | 0x05D9 : 0x0ce9, | |
1279 | 0x05DA : 0x0cea, | |
1280 | 0x05DB : 0x0ceb, | |
1281 | 0x05DC : 0x0cec, | |
1282 | 0x05DD : 0x0ced, | |
1283 | 0x05DE : 0x0cee, | |
1284 | 0x05DF : 0x0cef, | |
1285 | 0x05E0 : 0x0cf0, | |
1286 | 0x05E1 : 0x0cf1, | |
1287 | 0x05E2 : 0x0cf2, | |
1288 | 0x05E3 : 0x0cf3, | |
1289 | 0x05E4 : 0x0cf4, | |
1290 | 0x05E5 : 0x0cf5, | |
1291 | 0x05E6 : 0x0cf6, | |
1292 | 0x05E7 : 0x0cf7, | |
1293 | 0x05E8 : 0x0cf8, | |
1294 | 0x05E9 : 0x0cf9, | |
1295 | 0x05EA : 0x0cfa, | |
1296 | 0x0E01 : 0x0da1, | |
1297 | 0x0E02 : 0x0da2, | |
1298 | 0x0E03 : 0x0da3, | |
1299 | 0x0E04 : 0x0da4, | |
1300 | 0x0E05 : 0x0da5, | |
1301 | 0x0E06 : 0x0da6, | |
1302 | 0x0E07 : 0x0da7, | |
1303 | 0x0E08 : 0x0da8, | |
1304 | 0x0E09 : 0x0da9, | |
1305 | 0x0E0A : 0x0daa, | |
1306 | 0x0E0B : 0x0dab, | |
1307 | 0x0E0C : 0x0dac, | |
1308 | 0x0E0D : 0x0dad, | |
1309 | 0x0E0E : 0x0dae, | |
1310 | 0x0E0F : 0x0daf, | |
1311 | 0x0E10 : 0x0db0, | |
1312 | 0x0E11 : 0x0db1, | |
1313 | 0x0E12 : 0x0db2, | |
1314 | 0x0E13 : 0x0db3, | |
1315 | 0x0E14 : 0x0db4, | |
1316 | 0x0E15 : 0x0db5, | |
1317 | 0x0E16 : 0x0db6, | |
1318 | 0x0E17 : 0x0db7, | |
1319 | 0x0E18 : 0x0db8, | |
1320 | 0x0E19 : 0x0db9, | |
1321 | 0x0E1A : 0x0dba, | |
1322 | 0x0E1B : 0x0dbb, | |
1323 | 0x0E1C : 0x0dbc, | |
1324 | 0x0E1D : 0x0dbd, | |
1325 | 0x0E1E : 0x0dbe, | |
1326 | 0x0E1F : 0x0dbf, | |
1327 | 0x0E20 : 0x0dc0, | |
1328 | 0x0E21 : 0x0dc1, | |
1329 | 0x0E22 : 0x0dc2, | |
1330 | 0x0E23 : 0x0dc3, | |
1331 | 0x0E24 : 0x0dc4, | |
1332 | 0x0E25 : 0x0dc5, | |
1333 | 0x0E26 : 0x0dc6, | |
1334 | 0x0E27 : 0x0dc7, | |
1335 | 0x0E28 : 0x0dc8, | |
1336 | 0x0E29 : 0x0dc9, | |
1337 | 0x0E2A : 0x0dca, | |
1338 | 0x0E2B : 0x0dcb, | |
1339 | 0x0E2C : 0x0dcc, | |
1340 | 0x0E2D : 0x0dcd, | |
1341 | 0x0E2E : 0x0dce, | |
1342 | 0x0E2F : 0x0dcf, | |
1343 | 0x0E30 : 0x0dd0, | |
1344 | 0x0E31 : 0x0dd1, | |
1345 | 0x0E32 : 0x0dd2, | |
1346 | 0x0E33 : 0x0dd3, | |
1347 | 0x0E34 : 0x0dd4, | |
1348 | 0x0E35 : 0x0dd5, | |
1349 | 0x0E36 : 0x0dd6, | |
1350 | 0x0E37 : 0x0dd7, | |
1351 | 0x0E38 : 0x0dd8, | |
1352 | 0x0E39 : 0x0dd9, | |
1353 | 0x0E3A : 0x0dda, | |
1354 | 0x0E3F : 0x0ddf, | |
1355 | 0x0E40 : 0x0de0, | |
1356 | 0x0E41 : 0x0de1, | |
1357 | 0x0E42 : 0x0de2, | |
1358 | 0x0E43 : 0x0de3, | |
1359 | 0x0E44 : 0x0de4, | |
1360 | 0x0E45 : 0x0de5, | |
1361 | 0x0E46 : 0x0de6, | |
1362 | 0x0E47 : 0x0de7, | |
1363 | 0x0E48 : 0x0de8, | |
1364 | 0x0E49 : 0x0de9, | |
1365 | 0x0E4A : 0x0dea, | |
1366 | 0x0E4B : 0x0deb, | |
1367 | 0x0E4C : 0x0dec, | |
1368 | 0x0E4D : 0x0ded, | |
1369 | 0x0E50 : 0x0df0, | |
1370 | 0x0E51 : 0x0df1, | |
1371 | 0x0E52 : 0x0df2, | |
1372 | 0x0E53 : 0x0df3, | |
1373 | 0x0E54 : 0x0df4, | |
1374 | 0x0E55 : 0x0df5, | |
1375 | 0x0E56 : 0x0df6, | |
1376 | 0x0E57 : 0x0df7, | |
1377 | 0x0E58 : 0x0df8, | |
1378 | 0x0E59 : 0x0df9, | |
1379 | 0x0587 : 0x1000587, | |
1380 | 0x0589 : 0x1000589, | |
1381 | 0x055D : 0x100055d, | |
1382 | 0x058A : 0x100058a, | |
1383 | 0x055C : 0x100055c, | |
1384 | 0x055B : 0x100055b, | |
1385 | 0x055E : 0x100055e, | |
1386 | 0x0531 : 0x1000531, | |
1387 | 0x0561 : 0x1000561, | |
1388 | 0x0532 : 0x1000532, | |
1389 | 0x0562 : 0x1000562, | |
1390 | 0x0533 : 0x1000533, | |
1391 | 0x0563 : 0x1000563, | |
1392 | 0x0534 : 0x1000534, | |
1393 | 0x0564 : 0x1000564, | |
1394 | 0x0535 : 0x1000535, | |
1395 | 0x0565 : 0x1000565, | |
1396 | 0x0536 : 0x1000536, | |
1397 | 0x0566 : 0x1000566, | |
1398 | 0x0537 : 0x1000537, | |
1399 | 0x0567 : 0x1000567, | |
1400 | 0x0538 : 0x1000538, | |
1401 | 0x0568 : 0x1000568, | |
1402 | 0x0539 : 0x1000539, | |
1403 | 0x0569 : 0x1000569, | |
1404 | 0x053A : 0x100053a, | |
1405 | 0x056A : 0x100056a, | |
1406 | 0x053B : 0x100053b, | |
1407 | 0x056B : 0x100056b, | |
1408 | 0x053C : 0x100053c, | |
1409 | 0x056C : 0x100056c, | |
1410 | 0x053D : 0x100053d, | |
1411 | 0x056D : 0x100056d, | |
1412 | 0x053E : 0x100053e, | |
1413 | 0x056E : 0x100056e, | |
1414 | 0x053F : 0x100053f, | |
1415 | 0x056F : 0x100056f, | |
1416 | 0x0540 : 0x1000540, | |
1417 | 0x0570 : 0x1000570, | |
1418 | 0x0541 : 0x1000541, | |
1419 | 0x0571 : 0x1000571, | |
1420 | 0x0542 : 0x1000542, | |
1421 | 0x0572 : 0x1000572, | |
1422 | 0x0543 : 0x1000543, | |
1423 | 0x0573 : 0x1000573, | |
1424 | 0x0544 : 0x1000544, | |
1425 | 0x0574 : 0x1000574, | |
1426 | 0x0545 : 0x1000545, | |
1427 | 0x0575 : 0x1000575, | |
1428 | 0x0546 : 0x1000546, | |
1429 | 0x0576 : 0x1000576, | |
1430 | 0x0547 : 0x1000547, | |
1431 | 0x0577 : 0x1000577, | |
1432 | 0x0548 : 0x1000548, | |
1433 | 0x0578 : 0x1000578, | |
1434 | 0x0549 : 0x1000549, | |
1435 | 0x0579 : 0x1000579, | |
1436 | 0x054A : 0x100054a, | |
1437 | 0x057A : 0x100057a, | |
1438 | 0x054B : 0x100054b, | |
1439 | 0x057B : 0x100057b, | |
1440 | 0x054C : 0x100054c, | |
1441 | 0x057C : 0x100057c, | |
1442 | 0x054D : 0x100054d, | |
1443 | 0x057D : 0x100057d, | |
1444 | 0x054E : 0x100054e, | |
1445 | 0x057E : 0x100057e, | |
1446 | 0x054F : 0x100054f, | |
1447 | 0x057F : 0x100057f, | |
1448 | 0x0550 : 0x1000550, | |
1449 | 0x0580 : 0x1000580, | |
1450 | 0x0551 : 0x1000551, | |
1451 | 0x0581 : 0x1000581, | |
1452 | 0x0552 : 0x1000552, | |
1453 | 0x0582 : 0x1000582, | |
1454 | 0x0553 : 0x1000553, | |
1455 | 0x0583 : 0x1000583, | |
1456 | 0x0554 : 0x1000554, | |
1457 | 0x0584 : 0x1000584, | |
1458 | 0x0555 : 0x1000555, | |
1459 | 0x0585 : 0x1000585, | |
1460 | 0x0556 : 0x1000556, | |
1461 | 0x0586 : 0x1000586, | |
1462 | 0x055A : 0x100055a, | |
1463 | 0x10D0 : 0x10010d0, | |
1464 | 0x10D1 : 0x10010d1, | |
1465 | 0x10D2 : 0x10010d2, | |
1466 | 0x10D3 : 0x10010d3, | |
1467 | 0x10D4 : 0x10010d4, | |
1468 | 0x10D5 : 0x10010d5, | |
1469 | 0x10D6 : 0x10010d6, | |
1470 | 0x10D7 : 0x10010d7, | |
1471 | 0x10D8 : 0x10010d8, | |
1472 | 0x10D9 : 0x10010d9, | |
1473 | 0x10DA : 0x10010da, | |
1474 | 0x10DB : 0x10010db, | |
1475 | 0x10DC : 0x10010dc, | |
1476 | 0x10DD : 0x10010dd, | |
1477 | 0x10DE : 0x10010de, | |
1478 | 0x10DF : 0x10010df, | |
1479 | 0x10E0 : 0x10010e0, | |
1480 | 0x10E1 : 0x10010e1, | |
1481 | 0x10E2 : 0x10010e2, | |
1482 | 0x10E3 : 0x10010e3, | |
1483 | 0x10E4 : 0x10010e4, | |
1484 | 0x10E5 : 0x10010e5, | |
1485 | 0x10E6 : 0x10010e6, | |
1486 | 0x10E7 : 0x10010e7, | |
1487 | 0x10E8 : 0x10010e8, | |
1488 | 0x10E9 : 0x10010e9, | |
1489 | 0x10EA : 0x10010ea, | |
1490 | 0x10EB : 0x10010eb, | |
1491 | 0x10EC : 0x10010ec, | |
1492 | 0x10ED : 0x10010ed, | |
1493 | 0x10EE : 0x10010ee, | |
1494 | 0x10EF : 0x10010ef, | |
1495 | 0x10F0 : 0x10010f0, | |
1496 | 0x10F1 : 0x10010f1, | |
1497 | 0x10F2 : 0x10010f2, | |
1498 | 0x10F3 : 0x10010f3, | |
1499 | 0x10F4 : 0x10010f4, | |
1500 | 0x10F5 : 0x10010f5, | |
1501 | 0x10F6 : 0x10010f6, | |
1502 | 0x1E8A : 0x1001e8a, | |
1503 | 0x012C : 0x100012c, | |
1504 | 0x01B5 : 0x10001b5, | |
1505 | 0x01E6 : 0x10001e6, | |
1506 | 0x01D2 : 0x10001d1, | |
1507 | 0x019F : 0x100019f, | |
1508 | 0x1E8B : 0x1001e8b, | |
1509 | 0x012D : 0x100012d, | |
1510 | 0x01B6 : 0x10001b6, | |
1511 | 0x01E7 : 0x10001e7, | |
1512 | 0x01D2 : 0x10001d2, | |
1513 | 0x0275 : 0x1000275, | |
1514 | 0x018F : 0x100018f, | |
1515 | 0x0259 : 0x1000259, | |
1516 | 0x1E36 : 0x1001e36, | |
1517 | 0x1E37 : 0x1001e37, | |
1518 | 0x1EA0 : 0x1001ea0, | |
1519 | 0x1EA1 : 0x1001ea1, | |
1520 | 0x1EA2 : 0x1001ea2, | |
1521 | 0x1EA3 : 0x1001ea3, | |
1522 | 0x1EA4 : 0x1001ea4, | |
1523 | 0x1EA5 : 0x1001ea5, | |
1524 | 0x1EA6 : 0x1001ea6, | |
1525 | 0x1EA7 : 0x1001ea7, | |
1526 | 0x1EA8 : 0x1001ea8, | |
1527 | 0x1EA9 : 0x1001ea9, | |
1528 | 0x1EAA : 0x1001eaa, | |
1529 | 0x1EAB : 0x1001eab, | |
1530 | 0x1EAC : 0x1001eac, | |
1531 | 0x1EAD : 0x1001ead, | |
1532 | 0x1EAE : 0x1001eae, | |
1533 | 0x1EAF : 0x1001eaf, | |
1534 | 0x1EB0 : 0x1001eb0, | |
1535 | 0x1EB1 : 0x1001eb1, | |
1536 | 0x1EB2 : 0x1001eb2, | |
1537 | 0x1EB3 : 0x1001eb3, | |
1538 | 0x1EB4 : 0x1001eb4, | |
1539 | 0x1EB5 : 0x1001eb5, | |
1540 | 0x1EB6 : 0x1001eb6, | |
1541 | 0x1EB7 : 0x1001eb7, | |
1542 | 0x1EB8 : 0x1001eb8, | |
1543 | 0x1EB9 : 0x1001eb9, | |
1544 | 0x1EBA : 0x1001eba, | |
1545 | 0x1EBB : 0x1001ebb, | |
1546 | 0x1EBC : 0x1001ebc, | |
1547 | 0x1EBD : 0x1001ebd, | |
1548 | 0x1EBE : 0x1001ebe, | |
1549 | 0x1EBF : 0x1001ebf, | |
1550 | 0x1EC0 : 0x1001ec0, | |
1551 | 0x1EC1 : 0x1001ec1, | |
1552 | 0x1EC2 : 0x1001ec2, | |
1553 | 0x1EC3 : 0x1001ec3, | |
1554 | 0x1EC4 : 0x1001ec4, | |
1555 | 0x1EC5 : 0x1001ec5, | |
1556 | 0x1EC6 : 0x1001ec6, | |
1557 | 0x1EC7 : 0x1001ec7, | |
1558 | 0x1EC8 : 0x1001ec8, | |
1559 | 0x1EC9 : 0x1001ec9, | |
1560 | 0x1ECA : 0x1001eca, | |
1561 | 0x1ECB : 0x1001ecb, | |
1562 | 0x1ECC : 0x1001ecc, | |
1563 | 0x1ECD : 0x1001ecd, | |
1564 | 0x1ECE : 0x1001ece, | |
1565 | 0x1ECF : 0x1001ecf, | |
1566 | 0x1ED0 : 0x1001ed0, | |
1567 | 0x1ED1 : 0x1001ed1, | |
1568 | 0x1ED2 : 0x1001ed2, | |
1569 | 0x1ED3 : 0x1001ed3, | |
1570 | 0x1ED4 : 0x1001ed4, | |
1571 | 0x1ED5 : 0x1001ed5, | |
1572 | 0x1ED6 : 0x1001ed6, | |
1573 | 0x1ED7 : 0x1001ed7, | |
1574 | 0x1ED8 : 0x1001ed8, | |
1575 | 0x1ED9 : 0x1001ed9, | |
1576 | 0x1EDA : 0x1001eda, | |
1577 | 0x1EDB : 0x1001edb, | |
1578 | 0x1EDC : 0x1001edc, | |
1579 | 0x1EDD : 0x1001edd, | |
1580 | 0x1EDE : 0x1001ede, | |
1581 | 0x1EDF : 0x1001edf, | |
1582 | 0x1EE0 : 0x1001ee0, | |
1583 | 0x1EE1 : 0x1001ee1, | |
1584 | 0x1EE2 : 0x1001ee2, | |
1585 | 0x1EE3 : 0x1001ee3, | |
1586 | 0x1EE4 : 0x1001ee4, | |
1587 | 0x1EE5 : 0x1001ee5, | |
1588 | 0x1EE6 : 0x1001ee6, | |
1589 | 0x1EE7 : 0x1001ee7, | |
1590 | 0x1EE8 : 0x1001ee8, | |
1591 | 0x1EE9 : 0x1001ee9, | |
1592 | 0x1EEA : 0x1001eea, | |
1593 | 0x1EEB : 0x1001eeb, | |
1594 | 0x1EEC : 0x1001eec, | |
1595 | 0x1EED : 0x1001eed, | |
1596 | 0x1EEE : 0x1001eee, | |
1597 | 0x1EEF : 0x1001eef, | |
1598 | 0x1EF0 : 0x1001ef0, | |
1599 | 0x1EF1 : 0x1001ef1, | |
1600 | 0x1EF4 : 0x1001ef4, | |
1601 | 0x1EF5 : 0x1001ef5, | |
1602 | 0x1EF6 : 0x1001ef6, | |
1603 | 0x1EF7 : 0x1001ef7, | |
1604 | 0x1EF8 : 0x1001ef8, | |
1605 | 0x1EF9 : 0x1001ef9, | |
1606 | 0x01A0 : 0x10001a0, | |
1607 | 0x01A1 : 0x10001a1, | |
1608 | 0x01AF : 0x10001af, | |
1609 | 0x01B0 : 0x10001b0, | |
1610 | 0x20A0 : 0x10020a0, | |
1611 | 0x20A1 : 0x10020a1, | |
1612 | 0x20A2 : 0x10020a2, | |
1613 | 0x20A3 : 0x10020a3, | |
1614 | 0x20A4 : 0x10020a4, | |
1615 | 0x20A5 : 0x10020a5, | |
1616 | 0x20A6 : 0x10020a6, | |
1617 | 0x20A7 : 0x10020a7, | |
1618 | 0x20A8 : 0x10020a8, | |
1619 | 0x20A9 : 0x10020a9, | |
1620 | 0x20AA : 0x10020aa, | |
1621 | 0x20AB : 0x10020ab, | |
1622 | 0x20AC : 0x20ac, | |
1623 | 0x2070 : 0x1002070, | |
1624 | 0x2074 : 0x1002074, | |
1625 | 0x2075 : 0x1002075, | |
1626 | 0x2076 : 0x1002076, | |
1627 | 0x2077 : 0x1002077, | |
1628 | 0x2078 : 0x1002078, | |
1629 | 0x2079 : 0x1002079, | |
1630 | 0x2080 : 0x1002080, | |
1631 | 0x2081 : 0x1002081, | |
1632 | 0x2082 : 0x1002082, | |
1633 | 0x2083 : 0x1002083, | |
1634 | 0x2084 : 0x1002084, | |
1635 | 0x2085 : 0x1002085, | |
1636 | 0x2086 : 0x1002086, | |
1637 | 0x2087 : 0x1002087, | |
1638 | 0x2088 : 0x1002088, | |
1639 | 0x2089 : 0x1002089, | |
1640 | 0x2202 : 0x1002202, | |
1641 | 0x2205 : 0x1002205, | |
1642 | 0x2208 : 0x1002208, | |
1643 | 0x2209 : 0x1002209, | |
1644 | 0x220B : 0x100220B, | |
1645 | 0x221A : 0x100221A, | |
1646 | 0x221B : 0x100221B, | |
1647 | 0x221C : 0x100221C, | |
1648 | 0x222C : 0x100222C, | |
1649 | 0x222D : 0x100222D, | |
1650 | 0x2235 : 0x1002235, | |
1651 | 0x2245 : 0x1002248, | |
1652 | 0x2247 : 0x1002247, | |
1653 | 0x2262 : 0x1002262, | |
1654 | 0x2263 : 0x1002263, | |
1655 | 0x2800 : 0x1002800, | |
1656 | 0x2801 : 0x1002801, | |
1657 | 0x2802 : 0x1002802, | |
1658 | 0x2803 : 0x1002803, | |
1659 | 0x2804 : 0x1002804, | |
1660 | 0x2805 : 0x1002805, | |
1661 | 0x2806 : 0x1002806, | |
1662 | 0x2807 : 0x1002807, | |
1663 | 0x2808 : 0x1002808, | |
1664 | 0x2809 : 0x1002809, | |
1665 | 0x280a : 0x100280a, | |
1666 | 0x280b : 0x100280b, | |
1667 | 0x280c : 0x100280c, | |
1668 | 0x280d : 0x100280d, | |
1669 | 0x280e : 0x100280e, | |
1670 | 0x280f : 0x100280f, | |
1671 | 0x2810 : 0x1002810, | |
1672 | 0x2811 : 0x1002811, | |
1673 | 0x2812 : 0x1002812, | |
1674 | 0x2813 : 0x1002813, | |
1675 | 0x2814 : 0x1002814, | |
1676 | 0x2815 : 0x1002815, | |
1677 | 0x2816 : 0x1002816, | |
1678 | 0x2817 : 0x1002817, | |
1679 | 0x2818 : 0x1002818, | |
1680 | 0x2819 : 0x1002819, | |
1681 | 0x281a : 0x100281a, | |
1682 | 0x281b : 0x100281b, | |
1683 | 0x281c : 0x100281c, | |
1684 | 0x281d : 0x100281d, | |
1685 | 0x281e : 0x100281e, | |
1686 | 0x281f : 0x100281f, | |
1687 | 0x2820 : 0x1002820, | |
1688 | 0x2821 : 0x1002821, | |
1689 | 0x2822 : 0x1002822, | |
1690 | 0x2823 : 0x1002823, | |
1691 | 0x2824 : 0x1002824, | |
1692 | 0x2825 : 0x1002825, | |
1693 | 0x2826 : 0x1002826, | |
1694 | 0x2827 : 0x1002827, | |
1695 | 0x2828 : 0x1002828, | |
1696 | 0x2829 : 0x1002829, | |
1697 | 0x282a : 0x100282a, | |
1698 | 0x282b : 0x100282b, | |
1699 | 0x282c : 0x100282c, | |
1700 | 0x282d : 0x100282d, | |
1701 | 0x282e : 0x100282e, | |
1702 | 0x282f : 0x100282f, | |
1703 | 0x2830 : 0x1002830, | |
1704 | 0x2831 : 0x1002831, | |
1705 | 0x2832 : 0x1002832, | |
1706 | 0x2833 : 0x1002833, | |
1707 | 0x2834 : 0x1002834, | |
1708 | 0x2835 : 0x1002835, | |
1709 | 0x2836 : 0x1002836, | |
1710 | 0x2837 : 0x1002837, | |
1711 | 0x2838 : 0x1002838, | |
1712 | 0x2839 : 0x1002839, | |
1713 | 0x283a : 0x100283a, | |
1714 | 0x283b : 0x100283b, | |
1715 | 0x283c : 0x100283c, | |
1716 | 0x283d : 0x100283d, | |
1717 | 0x283e : 0x100283e, | |
1718 | 0x283f : 0x100283f, | |
1719 | 0x2840 : 0x1002840, | |
1720 | 0x2841 : 0x1002841, | |
1721 | 0x2842 : 0x1002842, | |
1722 | 0x2843 : 0x1002843, | |
1723 | 0x2844 : 0x1002844, | |
1724 | 0x2845 : 0x1002845, | |
1725 | 0x2846 : 0x1002846, | |
1726 | 0x2847 : 0x1002847, | |
1727 | 0x2848 : 0x1002848, | |
1728 | 0x2849 : 0x1002849, | |
1729 | 0x284a : 0x100284a, | |
1730 | 0x284b : 0x100284b, | |
1731 | 0x284c : 0x100284c, | |
1732 | 0x284d : 0x100284d, | |
1733 | 0x284e : 0x100284e, | |
1734 | 0x284f : 0x100284f, | |
1735 | 0x2850 : 0x1002850, | |
1736 | 0x2851 : 0x1002851, | |
1737 | 0x2852 : 0x1002852, | |
1738 | 0x2853 : 0x1002853, | |
1739 | 0x2854 : 0x1002854, | |
1740 | 0x2855 : 0x1002855, | |
1741 | 0x2856 : 0x1002856, | |
1742 | 0x2857 : 0x1002857, | |
1743 | 0x2858 : 0x1002858, | |
1744 | 0x2859 : 0x1002859, | |
1745 | 0x285a : 0x100285a, | |
1746 | 0x285b : 0x100285b, | |
1747 | 0x285c : 0x100285c, | |
1748 | 0x285d : 0x100285d, | |
1749 | 0x285e : 0x100285e, | |
1750 | 0x285f : 0x100285f, | |
1751 | 0x2860 : 0x1002860, | |
1752 | 0x2861 : 0x1002861, | |
1753 | 0x2862 : 0x1002862, | |
1754 | 0x2863 : 0x1002863, | |
1755 | 0x2864 : 0x1002864, | |
1756 | 0x2865 : 0x1002865, | |
1757 | 0x2866 : 0x1002866, | |
1758 | 0x2867 : 0x1002867, | |
1759 | 0x2868 : 0x1002868, | |
1760 | 0x2869 : 0x1002869, | |
1761 | 0x286a : 0x100286a, | |
1762 | 0x286b : 0x100286b, | |
1763 | 0x286c : 0x100286c, | |
1764 | 0x286d : 0x100286d, | |
1765 | 0x286e : 0x100286e, | |
1766 | 0x286f : 0x100286f, | |
1767 | 0x2870 : 0x1002870, | |
1768 | 0x2871 : 0x1002871, | |
1769 | 0x2872 : 0x1002872, | |
1770 | 0x2873 : 0x1002873, | |
1771 | 0x2874 : 0x1002874, | |
1772 | 0x2875 : 0x1002875, | |
1773 | 0x2876 : 0x1002876, | |
1774 | 0x2877 : 0x1002877, | |
1775 | 0x2878 : 0x1002878, | |
1776 | 0x2879 : 0x1002879, | |
1777 | 0x287a : 0x100287a, | |
1778 | 0x287b : 0x100287b, | |
1779 | 0x287c : 0x100287c, | |
1780 | 0x287d : 0x100287d, | |
1781 | 0x287e : 0x100287e, | |
1782 | 0x287f : 0x100287f, | |
1783 | 0x2880 : 0x1002880, | |
1784 | 0x2881 : 0x1002881, | |
1785 | 0x2882 : 0x1002882, | |
1786 | 0x2883 : 0x1002883, | |
1787 | 0x2884 : 0x1002884, | |
1788 | 0x2885 : 0x1002885, | |
1789 | 0x2886 : 0x1002886, | |
1790 | 0x2887 : 0x1002887, | |
1791 | 0x2888 : 0x1002888, | |
1792 | 0x2889 : 0x1002889, | |
1793 | 0x288a : 0x100288a, | |
1794 | 0x288b : 0x100288b, | |
1795 | 0x288c : 0x100288c, | |
1796 | 0x288d : 0x100288d, | |
1797 | 0x288e : 0x100288e, | |
1798 | 0x288f : 0x100288f, | |
1799 | 0x2890 : 0x1002890, | |
1800 | 0x2891 : 0x1002891, | |
1801 | 0x2892 : 0x1002892, | |
1802 | 0x2893 : 0x1002893, | |
1803 | 0x2894 : 0x1002894, | |
1804 | 0x2895 : 0x1002895, | |
1805 | 0x2896 : 0x1002896, | |
1806 | 0x2897 : 0x1002897, | |
1807 | 0x2898 : 0x1002898, | |
1808 | 0x2899 : 0x1002899, | |
1809 | 0x289a : 0x100289a, | |
1810 | 0x289b : 0x100289b, | |
1811 | 0x289c : 0x100289c, | |
1812 | 0x289d : 0x100289d, | |
1813 | 0x289e : 0x100289e, | |
1814 | 0x289f : 0x100289f, | |
1815 | 0x28a0 : 0x10028a0, | |
1816 | 0x28a1 : 0x10028a1, | |
1817 | 0x28a2 : 0x10028a2, | |
1818 | 0x28a3 : 0x10028a3, | |
1819 | 0x28a4 : 0x10028a4, | |
1820 | 0x28a5 : 0x10028a5, | |
1821 | 0x28a6 : 0x10028a6, | |
1822 | 0x28a7 : 0x10028a7, | |
1823 | 0x28a8 : 0x10028a8, | |
1824 | 0x28a9 : 0x10028a9, | |
1825 | 0x28aa : 0x10028aa, | |
1826 | 0x28ab : 0x10028ab, | |
1827 | 0x28ac : 0x10028ac, | |
1828 | 0x28ad : 0x10028ad, | |
1829 | 0x28ae : 0x10028ae, | |
1830 | 0x28af : 0x10028af, | |
1831 | 0x28b0 : 0x10028b0, | |
1832 | 0x28b1 : 0x10028b1, | |
1833 | 0x28b2 : 0x10028b2, | |
1834 | 0x28b3 : 0x10028b3, | |
1835 | 0x28b4 : 0x10028b4, | |
1836 | 0x28b5 : 0x10028b5, | |
1837 | 0x28b6 : 0x10028b6, | |
1838 | 0x28b7 : 0x10028b7, | |
1839 | 0x28b8 : 0x10028b8, | |
1840 | 0x28b9 : 0x10028b9, | |
1841 | 0x28ba : 0x10028ba, | |
1842 | 0x28bb : 0x10028bb, | |
1843 | 0x28bc : 0x10028bc, | |
1844 | 0x28bd : 0x10028bd, | |
1845 | 0x28be : 0x10028be, | |
1846 | 0x28bf : 0x10028bf, | |
1847 | 0x28c0 : 0x10028c0, | |
1848 | 0x28c1 : 0x10028c1, | |
1849 | 0x28c2 : 0x10028c2, | |
1850 | 0x28c3 : 0x10028c3, | |
1851 | 0x28c4 : 0x10028c4, | |
1852 | 0x28c5 : 0x10028c5, | |
1853 | 0x28c6 : 0x10028c6, | |
1854 | 0x28c7 : 0x10028c7, | |
1855 | 0x28c8 : 0x10028c8, | |
1856 | 0x28c9 : 0x10028c9, | |
1857 | 0x28ca : 0x10028ca, | |
1858 | 0x28cb : 0x10028cb, | |
1859 | 0x28cc : 0x10028cc, | |
1860 | 0x28cd : 0x10028cd, | |
1861 | 0x28ce : 0x10028ce, | |
1862 | 0x28cf : 0x10028cf, | |
1863 | 0x28d0 : 0x10028d0, | |
1864 | 0x28d1 : 0x10028d1, | |
1865 | 0x28d2 : 0x10028d2, | |
1866 | 0x28d3 : 0x10028d3, | |
1867 | 0x28d4 : 0x10028d4, | |
1868 | 0x28d5 : 0x10028d5, | |
1869 | 0x28d6 : 0x10028d6, | |
1870 | 0x28d7 : 0x10028d7, | |
1871 | 0x28d8 : 0x10028d8, | |
1872 | 0x28d9 : 0x10028d9, | |
1873 | 0x28da : 0x10028da, | |
1874 | 0x28db : 0x10028db, | |
1875 | 0x28dc : 0x10028dc, | |
1876 | 0x28dd : 0x10028dd, | |
1877 | 0x28de : 0x10028de, | |
1878 | 0x28df : 0x10028df, | |
1879 | 0x28e0 : 0x10028e0, | |
1880 | 0x28e1 : 0x10028e1, | |
1881 | 0x28e2 : 0x10028e2, | |
53fc7392 | 1882 | 0x28e3 : 0x10028e3, |
c96f9003 JM |
1883 | 0x28e4 : 0x10028e4, |
1884 | 0x28e5 : 0x10028e5, | |
1885 | 0x28e6 : 0x10028e6, | |
1886 | 0x28e7 : 0x10028e7, | |
1887 | 0x28e8 : 0x10028e8, | |
1888 | 0x28e9 : 0x10028e9, | |
1889 | 0x28ea : 0x10028ea, | |
1890 | 0x28eb : 0x10028eb, | |
1891 | 0x28ec : 0x10028ec, | |
1892 | 0x28ed : 0x10028ed, | |
1893 | 0x28ee : 0x10028ee, | |
1894 | 0x28ef : 0x10028ef, | |
1895 | 0x28f0 : 0x10028f0, | |
1896 | 0x28f1 : 0x10028f1, | |
1897 | 0x28f2 : 0x10028f2, | |
1898 | 0x28f3 : 0x10028f3, | |
1899 | 0x28f4 : 0x10028f4, | |
1900 | 0x28f5 : 0x10028f5, | |
1901 | 0x28f6 : 0x10028f6, | |
1902 | 0x28f7 : 0x10028f7, | |
1903 | 0x28f8 : 0x10028f8, | |
1904 | 0x28f9 : 0x10028f9, | |
1905 | 0x28fa : 0x10028fa, | |
1906 | 0x28fb : 0x10028fb, | |
1907 | 0x28fc : 0x10028fc, | |
1908 | 0x28fd : 0x10028fd, | |
1909 | 0x28fe : 0x10028fe, | |
d890e864 | 1910 | 0x28ff : 0x10028ff |
53fc7392 | 1911 | }; |