*** empty log message ***
[platform/core/uifw/at-spi2-atk.git] / registryd / ucs2keysym.c
index 58e418c..d568845 100644 (file)
@@ -821,3 +821,34 @@ KeySym ucs2keysym (long ucs)
     return ucs | 0x01000000;
 }
 
+long keysym2ucs(KeySym keysym)
+{
+    int min = 0;
+    int max = sizeof(keysymtab) / sizeof(struct codepair) - 1;
+    int mid;
+
+    /* first check for Latin-1 characters (1:1 mapping) */
+    if ((keysym >= 0x0020 && keysym <= 0x007e) ||
+        (keysym >= 0x00a0 && keysym <= 0x00ff))
+        return (long) keysym;
+
+    /* also check for directly encoded 24-bit UCS characters */
+    if ((keysym & 0xff000000) == 0x01000000)
+       return keysym & 0x00ffffff;
+
+    /* binary search in table */
+    while (max >= min) {
+       mid = (min + max) / 2;
+       if (keysymtab[mid].keysym < keysym)
+           min = mid + 1;
+       else if (keysymtab[mid].keysym > keysym)
+           max = mid - 1;
+       else {
+           /* found it */
+           return keysymtab[mid].ucs;
+       }
+    }
+
+    /* no matching Unicode value found */
+    return -1;
+}