From c7aef1664922b47cdc8ea06513d0e1898889bfe3 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Tue, 19 Feb 2013 15:57:14 +0200 Subject: [PATCH] keysym: print unicode keysyms uppercase and 0-padded Use the same format as XKeysymToString. Signed-off-by: Ran Benita --- src/keysym.c | 8 ++++--- test/data/keymaps/stringcomp.data | 48 +++++++++++++++++++-------------------- test/keysym.c | 4 ++++ xkbcommon/xkbcommon.h | 2 +- 4 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/keysym.c b/src/keysym.c index f80a1ed..1e92a4a 100644 --- a/src/keysym.c +++ b/src/keysym.c @@ -85,9 +85,11 @@ xkb_keysym_get_name(xkb_keysym_t ks, char *buffer, size_t size) if (entry) return snprintf(buffer, size, "%s", entry->name); - if (ks >= 0x01000100 && ks <= 0x0110ffff) - /* Unnamed Unicode codepoint. */ - return snprintf(buffer, size, "U%lx", ks & 0xffffffUL); + /* Unnamed Unicode codepoint. */ + if (ks >= 0x01000100 && ks <= 0x0110ffff) { + const int width = (ks & 0xff0000UL) ? 8 : 4; + return snprintf(buffer, size, "U%0*lX", width, ks & 0xffffffUL); + } /* Unnamed, non-Unicode, symbol (shouldn't generally happen). */ return snprintf(buffer, size, "0x%08x", ks); diff --git a/test/data/keymaps/stringcomp.data b/test/data/keymaps/stringcomp.data index 449b06b..fb0c7f2 100644 --- a/test/data/keymaps/stringcomp.data +++ b/test/data/keymaps/stringcomp.data @@ -1110,7 +1110,7 @@ xkb_keymap { symbols[Group1]= [ 4, dollar ], symbols[Group2]= [ 4, semicolon ], symbols[Group3]= [ 4, dollar, cent, NoSymbol, onequarter, currency, NoSymbol, NoSymbol ], - symbols[Group4]= [ 4, guillemotright, U203a, femalesymbol, NoSymbol, NoSymbol, U22a5, NoSymbol ] + symbols[Group4]= [ 4, guillemotright, U203A, femalesymbol, NoSymbol, NoSymbol, U22A5, NoSymbol ] }; key { type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC", @@ -1126,7 +1126,7 @@ xkb_keymap { symbols[Group1]= [ { H, E, L, L, O }, asciicircum ], symbols[Group2]= [ 6, colon ], symbols[Group3]= [ 6, question, notsign, NoSymbol, threequarters, fiveeighths, NoSymbol, NoSymbol ], - symbols[Group4]= [ 6, dollar, cent, U26a5, sterling, NoSymbol, U2225, NoSymbol ] + symbols[Group4]= [ 6, dollar, cent, U26A5, sterling, NoSymbol, U2225, NoSymbol ] }; key { type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC", @@ -1134,7 +1134,7 @@ xkb_keymap { symbols[Group1]= [ { Y, E, S, space, T, H, I, S, space, I, S, space, D, O, G }, ampersand ], symbols[Group2]= [ 7, question ], symbols[Group3]= [ 7, ampersand, braceleft, NoSymbol, NoSymbol, seveneighths, NoSymbol, NoSymbol ], - symbols[Group4]= [ 7, EuroSign, yen, U3f0, currency, NoSymbol, rightarrow, NoSymbol ] + symbols[Group4]= [ 7, EuroSign, yen, U03F0, currency, NoSymbol, rightarrow, NoSymbol ] }; key { type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC", @@ -1142,7 +1142,7 @@ xkb_keymap { symbols[Group1]= [ 8, asterisk ], symbols[Group2]= [ 8, asterisk ], symbols[Group3]= [ 8, asterisk, braceright, NoSymbol, NoSymbol, trademark, NoSymbol, NoSymbol ], - symbols[Group4]= [ 8, doublelowquotemark, singlelowquotemark, U27e8, Tab, ISO_Left_Tab, U221e, NoSymbol ] + symbols[Group4]= [ 8, doublelowquotemark, singlelowquotemark, U27E8, Tab, ISO_Left_Tab, U221E, NoSymbol ] }; key { type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC", @@ -1150,7 +1150,7 @@ xkb_keymap { symbols[Group1]= [ 9, parenleft ], symbols[Group2]= [ 9, parenleft ], symbols[Group3]= [ 9, parenleft, bracketleft, NoSymbol, NoSymbol, plusminus, NoSymbol, NoSymbol ], - symbols[Group4]= [ 9, leftdoublequotemark, leftsinglequotemark, U27e9, KP_Divide, KP_Divide, variation, NoSymbol ] + symbols[Group4]= [ 9, leftdoublequotemark, leftsinglequotemark, U27E9, KP_Divide, KP_Divide, variation, NoSymbol ] }; key { type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC", @@ -1282,7 +1282,7 @@ xkb_keymap { symbols[Group1]= [ p, P ], symbols[Group2]= [ Cyrillic_ze, Cyrillic_ZE ], symbols[Group3]= [ p, P, paragraph, NoSymbol, thorn, THORN, NoSymbol, NoSymbol ], - symbols[Group4]= [ q, Q, ampersand, U3d5, KP_Add, KP_Add, U211a, NoSymbol ] + symbols[Group4]= [ q, Q, ampersand, U03D5, KP_Add, KP_Add, U211A, NoSymbol ] }; key { type[group2]= "ALPHABETIC", @@ -1291,7 +1291,7 @@ xkb_keymap { symbols[Group1]= [ bracketleft, braceleft ], symbols[Group2]= [ Cyrillic_ha, Cyrillic_HA ], symbols[Group3]= [ dead_circumflex, dead_diaeresis, dead_grave, NoSymbol, NoSymbol, dead_abovering, NoSymbol, NoSymbol ], - symbols[Group4]= [ ssharp, U1e9e, U17f, Greek_finalsmallsigma, U2212, NoSymbol, jot, NoSymbol ] + symbols[Group4]= [ ssharp, U1E9E, U017F, Greek_finalsmallsigma, U2212, NoSymbol, jot, NoSymbol ] }; key { type[group2]= "ALPHABETIC", @@ -1371,7 +1371,7 @@ xkb_keymap { type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC", symbols[Group1]= [ j, J ], symbols[Group2]= [ Cyrillic_o, Cyrillic_O ], - symbols[Group3]= [ j, J, NoSymbol, NoSymbol, U133, U132, NoSymbol, NoSymbol ], + symbols[Group3]= [ j, J, NoSymbol, NoSymbol, U0133, U0132, NoSymbol, NoSymbol ], symbols[Group4]= [ n, N, parenleft, Greek_nu, KP_4, KP_4, U2115, NoSymbol ] }; key { @@ -1382,7 +1382,7 @@ xkb_keymap { symbols[Group1]= [ k, K ], symbols[Group2]= [ Cyrillic_el, Cyrillic_EL ], symbols[Group3]= [ k, K, NoSymbol, NoSymbol, kra, NoSymbol, NoSymbol, NoSymbol ], - symbols[Group4]= [ r, R, parenright, Greek_rho, KP_5, KP_5, U211d, NoSymbol ] + symbols[Group4]= [ r, R, parenright, Greek_rho, KP_5, KP_5, U211D, NoSymbol ] }; key { type[group1]= "ALPHABETIC", @@ -1391,7 +1391,7 @@ xkb_keymap { type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC", symbols[Group1]= [ l, L ], symbols[Group2]= [ Cyrillic_de, Cyrillic_DE ], - symbols[Group3]= [ l, L, NoSymbol, NoSymbol, U140, U13f, NoSymbol, NoSymbol ], + symbols[Group3]= [ l, L, NoSymbol, NoSymbol, U0140, U013F, NoSymbol, NoSymbol ], symbols[Group4]= [ t, T, minus, Greek_tau, KP_6, KP_6, partialderivative, NoSymbol ] }; key { @@ -1419,7 +1419,7 @@ xkb_keymap { symbols[Group1]= [ grave, asciitilde ], symbols[Group2]= [ Cyrillic_io, Cyrillic_IO ], symbols[Group3]= [ slash, backslash, bar, NoSymbol, NoSymbol, hyphen, NoSymbol, NoSymbol ], - symbols[Group4]= [ dead_circumflex, dead_caron, U21bb, U2de, dead_abovedot, Pointer_EnableKeys, dead_belowdot, NoSymbol ] + symbols[Group4]= [ dead_circumflex, dead_caron, U21BB, U02DE, dead_abovedot, Pointer_EnableKeys, dead_belowdot, NoSymbol ] }; key { type[group4]= "TWO_LEVEL", @@ -1454,7 +1454,7 @@ xkb_keymap { symbols[Group1]= [ x, X ], symbols[Group2]= [ Cyrillic_che, Cyrillic_CHE ], symbols[Group3]= [ x, X, guillemotright, NoSymbol ], - symbols[Group4]= [ odiaeresis, Odiaeresis, dollar, U3f5, Tab, Tab, intersection, NoSymbol ] + symbols[Group4]= [ odiaeresis, Odiaeresis, dollar, U03F5, Tab, Tab, intersection, NoSymbol ] }; key { type[group1]= "ALPHABETIC", @@ -1493,8 +1493,8 @@ xkb_keymap { type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC", symbols[Group1]= [ n, N ], symbols[Group2]= [ Cyrillic_te, Cyrillic_TE ], - symbols[Group3]= [ n, N, NoSymbol, NoSymbol, U149, U266a, NoSymbol, NoSymbol ], - symbols[Group4]= [ b, B, plus, Greek_beta, colon, NoSymbol, U21d0, NoSymbol ] + symbols[Group3]= [ n, N, NoSymbol, NoSymbol, U0149, U266A, NoSymbol, NoSymbol ], + symbols[Group4]= [ b, B, plus, Greek_beta, colon, NoSymbol, U21D0, NoSymbol ] }; key { type[group1]= "ALPHABETIC", @@ -1513,7 +1513,7 @@ xkb_keymap { symbols[Group1]= [ comma, less ], symbols[Group2]= [ Cyrillic_be, Cyrillic_BE ], symbols[Group3]= [ comma, apostrophe, less, NoSymbol, Greek_horizbar, multiply, NoSymbol, NoSymbol ], - symbols[Group4]= [ comma, endash, quotedbl, U3f1, KP_2, KP_2, U21d2, NoSymbol ] + symbols[Group4]= [ comma, endash, quotedbl, U03F1, KP_2, KP_2, U21D2, NoSymbol ] }; key { type[group2]= "ALPHABETIC", @@ -1522,7 +1522,7 @@ xkb_keymap { symbols[Group1]= [ period, greater ], symbols[Group2]= [ Cyrillic_yu, Cyrillic_YU ], symbols[Group3]= [ period, quotedbl, greater, NoSymbol, periodcentered, division, NoSymbol, NoSymbol ], - symbols[Group4]= [ period, enfilledcircbullet, apostrophe, U3d1, KP_3, KP_3, U21a6, NoSymbol ] + symbols[Group4]= [ period, enfilledcircbullet, apostrophe, U03D1, KP_3, KP_3, U21A6, NoSymbol ] }; key { type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC", @@ -1556,7 +1556,7 @@ xkb_keymap { symbols[Group1]= [ space ], symbols[Group2]= [ space ], symbols[Group3]= [ space, space, nobreakspace, NoSymbol ], - symbols[Group4]= [ space, space, space, nobreakspace, KP_0, KP_0, U202f, NoSymbol ] + symbols[Group4]= [ space, space, space, nobreakspace, KP_0, KP_0, U202F, NoSymbol ] }; key { type= "ONE_LEVEL", @@ -1618,21 +1618,21 @@ xkb_keymap { symbols[Group1]= [ KP_Home, KP_7 ], symbols[Group2]= [ KP_Home, KP_7 ], symbols[Group3]= [ KP_Home, KP_7 ], - symbols[Group4]= [ KP_7, U2714, U2195, U226a, KP_Home, KP_Home, upstile, NoSymbol ] + symbols[Group4]= [ KP_7, U2714, U2195, U226A, KP_Home, KP_Home, upstile, NoSymbol ] }; key { type[group4]= "EIGHT_LEVEL", symbols[Group1]= [ KP_Up, KP_8 ], symbols[Group2]= [ KP_Up, KP_8 ], symbols[Group3]= [ KP_Up, KP_8 ], - symbols[Group4]= [ KP_8, U2718, uparrow, intersection, KP_Up, KP_Up, U22c2, NoSymbol ] + symbols[Group4]= [ KP_8, U2718, uparrow, intersection, KP_Up, KP_Up, U22C2, NoSymbol ] }; key { type[group4]= "EIGHT_LEVEL", symbols[Group1]= [ KP_Prior, KP_9 ], symbols[Group2]= [ KP_Prior, KP_9 ], symbols[Group3]= [ KP_Prior, KP_9 ], - symbols[Group4]= [ KP_9, dagger, U20d7, U226b, KP_Prior, KP_Prior, U2309, NoSymbol ] + symbols[Group4]= [ KP_9, dagger, U20D7, U226B, KP_Prior, KP_Prior, U2309, NoSymbol ] }; key { type[group1]= "CTRL+ALT", @@ -1656,7 +1656,7 @@ xkb_keymap { symbols[Group1]= [ KP_Begin, KP_5 ], symbols[Group2]= [ KP_Begin, KP_5 ], symbols[Group3]= [ KP_Begin, KP_5 ], - symbols[Group4]= [ KP_5, EuroSign, colon, U22b6, KP_Begin, KP_Begin, U22b7, NoSymbol ] + symbols[Group4]= [ KP_5, EuroSign, colon, U22B6, KP_Begin, KP_Begin, U22B7, NoSymbol ] }; key { type[group4]= "EIGHT_LEVEL", @@ -1687,21 +1687,21 @@ xkb_keymap { symbols[Group1]= [ KP_Down, KP_2 ], symbols[Group2]= [ KP_Down, KP_2 ], symbols[Group3]= [ KP_Down, KP_2 ], - symbols[Group4]= [ KP_2, heart, downarrow, union, KP_Down, KP_Down, U22c3, NoSymbol ] + symbols[Group4]= [ KP_2, heart, downarrow, union, KP_Down, KP_Down, U22C3, NoSymbol ] }; key { type[group4]= "EIGHT_LEVEL", symbols[Group1]= [ KP_Next, KP_3 ], symbols[Group2]= [ KP_Next, KP_3 ], symbols[Group3]= [ KP_Next, KP_3 ], - symbols[Group4]= [ KP_3, U2660, U21cc, greaterthanequal, KP_Next, KP_Next, U230b, NoSymbol ] + symbols[Group4]= [ KP_3, U2660, U21CC, greaterthanequal, KP_Next, KP_Next, U230B, NoSymbol ] }; key { type[group4]= "EIGHT_LEVEL", symbols[Group1]= [ KP_Insert, KP_0 ], symbols[Group2]= [ KP_Insert, KP_0 ], symbols[Group3]= [ KP_Insert, KP_0 ], - symbols[Group4]= [ KP_0, U2423, percent, U2030, KP_Insert, KP_Insert, U25a1, NoSymbol ] + symbols[Group4]= [ KP_0, U2423, percent, U2030, KP_Insert, KP_Insert, U25A1, NoSymbol ] }; key { type[group2]= "KEYPAD", diff --git a/test/keysym.c b/test/keysym.c index 8991595..46d70ac 100644 --- a/test/keysym.c +++ b/test/keysym.c @@ -103,6 +103,10 @@ main(void) assert(test_keysym(0x0, "NoSymbol")); assert(test_keysym(0x1008FE20, "XF86Ungrab")); assert(test_keysym(0x01001234, "U1234")); + /* 16-bit unicode padded to width 4. */ + assert(test_keysym(0x010002DE, "U02DE")); + /* 32-bit unicode padded to width 8. */ + assert(test_keysym(0x0101F4A9, "U0001F4A9")); assert(test_casestring("Undo", 0xFF65)); assert(test_casestring("UNDO", 0xFF65)); diff --git a/xkbcommon/xkbcommon.h b/xkbcommon/xkbcommon.h index 244b35b..8ddb74b 100644 --- a/xkbcommon/xkbcommon.h +++ b/xkbcommon/xkbcommon.h @@ -183,7 +183,7 @@ typedef uint32_t xkb_keycode_t; * * Besides those, any Unicode/ISO 10646 character in the range U0100 to * U10FFFF can be represented by a keysym value in the range 0x01000100 to - * 0x0110FFFF. The name of Unicode keysyms is "U", e.g. "Ua1b2". + * 0x0110FFFF. The name of Unicode keysyms is "U", e.g. "UA1B2". * * The name of other unnamed keysyms is the hexadecimal representation of * their value, e.g. "0xabcd1234". -- 2.7.4