Simplify keysymdef.js

Some Unicode to Keysym mappings can be computed and can therefore
be left out of the huge lookup table.
This commit is contained in:
Pierre Ossman 2017-01-24 12:49:29 +01:00
parent 041568bd31
commit 278a5e7fbd
3 changed files with 38 additions and 904 deletions

View File

@ -8,197 +8,6 @@
/* Functions at the bottom */
var codepoints = {
0x0020: 0x0020, // XK_space
0x0021: 0x0021, // XK_exclam
0x0022: 0x0022, // XK_quotedbl
0x0023: 0x0023, // XK_numbersign
0x0024: 0x0024, // XK_dollar
0x0025: 0x0025, // XK_percent
0x0026: 0x0026, // XK_ampersand
0x0027: 0x0027, // XK_apostrophe
0x0028: 0x0028, // XK_parenleft
0x0029: 0x0029, // XK_parenright
0x002a: 0x002a, // XK_asterisk
0x002b: 0x002b, // XK_plus
0x002c: 0x002c, // XK_comma
0x002d: 0x002d, // XK_minus
0x002e: 0x002e, // XK_period
0x002f: 0x002f, // XK_slash
0x0030: 0x0030, // XK_0
0x0031: 0x0031, // XK_1
0x0032: 0x0032, // XK_2
0x0033: 0x0033, // XK_3
0x0034: 0x0034, // XK_4
0x0035: 0x0035, // XK_5
0x0036: 0x0036, // XK_6
0x0037: 0x0037, // XK_7
0x0038: 0x0038, // XK_8
0x0039: 0x0039, // XK_9
0x003a: 0x003a, // XK_colon
0x003b: 0x003b, // XK_semicolon
0x003c: 0x003c, // XK_less
0x003d: 0x003d, // XK_equal
0x003e: 0x003e, // XK_greater
0x003f: 0x003f, // XK_question
0x0040: 0x0040, // XK_at
0x0041: 0x0041, // XK_A
0x0042: 0x0042, // XK_B
0x0043: 0x0043, // XK_C
0x0044: 0x0044, // XK_D
0x0045: 0x0045, // XK_E
0x0046: 0x0046, // XK_F
0x0047: 0x0047, // XK_G
0x0048: 0x0048, // XK_H
0x0049: 0x0049, // XK_I
0x004a: 0x004a, // XK_J
0x004b: 0x004b, // XK_K
0x004c: 0x004c, // XK_L
0x004d: 0x004d, // XK_M
0x004e: 0x004e, // XK_N
0x004f: 0x004f, // XK_O
0x0050: 0x0050, // XK_P
0x0051: 0x0051, // XK_Q
0x0052: 0x0052, // XK_R
0x0053: 0x0053, // XK_S
0x0054: 0x0054, // XK_T
0x0055: 0x0055, // XK_U
0x0056: 0x0056, // XK_V
0x0057: 0x0057, // XK_W
0x0058: 0x0058, // XK_X
0x0059: 0x0059, // XK_Y
0x005a: 0x005a, // XK_Z
0x005b: 0x005b, // XK_bracketleft
0x005c: 0x005c, // XK_backslash
0x005d: 0x005d, // XK_bracketright
0x005e: 0x005e, // XK_asciicircum
0x005f: 0x005f, // XK_underscore
0x0060: 0x0060, // XK_grave
0x0061: 0x0061, // XK_a
0x0062: 0x0062, // XK_b
0x0063: 0x0063, // XK_c
0x0064: 0x0064, // XK_d
0x0065: 0x0065, // XK_e
0x0066: 0x0066, // XK_f
0x0067: 0x0067, // XK_g
0x0068: 0x0068, // XK_h
0x0069: 0x0069, // XK_i
0x006a: 0x006a, // XK_j
0x006b: 0x006b, // XK_k
0x006c: 0x006c, // XK_l
0x006d: 0x006d, // XK_m
0x006e: 0x006e, // XK_n
0x006f: 0x006f, // XK_o
0x0070: 0x0070, // XK_p
0x0071: 0x0071, // XK_q
0x0072: 0x0072, // XK_r
0x0073: 0x0073, // XK_s
0x0074: 0x0074, // XK_t
0x0075: 0x0075, // XK_u
0x0076: 0x0076, // XK_v
0x0077: 0x0077, // XK_w
0x0078: 0x0078, // XK_x
0x0079: 0x0079, // XK_y
0x007a: 0x007a, // XK_z
0x007b: 0x007b, // XK_braceleft
0x007c: 0x007c, // XK_bar
0x007d: 0x007d, // XK_braceright
0x007e: 0x007e, // XK_asciitilde
0x00a0: 0x00a0, // XK_nobreakspace
0x00a1: 0x00a1, // XK_exclamdown
0x00a2: 0x00a2, // XK_cent
0x00a3: 0x00a3, // XK_sterling
0x00a4: 0x00a4, // XK_currency
0x00a5: 0x00a5, // XK_yen
0x00a6: 0x00a6, // XK_brokenbar
0x00a7: 0x00a7, // XK_section
0x00a8: 0x00a8, // XK_diaeresis
0x00a9: 0x00a9, // XK_copyright
0x00aa: 0x00aa, // XK_ordfeminine
0x00ab: 0x00ab, // XK_guillemotleft
0x00ac: 0x00ac, // XK_notsign
0x00ad: 0x00ad, // XK_hyphen
0x00ae: 0x00ae, // XK_registered
0x00af: 0x00af, // XK_macron
0x00b0: 0x00b0, // XK_degree
0x00b1: 0x00b1, // XK_plusminus
0x00b2: 0x00b2, // XK_twosuperior
0x00b3: 0x00b3, // XK_threesuperior
0x00b4: 0x00b4, // XK_acute
0x00b5: 0x00b5, // XK_mu
0x00b6: 0x00b6, // XK_paragraph
0x00b7: 0x00b7, // XK_periodcentered
0x00b8: 0x00b8, // XK_cedilla
0x00b9: 0x00b9, // XK_onesuperior
0x00ba: 0x00ba, // XK_masculine
0x00bb: 0x00bb, // XK_guillemotright
0x00bc: 0x00bc, // XK_onequarter
0x00bd: 0x00bd, // XK_onehalf
0x00be: 0x00be, // XK_threequarters
0x00bf: 0x00bf, // XK_questiondown
0x00c0: 0x00c0, // XK_Agrave
0x00c1: 0x00c1, // XK_Aacute
0x00c2: 0x00c2, // XK_Acircumflex
0x00c3: 0x00c3, // XK_Atilde
0x00c4: 0x00c4, // XK_Adiaeresis
0x00c5: 0x00c5, // XK_Aring
0x00c6: 0x00c6, // XK_AE
0x00c7: 0x00c7, // XK_Ccedilla
0x00c8: 0x00c8, // XK_Egrave
0x00c9: 0x00c9, // XK_Eacute
0x00ca: 0x00ca, // XK_Ecircumflex
0x00cb: 0x00cb, // XK_Ediaeresis
0x00cc: 0x00cc, // XK_Igrave
0x00cd: 0x00cd, // XK_Iacute
0x00ce: 0x00ce, // XK_Icircumflex
0x00cf: 0x00cf, // XK_Idiaeresis
0x00d0: 0x00d0, // XK_ETH
0x00d1: 0x00d1, // XK_Ntilde
0x00d2: 0x00d2, // XK_Ograve
0x00d3: 0x00d3, // XK_Oacute
0x00d4: 0x00d4, // XK_Ocircumflex
0x00d5: 0x00d5, // XK_Otilde
0x00d6: 0x00d6, // XK_Odiaeresis
0x00d7: 0x00d7, // XK_multiply
0x00d8: 0x00d8, // XK_Oslash
0x00d9: 0x00d9, // XK_Ugrave
0x00da: 0x00da, // XK_Uacute
0x00db: 0x00db, // XK_Ucircumflex
0x00dc: 0x00dc, // XK_Udiaeresis
0x00dd: 0x00dd, // XK_Yacute
0x00de: 0x00de, // XK_THORN
0x00df: 0x00df, // XK_ssharp
0x00e0: 0x00e0, // XK_agrave
0x00e1: 0x00e1, // XK_aacute
0x00e2: 0x00e2, // XK_acircumflex
0x00e3: 0x00e3, // XK_atilde
0x00e4: 0x00e4, // XK_adiaeresis
0x00e5: 0x00e5, // XK_aring
0x00e6: 0x00e6, // XK_ae
0x00e7: 0x00e7, // XK_ccedilla
0x00e8: 0x00e8, // XK_egrave
0x00e9: 0x00e9, // XK_eacute
0x00ea: 0x00ea, // XK_ecircumflex
0x00eb: 0x00eb, // XK_ediaeresis
0x00ec: 0x00ec, // XK_igrave
0x00ed: 0x00ed, // XK_iacute
0x00ee: 0x00ee, // XK_icircumflex
0x00ef: 0x00ef, // XK_idiaeresis
0x00f0: 0x00f0, // XK_eth
0x00f1: 0x00f1, // XK_ntilde
0x00f2: 0x00f2, // XK_ograve
0x00f3: 0x00f3, // XK_oacute
0x00f4: 0x00f4, // XK_ocircumflex
0x00f5: 0x00f5, // XK_otilde
0x00f6: 0x00f6, // XK_odiaeresis
0x00f7: 0x00f7, // XK_division
0x00f8: 0x00f8, // XK_oslash
0x00f9: 0x00f9, // XK_ugrave
0x00fa: 0x00fa, // XK_uacute
0x00fb: 0x00fb, // XK_ucircumflex
0x00fc: 0x00fc, // XK_udiaeresis
0x00fd: 0x00fd, // XK_yacute
0x00fe: 0x00fe, // XK_thorn
0x00ff: 0x00ff, // XK_ydiaeresis
0x0100: 0x03c0, // XK_Amacron
0x0101: 0x03e0, // XK_amacron
0x0102: 0x01c3, // XK_Abreve
@ -241,8 +50,6 @@ var codepoints = {
0x0129: 0x03b5, // XK_itilde
0x012a: 0x03cf, // XK_Imacron
0x012b: 0x03ef, // XK_imacron
0x012c: 0x100012c, // XK_Ibreve
0x012d: 0x100012d, // XK_ibreve
0x012e: 0x03c7, // XK_Iogonek
0x012f: 0x03e7, // XK_iogonek
0x0130: 0x02a9, // XK_Iabovedot
@ -306,10 +113,6 @@ var codepoints = {
0x0171: 0x01fb, // XK_udoubleacute
0x0172: 0x03d9, // XK_Uogonek
0x0173: 0x03f9, // XK_uogonek
0x0174: 0x1000174, // XK_Wcircumflex
0x0175: 0x1000175, // XK_wcircumflex
0x0176: 0x1000176, // XK_Ycircumflex
0x0177: 0x1000177, // XK_ycircumflex
0x0178: 0x13be, // XK_Ydiaeresis
0x0179: 0x01ac, // XK_Zacute
0x017a: 0x01bc, // XK_zacute
@ -317,22 +120,8 @@ var codepoints = {
0x017c: 0x01bf, // XK_zabovedot
0x017d: 0x01ae, // XK_Zcaron
0x017e: 0x01be, // XK_zcaron
0x018f: 0x100018f, // XK_SCHWA
0x0192: 0x08f6, // XK_function
0x019f: 0x100019f, // XK_Obarred
0x01a0: 0x10001a0, // XK_Ohorn
0x01a1: 0x10001a1, // XK_ohorn
0x01af: 0x10001af, // XK_Uhorn
0x01b0: 0x10001b0, // XK_uhorn
0x01b5: 0x10001b5, // XK_Zstroke
0x01b6: 0x10001b6, // XK_zstroke
0x01b7: 0x10001b7, // XK_EZH
0x01d2: 0x10001d1, // XK_Ocaron
0x01e6: 0x10001e6, // XK_Gcaron
0x01e7: 0x10001e7, // XK_gcaron
0x0259: 0x1000259, // XK_schwa
0x0275: 0x1000275, // XK_obarred
0x0292: 0x1000292, // XK_ezh
0x02c7: 0x01b7, // XK_caron
0x02d8: 0x01a2, // XK_breve
0x02d9: 0x01ff, // XK_abovedot
@ -502,120 +291,6 @@ var codepoints = {
0x045f: 0x06af, // XK_Cyrillic_dzhe
0x0490: 0x06bd, // XK_Ukrainian_GHE_WITH_UPTURN
0x0491: 0x06ad, // XK_Ukrainian_ghe_with_upturn
0x0492: 0x1000492, // XK_Cyrillic_GHE_bar
0x0493: 0x1000493, // XK_Cyrillic_ghe_bar
0x0496: 0x1000496, // XK_Cyrillic_ZHE_descender
0x0497: 0x1000497, // XK_Cyrillic_zhe_descender
0x049a: 0x100049a, // XK_Cyrillic_KA_descender
0x049b: 0x100049b, // XK_Cyrillic_ka_descender
0x049c: 0x100049c, // XK_Cyrillic_KA_vertstroke
0x049d: 0x100049d, // XK_Cyrillic_ka_vertstroke
0x04a2: 0x10004a2, // XK_Cyrillic_EN_descender
0x04a3: 0x10004a3, // XK_Cyrillic_en_descender
0x04ae: 0x10004ae, // XK_Cyrillic_U_straight
0x04af: 0x10004af, // XK_Cyrillic_u_straight
0x04b0: 0x10004b0, // XK_Cyrillic_U_straight_bar
0x04b1: 0x10004b1, // XK_Cyrillic_u_straight_bar
0x04b2: 0x10004b2, // XK_Cyrillic_HA_descender
0x04b3: 0x10004b3, // XK_Cyrillic_ha_descender
0x04b6: 0x10004b6, // XK_Cyrillic_CHE_descender
0x04b7: 0x10004b7, // XK_Cyrillic_che_descender
0x04b8: 0x10004b8, // XK_Cyrillic_CHE_vertstroke
0x04b9: 0x10004b9, // XK_Cyrillic_che_vertstroke
0x04ba: 0x10004ba, // XK_Cyrillic_SHHA
0x04bb: 0x10004bb, // XK_Cyrillic_shha
0x04d8: 0x10004d8, // XK_Cyrillic_SCHWA
0x04d9: 0x10004d9, // XK_Cyrillic_schwa
0x04e2: 0x10004e2, // XK_Cyrillic_I_macron
0x04e3: 0x10004e3, // XK_Cyrillic_i_macron
0x04e8: 0x10004e8, // XK_Cyrillic_O_bar
0x04e9: 0x10004e9, // XK_Cyrillic_o_bar
0x04ee: 0x10004ee, // XK_Cyrillic_U_macron
0x04ef: 0x10004ef, // XK_Cyrillic_u_macron
0x0531: 0x1000531, // XK_Armenian_AYB
0x0532: 0x1000532, // XK_Armenian_BEN
0x0533: 0x1000533, // XK_Armenian_GIM
0x0534: 0x1000534, // XK_Armenian_DA
0x0535: 0x1000535, // XK_Armenian_YECH
0x0536: 0x1000536, // XK_Armenian_ZA
0x0537: 0x1000537, // XK_Armenian_E
0x0538: 0x1000538, // XK_Armenian_AT
0x0539: 0x1000539, // XK_Armenian_TO
0x053a: 0x100053a, // XK_Armenian_ZHE
0x053b: 0x100053b, // XK_Armenian_INI
0x053c: 0x100053c, // XK_Armenian_LYUN
0x053d: 0x100053d, // XK_Armenian_KHE
0x053e: 0x100053e, // XK_Armenian_TSA
0x053f: 0x100053f, // XK_Armenian_KEN
0x0540: 0x1000540, // XK_Armenian_HO
0x0541: 0x1000541, // XK_Armenian_DZA
0x0542: 0x1000542, // XK_Armenian_GHAT
0x0543: 0x1000543, // XK_Armenian_TCHE
0x0544: 0x1000544, // XK_Armenian_MEN
0x0545: 0x1000545, // XK_Armenian_HI
0x0546: 0x1000546, // XK_Armenian_NU
0x0547: 0x1000547, // XK_Armenian_SHA
0x0548: 0x1000548, // XK_Armenian_VO
0x0549: 0x1000549, // XK_Armenian_CHA
0x054a: 0x100054a, // XK_Armenian_PE
0x054b: 0x100054b, // XK_Armenian_JE
0x054c: 0x100054c, // XK_Armenian_RA
0x054d: 0x100054d, // XK_Armenian_SE
0x054e: 0x100054e, // XK_Armenian_VEV
0x054f: 0x100054f, // XK_Armenian_TYUN
0x0550: 0x1000550, // XK_Armenian_RE
0x0551: 0x1000551, // XK_Armenian_TSO
0x0552: 0x1000552, // XK_Armenian_VYUN
0x0553: 0x1000553, // XK_Armenian_PYUR
0x0554: 0x1000554, // XK_Armenian_KE
0x0555: 0x1000555, // XK_Armenian_O
0x0556: 0x1000556, // XK_Armenian_FE
0x055a: 0x100055a, // XK_Armenian_apostrophe
0x055b: 0x100055b, // XK_Armenian_accent
0x055c: 0x100055c, // XK_Armenian_exclam
0x055d: 0x100055d, // XK_Armenian_separation_mark
0x055e: 0x100055e, // XK_Armenian_question
0x0561: 0x1000561, // XK_Armenian_ayb
0x0562: 0x1000562, // XK_Armenian_ben
0x0563: 0x1000563, // XK_Armenian_gim
0x0564: 0x1000564, // XK_Armenian_da
0x0565: 0x1000565, // XK_Armenian_yech
0x0566: 0x1000566, // XK_Armenian_za
0x0567: 0x1000567, // XK_Armenian_e
0x0568: 0x1000568, // XK_Armenian_at
0x0569: 0x1000569, // XK_Armenian_to
0x056a: 0x100056a, // XK_Armenian_zhe
0x056b: 0x100056b, // XK_Armenian_ini
0x056c: 0x100056c, // XK_Armenian_lyun
0x056d: 0x100056d, // XK_Armenian_khe
0x056e: 0x100056e, // XK_Armenian_tsa
0x056f: 0x100056f, // XK_Armenian_ken
0x0570: 0x1000570, // XK_Armenian_ho
0x0571: 0x1000571, // XK_Armenian_dza
0x0572: 0x1000572, // XK_Armenian_ghat
0x0573: 0x1000573, // XK_Armenian_tche
0x0574: 0x1000574, // XK_Armenian_men
0x0575: 0x1000575, // XK_Armenian_hi
0x0576: 0x1000576, // XK_Armenian_nu
0x0577: 0x1000577, // XK_Armenian_sha
0x0578: 0x1000578, // XK_Armenian_vo
0x0579: 0x1000579, // XK_Armenian_cha
0x057a: 0x100057a, // XK_Armenian_pe
0x057b: 0x100057b, // XK_Armenian_je
0x057c: 0x100057c, // XK_Armenian_ra
0x057d: 0x100057d, // XK_Armenian_se
0x057e: 0x100057e, // XK_Armenian_vev
0x057f: 0x100057f, // XK_Armenian_tyun
0x0580: 0x1000580, // XK_Armenian_re
0x0581: 0x1000581, // XK_Armenian_tso
0x0582: 0x1000582, // XK_Armenian_vyun
0x0583: 0x1000583, // XK_Armenian_pyur
0x0584: 0x1000584, // XK_Armenian_ke
0x0585: 0x1000585, // XK_Armenian_o
0x0586: 0x1000586, // XK_Armenian_fe
0x0587: 0x1000587, // XK_Armenian_ligature_ew
0x0589: 0x1000589, // XK_Armenian_full_stop
0x058a: 0x100058a, // XK_Armenian_hyphen
0x05d0: 0x0ce0, // XK_hebrew_aleph
0x05d1: 0x0ce1, // XK_hebrew_bet
0x05d2: 0x0ce2, // XK_hebrew_gimel
@ -691,126 +366,6 @@ var codepoints = {
0x0650: 0x05f0, // XK_Arabic_kasra
0x0651: 0x05f1, // XK_Arabic_shadda
0x0652: 0x05f2, // XK_Arabic_sukun
0x0653: 0x1000653, // XK_Arabic_madda_above
0x0654: 0x1000654, // XK_Arabic_hamza_above
0x0655: 0x1000655, // XK_Arabic_hamza_below
0x0660: 0x1000660, // XK_Arabic_0
0x0661: 0x1000661, // XK_Arabic_1
0x0662: 0x1000662, // XK_Arabic_2
0x0663: 0x1000663, // XK_Arabic_3
0x0664: 0x1000664, // XK_Arabic_4
0x0665: 0x1000665, // XK_Arabic_5
0x0666: 0x1000666, // XK_Arabic_6
0x0667: 0x1000667, // XK_Arabic_7
0x0668: 0x1000668, // XK_Arabic_8
0x0669: 0x1000669, // XK_Arabic_9
0x066a: 0x100066a, // XK_Arabic_percent
0x0670: 0x1000670, // XK_Arabic_superscript_alef
0x0679: 0x1000679, // XK_Arabic_tteh
0x067e: 0x100067e, // XK_Arabic_peh
0x0686: 0x1000686, // XK_Arabic_tcheh
0x0688: 0x1000688, // XK_Arabic_ddal
0x0691: 0x1000691, // XK_Arabic_rreh
0x0698: 0x1000698, // XK_Arabic_jeh
0x06a4: 0x10006a4, // XK_Arabic_veh
0x06a9: 0x10006a9, // XK_Arabic_keheh
0x06af: 0x10006af, // XK_Arabic_gaf
0x06ba: 0x10006ba, // XK_Arabic_noon_ghunna
0x06be: 0x10006be, // XK_Arabic_heh_doachashmee
0x06c1: 0x10006c1, // XK_Arabic_heh_goal
0x06cc: 0x10006cc, // XK_Farsi_yeh
0x06d2: 0x10006d2, // XK_Arabic_yeh_baree
0x06d4: 0x10006d4, // XK_Arabic_fullstop
0x06f0: 0x10006f0, // XK_Farsi_0
0x06f1: 0x10006f1, // XK_Farsi_1
0x06f2: 0x10006f2, // XK_Farsi_2
0x06f3: 0x10006f3, // XK_Farsi_3
0x06f4: 0x10006f4, // XK_Farsi_4
0x06f5: 0x10006f5, // XK_Farsi_5
0x06f6: 0x10006f6, // XK_Farsi_6
0x06f7: 0x10006f7, // XK_Farsi_7
0x06f8: 0x10006f8, // XK_Farsi_8
0x06f9: 0x10006f9, // XK_Farsi_9
0x0d82: 0x1000d82, // XK_Sinh_ng
0x0d83: 0x1000d83, // XK_Sinh_h2
0x0d85: 0x1000d85, // XK_Sinh_a
0x0d86: 0x1000d86, // XK_Sinh_aa
0x0d87: 0x1000d87, // XK_Sinh_ae
0x0d88: 0x1000d88, // XK_Sinh_aee
0x0d89: 0x1000d89, // XK_Sinh_i
0x0d8a: 0x1000d8a, // XK_Sinh_ii
0x0d8b: 0x1000d8b, // XK_Sinh_u
0x0d8c: 0x1000d8c, // XK_Sinh_uu
0x0d8d: 0x1000d8d, // XK_Sinh_ri
0x0d8e: 0x1000d8e, // XK_Sinh_rii
0x0d8f: 0x1000d8f, // XK_Sinh_lu
0x0d90: 0x1000d90, // XK_Sinh_luu
0x0d91: 0x1000d91, // XK_Sinh_e
0x0d92: 0x1000d92, // XK_Sinh_ee
0x0d93: 0x1000d93, // XK_Sinh_ai
0x0d94: 0x1000d94, // XK_Sinh_o
0x0d95: 0x1000d95, // XK_Sinh_oo
0x0d96: 0x1000d96, // XK_Sinh_au
0x0d9a: 0x1000d9a, // XK_Sinh_ka
0x0d9b: 0x1000d9b, // XK_Sinh_kha
0x0d9c: 0x1000d9c, // XK_Sinh_ga
0x0d9d: 0x1000d9d, // XK_Sinh_gha
0x0d9e: 0x1000d9e, // XK_Sinh_ng2
0x0d9f: 0x1000d9f, // XK_Sinh_nga
0x0da0: 0x1000da0, // XK_Sinh_ca
0x0da1: 0x1000da1, // XK_Sinh_cha
0x0da2: 0x1000da2, // XK_Sinh_ja
0x0da3: 0x1000da3, // XK_Sinh_jha
0x0da4: 0x1000da4, // XK_Sinh_nya
0x0da5: 0x1000da5, // XK_Sinh_jnya
0x0da6: 0x1000da6, // XK_Sinh_nja
0x0da7: 0x1000da7, // XK_Sinh_tta
0x0da8: 0x1000da8, // XK_Sinh_ttha
0x0da9: 0x1000da9, // XK_Sinh_dda
0x0daa: 0x1000daa, // XK_Sinh_ddha
0x0dab: 0x1000dab, // XK_Sinh_nna
0x0dac: 0x1000dac, // XK_Sinh_ndda
0x0dad: 0x1000dad, // XK_Sinh_tha
0x0dae: 0x1000dae, // XK_Sinh_thha
0x0daf: 0x1000daf, // XK_Sinh_dha
0x0db0: 0x1000db0, // XK_Sinh_dhha
0x0db1: 0x1000db1, // XK_Sinh_na
0x0db3: 0x1000db3, // XK_Sinh_ndha
0x0db4: 0x1000db4, // XK_Sinh_pa
0x0db5: 0x1000db5, // XK_Sinh_pha
0x0db6: 0x1000db6, // XK_Sinh_ba
0x0db7: 0x1000db7, // XK_Sinh_bha
0x0db8: 0x1000db8, // XK_Sinh_ma
0x0db9: 0x1000db9, // XK_Sinh_mba
0x0dba: 0x1000dba, // XK_Sinh_ya
0x0dbb: 0x1000dbb, // XK_Sinh_ra
0x0dbd: 0x1000dbd, // XK_Sinh_la
0x0dc0: 0x1000dc0, // XK_Sinh_va
0x0dc1: 0x1000dc1, // XK_Sinh_sha
0x0dc2: 0x1000dc2, // XK_Sinh_ssha
0x0dc3: 0x1000dc3, // XK_Sinh_sa
0x0dc4: 0x1000dc4, // XK_Sinh_ha
0x0dc5: 0x1000dc5, // XK_Sinh_lla
0x0dc6: 0x1000dc6, // XK_Sinh_fa
0x0dca: 0x1000dca, // XK_Sinh_al
0x0dcf: 0x1000dcf, // XK_Sinh_aa2
0x0dd0: 0x1000dd0, // XK_Sinh_ae2
0x0dd1: 0x1000dd1, // XK_Sinh_aee2
0x0dd2: 0x1000dd2, // XK_Sinh_i2
0x0dd3: 0x1000dd3, // XK_Sinh_ii2
0x0dd4: 0x1000dd4, // XK_Sinh_u2
0x0dd6: 0x1000dd6, // XK_Sinh_uu2
0x0dd8: 0x1000dd8, // XK_Sinh_ru2
0x0dd9: 0x1000dd9, // XK_Sinh_e2
0x0dda: 0x1000dda, // XK_Sinh_ee2
0x0ddb: 0x1000ddb, // XK_Sinh_ai2
0x0ddc: 0x1000ddc, // XK_Sinh_o2
0x0ddd: 0x1000ddd, // XK_Sinh_oo2
0x0dde: 0x1000dde, // XK_Sinh_au2
0x0ddf: 0x1000ddf, // XK_Sinh_lu2
0x0df2: 0x1000df2, // XK_Sinh_ruu2
0x0df3: 0x1000df3, // XK_Sinh_luu2
0x0df4: 0x1000df4, // XK_Sinh_kunddaliya
0x0e01: 0x0da1, // XK_Thai_kokai
0x0e02: 0x0da2, // XK_Thai_khokhai
0x0e03: 0x0da3, // XK_Thai_khokhuat
@ -894,159 +449,6 @@ var codepoints = {
0x0e57: 0x0df7, // XK_Thai_lekchet
0x0e58: 0x0df8, // XK_Thai_lekpaet
0x0e59: 0x0df9, // XK_Thai_lekkao
0x10d0: 0x10010d0, // XK_Georgian_an
0x10d1: 0x10010d1, // XK_Georgian_ban
0x10d2: 0x10010d2, // XK_Georgian_gan
0x10d3: 0x10010d3, // XK_Georgian_don
0x10d4: 0x10010d4, // XK_Georgian_en
0x10d5: 0x10010d5, // XK_Georgian_vin
0x10d6: 0x10010d6, // XK_Georgian_zen
0x10d7: 0x10010d7, // XK_Georgian_tan
0x10d8: 0x10010d8, // XK_Georgian_in
0x10d9: 0x10010d9, // XK_Georgian_kan
0x10da: 0x10010da, // XK_Georgian_las
0x10db: 0x10010db, // XK_Georgian_man
0x10dc: 0x10010dc, // XK_Georgian_nar
0x10dd: 0x10010dd, // XK_Georgian_on
0x10de: 0x10010de, // XK_Georgian_par
0x10df: 0x10010df, // XK_Georgian_zhar
0x10e0: 0x10010e0, // XK_Georgian_rae
0x10e1: 0x10010e1, // XK_Georgian_san
0x10e2: 0x10010e2, // XK_Georgian_tar
0x10e3: 0x10010e3, // XK_Georgian_un
0x10e4: 0x10010e4, // XK_Georgian_phar
0x10e5: 0x10010e5, // XK_Georgian_khar
0x10e6: 0x10010e6, // XK_Georgian_ghan
0x10e7: 0x10010e7, // XK_Georgian_qar
0x10e8: 0x10010e8, // XK_Georgian_shin
0x10e9: 0x10010e9, // XK_Georgian_chin
0x10ea: 0x10010ea, // XK_Georgian_can
0x10eb: 0x10010eb, // XK_Georgian_jil
0x10ec: 0x10010ec, // XK_Georgian_cil
0x10ed: 0x10010ed, // XK_Georgian_char
0x10ee: 0x10010ee, // XK_Georgian_xan
0x10ef: 0x10010ef, // XK_Georgian_jhan
0x10f0: 0x10010f0, // XK_Georgian_hae
0x10f1: 0x10010f1, // XK_Georgian_he
0x10f2: 0x10010f2, // XK_Georgian_hie
0x10f3: 0x10010f3, // XK_Georgian_we
0x10f4: 0x10010f4, // XK_Georgian_har
0x10f5: 0x10010f5, // XK_Georgian_hoe
0x10f6: 0x10010f6, // XK_Georgian_fi
0x1e02: 0x1001e02, // XK_Babovedot
0x1e03: 0x1001e03, // XK_babovedot
0x1e0a: 0x1001e0a, // XK_Dabovedot
0x1e0b: 0x1001e0b, // XK_dabovedot
0x1e1e: 0x1001e1e, // XK_Fabovedot
0x1e1f: 0x1001e1f, // XK_fabovedot
0x1e36: 0x1001e36, // XK_Lbelowdot
0x1e37: 0x1001e37, // XK_lbelowdot
0x1e40: 0x1001e40, // XK_Mabovedot
0x1e41: 0x1001e41, // XK_mabovedot
0x1e56: 0x1001e56, // XK_Pabovedot
0x1e57: 0x1001e57, // XK_pabovedot
0x1e60: 0x1001e60, // XK_Sabovedot
0x1e61: 0x1001e61, // XK_sabovedot
0x1e6a: 0x1001e6a, // XK_Tabovedot
0x1e6b: 0x1001e6b, // XK_tabovedot
0x1e80: 0x1001e80, // XK_Wgrave
0x1e81: 0x1001e81, // XK_wgrave
0x1e82: 0x1001e82, // XK_Wacute
0x1e83: 0x1001e83, // XK_wacute
0x1e84: 0x1001e84, // XK_Wdiaeresis
0x1e85: 0x1001e85, // XK_wdiaeresis
0x1e8a: 0x1001e8a, // XK_Xabovedot
0x1e8b: 0x1001e8b, // XK_xabovedot
0x1ea0: 0x1001ea0, // XK_Abelowdot
0x1ea1: 0x1001ea1, // XK_abelowdot
0x1ea2: 0x1001ea2, // XK_Ahook
0x1ea3: 0x1001ea3, // XK_ahook
0x1ea4: 0x1001ea4, // XK_Acircumflexacute
0x1ea5: 0x1001ea5, // XK_acircumflexacute
0x1ea6: 0x1001ea6, // XK_Acircumflexgrave
0x1ea7: 0x1001ea7, // XK_acircumflexgrave
0x1ea8: 0x1001ea8, // XK_Acircumflexhook
0x1ea9: 0x1001ea9, // XK_acircumflexhook
0x1eaa: 0x1001eaa, // XK_Acircumflextilde
0x1eab: 0x1001eab, // XK_acircumflextilde
0x1eac: 0x1001eac, // XK_Acircumflexbelowdot
0x1ead: 0x1001ead, // XK_acircumflexbelowdot
0x1eae: 0x1001eae, // XK_Abreveacute
0x1eaf: 0x1001eaf, // XK_abreveacute
0x1eb0: 0x1001eb0, // XK_Abrevegrave
0x1eb1: 0x1001eb1, // XK_abrevegrave
0x1eb2: 0x1001eb2, // XK_Abrevehook
0x1eb3: 0x1001eb3, // XK_abrevehook
0x1eb4: 0x1001eb4, // XK_Abrevetilde
0x1eb5: 0x1001eb5, // XK_abrevetilde
0x1eb6: 0x1001eb6, // XK_Abrevebelowdot
0x1eb7: 0x1001eb7, // XK_abrevebelowdot
0x1eb8: 0x1001eb8, // XK_Ebelowdot
0x1eb9: 0x1001eb9, // XK_ebelowdot
0x1eba: 0x1001eba, // XK_Ehook
0x1ebb: 0x1001ebb, // XK_ehook
0x1ebc: 0x1001ebc, // XK_Etilde
0x1ebd: 0x1001ebd, // XK_etilde
0x1ebe: 0x1001ebe, // XK_Ecircumflexacute
0x1ebf: 0x1001ebf, // XK_ecircumflexacute
0x1ec0: 0x1001ec0, // XK_Ecircumflexgrave
0x1ec1: 0x1001ec1, // XK_ecircumflexgrave
0x1ec2: 0x1001ec2, // XK_Ecircumflexhook
0x1ec3: 0x1001ec3, // XK_ecircumflexhook
0x1ec4: 0x1001ec4, // XK_Ecircumflextilde
0x1ec5: 0x1001ec5, // XK_ecircumflextilde
0x1ec6: 0x1001ec6, // XK_Ecircumflexbelowdot
0x1ec7: 0x1001ec7, // XK_ecircumflexbelowdot
0x1ec8: 0x1001ec8, // XK_Ihook
0x1ec9: 0x1001ec9, // XK_ihook
0x1eca: 0x1001eca, // XK_Ibelowdot
0x1ecb: 0x1001ecb, // XK_ibelowdot
0x1ecc: 0x1001ecc, // XK_Obelowdot
0x1ecd: 0x1001ecd, // XK_obelowdot
0x1ece: 0x1001ece, // XK_Ohook
0x1ecf: 0x1001ecf, // XK_ohook
0x1ed0: 0x1001ed0, // XK_Ocircumflexacute
0x1ed1: 0x1001ed1, // XK_ocircumflexacute
0x1ed2: 0x1001ed2, // XK_Ocircumflexgrave
0x1ed3: 0x1001ed3, // XK_ocircumflexgrave
0x1ed4: 0x1001ed4, // XK_Ocircumflexhook
0x1ed5: 0x1001ed5, // XK_ocircumflexhook
0x1ed6: 0x1001ed6, // XK_Ocircumflextilde
0x1ed7: 0x1001ed7, // XK_ocircumflextilde
0x1ed8: 0x1001ed8, // XK_Ocircumflexbelowdot
0x1ed9: 0x1001ed9, // XK_ocircumflexbelowdot
0x1eda: 0x1001eda, // XK_Ohornacute
0x1edb: 0x1001edb, // XK_ohornacute
0x1edc: 0x1001edc, // XK_Ohorngrave
0x1edd: 0x1001edd, // XK_ohorngrave
0x1ede: 0x1001ede, // XK_Ohornhook
0x1edf: 0x1001edf, // XK_ohornhook
0x1ee0: 0x1001ee0, // XK_Ohorntilde
0x1ee1: 0x1001ee1, // XK_ohorntilde
0x1ee2: 0x1001ee2, // XK_Ohornbelowdot
0x1ee3: 0x1001ee3, // XK_ohornbelowdot
0x1ee4: 0x1001ee4, // XK_Ubelowdot
0x1ee5: 0x1001ee5, // XK_ubelowdot
0x1ee6: 0x1001ee6, // XK_Uhook
0x1ee7: 0x1001ee7, // XK_uhook
0x1ee8: 0x1001ee8, // XK_Uhornacute
0x1ee9: 0x1001ee9, // XK_uhornacute
0x1eea: 0x1001eea, // XK_Uhorngrave
0x1eeb: 0x1001eeb, // XK_uhorngrave
0x1eec: 0x1001eec, // XK_Uhornhook
0x1eed: 0x1001eed, // XK_uhornhook
0x1eee: 0x1001eee, // XK_Uhorntilde
0x1eef: 0x1001eef, // XK_uhorntilde
0x1ef0: 0x1001ef0, // XK_Uhornbelowdot
0x1ef1: 0x1001ef1, // XK_uhornbelowdot
0x1ef2: 0x1001ef2, // XK_Ygrave
0x1ef3: 0x1001ef3, // XK_ygrave
0x1ef4: 0x1001ef4, // XK_Ybelowdot
0x1ef5: 0x1001ef5, // XK_ybelowdot
0x1ef6: 0x1001ef6, // XK_Yhook
0x1ef7: 0x1001ef7, // XK_yhook
0x1ef8: 0x1001ef8, // XK_Ytilde
0x1ef9: 0x1001ef9, // XK_ytilde
0x2002: 0x0aa2, // XK_enspace
0x2003: 0x0aa1, // XK_emspace
0x2004: 0x0aa3, // XK_em3space
@ -1076,35 +478,7 @@ var codepoints = {
0x2033: 0x0ad7, // XK_seconds
0x2038: 0x0afc, // XK_caret
0x203e: 0x047e, // XK_overline
0x2070: 0x1002070, // XK_zerosuperior
0x2074: 0x1002074, // XK_foursuperior
0x2075: 0x1002075, // XK_fivesuperior
0x2076: 0x1002076, // XK_sixsuperior
0x2077: 0x1002077, // XK_sevensuperior
0x2078: 0x1002078, // XK_eightsuperior
0x2079: 0x1002079, // XK_ninesuperior
0x2080: 0x1002080, // XK_zerosubscript
0x2081: 0x1002081, // XK_onesubscript
0x2082: 0x1002082, // XK_twosubscript
0x2083: 0x1002083, // XK_threesubscript
0x2084: 0x1002084, // XK_foursubscript
0x2085: 0x1002085, // XK_fivesubscript
0x2086: 0x1002086, // XK_sixsubscript
0x2087: 0x1002087, // XK_sevensubscript
0x2088: 0x1002088, // XK_eightsubscript
0x2089: 0x1002089, // XK_ninesubscript
0x20a0: 0x10020a0, // XK_EcuSign
0x20a1: 0x10020a1, // XK_ColonSign
0x20a2: 0x10020a2, // XK_CruzeiroSign
0x20a3: 0x10020a3, // XK_FFrancSign
0x20a4: 0x10020a4, // XK_LiraSign
0x20a5: 0x10020a5, // XK_MillSign
0x20a6: 0x10020a6, // XK_NairaSign
0x20a7: 0x10020a7, // XK_PesetaSign
0x20a8: 0x10020a8, // XK_RupeeSign
0x20a9: 0x0eff, // XK_Korean_Won
0x20aa: 0x10020aa, // XK_NewSheqelSign
0x20ab: 0x10020ab, // XK_DongSign
0x20ac: 0x20ac, // XK_EuroSign
0x2105: 0x0ab8, // XK_careof
0x2116: 0x06b0, // XK_numerosign
@ -1130,15 +504,9 @@ var codepoints = {
0x21d2: 0x08ce, // XK_implies
0x21d4: 0x08cd, // XK_ifonlyif
0x2202: 0x08ef, // XK_partialderivative
0x2205: 0x1002205, // XK_emptyset
0x2207: 0x08c5, // XK_nabla
0x2208: 0x1002208, // XK_elementof
0x2209: 0x1002209, // XK_notelementof
0x220b: 0x100220b, // XK_containsas
0x2218: 0x0bca, // XK_jot
0x221a: 0x08d6, // XK_radical
0x221b: 0x100221b, // XK_cuberoot
0x221c: 0x100221c, // XK_fourthroot
0x221d: 0x08c1, // XK_variation
0x221e: 0x08c2, // XK_infinity
0x2227: 0x08de, // XK_logicaland
@ -1146,18 +514,12 @@ var codepoints = {
0x2229: 0x08dc, // XK_intersection
0x222a: 0x08dd, // XK_union
0x222b: 0x08bf, // XK_integral
0x222c: 0x100222c, // XK_dintegral
0x222d: 0x100222d, // XK_tintegral
0x2234: 0x08c0, // XK_therefore
0x2235: 0x1002235, // XK_because
0x223c: 0x08c8, // XK_approximate
0x2243: 0x08c9, // XK_similarequal
0x2245: 0x1002248, // XK_approxeq
0x2247: 0x1002247, // XK_notapproxeq
0x2260: 0x08bd, // XK_notequal
0x2261: 0x08cf, // XK_identical
0x2262: 0x1002262, // XK_notidentical
0x2263: 0x1002263, // XK_stricteq
0x2264: 0x08bc, // XK_lessthanequal
0x2265: 0x08be, // XK_greaterthanequal
0x2282: 0x08da, // XK_includedin
@ -1242,262 +604,6 @@ var codepoints = {
0x2720: 0x0af0, // XK_maltesecross
0x27e8: 0x0abc, // XK_leftanglebracket
0x27e9: 0x0abe, // XK_rightanglebracket
0x2800: 0x1002800, // XK_braille_blank
0x2801: 0x1002801, // XK_braille_dots_1
0x2802: 0x1002802, // XK_braille_dots_2
0x2803: 0x1002803, // XK_braille_dots_12
0x2804: 0x1002804, // XK_braille_dots_3
0x2805: 0x1002805, // XK_braille_dots_13
0x2806: 0x1002806, // XK_braille_dots_23
0x2807: 0x1002807, // XK_braille_dots_123
0x2808: 0x1002808, // XK_braille_dots_4
0x2809: 0x1002809, // XK_braille_dots_14
0x280a: 0x100280a, // XK_braille_dots_24
0x280b: 0x100280b, // XK_braille_dots_124
0x280c: 0x100280c, // XK_braille_dots_34
0x280d: 0x100280d, // XK_braille_dots_134
0x280e: 0x100280e, // XK_braille_dots_234
0x280f: 0x100280f, // XK_braille_dots_1234
0x2810: 0x1002810, // XK_braille_dots_5
0x2811: 0x1002811, // XK_braille_dots_15
0x2812: 0x1002812, // XK_braille_dots_25
0x2813: 0x1002813, // XK_braille_dots_125
0x2814: 0x1002814, // XK_braille_dots_35
0x2815: 0x1002815, // XK_braille_dots_135
0x2816: 0x1002816, // XK_braille_dots_235
0x2817: 0x1002817, // XK_braille_dots_1235
0x2818: 0x1002818, // XK_braille_dots_45
0x2819: 0x1002819, // XK_braille_dots_145
0x281a: 0x100281a, // XK_braille_dots_245
0x281b: 0x100281b, // XK_braille_dots_1245
0x281c: 0x100281c, // XK_braille_dots_345
0x281d: 0x100281d, // XK_braille_dots_1345
0x281e: 0x100281e, // XK_braille_dots_2345
0x281f: 0x100281f, // XK_braille_dots_12345
0x2820: 0x1002820, // XK_braille_dots_6
0x2821: 0x1002821, // XK_braille_dots_16
0x2822: 0x1002822, // XK_braille_dots_26
0x2823: 0x1002823, // XK_braille_dots_126
0x2824: 0x1002824, // XK_braille_dots_36
0x2825: 0x1002825, // XK_braille_dots_136
0x2826: 0x1002826, // XK_braille_dots_236
0x2827: 0x1002827, // XK_braille_dots_1236
0x2828: 0x1002828, // XK_braille_dots_46
0x2829: 0x1002829, // XK_braille_dots_146
0x282a: 0x100282a, // XK_braille_dots_246
0x282b: 0x100282b, // XK_braille_dots_1246
0x282c: 0x100282c, // XK_braille_dots_346
0x282d: 0x100282d, // XK_braille_dots_1346
0x282e: 0x100282e, // XK_braille_dots_2346
0x282f: 0x100282f, // XK_braille_dots_12346
0x2830: 0x1002830, // XK_braille_dots_56
0x2831: 0x1002831, // XK_braille_dots_156
0x2832: 0x1002832, // XK_braille_dots_256
0x2833: 0x1002833, // XK_braille_dots_1256
0x2834: 0x1002834, // XK_braille_dots_356
0x2835: 0x1002835, // XK_braille_dots_1356
0x2836: 0x1002836, // XK_braille_dots_2356
0x2837: 0x1002837, // XK_braille_dots_12356
0x2838: 0x1002838, // XK_braille_dots_456
0x2839: 0x1002839, // XK_braille_dots_1456
0x283a: 0x100283a, // XK_braille_dots_2456
0x283b: 0x100283b, // XK_braille_dots_12456
0x283c: 0x100283c, // XK_braille_dots_3456
0x283d: 0x100283d, // XK_braille_dots_13456
0x283e: 0x100283e, // XK_braille_dots_23456
0x283f: 0x100283f, // XK_braille_dots_123456
0x2840: 0x1002840, // XK_braille_dots_7
0x2841: 0x1002841, // XK_braille_dots_17
0x2842: 0x1002842, // XK_braille_dots_27
0x2843: 0x1002843, // XK_braille_dots_127
0x2844: 0x1002844, // XK_braille_dots_37
0x2845: 0x1002845, // XK_braille_dots_137
0x2846: 0x1002846, // XK_braille_dots_237
0x2847: 0x1002847, // XK_braille_dots_1237
0x2848: 0x1002848, // XK_braille_dots_47
0x2849: 0x1002849, // XK_braille_dots_147
0x284a: 0x100284a, // XK_braille_dots_247
0x284b: 0x100284b, // XK_braille_dots_1247
0x284c: 0x100284c, // XK_braille_dots_347
0x284d: 0x100284d, // XK_braille_dots_1347
0x284e: 0x100284e, // XK_braille_dots_2347
0x284f: 0x100284f, // XK_braille_dots_12347
0x2850: 0x1002850, // XK_braille_dots_57
0x2851: 0x1002851, // XK_braille_dots_157
0x2852: 0x1002852, // XK_braille_dots_257
0x2853: 0x1002853, // XK_braille_dots_1257
0x2854: 0x1002854, // XK_braille_dots_357
0x2855: 0x1002855, // XK_braille_dots_1357
0x2856: 0x1002856, // XK_braille_dots_2357
0x2857: 0x1002857, // XK_braille_dots_12357
0x2858: 0x1002858, // XK_braille_dots_457
0x2859: 0x1002859, // XK_braille_dots_1457
0x285a: 0x100285a, // XK_braille_dots_2457
0x285b: 0x100285b, // XK_braille_dots_12457
0x285c: 0x100285c, // XK_braille_dots_3457
0x285d: 0x100285d, // XK_braille_dots_13457
0x285e: 0x100285e, // XK_braille_dots_23457
0x285f: 0x100285f, // XK_braille_dots_123457
0x2860: 0x1002860, // XK_braille_dots_67
0x2861: 0x1002861, // XK_braille_dots_167
0x2862: 0x1002862, // XK_braille_dots_267
0x2863: 0x1002863, // XK_braille_dots_1267
0x2864: 0x1002864, // XK_braille_dots_367
0x2865: 0x1002865, // XK_braille_dots_1367
0x2866: 0x1002866, // XK_braille_dots_2367
0x2867: 0x1002867, // XK_braille_dots_12367
0x2868: 0x1002868, // XK_braille_dots_467
0x2869: 0x1002869, // XK_braille_dots_1467
0x286a: 0x100286a, // XK_braille_dots_2467
0x286b: 0x100286b, // XK_braille_dots_12467
0x286c: 0x100286c, // XK_braille_dots_3467
0x286d: 0x100286d, // XK_braille_dots_13467
0x286e: 0x100286e, // XK_braille_dots_23467
0x286f: 0x100286f, // XK_braille_dots_123467
0x2870: 0x1002870, // XK_braille_dots_567
0x2871: 0x1002871, // XK_braille_dots_1567
0x2872: 0x1002872, // XK_braille_dots_2567
0x2873: 0x1002873, // XK_braille_dots_12567
0x2874: 0x1002874, // XK_braille_dots_3567
0x2875: 0x1002875, // XK_braille_dots_13567
0x2876: 0x1002876, // XK_braille_dots_23567
0x2877: 0x1002877, // XK_braille_dots_123567
0x2878: 0x1002878, // XK_braille_dots_4567
0x2879: 0x1002879, // XK_braille_dots_14567
0x287a: 0x100287a, // XK_braille_dots_24567
0x287b: 0x100287b, // XK_braille_dots_124567
0x287c: 0x100287c, // XK_braille_dots_34567
0x287d: 0x100287d, // XK_braille_dots_134567
0x287e: 0x100287e, // XK_braille_dots_234567
0x287f: 0x100287f, // XK_braille_dots_1234567
0x2880: 0x1002880, // XK_braille_dots_8
0x2881: 0x1002881, // XK_braille_dots_18
0x2882: 0x1002882, // XK_braille_dots_28
0x2883: 0x1002883, // XK_braille_dots_128
0x2884: 0x1002884, // XK_braille_dots_38
0x2885: 0x1002885, // XK_braille_dots_138
0x2886: 0x1002886, // XK_braille_dots_238
0x2887: 0x1002887, // XK_braille_dots_1238
0x2888: 0x1002888, // XK_braille_dots_48
0x2889: 0x1002889, // XK_braille_dots_148
0x288a: 0x100288a, // XK_braille_dots_248
0x288b: 0x100288b, // XK_braille_dots_1248
0x288c: 0x100288c, // XK_braille_dots_348
0x288d: 0x100288d, // XK_braille_dots_1348
0x288e: 0x100288e, // XK_braille_dots_2348
0x288f: 0x100288f, // XK_braille_dots_12348
0x2890: 0x1002890, // XK_braille_dots_58
0x2891: 0x1002891, // XK_braille_dots_158
0x2892: 0x1002892, // XK_braille_dots_258
0x2893: 0x1002893, // XK_braille_dots_1258
0x2894: 0x1002894, // XK_braille_dots_358
0x2895: 0x1002895, // XK_braille_dots_1358
0x2896: 0x1002896, // XK_braille_dots_2358
0x2897: 0x1002897, // XK_braille_dots_12358
0x2898: 0x1002898, // XK_braille_dots_458
0x2899: 0x1002899, // XK_braille_dots_1458
0x289a: 0x100289a, // XK_braille_dots_2458
0x289b: 0x100289b, // XK_braille_dots_12458
0x289c: 0x100289c, // XK_braille_dots_3458
0x289d: 0x100289d, // XK_braille_dots_13458
0x289e: 0x100289e, // XK_braille_dots_23458
0x289f: 0x100289f, // XK_braille_dots_123458
0x28a0: 0x10028a0, // XK_braille_dots_68
0x28a1: 0x10028a1, // XK_braille_dots_168
0x28a2: 0x10028a2, // XK_braille_dots_268
0x28a3: 0x10028a3, // XK_braille_dots_1268
0x28a4: 0x10028a4, // XK_braille_dots_368
0x28a5: 0x10028a5, // XK_braille_dots_1368
0x28a6: 0x10028a6, // XK_braille_dots_2368
0x28a7: 0x10028a7, // XK_braille_dots_12368
0x28a8: 0x10028a8, // XK_braille_dots_468
0x28a9: 0x10028a9, // XK_braille_dots_1468
0x28aa: 0x10028aa, // XK_braille_dots_2468
0x28ab: 0x10028ab, // XK_braille_dots_12468
0x28ac: 0x10028ac, // XK_braille_dots_3468
0x28ad: 0x10028ad, // XK_braille_dots_13468
0x28ae: 0x10028ae, // XK_braille_dots_23468
0x28af: 0x10028af, // XK_braille_dots_123468
0x28b0: 0x10028b0, // XK_braille_dots_568
0x28b1: 0x10028b1, // XK_braille_dots_1568
0x28b2: 0x10028b2, // XK_braille_dots_2568
0x28b3: 0x10028b3, // XK_braille_dots_12568
0x28b4: 0x10028b4, // XK_braille_dots_3568
0x28b5: 0x10028b5, // XK_braille_dots_13568
0x28b6: 0x10028b6, // XK_braille_dots_23568
0x28b7: 0x10028b7, // XK_braille_dots_123568
0x28b8: 0x10028b8, // XK_braille_dots_4568
0x28b9: 0x10028b9, // XK_braille_dots_14568
0x28ba: 0x10028ba, // XK_braille_dots_24568
0x28bb: 0x10028bb, // XK_braille_dots_124568
0x28bc: 0x10028bc, // XK_braille_dots_34568
0x28bd: 0x10028bd, // XK_braille_dots_134568
0x28be: 0x10028be, // XK_braille_dots_234568
0x28bf: 0x10028bf, // XK_braille_dots_1234568
0x28c0: 0x10028c0, // XK_braille_dots_78
0x28c1: 0x10028c1, // XK_braille_dots_178
0x28c2: 0x10028c2, // XK_braille_dots_278
0x28c3: 0x10028c3, // XK_braille_dots_1278
0x28c4: 0x10028c4, // XK_braille_dots_378
0x28c5: 0x10028c5, // XK_braille_dots_1378
0x28c6: 0x10028c6, // XK_braille_dots_2378
0x28c7: 0x10028c7, // XK_braille_dots_12378
0x28c8: 0x10028c8, // XK_braille_dots_478
0x28c9: 0x10028c9, // XK_braille_dots_1478
0x28ca: 0x10028ca, // XK_braille_dots_2478
0x28cb: 0x10028cb, // XK_braille_dots_12478
0x28cc: 0x10028cc, // XK_braille_dots_3478
0x28cd: 0x10028cd, // XK_braille_dots_13478
0x28ce: 0x10028ce, // XK_braille_dots_23478
0x28cf: 0x10028cf, // XK_braille_dots_123478
0x28d0: 0x10028d0, // XK_braille_dots_578
0x28d1: 0x10028d1, // XK_braille_dots_1578
0x28d2: 0x10028d2, // XK_braille_dots_2578
0x28d3: 0x10028d3, // XK_braille_dots_12578
0x28d4: 0x10028d4, // XK_braille_dots_3578
0x28d5: 0x10028d5, // XK_braille_dots_13578
0x28d6: 0x10028d6, // XK_braille_dots_23578
0x28d7: 0x10028d7, // XK_braille_dots_123578
0x28d8: 0x10028d8, // XK_braille_dots_4578
0x28d9: 0x10028d9, // XK_braille_dots_14578
0x28da: 0x10028da, // XK_braille_dots_24578
0x28db: 0x10028db, // XK_braille_dots_124578
0x28dc: 0x10028dc, // XK_braille_dots_34578
0x28dd: 0x10028dd, // XK_braille_dots_134578
0x28de: 0x10028de, // XK_braille_dots_234578
0x28df: 0x10028df, // XK_braille_dots_1234578
0x28e0: 0x10028e0, // XK_braille_dots_678
0x28e1: 0x10028e1, // XK_braille_dots_1678
0x28e2: 0x10028e2, // XK_braille_dots_2678
0x28e3: 0x10028e3, // XK_braille_dots_12678
0x28e4: 0x10028e4, // XK_braille_dots_3678
0x28e5: 0x10028e5, // XK_braille_dots_13678
0x28e6: 0x10028e6, // XK_braille_dots_23678
0x28e7: 0x10028e7, // XK_braille_dots_123678
0x28e8: 0x10028e8, // XK_braille_dots_4678
0x28e9: 0x10028e9, // XK_braille_dots_14678
0x28ea: 0x10028ea, // XK_braille_dots_24678
0x28eb: 0x10028eb, // XK_braille_dots_124678
0x28ec: 0x10028ec, // XK_braille_dots_34678
0x28ed: 0x10028ed, // XK_braille_dots_134678
0x28ee: 0x10028ee, // XK_braille_dots_234678
0x28ef: 0x10028ef, // XK_braille_dots_1234678
0x28f0: 0x10028f0, // XK_braille_dots_5678
0x28f1: 0x10028f1, // XK_braille_dots_15678
0x28f2: 0x10028f2, // XK_braille_dots_25678
0x28f3: 0x10028f3, // XK_braille_dots_125678
0x28f4: 0x10028f4, // XK_braille_dots_35678
0x28f5: 0x10028f5, // XK_braille_dots_135678
0x28f6: 0x10028f6, // XK_braille_dots_235678
0x28f7: 0x10028f7, // XK_braille_dots_1235678
0x28f8: 0x10028f8, // XK_braille_dots_45678
0x28f9: 0x10028f9, // XK_braille_dots_145678
0x28fa: 0x10028fa, // XK_braille_dots_245678
0x28fb: 0x10028fb, // XK_braille_dots_1245678
0x28fc: 0x10028fc, // XK_braille_dots_345678
0x28fd: 0x10028fd, // XK_braille_dots_1345678
0x28fe: 0x10028fe, // XK_braille_dots_2345678
0x28ff: 0x10028ff, // XK_braille_dots_12345678
0x3001: 0x04a4, // XK_kana_comma
0x3002: 0x04a1, // XK_kana_fullstop
0x300c: 0x04a2, // XK_kana_openingbracket
@ -1565,10 +671,18 @@ var codepoints = {
export default {
lookup : function(u) {
var keysym = codepoints[u];
if (keysym === undefined) {
keysym = 0x01000000 | u;
// Latin-1 is one-to-one mapping
if ((u >= 0x20) && (u <= 0xff)) {
return u;
}
return keysym;
// Lookup table (fairly random)
var keysym = codepoints[u];
if (keysym !== undefined) {
return keysym;
}
// General mapping as final fallback
return 0x01000000 | u;
},
};

View File

@ -37,7 +37,7 @@ describe('Helpers', function() {
expect(keysyms.lookup('Š'.charCodeAt())).to.be.equal(0x01a9);
});
it('should map characters which aren\'t in Latin1 *or* Windows-1252 to keysyms', function() {
expect(keysyms.lookup('ŵ'.charCodeAt())).to.be.equal(0x1000175);
expect(keysyms.lookup('ũ'.charCodeAt())).to.be.equal(0x03fd);
});
it('should map unknown codepoints to the Unicode range', function() {
expect(keysyms.lookup('\n'.charCodeAt())).to.be.equal(0x100000a);

View File

@ -87,7 +87,19 @@ function toHex(num) {
};
for (var codepoint in codepoints) {
out += " " + toHex(parseInt(codepoint)) + ": " +
codepoint = parseInt(codepoint);
// Latin-1?
if ((codepoint >= 0x20) && (codepoint <= 0xff)) {
continue;
}
// Handled by the general Unicode mapping?
if ((codepoint | 0x01000000) === codepoints[codepoint].keysym) {
continue;
}
out += " " + toHex(codepoint) + ": " +
toHex(codepoints[codepoint].keysym) +
", // XK_" + codepoints[codepoint].name + "\n";
}
@ -97,11 +109,19 @@ out +=
"\n" +
"export default {\n" +
" lookup : function(u) {\n" +
" var keysym = codepoints[u];\n" +
" if (keysym === undefined) {\n" +
" keysym = 0x01000000 | u;\n" +
" // Latin-1 is one-to-one mapping\n" +
" if ((u >= 0x20) && (u <= 0xff)) {\n" +
" return u;\n" +
" }\n" +
" return keysym;\n" +
"\n" +
" // Lookup table (fairly random)\n" +
" var keysym = codepoints[u];\n" +
" if (keysym !== undefined) {\n" +
" return keysym;\n" +
" }\n" +
"\n" +
" // General mapping as final fallback\n" +
" return 0x01000000 | u;\n" +
" },\n" +
"};";