diff --git a/src/Makefile_Ecore_Win32.am b/src/Makefile_Ecore_Win32.am index d1944a8855..2f5dc6fb3d 100644 --- a/src/Makefile_Ecore_Win32.am +++ b/src/Makefile_Ecore_Win32.am @@ -22,7 +22,8 @@ lib/ecore_win32/ecore_win32_private.h \ lib/ecore_win32/ecore_win32_dnd_enumformatetc.h \ lib/ecore_win32/ecore_win32_dnd_data_object.h \ lib/ecore_win32/ecore_win32_dnd_drop_source.h \ -lib/ecore_win32/ecore_win32_dnd_drop_target.h +lib/ecore_win32/ecore_win32_dnd_drop_target.h \ +ecore_win32_keysym_table.h lib_ecore_win32_libecore_win32_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl @ECORE_WIN32_CFLAGS@ lib_ecore_win32_libecore_win32_la_LIBADD = @ECORE_WIN32_LIBS@ diff --git a/src/lib/ecore_win32/Ecore_Win32.h b/src/lib/ecore_win32/Ecore_Win32.h index 4520467408..363fddb690 100644 --- a/src/lib/ecore_win32/Ecore_Win32.h +++ b/src/lib/ecore_win32/Ecore_Win32.h @@ -223,6 +223,7 @@ struct _Ecore_Win32_Event_Mouse_In int x; /**< The x coordinate where the mouse leaved */ int y; /**< The y coordinate where the mouse entered */ unsigned long timestamp; /**< The time the event occurred */ + unsigned int modifiers; /**< The keyboard modifiers */ }; /** @@ -235,6 +236,7 @@ struct _Ecore_Win32_Event_Mouse_Out int x; /**< The x coordinate where the mouse leaved */ int y; /**< The y coordinate where the mouse leaved */ unsigned long timestamp; /**< The time the event occurred */ + unsigned int modifiers; /**< The keyboard modifiers */ }; /** diff --git a/src/lib/ecore_win32/ecore_win32.c b/src/lib/ecore_win32/ecore_win32.c index 3ee79d6ed7..4741a672ac 100644 --- a/src/lib/ecore_win32/ecore_win32.c +++ b/src/lib/ecore_win32/ecore_win32.c @@ -76,76 +76,20 @@ _ecore_win32_window_procedure(HWND window, coord = GetMessagePos(); data->x = GET_X_LPARAM(coord); data->y = GET_Y_LPARAM(coord); - data->discard_ctrl = EINA_FALSE; switch (data->message) { /* Keyboard input notifications */ case WM_KEYDOWN: case WM_SYSKEYDOWN: - if ((data->message == WM_KEYDOWN) && - (data->window_param == VK_CONTROL) && - ((HIWORD(data->data_param) & KF_EXTENDED) == 0)) - { - /* Ctrl left key is pressed */ - BOOL res; - MSG next_msg; - - /* - * we check if the next message - * - is a WM_KEYDOWN - * - has the same timestamp than the Ctrl one - * - is the key press of the right Alt key - */ - res = PeekMessage(&next_msg, data->window, - WM_KEYDOWN, WM_KEYDOWN, - PM_NOREMOVE); - if (res && - (next_msg.wParam == VK_MENU) && - (next_msg.time == data->timestamp) && - (HIWORD(next_msg.lParam) & KF_EXTENDED)) - { - INF("discard left Ctrl key press (sent by AltGr key press)"); - data->discard_ctrl = EINA_TRUE; - } - } - _ecore_win32_event_handle_key_press(data, 1); - return 0; - case WM_CHAR: - case WM_SYSCHAR: - INF("char message"); - _ecore_win32_event_handle_key_press(data, 0); + INF("key down message"); + _ecore_win32_event_handle_key_press(data); return 0; + /* case WM_CHAR: */ + /* case WM_SYSCHAR: */ case WM_KEYUP: case WM_SYSKEYUP: - INF("keyup message"); - if ((data->window_param == VK_CONTROL) && - ((HIWORD(data->data_param) & KF_EXTENDED) == 0)) - { - /* Ctrl left key is pressed */ - BOOL res; - MSG next_msg; - - /* - * we check if the next message - * - is a WM_KEYUP or WM_SYSKEYUP - * - has the same timestamp than the Ctrl one - * - is the key release of the right Alt key - */ - res = PeekMessage(&next_msg, data->window, - WM_KEYUP, WM_SYSKEYUP, - PM_NOREMOVE); - if (res && - ((next_msg.message == WM_KEYUP) || - (next_msg.message == WM_SYSKEYUP)) && - (next_msg.wParam == VK_MENU) && - (next_msg.time == data->timestamp) && - (HIWORD(next_msg.lParam) & KF_EXTENDED)) - { - INF("discard left Ctrl key release (sent by AltGr key release)"); - data->discard_ctrl = EINA_TRUE; - } - } + INF("key up message"); _ecore_win32_event_handle_key_release(data); return 0; case WM_SETFOCUS: diff --git a/src/lib/ecore_win32/ecore_win32_event.c b/src/lib/ecore_win32/ecore_win32_event.c index fc285995fc..d5cccf78fe 100644 --- a/src/lib/ecore_win32/ecore_win32_event.c +++ b/src/lib/ecore_win32/ecore_win32_event.c @@ -3,7 +3,6 @@ #endif #include -#include /* for printf */ #define WIN32_LEAN_AND_MEAN #include @@ -16,7 +15,12 @@ #include "Ecore_Win32.h" #include "ecore_win32_private.h" +#include "ecore_win32_keysym_table.h" +#define ECORE_WIN32_VK_IS_EXTENDED(p) ((HIWORD(p) & KF_EXTENDED) == KF_EXTENDED) +#define ECORE_WIN32_VK_IS_REPEATED(p) ((HIWORD(p) & KF_REPEAT) == KF_REPEAT) +#define ECORE_WIN32_VK_IS_PRESSED(vk) ((GetKeyState(vk) & KF_UP) == KF_UP) +#define ECORE_WIN32_VK_IS_TOGGLED(vk) ((GetKeyState(vk) & 0x0001) == 0x0001) typedef enum { @@ -28,9 +32,6 @@ typedef enum ECORE_WIN32_KEY_MASK_RMENU = 1 << 5 } Ecore_Win32_Key_Mask; -/***** Private declarations *****/ - - static Ecore_Win32_Window *_ecore_win32_mouse_down_last_window = NULL; static Ecore_Win32_Window *_ecore_win32_mouse_down_last_last_window = NULL; static long _ecore_win32_mouse_down_last_time = 0 ; @@ -38,65 +39,1334 @@ static long _ecore_win32_mouse_down_last_last_time = 0 ; static int _ecore_win32_mouse_down_did_triple = 0; static int _ecore_win32_mouse_up_count = 0; static Ecore_Win32_Key_Mask _ecore_win32_key_mask = 0; +static Eina_Bool _ecore_win32_ctrl_fake = EINA_FALSE; -static void _ecore_win32_event_free_key_down(void *data, - void *ev); +static unsigned int +_ecore_win32_modifiers_get(void) +{ + unsigned int modifiers = 0; -static void _ecore_win32_event_free_key_up(void *data, - void *ev); + if (ECORE_WIN32_VK_IS_PRESSED(VK_SHIFT)) + modifiers |= ECORE_EVENT_MODIFIER_SHIFT; -static int _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg, - Eina_Bool is_down, - char **keyname, - char **keysymbol, - char **keycompose, - unsigned int *modifiers); + if (_ecore_win32_ctrl_fake && !ECORE_WIN32_VK_IS_PRESSED(VK_RMENU)) + { + _ecore_win32_ctrl_fake = EINA_FALSE; + } + else + { + if (ECORE_WIN32_VK_IS_PRESSED(VK_CONTROL)) + modifiers |= ECORE_EVENT_MODIFIER_CTRL; + } -static int _ecore_win32_event_char_get(int key, - char **keyname, - char **keysymbol, - char **keycompose, - unsigned int *modifiers); + if (ECORE_WIN32_VK_IS_PRESSED(VK_LMENU)) + modifiers |= ECORE_EVENT_MODIFIER_ALT; + if (ECORE_WIN32_VK_IS_PRESSED(VK_RMENU)) + modifiers |= ECORE_EVENT_MODIFIER_ALTGR; + + if (ECORE_WIN32_VK_IS_PRESSED(VK_LWIN)) + modifiers |= ECORE_EVENT_MODIFIER_WIN; + + if (ECORE_WIN32_VK_IS_PRESSED(VK_RWIN)) + modifiers |= ECORE_EVENT_MODIFIER_WIN; + + if (ECORE_WIN32_VK_IS_TOGGLED(VK_SCROLL)) + modifiers |= ECORE_EVENT_LOCK_SCROLL; + + if (ECORE_WIN32_VK_IS_TOGGLED(VK_NUMLOCK)) + modifiers |= ECORE_EVENT_LOCK_NUM; + + if (ECORE_WIN32_VK_IS_TOGGLED(VK_CAPITAL)) + modifiers |= ECORE_EVENT_LOCK_CAPS; + + return modifiers; +} + +static void +_ecore_win32_modifiers_alt_save(BYTE *kbd_state, unsigned short *modifiers) +{ + if (kbd_state[VK_LMENU] & 128) + { + *modifiers |= 1 << 0; + kbd_state[VK_LMENU] &= ~128; + } + if (kbd_state[VK_RMENU] & 128) + { + *modifiers |= 1 << 1; + kbd_state[VK_RMENU] &= ~128; + } + if (kbd_state[VK_MENU] & 128) + { + *modifiers |= 1 << 2; + kbd_state[VK_MENU] &= ~128; + } +} + +static void +_ecore_win32_modifiers_alt_restore(BYTE *kbd_state, unsigned short modifiers) +{ + if ((modifiers & (1 << 0)) == (1 << 0)) + kbd_state[VK_LMENU] |= 128; + if ((modifiers & (1 << 1)) == (1 << 1)) + kbd_state[VK_RMENU] |= 128; + if ((modifiers & (1 << 2)) == (1 << 2)) + kbd_state[VK_MENU] |= 128; +} + +static void +_ecore_win32_modifiers_ctrl_save(BYTE *kbd_state, unsigned short *modifiers) +{ + if (kbd_state[VK_LCONTROL] & 128) + { + *modifiers |= 1 << 3; + kbd_state[VK_LCONTROL] &= ~128; + } + if (kbd_state[VK_RCONTROL] & 128) + { + *modifiers |= 1 << 4; + kbd_state[VK_RCONTROL] &= ~128; + } + if (kbd_state[VK_CONTROL] & 128) + { + *modifiers |= 1 << 5; + kbd_state[VK_CONTROL] &= ~128; + } +} + +static void +_ecore_win32_modifiers_ctrl_restore(BYTE *kbd_state, unsigned short modifiers) +{ + if ((modifiers & (1 << 3)) == (1 << 3)) + kbd_state[VK_LCONTROL] |= 128; + if ((modifiers & (1 << 4)) == (1 << 4)) + kbd_state[VK_RCONTROL] |= 128; + if ((modifiers & (1 << 5)) == (1 << 5)) + kbd_state[VK_CONTROL] |= 128; +} + +static void +_ecore_win32_modifiers_shift_save(BYTE *kbd_state, unsigned short *modifiers) +{ + if (kbd_state[VK_LSHIFT] & 128) + { + *modifiers |= 1 << 6; + kbd_state[VK_LSHIFT] &= ~128; + } + if (kbd_state[VK_RSHIFT] & 128) + { + *modifiers |= 1 << 7; + kbd_state[VK_RSHIFT] &= ~128; + } + if (kbd_state[VK_SHIFT] & 128) + { + *modifiers |= 1 << 8; + kbd_state[VK_SHIFT] &= ~128; + } +} + +static void +_ecore_win32_modifiers_shift_restore(BYTE *kbd_state, unsigned short modifiers) +{ + if ((modifiers & (1 << 6)) == (1 << 6)) + kbd_state[VK_LSHIFT] |= 128; + if ((modifiers & (1 << 7)) == (1 << 7)) + kbd_state[VK_RSHIFT] |= 128; + if ((modifiers & (1 << 8)) == (1 << 8)) + kbd_state[VK_SHIFT] |= 128; +} + +static void +_ecore_win32_modifiers_win_save(BYTE *kbd_state, unsigned short *modifiers) +{ + if (kbd_state[VK_LWIN] & 128) + { + *modifiers |= 1 << 9; + kbd_state[VK_LWIN] &= ~128; + } + if (kbd_state[VK_RWIN] & 128) + { + *modifiers |= 1 << 10; + kbd_state[VK_RWIN] &= ~128; + } +} + +static void +_ecore_win32_modifiers_win_restore(BYTE *kbd_state, unsigned short modifiers) +{ + if ((modifiers & (1 << 9)) == (1 << 9)) + kbd_state[VK_LWIN] |= 128; + if ((modifiers & (1 << 10)) == (1 << 10)) + kbd_state[VK_RWIN] |= 128; +} + +static uint32_t +_ecore_win32_keysym_offset_get(uint32_t keysym) +{ + uint32_t start; + uint32_t end; + + /* + * statistically, there are more chance to press a key with + * keysym between 0 and 255 + */ + if (keysym < 256) + { + start = 0; + end = 255; + } + else + { + start = 256; + end = sizeof(_ecore_win32_name_to_keysym) / sizeof(ecore_win32_name_keysym) - 1; + } + + do { + uint32_t m = (start + end) / 2; + + if (_ecore_win32_name_to_keysym[m].keysym == keysym) + return _ecore_win32_name_to_keysym[m].offset; + else + { + if (keysym > _ecore_win32_name_to_keysym[m].keysym) + start = m + 1; + else + end = m - 1; + } + } while (start <= end); + + return 0xffffffff; +} + +static const char * +_ecore_win32_diacritic_get(WCHAR wc) +{ + switch (wc) + { + case 0x0060: /* grave accent */ + return "dead_grave"; + case 0x00b4: /* acute accent */ + return "dead_acute"; + case 0x005e: /* circumflex_accent */ + return "dead_circumflex"; + case 0x007e: /* tilde_accent */ + return "dead_tilde"; + case 0x00a8: /* diaeresis_accent */ + return "dead_diaeresis"; + /* + * FIXME: add more diacritics + * needs more langages and keyboards + * see http://en.wikipedia.org/wiki/Diacritic + */ + } + + return NULL; +} + +static Ecore_Event_Key * +_ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg, + Eina_Bool is_down) +{ + Ecore_Event_Key *e; + char string[2] = { 0, 0 }; + const char *keyname = NULL; + const char *key = NULL; + const char *compose = NULL; + + switch (msg->window_param) + { + /* VK_LBUTTON: 0x01 : not launched by message */ + /* VK_RBUTTON: 0x02 : not launched by message */ + /* VK_CANCEL: 0x03 : FIXME: what to do ? */ + /* VK_MBUTTON: 0x04 : not launched by message */ + /* VK_XBUTTON1: 0x05 : not launched by message */ + /* VK_XBUTTON2: 0x06 : not launched by message */ + + /* 0x07 : undefined */ + + case VK_BACK: /* 0x08 */ + keyname = "Backspace"; + key = "Backspace"; + compose = "\b"; + break; + case VK_TAB: /* 0x09 */ + keyname = "Tab"; + key = "Tab"; + compose = "\t"; + break; + + /* 0x0A - 0x0B : reserved */ + + case VK_CLEAR: /* 0x0C */ + keyname = "KP_Begin"; + key = "KP_Begin"; + compose = NULL; + break; + case VK_RETURN: /* 0x0D */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "KP_Enter"; + key = "KP_Enter"; + } + else + { + keyname = "Return"; + key = "Return"; + } + compose = "\n"; + break; + + /* 0x0E - 0x0F : undefined */ + + case VK_SHIFT: /* 0x10 */ + { + if (is_down) + { + if (ECORE_WIN32_VK_IS_REPEATED(msg->data_param)) + return NULL; + + if (ECORE_WIN32_VK_IS_PRESSED(VK_LSHIFT)) + { + _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_LSHIFT; + keyname = "Shift_L"; + key = "Shift_L"; + compose = NULL; + } + if (ECORE_WIN32_VK_IS_PRESSED(VK_RSHIFT)) + { + _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_RSHIFT; + keyname = "Shift_R"; + key = "Shift_R"; + compose = NULL; + } + } + else /* is_up */ + { + if (!ECORE_WIN32_VK_IS_PRESSED(VK_LSHIFT) && + (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_LSHIFT)) + { + keyname = "Shift_L"; + key = "Shift_L"; + compose = NULL; + _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_LSHIFT; + } + if (!ECORE_WIN32_VK_IS_PRESSED(VK_RSHIFT) && + (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_RSHIFT)) + { + keyname = "Shift_R"; + key = "Shift_R"; + compose = NULL; + _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RSHIFT; + } + } + break; + } + case VK_CONTROL: /* 0x11 */ + { + if (is_down) + { + /* We check if Ctrl has be thrown because of AltGr being stroke */ + if (!ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + BOOL res; + MSG next_msg; + + /* + * we check if the next message + * - is a WM_KEYDOWN + * - has the same timestamp than the Ctrl one + * - is the key press of the Alt key + */ + res = PeekMessage(&next_msg, msg->window, + WM_KEYDOWN, WM_KEYDOWN, + PM_NOREMOVE); + if (res && + (next_msg.wParam == VK_MENU) && + (next_msg.time == msg->timestamp) && + ECORE_WIN32_VK_IS_EXTENDED(next_msg.lParam)) + { + INF("discard left Ctrl key press (sent by AltGr key press)"); + _ecore_win32_ctrl_fake = EINA_TRUE; + return NULL; + } + } + + if (ECORE_WIN32_VK_IS_REPEATED(msg->data_param)) + return NULL; + + if (ECORE_WIN32_VK_IS_PRESSED(VK_LCONTROL)) + { + _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_LCONTROL; + keyname = "Control_L"; + key = "Control_L"; + compose = NULL; + break; + } + if (ECORE_WIN32_VK_IS_PRESSED(VK_RCONTROL)) + { + _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_RCONTROL; + keyname = "Control_R"; + key = "Control_R"; + compose = NULL; + break; + } + } + else /* is_up */ + { + /* We check if Ctrl has be thrown because of AltGr being stroke */ + if (!ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + BOOL res; + MSG next_msg; + + /* + * we check if the next message + * - is a WM_KEYUP or WM_SYSKEYUP + * - has the same timestamp than the Ctrl one + * - is the key press of the Alt key + */ + res = PeekMessage(&next_msg, msg->window, + WM_KEYUP, WM_SYSKEYUP, + PM_NOREMOVE); + if (res && + ((next_msg.message == WM_KEYUP) || + (next_msg.message == WM_SYSKEYUP)) && + (next_msg.wParam == VK_MENU) && + (next_msg.time == msg->timestamp) && + ECORE_WIN32_VK_IS_EXTENDED(next_msg.lParam)) + { + INF("discard left Ctrl key press (sent by AltGr key press)"); + _ecore_win32_ctrl_fake = EINA_TRUE; + return NULL; + } + } + if (!ECORE_WIN32_VK_IS_PRESSED(VK_LCONTROL) && + (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_LCONTROL)) + { + keyname = "Control_L"; + key = "Control_L"; + compose = NULL; + _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_LCONTROL; + break; + } + if (!ECORE_WIN32_VK_IS_PRESSED(VK_LCONTROL) && + (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_RCONTROL)) + { + keyname = "Control_R"; + key = "Control_R"; + compose = NULL; + _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RCONTROL; + break; + } + } + break; + } + case VK_MENU: /* 0x12 */ + { + if (is_down) + { + if (ECORE_WIN32_VK_IS_REPEATED(msg->data_param)) + return NULL; + + if (ECORE_WIN32_VK_IS_PRESSED(VK_LMENU)) + { + _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_LMENU; + keyname = "Alt_L"; + key = "Alt_L"; + compose = NULL; + } + if (ECORE_WIN32_VK_IS_PRESSED(VK_RMENU)) + { + _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_RMENU; + keyname = "ISO_Level3_Shift"; + key = "ISO_Level3_Shift"; + compose = NULL; + } + } + else /* is_up */ + { + if (!ECORE_WIN32_VK_IS_PRESSED(VK_LMENU) && + (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_LMENU)) + { + keyname = "Alt_L"; + key = "Alt_L"; + compose = NULL; + _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_LMENU; + } + if (!ECORE_WIN32_VK_IS_PRESSED(VK_RMENU) && + (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_RMENU)) + { + keyname = "ISO_Level3_Shift"; + key = "ISO_Level3_Shift"; + compose = NULL; + _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RMENU; + } + } + break; + } + case VK_PAUSE: /* 0x13 */ + keyname = "Pause"; + key = "Pause"; + compose = NULL; + break; + case VK_CAPITAL: /* 0x14 */ + keyname = "Caps_Lock"; + key = "Caps_Lock"; + compose = NULL; + break; + + /* VK_KANA: 0x15 : IME Kana mode */ + /* VK_HANGUEL: 0x15 : IME Hanguel mode (maintained for compatibility; use VK_HANGUL) */ + /* VK_HANGUL: 0x15 : IME Hangul mode */ + + /* 0x16 : undefined */ + + /* VK_JUNJA: 0x17 : IME Junja mode */ + /* VK_FINAL: 0x18 : IME final mode */ + /* VK_HANJA: 0x19 : IME Hanja mode */ + /* VK_KANJI: 0x19 : IME Kanji mode */ + + /* 0x1A : undefined */ + + case VK_ESCAPE: /* 0x1B */ + keyname = "Escape"; + key = "Escape"; + string[0] = 0x1b; + compose = string; + break; + + /* VK_CONVERT: 0x1C : IME convert */ + /* VK_NONCONVERT: 0x1D : IME nonconvert */ + /* VK_ACCEPT: 0x1E : IME accept */ + /* VK_MODECHANGE: 0x1F : IME mode change request */ + + case VK_SPACE: /* 0x20 */ + keyname = "space"; + key = "space"; + compose = " "; + break; + + case VK_PRIOR: /* 0x21 */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "Prior"; + key = "Prior"; + compose = NULL; + } + else + { + keyname = "KP_Prior"; + key = "KP_Prior"; + compose = NULL; + } + break; + case VK_NEXT: /* 0x22 */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "Next"; + key = "Next"; + compose = NULL; + } + else + { + keyname = "KP_Next"; + key = "KP_Next"; + compose = NULL; + } + break; + case VK_END: /* 0x23 */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "End"; + key = "End"; + compose = NULL; + } + else + { + keyname = "KP_End"; + key = "KP_End"; + compose = NULL; + } + break; + case VK_HOME: /* 0x24 */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "Home"; + key = "Home"; + compose = NULL; + } + else + { + keyname = "KP_HOME"; + key = "KP_HOME"; + compose = NULL; + } + break; + case VK_LEFT: /* 0x25 */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "Left"; + key = "Left"; + compose = NULL; + } + else + { + keyname = "KP_Left"; + key = "KP_Left"; + compose = NULL; + } + break; + case VK_UP: /* 0x26 */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "Up"; + key = "Up"; + compose = NULL; + } + else + { + keyname = "KP_Up"; + key = "KP_Up"; + compose = NULL; + } + break; + case VK_RIGHT: /* 0x27 */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "Right"; + key = "Right"; + compose = NULL; + } + else + { + keyname = "KP_Right"; + key = "KP_Right"; + compose = NULL; + } + break; + case VK_DOWN: /* 0x28 */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "Down"; + key = "Down"; + compose = NULL; + } + else + { + keyname = "KP_Down"; + key = "KP_Down"; + compose = NULL; + } + break; + + /* VK_SELECT: 0x29 : SELECT key (for a menu ? on rare keyboards ?) */ + /* VK_PRINT: 0x2A : PRINT key on old IBM PC XT and AT, maybe also on Nokia keyboards */ + /* VK_EXECUTE: 0x2B : EXECUTE key (for a menu ? on rare keyboards ?) */ + /* VK_SNAPSHOT: 0x2C : EXECUTE key (for a menu ? on rare keyboards ?) */ + + case VK_INSERT: /* 0x2D */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "Insert"; + key = "Insert"; + compose = NULL; + } + else + { + keyname = "KP_Insert"; + key = "KP_Insert"; + compose = NULL; + } + break; + case VK_DELETE: /* 0x2E */ + if (ECORE_WIN32_VK_IS_EXTENDED(msg->data_param)) + { + keyname = "Delete"; + key = "Delete"; + string[0] = 0x7f; + compose = string; + } + else + { + keyname = "KP_Delete"; + key = "KP_Delete"; + compose = NULL; + } + break; + + /* VK_HELP: 0x2F : HELP key (for a menu ? on rare keyboards ?) */ + + /* case 0x30: 0 key (default case) */ + /* case 0x31: 1 key (default case) */ + /* case 0x32: 2 key (default case) */ + /* case 0x33: 3 key (default case) */ + /* case 0x34: 4 key (default case) */ + /* case 0x35: 5 key (default case) */ + /* case 0x36: 6 key (default case) */ + /* case 0x37: 7 key (default case) */ + /* case 0x38: 8 key (default case) */ + /* case 0x39: 9 key (default case) */ + + /* 0x3A - 0x40 : undefined */ + + /* case 0x41: A key (default case) */ + /* case 0x42: B key (default case) */ + /* case 0x43: C key (default case) */ + /* case 0x44: D key (default case) */ + /* case 0x45: E key (default case) */ + /* case 0x46: F key (default case) */ + /* case 0x47: G key (default case) */ + /* case 0x48: H key (default case) */ + /* case 0x49: I key (default case) */ + /* case 0x4a: J key (default case) */ + /* case 0x4b: K key (default case) */ + /* case 0x4c: L key (default case) */ + /* case 0x4d: M key (default case) */ + /* case 0x4e: N key (default case) */ + /* case 0x4f: O key (default case) */ + /* case 0x50: P key (default case) */ + /* case 0x51: Q key (default case) */ + /* case 0x52: R key (default case) */ + /* case 0x53: S key (default case) */ + /* case 0x54: T key (default case) */ + /* case 0x55: U key (default case) */ + /* case 0x56: V key (default case) */ + /* case 0x57: W key (default case) */ + /* case 0x58: X key (default case) */ + /* case 0x59: Y key (default case) */ + /* case 0x5a: Z key (default case) */ + + case VK_LWIN: /* 0x5B */ + { + if (is_down) + { + if (ECORE_WIN32_VK_IS_REPEATED(msg->data_param)) + return NULL; + + keyname = "Super_L"; + key = "Super_L"; + compose = NULL; + } + else /* is_up */ + { + keyname = "Super_L"; + key = "Super_L"; + compose = NULL; + } + break; + } + case VK_RWIN: /* 0x5C */ + { + if (is_down) + { + if (ECORE_WIN32_VK_IS_REPEATED(msg->data_param)) + return NULL; + + keyname = "Super_R"; + key = "Super_R"; + compose = NULL; + } + else /* is_up */ + { + keyname = "Super_R"; + key = "Super_R"; + compose = NULL; + } + break; + } + case VK_APPS: /* 0x5D Menu key on some keyboards, or via the 'function' modifier */ + keyname = "Menu"; + key = "Menu"; + compose = NULL; + break; + + /* 0x5E : reserved */ + + /* case VK_SLEEP: 0x5F SLEEP key (not hookable, the computer goes to sleep immediatly...) */ + + case VK_NUMPAD0: /* 0x60 */ + keyname = "KP_Insert"; + key = "KP_0"; + compose = "0"; + break; + case VK_NUMPAD1: /* 0x61 */ + keyname = "KP_End"; + key = "KP_1"; + compose = "1"; + break; + case VK_NUMPAD2: /* 0x62 */ + keyname = "KP_Down"; + key = "KP_2"; + compose = "2"; + break; + case VK_NUMPAD3: /* 0x63 */ + keyname = "KP_Next"; + key = "KP_3"; + compose = "3"; + break; + case VK_NUMPAD4: /* 0x64 */ + keyname = "KP_Left"; + key = "KP_4"; + compose = "4"; + break; + case VK_NUMPAD5: /* 0x65 */ + keyname = "KP_Begin"; + key = "KP_5"; + compose = "5"; + break; + case VK_NUMPAD6: /* 0x66 */ + keyname = "KP_Right"; + key = "KP_6"; + compose = "6"; + break; + case VK_NUMPAD7: /* 0x67 */ + keyname = "KP_HOME"; + key = "KP_7"; + compose = "7"; + break; + case VK_NUMPAD8: /* 0x68 */ + keyname = "KP_Up"; + key = "KP_8"; + compose = "8"; + break; + case VK_NUMPAD9: /* 0x69 */ + keyname = "KP_Prior"; + key = "KP_9"; + compose = "9"; + break; + case VK_MULTIPLY: /* 0x6A */ + keyname = "KP_Multiply"; + key = "KP_Multiply"; + compose = "*"; + break; + case VK_ADD: /* 0x6A */ + keyname = "KP_Add"; + key = "KP_Add"; + compose = "+"; + break; + /* VK_SEPARATOR : 0x6C : FIXME depending on layout : */ + /* . or , for the separator in a floating point number*/ + case VK_SUBTRACT: /* 0x6D */ + keyname = "KP_Subtract"; + key = "KP_Subtract"; + compose = "-"; + break; + case VK_DECIMAL: /* 0x6E */ + /* '.' key with num lock on */ + keyname = "KP_Delete"; + key = "KP_Decimal"; + /* Value of 'compose' may depend on the layout */ + compose = "."; + break; + case VK_DIVIDE: /* 0x6F */ + keyname = "KP_Divide"; + key = "KP_Divide"; + compose = "/"; + break; + case VK_F1: /* 0x70 */ + keyname = "F1"; + key = "F1"; + compose = NULL; + break; + case VK_F2: /* 0x71 */ + keyname = "F2"; + key = "F2"; + compose = NULL; + break; + case VK_F3: /* 0x72 */ + keyname = "F3"; + key = "F3"; + compose = NULL; + break; + case VK_F4: /* 0x73 */ + keyname = "F4"; + key = "F4"; + compose = NULL; + break; + case VK_F5: /* 0x74 */ + keyname = "F5"; + key = "F5"; + compose = NULL; + break; + case VK_F6: /* 0x75 */ + keyname = "F6"; + key = "F6"; + compose = NULL; + break; + case VK_F7: /* 0x76 */ + keyname = "F7"; + key = "F7"; + compose = NULL; + break; + case VK_F8: /* 0x77 */ + keyname = "F8"; + key = "F8"; + compose = NULL; + break; + case VK_F9: /* 0x78 */ + keyname = "F9"; + key = "F9"; + compose = NULL; + break; + case VK_F10: /* 0x79 */ + keyname = "F10"; + key = "F10"; + compose = NULL; + break; + case VK_F11: /* 0x7A */ + keyname = "F11"; + key = "F11"; + compose = NULL; + break; + case VK_F12: /* 0x7B */ + keyname = "F12"; + key = "F12"; + compose = NULL; + break; + case VK_F13: /* 0x7C */ + keyname = "F13"; + key = "F13"; + compose = NULL; + break; + case VK_F14: /* 0x7D */ + keyname = "F14"; + key = "F14"; + compose = NULL; + break; + case VK_F15: /* 0x7E */ + keyname = "F15"; + key = "F15"; + compose = NULL; + break; + case VK_F16: /* 0x7F */ + keyname = "F16"; + key = "F16"; + compose = NULL; + break; + case VK_F17: /* 0x80 */ + keyname = "F17"; + key = "F17"; + compose = NULL; + break; + case VK_F18: /* 0x81 */ + keyname = "F18"; + key = "F18"; + compose = NULL; + break; + case VK_F19: /* 0x82 */ + keyname = "F19"; + key = "F19"; + compose = NULL; + break; + case VK_F20: /* 0x83 */ + keyname = "F20"; + key = "F20"; + compose = NULL; + break; + case VK_F21: /* 0x84 */ + keyname = "F21"; + key = "F21"; + compose = NULL; + break; + case VK_F22: /* 0x85 */ + keyname = "F22"; + key = "F22"; + compose = NULL; + break; + case VK_F23: /* 0x86 */ + keyname = "F23"; + key = "F23"; + compose = NULL; + break; + case VK_F24: /* 0x87 */ + keyname = "F24"; + key = "F24"; + compose = NULL; + break; + + /* 0x88 - 0x8F : unassigned */ + + case VK_NUMLOCK: /* 0x90 */ + keyname = "Num_Lock"; + key = "Num_Lock"; + compose = NULL; + break; + case VK_SCROLL: /* 0x91 */ + keyname = "Scroll_Lock"; + key = "Scroll_Lock"; + compose = NULL; + break; + + /* 0x92 - 0x96 : OEM specific */ + + /* 0x97 - 0x9F : unassigned */ + + /* VK_LSHIT: 0xA0 : not launched by message */ + /* VK_RSHIT: 0xA1 : not launched by message */ + /* VK_LCONTROL: 0xA2 : not launched by message */ + /* VK_RCONTROL: 0xA3 : not launched by message */ + /* VK_LMENU: 0xA4 : not launched by message */ + /* VK_RMENU: 0xA5 : not launched by message */ + + case VK_BROWSER_BACK: /* 0xA6 */ + keyname = "XF86Back"; + key = "XF86Back"; + compose = NULL; + break; + case VK_BROWSER_FORWARD: /* 0xA7 */ + keyname = "XF86Forward"; + key = "XF86Forward"; + compose = NULL; + break; + case VK_BROWSER_REFRESH: /* 0xA8 */ + keyname = "XF86Forward"; + key = "XF86Forward"; + compose = NULL; + break; + case VK_BROWSER_STOP: /* 0xA9 */ + keyname = "XF86Stop"; + key = "XF86Stop"; + compose = NULL; + break; + case VK_BROWSER_SEARCH: /* 0xAA */ + keyname = "XF86Search"; + key = "XF86Search"; + compose = NULL; + break; + case VK_BROWSER_FAVORITES: /* 0xAB */ + keyname = "XF86Favorites"; + key = "XF86Favorites"; + compose = NULL; + break; + case VK_BROWSER_HOME: /* 0xAC */ + keyname = "XF86HomePage"; + key = "XF86HomePage"; + compose = NULL; + break; + + case VK_VOLUME_MUTE: /* 0xAD */ + keyname = "XF86AudioMute"; + key = "XF86AudioMute"; + compose = NULL; + break; + case VK_VOLUME_DOWN: /* 0xAE */ + keyname = "XF86AudioLowerVolume"; + key = "XF86AudioLowerVolume"; + compose = NULL; + break; + case VK_VOLUME_UP: /* 0xAF */ + keyname = "XF86AudioRaiseVolume"; + key = "XF86AudioRaiseVolume"; + compose = NULL; + break; + + case VK_MEDIA_NEXT_TRACK: /* 0xB0 */ + keyname = "XF86AudioNext"; + key = "XF86AudioNext"; + compose = NULL; + break; + case VK_MEDIA_PREV_TRACK: /* 0xB1 */ + keyname = "XF86AudioPrev"; + key = "XF86AudioPrev"; + compose = NULL; + break; + case VK_MEDIA_STOP: /* 0xB2 */ + keyname = "XF86AudioStop"; + key = "XF86AudioStop"; + compose = NULL; + break; + case VK_MEDIA_PLAY_PAUSE: /* 0xB3 */ + { + if (ECORE_WIN32_VK_IS_TOGGLED(VK_MEDIA_PLAY_PAUSE)) + { + keyname = "XF86AudioPlay"; + key = "XF86AudioPlay"; + compose = NULL; + } + else + { + keyname = "XF86AudioPause"; + key = "XF86AudioPause"; + compose = NULL; + } + break; + } + case VK_LAUNCH_MAIL: /* 0xB4 */ + keyname = "XF86Mail"; + key = "XF86Mail"; + compose = NULL; + break; + + /* VK_LAUNCH_MEDIA_SELECT: 0xB5 : select Media key */ + /* VK_LAUNCH_APP1: 0xB6 : start application 1 key */ + /* VK_LAUNCH_APP2: 0xB7 : start application 2 key */ + + /* 0xB8 - 0xB9 : reserved */ + + /* case VK_OEM1 : 0xBA : Used for miscellaneous characters; it can vary by keyboard. (default case) */ + /* case VK_PLUS : 0xBB : For any country/region, the '+' key. (default case) */ + /* case VK_COMMA : 0xBC : For any country/region, the ',' key. (default case) */ + /* case VK_MINUS : 0xBD : For any country/region, the '-' key. (default case) */ + /* case VK_PERIOD : 0xBE : For any country/region, the '.' key. (default case) */ + /* case VK_OEM2 : 0xBF : Used for miscellaneous characters; it can vary by keyboard. (default case) */ + /* case VK_OEM3 : 0xC0 : Used for miscellaneous characters; it can vary by keyboard. (default case) */ + + /* 0xC1 - 0xD7 : reserved */ + + /* 0xD8 - 0xDA : unassigned */ + + /* case VK_OEM4 : 0xDB : Used for miscellaneous characters; it can vary by keyboard. (default case) */ + /* case VK_OEM5 : 0xDC : Used for miscellaneous characters; it can vary by keyboard. (default case) */ + /* case VK_OEM6 : 0xDD : Used for miscellaneous characters; it can vary by keyboard. (default case) */ + /* case VK_OEM7 : 0xDE : Used for miscellaneous characters; it can vary by keyboard. (default case) */ + /* case VK_OEM8 : 0xDF : Used for miscellaneous characters; it can vary by keyboard. (default case) */ + + /* 0xE0 : reserved */ + + /* 0xE1 : OEM specific */ + + /* case VK_OEM102 : 0xE2 : Either the angle bracket key or the backslash key on the RT 102-key keyboard. (default case) */ + + /* 0xE3 - 0xE4 : OEM specific */ + + /* case VK_PROCESSKEY : 0xE5 : IME PROCESS key */ + + /* 0xE6 : OEM specific */ + + /* case VK_PACKET : 0xE7 : Used to pass Unicode characters as if they were keystrokes. */ + + /* 0xE8 : unassigned */ + + /* 0xE9 - 0xF5 : OEM specific */ + + /* case VK_ATTN : 0xF6 : Attn key */ + /* case VK_CRSEL : 0xF7 : CrSel key */ + /* case VK_EXSEL : 0xF8 : ExSel key */ + /* case VK_EREOF : 0xF9 : Erase EOF key */ + /* case VK_PLAY : 0xFA : Play key */ + /* case VK_ZOOM : 0xFB : Zoom key */ + + /* case VK_NONAME : 0xFC : reserved */ + + /* case VK_PA1 : 0xFD : PA1 key */ + /* case VK_OEM_CLEAR : 0xFE : Clear key */ + default: + { + BYTE kbd_state[256]; + WCHAR buf[4]; + uint32_t offset; + int res; + unsigned short modifiers_save = 0; + Eina_Bool is_dead_key; + + /*** compose and string field ***/ + + if (!GetKeyboardState(kbd_state)) + return NULL; + + /* + * Keep that trick in case it is necessary + char_value = MapVirtualKey(msg->window_param, MAPVK_VK_TO_CHAR); + _ecore_win32_is_dead_key = (char_value & 0x80000000) == 0x80000000; + */ + res = ToUnicode(msg->window_param, + MapVirtualKey(msg->window_param, MAPVK_VK_TO_CHAR), + kbd_state, buf, 4, 0); + if (res == -1) + { + /* dead key, but managed like normal key */ + } + else if (res == 0) + { + INF("No translatable character found, skipping"); + return NULL; + } + else if (res >= 2) + { + /* + * Most common case : dead key which can not be composed, + * or proper symbol. + * Call ToUnicode again to get something sane. + */ + res = ToUnicode(msg->window_param, + MapVirtualKey(msg->window_param, MAPVK_VK_TO_CHAR), + kbd_state, buf, 4, 0); + if ((res != 1) && (res != -1)) + return NULL; + } + + string[0] = (char)buf[0]; + compose = string; + + /*** key field ***/ + + if (!_ecore_win32_ctrl_fake) + { + /* save modifiers for key */ + modifiers_save = 0; + + /* save Control modifier before getting key value */ + _ecore_win32_modifiers_ctrl_save(kbd_state, &modifiers_save); + + if (!SetKeyboardState(kbd_state)) + return NULL; + } + + is_dead_key = EINA_FALSE; + res = ToUnicode(msg->window_param, + MapVirtualKey(msg->window_param, MAPVK_VK_TO_CHAR), + kbd_state, buf, 4, 0); + if (res == -1) + { + is_dead_key = EINA_TRUE; + } + else if (res == 0) + { + INF("No translatable character found, skipping"); + return NULL; + } + else if (res >= 2) + { + /* + * Most common case : dead key which can not be composed, + * buf[0] is invalid and buf[1] is the dead key. + * Call ToUnicode again to get something sane. + */ + res = ToUnicode(msg->window_param, + MapVirtualKey(msg->window_param, MAPVK_VK_TO_CHAR), + kbd_state, buf, 4, 0); + if (res == -1) + is_dead_key = EINA_TRUE; + if ((res != 1) && (res != -1)) + return NULL; + } + + if (is_dead_key) + key = _ecore_win32_diacritic_get(buf[0]); + else + { + offset = _ecore_win32_keysym_offset_get(buf[0]); + if (offset != 0xffffffff) + key = _ecore_win32_keysym_names + offset; + } + + if (!_ecore_win32_ctrl_fake) + { + /* Restaure Control modifier */ + _ecore_win32_modifiers_ctrl_restore(kbd_state, modifiers_save); + + if (!SetKeyboardState(kbd_state)) + return NULL; + } + + if (!key) + { + WRN("no keysym found for keycode %d\n", string[0]); + return NULL; + } + + /*** keyname field ***/ + + /* save modifiers for keyname */ + modifiers_save = 0; + + _ecore_win32_modifiers_alt_save(kbd_state, &modifiers_save); + _ecore_win32_modifiers_ctrl_save(kbd_state, &modifiers_save); + _ecore_win32_modifiers_shift_save(kbd_state, &modifiers_save); + _ecore_win32_modifiers_win_save(kbd_state, &modifiers_save); + + if (!SetKeyboardState(kbd_state)) + return NULL; + + is_dead_key = EINA_FALSE; + res = ToUnicode(msg->window_param, + MapVirtualKey(msg->window_param, MAPVK_VK_TO_CHAR), + kbd_state, buf, 4, 0); + + if (res == -1) + { + is_dead_key = EINA_TRUE; + } + else if (res == 0) + { + INF("No translatable character found, skipping"); + return NULL; + } + else if (res >= 2) + { + /* + * Most common case : dead key which can not be composed, + * buf[0] is invalid and buf[1] is the dead key. + * Call ToUnicode again to get something sane. + */ + res = ToUnicode(msg->window_param, + MapVirtualKey(msg->window_param, MAPVK_VK_TO_CHAR), + kbd_state, buf, 4, 0); + if (res == -1) + is_dead_key = EINA_TRUE; + if ((res != 1) && (res != -1)) + return NULL; + } + + if (is_dead_key) + keyname = _ecore_win32_diacritic_get(buf[0]); + else + { + offset = _ecore_win32_keysym_offset_get(buf[0]); + if (offset != 0xffffffff) + keyname = _ecore_win32_keysym_names + offset; + } + + /* Restore modifiers */ + _ecore_win32_modifiers_alt_restore(kbd_state, modifiers_save); + _ecore_win32_modifiers_ctrl_restore(kbd_state, modifiers_save); + _ecore_win32_modifiers_shift_restore(kbd_state, modifiers_save); + _ecore_win32_modifiers_win_restore(kbd_state, modifiers_save); + + if (!SetKeyboardState(kbd_state)) + return NULL; + + if (!keyname) + { + WRN("no keysym found for keycode %d\n", string[0]); + return NULL; + } + } + } + + e = (Ecore_Event_Key *)calloc(1, sizeof(Ecore_Event_Key) + + strlen(keyname) + 1 + + strlen(key) + 1 + + (compose ? (strlen(compose) + 1) : 0)); + if (!e) + return NULL; + + e->keyname = (char *)(e + 1); + e->key = e->keyname + strlen(keyname) + 1; + e->compose = NULL; + if (compose) + e->compose = (e->key + strlen(key) + 1); + e->string = e->compose; + + memcpy((char *)e->keyname, keyname, strlen(keyname)); + memcpy((char *)e->key, key, strlen(key)); + if (compose) memcpy((char *)e->compose, compose, strlen(compose)); + + return e; +} /***** Global functions definitions *****/ void -_ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg, - int is_keystroke) +_ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg) { - Ecore_Event_Key *e; + Ecore_Event_Key *e = NULL; INF("key pressed"); - e = (Ecore_Event_Key *)calloc(1, sizeof(Ecore_Event_Key)); - if (!e) return; - - if (is_keystroke) - { - if (!_ecore_win32_event_keystroke_get(msg, - EINA_TRUE, - (char **)&e->keyname, - (char **)&e->key, - (char **)&e->string, - &e->modifiers)) - { - free(e); - return; - } - } - else - { - if (!_ecore_win32_event_char_get(LOWORD(msg->window_param), - (char **)&e->keyname, - (char **)&e->key, - (char **)&e->string, - &e->modifiers)) - { - free(e); - return; - } - } + e = _ecore_win32_event_keystroke_get(msg, EINA_TRUE); + if (!e) + return; e->window = (Ecore_Window)GetWindowLongPtr(msg->window, GWLP_USERDATA); if (!e->window) @@ -104,12 +1374,15 @@ _ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg, free(e); return; } + e->root_window = (Ecore_Window)GetAncestor(msg->window, GA_ROOT); e->event_window = e->window; + e->same_screen = 1; e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); _ecore_win32_event_last_time = e->timestamp; - ecore_event_add(ECORE_EVENT_KEY_DOWN, e, _ecore_win32_event_free_key_down, NULL); + ecore_event_add(ECORE_EVENT_KEY_DOWN, e, NULL, NULL); } void @@ -119,27 +1392,9 @@ _ecore_win32_event_handle_key_release(Ecore_Win32_Callback_Data *msg) INF("key released"); - e = (Ecore_Event_Key *)calloc(1, sizeof(Ecore_Event_Key)); - if (!e) return; - - if (!_ecore_win32_event_keystroke_get(msg, - EINA_FALSE, - (char **)&e->keyname, - (char **)&e->key, - (char **)&e->string, - &e->modifiers)) - { - if (msg->discard_ctrl || - !_ecore_win32_event_char_get(LOWORD(msg->window_param), - (char **)&e->keyname, - (char **)&e->key, - (char **)&e->string, - &e->modifiers)) - { - free(e); - return; - } - } + e = _ecore_win32_event_keystroke_get(msg, EINA_FALSE); + if (!e) + return; e->window = (Ecore_Window)GetWindowLongPtr(msg->window, GWLP_USERDATA); if (!e->window) @@ -147,12 +1402,15 @@ _ecore_win32_event_handle_key_release(Ecore_Win32_Callback_Data *msg) free(e); return; } + e->root_window = (Ecore_Window)GetAncestor(msg->window, GA_ROOT); e->event_window = e->window; + e->same_screen = 1; e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); _ecore_win32_event_last_time = e->timestamp; - ecore_event_add(ECORE_EVENT_KEY_UP, e, _ecore_win32_event_free_key_up, NULL); + ecore_event_add(ECORE_EVENT_KEY_UP, e, NULL, NULL); } void @@ -180,6 +1438,7 @@ _ecore_win32_event_handle_button_press(Ecore_Win32_Callback_Data *msg, e->x = GET_X_LPARAM(msg->data_param); e->y = GET_Y_LPARAM(msg->data_param); e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); _ecore_win32_event_last_time = e->timestamp; _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; @@ -188,75 +1447,77 @@ _ecore_win32_event_handle_button_press(Ecore_Win32_Callback_Data *msg, } else { - { - Ecore_Event_Mouse_Move *e; + { + Ecore_Event_Mouse_Move *e; - e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move)); - if (!e) return; + e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move)); + if (!e) return; - e->window = (Ecore_Window)window; - e->event_window = e->window; - e->x = GET_X_LPARAM(msg->data_param); - e->y = GET_Y_LPARAM(msg->data_param); - e->timestamp = msg->timestamp; + e->window = (Ecore_Window)window; + e->event_window = e->window; + e->x = GET_X_LPARAM(msg->data_param); + e->y = GET_Y_LPARAM(msg->data_param); + e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); - _ecore_win32_event_last_time = e->timestamp; - _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; + _ecore_win32_event_last_time = e->timestamp; + _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; - ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); - } + ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); + } - { - Ecore_Event_Mouse_Button *e; + { + Ecore_Event_Mouse_Button *e; - if (_ecore_win32_mouse_down_did_triple) - { - _ecore_win32_mouse_down_last_window = NULL; - _ecore_win32_mouse_down_last_last_window = NULL; - _ecore_win32_mouse_down_last_time = 0; - _ecore_win32_mouse_down_last_last_time = 0; - } + if (_ecore_win32_mouse_down_did_triple) + { + _ecore_win32_mouse_down_last_window = NULL; + _ecore_win32_mouse_down_last_last_window = NULL; + _ecore_win32_mouse_down_last_time = 0; + _ecore_win32_mouse_down_last_last_time = 0; + } - e = (Ecore_Event_Mouse_Button *)calloc(1, sizeof(Ecore_Event_Mouse_Button)); - if (!e) return; + e = (Ecore_Event_Mouse_Button *)calloc(1, sizeof(Ecore_Event_Mouse_Button)); + if (!e) return; - e->window = (Ecore_Window)window; - e->event_window = e->window; - e->buttons = button; - e->x = GET_X_LPARAM(msg->data_param); - e->y = GET_Y_LPARAM(msg->data_param); - e->timestamp = msg->timestamp; + e->window = (Ecore_Window)window; + e->event_window = e->window; + e->buttons = button; + e->x = GET_X_LPARAM(msg->data_param); + e->y = GET_Y_LPARAM(msg->data_param); + e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); - if (((e->timestamp - _ecore_win32_mouse_down_last_time) <= (unsigned long)(1000 * _ecore_win32_double_click_time)) && - (e->window == (Ecore_Window)_ecore_win32_mouse_down_last_window)) - e->double_click = 1; + if (((e->timestamp - _ecore_win32_mouse_down_last_time) <= (unsigned long)(1000 * _ecore_win32_double_click_time)) && + (e->window == (Ecore_Window)_ecore_win32_mouse_down_last_window)) + e->double_click = 1; - if (((e->timestamp - _ecore_win32_mouse_down_last_last_time) <= (unsigned long)(2 * 1000 * _ecore_win32_double_click_time)) && - (e->window == (Ecore_Window)_ecore_win32_mouse_down_last_window) && - (e->window == (Ecore_Window)_ecore_win32_mouse_down_last_last_window)) - { - e->triple_click = 1; - _ecore_win32_mouse_down_did_triple = 1; - } - else - _ecore_win32_mouse_down_did_triple = 0; + if (((e->timestamp - _ecore_win32_mouse_down_last_last_time) <= (unsigned long)(2 * 1000 * _ecore_win32_double_click_time)) && + (e->window == (Ecore_Window)_ecore_win32_mouse_down_last_window) && + (e->window == (Ecore_Window)_ecore_win32_mouse_down_last_last_window)) + { + e->triple_click = 1; + _ecore_win32_mouse_down_did_triple = 1; + } + else + _ecore_win32_mouse_down_did_triple = 0; - if (!e->double_click && !e->triple_click) - _ecore_win32_mouse_up_count = 0; + if (!e->double_click && !e->triple_click) + _ecore_win32_mouse_up_count = 0; - _ecore_win32_event_last_time = e->timestamp; - _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; + _ecore_win32_event_last_time = e->timestamp; + _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; - if (!_ecore_win32_mouse_down_did_triple) - { - _ecore_win32_mouse_down_last_last_window = _ecore_win32_mouse_down_last_window; - _ecore_win32_mouse_down_last_window = (Ecore_Win32_Window *)e->window; - _ecore_win32_mouse_down_last_last_time = _ecore_win32_mouse_down_last_time; - _ecore_win32_mouse_down_last_time = e->timestamp; - } + if (!_ecore_win32_mouse_down_did_triple) + { + _ecore_win32_mouse_down_last_last_window = _ecore_win32_mouse_down_last_window; + _ecore_win32_mouse_down_last_window = (Ecore_Win32_Window *)e->window; + _ecore_win32_mouse_down_last_last_time = _ecore_win32_mouse_down_last_time; + _ecore_win32_mouse_down_last_time = e->timestamp; + } - ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL); - } + ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL); + } } } @@ -281,6 +1542,7 @@ _ecore_win32_event_handle_button_release(Ecore_Win32_Callback_Data *msg, e->x = GET_X_LPARAM(msg->data_param); e->y = GET_Y_LPARAM(msg->data_param); e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); _ecore_win32_event_last_time = e->timestamp; _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; @@ -300,6 +1562,7 @@ _ecore_win32_event_handle_button_release(Ecore_Win32_Callback_Data *msg, e->x = GET_X_LPARAM(msg->data_param); e->y = GET_Y_LPARAM(msg->data_param); e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); _ecore_win32_mouse_up_count++; @@ -336,6 +1599,7 @@ _ecore_win32_event_handle_motion_notify(Ecore_Win32_Callback_Data *msg) e->x = GET_X_LPARAM(msg->data_param); e->y = GET_Y_LPARAM(msg->data_param); e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); } @@ -343,81 +1607,85 @@ _ecore_win32_event_handle_motion_notify(Ecore_Win32_Callback_Data *msg) void _ecore_win32_event_handle_enter_notify(Ecore_Win32_Callback_Data *msg) { - { - Ecore_Event_Mouse_Move *e; + { + Ecore_Event_Mouse_Move *e; - INF("mouse in"); + INF("mouse in"); - e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move)); - if (!e) return; + e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move)); + if (!e) return; - e->window = (Ecore_Window)GetWindowLongPtr(msg->window, GWLP_USERDATA); - e->event_window = e->window; - e->x = msg->x; - e->y = msg->y; - e->timestamp = msg->timestamp; + e->window = (Ecore_Window)GetWindowLongPtr(msg->window, GWLP_USERDATA); + e->event_window = e->window; + e->x = msg->x; + e->y = msg->y; + e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); - _ecore_win32_event_last_time = e->timestamp; - _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; + _ecore_win32_event_last_time = e->timestamp; + _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; - ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); - } + ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); + } - { - Ecore_Win32_Event_Mouse_In *e; + { + Ecore_Win32_Event_Mouse_In *e; - e = (Ecore_Win32_Event_Mouse_In *)calloc(1, sizeof(Ecore_Win32_Event_Mouse_In)); - if (!e) return; + e = (Ecore_Win32_Event_Mouse_In *)calloc(1, sizeof(Ecore_Win32_Event_Mouse_In)); + if (!e) return; - e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); - e->x = msg->x; - e->y = msg->y; - e->timestamp = msg->timestamp ; + e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); + e->x = msg->x; + e->y = msg->y; + e->timestamp = msg->timestamp ; + e->modifiers = _ecore_win32_modifiers_get(); - _ecore_win32_event_last_time = e->timestamp; + _ecore_win32_event_last_time = e->timestamp; - ecore_event_add(ECORE_WIN32_EVENT_MOUSE_IN, e, NULL, NULL); - } + ecore_event_add(ECORE_WIN32_EVENT_MOUSE_IN, e, NULL, NULL); + } } void _ecore_win32_event_handle_leave_notify(Ecore_Win32_Callback_Data *msg) { - { - Ecore_Event_Mouse_Move *e; + { + Ecore_Event_Mouse_Move *e; - INF("mouse out"); + INF("mouse out"); - e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move)); - if (!e) return; + e = (Ecore_Event_Mouse_Move *)calloc(1, sizeof(Ecore_Event_Mouse_Move)); + if (!e) return; - e->window = (Ecore_Window)GetWindowLongPtr(msg->window, GWLP_USERDATA); - e->event_window = e->window; - e->x = msg->x; - e->y = msg->y; - e->timestamp = msg->timestamp; + e->window = (Ecore_Window)GetWindowLongPtr(msg->window, GWLP_USERDATA); + e->event_window = e->window; + e->x = msg->x; + e->y = msg->y; + e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); - _ecore_win32_event_last_time = e->timestamp; - _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; + _ecore_win32_event_last_time = e->timestamp; + _ecore_win32_event_last_window = (Ecore_Win32_Window *)e->window; - ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); - } + ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); + } - { - Ecore_Win32_Event_Mouse_Out *e; + { + Ecore_Win32_Event_Mouse_Out *e; - e = (Ecore_Win32_Event_Mouse_Out *)calloc(1, sizeof(Ecore_Win32_Event_Mouse_Out)); - if (!e) return; + e = (Ecore_Win32_Event_Mouse_Out *)calloc(1, sizeof(Ecore_Win32_Event_Mouse_Out)); + if (!e) return; - e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); - e->x = msg->x; - e->y = msg->y; - e->timestamp = msg->timestamp; + e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA); + e->x = msg->x; + e->y = msg->y; + e->timestamp = msg->timestamp; + e->modifiers = _ecore_win32_modifiers_get(); - _ecore_win32_event_last_time = e->timestamp; + _ecore_win32_event_last_time = e->timestamp; - ecore_event_add(ECORE_WIN32_EVENT_MOUSE_OUT, e, NULL, NULL); - } + ecore_event_add(ECORE_WIN32_EVENT_MOUSE_OUT, e, NULL, NULL); + } } void @@ -615,693 +1883,3 @@ _ecore_win32_event_handle_delete_request(Ecore_Win32_Callback_Data *msg) ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL); } - - -/***** Private functions definitions *****/ - -static void -_ecore_win32_event_free_key_down(void *data EINA_UNUSED, - void *ev) -{ - Ecore_Event_Key *e; - - e = ev; - if (e->keyname) free((char *)e->keyname); - if (e->key) free((char *)e->key); - if (e->string) free((char *)e->string); - free(e); -} - -static void -_ecore_win32_event_free_key_up(void *data EINA_UNUSED, - void *ev) -{ - Ecore_Event_Key *e; - - e = ev; - if (e->keyname) free((char *)e->keyname); - if (e->key) free((char *)e->key); - if (e->string) free((char *)e->string); - free(e); -} - -static int -_ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg, - Eina_Bool is_down, - char **keyname, - char **keysymbol, - char **keycompose, - unsigned int *modifiers) -{ - WCHAR buf[3]; - char delete_string[2] = { 0x7f, 0 }; - char *kn = NULL; - char *ks = NULL; - char *kc = NULL; - int key; - int is_extended; - int previous_key_state; - - key = msg->window_param; - is_extended = msg->data_param & 0x01000000; - previous_key_state = msg->data_param & 0x40000000; - - *keyname = NULL; - *keysymbol = NULL; - *keycompose = NULL; - - switch (key) - { - /* Keystroke */ - case VK_PRIOR: - if (is_extended) - { - kn = "Prior"; - ks = "Prior"; - kc = NULL; - } - else - { - kn = "KP_Prior"; - ks = "KP_9"; - kc = "KP_Prior"; - } - break; - case VK_NEXT: - if (is_extended) - { - kn = "Next"; - ks = "Next"; - kc = NULL; - } - else - { - kn = "KP_Next"; - ks = "KP_3"; - kc = "KP_Next"; - } - break; - case VK_END: - if (is_extended) - { - kn = "End"; - ks = "End"; - kc = NULL; - } - else - { - kn = "KP_End"; - ks = "KP_1"; - kc = "KP_End"; - } - break; - case VK_HOME: - if (is_extended) - { - kn = "Home"; - ks = "Home"; - kc = NULL; - } - else - { - kn = "KP_Home"; - ks = "KP_7"; - kc = "KP_Home"; - } - break; - case VK_LEFT: - if (is_extended) - { - kn = "Left"; - ks = "Left"; - kc = NULL; - } - else - { - kn = "KP_Left"; - ks = "KP_4"; - kc = "KP_Left"; - } - break; - case VK_UP: - if (is_extended) - { - kn = "Up"; - ks = "Up"; - kc = NULL; - } - else - { - kn = "KP_Up"; - ks = "KP_8"; - kc = "KP_Up"; - } - break; - case VK_RIGHT: - if (is_extended) - { - kn = "Right"; - ks = "Right"; - kc = NULL; - } - else - { - kn = "KP_Right"; - ks = "KP_6"; - kc = "KP_Right"; - } - break; - case VK_DOWN: - if (is_extended) - { - kn = "Down"; - ks = "Down"; - kc = NULL; - } - else - { - kn = "KP_Down"; - ks = "KP_2"; - kc = "KP_Down"; - } - break; - case VK_INSERT: - if (is_extended) - { - kn = "Insert"; - ks = "Insert"; - kc = NULL; - } - else - { - kn = "KP_Insert"; - ks = "KP_0"; - kc = "KP_Insert"; - } - break; - case VK_DELETE: - if (is_extended) - { - kn = "Delete"; - ks = "Delete"; - kc = delete_string; - } - else - { - kn = "KP_Delete"; - ks = "KP_Decimal"; - kc = "KP_Delete"; - } - break; - case VK_SHIFT: - { - SHORT res; - - if (is_down) - { - if (previous_key_state) return 0; - res = GetKeyState(VK_LSHIFT); - if (res & 0x8000) - { - _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_LSHIFT; - kn = "Shift_L"; - ks = "Shift_L"; - kc = ""; - } - res = GetKeyState(VK_RSHIFT); - if (res & 0x8000) - { - _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_RSHIFT; - kn = "Shift_R"; - ks = "Shift_R"; - kc = ""; - } - *modifiers &= ~ECORE_EVENT_MODIFIER_SHIFT; - } - else /* is_up */ - { - res = GetKeyState(VK_LSHIFT); - if (!(res & 0x8000) && - (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_LSHIFT)) - { - kn = "Shift_L"; - ks = "Shift_L"; - kc = ""; - _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_LSHIFT; - } - res = GetKeyState(VK_RSHIFT); - if (!(res & 0x8000) && - (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_RSHIFT)) - { - kn = "Shift_R"; - ks = "Shift_R"; - kc = ""; - _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RSHIFT; - } - *modifiers |= ECORE_EVENT_MODIFIER_SHIFT; - } - break; - } - case VK_CONTROL: - { - SHORT res; - - if (msg->discard_ctrl) - return 0; - - if (is_down) - { - if (previous_key_state) return 0; - res = GetKeyState(VK_LCONTROL); - if (res & 0x8000) - { - _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_LCONTROL; - kn = "Control_L"; - ks = "Control_L"; - kc = ""; - break; - } - res = GetKeyState(VK_RCONTROL); - if (res & 0x8000) - { - _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_RCONTROL; - kn = "Control_R"; - ks = "Control_R"; - kc = ""; - break; - } - *modifiers |= ECORE_EVENT_MODIFIER_CTRL; - } - else /* is_up */ - { - res = GetKeyState(VK_LCONTROL); - if (!(res & 0x8000) && - (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_LCONTROL)) - { - kn = "Control_L"; - ks = "Control_L"; - kc = ""; - _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_LCONTROL; - break; - } - res = GetKeyState(VK_RCONTROL); - if (!(res & 0x8000) && - (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_RCONTROL)) - { - kn = "Control_R"; - ks = "Control_R"; - kc = ""; - _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RCONTROL; - break; - } - *modifiers &= ~ECORE_EVENT_MODIFIER_CTRL; - } - break; - } - case VK_MENU: - { - SHORT res; - - if (is_down) - { - if (previous_key_state) return 0; - res = GetKeyState(VK_LMENU); - if (res & 0x8000) - { - _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_LMENU; - kn = "Alt_L"; - ks = "Alt_L"; - kc = ""; - } - res = GetKeyState(VK_RMENU); - if (res & 0x8000) - { - _ecore_win32_key_mask |= ECORE_WIN32_KEY_MASK_RMENU; - kn = "Alt_R"; - ks = "Alt_R"; - kc = ""; - } - *modifiers |= ECORE_EVENT_MODIFIER_ALT; - } - else /* is_up */ - { - res = GetKeyState(VK_LMENU); - if (!(res & 0x8000) && - (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_LMENU)) - { - kn = "Alt_L"; - ks = "Alt_L"; - kc = ""; - _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_LMENU; - } - res = GetKeyState(VK_RMENU); - if (!(res & 0x8000) && - (_ecore_win32_key_mask & ECORE_WIN32_KEY_MASK_RMENU)) - { - kn = "Alt_R"; - ks = "Alt_R"; - kc = ""; - _ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RMENU; - } - *modifiers &= ~ECORE_EVENT_MODIFIER_ALT; - } - break; - } - case VK_LWIN: - { - if (is_down) - { - if (previous_key_state) return 0; - kn = "Super_L"; - ks = "Super_L"; - kc = ""; - *modifiers |= ECORE_EVENT_MODIFIER_WIN; - } - else /* is_up */ - { - kn = "Super_L"; - ks = "Super_L"; - kc = ""; - *modifiers &= ~ECORE_EVENT_MODIFIER_WIN; - } - break; - } - case VK_RWIN: - { - if (is_down) - { - if (previous_key_state) return 0; - kn = "Super_R"; - ks = "Super_R"; - kc = ""; - *modifiers |= ECORE_EVENT_MODIFIER_WIN; - } - else /* is_up */ - { - kn = "Super_R"; - ks = "Super_R"; - kc = ""; - *modifiers &= ~ECORE_EVENT_MODIFIER_WIN; - } - break; - } - case VK_F1: - kn = "F1"; - ks = "F1"; - kc = ""; - break; - case VK_F2: - kn = "F2"; - ks = "F2"; - kc = ""; - break; - case VK_F3: - kn = "F3"; - ks = "F3"; - kc = ""; - break; - case VK_F4: - kn = "F4"; - ks = "F4"; - kc = ""; - break; - case VK_F5: - kn = "F5"; - ks = "F5"; - kc = ""; - break; - case VK_F6: - kn = "F6"; - ks = "F6"; - kc = ""; - break; - case VK_F7: - kn = "F7"; - ks = "F7"; - kc = ""; - break; - case VK_F8: - kn = "F8"; - ks = "F8"; - kc = ""; - break; - case VK_F9: - kn = "F9"; - ks = "F9"; - kc = ""; - break; - case VK_F10: - kn = "F10"; - ks = "F10"; - kc = ""; - break; - case VK_F11: - kn = "F11"; - ks = "F11"; - kc = ""; - break; - case VK_F12: - kn = "F12"; - ks = "F12"; - kc = ""; - break; - case VK_F13: - kn = "F13"; - ks = "F13"; - kc = ""; - break; - case VK_F14: - kn = "F14"; - ks = "F14"; - kc = ""; - break; - case VK_F15: - kn = "F15"; - ks = "F15"; - kc = ""; - break; - case VK_F16: - kn = "F16"; - ks = "F16"; - kc = ""; - break; - case VK_F17: - kn = "F17"; - ks = "F17"; - kc = ""; - break; - case VK_F18: - kn = "F18"; - ks = "F18"; - kc = ""; - break; - case VK_F19: - kn = "F19"; - ks = "F19"; - kc = ""; - break; - case VK_F20: - kn = "F20"; - ks = "F20"; - kc = ""; - break; - case VK_F21: - kn = "F21"; - ks = "F21"; - kc = ""; - break; - case VK_F22: - kn = "F22"; - ks = "F22"; - kc = ""; - break; - case VK_F23: - kn = "F23"; - ks = "F23"; - kc = ""; - break; - case VK_F24: - kn = "F24"; - ks = "F24"; - kc = ""; - break; - default: - { - /* other non keystroke characters */ - BYTE kbd_state[256]; - int res; - - if (is_down) - return 0; - - if (!GetKeyboardState(kbd_state)) - return 0; - - res = ToUnicode(msg->window_param, - MapVirtualKey(msg->window_param, 2), - kbd_state, buf, 3, 0); - if (res == 1) - { - /* FIXME: might be troublesome for non european languages */ - /* in that case, UNICODE should be used, I guess */ - buf[1] = '\0'; - kn = (char *)buf; - ks = (char *)buf; - kc = (char *)buf; - - res = GetAsyncKeyState(VK_SHIFT); - if (res & 0x8000) - *modifiers |= ECORE_EVENT_MODIFIER_SHIFT; - else - *modifiers &= ~ECORE_EVENT_MODIFIER_SHIFT; - - res = GetKeyState(VK_CONTROL); - if (res & 0x8000) - *modifiers |= ECORE_EVENT_MODIFIER_CTRL; - else - *modifiers &= ~ECORE_EVENT_MODIFIER_CTRL; - - res = GetKeyState(VK_MENU); - if (res & 0x8000) - *modifiers |= ECORE_EVENT_MODIFIER_ALT; - else - *modifiers &= ~ECORE_EVENT_MODIFIER_ALT; - - break; - } - return 0; - } - } - - *keyname = strdup(kn); - if (!*keyname) return 0; - *keysymbol = strdup(ks); - if (!*keysymbol) - { - free(*keyname); - *keyname = NULL; - return 0; - } - if (!kc) - *keycompose = NULL; - else - { - *keycompose = strdup(kc); - if (!*keycompose) - { - free(*keyname); - free(*keysymbol); - *keyname = NULL; - *keysymbol = NULL; - return 0; - } - } - - return 1; -} - -static int -_ecore_win32_event_char_get(int key, - char **keyname, - char **keysymbol, - char **keycompose, - unsigned int *modifiers) -{ - char *kn = NULL; - char *ks = NULL; - char *kc = NULL; - char buf[2]; - SHORT res; - - *keyname = NULL; - *keysymbol = NULL; - *keycompose = NULL; - - /* check control charaters such as ^a(key:1), ^z(key:26) */ - if ((key > 0) && (key < 27) && - ((GetKeyState(VK_CONTROL) & 0x8000) || - (GetKeyState(VK_CONTROL) & 0x8000))) key += 96; - - switch (key) - { - case VK_PROCESSKEY: - break; - case VK_BACK: - kn = "BackSpace"; - ks = "BackSpace"; - kc = "\b"; - break; - case VK_TAB: - kn = "Tab"; - ks = "Tab"; - kc = "\t"; - break; - case 0x0a: - /* Line feed (Shift + Enter) */ - kn = "LineFeed"; - ks = "LineFeed"; - kc = "LineFeed"; - break; - case VK_RETURN: - kn = "Return"; - ks = "Return"; - kc = "\n"; - break; - case VK_ESCAPE: - kn = "Escape"; - ks = "Escape"; - kc = "\e"; - break; - case VK_SPACE: - kn = "space"; - ks = "space"; - kc = " "; - break; - default: - /* displayable characters */ - buf[0] = key; - buf[1] = '\0'; - kn = buf; - ks = buf; - kc = buf; - break; - } - *keyname = strdup(kn); - if (!*keyname) return 0; - *keysymbol = strdup(ks); - if (!*keysymbol) - { - free(*keyname); - *keyname = NULL; - return 0; - } - *keycompose = strdup(kc); - if (!*keycompose) - { - free(*keyname); - free(*keysymbol); - *keyname = NULL; - *keysymbol = NULL; - return 0; - } - - res = GetAsyncKeyState(VK_SHIFT); - if (res & 0x8000) - *modifiers |= ECORE_EVENT_MODIFIER_SHIFT; - else - *modifiers &= ~ECORE_EVENT_MODIFIER_SHIFT; - - res = GetKeyState(VK_CONTROL); - if (res & 0x8000) - *modifiers |= ECORE_EVENT_MODIFIER_CTRL; - else - *modifiers &= ~ECORE_EVENT_MODIFIER_CTRL; - - res = GetKeyState(VK_MENU); - if (res & 0x8000) - *modifiers |= ECORE_EVENT_MODIFIER_ALT; - else - *modifiers &= ~ECORE_EVENT_MODIFIER_ALT; - - return 1; -} diff --git a/src/lib/ecore_win32/ecore_win32_keysym_table.h b/src/lib/ecore_win32/ecore_win32_keysym_table.h new file mode 100644 index 0000000000..b3a8da65b2 --- /dev/null +++ b/src/lib/ecore_win32/ecore_win32_keysym_table.h @@ -0,0 +1,4708 @@ + +/** + * This file comes from the libxkbcommon project (http://xkbcommon.org/): + * https://raw.github.com/xkbcommon/libxkbcommon/master/src/ks_tables.h + * revision: 1d5ae2263a + * modified to fit with ecore_win32 +*/ + +#ifndef ECORE_WIN32_KEYSYM_TABLE_H +#define ECORE_WIN32_KEYSYM_TABLE_H + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Woverlength-strings" + +static const char *_ecore_win32_keysym_names = + "0\0" + "1\0" + "2\0" + "3\0" + "3270_AltCursor\0" + "3270_Attn\0" + "3270_BackTab\0" + "3270_ChangeScreen\0" + "3270_Copy\0" + "3270_CursorBlink\0" + "3270_CursorSelect\0" + "3270_DeleteWord\0" + "3270_Duplicate\0" + "3270_Enter\0" + "3270_EraseEOF\0" + "3270_EraseInput\0" + "3270_ExSelect\0" + "3270_FieldMark\0" + "3270_Ident\0" + "3270_Jump\0" + "3270_KeyClick\0" + "3270_Left2\0" + "3270_PA1\0" + "3270_PA2\0" + "3270_PA3\0" + "3270_Play\0" + "3270_PrintScreen\0" + "3270_Quit\0" + "3270_Record\0" + "3270_Reset\0" + "3270_Right2\0" + "3270_Rule\0" + "3270_Setup\0" + "3270_Test\0" + "4\0" + "5\0" + "6\0" + "7\0" + "8\0" + "9\0" + "A\0" + "a\0" + "Aacute\0" + "aacute\0" + "Abelowdot\0" + "abelowdot\0" + "abovedot\0" + "Abreve\0" + "abreve\0" + "Abreveacute\0" + "abreveacute\0" + "Abrevebelowdot\0" + "abrevebelowdot\0" + "Abrevegrave\0" + "abrevegrave\0" + "Abrevehook\0" + "abrevehook\0" + "Abrevetilde\0" + "abrevetilde\0" + "AccessX_Enable\0" + "AccessX_Feedback_Enable\0" + "Acircumflex\0" + "acircumflex\0" + "Acircumflexacute\0" + "acircumflexacute\0" + "Acircumflexbelowdot\0" + "acircumflexbelowdot\0" + "Acircumflexgrave\0" + "acircumflexgrave\0" + "Acircumflexhook\0" + "acircumflexhook\0" + "Acircumflextilde\0" + "acircumflextilde\0" + "acute\0" + "Adiaeresis\0" + "adiaeresis\0" + "AE\0" + "ae\0" + "Agrave\0" + "agrave\0" + "Ahook\0" + "ahook\0" + "Alt_L\0" + "Alt_R\0" + "Amacron\0" + "amacron\0" + "ampersand\0" + "Aogonek\0" + "aogonek\0" + "apostrophe\0" + "approxeq\0" + "approximate\0" + "Arabic_0\0" + "Arabic_1\0" + "Arabic_2\0" + "Arabic_3\0" + "Arabic_4\0" + "Arabic_5\0" + "Arabic_6\0" + "Arabic_7\0" + "Arabic_8\0" + "Arabic_9\0" + "Arabic_ain\0" + "Arabic_alef\0" + "Arabic_alefmaksura\0" + "Arabic_beh\0" + "Arabic_comma\0" + "Arabic_dad\0" + "Arabic_dal\0" + "Arabic_damma\0" + "Arabic_dammatan\0" + "Arabic_ddal\0" + "Arabic_farsi_yeh\0" + "Arabic_fatha\0" + "Arabic_fathatan\0" + "Arabic_feh\0" + "Arabic_fullstop\0" + "Arabic_gaf\0" + "Arabic_ghain\0" + "Arabic_ha\0" + "Arabic_hah\0" + "Arabic_hamza\0" + "Arabic_hamza_above\0" + "Arabic_hamza_below\0" + "Arabic_hamzaonalef\0" + "Arabic_hamzaonwaw\0" + "Arabic_hamzaonyeh\0" + "Arabic_hamzaunderalef\0" + "Arabic_heh\0" + "Arabic_heh_doachashmee\0" + "Arabic_heh_goal\0" + "Arabic_jeem\0" + "Arabic_jeh\0" + "Arabic_kaf\0" + "Arabic_kasra\0" + "Arabic_kasratan\0" + "Arabic_keheh\0" + "Arabic_khah\0" + "Arabic_lam\0" + "Arabic_madda_above\0" + "Arabic_maddaonalef\0" + "Arabic_meem\0" + "Arabic_noon\0" + "Arabic_noon_ghunna\0" + "Arabic_peh\0" + "Arabic_percent\0" + "Arabic_qaf\0" + "Arabic_question_mark\0" + "Arabic_ra\0" + "Arabic_rreh\0" + "Arabic_sad\0" + "Arabic_seen\0" + "Arabic_semicolon\0" + "Arabic_shadda\0" + "Arabic_sheen\0" + "Arabic_sukun\0" + "Arabic_superscript_alef\0" + "Arabic_switch\0" + "Arabic_tah\0" + "Arabic_tatweel\0" + "Arabic_tcheh\0" + "Arabic_teh\0" + "Arabic_tehmarbuta\0" + "Arabic_thal\0" + "Arabic_theh\0" + "Arabic_tteh\0" + "Arabic_veh\0" + "Arabic_waw\0" + "Arabic_yeh\0" + "Arabic_yeh_baree\0" + "Arabic_zah\0" + "Arabic_zain\0" + "Aring\0" + "aring\0" + "Armenian_accent\0" + "Armenian_amanak\0" + "Armenian_apostrophe\0" + "Armenian_AT\0" + "Armenian_at\0" + "Armenian_AYB\0" + "Armenian_ayb\0" + "Armenian_BEN\0" + "Armenian_ben\0" + "Armenian_but\0" + "Armenian_CHA\0" + "Armenian_cha\0" + "Armenian_DA\0" + "Armenian_da\0" + "Armenian_DZA\0" + "Armenian_dza\0" + "Armenian_E\0" + "Armenian_e\0" + "Armenian_exclam\0" + "Armenian_FE\0" + "Armenian_fe\0" + "Armenian_full_stop\0" + "Armenian_GHAT\0" + "Armenian_ghat\0" + "Armenian_GIM\0" + "Armenian_gim\0" + "Armenian_HI\0" + "Armenian_hi\0" + "Armenian_HO\0" + "Armenian_ho\0" + "Armenian_hyphen\0" + "Armenian_INI\0" + "Armenian_ini\0" + "Armenian_JE\0" + "Armenian_je\0" + "Armenian_KE\0" + "Armenian_ke\0" + "Armenian_KEN\0" + "Armenian_ken\0" + "Armenian_KHE\0" + "Armenian_khe\0" + "Armenian_ligature_ew\0" + "Armenian_LYUN\0" + "Armenian_lyun\0" + "Armenian_MEN\0" + "Armenian_men\0" + "Armenian_NU\0" + "Armenian_nu\0" + "Armenian_O\0" + "Armenian_o\0" + "Armenian_paruyk\0" + "Armenian_PE\0" + "Armenian_pe\0" + "Armenian_PYUR\0" + "Armenian_pyur\0" + "Armenian_question\0" + "Armenian_RA\0" + "Armenian_ra\0" + "Armenian_RE\0" + "Armenian_re\0" + "Armenian_SE\0" + "Armenian_se\0" + "Armenian_separation_mark\0" + "Armenian_SHA\0" + "Armenian_sha\0" + "Armenian_shesht\0" + "Armenian_TCHE\0" + "Armenian_tche\0" + "Armenian_TO\0" + "Armenian_to\0" + "Armenian_TSA\0" + "Armenian_tsa\0" + "Armenian_TSO\0" + "Armenian_tso\0" + "Armenian_TYUN\0" + "Armenian_tyun\0" + "Armenian_verjaket\0" + "Armenian_VEV\0" + "Armenian_vev\0" + "Armenian_VO\0" + "Armenian_vo\0" + "Armenian_VYUN\0" + "Armenian_vyun\0" + "Armenian_YECH\0" + "Armenian_yech\0" + "Armenian_yentamna\0" + "Armenian_ZA\0" + "Armenian_za\0" + "Armenian_ZHE\0" + "Armenian_zhe\0" + "asciicircum\0" + "asciitilde\0" + "asterisk\0" + "at\0" + "Atilde\0" + "atilde\0" + "AudibleBell_Enable\0" + "B\0" + "b\0" + "Babovedot\0" + "babovedot\0" + "backslash\0" + "BackSpace\0" + "BackTab\0" + "ballotcross\0" + "bar\0" + "because\0" + "Begin\0" + "blank\0" + "block\0" + "botintegral\0" + "botleftparens\0" + "botleftsqbracket\0" + "botleftsummation\0" + "botrightparens\0" + "botrightsqbracket\0" + "botrightsummation\0" + "bott\0" + "botvertsummationconnector\0" + "BounceKeys_Enable\0" + "braceleft\0" + "braceright\0" + "bracketleft\0" + "bracketright\0" + "braille_blank\0" + "braille_dot_1\0" + "braille_dot_10\0" + "braille_dot_2\0" + "braille_dot_3\0" + "braille_dot_4\0" + "braille_dot_5\0" + "braille_dot_6\0" + "braille_dot_7\0" + "braille_dot_8\0" + "braille_dot_9\0" + "braille_dots_1\0" + "braille_dots_12\0" + "braille_dots_123\0" + "braille_dots_1234\0" + "braille_dots_12345\0" + "braille_dots_123456\0" + "braille_dots_1234567\0" + "braille_dots_12345678\0" + "braille_dots_1234568\0" + "braille_dots_123457\0" + "braille_dots_1234578\0" + "braille_dots_123458\0" + "braille_dots_12346\0" + "braille_dots_123467\0" + "braille_dots_1234678\0" + "braille_dots_123468\0" + "braille_dots_12347\0" + "braille_dots_123478\0" + "braille_dots_12348\0" + "braille_dots_1235\0" + "braille_dots_12356\0" + "braille_dots_123567\0" + "braille_dots_1235678\0" + "braille_dots_123568\0" + "braille_dots_12357\0" + "braille_dots_123578\0" + "braille_dots_12358\0" + "braille_dots_1236\0" + "braille_dots_12367\0" + "braille_dots_123678\0" + "braille_dots_12368\0" + "braille_dots_1237\0" + "braille_dots_12378\0" + "braille_dots_1238\0" + "braille_dots_124\0" + "braille_dots_1245\0" + "braille_dots_12456\0" + "braille_dots_124567\0" + "braille_dots_1245678\0" + "braille_dots_124568\0" + "braille_dots_12457\0" + "braille_dots_124578\0" + "braille_dots_12458\0" + "braille_dots_1246\0" + "braille_dots_12467\0" + "braille_dots_124678\0" + "braille_dots_12468\0" + "braille_dots_1247\0" + "braille_dots_12478\0" + "braille_dots_1248\0" + "braille_dots_125\0" + "braille_dots_1256\0" + "braille_dots_12567\0" + "braille_dots_125678\0" + "braille_dots_12568\0" + "braille_dots_1257\0" + "braille_dots_12578\0" + "braille_dots_1258\0" + "braille_dots_126\0" + "braille_dots_1267\0" + "braille_dots_12678\0" + "braille_dots_1268\0" + "braille_dots_127\0" + "braille_dots_1278\0" + "braille_dots_128\0" + "braille_dots_13\0" + "braille_dots_134\0" + "braille_dots_1345\0" + "braille_dots_13456\0" + "braille_dots_134567\0" + "braille_dots_1345678\0" + "braille_dots_134568\0" + "braille_dots_13457\0" + "braille_dots_134578\0" + "braille_dots_13458\0" + "braille_dots_1346\0" + "braille_dots_13467\0" + "braille_dots_134678\0" + "braille_dots_13468\0" + "braille_dots_1347\0" + "braille_dots_13478\0" + "braille_dots_1348\0" + "braille_dots_135\0" + "braille_dots_1356\0" + "braille_dots_13567\0" + "braille_dots_135678\0" + "braille_dots_13568\0" + "braille_dots_1357\0" + "braille_dots_13578\0" + "braille_dots_1358\0" + "braille_dots_136\0" + "braille_dots_1367\0" + "braille_dots_13678\0" + "braille_dots_1368\0" + "braille_dots_137\0" + "braille_dots_1378\0" + "braille_dots_138\0" + "braille_dots_14\0" + "braille_dots_145\0" + "braille_dots_1456\0" + "braille_dots_14567\0" + "braille_dots_145678\0" + "braille_dots_14568\0" + "braille_dots_1457\0" + "braille_dots_14578\0" + "braille_dots_1458\0" + "braille_dots_146\0" + "braille_dots_1467\0" + "braille_dots_14678\0" + "braille_dots_1468\0" + "braille_dots_147\0" + "braille_dots_1478\0" + "braille_dots_148\0" + "braille_dots_15\0" + "braille_dots_156\0" + "braille_dots_1567\0" + "braille_dots_15678\0" + "braille_dots_1568\0" + "braille_dots_157\0" + "braille_dots_1578\0" + "braille_dots_158\0" + "braille_dots_16\0" + "braille_dots_167\0" + "braille_dots_1678\0" + "braille_dots_168\0" + "braille_dots_17\0" + "braille_dots_178\0" + "braille_dots_18\0" + "braille_dots_2\0" + "braille_dots_23\0" + "braille_dots_234\0" + "braille_dots_2345\0" + "braille_dots_23456\0" + "braille_dots_234567\0" + "braille_dots_2345678\0" + "braille_dots_234568\0" + "braille_dots_23457\0" + "braille_dots_234578\0" + "braille_dots_23458\0" + "braille_dots_2346\0" + "braille_dots_23467\0" + "braille_dots_234678\0" + "braille_dots_23468\0" + "braille_dots_2347\0" + "braille_dots_23478\0" + "braille_dots_2348\0" + "braille_dots_235\0" + "braille_dots_2356\0" + "braille_dots_23567\0" + "braille_dots_235678\0" + "braille_dots_23568\0" + "braille_dots_2357\0" + "braille_dots_23578\0" + "braille_dots_2358\0" + "braille_dots_236\0" + "braille_dots_2367\0" + "braille_dots_23678\0" + "braille_dots_2368\0" + "braille_dots_237\0" + "braille_dots_2378\0" + "braille_dots_238\0" + "braille_dots_24\0" + "braille_dots_245\0" + "braille_dots_2456\0" + "braille_dots_24567\0" + "braille_dots_245678\0" + "braille_dots_24568\0" + "braille_dots_2457\0" + "braille_dots_24578\0" + "braille_dots_2458\0" + "braille_dots_246\0" + "braille_dots_2467\0" + "braille_dots_24678\0" + "braille_dots_2468\0" + "braille_dots_247\0" + "braille_dots_2478\0" + "braille_dots_248\0" + "braille_dots_25\0" + "braille_dots_256\0" + "braille_dots_2567\0" + "braille_dots_25678\0" + "braille_dots_2568\0" + "braille_dots_257\0" + "braille_dots_2578\0" + "braille_dots_258\0" + "braille_dots_26\0" + "braille_dots_267\0" + "braille_dots_2678\0" + "braille_dots_268\0" + "braille_dots_27\0" + "braille_dots_278\0" + "braille_dots_28\0" + "braille_dots_3\0" + "braille_dots_34\0" + "braille_dots_345\0" + "braille_dots_3456\0" + "braille_dots_34567\0" + "braille_dots_345678\0" + "braille_dots_34568\0" + "braille_dots_3457\0" + "braille_dots_34578\0" + "braille_dots_3458\0" + "braille_dots_346\0" + "braille_dots_3467\0" + "braille_dots_34678\0" + "braille_dots_3468\0" + "braille_dots_347\0" + "braille_dots_3478\0" + "braille_dots_348\0" + "braille_dots_35\0" + "braille_dots_356\0" + "braille_dots_3567\0" + "braille_dots_35678\0" + "braille_dots_3568\0" + "braille_dots_357\0" + "braille_dots_3578\0" + "braille_dots_358\0" + "braille_dots_36\0" + "braille_dots_367\0" + "braille_dots_3678\0" + "braille_dots_368\0" + "braille_dots_37\0" + "braille_dots_378\0" + "braille_dots_38\0" + "braille_dots_4\0" + "braille_dots_45\0" + "braille_dots_456\0" + "braille_dots_4567\0" + "braille_dots_45678\0" + "braille_dots_4568\0" + "braille_dots_457\0" + "braille_dots_4578\0" + "braille_dots_458\0" + "braille_dots_46\0" + "braille_dots_467\0" + "braille_dots_4678\0" + "braille_dots_468\0" + "braille_dots_47\0" + "braille_dots_478\0" + "braille_dots_48\0" + "braille_dots_5\0" + "braille_dots_56\0" + "braille_dots_567\0" + "braille_dots_5678\0" + "braille_dots_568\0" + "braille_dots_57\0" + "braille_dots_578\0" + "braille_dots_58\0" + "braille_dots_6\0" + "braille_dots_67\0" + "braille_dots_678\0" + "braille_dots_68\0" + "braille_dots_7\0" + "braille_dots_78\0" + "braille_dots_8\0" + "Break\0" + "breve\0" + "brokenbar\0" + "Byelorussian_shortu\0" + "Byelorussian_SHORTU\0" + "C\0" + "c\0" + "c_h\0" + "C_h\0" + "C_H\0" + "Cabovedot\0" + "cabovedot\0" + "Cacute\0" + "cacute\0" + "Cancel\0" + "Caps_Lock\0" + "careof\0" + "caret\0" + "caron\0" + "Ccaron\0" + "ccaron\0" + "Ccedilla\0" + "ccedilla\0" + "Ccircumflex\0" + "ccircumflex\0" + "cedilla\0" + "cent\0" + "ch\0" + "Ch\0" + "CH\0" + "checkerboard\0" + "checkmark\0" + "circle\0" + "Clear\0" + "ClearLine\0" + "club\0" + "Codeinput\0" + "colon\0" + "ColonSign\0" + "comma\0" + "containsas\0" + "Control_L\0" + "Control_R\0" + "copyright\0" + "cr\0" + "crossinglines\0" + "CruzeiroSign\0" + "cuberoot\0" + "currency\0" + "cursor\0" + "Cyrillic_a\0" + "Cyrillic_A\0" + "Cyrillic_be\0" + "Cyrillic_BE\0" + "Cyrillic_che\0" + "Cyrillic_CHE\0" + "Cyrillic_CHE_descender\0" + "Cyrillic_che_descender\0" + "Cyrillic_CHE_vertstroke\0" + "Cyrillic_che_vertstroke\0" + "Cyrillic_de\0" + "Cyrillic_DE\0" + "Cyrillic_dzhe\0" + "Cyrillic_DZHE\0" + "Cyrillic_e\0" + "Cyrillic_E\0" + "Cyrillic_ef\0" + "Cyrillic_EF\0" + "Cyrillic_el\0" + "Cyrillic_EL\0" + "Cyrillic_em\0" + "Cyrillic_EM\0" + "Cyrillic_en\0" + "Cyrillic_EN\0" + "Cyrillic_EN_descender\0" + "Cyrillic_en_descender\0" + "Cyrillic_er\0" + "Cyrillic_ER\0" + "Cyrillic_es\0" + "Cyrillic_ES\0" + "Cyrillic_ghe\0" + "Cyrillic_GHE\0" + "Cyrillic_GHE_bar\0" + "Cyrillic_ghe_bar\0" + "Cyrillic_ha\0" + "Cyrillic_HA\0" + "Cyrillic_HA_descender\0" + "Cyrillic_ha_descender\0" + "Cyrillic_hardsign\0" + "Cyrillic_HARDSIGN\0" + "Cyrillic_i\0" + "Cyrillic_I\0" + "Cyrillic_I_macron\0" + "Cyrillic_i_macron\0" + "Cyrillic_ie\0" + "Cyrillic_IE\0" + "Cyrillic_io\0" + "Cyrillic_IO\0" + "Cyrillic_je\0" + "Cyrillic_JE\0" + "Cyrillic_ka\0" + "Cyrillic_KA\0" + "Cyrillic_KA_descender\0" + "Cyrillic_ka_descender\0" + "Cyrillic_KA_vertstroke\0" + "Cyrillic_ka_vertstroke\0" + "Cyrillic_lje\0" + "Cyrillic_LJE\0" + "Cyrillic_nje\0" + "Cyrillic_NJE\0" + "Cyrillic_o\0" + "Cyrillic_O\0" + "Cyrillic_O_bar\0" + "Cyrillic_o_bar\0" + "Cyrillic_pe\0" + "Cyrillic_PE\0" + "Cyrillic_SCHWA\0" + "Cyrillic_schwa\0" + "Cyrillic_sha\0" + "Cyrillic_SHA\0" + "Cyrillic_shcha\0" + "Cyrillic_SHCHA\0" + "Cyrillic_SHHA\0" + "Cyrillic_shha\0" + "Cyrillic_shorti\0" + "Cyrillic_SHORTI\0" + "Cyrillic_softsign\0" + "Cyrillic_SOFTSIGN\0" + "Cyrillic_te\0" + "Cyrillic_TE\0" + "Cyrillic_tse\0" + "Cyrillic_TSE\0" + "Cyrillic_u\0" + "Cyrillic_U\0" + "Cyrillic_U_macron\0" + "Cyrillic_u_macron\0" + "Cyrillic_U_straight\0" + "Cyrillic_u_straight\0" + "Cyrillic_U_straight_bar\0" + "Cyrillic_u_straight_bar\0" + "Cyrillic_ve\0" + "Cyrillic_VE\0" + "Cyrillic_ya\0" + "Cyrillic_YA\0" + "Cyrillic_yeru\0" + "Cyrillic_YERU\0" + "Cyrillic_yu\0" + "Cyrillic_YU\0" + "Cyrillic_ze\0" + "Cyrillic_ZE\0" + "Cyrillic_zhe\0" + "Cyrillic_ZHE\0" + "Cyrillic_ZHE_descender\0" + "Cyrillic_zhe_descender\0" + "D\0" + "d\0" + "Dabovedot\0" + "dabovedot\0" + "Dacute_accent\0" + "dagger\0" + "Dcaron\0" + "dcaron\0" + "Dcedilla_accent\0" + "Dcircumflex_accent\0" + "Ddiaeresis\0" + "dead_a\0" + "dead_A\0" + "dead_abovecomma\0" + "dead_abovedot\0" + "dead_abovereversedcomma\0" + "dead_abovering\0" + "dead_aboveverticalline\0" + "dead_acute\0" + "dead_belowbreve\0" + "dead_belowcircumflex\0" + "dead_belowcomma\0" + "dead_belowdiaeresis\0" + "dead_belowdot\0" + "dead_belowmacron\0" + "dead_belowring\0" + "dead_belowtilde\0" + "dead_belowverticalline\0" + "dead_breve\0" + "dead_capital_schwa\0" + "dead_caron\0" + "dead_cedilla\0" + "dead_circumflex\0" + "dead_currency\0" + "dead_dasia\0" + "dead_diaeresis\0" + "dead_doubleacute\0" + "dead_doublegrave\0" + "dead_e\0" + "dead_E\0" + "dead_grave\0" + "dead_greek\0" + "dead_hook\0" + "dead_horn\0" + "dead_i\0" + "dead_I\0" + "dead_invertedbreve\0" + "dead_iota\0" + "dead_longsolidusoverlay\0" + "dead_lowline\0" + "dead_macron\0" + "dead_o\0" + "dead_O\0" + "dead_ogonek\0" + "dead_perispomeni\0" + "dead_psili\0" + "dead_semivoiced_sound\0" + "dead_small_schwa\0" + "dead_stroke\0" + "dead_tilde\0" + "dead_u\0" + "dead_U\0" + "dead_voiced_sound\0" + "decimalpoint\0" + "degree\0" + "Delete\0" + "DeleteChar\0" + "DeleteLine\0" + "Dgrave_accent\0" + "diaeresis\0" + "diamond\0" + "digitspace\0" + "dintegral\0" + "division\0" + "dollar\0" + "DongSign\0" + "doubbaselinedot\0" + "doubleacute\0" + "doubledagger\0" + "doublelowquotemark\0" + "Down\0" + "downarrow\0" + "downcaret\0" + "downshoe\0" + "downstile\0" + "downtack\0" + "DRemove\0" + "Dring_accent\0" + "Dstroke\0" + "dstroke\0" + "Dtilde\0" + "E\0" + "e\0" + "Eabovedot\0" + "eabovedot\0" + "Eacute\0" + "eacute\0" + "Ebelowdot\0" + "ebelowdot\0" + "Ecaron\0" + "ecaron\0" + "Ecircumflex\0" + "ecircumflex\0" + "Ecircumflexacute\0" + "ecircumflexacute\0" + "Ecircumflexbelowdot\0" + "ecircumflexbelowdot\0" + "Ecircumflexgrave\0" + "ecircumflexgrave\0" + "Ecircumflexhook\0" + "ecircumflexhook\0" + "Ecircumflextilde\0" + "ecircumflextilde\0" + "EcuSign\0" + "Ediaeresis\0" + "ediaeresis\0" + "Egrave\0" + "egrave\0" + "Ehook\0" + "ehook\0" + "eightsubscript\0" + "eightsuperior\0" + "Eisu_Shift\0" + "Eisu_toggle\0" + "elementof\0" + "ellipsis\0" + "em3space\0" + "em4space\0" + "Emacron\0" + "emacron\0" + "emdash\0" + "emfilledcircle\0" + "emfilledrect\0" + "emopencircle\0" + "emopenrectangle\0" + "emptyset\0" + "emspace\0" + "End\0" + "endash\0" + "enfilledcircbullet\0" + "enfilledsqbullet\0" + "ENG\0" + "eng\0" + "enopencircbullet\0" + "enopensquarebullet\0" + "enspace\0" + "Eogonek\0" + "eogonek\0" + "equal\0" + "Escape\0" + "ETH\0" + "Eth\0" + "eth\0" + "Etilde\0" + "etilde\0" + "EuroSign\0" + "exclam\0" + "exclamdown\0" + "Execute\0" + "Ext16bit_L\0" + "Ext16bit_R\0" + "EZH\0" + "ezh\0" + "F\0" + "f\0" + "F1\0" + "F10\0" + "F11\0" + "F12\0" + "F13\0" + "F14\0" + "F15\0" + "F16\0" + "F17\0" + "F18\0" + "F19\0" + "F2\0" + "F20\0" + "F21\0" + "F22\0" + "F23\0" + "F24\0" + "F25\0" + "F26\0" + "F27\0" + "F28\0" + "F29\0" + "F3\0" + "F30\0" + "F31\0" + "F32\0" + "F33\0" + "F34\0" + "F35\0" + "F4\0" + "F5\0" + "F6\0" + "F7\0" + "F8\0" + "F9\0" + "Fabovedot\0" + "fabovedot\0" + "Farsi_0\0" + "Farsi_1\0" + "Farsi_2\0" + "Farsi_3\0" + "Farsi_4\0" + "Farsi_5\0" + "Farsi_6\0" + "Farsi_7\0" + "Farsi_8\0" + "Farsi_9\0" + "Farsi_yeh\0" + "femalesymbol\0" + "ff\0" + "FFrancSign\0" + "figdash\0" + "filledlefttribullet\0" + "filledrectbullet\0" + "filledrighttribullet\0" + "filledtribulletdown\0" + "filledtribulletup\0" + "Find\0" + "First_Virtual_Screen\0" + "fiveeighths\0" + "fivesixths\0" + "fivesubscript\0" + "fivesuperior\0" + "fourfifths\0" + "foursubscript\0" + "foursuperior\0" + "fourthroot\0" + "function\0" + "G\0" + "g\0" + "Gabovedot\0" + "gabovedot\0" + "Gbreve\0" + "gbreve\0" + "Gcaron\0" + "gcaron\0" + "Gcedilla\0" + "gcedilla\0" + "Gcircumflex\0" + "gcircumflex\0" + "Georgian_an\0" + "Georgian_ban\0" + "Georgian_can\0" + "Georgian_char\0" + "Georgian_chin\0" + "Georgian_cil\0" + "Georgian_don\0" + "Georgian_en\0" + "Georgian_fi\0" + "Georgian_gan\0" + "Georgian_ghan\0" + "Georgian_hae\0" + "Georgian_har\0" + "Georgian_he\0" + "Georgian_hie\0" + "Georgian_hoe\0" + "Georgian_in\0" + "Georgian_jhan\0" + "Georgian_jil\0" + "Georgian_kan\0" + "Georgian_khar\0" + "Georgian_las\0" + "Georgian_man\0" + "Georgian_nar\0" + "Georgian_on\0" + "Georgian_par\0" + "Georgian_phar\0" + "Georgian_qar\0" + "Georgian_rae\0" + "Georgian_san\0" + "Georgian_shin\0" + "Georgian_tan\0" + "Georgian_tar\0" + "Georgian_un\0" + "Georgian_vin\0" + "Georgian_we\0" + "Georgian_xan\0" + "Georgian_zen\0" + "Georgian_zhar\0" + "grave\0" + "greater\0" + "greaterthanequal\0" + "Greek_accentdieresis\0" + "Greek_ALPHA\0" + "Greek_alpha\0" + "Greek_ALPHAaccent\0" + "Greek_alphaaccent\0" + "Greek_BETA\0" + "Greek_beta\0" + "Greek_CHI\0" + "Greek_chi\0" + "Greek_DELTA\0" + "Greek_delta\0" + "Greek_EPSILON\0" + "Greek_epsilon\0" + "Greek_EPSILONaccent\0" + "Greek_epsilonaccent\0" + "Greek_ETA\0" + "Greek_eta\0" + "Greek_ETAaccent\0" + "Greek_etaaccent\0" + "Greek_finalsmallsigma\0" + "Greek_GAMMA\0" + "Greek_gamma\0" + "Greek_horizbar\0" + "Greek_IOTA\0" + "Greek_iota\0" + "Greek_IOTAaccent\0" + "Greek_iotaaccent\0" + "Greek_iotaaccentdieresis\0" + "Greek_IOTAdiaeresis\0" + "Greek_IOTAdieresis\0" + "Greek_iotadieresis\0" + "Greek_KAPPA\0" + "Greek_kappa\0" + "Greek_LAMBDA\0" + "Greek_lambda\0" + "Greek_LAMDA\0" + "Greek_lamda\0" + "Greek_MU\0" + "Greek_mu\0" + "Greek_NU\0" + "Greek_nu\0" + "Greek_OMEGA\0" + "Greek_omega\0" + "Greek_OMEGAaccent\0" + "Greek_omegaaccent\0" + "Greek_OMICRON\0" + "Greek_omicron\0" + "Greek_OMICRONaccent\0" + "Greek_omicronaccent\0" + "Greek_PHI\0" + "Greek_phi\0" + "Greek_PI\0" + "Greek_pi\0" + "Greek_PSI\0" + "Greek_psi\0" + "Greek_RHO\0" + "Greek_rho\0" + "Greek_SIGMA\0" + "Greek_sigma\0" + "Greek_switch\0" + "Greek_TAU\0" + "Greek_tau\0" + "Greek_THETA\0" + "Greek_theta\0" + "Greek_UPSILON\0" + "Greek_upsilon\0" + "Greek_UPSILONaccent\0" + "Greek_upsilonaccent\0" + "Greek_upsilonaccentdieresis\0" + "Greek_UPSILONdieresis\0" + "Greek_upsilondieresis\0" + "Greek_XI\0" + "Greek_xi\0" + "Greek_ZETA\0" + "Greek_zeta\0" + "guilder\0" + "guillemotleft\0" + "guillemotright\0" + "H\0" + "h\0" + "hairspace\0" + "Hangul\0" + "Hangul_A\0" + "Hangul_AE\0" + "Hangul_AraeA\0" + "Hangul_AraeAE\0" + "Hangul_Banja\0" + "Hangul_Cieuc\0" + "Hangul_Codeinput\0" + "Hangul_Dikeud\0" + "Hangul_E\0" + "Hangul_End\0" + "Hangul_EO\0" + "Hangul_EU\0" + "Hangul_Hanja\0" + "Hangul_Hieuh\0" + "Hangul_I\0" + "Hangul_Ieung\0" + "Hangul_J_Cieuc\0" + "Hangul_J_Dikeud\0" + "Hangul_J_Hieuh\0" + "Hangul_J_Ieung\0" + "Hangul_J_Jieuj\0" + "Hangul_J_Khieuq\0" + "Hangul_J_Kiyeog\0" + "Hangul_J_KiyeogSios\0" + "Hangul_J_KkogjiDalrinIeung\0" + "Hangul_J_Mieum\0" + "Hangul_J_Nieun\0" + "Hangul_J_NieunHieuh\0" + "Hangul_J_NieunJieuj\0" + "Hangul_J_PanSios\0" + "Hangul_J_Phieuf\0" + "Hangul_J_Pieub\0" + "Hangul_J_PieubSios\0" + "Hangul_J_Rieul\0" + "Hangul_J_RieulHieuh\0" + "Hangul_J_RieulKiyeog\0" + "Hangul_J_RieulMieum\0" + "Hangul_J_RieulPhieuf\0" + "Hangul_J_RieulPieub\0" + "Hangul_J_RieulSios\0" + "Hangul_J_RieulTieut\0" + "Hangul_J_Sios\0" + "Hangul_J_SsangKiyeog\0" + "Hangul_J_SsangSios\0" + "Hangul_J_Tieut\0" + "Hangul_J_YeorinHieuh\0" + "Hangul_Jamo\0" + "Hangul_Jeonja\0" + "Hangul_Jieuj\0" + "Hangul_Khieuq\0" + "Hangul_Kiyeog\0" + "Hangul_KiyeogSios\0" + "Hangul_KkogjiDalrinIeung\0" + "Hangul_Mieum\0" + "Hangul_MultipleCandidate\0" + "Hangul_Nieun\0" + "Hangul_NieunHieuh\0" + "Hangul_NieunJieuj\0" + "Hangul_O\0" + "Hangul_OE\0" + "Hangul_PanSios\0" + "Hangul_Phieuf\0" + "Hangul_Pieub\0" + "Hangul_PieubSios\0" + "Hangul_PostHanja\0" + "Hangul_PreHanja\0" + "Hangul_PreviousCandidate\0" + "Hangul_Rieul\0" + "Hangul_RieulHieuh\0" + "Hangul_RieulKiyeog\0" + "Hangul_RieulMieum\0" + "Hangul_RieulPhieuf\0" + "Hangul_RieulPieub\0" + "Hangul_RieulSios\0" + "Hangul_RieulTieut\0" + "Hangul_RieulYeorinHieuh\0" + "Hangul_Romaja\0" + "Hangul_SingleCandidate\0" + "Hangul_Sios\0" + "Hangul_Special\0" + "Hangul_SsangDikeud\0" + "Hangul_SsangJieuj\0" + "Hangul_SsangKiyeog\0" + "Hangul_SsangPieub\0" + "Hangul_SsangSios\0" + "Hangul_Start\0" + "Hangul_SunkyeongeumMieum\0" + "Hangul_SunkyeongeumPhieuf\0" + "Hangul_SunkyeongeumPieub\0" + "Hangul_switch\0" + "Hangul_Tieut\0" + "Hangul_U\0" + "Hangul_WA\0" + "Hangul_WAE\0" + "Hangul_WE\0" + "Hangul_WEO\0" + "Hangul_WI\0" + "Hangul_YA\0" + "Hangul_YAE\0" + "Hangul_YE\0" + "Hangul_YEO\0" + "Hangul_YeorinHieuh\0" + "Hangul_YI\0" + "Hangul_YO\0" + "Hangul_YU\0" + "Hankaku\0" + "Hcircumflex\0" + "hcircumflex\0" + "heart\0" + "hebrew_aleph\0" + "hebrew_ayin\0" + "hebrew_bet\0" + "hebrew_beth\0" + "hebrew_chet\0" + "hebrew_dalet\0" + "hebrew_daleth\0" + "hebrew_doublelowline\0" + "hebrew_finalkaph\0" + "hebrew_finalmem\0" + "hebrew_finalnun\0" + "hebrew_finalpe\0" + "hebrew_finalzade\0" + "hebrew_finalzadi\0" + "hebrew_gimel\0" + "hebrew_gimmel\0" + "hebrew_he\0" + "hebrew_het\0" + "hebrew_kaph\0" + "hebrew_kuf\0" + "hebrew_lamed\0" + "hebrew_mem\0" + "hebrew_nun\0" + "hebrew_pe\0" + "hebrew_qoph\0" + "hebrew_resh\0" + "hebrew_samech\0" + "hebrew_samekh\0" + "hebrew_shin\0" + "Hebrew_switch\0" + "hebrew_taf\0" + "hebrew_taw\0" + "hebrew_tet\0" + "hebrew_teth\0" + "hebrew_waw\0" + "hebrew_yod\0" + "hebrew_zade\0" + "hebrew_zadi\0" + "hebrew_zain\0" + "hebrew_zayin\0" + "Help\0" + "Henkan\0" + "Henkan_Mode\0" + "hexagram\0" + "Hiragana\0" + "Hiragana_Katakana\0" + "Home\0" + "horizconnector\0" + "horizlinescan1\0" + "horizlinescan3\0" + "horizlinescan5\0" + "horizlinescan7\0" + "horizlinescan9\0" + "hpBackTab\0" + "hpblock\0" + "hpClearLine\0" + "hpDeleteChar\0" + "hpDeleteLine\0" + "hpguilder\0" + "hpInsertChar\0" + "hpInsertLine\0" + "hpIO\0" + "hpKP_BackTab\0" + "hplira\0" + "hplongminus\0" + "hpModelock1\0" + "hpModelock2\0" + "hpmute_acute\0" + "hpmute_asciicircum\0" + "hpmute_asciitilde\0" + "hpmute_diaeresis\0" + "hpmute_grave\0" + "hpReset\0" + "hpSystem\0" + "hpUser\0" + "hpYdiaeresis\0" + "Hstroke\0" + "hstroke\0" + "ht\0" + "Hyper_L\0" + "Hyper_R\0" + "hyphen\0" + "I\0" + "i\0" + "Iabovedot\0" + "Iacute\0" + "iacute\0" + "Ibelowdot\0" + "ibelowdot\0" + "Ibreve\0" + "ibreve\0" + "Icircumflex\0" + "icircumflex\0" + "identical\0" + "Idiaeresis\0" + "idiaeresis\0" + "idotless\0" + "ifonlyif\0" + "Igrave\0" + "igrave\0" + "Ihook\0" + "ihook\0" + "Imacron\0" + "imacron\0" + "implies\0" + "includedin\0" + "includes\0" + "infinity\0" + "Insert\0" + "InsertChar\0" + "InsertLine\0" + "integral\0" + "intersection\0" + "IO\0" + "Iogonek\0" + "iogonek\0" + "ISO_Center_Object\0" + "ISO_Continuous_Underline\0" + "ISO_Discontinuous_Underline\0" + "ISO_Emphasize\0" + "ISO_Enter\0" + "ISO_Fast_Cursor_Down\0" + "ISO_Fast_Cursor_Left\0" + "ISO_Fast_Cursor_Right\0" + "ISO_Fast_Cursor_Up\0" + "ISO_First_Group\0" + "ISO_First_Group_Lock\0" + "ISO_Group_Latch\0" + "ISO_Group_Lock\0" + "ISO_Group_Shift\0" + "ISO_Last_Group\0" + "ISO_Last_Group_Lock\0" + "ISO_Left_Tab\0" + "ISO_Level2_Latch\0" + "ISO_Level3_Latch\0" + "ISO_Level3_Lock\0" + "ISO_Level3_Shift\0" + "ISO_Level5_Latch\0" + "ISO_Level5_Lock\0" + "ISO_Level5_Shift\0" + "ISO_Lock\0" + "ISO_Move_Line_Down\0" + "ISO_Move_Line_Up\0" + "ISO_Next_Group\0" + "ISO_Next_Group_Lock\0" + "ISO_Partial_Line_Down\0" + "ISO_Partial_Line_Up\0" + "ISO_Partial_Space_Left\0" + "ISO_Partial_Space_Right\0" + "ISO_Prev_Group\0" + "ISO_Prev_Group_Lock\0" + "ISO_Release_Both_Margins\0" + "ISO_Release_Margin_Left\0" + "ISO_Release_Margin_Right\0" + "ISO_Set_Margin_Left\0" + "ISO_Set_Margin_Right\0" + "Itilde\0" + "itilde\0" + "J\0" + "j\0" + "Jcircumflex\0" + "jcircumflex\0" + "jot\0" + "K\0" + "k\0" + "kana_a\0" + "kana_A\0" + "kana_CHI\0" + "kana_closingbracket\0" + "kana_comma\0" + "kana_conjunctive\0" + "kana_e\0" + "kana_E\0" + "kana_FU\0" + "kana_fullstop\0" + "kana_HA\0" + "kana_HE\0" + "kana_HI\0" + "kana_HO\0" + "kana_HU\0" + "kana_i\0" + "kana_I\0" + "kana_KA\0" + "kana_KE\0" + "kana_KI\0" + "kana_KO\0" + "kana_KU\0" + "Kana_Lock\0" + "kana_MA\0" + "kana_ME\0" + "kana_MI\0" + "kana_middledot\0" + "kana_MO\0" + "kana_MU\0" + "kana_N\0" + "kana_NA\0" + "kana_NE\0" + "kana_NI\0" + "kana_NO\0" + "kana_NU\0" + "kana_o\0" + "kana_O\0" + "kana_openingbracket\0" + "kana_RA\0" + "kana_RE\0" + "kana_RI\0" + "kana_RO\0" + "kana_RU\0" + "kana_SA\0" + "kana_SE\0" + "kana_SHI\0" + "Kana_Shift\0" + "kana_SO\0" + "kana_SU\0" + "kana_switch\0" + "kana_TA\0" + "kana_TE\0" + "kana_TI\0" + "kana_TO\0" + "kana_tsu\0" + "kana_TSU\0" + "kana_tu\0" + "kana_TU\0" + "kana_u\0" + "kana_U\0" + "kana_WA\0" + "kana_WO\0" + "kana_ya\0" + "kana_YA\0" + "kana_yo\0" + "kana_YO\0" + "kana_yu\0" + "kana_YU\0" + "Kanji\0" + "Kanji_Bangou\0" + "kappa\0" + "Katakana\0" + "Kcedilla\0" + "kcedilla\0" + "Korean_Won\0" + "KP_0\0" + "KP_1\0" + "KP_2\0" + "KP_3\0" + "KP_4\0" + "KP_5\0" + "KP_6\0" + "KP_7\0" + "KP_8\0" + "KP_9\0" + "KP_Add\0" + "KP_BackTab\0" + "KP_Begin\0" + "KP_Decimal\0" + "KP_Delete\0" + "KP_Divide\0" + "KP_Down\0" + "KP_End\0" + "KP_Enter\0" + "KP_Equal\0" + "KP_F1\0" + "KP_F2\0" + "KP_F3\0" + "KP_F4\0" + "KP_Home\0" + "KP_Insert\0" + "KP_Left\0" + "KP_Multiply\0" + "KP_Next\0" + "KP_Page_Down\0" + "KP_Page_Up\0" + "KP_Prior\0" + "KP_Right\0" + "KP_Separator\0" + "KP_Space\0" + "KP_Subtract\0" + "KP_Tab\0" + "KP_Up\0" + "kra\0" + "L\0" + "l\0" + "L1\0" + "L10\0" + "L2\0" + "L3\0" + "L4\0" + "L5\0" + "L6\0" + "L7\0" + "L8\0" + "L9\0" + "Lacute\0" + "lacute\0" + "Last_Virtual_Screen\0" + "latincross\0" + "Lbelowdot\0" + "lbelowdot\0" + "Lcaron\0" + "lcaron\0" + "Lcedilla\0" + "lcedilla\0" + "Left\0" + "leftanglebracket\0" + "leftarrow\0" + "leftcaret\0" + "leftdoublequotemark\0" + "leftmiddlecurlybrace\0" + "leftopentriangle\0" + "leftpointer\0" + "leftradical\0" + "leftshoe\0" + "leftsinglequotemark\0" + "leftt\0" + "lefttack\0" + "less\0" + "lessthanequal\0" + "lf\0" + "Linefeed\0" + "lira\0" + "LiraSign\0" + "logicaland\0" + "logicalor\0" + "longminus\0" + "lowleftcorner\0" + "lowrightcorner\0" + "Lstroke\0" + "lstroke\0" + "M\0" + "m\0" + "Mabovedot\0" + "mabovedot\0" + "Macedonia_dse\0" + "Macedonia_DSE\0" + "Macedonia_gje\0" + "Macedonia_GJE\0" + "Macedonia_kje\0" + "Macedonia_KJE\0" + "macron\0" + "Mae_Koho\0" + "malesymbol\0" + "maltesecross\0" + "marker\0" + "masculine\0" + "Massyo\0" + "Menu\0" + "Meta_L\0" + "Meta_R\0" + "MillSign\0" + "minus\0" + "minutes\0" + "Mode_switch\0" + "MouseKeys_Accel_Enable\0" + "MouseKeys_Enable\0" + "mu\0" + "Muhenkan\0" + "Multi_key\0" + "MultipleCandidate\0" + "multiply\0" + "musicalflat\0" + "musicalsharp\0" + "mute_acute\0" + "mute_asciicircum\0" + "mute_asciitilde\0" + "mute_diaeresis\0" + "mute_grave\0" + "N\0" + "n\0" + "nabla\0" + "Nacute\0" + "nacute\0" + "NairaSign\0" + "Ncaron\0" + "ncaron\0" + "Ncedilla\0" + "ncedilla\0" + "NewSheqelSign\0" + "Next\0" + "Next_Virtual_Screen\0" + "ninesubscript\0" + "ninesuperior\0" + "nl\0" + "nobreakspace\0" + "NoSymbol\0" + "notapproxeq\0" + "notelementof\0" + "notequal\0" + "notidentical\0" + "notsign\0" + "Ntilde\0" + "ntilde\0" + "Num_Lock\0" + "numbersign\0" + "numerosign\0" + "O\0" + "o\0" + "Oacute\0" + "oacute\0" + "Obarred\0" + "obarred\0" + "Obelowdot\0" + "obelowdot\0" + "Ocaron\0" + "ocaron\0" + "Ocircumflex\0" + "ocircumflex\0" + "Ocircumflexacute\0" + "ocircumflexacute\0" + "Ocircumflexbelowdot\0" + "ocircumflexbelowdot\0" + "Ocircumflexgrave\0" + "ocircumflexgrave\0" + "Ocircumflexhook\0" + "ocircumflexhook\0" + "Ocircumflextilde\0" + "ocircumflextilde\0" + "Odiaeresis\0" + "odiaeresis\0" + "Odoubleacute\0" + "odoubleacute\0" + "OE\0" + "oe\0" + "ogonek\0" + "Ograve\0" + "ograve\0" + "Ohook\0" + "ohook\0" + "Ohorn\0" + "ohorn\0" + "Ohornacute\0" + "ohornacute\0" + "Ohornbelowdot\0" + "ohornbelowdot\0" + "Ohorngrave\0" + "ohorngrave\0" + "Ohornhook\0" + "ohornhook\0" + "Ohorntilde\0" + "ohorntilde\0" + "Omacron\0" + "omacron\0" + "oneeighth\0" + "onefifth\0" + "onehalf\0" + "onequarter\0" + "onesixth\0" + "onesubscript\0" + "onesuperior\0" + "onethird\0" + "Ooblique\0" + "ooblique\0" + "openrectbullet\0" + "openstar\0" + "opentribulletdown\0" + "opentribulletup\0" + "ordfeminine\0" + "osfActivate\0" + "osfAddMode\0" + "osfBackSpace\0" + "osfBackTab\0" + "osfBeginData\0" + "osfBeginLine\0" + "osfCancel\0" + "osfClear\0" + "osfCopy\0" + "osfCut\0" + "osfDelete\0" + "osfDeselectAll\0" + "osfDown\0" + "osfEndData\0" + "osfEndLine\0" + "osfEscape\0" + "osfExtend\0" + "osfHelp\0" + "osfInsert\0" + "osfLeft\0" + "osfMenu\0" + "osfMenuBar\0" + "osfNextField\0" + "osfNextMenu\0" + "osfPageDown\0" + "osfPageLeft\0" + "osfPageRight\0" + "osfPageUp\0" + "osfPaste\0" + "osfPrevField\0" + "osfPrevMenu\0" + "osfPrimaryPaste\0" + "osfQuickPaste\0" + "osfReselect\0" + "osfRestore\0" + "osfRight\0" + "osfSelect\0" + "osfSelectAll\0" + "osfUndo\0" + "osfUp\0" + "Oslash\0" + "oslash\0" + "Otilde\0" + "otilde\0" + "overbar\0" + "Overlay1_Enable\0" + "Overlay2_Enable\0" + "overline\0" + "P\0" + "p\0" + "Pabovedot\0" + "pabovedot\0" + "Page_Down\0" + "Page_Up\0" + "paragraph\0" + "parenleft\0" + "parenright\0" + "partdifferential\0" + "partialderivative\0" + "Pause\0" + "percent\0" + "period\0" + "periodcentered\0" + "permille\0" + "PesetaSign\0" + "phonographcopyright\0" + "plus\0" + "plusminus\0" + "Pointer_Accelerate\0" + "Pointer_Button1\0" + "Pointer_Button2\0" + "Pointer_Button3\0" + "Pointer_Button4\0" + "Pointer_Button5\0" + "Pointer_Button_Dflt\0" + "Pointer_DblClick1\0" + "Pointer_DblClick2\0" + "Pointer_DblClick3\0" + "Pointer_DblClick4\0" + "Pointer_DblClick5\0" + "Pointer_DblClick_Dflt\0" + "Pointer_DfltBtnNext\0" + "Pointer_DfltBtnPrev\0" + "Pointer_Down\0" + "Pointer_DownLeft\0" + "Pointer_DownRight\0" + "Pointer_Drag1\0" + "Pointer_Drag2\0" + "Pointer_Drag3\0" + "Pointer_Drag4\0" + "Pointer_Drag5\0" + "Pointer_Drag_Dflt\0" + "Pointer_EnableKeys\0" + "Pointer_Left\0" + "Pointer_Right\0" + "Pointer_Up\0" + "Pointer_UpLeft\0" + "Pointer_UpRight\0" + "prescription\0" + "Prev_Virtual_Screen\0" + "PreviousCandidate\0" + "Print\0" + "Prior\0" + "prolongedsound\0" + "punctspace\0" + "Q\0" + "q\0" + "quad\0" + "question\0" + "questiondown\0" + "quotedbl\0" + "quoteleft\0" + "quoteright\0" + "R\0" + "r\0" + "R1\0" + "R10\0" + "R11\0" + "R12\0" + "R13\0" + "R14\0" + "R15\0" + "R2\0" + "R3\0" + "R4\0" + "R5\0" + "R6\0" + "R7\0" + "R8\0" + "R9\0" + "Racute\0" + "racute\0" + "radical\0" + "Rcaron\0" + "rcaron\0" + "Rcedilla\0" + "rcedilla\0" + "Redo\0" + "registered\0" + "RepeatKeys_Enable\0" + "Reset\0" + "Return\0" + "Right\0" + "rightanglebracket\0" + "rightarrow\0" + "rightcaret\0" + "rightdoublequotemark\0" + "rightmiddlecurlybrace\0" + "rightmiddlesummation\0" + "rightopentriangle\0" + "rightpointer\0" + "rightshoe\0" + "rightsinglequotemark\0" + "rightt\0" + "righttack\0" + "Romaji\0" + "RupeeSign\0" + "S\0" + "s\0" + "Sabovedot\0" + "sabovedot\0" + "Sacute\0" + "sacute\0" + "Scaron\0" + "scaron\0" + "Scedilla\0" + "scedilla\0" + "SCHWA\0" + "schwa\0" + "Scircumflex\0" + "scircumflex\0" + "script_switch\0" + "Scroll_Lock\0" + "seconds\0" + "section\0" + "Select\0" + "semicolon\0" + "semivoicedsound\0" + "Serbian_dje\0" + "Serbian_DJE\0" + "Serbian_dze\0" + "Serbian_DZE\0" + "Serbian_je\0" + "Serbian_JE\0" + "Serbian_lje\0" + "Serbian_LJE\0" + "Serbian_nje\0" + "Serbian_NJE\0" + "Serbian_tshe\0" + "Serbian_TSHE\0" + "seveneighths\0" + "sevensubscript\0" + "sevensuperior\0" + "Shift_L\0" + "Shift_Lock\0" + "Shift_R\0" + "signaturemark\0" + "signifblank\0" + "similarequal\0" + "SingleCandidate\0" + "singlelowquotemark\0" + "Sinh_a\0" + "Sinh_aa\0" + "Sinh_aa2\0" + "Sinh_ae\0" + "Sinh_ae2\0" + "Sinh_aee\0" + "Sinh_aee2\0" + "Sinh_ai\0" + "Sinh_ai2\0" + "Sinh_al\0" + "Sinh_au\0" + "Sinh_au2\0" + "Sinh_ba\0" + "Sinh_bha\0" + "Sinh_ca\0" + "Sinh_cha\0" + "Sinh_dda\0" + "Sinh_ddha\0" + "Sinh_dha\0" + "Sinh_dhha\0" + "Sinh_e\0" + "Sinh_e2\0" + "Sinh_ee\0" + "Sinh_ee2\0" + "Sinh_fa\0" + "Sinh_ga\0" + "Sinh_gha\0" + "Sinh_h2\0" + "Sinh_ha\0" + "Sinh_i\0" + "Sinh_i2\0" + "Sinh_ii\0" + "Sinh_ii2\0" + "Sinh_ja\0" + "Sinh_jha\0" + "Sinh_jnya\0" + "Sinh_ka\0" + "Sinh_kha\0" + "Sinh_kunddaliya\0" + "Sinh_la\0" + "Sinh_lla\0" + "Sinh_lu\0" + "Sinh_lu2\0" + "Sinh_luu\0" + "Sinh_luu2\0" + "Sinh_ma\0" + "Sinh_mba\0" + "Sinh_na\0" + "Sinh_ndda\0" + "Sinh_ndha\0" + "Sinh_ng\0" + "Sinh_ng2\0" + "Sinh_nga\0" + "Sinh_nja\0" + "Sinh_nna\0" + "Sinh_nya\0" + "Sinh_o\0" + "Sinh_o2\0" + "Sinh_oo\0" + "Sinh_oo2\0" + "Sinh_pa\0" + "Sinh_pha\0" + "Sinh_ra\0" + "Sinh_ri\0" + "Sinh_rii\0" + "Sinh_ru2\0" + "Sinh_ruu2\0" + "Sinh_sa\0" + "Sinh_sha\0" + "Sinh_ssha\0" + "Sinh_tha\0" + "Sinh_thha\0" + "Sinh_tta\0" + "Sinh_ttha\0" + "Sinh_u\0" + "Sinh_u2\0" + "Sinh_uu\0" + "Sinh_uu2\0" + "Sinh_va\0" + "Sinh_ya\0" + "sixsubscript\0" + "sixsuperior\0" + "slash\0" + "SlowKeys_Enable\0" + "soliddiamond\0" + "space\0" + "squareroot\0" + "ssharp\0" + "sterling\0" + "StickyKeys_Enable\0" + "stricteq\0" + "SunAgain\0" + "SunAltGraph\0" + "SunAudioLowerVolume\0" + "SunAudioMute\0" + "SunAudioRaiseVolume\0" + "SunCompose\0" + "SunCopy\0" + "SunCut\0" + "SunF36\0" + "SunF37\0" + "SunFA_Acute\0" + "SunFA_Cedilla\0" + "SunFA_Circum\0" + "SunFA_Diaeresis\0" + "SunFA_Grave\0" + "SunFA_Tilde\0" + "SunFind\0" + "SunFront\0" + "SunOpen\0" + "SunPageDown\0" + "SunPageUp\0" + "SunPaste\0" + "SunPowerSwitch\0" + "SunPowerSwitchShift\0" + "SunPrint_Screen\0" + "SunProps\0" + "SunStop\0" + "SunSys_Req\0" + "SunUndo\0" + "SunVideoDegauss\0" + "SunVideoLowerBrightness\0" + "SunVideoRaiseBrightness\0" + "Super_L\0" + "Super_R\0" + "Sys_Req\0" + "System\0" + "T\0" + "t\0" + "Tab\0" + "Tabovedot\0" + "tabovedot\0" + "Tcaron\0" + "tcaron\0" + "Tcedilla\0" + "tcedilla\0" + "telephone\0" + "telephonerecorder\0" + "Terminate_Server\0" + "Thai_baht\0" + "Thai_bobaimai\0" + "Thai_chochan\0" + "Thai_chochang\0" + "Thai_choching\0" + "Thai_chochoe\0" + "Thai_dochada\0" + "Thai_dodek\0" + "Thai_fofa\0" + "Thai_fofan\0" + "Thai_hohip\0" + "Thai_honokhuk\0" + "Thai_khokhai\0" + "Thai_khokhon\0" + "Thai_khokhuat\0" + "Thai_khokhwai\0" + "Thai_khorakhang\0" + "Thai_kokai\0" + "Thai_lakkhangyao\0" + "Thai_lekchet\0" + "Thai_lekha\0" + "Thai_lekhok\0" + "Thai_lekkao\0" + "Thai_leknung\0" + "Thai_lekpaet\0" + "Thai_leksam\0" + "Thai_leksi\0" + "Thai_leksong\0" + "Thai_leksun\0" + "Thai_lochula\0" + "Thai_loling\0" + "Thai_lu\0" + "Thai_maichattawa\0" + "Thai_maiek\0" + "Thai_maihanakat\0" + "Thai_maihanakat_maitho\0" + "Thai_maitaikhu\0" + "Thai_maitho\0" + "Thai_maitri\0" + "Thai_maiyamok\0" + "Thai_moma\0" + "Thai_ngongu\0" + "Thai_nikhahit\0" + "Thai_nonen\0" + "Thai_nonu\0" + "Thai_oang\0" + "Thai_paiyannoi\0" + "Thai_phinthu\0" + "Thai_phophan\0" + "Thai_phophung\0" + "Thai_phosamphao\0" + "Thai_popla\0" + "Thai_rorua\0" + "Thai_ru\0" + "Thai_saraa\0" + "Thai_saraaa\0" + "Thai_saraae\0" + "Thai_saraaimaimalai\0" + "Thai_saraaimaimuan\0" + "Thai_saraam\0" + "Thai_sarae\0" + "Thai_sarai\0" + "Thai_saraii\0" + "Thai_sarao\0" + "Thai_sarau\0" + "Thai_saraue\0" + "Thai_sarauee\0" + "Thai_sarauu\0" + "Thai_sorusi\0" + "Thai_sosala\0" + "Thai_soso\0" + "Thai_sosua\0" + "Thai_thanthakhat\0" + "Thai_thonangmontho\0" + "Thai_thophuthao\0" + "Thai_thothahan\0" + "Thai_thothan\0" + "Thai_thothong\0" + "Thai_thothung\0" + "Thai_topatak\0" + "Thai_totao\0" + "Thai_wowaen\0" + "Thai_yoyak\0" + "Thai_yoying\0" + "therefore\0" + "thinspace\0" + "THORN\0" + "Thorn\0" + "thorn\0" + "threeeighths\0" + "threefifths\0" + "threequarters\0" + "threesubscript\0" + "threesuperior\0" + "tintegral\0" + "topintegral\0" + "topleftparens\0" + "topleftradical\0" + "topleftsqbracket\0" + "topleftsummation\0" + "toprightparens\0" + "toprightsqbracket\0" + "toprightsummation\0" + "topt\0" + "topvertsummationconnector\0" + "Touroku\0" + "trademark\0" + "trademarkincircle\0" + "Tslash\0" + "tslash\0" + "twofifths\0" + "twosubscript\0" + "twosuperior\0" + "twothirds\0" + "U\0" + "u\0" + "Uacute\0" + "uacute\0" + "Ubelowdot\0" + "ubelowdot\0" + "Ubreve\0" + "ubreve\0" + "Ucircumflex\0" + "ucircumflex\0" + "Udiaeresis\0" + "udiaeresis\0" + "Udoubleacute\0" + "udoubleacute\0" + "Ugrave\0" + "ugrave\0" + "Uhook\0" + "uhook\0" + "Uhorn\0" + "uhorn\0" + "Uhornacute\0" + "uhornacute\0" + "Uhornbelowdot\0" + "uhornbelowdot\0" + "Uhorngrave\0" + "uhorngrave\0" + "Uhornhook\0" + "uhornhook\0" + "Uhorntilde\0" + "uhorntilde\0" + "Ukrainian_ghe_with_upturn\0" + "Ukrainian_GHE_WITH_UPTURN\0" + "Ukrainian_i\0" + "Ukrainian_I\0" + "Ukrainian_ie\0" + "Ukrainian_IE\0" + "Ukrainian_yi\0" + "Ukrainian_YI\0" + "Ukranian_i\0" + "Ukranian_I\0" + "Ukranian_je\0" + "Ukranian_JE\0" + "Ukranian_yi\0" + "Ukranian_YI\0" + "Umacron\0" + "umacron\0" + "underbar\0" + "underscore\0" + "Undo\0" + "union\0" + "Uogonek\0" + "uogonek\0" + "Up\0" + "uparrow\0" + "upcaret\0" + "upleftcorner\0" + "uprightcorner\0" + "upshoe\0" + "upstile\0" + "uptack\0" + "Uring\0" + "uring\0" + "User\0" + "Utilde\0" + "utilde\0" + "V\0" + "v\0" + "variation\0" + "vertbar\0" + "vertconnector\0" + "voicedsound\0" + "VoidSymbol\0" + "vt\0" + "W\0" + "w\0" + "Wacute\0" + "wacute\0" + "Wcircumflex\0" + "wcircumflex\0" + "Wdiaeresis\0" + "wdiaeresis\0" + "Wgrave\0" + "wgrave\0" + "WonSign\0" + "X\0" + "x\0" + "Xabovedot\0" + "xabovedot\0" + "XF86AddFavorite\0" + "XF86ApplicationLeft\0" + "XF86ApplicationRight\0" + "XF86AudioCycleTrack\0" + "XF86AudioForward\0" + "XF86AudioLowerVolume\0" + "XF86AudioMedia\0" + "XF86AudioMicMute\0" + "XF86AudioMute\0" + "XF86AudioNext\0" + "XF86AudioPause\0" + "XF86AudioPlay\0" + "XF86AudioPrev\0" + "XF86AudioRaiseVolume\0" + "XF86AudioRandomPlay\0" + "XF86AudioRecord\0" + "XF86AudioRepeat\0" + "XF86AudioRewind\0" + "XF86AudioStop\0" + "XF86Away\0" + "XF86Back\0" + "XF86BackForward\0" + "XF86Battery\0" + "XF86Blue\0" + "XF86Bluetooth\0" + "XF86Book\0" + "XF86BrightnessAdjust\0" + "XF86Calculater\0" + "XF86Calculator\0" + "XF86Calendar\0" + "XF86CD\0" + "XF86Clear\0" + "XF86ClearGrab\0" + "XF86Close\0" + "XF86Community\0" + "XF86ContrastAdjust\0" + "XF86Copy\0" + "XF86Cut\0" + "XF86CycleAngle\0" + "XF86Display\0" + "XF86Documents\0" + "XF86DOS\0" + "XF86Eject\0" + "XF86Excel\0" + "XF86Explorer\0" + "XF86Favorites\0" + "XF86Finance\0" + "XF86Forward\0" + "XF86FrameBack\0" + "XF86FrameForward\0" + "XF86Game\0" + "XF86Go\0" + "XF86Green\0" + "XF86Hibernate\0" + "XF86History\0" + "XF86HomePage\0" + "XF86HotLinks\0" + "XF86iTouch\0" + "XF86KbdBrightnessDown\0" + "XF86KbdBrightnessUp\0" + "XF86KbdLightOnOff\0" + "XF86Launch0\0" + "XF86Launch1\0" + "XF86Launch2\0" + "XF86Launch3\0" + "XF86Launch4\0" + "XF86Launch5\0" + "XF86Launch6\0" + "XF86Launch7\0" + "XF86Launch8\0" + "XF86Launch9\0" + "XF86LaunchA\0" + "XF86LaunchB\0" + "XF86LaunchC\0" + "XF86LaunchD\0" + "XF86LaunchE\0" + "XF86LaunchF\0" + "XF86LightBulb\0" + "XF86LogGrabInfo\0" + "XF86LogOff\0" + "XF86LogWindowTree\0" + "XF86Mail\0" + "XF86MailForward\0" + "XF86Market\0" + "XF86Meeting\0" + "XF86Memo\0" + "XF86MenuKB\0" + "XF86MenuPB\0" + "XF86Messenger\0" + "XF86ModeLock\0" + "XF86MonBrightnessDown\0" + "XF86MonBrightnessUp\0" + "XF86Music\0" + "XF86MyComputer\0" + "XF86MySites\0" + "XF86New\0" + "XF86News\0" + "XF86Next_VMode\0" + "XF86OfficeHome\0" + "XF86Open\0" + "XF86OpenURL\0" + "XF86Option\0" + "XF86Paste\0" + "XF86Phone\0" + "XF86Pictures\0" + "XF86PowerDown\0" + "XF86PowerOff\0" + "XF86Prev_VMode\0" + "XF86Q\0" + "XF86Red\0" + "XF86Refresh\0" + "XF86Reload\0" + "XF86Reply\0" + "XF86RockerDown\0" + "XF86RockerEnter\0" + "XF86RockerUp\0" + "XF86RotateWindows\0" + "XF86RotationKB\0" + "XF86RotationPB\0" + "XF86Save\0" + "XF86ScreenSaver\0" + "XF86ScrollClick\0" + "XF86ScrollDown\0" + "XF86ScrollUp\0" + "XF86Search\0" + "XF86Select\0" + "XF86Send\0" + "XF86Shop\0" + "XF86Sleep\0" + "XF86Spell\0" + "XF86SplitScreen\0" + "XF86Standby\0" + "XF86Start\0" + "XF86Stop\0" + "XF86Subtitle\0" + "XF86Support\0" + "XF86Suspend\0" + "XF86Switch_VT_1\0" + "XF86Switch_VT_10\0" + "XF86Switch_VT_11\0" + "XF86Switch_VT_12\0" + "XF86Switch_VT_2\0" + "XF86Switch_VT_3\0" + "XF86Switch_VT_4\0" + "XF86Switch_VT_5\0" + "XF86Switch_VT_6\0" + "XF86Switch_VT_7\0" + "XF86Switch_VT_8\0" + "XF86Switch_VT_9\0" + "XF86TaskPane\0" + "XF86Terminal\0" + "XF86Time\0" + "XF86ToDoList\0" + "XF86Tools\0" + "XF86TopMenu\0" + "XF86TouchpadOff\0" + "XF86TouchpadOn\0" + "XF86TouchpadToggle\0" + "XF86Travel\0" + "XF86Ungrab\0" + "XF86User1KB\0" + "XF86User2KB\0" + "XF86UserPB\0" + "XF86UWB\0" + "XF86VendorHome\0" + "XF86Video\0" + "XF86View\0" + "XF86WakeUp\0" + "XF86WebCam\0" + "XF86WheelButton\0" + "XF86WLAN\0" + "XF86Word\0" + "XF86WWW\0" + "XF86Xfer\0" + "XF86Yellow\0" + "XF86ZoomIn\0" + "XF86ZoomOut\0" + "Y\0" + "y\0" + "Yacute\0" + "yacute\0" + "Ybelowdot\0" + "ybelowdot\0" + "Ycircumflex\0" + "ycircumflex\0" + "ydiaeresis\0" + "Ydiaeresis\0" + "yen\0" + "Ygrave\0" + "ygrave\0" + "Yhook\0" + "yhook\0" + "Ytilde\0" + "ytilde\0" + "Z\0" + "z\0" + "Zabovedot\0" + "zabovedot\0" + "Zacute\0" + "zacute\0" + "Zcaron\0" + "zcaron\0" + "Zen_Koho\0" + "Zenkaku\0" + "Zenkaku_Hankaku\0" + "zerosubscript\0" + "zerosuperior\0" + "Zstroke\0" + "zstroke\0" +; + +#pragma GCC diagnostic pop + +typedef struct +{ + uint32_t keysym; + uint32_t offset; +} ecore_win32_name_keysym; + +static const ecore_win32_name_keysym _ecore_win32_name_to_keysym[] = { + { 0x00000000, 20091 }, /* NoSymbol */ + { 0x00000020, 23803 }, /* space */ + { 0x00000021, 12099 }, /* exclam */ + { 0x00000022, 22187 }, /* quotedbl */ + { 0x00000023, 20178 }, /* numbersign */ + { 0x00000024, 11251 }, /* dollar */ + { 0x00000025, 21487 }, /* percent */ + { 0x00000026, 908 }, /* ampersand */ + { 0x00000027, 934 }, /* apostrophe */ + { 0x00000028, 21425 }, /* parenleft */ + { 0x00000029, 21435 }, /* parenright */ + { 0x0000002a, 3283 }, /* asterisk */ + { 0x0000002b, 21557 }, /* plus */ + { 0x0000002c, 8680 }, /* comma */ + { 0x0000002d, 19733 }, /* minus */ + { 0x0000002e, 21495 }, /* period */ + { 0x0000002f, 23768 }, /* slash */ + { 0x00000030, 0 }, /* 0 */ + { 0x00000031, 2 }, /* 1 */ + { 0x00000032, 4 }, /* 2 */ + { 0x00000033, 6 }, /* 3 */ + { 0x00000034, 386 }, /* 4 */ + { 0x00000035, 388 }, /* 5 */ + { 0x00000036, 390 }, /* 6 */ + { 0x00000037, 392 }, /* 7 */ + { 0x00000038, 394 }, /* 8 */ + { 0x00000039, 396 }, /* 9 */ + { 0x0000003a, 8664 }, /* colon */ + { 0x0000003b, 22734 }, /* semicolon */ + { 0x0000003c, 19412 }, /* less */ + { 0x0000003d, 12051 }, /* equal */ + { 0x0000003e, 13272 }, /* greater */ + { 0x0000003f, 22165 }, /* question */ + { 0x00000040, 3292 }, /* at */ + { 0x00000041, 398 }, /* A */ + { 0x00000042, 3328 }, /* B */ + { 0x00000043, 8439 }, /* C */ + { 0x00000044, 10320 }, /* D */ + { 0x00000045, 11424 }, /* E */ + { 0x00000046, 12155 }, /* F */ + { 0x00000047, 12665 }, /* G */ + { 0x00000048, 14378 }, /* H */ + { 0x00000049, 17069 }, /* I */ + { 0x0000004a, 18114 }, /* J */ + { 0x0000004b, 18146 }, /* K */ + { 0x0000004c, 19112 }, /* L */ + { 0x0000004d, 19533 }, /* M */ + { 0x0000004e, 19943 }, /* N */ + { 0x0000004f, 20200 }, /* O */ + { 0x00000050, 21373 }, /* P */ + { 0x00000051, 22156 }, /* Q */ + { 0x00000052, 22217 }, /* R */ + { 0x00000053, 22579 }, /* S */ + { 0x00000054, 24294 }, /* T */ + { 0x00000055, 25847 }, /* U */ + { 0x00000056, 26483 }, /* V */ + { 0x00000057, 26545 }, /* W */ + { 0x00000058, 26631 }, /* X */ + { 0x00000059, 28972 }, /* Y */ + { 0x0000005a, 29100 }, /* Z */ + { 0x0000005b, 3603 }, /* bracketleft */ + { 0x0000005c, 3352 }, /* backslash */ + { 0x0000005d, 3615 }, /* bracketright */ + { 0x0000005e, 3260 }, /* asciicircum */ + { 0x0000005f, 26346 }, /* underscore */ + { 0x00000060, 13266 }, /* grave */ + { 0x00000061, 400 }, /* a */ + { 0x00000062, 3330 }, /* b */ + { 0x00000063, 8441 }, /* c */ + { 0x00000064, 10322 }, /* d */ + { 0x00000065, 11426 }, /* e */ + { 0x00000066, 12157 }, /* f */ + { 0x00000067, 12667 }, /* g */ + { 0x00000068, 14380 }, /* h */ + { 0x00000069, 17071 }, /* i */ + { 0x0000006a, 18116 }, /* j */ + { 0x0000006b, 18148 }, /* k */ + { 0x0000006c, 19114 }, /* l */ + { 0x0000006d, 19535 }, /* m */ + { 0x0000006e, 19945 }, /* n */ + { 0x0000006f, 20202 }, /* o */ + { 0x00000070, 21375 }, /* p */ + { 0x00000071, 22158 }, /* q */ + { 0x00000072, 22219 }, /* r */ + { 0x00000073, 22581 }, /* s */ + { 0x00000074, 24296 }, /* t */ + { 0x00000075, 25849 }, /* u */ + { 0x00000076, 26485 }, /* v */ + { 0x00000077, 26547 }, /* w */ + { 0x00000078, 26633 }, /* x */ + { 0x00000079, 28974 }, /* y */ + { 0x0000007a, 29102 }, /* z */ + { 0x0000007b, 3582 }, /* braceleft */ + { 0x0000007c, 3392 }, /* bar */ + { 0x0000007d, 3592 }, /* braceright */ + { 0x0000007e, 3272 }, /* asciitilde */ + { 0x000000a0, 20078 }, /* nobreakspace */ + { 0x000000a1, 12106 }, /* exclamdown */ + { 0x000000a2, 8589 }, /* cent */ + { 0x000000a3, 23827 }, /* sterling */ + { 0x000000a4, 8766 }, /* currency */ + { 0x000000a5, 29056 }, /* yen */ + { 0x000000a6, 8389 }, /* brokenbar */ + { 0x000000a7, 22719 }, /* section */ + { 0x000000a8, 11203 }, /* diaeresis */ + { 0x000000a9, 8717 }, /* copyright */ + { 0x000000aa, 20852 }, /* ordfeminine */ + { 0x000000ab, 14349 }, /* guillemotleft */ + { 0x000000ac, 20147 }, /* notsign */ + { 0x000000ad, 17062 }, /* hyphen */ + { 0x000000ae, 22331 }, /* registered */ + { 0x000000af, 19641 }, /* macron */ + { 0x000000b0, 11153 }, /* degree */ + { 0x000000b1, 21562 }, /* plusminus */ + { 0x000000b2, 25825 }, /* twosuperior */ + { 0x000000b3, 25571 }, /* threesuperior */ + { 0x000000b4, 820 }, /* acute */ + { 0x000000b5, 19799 }, /* mu */ + { 0x000000b6, 21415 }, /* paragraph */ + { 0x000000b7, 21502 }, /* periodcentered */ + { 0x000000b8, 8581 }, /* cedilla */ + { 0x000000b9, 20755 }, /* onesuperior */ + { 0x000000ba, 19688 }, /* masculine */ + { 0x000000bb, 14363 }, /* guillemotright */ + { 0x000000bc, 20722 }, /* onequarter */ + { 0x000000bd, 20714 }, /* onehalf */ + { 0x000000be, 25542 }, /* threequarters */ + { 0x000000bf, 22174 }, /* questiondown */ + { 0x000000c0, 854 }, /* Agrave */ + { 0x000000c1, 402 }, /* Aacute */ + { 0x000000c2, 622 }, /* Acircumflex */ + { 0x000000c3, 3295 }, /* Atilde */ + { 0x000000c4, 826 }, /* Adiaeresis */ + { 0x000000c5, 2036 }, /* Aring */ + { 0x000000c6, 848 }, /* AE */ + { 0x000000c7, 8539 }, /* Ccedilla */ + { 0x000000c8, 11724 }, /* Egrave */ + { 0x000000c9, 11448 }, /* Eacute */ + { 0x000000ca, 11496 }, /* Ecircumflex */ + { 0x000000cb, 11702 }, /* Ediaeresis */ + { 0x000000cc, 17205 }, /* Igrave */ + { 0x000000cd, 17083 }, /* Iacute */ + { 0x000000ce, 17131 }, /* Icircumflex */ + { 0x000000cf, 17165 }, /* Idiaeresis */ + { 0x000000d0, 12064 }, /* ETH */ + { 0x000000d1, 20155 }, /* Ntilde */ + { 0x000000d2, 20527 }, /* Ograve */ + { 0x000000d3, 20204 }, /* Oacute */ + { 0x000000d4, 20268 }, /* Ocircumflex */ + { 0x000000d5, 21310 }, /* Otilde */ + { 0x000000d6, 20466 }, /* Odiaeresis */ + { 0x000000d7, 19839 }, /* multiply */ + { 0x000000d8, 21296 }, /* Oslash */ + { 0x000000d9, 25971 }, /* Ugrave */ + { 0x000000da, 25851 }, /* Uacute */ + { 0x000000db, 25899 }, /* Ucircumflex */ + { 0x000000dc, 25923 }, /* Udiaeresis */ + { 0x000000dd, 28976 }, /* Yacute */ + { 0x000000de, 25499 }, /* THORN */ + { 0x000000df, 23820 }, /* ssharp */ + { 0x000000e0, 861 }, /* agrave */ + { 0x000000e1, 409 }, /* aacute */ + { 0x000000e2, 634 }, /* acircumflex */ + { 0x000000e3, 3302 }, /* atilde */ + { 0x000000e4, 837 }, /* adiaeresis */ + { 0x000000e5, 2042 }, /* aring */ + { 0x000000e6, 851 }, /* ae */ + { 0x000000e7, 8548 }, /* ccedilla */ + { 0x000000e8, 11731 }, /* egrave */ + { 0x000000e9, 11455 }, /* eacute */ + { 0x000000ea, 11508 }, /* ecircumflex */ + { 0x000000eb, 11713 }, /* ediaeresis */ + { 0x000000ec, 17212 }, /* igrave */ + { 0x000000ed, 17090 }, /* iacute */ + { 0x000000ee, 17143 }, /* icircumflex */ + { 0x000000ef, 17176 }, /* idiaeresis */ + { 0x000000f0, 12072 }, /* eth */ + { 0x000000f1, 20162 }, /* ntilde */ + { 0x000000f2, 20534 }, /* ograve */ + { 0x000000f3, 20211 }, /* oacute */ + { 0x000000f4, 20280 }, /* ocircumflex */ + { 0x000000f5, 21317 }, /* otilde */ + { 0x000000f6, 20477 }, /* odiaeresis */ + { 0x000000f7, 11242 }, /* division */ + { 0x000000f8, 21303 }, /* oslash */ + { 0x000000f9, 25978 }, /* ugrave */ + { 0x000000fa, 25858 }, /* uacute */ + { 0x000000fb, 25911 }, /* ucircumflex */ + { 0x000000fc, 25934 }, /* udiaeresis */ + { 0x000000fd, 28983 }, /* yacute */ + { 0x000000fe, 25511 }, /* thorn */ + { 0x000000ff, 29034 }, /* ydiaeresis */ + { 0x000001a1, 918 }, /* Aogonek */ + { 0x000001a2, 8383 }, /* breve */ + { 0x000001a3, 19517 }, /* Lstroke */ + { 0x000001a5, 19212 }, /* Lcaron */ + { 0x000001a6, 22603 }, /* Sacute */ + { 0x000001a9, 22617 }, /* Scaron */ + { 0x000001aa, 22631 }, /* Scedilla */ + { 0x000001ab, 24322 }, /* Tcaron */ + { 0x000001ac, 29124 }, /* Zacute */ + { 0x000001ae, 29138 }, /* Zcaron */ + { 0x000001af, 29104 }, /* Zabovedot */ + { 0x000001b1, 926 }, /* aogonek */ + { 0x000001b2, 20520 }, /* ogonek */ + { 0x000001b3, 19525 }, /* lstroke */ + { 0x000001b5, 19219 }, /* lcaron */ + { 0x000001b6, 22610 }, /* sacute */ + { 0x000001b7, 8519 }, /* caron */ + { 0x000001b9, 22624 }, /* scaron */ + { 0x000001ba, 22640 }, /* scedilla */ + { 0x000001bb, 24329 }, /* tcaron */ + { 0x000001bc, 29131 }, /* zacute */ + { 0x000001bd, 11283 }, /* doubleacute */ + { 0x000001be, 29145 }, /* zcaron */ + { 0x000001bf, 29114 }, /* zabovedot */ + { 0x000001c0, 22272 }, /* Racute */ + { 0x000001c3, 445 }, /* Abreve */ + { 0x000001c5, 19147 }, /* Lacute */ + { 0x000001c6, 8475 }, /* Cacute */ + { 0x000001c8, 8525 }, /* Ccaron */ + { 0x000001ca, 12035 }, /* Eogonek */ + { 0x000001cc, 11482 }, /* Ecaron */ + { 0x000001cf, 10365 }, /* Dcaron */ + { 0x000001d0, 11401 }, /* Dstroke */ + { 0x000001d1, 19953 }, /* Nacute */ + { 0x000001d2, 19977 }, /* Ncaron */ + { 0x000001d5, 20488 }, /* Odoubleacute */ + { 0x000001d8, 22294 }, /* Rcaron */ + { 0x000001d9, 26452 }, /* Uring */ + { 0x000001db, 25945 }, /* Udoubleacute */ + { 0x000001de, 24336 }, /* Tcedilla */ + { 0x000001e0, 22279 }, /* racute */ + { 0x000001e3, 452 }, /* abreve */ + { 0x000001e5, 19154 }, /* lacute */ + { 0x000001e6, 8482 }, /* cacute */ + { 0x000001e8, 8532 }, /* ccaron */ + { 0x000001ea, 12043 }, /* eogonek */ + { 0x000001ec, 11489 }, /* ecaron */ + { 0x000001ef, 10372 }, /* dcaron */ + { 0x000001f0, 11409 }, /* dstroke */ + { 0x000001f1, 19960 }, /* nacute */ + { 0x000001f2, 19984 }, /* ncaron */ + { 0x000001f5, 20501 }, /* odoubleacute */ + { 0x000001f8, 22301 }, /* rcaron */ + { 0x000001f9, 26458 }, /* uring */ + { 0x000001fb, 25958 }, /* udoubleacute */ + { 0x000001fe, 24345 }, /* tcedilla */ + { 0x000001ff, 436 }, /* abovedot */ + { 0x000002a1, 17027 }, /* Hstroke */ + { 0x000002a6, 16056 }, /* Hcircumflex */ + { 0x000002a9, 17073 }, /* Iabovedot */ + { 0x000002ab, 12689 }, /* Gbreve */ + { 0x000002ac, 18118 }, /* Jcircumflex */ + { 0x000002b1, 17035 }, /* hstroke */ + { 0x000002b6, 16068 }, /* hcircumflex */ + { 0x000002b9, 17187 }, /* idotless */ + { 0x000002bb, 12696 }, /* gbreve */ + { 0x000002bc, 18130 }, /* jcircumflex */ + { 0x000002c5, 8455 }, /* Cabovedot */ + { 0x000002c6, 8557 }, /* Ccircumflex */ + { 0x000002d5, 12669 }, /* Gabovedot */ + { 0x000002d8, 12735 }, /* Gcircumflex */ + { 0x000002dd, 25885 }, /* Ubreve */ + { 0x000002de, 22661 }, /* Scircumflex */ + { 0x000002e5, 8465 }, /* cabovedot */ + { 0x000002e6, 8569 }, /* ccircumflex */ + { 0x000002f5, 12679 }, /* gabovedot */ + { 0x000002f8, 12747 }, /* gcircumflex */ + { 0x000002fd, 25892 }, /* ubreve */ + { 0x000002fe, 22673 }, /* scircumflex */ + { 0x000003a2, 19108 }, /* kra */ + { 0x000003a3, 22308 }, /* Rcedilla */ + { 0x000003a5, 18100 }, /* Itilde */ + { 0x000003a6, 19226 }, /* Lcedilla */ + { 0x000003aa, 11839 }, /* Emacron */ + { 0x000003ab, 12717 }, /* Gcedilla */ + { 0x000003ac, 25788 }, /* Tslash */ + { 0x000003b3, 22317 }, /* rcedilla */ + { 0x000003b5, 18107 }, /* itilde */ + { 0x000003b6, 19235 }, /* lcedilla */ + { 0x000003ba, 11847 }, /* emacron */ + { 0x000003bb, 12726 }, /* gcedilla */ + { 0x000003bc, 25795 }, /* tslash */ + { 0x000003bd, 11983 }, /* ENG */ + { 0x000003bf, 11987 }, /* eng */ + { 0x000003c0, 892 }, /* Amacron */ + { 0x000003c7, 17338 }, /* Iogonek */ + { 0x000003cc, 11428 }, /* Eabovedot */ + { 0x000003cf, 17231 }, /* Imacron */ + { 0x000003d1, 19991 }, /* Ncedilla */ + { 0x000003d2, 20679 }, /* Omacron */ + { 0x000003d3, 18779 }, /* Kcedilla */ + { 0x000003d9, 26368 }, /* Uogonek */ + { 0x000003dd, 26469 }, /* Utilde */ + { 0x000003de, 26321 }, /* Umacron */ + { 0x000003e0, 900 }, /* amacron */ + { 0x000003e7, 17346 }, /* iogonek */ + { 0x000003ec, 11438 }, /* eabovedot */ + { 0x000003ef, 17239 }, /* imacron */ + { 0x000003f1, 20000 }, /* ncedilla */ + { 0x000003f2, 20687 }, /* omacron */ + { 0x000003f3, 18788 }, /* kcedilla */ + { 0x000003f9, 26376 }, /* uogonek */ + { 0x000003fd, 26476 }, /* utilde */ + { 0x000003fe, 26329 }, /* umacron */ + { 0x0000047e, 21364 }, /* overline */ + { 0x000004a1, 18243 }, /* kana_fullstop */ + { 0x000004a2, 18477 }, /* kana_openingbracket */ + { 0x000004a3, 18173 }, /* kana_closingbracket */ + { 0x000004a4, 18193 }, /* kana_comma */ + { 0x000004a5, 18204 }, /* kana_conjunctive */ + { 0x000004a6, 18689 }, /* kana_WO */ + { 0x000004a7, 18150 }, /* kana_a */ + { 0x000004a8, 18297 }, /* kana_i */ + { 0x000004a9, 18667 }, /* kana_u */ + { 0x000004aa, 18221 }, /* kana_e */ + { 0x000004ab, 18463 }, /* kana_o */ + { 0x000004ac, 18697 }, /* kana_ya */ + { 0x000004ad, 18729 }, /* kana_yu */ + { 0x000004ae, 18713 }, /* kana_yo */ + { 0x000004af, 18633 }, /* kana_tsu */ + { 0x000004b0, 22130 }, /* prolongedsound */ + { 0x000004b1, 18157 }, /* kana_A */ + { 0x000004b2, 18304 }, /* kana_I */ + { 0x000004b3, 18674 }, /* kana_U */ + { 0x000004b4, 18228 }, /* kana_E */ + { 0x000004b5, 18470 }, /* kana_O */ + { 0x000004b6, 18311 }, /* kana_KA */ + { 0x000004b7, 18327 }, /* kana_KI */ + { 0x000004b8, 18343 }, /* kana_KU */ + { 0x000004b9, 18319 }, /* kana_KE */ + { 0x000004ba, 18335 }, /* kana_KO */ + { 0x000004bb, 18537 }, /* kana_SA */ + { 0x000004bc, 18553 }, /* kana_SHI */ + { 0x000004bd, 18581 }, /* kana_SU */ + { 0x000004be, 18545 }, /* kana_SE */ + { 0x000004bf, 18573 }, /* kana_SO */ + { 0x000004c0, 18601 }, /* kana_TA */ + { 0x000004c1, 18164 }, /* kana_CHI */ + { 0x000004c2, 18642 }, /* kana_TSU */ + { 0x000004c3, 18609 }, /* kana_TE */ + { 0x000004c4, 18625 }, /* kana_TO */ + { 0x000004c5, 18423 }, /* kana_NA */ + { 0x000004c6, 18439 }, /* kana_NI */ + { 0x000004c7, 18455 }, /* kana_NU */ + { 0x000004c8, 18431 }, /* kana_NE */ + { 0x000004c9, 18447 }, /* kana_NO */ + { 0x000004ca, 18257 }, /* kana_HA */ + { 0x000004cb, 18273 }, /* kana_HI */ + { 0x000004cc, 18235 }, /* kana_FU */ + { 0x000004cd, 18265 }, /* kana_HE */ + { 0x000004ce, 18281 }, /* kana_HO */ + { 0x000004cf, 18361 }, /* kana_MA */ + { 0x000004d0, 18377 }, /* kana_MI */ + { 0x000004d1, 18408 }, /* kana_MU */ + { 0x000004d2, 18369 }, /* kana_ME */ + { 0x000004d3, 18400 }, /* kana_MO */ + { 0x000004d4, 18705 }, /* kana_YA */ + { 0x000004d5, 18737 }, /* kana_YU */ + { 0x000004d6, 18721 }, /* kana_YO */ + { 0x000004d7, 18497 }, /* kana_RA */ + { 0x000004d8, 18513 }, /* kana_RI */ + { 0x000004d9, 18529 }, /* kana_RU */ + { 0x000004da, 18505 }, /* kana_RE */ + { 0x000004db, 18521 }, /* kana_RO */ + { 0x000004dc, 18681 }, /* kana_WA */ + { 0x000004dd, 18416 }, /* kana_N */ + { 0x000004de, 26519 }, /* voicedsound */ + { 0x000004df, 22744 }, /* semivoicedsound */ + { 0x000005ac, 1109 }, /* Arabic_comma */ + { 0x000005bb, 1764 }, /* Arabic_semicolon */ + { 0x000005bf, 1698 }, /* Arabic_question_mark */ + { 0x000005c1, 1303 }, /* Arabic_hamza */ + { 0x000005c2, 1599 }, /* Arabic_maddaonalef */ + { 0x000005c3, 1354 }, /* Arabic_hamzaonalef */ + { 0x000005c4, 1373 }, /* Arabic_hamzaonwaw */ + { 0x000005c5, 1409 }, /* Arabic_hamzaunderalef */ + { 0x000005c6, 1391 }, /* Arabic_hamzaonyeh */ + { 0x000005c7, 1067 }, /* Arabic_alef */ + { 0x000005c8, 1098 }, /* Arabic_beh */ + { 0x000005c9, 1909 }, /* Arabic_tehmarbuta */ + { 0x000005ca, 1898 }, /* Arabic_teh */ + { 0x000005cb, 1939 }, /* Arabic_theh */ + { 0x000005cc, 1481 }, /* Arabic_jeem */ + { 0x000005cd, 1292 }, /* Arabic_hah */ + { 0x000005ce, 1557 }, /* Arabic_khah */ + { 0x000005cf, 1133 }, /* Arabic_dal */ + { 0x000005d0, 1927 }, /* Arabic_thal */ + { 0x000005d1, 1719 }, /* Arabic_ra */ + { 0x000005d2, 2024 }, /* Arabic_zain */ + { 0x000005d3, 1752 }, /* Arabic_seen */ + { 0x000005d4, 1795 }, /* Arabic_sheen */ + { 0x000005d5, 1741 }, /* Arabic_sad */ + { 0x000005d6, 1122 }, /* Arabic_dad */ + { 0x000005d7, 1859 }, /* Arabic_tah */ + { 0x000005d8, 2013 }, /* Arabic_zah */ + { 0x000005d9, 1056 }, /* Arabic_ain */ + { 0x000005da, 1269 }, /* Arabic_ghain */ + { 0x000005e0, 1870 }, /* Arabic_tatweel */ + { 0x000005e1, 1231 }, /* Arabic_feh */ + { 0x000005e2, 1687 }, /* Arabic_qaf */ + { 0x000005e3, 1504 }, /* Arabic_kaf */ + { 0x000005e4, 1569 }, /* Arabic_lam */ + { 0x000005e5, 1618 }, /* Arabic_meem */ + { 0x000005e6, 1630 }, /* Arabic_noon */ + { 0x000005e7, 1282 }, /* Arabic_ha */ + { 0x000005e8, 1974 }, /* Arabic_waw */ + { 0x000005e9, 1079 }, /* Arabic_alefmaksura */ + { 0x000005ea, 1985 }, /* Arabic_yeh */ + { 0x000005eb, 1215 }, /* Arabic_fathatan */ + { 0x000005ec, 1157 }, /* Arabic_dammatan */ + { 0x000005ed, 1528 }, /* Arabic_kasratan */ + { 0x000005ee, 1202 }, /* Arabic_fatha */ + { 0x000005ef, 1144 }, /* Arabic_damma */ + { 0x000005f0, 1515 }, /* Arabic_kasra */ + { 0x000005f1, 1781 }, /* Arabic_shadda */ + { 0x000005f2, 1808 }, /* Arabic_sukun */ + { 0x000006a1, 22760 }, /* Serbian_dje */ + { 0x000006a2, 19585 }, /* Macedonia_gje */ + { 0x000006a3, 9456 }, /* Cyrillic_io */ + { 0x000006a4, 26199 }, /* Ukrainian_ie */ + { 0x000006a5, 19557 }, /* Macedonia_dse */ + { 0x000006a6, 26175 }, /* Ukrainian_i */ + { 0x000006a7, 26225 }, /* Ukrainian_yi */ + { 0x000006a8, 9480 }, /* Cyrillic_je */ + { 0x000006a9, 9618 }, /* Cyrillic_lje */ + { 0x000006aa, 9644 }, /* Cyrillic_nje */ + { 0x000006ab, 22878 }, /* Serbian_tshe */ + { 0x000006ac, 19613 }, /* Macedonia_kje */ + { 0x000006ad, 26123 }, /* Ukrainian_ghe_with_upturn */ + { 0x000006ae, 8399 }, /* Byelorussian_shortu */ + { 0x000006af, 8972 }, /* Cyrillic_dzhe */ + { 0x000006b0, 20189 }, /* numerosign */ + { 0x000006b1, 22772 }, /* Serbian_DJE */ + { 0x000006b2, 19599 }, /* Macedonia_GJE */ + { 0x000006b3, 9468 }, /* Cyrillic_IO */ + { 0x000006b4, 26212 }, /* Ukrainian_IE */ + { 0x000006b5, 19571 }, /* Macedonia_DSE */ + { 0x000006b6, 26187 }, /* Ukrainian_I */ + { 0x000006b7, 26238 }, /* Ukrainian_YI */ + { 0x000006b8, 9492 }, /* Cyrillic_JE */ + { 0x000006b9, 9631 }, /* Cyrillic_LJE */ + { 0x000006ba, 9657 }, /* Cyrillic_NJE */ + { 0x000006bb, 22891 }, /* Serbian_TSHE */ + { 0x000006bc, 19627 }, /* Macedonia_KJE */ + { 0x000006bd, 26149 }, /* Ukrainian_GHE_WITH_UPTURN */ + { 0x000006be, 8419 }, /* Byelorussian_SHORTU */ + { 0x000006bf, 8986 }, /* Cyrillic_DZHE */ + { 0x000006c0, 10200 }, /* Cyrillic_yu */ + { 0x000006c1, 8782 }, /* Cyrillic_a */ + { 0x000006c2, 8804 }, /* Cyrillic_be */ + { 0x000006c3, 9952 }, /* Cyrillic_tse */ + { 0x000006c4, 8948 }, /* Cyrillic_de */ + { 0x000006c5, 9432 }, /* Cyrillic_ie */ + { 0x000006c6, 9022 }, /* Cyrillic_ef */ + { 0x000006c7, 9210 }, /* Cyrillic_ghe */ + { 0x000006c8, 9270 }, /* Cyrillic_ha */ + { 0x000006c9, 9374 }, /* Cyrillic_i */ + { 0x000006ca, 9860 }, /* Cyrillic_shorti */ + { 0x000006cb, 9504 }, /* Cyrillic_ka */ + { 0x000006cc, 9046 }, /* Cyrillic_el */ + { 0x000006cd, 9070 }, /* Cyrillic_em */ + { 0x000006ce, 9094 }, /* Cyrillic_en */ + { 0x000006cf, 9670 }, /* Cyrillic_o */ + { 0x000006d0, 9722 }, /* Cyrillic_pe */ + { 0x000006d1, 10148 }, /* Cyrillic_ya */ + { 0x000006d2, 9162 }, /* Cyrillic_er */ + { 0x000006d3, 9186 }, /* Cyrillic_es */ + { 0x000006d4, 9928 }, /* Cyrillic_te */ + { 0x000006d5, 9978 }, /* Cyrillic_u */ + { 0x000006d6, 10248 }, /* Cyrillic_zhe */ + { 0x000006d7, 10124 }, /* Cyrillic_ve */ + { 0x000006d8, 9892 }, /* Cyrillic_softsign */ + { 0x000006d9, 10172 }, /* Cyrillic_yeru */ + { 0x000006da, 10224 }, /* Cyrillic_ze */ + { 0x000006db, 9776 }, /* Cyrillic_sha */ + { 0x000006dc, 9000 }, /* Cyrillic_e */ + { 0x000006dd, 9802 }, /* Cyrillic_shcha */ + { 0x000006de, 8828 }, /* Cyrillic_che */ + { 0x000006df, 9338 }, /* Cyrillic_hardsign */ + { 0x000006e0, 10212 }, /* Cyrillic_YU */ + { 0x000006e1, 8793 }, /* Cyrillic_A */ + { 0x000006e2, 8816 }, /* Cyrillic_BE */ + { 0x000006e3, 9965 }, /* Cyrillic_TSE */ + { 0x000006e4, 8960 }, /* Cyrillic_DE */ + { 0x000006e5, 9444 }, /* Cyrillic_IE */ + { 0x000006e6, 9034 }, /* Cyrillic_EF */ + { 0x000006e7, 9223 }, /* Cyrillic_GHE */ + { 0x000006e8, 9282 }, /* Cyrillic_HA */ + { 0x000006e9, 9385 }, /* Cyrillic_I */ + { 0x000006ea, 9876 }, /* Cyrillic_SHORTI */ + { 0x000006eb, 9516 }, /* Cyrillic_KA */ + { 0x000006ec, 9058 }, /* Cyrillic_EL */ + { 0x000006ed, 9082 }, /* Cyrillic_EM */ + { 0x000006ee, 9106 }, /* Cyrillic_EN */ + { 0x000006ef, 9681 }, /* Cyrillic_O */ + { 0x000006f0, 9734 }, /* Cyrillic_PE */ + { 0x000006f1, 10160 }, /* Cyrillic_YA */ + { 0x000006f2, 9174 }, /* Cyrillic_ER */ + { 0x000006f3, 9198 }, /* Cyrillic_ES */ + { 0x000006f4, 9940 }, /* Cyrillic_TE */ + { 0x000006f5, 9989 }, /* Cyrillic_U */ + { 0x000006f6, 10261 }, /* Cyrillic_ZHE */ + { 0x000006f7, 10136 }, /* Cyrillic_VE */ + { 0x000006f8, 9910 }, /* Cyrillic_SOFTSIGN */ + { 0x000006f9, 10186 }, /* Cyrillic_YERU */ + { 0x000006fa, 10236 }, /* Cyrillic_ZE */ + { 0x000006fb, 9789 }, /* Cyrillic_SHA */ + { 0x000006fc, 9011 }, /* Cyrillic_E */ + { 0x000006fd, 9817 }, /* Cyrillic_SHCHA */ + { 0x000006fe, 8841 }, /* Cyrillic_CHE */ + { 0x000006ff, 9356 }, /* Cyrillic_HARDSIGN */ + { 0x000007a1, 13342 }, /* Greek_ALPHAaccent */ + { 0x000007a2, 13472 }, /* Greek_EPSILONaccent */ + { 0x000007a3, 13532 }, /* Greek_ETAaccent */ + { 0x000007a4, 13647 }, /* Greek_IOTAaccent */ + { 0x000007a5, 13726 }, /* Greek_IOTAdieresis */ + { 0x000007a7, 13962 }, /* Greek_OMICRONaccent */ + { 0x000007a8, 14189 }, /* Greek_UPSILONaccent */ + { 0x000007a9, 14257 }, /* Greek_UPSILONdieresis */ + { 0x000007ab, 13898 }, /* Greek_OMEGAaccent */ + { 0x000007ae, 13297 }, /* Greek_accentdieresis */ + { 0x000007af, 13610 }, /* Greek_horizbar */ + { 0x000007b1, 13360 }, /* Greek_alphaaccent */ + { 0x000007b2, 13492 }, /* Greek_epsilonaccent */ + { 0x000007b3, 13548 }, /* Greek_etaaccent */ + { 0x000007b4, 13664 }, /* Greek_iotaaccent */ + { 0x000007b5, 13745 }, /* Greek_iotadieresis */ + { 0x000007b6, 13681 }, /* Greek_iotaaccentdieresis */ + { 0x000007b7, 13982 }, /* Greek_omicronaccent */ + { 0x000007b8, 14209 }, /* Greek_upsilonaccent */ + { 0x000007b9, 14279 }, /* Greek_upsilondieresis */ + { 0x000007ba, 14229 }, /* Greek_upsilonaccentdieresis */ + { 0x000007bb, 13916 }, /* Greek_omegaaccent */ + { 0x000007c1, 13318 }, /* Greek_ALPHA */ + { 0x000007c2, 13378 }, /* Greek_BETA */ + { 0x000007c3, 13586 }, /* Greek_GAMMA */ + { 0x000007c4, 13420 }, /* Greek_DELTA */ + { 0x000007c5, 13444 }, /* Greek_EPSILON */ + { 0x000007c6, 14319 }, /* Greek_ZETA */ + { 0x000007c7, 13512 }, /* Greek_ETA */ + { 0x000007c8, 14137 }, /* Greek_THETA */ + { 0x000007c9, 13625 }, /* Greek_IOTA */ + { 0x000007ca, 13764 }, /* Greek_KAPPA */ + { 0x000007cb, 13814 }, /* Greek_LAMDA */ + { 0x000007cc, 13838 }, /* Greek_MU */ + { 0x000007cd, 13856 }, /* Greek_NU */ + { 0x000007ce, 14301 }, /* Greek_XI */ + { 0x000007cf, 13934 }, /* Greek_OMICRON */ + { 0x000007d0, 14022 }, /* Greek_PI */ + { 0x000007d1, 14060 }, /* Greek_RHO */ + { 0x000007d2, 14080 }, /* Greek_SIGMA */ + { 0x000007d4, 14117 }, /* Greek_TAU */ + { 0x000007d5, 14161 }, /* Greek_UPSILON */ + { 0x000007d6, 14002 }, /* Greek_PHI */ + { 0x000007d7, 13400 }, /* Greek_CHI */ + { 0x000007d8, 14040 }, /* Greek_PSI */ + { 0x000007d9, 13874 }, /* Greek_OMEGA */ + { 0x000007e1, 13330 }, /* Greek_alpha */ + { 0x000007e2, 13389 }, /* Greek_beta */ + { 0x000007e3, 13598 }, /* Greek_gamma */ + { 0x000007e4, 13432 }, /* Greek_delta */ + { 0x000007e5, 13458 }, /* Greek_epsilon */ + { 0x000007e6, 14330 }, /* Greek_zeta */ + { 0x000007e7, 13522 }, /* Greek_eta */ + { 0x000007e8, 14149 }, /* Greek_theta */ + { 0x000007e9, 13636 }, /* Greek_iota */ + { 0x000007ea, 13776 }, /* Greek_kappa */ + { 0x000007eb, 13826 }, /* Greek_lamda */ + { 0x000007ec, 13847 }, /* Greek_mu */ + { 0x000007ed, 13865 }, /* Greek_nu */ + { 0x000007ee, 14310 }, /* Greek_xi */ + { 0x000007ef, 13948 }, /* Greek_omicron */ + { 0x000007f0, 14031 }, /* Greek_pi */ + { 0x000007f1, 14070 }, /* Greek_rho */ + { 0x000007f2, 14092 }, /* Greek_sigma */ + { 0x000007f3, 13564 }, /* Greek_finalsmallsigma */ + { 0x000007f4, 14127 }, /* Greek_tau */ + { 0x000007f5, 14175 }, /* Greek_upsilon */ + { 0x000007f6, 14012 }, /* Greek_phi */ + { 0x000007f7, 13410 }, /* Greek_chi */ + { 0x000007f8, 14050 }, /* Greek_psi */ + { 0x000007f9, 13886 }, /* Greek_omega */ + { 0x000008a1, 19356 }, /* leftradical */ + { 0x000008a2, 25621 }, /* topleftradical */ + { 0x000008a3, 16667 }, /* horizconnector */ + { 0x000008a4, 25595 }, /* topintegral */ + { 0x000008a5, 3422 }, /* botintegral */ + { 0x000008a6, 26505 }, /* vertconnector */ + { 0x000008a7, 25636 }, /* topleftsqbracket */ + { 0x000008a8, 3448 }, /* botleftsqbracket */ + { 0x000008a9, 25685 }, /* toprightsqbracket */ + { 0x000008aa, 3497 }, /* botrightsqbracket */ + { 0x000008ab, 25607 }, /* topleftparens */ + { 0x000008ac, 3434 }, /* botleftparens */ + { 0x000008ad, 25670 }, /* toprightparens */ + { 0x000008ae, 3482 }, /* botrightparens */ + { 0x000008af, 19306 }, /* leftmiddlecurlybrace */ + { 0x000008b0, 22440 }, /* rightmiddlecurlybrace */ + { 0x000008b1, 25653 }, /* topleftsummation */ + { 0x000008b2, 3465 }, /* botleftsummation */ + { 0x000008b3, 25726 }, /* topvertsummationconnector */ + { 0x000008b4, 3538 }, /* botvertsummationconnector */ + { 0x000008b5, 25703 }, /* toprightsummation */ + { 0x000008b6, 3515 }, /* botrightsummation */ + { 0x000008b7, 22462 }, /* rightmiddlesummation */ + { 0x000008bc, 19417 }, /* lessthanequal */ + { 0x000008bd, 20125 }, /* notequal */ + { 0x000008be, 13280 }, /* greaterthanequal */ + { 0x000008bf, 17313 }, /* integral */ + { 0x000008c0, 25479 }, /* therefore */ + { 0x000008c1, 26487 }, /* variation */ + { 0x000008c2, 17275 }, /* infinity */ + { 0x000008c5, 19947 }, /* nabla */ + { 0x000008c8, 954 }, /* approximate */ + { 0x000008c9, 22999 }, /* similarequal */ + { 0x000008cd, 17196 }, /* ifonlyif */ + { 0x000008ce, 17247 }, /* implies */ + { 0x000008cf, 17155 }, /* identical */ + { 0x000008d6, 22286 }, /* radical */ + { 0x000008da, 17255 }, /* includedin */ + { 0x000008db, 17266 }, /* includes */ + { 0x000008dc, 17322 }, /* intersection */ + { 0x000008dd, 26362 }, /* union */ + { 0x000008de, 19457 }, /* logicaland */ + { 0x000008df, 19468 }, /* logicalor */ + { 0x000008ef, 21463 }, /* partialderivative */ + { 0x000008f6, 12656 }, /* function */ + { 0x000008fb, 19266 }, /* leftarrow */ + { 0x000008fc, 26387 }, /* uparrow */ + { 0x000008fd, 22397 }, /* rightarrow */ + { 0x000008fe, 11332 }, /* downarrow */ + { 0x000009df, 3410 }, /* blank */ + { 0x000009e0, 23790 }, /* soliddiamond */ + { 0x000009e1, 8603 }, /* checkerboard */ + { 0x000009e2, 17043 }, /* ht */ + { 0x000009e3, 12413 }, /* ff */ + { 0x000009e4, 8727 }, /* cr */ + { 0x000009e5, 19431 }, /* lf */ + { 0x000009e8, 20075 }, /* nl */ + { 0x000009e9, 26542 }, /* vt */ + { 0x000009ea, 19502 }, /* lowrightcorner */ + { 0x000009eb, 26416 }, /* uprightcorner */ + { 0x000009ec, 26403 }, /* upleftcorner */ + { 0x000009ed, 19488 }, /* lowleftcorner */ + { 0x000009ee, 8730 }, /* crossinglines */ + { 0x000009ef, 16682 }, /* horizlinescan1 */ + { 0x000009f0, 16697 }, /* horizlinescan3 */ + { 0x000009f1, 16712 }, /* horizlinescan5 */ + { 0x000009f2, 16727 }, /* horizlinescan7 */ + { 0x000009f3, 16742 }, /* horizlinescan9 */ + { 0x000009f4, 19397 }, /* leftt */ + { 0x000009f5, 22545 }, /* rightt */ + { 0x000009f6, 3533 }, /* bott */ + { 0x000009f7, 25721 }, /* topt */ + { 0x000009f8, 26497 }, /* vertbar */ + { 0x00000aa1, 11928 }, /* emspace */ + { 0x00000aa2, 12027 }, /* enspace */ + { 0x00000aa3, 11821 }, /* em3space */ + { 0x00000aa4, 11830 }, /* em4space */ + { 0x00000aa5, 11221 }, /* digitspace */ + { 0x00000aa6, 22145 }, /* punctspace */ + { 0x00000aa7, 25489 }, /* thinspace */ + { 0x00000aa8, 14382 }, /* hairspace */ + { 0x00000aa9, 11855 }, /* emdash */ + { 0x00000aaa, 11940 }, /* endash */ + { 0x00000aac, 22987 }, /* signifblank */ + { 0x00000aae, 11812 }, /* ellipsis */ + { 0x00000aaf, 11267 }, /* doubbaselinedot */ + { 0x00000ab0, 20767 }, /* onethird */ + { 0x00000ab1, 25837 }, /* twothirds */ + { 0x00000ab2, 20705 }, /* onefifth */ + { 0x00000ab3, 25802 }, /* twofifths */ + { 0x00000ab4, 25530 }, /* threefifths */ + { 0x00000ab5, 12607 }, /* fourfifths */ + { 0x00000ab6, 20733 }, /* onesixth */ + { 0x00000ab7, 12569 }, /* fivesixths */ + { 0x00000ab8, 8506 }, /* careof */ + { 0x00000abb, 12427 }, /* figdash */ + { 0x00000abc, 19249 }, /* leftanglebracket */ + { 0x00000abd, 11140 }, /* decimalpoint */ + { 0x00000abe, 22379 }, /* rightanglebracket */ + { 0x00000abf, 19681 }, /* marker */ + { 0x00000ac3, 20695 }, /* oneeighth */ + { 0x00000ac4, 25517 }, /* threeeighths */ + { 0x00000ac5, 12557 }, /* fiveeighths */ + { 0x00000ac6, 22904 }, /* seveneighths */ + { 0x00000ac9, 25760 }, /* trademark */ + { 0x00000aca, 22973 }, /* signaturemark */ + { 0x00000acb, 25770 }, /* trademarkincircle */ + { 0x00000acc, 19327 }, /* leftopentriangle */ + { 0x00000acd, 22483 }, /* rightopentriangle */ + { 0x00000ace, 11890 }, /* emopencircle */ + { 0x00000acf, 11903 }, /* emopenrectangle */ + { 0x00000ad0, 19377 }, /* leftsinglequotemark */ + { 0x00000ad1, 22524 }, /* rightsinglequotemark */ + { 0x00000ad2, 19286 }, /* leftdoublequotemark */ + { 0x00000ad3, 22419 }, /* rightdoublequotemark */ + { 0x00000ad4, 22067 }, /* prescription */ + { 0x00000ad5, 21517 }, /* permille */ + { 0x00000ad6, 19739 }, /* minutes */ + { 0x00000ad7, 22711 }, /* seconds */ + { 0x00000ad9, 19181 }, /* latincross */ + { 0x00000ada, 16626 }, /* hexagram */ + { 0x00000adb, 12455 }, /* filledrectbullet */ + { 0x00000adc, 12435 }, /* filledlefttribullet */ + { 0x00000add, 12472 }, /* filledrighttribullet */ + { 0x00000ade, 11862 }, /* emfilledcircle */ + { 0x00000adf, 11877 }, /* emfilledrect */ + { 0x00000ae0, 11991 }, /* enopencircbullet */ + { 0x00000ae1, 12008 }, /* enopensquarebullet */ + { 0x00000ae2, 20794 }, /* openrectbullet */ + { 0x00000ae3, 20836 }, /* opentribulletup */ + { 0x00000ae4, 20818 }, /* opentribulletdown */ + { 0x00000ae5, 20809 }, /* openstar */ + { 0x00000ae6, 11947 }, /* enfilledcircbullet */ + { 0x00000ae7, 11966 }, /* enfilledsqbullet */ + { 0x00000ae8, 12513 }, /* filledtribulletup */ + { 0x00000ae9, 12493 }, /* filledtribulletdown */ + { 0x00000aea, 19344 }, /* leftpointer */ + { 0x00000aeb, 22501 }, /* rightpointer */ + { 0x00000aec, 8649 }, /* club */ + { 0x00000aed, 11213 }, /* diamond */ + { 0x00000aee, 16080 }, /* heart */ + { 0x00000af0, 19668 }, /* maltesecross */ + { 0x00000af1, 10358 }, /* dagger */ + { 0x00000af2, 11295 }, /* doubledagger */ + { 0x00000af3, 8616 }, /* checkmark */ + { 0x00000af4, 3380 }, /* ballotcross */ + { 0x00000af5, 19860 }, /* musicalsharp */ + { 0x00000af6, 19848 }, /* musicalflat */ + { 0x00000af7, 19657 }, /* malesymbol */ + { 0x00000af8, 12400 }, /* femalesymbol */ + { 0x00000af9, 24354 }, /* telephone */ + { 0x00000afa, 24364 }, /* telephonerecorder */ + { 0x00000afb, 21537 }, /* phonographcopyright */ + { 0x00000afc, 8513 }, /* caret */ + { 0x00000afd, 23028 }, /* singlelowquotemark */ + { 0x00000afe, 11308 }, /* doublelowquotemark */ + { 0x00000aff, 8775 }, /* cursor */ + { 0x00000ba3, 19276 }, /* leftcaret */ + { 0x00000ba6, 22408 }, /* rightcaret */ + { 0x00000ba8, 11342 }, /* downcaret */ + { 0x00000ba9, 26395 }, /* upcaret */ + { 0x00000bc0, 21324 }, /* overbar */ + { 0x00000bc2, 11371 }, /* downtack */ + { 0x00000bc3, 26430 }, /* upshoe */ + { 0x00000bc4, 11361 }, /* downstile */ + { 0x00000bc6, 26337 }, /* underbar */ + { 0x00000bca, 18142 }, /* jot */ + { 0x00000bcc, 22160 }, /* quad */ + { 0x00000bce, 26445 }, /* uptack */ + { 0x00000bcf, 8626 }, /* circle */ + { 0x00000bd3, 26437 }, /* upstile */ + { 0x00000bd6, 11352 }, /* downshoe */ + { 0x00000bd8, 22514 }, /* rightshoe */ + { 0x00000bda, 19368 }, /* leftshoe */ + { 0x00000bdc, 19403 }, /* lefttack */ + { 0x00000bfc, 22552 }, /* righttack */ + { 0x00000cdf, 16173 }, /* hebrew_doublelowline */ + { 0x00000ce0, 16086 }, /* hebrew_aleph */ + { 0x00000ce1, 16111 }, /* hebrew_bet */ + { 0x00000ce2, 16292 }, /* hebrew_gimel */ + { 0x00000ce3, 16146 }, /* hebrew_dalet */ + { 0x00000ce4, 16319 }, /* hebrew_he */ + { 0x00000ce5, 16531 }, /* hebrew_waw */ + { 0x00000ce6, 16577 }, /* hebrew_zain */ + { 0x00000ce7, 16134 }, /* hebrew_chet */ + { 0x00000ce8, 16508 }, /* hebrew_tet */ + { 0x00000ce9, 16542 }, /* hebrew_yod */ + { 0x00000cea, 16194 }, /* hebrew_finalkaph */ + { 0x00000ceb, 16340 }, /* hebrew_kaph */ + { 0x00000cec, 16363 }, /* hebrew_lamed */ + { 0x00000ced, 16211 }, /* hebrew_finalmem */ + { 0x00000cee, 16376 }, /* hebrew_mem */ + { 0x00000cef, 16227 }, /* hebrew_finalnun */ + { 0x00000cf0, 16387 }, /* hebrew_nun */ + { 0x00000cf1, 16432 }, /* hebrew_samech */ + { 0x00000cf2, 16099 }, /* hebrew_ayin */ + { 0x00000cf3, 16243 }, /* hebrew_finalpe */ + { 0x00000cf4, 16398 }, /* hebrew_pe */ + { 0x00000cf5, 16258 }, /* hebrew_finalzade */ + { 0x00000cf6, 16553 }, /* hebrew_zade */ + { 0x00000cf7, 16408 }, /* hebrew_qoph */ + { 0x00000cf8, 16420 }, /* hebrew_resh */ + { 0x00000cf9, 16460 }, /* hebrew_shin */ + { 0x00000cfa, 16497 }, /* hebrew_taw */ + { 0x00000da1, 24617 }, /* Thai_kokai */ + { 0x00000da2, 24547 }, /* Thai_khokhai */ + { 0x00000da3, 24573 }, /* Thai_khokhuat */ + { 0x00000da4, 24587 }, /* Thai_khokhwai */ + { 0x00000da5, 24560 }, /* Thai_khokhon */ + { 0x00000da6, 24601 }, /* Thai_khorakhang */ + { 0x00000da7, 24930 }, /* Thai_ngongu */ + { 0x00000da8, 24423 }, /* Thai_chochan */ + { 0x00000da9, 24450 }, /* Thai_choching */ + { 0x00000daa, 24436 }, /* Thai_chochang */ + { 0x00000dab, 25291 }, /* Thai_soso */ + { 0x00000dac, 24464 }, /* Thai_chochoe */ + { 0x00000dad, 25467 }, /* Thai_yoying */ + { 0x00000dae, 24477 }, /* Thai_dochada */ + { 0x00000daf, 25420 }, /* Thai_topatak */ + { 0x00000db0, 25379 }, /* Thai_thothan */ + { 0x00000db1, 25329 }, /* Thai_thonangmontho */ + { 0x00000db2, 25348 }, /* Thai_thophuthao */ + { 0x00000db3, 24956 }, /* Thai_nonen */ + { 0x00000db4, 24490 }, /* Thai_dodek */ + { 0x00000db5, 25433 }, /* Thai_totao */ + { 0x00000db6, 25406 }, /* Thai_thothung */ + { 0x00000db7, 25364 }, /* Thai_thothahan */ + { 0x00000db8, 25392 }, /* Thai_thothong */ + { 0x00000db9, 24967 }, /* Thai_nonu */ + { 0x00000dba, 24409 }, /* Thai_bobaimai */ + { 0x00000dbb, 25058 }, /* Thai_popla */ + { 0x00000dbc, 25028 }, /* Thai_phophung */ + { 0x00000dbd, 24501 }, /* Thai_fofa */ + { 0x00000dbe, 25015 }, /* Thai_phophan */ + { 0x00000dbf, 24511 }, /* Thai_fofan */ + { 0x00000dc0, 25042 }, /* Thai_phosamphao */ + { 0x00000dc1, 24920 }, /* Thai_moma */ + { 0x00000dc2, 25456 }, /* Thai_yoyak */ + { 0x00000dc3, 25069 }, /* Thai_rorua */ + { 0x00000dc4, 25080 }, /* Thai_ru */ + { 0x00000dc5, 24780 }, /* Thai_loling */ + { 0x00000dc6, 24792 }, /* Thai_lu */ + { 0x00000dc7, 25444 }, /* Thai_wowaen */ + { 0x00000dc8, 25279 }, /* Thai_sosala */ + { 0x00000dc9, 25267 }, /* Thai_sorusi */ + { 0x00000dca, 25301 }, /* Thai_sosua */ + { 0x00000dcb, 24522 }, /* Thai_hohip */ + { 0x00000dcc, 24767 }, /* Thai_lochula */ + { 0x00000dcd, 24977 }, /* Thai_oang */ + { 0x00000dce, 24533 }, /* Thai_honokhuk */ + { 0x00000dcf, 24987 }, /* Thai_paiyannoi */ + { 0x00000dd0, 25088 }, /* Thai_saraa */ + { 0x00000dd1, 24828 }, /* Thai_maihanakat */ + { 0x00000dd2, 25099 }, /* Thai_saraaa */ + { 0x00000dd3, 25162 }, /* Thai_saraam */ + { 0x00000dd4, 25185 }, /* Thai_sarai */ + { 0x00000dd5, 25196 }, /* Thai_saraii */ + { 0x00000dd6, 25230 }, /* Thai_saraue */ + { 0x00000dd7, 25242 }, /* Thai_sarauee */ + { 0x00000dd8, 25219 }, /* Thai_sarau */ + { 0x00000dd9, 25255 }, /* Thai_sarauu */ + { 0x00000dda, 25002 }, /* Thai_phinthu */ + { 0x00000dde, 24844 }, /* Thai_maihanakat_maitho */ + { 0x00000ddf, 24399 }, /* Thai_baht */ + { 0x00000de0, 25174 }, /* Thai_sarae */ + { 0x00000de1, 25111 }, /* Thai_saraae */ + { 0x00000de2, 25208 }, /* Thai_sarao */ + { 0x00000de3, 25143 }, /* Thai_saraaimaimuan */ + { 0x00000de4, 25123 }, /* Thai_saraaimaimalai */ + { 0x00000de5, 24628 }, /* Thai_lakkhangyao */ + { 0x00000de6, 24906 }, /* Thai_maiyamok */ + { 0x00000de7, 24867 }, /* Thai_maitaikhu */ + { 0x00000de8, 24817 }, /* Thai_maiek */ + { 0x00000de9, 24882 }, /* Thai_maitho */ + { 0x00000dea, 24894 }, /* Thai_maitri */ + { 0x00000deb, 24800 }, /* Thai_maichattawa */ + { 0x00000dec, 25312 }, /* Thai_thanthakhat */ + { 0x00000ded, 24942 }, /* Thai_nikhahit */ + { 0x00000df0, 24755 }, /* Thai_leksun */ + { 0x00000df1, 24693 }, /* Thai_leknung */ + { 0x00000df2, 24742 }, /* Thai_leksong */ + { 0x00000df3, 24719 }, /* Thai_leksam */ + { 0x00000df4, 24731 }, /* Thai_leksi */ + { 0x00000df5, 24658 }, /* Thai_lekha */ + { 0x00000df6, 24669 }, /* Thai_lekhok */ + { 0x00000df7, 24645 }, /* Thai_lekchet */ + { 0x00000df8, 24706 }, /* Thai_lekpaet */ + { 0x00000df9, 24681 }, /* Thai_lekkao */ + { 0x00000ea1, 15181 }, /* Hangul_Kiyeog */ + { 0x00000ea2, 15726 }, /* Hangul_SsangKiyeog */ + { 0x00000ea3, 15195 }, /* Hangul_KiyeogSios */ + { 0x00000ea4, 15276 }, /* Hangul_Nieun */ + { 0x00000ea5, 15307 }, /* Hangul_NieunJieuj */ + { 0x00000ea6, 15289 }, /* Hangul_NieunHieuh */ + { 0x00000ea7, 14488 }, /* Hangul_Dikeud */ + { 0x00000ea8, 15689 }, /* Hangul_SsangDikeud */ + { 0x00000ea9, 15461 }, /* Hangul_Rieul */ + { 0x00000eaa, 15492 }, /* Hangul_RieulKiyeog */ + { 0x00000eab, 15511 }, /* Hangul_RieulMieum */ + { 0x00000eac, 15548 }, /* Hangul_RieulPieub */ + { 0x00000ead, 15566 }, /* Hangul_RieulSios */ + { 0x00000eae, 15583 }, /* Hangul_RieulTieut */ + { 0x00000eaf, 15529 }, /* Hangul_RieulPhieuf */ + { 0x00000eb0, 15474 }, /* Hangul_RieulHieuh */ + { 0x00000eb1, 15238 }, /* Hangul_Mieum */ + { 0x00000eb2, 15373 }, /* Hangul_Pieub */ + { 0x00000eb3, 15745 }, /* Hangul_SsangPieub */ + { 0x00000eb4, 15386 }, /* Hangul_PieubSios */ + { 0x00000eb5, 15662 }, /* Hangul_Sios */ + { 0x00000eb6, 15763 }, /* Hangul_SsangSios */ + { 0x00000eb7, 14577 }, /* Hangul_Ieung */ + { 0x00000eb8, 15154 }, /* Hangul_Jieuj */ + { 0x00000eb9, 15708 }, /* Hangul_SsangJieuj */ + { 0x00000eba, 14458 }, /* Hangul_Cieuc */ + { 0x00000ebb, 15167 }, /* Hangul_Khieuq */ + { 0x00000ebc, 15883 }, /* Hangul_Tieut */ + { 0x00000ebd, 15359 }, /* Hangul_Phieuf */ + { 0x00000ebe, 14555 }, /* Hangul_Hieuh */ + { 0x00000ebf, 14399 }, /* Hangul_A */ + { 0x00000ec0, 14408 }, /* Hangul_AE */ + { 0x00000ec1, 15957 }, /* Hangul_YA */ + { 0x00000ec2, 15967 }, /* Hangul_YAE */ + { 0x00000ec3, 14522 }, /* Hangul_EO */ + { 0x00000ec4, 14502 }, /* Hangul_E */ + { 0x00000ec5, 15988 }, /* Hangul_YEO */ + { 0x00000ec6, 15978 }, /* Hangul_YE */ + { 0x00000ec7, 15325 }, /* Hangul_O */ + { 0x00000ec8, 15905 }, /* Hangul_WA */ + { 0x00000ec9, 15915 }, /* Hangul_WAE */ + { 0x00000eca, 15334 }, /* Hangul_OE */ + { 0x00000ecb, 16028 }, /* Hangul_YO */ + { 0x00000ecc, 15896 }, /* Hangul_U */ + { 0x00000ecd, 15936 }, /* Hangul_WEO */ + { 0x00000ece, 15926 }, /* Hangul_WE */ + { 0x00000ecf, 15947 }, /* Hangul_WI */ + { 0x00000ed0, 16038 }, /* Hangul_YU */ + { 0x00000ed1, 14532 }, /* Hangul_EU */ + { 0x00000ed2, 16018 }, /* Hangul_YI */ + { 0x00000ed3, 14568 }, /* Hangul_I */ + { 0x00000ed4, 14682 }, /* Hangul_J_Kiyeog */ + { 0x00000ed5, 15052 }, /* Hangul_J_SsangKiyeog */ + { 0x00000ed6, 14698 }, /* Hangul_J_KiyeogSios */ + { 0x00000ed7, 14760 }, /* Hangul_J_Nieun */ + { 0x00000ed8, 14795 }, /* Hangul_J_NieunJieuj */ + { 0x00000ed9, 14775 }, /* Hangul_J_NieunHieuh */ + { 0x00000eda, 14605 }, /* Hangul_J_Dikeud */ + { 0x00000edb, 14882 }, /* Hangul_J_Rieul */ + { 0x00000edc, 14917 }, /* Hangul_J_RieulKiyeog */ + { 0x00000edd, 14938 }, /* Hangul_J_RieulMieum */ + { 0x00000ede, 14979 }, /* Hangul_J_RieulPieub */ + { 0x00000edf, 14999 }, /* Hangul_J_RieulSios */ + { 0x00000ee0, 15018 }, /* Hangul_J_RieulTieut */ + { 0x00000ee1, 14958 }, /* Hangul_J_RieulPhieuf */ + { 0x00000ee2, 14897 }, /* Hangul_J_RieulHieuh */ + { 0x00000ee3, 14745 }, /* Hangul_J_Mieum */ + { 0x00000ee4, 14848 }, /* Hangul_J_Pieub */ + { 0x00000ee5, 14863 }, /* Hangul_J_PieubSios */ + { 0x00000ee6, 15038 }, /* Hangul_J_Sios */ + { 0x00000ee7, 15073 }, /* Hangul_J_SsangSios */ + { 0x00000ee8, 14636 }, /* Hangul_J_Ieung */ + { 0x00000ee9, 14651 }, /* Hangul_J_Jieuj */ + { 0x00000eea, 14590 }, /* Hangul_J_Cieuc */ + { 0x00000eeb, 14666 }, /* Hangul_J_Khieuq */ + { 0x00000eec, 15092 }, /* Hangul_J_Tieut */ + { 0x00000eed, 14832 }, /* Hangul_J_Phieuf */ + { 0x00000eee, 14621 }, /* Hangul_J_Hieuh */ + { 0x00000eef, 15601 }, /* Hangul_RieulYeorinHieuh */ + { 0x00000ef0, 15793 }, /* Hangul_SunkyeongeumMieum */ + { 0x00000ef1, 15844 }, /* Hangul_SunkyeongeumPieub */ + { 0x00000ef2, 15344 }, /* Hangul_PanSios */ + { 0x00000ef3, 15213 }, /* Hangul_KkogjiDalrinIeung */ + { 0x00000ef4, 15818 }, /* Hangul_SunkyeongeumPhieuf */ + { 0x00000ef5, 15999 }, /* Hangul_YeorinHieuh */ + { 0x00000ef6, 14418 }, /* Hangul_AraeA */ + { 0x00000ef7, 14431 }, /* Hangul_AraeAE */ + { 0x00000ef8, 14815 }, /* Hangul_J_PanSios */ + { 0x00000ef9, 14718 }, /* Hangul_J_KkogjiDalrinIeung */ + { 0x00000efa, 15107 }, /* Hangul_J_YeorinHieuh */ + { 0x00000eff, 18797 }, /* Korean_Won */ + { 0x000013bc, 20514 }, /* OE */ + { 0x000013bd, 20517 }, /* oe */ + { 0x000013be, 29045 }, /* Ydiaeresis */ + { 0x000020ac, 12090 }, /* EuroSign */ + { 0x0000fd01, 125 }, /* 3270_Duplicate */ + { 0x0000fd02, 195 }, /* 3270_FieldMark */ + { 0x0000fd03, 343 }, /* 3270_Right2 */ + { 0x0000fd04, 245 }, /* 3270_Left2 */ + { 0x0000fd05, 33 }, /* 3270_BackTab */ + { 0x0000fd06, 151 }, /* 3270_EraseEOF */ + { 0x0000fd07, 165 }, /* 3270_EraseInput */ + { 0x0000fd08, 332 }, /* 3270_Reset */ + { 0x0000fd09, 310 }, /* 3270_Quit */ + { 0x0000fd0a, 256 }, /* 3270_PA1 */ + { 0x0000fd0b, 265 }, /* 3270_PA2 */ + { 0x0000fd0c, 274 }, /* 3270_PA3 */ + { 0x0000fd0d, 376 }, /* 3270_Test */ + { 0x0000fd0e, 23 }, /* 3270_Attn */ + { 0x0000fd0f, 74 }, /* 3270_CursorBlink */ + { 0x0000fd10, 8 }, /* 3270_AltCursor */ + { 0x0000fd11, 231 }, /* 3270_KeyClick */ + { 0x0000fd12, 221 }, /* 3270_Jump */ + { 0x0000fd13, 210 }, /* 3270_Ident */ + { 0x0000fd14, 355 }, /* 3270_Rule */ + { 0x0000fd15, 64 }, /* 3270_Copy */ + { 0x0000fd16, 283 }, /* 3270_Play */ + { 0x0000fd17, 365 }, /* 3270_Setup */ + { 0x0000fd18, 320 }, /* 3270_Record */ + { 0x0000fd19, 46 }, /* 3270_ChangeScreen */ + { 0x0000fd1a, 109 }, /* 3270_DeleteWord */ + { 0x0000fd1b, 181 }, /* 3270_ExSelect */ + { 0x0000fd1c, 91 }, /* 3270_CursorSelect */ + { 0x0000fd1d, 293 }, /* 3270_PrintScreen */ + { 0x0000fd1e, 140 }, /* 3270_Enter */ + { 0x0000fe01, 17781 }, /* ISO_Lock */ + { 0x0000fe02, 17664 }, /* ISO_Level2_Latch */ + { 0x0000fe03, 17714 }, /* ISO_Level3_Shift */ + { 0x0000fe04, 17681 }, /* ISO_Level3_Latch */ + { 0x0000fe05, 17698 }, /* ISO_Level3_Lock */ + { 0x0000fe06, 17569 }, /* ISO_Group_Latch */ + { 0x0000fe07, 17585 }, /* ISO_Group_Lock */ + { 0x0000fe08, 17826 }, /* ISO_Next_Group */ + { 0x0000fe09, 17841 }, /* ISO_Next_Group_Lock */ + { 0x0000fe0a, 17950 }, /* ISO_Prev_Group */ + { 0x0000fe0b, 17965 }, /* ISO_Prev_Group_Lock */ + { 0x0000fe0c, 17532 }, /* ISO_First_Group */ + { 0x0000fe0d, 17548 }, /* ISO_First_Group_Lock */ + { 0x0000fe0e, 17616 }, /* ISO_Last_Group */ + { 0x0000fe0f, 17631 }, /* ISO_Last_Group_Lock */ + { 0x0000fe11, 17764 }, /* ISO_Level5_Shift */ + { 0x0000fe12, 17731 }, /* ISO_Level5_Latch */ + { 0x0000fe13, 17748 }, /* ISO_Level5_Lock */ + { 0x0000fe20, 17651 }, /* ISO_Left_Tab */ + { 0x0000fe21, 17809 }, /* ISO_Move_Line_Up */ + { 0x0000fe22, 17790 }, /* ISO_Move_Line_Down */ + { 0x0000fe23, 17883 }, /* ISO_Partial_Line_Up */ + { 0x0000fe24, 17861 }, /* ISO_Partial_Line_Down */ + { 0x0000fe25, 17903 }, /* ISO_Partial_Space_Left */ + { 0x0000fe26, 17926 }, /* ISO_Partial_Space_Right */ + { 0x0000fe27, 18059 }, /* ISO_Set_Margin_Left */ + { 0x0000fe28, 18079 }, /* ISO_Set_Margin_Right */ + { 0x0000fe29, 18010 }, /* ISO_Release_Margin_Left */ + { 0x0000fe2a, 18034 }, /* ISO_Release_Margin_Right */ + { 0x0000fe2b, 17985 }, /* ISO_Release_Both_Margins */ + { 0x0000fe2c, 17470 }, /* ISO_Fast_Cursor_Left */ + { 0x0000fe2d, 17491 }, /* ISO_Fast_Cursor_Right */ + { 0x0000fe2e, 17513 }, /* ISO_Fast_Cursor_Up */ + { 0x0000fe2f, 17449 }, /* ISO_Fast_Cursor_Down */ + { 0x0000fe30, 17372 }, /* ISO_Continuous_Underline */ + { 0x0000fe31, 17397 }, /* ISO_Discontinuous_Underline */ + { 0x0000fe32, 17425 }, /* ISO_Emphasize */ + { 0x0000fe33, 17354 }, /* ISO_Center_Object */ + { 0x0000fe34, 17439 }, /* ISO_Enter */ + { 0x0000fe50, 10858 }, /* dead_grave */ + { 0x0000fe51, 10531 }, /* dead_acute */ + { 0x0000fe52, 10754 }, /* dead_circumflex */ + { 0x0000fe53, 11097 }, /* dead_tilde */ + { 0x0000fe54, 10980 }, /* dead_macron */ + { 0x0000fe55, 10700 }, /* dead_breve */ + { 0x0000fe56, 10455 }, /* dead_abovedot */ + { 0x0000fe57, 10795 }, /* dead_diaeresis */ + { 0x0000fe58, 10493 }, /* dead_abovering */ + { 0x0000fe59, 10810 }, /* dead_doubleacute */ + { 0x0000fe5a, 10730 }, /* dead_caron */ + { 0x0000fe5b, 10741 }, /* dead_cedilla */ + { 0x0000fe5c, 11006 }, /* dead_ogonek */ + { 0x0000fe5d, 10933 }, /* dead_iota */ + { 0x0000fe5e, 11122 }, /* dead_voiced_sound */ + { 0x0000fe5f, 11046 }, /* dead_semivoiced_sound */ + { 0x0000fe60, 10615 }, /* dead_belowdot */ + { 0x0000fe61, 10880 }, /* dead_hook */ + { 0x0000fe62, 10890 }, /* dead_horn */ + { 0x0000fe63, 11085 }, /* dead_stroke */ + { 0x0000fe64, 10439 }, /* dead_abovecomma */ + { 0x0000fe65, 10469 }, /* dead_abovereversedcomma */ + { 0x0000fe66, 10827 }, /* dead_doublegrave */ + { 0x0000fe67, 10646 }, /* dead_belowring */ + { 0x0000fe68, 10629 }, /* dead_belowmacron */ + { 0x0000fe69, 10558 }, /* dead_belowcircumflex */ + { 0x0000fe6a, 10661 }, /* dead_belowtilde */ + { 0x0000fe6b, 10542 }, /* dead_belowbreve */ + { 0x0000fe6c, 10595 }, /* dead_belowdiaeresis */ + { 0x0000fe6d, 10914 }, /* dead_invertedbreve */ + { 0x0000fe6e, 10579 }, /* dead_belowcomma */ + { 0x0000fe6f, 10770 }, /* dead_currency */ + { 0x0000fe70, 583 }, /* AccessX_Enable */ + { 0x0000fe71, 598 }, /* AccessX_Feedback_Enable */ + { 0x0000fe72, 22342 }, /* RepeatKeys_Enable */ + { 0x0000fe73, 23774 }, /* SlowKeys_Enable */ + { 0x0000fe74, 3564 }, /* BounceKeys_Enable */ + { 0x0000fe75, 23836 }, /* StickyKeys_Enable */ + { 0x0000fe76, 19782 }, /* MouseKeys_Enable */ + { 0x0000fe77, 19759 }, /* MouseKeys_Accel_Enable */ + { 0x0000fe78, 21332 }, /* Overlay1_Enable */ + { 0x0000fe79, 21348 }, /* Overlay2_Enable */ + { 0x0000fe7a, 3309 }, /* AudibleBell_Enable */ + { 0x0000fe80, 10425 }, /* dead_a */ + { 0x0000fe81, 10432 }, /* dead_A */ + { 0x0000fe82, 10844 }, /* dead_e */ + { 0x0000fe83, 10851 }, /* dead_E */ + { 0x0000fe84, 10900 }, /* dead_i */ + { 0x0000fe85, 10907 }, /* dead_I */ + { 0x0000fe86, 10992 }, /* dead_o */ + { 0x0000fe87, 10999 }, /* dead_O */ + { 0x0000fe88, 11108 }, /* dead_u */ + { 0x0000fe89, 11115 }, /* dead_U */ + { 0x0000fe8a, 11068 }, /* dead_small_schwa */ + { 0x0000fe8b, 10711 }, /* dead_capital_schwa */ + { 0x0000fe8c, 10869 }, /* dead_greek */ + { 0x0000fe90, 10967 }, /* dead_lowline */ + { 0x0000fe91, 10508 }, /* dead_aboveverticalline */ + { 0x0000fe92, 10677 }, /* dead_belowverticalline */ + { 0x0000fe93, 10943 }, /* dead_longsolidusoverlay */ + { 0x0000fea0, 8594 }, /* ch */ + { 0x0000fea1, 8597 }, /* Ch */ + { 0x0000fea2, 8600 }, /* CH */ + { 0x0000fea3, 8443 }, /* c_h */ + { 0x0000fea4, 8447 }, /* C_h */ + { 0x0000fea5, 8451 }, /* C_H */ + { 0x0000fed0, 12536 }, /* First_Virtual_Screen */ + { 0x0000fed1, 22080 }, /* Prev_Virtual_Screen */ + { 0x0000fed2, 20028 }, /* Next_Virtual_Screen */ + { 0x0000fed4, 19161 }, /* Last_Virtual_Screen */ + { 0x0000fed5, 24382 }, /* Terminate_Server */ + { 0x0000fee0, 21998 }, /* Pointer_Left */ + { 0x0000fee1, 22011 }, /* Pointer_Right */ + { 0x0000fee2, 22025 }, /* Pointer_Up */ + { 0x0000fee3, 21843 }, /* Pointer_Down */ + { 0x0000fee4, 22036 }, /* Pointer_UpLeft */ + { 0x0000fee5, 22051 }, /* Pointer_UpRight */ + { 0x0000fee6, 21856 }, /* Pointer_DownLeft */ + { 0x0000fee7, 21873 }, /* Pointer_DownRight */ + { 0x0000fee8, 21671 }, /* Pointer_Button_Dflt */ + { 0x0000fee9, 21591 }, /* Pointer_Button1 */ + { 0x0000feea, 21607 }, /* Pointer_Button2 */ + { 0x0000feeb, 21623 }, /* Pointer_Button3 */ + { 0x0000feec, 21639 }, /* Pointer_Button4 */ + { 0x0000feed, 21655 }, /* Pointer_Button5 */ + { 0x0000feee, 21781 }, /* Pointer_DblClick_Dflt */ + { 0x0000feef, 21691 }, /* Pointer_DblClick1 */ + { 0x0000fef0, 21709 }, /* Pointer_DblClick2 */ + { 0x0000fef1, 21727 }, /* Pointer_DblClick3 */ + { 0x0000fef2, 21745 }, /* Pointer_DblClick4 */ + { 0x0000fef3, 21763 }, /* Pointer_DblClick5 */ + { 0x0000fef4, 21961 }, /* Pointer_Drag_Dflt */ + { 0x0000fef5, 21891 }, /* Pointer_Drag1 */ + { 0x0000fef6, 21905 }, /* Pointer_Drag2 */ + { 0x0000fef7, 21919 }, /* Pointer_Drag3 */ + { 0x0000fef8, 21933 }, /* Pointer_Drag4 */ + { 0x0000fef9, 21979 }, /* Pointer_EnableKeys */ + { 0x0000fefa, 21572 }, /* Pointer_Accelerate */ + { 0x0000fefb, 21803 }, /* Pointer_DfltBtnNext */ + { 0x0000fefc, 21823 }, /* Pointer_DfltBtnPrev */ + { 0x0000fefd, 21947 }, /* Pointer_Drag5 */ + { 0x0000ff08, 3362 }, /* BackSpace */ + { 0x0000ff09, 24298 }, /* Tab */ + { 0x0000ff0a, 19434 }, /* Linefeed */ + { 0x0000ff0b, 8633 }, /* Clear */ + { 0x0000ff0d, 22366 }, /* Return */ + { 0x0000ff13, 21481 }, /* Pause */ + { 0x0000ff14, 22699 }, /* Scroll_Lock */ + { 0x0000ff15, 24279 }, /* Sys_Req */ + { 0x0000ff1b, 12057 }, /* Escape */ + { 0x0000ff20, 19811 }, /* Multi_key */ + { 0x0000ff21, 18745 }, /* Kanji */ + { 0x0000ff22, 19802 }, /* Muhenkan */ + { 0x0000ff23, 16614 }, /* Henkan_Mode */ + { 0x0000ff24, 22562 }, /* Romaji */ + { 0x0000ff25, 16635 }, /* Hiragana */ + { 0x0000ff26, 18770 }, /* Katakana */ + { 0x0000ff27, 16644 }, /* Hiragana_Katakana */ + { 0x0000ff28, 29161 }, /* Zenkaku */ + { 0x0000ff29, 16048 }, /* Hankaku */ + { 0x0000ff2a, 29169 }, /* Zenkaku_Hankaku */ + { 0x0000ff2b, 25752 }, /* Touroku */ + { 0x0000ff2c, 19698 }, /* Massyo */ + { 0x0000ff2d, 18351 }, /* Kana_Lock */ + { 0x0000ff2e, 18562 }, /* Kana_Shift */ + { 0x0000ff2f, 11779 }, /* Eisu_Shift */ + { 0x0000ff30, 11790 }, /* Eisu_toggle */ + { 0x0000ff31, 14392 }, /* Hangul */ + { 0x0000ff32, 15780 }, /* Hangul_Start */ + { 0x0000ff33, 14511 }, /* Hangul_End */ + { 0x0000ff34, 14542 }, /* Hangul_Hanja */ + { 0x0000ff35, 15128 }, /* Hangul_Jamo */ + { 0x0000ff36, 15625 }, /* Hangul_Romaja */ + { 0x0000ff37, 8654 }, /* Codeinput */ + { 0x0000ff38, 15140 }, /* Hangul_Jeonja */ + { 0x0000ff39, 14445 }, /* Hangul_Banja */ + { 0x0000ff3a, 15420 }, /* Hangul_PreHanja */ + { 0x0000ff3b, 15403 }, /* Hangul_PostHanja */ + { 0x0000ff3c, 23012 }, /* SingleCandidate */ + { 0x0000ff3d, 19821 }, /* MultipleCandidate */ + { 0x0000ff3e, 22100 }, /* PreviousCandidate */ + { 0x0000ff3f, 15674 }, /* Hangul_Special */ + { 0x0000ff50, 16662 }, /* Home */ + { 0x0000ff51, 19244 }, /* Left */ + { 0x0000ff52, 26384 }, /* Up */ + { 0x0000ff53, 22373 }, /* Right */ + { 0x0000ff54, 11327 }, /* Down */ + { 0x0000ff55, 22124 }, /* Prior */ + { 0x0000ff56, 20023 }, /* Next */ + { 0x0000ff57, 11936 }, /* End */ + { 0x0000ff58, 3404 }, /* Begin */ + { 0x0000ff60, 22727 }, /* Select */ + { 0x0000ff61, 22118 }, /* Print */ + { 0x0000ff62, 12117 }, /* Execute */ + { 0x0000ff63, 17284 }, /* Insert */ + { 0x0000ff65, 26357 }, /* Undo */ + { 0x0000ff66, 22326 }, /* Redo */ + { 0x0000ff67, 19705 }, /* Menu */ + { 0x0000ff68, 12531 }, /* Find */ + { 0x0000ff69, 8489 }, /* Cancel */ + { 0x0000ff6a, 16602 }, /* Help */ + { 0x0000ff6b, 8377 }, /* Break */ + { 0x0000ff7e, 19747 }, /* Mode_switch */ + { 0x0000ff7f, 20169 }, /* Num_Lock */ + { 0x0000ff80, 19074 }, /* KP_Space */ + { 0x0000ff89, 19095 }, /* KP_Tab */ + { 0x0000ff8d, 18931 }, /* KP_Enter */ + { 0x0000ff91, 18949 }, /* KP_F1 */ + { 0x0000ff92, 18955 }, /* KP_F2 */ + { 0x0000ff93, 18961 }, /* KP_F3 */ + { 0x0000ff94, 18967 }, /* KP_F4 */ + { 0x0000ff95, 18973 }, /* KP_Home */ + { 0x0000ff96, 18991 }, /* KP_Left */ + { 0x0000ff97, 19102 }, /* KP_Up */ + { 0x0000ff98, 19052 }, /* KP_Right */ + { 0x0000ff99, 18916 }, /* KP_Down */ + { 0x0000ff9a, 19043 }, /* KP_Prior */ + { 0x0000ff9b, 19011 }, /* KP_Next */ + { 0x0000ff9c, 18924 }, /* KP_End */ + { 0x0000ff9d, 18876 }, /* KP_Begin */ + { 0x0000ff9e, 18981 }, /* KP_Insert */ + { 0x0000ff9f, 18896 }, /* KP_Delete */ + { 0x0000ffaa, 18999 }, /* KP_Multiply */ + { 0x0000ffab, 18858 }, /* KP_Add */ + { 0x0000ffac, 19061 }, /* KP_Separator */ + { 0x0000ffad, 19083 }, /* KP_Subtract */ + { 0x0000ffae, 18885 }, /* KP_Decimal */ + { 0x0000ffaf, 18906 }, /* KP_Divide */ + { 0x0000ffb0, 18808 }, /* KP_0 */ + { 0x0000ffb1, 18813 }, /* KP_1 */ + { 0x0000ffb2, 18818 }, /* KP_2 */ + { 0x0000ffb3, 18823 }, /* KP_3 */ + { 0x0000ffb4, 18828 }, /* KP_4 */ + { 0x0000ffb5, 18833 }, /* KP_5 */ + { 0x0000ffb6, 18838 }, /* KP_6 */ + { 0x0000ffb7, 18843 }, /* KP_7 */ + { 0x0000ffb8, 18848 }, /* KP_8 */ + { 0x0000ffb9, 18853 }, /* KP_9 */ + { 0x0000ffbd, 18940 }, /* KP_Equal */ + { 0x0000ffbe, 12159 }, /* F1 */ + { 0x0000ffbf, 12202 }, /* F2 */ + { 0x0000ffc0, 12245 }, /* F3 */ + { 0x0000ffc1, 12272 }, /* F4 */ + { 0x0000ffc2, 12275 }, /* F5 */ + { 0x0000ffc3, 12278 }, /* F6 */ + { 0x0000ffc4, 12281 }, /* F7 */ + { 0x0000ffc5, 12284 }, /* F8 */ + { 0x0000ffc6, 12287 }, /* F9 */ + { 0x0000ffc7, 12162 }, /* F10 */ + { 0x0000ffc8, 12166 }, /* F11 */ + { 0x0000ffc9, 12170 }, /* F12 */ + { 0x0000ffca, 12174 }, /* F13 */ + { 0x0000ffcb, 12178 }, /* F14 */ + { 0x0000ffcc, 12182 }, /* F15 */ + { 0x0000ffcd, 12186 }, /* F16 */ + { 0x0000ffce, 12190 }, /* F17 */ + { 0x0000ffcf, 12194 }, /* F18 */ + { 0x0000ffd0, 12198 }, /* F19 */ + { 0x0000ffd1, 12205 }, /* F20 */ + { 0x0000ffd2, 12209 }, /* F21 */ + { 0x0000ffd3, 12213 }, /* F22 */ + { 0x0000ffd4, 12217 }, /* F23 */ + { 0x0000ffd5, 12221 }, /* F24 */ + { 0x0000ffd6, 12225 }, /* F25 */ + { 0x0000ffd7, 12229 }, /* F26 */ + { 0x0000ffd8, 12233 }, /* F27 */ + { 0x0000ffd9, 12237 }, /* F28 */ + { 0x0000ffda, 12241 }, /* F29 */ + { 0x0000ffdb, 12248 }, /* F30 */ + { 0x0000ffdc, 12252 }, /* F31 */ + { 0x0000ffdd, 12256 }, /* F32 */ + { 0x0000ffde, 12260 }, /* F33 */ + { 0x0000ffdf, 12264 }, /* F34 */ + { 0x0000ffe0, 12268 }, /* F35 */ + { 0x0000ffe1, 22946 }, /* Shift_L */ + { 0x0000ffe2, 22965 }, /* Shift_R */ + { 0x0000ffe3, 8697 }, /* Control_L */ + { 0x0000ffe4, 8707 }, /* Control_R */ + { 0x0000ffe5, 8496 }, /* Caps_Lock */ + { 0x0000ffe6, 22954 }, /* Shift_Lock */ + { 0x0000ffe7, 19710 }, /* Meta_L */ + { 0x0000ffe8, 19717 }, /* Meta_R */ + { 0x0000ffe9, 880 }, /* Alt_L */ + { 0x0000ffea, 886 }, /* Alt_R */ + { 0x0000ffeb, 24263 }, /* Super_L */ + { 0x0000ffec, 24271 }, /* Super_R */ + { 0x0000ffed, 17046 }, /* Hyper_L */ + { 0x0000ffee, 17054 }, /* Hyper_R */ + { 0x0000fff1, 3642 }, /* braille_dot_1 */ + { 0x0000fff2, 3671 }, /* braille_dot_2 */ + { 0x0000fff3, 3685 }, /* braille_dot_3 */ + { 0x0000fff4, 3699 }, /* braille_dot_4 */ + { 0x0000fff5, 3713 }, /* braille_dot_5 */ + { 0x0000fff6, 3727 }, /* braille_dot_6 */ + { 0x0000fff7, 3741 }, /* braille_dot_7 */ + { 0x0000fff8, 3755 }, /* braille_dot_8 */ + { 0x0000fff9, 3769 }, /* braille_dot_9 */ + { 0x0000fffa, 3656 }, /* braille_dot_10 */ + { 0x0000ffff, 11160 }, /* Delete */ + { 0x00ffffff, 26531 }, /* VoidSymbol */ + { 0x0100012c, 17117 }, /* Ibreve */ + { 0x0100012d, 17124 }, /* ibreve */ + { 0x01000174, 26563 }, /* Wcircumflex */ + { 0x01000175, 26575 }, /* wcircumflex */ + { 0x01000176, 29010 }, /* Ycircumflex */ + { 0x01000177, 29022 }, /* ycircumflex */ + { 0x0100018f, 22649 }, /* SCHWA */ + { 0x0100019f, 20218 }, /* Obarred */ + { 0x010001a0, 20553 }, /* Ohorn */ + { 0x010001a1, 20559 }, /* ohorn */ + { 0x010001af, 25997 }, /* Uhorn */ + { 0x010001b0, 26003 }, /* uhorn */ + { 0x010001b5, 29212 }, /* Zstroke */ + { 0x010001b6, 29220 }, /* zstroke */ + { 0x010001b7, 12147 }, /* EZH */ + { 0x010001d1, 20254 }, /* Ocaron */ + { 0x010001d2, 20261 }, /* ocaron */ + { 0x010001e6, 12703 }, /* Gcaron */ + { 0x010001e7, 12710 }, /* gcaron */ + { 0x01000259, 22655 }, /* schwa */ + { 0x01000275, 20226 }, /* obarred */ + { 0x01000292, 12151 }, /* ezh */ + { 0x01000492, 9236 }, /* Cyrillic_GHE_bar */ + { 0x01000493, 9253 }, /* Cyrillic_ghe_bar */ + { 0x01000496, 10274 }, /* Cyrillic_ZHE_descender */ + { 0x01000497, 10297 }, /* Cyrillic_zhe_descender */ + { 0x0100049a, 9528 }, /* Cyrillic_KA_descender */ + { 0x0100049b, 9550 }, /* Cyrillic_ka_descender */ + { 0x0100049c, 9572 }, /* Cyrillic_KA_vertstroke */ + { 0x0100049d, 9595 }, /* Cyrillic_ka_vertstroke */ + { 0x010004a2, 9118 }, /* Cyrillic_EN_descender */ + { 0x010004a3, 9140 }, /* Cyrillic_en_descender */ + { 0x010004ae, 10036 }, /* Cyrillic_U_straight */ + { 0x010004af, 10056 }, /* Cyrillic_u_straight */ + { 0x010004b0, 10076 }, /* Cyrillic_U_straight_bar */ + { 0x010004b1, 10100 }, /* Cyrillic_u_straight_bar */ + { 0x010004b2, 9294 }, /* Cyrillic_HA_descender */ + { 0x010004b3, 9316 }, /* Cyrillic_ha_descender */ + { 0x010004b6, 8854 }, /* Cyrillic_CHE_descender */ + { 0x010004b7, 8877 }, /* Cyrillic_che_descender */ + { 0x010004b8, 8900 }, /* Cyrillic_CHE_vertstroke */ + { 0x010004b9, 8924 }, /* Cyrillic_che_vertstroke */ + { 0x010004ba, 9832 }, /* Cyrillic_SHHA */ + { 0x010004bb, 9846 }, /* Cyrillic_shha */ + { 0x010004d8, 9746 }, /* Cyrillic_SCHWA */ + { 0x010004d9, 9761 }, /* Cyrillic_schwa */ + { 0x010004e2, 9396 }, /* Cyrillic_I_macron */ + { 0x010004e3, 9414 }, /* Cyrillic_i_macron */ + { 0x010004e8, 9692 }, /* Cyrillic_O_bar */ + { 0x010004e9, 9707 }, /* Cyrillic_o_bar */ + { 0x010004ee, 10000 }, /* Cyrillic_U_macron */ + { 0x010004ef, 10018 }, /* Cyrillic_u_macron */ + { 0x01000531, 2124 }, /* Armenian_AYB */ + { 0x01000532, 2150 }, /* Armenian_BEN */ + { 0x01000533, 2374 }, /* Armenian_GIM */ + { 0x01000534, 2215 }, /* Armenian_DA */ + { 0x01000535, 3164 }, /* Armenian_YECH */ + { 0x01000536, 3210 }, /* Armenian_ZA */ + { 0x01000537, 2265 }, /* Armenian_E */ + { 0x01000538, 2100 }, /* Armenian_AT */ + { 0x01000539, 2964 }, /* Armenian_TO */ + { 0x0100053a, 3234 }, /* Armenian_ZHE */ + { 0x0100053b, 2464 }, /* Armenian_INI */ + { 0x0100053c, 2611 }, /* Armenian_LYUN */ + { 0x0100053d, 2564 }, /* Armenian_KHE */ + { 0x0100053e, 2988 }, /* Armenian_TSA */ + { 0x0100053f, 2538 }, /* Armenian_KEN */ + { 0x01000540, 2424 }, /* Armenian_HO */ + { 0x01000541, 2239 }, /* Armenian_DZA */ + { 0x01000542, 2346 }, /* Armenian_GHAT */ + { 0x01000543, 2936 }, /* Armenian_TCHE */ + { 0x01000544, 2639 }, /* Armenian_MEN */ + { 0x01000545, 2400 }, /* Armenian_HI */ + { 0x01000546, 2665 }, /* Armenian_NU */ + { 0x01000547, 2894 }, /* Armenian_SHA */ + { 0x01000548, 3112 }, /* Armenian_VO */ + { 0x01000549, 2189 }, /* Armenian_CHA */ + { 0x0100054a, 2727 }, /* Armenian_PE */ + { 0x0100054b, 2490 }, /* Armenian_JE */ + { 0x0100054c, 2797 }, /* Armenian_RA */ + { 0x0100054d, 2845 }, /* Armenian_SE */ + { 0x0100054e, 3086 }, /* Armenian_VEV */ + { 0x0100054f, 3040 }, /* Armenian_TYUN */ + { 0x01000550, 2821 }, /* Armenian_RE */ + { 0x01000551, 3014 }, /* Armenian_TSO */ + { 0x01000552, 3136 }, /* Armenian_VYUN */ + { 0x01000553, 2751 }, /* Armenian_PYUR */ + { 0x01000554, 2514 }, /* Armenian_KE */ + { 0x01000555, 2689 }, /* Armenian_O */ + { 0x01000556, 2303 }, /* Armenian_FE */ + { 0x0100055a, 2080 }, /* Armenian_apostrophe */ + { 0x0100055b, 2048 }, /* Armenian_accent */ + { 0x0100055c, 2287 }, /* Armenian_exclam */ + { 0x0100055d, 2869 }, /* Armenian_separation_mark */ + { 0x0100055e, 2779 }, /* Armenian_question */ + { 0x01000561, 2137 }, /* Armenian_ayb */ + { 0x01000562, 2163 }, /* Armenian_ben */ + { 0x01000563, 2387 }, /* Armenian_gim */ + { 0x01000564, 2227 }, /* Armenian_da */ + { 0x01000565, 3178 }, /* Armenian_yech */ + { 0x01000566, 3222 }, /* Armenian_za */ + { 0x01000567, 2276 }, /* Armenian_e */ + { 0x01000568, 2112 }, /* Armenian_at */ + { 0x01000569, 2976 }, /* Armenian_to */ + { 0x0100056a, 3247 }, /* Armenian_zhe */ + { 0x0100056b, 2477 }, /* Armenian_ini */ + { 0x0100056c, 2625 }, /* Armenian_lyun */ + { 0x0100056d, 2577 }, /* Armenian_khe */ + { 0x0100056e, 3001 }, /* Armenian_tsa */ + { 0x0100056f, 2551 }, /* Armenian_ken */ + { 0x01000570, 2436 }, /* Armenian_ho */ + { 0x01000571, 2252 }, /* Armenian_dza */ + { 0x01000572, 2360 }, /* Armenian_ghat */ + { 0x01000573, 2950 }, /* Armenian_tche */ + { 0x01000574, 2652 }, /* Armenian_men */ + { 0x01000575, 2412 }, /* Armenian_hi */ + { 0x01000576, 2677 }, /* Armenian_nu */ + { 0x01000577, 2907 }, /* Armenian_sha */ + { 0x01000578, 3124 }, /* Armenian_vo */ + { 0x01000579, 2202 }, /* Armenian_cha */ + { 0x0100057a, 2739 }, /* Armenian_pe */ + { 0x0100057b, 2502 }, /* Armenian_je */ + { 0x0100057c, 2809 }, /* Armenian_ra */ + { 0x0100057d, 2857 }, /* Armenian_se */ + { 0x0100057e, 3099 }, /* Armenian_vev */ + { 0x0100057f, 3054 }, /* Armenian_tyun */ + { 0x01000580, 2833 }, /* Armenian_re */ + { 0x01000581, 3027 }, /* Armenian_tso */ + { 0x01000582, 3150 }, /* Armenian_vyun */ + { 0x01000583, 2765 }, /* Armenian_pyur */ + { 0x01000584, 2526 }, /* Armenian_ke */ + { 0x01000585, 2700 }, /* Armenian_o */ + { 0x01000586, 2315 }, /* Armenian_fe */ + { 0x01000587, 2590 }, /* Armenian_ligature_ew */ + { 0x01000589, 2327 }, /* Armenian_full_stop */ + { 0x0100058a, 2448 }, /* Armenian_hyphen */ + { 0x01000653, 1580 }, /* Arabic_madda_above */ + { 0x01000654, 1316 }, /* Arabic_hamza_above */ + { 0x01000655, 1335 }, /* Arabic_hamza_below */ + { 0x01000660, 966 }, /* Arabic_0 */ + { 0x01000661, 975 }, /* Arabic_1 */ + { 0x01000662, 984 }, /* Arabic_2 */ + { 0x01000663, 993 }, /* Arabic_3 */ + { 0x01000664, 1002 }, /* Arabic_4 */ + { 0x01000665, 1011 }, /* Arabic_5 */ + { 0x01000666, 1020 }, /* Arabic_6 */ + { 0x01000667, 1029 }, /* Arabic_7 */ + { 0x01000668, 1038 }, /* Arabic_8 */ + { 0x01000669, 1047 }, /* Arabic_9 */ + { 0x0100066a, 1672 }, /* Arabic_percent */ + { 0x01000670, 1821 }, /* Arabic_superscript_alef */ + { 0x01000679, 1951 }, /* Arabic_tteh */ + { 0x0100067e, 1661 }, /* Arabic_peh */ + { 0x01000686, 1885 }, /* Arabic_tcheh */ + { 0x01000688, 1173 }, /* Arabic_ddal */ + { 0x01000691, 1729 }, /* Arabic_rreh */ + { 0x01000698, 1493 }, /* Arabic_jeh */ + { 0x010006a4, 1963 }, /* Arabic_veh */ + { 0x010006a9, 1544 }, /* Arabic_keheh */ + { 0x010006af, 1258 }, /* Arabic_gaf */ + { 0x010006ba, 1642 }, /* Arabic_noon_ghunna */ + { 0x010006be, 1442 }, /* Arabic_heh_doachashmee */ + { 0x010006c1, 1465 }, /* Arabic_heh_goal */ + { 0x010006cc, 12390 }, /* Farsi_yeh */ + { 0x010006d2, 1996 }, /* Arabic_yeh_baree */ + { 0x010006d4, 1242 }, /* Arabic_fullstop */ + { 0x010006f0, 12310 }, /* Farsi_0 */ + { 0x010006f1, 12318 }, /* Farsi_1 */ + { 0x010006f2, 12326 }, /* Farsi_2 */ + { 0x010006f3, 12334 }, /* Farsi_3 */ + { 0x010006f4, 12342 }, /* Farsi_4 */ + { 0x010006f5, 12350 }, /* Farsi_5 */ + { 0x010006f6, 12358 }, /* Farsi_6 */ + { 0x010006f7, 12366 }, /* Farsi_7 */ + { 0x010006f8, 12374 }, /* Farsi_8 */ + { 0x010006f9, 12382 }, /* Farsi_9 */ + { 0x01000d82, 23484 }, /* Sinh_ng */ + { 0x01000d83, 23278 }, /* Sinh_h2 */ + { 0x01000d85, 23047 }, /* Sinh_a */ + { 0x01000d86, 23054 }, /* Sinh_aa */ + { 0x01000d87, 23071 }, /* Sinh_ae */ + { 0x01000d88, 23088 }, /* Sinh_aee */ + { 0x01000d89, 23294 }, /* Sinh_i */ + { 0x01000d8a, 23309 }, /* Sinh_ii */ + { 0x01000d8b, 23695 }, /* Sinh_u */ + { 0x01000d8c, 23710 }, /* Sinh_uu */ + { 0x01000d8d, 23594 }, /* Sinh_ri */ + { 0x01000d8e, 23602 }, /* Sinh_rii */ + { 0x01000d8f, 23403 }, /* Sinh_lu */ + { 0x01000d90, 23420 }, /* Sinh_luu */ + { 0x01000d91, 23221 }, /* Sinh_e */ + { 0x01000d92, 23236 }, /* Sinh_ee */ + { 0x01000d93, 23107 }, /* Sinh_ai */ + { 0x01000d94, 23537 }, /* Sinh_o */ + { 0x01000d95, 23552 }, /* Sinh_oo */ + { 0x01000d96, 23132 }, /* Sinh_au */ + { 0x01000d9a, 23353 }, /* Sinh_ka */ + { 0x01000d9b, 23361 }, /* Sinh_kha */ + { 0x01000d9c, 23261 }, /* Sinh_ga */ + { 0x01000d9d, 23269 }, /* Sinh_gha */ + { 0x01000d9e, 23492 }, /* Sinh_ng2 */ + { 0x01000d9f, 23501 }, /* Sinh_nga */ + { 0x01000da0, 23166 }, /* Sinh_ca */ + { 0x01000da1, 23174 }, /* Sinh_cha */ + { 0x01000da2, 23326 }, /* Sinh_ja */ + { 0x01000da3, 23334 }, /* Sinh_jha */ + { 0x01000da4, 23528 }, /* Sinh_nya */ + { 0x01000da5, 23343 }, /* Sinh_jnya */ + { 0x01000da6, 23510 }, /* Sinh_nja */ + { 0x01000da7, 23676 }, /* Sinh_tta */ + { 0x01000da8, 23685 }, /* Sinh_ttha */ + { 0x01000da9, 23183 }, /* Sinh_dda */ + { 0x01000daa, 23192 }, /* Sinh_ddha */ + { 0x01000dab, 23519 }, /* Sinh_nna */ + { 0x01000dac, 23464 }, /* Sinh_ndda */ + { 0x01000dad, 23657 }, /* Sinh_tha */ + { 0x01000dae, 23666 }, /* Sinh_thha */ + { 0x01000daf, 23202 }, /* Sinh_dha */ + { 0x01000db0, 23211 }, /* Sinh_dhha */ + { 0x01000db1, 23456 }, /* Sinh_na */ + { 0x01000db3, 23474 }, /* Sinh_ndha */ + { 0x01000db4, 23569 }, /* Sinh_pa */ + { 0x01000db5, 23577 }, /* Sinh_pha */ + { 0x01000db6, 23149 }, /* Sinh_ba */ + { 0x01000db7, 23157 }, /* Sinh_bha */ + { 0x01000db8, 23439 }, /* Sinh_ma */ + { 0x01000db9, 23447 }, /* Sinh_mba */ + { 0x01000dba, 23735 }, /* Sinh_ya */ + { 0x01000dbb, 23586 }, /* Sinh_ra */ + { 0x01000dbd, 23386 }, /* Sinh_la */ + { 0x01000dc0, 23727 }, /* Sinh_va */ + { 0x01000dc1, 23638 }, /* Sinh_sha */ + { 0x01000dc2, 23647 }, /* Sinh_ssha */ + { 0x01000dc3, 23630 }, /* Sinh_sa */ + { 0x01000dc4, 23286 }, /* Sinh_ha */ + { 0x01000dc5, 23394 }, /* Sinh_lla */ + { 0x01000dc6, 23253 }, /* Sinh_fa */ + { 0x01000dca, 23124 }, /* Sinh_al */ + { 0x01000dcf, 23062 }, /* Sinh_aa2 */ + { 0x01000dd0, 23079 }, /* Sinh_ae2 */ + { 0x01000dd1, 23097 }, /* Sinh_aee2 */ + { 0x01000dd2, 23301 }, /* Sinh_i2 */ + { 0x01000dd3, 23317 }, /* Sinh_ii2 */ + { 0x01000dd4, 23702 }, /* Sinh_u2 */ + { 0x01000dd6, 23718 }, /* Sinh_uu2 */ + { 0x01000dd8, 23611 }, /* Sinh_ru2 */ + { 0x01000dd9, 23228 }, /* Sinh_e2 */ + { 0x01000dda, 23244 }, /* Sinh_ee2 */ + { 0x01000ddb, 23115 }, /* Sinh_ai2 */ + { 0x01000ddc, 23544 }, /* Sinh_o2 */ + { 0x01000ddd, 23560 }, /* Sinh_oo2 */ + { 0x01000dde, 23140 }, /* Sinh_au2 */ + { 0x01000ddf, 23411 }, /* Sinh_lu2 */ + { 0x01000df2, 23620 }, /* Sinh_ruu2 */ + { 0x01000df3, 23429 }, /* Sinh_luu2 */ + { 0x01000df4, 23370 }, /* Sinh_kunddaliya */ + { 0x010010d0, 12759 }, /* Georgian_an */ + { 0x010010d1, 12771 }, /* Georgian_ban */ + { 0x010010d2, 12875 }, /* Georgian_gan */ + { 0x010010d3, 12838 }, /* Georgian_don */ + { 0x010010d4, 12851 }, /* Georgian_en */ + { 0x010010d5, 13201 }, /* Georgian_vin */ + { 0x010010d6, 13239 }, /* Georgian_zen */ + { 0x010010d7, 13163 }, /* Georgian_tan */ + { 0x010010d8, 12966 }, /* Georgian_in */ + { 0x010010d9, 13005 }, /* Georgian_kan */ + { 0x010010da, 13032 }, /* Georgian_las */ + { 0x010010db, 13045 }, /* Georgian_man */ + { 0x010010dc, 13058 }, /* Georgian_nar */ + { 0x010010dd, 13071 }, /* Georgian_on */ + { 0x010010de, 13083 }, /* Georgian_par */ + { 0x010010df, 13252 }, /* Georgian_zhar */ + { 0x010010e0, 13123 }, /* Georgian_rae */ + { 0x010010e1, 13136 }, /* Georgian_san */ + { 0x010010e2, 13176 }, /* Georgian_tar */ + { 0x010010e3, 13189 }, /* Georgian_un */ + { 0x010010e4, 13096 }, /* Georgian_phar */ + { 0x010010e5, 13018 }, /* Georgian_khar */ + { 0x010010e6, 12888 }, /* Georgian_ghan */ + { 0x010010e7, 13110 }, /* Georgian_qar */ + { 0x010010e8, 13149 }, /* Georgian_shin */ + { 0x010010e9, 12811 }, /* Georgian_chin */ + { 0x010010ea, 12784 }, /* Georgian_can */ + { 0x010010eb, 12992 }, /* Georgian_jil */ + { 0x010010ec, 12825 }, /* Georgian_cil */ + { 0x010010ed, 12797 }, /* Georgian_char */ + { 0x010010ee, 13226 }, /* Georgian_xan */ + { 0x010010ef, 12978 }, /* Georgian_jhan */ + { 0x010010f0, 12902 }, /* Georgian_hae */ + { 0x010010f1, 12928 }, /* Georgian_he */ + { 0x010010f2, 12940 }, /* Georgian_hie */ + { 0x010010f3, 13214 }, /* Georgian_we */ + { 0x010010f4, 12915 }, /* Georgian_har */ + { 0x010010f5, 12953 }, /* Georgian_hoe */ + { 0x010010f6, 12863 }, /* Georgian_fi */ + { 0x01001e02, 3332 }, /* Babovedot */ + { 0x01001e03, 3342 }, /* babovedot */ + { 0x01001e0a, 10324 }, /* Dabovedot */ + { 0x01001e0b, 10334 }, /* dabovedot */ + { 0x01001e1e, 12290 }, /* Fabovedot */ + { 0x01001e1f, 12300 }, /* fabovedot */ + { 0x01001e36, 19192 }, /* Lbelowdot */ + { 0x01001e37, 19202 }, /* lbelowdot */ + { 0x01001e40, 19537 }, /* Mabovedot */ + { 0x01001e41, 19547 }, /* mabovedot */ + { 0x01001e56, 21377 }, /* Pabovedot */ + { 0x01001e57, 21387 }, /* pabovedot */ + { 0x01001e60, 22583 }, /* Sabovedot */ + { 0x01001e61, 22593 }, /* sabovedot */ + { 0x01001e6a, 24302 }, /* Tabovedot */ + { 0x01001e6b, 24312 }, /* tabovedot */ + { 0x01001e80, 26609 }, /* Wgrave */ + { 0x01001e81, 26616 }, /* wgrave */ + { 0x01001e82, 26549 }, /* Wacute */ + { 0x01001e83, 26556 }, /* wacute */ + { 0x01001e84, 26587 }, /* Wdiaeresis */ + { 0x01001e85, 26598 }, /* wdiaeresis */ + { 0x01001e8a, 26635 }, /* Xabovedot */ + { 0x01001e8b, 26645 }, /* xabovedot */ + { 0x01001ea0, 416 }, /* Abelowdot */ + { 0x01001ea1, 426 }, /* abelowdot */ + { 0x01001ea2, 868 }, /* Ahook */ + { 0x01001ea3, 874 }, /* ahook */ + { 0x01001ea4, 646 }, /* Acircumflexacute */ + { 0x01001ea5, 663 }, /* acircumflexacute */ + { 0x01001ea6, 720 }, /* Acircumflexgrave */ + { 0x01001ea7, 737 }, /* acircumflexgrave */ + { 0x01001ea8, 754 }, /* Acircumflexhook */ + { 0x01001ea9, 770 }, /* acircumflexhook */ + { 0x01001eaa, 786 }, /* Acircumflextilde */ + { 0x01001eab, 803 }, /* acircumflextilde */ + { 0x01001eac, 680 }, /* Acircumflexbelowdot */ + { 0x01001ead, 700 }, /* acircumflexbelowdot */ + { 0x01001eae, 459 }, /* Abreveacute */ + { 0x01001eaf, 471 }, /* abreveacute */ + { 0x01001eb0, 513 }, /* Abrevegrave */ + { 0x01001eb1, 525 }, /* abrevegrave */ + { 0x01001eb2, 537 }, /* Abrevehook */ + { 0x01001eb3, 548 }, /* abrevehook */ + { 0x01001eb4, 559 }, /* Abrevetilde */ + { 0x01001eb5, 571 }, /* abrevetilde */ + { 0x01001eb6, 483 }, /* Abrevebelowdot */ + { 0x01001eb7, 498 }, /* abrevebelowdot */ + { 0x01001eb8, 11462 }, /* Ebelowdot */ + { 0x01001eb9, 11472 }, /* ebelowdot */ + { 0x01001eba, 11738 }, /* Ehook */ + { 0x01001ebb, 11744 }, /* ehook */ + { 0x01001ebc, 12076 }, /* Etilde */ + { 0x01001ebd, 12083 }, /* etilde */ + { 0x01001ebe, 11520 }, /* Ecircumflexacute */ + { 0x01001ebf, 11537 }, /* ecircumflexacute */ + { 0x01001ec0, 11594 }, /* Ecircumflexgrave */ + { 0x01001ec1, 11611 }, /* ecircumflexgrave */ + { 0x01001ec2, 11628 }, /* Ecircumflexhook */ + { 0x01001ec3, 11644 }, /* ecircumflexhook */ + { 0x01001ec4, 11660 }, /* Ecircumflextilde */ + { 0x01001ec5, 11677 }, /* ecircumflextilde */ + { 0x01001ec6, 11554 }, /* Ecircumflexbelowdot */ + { 0x01001ec7, 11574 }, /* ecircumflexbelowdot */ + { 0x01001ec8, 17219 }, /* Ihook */ + { 0x01001ec9, 17225 }, /* ihook */ + { 0x01001eca, 17097 }, /* Ibelowdot */ + { 0x01001ecb, 17107 }, /* ibelowdot */ + { 0x01001ecc, 20234 }, /* Obelowdot */ + { 0x01001ecd, 20244 }, /* obelowdot */ + { 0x01001ece, 20541 }, /* Ohook */ + { 0x01001ecf, 20547 }, /* ohook */ + { 0x01001ed0, 20292 }, /* Ocircumflexacute */ + { 0x01001ed1, 20309 }, /* ocircumflexacute */ + { 0x01001ed2, 20366 }, /* Ocircumflexgrave */ + { 0x01001ed3, 20383 }, /* ocircumflexgrave */ + { 0x01001ed4, 20400 }, /* Ocircumflexhook */ + { 0x01001ed5, 20416 }, /* ocircumflexhook */ + { 0x01001ed6, 20432 }, /* Ocircumflextilde */ + { 0x01001ed7, 20449 }, /* ocircumflextilde */ + { 0x01001ed8, 20326 }, /* Ocircumflexbelowdot */ + { 0x01001ed9, 20346 }, /* ocircumflexbelowdot */ + { 0x01001eda, 20565 }, /* Ohornacute */ + { 0x01001edb, 20576 }, /* ohornacute */ + { 0x01001edc, 20615 }, /* Ohorngrave */ + { 0x01001edd, 20626 }, /* ohorngrave */ + { 0x01001ede, 20637 }, /* Ohornhook */ + { 0x01001edf, 20647 }, /* ohornhook */ + { 0x01001ee0, 20657 }, /* Ohorntilde */ + { 0x01001ee1, 20668 }, /* ohorntilde */ + { 0x01001ee2, 20587 }, /* Ohornbelowdot */ + { 0x01001ee3, 20601 }, /* ohornbelowdot */ + { 0x01001ee4, 25865 }, /* Ubelowdot */ + { 0x01001ee5, 25875 }, /* ubelowdot */ + { 0x01001ee6, 25985 }, /* Uhook */ + { 0x01001ee7, 25991 }, /* uhook */ + { 0x01001ee8, 26009 }, /* Uhornacute */ + { 0x01001ee9, 26020 }, /* uhornacute */ + { 0x01001eea, 26059 }, /* Uhorngrave */ + { 0x01001eeb, 26070 }, /* uhorngrave */ + { 0x01001eec, 26081 }, /* Uhornhook */ + { 0x01001eed, 26091 }, /* uhornhook */ + { 0x01001eee, 26101 }, /* Uhorntilde */ + { 0x01001eef, 26112 }, /* uhorntilde */ + { 0x01001ef0, 26031 }, /* Uhornbelowdot */ + { 0x01001ef1, 26045 }, /* uhornbelowdot */ + { 0x01001ef2, 29060 }, /* Ygrave */ + { 0x01001ef3, 29067 }, /* ygrave */ + { 0x01001ef4, 28990 }, /* Ybelowdot */ + { 0x01001ef5, 29000 }, /* ybelowdot */ + { 0x01001ef6, 29074 }, /* Yhook */ + { 0x01001ef7, 29080 }, /* yhook */ + { 0x01001ef8, 29086 }, /* Ytilde */ + { 0x01001ef9, 29093 }, /* ytilde */ + { 0x01002070, 29199 }, /* zerosuperior */ + { 0x01002074, 12632 }, /* foursuperior */ + { 0x01002075, 12594 }, /* fivesuperior */ + { 0x01002076, 23756 }, /* sixsuperior */ + { 0x01002077, 22932 }, /* sevensuperior */ + { 0x01002078, 11765 }, /* eightsuperior */ + { 0x01002079, 20062 }, /* ninesuperior */ + { 0x01002080, 29185 }, /* zerosubscript */ + { 0x01002081, 20742 }, /* onesubscript */ + { 0x01002082, 25812 }, /* twosubscript */ + { 0x01002083, 25556 }, /* threesubscript */ + { 0x01002084, 12618 }, /* foursubscript */ + { 0x01002085, 12580 }, /* fivesubscript */ + { 0x01002086, 23743 }, /* sixsubscript */ + { 0x01002087, 22917 }, /* sevensubscript */ + { 0x01002088, 11750 }, /* eightsubscript */ + { 0x01002089, 20048 }, /* ninesubscript */ + { 0x010020a0, 11694 }, /* EcuSign */ + { 0x010020a1, 8670 }, /* ColonSign */ + { 0x010020a2, 8744 }, /* CruzeiroSign */ + { 0x010020a3, 12416 }, /* FFrancSign */ + { 0x010020a4, 19448 }, /* LiraSign */ + { 0x010020a5, 19724 }, /* MillSign */ + { 0x010020a6, 19967 }, /* NairaSign */ + { 0x010020a7, 21526 }, /* PesetaSign */ + { 0x010020a8, 22569 }, /* RupeeSign */ + { 0x010020a9, 26623 }, /* WonSign */ + { 0x010020aa, 20009 }, /* NewSheqelSign */ + { 0x010020ab, 11258 }, /* DongSign */ + { 0x01002202, 21446 }, /* partdifferential */ + { 0x01002205, 11919 }, /* emptyset */ + { 0x01002208, 11802 }, /* elementof */ + { 0x01002209, 20112 }, /* notelementof */ + { 0x0100220b, 8686 }, /* containsas */ + { 0x0100221a, 23809 }, /* squareroot */ + { 0x0100221b, 8757 }, /* cuberoot */ + { 0x0100221c, 12645 }, /* fourthroot */ + { 0x0100222c, 11232 }, /* dintegral */ + { 0x0100222d, 25585 }, /* tintegral */ + { 0x01002235, 3396 }, /* because */ + { 0x01002247, 20100 }, /* notapproxeq */ + { 0x01002248, 945 }, /* approxeq */ + { 0x01002262, 20134 }, /* notidentical */ + { 0x01002263, 23854 }, /* stricteq */ + { 0x01002800, 3628 }, /* braille_blank */ + { 0x01002801, 3783 }, /* braille_dots_1 */ + { 0x01002802, 6151 }, /* braille_dots_2 */ + { 0x01002803, 3798 }, /* braille_dots_12 */ + { 0x01002804, 7303 }, /* braille_dots_3 */ + { 0x01002805, 5014 }, /* braille_dots_13 */ + { 0x01002806, 6166 }, /* braille_dots_23 */ + { 0x01002807, 3814 }, /* braille_dots_123 */ + { 0x01002808, 7863 }, /* braille_dots_4 */ + { 0x01002809, 5606 }, /* braille_dots_14 */ + { 0x0100280a, 6758 }, /* braille_dots_24 */ + { 0x0100280b, 4438 }, /* braille_dots_124 */ + { 0x0100280c, 7318 }, /* braille_dots_34 */ + { 0x0100280d, 5030 }, /* braille_dots_134 */ + { 0x0100280e, 6182 }, /* braille_dots_234 */ + { 0x0100280f, 3831 }, /* braille_dots_1234 */ + { 0x01002810, 8135 }, /* braille_dots_5 */ + { 0x01002811, 5894 }, /* braille_dots_15 */ + { 0x01002812, 7046 }, /* braille_dots_25 */ + { 0x01002813, 4742 }, /* braille_dots_125 */ + { 0x01002814, 7606 }, /* braille_dots_35 */ + { 0x01002815, 5334 }, /* braille_dots_135 */ + { 0x01002816, 6486 }, /* braille_dots_235 */ + { 0x01002817, 4151 }, /* braille_dots_1235 */ + { 0x01002818, 7878 }, /* braille_dots_45 */ + { 0x01002819, 5622 }, /* braille_dots_145 */ + { 0x0100281a, 6774 }, /* braille_dots_245 */ + { 0x0100281b, 4455 }, /* braille_dots_1245 */ + { 0x0100281c, 7334 }, /* braille_dots_345 */ + { 0x0100281d, 5047 }, /* braille_dots_1345 */ + { 0x0100281e, 6199 }, /* braille_dots_2345 */ + { 0x0100281f, 3849 }, /* braille_dots_12345 */ + { 0x01002820, 8267 }, /* braille_dots_6 */ + { 0x01002821, 6034 }, /* braille_dots_16 */ + { 0x01002822, 7186 }, /* braille_dots_26 */ + { 0x01002823, 4890 }, /* braille_dots_126 */ + { 0x01002824, 7746 }, /* braille_dots_36 */ + { 0x01002825, 5482 }, /* braille_dots_136 */ + { 0x01002826, 6634 }, /* braille_dots_236 */ + { 0x01002827, 4307 }, /* braille_dots_1236 */ + { 0x01002828, 8018 }, /* braille_dots_46 */ + { 0x01002829, 5770 }, /* braille_dots_146 */ + { 0x0100282a, 6922 }, /* braille_dots_246 */ + { 0x0100282b, 4611 }, /* braille_dots_1246 */ + { 0x0100282c, 7482 }, /* braille_dots_346 */ + { 0x0100282d, 5203 }, /* braille_dots_1346 */ + { 0x0100282e, 6355 }, /* braille_dots_2346 */ + { 0x0100282f, 4013 }, /* braille_dots_12346 */ + { 0x01002830, 8150 }, /* braille_dots_56 */ + { 0x01002831, 5910 }, /* braille_dots_156 */ + { 0x01002832, 7062 }, /* braille_dots_256 */ + { 0x01002833, 4759 }, /* braille_dots_1256 */ + { 0x01002834, 7622 }, /* braille_dots_356 */ + { 0x01002835, 5351 }, /* braille_dots_1356 */ + { 0x01002836, 6503 }, /* braille_dots_2356 */ + { 0x01002837, 4169 }, /* braille_dots_12356 */ + { 0x01002838, 7894 }, /* braille_dots_456 */ + { 0x01002839, 5639 }, /* braille_dots_1456 */ + { 0x0100283a, 6791 }, /* braille_dots_2456 */ + { 0x0100283b, 4473 }, /* braille_dots_12456 */ + { 0x0100283c, 7351 }, /* braille_dots_3456 */ + { 0x0100283d, 5065 }, /* braille_dots_13456 */ + { 0x0100283e, 6217 }, /* braille_dots_23456 */ + { 0x0100283f, 3868 }, /* braille_dots_123456 */ + { 0x01002840, 8331 }, /* braille_dots_7 */ + { 0x01002841, 6102 }, /* braille_dots_17 */ + { 0x01002842, 7254 }, /* braille_dots_27 */ + { 0x01002843, 4962 }, /* braille_dots_127 */ + { 0x01002844, 7814 }, /* braille_dots_37 */ + { 0x01002845, 5554 }, /* braille_dots_137 */ + { 0x01002846, 6706 }, /* braille_dots_237 */ + { 0x01002847, 4383 }, /* braille_dots_1237 */ + { 0x01002848, 8086 }, /* braille_dots_47 */ + { 0x01002849, 5842 }, /* braille_dots_147 */ + { 0x0100284a, 6994 }, /* braille_dots_247 */ + { 0x0100284b, 4687 }, /* braille_dots_1247 */ + { 0x0100284c, 7554 }, /* braille_dots_347 */ + { 0x0100284d, 5279 }, /* braille_dots_1347 */ + { 0x0100284e, 6431 }, /* braille_dots_2347 */ + { 0x0100284f, 4093 }, /* braille_dots_12347 */ + { 0x01002850, 8218 }, /* braille_dots_57 */ + { 0x01002851, 5982 }, /* braille_dots_157 */ + { 0x01002852, 7134 }, /* braille_dots_257 */ + { 0x01002853, 4835 }, /* braille_dots_1257 */ + { 0x01002854, 7694 }, /* braille_dots_357 */ + { 0x01002855, 5427 }, /* braille_dots_1357 */ + { 0x01002856, 6579 }, /* braille_dots_2357 */ + { 0x01002857, 4249 }, /* braille_dots_12357 */ + { 0x01002858, 7966 }, /* braille_dots_457 */ + { 0x01002859, 5715 }, /* braille_dots_1457 */ + { 0x0100285a, 6867 }, /* braille_dots_2457 */ + { 0x0100285b, 4553 }, /* braille_dots_12457 */ + { 0x0100285c, 7427 }, /* braille_dots_3457 */ + { 0x0100285d, 5145 }, /* braille_dots_13457 */ + { 0x0100285e, 6297 }, /* braille_dots_23457 */ + { 0x0100285f, 3952 }, /* braille_dots_123457 */ + { 0x01002860, 8282 }, /* braille_dots_67 */ + { 0x01002861, 6050 }, /* braille_dots_167 */ + { 0x01002862, 7202 }, /* braille_dots_267 */ + { 0x01002863, 4907 }, /* braille_dots_1267 */ + { 0x01002864, 7762 }, /* braille_dots_367 */ + { 0x01002865, 5499 }, /* braille_dots_1367 */ + { 0x01002866, 6651 }, /* braille_dots_2367 */ + { 0x01002867, 4325 }, /* braille_dots_12367 */ + { 0x01002868, 8034 }, /* braille_dots_467 */ + { 0x01002869, 5787 }, /* braille_dots_1467 */ + { 0x0100286a, 6939 }, /* braille_dots_2467 */ + { 0x0100286b, 4629 }, /* braille_dots_12467 */ + { 0x0100286c, 7499 }, /* braille_dots_3467 */ + { 0x0100286d, 5221 }, /* braille_dots_13467 */ + { 0x0100286e, 6373 }, /* braille_dots_23467 */ + { 0x0100286f, 4032 }, /* braille_dots_123467 */ + { 0x01002870, 8166 }, /* braille_dots_567 */ + { 0x01002871, 5927 }, /* braille_dots_1567 */ + { 0x01002872, 7079 }, /* braille_dots_2567 */ + { 0x01002873, 4777 }, /* braille_dots_12567 */ + { 0x01002874, 7639 }, /* braille_dots_3567 */ + { 0x01002875, 5369 }, /* braille_dots_13567 */ + { 0x01002876, 6521 }, /* braille_dots_23567 */ + { 0x01002877, 4188 }, /* braille_dots_123567 */ + { 0x01002878, 7911 }, /* braille_dots_4567 */ + { 0x01002879, 5657 }, /* braille_dots_14567 */ + { 0x0100287a, 6809 }, /* braille_dots_24567 */ + { 0x0100287b, 4492 }, /* braille_dots_124567 */ + { 0x0100287c, 7369 }, /* braille_dots_34567 */ + { 0x0100287d, 5084 }, /* braille_dots_134567 */ + { 0x0100287e, 6236 }, /* braille_dots_234567 */ + { 0x0100287f, 3888 }, /* braille_dots_1234567 */ + { 0x01002880, 8362 }, /* braille_dots_8 */ + { 0x01002881, 6135 }, /* braille_dots_18 */ + { 0x01002882, 7287 }, /* braille_dots_28 */ + { 0x01002883, 4997 }, /* braille_dots_128 */ + { 0x01002884, 7847 }, /* braille_dots_38 */ + { 0x01002885, 5589 }, /* braille_dots_138 */ + { 0x01002886, 6741 }, /* braille_dots_238 */ + { 0x01002887, 4420 }, /* braille_dots_1238 */ + { 0x01002888, 8119 }, /* braille_dots_48 */ + { 0x01002889, 5877 }, /* braille_dots_148 */ + { 0x0100288a, 7029 }, /* braille_dots_248 */ + { 0x0100288b, 4724 }, /* braille_dots_1248 */ + { 0x0100288c, 7589 }, /* braille_dots_348 */ + { 0x0100288d, 5316 }, /* braille_dots_1348 */ + { 0x0100288e, 6468 }, /* braille_dots_2348 */ + { 0x0100288f, 4132 }, /* braille_dots_12348 */ + { 0x01002890, 8251 }, /* braille_dots_58 */ + { 0x01002891, 6017 }, /* braille_dots_158 */ + { 0x01002892, 7169 }, /* braille_dots_258 */ + { 0x01002893, 4872 }, /* braille_dots_1258 */ + { 0x01002894, 7729 }, /* braille_dots_358 */ + { 0x01002895, 5464 }, /* braille_dots_1358 */ + { 0x01002896, 6616 }, /* braille_dots_2358 */ + { 0x01002897, 4288 }, /* braille_dots_12358 */ + { 0x01002898, 8001 }, /* braille_dots_458 */ + { 0x01002899, 5752 }, /* braille_dots_1458 */ + { 0x0100289a, 6904 }, /* braille_dots_2458 */ + { 0x0100289b, 4592 }, /* braille_dots_12458 */ + { 0x0100289c, 7464 }, /* braille_dots_3458 */ + { 0x0100289d, 5184 }, /* braille_dots_13458 */ + { 0x0100289e, 6336 }, /* braille_dots_23458 */ + { 0x0100289f, 3993 }, /* braille_dots_123458 */ + { 0x010028a0, 8315 }, /* braille_dots_68 */ + { 0x010028a1, 6085 }, /* braille_dots_168 */ + { 0x010028a2, 7237 }, /* braille_dots_268 */ + { 0x010028a3, 4944 }, /* braille_dots_1268 */ + { 0x010028a4, 7797 }, /* braille_dots_368 */ + { 0x010028a5, 5536 }, /* braille_dots_1368 */ + { 0x010028a6, 6688 }, /* braille_dots_2368 */ + { 0x010028a7, 4364 }, /* braille_dots_12368 */ + { 0x010028a8, 8069 }, /* braille_dots_468 */ + { 0x010028a9, 5824 }, /* braille_dots_1468 */ + { 0x010028aa, 6976 }, /* braille_dots_2468 */ + { 0x010028ab, 4668 }, /* braille_dots_12468 */ + { 0x010028ac, 7536 }, /* braille_dots_3468 */ + { 0x010028ad, 5260 }, /* braille_dots_13468 */ + { 0x010028ae, 6412 }, /* braille_dots_23468 */ + { 0x010028af, 4073 }, /* braille_dots_123468 */ + { 0x010028b0, 8201 }, /* braille_dots_568 */ + { 0x010028b1, 5964 }, /* braille_dots_1568 */ + { 0x010028b2, 7116 }, /* braille_dots_2568 */ + { 0x010028b3, 4816 }, /* braille_dots_12568 */ + { 0x010028b4, 7676 }, /* braille_dots_3568 */ + { 0x010028b5, 5408 }, /* braille_dots_13568 */ + { 0x010028b6, 6560 }, /* braille_dots_23568 */ + { 0x010028b7, 4229 }, /* braille_dots_123568 */ + { 0x010028b8, 7948 }, /* braille_dots_4568 */ + { 0x010028b9, 5696 }, /* braille_dots_14568 */ + { 0x010028ba, 6848 }, /* braille_dots_24568 */ + { 0x010028bb, 4533 }, /* braille_dots_124568 */ + { 0x010028bc, 7408 }, /* braille_dots_34568 */ + { 0x010028bd, 5125 }, /* braille_dots_134568 */ + { 0x010028be, 6277 }, /* braille_dots_234568 */ + { 0x010028bf, 3931 }, /* braille_dots_1234568 */ + { 0x010028c0, 8346 }, /* braille_dots_78 */ + { 0x010028c1, 6118 }, /* braille_dots_178 */ + { 0x010028c2, 7270 }, /* braille_dots_278 */ + { 0x010028c3, 4979 }, /* braille_dots_1278 */ + { 0x010028c4, 7830 }, /* braille_dots_378 */ + { 0x010028c5, 5571 }, /* braille_dots_1378 */ + { 0x010028c6, 6723 }, /* braille_dots_2378 */ + { 0x010028c7, 4401 }, /* braille_dots_12378 */ + { 0x010028c8, 8102 }, /* braille_dots_478 */ + { 0x010028c9, 5859 }, /* braille_dots_1478 */ + { 0x010028ca, 7011 }, /* braille_dots_2478 */ + { 0x010028cb, 4705 }, /* braille_dots_12478 */ + { 0x010028cc, 7571 }, /* braille_dots_3478 */ + { 0x010028cd, 5297 }, /* braille_dots_13478 */ + { 0x010028ce, 6449 }, /* braille_dots_23478 */ + { 0x010028cf, 4112 }, /* braille_dots_123478 */ + { 0x010028d0, 8234 }, /* braille_dots_578 */ + { 0x010028d1, 5999 }, /* braille_dots_1578 */ + { 0x010028d2, 7151 }, /* braille_dots_2578 */ + { 0x010028d3, 4853 }, /* braille_dots_12578 */ + { 0x010028d4, 7711 }, /* braille_dots_3578 */ + { 0x010028d5, 5445 }, /* braille_dots_13578 */ + { 0x010028d6, 6597 }, /* braille_dots_23578 */ + { 0x010028d7, 4268 }, /* braille_dots_123578 */ + { 0x010028d8, 7983 }, /* braille_dots_4578 */ + { 0x010028d9, 5733 }, /* braille_dots_14578 */ + { 0x010028da, 6885 }, /* braille_dots_24578 */ + { 0x010028db, 4572 }, /* braille_dots_124578 */ + { 0x010028dc, 7445 }, /* braille_dots_34578 */ + { 0x010028dd, 5164 }, /* braille_dots_134578 */ + { 0x010028de, 6316 }, /* braille_dots_234578 */ + { 0x010028df, 3972 }, /* braille_dots_1234578 */ + { 0x010028e0, 8298 }, /* braille_dots_678 */ + { 0x010028e1, 6067 }, /* braille_dots_1678 */ + { 0x010028e2, 7219 }, /* braille_dots_2678 */ + { 0x010028e3, 4925 }, /* braille_dots_12678 */ + { 0x010028e4, 7779 }, /* braille_dots_3678 */ + { 0x010028e5, 5517 }, /* braille_dots_13678 */ + { 0x010028e6, 6669 }, /* braille_dots_23678 */ + { 0x010028e7, 4344 }, /* braille_dots_123678 */ + { 0x010028e8, 8051 }, /* braille_dots_4678 */ + { 0x010028e9, 5805 }, /* braille_dots_14678 */ + { 0x010028ea, 6957 }, /* braille_dots_24678 */ + { 0x010028eb, 4648 }, /* braille_dots_124678 */ + { 0x010028ec, 7517 }, /* braille_dots_34678 */ + { 0x010028ed, 5240 }, /* braille_dots_134678 */ + { 0x010028ee, 6392 }, /* braille_dots_234678 */ + { 0x010028ef, 4052 }, /* braille_dots_1234678 */ + { 0x010028f0, 8183 }, /* braille_dots_5678 */ + { 0x010028f1, 5945 }, /* braille_dots_15678 */ + { 0x010028f2, 7097 }, /* braille_dots_25678 */ + { 0x010028f3, 4796 }, /* braille_dots_125678 */ + { 0x010028f4, 7657 }, /* braille_dots_35678 */ + { 0x010028f5, 5388 }, /* braille_dots_135678 */ + { 0x010028f6, 6540 }, /* braille_dots_235678 */ + { 0x010028f7, 4208 }, /* braille_dots_1235678 */ + { 0x010028f8, 7929 }, /* braille_dots_45678 */ + { 0x010028f9, 5676 }, /* braille_dots_145678 */ + { 0x010028fa, 6828 }, /* braille_dots_245678 */ + { 0x010028fb, 4512 }, /* braille_dots_1245678 */ + { 0x010028fc, 7388 }, /* braille_dots_345678 */ + { 0x010028fd, 5104 }, /* braille_dots_1345678 */ + { 0x010028fe, 6256 }, /* braille_dots_2345678 */ + { 0x010028ff, 3909 }, /* braille_dots_12345678 */ + { 0x100000a8, 16910 }, /* hpmute_acute */ + { 0x100000a9, 16977 }, /* hpmute_grave */ + { 0x100000aa, 16923 }, /* hpmute_asciicircum */ + { 0x100000ab, 16960 }, /* hpmute_diaeresis */ + { 0x100000ac, 16942 }, /* hpmute_asciitilde */ + { 0x100000af, 16867 }, /* hplira */ + { 0x100000be, 16813 }, /* hpguilder */ + { 0x100000ee, 17014 }, /* hpYdiaeresis */ + { 0x100000f6, 16874 }, /* hplongminus */ + { 0x100000fc, 16767 }, /* hpblock */ + { 0x1000fe22, 10414 }, /* Ddiaeresis */ + { 0x1000fe27, 10344 }, /* Dacute_accent */ + { 0x1000fe2c, 10379 }, /* Dcedilla_accent */ + { 0x1000fe5e, 10395 }, /* Dcircumflex_accent */ + { 0x1000fe60, 11189 }, /* Dgrave_accent */ + { 0x1000fe7e, 11417 }, /* Dtilde */ + { 0x1000feb0, 11388 }, /* Dring_accent */ + { 0x1000ff00, 11380 }, /* DRemove */ + { 0x1000ff48, 16886 }, /* hpModelock1 */ + { 0x1000ff49, 16898 }, /* hpModelock2 */ + { 0x1000ff6c, 16990 }, /* hpReset */ + { 0x1000ff6d, 16998 }, /* hpSystem */ + { 0x1000ff6e, 17007 }, /* hpUser */ + { 0x1000ff6f, 16775 }, /* hpClearLine */ + { 0x1000ff70, 16836 }, /* hpInsertLine */ + { 0x1000ff71, 16800 }, /* hpDeleteLine */ + { 0x1000ff72, 16823 }, /* hpInsertChar */ + { 0x1000ff73, 16787 }, /* hpDeleteChar */ + { 0x1000ff74, 16757 }, /* hpBackTab */ + { 0x1000ff75, 16854 }, /* hpKP_BackTab */ + { 0x1000ff76, 12125 }, /* Ext16bit_L */ + { 0x1000ff77, 12136 }, /* Ext16bit_R */ + { 0x1004ff02, 20956 }, /* osfCopy */ + { 0x1004ff03, 20964 }, /* osfCut */ + { 0x1004ff04, 21163 }, /* osfPaste */ + { 0x1004ff07, 20900 }, /* osfBackTab */ + { 0x1004ff08, 20887 }, /* osfBackSpace */ + { 0x1004ff0b, 20947 }, /* osfClear */ + { 0x1004ff1b, 21026 }, /* osfEscape */ + { 0x1004ff31, 20876 }, /* osfAddMode */ + { 0x1004ff32, 21197 }, /* osfPrimaryPaste */ + { 0x1004ff33, 21213 }, /* osfQuickPaste */ + { 0x1004ff40, 21128 }, /* osfPageLeft */ + { 0x1004ff41, 21153 }, /* osfPageUp */ + { 0x1004ff42, 21116 }, /* osfPageDown */ + { 0x1004ff43, 21140 }, /* osfPageRight */ + { 0x1004ff44, 20864 }, /* osfActivate */ + { 0x1004ff45, 21080 }, /* osfMenuBar */ + { 0x1004ff51, 21064 }, /* osfLeft */ + { 0x1004ff52, 21290 }, /* osfUp */ + { 0x1004ff53, 21250 }, /* osfRight */ + { 0x1004ff54, 20996 }, /* osfDown */ + { 0x1004ff57, 21015 }, /* osfEndLine */ + { 0x1004ff58, 20924 }, /* osfBeginLine */ + { 0x1004ff59, 21004 }, /* osfEndData */ + { 0x1004ff5a, 20911 }, /* osfBeginData */ + { 0x1004ff5b, 21185 }, /* osfPrevMenu */ + { 0x1004ff5c, 21104 }, /* osfNextMenu */ + { 0x1004ff5d, 21172 }, /* osfPrevField */ + { 0x1004ff5e, 21091 }, /* osfNextField */ + { 0x1004ff60, 21259 }, /* osfSelect */ + { 0x1004ff63, 21054 }, /* osfInsert */ + { 0x1004ff65, 21282 }, /* osfUndo */ + { 0x1004ff67, 21072 }, /* osfMenu */ + { 0x1004ff69, 20937 }, /* osfCancel */ + { 0x1004ff6a, 21046 }, /* osfHelp */ + { 0x1004ff71, 21269 }, /* osfSelectAll */ + { 0x1004ff72, 20981 }, /* osfDeselectAll */ + { 0x1004ff73, 21227 }, /* osfReselect */ + { 0x1004ff74, 21036 }, /* osfExtend */ + { 0x1004ff78, 21239 }, /* osfRestore */ + { 0x1004ffff, 20971 }, /* osfDelete */ + { 0x1005ff00, 24032 }, /* SunFA_Grave */ + { 0x1005ff01, 24003 }, /* SunFA_Circum */ + { 0x1005ff02, 24044 }, /* SunFA_Tilde */ + { 0x1005ff03, 23977 }, /* SunFA_Acute */ + { 0x1005ff04, 24016 }, /* SunFA_Diaeresis */ + { 0x1005ff05, 23989 }, /* SunFA_Cedilla */ + { 0x1005ff10, 23963 }, /* SunF36 */ + { 0x1005ff11, 23970 }, /* SunF37 */ + { 0x1005ff60, 24180 }, /* SunSys_Req */ + { 0x1005ff70, 24163 }, /* SunProps */ + { 0x1005ff71, 24064 }, /* SunFront */ + { 0x1005ff72, 23948 }, /* SunCopy */ + { 0x1005ff73, 24073 }, /* SunOpen */ + { 0x1005ff74, 24103 }, /* SunPaste */ + { 0x1005ff75, 23956 }, /* SunCut */ + { 0x1005ff76, 24112 }, /* SunPowerSwitch */ + { 0x1005ff77, 23884 }, /* SunAudioLowerVolume */ + { 0x1005ff78, 23904 }, /* SunAudioMute */ + { 0x1005ff79, 23917 }, /* SunAudioRaiseVolume */ + { 0x1005ff7a, 24199 }, /* SunVideoDegauss */ + { 0x1005ff7b, 24215 }, /* SunVideoLowerBrightness */ + { 0x1005ff7c, 24239 }, /* SunVideoRaiseBrightness */ + { 0x1005ff7d, 24127 }, /* SunPowerSwitchShift */ + { 0x1008fe01, 28451 }, /* XF86Switch_VT_1 */ + { 0x1008fe02, 28518 }, /* XF86Switch_VT_2 */ + { 0x1008fe03, 28534 }, /* XF86Switch_VT_3 */ + { 0x1008fe04, 28550 }, /* XF86Switch_VT_4 */ + { 0x1008fe05, 28566 }, /* XF86Switch_VT_5 */ + { 0x1008fe06, 28582 }, /* XF86Switch_VT_6 */ + { 0x1008fe07, 28598 }, /* XF86Switch_VT_7 */ + { 0x1008fe08, 28614 }, /* XF86Switch_VT_8 */ + { 0x1008fe09, 28630 }, /* XF86Switch_VT_9 */ + { 0x1008fe0a, 28467 }, /* XF86Switch_VT_10 */ + { 0x1008fe0b, 28484 }, /* XF86Switch_VT_11 */ + { 0x1008fe0c, 28501 }, /* XF86Switch_VT_12 */ + { 0x1008fe20, 28777 }, /* XF86Ungrab */ + { 0x1008fe21, 27135 }, /* XF86ClearGrab */ + { 0x1008fe22, 27962 }, /* XF86Next_VMode */ + { 0x1008fe23, 28084 }, /* XF86Prev_VMode */ + { 0x1008fe24, 27742 }, /* XF86LogWindowTree */ + { 0x1008fe25, 27715 }, /* XF86LogGrabInfo */ + { 0x1008ff01, 27853 }, /* XF86ModeLock */ + { 0x1008ff02, 27888 }, /* XF86MonBrightnessUp */ + { 0x1008ff03, 27866 }, /* XF86MonBrightnessDown */ + { 0x1008ff04, 27491 }, /* XF86KbdLightOnOff */ + { 0x1008ff05, 27471 }, /* XF86KbdBrightnessUp */ + { 0x1008ff06, 27449 }, /* XF86KbdBrightnessDown */ + { 0x1008ff10, 28383 }, /* XF86Standby */ + { 0x1008ff11, 26749 }, /* XF86AudioLowerVolume */ + { 0x1008ff12, 26802 }, /* XF86AudioMute */ + { 0x1008ff13, 26873 }, /* XF86AudioRaiseVolume */ + { 0x1008ff14, 26845 }, /* XF86AudioPlay */ + { 0x1008ff15, 26962 }, /* XF86AudioStop */ + { 0x1008ff16, 26859 }, /* XF86AudioPrev */ + { 0x1008ff17, 26816 }, /* XF86AudioNext */ + { 0x1008ff18, 27412 }, /* XF86HomePage */ + { 0x1008ff19, 27760 }, /* XF86Mail */ + { 0x1008ff1a, 28395 }, /* XF86Start */ + { 0x1008ff1b, 28307 }, /* XF86Search */ + { 0x1008ff1c, 26914 }, /* XF86AudioRecord */ + { 0x1008ff1d, 27090 }, /* XF86Calculator */ + { 0x1008ff1e, 27808 }, /* XF86Memo */ + { 0x1008ff1f, 28681 }, /* XF86ToDoList */ + { 0x1008ff20, 27105 }, /* XF86Calendar */ + { 0x1008ff21, 28057 }, /* XF86PowerDown */ + { 0x1008ff22, 27173 }, /* XF86ContrastAdjust */ + { 0x1008ff23, 28177 }, /* XF86RockerUp */ + { 0x1008ff24, 28146 }, /* XF86RockerDown */ + { 0x1008ff25, 28161 }, /* XF86RockerEnter */ + { 0x1008ff26, 26985 }, /* XF86Back */ + { 0x1008ff27, 27317 }, /* XF86Forward */ + { 0x1008ff28, 28405 }, /* XF86Stop */ + { 0x1008ff29, 28113 }, /* XF86Refresh */ + { 0x1008ff2a, 28071 }, /* XF86PowerOff */ + { 0x1008ff2b, 28865 }, /* XF86WakeUp */ + { 0x1008ff2c, 27258 }, /* XF86Eject */ + { 0x1008ff2d, 28247 }, /* XF86ScreenSaver */ + { 0x1008ff2e, 28921 }, /* XF86WWW */ + { 0x1008ff2f, 28347 }, /* XF86Sleep */ + { 0x1008ff30, 27291 }, /* XF86Favorites */ + { 0x1008ff31, 26830 }, /* XF86AudioPause */ + { 0x1008ff32, 26770 }, /* XF86AudioMedia */ + { 0x1008ff33, 27918 }, /* XF86MyComputer */ + { 0x1008ff34, 28831 }, /* XF86VendorHome */ + { 0x1008ff35, 27701 }, /* XF86LightBulb */ + { 0x1008ff36, 28338 }, /* XF86Shop */ + { 0x1008ff37, 27400 }, /* XF86History */ + { 0x1008ff38, 28001 }, /* XF86OpenURL */ + { 0x1008ff39, 26655 }, /* XF86AddFavorite */ + { 0x1008ff3a, 27425 }, /* XF86HotLinks */ + { 0x1008ff3b, 27054 }, /* XF86BrightnessAdjust */ + { 0x1008ff3c, 27305 }, /* XF86Finance */ + { 0x1008ff3d, 27159 }, /* XF86Community */ + { 0x1008ff3e, 26946 }, /* XF86AudioRewind */ + { 0x1008ff3f, 26994 }, /* XF86BackForward */ + { 0x1008ff40, 27509 }, /* XF86Launch0 */ + { 0x1008ff41, 27521 }, /* XF86Launch1 */ + { 0x1008ff42, 27533 }, /* XF86Launch2 */ + { 0x1008ff43, 27545 }, /* XF86Launch3 */ + { 0x1008ff44, 27557 }, /* XF86Launch4 */ + { 0x1008ff45, 27569 }, /* XF86Launch5 */ + { 0x1008ff46, 27581 }, /* XF86Launch6 */ + { 0x1008ff47, 27593 }, /* XF86Launch7 */ + { 0x1008ff48, 27605 }, /* XF86Launch8 */ + { 0x1008ff49, 27617 }, /* XF86Launch9 */ + { 0x1008ff4a, 27629 }, /* XF86LaunchA */ + { 0x1008ff4b, 27641 }, /* XF86LaunchB */ + { 0x1008ff4c, 27653 }, /* XF86LaunchC */ + { 0x1008ff4d, 27665 }, /* XF86LaunchD */ + { 0x1008ff4e, 27677 }, /* XF86LaunchE */ + { 0x1008ff4f, 27689 }, /* XF86LaunchF */ + { 0x1008ff50, 26671 }, /* XF86ApplicationLeft */ + { 0x1008ff51, 26691 }, /* XF86ApplicationRight */ + { 0x1008ff52, 27045 }, /* XF86Book */ + { 0x1008ff53, 27118 }, /* XF86CD */ + { 0x1008ff54, 27075 }, /* XF86Calculater */ + { 0x1008ff55, 27125 }, /* XF86Clear */ + { 0x1008ff56, 27149 }, /* XF86Close */ + { 0x1008ff57, 27192 }, /* XF86Copy */ + { 0x1008ff58, 27201 }, /* XF86Cut */ + { 0x1008ff59, 27224 }, /* XF86Display */ + { 0x1008ff5a, 27250 }, /* XF86DOS */ + { 0x1008ff5b, 27236 }, /* XF86Documents */ + { 0x1008ff5c, 27268 }, /* XF86Excel */ + { 0x1008ff5d, 27278 }, /* XF86Explorer */ + { 0x1008ff5e, 27360 }, /* XF86Game */ + { 0x1008ff5f, 27369 }, /* XF86Go */ + { 0x1008ff60, 27438 }, /* XF86iTouch */ + { 0x1008ff61, 27731 }, /* XF86LogOff */ + { 0x1008ff62, 27785 }, /* XF86Market */ + { 0x1008ff63, 27796 }, /* XF86Meeting */ + { 0x1008ff65, 27817 }, /* XF86MenuKB */ + { 0x1008ff66, 27828 }, /* XF86MenuPB */ + { 0x1008ff67, 27933 }, /* XF86MySites */ + { 0x1008ff68, 27945 }, /* XF86New */ + { 0x1008ff69, 27953 }, /* XF86News */ + { 0x1008ff6a, 27977 }, /* XF86OfficeHome */ + { 0x1008ff6b, 27992 }, /* XF86Open */ + { 0x1008ff6c, 28013 }, /* XF86Option */ + { 0x1008ff6d, 28024 }, /* XF86Paste */ + { 0x1008ff6e, 28034 }, /* XF86Phone */ + { 0x1008ff70, 28099 }, /* XF86Q */ + { 0x1008ff72, 28136 }, /* XF86Reply */ + { 0x1008ff73, 28125 }, /* XF86Reload */ + { 0x1008ff74, 28190 }, /* XF86RotateWindows */ + { 0x1008ff75, 28223 }, /* XF86RotationPB */ + { 0x1008ff76, 28208 }, /* XF86RotationKB */ + { 0x1008ff77, 28238 }, /* XF86Save */ + { 0x1008ff78, 28294 }, /* XF86ScrollUp */ + { 0x1008ff79, 28279 }, /* XF86ScrollDown */ + { 0x1008ff7a, 28263 }, /* XF86ScrollClick */ + { 0x1008ff7b, 28329 }, /* XF86Send */ + { 0x1008ff7c, 28357 }, /* XF86Spell */ + { 0x1008ff7d, 28367 }, /* XF86SplitScreen */ + { 0x1008ff7e, 28427 }, /* XF86Support */ + { 0x1008ff7f, 28646 }, /* XF86TaskPane */ + { 0x1008ff80, 28659 }, /* XF86Terminal */ + { 0x1008ff81, 28694 }, /* XF86Tools */ + { 0x1008ff82, 28766 }, /* XF86Travel */ + { 0x1008ff84, 28812 }, /* XF86UserPB */ + { 0x1008ff85, 28788 }, /* XF86User1KB */ + { 0x1008ff86, 28800 }, /* XF86User2KB */ + { 0x1008ff87, 28846 }, /* XF86Video */ + { 0x1008ff88, 28887 }, /* XF86WheelButton */ + { 0x1008ff89, 28912 }, /* XF86Word */ + { 0x1008ff8a, 28929 }, /* XF86Xfer */ + { 0x1008ff8b, 28949 }, /* XF86ZoomIn */ + { 0x1008ff8c, 28960 }, /* XF86ZoomOut */ + { 0x1008ff8d, 26976 }, /* XF86Away */ + { 0x1008ff8e, 27839 }, /* XF86Messenger */ + { 0x1008ff8f, 28876 }, /* XF86WebCam */ + { 0x1008ff90, 27769 }, /* XF86MailForward */ + { 0x1008ff91, 28044 }, /* XF86Pictures */ + { 0x1008ff92, 27908 }, /* XF86Music */ + { 0x1008ff93, 27010 }, /* XF86Battery */ + { 0x1008ff94, 27031 }, /* XF86Bluetooth */ + { 0x1008ff95, 28903 }, /* XF86WLAN */ + { 0x1008ff96, 28823 }, /* XF86UWB */ + { 0x1008ff97, 26732 }, /* XF86AudioForward */ + { 0x1008ff98, 26930 }, /* XF86AudioRepeat */ + { 0x1008ff99, 26894 }, /* XF86AudioRandomPlay */ + { 0x1008ff9a, 28414 }, /* XF86Subtitle */ + { 0x1008ff9b, 26712 }, /* XF86AudioCycleTrack */ + { 0x1008ff9c, 27209 }, /* XF86CycleAngle */ + { 0x1008ff9d, 27329 }, /* XF86FrameBack */ + { 0x1008ff9e, 27343 }, /* XF86FrameForward */ + { 0x1008ff9f, 28672 }, /* XF86Time */ + { 0x1008ffa0, 28318 }, /* XF86Select */ + { 0x1008ffa1, 28856 }, /* XF86View */ + { 0x1008ffa2, 28704 }, /* XF86TopMenu */ + { 0x1008ffa3, 28105 }, /* XF86Red */ + { 0x1008ffa4, 27376 }, /* XF86Green */ + { 0x1008ffa5, 28938 }, /* XF86Yellow */ + { 0x1008ffa6, 27022 }, /* XF86Blue */ + { 0x1008ffa7, 28439 }, /* XF86Suspend */ + { 0x1008ffa8, 27386 }, /* XF86Hibernate */ + { 0x1008ffa9, 28747 }, /* XF86TouchpadToggle */ + { 0x1008ffb0, 28732 }, /* XF86TouchpadOn */ + { 0x1008ffb1, 28716 }, /* XF86TouchpadOff */ + { 0x1008ffb2, 26785 }, /* XF86AudioMicMute */ +}; + +#endif diff --git a/src/lib/ecore_win32/ecore_win32_private.h b/src/lib/ecore_win32/ecore_win32_private.h index e3e44264cc..759ea79b92 100644 --- a/src/lib/ecore_win32/ecore_win32_private.h +++ b/src/lib/ecore_win32/ecore_win32_private.h @@ -57,7 +57,6 @@ struct _Ecore_Win32_Callback_Data unsigned long timestamp; int x; int y; - Eina_Bool discard_ctrl; }; struct _Ecore_Win32_Window @@ -135,7 +134,7 @@ extern unsigned long _ecore_win32_event_last_time; extern Ecore_Win32_Window *_ecore_win32_event_last_window; -void _ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg, int is_keystroke); +void _ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg); void _ecore_win32_event_handle_key_release(Ecore_Win32_Callback_Data *msg); void _ecore_win32_event_handle_button_press(Ecore_Win32_Callback_Data *msg, int button); void _ecore_win32_event_handle_button_release(Ecore_Win32_Callback_Data *msg, int button);