Add category to each entry in keysym-labels tables.
This commit is contained in:
		
							
								
								
									
										136
									
								
								eek/eek-keysym.c
									
									
									
									
									
								
							
							
						
						
									
										136
									
								
								eek/eek-keysym.c
									
									
									
									
									
								
							@ -25,6 +25,7 @@
 | 
			
		||||
struct eek_keysym_label {
 | 
			
		||||
    guint keysym;
 | 
			
		||||
    const gchar *label;
 | 
			
		||||
    EekKeysymCategory category;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#include "eek-special-keysym-labels.h"
 | 
			
		||||
@ -53,6 +54,81 @@ keysym_label_compare (const void *key0, const void *key1)
 | 
			
		||||
    return (gint)entry0->keysym - (gint)entry1->keysym;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
find_keysym (guint              keysym,
 | 
			
		||||
             const gchar      **label,
 | 
			
		||||
             EekKeysymCategory *category)
 | 
			
		||||
{
 | 
			
		||||
    EekKeysymCategory bsearch_key, *bsearch_val;
 | 
			
		||||
 | 
			
		||||
    /* First, search special keysyms. */
 | 
			
		||||
    bsearch_key.keysym = keysym;
 | 
			
		||||
    bsearch_val = bsearch (&bsearch_key,
 | 
			
		||||
                           special_keysym_labels,
 | 
			
		||||
                           G_N_ELEMENTS(special_keysym_labels),
 | 
			
		||||
                           sizeof (struct eek_keysym_label),
 | 
			
		||||
                           keysym_label_compare);
 | 
			
		||||
    if (bsearch_val) {
 | 
			
		||||
        if (label)
 | 
			
		||||
            *label = g_strdup (bsearch_val->label);
 | 
			
		||||
        if (category)
 | 
			
		||||
            *category = bsearch_val->category;
 | 
			
		||||
        return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    /* Check for Latin-1 characters (1:1 mapping) */
 | 
			
		||||
    if ((keysym >= 0x0020 && keysym <= 0x007e) ||
 | 
			
		||||
        (keysym >= 0x00a0 && keysym <= 0x00ff)) {
 | 
			
		||||
        if (label)
 | 
			
		||||
            *label = unichar_to_utf8 (keysym);
 | 
			
		||||
        if (category)
 | 
			
		||||
            *category = EEK_KEYSYM_CATEGORY_LETTER;
 | 
			
		||||
        return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Also check for directly encoded 24-bit UCS characters:
 | 
			
		||||
     */
 | 
			
		||||
    if ((keysym & 0xff000000) == 0x01000000) {
 | 
			
		||||
        if (label)
 | 
			
		||||
            *label = unichar_to_utf8 (keysym & 0x00ffffff);
 | 
			
		||||
        if (category)
 | 
			
		||||
            *category = EEK_KEYSYM_CATEGORY_LETTER;
 | 
			
		||||
        return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Search known unicode keysyms. */
 | 
			
		||||
    bsearch_key.keysym = keysym;
 | 
			
		||||
    bsearch_val = bsearch (&bsearch_key,
 | 
			
		||||
                           unicode_keysym_labels,
 | 
			
		||||
                           G_N_ELEMENTS(unicode_keysym_labels),
 | 
			
		||||
                           sizeof (struct eek_keysym_label),
 | 
			
		||||
                           keysym_label_compare);
 | 
			
		||||
    if (bsearch_val) {
 | 
			
		||||
        if (label)
 | 
			
		||||
            *label = g_strdup (bsearch_val->label);
 | 
			
		||||
        if (category)
 | 
			
		||||
            *category = bsearch_val->category;
 | 
			
		||||
        return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Finally, search keynames. */
 | 
			
		||||
    bsearch_key.keysym = keysym;
 | 
			
		||||
    bsearch_val = bsearch (&bsearch_key,
 | 
			
		||||
                           keyname_keysym_labels,
 | 
			
		||||
                           G_N_ELEMENTS(keyname_keysym_labels),
 | 
			
		||||
                           sizeof (struct eek_keysym_label),
 | 
			
		||||
                           keysym_label_compare);
 | 
			
		||||
    if (bsearch_val) {
 | 
			
		||||
        if (label)
 | 
			
		||||
            *label = g_strdup (bsearch_val->label);
 | 
			
		||||
        if (category)
 | 
			
		||||
            *category = bsearch_val->category;
 | 
			
		||||
        return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keysym_to_string:
 | 
			
		||||
 * @keysym: keysym ID
 | 
			
		||||
@ -62,47 +138,25 @@ keysym_label_compare (const void *key0, const void *key1)
 | 
			
		||||
G_CONST_RETURN gchar *
 | 
			
		||||
eek_keysym_to_string (guint keysym)
 | 
			
		||||
{
 | 
			
		||||
    struct eek_keysym_label bsearch_key, *bsearch_val;
 | 
			
		||||
 | 
			
		||||
    /* First, search special keysyms. */
 | 
			
		||||
    bsearch_key.keysym = keysym;
 | 
			
		||||
    bsearch_val = bsearch (&bsearch_key,
 | 
			
		||||
                           special_keysym_labels,
 | 
			
		||||
                           G_N_ELEMENTS(special_keysym_labels),
 | 
			
		||||
                           sizeof (struct eek_keysym_label),
 | 
			
		||||
                           keysym_label_compare);
 | 
			
		||||
    if (bsearch_val)
 | 
			
		||||
        return g_strdup (bsearch_val->label);
 | 
			
		||||
  
 | 
			
		||||
    /* Check for Latin-1 characters (1:1 mapping) */
 | 
			
		||||
    if ((keysym >= 0x0020 && keysym <= 0x007e) ||
 | 
			
		||||
        (keysym >= 0x00a0 && keysym <= 0x00ff))
 | 
			
		||||
        return unichar_to_utf8 (keysym);
 | 
			
		||||
 | 
			
		||||
    /* Also check for directly encoded 24-bit UCS characters:
 | 
			
		||||
     */
 | 
			
		||||
    if ((keysym & 0xff000000) == 0x01000000)
 | 
			
		||||
        return unichar_to_utf8 (keysym & 0x00ffffff);
 | 
			
		||||
 | 
			
		||||
    /* Search known unicode keysyms. */
 | 
			
		||||
    bsearch_key.keysym = keysym;
 | 
			
		||||
    bsearch_val = bsearch (&bsearch_key,
 | 
			
		||||
                           unicode_keysym_labels,
 | 
			
		||||
                           G_N_ELEMENTS(unicode_keysym_labels),
 | 
			
		||||
                           sizeof (struct eek_keysym_label),
 | 
			
		||||
                           keysym_label_compare);
 | 
			
		||||
    if (bsearch_val)
 | 
			
		||||
        return g_strdup (bsearch_val->label);
 | 
			
		||||
 | 
			
		||||
    /* Finally, search keynames. */
 | 
			
		||||
    bsearch_key.keysym = keysym;
 | 
			
		||||
    bsearch_val = bsearch (&bsearch_key,
 | 
			
		||||
                           keyname_keysym_labels,
 | 
			
		||||
                           G_N_ELEMENTS(keyname_keysym_labels),
 | 
			
		||||
                           sizeof (struct eek_keysym_label),
 | 
			
		||||
                           keysym_label_compare);
 | 
			
		||||
    if (bsearch_val)
 | 
			
		||||
        return g_strdup (bsearch_val->label);
 | 
			
		||||
    const gchar *label;
 | 
			
		||||
 | 
			
		||||
    if (find_keysym (keysym, &label, NULL))
 | 
			
		||||
        return label;
 | 
			
		||||
    return g_strdup ("");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keysym_get_category:
 | 
			
		||||
 * @keysym: keysym ID
 | 
			
		||||
 *
 | 
			
		||||
 * Return a string representation of @keysym.
 | 
			
		||||
 */
 | 
			
		||||
EekKeysymCategory
 | 
			
		||||
eek_keysym_get_category (guint keysym)
 | 
			
		||||
{
 | 
			
		||||
    EekKeysymCategory category;
 | 
			
		||||
 | 
			
		||||
    if (find_keysym (keysym, NULL, &category))
 | 
			
		||||
        return category;
 | 
			
		||||
    return EEK_KEYSYM_CATEGORY_UNKNOWN;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,14 @@
 | 
			
		||||
#define EEK_INVALID_KEYSYM ((guint)(-1))
 | 
			
		||||
#define EEK_INVALID_KEYCODE ((guint)(-1))
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    EEK_KEYSYM_CATEGORY_LETTER,
 | 
			
		||||
    EEK_KEYSYM_CATEGORY_FUNCTION,
 | 
			
		||||
    EEK_KEYSYM_CATEGORY_KEYNAME,
 | 
			
		||||
    EEK_KEYSYM_CATEGORY_UNKNOWN
 | 
			
		||||
} EekKeysymCategory;
 | 
			
		||||
 | 
			
		||||
G_CONST_RETURN gchar *eek_keysym_to_string (guint keysym);
 | 
			
		||||
EekKeysymCategory eek_keysym_get_category (guint keysym);
 | 
			
		||||
 | 
			
		||||
#endif  /* EEK_KEYSYMS_H */
 | 
			
		||||
 | 
			
		||||
@ -28,16 +28,17 @@ if len(sys.argv) != 2:
 | 
			
		||||
table = dict()
 | 
			
		||||
for line in sys.stdin:
 | 
			
		||||
    line = line.decode('UTF-8')
 | 
			
		||||
    match = re.match(r'\s*(0x[0-9A-F]+)\s+(\S*)', line, re.I)
 | 
			
		||||
    match = re.match(r'\s*(0x[0-9A-F]+)\s+(\S*)\s+(\S*)', line, re.I)
 | 
			
		||||
    if match:
 | 
			
		||||
        table[int(match.group(1), 16)] = match.group(2)
 | 
			
		||||
        table[int(match.group(1), 16)] = (match.group(2), match.group(3))
 | 
			
		||||
 | 
			
		||||
sys.stdout.write("static const struct eek_keysym_label %s[] = {\n" %
 | 
			
		||||
                 sys.argv[1])
 | 
			
		||||
 | 
			
		||||
for index, (keysym, label) in enumerate([(keysym, table[keysym])
 | 
			
		||||
                                         for keysym in sorted(table.keys())]):
 | 
			
		||||
    sys.stdout.write("    { 0x%X, %s }" % (keysym, label.encode('UTF-8')))
 | 
			
		||||
for index, (keysym, (l, c)) in enumerate([(keysym, table[keysym])
 | 
			
		||||
                                          for keysym in sorted(table.keys())]):
 | 
			
		||||
    sys.stdout.write("    { 0x%X, %s, %s }" %
 | 
			
		||||
                     (keysym, l.encode('UTF-8'), c.encode('UTF-8')))
 | 
			
		||||
    if index < len(table) - 1:
 | 
			
		||||
        sys.stdout.write(",")
 | 
			
		||||
    sys.stdout.write("\n")
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,31 +1,31 @@
 | 
			
		||||
0x20 ""
 | 
			
		||||
0x8A3 "horiz\nconn"
 | 
			
		||||
0xFE50 "ˋ"
 | 
			
		||||
0xFE51 "ˊ"
 | 
			
		||||
0xFE52 "ˆ"
 | 
			
		||||
0xFE53 "~"
 | 
			
		||||
0xFE54 "ˉ"
 | 
			
		||||
0xFE55 "˘"
 | 
			
		||||
0xFE56 "˙"
 | 
			
		||||
0xFE57 "¨"
 | 
			
		||||
0xFE58 "˚"
 | 
			
		||||
0xFE59 "˝"
 | 
			
		||||
0xFE5A "ˇ"
 | 
			
		||||
0xFE5B "¸"
 | 
			
		||||
0xFE5C "˛"
 | 
			
		||||
0xFF14 "Scroll\nLock"
 | 
			
		||||
0xFF20 "Compose"
 | 
			
		||||
0xFF55 "Page\nUp"
 | 
			
		||||
0xFF56 "Page\nDown"
 | 
			
		||||
0xFF7E "AltGr"
 | 
			
		||||
0xFF7F "Num\nLock"
 | 
			
		||||
0xFF8D "Enter"
 | 
			
		||||
0xFF95 "Home"
 | 
			
		||||
0xFF96 "Left"
 | 
			
		||||
0xFF97 "Up"
 | 
			
		||||
0xFF98 "Right"
 | 
			
		||||
0xFF99 "Down"
 | 
			
		||||
0xFF9C "End"
 | 
			
		||||
0xFF9D "Begin"
 | 
			
		||||
0xFF9E "Ins"
 | 
			
		||||
0xFF9F "Del"
 | 
			
		||||
0x20 "" EEK_KEYSYM_LETTER
 | 
			
		||||
0x8A3 "horiz\nconn" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE50 "ˋ" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE51 "ˊ" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE52 "ˆ" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE53 "~" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE54 "ˉ" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE55 "˘" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE56 "˙" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE57 "¨" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE58 "˚" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE59 "˝" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE5A "ˇ" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE5B "¸" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFE5C "˛" EEK_KEYSYM_LETTER
 | 
			
		||||
0xFF14 "Scroll\nLock" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF20 "Compose" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF55 "Page\nUp" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF56 "Page\nDown" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF7E "AltGr" EEK_KEYSYM_MODIFIER
 | 
			
		||||
0xFF7F "Num\nLock" EEK_KEYSYM_MODIFIER
 | 
			
		||||
0xFF8D "Enter" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF95 "Home" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF96 "Left" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF97 "Up" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF98 "Right" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF99 "Down" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF9C "End" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF9D "Begin" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF9E "Ins" EEK_KEYSYM_FUNCTION
 | 
			
		||||
0xFF9F "Del" EEK_KEYSYM_FUNCTION
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user