1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * This module converts keysym values into the corresponding ISO 10646 3*4882a593Smuzhiyun * (UCS, Unicode) values. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * The array keysymtab[] contains pairs of X11 keysym values for graphical 6*4882a593Smuzhiyun * characters and the corresponding Unicode value. The function 7*4882a593Smuzhiyun * keysym2ucs() maps a keysym onto a Unicode value using a binary search, 8*4882a593Smuzhiyun * therefore keysymtab[] must remain SORTED by keysym value. 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * The keysym -> UTF-8 conversion will hopefully one day be provided 11*4882a593Smuzhiyun * by Xlib via XmbLookupString() and should ideally not have to be 12*4882a593Smuzhiyun * done in X applications. But we are not there yet. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * We allow to represent any UCS character in the range U-00000000 to 15*4882a593Smuzhiyun * U-00FFFFFF by a keysym value in the range 0x01000000 to 0x01ffffff. 16*4882a593Smuzhiyun * This admittedly does not cover the entire 31-bit space of UCS, but 17*4882a593Smuzhiyun * it does cover all of the characters up to U-10FFFF, which can be 18*4882a593Smuzhiyun * represented by UTF-16, and more, and it is very unlikely that higher 19*4882a593Smuzhiyun * UCS codes will ever be assigned by ISO. So to get Unicode character 20*4882a593Smuzhiyun * U+ABCD you can directly use keysym 0x0100abcd. 21*4882a593Smuzhiyun * 22*4882a593Smuzhiyun * Author: Markus G. Kuhn <mkuhn@acm.org>, University of Cambridge, April 2001 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * Special thanks to Richard Verhoeven <river@win.tue.nl> for preparing 25*4882a593Smuzhiyun * an initial draft of the mapping table. 26*4882a593Smuzhiyun * 27*4882a593Smuzhiyun * This software is in the public domain. Share and enjoy! 28*4882a593Smuzhiyun */ 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #ifndef KEYSYM2UCS_H 31*4882a593Smuzhiyun #define KEYSYM2UCS_H 1 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0])) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun extern long 36*4882a593Smuzhiyun keysym2ucs(int keysym); 37*4882a593Smuzhiyun extern int 38*4882a593Smuzhiyun ucs2keysym(long ucs); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #endif /* KEYSYM2UCS_H */ 41