gtk+ r21339 - in trunk: . gtk



Author: simos
Date: Wed Sep 10 18:03:53 2008
New Revision: 21339
URL: http://svn.gnome.org/viewvc/gtk+?rev=21339&view=rev

Log:
Closed Bug 550676 â Memory leak, update keyboard layout data table

Modified:
   trunk/ChangeLog
   trunk/gtk/compose-parse.py
   trunk/gtk/gtkimcontextsimple.c
   trunk/gtk/gtkimcontextsimpleseqs.h

Modified: trunk/gtk/compose-parse.py
==============================================================================
--- trunk/gtk/compose-parse.py	(original)
+++ trunk/gtk/compose-parse.py	Wed Sep 10 18:03:53 2008
@@ -279,9 +279,17 @@
 
 	""" 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 @@
 	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 @@
 	""" 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 @@
        	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 @@
 	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 @@
 			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 @@
 					    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 @@
 						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:

Modified: trunk/gtk/gtkimcontextsimple.c
==============================================================================
--- trunk/gtk/gtkimcontextsimple.c	(original)
+++ trunk/gtk/gtkimcontextsimple.c	Wed Sep 10 18:03:53 2008
@@ -61,7 +61,7 @@
 static const GtkComposeTableCompact gtk_compose_table_compact = {
   gtk_compose_seqs_compact,
   5,
-  21,
+  22,
   6
 };
 
@@ -340,10 +340,77 @@
   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 @@
 		       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 @@
 	    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 (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 (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 (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. */
-	    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 (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 @@
 	  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;
-
-	  memcpy (combination_buffer_temp, combination_buffer, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) );
-
-	  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;
+          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);
+          g_free (combination_utf8);
+          g_free (nfc);
+
+          return TRUE;
+        }
     }
 
   return FALSE;
@@ -899,11 +925,11 @@
           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 */

Modified: trunk/gtk/gtkimcontextsimpleseqs.h
==============================================================================
--- trunk/gtk/gtkimcontextsimpleseqs.h	(original)
+++ trunk/gtk/gtkimcontextsimpleseqs.h	Wed Sep 10 18:03:53 2008
@@ -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_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_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_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_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, 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_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_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, 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, 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_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_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_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_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_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_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_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_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_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_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_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_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, 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 @@
 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 @@
 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_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, 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, 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_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, 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_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, 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]