Closed Bug 550676 – Memory leak, update keyboard layout data table

svn path=/trunk/; revision=21339
This commit is contained in:
Simos Xenitellis 2008-09-10 18:03:53 +00:00
parent 38417bf753
commit 8c71a0d4c5
4 changed files with 424 additions and 340 deletions

View File

@ -1,3 +1,21 @@
2008-09-10 Simos Xenitellis <simos@gnome.org>
Bug 550676 Memory leak, update keyboard layout data structure
* gtk/gtkimcontextsimple.c (check_normalize_nfc): Added
function that checks if unicode sequence can be normalised (NFC)
to single character. Fixed memory leaks.
(check_algorithmically): Moved code to check_normalize_nfc,
updated switch statement for dead keys.
(gtk_im_context_simple_filter_keypress): Changed order; first
check_algorithmically() is attempted, then check_compact_table().
* gtk/gtkimcontextsimpleseqs.c: Updated compose sequence table
gtk_compose_seqs_compac[].
* gtk/compose-parse.py: Updated compose table generation script,
matches output to gtk/gtkimcontextsimpleseqs.c.
Wed Sep 10 06:18:25 2008 Søren Sandmann <sandmann@redhat.com>
* gdk/x11/gdkscreen-x11.c (init_multihead): Don't use

View File

@ -279,9 +279,17 @@ def process_gdkkeysymsh():
""" Patch up the keysymdb with some of our own stuff """
""" This is for a missing keysym from the currently upstread file """
""" This is for a missing keysym from the currently upstream file """
keysymdb['dead_stroke'] = 0x338
""" This is for a missing keysym from the currently upstream file """
###keysymdb['dead_belowring'] = 0x323
###keysymdb['dead_belowmacron'] = 0x331
###keysymdb['dead_belowcircumflex'] = 0x32d
###keysymdb['dead_belowtilde'] = 0x330
###keysymdb['dead_belowbreve'] = 0x32e
###keysymdb['dead_belowdiaeresis'] = 0x324
""" This is^Wwas preferential treatment for Greek """
# keysymdb['dead_tilde'] = 0x342
""" This is^was preferential treatment for Greek """
@ -327,6 +335,13 @@ def process_keysymstxt():
keysymstxt.close()
""" Patch up the keysymdb with some of our own stuff """
""" This is for a missing keysym from the currently upstream file """
###keysymdb['dead_belowring'] = 0x323
###keysymdb['dead_belowmacron'] = 0x331
###keysymdb['dead_belowcircumflex'] = 0x32d
###keysymdb['dead_belowtilde'] = 0x330
###keysymdb['dead_belowbreve'] = 0x32e
###keysymdb['dead_belowdiaeresis'] = 0x324
""" This is preferential treatment for Greek """
""" => we get more savings if used for Greek """
@ -337,7 +352,7 @@ def process_keysymstxt():
""" This is for a missing keysym from Markus Kuhn's db """
keysymdb['dead_stroke'] = 0x338
""" This is for a missing keysym from Markus Kuhn's db """
# keysymdb['Oslash'] = 0x0d8
keysymdb['Oslash'] = 0x0d8
""" This is for a missing (recently added) keysym """
keysymdb['dead_psili'] = 0x313
@ -362,8 +377,9 @@ def keysymvalue(keysym, file = "n/a", linenum = 0):
elif keysym[:2] == '0x' and match('[0-9a-fA-F]+$', keysym[2:]):
return atoi(keysym[2:], 16)
else:
print 'UNKNOWN{%(keysym)s}' % { "keysym": keysym }
sys.exit(-1)
#print 'UNKNOWN{%(keysym)s}' % { "keysym": keysym }
return -1
#sys.exit(-1)
def keysymunicodevalue(keysym, file = "n/a", linenum = 0):
""" Extracts a value from the keysym """
@ -428,13 +444,21 @@ for line in composefile.readlines():
values = split('\s+', val)
unichar_temp = split('"', values[0])
unichar = unichar_temp[1]
if len(values) == 1:
continue
codepointstr = values[1]
if values[1] == '#':
# No codepoints that are >1 characters yet.
continue
if raw_sequence[0][0] == 'U' and match('[0-9a-fA-F]+$', raw_sequence[0][1:]):
raw_sequence[0] = '0x' + raw_sequence[0][1:]
if codepointstr[0] == 'U' and match('[0-9a-fA-F]+$', codepointstr[1:]):
codepoint = atoi(codepointstr[1:], 16)
elif keysymdatabase.has_key(codepointstr):
codepoint = keysymdatabase[codepointstr]
elif keysymunicodedatabase.has_key(codepointstr):
if keysymdatabase[codepointstr] != keysymunicodedatabase[codepointstr]:
print "DIFFERENCE: 0x%(a)X 0x%(b)X" % { "a": keysymdatabase[codepointstr], "b": keysymunicodedatabase[codepointstr]},
print raw_sequence, codepointstr
codepoint = keysymunicodedatabase[codepointstr]
else:
print
print "Invalid codepoint at line %(linenum_compose)d in %(filename)s:\
@ -448,13 +472,21 @@ for line in composefile.readlines():
if opt_plane1:
print sequence
break
if keysymvalue(i) < 0:
reject_this = True
break
if reject_this:
continue
if "U0313" in sequence or "U0314" in sequence or "0x0313" in sequence or "0x0314" in sequence:
if "U0342" in sequence or \
"U0313" in sequence or \
"U0314" in sequence or \
"0x0313" in sequence or \
"0x0342" in sequence or \
"0x0314" in sequence:
continue
for i in range(len(sequence)):
if sequence[i] == "0x0342":
sequence[i] = "dead_tilde"
#for i in range(len(sequence)):
# if sequence[i] == "0x0342":
# sequence[i] = "dead_tilde"
if "Multi_key" not in sequence:
""" Ignore for now >0xFFFF keysyms """
if codepoint < 0xFFFF:
@ -473,7 +505,7 @@ for line in composefile.readlines():
because of lack of dead_perispomeni (i.e. conflict)
"""
bc = basechar
if sequence[-1] == "dead_tilde" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff):
"""if sequence[-1] == "dead_tilde" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff):
skipping_this = True
break
if sequence[-1] == "dead_horn" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff):
@ -486,6 +518,7 @@ for line in composefile.readlines():
sequence[i] = "dead_horn"
if sequence[-1] == "dead_dasia":
sequence[-1] = "dead_ogonek"
"""
unisequence.append(unichr(keysymunicodevalue(sequence.pop(), filename_compose, linenum_compose)))
if skipping_this:

View File

@ -61,7 +61,7 @@ struct _GtkComposeTableCompact
static const GtkComposeTableCompact gtk_compose_table_compact = {
gtk_compose_seqs_compact,
5,
21,
22,
6
};
@ -340,10 +340,77 @@ check_compact_table (GtkIMContextSimple *context_simple,
return FALSE;
}
/* This function receives a sequence of Unicode characters and tries to
* normalize it (NFC). We check for the case the the resulting string
* has length 1 (single character).
* NFC normalisation normally rearranges diacritic marks, unless these
* belong to the same Canonical Combining Class.
* If they belong to the same canonical combining class, we produce all
* permutations of the diacritic marks, then attempt to normalize.
*/
static gboolean
check_normalize_nfc (gunichar* combination_buffer, gint n_compose)
{
gunichar combination_buffer_temp[GTK_MAX_COMPOSE_LEN];
gchar *combination_utf8_temp = NULL;
gchar *nfc_temp = NULL;
gint n_combinations;
gunichar temp_swap;
gint i;
n_combinations = 1;
for (i = 1; i < n_compose; i++ )
n_combinations *= i;
/* Xorg reuses dead_tilde for the perispomeni diacritic mark.
* We check if base character belongs to Greek Unicode block,
* and if so, we replace tilde with perispomeni. */
if (combination_buffer[0] >= 0x390 && combination_buffer[0] <= 0x3FF)
{
for (i = 1; i < n_compose; i++ )
if (combination_buffer[i] == 0x303)
combination_buffer[i] = 0x342;
}
memcpy (combination_buffer_temp, combination_buffer, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) );
for (i = 0; i < n_combinations; i++ )
{
g_unicode_canonical_ordering (combination_buffer_temp, n_compose);
combination_utf8_temp = g_ucs4_to_utf8 (combination_buffer_temp, -1, NULL, NULL, NULL);
nfc_temp = g_utf8_normalize (combination_utf8_temp, -1, G_NORMALIZE_NFC);
if (g_utf8_strlen (nfc_temp, -1) == 1)
{
memcpy (combination_buffer, combination_buffer_temp, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) );
g_free (combination_utf8_temp);
g_free (nfc_temp);
return TRUE;
}
g_free (combination_utf8_temp);
g_free (nfc_temp);
if (n_compose > 2)
{
temp_swap = combination_buffer_temp[i % (n_compose - 1) + 1];
combination_buffer_temp[i % (n_compose - 1) + 1] = combination_buffer_temp[(i+1) % (n_compose - 1) + 1];
combination_buffer_temp[(i+1) % (n_compose - 1) + 1] = temp_swap;
}
else
break;
}
return FALSE;
}
/* When updating the table of the compose sequences, also update here.
*/
#define IS_DEAD_KEY(k) \
(((k) >= GDK_dead_grave && (k) <= GDK_dead_stroke) || \
(((k) >= GDK_dead_grave && (k) <= (GDK_dead_dasia+1)) || \
g_unichar_type (gdk_keyval_to_unicode (k)) == G_UNICODE_NON_SPACING_MARK)
static gboolean
@ -351,12 +418,9 @@ check_algorithmically (GtkIMContextSimple *context_simple,
gint n_compose)
{
int i;
int k;
gint i;
gunichar combination_buffer[GTK_MAX_COMPOSE_LEN];
gunichar combination_buffer_temp[GTK_MAX_COMPOSE_LEN];
gchar *combination_utf8, *nfc;
gchar *combination_utf8_temp = NULL, *nfc_temp = NULL;
if (n_compose >= GTK_MAX_COMPOSE_LEN)
return FALSE;
@ -381,39 +445,33 @@ check_algorithmically (GtkIMContextSimple *context_simple,
CASE (grave, 0x0300);
CASE (acute, 0x0301);
CASE (circumflex, 0x0302);
CASE (tilde, 0x0303); /* Normally is 0x303; Greek Polytonic needs 0x342.
* We modified the compose sequences for now
* so that for Greek we don't apply algorithmic
* when perispomeni (0x342) is required
* Filed report; pending, bug 14013 (Freedesktop).
*/
CASE (tilde, 0x0303); /* Also used with perispomeni, 0x342. */
CASE (macron, 0x0304);
CASE (breve, 0x0306);
CASE (abovedot, 0x0307);
CASE (diaeresis, 0x0308);
CASE (hook, 0x0309);
CASE (abovering, 0x030A);
CASE (doubleacute, 0x030B);
CASE (caron, 0x030C);
CASE (cedilla, 0x0327);
CASE (ogonek, 0x0328); /* Normally is 0x328; Greek Polytonic needs 0x314.
* We modified the compose sequences for now to
* so that for Greek we don't apply algorithmic
* when dasia (0x314) is required
* Patch accepted in Xorg/GIT, may take a bit to propagate.
*/
CASE (dasia, 0x314);
CASE (iota, 0x0345); /* Used by Greek Polytonic layout only; "ypogegrammeni" */
CASE (voiced_sound, 0x3099); /* Per Markus Kuhn keysyms.txt file. */
CASE (semivoiced_sound, 0x309a); /* Per Markus Kuhn keysyms.txt file. */
CASE (abovecomma, 0x0313); /* Equivalent to psili */
CASE (abovereversedcomma, 0x0314); /* Equivalent to dasia */
CASE (horn, 0x031B); /* Legacy use for psili, 0x313 (or 0x343). */
CASE (belowdot, 0x0323);
CASE (hook, 0x0309);
CASE (horn, 0x031b); /* Normally is 0x31b; Greek Polytonic needs 0x313 (or 0x343).
* We modified the compose sequences for now to
* so that for Greek we don't apply algorithmic
* when psili (0x343) is required
* Patch accepted in Xorg/GIT, may take a bit to propagate.
*/
CASE (psili, 0x343);
CASE (cedilla, 0x0327);
CASE (ogonek, 0x0328); /* Legacy use for dasia, 0x314.*/
CASE (iota, 0x0345);
CASE (voiced_sound, 0x3099); /* Per Markus Kuhn keysyms.txt file. */
CASE (semivoiced_sound, 0x309A); /* Per Markus Kuhn keysyms.txt file. */
/* The following cases are to be removed once xkeyboard-config,
* xorg are fully updated.
*/
/* Workaround for typo in 1.4.x xserver-xorg */
case 0xfe66: combination_buffer[i+1] = 0x314; break;
/* CASE (dasia, 0x314); */
/* CASE (perispomeni, 0x342); */
/* CASE (psili, 0x343); */
#undef CASE
default:
combination_buffer[i+1] = gdk_keyval_to_unicode (context_simple->compose_buffer[i]);
@ -421,56 +479,24 @@ check_algorithmically (GtkIMContextSimple *context_simple,
i--;
}
if (n_compose > 2)
{
gint n_combinations;
gunichar temp_swap;
/* If the buffer normalizes to a single character,
* then modify the order of combination_buffer accordingly, if necessary,
* and return TRUE.
*/
if (check_normalize_nfc (combination_buffer, n_compose))
{
combination_utf8 = g_ucs4_to_utf8 (combination_buffer, -1, NULL, NULL, NULL);
nfc = g_utf8_normalize (combination_utf8, -1, G_NORMALIZE_NFC);
/* We calculate the number of permutations of the diacritic marks, factorial(n_compose-1).
* When diacritic marks belong to the same Canonical Combining Class,
* a normalisation does not attempt reorder them, thus we do this ourselves.
*/
n_combinations = 1;
for (k = 1; k < n_compose; k++ )
n_combinations *= k;
gunichar value = g_utf8_get_char (nfc);
gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), value);
context_simple->compose_buffer[0] = 0;
memcpy (combination_buffer_temp, combination_buffer, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) );
g_free (combination_utf8);
g_free (nfc);
for (k = 0; k < n_combinations; k++ )
{
g_unicode_canonical_ordering (combination_buffer_temp, n_compose);
combination_utf8_temp = g_ucs4_to_utf8 (combination_buffer_temp, -1, NULL, NULL, NULL);
nfc_temp = g_utf8_normalize (combination_utf8_temp, -1, G_NORMALIZE_NFC);
if (g_utf8_strlen (nfc_temp, -1) == 1)
{
memcpy (combination_buffer, combination_buffer_temp, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) );
break;
}
temp_swap = combination_buffer_temp[k % (n_compose - 1) + 1];
combination_buffer_temp[k % (n_compose - 1) + 1] = combination_buffer_temp[(k+1) % (n_compose - 1) + 1];
combination_buffer_temp[(k+1) % (n_compose - 1) + 1] = temp_swap;
}
g_free (combination_utf8_temp);
g_free (nfc_temp);
}
combination_utf8 = g_ucs4_to_utf8 (combination_buffer, -1, NULL, NULL, NULL);
nfc = g_utf8_normalize (combination_utf8, -1, G_NORMALIZE_NFC);
if (g_utf8_strlen (nfc, -1) == 1)
{
gunichar value = g_utf8_get_char (nfc);
gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), value);
context_simple->compose_buffer[0] = 0;
g_free (combination_utf8);
g_free (nfc);
return TRUE;
}
g_free (combination_utf8);
g_free (nfc);
return TRUE;
}
}
return FALSE;
@ -899,11 +925,11 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
tmp_list = tmp_list->next;
}
if (check_compact_table (context_simple, &gtk_compose_table_compact, n_compose))
return TRUE;
if (check_algorithmically (context_simple, n_compose))
return TRUE;
if (check_compact_table (context_simple, &gtk_compose_table_compact, n_compose))
return TRUE;
}
/* The current compose_buffer doesn't match anything */

View File

@ -67,27 +67,47 @@
*/
static const guint16 gtk_compose_seqs_compact[] = {
GDK_dead_grave, 126, 182, 269, 481, 481,
GDK_dead_acute, 481, 539, 632, 900, 900,
GDK_dead_circumflex, 900, 988, 988, 1188, 1188,
GDK_dead_tilde, 1188, 1248, 1311, 1451, 1451,
GDK_dead_macron, 1451, 1475, 1475, 1547, 1547,
GDK_dead_breve, 1547, 1583, 1583, 1599, 1599,
GDK_dead_abovedot, 1599, 1613, 1613, 1645, 1645,
GDK_dead_diaeresis, 1645, 1709, 1709, 1733, 1733,
GDK_dead_abovering, 1733, 1737, 1737, 1737, 1737,
GDK_dead_doubleacute, 1737, 1745, 1745, 1745, 1745,
GDK_dead_caron, 1745, 1749, 1749, 1757, 1757,
GDK_dead_cedilla, 1757, 1761, 1761, 1761, 1761,
GDK_dead_ogonek, 1761, 1797, 1797, 1797, 1797,
GDK_dead_iota, 1797, 1819, 1927, 2407, 3127,
GDK_dead_voiced_sound, 3127, 3173, 3173, 3173, 3173,
GDK_dead_semivoiced_sound, 3173, 3183, 3183, 3183, 3183,
GDK_dead_belowdot, 3183, 3187, 3187, 3203, 3203,
GDK_dead_hook, 3203, 3207, 3207, 3263, 3263,
GDK_dead_horn, 3263, 3291, 3291, 3291, 3291,
GDK_dead_stroke, 3291, 3325, 3331, 3331, 3331,
GDK_Multi_key, 3331, 3331, 7996, 11712, 13692,
GDK_dead_stroke, 132, 166, 172, 172, 172,
GDK_dead_grave, 172, 228, 315, 527, 527,
GDK_dead_acute, 527, 585, 678, 954, 954,
GDK_dead_circumflex, 954, 1042, 1042, 1242, 1242,
GDK_dead_tilde, 1242, 1302, 1365, 1505, 1505,
GDK_dead_macron, 1505, 1529, 1529, 1601, 1601,
GDK_dead_breve, 1601, 1637, 1637, 1661, 1661,
GDK_dead_abovedot, 1661, 1675, 1675, 1707, 1707,
GDK_dead_diaeresis, 1707, 1771, 1771, 1795, 1795,
GDK_dead_abovering, 1795, 1799, 1799, 1799, 1799,
GDK_dead_doubleacute, 1799, 1807, 1807, 1807, 1807,
GDK_dead_caron, 1807, 1811, 1811, 1819, 1819,
GDK_dead_cedilla, 1819, 1823, 1823, 1823, 1823,
GDK_dead_ogonek, 1823, 1827, 1827, 1827, 1827,
GDK_dead_iota, 1827, 1849, 1948, 2380, 3040,
GDK_dead_voiced_sound, 3040, 3086, 3086, 3086, 3086,
GDK_dead_semivoiced_sound, 3086, 3096, 3096, 3096, 3096,
GDK_dead_belowdot, 3096, 3106, 3106, 3122, 3122,
GDK_dead_hook, 3122, 3126, 3126, 3182, 3182,
GDK_dead_psili, 3182, 3210, 3210, 3210, 3210,
GDK_dead_dasia, 3210, 3242, 3242, 3242, 3242,
GDK_Multi_key, 3242, 3242, 8078, 11766, 13626,
GDK_D, 0x0110,
GDK_G, 0x01E4,
GDK_H, 0x0126,
GDK_I, 0x0197,
GDK_L, 0x0141,
GDK_O, 0x00D8,
GDK_T, 0x0166,
GDK_Z, 0x01B5,
GDK_b, 0x0180,
GDK_d, 0x0111,
GDK_g, 0x01E5,
GDK_h, 0x0127,
GDK_i, 0x0268,
GDK_l, 0x0142,
GDK_o, 0x00F8,
GDK_t, 0x0167,
GDK_z, 0x01B6,
GDK_dead_acute, GDK_O, 0x01FE,
GDK_dead_acute, GDK_o, 0x01FF,
GDK_space, 0x0060,
GDK_Abreve, 0x1EB0,
GDK_abreve, 0x1EB1,
@ -118,33 +138,33 @@ GDK_Greek_omega, 0x1F7C,
GDK_dead_grave, 0x0060,
GDK_dead_diaeresis, GDK_Greek_iota, 0x1FD2,
GDK_dead_diaeresis, GDK_Greek_upsilon, 0x1FE2,
GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F0B,
GDK_dead_ogonek, GDK_Greek_EPSILON, 0x1F1B,
GDK_dead_ogonek, GDK_Greek_ETA, 0x1F2B,
GDK_dead_ogonek, GDK_Greek_IOTA, 0x1F3B,
GDK_dead_ogonek, GDK_Greek_OMICRON, 0x1F4B,
GDK_dead_ogonek, GDK_Greek_UPSILON, 0x1F5B,
GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1F6B,
GDK_dead_ogonek, GDK_Greek_alpha, 0x1F03,
GDK_dead_ogonek, GDK_Greek_epsilon, 0x1F13,
GDK_dead_ogonek, GDK_Greek_eta, 0x1F23,
GDK_dead_ogonek, GDK_Greek_iota, 0x1F33,
GDK_dead_ogonek, GDK_Greek_omicron, 0x1F43,
GDK_dead_ogonek, GDK_Greek_upsilon, 0x1F53,
GDK_dead_ogonek, GDK_Greek_omega, 0x1F63,
GDK_dead_horn, GDK_Greek_ALPHA, 0x1F0A,
GDK_dead_horn, GDK_Greek_EPSILON, 0x1F1A,
GDK_dead_horn, GDK_Greek_ETA, 0x1F2A,
GDK_dead_horn, GDK_Greek_IOTA, 0x1F3A,
GDK_dead_horn, GDK_Greek_OMICRON, 0x1F4A,
GDK_dead_horn, GDK_Greek_OMEGA, 0x1F6A,
GDK_dead_horn, GDK_Greek_alpha, 0x1F02,
GDK_dead_horn, GDK_Greek_epsilon, 0x1F12,
GDK_dead_horn, GDK_Greek_eta, 0x1F22,
GDK_dead_horn, GDK_Greek_iota, 0x1F32,
GDK_dead_horn, GDK_Greek_omicron, 0x1F42,
GDK_dead_horn, GDK_Greek_upsilon, 0x1F52,
GDK_dead_horn, GDK_Greek_omega, 0x1F62,
GDK_dead_psili, GDK_Greek_ALPHA, 0x1F0A,
GDK_dead_psili, GDK_Greek_EPSILON, 0x1F1A,
GDK_dead_psili, GDK_Greek_ETA, 0x1F2A,
GDK_dead_psili, GDK_Greek_IOTA, 0x1F3A,
GDK_dead_psili, GDK_Greek_OMICRON, 0x1F4A,
GDK_dead_psili, GDK_Greek_OMEGA, 0x1F6A,
GDK_dead_psili, GDK_Greek_alpha, 0x1F02,
GDK_dead_psili, GDK_Greek_epsilon, 0x1F12,
GDK_dead_psili, GDK_Greek_eta, 0x1F22,
GDK_dead_psili, GDK_Greek_iota, 0x1F32,
GDK_dead_psili, GDK_Greek_omicron, 0x1F42,
GDK_dead_psili, GDK_Greek_upsilon, 0x1F52,
GDK_dead_psili, GDK_Greek_omega, 0x1F62,
GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F0B,
GDK_dead_dasia, GDK_Greek_EPSILON, 0x1F1B,
GDK_dead_dasia, GDK_Greek_ETA, 0x1F2B,
GDK_dead_dasia, GDK_Greek_IOTA, 0x1F3B,
GDK_dead_dasia, GDK_Greek_OMICRON, 0x1F4B,
GDK_dead_dasia, GDK_Greek_UPSILON, 0x1F5B,
GDK_dead_dasia, GDK_Greek_OMEGA, 0x1F6B,
GDK_dead_dasia, GDK_Greek_alpha, 0x1F03,
GDK_dead_dasia, GDK_Greek_epsilon, 0x1F13,
GDK_dead_dasia, GDK_Greek_eta, 0x1F23,
GDK_dead_dasia, GDK_Greek_iota, 0x1F33,
GDK_dead_dasia, GDK_Greek_omicron, 0x1F43,
GDK_dead_dasia, GDK_Greek_upsilon, 0x1F53,
GDK_dead_dasia, GDK_Greek_omega, 0x1F63,
GDK_Multi_key, GDK_quotedbl, GDK_U, 0x01DB,
GDK_Multi_key, GDK_quotedbl, GDK_u, 0x01DC,
GDK_Multi_key, GDK_quotedbl, GDK_Greek_iota, 0x1FD2,
@ -227,37 +247,37 @@ GDK_Greek_omicron, 0x03CC,
GDK_Greek_upsilon, 0x03CD,
GDK_Greek_omega, 0x03CE,
GDK_dead_acute, 0x00B4,
GDK_dead_diaeresis, GDK_Greek_iota, 0x0390,
GDK_dead_diaeresis, GDK_Greek_upsilon, 0x03B0,
GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F0D,
GDK_dead_ogonek, GDK_Greek_EPSILON, 0x1F1D,
GDK_dead_ogonek, GDK_Greek_ETA, 0x1F2D,
GDK_dead_ogonek, GDK_Greek_IOTA, 0x1F3D,
GDK_dead_ogonek, GDK_Greek_OMICRON, 0x1F4D,
GDK_dead_ogonek, GDK_Greek_UPSILON, 0x1F5D,
GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1F6D,
GDK_dead_ogonek, GDK_Greek_alpha, 0x1F05,
GDK_dead_ogonek, GDK_Greek_epsilon, 0x1F15,
GDK_dead_ogonek, GDK_Greek_eta, 0x1F25,
GDK_dead_ogonek, GDK_Greek_iota, 0x1F35,
GDK_dead_ogonek, GDK_Greek_omicron, 0x1F45,
GDK_dead_ogonek, GDK_Greek_upsilon, 0x1F55,
GDK_dead_ogonek, GDK_Greek_omega, 0x1F65,
GDK_dead_horn, GDK_Greek_ALPHA, 0x1F0C,
GDK_dead_horn, GDK_Greek_EPSILON, 0x1F1C,
GDK_dead_horn, GDK_Greek_ETA, 0x1F2C,
GDK_dead_horn, GDK_Greek_IOTA, 0x1F3C,
GDK_dead_horn, GDK_Greek_OMICRON, 0x1F4C,
GDK_dead_horn, GDK_Greek_OMEGA, 0x1F6C,
GDK_dead_horn, GDK_Greek_alpha, 0x1F04,
GDK_dead_horn, GDK_Greek_epsilon, 0x1F14,
GDK_dead_horn, GDK_Greek_eta, 0x1F24,
GDK_dead_horn, GDK_Greek_iota, 0x1F34,
GDK_dead_horn, GDK_Greek_omicron, 0x1F44,
GDK_dead_horn, GDK_Greek_upsilon, 0x1F54,
GDK_dead_horn, GDK_Greek_omega, 0x1F64,
GDK_dead_stroke, GDK_O, 0x01FE,
GDK_dead_stroke, GDK_o, 0x01FF,
GDK_dead_diaeresis, GDK_Greek_iota, 0x0390,
GDK_dead_diaeresis, GDK_Greek_upsilon, 0x03B0,
GDK_dead_psili, GDK_Greek_ALPHA, 0x1F0C,
GDK_dead_psili, GDK_Greek_EPSILON, 0x1F1C,
GDK_dead_psili, GDK_Greek_ETA, 0x1F2C,
GDK_dead_psili, GDK_Greek_IOTA, 0x1F3C,
GDK_dead_psili, GDK_Greek_OMICRON, 0x1F4C,
GDK_dead_psili, GDK_Greek_OMEGA, 0x1F6C,
GDK_dead_psili, GDK_Greek_alpha, 0x1F04,
GDK_dead_psili, GDK_Greek_epsilon, 0x1F14,
GDK_dead_psili, GDK_Greek_eta, 0x1F24,
GDK_dead_psili, GDK_Greek_iota, 0x1F34,
GDK_dead_psili, GDK_Greek_omicron, 0x1F44,
GDK_dead_psili, GDK_Greek_upsilon, 0x1F54,
GDK_dead_psili, GDK_Greek_omega, 0x1F64,
GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F0D,
GDK_dead_dasia, GDK_Greek_EPSILON, 0x1F1D,
GDK_dead_dasia, GDK_Greek_ETA, 0x1F2D,
GDK_dead_dasia, GDK_Greek_IOTA, 0x1F3D,
GDK_dead_dasia, GDK_Greek_OMICRON, 0x1F4D,
GDK_dead_dasia, GDK_Greek_UPSILON, 0x1F5D,
GDK_dead_dasia, GDK_Greek_OMEGA, 0x1F6D,
GDK_dead_dasia, GDK_Greek_alpha, 0x1F05,
GDK_dead_dasia, GDK_Greek_epsilon, 0x1F15,
GDK_dead_dasia, GDK_Greek_eta, 0x1F25,
GDK_dead_dasia, GDK_Greek_iota, 0x1F35,
GDK_dead_dasia, GDK_Greek_omicron, 0x1F45,
GDK_dead_dasia, GDK_Greek_upsilon, 0x1F55,
GDK_dead_dasia, GDK_Greek_omega, 0x1F65,
GDK_Multi_key, GDK_quotedbl, GDK_I, 0x1E2E,
GDK_Multi_key, GDK_quotedbl, GDK_U, 0x01D7,
GDK_Multi_key, GDK_quotedbl, GDK_i, 0x1E2F,
@ -323,6 +343,8 @@ GDK_Multi_key, GDK_macron, GDK_E, 0x1E16,
GDK_Multi_key, GDK_macron, GDK_O, 0x1E52,
GDK_Multi_key, GDK_macron, GDK_e, 0x1E17,
GDK_Multi_key, GDK_macron, GDK_o, 0x1E53,
GDK_Multi_key, GDK_cedilla, GDK_C, 0x1E08,
GDK_Multi_key, GDK_cedilla, GDK_c, 0x1E09,
GDK_Multi_key, GDK_KP_Divide, GDK_O, 0x01FE,
GDK_Multi_key, GDK_KP_Divide, GDK_o, 0x01FF,
GDK_space, 0x005E,
@ -451,25 +473,25 @@ GDK_Greek_omega, 0x1FF6,
GDK_dead_tilde, 0x007E,
GDK_dead_diaeresis, GDK_Greek_iota, 0x1FD7,
GDK_dead_diaeresis, GDK_Greek_upsilon, 0x1FE7,
GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F0F,
GDK_dead_ogonek, GDK_Greek_ETA, 0x1F2F,
GDK_dead_ogonek, GDK_Greek_IOTA, 0x1F3F,
GDK_dead_ogonek, GDK_Greek_UPSILON, 0x1F5F,
GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1F6F,
GDK_dead_ogonek, GDK_Greek_alpha, 0x1F07,
GDK_dead_ogonek, GDK_Greek_eta, 0x1F27,
GDK_dead_ogonek, GDK_Greek_iota, 0x1F37,
GDK_dead_ogonek, GDK_Greek_upsilon, 0x1F57,
GDK_dead_ogonek, GDK_Greek_omega, 0x1F67,
GDK_dead_horn, GDK_Greek_ALPHA, 0x1F0E,
GDK_dead_horn, GDK_Greek_ETA, 0x1F2E,
GDK_dead_horn, GDK_Greek_IOTA, 0x1F3E,
GDK_dead_horn, GDK_Greek_OMEGA, 0x1F6E,
GDK_dead_horn, GDK_Greek_alpha, 0x1F06,
GDK_dead_horn, GDK_Greek_eta, 0x1F26,
GDK_dead_horn, GDK_Greek_iota, 0x1F36,
GDK_dead_horn, GDK_Greek_upsilon, 0x1F56,
GDK_dead_horn, GDK_Greek_omega, 0x1F66,
GDK_dead_psili, GDK_Greek_ALPHA, 0x1F0E,
GDK_dead_psili, GDK_Greek_ETA, 0x1F2E,
GDK_dead_psili, GDK_Greek_IOTA, 0x1F3E,
GDK_dead_psili, GDK_Greek_OMEGA, 0x1F6E,
GDK_dead_psili, GDK_Greek_alpha, 0x1F06,
GDK_dead_psili, GDK_Greek_eta, 0x1F26,
GDK_dead_psili, GDK_Greek_iota, 0x1F36,
GDK_dead_psili, GDK_Greek_upsilon, 0x1F56,
GDK_dead_psili, GDK_Greek_omega, 0x1F66,
GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F0F,
GDK_dead_dasia, GDK_Greek_ETA, 0x1F2F,
GDK_dead_dasia, GDK_Greek_IOTA, 0x1F3F,
GDK_dead_dasia, GDK_Greek_UPSILON, 0x1F5F,
GDK_dead_dasia, GDK_Greek_OMEGA, 0x1F6F,
GDK_dead_dasia, GDK_Greek_alpha, 0x1F07,
GDK_dead_dasia, GDK_Greek_eta, 0x1F27,
GDK_dead_dasia, GDK_Greek_iota, 0x1F37,
GDK_dead_dasia, GDK_Greek_upsilon, 0x1F57,
GDK_dead_dasia, GDK_Greek_omega, 0x1F67,
GDK_Multi_key, GDK_quotedbl, GDK_Greek_iota, 0x1FD7,
GDK_Multi_key, GDK_quotedbl, GDK_Greek_upsilon, 0x1FE7,
GDK_Multi_key, GDK_parenleft, GDK_Greek_ALPHA, 0x1F0F,
@ -557,6 +579,8 @@ GDK_Multi_key, GDK_exclam, GDK_A, 0x1EB6,
GDK_Multi_key, GDK_exclam, GDK_a, 0x1EB7,
GDK_Multi_key, GDK_comma, GDK_E, 0x1E1C,
GDK_Multi_key, GDK_comma, GDK_e, 0x1E1D,
GDK_Multi_key, GDK_cedilla, GDK_E, 0x1E1C,
GDK_Multi_key, GDK_cedilla, GDK_e, 0x1E1D,
GDK_space, 0x02D9,
GDK_i, 0x0131,
GDK_Sacute, 0x1E64,
@ -623,22 +647,6 @@ GDK_Multi_key, GDK_quotedbl, GDK_u, 0x01DA,
GDK_space, 0x00B8,
GDK_dead_cedilla, 0x00B8,
GDK_space, 0x02DB,
GDK_Greek_ALPHA, 0x1F09,
GDK_Greek_EPSILON, 0x1F19,
GDK_Greek_ETA, 0x1F29,
GDK_Greek_IOTA, 0x1F39,
GDK_Greek_OMICRON, 0x1F49,
GDK_Greek_RHO, 0x1FEC,
GDK_Greek_UPSILON, 0x1F59,
GDK_Greek_OMEGA, 0x1F69,
GDK_Greek_alpha, 0x1F01,
GDK_Greek_epsilon, 0x1F11,
GDK_Greek_eta, 0x1F21,
GDK_Greek_iota, 0x1F31,
GDK_Greek_omicron, 0x1F41,
GDK_Greek_rho, 0x1FE5,
GDK_Greek_upsilon, 0x1F51,
GDK_Greek_omega, 0x1F61,
GDK_dead_ogonek, 0x02DB,
GDK_space, 0x037A,
GDK_Greek_alphaaccent, 0x1FB4,
@ -651,9 +659,6 @@ GDK_Greek_alpha, 0x1FB3,
GDK_Greek_eta, 0x1FC3,
GDK_Greek_omega, 0x1FF3,
GDK_dead_iota, 0x037A,
0x0342, GDK_Greek_alpha, 0x1FB7,
0x0342, GDK_Greek_eta, 0x1FC7,
0x0342, GDK_Greek_omega, 0x1FF7,
GDK_dead_grave, GDK_Greek_alpha, 0x1FB2,
GDK_dead_grave, GDK_Greek_eta, 0x1FC2,
GDK_dead_grave, GDK_Greek_omega, 0x1FF2,
@ -675,66 +680,54 @@ GDK_dead_tilde, 0x1F60, 0x1FA6,
GDK_dead_tilde, 0x1F61, 0x1FA7,
GDK_dead_tilde, 0x1F68, 0x1FAE,
GDK_dead_tilde, 0x1F69, 0x1FAF,
GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F89,
GDK_dead_ogonek, GDK_Greek_ETA, 0x1F99,
GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FA9,
GDK_dead_ogonek, GDK_Greek_alpha, 0x1F81,
GDK_dead_ogonek, GDK_Greek_eta, 0x1F91,
GDK_dead_ogonek, GDK_Greek_omega, 0x1FA1,
GDK_dead_horn, GDK_Greek_ALPHA, 0x1F88,
GDK_dead_horn, GDK_Greek_ETA, 0x1F98,
GDK_dead_horn, GDK_Greek_OMEGA, 0x1FA8,
GDK_dead_horn, GDK_Greek_alpha, 0x1F80,
GDK_dead_horn, GDK_Greek_eta, 0x1F90,
GDK_dead_horn, GDK_Greek_omega, 0x1FA0,
0x0342, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8F,
0x0342, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9F,
0x0342, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAF,
0x0342, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F87,
0x0342, GDK_dead_ogonek, GDK_Greek_eta, 0x1F97,
0x0342, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA7,
0x0342, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8E,
0x0342, GDK_dead_horn, GDK_Greek_ETA, 0x1F9E,
0x0342, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAE,
0x0342, GDK_dead_horn, GDK_Greek_alpha, 0x1F86,
0x0342, GDK_dead_horn, GDK_Greek_eta, 0x1F96,
0x0342, GDK_dead_horn, GDK_Greek_omega, 0x1FA6,
GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8B,
GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9B,
GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAB,
GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F83,
GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_eta, 0x1F93,
GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA3,
GDK_dead_grave, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8A,
GDK_dead_grave, GDK_dead_horn, GDK_Greek_ETA, 0x1F9A,
GDK_dead_grave, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAA,
GDK_dead_grave, GDK_dead_horn, GDK_Greek_alpha, 0x1F82,
GDK_dead_grave, GDK_dead_horn, GDK_Greek_eta, 0x1F92,
GDK_dead_grave, GDK_dead_horn, GDK_Greek_omega, 0x1FA2,
GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8D,
GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9D,
GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAD,
GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F85,
GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_eta, 0x1F95,
GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA5,
GDK_dead_acute, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8C,
GDK_dead_acute, GDK_dead_horn, GDK_Greek_ETA, 0x1F9C,
GDK_dead_acute, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAC,
GDK_dead_acute, GDK_dead_horn, GDK_Greek_alpha, 0x1F84,
GDK_dead_acute, GDK_dead_horn, GDK_Greek_eta, 0x1F94,
GDK_dead_acute, GDK_dead_horn, GDK_Greek_omega, 0x1FA4,
GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8F,
GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9F,
GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAF,
GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F87,
GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_eta, 0x1F97,
GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA7,
GDK_dead_tilde, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8E,
GDK_dead_tilde, GDK_dead_horn, GDK_Greek_ETA, 0x1F9E,
GDK_dead_tilde, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAE,
GDK_dead_tilde, GDK_dead_horn, GDK_Greek_alpha, 0x1F86,
GDK_dead_tilde, GDK_dead_horn, GDK_Greek_eta, 0x1F96,
GDK_dead_tilde, GDK_dead_horn, GDK_Greek_omega, 0x1FA6,
GDK_dead_psili, GDK_Greek_ALPHA, 0x1F88,
GDK_dead_psili, GDK_Greek_ETA, 0x1F98,
GDK_dead_psili, GDK_Greek_OMEGA, 0x1FA8,
GDK_dead_psili, GDK_Greek_alpha, 0x1F80,
GDK_dead_psili, GDK_Greek_eta, 0x1F90,
GDK_dead_psili, GDK_Greek_omega, 0x1FA0,
GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F89,
GDK_dead_dasia, GDK_Greek_ETA, 0x1F99,
GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FA9,
GDK_dead_dasia, GDK_Greek_alpha, 0x1F81,
GDK_dead_dasia, GDK_Greek_eta, 0x1F91,
GDK_dead_dasia, GDK_Greek_omega, 0x1FA1,
GDK_dead_grave, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8A,
GDK_dead_grave, GDK_dead_psili, GDK_Greek_ETA, 0x1F9A,
GDK_dead_grave, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAA,
GDK_dead_grave, GDK_dead_psili, GDK_Greek_alpha, 0x1F82,
GDK_dead_grave, GDK_dead_psili, GDK_Greek_eta, 0x1F92,
GDK_dead_grave, GDK_dead_psili, GDK_Greek_omega, 0x1FA2,
GDK_dead_grave, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8B,
GDK_dead_grave, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9B,
GDK_dead_grave, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAB,
GDK_dead_grave, GDK_dead_dasia, GDK_Greek_alpha, 0x1F83,
GDK_dead_grave, GDK_dead_dasia, GDK_Greek_eta, 0x1F93,
GDK_dead_grave, GDK_dead_dasia, GDK_Greek_omega, 0x1FA3,
GDK_dead_acute, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8C,
GDK_dead_acute, GDK_dead_psili, GDK_Greek_ETA, 0x1F9C,
GDK_dead_acute, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAC,
GDK_dead_acute, GDK_dead_psili, GDK_Greek_alpha, 0x1F84,
GDK_dead_acute, GDK_dead_psili, GDK_Greek_eta, 0x1F94,
GDK_dead_acute, GDK_dead_psili, GDK_Greek_omega, 0x1FA4,
GDK_dead_acute, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8D,
GDK_dead_acute, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9D,
GDK_dead_acute, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAD,
GDK_dead_acute, GDK_dead_dasia, GDK_Greek_alpha, 0x1F85,
GDK_dead_acute, GDK_dead_dasia, GDK_Greek_eta, 0x1F95,
GDK_dead_acute, GDK_dead_dasia, GDK_Greek_omega, 0x1FA5,
GDK_dead_tilde, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8E,
GDK_dead_tilde, GDK_dead_psili, GDK_Greek_ETA, 0x1F9E,
GDK_dead_tilde, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAE,
GDK_dead_tilde, GDK_dead_psili, GDK_Greek_alpha, 0x1F86,
GDK_dead_tilde, GDK_dead_psili, GDK_Greek_eta, 0x1F96,
GDK_dead_tilde, GDK_dead_psili, GDK_Greek_omega, 0x1FA6,
GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8F,
GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9F,
GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAF,
GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_alpha, 0x1F87,
GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_eta, 0x1F97,
GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_omega, 0x1FA7,
GDK_Multi_key, GDK_apostrophe, GDK_Greek_alpha, 0x1FB4,
GDK_Multi_key, GDK_apostrophe, GDK_Greek_eta, 0x1FC4,
GDK_Multi_key, GDK_apostrophe, GDK_Greek_omega, 0x1FF4,
@ -807,18 +800,6 @@ GDK_Multi_key, GDK_acute, 0x1F60, 0x1FA4,
GDK_Multi_key, GDK_acute, 0x1F61, 0x1FA5,
GDK_Multi_key, GDK_acute, 0x1F68, 0x1FAC,
GDK_Multi_key, GDK_acute, 0x1F69, 0x1FAD,
0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8F,
0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_ETA, 0x1F9F,
0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAF,
0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_alpha, 0x1F87,
0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_eta, 0x1F97,
0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_omega, 0x1FA7,
0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_ALPHA, 0x1F8E,
0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_ETA, 0x1F9E,
0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_OMEGA, 0x1FAE,
0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_alpha, 0x1F86,
0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_eta, 0x1F96,
0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_omega, 0x1FA6,
GDK_dead_grave, GDK_Multi_key, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8B,
GDK_dead_grave, GDK_Multi_key, GDK_parenleft, GDK_Greek_ETA, 0x1F9B,
GDK_dead_grave, GDK_Multi_key, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAB,
@ -979,6 +960,9 @@ GDK_kana_HI, 0x30D4,
GDK_kana_FU, 0x30D7,
GDK_kana_HE, 0x30DA,
GDK_kana_HO, 0x30DD,
GDK_plus, 0x2A25,
GDK_minus, 0x2A2A,
GDK_equal, 0x2A66,
GDK_Abreve, 0x1EB6,
GDK_abreve, 0x1EB7,
GDK_Multi_key, GDK_plus, GDK_O, 0x1EE2,
@ -1015,25 +999,22 @@ GDK_Greek_omicron, 0x1F40,
GDK_Greek_rho, 0x1FE4,
GDK_Greek_upsilon, 0x1F50,
GDK_Greek_omega, 0x1F60,
GDK_D, 0x0110,
GDK_G, 0x01E4,
GDK_H, 0x0126,
GDK_I, 0x0197,
GDK_L, 0x0141,
GDK_O, 0x00D8,
GDK_T, 0x0166,
GDK_Z, 0x01B5,
GDK_b, 0x0180,
GDK_d, 0x0111,
GDK_g, 0x01E5,
GDK_h, 0x0127,
GDK_i, 0x0268,
GDK_l, 0x0142,
GDK_o, 0x00F8,
GDK_t, 0x0167,
GDK_z, 0x01B6,
GDK_dead_acute, GDK_O, 0x01FE,
GDK_dead_acute, GDK_o, 0x01FF,
GDK_Greek_ALPHA, 0x1F09,
GDK_Greek_EPSILON, 0x1F19,
GDK_Greek_ETA, 0x1F29,
GDK_Greek_IOTA, 0x1F39,
GDK_Greek_OMICRON, 0x1F49,
GDK_Greek_RHO, 0x1FEC,
GDK_Greek_UPSILON, 0x1F59,
GDK_Greek_OMEGA, 0x1F69,
GDK_Greek_alpha, 0x1F01,
GDK_Greek_epsilon, 0x1F11,
GDK_Greek_eta, 0x1F21,
GDK_Greek_iota, 0x1F31,
GDK_Greek_omicron, 0x1F41,
GDK_Greek_rho, 0x1FE5,
GDK_Greek_upsilon, 0x1F51,
GDK_Greek_omega, 0x1F61,
GDK_space, GDK_space, 0x00A0,
GDK_space, GDK_apostrophe, 0x0027,
GDK_space, GDK_comma, 0x00B8,
@ -1044,6 +1025,7 @@ GDK_space, GDK_asciicircum, 0x005E,
GDK_space, GDK_grave, 0x0060,
GDK_space, GDK_asciitilde, 0x007E,
GDK_exclam, GDK_exclam, 0x00A1,
GDK_exclam, GDK_question, 0x203D,
GDK_exclam, GDK_A, 0x1EA0,
GDK_exclam, GDK_B, 0x1E04,
GDK_exclam, GDK_D, 0x1E0C,
@ -1083,6 +1065,10 @@ GDK_exclam, GDK_v, 0x1E7F,
GDK_exclam, GDK_w, 0x1E89,
GDK_exclam, GDK_y, 0x1EF5,
GDK_exclam, GDK_z, 0x1E93,
GDK_exclam, GDK_Ohorn, 0x1EE2,
GDK_exclam, GDK_ohorn, 0x1EE3,
GDK_exclam, GDK_Uhorn, 0x1EF0,
GDK_exclam, GDK_uhorn, 0x1EF1,
GDK_quotedbl, GDK_apostrophe, 0x0344,
GDK_quotedbl, GDK_comma, 0x201E,
GDK_quotedbl, GDK_slash, 0x301E,
@ -1207,6 +1193,10 @@ GDK_apostrophe, GDK_ocircumflex, 0x1ED1,
GDK_apostrophe, GDK_otilde, 0x1E4D,
GDK_apostrophe, GDK_oslash, 0x01FF,
GDK_apostrophe, GDK_udiaeresis, 0x01D8,
GDK_apostrophe, GDK_Ohorn, 0x1EDA,
GDK_apostrophe, GDK_ohorn, 0x1EDB,
GDK_apostrophe, GDK_Uhorn, 0x1EE8,
GDK_apostrophe, GDK_uhorn, 0x1EE9,
GDK_apostrophe, GDK_Abreve, 0x1EAE,
GDK_apostrophe, GDK_abreve, 0x1EAF,
GDK_apostrophe, GDK_Emacron, 0x1E16,
@ -1421,8 +1411,20 @@ GDK_slash, GDK_leftarrow, 0x219A,
GDK_slash, GDK_rightarrow, 0x219B,
GDK_slash, 0x2194, 0x21AE,
GDK_1, GDK_2, 0x00BD,
GDK_1, GDK_3, 0x2153,
GDK_1, GDK_4, 0x00BC,
GDK_1, GDK_5, 0x2155,
GDK_1, GDK_6, 0x2159,
GDK_1, GDK_8, 0x215B,
GDK_2, GDK_3, 0x2154,
GDK_2, GDK_5, 0x2156,
GDK_3, GDK_4, 0x00BE,
GDK_3, GDK_5, 0x2157,
GDK_3, GDK_8, 0x215C,
GDK_4, GDK_5, 0x2158,
GDK_5, GDK_6, 0x215A,
GDK_5, GDK_8, 0x215D,
GDK_7, GDK_8, 0x215E,
GDK_colon, GDK_minus, 0x00F7,
GDK_semicolon, GDK_A, 0x0104,
GDK_semicolon, GDK_E, 0x0118,
@ -1461,6 +1463,7 @@ GDK_greater, GDK_quotedbl, 0x201D,
GDK_greater, GDK_apostrophe, 0x2019,
GDK_greater, GDK_greater, 0x00BB,
GDK_greater, 0x0338, 0x226F,
GDK_question, GDK_exclam, 0x203D,
GDK_question, GDK_question, 0x00BF,
GDK_question, GDK_A, 0x1EA2,
GDK_question, GDK_E, 0x1EBA,
@ -1480,6 +1483,10 @@ GDK_question, GDK_Ocircumflex, 0x1ED4,
GDK_question, GDK_acircumflex, 0x1EA9,
GDK_question, GDK_ecircumflex, 0x1EC3,
GDK_question, GDK_ocircumflex, 0x1ED5,
GDK_question, GDK_Ohorn, 0x1EDE,
GDK_question, GDK_ohorn, 0x1EDF,
GDK_question, GDK_Uhorn, 0x1EEC,
GDK_question, GDK_uhorn, 0x1EED,
GDK_question, GDK_Abreve, 0x1EB2,
GDK_question, GDK_abreve, 0x1EB3,
GDK_A, GDK_E, 0x00C6,
@ -1720,6 +1727,10 @@ GDK_grave, GDK_acircumflex, 0x1EA7,
GDK_grave, GDK_ecircumflex, 0x1EC1,
GDK_grave, GDK_ocircumflex, 0x1ED3,
GDK_grave, GDK_udiaeresis, 0x01DC,
GDK_grave, GDK_Ohorn, 0x1EDC,
GDK_grave, GDK_ohorn, 0x1EDD,
GDK_grave, GDK_Uhorn, 0x1EEA,
GDK_grave, GDK_uhorn, 0x1EEB,
GDK_grave, GDK_Abreve, 0x1EB0,
GDK_grave, GDK_abreve, 0x1EB1,
GDK_grave, GDK_Emacron, 0x1E14,
@ -1908,6 +1919,10 @@ GDK_asciitilde, GDK_Ocircumflex, 0x1ED6,
GDK_asciitilde, GDK_acircumflex, 0x1EAB,
GDK_asciitilde, GDK_ecircumflex, 0x1EC5,
GDK_asciitilde, GDK_ocircumflex, 0x1ED7,
GDK_asciitilde, GDK_Ohorn, 0x1EE0,
GDK_asciitilde, GDK_ohorn, 0x1EE1,
GDK_asciitilde, GDK_Uhorn, 0x1EEE,
GDK_asciitilde, GDK_uhorn, 0x1EEF,
GDK_asciitilde, GDK_Abreve, 0x1EB4,
GDK_asciitilde, GDK_abreve, 0x1EB5,
GDK_asciitilde, GDK_Greek_iotadieresis, 0x1FD7,
@ -1940,7 +1955,6 @@ GDK_diaeresis, GDK_apostrophe, 0x0385,
GDK_diaeresis, GDK_grave, 0x1FED,
GDK_diaeresis, GDK_asciitilde, 0x1FC1,
GDK_diaeresis, GDK_acute, 0x0385,
GDK_diaeresis, 0x0342, 0x1FC1,
GDK_diaeresis, GDK_dead_grave, 0x1FED,
GDK_diaeresis, GDK_dead_acute, 0x0385,
GDK_diaeresis, GDK_dead_tilde, 0x1FC1,
@ -2042,6 +2056,10 @@ GDK_acute, GDK_ocircumflex, 0x1ED1,
GDK_acute, GDK_otilde, 0x1E4D,
GDK_acute, GDK_oslash, 0x01FF,
GDK_acute, GDK_udiaeresis, 0x01D8,
GDK_acute, GDK_Ohorn, 0x1EDA,
GDK_acute, GDK_ohorn, 0x1EDB,
GDK_acute, GDK_Uhorn, 0x1EE8,
GDK_acute, GDK_uhorn, 0x1EE9,
GDK_acute, GDK_Abreve, 0x1EAE,
GDK_acute, GDK_abreve, 0x1EAF,
GDK_acute, GDK_Emacron, 0x1E16,
@ -2097,6 +2115,28 @@ GDK_acute, 0x1F60, 0x1F64,
GDK_acute, 0x1F61, 0x1F65,
GDK_acute, 0x1F68, 0x1F6C,
GDK_acute, 0x1F69, 0x1F6D,
GDK_cedilla, GDK_C, 0x00C7,
GDK_cedilla, GDK_D, 0x1E10,
GDK_cedilla, GDK_E, 0x0228,
GDK_cedilla, GDK_G, 0x0122,
GDK_cedilla, GDK_H, 0x1E28,
GDK_cedilla, GDK_K, 0x0136,
GDK_cedilla, GDK_L, 0x013B,
GDK_cedilla, GDK_N, 0x0145,
GDK_cedilla, GDK_R, 0x0156,
GDK_cedilla, GDK_S, 0x015E,
GDK_cedilla, GDK_T, 0x0162,
GDK_cedilla, GDK_c, 0x00E7,
GDK_cedilla, GDK_d, 0x1E11,
GDK_cedilla, GDK_e, 0x0229,
GDK_cedilla, GDK_g, 0x0123,
GDK_cedilla, GDK_h, 0x1E29,
GDK_cedilla, GDK_k, 0x0137,
GDK_cedilla, GDK_l, 0x013C,
GDK_cedilla, GDK_n, 0x0146,
GDK_cedilla, GDK_r, 0x0157,
GDK_cedilla, GDK_s, 0x015F,
GDK_cedilla, GDK_t, 0x0163,
0x05B4, GDK_hebrew_yod, 0xFB1D,
0x05B7, 0x05F2, 0xFB1F,
0x05B7, GDK_hebrew_aleph, 0xFB2E,
@ -2520,7 +2560,6 @@ GDK_righttack, 0x0338, 0x22AC,
0x1FBF, GDK_grave, 0x1FCD,
0x1FBF, GDK_asciitilde, 0x1FCF,
0x1FBF, GDK_acute, 0x1FCE,
0x1FBF, 0x0342, 0x1FCF,
0x1FBF, GDK_dead_grave, 0x1FCD,
0x1FBF, GDK_dead_acute, 0x1FCE,
0x1FBF, GDK_dead_tilde, 0x1FCF,
@ -2528,7 +2567,6 @@ GDK_righttack, 0x0338, 0x22AC,
0x1FFE, GDK_grave, 0x1FDD,
0x1FFE, GDK_asciitilde, 0x1FDF,
0x1FFE, GDK_acute, 0x1FDE,
0x1FFE, 0x0342, 0x1FDF,
0x1FFE, GDK_dead_grave, 0x1FDD,
0x1FFE, GDK_dead_acute, 0x1FDE,
0x1FFE, GDK_dead_tilde, 0x1FDF,
@ -2666,6 +2704,8 @@ GDK_apostrophe, GDK_macron, GDK_E, 0x1E16,
GDK_apostrophe, GDK_macron, GDK_O, 0x1E52,
GDK_apostrophe, GDK_macron, GDK_e, 0x1E17,
GDK_apostrophe, GDK_macron, GDK_o, 0x1E53,
GDK_apostrophe, GDK_cedilla, GDK_C, 0x1E08,
GDK_apostrophe, GDK_cedilla, GDK_c, 0x1E09,
GDK_apostrophe, GDK_dead_circumflex, GDK_A, 0x1EA4,
GDK_apostrophe, GDK_dead_circumflex, GDK_E, 0x1EBE,
GDK_apostrophe, GDK_dead_circumflex, GDK_O, 0x1ED0,
@ -2950,6 +2990,8 @@ GDK_U, GDK_exclam, GDK_A, 0x1EB6,
GDK_U, GDK_exclam, GDK_a, 0x1EB7,
GDK_U, GDK_comma, GDK_E, 0x1E1C,
GDK_U, GDK_comma, GDK_e, 0x1E1D,
GDK_U, GDK_cedilla, GDK_E, 0x1E1C,
GDK_U, GDK_cedilla, GDK_e, 0x1E1D,
GDK_U, GDK_dead_cedilla, GDK_E, 0x1E1C,
GDK_U, GDK_dead_cedilla, GDK_e, 0x1E1D,
GDK_U, GDK_dead_belowdot, GDK_A, 0x1EB6,
@ -3140,6 +3182,8 @@ GDK_b, GDK_exclam, GDK_A, 0x1EB6,
GDK_b, GDK_exclam, GDK_a, 0x1EB7,
GDK_b, GDK_comma, GDK_E, 0x1E1C,
GDK_b, GDK_comma, GDK_e, 0x1E1D,
GDK_b, GDK_cedilla, GDK_E, 0x1E1C,
GDK_b, GDK_cedilla, GDK_e, 0x1E1D,
GDK_b, GDK_dead_cedilla, GDK_E, 0x1E1C,
GDK_b, GDK_dead_cedilla, GDK_e, 0x1E1D,
GDK_b, GDK_dead_belowdot, GDK_A, 0x1EB6,
@ -3313,6 +3357,8 @@ GDK_acute, GDK_macron, GDK_E, 0x1E16,
GDK_acute, GDK_macron, GDK_O, 0x1E52,
GDK_acute, GDK_macron, GDK_e, 0x1E17,
GDK_acute, GDK_macron, GDK_o, 0x1E53,
GDK_acute, GDK_cedilla, GDK_C, 0x1E08,
GDK_acute, GDK_cedilla, GDK_c, 0x1E09,
GDK_acute, GDK_dead_circumflex, GDK_A, 0x1EA4,
GDK_acute, GDK_dead_circumflex, GDK_E, 0x1EBE,
GDK_acute, GDK_dead_circumflex, GDK_O, 0x1ED0,
@ -3446,21 +3492,6 @@ GDK_Greek_iota, GDK_acute, 0x1F60, 0x1FA4,
GDK_Greek_iota, GDK_acute, 0x1F61, 0x1FA5,
GDK_Greek_iota, GDK_acute, 0x1F68, 0x1FAC,
GDK_Greek_iota, GDK_acute, 0x1F69, 0x1FAD,
GDK_Greek_iota, 0x0342, GDK_Greek_alpha, 0x1FB7,
GDK_Greek_iota, 0x0342, GDK_Greek_eta, 0x1FC7,
GDK_Greek_iota, 0x0342, GDK_Greek_omega, 0x1FF7,
GDK_Greek_iota, 0x0342, 0x1F00, 0x1F86,
GDK_Greek_iota, 0x0342, 0x1F01, 0x1F87,
GDK_Greek_iota, 0x0342, 0x1F08, 0x1F8E,
GDK_Greek_iota, 0x0342, 0x1F09, 0x1F8F,
GDK_Greek_iota, 0x0342, 0x1F20, 0x1F96,
GDK_Greek_iota, 0x0342, 0x1F21, 0x1F97,
GDK_Greek_iota, 0x0342, 0x1F28, 0x1F9E,
GDK_Greek_iota, 0x0342, 0x1F29, 0x1F9F,
GDK_Greek_iota, 0x0342, 0x1F60, 0x1FA6,
GDK_Greek_iota, 0x0342, 0x1F61, 0x1FA7,
GDK_Greek_iota, 0x0342, 0x1F68, 0x1FAE,
GDK_Greek_iota, 0x0342, 0x1F69, 0x1FAF,
GDK_Greek_iota, GDK_dead_grave, GDK_Greek_alpha, 0x1FB2,
GDK_Greek_iota, GDK_dead_grave, GDK_Greek_eta, 0x1FC2,
GDK_Greek_iota, GDK_dead_grave, GDK_Greek_omega, 0x1FF2,
@ -3819,30 +3850,6 @@ GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAD,
GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_alpha, 0x1F85,
GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_eta, 0x1F95,
GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_omega, 0x1FA5,
GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8F,
GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_ETA, 0x1F9F,
GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAF,
GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_alpha, 0x1F87,
GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_eta, 0x1F97,
GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_omega, 0x1FA7,
GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_ALPHA, 0x1F8E,
GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_ETA, 0x1F9E,
GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_OMEGA, 0x1FAE,
GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_alpha, 0x1F86,
GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_eta, 0x1F96,
GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_omega, 0x1FA6,
GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8E,
GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_ETA, 0x1F9E,
GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAE,
GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_alpha, 0x1F86,
GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_eta, 0x1F96,
GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_omega, 0x1FA6,
GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8F,
GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9F,
GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAF,
GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_alpha, 0x1F87,
GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_eta, 0x1F97,
GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_omega, 0x1FA7,
GDK_Greek_iota, GDK_dead_grave, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8B,
GDK_Greek_iota, GDK_dead_grave, GDK_parenleft, GDK_Greek_ETA, 0x1F9B,
GDK_Greek_iota, GDK_dead_grave, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAB,