From 8072bd1a26801069ff2030df835806ba25a155a3 Mon Sep 17 00:00:00 2001 From: James Le Cuirot Date: Sat, 19 Apr 2025 14:40:15 +0100 Subject: [PATCH] fix: Split XKB code out of XWindowsUtil to allow building without X11 The xorgproto headers are still required for EI, but nothing more. Note that the GUI hasn't needed X11 for a while. --- .../io.github.input_leap.input-leap.yaml | 2 +- src/gui/CMakeLists.txt | 4 +- src/lib/platform/CMakeLists.txt | 8 +- src/lib/platform/EiKeyState.cpp | 6 +- src/lib/platform/XKBUtil.cpp | 1488 +++++++++++++++++ src/lib/platform/XKBUtil.h | 56 + src/lib/platform/XWindowsKeyState.cpp | 16 +- src/lib/platform/XWindowsScreen.cpp | 3 +- src/lib/platform/XWindowsUtil.cpp | 1459 ---------------- src/lib/platform/XWindowsUtil.h | 25 - 10 files changed, 1566 insertions(+), 1501 deletions(-) create mode 100644 src/lib/platform/XKBUtil.cpp create mode 100644 src/lib/platform/XKBUtil.h diff --git a/dist/flatpak/io.github.input_leap.input-leap.yaml b/dist/flatpak/io.github.input_leap.input-leap.yaml index f9d9d2c5..a83375ec 100644 --- a/dist/flatpak/io.github.input_leap.input-leap.yaml +++ b/dist/flatpak/io.github.input_leap.input-leap.yaml @@ -122,7 +122,7 @@ modules: - -DQT_DEFAULT_MAJOR_VERSION=6 - -DINPUTLEAP_BUILD_GUI=ON - -DINPUTLEAP_BUILD_TESTS=OFF - - -DINPUTLEAP_BUILD_X11=ON # FIXME: undefined reference to `XWindowsUtil::mapKeySymToKeyID otherwise + - -DINPUTLEAP_BUILD_X11=ON - -DINPUTLEAP_BUILD_LIBEI=ON sources: - type: git diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index f73a5620..5668449b 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -217,8 +217,8 @@ if (BUILD_CARBON) find_library(APPSERVICES_LIB ApplicationServices) target_link_libraries(input-leap ${APPSERVICES_LIB}) endif() -if (BUILD_XWINDOWS) - target_link_libraries (input-leap dns_sd X11 Threads::Threads) +if (BUILD_XWINDOWS OR BUILD_LIBEI) + target_link_libraries (input-leap dns_sd Threads::Threads) endif() target_link_libraries (input-leap common) diff --git a/src/lib/platform/CMakeLists.txt b/src/lib/platform/CMakeLists.txt index 38217dab..036c26af 100644 --- a/src/lib/platform/CMakeLists.txt +++ b/src/lib/platform/CMakeLists.txt @@ -30,6 +30,10 @@ if (BUILD_LIBEI) file(GLOB ei_headers "Ei*.h" "Portal*.h") file(GLOB ei_sources "Ei*.cpp" "Portal*.cpp") endif() +if (BUILD_XWINDOWS OR BUILD_LIBEI) + file(GLOB xkb_headers "XKB*.h") + file(GLOB xkb_sources "XKB*.cpp") +endif() # CMake does not understand that .mm files should not go together with .cpp files into an Unity # build that is compiled in C++ mode @@ -42,8 +46,8 @@ set_source_files_properties( "OSXScreenSaverUtil.mm" PROPERTIES SKIP_UNITY_BUILD_INCLUSION TRUE) -list(APPEND sources ${mswin_sources} ${carbon_sources} ${xwin_sources} ${ei_sources}) -list(APPEND headers ${mswin_headers} ${carbon_headers} ${xwin_headers} ${ei_headers}) +list(APPEND sources ${mswin_sources} ${carbon_sources} ${xwin_sources} ${ei_sources} ${xkb_sources}) +list(APPEND headers ${mswin_headers} ${carbon_headers} ${xwin_headers} ${ei_headers} ${xkb_headers}) if(INPUTLEAP_ADD_HEADERS) list(APPEND sources ${headers}) diff --git a/src/lib/platform/EiKeyState.cpp b/src/lib/platform/EiKeyState.cpp index 4587c6d0..e8f3e9e5 100644 --- a/src/lib/platform/EiKeyState.cpp +++ b/src/lib/platform/EiKeyState.cpp @@ -15,7 +15,7 @@ */ #include "platform/EiKeyState.h" -#include "platform/XWindowsUtil.h" +#include "platform/XKBUtil.h" #include "base/Log.h" @@ -201,7 +201,7 @@ void EiKeyState::getKeyMap(inputleap::KeyMap& keyMap) inputleap::KeyMap::KeyItem item{}; xkb_keysym_t keysym = syms[0]; KeySym sym = static_cast(keysym); - item.m_id = XWindowsUtil::mapKeySymToKeyID(sym); + item.m_id = XKBUtil::mapKeySymToKeyID(sym); item.m_button = static_cast(keycode) - 8; // X keycode offset item.m_group = group; @@ -266,7 +266,7 @@ KeyID EiKeyState::map_key_from_keyval(uint32_t keyval) const KeySym keysym = static_cast(xkb_keysym); LOG_DEBUG1("mapped code=%d to keysym=0x%04lx", keyval, keysym); - KeyID keyid = XWindowsUtil::mapKeySymToKeyID(keysym); + KeyID keyid = XKBUtil::mapKeySymToKeyID(keysym); LOG_DEBUG1("mapped keysym=0x%04lx to keyID=%d", keysym, keyid); return keyid; diff --git a/src/lib/platform/XKBUtil.cpp b/src/lib/platform/XKBUtil.cpp new file mode 100644 index 00000000..5a1005e7 --- /dev/null +++ b/src/lib/platform/XKBUtil.cpp @@ -0,0 +1,1488 @@ +/* + * InputLeap -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2002 Chris Schoeneman + * + * This package is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * found in the file LICENSE that should have accompanied this file. + * + * This package is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "platform/XKBUtil.h" + +#include "inputleap/key_types.h" + +#define XK_APL +#define XK_ARABIC +#define XK_ARMENIAN +#define XK_CAUCASUS +#define XK_CURRENCY +#define XK_CYRILLIC +#define XK_GEORGIAN +#define XK_GREEK +#define XK_HEBREW +#define XK_KATAKANA +#define XK_KOREAN +#define XK_LATIN1 +#define XK_LATIN2 +#define XK_LATIN3 +#define XK_LATIN4 +#define XK_LATIN8 +#define XK_LATIN9 +#define XK_MISCELLANY +#define XK_PUBLISHING +#define XK_SPECIAL +#define XK_TECHNICAL +#define XK_THAI +#define XK_VIETNAMESE +#define XK_XKB_KEYS +#include + +#if !defined(XK_OE) +#define XK_OE 0x13bc +#endif +#if !defined(XK_oe) +#define XK_oe 0x13bd +#endif +#if !defined(XK_Ydiaeresis) +#define XK_Ydiaeresis 0x13be +#endif + +namespace inputleap { + +/* + * This table maps keysym values into the corresponding ISO 10646 + * (UCS, Unicode) values. + * + * The array keysymtab[] contains pairs of X11 keysym values for graphical + * characters and the corresponding Unicode value. + * + * Author: Markus G. Kuhn , + * University of Cambridge, April 2001 + * + * Special thanks to Richard Verhoeven for preparing + * an initial draft of the mapping table. + * + * This software is in the public domain. Share and enjoy! + */ + +struct codepair { + KeySym keysym; + std::uint32_t ucs4; +} s_keymap[] = { +{ XK_Aogonek, 0x0104 }, /* LATIN CAPITAL LETTER A WITH OGONEK */ +{ XK_breve, 0x02d8 }, /* BREVE */ +{ XK_Lstroke, 0x0141 }, /* LATIN CAPITAL LETTER L WITH STROKE */ +{ XK_Lcaron, 0x013d }, /* LATIN CAPITAL LETTER L WITH CARON */ +{ XK_Sacute, 0x015a }, /* LATIN CAPITAL LETTER S WITH ACUTE */ +{ XK_Scaron, 0x0160 }, /* LATIN CAPITAL LETTER S WITH CARON */ +{ XK_Scedilla, 0x015e }, /* LATIN CAPITAL LETTER S WITH CEDILLA */ +{ XK_Tcaron, 0x0164 }, /* LATIN CAPITAL LETTER T WITH CARON */ +{ XK_Zacute, 0x0179 }, /* LATIN CAPITAL LETTER Z WITH ACUTE */ +{ XK_Zcaron, 0x017d }, /* LATIN CAPITAL LETTER Z WITH CARON */ +{ XK_Zabovedot, 0x017b }, /* LATIN CAPITAL LETTER Z WITH DOT ABOVE */ +{ XK_aogonek, 0x0105 }, /* LATIN SMALL LETTER A WITH OGONEK */ +{ XK_ogonek, 0x02db }, /* OGONEK */ +{ XK_lstroke, 0x0142 }, /* LATIN SMALL LETTER L WITH STROKE */ +{ XK_lcaron, 0x013e }, /* LATIN SMALL LETTER L WITH CARON */ +{ XK_sacute, 0x015b }, /* LATIN SMALL LETTER S WITH ACUTE */ +{ XK_caron, 0x02c7 }, /* CARON */ +{ XK_scaron, 0x0161 }, /* LATIN SMALL LETTER S WITH CARON */ +{ XK_scedilla, 0x015f }, /* LATIN SMALL LETTER S WITH CEDILLA */ +{ XK_tcaron, 0x0165 }, /* LATIN SMALL LETTER T WITH CARON */ +{ XK_zacute, 0x017a }, /* LATIN SMALL LETTER Z WITH ACUTE */ +{ XK_doubleacute, 0x02dd }, /* DOUBLE ACUTE ACCENT */ +{ XK_zcaron, 0x017e }, /* LATIN SMALL LETTER Z WITH CARON */ +{ XK_zabovedot, 0x017c }, /* LATIN SMALL LETTER Z WITH DOT ABOVE */ +{ XK_Racute, 0x0154 }, /* LATIN CAPITAL LETTER R WITH ACUTE */ +{ XK_Abreve, 0x0102 }, /* LATIN CAPITAL LETTER A WITH BREVE */ +{ XK_Lacute, 0x0139 }, /* LATIN CAPITAL LETTER L WITH ACUTE */ +{ XK_Cacute, 0x0106 }, /* LATIN CAPITAL LETTER C WITH ACUTE */ +{ XK_Ccaron, 0x010c }, /* LATIN CAPITAL LETTER C WITH CARON */ +{ XK_Eogonek, 0x0118 }, /* LATIN CAPITAL LETTER E WITH OGONEK */ +{ XK_Ecaron, 0x011a }, /* LATIN CAPITAL LETTER E WITH CARON */ +{ XK_Dcaron, 0x010e }, /* LATIN CAPITAL LETTER D WITH CARON */ +{ XK_Dstroke, 0x0110 }, /* LATIN CAPITAL LETTER D WITH STROKE */ +{ XK_Nacute, 0x0143 }, /* LATIN CAPITAL LETTER N WITH ACUTE */ +{ XK_Ncaron, 0x0147 }, /* LATIN CAPITAL LETTER N WITH CARON */ +{ XK_Odoubleacute, 0x0150 }, /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ +{ XK_Rcaron, 0x0158 }, /* LATIN CAPITAL LETTER R WITH CARON */ +{ XK_Uring, 0x016e }, /* LATIN CAPITAL LETTER U WITH RING ABOVE */ +{ XK_Udoubleacute, 0x0170 }, /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ +{ XK_Tcedilla, 0x0162 }, /* LATIN CAPITAL LETTER T WITH CEDILLA */ +{ XK_racute, 0x0155 }, /* LATIN SMALL LETTER R WITH ACUTE */ +{ XK_abreve, 0x0103 }, /* LATIN SMALL LETTER A WITH BREVE */ +{ XK_lacute, 0x013a }, /* LATIN SMALL LETTER L WITH ACUTE */ +{ XK_cacute, 0x0107 }, /* LATIN SMALL LETTER C WITH ACUTE */ +{ XK_ccaron, 0x010d }, /* LATIN SMALL LETTER C WITH CARON */ +{ XK_eogonek, 0x0119 }, /* LATIN SMALL LETTER E WITH OGONEK */ +{ XK_ecaron, 0x011b }, /* LATIN SMALL LETTER E WITH CARON */ +{ XK_dcaron, 0x010f }, /* LATIN SMALL LETTER D WITH CARON */ +{ XK_dstroke, 0x0111 }, /* LATIN SMALL LETTER D WITH STROKE */ +{ XK_nacute, 0x0144 }, /* LATIN SMALL LETTER N WITH ACUTE */ +{ XK_ncaron, 0x0148 }, /* LATIN SMALL LETTER N WITH CARON */ +{ XK_odoubleacute, 0x0151 }, /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */ +{ XK_rcaron, 0x0159 }, /* LATIN SMALL LETTER R WITH CARON */ +{ XK_uring, 0x016f }, /* LATIN SMALL LETTER U WITH RING ABOVE */ +{ XK_udoubleacute, 0x0171 }, /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */ +{ XK_tcedilla, 0x0163 }, /* LATIN SMALL LETTER T WITH CEDILLA */ +{ XK_abovedot, 0x02d9 }, /* DOT ABOVE */ +{ XK_Hstroke, 0x0126 }, /* LATIN CAPITAL LETTER H WITH STROKE */ +{ XK_Hcircumflex, 0x0124 }, /* LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ +{ XK_Iabovedot, 0x0130 }, /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ +{ XK_Gbreve, 0x011e }, /* LATIN CAPITAL LETTER G WITH BREVE */ +{ XK_Jcircumflex, 0x0134 }, /* LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ +{ XK_hstroke, 0x0127 }, /* LATIN SMALL LETTER H WITH STROKE */ +{ XK_hcircumflex, 0x0125 }, /* LATIN SMALL LETTER H WITH CIRCUMFLEX */ +{ XK_idotless, 0x0131 }, /* LATIN SMALL LETTER DOTLESS I */ +{ XK_gbreve, 0x011f }, /* LATIN SMALL LETTER G WITH BREVE */ +{ XK_jcircumflex, 0x0135 }, /* LATIN SMALL LETTER J WITH CIRCUMFLEX */ +{ XK_Cabovedot, 0x010a }, /* LATIN CAPITAL LETTER C WITH DOT ABOVE */ +{ XK_Ccircumflex, 0x0108 }, /* LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ +{ XK_Gabovedot, 0x0120 }, /* LATIN CAPITAL LETTER G WITH DOT ABOVE */ +{ XK_Gcircumflex, 0x011c }, /* LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ +{ XK_Ubreve, 0x016c }, /* LATIN CAPITAL LETTER U WITH BREVE */ +{ XK_Scircumflex, 0x015c }, /* LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ +{ XK_cabovedot, 0x010b }, /* LATIN SMALL LETTER C WITH DOT ABOVE */ +{ XK_ccircumflex, 0x0109 }, /* LATIN SMALL LETTER C WITH CIRCUMFLEX */ +{ XK_gabovedot, 0x0121 }, /* LATIN SMALL LETTER G WITH DOT ABOVE */ +{ XK_gcircumflex, 0x011d }, /* LATIN SMALL LETTER G WITH CIRCUMFLEX */ +{ XK_ubreve, 0x016d }, /* LATIN SMALL LETTER U WITH BREVE */ +{ XK_scircumflex, 0x015d }, /* LATIN SMALL LETTER S WITH CIRCUMFLEX */ +{ XK_kra, 0x0138 }, /* LATIN SMALL LETTER KRA */ +{ XK_Rcedilla, 0x0156 }, /* LATIN CAPITAL LETTER R WITH CEDILLA */ +{ XK_Itilde, 0x0128 }, /* LATIN CAPITAL LETTER I WITH TILDE */ +{ XK_Lcedilla, 0x013b }, /* LATIN CAPITAL LETTER L WITH CEDILLA */ +{ XK_Emacron, 0x0112 }, /* LATIN CAPITAL LETTER E WITH MACRON */ +{ XK_Gcedilla, 0x0122 }, /* LATIN CAPITAL LETTER G WITH CEDILLA */ +{ XK_Tslash, 0x0166 }, /* LATIN CAPITAL LETTER T WITH STROKE */ +{ XK_rcedilla, 0x0157 }, /* LATIN SMALL LETTER R WITH CEDILLA */ +{ XK_itilde, 0x0129 }, /* LATIN SMALL LETTER I WITH TILDE */ +{ XK_lcedilla, 0x013c }, /* LATIN SMALL LETTER L WITH CEDILLA */ +{ XK_emacron, 0x0113 }, /* LATIN SMALL LETTER E WITH MACRON */ +{ XK_gcedilla, 0x0123 }, /* LATIN SMALL LETTER G WITH CEDILLA */ +{ XK_tslash, 0x0167 }, /* LATIN SMALL LETTER T WITH STROKE */ +{ XK_ENG, 0x014a }, /* LATIN CAPITAL LETTER ENG */ +{ XK_eng, 0x014b }, /* LATIN SMALL LETTER ENG */ +{ XK_Amacron, 0x0100 }, /* LATIN CAPITAL LETTER A WITH MACRON */ +{ XK_Iogonek, 0x012e }, /* LATIN CAPITAL LETTER I WITH OGONEK */ +{ XK_Eabovedot, 0x0116 }, /* LATIN CAPITAL LETTER E WITH DOT ABOVE */ +{ XK_Imacron, 0x012a }, /* LATIN CAPITAL LETTER I WITH MACRON */ +{ XK_Ncedilla, 0x0145 }, /* LATIN CAPITAL LETTER N WITH CEDILLA */ +{ XK_Omacron, 0x014c }, /* LATIN CAPITAL LETTER O WITH MACRON */ +{ XK_Kcedilla, 0x0136 }, /* LATIN CAPITAL LETTER K WITH CEDILLA */ +{ XK_Uogonek, 0x0172 }, /* LATIN CAPITAL LETTER U WITH OGONEK */ +{ XK_Utilde, 0x0168 }, /* LATIN CAPITAL LETTER U WITH TILDE */ +{ XK_Umacron, 0x016a }, /* LATIN CAPITAL LETTER U WITH MACRON */ +{ XK_amacron, 0x0101 }, /* LATIN SMALL LETTER A WITH MACRON */ +{ XK_iogonek, 0x012f }, /* LATIN SMALL LETTER I WITH OGONEK */ +{ XK_eabovedot, 0x0117 }, /* LATIN SMALL LETTER E WITH DOT ABOVE */ +{ XK_imacron, 0x012b }, /* LATIN SMALL LETTER I WITH MACRON */ +{ XK_ncedilla, 0x0146 }, /* LATIN SMALL LETTER N WITH CEDILLA */ +{ XK_omacron, 0x014d }, /* LATIN SMALL LETTER O WITH MACRON */ +{ XK_kcedilla, 0x0137 }, /* LATIN SMALL LETTER K WITH CEDILLA */ +{ XK_uogonek, 0x0173 }, /* LATIN SMALL LETTER U WITH OGONEK */ +{ XK_utilde, 0x0169 }, /* LATIN SMALL LETTER U WITH TILDE */ +{ XK_umacron, 0x016b }, /* LATIN SMALL LETTER U WITH MACRON */ +#if defined(XK_Babovedot) +{ XK_Babovedot, 0x1e02 }, /* LATIN CAPITAL LETTER B WITH DOT ABOVE */ +{ XK_babovedot, 0x1e03 }, /* LATIN SMALL LETTER B WITH DOT ABOVE */ +{ XK_Dabovedot, 0x1e0a }, /* LATIN CAPITAL LETTER D WITH DOT ABOVE */ +{ XK_Wgrave, 0x1e80 }, /* LATIN CAPITAL LETTER W WITH GRAVE */ +{ XK_Wacute, 0x1e82 }, /* LATIN CAPITAL LETTER W WITH ACUTE */ +{ XK_dabovedot, 0x1e0b }, /* LATIN SMALL LETTER D WITH DOT ABOVE */ +{ XK_Ygrave, 0x1ef2 }, /* LATIN CAPITAL LETTER Y WITH GRAVE */ +{ XK_Fabovedot, 0x1e1e }, /* LATIN CAPITAL LETTER F WITH DOT ABOVE */ +{ XK_fabovedot, 0x1e1f }, /* LATIN SMALL LETTER F WITH DOT ABOVE */ +{ XK_Mabovedot, 0x1e40 }, /* LATIN CAPITAL LETTER M WITH DOT ABOVE */ +{ XK_mabovedot, 0x1e41 }, /* LATIN SMALL LETTER M WITH DOT ABOVE */ +{ XK_Pabovedot, 0x1e56 }, /* LATIN CAPITAL LETTER P WITH DOT ABOVE */ +{ XK_wgrave, 0x1e81 }, /* LATIN SMALL LETTER W WITH GRAVE */ +{ XK_pabovedot, 0x1e57 }, /* LATIN SMALL LETTER P WITH DOT ABOVE */ +{ XK_wacute, 0x1e83 }, /* LATIN SMALL LETTER W WITH ACUTE */ +{ XK_Sabovedot, 0x1e60 }, /* LATIN CAPITAL LETTER S WITH DOT ABOVE */ +{ XK_ygrave, 0x1ef3 }, /* LATIN SMALL LETTER Y WITH GRAVE */ +{ XK_Wdiaeresis, 0x1e84 }, /* LATIN CAPITAL LETTER W WITH DIAERESIS */ +{ XK_wdiaeresis, 0x1e85 }, /* LATIN SMALL LETTER W WITH DIAERESIS */ +{ XK_sabovedot, 0x1e61 }, /* LATIN SMALL LETTER S WITH DOT ABOVE */ +{ XK_Wcircumflex, 0x0174 }, /* LATIN CAPITAL LETTER W WITH CIRCUMFLEX */ +{ XK_Tabovedot, 0x1e6a }, /* LATIN CAPITAL LETTER T WITH DOT ABOVE */ +{ XK_Ycircumflex, 0x0176 }, /* LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */ +{ XK_wcircumflex, 0x0175 }, /* LATIN SMALL LETTER W WITH CIRCUMFLEX */ +{ XK_tabovedot, 0x1e6b }, /* LATIN SMALL LETTER T WITH DOT ABOVE */ +{ XK_ycircumflex, 0x0177 }, /* LATIN SMALL LETTER Y WITH CIRCUMFLEX */ +#endif // defined(XK_Babovedot) +#if defined(XK_overline) +{ XK_overline, 0x203e }, /* OVERLINE */ +{ XK_kana_fullstop, 0x3002 }, /* IDEOGRAPHIC FULL STOP */ +{ XK_kana_openingbracket, 0x300c }, /* LEFT CORNER BRACKET */ +{ XK_kana_closingbracket, 0x300d }, /* RIGHT CORNER BRACKET */ +{ XK_kana_comma, 0x3001 }, /* IDEOGRAPHIC COMMA */ +{ XK_kana_conjunctive, 0x30fb }, /* KATAKANA MIDDLE DOT */ +{ XK_kana_WO, 0x30f2 }, /* KATAKANA LETTER WO */ +{ XK_kana_a, 0x30a1 }, /* KATAKANA LETTER SMALL A */ +{ XK_kana_i, 0x30a3 }, /* KATAKANA LETTER SMALL I */ +{ XK_kana_u, 0x30a5 }, /* KATAKANA LETTER SMALL U */ +{ XK_kana_e, 0x30a7 }, /* KATAKANA LETTER SMALL E */ +{ XK_kana_o, 0x30a9 }, /* KATAKANA LETTER SMALL O */ +{ XK_kana_ya, 0x30e3 }, /* KATAKANA LETTER SMALL YA */ +{ XK_kana_yu, 0x30e5 }, /* KATAKANA LETTER SMALL YU */ +{ XK_kana_yo, 0x30e7 }, /* KATAKANA LETTER SMALL YO */ +{ XK_kana_tsu, 0x30c3 }, /* KATAKANA LETTER SMALL TU */ +{ XK_prolongedsound, 0x30fc }, /* KATAKANA-HIRAGANA PROLONGED SOUND MARK */ +{ XK_kana_A, 0x30a2 }, /* KATAKANA LETTER A */ +{ XK_kana_I, 0x30a4 }, /* KATAKANA LETTER I */ +{ XK_kana_U, 0x30a6 }, /* KATAKANA LETTER U */ +{ XK_kana_E, 0x30a8 }, /* KATAKANA LETTER E */ +{ XK_kana_O, 0x30aa }, /* KATAKANA LETTER O */ +{ XK_kana_KA, 0x30ab }, /* KATAKANA LETTER KA */ +{ XK_kana_KI, 0x30ad }, /* KATAKANA LETTER KI */ +{ XK_kana_KU, 0x30af }, /* KATAKANA LETTER KU */ +{ XK_kana_KE, 0x30b1 }, /* KATAKANA LETTER KE */ +{ XK_kana_KO, 0x30b3 }, /* KATAKANA LETTER KO */ +{ XK_kana_SA, 0x30b5 }, /* KATAKANA LETTER SA */ +{ XK_kana_SHI, 0x30b7 }, /* KATAKANA LETTER SI */ +{ XK_kana_SU, 0x30b9 }, /* KATAKANA LETTER SU */ +{ XK_kana_SE, 0x30bb }, /* KATAKANA LETTER SE */ +{ XK_kana_SO, 0x30bd }, /* KATAKANA LETTER SO */ +{ XK_kana_TA, 0x30bf }, /* KATAKANA LETTER TA */ +{ XK_kana_CHI, 0x30c1 }, /* KATAKANA LETTER TI */ +{ XK_kana_TSU, 0x30c4 }, /* KATAKANA LETTER TU */ +{ XK_kana_TE, 0x30c6 }, /* KATAKANA LETTER TE */ +{ XK_kana_TO, 0x30c8 }, /* KATAKANA LETTER TO */ +{ XK_kana_NA, 0x30ca }, /* KATAKANA LETTER NA */ +{ XK_kana_NI, 0x30cb }, /* KATAKANA LETTER NI */ +{ XK_kana_NU, 0x30cc }, /* KATAKANA LETTER NU */ +{ XK_kana_NE, 0x30cd }, /* KATAKANA LETTER NE */ +{ XK_kana_NO, 0x30ce }, /* KATAKANA LETTER NO */ +{ XK_kana_HA, 0x30cf }, /* KATAKANA LETTER HA */ +{ XK_kana_HI, 0x30d2 }, /* KATAKANA LETTER HI */ +{ XK_kana_FU, 0x30d5 }, /* KATAKANA LETTER HU */ +{ XK_kana_HE, 0x30d8 }, /* KATAKANA LETTER HE */ +{ XK_kana_HO, 0x30db }, /* KATAKANA LETTER HO */ +{ XK_kana_MA, 0x30de }, /* KATAKANA LETTER MA */ +{ XK_kana_MI, 0x30df }, /* KATAKANA LETTER MI */ +{ XK_kana_MU, 0x30e0 }, /* KATAKANA LETTER MU */ +{ XK_kana_ME, 0x30e1 }, /* KATAKANA LETTER ME */ +{ XK_kana_MO, 0x30e2 }, /* KATAKANA LETTER MO */ +{ XK_kana_YA, 0x30e4 }, /* KATAKANA LETTER YA */ +{ XK_kana_YU, 0x30e6 }, /* KATAKANA LETTER YU */ +{ XK_kana_YO, 0x30e8 }, /* KATAKANA LETTER YO */ +{ XK_kana_RA, 0x30e9 }, /* KATAKANA LETTER RA */ +{ XK_kana_RI, 0x30ea }, /* KATAKANA LETTER RI */ +{ XK_kana_RU, 0x30eb }, /* KATAKANA LETTER RU */ +{ XK_kana_RE, 0x30ec }, /* KATAKANA LETTER RE */ +{ XK_kana_RO, 0x30ed }, /* KATAKANA LETTER RO */ +{ XK_kana_WA, 0x30ef }, /* KATAKANA LETTER WA */ +{ XK_kana_N, 0x30f3 }, /* KATAKANA LETTER N */ +{ XK_voicedsound, 0x309b }, /* KATAKANA-HIRAGANA VOICED SOUND MARK */ +{ XK_semivoicedsound, 0x309c }, /* KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ +#endif // defined(XK_overline) +#if defined(XK_Farsi_0) +{ XK_Farsi_0, 0x06f0 }, /* EXTENDED ARABIC-INDIC DIGIT 0 */ +{ XK_Farsi_1, 0x06f1 }, /* EXTENDED ARABIC-INDIC DIGIT 1 */ +{ XK_Farsi_2, 0x06f2 }, /* EXTENDED ARABIC-INDIC DIGIT 2 */ +{ XK_Farsi_3, 0x06f3 }, /* EXTENDED ARABIC-INDIC DIGIT 3 */ +{ XK_Farsi_4, 0x06f4 }, /* EXTENDED ARABIC-INDIC DIGIT 4 */ +{ XK_Farsi_5, 0x06f5 }, /* EXTENDED ARABIC-INDIC DIGIT 5 */ +{ XK_Farsi_6, 0x06f6 }, /* EXTENDED ARABIC-INDIC DIGIT 6 */ +{ XK_Farsi_7, 0x06f7 }, /* EXTENDED ARABIC-INDIC DIGIT 7 */ +{ XK_Farsi_8, 0x06f8 }, /* EXTENDED ARABIC-INDIC DIGIT 8 */ +{ XK_Farsi_9, 0x06f9 }, /* EXTENDED ARABIC-INDIC DIGIT 9 */ +{ XK_Arabic_percent, 0x066a }, /* ARABIC PERCENT */ +{ XK_Arabic_superscript_alef, 0x0670 }, /* ARABIC LETTER SUPERSCRIPT ALEF */ +{ XK_Arabic_tteh, 0x0679 }, /* ARABIC LETTER TTEH */ +{ XK_Arabic_peh, 0x067e }, /* ARABIC LETTER PEH */ +{ XK_Arabic_tcheh, 0x0686 }, /* ARABIC LETTER TCHEH */ +{ XK_Arabic_ddal, 0x0688 }, /* ARABIC LETTER DDAL */ +{ XK_Arabic_rreh, 0x0691 }, /* ARABIC LETTER RREH */ +{ XK_Arabic_comma, 0x060c }, /* ARABIC COMMA */ +{ XK_Arabic_fullstop, 0x06d4 }, /* ARABIC FULLSTOP */ +{ XK_Arabic_semicolon, 0x061b }, /* ARABIC SEMICOLON */ +{ XK_Arabic_0, 0x0660 }, /* ARABIC 0 */ +{ XK_Arabic_1, 0x0661 }, /* ARABIC 1 */ +{ XK_Arabic_2, 0x0662 }, /* ARABIC 2 */ +{ XK_Arabic_3, 0x0663 }, /* ARABIC 3 */ +{ XK_Arabic_4, 0x0664 }, /* ARABIC 4 */ +{ XK_Arabic_5, 0x0665 }, /* ARABIC 5 */ +{ XK_Arabic_6, 0x0666 }, /* ARABIC 6 */ +{ XK_Arabic_7, 0x0667 }, /* ARABIC 7 */ +{ XK_Arabic_8, 0x0668 }, /* ARABIC 8 */ +{ XK_Arabic_9, 0x0669 }, /* ARABIC 9 */ +{ XK_Arabic_question_mark, 0x061f }, /* ARABIC QUESTION MARK */ +{ XK_Arabic_hamza, 0x0621 }, /* ARABIC LETTER HAMZA */ +{ XK_Arabic_maddaonalef, 0x0622 }, /* ARABIC LETTER ALEF WITH MADDA ABOVE */ +{ XK_Arabic_hamzaonalef, 0x0623 }, /* ARABIC LETTER ALEF WITH HAMZA ABOVE */ +{ XK_Arabic_hamzaonwaw, 0x0624 }, /* ARABIC LETTER WAW WITH HAMZA ABOVE */ +{ XK_Arabic_hamzaunderalef, 0x0625 }, /* ARABIC LETTER ALEF WITH HAMZA BELOW */ +{ XK_Arabic_hamzaonyeh, 0x0626 }, /* ARABIC LETTER YEH WITH HAMZA ABOVE */ +{ XK_Arabic_alef, 0x0627 }, /* ARABIC LETTER ALEF */ +{ XK_Arabic_beh, 0x0628 }, /* ARABIC LETTER BEH */ +{ XK_Arabic_tehmarbuta, 0x0629 }, /* ARABIC LETTER TEH MARBUTA */ +{ XK_Arabic_teh, 0x062a }, /* ARABIC LETTER TEH */ +{ XK_Arabic_theh, 0x062b }, /* ARABIC LETTER THEH */ +{ XK_Arabic_jeem, 0x062c }, /* ARABIC LETTER JEEM */ +{ XK_Arabic_hah, 0x062d }, /* ARABIC LETTER HAH */ +{ XK_Arabic_khah, 0x062e }, /* ARABIC LETTER KHAH */ +{ XK_Arabic_dal, 0x062f }, /* ARABIC LETTER DAL */ +{ XK_Arabic_thal, 0x0630 }, /* ARABIC LETTER THAL */ +{ XK_Arabic_ra, 0x0631 }, /* ARABIC LETTER REH */ +{ XK_Arabic_zain, 0x0632 }, /* ARABIC LETTER ZAIN */ +{ XK_Arabic_seen, 0x0633 }, /* ARABIC LETTER SEEN */ +{ XK_Arabic_sheen, 0x0634 }, /* ARABIC LETTER SHEEN */ +{ XK_Arabic_sad, 0x0635 }, /* ARABIC LETTER SAD */ +{ XK_Arabic_dad, 0x0636 }, /* ARABIC LETTER DAD */ +{ XK_Arabic_tah, 0x0637 }, /* ARABIC LETTER TAH */ +{ XK_Arabic_zah, 0x0638 }, /* ARABIC LETTER ZAH */ +{ XK_Arabic_ain, 0x0639 }, /* ARABIC LETTER AIN */ +{ XK_Arabic_ghain, 0x063a }, /* ARABIC LETTER GHAIN */ +{ XK_Arabic_tatweel, 0x0640 }, /* ARABIC TATWEEL */ +{ XK_Arabic_feh, 0x0641 }, /* ARABIC LETTER FEH */ +{ XK_Arabic_qaf, 0x0642 }, /* ARABIC LETTER QAF */ +{ XK_Arabic_kaf, 0x0643 }, /* ARABIC LETTER KAF */ +{ XK_Arabic_lam, 0x0644 }, /* ARABIC LETTER LAM */ +{ XK_Arabic_meem, 0x0645 }, /* ARABIC LETTER MEEM */ +{ XK_Arabic_noon, 0x0646 }, /* ARABIC LETTER NOON */ +{ XK_Arabic_ha, 0x0647 }, /* ARABIC LETTER HEH */ +{ XK_Arabic_waw, 0x0648 }, /* ARABIC LETTER WAW */ +{ XK_Arabic_alefmaksura, 0x0649 }, /* ARABIC LETTER ALEF MAKSURA */ +{ XK_Arabic_yeh, 0x064a }, /* ARABIC LETTER YEH */ +{ XK_Arabic_fathatan, 0x064b }, /* ARABIC FATHATAN */ +{ XK_Arabic_dammatan, 0x064c }, /* ARABIC DAMMATAN */ +{ XK_Arabic_kasratan, 0x064d }, /* ARABIC KASRATAN */ +{ XK_Arabic_fatha, 0x064e }, /* ARABIC FATHA */ +{ XK_Arabic_damma, 0x064f }, /* ARABIC DAMMA */ +{ XK_Arabic_kasra, 0x0650 }, /* ARABIC KASRA */ +{ XK_Arabic_shadda, 0x0651 }, /* ARABIC SHADDA */ +{ XK_Arabic_sukun, 0x0652 }, /* ARABIC SUKUN */ +{ XK_Arabic_madda_above, 0x0653 }, /* ARABIC MADDA ABOVE */ +{ XK_Arabic_hamza_above, 0x0654 }, /* ARABIC HAMZA ABOVE */ +{ XK_Arabic_hamza_below, 0x0655 }, /* ARABIC HAMZA BELOW */ +{ XK_Arabic_jeh, 0x0698 }, /* ARABIC LETTER JEH */ +{ XK_Arabic_veh, 0x06a4 }, /* ARABIC LETTER VEH */ +{ XK_Arabic_keheh, 0x06a9 }, /* ARABIC LETTER KEHEH */ +{ XK_Arabic_gaf, 0x06af }, /* ARABIC LETTER GAF */ +{ XK_Arabic_noon_ghunna, 0x06ba }, /* ARABIC LETTER NOON GHUNNA */ +{ XK_Arabic_heh_doachashmee, 0x06be }, /* ARABIC LETTER HEH DOACHASHMEE */ +{ XK_Arabic_farsi_yeh, 0x06cc }, /* ARABIC LETTER FARSI YEH */ +{ XK_Arabic_yeh_baree, 0x06d2 }, /* ARABIC LETTER YEH BAREE */ +{ XK_Arabic_heh_goal, 0x06c1 }, /* ARABIC LETTER HEH GOAL */ +#endif // defined(XK_Farsi_0) +#if defined(XK_Serbian_dje) +{ XK_Serbian_dje, 0x0452 }, /* CYRILLIC SMALL LETTER DJE */ +{ XK_Macedonia_gje, 0x0453 }, /* CYRILLIC SMALL LETTER GJE */ +{ XK_Cyrillic_io, 0x0451 }, /* CYRILLIC SMALL LETTER IO */ +{ XK_Ukrainian_ie, 0x0454 }, /* CYRILLIC SMALL LETTER UKRAINIAN IE */ +{ XK_Macedonia_dse, 0x0455 }, /* CYRILLIC SMALL LETTER DZE */ +{ XK_Ukrainian_i, 0x0456 }, /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ +{ XK_Ukrainian_yi, 0x0457 }, /* CYRILLIC SMALL LETTER YI */ +{ XK_Cyrillic_je, 0x0458 }, /* CYRILLIC SMALL LETTER JE */ +{ XK_Cyrillic_lje, 0x0459 }, /* CYRILLIC SMALL LETTER LJE */ +{ XK_Cyrillic_nje, 0x045a }, /* CYRILLIC SMALL LETTER NJE */ +{ XK_Serbian_tshe, 0x045b }, /* CYRILLIC SMALL LETTER TSHE */ +{ XK_Macedonia_kje, 0x045c }, /* CYRILLIC SMALL LETTER KJE */ +#if defined(XK_Ukrainian_ghe_with_upturn) +{ XK_Ukrainian_ghe_with_upturn, 0x0491 }, /* CYRILLIC SMALL LETTER GHE WITH UPTURN */ +#endif +{ XK_Byelorussian_shortu, 0x045e }, /* CYRILLIC SMALL LETTER SHORT U */ +{ XK_Cyrillic_dzhe, 0x045f }, /* CYRILLIC SMALL LETTER DZHE */ +{ XK_numerosign, 0x2116 }, /* NUMERO SIGN */ +{ XK_Serbian_DJE, 0x0402 }, /* CYRILLIC CAPITAL LETTER DJE */ +{ XK_Macedonia_GJE, 0x0403 }, /* CYRILLIC CAPITAL LETTER GJE */ +{ XK_Cyrillic_IO, 0x0401 }, /* CYRILLIC CAPITAL LETTER IO */ +{ XK_Ukrainian_IE, 0x0404 }, /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */ +{ XK_Macedonia_DSE, 0x0405 }, /* CYRILLIC CAPITAL LETTER DZE */ +{ XK_Ukrainian_I, 0x0406 }, /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ +{ XK_Ukrainian_YI, 0x0407 }, /* CYRILLIC CAPITAL LETTER YI */ +{ XK_Cyrillic_JE, 0x0408 }, /* CYRILLIC CAPITAL LETTER JE */ +{ XK_Cyrillic_LJE, 0x0409 }, /* CYRILLIC CAPITAL LETTER LJE */ +{ XK_Cyrillic_NJE, 0x040a }, /* CYRILLIC CAPITAL LETTER NJE */ +{ XK_Serbian_TSHE, 0x040b }, /* CYRILLIC CAPITAL LETTER TSHE */ +{ XK_Macedonia_KJE, 0x040c }, /* CYRILLIC CAPITAL LETTER KJE */ +#if defined(XK_Ukrainian_GHE_WITH_UPTURN) +{ XK_Ukrainian_GHE_WITH_UPTURN, 0x0490 }, /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ +#endif +{ XK_Byelorussian_SHORTU, 0x040e }, /* CYRILLIC CAPITAL LETTER SHORT U */ +{ XK_Cyrillic_DZHE, 0x040f }, /* CYRILLIC CAPITAL LETTER DZHE */ +{ XK_Cyrillic_yu, 0x044e }, /* CYRILLIC SMALL LETTER YU */ +{ XK_Cyrillic_a, 0x0430 }, /* CYRILLIC SMALL LETTER A */ +{ XK_Cyrillic_be, 0x0431 }, /* CYRILLIC SMALL LETTER BE */ +{ XK_Cyrillic_tse, 0x0446 }, /* CYRILLIC SMALL LETTER TSE */ +{ XK_Cyrillic_de, 0x0434 }, /* CYRILLIC SMALL LETTER DE */ +{ XK_Cyrillic_ie, 0x0435 }, /* CYRILLIC SMALL LETTER IE */ +{ XK_Cyrillic_ef, 0x0444 }, /* CYRILLIC SMALL LETTER EF */ +{ XK_Cyrillic_ghe, 0x0433 }, /* CYRILLIC SMALL LETTER GHE */ +{ XK_Cyrillic_ha, 0x0445 }, /* CYRILLIC SMALL LETTER HA */ +{ XK_Cyrillic_i, 0x0438 }, /* CYRILLIC SMALL LETTER I */ +{ XK_Cyrillic_shorti, 0x0439 }, /* CYRILLIC SMALL LETTER SHORT I */ +{ XK_Cyrillic_ka, 0x043a }, /* CYRILLIC SMALL LETTER KA */ +{ XK_Cyrillic_el, 0x043b }, /* CYRILLIC SMALL LETTER EL */ +{ XK_Cyrillic_em, 0x043c }, /* CYRILLIC SMALL LETTER EM */ +{ XK_Cyrillic_en, 0x043d }, /* CYRILLIC SMALL LETTER EN */ +{ XK_Cyrillic_o, 0x043e }, /* CYRILLIC SMALL LETTER O */ +{ XK_Cyrillic_pe, 0x043f }, /* CYRILLIC SMALL LETTER PE */ +{ XK_Cyrillic_ya, 0x044f }, /* CYRILLIC SMALL LETTER YA */ +{ XK_Cyrillic_er, 0x0440 }, /* CYRILLIC SMALL LETTER ER */ +{ XK_Cyrillic_es, 0x0441 }, /* CYRILLIC SMALL LETTER ES */ +{ XK_Cyrillic_te, 0x0442 }, /* CYRILLIC SMALL LETTER TE */ +{ XK_Cyrillic_u, 0x0443 }, /* CYRILLIC SMALL LETTER U */ +{ XK_Cyrillic_zhe, 0x0436 }, /* CYRILLIC SMALL LETTER ZHE */ +{ XK_Cyrillic_ve, 0x0432 }, /* CYRILLIC SMALL LETTER VE */ +{ XK_Cyrillic_softsign, 0x044c }, /* CYRILLIC SMALL LETTER SOFT SIGN */ +{ XK_Cyrillic_yeru, 0x044b }, /* CYRILLIC SMALL LETTER YERU */ +{ XK_Cyrillic_ze, 0x0437 }, /* CYRILLIC SMALL LETTER ZE */ +{ XK_Cyrillic_sha, 0x0448 }, /* CYRILLIC SMALL LETTER SHA */ +{ XK_Cyrillic_e, 0x044d }, /* CYRILLIC SMALL LETTER E */ +{ XK_Cyrillic_shcha, 0x0449 }, /* CYRILLIC SMALL LETTER SHCHA */ +{ XK_Cyrillic_che, 0x0447 }, /* CYRILLIC SMALL LETTER CHE */ +{ XK_Cyrillic_hardsign, 0x044a }, /* CYRILLIC SMALL LETTER HARD SIGN */ +{ XK_Cyrillic_YU, 0x042e }, /* CYRILLIC CAPITAL LETTER YU */ +{ XK_Cyrillic_A, 0x0410 }, /* CYRILLIC CAPITAL LETTER A */ +{ XK_Cyrillic_BE, 0x0411 }, /* CYRILLIC CAPITAL LETTER BE */ +{ XK_Cyrillic_TSE, 0x0426 }, /* CYRILLIC CAPITAL LETTER TSE */ +{ XK_Cyrillic_DE, 0x0414 }, /* CYRILLIC CAPITAL LETTER DE */ +{ XK_Cyrillic_IE, 0x0415 }, /* CYRILLIC CAPITAL LETTER IE */ +{ XK_Cyrillic_EF, 0x0424 }, /* CYRILLIC CAPITAL LETTER EF */ +{ XK_Cyrillic_GHE, 0x0413 }, /* CYRILLIC CAPITAL LETTER GHE */ +{ XK_Cyrillic_HA, 0x0425 }, /* CYRILLIC CAPITAL LETTER HA */ +{ XK_Cyrillic_I, 0x0418 }, /* CYRILLIC CAPITAL LETTER I */ +{ XK_Cyrillic_SHORTI, 0x0419 }, /* CYRILLIC CAPITAL LETTER SHORT I */ +{ XK_Cyrillic_KA, 0x041a }, /* CYRILLIC CAPITAL LETTER KA */ +{ XK_Cyrillic_EL, 0x041b }, /* CYRILLIC CAPITAL LETTER EL */ +{ XK_Cyrillic_EM, 0x041c }, /* CYRILLIC CAPITAL LETTER EM */ +{ XK_Cyrillic_EN, 0x041d }, /* CYRILLIC CAPITAL LETTER EN */ +{ XK_Cyrillic_O, 0x041e }, /* CYRILLIC CAPITAL LETTER O */ +{ XK_Cyrillic_PE, 0x041f }, /* CYRILLIC CAPITAL LETTER PE */ +{ XK_Cyrillic_YA, 0x042f }, /* CYRILLIC CAPITAL LETTER YA */ +{ XK_Cyrillic_ER, 0x0420 }, /* CYRILLIC CAPITAL LETTER ER */ +{ XK_Cyrillic_ES, 0x0421 }, /* CYRILLIC CAPITAL LETTER ES */ +{ XK_Cyrillic_TE, 0x0422 }, /* CYRILLIC CAPITAL LETTER TE */ +{ XK_Cyrillic_U, 0x0423 }, /* CYRILLIC CAPITAL LETTER U */ +{ XK_Cyrillic_ZHE, 0x0416 }, /* CYRILLIC CAPITAL LETTER ZHE */ +{ XK_Cyrillic_VE, 0x0412 }, /* CYRILLIC CAPITAL LETTER VE */ +{ XK_Cyrillic_SOFTSIGN, 0x042c }, /* CYRILLIC CAPITAL LETTER SOFT SIGN */ +{ XK_Cyrillic_YERU, 0x042b }, /* CYRILLIC CAPITAL LETTER YERU */ +{ XK_Cyrillic_ZE, 0x0417 }, /* CYRILLIC CAPITAL LETTER ZE */ +{ XK_Cyrillic_SHA, 0x0428 }, /* CYRILLIC CAPITAL LETTER SHA */ +{ XK_Cyrillic_E, 0x042d }, /* CYRILLIC CAPITAL LETTER E */ +{ XK_Cyrillic_SHCHA, 0x0429 }, /* CYRILLIC CAPITAL LETTER SHCHA */ +{ XK_Cyrillic_CHE, 0x0427 }, /* CYRILLIC CAPITAL LETTER CHE */ +{ XK_Cyrillic_HARDSIGN, 0x042a }, /* CYRILLIC CAPITAL LETTER HARD SIGN */ +#endif // defined(XK_Serbian_dje) +#if defined(XK_Greek_ALPHAaccent) +{ XK_Greek_ALPHAaccent, 0x0386 }, /* GREEK CAPITAL LETTER ALPHA WITH TONOS */ +{ XK_Greek_EPSILONaccent, 0x0388 }, /* GREEK CAPITAL LETTER EPSILON WITH TONOS */ +{ XK_Greek_ETAaccent, 0x0389 }, /* GREEK CAPITAL LETTER ETA WITH TONOS */ +{ XK_Greek_IOTAaccent, 0x038a }, /* GREEK CAPITAL LETTER IOTA WITH TONOS */ +{ XK_Greek_IOTAdiaeresis, 0x03aa }, /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ +{ XK_Greek_OMICRONaccent, 0x038c }, /* GREEK CAPITAL LETTER OMICRON WITH TONOS */ +{ XK_Greek_UPSILONaccent, 0x038e }, /* GREEK CAPITAL LETTER UPSILON WITH TONOS */ +{ XK_Greek_UPSILONdieresis, 0x03ab }, /* GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ +{ XK_Greek_OMEGAaccent, 0x038f }, /* GREEK CAPITAL LETTER OMEGA WITH TONOS */ +{ XK_Greek_accentdieresis, 0x0385 }, /* GREEK DIALYTIKA TONOS */ +{ XK_Greek_horizbar, 0x2015 }, /* HORIZONTAL BAR */ +{ XK_Greek_alphaaccent, 0x03ac }, /* GREEK SMALL LETTER ALPHA WITH TONOS */ +{ XK_Greek_epsilonaccent, 0x03ad }, /* GREEK SMALL LETTER EPSILON WITH TONOS */ +{ XK_Greek_etaaccent, 0x03ae }, /* GREEK SMALL LETTER ETA WITH TONOS */ +{ XK_Greek_iotaaccent, 0x03af }, /* GREEK SMALL LETTER IOTA WITH TONOS */ +{ XK_Greek_iotadieresis, 0x03ca }, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA */ +{ XK_Greek_iotaaccentdieresis, 0x0390 }, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ +{ XK_Greek_omicronaccent, 0x03cc }, /* GREEK SMALL LETTER OMICRON WITH TONOS */ +{ XK_Greek_upsilonaccent, 0x03cd }, /* GREEK SMALL LETTER UPSILON WITH TONOS */ +{ XK_Greek_upsilondieresis, 0x03cb }, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ +{ XK_Greek_upsilonaccentdieresis, 0x03b0 }, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ +{ XK_Greek_omegaaccent, 0x03ce }, /* GREEK SMALL LETTER OMEGA WITH TONOS */ +{ XK_Greek_ALPHA, 0x0391 }, /* GREEK CAPITAL LETTER ALPHA */ +{ XK_Greek_BETA, 0x0392 }, /* GREEK CAPITAL LETTER BETA */ +{ XK_Greek_GAMMA, 0x0393 }, /* GREEK CAPITAL LETTER GAMMA */ +{ XK_Greek_DELTA, 0x0394 }, /* GREEK CAPITAL LETTER DELTA */ +{ XK_Greek_EPSILON, 0x0395 }, /* GREEK CAPITAL LETTER EPSILON */ +{ XK_Greek_ZETA, 0x0396 }, /* GREEK CAPITAL LETTER ZETA */ +{ XK_Greek_ETA, 0x0397 }, /* GREEK CAPITAL LETTER ETA */ +{ XK_Greek_THETA, 0x0398 }, /* GREEK CAPITAL LETTER THETA */ +{ XK_Greek_IOTA, 0x0399 }, /* GREEK CAPITAL LETTER IOTA */ +{ XK_Greek_KAPPA, 0x039a }, /* GREEK CAPITAL LETTER KAPPA */ +{ XK_Greek_LAMBDA, 0x039b }, /* GREEK CAPITAL LETTER LAMDA */ +{ XK_Greek_MU, 0x039c }, /* GREEK CAPITAL LETTER MU */ +{ XK_Greek_NU, 0x039d }, /* GREEK CAPITAL LETTER NU */ +{ XK_Greek_XI, 0x039e }, /* GREEK CAPITAL LETTER XI */ +{ XK_Greek_OMICRON, 0x039f }, /* GREEK CAPITAL LETTER OMICRON */ +{ XK_Greek_PI, 0x03a0 }, /* GREEK CAPITAL LETTER PI */ +{ XK_Greek_RHO, 0x03a1 }, /* GREEK CAPITAL LETTER RHO */ +{ XK_Greek_SIGMA, 0x03a3 }, /* GREEK CAPITAL LETTER SIGMA */ +{ XK_Greek_TAU, 0x03a4 }, /* GREEK CAPITAL LETTER TAU */ +{ XK_Greek_UPSILON, 0x03a5 }, /* GREEK CAPITAL LETTER UPSILON */ +{ XK_Greek_PHI, 0x03a6 }, /* GREEK CAPITAL LETTER PHI */ +{ XK_Greek_CHI, 0x03a7 }, /* GREEK CAPITAL LETTER CHI */ +{ XK_Greek_PSI, 0x03a8 }, /* GREEK CAPITAL LETTER PSI */ +{ XK_Greek_OMEGA, 0x03a9 }, /* GREEK CAPITAL LETTER OMEGA */ +{ XK_Greek_alpha, 0x03b1 }, /* GREEK SMALL LETTER ALPHA */ +{ XK_Greek_beta, 0x03b2 }, /* GREEK SMALL LETTER BETA */ +{ XK_Greek_gamma, 0x03b3 }, /* GREEK SMALL LETTER GAMMA */ +{ XK_Greek_delta, 0x03b4 }, /* GREEK SMALL LETTER DELTA */ +{ XK_Greek_epsilon, 0x03b5 }, /* GREEK SMALL LETTER EPSILON */ +{ XK_Greek_zeta, 0x03b6 }, /* GREEK SMALL LETTER ZETA */ +{ XK_Greek_eta, 0x03b7 }, /* GREEK SMALL LETTER ETA */ +{ XK_Greek_theta, 0x03b8 }, /* GREEK SMALL LETTER THETA */ +{ XK_Greek_iota, 0x03b9 }, /* GREEK SMALL LETTER IOTA */ +{ XK_Greek_kappa, 0x03ba }, /* GREEK SMALL LETTER KAPPA */ +{ XK_Greek_lambda, 0x03bb }, /* GREEK SMALL LETTER LAMDA */ +{ XK_Greek_mu, 0x03bc }, /* GREEK SMALL LETTER MU */ +{ XK_Greek_nu, 0x03bd }, /* GREEK SMALL LETTER NU */ +{ XK_Greek_xi, 0x03be }, /* GREEK SMALL LETTER XI */ +{ XK_Greek_omicron, 0x03bf }, /* GREEK SMALL LETTER OMICRON */ +{ XK_Greek_pi, 0x03c0 }, /* GREEK SMALL LETTER PI */ +{ XK_Greek_rho, 0x03c1 }, /* GREEK SMALL LETTER RHO */ +{ XK_Greek_sigma, 0x03c3 }, /* GREEK SMALL LETTER SIGMA */ +{ XK_Greek_finalsmallsigma, 0x03c2 }, /* GREEK SMALL LETTER FINAL SIGMA */ +{ XK_Greek_tau, 0x03c4 }, /* GREEK SMALL LETTER TAU */ +{ XK_Greek_upsilon, 0x03c5 }, /* GREEK SMALL LETTER UPSILON */ +{ XK_Greek_phi, 0x03c6 }, /* GREEK SMALL LETTER PHI */ +{ XK_Greek_chi, 0x03c7 }, /* GREEK SMALL LETTER CHI */ +{ XK_Greek_psi, 0x03c8 }, /* GREEK SMALL LETTER PSI */ +{ XK_Greek_omega, 0x03c9 }, /* GREEK SMALL LETTER OMEGA */ +#endif // defined(XK_Greek_ALPHAaccent) +{ XK_leftradical, 0x23b7 }, /* ??? */ +{ XK_topleftradical, 0x250c }, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ +{ XK_horizconnector, 0x2500 }, /* BOX DRAWINGS LIGHT HORIZONTAL */ +{ XK_topintegral, 0x2320 }, /* TOP HALF INTEGRAL */ +{ XK_botintegral, 0x2321 }, /* BOTTOM HALF INTEGRAL */ +{ XK_vertconnector, 0x2502 }, /* BOX DRAWINGS LIGHT VERTICAL */ +{ XK_topleftsqbracket, 0x23a1 }, /* ??? */ +{ XK_botleftsqbracket, 0x23a3 }, /* ??? */ +{ XK_toprightsqbracket, 0x23a4 }, /* ??? */ +{ XK_botrightsqbracket, 0x23a6 }, /* ??? */ +{ XK_topleftparens, 0x239b }, /* ??? */ +{ XK_botleftparens, 0x239d }, /* ??? */ +{ XK_toprightparens, 0x239e }, /* ??? */ +{ XK_botrightparens, 0x23a0 }, /* ??? */ +{ XK_leftmiddlecurlybrace, 0x23a8 }, /* ??? */ +{ XK_rightmiddlecurlybrace, 0x23ac }, /* ??? */ +{ XK_lessthanequal, 0x2264 }, /* LESS-THAN OR EQUAL TO */ +{ XK_notequal, 0x2260 }, /* NOT EQUAL TO */ +{ XK_greaterthanequal, 0x2265 }, /* GREATER-THAN OR EQUAL TO */ +{ XK_integral, 0x222b }, /* INTEGRAL */ +{ XK_therefore, 0x2234 }, /* THEREFORE */ +{ XK_variation, 0x221d }, /* PROPORTIONAL TO */ +{ XK_infinity, 0x221e }, /* INFINITY */ +{ XK_nabla, 0x2207 }, /* NABLA */ +{ XK_approximate, 0x223c }, /* TILDE OPERATOR */ +{ XK_similarequal, 0x2243 }, /* ASYMPTOTICALLY EQUAL TO */ +{ XK_ifonlyif, 0x21d4 }, /* LEFT RIGHT DOUBLE ARROW */ +{ XK_implies, 0x21d2 }, /* RIGHTWARDS DOUBLE ARROW */ +{ XK_identical, 0x2261 }, /* IDENTICAL TO */ +{ XK_radical, 0x221a }, /* SQUARE ROOT */ +{ XK_includedin, 0x2282 }, /* SUBSET OF */ +{ XK_includes, 0x2283 }, /* SUPERSET OF */ +{ XK_intersection, 0x2229 }, /* INTERSECTION */ +{ XK_union, 0x222a }, /* UNION */ +{ XK_logicaland, 0x2227 }, /* LOGICAL AND */ +{ XK_logicalor, 0x2228 }, /* LOGICAL OR */ +{ XK_partialderivative, 0x2202 }, /* PARTIAL DIFFERENTIAL */ +{ XK_function, 0x0192 }, /* LATIN SMALL LETTER F WITH HOOK */ +{ XK_leftarrow, 0x2190 }, /* LEFTWARDS ARROW */ +{ XK_uparrow, 0x2191 }, /* UPWARDS ARROW */ +{ XK_rightarrow, 0x2192 }, /* RIGHTWARDS ARROW */ +{ XK_downarrow, 0x2193 }, /* DOWNWARDS ARROW */ +/*{ XK_blank, ??? }, */ +{ XK_soliddiamond, 0x25c6 }, /* BLACK DIAMOND */ +{ XK_checkerboard, 0x2592 }, /* MEDIUM SHADE */ +{ XK_ht, 0x2409 }, /* SYMBOL FOR HORIZONTAL TABULATION */ +{ XK_ff, 0x240c }, /* SYMBOL FOR FORM FEED */ +{ XK_cr, 0x240d }, /* SYMBOL FOR CARRIAGE RETURN */ +{ XK_lf, 0x240a }, /* SYMBOL FOR LINE FEED */ +{ XK_nl, 0x2424 }, /* SYMBOL FOR NEWLINE */ +{ XK_vt, 0x240b }, /* SYMBOL FOR VERTICAL TABULATION */ +{ XK_lowrightcorner, 0x2518 }, /* BOX DRAWINGS LIGHT UP AND LEFT */ +{ XK_uprightcorner, 0x2510 }, /* BOX DRAWINGS LIGHT DOWN AND LEFT */ +{ XK_upleftcorner, 0x250c }, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ +{ XK_lowleftcorner, 0x2514 }, /* BOX DRAWINGS LIGHT UP AND RIGHT */ +{ XK_crossinglines, 0x253c }, /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ +{ XK_horizlinescan1, 0x23ba }, /* HORIZONTAL SCAN LINE-1 (Unicode 3.2 draft) */ +{ XK_horizlinescan3, 0x23bb }, /* HORIZONTAL SCAN LINE-3 (Unicode 3.2 draft) */ +{ XK_horizlinescan5, 0x2500 }, /* BOX DRAWINGS LIGHT HORIZONTAL */ +{ XK_horizlinescan7, 0x23bc }, /* HORIZONTAL SCAN LINE-7 (Unicode 3.2 draft) */ +{ XK_horizlinescan9, 0x23bd }, /* HORIZONTAL SCAN LINE-9 (Unicode 3.2 draft) */ +{ XK_leftt, 0x251c }, /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ +{ XK_rightt, 0x2524 }, /* BOX DRAWINGS LIGHT VERTICAL AND LEFT */ +{ XK_bott, 0x2534 }, /* BOX DRAWINGS LIGHT UP AND HORIZONTAL */ +{ XK_topt, 0x252c }, /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ +{ XK_vertbar, 0x2502 }, /* BOX DRAWINGS LIGHT VERTICAL */ +{ XK_emspace, 0x2003 }, /* EM SPACE */ +{ XK_enspace, 0x2002 }, /* EN SPACE */ +{ XK_em3space, 0x2004 }, /* THREE-PER-EM SPACE */ +{ XK_em4space, 0x2005 }, /* FOUR-PER-EM SPACE */ +{ XK_digitspace, 0x2007 }, /* FIGURE SPACE */ +{ XK_punctspace, 0x2008 }, /* PUNCTUATION SPACE */ +{ XK_thinspace, 0x2009 }, /* THIN SPACE */ +{ XK_hairspace, 0x200a }, /* HAIR SPACE */ +{ XK_emdash, 0x2014 }, /* EM DASH */ +{ XK_endash, 0x2013 }, /* EN DASH */ +/*{ XK_signifblank, ??? }, */ +{ XK_ellipsis, 0x2026 }, /* HORIZONTAL ELLIPSIS */ +{ XK_doubbaselinedot, 0x2025 }, /* TWO DOT LEADER */ +{ XK_onethird, 0x2153 }, /* VULGAR FRACTION ONE THIRD */ +{ XK_twothirds, 0x2154 }, /* VULGAR FRACTION TWO THIRDS */ +{ XK_onefifth, 0x2155 }, /* VULGAR FRACTION ONE FIFTH */ +{ XK_twofifths, 0x2156 }, /* VULGAR FRACTION TWO FIFTHS */ +{ XK_threefifths, 0x2157 }, /* VULGAR FRACTION THREE FIFTHS */ +{ XK_fourfifths, 0x2158 }, /* VULGAR FRACTION FOUR FIFTHS */ +{ XK_onesixth, 0x2159 }, /* VULGAR FRACTION ONE SIXTH */ +{ XK_fivesixths, 0x215a }, /* VULGAR FRACTION FIVE SIXTHS */ +{ XK_careof, 0x2105 }, /* CARE OF */ +{ XK_figdash, 0x2012 }, /* FIGURE DASH */ +{ XK_leftanglebracket, 0x2329 }, /* LEFT-POINTING ANGLE BRACKET */ +/*{ XK_decimalpoint, ??? }, */ +{ XK_rightanglebracket, 0x232a }, /* RIGHT-POINTING ANGLE BRACKET */ +/*{ XK_marker, ??? }, */ +{ XK_oneeighth, 0x215b }, /* VULGAR FRACTION ONE EIGHTH */ +{ XK_threeeighths, 0x215c }, /* VULGAR FRACTION THREE EIGHTHS */ +{ XK_fiveeighths, 0x215d }, /* VULGAR FRACTION FIVE EIGHTHS */ +{ XK_seveneighths, 0x215e }, /* VULGAR FRACTION SEVEN EIGHTHS */ +{ XK_trademark, 0x2122 }, /* TRADE MARK SIGN */ +{ XK_signaturemark, 0x2613 }, /* SALTIRE */ +/*{ XK_trademarkincircle, ??? }, */ +{ XK_leftopentriangle, 0x25c1 }, /* WHITE LEFT-POINTING TRIANGLE */ +{ XK_rightopentriangle, 0x25b7 }, /* WHITE RIGHT-POINTING TRIANGLE */ +{ XK_emopencircle, 0x25cb }, /* WHITE CIRCLE */ +{ XK_emopenrectangle, 0x25af }, /* WHITE VERTICAL RECTANGLE */ +{ XK_leftsinglequotemark, 0x2018 }, /* LEFT SINGLE QUOTATION MARK */ +{ XK_rightsinglequotemark, 0x2019 }, /* RIGHT SINGLE QUOTATION MARK */ +{ XK_leftdoublequotemark, 0x201c }, /* LEFT DOUBLE QUOTATION MARK */ +{ XK_rightdoublequotemark, 0x201d }, /* RIGHT DOUBLE QUOTATION MARK */ +{ XK_prescription, 0x211e }, /* PRESCRIPTION TAKE */ +{ XK_minutes, 0x2032 }, /* PRIME */ +{ XK_seconds, 0x2033 }, /* DOUBLE PRIME */ +{ XK_latincross, 0x271d }, /* LATIN CROSS */ +/*{ XK_hexagram, ??? }, */ +{ XK_filledrectbullet, 0x25ac }, /* BLACK RECTANGLE */ +{ XK_filledlefttribullet, 0x25c0 }, /* BLACK LEFT-POINTING TRIANGLE */ +{ XK_filledrighttribullet, 0x25b6 }, /* BLACK RIGHT-POINTING TRIANGLE */ +{ XK_emfilledcircle, 0x25cf }, /* BLACK CIRCLE */ +{ XK_emfilledrect, 0x25ae }, /* BLACK VERTICAL RECTANGLE */ +{ XK_enopencircbullet, 0x25e6 }, /* WHITE BULLET */ +{ XK_enopensquarebullet, 0x25ab }, /* WHITE SMALL SQUARE */ +{ XK_openrectbullet, 0x25ad }, /* WHITE RECTANGLE */ +{ XK_opentribulletup, 0x25b3 }, /* WHITE UP-POINTING TRIANGLE */ +{ XK_opentribulletdown, 0x25bd }, /* WHITE DOWN-POINTING TRIANGLE */ +{ XK_openstar, 0x2606 }, /* WHITE STAR */ +{ XK_enfilledcircbullet, 0x2022 }, /* BULLET */ +{ XK_enfilledsqbullet, 0x25aa }, /* BLACK SMALL SQUARE */ +{ XK_filledtribulletup, 0x25b2 }, /* BLACK UP-POINTING TRIANGLE */ +{ XK_filledtribulletdown, 0x25bc }, /* BLACK DOWN-POINTING TRIANGLE */ +{ XK_leftpointer, 0x261c }, /* WHITE LEFT POINTING INDEX */ +{ XK_rightpointer, 0x261e }, /* WHITE RIGHT POINTING INDEX */ +{ XK_club, 0x2663 }, /* BLACK CLUB SUIT */ +{ XK_diamond, 0x2666 }, /* BLACK DIAMOND SUIT */ +{ XK_heart, 0x2665 }, /* BLACK HEART SUIT */ +{ XK_maltesecross, 0x2720 }, /* MALTESE CROSS */ +{ XK_dagger, 0x2020 }, /* DAGGER */ +{ XK_doubledagger, 0x2021 }, /* DOUBLE DAGGER */ +{ XK_checkmark, 0x2713 }, /* CHECK MARK */ +{ XK_ballotcross, 0x2717 }, /* BALLOT X */ +{ XK_musicalsharp, 0x266f }, /* MUSIC SHARP SIGN */ +{ XK_musicalflat, 0x266d }, /* MUSIC FLAT SIGN */ +{ XK_malesymbol, 0x2642 }, /* MALE SIGN */ +{ XK_femalesymbol, 0x2640 }, /* FEMALE SIGN */ +{ XK_telephone, 0x260e }, /* BLACK TELEPHONE */ +{ XK_telephonerecorder, 0x2315 }, /* TELEPHONE RECORDER */ +{ XK_phonographcopyright, 0x2117 }, /* SOUND RECORDING COPYRIGHT */ +{ XK_caret, 0x2038 }, /* CARET */ +{ XK_singlelowquotemark, 0x201a }, /* SINGLE LOW-9 QUOTATION MARK */ +{ XK_doublelowquotemark, 0x201e }, /* DOUBLE LOW-9 QUOTATION MARK */ +/*{ XK_cursor, ??? }, */ +{ XK_leftcaret, 0x003c }, /* LESS-THAN SIGN */ +{ XK_rightcaret, 0x003e }, /* GREATER-THAN SIGN */ +{ XK_downcaret, 0x2228 }, /* LOGICAL OR */ +{ XK_upcaret, 0x2227 }, /* LOGICAL AND */ +{ XK_overbar, 0x00af }, /* MACRON */ +{ XK_downtack, 0x22a5 }, /* UP TACK */ +{ XK_upshoe, 0x2229 }, /* INTERSECTION */ +{ XK_downstile, 0x230a }, /* LEFT FLOOR */ +{ XK_underbar, 0x005f }, /* LOW LINE */ +{ XK_jot, 0x2218 }, /* RING OPERATOR */ +{ XK_quad, 0x2395 }, /* APL FUNCTIONAL SYMBOL QUAD */ +{ XK_uptack, 0x22a4 }, /* DOWN TACK */ +{ XK_circle, 0x25cb }, /* WHITE CIRCLE */ +{ XK_upstile, 0x2308 }, /* LEFT CEILING */ +{ XK_downshoe, 0x222a }, /* UNION */ +{ XK_rightshoe, 0x2283 }, /* SUPERSET OF */ +{ XK_leftshoe, 0x2282 }, /* SUBSET OF */ +{ XK_lefttack, 0x22a2 }, /* RIGHT TACK */ +{ XK_righttack, 0x22a3 }, /* LEFT TACK */ +#if defined(XK_hebrew_doublelowline) +{ XK_hebrew_doublelowline, 0x2017 }, /* DOUBLE LOW LINE */ +{ XK_hebrew_aleph, 0x05d0 }, /* HEBREW LETTER ALEF */ +{ XK_hebrew_bet, 0x05d1 }, /* HEBREW LETTER BET */ +{ XK_hebrew_gimel, 0x05d2 }, /* HEBREW LETTER GIMEL */ +{ XK_hebrew_dalet, 0x05d3 }, /* HEBREW LETTER DALET */ +{ XK_hebrew_he, 0x05d4 }, /* HEBREW LETTER HE */ +{ XK_hebrew_waw, 0x05d5 }, /* HEBREW LETTER VAV */ +{ XK_hebrew_zain, 0x05d6 }, /* HEBREW LETTER ZAYIN */ +{ XK_hebrew_chet, 0x05d7 }, /* HEBREW LETTER HET */ +{ XK_hebrew_tet, 0x05d8 }, /* HEBREW LETTER TET */ +{ XK_hebrew_yod, 0x05d9 }, /* HEBREW LETTER YOD */ +{ XK_hebrew_finalkaph, 0x05da }, /* HEBREW LETTER FINAL KAF */ +{ XK_hebrew_kaph, 0x05db }, /* HEBREW LETTER KAF */ +{ XK_hebrew_lamed, 0x05dc }, /* HEBREW LETTER LAMED */ +{ XK_hebrew_finalmem, 0x05dd }, /* HEBREW LETTER FINAL MEM */ +{ XK_hebrew_mem, 0x05de }, /* HEBREW LETTER MEM */ +{ XK_hebrew_finalnun, 0x05df }, /* HEBREW LETTER FINAL NUN */ +{ XK_hebrew_nun, 0x05e0 }, /* HEBREW LETTER NUN */ +{ XK_hebrew_samech, 0x05e1 }, /* HEBREW LETTER SAMEKH */ +{ XK_hebrew_ayin, 0x05e2 }, /* HEBREW LETTER AYIN */ +{ XK_hebrew_finalpe, 0x05e3 }, /* HEBREW LETTER FINAL PE */ +{ XK_hebrew_pe, 0x05e4 }, /* HEBREW LETTER PE */ +{ XK_hebrew_finalzade, 0x05e5 }, /* HEBREW LETTER FINAL TSADI */ +{ XK_hebrew_zade, 0x05e6 }, /* HEBREW LETTER TSADI */ +{ XK_hebrew_qoph, 0x05e7 }, /* HEBREW LETTER QOF */ +{ XK_hebrew_resh, 0x05e8 }, /* HEBREW LETTER RESH */ +{ XK_hebrew_shin, 0x05e9 }, /* HEBREW LETTER SHIN */ +{ XK_hebrew_taw, 0x05ea }, /* HEBREW LETTER TAV */ +#endif // defined(XK_hebrew_doublelowline) +#if defined(XK_Thai_kokai) +{ XK_Thai_kokai, 0x0e01 }, /* THAI CHARACTER KO KAI */ +{ XK_Thai_khokhai, 0x0e02 }, /* THAI CHARACTER KHO KHAI */ +{ XK_Thai_khokhuat, 0x0e03 }, /* THAI CHARACTER KHO KHUAT */ +{ XK_Thai_khokhwai, 0x0e04 }, /* THAI CHARACTER KHO KHWAI */ +{ XK_Thai_khokhon, 0x0e05 }, /* THAI CHARACTER KHO KHON */ +{ XK_Thai_khorakhang, 0x0e06 }, /* THAI CHARACTER KHO RAKHANG */ +{ XK_Thai_ngongu, 0x0e07 }, /* THAI CHARACTER NGO NGU */ +{ XK_Thai_chochan, 0x0e08 }, /* THAI CHARACTER CHO CHAN */ +{ XK_Thai_choching, 0x0e09 }, /* THAI CHARACTER CHO CHING */ +{ XK_Thai_chochang, 0x0e0a }, /* THAI CHARACTER CHO CHANG */ +{ XK_Thai_soso, 0x0e0b }, /* THAI CHARACTER SO SO */ +{ XK_Thai_chochoe, 0x0e0c }, /* THAI CHARACTER CHO CHOE */ +{ XK_Thai_yoying, 0x0e0d }, /* THAI CHARACTER YO YING */ +{ XK_Thai_dochada, 0x0e0e }, /* THAI CHARACTER DO CHADA */ +{ XK_Thai_topatak, 0x0e0f }, /* THAI CHARACTER TO PATAK */ +{ XK_Thai_thothan, 0x0e10 }, /* THAI CHARACTER THO THAN */ +{ XK_Thai_thonangmontho, 0x0e11 }, /* THAI CHARACTER THO NANGMONTHO */ +{ XK_Thai_thophuthao, 0x0e12 }, /* THAI CHARACTER THO PHUTHAO */ +{ XK_Thai_nonen, 0x0e13 }, /* THAI CHARACTER NO NEN */ +{ XK_Thai_dodek, 0x0e14 }, /* THAI CHARACTER DO DEK */ +{ XK_Thai_totao, 0x0e15 }, /* THAI CHARACTER TO TAO */ +{ XK_Thai_thothung, 0x0e16 }, /* THAI CHARACTER THO THUNG */ +{ XK_Thai_thothahan, 0x0e17 }, /* THAI CHARACTER THO THAHAN */ +{ XK_Thai_thothong, 0x0e18 }, /* THAI CHARACTER THO THONG */ +{ XK_Thai_nonu, 0x0e19 }, /* THAI CHARACTER NO NU */ +{ XK_Thai_bobaimai, 0x0e1a }, /* THAI CHARACTER BO BAIMAI */ +{ XK_Thai_popla, 0x0e1b }, /* THAI CHARACTER PO PLA */ +{ XK_Thai_phophung, 0x0e1c }, /* THAI CHARACTER PHO PHUNG */ +{ XK_Thai_fofa, 0x0e1d }, /* THAI CHARACTER FO FA */ +{ XK_Thai_phophan, 0x0e1e }, /* THAI CHARACTER PHO PHAN */ +{ XK_Thai_fofan, 0x0e1f }, /* THAI CHARACTER FO FAN */ +{ XK_Thai_phosamphao, 0x0e20 }, /* THAI CHARACTER PHO SAMPHAO */ +{ XK_Thai_moma, 0x0e21 }, /* THAI CHARACTER MO MA */ +{ XK_Thai_yoyak, 0x0e22 }, /* THAI CHARACTER YO YAK */ +{ XK_Thai_rorua, 0x0e23 }, /* THAI CHARACTER RO RUA */ +{ XK_Thai_ru, 0x0e24 }, /* THAI CHARACTER RU */ +{ XK_Thai_loling, 0x0e25 }, /* THAI CHARACTER LO LING */ +{ XK_Thai_lu, 0x0e26 }, /* THAI CHARACTER LU */ +{ XK_Thai_wowaen, 0x0e27 }, /* THAI CHARACTER WO WAEN */ +{ XK_Thai_sosala, 0x0e28 }, /* THAI CHARACTER SO SALA */ +{ XK_Thai_sorusi, 0x0e29 }, /* THAI CHARACTER SO RUSI */ +{ XK_Thai_sosua, 0x0e2a }, /* THAI CHARACTER SO SUA */ +{ XK_Thai_hohip, 0x0e2b }, /* THAI CHARACTER HO HIP */ +{ XK_Thai_lochula, 0x0e2c }, /* THAI CHARACTER LO CHULA */ +{ XK_Thai_oang, 0x0e2d }, /* THAI CHARACTER O ANG */ +{ XK_Thai_honokhuk, 0x0e2e }, /* THAI CHARACTER HO NOKHUK */ +{ XK_Thai_paiyannoi, 0x0e2f }, /* THAI CHARACTER PAIYANNOI */ +{ XK_Thai_saraa, 0x0e30 }, /* THAI CHARACTER SARA A */ +{ XK_Thai_maihanakat, 0x0e31 }, /* THAI CHARACTER MAI HAN-AKAT */ +{ XK_Thai_saraaa, 0x0e32 }, /* THAI CHARACTER SARA AA */ +{ XK_Thai_saraam, 0x0e33 }, /* THAI CHARACTER SARA AM */ +{ XK_Thai_sarai, 0x0e34 }, /* THAI CHARACTER SARA I */ +{ XK_Thai_saraii, 0x0e35 }, /* THAI CHARACTER SARA II */ +{ XK_Thai_saraue, 0x0e36 }, /* THAI CHARACTER SARA UE */ +{ XK_Thai_sarauee, 0x0e37 }, /* THAI CHARACTER SARA UEE */ +{ XK_Thai_sarau, 0x0e38 }, /* THAI CHARACTER SARA U */ +{ XK_Thai_sarauu, 0x0e39 }, /* THAI CHARACTER SARA UU */ +{ XK_Thai_phinthu, 0x0e3a }, /* THAI CHARACTER PHINTHU */ +/*{ XK_Thai_maihanakat_maitho, ??? }, */ +{ XK_Thai_baht, 0x0e3f }, /* THAI CURRENCY SYMBOL BAHT */ +{ XK_Thai_sarae, 0x0e40 }, /* THAI CHARACTER SARA E */ +{ XK_Thai_saraae, 0x0e41 }, /* THAI CHARACTER SARA AE */ +{ XK_Thai_sarao, 0x0e42 }, /* THAI CHARACTER SARA O */ +{ XK_Thai_saraaimaimuan, 0x0e43 }, /* THAI CHARACTER SARA AI MAIMUAN */ +{ XK_Thai_saraaimaimalai, 0x0e44 }, /* THAI CHARACTER SARA AI MAIMALAI */ +{ XK_Thai_lakkhangyao, 0x0e45 }, /* THAI CHARACTER LAKKHANGYAO */ +{ XK_Thai_maiyamok, 0x0e46 }, /* THAI CHARACTER MAIYAMOK */ +{ XK_Thai_maitaikhu, 0x0e47 }, /* THAI CHARACTER MAITAIKHU */ +{ XK_Thai_maiek, 0x0e48 }, /* THAI CHARACTER MAI EK */ +{ XK_Thai_maitho, 0x0e49 }, /* THAI CHARACTER MAI THO */ +{ XK_Thai_maitri, 0x0e4a }, /* THAI CHARACTER MAI TRI */ +{ XK_Thai_maichattawa, 0x0e4b }, /* THAI CHARACTER MAI CHATTAWA */ +{ XK_Thai_thanthakhat, 0x0e4c }, /* THAI CHARACTER THANTHAKHAT */ +{ XK_Thai_nikhahit, 0x0e4d }, /* THAI CHARACTER NIKHAHIT */ +{ XK_Thai_leksun, 0x0e50 }, /* THAI DIGIT ZERO */ +{ XK_Thai_leknung, 0x0e51 }, /* THAI DIGIT ONE */ +{ XK_Thai_leksong, 0x0e52 }, /* THAI DIGIT TWO */ +{ XK_Thai_leksam, 0x0e53 }, /* THAI DIGIT THREE */ +{ XK_Thai_leksi, 0x0e54 }, /* THAI DIGIT FOUR */ +{ XK_Thai_lekha, 0x0e55 }, /* THAI DIGIT FIVE */ +{ XK_Thai_lekhok, 0x0e56 }, /* THAI DIGIT SIX */ +{ XK_Thai_lekchet, 0x0e57 }, /* THAI DIGIT SEVEN */ +{ XK_Thai_lekpaet, 0x0e58 }, /* THAI DIGIT EIGHT */ +{ XK_Thai_lekkao, 0x0e59 }, /* THAI DIGIT NINE */ +#endif // defined(XK_Thai_kokai) +#if defined(XK_Hangul_Kiyeog) +{ XK_Hangul_Kiyeog, 0x3131 }, /* HANGUL LETTER KIYEOK */ +{ XK_Hangul_SsangKiyeog, 0x3132 }, /* HANGUL LETTER SSANGKIYEOK */ +{ XK_Hangul_KiyeogSios, 0x3133 }, /* HANGUL LETTER KIYEOK-SIOS */ +{ XK_Hangul_Nieun, 0x3134 }, /* HANGUL LETTER NIEUN */ +{ XK_Hangul_NieunJieuj, 0x3135 }, /* HANGUL LETTER NIEUN-CIEUC */ +{ XK_Hangul_NieunHieuh, 0x3136 }, /* HANGUL LETTER NIEUN-HIEUH */ +{ XK_Hangul_Dikeud, 0x3137 }, /* HANGUL LETTER TIKEUT */ +{ XK_Hangul_SsangDikeud, 0x3138 }, /* HANGUL LETTER SSANGTIKEUT */ +{ XK_Hangul_Rieul, 0x3139 }, /* HANGUL LETTER RIEUL */ +{ XK_Hangul_RieulKiyeog, 0x313a }, /* HANGUL LETTER RIEUL-KIYEOK */ +{ XK_Hangul_RieulMieum, 0x313b }, /* HANGUL LETTER RIEUL-MIEUM */ +{ XK_Hangul_RieulPieub, 0x313c }, /* HANGUL LETTER RIEUL-PIEUP */ +{ XK_Hangul_RieulSios, 0x313d }, /* HANGUL LETTER RIEUL-SIOS */ +{ XK_Hangul_RieulTieut, 0x313e }, /* HANGUL LETTER RIEUL-THIEUTH */ +{ XK_Hangul_RieulPhieuf, 0x313f }, /* HANGUL LETTER RIEUL-PHIEUPH */ +{ XK_Hangul_RieulHieuh, 0x3140 }, /* HANGUL LETTER RIEUL-HIEUH */ +{ XK_Hangul_Mieum, 0x3141 }, /* HANGUL LETTER MIEUM */ +{ XK_Hangul_Pieub, 0x3142 }, /* HANGUL LETTER PIEUP */ +{ XK_Hangul_SsangPieub, 0x3143 }, /* HANGUL LETTER SSANGPIEUP */ +{ XK_Hangul_PieubSios, 0x3144 }, /* HANGUL LETTER PIEUP-SIOS */ +{ XK_Hangul_Sios, 0x3145 }, /* HANGUL LETTER SIOS */ +{ XK_Hangul_SsangSios, 0x3146 }, /* HANGUL LETTER SSANGSIOS */ +{ XK_Hangul_Ieung, 0x3147 }, /* HANGUL LETTER IEUNG */ +{ XK_Hangul_Jieuj, 0x3148 }, /* HANGUL LETTER CIEUC */ +{ XK_Hangul_SsangJieuj, 0x3149 }, /* HANGUL LETTER SSANGCIEUC */ +{ XK_Hangul_Cieuc, 0x314a }, /* HANGUL LETTER CHIEUCH */ +{ XK_Hangul_Khieuq, 0x314b }, /* HANGUL LETTER KHIEUKH */ +{ XK_Hangul_Tieut, 0x314c }, /* HANGUL LETTER THIEUTH */ +{ XK_Hangul_Phieuf, 0x314d }, /* HANGUL LETTER PHIEUPH */ +{ XK_Hangul_Hieuh, 0x314e }, /* HANGUL LETTER HIEUH */ +{ XK_Hangul_A, 0x314f }, /* HANGUL LETTER A */ +{ XK_Hangul_AE, 0x3150 }, /* HANGUL LETTER AE */ +{ XK_Hangul_YA, 0x3151 }, /* HANGUL LETTER YA */ +{ XK_Hangul_YAE, 0x3152 }, /* HANGUL LETTER YAE */ +{ XK_Hangul_EO, 0x3153 }, /* HANGUL LETTER EO */ +{ XK_Hangul_E, 0x3154 }, /* HANGUL LETTER E */ +{ XK_Hangul_YEO, 0x3155 }, /* HANGUL LETTER YEO */ +{ XK_Hangul_YE, 0x3156 }, /* HANGUL LETTER YE */ +{ XK_Hangul_O, 0x3157 }, /* HANGUL LETTER O */ +{ XK_Hangul_WA, 0x3158 }, /* HANGUL LETTER WA */ +{ XK_Hangul_WAE, 0x3159 }, /* HANGUL LETTER WAE */ +{ XK_Hangul_OE, 0x315a }, /* HANGUL LETTER OE */ +{ XK_Hangul_YO, 0x315b }, /* HANGUL LETTER YO */ +{ XK_Hangul_U, 0x315c }, /* HANGUL LETTER U */ +{ XK_Hangul_WEO, 0x315d }, /* HANGUL LETTER WEO */ +{ XK_Hangul_WE, 0x315e }, /* HANGUL LETTER WE */ +{ XK_Hangul_WI, 0x315f }, /* HANGUL LETTER WI */ +{ XK_Hangul_YU, 0x3160 }, /* HANGUL LETTER YU */ +{ XK_Hangul_EU, 0x3161 }, /* HANGUL LETTER EU */ +{ XK_Hangul_YI, 0x3162 }, /* HANGUL LETTER YI */ +{ XK_Hangul_I, 0x3163 }, /* HANGUL LETTER I */ +{ XK_Hangul_J_Kiyeog, 0x11a8 }, /* HANGUL JONGSEONG KIYEOK */ +{ XK_Hangul_J_SsangKiyeog, 0x11a9 }, /* HANGUL JONGSEONG SSANGKIYEOK */ +{ XK_Hangul_J_KiyeogSios, 0x11aa }, /* HANGUL JONGSEONG KIYEOK-SIOS */ +{ XK_Hangul_J_Nieun, 0x11ab }, /* HANGUL JONGSEONG NIEUN */ +{ XK_Hangul_J_NieunJieuj, 0x11ac }, /* HANGUL JONGSEONG NIEUN-CIEUC */ +{ XK_Hangul_J_NieunHieuh, 0x11ad }, /* HANGUL JONGSEONG NIEUN-HIEUH */ +{ XK_Hangul_J_Dikeud, 0x11ae }, /* HANGUL JONGSEONG TIKEUT */ +{ XK_Hangul_J_Rieul, 0x11af }, /* HANGUL JONGSEONG RIEUL */ +{ XK_Hangul_J_RieulKiyeog, 0x11b0 }, /* HANGUL JONGSEONG RIEUL-KIYEOK */ +{ XK_Hangul_J_RieulMieum, 0x11b1 }, /* HANGUL JONGSEONG RIEUL-MIEUM */ +{ XK_Hangul_J_RieulPieub, 0x11b2 }, /* HANGUL JONGSEONG RIEUL-PIEUP */ +{ XK_Hangul_J_RieulSios, 0x11b3 }, /* HANGUL JONGSEONG RIEUL-SIOS */ +{ XK_Hangul_J_RieulTieut, 0x11b4 }, /* HANGUL JONGSEONG RIEUL-THIEUTH */ +{ XK_Hangul_J_RieulPhieuf, 0x11b5 }, /* HANGUL JONGSEONG RIEUL-PHIEUPH */ +{ XK_Hangul_J_RieulHieuh, 0x11b6 }, /* HANGUL JONGSEONG RIEUL-HIEUH */ +{ XK_Hangul_J_Mieum, 0x11b7 }, /* HANGUL JONGSEONG MIEUM */ +{ XK_Hangul_J_Pieub, 0x11b8 }, /* HANGUL JONGSEONG PIEUP */ +{ XK_Hangul_J_PieubSios, 0x11b9 }, /* HANGUL JONGSEONG PIEUP-SIOS */ +{ XK_Hangul_J_Sios, 0x11ba }, /* HANGUL JONGSEONG SIOS */ +{ XK_Hangul_J_SsangSios, 0x11bb }, /* HANGUL JONGSEONG SSANGSIOS */ +{ XK_Hangul_J_Ieung, 0x11bc }, /* HANGUL JONGSEONG IEUNG */ +{ XK_Hangul_J_Jieuj, 0x11bd }, /* HANGUL JONGSEONG CIEUC */ +{ XK_Hangul_J_Cieuc, 0x11be }, /* HANGUL JONGSEONG CHIEUCH */ +{ XK_Hangul_J_Khieuq, 0x11bf }, /* HANGUL JONGSEONG KHIEUKH */ +{ XK_Hangul_J_Tieut, 0x11c0 }, /* HANGUL JONGSEONG THIEUTH */ +{ XK_Hangul_J_Phieuf, 0x11c1 }, /* HANGUL JONGSEONG PHIEUPH */ +{ XK_Hangul_J_Hieuh, 0x11c2 }, /* HANGUL JONGSEONG HIEUH */ +{ XK_Hangul_RieulYeorinHieuh, 0x316d }, /* HANGUL LETTER RIEUL-YEORINHIEUH */ +{ XK_Hangul_SunkyeongeumMieum, 0x3171 }, /* HANGUL LETTER KAPYEOUNMIEUM */ +{ XK_Hangul_SunkyeongeumPieub, 0x3178 }, /* HANGUL LETTER KAPYEOUNPIEUP */ +{ XK_Hangul_PanSios, 0x317f }, /* HANGUL LETTER PANSIOS */ +{ XK_Hangul_KkogjiDalrinIeung, 0x3181 }, /* HANGUL LETTER YESIEUNG */ +{ XK_Hangul_SunkyeongeumPhieuf, 0x3184 }, /* HANGUL LETTER KAPYEOUNPHIEUPH */ +{ XK_Hangul_YeorinHieuh, 0x3186 }, /* HANGUL LETTER YEORINHIEUH */ +{ XK_Hangul_AraeA, 0x318d }, /* HANGUL LETTER ARAEA */ +{ XK_Hangul_AraeAE, 0x318e }, /* HANGUL LETTER ARAEAE */ +{ XK_Hangul_J_PanSios, 0x11eb }, /* HANGUL JONGSEONG PANSIOS */ +{ XK_Hangul_J_KkogjiDalrinIeung, 0x11f0 }, /* HANGUL JONGSEONG YESIEUNG */ +{ XK_Hangul_J_YeorinHieuh, 0x11f9 }, /* HANGUL JONGSEONG YEORINHIEUH */ +{ XK_Korean_Won, 0x20a9 }, /* WON SIGN */ +#endif // defined(XK_Hangul_Kiyeog) +{ XK_OE, 0x0152 }, /* LATIN CAPITAL LIGATURE OE */ +{ XK_oe, 0x0153 }, /* LATIN SMALL LIGATURE OE */ +{ XK_Ydiaeresis, 0x0178 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */ +{ XK_EuroSign, 0x20ac }, /* EURO SIGN */ + +/* combining dead keys */ +{ XK_dead_abovedot, 0x0307 }, /* COMBINING DOT ABOVE */ +{ XK_dead_abovering, 0x030a }, /* COMBINING RING ABOVE */ +{ XK_dead_acute, 0x0301 }, /* COMBINING ACUTE ACCENT */ +{ XK_dead_breve, 0x0306 }, /* COMBINING BREVE */ +{ XK_dead_caron, 0x030c }, /* COMBINING CARON */ +{ XK_dead_cedilla, 0x0327 }, /* COMBINING CEDILLA */ +{ XK_dead_circumflex, 0x0302 }, /* COMBINING CIRCUMFLEX ACCENT */ +{ XK_dead_diaeresis, 0x0308 }, /* COMBINING DIAERESIS */ +{ XK_dead_doubleacute, 0x030b }, /* COMBINING DOUBLE ACUTE ACCENT */ +{ XK_dead_grave, 0x0300 }, /* COMBINING GRAVE ACCENT */ +{ XK_dead_macron, 0x0304 }, /* COMBINING MACRON */ +{ XK_dead_ogonek, 0x0328 }, /* COMBINING OGONEK */ +{ XK_dead_tilde, 0x0303 } /* COMBINING TILDE */ +}; +/* XXX -- map these too +XK_Cyrillic_GHE_bar +XK_Cyrillic_ZHE_descender +XK_Cyrillic_KA_descender +XK_Cyrillic_KA_vertstroke +XK_Cyrillic_EN_descender +XK_Cyrillic_U_straight +XK_Cyrillic_U_straight_bar +XK_Cyrillic_HA_descender +XK_Cyrillic_CHE_descender +XK_Cyrillic_CHE_vertstroke +XK_Cyrillic_SHHA +XK_Cyrillic_SCHWA +XK_Cyrillic_I_macron +XK_Cyrillic_O_bar +XK_Cyrillic_U_macron +XK_Cyrillic_ghe_bar +XK_Cyrillic_zhe_descender +XK_Cyrillic_ka_descender +XK_Cyrillic_ka_vertstroke +XK_Cyrillic_en_descender +XK_Cyrillic_u_straight +XK_Cyrillic_u_straight_bar +XK_Cyrillic_ha_descender +XK_Cyrillic_che_descender +XK_Cyrillic_che_vertstroke +XK_Cyrillic_shha +XK_Cyrillic_schwa +XK_Cyrillic_i_macron +XK_Cyrillic_o_bar +XK_Cyrillic_u_macron + +XK_Armenian_eternity +XK_Armenian_ligature_ew +XK_Armenian_full_stop +XK_Armenian_verjaket +XK_Armenian_parenright +XK_Armenian_parenleft +XK_Armenian_guillemotright +XK_Armenian_guillemotleft +XK_Armenian_em_dash +XK_Armenian_dot +XK_Armenian_mijaket +XK_Armenian_but +XK_Armenian_separation_mark +XK_Armenian_comma +XK_Armenian_en_dash +XK_Armenian_hyphen +XK_Armenian_yentamna +XK_Armenian_ellipsis +XK_Armenian_amanak +XK_Armenian_exclam +XK_Armenian_accent +XK_Armenian_shesht +XK_Armenian_paruyk +XK_Armenian_question +XK_Armenian_AYB +XK_Armenian_ayb +XK_Armenian_BEN +XK_Armenian_ben +XK_Armenian_GIM +XK_Armenian_gim +XK_Armenian_DA +XK_Armenian_da +XK_Armenian_YECH +XK_Armenian_yech +XK_Armenian_ZA +XK_Armenian_za +XK_Armenian_E +XK_Armenian_e +XK_Armenian_AT +XK_Armenian_at +XK_Armenian_TO +XK_Armenian_to +XK_Armenian_ZHE +XK_Armenian_zhe +XK_Armenian_INI +XK_Armenian_ini +XK_Armenian_LYUN +XK_Armenian_lyun +XK_Armenian_KHE +XK_Armenian_khe +XK_Armenian_TSA +XK_Armenian_tsa +XK_Armenian_KEN +XK_Armenian_ken +XK_Armenian_HO +XK_Armenian_ho +XK_Armenian_DZA +XK_Armenian_dza +XK_Armenian_GHAT +XK_Armenian_ghat +XK_Armenian_TCHE +XK_Armenian_tche +XK_Armenian_MEN +XK_Armenian_men +XK_Armenian_HI +XK_Armenian_hi +XK_Armenian_NU +XK_Armenian_nu +XK_Armenian_SHA +XK_Armenian_sha +XK_Armenian_VO +XK_Armenian_vo +XK_Armenian_CHA +XK_Armenian_cha +XK_Armenian_PE +XK_Armenian_pe +XK_Armenian_JE +XK_Armenian_je +XK_Armenian_RA +XK_Armenian_ra +XK_Armenian_SE +XK_Armenian_se +XK_Armenian_VEV +XK_Armenian_vev +XK_Armenian_TYUN +XK_Armenian_tyun +XK_Armenian_RE +XK_Armenian_re +XK_Armenian_TSO +XK_Armenian_tso +XK_Armenian_VYUN +XK_Armenian_vyun +XK_Armenian_PYUR +XK_Armenian_pyur +XK_Armenian_KE +XK_Armenian_ke +XK_Armenian_O +XK_Armenian_o +XK_Armenian_FE +XK_Armenian_fe +XK_Armenian_apostrophe +XK_Armenian_section_sign + +XK_Georgian_an +XK_Georgian_ban +XK_Georgian_gan +XK_Georgian_don +XK_Georgian_en +XK_Georgian_vin +XK_Georgian_zen +XK_Georgian_tan +XK_Georgian_in +XK_Georgian_kan +XK_Georgian_las +XK_Georgian_man +XK_Georgian_nar +XK_Georgian_on +XK_Georgian_par +XK_Georgian_zhar +XK_Georgian_rae +XK_Georgian_san +XK_Georgian_tar +XK_Georgian_un +XK_Georgian_phar +XK_Georgian_khar +XK_Georgian_ghan +XK_Georgian_qar +XK_Georgian_shin +XK_Georgian_chin +XK_Georgian_can +XK_Georgian_jil +XK_Georgian_cil +XK_Georgian_char +XK_Georgian_xan +XK_Georgian_jhan +XK_Georgian_hae +XK_Georgian_he +XK_Georgian_hie +XK_Georgian_we +XK_Georgian_har +XK_Georgian_hoe +XK_Georgian_fi + +XK_Ccedillaabovedot +XK_Xabovedot +XK_Qabovedot +XK_Ibreve +XK_IE +XK_UO +XK_Zstroke +XK_Gcaron +XK_Obarred +XK_ccedillaabovedot +XK_xabovedot +XK_Ocaron +XK_qabovedot +XK_ibreve +XK_ie +XK_uo +XK_zstroke +XK_gcaron +XK_ocaron +XK_obarred +XK_SCHWA +XK_Lbelowdot +XK_Lstrokebelowdot +XK_Gtilde +XK_lbelowdot +XK_lstrokebelowdot +XK_gtilde +XK_schwa + +XK_Abelowdot +XK_abelowdot +XK_Ahook +XK_ahook +XK_Acircumflexacute +XK_acircumflexacute +XK_Acircumflexgrave +XK_acircumflexgrave +XK_Acircumflexhook +XK_acircumflexhook +XK_Acircumflextilde +XK_acircumflextilde +XK_Acircumflexbelowdot +XK_acircumflexbelowdot +XK_Abreveacute +XK_abreveacute +XK_Abrevegrave +XK_abrevegrave +XK_Abrevehook +XK_abrevehook +XK_Abrevetilde +XK_abrevetilde +XK_Abrevebelowdot +XK_abrevebelowdot +XK_Ebelowdot +XK_ebelowdot +XK_Ehook +XK_ehook +XK_Etilde +XK_etilde +XK_Ecircumflexacute +XK_ecircumflexacute +XK_Ecircumflexgrave +XK_ecircumflexgrave +XK_Ecircumflexhook +XK_ecircumflexhook +XK_Ecircumflextilde +XK_ecircumflextilde +XK_Ecircumflexbelowdot +XK_ecircumflexbelowdot +XK_Ihook +XK_ihook +XK_Ibelowdot +XK_ibelowdot +XK_Obelowdot +XK_obelowdot +XK_Ohook +XK_ohook +XK_Ocircumflexacute +XK_ocircumflexacute +XK_Ocircumflexgrave +XK_ocircumflexgrave +XK_Ocircumflexhook +XK_ocircumflexhook +XK_Ocircumflextilde +XK_ocircumflextilde +XK_Ocircumflexbelowdot +XK_ocircumflexbelowdot +XK_Ohornacute +XK_ohornacute +XK_Ohorngrave +XK_ohorngrave +XK_Ohornhook +XK_ohornhook +XK_Ohorntilde +XK_ohorntilde +XK_Ohornbelowdot +XK_ohornbelowdot +XK_Ubelowdot +XK_ubelowdot +XK_Uhook +XK_uhook +XK_Uhornacute +XK_uhornacute +XK_Uhorngrave +XK_uhorngrave +XK_Uhornhook +XK_uhornhook +XK_Uhorntilde +XK_uhorntilde +XK_Uhornbelowdot +XK_uhornbelowdot +XK_Ybelowdot +XK_ybelowdot +XK_Yhook +XK_yhook +XK_Ytilde +XK_ytilde +XK_Ohorn +XK_ohorn +XK_Uhorn +XK_uhorn +*/ + +// map "Internet" keys to KeyIDs +static const KeySym s_map1008FF[] = +{ + /* 0x00 */ 0, 0, kKeyBrightnessUp, kKeyBrightnessDown, 0, kKeyKbdBrightnessUp, kKeyKbdBrightnessDown, 0, + /* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x10 */ 0, kKeyAudioDown, kKeyAudioMute, kKeyAudioUp, + /* 0x14 */ kKeyAudioPlay, kKeyAudioStop, kKeyAudioPrev, kKeyAudioNext, + /* 0x18 */ kKeyWWWHome, kKeyAppMail, 0, kKeyWWWSearch, 0, 0, 0, 0, + /* 0x20 */ 0, 0, 0, 0, 0, 0, kKeyWWWBack, kKeyWWWForward, + /* 0x28 */ kKeyWWWStop, kKeyWWWRefresh, 0, 0, kKeyEject, 0, 0, 0, + /* 0x30 */ kKeyWWWFavorites, 0, kKeyAppMedia, 0, 0, 0, 0, 0, + /* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x40 */ kKeyAppUser1, kKeyAppUser2, 0, 0, 0, 0, 0, 0, + /* 0x48 */ 0, 0, kKeyMissionControl, kKeyLaunchpad, 0, 0, 0, 0, + /* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0 +}; + +// map Sun keyboard keys to KeyIDs +// This is based on the the "Internet" keymap plus the missing keys +// Copy/Cut/Open/Paste/Props/Front +static const KeySym s_map1009FF[] = +{ + /* 0x00 */ 0, 0, kKeyBrightnessUp, kKeyBrightnessDown, 0, 0, 0, 0, + /* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x10 */ 0, kKeyAudioDown, kKeyAudioMute, kKeyAudioUp, + /* 0x14 */ kKeyAudioPlay, kKeyAudioStop, kKeyAudioPrev, kKeyAudioNext, + /* 0x18 */ kKeyWWWHome, kKeyAppMail, 0, kKeyWWWSearch, 0, 0, 0, 0, + /* 0x20 */ 0, 0, 0, 0, 0, 0, kKeyWWWBack, kKeyWWWForward, + /* 0x28 */ kKeyWWWStop, kKeyWWWRefresh, 0, 0, kKeyEject, 0, 0, 0, + /* 0x30 */ kKeyWWWFavorites, 0, kKeyAppMedia, 0, 0, 0, 0, 0, + /* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x40 */ kKeyAppUser1, kKeyAppUser2, 0, 0, 0, 0, 0, 0, + /* 0x48 */ 0, 0, kKeyMissionControl, kKeyLaunchpad, 0, 0, 0, 0, + /* 0x50 */ 0, 0, 0, 0, 0, 0, 0, kKeyCopy, + /* 0x58 */ kKeyCut, 0, 0, 0, 0, 0, 0, 0, + /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x68 */ 0, 0, 0, kKeyOpen, 0, kKeyPaste, 0, 0, + /* 0x70 */ kKeyProps, kKeyFront, 0, 0, 0, 0, 0, 0, + /* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0 +}; + +// +// XKBUtil +// + +XKBUtil::KeySymMap XKBUtil::s_keySymToUCS4; + +KeyID +XKBUtil::mapKeySymToKeyID(KeySym k) +{ + initKeyMaps(); + + switch (k & 0xffffff00) { + case 0x0000: + // Latin-1 + return static_cast(k); + + case 0xfe00: + // ISO 9995 Function and Modifier Keys + switch (k) { + case XK_ISO_Left_Tab: + return kKeyLeftTab; + + case XK_ISO_Level3_Shift: + return kKeyAltGr; + +#ifdef XK_ISO_Level5_Shift + case XK_ISO_Level5_Shift: + return XK_ISO_Level5_Shift; //FIXME: there is no "usual" key for this... +#endif + + case XK_ISO_Next_Group: + return kKeyNextGroup; + + case XK_ISO_Prev_Group: + return kKeyPrevGroup; + + case XK_dead_grave: + return kKeyDeadGrave; + + case XK_dead_acute: + return kKeyDeadAcute; + + case XK_dead_circumflex: + return kKeyDeadCircumflex; + + case XK_dead_tilde: + return kKeyDeadTilde; + + case XK_dead_macron: + return kKeyDeadMacron; + + case XK_dead_breve: + return kKeyDeadBreve; + + case XK_dead_abovedot: + return kKeyDeadAbovedot; + + case XK_dead_diaeresis: + return kKeyDeadDiaeresis; + + case XK_dead_abovering: + return kKeyDeadAbovering; + + case XK_dead_doubleacute: + return kKeyDeadDoubleacute; + + case XK_dead_caron: + return kKeyDeadCaron; + + case XK_dead_cedilla: + return kKeyDeadCedilla; + + case XK_dead_ogonek: + return kKeyDeadOgonek; + + default: + return kKeyNone; + } + + case 0xff00: + // MISCELLANY + return static_cast(k - 0xff00 + 0xef00); + + case 0x1008ff00: + // "Internet" keys + return s_map1008FF[k & 0xff]; + + case 0x1009ff00: + // Additional Left-side keys provided by Sun Microsystems USB keyboards + return s_map1009FF[k & 0xff]; + + default: { + // lookup character in table + auto index = s_keySymToUCS4.find(k); + if (index != s_keySymToUCS4.end()) { + return static_cast(index->second); + } + + // unknown character + return kKeyNone; + } + } +} + +std::uint32_t XKBUtil::getModifierBitForKeySym(KeySym keysym) +{ + switch (keysym) { + case XK_Shift_L: + case XK_Shift_R: + return kKeyModifierBitShift; + + case XK_Control_L: + case XK_Control_R: + return kKeyModifierBitControl; + + case XK_Alt_L: + case XK_Alt_R: + return kKeyModifierBitAlt; + + case XK_Meta_L: + case XK_Meta_R: + return kKeyModifierBitMeta; + + case XK_Super_L: + case XK_Super_R: + case XK_Hyper_L: + case XK_Hyper_R: + return kKeyModifierBitSuper; + + case XK_Mode_switch: + case XK_ISO_Level3_Shift: + return kKeyModifierBitAltGr; + +#ifdef XK_ISO_Level5_Shift + case XK_ISO_Level5_Shift: + return kKeyModifierBitLevel5Lock; +#endif + + case XK_Caps_Lock: + return kKeyModifierBitCapsLock; + + case XK_Num_Lock: + return kKeyModifierBitNumLock; + + case XK_Scroll_Lock: + return kKeyModifierBitScrollLock; + + default: + return kKeyModifierBitNone; + } +} + +void +XKBUtil::initKeyMaps() +{ + if (s_keySymToUCS4.empty()) { + for (size_t i =0; i < sizeof(s_keymap) / sizeof(s_keymap[0]); ++i) { + s_keySymToUCS4[s_keymap[i].keysym] = s_keymap[i].ucs4; + } + } +} + +} // namespace inputleap diff --git a/src/lib/platform/XKBUtil.h b/src/lib/platform/XKBUtil.h new file mode 100644 index 00000000..768a5506 --- /dev/null +++ b/src/lib/platform/XKBUtil.h @@ -0,0 +1,56 @@ +/* + * InputLeap -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2002 Chris Schoeneman + * + * This package is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * found in the file LICENSE that should have accompanied this file. + * + * This package is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +#include +#include +#include + +namespace inputleap { + +//! XKB utility functions +class XKBUtil { +public: + typedef std::vector KeySyms; + + //! Convert KeySym to KeyID + /*! + Converts a KeySym to the equivalent KeyID. Returns kKeyNone if the + KeySym cannot be mapped. + */ + static std::uint32_t mapKeySymToKeyID(KeySym); + + //! Convert KeySym to corresponding KeyModifierMask + /*! + Converts a KeySym to the corresponding KeyModifierMask, or 0 if the + KeySym is not a modifier. + */ + static std::uint32_t getModifierBitForKeySym(KeySym keysym); + +private: + static void initKeyMaps(); + + typedef std::map KeySymMap; + + static KeySymMap s_keySymToUCS4; +}; + +} // namespace inputleap diff --git a/src/lib/platform/XWindowsKeyState.cpp b/src/lib/platform/XWindowsKeyState.cpp index 7abc3c6e..3886f2bb 100644 --- a/src/lib/platform/XWindowsKeyState.cpp +++ b/src/lib/platform/XWindowsKeyState.cpp @@ -18,7 +18,7 @@ #include "platform/XWindowsKeyState.h" -#include "platform/XWindowsUtil.h" +#include "platform/XKBUtil.h" #include "base/Log.h" #include @@ -454,16 +454,16 @@ XWindowsKeyState::updateKeysymMap(inputleap::KeyMap& keyMap) // do each keysym (shift level) for (int j = 0; j < maxKeysyms; ++j) { - item.m_id = XWindowsUtil::mapKeySymToKeyID(keysyms[j]); + item.m_id = XKBUtil::mapKeySymToKeyID(keysyms[j]); if (item.m_id == kKeyNone) { if (j != 0 && modifierButtons.count(keycode) > 0) { // pretend the modifier works in other shift levels // because it probably does. if (keysyms[1] == NoSymbol || j != 3) { - item.m_id = XWindowsUtil::mapKeySymToKeyID(keysyms[0]); + item.m_id = XKBUtil::mapKeySymToKeyID(keysyms[0]); } else { - item.m_id = XWindowsUtil::mapKeySymToKeyID(keysyms[1]); + item.m_id = XKBUtil::mapKeySymToKeyID(keysyms[1]); } } if (item.m_id == kKeyNone) { @@ -690,7 +690,7 @@ XWindowsKeyState::updateKeysymMapXKB(inputleap::KeyMap& keyMap) // for keys that change the group. item.m_generates = 0; std::uint32_t modifierBit = - XWindowsUtil::getModifierBitForKeySym(keysym); + XKBUtil::getModifierBitForKeySym(keysym); if (isModifier && modifierBit != kKeyModifierBitNone) { item.m_generates = (1u << modifierBit); for (std::int32_t k = 0; k < 8; ++k) { @@ -730,8 +730,8 @@ XWindowsKeyState::updateKeysymMapXKB(inputleap::KeyMap& keyMap) item.m_sensitive |= ShiftMask | LockMask; - KeyID lKeyID = XWindowsUtil::mapKeySymToKeyID(lKeysym); - KeyID uKeyID = XWindowsUtil::mapKeySymToKeyID(uKeysym); + KeyID lKeyID = XKBUtil::mapKeySymToKeyID(lKeysym); + KeyID uKeyID = XKBUtil::mapKeySymToKeyID(uKeysym); if (lKeyID == kKeyNone || uKeyID == kKeyNone) { continue; } @@ -757,7 +757,7 @@ XWindowsKeyState::updateKeysymMapXKB(inputleap::KeyMap& keyMap) } // add entry - item.m_id = XWindowsUtil::mapKeySymToKeyID(keysym); + item.m_id = XKBUtil::mapKeySymToKeyID(keysym); keyMap.addKeyEntry(item); if (group == 0) { m_keyCodeFromKey.insert(std::make_pair(item.m_id, keycode)); diff --git a/src/lib/platform/XWindowsScreen.cpp b/src/lib/platform/XWindowsScreen.cpp index 4b769100..d7a4ac5e 100644 --- a/src/lib/platform/XWindowsScreen.cpp +++ b/src/lib/platform/XWindowsScreen.cpp @@ -18,6 +18,7 @@ #include "platform/XWindowsScreen.h" +#include "platform/XKBUtil.h" #include "platform/XWindowsClipboard.h" #include "platform/XWindowsEventQueueBuffer.h" #include "platform/XWindowsKeyState.h" @@ -1822,7 +1823,7 @@ XWindowsScreen::mapKeyFromX(XKeyEvent* event) const LOG_DEBUG2("mapped code=%d to keysym=0x%04lx", event->keycode, keysym); // convert key - KeyID result = XWindowsUtil::mapKeySymToKeyID(keysym); + KeyID result = XKBUtil::mapKeySymToKeyID(keysym); LOG_DEBUG2("mapped keysym=0x%04lx to keyID=%d", keysym, result); return result; } diff --git a/src/lib/platform/XWindowsUtil.cpp b/src/lib/platform/XWindowsUtil.cpp index 8e58ee5d..24681da1 100644 --- a/src/lib/platform/XWindowsUtil.cpp +++ b/src/lib/platform/XWindowsUtil.cpp @@ -18,1321 +18,18 @@ #include "platform/XWindowsUtil.h" -#include "inputleap/key_types.h" #include "mt/Thread.h" #include "base/Log.h" #include "base/String.h" #include -#define XK_APL -#define XK_ARABIC -#define XK_ARMENIAN -#define XK_CAUCASUS -#define XK_CURRENCY -#define XK_CYRILLIC -#define XK_GEORGIAN -#define XK_GREEK -#define XK_HEBREW -#define XK_KATAKANA -#define XK_KOREAN -#define XK_LATIN1 -#define XK_LATIN2 -#define XK_LATIN3 -#define XK_LATIN4 -#define XK_LATIN8 -#define XK_LATIN9 -#define XK_MISCELLANY -#define XK_PUBLISHING -#define XK_SPECIAL -#define XK_TECHNICAL -#define XK_THAI -#define XK_VIETNAMESE -#define XK_XKB_KEYS -#include - -#if !defined(XK_OE) -#define XK_OE 0x13bc -#endif -#if !defined(XK_oe) -#define XK_oe 0x13bd -#endif -#if !defined(XK_Ydiaeresis) -#define XK_Ydiaeresis 0x13be -#endif namespace inputleap { -/* - * This table maps keysym values into the corresponding ISO 10646 - * (UCS, Unicode) values. - * - * The array keysymtab[] contains pairs of X11 keysym values for graphical - * characters and the corresponding Unicode value. - * - * Author: Markus G. Kuhn , - * University of Cambridge, April 2001 - * - * Special thanks to Richard Verhoeven for preparing - * an initial draft of the mapping table. - * - * This software is in the public domain. Share and enjoy! - */ - -struct codepair { - KeySym keysym; - std::uint32_t ucs4; -} s_keymap[] = { -{ XK_Aogonek, 0x0104 }, /* LATIN CAPITAL LETTER A WITH OGONEK */ -{ XK_breve, 0x02d8 }, /* BREVE */ -{ XK_Lstroke, 0x0141 }, /* LATIN CAPITAL LETTER L WITH STROKE */ -{ XK_Lcaron, 0x013d }, /* LATIN CAPITAL LETTER L WITH CARON */ -{ XK_Sacute, 0x015a }, /* LATIN CAPITAL LETTER S WITH ACUTE */ -{ XK_Scaron, 0x0160 }, /* LATIN CAPITAL LETTER S WITH CARON */ -{ XK_Scedilla, 0x015e }, /* LATIN CAPITAL LETTER S WITH CEDILLA */ -{ XK_Tcaron, 0x0164 }, /* LATIN CAPITAL LETTER T WITH CARON */ -{ XK_Zacute, 0x0179 }, /* LATIN CAPITAL LETTER Z WITH ACUTE */ -{ XK_Zcaron, 0x017d }, /* LATIN CAPITAL LETTER Z WITH CARON */ -{ XK_Zabovedot, 0x017b }, /* LATIN CAPITAL LETTER Z WITH DOT ABOVE */ -{ XK_aogonek, 0x0105 }, /* LATIN SMALL LETTER A WITH OGONEK */ -{ XK_ogonek, 0x02db }, /* OGONEK */ -{ XK_lstroke, 0x0142 }, /* LATIN SMALL LETTER L WITH STROKE */ -{ XK_lcaron, 0x013e }, /* LATIN SMALL LETTER L WITH CARON */ -{ XK_sacute, 0x015b }, /* LATIN SMALL LETTER S WITH ACUTE */ -{ XK_caron, 0x02c7 }, /* CARON */ -{ XK_scaron, 0x0161 }, /* LATIN SMALL LETTER S WITH CARON */ -{ XK_scedilla, 0x015f }, /* LATIN SMALL LETTER S WITH CEDILLA */ -{ XK_tcaron, 0x0165 }, /* LATIN SMALL LETTER T WITH CARON */ -{ XK_zacute, 0x017a }, /* LATIN SMALL LETTER Z WITH ACUTE */ -{ XK_doubleacute, 0x02dd }, /* DOUBLE ACUTE ACCENT */ -{ XK_zcaron, 0x017e }, /* LATIN SMALL LETTER Z WITH CARON */ -{ XK_zabovedot, 0x017c }, /* LATIN SMALL LETTER Z WITH DOT ABOVE */ -{ XK_Racute, 0x0154 }, /* LATIN CAPITAL LETTER R WITH ACUTE */ -{ XK_Abreve, 0x0102 }, /* LATIN CAPITAL LETTER A WITH BREVE */ -{ XK_Lacute, 0x0139 }, /* LATIN CAPITAL LETTER L WITH ACUTE */ -{ XK_Cacute, 0x0106 }, /* LATIN CAPITAL LETTER C WITH ACUTE */ -{ XK_Ccaron, 0x010c }, /* LATIN CAPITAL LETTER C WITH CARON */ -{ XK_Eogonek, 0x0118 }, /* LATIN CAPITAL LETTER E WITH OGONEK */ -{ XK_Ecaron, 0x011a }, /* LATIN CAPITAL LETTER E WITH CARON */ -{ XK_Dcaron, 0x010e }, /* LATIN CAPITAL LETTER D WITH CARON */ -{ XK_Dstroke, 0x0110 }, /* LATIN CAPITAL LETTER D WITH STROKE */ -{ XK_Nacute, 0x0143 }, /* LATIN CAPITAL LETTER N WITH ACUTE */ -{ XK_Ncaron, 0x0147 }, /* LATIN CAPITAL LETTER N WITH CARON */ -{ XK_Odoubleacute, 0x0150 }, /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ -{ XK_Rcaron, 0x0158 }, /* LATIN CAPITAL LETTER R WITH CARON */ -{ XK_Uring, 0x016e }, /* LATIN CAPITAL LETTER U WITH RING ABOVE */ -{ XK_Udoubleacute, 0x0170 }, /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ -{ XK_Tcedilla, 0x0162 }, /* LATIN CAPITAL LETTER T WITH CEDILLA */ -{ XK_racute, 0x0155 }, /* LATIN SMALL LETTER R WITH ACUTE */ -{ XK_abreve, 0x0103 }, /* LATIN SMALL LETTER A WITH BREVE */ -{ XK_lacute, 0x013a }, /* LATIN SMALL LETTER L WITH ACUTE */ -{ XK_cacute, 0x0107 }, /* LATIN SMALL LETTER C WITH ACUTE */ -{ XK_ccaron, 0x010d }, /* LATIN SMALL LETTER C WITH CARON */ -{ XK_eogonek, 0x0119 }, /* LATIN SMALL LETTER E WITH OGONEK */ -{ XK_ecaron, 0x011b }, /* LATIN SMALL LETTER E WITH CARON */ -{ XK_dcaron, 0x010f }, /* LATIN SMALL LETTER D WITH CARON */ -{ XK_dstroke, 0x0111 }, /* LATIN SMALL LETTER D WITH STROKE */ -{ XK_nacute, 0x0144 }, /* LATIN SMALL LETTER N WITH ACUTE */ -{ XK_ncaron, 0x0148 }, /* LATIN SMALL LETTER N WITH CARON */ -{ XK_odoubleacute, 0x0151 }, /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */ -{ XK_rcaron, 0x0159 }, /* LATIN SMALL LETTER R WITH CARON */ -{ XK_uring, 0x016f }, /* LATIN SMALL LETTER U WITH RING ABOVE */ -{ XK_udoubleacute, 0x0171 }, /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */ -{ XK_tcedilla, 0x0163 }, /* LATIN SMALL LETTER T WITH CEDILLA */ -{ XK_abovedot, 0x02d9 }, /* DOT ABOVE */ -{ XK_Hstroke, 0x0126 }, /* LATIN CAPITAL LETTER H WITH STROKE */ -{ XK_Hcircumflex, 0x0124 }, /* LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ -{ XK_Iabovedot, 0x0130 }, /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ -{ XK_Gbreve, 0x011e }, /* LATIN CAPITAL LETTER G WITH BREVE */ -{ XK_Jcircumflex, 0x0134 }, /* LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ -{ XK_hstroke, 0x0127 }, /* LATIN SMALL LETTER H WITH STROKE */ -{ XK_hcircumflex, 0x0125 }, /* LATIN SMALL LETTER H WITH CIRCUMFLEX */ -{ XK_idotless, 0x0131 }, /* LATIN SMALL LETTER DOTLESS I */ -{ XK_gbreve, 0x011f }, /* LATIN SMALL LETTER G WITH BREVE */ -{ XK_jcircumflex, 0x0135 }, /* LATIN SMALL LETTER J WITH CIRCUMFLEX */ -{ XK_Cabovedot, 0x010a }, /* LATIN CAPITAL LETTER C WITH DOT ABOVE */ -{ XK_Ccircumflex, 0x0108 }, /* LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ -{ XK_Gabovedot, 0x0120 }, /* LATIN CAPITAL LETTER G WITH DOT ABOVE */ -{ XK_Gcircumflex, 0x011c }, /* LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ -{ XK_Ubreve, 0x016c }, /* LATIN CAPITAL LETTER U WITH BREVE */ -{ XK_Scircumflex, 0x015c }, /* LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ -{ XK_cabovedot, 0x010b }, /* LATIN SMALL LETTER C WITH DOT ABOVE */ -{ XK_ccircumflex, 0x0109 }, /* LATIN SMALL LETTER C WITH CIRCUMFLEX */ -{ XK_gabovedot, 0x0121 }, /* LATIN SMALL LETTER G WITH DOT ABOVE */ -{ XK_gcircumflex, 0x011d }, /* LATIN SMALL LETTER G WITH CIRCUMFLEX */ -{ XK_ubreve, 0x016d }, /* LATIN SMALL LETTER U WITH BREVE */ -{ XK_scircumflex, 0x015d }, /* LATIN SMALL LETTER S WITH CIRCUMFLEX */ -{ XK_kra, 0x0138 }, /* LATIN SMALL LETTER KRA */ -{ XK_Rcedilla, 0x0156 }, /* LATIN CAPITAL LETTER R WITH CEDILLA */ -{ XK_Itilde, 0x0128 }, /* LATIN CAPITAL LETTER I WITH TILDE */ -{ XK_Lcedilla, 0x013b }, /* LATIN CAPITAL LETTER L WITH CEDILLA */ -{ XK_Emacron, 0x0112 }, /* LATIN CAPITAL LETTER E WITH MACRON */ -{ XK_Gcedilla, 0x0122 }, /* LATIN CAPITAL LETTER G WITH CEDILLA */ -{ XK_Tslash, 0x0166 }, /* LATIN CAPITAL LETTER T WITH STROKE */ -{ XK_rcedilla, 0x0157 }, /* LATIN SMALL LETTER R WITH CEDILLA */ -{ XK_itilde, 0x0129 }, /* LATIN SMALL LETTER I WITH TILDE */ -{ XK_lcedilla, 0x013c }, /* LATIN SMALL LETTER L WITH CEDILLA */ -{ XK_emacron, 0x0113 }, /* LATIN SMALL LETTER E WITH MACRON */ -{ XK_gcedilla, 0x0123 }, /* LATIN SMALL LETTER G WITH CEDILLA */ -{ XK_tslash, 0x0167 }, /* LATIN SMALL LETTER T WITH STROKE */ -{ XK_ENG, 0x014a }, /* LATIN CAPITAL LETTER ENG */ -{ XK_eng, 0x014b }, /* LATIN SMALL LETTER ENG */ -{ XK_Amacron, 0x0100 }, /* LATIN CAPITAL LETTER A WITH MACRON */ -{ XK_Iogonek, 0x012e }, /* LATIN CAPITAL LETTER I WITH OGONEK */ -{ XK_Eabovedot, 0x0116 }, /* LATIN CAPITAL LETTER E WITH DOT ABOVE */ -{ XK_Imacron, 0x012a }, /* LATIN CAPITAL LETTER I WITH MACRON */ -{ XK_Ncedilla, 0x0145 }, /* LATIN CAPITAL LETTER N WITH CEDILLA */ -{ XK_Omacron, 0x014c }, /* LATIN CAPITAL LETTER O WITH MACRON */ -{ XK_Kcedilla, 0x0136 }, /* LATIN CAPITAL LETTER K WITH CEDILLA */ -{ XK_Uogonek, 0x0172 }, /* LATIN CAPITAL LETTER U WITH OGONEK */ -{ XK_Utilde, 0x0168 }, /* LATIN CAPITAL LETTER U WITH TILDE */ -{ XK_Umacron, 0x016a }, /* LATIN CAPITAL LETTER U WITH MACRON */ -{ XK_amacron, 0x0101 }, /* LATIN SMALL LETTER A WITH MACRON */ -{ XK_iogonek, 0x012f }, /* LATIN SMALL LETTER I WITH OGONEK */ -{ XK_eabovedot, 0x0117 }, /* LATIN SMALL LETTER E WITH DOT ABOVE */ -{ XK_imacron, 0x012b }, /* LATIN SMALL LETTER I WITH MACRON */ -{ XK_ncedilla, 0x0146 }, /* LATIN SMALL LETTER N WITH CEDILLA */ -{ XK_omacron, 0x014d }, /* LATIN SMALL LETTER O WITH MACRON */ -{ XK_kcedilla, 0x0137 }, /* LATIN SMALL LETTER K WITH CEDILLA */ -{ XK_uogonek, 0x0173 }, /* LATIN SMALL LETTER U WITH OGONEK */ -{ XK_utilde, 0x0169 }, /* LATIN SMALL LETTER U WITH TILDE */ -{ XK_umacron, 0x016b }, /* LATIN SMALL LETTER U WITH MACRON */ -#if defined(XK_Babovedot) -{ XK_Babovedot, 0x1e02 }, /* LATIN CAPITAL LETTER B WITH DOT ABOVE */ -{ XK_babovedot, 0x1e03 }, /* LATIN SMALL LETTER B WITH DOT ABOVE */ -{ XK_Dabovedot, 0x1e0a }, /* LATIN CAPITAL LETTER D WITH DOT ABOVE */ -{ XK_Wgrave, 0x1e80 }, /* LATIN CAPITAL LETTER W WITH GRAVE */ -{ XK_Wacute, 0x1e82 }, /* LATIN CAPITAL LETTER W WITH ACUTE */ -{ XK_dabovedot, 0x1e0b }, /* LATIN SMALL LETTER D WITH DOT ABOVE */ -{ XK_Ygrave, 0x1ef2 }, /* LATIN CAPITAL LETTER Y WITH GRAVE */ -{ XK_Fabovedot, 0x1e1e }, /* LATIN CAPITAL LETTER F WITH DOT ABOVE */ -{ XK_fabovedot, 0x1e1f }, /* LATIN SMALL LETTER F WITH DOT ABOVE */ -{ XK_Mabovedot, 0x1e40 }, /* LATIN CAPITAL LETTER M WITH DOT ABOVE */ -{ XK_mabovedot, 0x1e41 }, /* LATIN SMALL LETTER M WITH DOT ABOVE */ -{ XK_Pabovedot, 0x1e56 }, /* LATIN CAPITAL LETTER P WITH DOT ABOVE */ -{ XK_wgrave, 0x1e81 }, /* LATIN SMALL LETTER W WITH GRAVE */ -{ XK_pabovedot, 0x1e57 }, /* LATIN SMALL LETTER P WITH DOT ABOVE */ -{ XK_wacute, 0x1e83 }, /* LATIN SMALL LETTER W WITH ACUTE */ -{ XK_Sabovedot, 0x1e60 }, /* LATIN CAPITAL LETTER S WITH DOT ABOVE */ -{ XK_ygrave, 0x1ef3 }, /* LATIN SMALL LETTER Y WITH GRAVE */ -{ XK_Wdiaeresis, 0x1e84 }, /* LATIN CAPITAL LETTER W WITH DIAERESIS */ -{ XK_wdiaeresis, 0x1e85 }, /* LATIN SMALL LETTER W WITH DIAERESIS */ -{ XK_sabovedot, 0x1e61 }, /* LATIN SMALL LETTER S WITH DOT ABOVE */ -{ XK_Wcircumflex, 0x0174 }, /* LATIN CAPITAL LETTER W WITH CIRCUMFLEX */ -{ XK_Tabovedot, 0x1e6a }, /* LATIN CAPITAL LETTER T WITH DOT ABOVE */ -{ XK_Ycircumflex, 0x0176 }, /* LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */ -{ XK_wcircumflex, 0x0175 }, /* LATIN SMALL LETTER W WITH CIRCUMFLEX */ -{ XK_tabovedot, 0x1e6b }, /* LATIN SMALL LETTER T WITH DOT ABOVE */ -{ XK_ycircumflex, 0x0177 }, /* LATIN SMALL LETTER Y WITH CIRCUMFLEX */ -#endif // defined(XK_Babovedot) -#if defined(XK_overline) -{ XK_overline, 0x203e }, /* OVERLINE */ -{ XK_kana_fullstop, 0x3002 }, /* IDEOGRAPHIC FULL STOP */ -{ XK_kana_openingbracket, 0x300c }, /* LEFT CORNER BRACKET */ -{ XK_kana_closingbracket, 0x300d }, /* RIGHT CORNER BRACKET */ -{ XK_kana_comma, 0x3001 }, /* IDEOGRAPHIC COMMA */ -{ XK_kana_conjunctive, 0x30fb }, /* KATAKANA MIDDLE DOT */ -{ XK_kana_WO, 0x30f2 }, /* KATAKANA LETTER WO */ -{ XK_kana_a, 0x30a1 }, /* KATAKANA LETTER SMALL A */ -{ XK_kana_i, 0x30a3 }, /* KATAKANA LETTER SMALL I */ -{ XK_kana_u, 0x30a5 }, /* KATAKANA LETTER SMALL U */ -{ XK_kana_e, 0x30a7 }, /* KATAKANA LETTER SMALL E */ -{ XK_kana_o, 0x30a9 }, /* KATAKANA LETTER SMALL O */ -{ XK_kana_ya, 0x30e3 }, /* KATAKANA LETTER SMALL YA */ -{ XK_kana_yu, 0x30e5 }, /* KATAKANA LETTER SMALL YU */ -{ XK_kana_yo, 0x30e7 }, /* KATAKANA LETTER SMALL YO */ -{ XK_kana_tsu, 0x30c3 }, /* KATAKANA LETTER SMALL TU */ -{ XK_prolongedsound, 0x30fc }, /* KATAKANA-HIRAGANA PROLONGED SOUND MARK */ -{ XK_kana_A, 0x30a2 }, /* KATAKANA LETTER A */ -{ XK_kana_I, 0x30a4 }, /* KATAKANA LETTER I */ -{ XK_kana_U, 0x30a6 }, /* KATAKANA LETTER U */ -{ XK_kana_E, 0x30a8 }, /* KATAKANA LETTER E */ -{ XK_kana_O, 0x30aa }, /* KATAKANA LETTER O */ -{ XK_kana_KA, 0x30ab }, /* KATAKANA LETTER KA */ -{ XK_kana_KI, 0x30ad }, /* KATAKANA LETTER KI */ -{ XK_kana_KU, 0x30af }, /* KATAKANA LETTER KU */ -{ XK_kana_KE, 0x30b1 }, /* KATAKANA LETTER KE */ -{ XK_kana_KO, 0x30b3 }, /* KATAKANA LETTER KO */ -{ XK_kana_SA, 0x30b5 }, /* KATAKANA LETTER SA */ -{ XK_kana_SHI, 0x30b7 }, /* KATAKANA LETTER SI */ -{ XK_kana_SU, 0x30b9 }, /* KATAKANA LETTER SU */ -{ XK_kana_SE, 0x30bb }, /* KATAKANA LETTER SE */ -{ XK_kana_SO, 0x30bd }, /* KATAKANA LETTER SO */ -{ XK_kana_TA, 0x30bf }, /* KATAKANA LETTER TA */ -{ XK_kana_CHI, 0x30c1 }, /* KATAKANA LETTER TI */ -{ XK_kana_TSU, 0x30c4 }, /* KATAKANA LETTER TU */ -{ XK_kana_TE, 0x30c6 }, /* KATAKANA LETTER TE */ -{ XK_kana_TO, 0x30c8 }, /* KATAKANA LETTER TO */ -{ XK_kana_NA, 0x30ca }, /* KATAKANA LETTER NA */ -{ XK_kana_NI, 0x30cb }, /* KATAKANA LETTER NI */ -{ XK_kana_NU, 0x30cc }, /* KATAKANA LETTER NU */ -{ XK_kana_NE, 0x30cd }, /* KATAKANA LETTER NE */ -{ XK_kana_NO, 0x30ce }, /* KATAKANA LETTER NO */ -{ XK_kana_HA, 0x30cf }, /* KATAKANA LETTER HA */ -{ XK_kana_HI, 0x30d2 }, /* KATAKANA LETTER HI */ -{ XK_kana_FU, 0x30d5 }, /* KATAKANA LETTER HU */ -{ XK_kana_HE, 0x30d8 }, /* KATAKANA LETTER HE */ -{ XK_kana_HO, 0x30db }, /* KATAKANA LETTER HO */ -{ XK_kana_MA, 0x30de }, /* KATAKANA LETTER MA */ -{ XK_kana_MI, 0x30df }, /* KATAKANA LETTER MI */ -{ XK_kana_MU, 0x30e0 }, /* KATAKANA LETTER MU */ -{ XK_kana_ME, 0x30e1 }, /* KATAKANA LETTER ME */ -{ XK_kana_MO, 0x30e2 }, /* KATAKANA LETTER MO */ -{ XK_kana_YA, 0x30e4 }, /* KATAKANA LETTER YA */ -{ XK_kana_YU, 0x30e6 }, /* KATAKANA LETTER YU */ -{ XK_kana_YO, 0x30e8 }, /* KATAKANA LETTER YO */ -{ XK_kana_RA, 0x30e9 }, /* KATAKANA LETTER RA */ -{ XK_kana_RI, 0x30ea }, /* KATAKANA LETTER RI */ -{ XK_kana_RU, 0x30eb }, /* KATAKANA LETTER RU */ -{ XK_kana_RE, 0x30ec }, /* KATAKANA LETTER RE */ -{ XK_kana_RO, 0x30ed }, /* KATAKANA LETTER RO */ -{ XK_kana_WA, 0x30ef }, /* KATAKANA LETTER WA */ -{ XK_kana_N, 0x30f3 }, /* KATAKANA LETTER N */ -{ XK_voicedsound, 0x309b }, /* KATAKANA-HIRAGANA VOICED SOUND MARK */ -{ XK_semivoicedsound, 0x309c }, /* KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ -#endif // defined(XK_overline) -#if defined(XK_Farsi_0) -{ XK_Farsi_0, 0x06f0 }, /* EXTENDED ARABIC-INDIC DIGIT 0 */ -{ XK_Farsi_1, 0x06f1 }, /* EXTENDED ARABIC-INDIC DIGIT 1 */ -{ XK_Farsi_2, 0x06f2 }, /* EXTENDED ARABIC-INDIC DIGIT 2 */ -{ XK_Farsi_3, 0x06f3 }, /* EXTENDED ARABIC-INDIC DIGIT 3 */ -{ XK_Farsi_4, 0x06f4 }, /* EXTENDED ARABIC-INDIC DIGIT 4 */ -{ XK_Farsi_5, 0x06f5 }, /* EXTENDED ARABIC-INDIC DIGIT 5 */ -{ XK_Farsi_6, 0x06f6 }, /* EXTENDED ARABIC-INDIC DIGIT 6 */ -{ XK_Farsi_7, 0x06f7 }, /* EXTENDED ARABIC-INDIC DIGIT 7 */ -{ XK_Farsi_8, 0x06f8 }, /* EXTENDED ARABIC-INDIC DIGIT 8 */ -{ XK_Farsi_9, 0x06f9 }, /* EXTENDED ARABIC-INDIC DIGIT 9 */ -{ XK_Arabic_percent, 0x066a }, /* ARABIC PERCENT */ -{ XK_Arabic_superscript_alef, 0x0670 }, /* ARABIC LETTER SUPERSCRIPT ALEF */ -{ XK_Arabic_tteh, 0x0679 }, /* ARABIC LETTER TTEH */ -{ XK_Arabic_peh, 0x067e }, /* ARABIC LETTER PEH */ -{ XK_Arabic_tcheh, 0x0686 }, /* ARABIC LETTER TCHEH */ -{ XK_Arabic_ddal, 0x0688 }, /* ARABIC LETTER DDAL */ -{ XK_Arabic_rreh, 0x0691 }, /* ARABIC LETTER RREH */ -{ XK_Arabic_comma, 0x060c }, /* ARABIC COMMA */ -{ XK_Arabic_fullstop, 0x06d4 }, /* ARABIC FULLSTOP */ -{ XK_Arabic_semicolon, 0x061b }, /* ARABIC SEMICOLON */ -{ XK_Arabic_0, 0x0660 }, /* ARABIC 0 */ -{ XK_Arabic_1, 0x0661 }, /* ARABIC 1 */ -{ XK_Arabic_2, 0x0662 }, /* ARABIC 2 */ -{ XK_Arabic_3, 0x0663 }, /* ARABIC 3 */ -{ XK_Arabic_4, 0x0664 }, /* ARABIC 4 */ -{ XK_Arabic_5, 0x0665 }, /* ARABIC 5 */ -{ XK_Arabic_6, 0x0666 }, /* ARABIC 6 */ -{ XK_Arabic_7, 0x0667 }, /* ARABIC 7 */ -{ XK_Arabic_8, 0x0668 }, /* ARABIC 8 */ -{ XK_Arabic_9, 0x0669 }, /* ARABIC 9 */ -{ XK_Arabic_question_mark, 0x061f }, /* ARABIC QUESTION MARK */ -{ XK_Arabic_hamza, 0x0621 }, /* ARABIC LETTER HAMZA */ -{ XK_Arabic_maddaonalef, 0x0622 }, /* ARABIC LETTER ALEF WITH MADDA ABOVE */ -{ XK_Arabic_hamzaonalef, 0x0623 }, /* ARABIC LETTER ALEF WITH HAMZA ABOVE */ -{ XK_Arabic_hamzaonwaw, 0x0624 }, /* ARABIC LETTER WAW WITH HAMZA ABOVE */ -{ XK_Arabic_hamzaunderalef, 0x0625 }, /* ARABIC LETTER ALEF WITH HAMZA BELOW */ -{ XK_Arabic_hamzaonyeh, 0x0626 }, /* ARABIC LETTER YEH WITH HAMZA ABOVE */ -{ XK_Arabic_alef, 0x0627 }, /* ARABIC LETTER ALEF */ -{ XK_Arabic_beh, 0x0628 }, /* ARABIC LETTER BEH */ -{ XK_Arabic_tehmarbuta, 0x0629 }, /* ARABIC LETTER TEH MARBUTA */ -{ XK_Arabic_teh, 0x062a }, /* ARABIC LETTER TEH */ -{ XK_Arabic_theh, 0x062b }, /* ARABIC LETTER THEH */ -{ XK_Arabic_jeem, 0x062c }, /* ARABIC LETTER JEEM */ -{ XK_Arabic_hah, 0x062d }, /* ARABIC LETTER HAH */ -{ XK_Arabic_khah, 0x062e }, /* ARABIC LETTER KHAH */ -{ XK_Arabic_dal, 0x062f }, /* ARABIC LETTER DAL */ -{ XK_Arabic_thal, 0x0630 }, /* ARABIC LETTER THAL */ -{ XK_Arabic_ra, 0x0631 }, /* ARABIC LETTER REH */ -{ XK_Arabic_zain, 0x0632 }, /* ARABIC LETTER ZAIN */ -{ XK_Arabic_seen, 0x0633 }, /* ARABIC LETTER SEEN */ -{ XK_Arabic_sheen, 0x0634 }, /* ARABIC LETTER SHEEN */ -{ XK_Arabic_sad, 0x0635 }, /* ARABIC LETTER SAD */ -{ XK_Arabic_dad, 0x0636 }, /* ARABIC LETTER DAD */ -{ XK_Arabic_tah, 0x0637 }, /* ARABIC LETTER TAH */ -{ XK_Arabic_zah, 0x0638 }, /* ARABIC LETTER ZAH */ -{ XK_Arabic_ain, 0x0639 }, /* ARABIC LETTER AIN */ -{ XK_Arabic_ghain, 0x063a }, /* ARABIC LETTER GHAIN */ -{ XK_Arabic_tatweel, 0x0640 }, /* ARABIC TATWEEL */ -{ XK_Arabic_feh, 0x0641 }, /* ARABIC LETTER FEH */ -{ XK_Arabic_qaf, 0x0642 }, /* ARABIC LETTER QAF */ -{ XK_Arabic_kaf, 0x0643 }, /* ARABIC LETTER KAF */ -{ XK_Arabic_lam, 0x0644 }, /* ARABIC LETTER LAM */ -{ XK_Arabic_meem, 0x0645 }, /* ARABIC LETTER MEEM */ -{ XK_Arabic_noon, 0x0646 }, /* ARABIC LETTER NOON */ -{ XK_Arabic_ha, 0x0647 }, /* ARABIC LETTER HEH */ -{ XK_Arabic_waw, 0x0648 }, /* ARABIC LETTER WAW */ -{ XK_Arabic_alefmaksura, 0x0649 }, /* ARABIC LETTER ALEF MAKSURA */ -{ XK_Arabic_yeh, 0x064a }, /* ARABIC LETTER YEH */ -{ XK_Arabic_fathatan, 0x064b }, /* ARABIC FATHATAN */ -{ XK_Arabic_dammatan, 0x064c }, /* ARABIC DAMMATAN */ -{ XK_Arabic_kasratan, 0x064d }, /* ARABIC KASRATAN */ -{ XK_Arabic_fatha, 0x064e }, /* ARABIC FATHA */ -{ XK_Arabic_damma, 0x064f }, /* ARABIC DAMMA */ -{ XK_Arabic_kasra, 0x0650 }, /* ARABIC KASRA */ -{ XK_Arabic_shadda, 0x0651 }, /* ARABIC SHADDA */ -{ XK_Arabic_sukun, 0x0652 }, /* ARABIC SUKUN */ -{ XK_Arabic_madda_above, 0x0653 }, /* ARABIC MADDA ABOVE */ -{ XK_Arabic_hamza_above, 0x0654 }, /* ARABIC HAMZA ABOVE */ -{ XK_Arabic_hamza_below, 0x0655 }, /* ARABIC HAMZA BELOW */ -{ XK_Arabic_jeh, 0x0698 }, /* ARABIC LETTER JEH */ -{ XK_Arabic_veh, 0x06a4 }, /* ARABIC LETTER VEH */ -{ XK_Arabic_keheh, 0x06a9 }, /* ARABIC LETTER KEHEH */ -{ XK_Arabic_gaf, 0x06af }, /* ARABIC LETTER GAF */ -{ XK_Arabic_noon_ghunna, 0x06ba }, /* ARABIC LETTER NOON GHUNNA */ -{ XK_Arabic_heh_doachashmee, 0x06be }, /* ARABIC LETTER HEH DOACHASHMEE */ -{ XK_Arabic_farsi_yeh, 0x06cc }, /* ARABIC LETTER FARSI YEH */ -{ XK_Arabic_yeh_baree, 0x06d2 }, /* ARABIC LETTER YEH BAREE */ -{ XK_Arabic_heh_goal, 0x06c1 }, /* ARABIC LETTER HEH GOAL */ -#endif // defined(XK_Farsi_0) -#if defined(XK_Serbian_dje) -{ XK_Serbian_dje, 0x0452 }, /* CYRILLIC SMALL LETTER DJE */ -{ XK_Macedonia_gje, 0x0453 }, /* CYRILLIC SMALL LETTER GJE */ -{ XK_Cyrillic_io, 0x0451 }, /* CYRILLIC SMALL LETTER IO */ -{ XK_Ukrainian_ie, 0x0454 }, /* CYRILLIC SMALL LETTER UKRAINIAN IE */ -{ XK_Macedonia_dse, 0x0455 }, /* CYRILLIC SMALL LETTER DZE */ -{ XK_Ukrainian_i, 0x0456 }, /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ -{ XK_Ukrainian_yi, 0x0457 }, /* CYRILLIC SMALL LETTER YI */ -{ XK_Cyrillic_je, 0x0458 }, /* CYRILLIC SMALL LETTER JE */ -{ XK_Cyrillic_lje, 0x0459 }, /* CYRILLIC SMALL LETTER LJE */ -{ XK_Cyrillic_nje, 0x045a }, /* CYRILLIC SMALL LETTER NJE */ -{ XK_Serbian_tshe, 0x045b }, /* CYRILLIC SMALL LETTER TSHE */ -{ XK_Macedonia_kje, 0x045c }, /* CYRILLIC SMALL LETTER KJE */ -#if defined(XK_Ukrainian_ghe_with_upturn) -{ XK_Ukrainian_ghe_with_upturn, 0x0491 }, /* CYRILLIC SMALL LETTER GHE WITH UPTURN */ -#endif -{ XK_Byelorussian_shortu, 0x045e }, /* CYRILLIC SMALL LETTER SHORT U */ -{ XK_Cyrillic_dzhe, 0x045f }, /* CYRILLIC SMALL LETTER DZHE */ -{ XK_numerosign, 0x2116 }, /* NUMERO SIGN */ -{ XK_Serbian_DJE, 0x0402 }, /* CYRILLIC CAPITAL LETTER DJE */ -{ XK_Macedonia_GJE, 0x0403 }, /* CYRILLIC CAPITAL LETTER GJE */ -{ XK_Cyrillic_IO, 0x0401 }, /* CYRILLIC CAPITAL LETTER IO */ -{ XK_Ukrainian_IE, 0x0404 }, /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */ -{ XK_Macedonia_DSE, 0x0405 }, /* CYRILLIC CAPITAL LETTER DZE */ -{ XK_Ukrainian_I, 0x0406 }, /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ -{ XK_Ukrainian_YI, 0x0407 }, /* CYRILLIC CAPITAL LETTER YI */ -{ XK_Cyrillic_JE, 0x0408 }, /* CYRILLIC CAPITAL LETTER JE */ -{ XK_Cyrillic_LJE, 0x0409 }, /* CYRILLIC CAPITAL LETTER LJE */ -{ XK_Cyrillic_NJE, 0x040a }, /* CYRILLIC CAPITAL LETTER NJE */ -{ XK_Serbian_TSHE, 0x040b }, /* CYRILLIC CAPITAL LETTER TSHE */ -{ XK_Macedonia_KJE, 0x040c }, /* CYRILLIC CAPITAL LETTER KJE */ -#if defined(XK_Ukrainian_GHE_WITH_UPTURN) -{ XK_Ukrainian_GHE_WITH_UPTURN, 0x0490 }, /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ -#endif -{ XK_Byelorussian_SHORTU, 0x040e }, /* CYRILLIC CAPITAL LETTER SHORT U */ -{ XK_Cyrillic_DZHE, 0x040f }, /* CYRILLIC CAPITAL LETTER DZHE */ -{ XK_Cyrillic_yu, 0x044e }, /* CYRILLIC SMALL LETTER YU */ -{ XK_Cyrillic_a, 0x0430 }, /* CYRILLIC SMALL LETTER A */ -{ XK_Cyrillic_be, 0x0431 }, /* CYRILLIC SMALL LETTER BE */ -{ XK_Cyrillic_tse, 0x0446 }, /* CYRILLIC SMALL LETTER TSE */ -{ XK_Cyrillic_de, 0x0434 }, /* CYRILLIC SMALL LETTER DE */ -{ XK_Cyrillic_ie, 0x0435 }, /* CYRILLIC SMALL LETTER IE */ -{ XK_Cyrillic_ef, 0x0444 }, /* CYRILLIC SMALL LETTER EF */ -{ XK_Cyrillic_ghe, 0x0433 }, /* CYRILLIC SMALL LETTER GHE */ -{ XK_Cyrillic_ha, 0x0445 }, /* CYRILLIC SMALL LETTER HA */ -{ XK_Cyrillic_i, 0x0438 }, /* CYRILLIC SMALL LETTER I */ -{ XK_Cyrillic_shorti, 0x0439 }, /* CYRILLIC SMALL LETTER SHORT I */ -{ XK_Cyrillic_ka, 0x043a }, /* CYRILLIC SMALL LETTER KA */ -{ XK_Cyrillic_el, 0x043b }, /* CYRILLIC SMALL LETTER EL */ -{ XK_Cyrillic_em, 0x043c }, /* CYRILLIC SMALL LETTER EM */ -{ XK_Cyrillic_en, 0x043d }, /* CYRILLIC SMALL LETTER EN */ -{ XK_Cyrillic_o, 0x043e }, /* CYRILLIC SMALL LETTER O */ -{ XK_Cyrillic_pe, 0x043f }, /* CYRILLIC SMALL LETTER PE */ -{ XK_Cyrillic_ya, 0x044f }, /* CYRILLIC SMALL LETTER YA */ -{ XK_Cyrillic_er, 0x0440 }, /* CYRILLIC SMALL LETTER ER */ -{ XK_Cyrillic_es, 0x0441 }, /* CYRILLIC SMALL LETTER ES */ -{ XK_Cyrillic_te, 0x0442 }, /* CYRILLIC SMALL LETTER TE */ -{ XK_Cyrillic_u, 0x0443 }, /* CYRILLIC SMALL LETTER U */ -{ XK_Cyrillic_zhe, 0x0436 }, /* CYRILLIC SMALL LETTER ZHE */ -{ XK_Cyrillic_ve, 0x0432 }, /* CYRILLIC SMALL LETTER VE */ -{ XK_Cyrillic_softsign, 0x044c }, /* CYRILLIC SMALL LETTER SOFT SIGN */ -{ XK_Cyrillic_yeru, 0x044b }, /* CYRILLIC SMALL LETTER YERU */ -{ XK_Cyrillic_ze, 0x0437 }, /* CYRILLIC SMALL LETTER ZE */ -{ XK_Cyrillic_sha, 0x0448 }, /* CYRILLIC SMALL LETTER SHA */ -{ XK_Cyrillic_e, 0x044d }, /* CYRILLIC SMALL LETTER E */ -{ XK_Cyrillic_shcha, 0x0449 }, /* CYRILLIC SMALL LETTER SHCHA */ -{ XK_Cyrillic_che, 0x0447 }, /* CYRILLIC SMALL LETTER CHE */ -{ XK_Cyrillic_hardsign, 0x044a }, /* CYRILLIC SMALL LETTER HARD SIGN */ -{ XK_Cyrillic_YU, 0x042e }, /* CYRILLIC CAPITAL LETTER YU */ -{ XK_Cyrillic_A, 0x0410 }, /* CYRILLIC CAPITAL LETTER A */ -{ XK_Cyrillic_BE, 0x0411 }, /* CYRILLIC CAPITAL LETTER BE */ -{ XK_Cyrillic_TSE, 0x0426 }, /* CYRILLIC CAPITAL LETTER TSE */ -{ XK_Cyrillic_DE, 0x0414 }, /* CYRILLIC CAPITAL LETTER DE */ -{ XK_Cyrillic_IE, 0x0415 }, /* CYRILLIC CAPITAL LETTER IE */ -{ XK_Cyrillic_EF, 0x0424 }, /* CYRILLIC CAPITAL LETTER EF */ -{ XK_Cyrillic_GHE, 0x0413 }, /* CYRILLIC CAPITAL LETTER GHE */ -{ XK_Cyrillic_HA, 0x0425 }, /* CYRILLIC CAPITAL LETTER HA */ -{ XK_Cyrillic_I, 0x0418 }, /* CYRILLIC CAPITAL LETTER I */ -{ XK_Cyrillic_SHORTI, 0x0419 }, /* CYRILLIC CAPITAL LETTER SHORT I */ -{ XK_Cyrillic_KA, 0x041a }, /* CYRILLIC CAPITAL LETTER KA */ -{ XK_Cyrillic_EL, 0x041b }, /* CYRILLIC CAPITAL LETTER EL */ -{ XK_Cyrillic_EM, 0x041c }, /* CYRILLIC CAPITAL LETTER EM */ -{ XK_Cyrillic_EN, 0x041d }, /* CYRILLIC CAPITAL LETTER EN */ -{ XK_Cyrillic_O, 0x041e }, /* CYRILLIC CAPITAL LETTER O */ -{ XK_Cyrillic_PE, 0x041f }, /* CYRILLIC CAPITAL LETTER PE */ -{ XK_Cyrillic_YA, 0x042f }, /* CYRILLIC CAPITAL LETTER YA */ -{ XK_Cyrillic_ER, 0x0420 }, /* CYRILLIC CAPITAL LETTER ER */ -{ XK_Cyrillic_ES, 0x0421 }, /* CYRILLIC CAPITAL LETTER ES */ -{ XK_Cyrillic_TE, 0x0422 }, /* CYRILLIC CAPITAL LETTER TE */ -{ XK_Cyrillic_U, 0x0423 }, /* CYRILLIC CAPITAL LETTER U */ -{ XK_Cyrillic_ZHE, 0x0416 }, /* CYRILLIC CAPITAL LETTER ZHE */ -{ XK_Cyrillic_VE, 0x0412 }, /* CYRILLIC CAPITAL LETTER VE */ -{ XK_Cyrillic_SOFTSIGN, 0x042c }, /* CYRILLIC CAPITAL LETTER SOFT SIGN */ -{ XK_Cyrillic_YERU, 0x042b }, /* CYRILLIC CAPITAL LETTER YERU */ -{ XK_Cyrillic_ZE, 0x0417 }, /* CYRILLIC CAPITAL LETTER ZE */ -{ XK_Cyrillic_SHA, 0x0428 }, /* CYRILLIC CAPITAL LETTER SHA */ -{ XK_Cyrillic_E, 0x042d }, /* CYRILLIC CAPITAL LETTER E */ -{ XK_Cyrillic_SHCHA, 0x0429 }, /* CYRILLIC CAPITAL LETTER SHCHA */ -{ XK_Cyrillic_CHE, 0x0427 }, /* CYRILLIC CAPITAL LETTER CHE */ -{ XK_Cyrillic_HARDSIGN, 0x042a }, /* CYRILLIC CAPITAL LETTER HARD SIGN */ -#endif // defined(XK_Serbian_dje) -#if defined(XK_Greek_ALPHAaccent) -{ XK_Greek_ALPHAaccent, 0x0386 }, /* GREEK CAPITAL LETTER ALPHA WITH TONOS */ -{ XK_Greek_EPSILONaccent, 0x0388 }, /* GREEK CAPITAL LETTER EPSILON WITH TONOS */ -{ XK_Greek_ETAaccent, 0x0389 }, /* GREEK CAPITAL LETTER ETA WITH TONOS */ -{ XK_Greek_IOTAaccent, 0x038a }, /* GREEK CAPITAL LETTER IOTA WITH TONOS */ -{ XK_Greek_IOTAdiaeresis, 0x03aa }, /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ -{ XK_Greek_OMICRONaccent, 0x038c }, /* GREEK CAPITAL LETTER OMICRON WITH TONOS */ -{ XK_Greek_UPSILONaccent, 0x038e }, /* GREEK CAPITAL LETTER UPSILON WITH TONOS */ -{ XK_Greek_UPSILONdieresis, 0x03ab }, /* GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ -{ XK_Greek_OMEGAaccent, 0x038f }, /* GREEK CAPITAL LETTER OMEGA WITH TONOS */ -{ XK_Greek_accentdieresis, 0x0385 }, /* GREEK DIALYTIKA TONOS */ -{ XK_Greek_horizbar, 0x2015 }, /* HORIZONTAL BAR */ -{ XK_Greek_alphaaccent, 0x03ac }, /* GREEK SMALL LETTER ALPHA WITH TONOS */ -{ XK_Greek_epsilonaccent, 0x03ad }, /* GREEK SMALL LETTER EPSILON WITH TONOS */ -{ XK_Greek_etaaccent, 0x03ae }, /* GREEK SMALL LETTER ETA WITH TONOS */ -{ XK_Greek_iotaaccent, 0x03af }, /* GREEK SMALL LETTER IOTA WITH TONOS */ -{ XK_Greek_iotadieresis, 0x03ca }, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA */ -{ XK_Greek_iotaaccentdieresis, 0x0390 }, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ -{ XK_Greek_omicronaccent, 0x03cc }, /* GREEK SMALL LETTER OMICRON WITH TONOS */ -{ XK_Greek_upsilonaccent, 0x03cd }, /* GREEK SMALL LETTER UPSILON WITH TONOS */ -{ XK_Greek_upsilondieresis, 0x03cb }, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ -{ XK_Greek_upsilonaccentdieresis, 0x03b0 }, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ -{ XK_Greek_omegaaccent, 0x03ce }, /* GREEK SMALL LETTER OMEGA WITH TONOS */ -{ XK_Greek_ALPHA, 0x0391 }, /* GREEK CAPITAL LETTER ALPHA */ -{ XK_Greek_BETA, 0x0392 }, /* GREEK CAPITAL LETTER BETA */ -{ XK_Greek_GAMMA, 0x0393 }, /* GREEK CAPITAL LETTER GAMMA */ -{ XK_Greek_DELTA, 0x0394 }, /* GREEK CAPITAL LETTER DELTA */ -{ XK_Greek_EPSILON, 0x0395 }, /* GREEK CAPITAL LETTER EPSILON */ -{ XK_Greek_ZETA, 0x0396 }, /* GREEK CAPITAL LETTER ZETA */ -{ XK_Greek_ETA, 0x0397 }, /* GREEK CAPITAL LETTER ETA */ -{ XK_Greek_THETA, 0x0398 }, /* GREEK CAPITAL LETTER THETA */ -{ XK_Greek_IOTA, 0x0399 }, /* GREEK CAPITAL LETTER IOTA */ -{ XK_Greek_KAPPA, 0x039a }, /* GREEK CAPITAL LETTER KAPPA */ -{ XK_Greek_LAMBDA, 0x039b }, /* GREEK CAPITAL LETTER LAMDA */ -{ XK_Greek_MU, 0x039c }, /* GREEK CAPITAL LETTER MU */ -{ XK_Greek_NU, 0x039d }, /* GREEK CAPITAL LETTER NU */ -{ XK_Greek_XI, 0x039e }, /* GREEK CAPITAL LETTER XI */ -{ XK_Greek_OMICRON, 0x039f }, /* GREEK CAPITAL LETTER OMICRON */ -{ XK_Greek_PI, 0x03a0 }, /* GREEK CAPITAL LETTER PI */ -{ XK_Greek_RHO, 0x03a1 }, /* GREEK CAPITAL LETTER RHO */ -{ XK_Greek_SIGMA, 0x03a3 }, /* GREEK CAPITAL LETTER SIGMA */ -{ XK_Greek_TAU, 0x03a4 }, /* GREEK CAPITAL LETTER TAU */ -{ XK_Greek_UPSILON, 0x03a5 }, /* GREEK CAPITAL LETTER UPSILON */ -{ XK_Greek_PHI, 0x03a6 }, /* GREEK CAPITAL LETTER PHI */ -{ XK_Greek_CHI, 0x03a7 }, /* GREEK CAPITAL LETTER CHI */ -{ XK_Greek_PSI, 0x03a8 }, /* GREEK CAPITAL LETTER PSI */ -{ XK_Greek_OMEGA, 0x03a9 }, /* GREEK CAPITAL LETTER OMEGA */ -{ XK_Greek_alpha, 0x03b1 }, /* GREEK SMALL LETTER ALPHA */ -{ XK_Greek_beta, 0x03b2 }, /* GREEK SMALL LETTER BETA */ -{ XK_Greek_gamma, 0x03b3 }, /* GREEK SMALL LETTER GAMMA */ -{ XK_Greek_delta, 0x03b4 }, /* GREEK SMALL LETTER DELTA */ -{ XK_Greek_epsilon, 0x03b5 }, /* GREEK SMALL LETTER EPSILON */ -{ XK_Greek_zeta, 0x03b6 }, /* GREEK SMALL LETTER ZETA */ -{ XK_Greek_eta, 0x03b7 }, /* GREEK SMALL LETTER ETA */ -{ XK_Greek_theta, 0x03b8 }, /* GREEK SMALL LETTER THETA */ -{ XK_Greek_iota, 0x03b9 }, /* GREEK SMALL LETTER IOTA */ -{ XK_Greek_kappa, 0x03ba }, /* GREEK SMALL LETTER KAPPA */ -{ XK_Greek_lambda, 0x03bb }, /* GREEK SMALL LETTER LAMDA */ -{ XK_Greek_mu, 0x03bc }, /* GREEK SMALL LETTER MU */ -{ XK_Greek_nu, 0x03bd }, /* GREEK SMALL LETTER NU */ -{ XK_Greek_xi, 0x03be }, /* GREEK SMALL LETTER XI */ -{ XK_Greek_omicron, 0x03bf }, /* GREEK SMALL LETTER OMICRON */ -{ XK_Greek_pi, 0x03c0 }, /* GREEK SMALL LETTER PI */ -{ XK_Greek_rho, 0x03c1 }, /* GREEK SMALL LETTER RHO */ -{ XK_Greek_sigma, 0x03c3 }, /* GREEK SMALL LETTER SIGMA */ -{ XK_Greek_finalsmallsigma, 0x03c2 }, /* GREEK SMALL LETTER FINAL SIGMA */ -{ XK_Greek_tau, 0x03c4 }, /* GREEK SMALL LETTER TAU */ -{ XK_Greek_upsilon, 0x03c5 }, /* GREEK SMALL LETTER UPSILON */ -{ XK_Greek_phi, 0x03c6 }, /* GREEK SMALL LETTER PHI */ -{ XK_Greek_chi, 0x03c7 }, /* GREEK SMALL LETTER CHI */ -{ XK_Greek_psi, 0x03c8 }, /* GREEK SMALL LETTER PSI */ -{ XK_Greek_omega, 0x03c9 }, /* GREEK SMALL LETTER OMEGA */ -#endif // defined(XK_Greek_ALPHAaccent) -{ XK_leftradical, 0x23b7 }, /* ??? */ -{ XK_topleftradical, 0x250c }, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ -{ XK_horizconnector, 0x2500 }, /* BOX DRAWINGS LIGHT HORIZONTAL */ -{ XK_topintegral, 0x2320 }, /* TOP HALF INTEGRAL */ -{ XK_botintegral, 0x2321 }, /* BOTTOM HALF INTEGRAL */ -{ XK_vertconnector, 0x2502 }, /* BOX DRAWINGS LIGHT VERTICAL */ -{ XK_topleftsqbracket, 0x23a1 }, /* ??? */ -{ XK_botleftsqbracket, 0x23a3 }, /* ??? */ -{ XK_toprightsqbracket, 0x23a4 }, /* ??? */ -{ XK_botrightsqbracket, 0x23a6 }, /* ??? */ -{ XK_topleftparens, 0x239b }, /* ??? */ -{ XK_botleftparens, 0x239d }, /* ??? */ -{ XK_toprightparens, 0x239e }, /* ??? */ -{ XK_botrightparens, 0x23a0 }, /* ??? */ -{ XK_leftmiddlecurlybrace, 0x23a8 }, /* ??? */ -{ XK_rightmiddlecurlybrace, 0x23ac }, /* ??? */ -{ XK_lessthanequal, 0x2264 }, /* LESS-THAN OR EQUAL TO */ -{ XK_notequal, 0x2260 }, /* NOT EQUAL TO */ -{ XK_greaterthanequal, 0x2265 }, /* GREATER-THAN OR EQUAL TO */ -{ XK_integral, 0x222b }, /* INTEGRAL */ -{ XK_therefore, 0x2234 }, /* THEREFORE */ -{ XK_variation, 0x221d }, /* PROPORTIONAL TO */ -{ XK_infinity, 0x221e }, /* INFINITY */ -{ XK_nabla, 0x2207 }, /* NABLA */ -{ XK_approximate, 0x223c }, /* TILDE OPERATOR */ -{ XK_similarequal, 0x2243 }, /* ASYMPTOTICALLY EQUAL TO */ -{ XK_ifonlyif, 0x21d4 }, /* LEFT RIGHT DOUBLE ARROW */ -{ XK_implies, 0x21d2 }, /* RIGHTWARDS DOUBLE ARROW */ -{ XK_identical, 0x2261 }, /* IDENTICAL TO */ -{ XK_radical, 0x221a }, /* SQUARE ROOT */ -{ XK_includedin, 0x2282 }, /* SUBSET OF */ -{ XK_includes, 0x2283 }, /* SUPERSET OF */ -{ XK_intersection, 0x2229 }, /* INTERSECTION */ -{ XK_union, 0x222a }, /* UNION */ -{ XK_logicaland, 0x2227 }, /* LOGICAL AND */ -{ XK_logicalor, 0x2228 }, /* LOGICAL OR */ -{ XK_partialderivative, 0x2202 }, /* PARTIAL DIFFERENTIAL */ -{ XK_function, 0x0192 }, /* LATIN SMALL LETTER F WITH HOOK */ -{ XK_leftarrow, 0x2190 }, /* LEFTWARDS ARROW */ -{ XK_uparrow, 0x2191 }, /* UPWARDS ARROW */ -{ XK_rightarrow, 0x2192 }, /* RIGHTWARDS ARROW */ -{ XK_downarrow, 0x2193 }, /* DOWNWARDS ARROW */ -/*{ XK_blank, ??? }, */ -{ XK_soliddiamond, 0x25c6 }, /* BLACK DIAMOND */ -{ XK_checkerboard, 0x2592 }, /* MEDIUM SHADE */ -{ XK_ht, 0x2409 }, /* SYMBOL FOR HORIZONTAL TABULATION */ -{ XK_ff, 0x240c }, /* SYMBOL FOR FORM FEED */ -{ XK_cr, 0x240d }, /* SYMBOL FOR CARRIAGE RETURN */ -{ XK_lf, 0x240a }, /* SYMBOL FOR LINE FEED */ -{ XK_nl, 0x2424 }, /* SYMBOL FOR NEWLINE */ -{ XK_vt, 0x240b }, /* SYMBOL FOR VERTICAL TABULATION */ -{ XK_lowrightcorner, 0x2518 }, /* BOX DRAWINGS LIGHT UP AND LEFT */ -{ XK_uprightcorner, 0x2510 }, /* BOX DRAWINGS LIGHT DOWN AND LEFT */ -{ XK_upleftcorner, 0x250c }, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ -{ XK_lowleftcorner, 0x2514 }, /* BOX DRAWINGS LIGHT UP AND RIGHT */ -{ XK_crossinglines, 0x253c }, /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ -{ XK_horizlinescan1, 0x23ba }, /* HORIZONTAL SCAN LINE-1 (Unicode 3.2 draft) */ -{ XK_horizlinescan3, 0x23bb }, /* HORIZONTAL SCAN LINE-3 (Unicode 3.2 draft) */ -{ XK_horizlinescan5, 0x2500 }, /* BOX DRAWINGS LIGHT HORIZONTAL */ -{ XK_horizlinescan7, 0x23bc }, /* HORIZONTAL SCAN LINE-7 (Unicode 3.2 draft) */ -{ XK_horizlinescan9, 0x23bd }, /* HORIZONTAL SCAN LINE-9 (Unicode 3.2 draft) */ -{ XK_leftt, 0x251c }, /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ -{ XK_rightt, 0x2524 }, /* BOX DRAWINGS LIGHT VERTICAL AND LEFT */ -{ XK_bott, 0x2534 }, /* BOX DRAWINGS LIGHT UP AND HORIZONTAL */ -{ XK_topt, 0x252c }, /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ -{ XK_vertbar, 0x2502 }, /* BOX DRAWINGS LIGHT VERTICAL */ -{ XK_emspace, 0x2003 }, /* EM SPACE */ -{ XK_enspace, 0x2002 }, /* EN SPACE */ -{ XK_em3space, 0x2004 }, /* THREE-PER-EM SPACE */ -{ XK_em4space, 0x2005 }, /* FOUR-PER-EM SPACE */ -{ XK_digitspace, 0x2007 }, /* FIGURE SPACE */ -{ XK_punctspace, 0x2008 }, /* PUNCTUATION SPACE */ -{ XK_thinspace, 0x2009 }, /* THIN SPACE */ -{ XK_hairspace, 0x200a }, /* HAIR SPACE */ -{ XK_emdash, 0x2014 }, /* EM DASH */ -{ XK_endash, 0x2013 }, /* EN DASH */ -/*{ XK_signifblank, ??? }, */ -{ XK_ellipsis, 0x2026 }, /* HORIZONTAL ELLIPSIS */ -{ XK_doubbaselinedot, 0x2025 }, /* TWO DOT LEADER */ -{ XK_onethird, 0x2153 }, /* VULGAR FRACTION ONE THIRD */ -{ XK_twothirds, 0x2154 }, /* VULGAR FRACTION TWO THIRDS */ -{ XK_onefifth, 0x2155 }, /* VULGAR FRACTION ONE FIFTH */ -{ XK_twofifths, 0x2156 }, /* VULGAR FRACTION TWO FIFTHS */ -{ XK_threefifths, 0x2157 }, /* VULGAR FRACTION THREE FIFTHS */ -{ XK_fourfifths, 0x2158 }, /* VULGAR FRACTION FOUR FIFTHS */ -{ XK_onesixth, 0x2159 }, /* VULGAR FRACTION ONE SIXTH */ -{ XK_fivesixths, 0x215a }, /* VULGAR FRACTION FIVE SIXTHS */ -{ XK_careof, 0x2105 }, /* CARE OF */ -{ XK_figdash, 0x2012 }, /* FIGURE DASH */ -{ XK_leftanglebracket, 0x2329 }, /* LEFT-POINTING ANGLE BRACKET */ -/*{ XK_decimalpoint, ??? }, */ -{ XK_rightanglebracket, 0x232a }, /* RIGHT-POINTING ANGLE BRACKET */ -/*{ XK_marker, ??? }, */ -{ XK_oneeighth, 0x215b }, /* VULGAR FRACTION ONE EIGHTH */ -{ XK_threeeighths, 0x215c }, /* VULGAR FRACTION THREE EIGHTHS */ -{ XK_fiveeighths, 0x215d }, /* VULGAR FRACTION FIVE EIGHTHS */ -{ XK_seveneighths, 0x215e }, /* VULGAR FRACTION SEVEN EIGHTHS */ -{ XK_trademark, 0x2122 }, /* TRADE MARK SIGN */ -{ XK_signaturemark, 0x2613 }, /* SALTIRE */ -/*{ XK_trademarkincircle, ??? }, */ -{ XK_leftopentriangle, 0x25c1 }, /* WHITE LEFT-POINTING TRIANGLE */ -{ XK_rightopentriangle, 0x25b7 }, /* WHITE RIGHT-POINTING TRIANGLE */ -{ XK_emopencircle, 0x25cb }, /* WHITE CIRCLE */ -{ XK_emopenrectangle, 0x25af }, /* WHITE VERTICAL RECTANGLE */ -{ XK_leftsinglequotemark, 0x2018 }, /* LEFT SINGLE QUOTATION MARK */ -{ XK_rightsinglequotemark, 0x2019 }, /* RIGHT SINGLE QUOTATION MARK */ -{ XK_leftdoublequotemark, 0x201c }, /* LEFT DOUBLE QUOTATION MARK */ -{ XK_rightdoublequotemark, 0x201d }, /* RIGHT DOUBLE QUOTATION MARK */ -{ XK_prescription, 0x211e }, /* PRESCRIPTION TAKE */ -{ XK_minutes, 0x2032 }, /* PRIME */ -{ XK_seconds, 0x2033 }, /* DOUBLE PRIME */ -{ XK_latincross, 0x271d }, /* LATIN CROSS */ -/*{ XK_hexagram, ??? }, */ -{ XK_filledrectbullet, 0x25ac }, /* BLACK RECTANGLE */ -{ XK_filledlefttribullet, 0x25c0 }, /* BLACK LEFT-POINTING TRIANGLE */ -{ XK_filledrighttribullet, 0x25b6 }, /* BLACK RIGHT-POINTING TRIANGLE */ -{ XK_emfilledcircle, 0x25cf }, /* BLACK CIRCLE */ -{ XK_emfilledrect, 0x25ae }, /* BLACK VERTICAL RECTANGLE */ -{ XK_enopencircbullet, 0x25e6 }, /* WHITE BULLET */ -{ XK_enopensquarebullet, 0x25ab }, /* WHITE SMALL SQUARE */ -{ XK_openrectbullet, 0x25ad }, /* WHITE RECTANGLE */ -{ XK_opentribulletup, 0x25b3 }, /* WHITE UP-POINTING TRIANGLE */ -{ XK_opentribulletdown, 0x25bd }, /* WHITE DOWN-POINTING TRIANGLE */ -{ XK_openstar, 0x2606 }, /* WHITE STAR */ -{ XK_enfilledcircbullet, 0x2022 }, /* BULLET */ -{ XK_enfilledsqbullet, 0x25aa }, /* BLACK SMALL SQUARE */ -{ XK_filledtribulletup, 0x25b2 }, /* BLACK UP-POINTING TRIANGLE */ -{ XK_filledtribulletdown, 0x25bc }, /* BLACK DOWN-POINTING TRIANGLE */ -{ XK_leftpointer, 0x261c }, /* WHITE LEFT POINTING INDEX */ -{ XK_rightpointer, 0x261e }, /* WHITE RIGHT POINTING INDEX */ -{ XK_club, 0x2663 }, /* BLACK CLUB SUIT */ -{ XK_diamond, 0x2666 }, /* BLACK DIAMOND SUIT */ -{ XK_heart, 0x2665 }, /* BLACK HEART SUIT */ -{ XK_maltesecross, 0x2720 }, /* MALTESE CROSS */ -{ XK_dagger, 0x2020 }, /* DAGGER */ -{ XK_doubledagger, 0x2021 }, /* DOUBLE DAGGER */ -{ XK_checkmark, 0x2713 }, /* CHECK MARK */ -{ XK_ballotcross, 0x2717 }, /* BALLOT X */ -{ XK_musicalsharp, 0x266f }, /* MUSIC SHARP SIGN */ -{ XK_musicalflat, 0x266d }, /* MUSIC FLAT SIGN */ -{ XK_malesymbol, 0x2642 }, /* MALE SIGN */ -{ XK_femalesymbol, 0x2640 }, /* FEMALE SIGN */ -{ XK_telephone, 0x260e }, /* BLACK TELEPHONE */ -{ XK_telephonerecorder, 0x2315 }, /* TELEPHONE RECORDER */ -{ XK_phonographcopyright, 0x2117 }, /* SOUND RECORDING COPYRIGHT */ -{ XK_caret, 0x2038 }, /* CARET */ -{ XK_singlelowquotemark, 0x201a }, /* SINGLE LOW-9 QUOTATION MARK */ -{ XK_doublelowquotemark, 0x201e }, /* DOUBLE LOW-9 QUOTATION MARK */ -/*{ XK_cursor, ??? }, */ -{ XK_leftcaret, 0x003c }, /* LESS-THAN SIGN */ -{ XK_rightcaret, 0x003e }, /* GREATER-THAN SIGN */ -{ XK_downcaret, 0x2228 }, /* LOGICAL OR */ -{ XK_upcaret, 0x2227 }, /* LOGICAL AND */ -{ XK_overbar, 0x00af }, /* MACRON */ -{ XK_downtack, 0x22a5 }, /* UP TACK */ -{ XK_upshoe, 0x2229 }, /* INTERSECTION */ -{ XK_downstile, 0x230a }, /* LEFT FLOOR */ -{ XK_underbar, 0x005f }, /* LOW LINE */ -{ XK_jot, 0x2218 }, /* RING OPERATOR */ -{ XK_quad, 0x2395 }, /* APL FUNCTIONAL SYMBOL QUAD */ -{ XK_uptack, 0x22a4 }, /* DOWN TACK */ -{ XK_circle, 0x25cb }, /* WHITE CIRCLE */ -{ XK_upstile, 0x2308 }, /* LEFT CEILING */ -{ XK_downshoe, 0x222a }, /* UNION */ -{ XK_rightshoe, 0x2283 }, /* SUPERSET OF */ -{ XK_leftshoe, 0x2282 }, /* SUBSET OF */ -{ XK_lefttack, 0x22a2 }, /* RIGHT TACK */ -{ XK_righttack, 0x22a3 }, /* LEFT TACK */ -#if defined(XK_hebrew_doublelowline) -{ XK_hebrew_doublelowline, 0x2017 }, /* DOUBLE LOW LINE */ -{ XK_hebrew_aleph, 0x05d0 }, /* HEBREW LETTER ALEF */ -{ XK_hebrew_bet, 0x05d1 }, /* HEBREW LETTER BET */ -{ XK_hebrew_gimel, 0x05d2 }, /* HEBREW LETTER GIMEL */ -{ XK_hebrew_dalet, 0x05d3 }, /* HEBREW LETTER DALET */ -{ XK_hebrew_he, 0x05d4 }, /* HEBREW LETTER HE */ -{ XK_hebrew_waw, 0x05d5 }, /* HEBREW LETTER VAV */ -{ XK_hebrew_zain, 0x05d6 }, /* HEBREW LETTER ZAYIN */ -{ XK_hebrew_chet, 0x05d7 }, /* HEBREW LETTER HET */ -{ XK_hebrew_tet, 0x05d8 }, /* HEBREW LETTER TET */ -{ XK_hebrew_yod, 0x05d9 }, /* HEBREW LETTER YOD */ -{ XK_hebrew_finalkaph, 0x05da }, /* HEBREW LETTER FINAL KAF */ -{ XK_hebrew_kaph, 0x05db }, /* HEBREW LETTER KAF */ -{ XK_hebrew_lamed, 0x05dc }, /* HEBREW LETTER LAMED */ -{ XK_hebrew_finalmem, 0x05dd }, /* HEBREW LETTER FINAL MEM */ -{ XK_hebrew_mem, 0x05de }, /* HEBREW LETTER MEM */ -{ XK_hebrew_finalnun, 0x05df }, /* HEBREW LETTER FINAL NUN */ -{ XK_hebrew_nun, 0x05e0 }, /* HEBREW LETTER NUN */ -{ XK_hebrew_samech, 0x05e1 }, /* HEBREW LETTER SAMEKH */ -{ XK_hebrew_ayin, 0x05e2 }, /* HEBREW LETTER AYIN */ -{ XK_hebrew_finalpe, 0x05e3 }, /* HEBREW LETTER FINAL PE */ -{ XK_hebrew_pe, 0x05e4 }, /* HEBREW LETTER PE */ -{ XK_hebrew_finalzade, 0x05e5 }, /* HEBREW LETTER FINAL TSADI */ -{ XK_hebrew_zade, 0x05e6 }, /* HEBREW LETTER TSADI */ -{ XK_hebrew_qoph, 0x05e7 }, /* HEBREW LETTER QOF */ -{ XK_hebrew_resh, 0x05e8 }, /* HEBREW LETTER RESH */ -{ XK_hebrew_shin, 0x05e9 }, /* HEBREW LETTER SHIN */ -{ XK_hebrew_taw, 0x05ea }, /* HEBREW LETTER TAV */ -#endif // defined(XK_hebrew_doublelowline) -#if defined(XK_Thai_kokai) -{ XK_Thai_kokai, 0x0e01 }, /* THAI CHARACTER KO KAI */ -{ XK_Thai_khokhai, 0x0e02 }, /* THAI CHARACTER KHO KHAI */ -{ XK_Thai_khokhuat, 0x0e03 }, /* THAI CHARACTER KHO KHUAT */ -{ XK_Thai_khokhwai, 0x0e04 }, /* THAI CHARACTER KHO KHWAI */ -{ XK_Thai_khokhon, 0x0e05 }, /* THAI CHARACTER KHO KHON */ -{ XK_Thai_khorakhang, 0x0e06 }, /* THAI CHARACTER KHO RAKHANG */ -{ XK_Thai_ngongu, 0x0e07 }, /* THAI CHARACTER NGO NGU */ -{ XK_Thai_chochan, 0x0e08 }, /* THAI CHARACTER CHO CHAN */ -{ XK_Thai_choching, 0x0e09 }, /* THAI CHARACTER CHO CHING */ -{ XK_Thai_chochang, 0x0e0a }, /* THAI CHARACTER CHO CHANG */ -{ XK_Thai_soso, 0x0e0b }, /* THAI CHARACTER SO SO */ -{ XK_Thai_chochoe, 0x0e0c }, /* THAI CHARACTER CHO CHOE */ -{ XK_Thai_yoying, 0x0e0d }, /* THAI CHARACTER YO YING */ -{ XK_Thai_dochada, 0x0e0e }, /* THAI CHARACTER DO CHADA */ -{ XK_Thai_topatak, 0x0e0f }, /* THAI CHARACTER TO PATAK */ -{ XK_Thai_thothan, 0x0e10 }, /* THAI CHARACTER THO THAN */ -{ XK_Thai_thonangmontho, 0x0e11 }, /* THAI CHARACTER THO NANGMONTHO */ -{ XK_Thai_thophuthao, 0x0e12 }, /* THAI CHARACTER THO PHUTHAO */ -{ XK_Thai_nonen, 0x0e13 }, /* THAI CHARACTER NO NEN */ -{ XK_Thai_dodek, 0x0e14 }, /* THAI CHARACTER DO DEK */ -{ XK_Thai_totao, 0x0e15 }, /* THAI CHARACTER TO TAO */ -{ XK_Thai_thothung, 0x0e16 }, /* THAI CHARACTER THO THUNG */ -{ XK_Thai_thothahan, 0x0e17 }, /* THAI CHARACTER THO THAHAN */ -{ XK_Thai_thothong, 0x0e18 }, /* THAI CHARACTER THO THONG */ -{ XK_Thai_nonu, 0x0e19 }, /* THAI CHARACTER NO NU */ -{ XK_Thai_bobaimai, 0x0e1a }, /* THAI CHARACTER BO BAIMAI */ -{ XK_Thai_popla, 0x0e1b }, /* THAI CHARACTER PO PLA */ -{ XK_Thai_phophung, 0x0e1c }, /* THAI CHARACTER PHO PHUNG */ -{ XK_Thai_fofa, 0x0e1d }, /* THAI CHARACTER FO FA */ -{ XK_Thai_phophan, 0x0e1e }, /* THAI CHARACTER PHO PHAN */ -{ XK_Thai_fofan, 0x0e1f }, /* THAI CHARACTER FO FAN */ -{ XK_Thai_phosamphao, 0x0e20 }, /* THAI CHARACTER PHO SAMPHAO */ -{ XK_Thai_moma, 0x0e21 }, /* THAI CHARACTER MO MA */ -{ XK_Thai_yoyak, 0x0e22 }, /* THAI CHARACTER YO YAK */ -{ XK_Thai_rorua, 0x0e23 }, /* THAI CHARACTER RO RUA */ -{ XK_Thai_ru, 0x0e24 }, /* THAI CHARACTER RU */ -{ XK_Thai_loling, 0x0e25 }, /* THAI CHARACTER LO LING */ -{ XK_Thai_lu, 0x0e26 }, /* THAI CHARACTER LU */ -{ XK_Thai_wowaen, 0x0e27 }, /* THAI CHARACTER WO WAEN */ -{ XK_Thai_sosala, 0x0e28 }, /* THAI CHARACTER SO SALA */ -{ XK_Thai_sorusi, 0x0e29 }, /* THAI CHARACTER SO RUSI */ -{ XK_Thai_sosua, 0x0e2a }, /* THAI CHARACTER SO SUA */ -{ XK_Thai_hohip, 0x0e2b }, /* THAI CHARACTER HO HIP */ -{ XK_Thai_lochula, 0x0e2c }, /* THAI CHARACTER LO CHULA */ -{ XK_Thai_oang, 0x0e2d }, /* THAI CHARACTER O ANG */ -{ XK_Thai_honokhuk, 0x0e2e }, /* THAI CHARACTER HO NOKHUK */ -{ XK_Thai_paiyannoi, 0x0e2f }, /* THAI CHARACTER PAIYANNOI */ -{ XK_Thai_saraa, 0x0e30 }, /* THAI CHARACTER SARA A */ -{ XK_Thai_maihanakat, 0x0e31 }, /* THAI CHARACTER MAI HAN-AKAT */ -{ XK_Thai_saraaa, 0x0e32 }, /* THAI CHARACTER SARA AA */ -{ XK_Thai_saraam, 0x0e33 }, /* THAI CHARACTER SARA AM */ -{ XK_Thai_sarai, 0x0e34 }, /* THAI CHARACTER SARA I */ -{ XK_Thai_saraii, 0x0e35 }, /* THAI CHARACTER SARA II */ -{ XK_Thai_saraue, 0x0e36 }, /* THAI CHARACTER SARA UE */ -{ XK_Thai_sarauee, 0x0e37 }, /* THAI CHARACTER SARA UEE */ -{ XK_Thai_sarau, 0x0e38 }, /* THAI CHARACTER SARA U */ -{ XK_Thai_sarauu, 0x0e39 }, /* THAI CHARACTER SARA UU */ -{ XK_Thai_phinthu, 0x0e3a }, /* THAI CHARACTER PHINTHU */ -/*{ XK_Thai_maihanakat_maitho, ??? }, */ -{ XK_Thai_baht, 0x0e3f }, /* THAI CURRENCY SYMBOL BAHT */ -{ XK_Thai_sarae, 0x0e40 }, /* THAI CHARACTER SARA E */ -{ XK_Thai_saraae, 0x0e41 }, /* THAI CHARACTER SARA AE */ -{ XK_Thai_sarao, 0x0e42 }, /* THAI CHARACTER SARA O */ -{ XK_Thai_saraaimaimuan, 0x0e43 }, /* THAI CHARACTER SARA AI MAIMUAN */ -{ XK_Thai_saraaimaimalai, 0x0e44 }, /* THAI CHARACTER SARA AI MAIMALAI */ -{ XK_Thai_lakkhangyao, 0x0e45 }, /* THAI CHARACTER LAKKHANGYAO */ -{ XK_Thai_maiyamok, 0x0e46 }, /* THAI CHARACTER MAIYAMOK */ -{ XK_Thai_maitaikhu, 0x0e47 }, /* THAI CHARACTER MAITAIKHU */ -{ XK_Thai_maiek, 0x0e48 }, /* THAI CHARACTER MAI EK */ -{ XK_Thai_maitho, 0x0e49 }, /* THAI CHARACTER MAI THO */ -{ XK_Thai_maitri, 0x0e4a }, /* THAI CHARACTER MAI TRI */ -{ XK_Thai_maichattawa, 0x0e4b }, /* THAI CHARACTER MAI CHATTAWA */ -{ XK_Thai_thanthakhat, 0x0e4c }, /* THAI CHARACTER THANTHAKHAT */ -{ XK_Thai_nikhahit, 0x0e4d }, /* THAI CHARACTER NIKHAHIT */ -{ XK_Thai_leksun, 0x0e50 }, /* THAI DIGIT ZERO */ -{ XK_Thai_leknung, 0x0e51 }, /* THAI DIGIT ONE */ -{ XK_Thai_leksong, 0x0e52 }, /* THAI DIGIT TWO */ -{ XK_Thai_leksam, 0x0e53 }, /* THAI DIGIT THREE */ -{ XK_Thai_leksi, 0x0e54 }, /* THAI DIGIT FOUR */ -{ XK_Thai_lekha, 0x0e55 }, /* THAI DIGIT FIVE */ -{ XK_Thai_lekhok, 0x0e56 }, /* THAI DIGIT SIX */ -{ XK_Thai_lekchet, 0x0e57 }, /* THAI DIGIT SEVEN */ -{ XK_Thai_lekpaet, 0x0e58 }, /* THAI DIGIT EIGHT */ -{ XK_Thai_lekkao, 0x0e59 }, /* THAI DIGIT NINE */ -#endif // defined(XK_Thai_kokai) -#if defined(XK_Hangul_Kiyeog) -{ XK_Hangul_Kiyeog, 0x3131 }, /* HANGUL LETTER KIYEOK */ -{ XK_Hangul_SsangKiyeog, 0x3132 }, /* HANGUL LETTER SSANGKIYEOK */ -{ XK_Hangul_KiyeogSios, 0x3133 }, /* HANGUL LETTER KIYEOK-SIOS */ -{ XK_Hangul_Nieun, 0x3134 }, /* HANGUL LETTER NIEUN */ -{ XK_Hangul_NieunJieuj, 0x3135 }, /* HANGUL LETTER NIEUN-CIEUC */ -{ XK_Hangul_NieunHieuh, 0x3136 }, /* HANGUL LETTER NIEUN-HIEUH */ -{ XK_Hangul_Dikeud, 0x3137 }, /* HANGUL LETTER TIKEUT */ -{ XK_Hangul_SsangDikeud, 0x3138 }, /* HANGUL LETTER SSANGTIKEUT */ -{ XK_Hangul_Rieul, 0x3139 }, /* HANGUL LETTER RIEUL */ -{ XK_Hangul_RieulKiyeog, 0x313a }, /* HANGUL LETTER RIEUL-KIYEOK */ -{ XK_Hangul_RieulMieum, 0x313b }, /* HANGUL LETTER RIEUL-MIEUM */ -{ XK_Hangul_RieulPieub, 0x313c }, /* HANGUL LETTER RIEUL-PIEUP */ -{ XK_Hangul_RieulSios, 0x313d }, /* HANGUL LETTER RIEUL-SIOS */ -{ XK_Hangul_RieulTieut, 0x313e }, /* HANGUL LETTER RIEUL-THIEUTH */ -{ XK_Hangul_RieulPhieuf, 0x313f }, /* HANGUL LETTER RIEUL-PHIEUPH */ -{ XK_Hangul_RieulHieuh, 0x3140 }, /* HANGUL LETTER RIEUL-HIEUH */ -{ XK_Hangul_Mieum, 0x3141 }, /* HANGUL LETTER MIEUM */ -{ XK_Hangul_Pieub, 0x3142 }, /* HANGUL LETTER PIEUP */ -{ XK_Hangul_SsangPieub, 0x3143 }, /* HANGUL LETTER SSANGPIEUP */ -{ XK_Hangul_PieubSios, 0x3144 }, /* HANGUL LETTER PIEUP-SIOS */ -{ XK_Hangul_Sios, 0x3145 }, /* HANGUL LETTER SIOS */ -{ XK_Hangul_SsangSios, 0x3146 }, /* HANGUL LETTER SSANGSIOS */ -{ XK_Hangul_Ieung, 0x3147 }, /* HANGUL LETTER IEUNG */ -{ XK_Hangul_Jieuj, 0x3148 }, /* HANGUL LETTER CIEUC */ -{ XK_Hangul_SsangJieuj, 0x3149 }, /* HANGUL LETTER SSANGCIEUC */ -{ XK_Hangul_Cieuc, 0x314a }, /* HANGUL LETTER CHIEUCH */ -{ XK_Hangul_Khieuq, 0x314b }, /* HANGUL LETTER KHIEUKH */ -{ XK_Hangul_Tieut, 0x314c }, /* HANGUL LETTER THIEUTH */ -{ XK_Hangul_Phieuf, 0x314d }, /* HANGUL LETTER PHIEUPH */ -{ XK_Hangul_Hieuh, 0x314e }, /* HANGUL LETTER HIEUH */ -{ XK_Hangul_A, 0x314f }, /* HANGUL LETTER A */ -{ XK_Hangul_AE, 0x3150 }, /* HANGUL LETTER AE */ -{ XK_Hangul_YA, 0x3151 }, /* HANGUL LETTER YA */ -{ XK_Hangul_YAE, 0x3152 }, /* HANGUL LETTER YAE */ -{ XK_Hangul_EO, 0x3153 }, /* HANGUL LETTER EO */ -{ XK_Hangul_E, 0x3154 }, /* HANGUL LETTER E */ -{ XK_Hangul_YEO, 0x3155 }, /* HANGUL LETTER YEO */ -{ XK_Hangul_YE, 0x3156 }, /* HANGUL LETTER YE */ -{ XK_Hangul_O, 0x3157 }, /* HANGUL LETTER O */ -{ XK_Hangul_WA, 0x3158 }, /* HANGUL LETTER WA */ -{ XK_Hangul_WAE, 0x3159 }, /* HANGUL LETTER WAE */ -{ XK_Hangul_OE, 0x315a }, /* HANGUL LETTER OE */ -{ XK_Hangul_YO, 0x315b }, /* HANGUL LETTER YO */ -{ XK_Hangul_U, 0x315c }, /* HANGUL LETTER U */ -{ XK_Hangul_WEO, 0x315d }, /* HANGUL LETTER WEO */ -{ XK_Hangul_WE, 0x315e }, /* HANGUL LETTER WE */ -{ XK_Hangul_WI, 0x315f }, /* HANGUL LETTER WI */ -{ XK_Hangul_YU, 0x3160 }, /* HANGUL LETTER YU */ -{ XK_Hangul_EU, 0x3161 }, /* HANGUL LETTER EU */ -{ XK_Hangul_YI, 0x3162 }, /* HANGUL LETTER YI */ -{ XK_Hangul_I, 0x3163 }, /* HANGUL LETTER I */ -{ XK_Hangul_J_Kiyeog, 0x11a8 }, /* HANGUL JONGSEONG KIYEOK */ -{ XK_Hangul_J_SsangKiyeog, 0x11a9 }, /* HANGUL JONGSEONG SSANGKIYEOK */ -{ XK_Hangul_J_KiyeogSios, 0x11aa }, /* HANGUL JONGSEONG KIYEOK-SIOS */ -{ XK_Hangul_J_Nieun, 0x11ab }, /* HANGUL JONGSEONG NIEUN */ -{ XK_Hangul_J_NieunJieuj, 0x11ac }, /* HANGUL JONGSEONG NIEUN-CIEUC */ -{ XK_Hangul_J_NieunHieuh, 0x11ad }, /* HANGUL JONGSEONG NIEUN-HIEUH */ -{ XK_Hangul_J_Dikeud, 0x11ae }, /* HANGUL JONGSEONG TIKEUT */ -{ XK_Hangul_J_Rieul, 0x11af }, /* HANGUL JONGSEONG RIEUL */ -{ XK_Hangul_J_RieulKiyeog, 0x11b0 }, /* HANGUL JONGSEONG RIEUL-KIYEOK */ -{ XK_Hangul_J_RieulMieum, 0x11b1 }, /* HANGUL JONGSEONG RIEUL-MIEUM */ -{ XK_Hangul_J_RieulPieub, 0x11b2 }, /* HANGUL JONGSEONG RIEUL-PIEUP */ -{ XK_Hangul_J_RieulSios, 0x11b3 }, /* HANGUL JONGSEONG RIEUL-SIOS */ -{ XK_Hangul_J_RieulTieut, 0x11b4 }, /* HANGUL JONGSEONG RIEUL-THIEUTH */ -{ XK_Hangul_J_RieulPhieuf, 0x11b5 }, /* HANGUL JONGSEONG RIEUL-PHIEUPH */ -{ XK_Hangul_J_RieulHieuh, 0x11b6 }, /* HANGUL JONGSEONG RIEUL-HIEUH */ -{ XK_Hangul_J_Mieum, 0x11b7 }, /* HANGUL JONGSEONG MIEUM */ -{ XK_Hangul_J_Pieub, 0x11b8 }, /* HANGUL JONGSEONG PIEUP */ -{ XK_Hangul_J_PieubSios, 0x11b9 }, /* HANGUL JONGSEONG PIEUP-SIOS */ -{ XK_Hangul_J_Sios, 0x11ba }, /* HANGUL JONGSEONG SIOS */ -{ XK_Hangul_J_SsangSios, 0x11bb }, /* HANGUL JONGSEONG SSANGSIOS */ -{ XK_Hangul_J_Ieung, 0x11bc }, /* HANGUL JONGSEONG IEUNG */ -{ XK_Hangul_J_Jieuj, 0x11bd }, /* HANGUL JONGSEONG CIEUC */ -{ XK_Hangul_J_Cieuc, 0x11be }, /* HANGUL JONGSEONG CHIEUCH */ -{ XK_Hangul_J_Khieuq, 0x11bf }, /* HANGUL JONGSEONG KHIEUKH */ -{ XK_Hangul_J_Tieut, 0x11c0 }, /* HANGUL JONGSEONG THIEUTH */ -{ XK_Hangul_J_Phieuf, 0x11c1 }, /* HANGUL JONGSEONG PHIEUPH */ -{ XK_Hangul_J_Hieuh, 0x11c2 }, /* HANGUL JONGSEONG HIEUH */ -{ XK_Hangul_RieulYeorinHieuh, 0x316d }, /* HANGUL LETTER RIEUL-YEORINHIEUH */ -{ XK_Hangul_SunkyeongeumMieum, 0x3171 }, /* HANGUL LETTER KAPYEOUNMIEUM */ -{ XK_Hangul_SunkyeongeumPieub, 0x3178 }, /* HANGUL LETTER KAPYEOUNPIEUP */ -{ XK_Hangul_PanSios, 0x317f }, /* HANGUL LETTER PANSIOS */ -{ XK_Hangul_KkogjiDalrinIeung, 0x3181 }, /* HANGUL LETTER YESIEUNG */ -{ XK_Hangul_SunkyeongeumPhieuf, 0x3184 }, /* HANGUL LETTER KAPYEOUNPHIEUPH */ -{ XK_Hangul_YeorinHieuh, 0x3186 }, /* HANGUL LETTER YEORINHIEUH */ -{ XK_Hangul_AraeA, 0x318d }, /* HANGUL LETTER ARAEA */ -{ XK_Hangul_AraeAE, 0x318e }, /* HANGUL LETTER ARAEAE */ -{ XK_Hangul_J_PanSios, 0x11eb }, /* HANGUL JONGSEONG PANSIOS */ -{ XK_Hangul_J_KkogjiDalrinIeung, 0x11f0 }, /* HANGUL JONGSEONG YESIEUNG */ -{ XK_Hangul_J_YeorinHieuh, 0x11f9 }, /* HANGUL JONGSEONG YEORINHIEUH */ -{ XK_Korean_Won, 0x20a9 }, /* WON SIGN */ -#endif // defined(XK_Hangul_Kiyeog) -{ XK_OE, 0x0152 }, /* LATIN CAPITAL LIGATURE OE */ -{ XK_oe, 0x0153 }, /* LATIN SMALL LIGATURE OE */ -{ XK_Ydiaeresis, 0x0178 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */ -{ XK_EuroSign, 0x20ac }, /* EURO SIGN */ - -/* combining dead keys */ -{ XK_dead_abovedot, 0x0307 }, /* COMBINING DOT ABOVE */ -{ XK_dead_abovering, 0x030a }, /* COMBINING RING ABOVE */ -{ XK_dead_acute, 0x0301 }, /* COMBINING ACUTE ACCENT */ -{ XK_dead_breve, 0x0306 }, /* COMBINING BREVE */ -{ XK_dead_caron, 0x030c }, /* COMBINING CARON */ -{ XK_dead_cedilla, 0x0327 }, /* COMBINING CEDILLA */ -{ XK_dead_circumflex, 0x0302 }, /* COMBINING CIRCUMFLEX ACCENT */ -{ XK_dead_diaeresis, 0x0308 }, /* COMBINING DIAERESIS */ -{ XK_dead_doubleacute, 0x030b }, /* COMBINING DOUBLE ACUTE ACCENT */ -{ XK_dead_grave, 0x0300 }, /* COMBINING GRAVE ACCENT */ -{ XK_dead_macron, 0x0304 }, /* COMBINING MACRON */ -{ XK_dead_ogonek, 0x0328 }, /* COMBINING OGONEK */ -{ XK_dead_tilde, 0x0303 } /* COMBINING TILDE */ -}; -/* XXX -- map these too -XK_Cyrillic_GHE_bar -XK_Cyrillic_ZHE_descender -XK_Cyrillic_KA_descender -XK_Cyrillic_KA_vertstroke -XK_Cyrillic_EN_descender -XK_Cyrillic_U_straight -XK_Cyrillic_U_straight_bar -XK_Cyrillic_HA_descender -XK_Cyrillic_CHE_descender -XK_Cyrillic_CHE_vertstroke -XK_Cyrillic_SHHA -XK_Cyrillic_SCHWA -XK_Cyrillic_I_macron -XK_Cyrillic_O_bar -XK_Cyrillic_U_macron -XK_Cyrillic_ghe_bar -XK_Cyrillic_zhe_descender -XK_Cyrillic_ka_descender -XK_Cyrillic_ka_vertstroke -XK_Cyrillic_en_descender -XK_Cyrillic_u_straight -XK_Cyrillic_u_straight_bar -XK_Cyrillic_ha_descender -XK_Cyrillic_che_descender -XK_Cyrillic_che_vertstroke -XK_Cyrillic_shha -XK_Cyrillic_schwa -XK_Cyrillic_i_macron -XK_Cyrillic_o_bar -XK_Cyrillic_u_macron - -XK_Armenian_eternity -XK_Armenian_ligature_ew -XK_Armenian_full_stop -XK_Armenian_verjaket -XK_Armenian_parenright -XK_Armenian_parenleft -XK_Armenian_guillemotright -XK_Armenian_guillemotleft -XK_Armenian_em_dash -XK_Armenian_dot -XK_Armenian_mijaket -XK_Armenian_but -XK_Armenian_separation_mark -XK_Armenian_comma -XK_Armenian_en_dash -XK_Armenian_hyphen -XK_Armenian_yentamna -XK_Armenian_ellipsis -XK_Armenian_amanak -XK_Armenian_exclam -XK_Armenian_accent -XK_Armenian_shesht -XK_Armenian_paruyk -XK_Armenian_question -XK_Armenian_AYB -XK_Armenian_ayb -XK_Armenian_BEN -XK_Armenian_ben -XK_Armenian_GIM -XK_Armenian_gim -XK_Armenian_DA -XK_Armenian_da -XK_Armenian_YECH -XK_Armenian_yech -XK_Armenian_ZA -XK_Armenian_za -XK_Armenian_E -XK_Armenian_e -XK_Armenian_AT -XK_Armenian_at -XK_Armenian_TO -XK_Armenian_to -XK_Armenian_ZHE -XK_Armenian_zhe -XK_Armenian_INI -XK_Armenian_ini -XK_Armenian_LYUN -XK_Armenian_lyun -XK_Armenian_KHE -XK_Armenian_khe -XK_Armenian_TSA -XK_Armenian_tsa -XK_Armenian_KEN -XK_Armenian_ken -XK_Armenian_HO -XK_Armenian_ho -XK_Armenian_DZA -XK_Armenian_dza -XK_Armenian_GHAT -XK_Armenian_ghat -XK_Armenian_TCHE -XK_Armenian_tche -XK_Armenian_MEN -XK_Armenian_men -XK_Armenian_HI -XK_Armenian_hi -XK_Armenian_NU -XK_Armenian_nu -XK_Armenian_SHA -XK_Armenian_sha -XK_Armenian_VO -XK_Armenian_vo -XK_Armenian_CHA -XK_Armenian_cha -XK_Armenian_PE -XK_Armenian_pe -XK_Armenian_JE -XK_Armenian_je -XK_Armenian_RA -XK_Armenian_ra -XK_Armenian_SE -XK_Armenian_se -XK_Armenian_VEV -XK_Armenian_vev -XK_Armenian_TYUN -XK_Armenian_tyun -XK_Armenian_RE -XK_Armenian_re -XK_Armenian_TSO -XK_Armenian_tso -XK_Armenian_VYUN -XK_Armenian_vyun -XK_Armenian_PYUR -XK_Armenian_pyur -XK_Armenian_KE -XK_Armenian_ke -XK_Armenian_O -XK_Armenian_o -XK_Armenian_FE -XK_Armenian_fe -XK_Armenian_apostrophe -XK_Armenian_section_sign - -XK_Georgian_an -XK_Georgian_ban -XK_Georgian_gan -XK_Georgian_don -XK_Georgian_en -XK_Georgian_vin -XK_Georgian_zen -XK_Georgian_tan -XK_Georgian_in -XK_Georgian_kan -XK_Georgian_las -XK_Georgian_man -XK_Georgian_nar -XK_Georgian_on -XK_Georgian_par -XK_Georgian_zhar -XK_Georgian_rae -XK_Georgian_san -XK_Georgian_tar -XK_Georgian_un -XK_Georgian_phar -XK_Georgian_khar -XK_Georgian_ghan -XK_Georgian_qar -XK_Georgian_shin -XK_Georgian_chin -XK_Georgian_can -XK_Georgian_jil -XK_Georgian_cil -XK_Georgian_char -XK_Georgian_xan -XK_Georgian_jhan -XK_Georgian_hae -XK_Georgian_he -XK_Georgian_hie -XK_Georgian_we -XK_Georgian_har -XK_Georgian_hoe -XK_Georgian_fi - -XK_Ccedillaabovedot -XK_Xabovedot -XK_Qabovedot -XK_Ibreve -XK_IE -XK_UO -XK_Zstroke -XK_Gcaron -XK_Obarred -XK_ccedillaabovedot -XK_xabovedot -XK_Ocaron -XK_qabovedot -XK_ibreve -XK_ie -XK_uo -XK_zstroke -XK_gcaron -XK_ocaron -XK_obarred -XK_SCHWA -XK_Lbelowdot -XK_Lstrokebelowdot -XK_Gtilde -XK_lbelowdot -XK_lstrokebelowdot -XK_gtilde -XK_schwa - -XK_Abelowdot -XK_abelowdot -XK_Ahook -XK_ahook -XK_Acircumflexacute -XK_acircumflexacute -XK_Acircumflexgrave -XK_acircumflexgrave -XK_Acircumflexhook -XK_acircumflexhook -XK_Acircumflextilde -XK_acircumflextilde -XK_Acircumflexbelowdot -XK_acircumflexbelowdot -XK_Abreveacute -XK_abreveacute -XK_Abrevegrave -XK_abrevegrave -XK_Abrevehook -XK_abrevehook -XK_Abrevetilde -XK_abrevetilde -XK_Abrevebelowdot -XK_abrevebelowdot -XK_Ebelowdot -XK_ebelowdot -XK_Ehook -XK_ehook -XK_Etilde -XK_etilde -XK_Ecircumflexacute -XK_ecircumflexacute -XK_Ecircumflexgrave -XK_ecircumflexgrave -XK_Ecircumflexhook -XK_ecircumflexhook -XK_Ecircumflextilde -XK_ecircumflextilde -XK_Ecircumflexbelowdot -XK_ecircumflexbelowdot -XK_Ihook -XK_ihook -XK_Ibelowdot -XK_ibelowdot -XK_Obelowdot -XK_obelowdot -XK_Ohook -XK_ohook -XK_Ocircumflexacute -XK_ocircumflexacute -XK_Ocircumflexgrave -XK_ocircumflexgrave -XK_Ocircumflexhook -XK_ocircumflexhook -XK_Ocircumflextilde -XK_ocircumflextilde -XK_Ocircumflexbelowdot -XK_ocircumflexbelowdot -XK_Ohornacute -XK_ohornacute -XK_Ohorngrave -XK_ohorngrave -XK_Ohornhook -XK_ohornhook -XK_Ohorntilde -XK_ohorntilde -XK_Ohornbelowdot -XK_ohornbelowdot -XK_Ubelowdot -XK_ubelowdot -XK_Uhook -XK_uhook -XK_Uhornacute -XK_uhornacute -XK_Uhorngrave -XK_uhorngrave -XK_Uhornhook -XK_uhornhook -XK_Uhorntilde -XK_uhorntilde -XK_Uhornbelowdot -XK_uhornbelowdot -XK_Ybelowdot -XK_ybelowdot -XK_Yhook -XK_yhook -XK_Ytilde -XK_ytilde -XK_Ohorn -XK_ohorn -XK_Uhorn -XK_uhorn -*/ - -// map "Internet" keys to KeyIDs -static const KeySym s_map1008FF[] = -{ - /* 0x00 */ 0, 0, kKeyBrightnessUp, kKeyBrightnessDown, 0, kKeyKbdBrightnessUp, kKeyKbdBrightnessDown, 0, - /* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x10 */ 0, kKeyAudioDown, kKeyAudioMute, kKeyAudioUp, - /* 0x14 */ kKeyAudioPlay, kKeyAudioStop, kKeyAudioPrev, kKeyAudioNext, - /* 0x18 */ kKeyWWWHome, kKeyAppMail, 0, kKeyWWWSearch, 0, 0, 0, 0, - /* 0x20 */ 0, 0, 0, 0, 0, 0, kKeyWWWBack, kKeyWWWForward, - /* 0x28 */ kKeyWWWStop, kKeyWWWRefresh, 0, 0, kKeyEject, 0, 0, 0, - /* 0x30 */ kKeyWWWFavorites, 0, kKeyAppMedia, 0, 0, 0, 0, 0, - /* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x40 */ kKeyAppUser1, kKeyAppUser2, 0, 0, 0, 0, 0, 0, - /* 0x48 */ 0, 0, kKeyMissionControl, kKeyLaunchpad, 0, 0, 0, 0, - /* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0 -}; - -// map Sun keyboard keys to KeyIDs -// This is based on the the "Internet" keymap plus the missing keys -// Copy/Cut/Open/Paste/Props/Front -static const KeySym s_map1009FF[] = -{ - /* 0x00 */ 0, 0, kKeyBrightnessUp, kKeyBrightnessDown, 0, 0, 0, 0, - /* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x10 */ 0, kKeyAudioDown, kKeyAudioMute, kKeyAudioUp, - /* 0x14 */ kKeyAudioPlay, kKeyAudioStop, kKeyAudioPrev, kKeyAudioNext, - /* 0x18 */ kKeyWWWHome, kKeyAppMail, 0, kKeyWWWSearch, 0, 0, 0, 0, - /* 0x20 */ 0, 0, 0, 0, 0, 0, kKeyWWWBack, kKeyWWWForward, - /* 0x28 */ kKeyWWWStop, kKeyWWWRefresh, 0, 0, kKeyEject, 0, 0, 0, - /* 0x30 */ kKeyWWWFavorites, 0, kKeyAppMedia, 0, 0, 0, 0, 0, - /* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x40 */ kKeyAppUser1, kKeyAppUser2, 0, 0, 0, 0, 0, 0, - /* 0x48 */ 0, 0, kKeyMissionControl, kKeyLaunchpad, 0, 0, 0, 0, - /* 0x50 */ 0, 0, 0, 0, 0, 0, 0, kKeyCopy, - /* 0x58 */ kKeyCut, 0, 0, 0, 0, 0, 0, 0, - /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x68 */ 0, 0, 0, kKeyOpen, 0, kKeyPaste, 0, 0, - /* 0x70 */ kKeyProps, kKeyFront, 0, 0, 0, 0, 0, 0, - /* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0 -}; - // // XWindowsUtil // -XWindowsUtil::KeySymMap XWindowsUtil::s_keySymToUCS4; - bool XWindowsUtil::getWindowProperty(Display* display, Window window, Atom property, std::string* data, Atom* type, std::int32_t* format, bool deleteProperty) @@ -1504,152 +201,6 @@ XWindowsUtil::getCurrentTime(Display* display, Window window) return xevent.xproperty.time; } -KeyID -XWindowsUtil::mapKeySymToKeyID(KeySym k) -{ - initKeyMaps(); - - switch (k & 0xffffff00) { - case 0x0000: - // Latin-1 - return static_cast(k); - - case 0xfe00: - // ISO 9995 Function and Modifier Keys - switch (k) { - case XK_ISO_Left_Tab: - return kKeyLeftTab; - - case XK_ISO_Level3_Shift: - return kKeyAltGr; - -#ifdef XK_ISO_Level5_Shift - case XK_ISO_Level5_Shift: - return XK_ISO_Level5_Shift; //FIXME: there is no "usual" key for this... -#endif - - case XK_ISO_Next_Group: - return kKeyNextGroup; - - case XK_ISO_Prev_Group: - return kKeyPrevGroup; - - case XK_dead_grave: - return kKeyDeadGrave; - - case XK_dead_acute: - return kKeyDeadAcute; - - case XK_dead_circumflex: - return kKeyDeadCircumflex; - - case XK_dead_tilde: - return kKeyDeadTilde; - - case XK_dead_macron: - return kKeyDeadMacron; - - case XK_dead_breve: - return kKeyDeadBreve; - - case XK_dead_abovedot: - return kKeyDeadAbovedot; - - case XK_dead_diaeresis: - return kKeyDeadDiaeresis; - - case XK_dead_abovering: - return kKeyDeadAbovering; - - case XK_dead_doubleacute: - return kKeyDeadDoubleacute; - - case XK_dead_caron: - return kKeyDeadCaron; - - case XK_dead_cedilla: - return kKeyDeadCedilla; - - case XK_dead_ogonek: - return kKeyDeadOgonek; - - default: - return kKeyNone; - } - - case 0xff00: - // MISCELLANY - return static_cast(k - 0xff00 + 0xef00); - - case 0x1008ff00: - // "Internet" keys - return s_map1008FF[k & 0xff]; - - case 0x1009ff00: - // Additional Left-side keys provided by Sun Microsystems USB keyboards - return s_map1009FF[k & 0xff]; - - default: { - // lookup character in table - auto index = s_keySymToUCS4.find(k); - if (index != s_keySymToUCS4.end()) { - return static_cast(index->second); - } - - // unknown character - return kKeyNone; - } - } -} - -std::uint32_t XWindowsUtil::getModifierBitForKeySym(KeySym keysym) -{ - switch (keysym) { - case XK_Shift_L: - case XK_Shift_R: - return kKeyModifierBitShift; - - case XK_Control_L: - case XK_Control_R: - return kKeyModifierBitControl; - - case XK_Alt_L: - case XK_Alt_R: - return kKeyModifierBitAlt; - - case XK_Meta_L: - case XK_Meta_R: - return kKeyModifierBitMeta; - - case XK_Super_L: - case XK_Super_R: - case XK_Hyper_L: - case XK_Hyper_R: - return kKeyModifierBitSuper; - - case XK_Mode_switch: - case XK_ISO_Level3_Shift: - return kKeyModifierBitAltGr; - -#ifdef XK_ISO_Level5_Shift - case XK_ISO_Level5_Shift: - return kKeyModifierBitLevel5Lock; -#endif - - case XK_Caps_Lock: - return kKeyModifierBitCapsLock; - - case XK_Num_Lock: - return kKeyModifierBitNumLock; - - case XK_Scroll_Lock: - return kKeyModifierBitScrollLock; - - default: - return kKeyModifierBitNone; - } -} - std::string XWindowsUtil::atomToString(Display* display, Atom atom) { if (atom == 0) { @@ -1736,16 +287,6 @@ XWindowsUtil::propertyNotifyPredicate(Display*, XEvent* xevent, XPointer arg) xevent->xproperty.state == PropertyNewValue) ? True : False; } -void -XWindowsUtil::initKeyMaps() -{ - if (s_keySymToUCS4.empty()) { - for (size_t i =0; i < sizeof(s_keymap) / sizeof(s_keymap[0]); ++i) { - s_keySymToUCS4[s_keymap[i].keysym] = s_keymap[i].ucs4; - } - } -} - // // XWindowsUtil::ErrorLock diff --git a/src/lib/platform/XWindowsUtil.h b/src/lib/platform/XWindowsUtil.h index 5d5a192c..f3c583fc 100644 --- a/src/lib/platform/XWindowsUtil.h +++ b/src/lib/platform/XWindowsUtil.h @@ -22,17 +22,13 @@ #include -#include #include -#include namespace inputleap { //! X11 utility functions class XWindowsUtil { public: - typedef std::vector KeySyms; - //! Get property /*! Gets property \c property on \c window. \b Appends the data to @@ -59,20 +55,6 @@ public: */ static Time getCurrentTime(Display*, Window); - //! Convert KeySym to KeyID - /*! - Converts a KeySym to the equivalent KeyID. Returns kKeyNone if the - KeySym cannot be mapped. - */ - static std::uint32_t mapKeySymToKeyID(KeySym); - - //! Convert KeySym to corresponding KeyModifierMask - /*! - Converts a KeySym to the corresponding KeyModifierMask, or 0 if the - KeySym is not a modifier. - */ - static std::uint32_t getModifierBitForKeySym(KeySym keysym); - //! Convert Atom to its string /*! Converts \p atom to its string representation. @@ -171,13 +153,6 @@ private: static Bool propertyNotifyPredicate(Display*, XEvent* xevent, XPointer arg); - - static void initKeyMaps(); - -private: - typedef std::map KeySymMap; - - static KeySymMap s_keySymToUCS4; }; } // namespace inputleap -- 2.48.1