diff --git a/src/lib/platform/CMakeLists.txt b/src/lib/platform/CMakeLists.txt index c0aecceef..d3a2ba180 100644 --- a/src/lib/platform/CMakeLists.txt +++ b/src/lib/platform/CMakeLists.txt @@ -97,6 +97,8 @@ elseif(UNIX) XDGPortalRegistry.h XDGPowerManager.cpp XDGPowerManager.h + XDGKeyUtil.h + XDGKeyUtil.cpp XWindowsClipboard.cpp XWindowsClipboard.h XWindowsClipboardAnyBitmapConverter.cpp diff --git a/src/lib/platform/EiKeyState.cpp b/src/lib/platform/EiKeyState.cpp index 4527c96eb..473ae6659 100644 --- a/src/lib/platform/EiKeyState.cpp +++ b/src/lib/platform/EiKeyState.cpp @@ -11,7 +11,7 @@ #include "base/Log.h" #include "common/Settings.h" #include "deskflow/AppUtil.h" -#include "platform/XWindowsUtil.h" +#include "platform/XDGKeyUtil.h" #include #include @@ -251,7 +251,7 @@ void EiKeyState::getKeyMap(deskflow::KeyMap &keyMap) deskflow::KeyMap::KeyItem item{}; KeySym sym = keysym; - item.m_id = XWindowsUtil::mapKeySymToKeyID(sym); + item.m_id = XDGKeyUtil::mapKeySymToKeyID(sym); item.m_button = static_cast(keycode) - 8; // X keycode offset item.m_group = group; @@ -332,7 +332,7 @@ KeyID EiKeyState::mapKeyFromKeyval(uint32_t keyval) const } auto keysym = static_cast(xkbKeysym); - KeyID keyid = XWindowsUtil::mapKeySymToKeyID(keysym); + KeyID keyid = XDGKeyUtil::mapKeySymToKeyID(keysym); LOG_DEBUG1("mapped key: code=%d keysym=0x%04lx to keyID=%d", keyval, keysym, keyid); return keyid; diff --git a/src/lib/platform/XDGKeyUtil.cpp b/src/lib/platform/XDGKeyUtil.cpp new file mode 100644 index 000000000..e6d3bd3af --- /dev/null +++ b/src/lib/platform/XDGKeyUtil.cpp @@ -0,0 +1,1651 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers + * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. + * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#include "platform/XDGKeyUtil.h" + +#include "deskflow/KeyTypes.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 + +/* + * 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, + 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, + 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 +}; + +// +// XDGKeyUtil +// + +XDGKeyUtil::KeySymMap XDGKeyUtil::s_keySymToUCS4; + +KeyID XDGKeyUtil::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; // 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]; + + 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 XDGKeyUtil::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 XDGKeyUtil::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; + } + } +} diff --git a/src/lib/platform/XDGKeyUtil.h b/src/lib/platform/XDGKeyUtil.h new file mode 100644 index 000000000..d80495537 --- /dev/null +++ b/src/lib/platform/XDGKeyUtil.h @@ -0,0 +1,43 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers + * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. + * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#pragma once + +#include + +#include +#include +#include + +//! XKB utility functions +class XDGKeyUtil +{ +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; +}; diff --git a/src/lib/platform/XWindowsKeyState.cpp b/src/lib/platform/XWindowsKeyState.cpp index e5fa7d273..9d7d778b2 100644 --- a/src/lib/platform/XWindowsKeyState.cpp +++ b/src/lib/platform/XWindowsKeyState.cpp @@ -18,7 +18,7 @@ #include "base/Log.h" #include "deskflow/AppUtil.h" -#include "platform/XWindowsUtil.h" +#include "platform/XDGKeyUtil.h" #include #include @@ -479,15 +479,15 @@ void XWindowsKeyState::updateKeysymMap(deskflow::KeyMap &keyMap) // do each keysym (shift level) for (int j = 0; j < maxKeysyms; ++j) { - item.m_id = XWindowsUtil::mapKeySymToKeyID(keysyms[j]); + item.m_id = XDGKeyUtil::mapKeySymToKeyID(keysyms[j]); if (item.m_id == kKeyNone) { if (j != 0 && modifierButtons.contains(keycode)) { // 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 = XDGKeyUtil::mapKeySymToKeyID(keysyms[0]); } else { - item.m_id = XWindowsUtil::mapKeySymToKeyID(keysyms[1]); + item.m_id = XDGKeyUtil::mapKeySymToKeyID(keysyms[1]); } } if (item.m_id == kKeyNone) { @@ -700,7 +700,7 @@ void XWindowsKeyState::updateKeysymMapXKB(deskflow::KeyMap &keyMap) // record the modifier mask for this key. don't bother // for keys that change the group. item.m_generates = 0; - if (uint32_t modifierBit = XWindowsUtil::getModifierBitForKeySym(keysym); + if (uint32_t modifierBit = XDGKeyUtil::getModifierBitForKeySym(keysym); isModifier && modifierBit != kKeyModifierBitNone) { item.m_generates = (1u << modifierBit); for (int32_t j = 0; j < 8; ++j) { @@ -740,8 +740,8 @@ void XWindowsKeyState::updateKeysymMapXKB(deskflow::KeyMap &keyMap) item.m_sensitive |= ShiftMask | LockMask; - KeyID lKeyID = XWindowsUtil::mapKeySymToKeyID(lKeysym); - KeyID uKeyID = XWindowsUtil::mapKeySymToKeyID(uKeysym); + KeyID lKeyID = XDGKeyUtil::mapKeySymToKeyID(lKeysym); + KeyID uKeyID = XDGKeyUtil::mapKeySymToKeyID(uKeysym); if (lKeyID == kKeyNone || uKeyID == kKeyNone) { continue; } @@ -765,7 +765,7 @@ void XWindowsKeyState::updateKeysymMapXKB(deskflow::KeyMap &keyMap) } // add entry - item.m_id = XWindowsUtil::mapKeySymToKeyID(keysym); + item.m_id = XDGKeyUtil::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 f4cfe54ae..e544ae930 100644 --- a/src/lib/platform/XWindowsScreen.cpp +++ b/src/lib/platform/XWindowsScreen.cpp @@ -19,6 +19,7 @@ #include "deskflow/Clipboard.h" #include "deskflow/KeyMap.h" #include "deskflow/ScreenException.h" +#include "platform/XDGKeyUtil.h" #include "platform/XWindowsClipboard.h" #include "platform/XWindowsEventQueueBuffer.h" #include "platform/XWindowsKeyState.h" @@ -1736,7 +1737,7 @@ KeyID XWindowsScreen::mapKeyFromX(XKeyEvent *event) const LOG_DEBUG2("mapped code=%d to keysym=0x%04x", event->keycode, keysym); // convert key - KeyID result = XWindowsUtil::mapKeySymToKeyID(keysym); + KeyID result = XDGKeyUtil::mapKeySymToKeyID(keysym); LOG_DEBUG2("mapped keysym=0x%04x to keyID=%d", keysym, result); return result; } diff --git a/src/lib/platform/XWindowsUtil.cpp b/src/lib/platform/XWindowsUtil.cpp index 4383c556a..1f5efad66 100644 --- a/src/lib/platform/XWindowsUtil.cpp +++ b/src/lib/platform/XWindowsUtil.cpp @@ -8,1502 +8,14 @@ #include "base/Log.h" //Include First #include "base/String.h" -#include "deskflow/KeyTypes.h" #include "platform/XWindowsUtil.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 - -/* - * 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; - uint32_t ucs4; -}; - -std::vector 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, - 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, - 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 -}; // // XWindowsUtil // -XWindowsUtil::KeySymMap XWindowsUtil::s_keySymToUCS4; - bool XWindowsUtil::getWindowProperty( Display *display, Window window, Atom property, std::string *data, Atom *type, int32_t *format, bool deleteProperty ) @@ -1667,142 +179,6 @@ Time 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; - - case XK_ISO_Level5_Shift: - return XK_ISO_Level5_Shift; // FIXME: there is no "usual" key for this... - - 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]; - - default: { - // lookup character in table - if (KeySymMap::const_iterator index = s_keySymToUCS4.find(k); index != s_keySymToUCS4.end()) { - return index->second; - } - - // unknown character - return kKeyNone; - } - } -} - -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; - - case XK_ISO_Level5_Shift: - return kKeyModifierBitLevel5Lock; - - 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) { @@ -1883,15 +259,6 @@ Bool XWindowsUtil::propertyNotifyPredicate(Display *, XEvent *xevent, XPointer a : False; } -void XWindowsUtil::initKeyMaps() -{ - if (s_keySymToUCS4.empty()) { - for (size_t i = 0; i < std::size(s_keymap); ++i) { - s_keySymToUCS4[s_keymap.at(i).keysym] = s_keymap.at(i).ucs4; - } - } -} - // // XWindowsUtil::ErrorLock // diff --git a/src/lib/platform/XWindowsUtil.h b/src/lib/platform/XWindowsUtil.h index efa64a3b1..388c9e161 100644 --- a/src/lib/platform/XWindowsUtil.h +++ b/src/lib/platform/XWindowsUtil.h @@ -8,9 +8,7 @@ #pragma once #include -#include #include -#include #include @@ -18,8 +16,6 @@ class XWindowsUtil { public: - using KeySyms = std::vector; - //! Get property /*! Gets property \c property on \c window. \b Appends the data to @@ -47,20 +43,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 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 uint32_t getModifierBitForKeySym(KeySym keysym); - //! Convert Atom to its string /*! Converts \p atom to its string representation. @@ -165,11 +147,4 @@ private: }; static Bool propertyNotifyPredicate(Display *, XEvent *xevent, XPointer arg); - - static void initKeyMaps(); - -private: - using KeySymMap = std::map; - - static KeySymMap s_keySymToUCS4; };