author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Fri, 17 Nov 2017 11:52:18 -0300 | |
branch | jv |
changeset 8223 | d0117698147d |
parent 8038 | c7cab63f9ec9 |
child 8420 | 76e39223f5ab |
permissions | -rw-r--r-- |
8038
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
1 |
/* |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
2 |
* Copyright (c) 2017-now Jan Vrany |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
3 |
* |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
4 |
* Permission is hereby granted, free of charge, to any person obtaining |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
5 |
* a copy of this software and associated documentation files (the |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
6 |
* "Software"), to deal in the Software without restriction, including |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
7 |
* without limitation the rights to use, copy, modify, merge, publish, |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
8 |
* distribute, sublicense, and/or sell copies of the Software, and to |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
9 |
* permit persons to whom the Software is furnished to do so, subject to |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
10 |
* the following conditions: |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
11 |
* |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
12 |
* The above copyright notice and this permission notice shall be |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
13 |
* included in all copies or substantial portions of the Software. |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
14 |
* |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
15 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
16 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
17 |
* MeERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
18 |
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
19 |
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
20 |
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
21 |
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
22 |
*/ |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
23 |
|
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
24 |
/* |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
25 |
* Definition of XKeysymToUnicode(). To be included in X11 client code |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
26 |
*/ |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
27 |
|
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
28 |
#ifndef _XKEYSYMTOUNICODE_H_ |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
29 |
#define _XKEYSYMTOUNICODE_H_ |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
30 |
|
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
31 |
#include "xkeysymtounicodetable.h" |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
32 |
|
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
33 |
/** |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
34 |
* The `XKeysymToUnicode` function translates given `KeySym` to corresponding |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
35 |
* Unicode code point. If given `KeySym` has no codepoint associated (for |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
36 |
* example,`XK_Num_Lock` or `XK_Left`) then 0 (zero) is returned. |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
37 |
*/ |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
38 |
static uint16_t XKeysymToUnicode(KeySym ks) { |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
39 |
/* |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
40 |
* Luckily, for some most commonly used characters (more or less ASCII ones) |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
41 |
* the `KeySym` value is the same as its Unicode codepoint. For these we dont |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
42 |
* need to bother looking them up. This speeds up this function in common |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
43 |
* cases. |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
44 |
*/ |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
45 |
if ( (XKEYSYMTOUNICODE_DIRECT_LO <= ks) && (ks <= XKEYSYMTOUNICODE_DIRECT_HI) ) { |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
46 |
return (uint16_t)ks; |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
47 |
} else { |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
48 |
/* |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
49 |
* So the `KeySym` value is different from its Unicode codepoint. |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
50 |
* Do a binary search in the table... |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
51 |
*/ |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
52 |
int first = 0; |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
53 |
int last = xkeysymtounicode_table_size - 1; |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
54 |
int middle; |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
55 |
while ( first <= last ) { |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
56 |
middle = (first + last) / 2; |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
57 |
if ( xkeysymtounicode_table[middle].keysym < ks) { |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
58 |
first = middle + 1; |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
59 |
} else if ( xkeysymtounicode_table[middle].keysym > ks) { |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
60 |
last = middle - 1; |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
61 |
} else { |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
62 |
return xkeysymtounicode_table[middle].codepoint; |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
63 |
} |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
64 |
} |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
65 |
/* |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
66 |
* If not found, retrun 0 to indicate there's no Unicode character |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
67 |
* associated with given `KeySym` (such as `XK_Num_Lock` and alike) |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
68 |
*/ |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
69 |
return (uint16_t)0; |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
70 |
} |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
71 |
} |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
72 |
|
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
73 |
|
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
74 |
#endif//_XKEYSYMTOUNICODE_H_ |
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
75 |
|
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
76 |
|
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
77 |
|
c7cab63f9ec9
X11: translate national characters early in X11 event processing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
78 |