xkeysymtounicode.h
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 17 Nov 2017 11:52:18 -0300
branchjv
changeset 8223 d0117698147d
parent 8038 c7cab63f9ec9
child 8420 76e39223f5ab
permissions -rw-r--r--
`SimpleView`: added `#automationUUID` and `#automationUUID:` ...as aliases to `#uuid` and `#uuid:`. These can be used later in automated UI testing.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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