public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Takao Fujiwara <tfujiwar@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/ibus] autotool: Delete upstream patches
Date: Sun, 31 May 2026 02:08:06 GMT [thread overview]
Message-ID: <178019328622.1.15236656248940941244.rpms-ibus-f48dc0ddb5c6@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/ibus
Branch : autotool
Commit : f48dc0ddb5c6a12e7833c8b1d3cb99dc7ae23eb7
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date : 2023-02-21T12:58:55+09:00
Stats : +0/-9601 in 1 file(s)
URL : https://src.fedoraproject.org/rpms/ibus/c/f48dc0ddb5c6a12e7833c8b1d3cb99dc7ae23eb7?branch=autotool
Log:
Delete upstream patches
---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
deleted file mode 100644
index 53137f6..0000000
--- a/ibus-HEAD.patch
+++ /dev/null
@@ -1,9601 +0,0 @@
-From babad7839ba6d72609c717d647bb2928724b4cc3 Mon Sep 17 00:00:00 2001
-From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
-Date: Tue, 6 Sep 2022 17:08:43 +0900
-Subject: [PATCH] tools: Check libdl for dlclose() properly in configure
-
-BUG=https://github.com/ibus/ibus/pull/2442
----
- configure.ac | 4 ++++
- tools/Makefile.am | 2 +-
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 0868d6c9..2344523a 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -147,6 +147,10 @@ AC_CHECK_HEADERS([sys/prctl.h])
- # Check functions.
- AC_CHECK_FUNCS(daemon)
-
-+# Check dlclose() in libc.so.
-+AC_CHECK_LIB(c, dlclose, LIBDL="", [AC_CHECK_LIB(dl, dlclose, LIBDL="-ldl")])
-+AC_SUBST(LIBDL)
-+
- # Check packages.
- # Check glib2.
- AM_PATH_GLIB_2_0
-diff --git a/tools/Makefile.am b/tools/Makefile.am
-index b82395da..e300f9f3 100644
---- a/tools/Makefile.am
-+++ b/tools/Makefile.am
-@@ -63,7 +63,7 @@ AM_LDADD = \
- @GTHREAD2_LIBS@ \
- $(libibus) \
- $(libibusimmodule) \
-- -ldl \
-+ $(LIBDL) \
- $(NULL)
-
- AM_VALAFLAGS = \
---
-2.37.3
-
-From 39b69073ad34ab89a3e5aa012ff740c84f69eb8f Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 16 Sep 2022 14:30:35 +0900
-Subject: [PATCH] client/gtk2: Stop many warnings of surrounding text
-
-Surrounding text is requested by ibus_im_context_filter_keypress()
-and the no supported warning could be output many times.
-Now the warning is output one time by input context but
-brower applicaations do not use GtkWidget for the input context
-so the warning is output by instance but not input context.
-
-BUG=https://github.com/ibus/ibus/issues/2418
----
- client/gtk2/ibusimcontext.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
-index bc14df00..3fc9c0f2 100644
---- a/client/gtk2/ibusimcontext.c
-+++ b/client/gtk2/ibusimcontext.c
-@@ -567,6 +567,7 @@ _process_key_event (IBusInputContext *context,
- static void
- _request_surrounding_text (IBusIMContext *context)
- {
-+ static gboolean warned = FALSE;
- if (context &&
- (context->caps & IBUS_CAP_SURROUNDING_TEXT) != 0 &&
- context->ibuscontext != NULL &&
-@@ -580,8 +581,11 @@ _request_surrounding_text (IBusIMContext *context)
- * fail with the first typing on firefox but it succeeds with
- * the second typing.
- */
-- g_warning ("%s has no capability of surrounding-text feature",
-- g_get_prgname ());
-+ if (!warned) {
-+ g_warning ("%s has no capability of surrounding-text feature",
-+ g_get_prgname ());
-+ warned = TRUE;
-+ }
- }
- }
- }
---
-2.37.3
-
-From 50f8d8b79bc8eac1bae80116fe669d7314a44663 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 16 Sep 2022 14:34:54 +0900
-Subject: [PATCH] client/gtk2: Update capabilities if "retrieve-surrounding" is
- failed
-
-Some engine developers wish to update the capabilities if emitting
-"retrieve-surrounding" signal is failed so that engines disable the
-surrounding text feature but I had deleted the logic with #2054 since
-the second typing could be succeeded.
-Asking all applications the second typing would not be a good condition
-and the special issue should be fixed in firefox.
-
-Fixes: https://github.com/ibus/ibus/commit/7b3b8c8b0c
-
-BUG=https://github.com/ibus/ibus/issues/2054
-BUG=https://github.com/ibus/ibus/issues/2354
----
- client/gtk2/ibusimcontext.c | 10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
-index 3fc9c0f2..eaf7eb90 100644
---- a/client/gtk2/ibusimcontext.c
-+++ b/client/gtk2/ibusimcontext.c
-@@ -577,10 +577,14 @@ _request_surrounding_text (IBusIMContext *context)
- g_signal_emit (context, _signal_retrieve_surrounding_id, 0,
- &return_value);
- if (!return_value) {
-- /* #2054 firefox::IMContextWrapper::GetCurrentParagraph() could
-- * fail with the first typing on firefox but it succeeds with
-- * the second typing.
-+ /* Engines can disable the surrounding text feature with
-+ * the updated capabilities.
- */
-+ if (context->caps & IBUS_CAP_SURROUNDING_TEXT) {
-+ context->caps &= ~IBUS_CAP_SURROUNDING_TEXT;
-+ ibus_input_context_set_capabilities (context->ibuscontext,
-+ context->caps);
-+ }
- if (!warned) {
- g_warning ("%s has no capability of surrounding-text feature",
- g_get_prgname ());
---
-2.37.3
-
-From 7bbcce66e1ca694b7a62553327161290bf4ee283 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Mon, 19 Sep 2022 11:52:14 +0900
-Subject: [PATCH] client/gtk2: Update surrounding text properties by focus in
-
-ibus_input_context_set_surrounding_text() should be succeeded
-if input contexts are different so that ibus engines can
-update surrounding text properties with focus in event.
-
-When an input context is created newly, RequireSurroundingText D-Bus
-signal could not be received yet and set_surrounding_text() is failed.
-Now "require-surrounding-text" signal is added to IBusInputContext
-and clients can call set_surrounding_text() later.
-
-BUG=https://github.com/ibus/ibus/issues/2423
----
- client/gtk2/ibusimcontext.c | 25 +++++++++++++++++++++++++
- src/ibusinputcontext.c | 29 ++++++++++++++++++++++++++++-
- 2 files changed, 53 insertions(+), 1 deletion(-)
-
-diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
-index eaf7eb90..6e338157 100644
---- a/client/gtk2/ibusimcontext.c
-+++ b/client/gtk2/ibusimcontext.c
-@@ -70,6 +70,7 @@ struct _IBusIMContext {
- #endif
-
- IBusInputContext *ibuscontext;
-+ IBusInputContext *ibuscontext_needs_surrounding;
-
- /* preedit status */
- gchar *preedit_string;
-@@ -985,6 +986,7 @@ ibus_im_context_init (GObject *obj)
- ibusimcontext->cursor_area.height = 0;
-
- ibusimcontext->ibuscontext = NULL;
-+ ibusimcontext->ibuscontext_needs_surrounding = NULL;
- ibusimcontext->has_focus = FALSE;
- ibusimcontext->time = GDK_CURRENT_TIME;
- #ifdef ENABLE_SURROUNDING
-@@ -2183,6 +2185,18 @@ _ibus_context_hide_preedit_text_cb (IBusInputContext *ibuscontext,
- g_signal_emit (ibusimcontext, _signal_preedit_end_id, 0);
- }
-
-+static void
-+_ibus_context_require_surrounding_text_cb (IBusInputContext *ibuscontext,
-+ IBusIMContext *ibusimcontext)
-+{
-+ IDEBUG ("%s", __FUNCTION__);
-+ g_assert (ibusimcontext->ibuscontext == ibuscontext);
-+ if (ibusimcontext->ibuscontext_needs_surrounding == ibuscontext) {
-+ _request_surrounding_text (ibusimcontext);
-+ ibusimcontext->ibuscontext_needs_surrounding = NULL;
-+ }
-+}
-+
- static void
- _ibus_context_destroy_cb (IBusInputContext *ibuscontext,
- IBusIMContext *ibusimcontext)
-@@ -2249,6 +2263,11 @@ _create_input_context_done (IBusBus *bus,
- "hide-preedit-text",
- G_CALLBACK (_ibus_context_hide_preedit_text_cb),
- ibusimcontext);
-+ g_signal_connect (
-+ ibusimcontext->ibuscontext,
-+ "require-surrounding-text",
-+ G_CALLBACK (_ibus_context_require_surrounding_text_cb),
-+ ibusimcontext);
- g_signal_connect (ibusimcontext->ibuscontext, "destroy",
- G_CALLBACK (_ibus_context_destroy_cb),
- ibusimcontext);
-@@ -2265,6 +2284,12 @@ _create_input_context_done (IBusBus *bus,
-
- ibus_input_context_focus_in (ibusimcontext->ibuscontext);
- _set_cursor_location_internal (ibusimcontext);
-+ if (ibus_input_context_needs_surrounding_text (
-+ ibusimcontext->ibuscontext)) {
-+ _request_surrounding_text (ibusimcontext);
-+ } else {
-+ ibusimcontext->ibuscontext_needs_surrounding = ibusimcontext->ibuscontext;
-+ }
- }
-
- if (!g_queue_is_empty (ibusimcontext->events_queue)) {
-diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c
-index 7981de38..28ae04ad 100644
---- a/src/ibusinputcontext.c
-+++ b/src/ibusinputcontext.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2018-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2018-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
- * Copyright (C) 2008-2019 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
-@@ -55,6 +55,7 @@ enum {
- CURSOR_DOWN_LOOKUP_TABLE,
- REGISTER_PROPERTIES,
- UPDATE_PROPERTY,
-+ REQUIRE_SURROUNDING_TEXT,
- LAST_SIGNAL,
- };
-
-@@ -488,6 +489,21 @@ ibus_input_context_class_init (IBusInputContextClass *class)
- 1,
- IBUS_TYPE_PROPERTY);
-
-+ /**
-+ * IBusInputContext::require-surrounding-text:
-+ * @context: An IBusInputContext.
-+ *
-+ * Emitted to receive the RequireSurroundingText signal from the daemon.
-+ */
-+ context_signals[REQUIRE_SURROUNDING_TEXT] =
-+ g_signal_new (I_("require-surrounding-text"),
-+ G_TYPE_FROM_CLASS (class),
-+ G_SIGNAL_RUN_LAST,
-+ 0,
-+ NULL, NULL,
-+ _ibus_marshal_VOID__VOID,
-+ G_TYPE_NONE, 0);
-+
- text_empty = ibus_text_new_from_static_string ("");
- g_object_ref_sink (text_empty);
- }
-@@ -735,6 +751,7 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
-
- if (g_strcmp0 (signal_name, "RequireSurroundingText") == 0) {
- priv->needs_surrounding_text = TRUE;
-+ g_signal_emit (context, context_signals[REQUIRE_SURROUNDING_TEXT], 0);
- return;
- }
-
-@@ -1116,9 +1133,19 @@ ibus_input_context_set_surrounding_text (IBusInputContext *context,
-
- priv = IBUS_INPUT_CONTEXT_GET_PRIVATE (context);
-
-+ /* This API should send "SetSurroundingText" D-Bus method when
-+ * input contexts are switched between tabs in a text application
-+ * so that engines can receive the updated surrounding texts after
-+ * focus-in events happen.
-+ *
-+ * GNOME shell uses a single input context and the address of the input
-+ * contexts are always same. So check the address of texts if the input
-+ * contexts on applications are switched.
-+ */
- if (cursor_pos != priv->surrounding_cursor_pos ||
- anchor_pos != priv->selection_anchor_pos ||
- priv->surrounding_text == NULL ||
-+ text != priv->surrounding_text ||
- g_strcmp0 (text->text, priv->surrounding_text->text) != 0) {
- if (priv->surrounding_text)
- g_object_unref (priv->surrounding_text);
---
-2.37.3
-
-From cd621f8b82c80a174cd880cb27f27d7ccb9cb4d4 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 3 Nov 2022 08:36:17 +0900
-Subject: [PATCH] ui/gtk3/switcher: Avoid to unref m_engines with double run
-
-m_engines could be a buffer overflow if switcher.run() is called
-again and m_engines is unrefed durling showing the swicher popup.
-
-BUG=rhbz#2081055
----
- ui/gtk3/switcher.vala | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/ui/gtk3/switcher.vala b/ui/gtk3/switcher.vala
-index a4529c88..9400e9ba 100644
---- a/ui/gtk3/switcher.vala
-+++ b/ui/gtk3/switcher.vala
-@@ -143,6 +143,8 @@ class Switcher : Gtk.Window {
- assert (m_loop == null);
- assert (index < engines.length);
-
-+ if (m_is_running)
-+ return index;
- m_is_running = true;
- m_keyval = keyval;
- m_modifiers = state;
---
-2.37.3
-
-From 506ac9993d5166196b7c4e9bfa9fb0f9d3792ffa Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 10 Nov 2022 18:38:05 +0900
-Subject: [PATCH] client/x11: Implement new process_key_event for ibus-x11
-
-The new process_key_event is ported from GTK4 to X11 because
-hangul maintainers wish to delete forward_key_event as much as possible
-and currently we could apply forward_key_event to the sync mode only
-and the new process_key_event is a new async key event process in X11
-and hangul might disable forward_key_event by default.
-
-Now the definition of IBUS_CAP_SYNC_PROCESS_KEY_V2 capability is changed
-to set only if the sync mode.
-
-Also switch a heavy GMainLoop to the light GSource.
-
-Fixes: https://github.com/ibus/ibus/commit/c957c5f
----
- client/gtk2/ibusimcontext.c | 61 ++++++++++----
- client/x11/main.c | 157 +++++++++++++++++++++++++++++++-----
- src/ibustypes.h | 1 +
- 3 files changed, 184 insertions(+), 35 deletions(-)
-
-diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
-index 6e338157..1f3723e6 100644
---- a/client/gtk2/ibusimcontext.c
-+++ b/client/gtk2/ibusimcontext.c
-@@ -382,8 +382,9 @@ typedef struct {
- } ProcessKeyEventData;
-
- typedef struct {
-- GMainLoop *loop;
-- gboolean retval;
-+ int count;
-+ guint count_cb_id;
-+ gboolean retval;
- } ProcessKeyEventReplyData;
-
- static void
-@@ -453,7 +454,23 @@ _process_key_event_reply_done (GObject *object,
- }
- g_return_if_fail (data);
- data->retval = retval;
-- g_main_loop_quit (data->loop);
-+ data->count = 0;
-+ g_source_remove (data->count_cb_id);
-+}
-+
-+static gboolean
-+_process_key_event_count_cb (gpointer user_data)
-+{
-+ ProcessKeyEventReplyData *data = (ProcessKeyEventReplyData *)user_data;
-+ g_return_val_if_fail (data, G_SOURCE_REMOVE);
-+ if (!data->count)
-+ return G_SOURCE_REMOVE;
-+ /* Wait for about 10 secs. */
-+ if (data->count++ == 10000) {
-+ data->count = 0;
-+ return G_SOURCE_REMOVE;
-+ }
-+ return G_SOURCE_CONTINUE;
- }
-
- static gboolean
-@@ -496,10 +513,10 @@ _process_key_event (IBusInputContext *context,
- break;
- }
- case 2: {
-- GMainLoop *loop = g_main_loop_new (NULL, TRUE);
-+ GSource *source = g_timeout_source_new (1);
- ProcessKeyEventReplyData *data = NULL;
-
-- if (loop)
-+ if (source)
- data = g_slice_new0 (ProcessKeyEventReplyData);
- if (!data) {
- g_warning ("Cannot wait for the reply of the process key event.");
-@@ -507,11 +524,14 @@ _process_key_event (IBusInputContext *context,
- keyval,
- keycode - 8,
- state);
-- if (loop)
-- g_main_loop_quit (loop);
-+ if (source)
-+ g_source_destroy (source);
- break;
- }
-- data->loop = loop;
-+ data->count = 1;
-+ g_source_attach (source, NULL);
-+ g_source_unref (source);
-+ data->count_cb_id = g_source_get_id (source);
- ibus_input_context_process_key_event_async (context,
- keyval,
- keycode - 8,
-@@ -520,7 +540,14 @@ _process_key_event (IBusInputContext *context,
- NULL,
- _process_key_event_reply_done,
- data);
-- g_main_loop_run (loop);
-+ g_source_set_callback (source, _process_key_event_count_cb, data, NULL);
-+ while (data->count)
-+ g_main_context_iteration (NULL, TRUE);
-+ if (source->ref_count > 0) {
-+ /* g_source_get_id() could causes a SEGV */
-+ g_info ("Broken GSource.ref_count and maybe a timing issue in %p.",
-+ source);
-+ }
- retval = data->retval;
- g_slice_free (ProcessKeyEventReplyData, data);
- break;
-@@ -994,8 +1021,8 @@ ibus_im_context_init (GObject *obj)
- #else
- ibusimcontext->caps = IBUS_CAP_PREEDIT_TEXT | IBUS_CAP_FOCUS;
- #endif
-- if (_use_sync_mode != 1)
-- ibusimcontext->caps |= IBUS_CAP_SYNC_PROCESS_KEY;
-+ if (_use_sync_mode == 1)
-+ ibusimcontext->caps |= IBUS_CAP_SYNC_PROCESS_KEY_V2;
-
- ibusimcontext->events_queue = g_queue_new ();
-
-@@ -1338,7 +1365,7 @@ ibus_im_context_reset (GtkIMContext *context)
- * IBus uses button-press-event instead until GTK is fixed.
- * https://gitlab.gnome.org/GNOME/gtk/issues/1534
- */
-- if (_use_sync_mode == 1)
-+ if (_use_sync_mode != 0)
- ibus_im_context_clear_preedit_text (ibusimcontext);
- ibus_input_context_reset (ibusimcontext->ibuscontext);
- }
-@@ -1453,7 +1480,7 @@ ibus_im_context_set_client_window (GtkIMContext *context,
-
- if (ibusimcontext->client_window) {
- #if !GTK_CHECK_VERSION (3, 98, 4)
-- if (ibusimcontext->use_button_press_event && _use_sync_mode != 1)
-+ if (ibusimcontext->use_button_press_event && _use_sync_mode == 0)
- _connect_button_press_event (ibusimcontext, FALSE);
- #endif
- g_object_unref (ibusimcontext->client_window);
-@@ -1463,7 +1490,7 @@ ibus_im_context_set_client_window (GtkIMContext *context,
- if (client != NULL) {
- ibusimcontext->client_window = g_object_ref (client);
- #if !GTK_CHECK_VERSION (3, 98, 4)
-- if (!ibusimcontext->use_button_press_event && _use_sync_mode != 1)
-+ if (!ibusimcontext->use_button_press_event && _use_sync_mode == 0)
- _connect_button_press_event (ibusimcontext, TRUE);
- #endif
- }
-@@ -2085,7 +2112,7 @@ _ibus_context_update_preedit_text_cb (IBusInputContext *ibuscontext,
- #if !GTK_CHECK_VERSION (3, 98, 4)
- if (!ibusimcontext->use_button_press_event &&
- mode == IBUS_ENGINE_PREEDIT_COMMIT &&
-- _use_sync_mode != 1) {
-+ _use_sync_mode == 0) {
- if (ibusimcontext->client_window) {
- _connect_button_press_event (ibusimcontext, TRUE);
- }
-@@ -2459,8 +2486,8 @@ _create_fake_input_context_done (IBusBus *bus,
- NULL);
-
- guint32 caps = IBUS_CAP_PREEDIT_TEXT | IBUS_CAP_FOCUS | IBUS_CAP_SURROUNDING_TEXT;
-- if (_use_sync_mode != 1)
-- caps |= IBUS_CAP_SYNC_PROCESS_KEY;
-+ if (_use_sync_mode == 1)
-+ caps |= IBUS_CAP_SYNC_PROCESS_KEY_V2;
- ibus_input_context_set_capabilities (_fake_context, caps);
-
- /* focus in/out the fake context */
-diff --git a/client/x11/main.c b/client/x11/main.c
-index 6057cc03..905fd251 100644
---- a/client/x11/main.c
-+++ b/client/x11/main.c
-@@ -124,7 +124,7 @@ static gint g_debug_level = 0;
-
- static IBusBus *_bus = NULL;
-
--static gboolean _use_sync_mode = TRUE;
-+static char _use_sync_mode = 2;
-
- static void
- _xim_preedit_start (XIMS xims, const X11IC *x11ic)
-@@ -331,6 +331,7 @@ xim_create_ic (XIMS xims, IMChangeICStruct *call_data)
- {
- static int base_icid = 1;
- X11IC *x11ic;
-+ guint32 capabilities = IBUS_CAP_FOCUS;
-
- call_data->icid = base_icid ++;
-
-@@ -375,12 +376,11 @@ xim_create_ic (XIMS xims, IMChangeICStruct *call_data)
- G_CALLBACK (_context_disabled_cb), x11ic);
-
-
-- if (x11ic->input_style & XIMPreeditCallbacks) {
-- ibus_input_context_set_capabilities (x11ic->context, IBUS_CAP_FOCUS | IBUS_CAP_PREEDIT_TEXT);
-- }
-- else {
-- ibus_input_context_set_capabilities (x11ic->context, IBUS_CAP_FOCUS);
-- }
-+ if (x11ic->input_style & XIMPreeditCallbacks)
-+ capabilities |= IBUS_CAP_PREEDIT_TEXT;
-+ if (_use_sync_mode == 1)
-+ capabilities |= IBUS_CAP_SYNC_PROCESS_KEY_V2;
-+ ibus_input_context_set_capabilities (x11ic->context, capabilities);
-
- g_hash_table_insert (_x11_ic_table,
- GINT_TO_POINTER (x11ic->icid), (gpointer)x11ic);
-@@ -461,6 +461,13 @@ xim_unset_ic_focus (XIMS xims, IMChangeFocusStruct *call_data)
-
- }
-
-+typedef struct {
-+ IMForwardEventStruct *pfe;
-+ int count;
-+ guint count_cb_id;
-+ gboolean retval;
-+} ProcessKeyEventReplyData;
-+
- static void
- _process_key_event_done (GObject *object,
- GAsyncResult *res,
-@@ -493,6 +500,43 @@ _process_key_event_done (GObject *object,
- g_slice_free (IMForwardEventStruct, pfe);
- }
-
-+static void
-+_process_key_event_reply_done (GObject *object,
-+ GAsyncResult *res,
-+ gpointer user_data)
-+{
-+ IBusInputContext *context = (IBusInputContext *)object;
-+ ProcessKeyEventReplyData *data = (ProcessKeyEventReplyData *)user_data;
-+ GError *error = NULL;
-+ gboolean retval = ibus_input_context_process_key_event_async_finish (
-+ context,
-+ res,
-+ &error);
-+ if (error != NULL) {
-+ g_warning ("Process Key Event failed: %s.", error->message);
-+ g_error_free (error);
-+ }
-+ g_return_if_fail (data);
-+ data->retval = retval;
-+ data->count = 0;
-+ g_source_remove (data->count_cb_id);
-+}
-+
-+static gboolean
-+_process_key_event_count_cb (gpointer user_data)
-+{
-+ ProcessKeyEventReplyData *data = (ProcessKeyEventReplyData *)user_data;
-+ g_return_val_if_fail (data, G_SOURCE_REMOVE);
-+ if (!data->count)
-+ return G_SOURCE_REMOVE;
-+ /* Wait for about 10 secs. */
-+ if (data->count++ == 10000) {
-+ data->count = 0;
-+ return G_SOURCE_REMOVE;
-+ }
-+ return G_SOURCE_CONTINUE;
-+}
-+
- static int
- xim_forward_event (XIMS xims, IMForwardEventStruct *call_data)
- {
-@@ -520,14 +564,15 @@ xim_forward_event (XIMS xims, IMForwardEventStruct *call_data)
- event.state |= IBUS_RELEASE_MASK;
- }
-
-- if (_use_sync_mode) {
-+ switch (_use_sync_mode) {
-+ case 1: {
- retval = ibus_input_context_process_key_event (
- x11ic->context,
- event.keyval,
- event.hardware_keycode - 8,
- event.state);
- if (retval) {
-- if (! x11ic->has_preedit_area) {
-+ if (!x11ic->has_preedit_area) {
- _xim_set_cursor_location (x11ic);
- }
- return 1;
-@@ -546,8 +591,80 @@ xim_forward_event (XIMS xims, IMForwardEventStruct *call_data)
- IMForwardEvent (_xims, (XPointer) &fe);
-
- retval = 1;
-+ break;
- }
-- else {
-+ case 2: {
-+ GSource *source = g_timeout_source_new (1);
-+ ProcessKeyEventReplyData *data = NULL;
-+ IMForwardEventStruct fe;
-+
-+ if (source)
-+ data = g_slice_new0 (ProcessKeyEventReplyData);
-+ if (!data) {
-+ g_warning ("Cannot wait for the reply of the process key event.");
-+ retval = ibus_input_context_process_key_event (
-+ x11ic->context,
-+ event.keyval,
-+ event.hardware_keycode - 8,
-+ event.state);
-+ if (source)
-+ g_source_destroy (source);
-+ } else {
-+ CARD16 connect_id = x11ic->connect_id;
-+ data->count = 1;
-+ g_source_attach (source, NULL);
-+ g_source_unref (source);
-+ data->count_cb_id = g_source_get_id (source);
-+ ibus_input_context_process_key_event_async (
-+ x11ic->context,
-+ event.keyval,
-+ event.hardware_keycode - 8,
-+ event.state,
-+ -1,
-+ NULL,
-+ _process_key_event_reply_done,
-+ data);
-+ g_source_set_callback (source, _process_key_event_count_cb,
-+ data, NULL);
-+ while (data->count)
-+ g_main_context_iteration (NULL, TRUE);
-+ if (source->ref_count > 0) {
-+ /* g_source_get_id() could causes a SEGV */
-+ g_info ("Broken GSource.ref_count and maybe a timing "
-+ "issue in %p.", source);
-+ }
-+ retval = data->retval;
-+ g_slice_free (ProcessKeyEventReplyData, data);
-+
-+ if (g_hash_table_lookup (_connections,
-+ GINT_TO_POINTER ((gint)connect_id))
-+ == NULL) {
-+ return 1;
-+ }
-+ }
-+
-+ if (retval) {
-+ if (! x11ic->has_preedit_area) {
-+ _xim_set_cursor_location (x11ic);
-+ }
-+ return 1;
-+ }
-+
-+ memset (&fe, 0, sizeof (fe));
-+
-+ fe.major_code = XIM_FORWARD_EVENT;
-+ fe.icid = x11ic->icid;
-+ fe.connect_id = x11ic->connect_id;
-+ fe.sync_bit = 0;
-+ fe.serial_number = 0L;
-+ fe.event = call_data->event;
-+
-+ IMForwardEvent (_xims, (XPointer) &fe);
-+
-+ retval = 1;
-+ break;
-+ }
-+ default: {
- IMForwardEventStruct *pfe;
-
- pfe = g_slice_new0 (IMForwardEventStruct);
-@@ -569,6 +686,7 @@ xim_forward_event (XIMS xims, IMForwardEventStruct *call_data)
- pfe);
- retval = 1;
- }
-+ }
- return retval;
- }
-
-@@ -1026,23 +1144,26 @@ _context_disabled_cb (IBusInputContext *context,
- _xim_preedit_end (_xims, x11ic);
- }
-
--static gboolean
--_get_boolean_env(const gchar *name,
-- gboolean defval)
-+static char
-+_get_char_env (const gchar *name,
-+ char defval)
- {
- const gchar *value = g_getenv (name);
-
- if (value == NULL)
-- return defval;
-+ return defval;
-
- if (g_strcmp0 (value, "") == 0 ||
- g_strcmp0 (value, "0") == 0 ||
- g_strcmp0 (value, "false") == 0 ||
- g_strcmp0 (value, "False") == 0 ||
-- g_strcmp0 (value, "FALSE") == 0)
-- return FALSE;
-+ g_strcmp0 (value, "FALSE") == 0) {
-+ return 0;
-+ } else if (!g_strcmp0 (value, "2")) {
-+ return 2;
-+ }
-
-- return TRUE;
-+ return 1;
- }
-
- static void
-@@ -1059,7 +1180,7 @@ _init_ibus (void)
- G_CALLBACK (_bus_disconnected_cb), NULL);
-
- /* https://github.com/ibus/ibus/issues/1713 */
-- _use_sync_mode = _get_boolean_env ("IBUS_ENABLE_SYNC_MODE", TRUE);
-+ _use_sync_mode = _get_char_env ("IBUS_ENABLE_SYNC_MODE", 2);
- }
-
- static void
-diff --git a/src/ibustypes.h b/src/ibustypes.h
-index a8eee319..ba2a0010 100644
---- a/src/ibustypes.h
-+++ b/src/ibustypes.h
-@@ -124,6 +124,7 @@ typedef enum {
- IBUS_CAP_SURROUNDING_TEXT = 1 << 5,
- IBUS_CAP_OSK = 1 << 6,
- IBUS_CAP_SYNC_PROCESS_KEY = 1 << 7,
-+ IBUS_CAP_SYNC_PROCESS_KEY_V2 = IBUS_CAP_SYNC_PROCESS_KEY,
- } IBusCapabilite;
-
- /**
---
-2.37.3
-
-From 2719e936cc1f1f26f414b339a7f4f0e48331732f Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Tue, 22 Nov 2022 21:47:01 +0900
-Subject: [PATCH] src/tests: Fallback gtk-query-immodules-3.0 for Ubuntu
- 22.04
-
----
- src/tests/runtest | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/tests/runtest b/src/tests/runtest
-index a229140a..036dc771 100755
---- a/src/tests/runtest
-+++ b/src/tests/runtest
-@@ -44,6 +44,10 @@ MACHINE=`uname -m`
- if test x"$MACHINE" = xx86_64 ; then
- GTK_QUERY_MODULE=gtk-query-immodules-3.0-64
- fi
-+which $GTK_QUERY_MODULE
-+if [ $? -ne 0 ] ; then
-+ GTK_QUERY_MODULE=gtk-query-immodules-3.0
-+fi
-
- retval=0
-
---
-2.37.3
-
-From 2555fa9781ccb40445d8a344ec180ff654e0c5f1 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 2 Dec 2022 13:41:39 +0900
-Subject: [PATCH] src/tests: Fix Connection refused in ibus-bus
-
-ibus-bus is failed in Ubuntu 22.04 under GitHub action + Docer
-with the warning of:
-"Unable to connect to ibus: Could not connect: Connection refused"
-during ibus_bus_new_async()'s callback if IBus socket file is
-deleted after ibus_bus_exit_async()'s callback is called.
----
- src/tests/ibus-bus.c | 70 +++++++++++++++++++++++++++++++++++++++++---
- 1 file changed, 66 insertions(+), 4 deletions(-)
-
-diff --git a/src/tests/ibus-bus.c b/src/tests/ibus-bus.c
-index a2af0bb2..d6b105cf 100644
---- a/src/tests/ibus-bus.c
-+++ b/src/tests/ibus-bus.c
-@@ -802,6 +802,33 @@ start_set_preload_engines_async (void)
- NULL); /* user_data */
- }
-
-+static void
-+_socket_changed_cb (GFileMonitor *monitor,
-+ GFile *file,
-+ GFile *other_file,
-+ GFileMonitorEvent event_type,
-+ IBusBus *bus)
-+{
-+ switch (event_type) {
-+ case G_FILE_MONITOR_EVENT_CHANGED:
-+ g_debug ("IBus socket file is changed");
-+ call_next_async_function ();
-+ g_signal_handlers_disconnect_by_func (monitor,
-+ G_CALLBACK (_socket_changed_cb),
-+ NULL);
-+ g_object_unref (monitor);
-+ break;
-+ case G_FILE_MONITOR_EVENT_CREATED:
-+ g_debug ("IBus socket file is created");
-+ break;
-+ case G_FILE_MONITOR_EVENT_DELETED:
-+ g_debug ("IBus socket file is deleted");
-+ break;
-+ default:
-+ g_debug ("IBus socket file's status is %d\n", event_type);
-+ }
-+}
-+
- static void
- finish_exit_async (GObject *source_object,
- GAsyncResult *res,
-@@ -811,15 +838,25 @@ finish_exit_async (GObject *source_object,
- gboolean result = ibus_bus_exit_async_finish (bus,
- res,
- &error);
-+ gboolean has_socket_path = GPOINTER_TO_INT (user_data);
-+ if (error) {
-+ g_warning ("Failed to ibus_bus_exit(): %s", error->message);
-+ g_error_free (error);
-+ }
- g_assert (result);
-- g_debug ("ibus_bus_exit_finish: OK");
-- g_usleep (G_USEC_PER_SEC);
-- call_next_async_function ();
-+ if (has_socket_path == FALSE) {
-+ g_debug ("ibus_bus_exit_finish: OK socket file: none");
-+ g_usleep (G_USEC_PER_SEC);
-+ call_next_async_function ();
-+ } else {
-+ g_debug ("ibus_bus_exit_finish: OK socket file: monitored");
-+ }
- }
-
- static void
- start_exit_async (void)
- {
-+ gboolean has_socket_path = FALSE;
- /* When `./runtest ibus-bus` runs, ibus-daemon sometimes failed to
- * restart because closing a file descriptor was failed in
- * bus/server.c:_restart_server() with a following error:
-@@ -828,12 +865,37 @@ start_exit_async (void)
- * fail to restart ibus-daemon.
- */
- g_usleep (G_USEC_PER_SEC);
-+ /* IBus socket file can be deleted after finish_exit_async() is called
-+ * so the next ibus_bus_new_async() in test_bus_new_async() could be failed
-+ * if the socket file is deleted after ibus_bus_new_async() is called
-+ * in case that the socket file is not monitored.
-+ */
-+ if (!g_getenv ("IBUS_ADDRESS")) {
-+ const gchar *address_path = ibus_get_socket_path ();
-+ GFile *file;
-+ GError *error = NULL;
-+ GFileMonitor *monitor;
-+
-+ g_assert (address_path);
-+ file = g_file_new_for_path (address_path);
-+ g_assert (file);
-+ has_socket_path = TRUE;
-+ monitor = g_file_monitor (file, G_FILE_MONITOR_NONE, NULL, &error);
-+ if (error) {
-+ g_warning ("Failed to monitor socket file: %s", error->message);
-+ g_error_free (error);
-+ }
-+ g_assert (monitor);
-+ g_signal_connect (monitor, "changed",
-+ G_CALLBACK (_socket_changed_cb), NULL);
-+ g_object_unref (file);
-+ }
- ibus_bus_exit_async (bus,
- TRUE, /* restart */
- -1, /* timeout */
- NULL, /* cancellable */
- finish_exit_async,
-- NULL); /* user_data */
-+ GINT_TO_POINTER (has_socket_path)); /* user_data */
- }
-
- static gboolean
---
-2.37.3
-
-From 82673a5af145007a8d78b376574a947569e7d81d Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 5 Jan 2023 22:01:48 +0900
-Subject: [PATCH] src: Convert gtk_compose_seqs_compact to GResource
-
-en-US Compose table had been a compact array with a special
-algorithm but now it's converted to the general compose table
-similar to other language compose tables and saved to GResource.
----
- configure.ac | 37 +-
- src/Makefile.am | 68 +-
- src/compose/Makefile.am | 33 +
- src/compose/sequences-big-endian | 0
- src/compose/sequences-little-endian | 0
- src/gencomposetable.c | 118 +
- src/gtkimcontextsimpleseqs.h | 5338 ---------------------------
- src/ibus.gresources.xml.in | 6 +
- src/ibuscomposetable.c | 509 +--
- src/ibuscomposetable.h | 29 +-
- src/ibusenginesimple.c | 109 +-
- src/ibusenginesimpleprivate.h | 29 +-
- src/ibusshare.c | 4 +-
- 13 files changed, 559 insertions(+), 5721 deletions(-)
- create mode 100644 src/compose/Makefile.am
- create mode 100644 src/compose/sequences-big-endian
- create mode 100644 src/compose/sequences-little-endian
- create mode 100644 src/gencomposetable.c
- delete mode 100644 src/gtkimcontextsimpleseqs.h
- create mode 100644 src/ibus.gresources.xml.in
-
-diff --git a/configure.ac b/configure.ac
-index 2344523a..a84c7130 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -3,8 +3,8 @@
- # ibus - The Input Bus
- #
- # Copyright (c) 2007-2016 Peng Huang <shawn.p.huang@gmail.com>
--# Copyright (c) 2015-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
--# Copyright (c) 2007-2022 Red Hat, Inc.
-+# Copyright (c) 2015-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+# Copyright (c) 2007-2023 Red Hat, Inc.
- #
- # This library is free software; you can redistribute it and/or
- # modify it under the terms of the GNU Lesser General Public
-@@ -151,6 +151,37 @@ AC_CHECK_FUNCS(daemon)
- AC_CHECK_LIB(c, dlclose, LIBDL="", [AC_CHECK_LIB(dl, dlclose, LIBDL="-ldl")])
- AC_SUBST(LIBDL)
-
-+# Check endianness.
-+AC_MSG_CHECKING([build system endianness])
-+ENDIAN=unknown
-+AC_RUN_IFELSE(
-+ [AC_LANG_PROGRAM(
-+ [[
-+ #include <endian.h>
-+ #if __BYTE_ORDER != __LITTLE_ENDIAN
-+ #error
-+ #endif
-+ ]]
-+ )],
-+ [ENDIAN=little]
-+)
-+AC_RUN_IFELSE(
-+ [AC_LANG_PROGRAM(
-+ [[
-+ #include <endian.h>
-+ #if __BYTE_ORDER != __BIG_ENDIAN
-+ #error
-+ #endif
-+ ]]
-+ )],
-+ [ENDIAN=big]
-+)
-+if test x"$ENDIAN" != xlittle -a x"$ENDIAN" != xbig; then
-+ AC_MSG_ERROR([Cannot deermine endianness without endian.h])
-+fi
-+AC_MSG_RESULT($ENDIAN)
-+AC_SUBST(ENDIAN)
-+
- # Check packages.
- # Check glib2.
- AM_PATH_GLIB_2_0
-@@ -844,6 +875,7 @@ m4/Makefile
- portal/Makefile
- setup/Makefile
- src/Makefile
-+src/compose/Makefile
- src/ibusversion.h
- src/tests/Makefile
- tools/Makefile
-@@ -863,6 +895,7 @@ Build options:
- Install prefix $prefix
- Build shared libs $enable_shared
- Build static libs $enable_static
-+ Build endianness $ENDIAN
- CFLAGS $CFLAGS
- PYTHON $PYTHON
- PYTHON2 $PYTHON2
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 578694b5..426376dd 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -3,7 +3,7 @@
- # ibus - The Input Bus
- #
- # Copyright (c) 2007-2015 Peng Huang <shawn.p.huang@gmail.com>
--# Copyright (c) 2015-2021 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+# Copyright (c) 2015-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- # Copyright (c) 2007-2017 Red Hat, Inc.
- #
- # This library is free software; you can redistribute it and/or
-@@ -27,7 +27,7 @@ if ENABLE_TESTS
- TESTS_DIR = tests
- endif
-
--SUBDIRS = . $(TESTS_DIR)
-+SUBDIRS = . compose $(TESTS_DIR)
-
- # libibus = libibus-@IBUS_API_VERSION@.la
- libibus = libibus-1.0.la
-@@ -41,7 +41,7 @@ INTROSPECTION_COMPILER_ARGS = \
- $(NULL)
- INTROSPECTION_GIRS =
- CLEANFILES =
--noinst_PROGRAMS =
-+noinst_PROGRAMS = gen-internal-compose-table
-
- # C preprocessor flags
- AM_CPPFLAGS = \
-@@ -111,6 +111,7 @@ libibus_1_0_la_SOURCES = \
- ibuscomposetable.c \
- ibusenumtypes.c \
- ibusmarshalers.c \
-+ ibusresources.c \
- $(ibus_sources) \
- $(NULL)
- ibus_marshalers_sources = \
-@@ -121,6 +122,10 @@ ibus_enumtypes_sources = \
- ibusenumtypes.c \
- ibusenumtypes.h \
- $(NULL)
-+ibus_resources_sources = \
-+ ibusresources.c \
-+ ibusresources.h \
-+ $(NULL)
- ibus_headers = \
- ibus.h \
- ibusaccelgroup.h \
-@@ -171,11 +176,11 @@ ibusinclude_HEADERS = \
- $(ibus_public_headers) \
- $(NULL)
- ibus_private_headers = \
-- gtkimcontextsimpleseqs.h \
- ibuscomposetable.h \
- ibusemojigen.h \
- ibusenginesimpleprivate.h \
- ibusinternal.h \
-+ ibusresources.h \
- ibusunicodegen.h \
- keyname-table.h \
- $(NULL)
-@@ -183,9 +188,24 @@ noinst_HEADERS = \
- $(ibus_private_headers) \
- $(NULL)
-
-+gen_internal_compose_table_SOURCES = \
-+ gencomposetable.c \
-+ ibuscomposetable.c \
-+ ibuserror.c \
-+ ibuskeynames.c \
-+ ibuskeyuni.c \
-+ $(NULL)
-+gen_internal_compose_table_CFLAGS = $(AM_CFLAGS)
-+gen_internal_compose_table_LDADD = \
-+ @GLIB2_LIBS@ \
-+ @GOBJECT2_LIBS@ \
-+ @GIO2_LIBS@ \
-+ $(NULL)
-+
- BUILT_SOURCES = \
- $(ibus_marshalers_sources) \
- $(ibus_enumtypes_sources) \
-+ $(ibus_resources_sources) \
- $(NULL)
-
- if HAVE_INTROSPECTION
-@@ -242,6 +262,28 @@ ibusmarshalers.c: ibusmarshalers.h ibusmarshalers.list
- $(GLIB_GENMARSHAL) --prefix=_ibus_marshal $(srcdir)/ibusmarshalers.list --body --internal) > $@.tmp && \
- mv $@.tmp $@
-
-+# gen GResource
-+ibus.gresources.xml: ibus.gresources.xml.in
-+ $(AM_V_GEN) sed -e "s|\@ENDIAN\@|$(ENDIAN)|g" \
-+ $< > $@.tmp && \
-+ mv $@.tmp $@
-+
-+compose/sequences-$(ENDIAN)-endian: gen-internal-compose-table
-+ $(AM_V_GEN) $(MKDIR_P) $(builddir)/compose && \
-+ $(builddir)/gen-internal-compose-table && \
-+ mv $(builddir)/sequences-big-endian $(builddir)/compose && \
-+ mv $(builddir)/sequences-little-endian $(builddir)/compose
-+
-+ibusresources.h: ibus.gresources.xml compose/sequences-$(ENDIAN)-endian
-+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --generate-header --internal \
-+ --target=ibusresources.h --external-data --c-name _ibus \
-+ --manual-register ibus.gresources.xml
-+
-+ibusresources.c: ibus.gresources.xml compose/sequences-$(ENDIAN)-endian
-+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --generate-source --internal \
-+ --target=ibusresources.c --c-name _ibus --manual-register \
-+ ibus.gresources.xml
-+
- if ENABLE_EMOJI_DICT
- AM_CPPFLAGS += -DENABLE_EMOJI_DICT
-
-@@ -330,10 +372,6 @@ emoji_parser_LDADD = \
- $(GLIB2_LIBS) \
- $(GOBJECT2_LIBS) \
- $(NULL)
--
--clean-local:
-- -rm -rf dicts
-- $(NULL)
- endif
-
- if ENABLE_UNICODE_DICT
-@@ -377,14 +415,11 @@ unicode_parser_LDADD = \
- $(GLIB2_LIBS) \
- $(libibus) \
- $(NULL)
--
--clean-local:
-- -rm -rf dicts
-- $(NULL)
- endif
-
- EXTRA_DIST = \
- emoji-parser.c \
-+ ibus.gresources.xml.in \
- ibusversion.h.in \
- ibusmarshalers.list \
- ibusenumtypes.h.template \
-@@ -394,6 +429,7 @@ EXTRA_DIST = \
-
- CLEANFILES += \
- $(BUILT_SOURCES) \
-+ ibus.gresources.xml \
- stamp-ibusmarshalers.h \
- stamp-ibusenumtypes.h \
- $(NULL)
-@@ -410,4 +446,12 @@ DISTCLEANFILES = \
- ibusversion.h \
- $(NULL)
-
-+clean-local:
-+ -rm -rf dicts; \
-+ if test x"$(srcdir)" != x"$(builddir)" ; then \
-+ rm -f $(builddir)/compose/sequences-big-endian; \
-+ rm -f $(builddir)/compose/sequences-little-endian; \
-+ fi;
-+ $(NULL)
-+
- -include $(top_srcdir)/git.mk
-diff --git a/src/compose/Makefile.am b/src/compose/Makefile.am
-new file mode 100644
-index 00000000..3aa9f8c7
---- /dev/null
-+++ b/src/compose/Makefile.am
-@@ -0,0 +1,33 @@
-+# vim:set noet ts=4:
-+#
-+# ibus - The Input Bus
-+#
-+# Copyright (c) 2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+# Copyright (c) 2023 Red Hat, Inc.
-+#
-+# This library is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU Lesser General Public
-+# License as published by the Free Software Foundation; either
-+# version 2.1 of the License, or (at your option) any later version.
-+#
-+# This library is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# Lesser General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public
-+# License along with this library; if not, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
-+# USA
-+
-+MAINTAINERCLEANFILES = \
-+ sequences-big-endian \
-+ sequences-little-endian \
-+ $(NULL)
-+
-+EXTRA_DIST = \
-+ sequences-big-endian \
-+ sequences-little-endian \
-+ $(NULL)
-+
-+-include $(top_srcdir)/git.mk
-diff --git a/src/compose/sequences-big-endian b/src/compose/sequences-big-endian
-new file mode 100644
-index 00000000..e69de29b
-diff --git a/src/compose/sequences-little-endian b/src/compose/sequences-little-endian
-new file mode 100644
-index 00000000..e69de29b
-diff --git a/src/gencomposetable.c b/src/gencomposetable.c
-new file mode 100644
-index 00000000..3fe6ff86
---- /dev/null
-+++ b/src/gencomposetable.c
-@@ -0,0 +1,118 @@
-+/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
-+/* vim:set et sts=4: */
-+/* ibus - The Input Bus
-+ * Copyright (C) 2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2023 Red Hat, Inc.
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
-+ * USA
-+ */
-+
-+#include <ibus.h>
-+#include <glib.h>
-+#include <glib/gstdio.h>
-+#include <errno.h>
-+
-+#include "ibuscomposetable.h"
-+#include "ibusenginesimpleprivate.h"
-+
-+#define X11_DATADIR X11_DATA_PREFIX "/share/X11/locale"
-+
-+
-+static void
-+save_compose_table_endianness (IBusComposeTableEx *compose_table,
-+ gboolean reverse_endianness)
-+{
-+ GVariant *variant_table = NULL;
-+ const char *contents = NULL;
-+ gsize length = 0;
-+ const char *destname_be = "sequences-big-endian";
-+ const char *destname_le = "sequences-little-endian";
-+ const char *destname;
-+ GError *error = NULL;
-+
-+ variant_table = ibus_compose_table_serialize (compose_table,
-+ reverse_endianness);
-+ g_assert (variant_table);
-+ contents = g_variant_get_data (variant_table);
-+ length = g_variant_get_size (variant_table);
-+ g_assert (contents && (length > 0));
-+#if G_BYTE_ORDER == G_BIG_ENDIAN
-+ if (!reverse_endianness)
-+ destname = destname_be;
-+ else
-+ destname = destname_le;
-+#else
-+ if (!reverse_endianness)
-+ destname = destname_le;
-+ else
-+ destname = destname_be;
-+#endif
-+ if (g_file_test (destname, G_FILE_TEST_EXISTS))
-+ g_unlink (destname);
-+ if (!g_file_set_contents (destname, contents, length, &error)) {
-+ g_warning ("Failed to save compose table %s: %s",
-+ destname, error->message);
-+ g_error_free (error);
-+ }
-+ g_variant_unref (variant_table);
-+}
-+
-+
-+int
-+main (int argc, char *argv[])
-+{
-+ char * const sys_langs[] = { "en_US.UTF-8", "en_US", "en", NULL };
-+ char * const *sys_lang = NULL;
-+ char *path = NULL;
-+ IBusComposeTableEx *compose_table;
-+ char *basename = NULL;
-+
-+ path = g_strdup ("./Compose");
-+ if (!path || !g_file_test (path, G_FILE_TEST_EXISTS)) {
-+ g_clear_pointer (&path, g_free);
-+ for (sys_lang = sys_langs; *sys_lang; sys_lang++) {
-+ path = g_build_filename (X11_DATADIR, *sys_lang,
-+ "Compose", NULL);
-+ if (!path)
-+ continue;
-+ if (g_file_test (path, G_FILE_TEST_EXISTS))
-+ break;
-+ }
-+ }
-+ if (!path) {
-+ g_warning ("en_US compose file is not found in %s.", X11_DATADIR);
-+ return 1;
-+ } else {
-+ g_debug ("Create a cache of %s", path);
-+ }
-+ g_setenv ("IBUS_COMPOSE_CACHE_DIR", ".", TRUE);
-+ compose_table = ibus_compose_table_load_cache (path);
-+ if (!compose_table &&
-+ (compose_table = ibus_compose_table_new_with_file (path, NULL))
-+ == NULL) {
-+ g_warning ("Failed to generate the compose table.");
-+ return 1;
-+ }
-+ g_free (path);
-+ basename = g_strdup_printf ("%08x.cache", compose_table->id);
-+ g_debug ("Saving cache id %s", basename);
-+ g_free (basename);
-+
-+
-+ save_compose_table_endianness (compose_table, FALSE);
-+ save_compose_table_endianness (compose_table, TRUE);
-+ return 0;
-+}
-diff --git a/src/gtkimcontextsimpleseqs.h b/src/gtkimcontextsimpleseqs.h
-deleted file mode 100644
-index ffa5f125..00000000
---- a/src/gtkimcontextsimpleseqs.h
-+++ /dev/null
-@@ -1,5338 +0,0 @@
--/* GTK - The GIMP Tool Kit
-- * Copyright (C) 2007, 2008 GNOME Foundation
-- *
-- * This library is free software; you can redistribute it and/or
-- * modify it under the terms of the GNU Lesser General Public
-- * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-- *
-- * This library is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- * Lesser General Public License for more details.
-- *
-- * You should have received a copy of the GNU Lesser General Public
-- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
-- */
--
--/*
-- * File auto-generated from script found at http://bugzilla.gnome.org/show_bug.cgi?id=321896
-- * using the input files
-- * Input : http://cgit.freedesktop.org/xorg/lib/libX11/plain/nls/en_US.UTF-8/Compose.pre
-- * Input : http://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt
-- * Input : http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
-- *
-- * This table is optimised for space and requires special handling to access the content.
-- * This table is used solely by http://svn.gnome.org/viewcvs/gtk%2B/trunk/gtk/gtkimcontextsimple.c
-- *
-- * The resulting file is placed at http://svn.gnome.org/viewcvs/gtk%2B/trunk/gtk/gtkimcontextsimpleseqs.h
-- * This file is described in bug report http://bugzilla.gnome.org/show_bug.cgi?id=321896
-- */
--
--/*
-- * Modified by the GTK+ Team and others 2007, 2008. See the AUTHORS
-- * file for a list of people on the GTK+ Team. See the ChangeLog
-- * files for a list of changes. These files are distributed with
-- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
-- */
--
--#ifndef __GTK_IM_CONTEXT_SIMPLE_SEQS_H__
--#define __GTK_IM_CONTEXT_SIMPLE_SEQS_H__
--
--/* === These are the original comments of the file; we keep for historical purposes ===
-- *
-- * The following table was generated from the X compose tables include with
-- * XFree86 4.0 using a set of Perl scripts. Contact Owen Taylor <otaylor@redhat.com>
-- * to obtain the relevant perl scripts.
-- *
-- * The following compose letter letter sequences confliced
-- * Dstroke/dstroke and ETH/eth; resolved to Dstroke (Croation, Vietnamese, Lappish), over
-- * ETH (Icelandic, Faroese, old English, IPA) [ D- -D d- -d ]
-- * Amacron/amacron and ordfeminine; resolved to ordfeminine [ _A A_ a_ _a ]
-- * Amacron/amacron and Atilde/atilde; resolved to atilde [ -A A- a- -a ]
-- * Omacron/Omacron and masculine; resolved to masculine [ _O O_ o_ _o ]
-- * Omacron/omacron and Otilde/atilde; resolved to otilde [ -O O- o- -o ]
-- *
-- * [ Amacron and Omacron are in Latin-4 (Baltic). ordfeminine and masculine are used for
-- * spanish. atilde and otilde are used at least for Portuguese ]
-- *
-- * at and Aring; resolved to Aring [ AA ]
-- * guillemotleft and caron; resolved to guillemotleft [ << ]
-- * ogonek and cedilla; resolved to cedilla [ ,, ]
-- *
-- * This probably should be resolved by first checking an additional set of compose tables
-- * that depend on the locale or selected input method.
-- */
--
--static const guint16 gtk_compose_seqs_compact[] = {
--IBUS_KEY_Greek_accentdieresis, 180, 184, 184, 184, 184,
--IBUS_KEY_dead_grave, 184, 246, 333, 545, 545,
--IBUS_KEY_dead_acute, 545, 609, 705, 981, 981,
--IBUS_KEY_dead_circumflex, 981, 1105, 1105, 1305, 1305,
--IBUS_KEY_dead_tilde, 1305, 1389, 1452, 1592, 1592,
--IBUS_KEY_dead_macron, 1592, 1638, 1656, 1728, 1728,
--IBUS_KEY_dead_breve, 1728, 1778, 1778, 1802, 1802,
--IBUS_KEY_dead_abovedot, 1802, 1832, 1835, 1871, 1871,
--IBUS_KEY_dead_diaeresis, 1871, 1959, 1971, 1995, 1995,
--IBUS_KEY_dead_abovering, 1995, 2005, 2005, 2005, 2005,
--IBUS_KEY_dead_doubleacute, 2005, 2015, 2015, 2015, 2015,
--IBUS_KEY_dead_caron, 2015, 2057, 2057, 2065, 2065,
--IBUS_KEY_dead_cedilla, 2065, 2077, 2083, 2083, 2083,
--IBUS_KEY_dead_ogonek, 2083, 2093, 2093, 2093, 2093,
--IBUS_KEY_dead_iota, 2093, 2115, 2214, 2646, 3306,
--IBUS_KEY_dead_voiced_sound, 3306, 3352, 3352, 3352, 3352,
--IBUS_KEY_dead_semivoiced_sound, 3352, 3362, 3362, 3362, 3362,
--IBUS_KEY_dead_belowdot, 3362, 3378, 3378, 3394, 3394,
--IBUS_KEY_dead_hook, 3394, 3472, 3475, 3531, 3531,
--IBUS_KEY_dead_horn, 3531, 3541, 3541, 3541, 3541,
--IBUS_KEY_dead_stroke, 3541, 3629, 3641, 3641, 3641,
--IBUS_KEY_dead_psili, 3641, 3669, 3669, 3669, 3669,
--IBUS_KEY_dead_dasia, 3669, 3701, 3701, 3701, 3701,
--IBUS_KEY_dead_belowring, 3701, 3703, 3703, 3703, 3703,
--IBUS_KEY_dead_belowtilde, 3703, 3705, 3705, 3705, 3705,
--IBUS_KEY_dead_belowdiaeresis, 3705, 3705, 3708, 3708, 3708,
--IBUS_KEY_dead_belowcomma, 3708, 3722, 3722, 3722, 3722,
--IBUS_KEY_dead_currency, 3722, 3820, 3826, 3826, 3826,
--IBUS_KEY_dead_greek, 3826, 3928, 3952, 3952, 3952,
--IBUS_KEY_Multi_key, 3952, 3952, 10495, 14203, 16083,
--IBUS_KEY_Greek_iota, 0x0390,
--IBUS_KEY_Greek_upsilon, 0x03B0,
--IBUS_KEY_space, 0x0060,
--IBUS_KEY_V, 0x01DB,
--IBUS_KEY_v, 0x01DC,
--IBUS_KEY_nobreakspace, 0x0300,
--IBUS_KEY_Abreve, 0x1EB0,
--IBUS_KEY_abreve, 0x1EB1,
--IBUS_KEY_Emacron, 0x1E14,
--IBUS_KEY_emacron, 0x1E15,
--IBUS_KEY_Omacron, 0x1E50,
--IBUS_KEY_omacron, 0x1E51,
--IBUS_KEY_Cyrillic_ie, 0x0450,
--IBUS_KEY_Cyrillic_i, 0x045D,
--IBUS_KEY_Cyrillic_IE, 0x0400,
--IBUS_KEY_Cyrillic_I, 0x040D,
--IBUS_KEY_Greek_iotadieresis, 0x1FD2,
--IBUS_KEY_Greek_upsilondieresis, 0x1FE2,
--IBUS_KEY_Greek_ALPHA, 0x1FBA,
--IBUS_KEY_Greek_EPSILON, 0x1FC8,
--IBUS_KEY_Greek_ETA, 0x1FCA,
--IBUS_KEY_Greek_IOTA, 0x1FDA,
--IBUS_KEY_Greek_OMICRON, 0x1FF8,
--IBUS_KEY_Greek_UPSILON, 0x1FEA,
--IBUS_KEY_Greek_OMEGA, 0x1FFA,
--IBUS_KEY_Greek_alpha, 0x1F70,
--IBUS_KEY_Greek_epsilon, 0x1F72,
--IBUS_KEY_Greek_eta, 0x1F74,
--IBUS_KEY_Greek_iota, 0x1F76,
--IBUS_KEY_Greek_omicron, 0x1F78,
--IBUS_KEY_Greek_upsilon, 0x1F7A,
--IBUS_KEY_Greek_omega, 0x1F7C,
--IBUS_KEY_dead_grave, 0x0060,
--IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_iota, 0x1FD2,
--IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_upsilon, 0x1FE2,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F0A,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_EPSILON, 0x1F1A,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F2A,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_IOTA, 0x1F3A,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMICRON, 0x1F4A,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1F6A,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F02,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_epsilon, 0x1F12,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F22,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_iota, 0x1F32,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_omicron, 0x1F42,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_upsilon, 0x1F52,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1F62,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F0B,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_EPSILON, 0x1F1B,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F2B,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_IOTA, 0x1F3B,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMICRON, 0x1F4B,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_UPSILON, 0x1F5B,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1F6B,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F03,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_epsilon, 0x1F13,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F23,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_iota, 0x1F33,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omicron, 0x1F43,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_upsilon, 0x1F53,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1F63,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01DB,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01DC,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_Greek_iota, 0x1FD2,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_Greek_upsilon, 0x1FE2,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F0B,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_EPSILON, 0x1F1B,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F2B,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_IOTA, 0x1F3B,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMICRON, 0x1F4B,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_UPSILON, 0x1F5B,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1F6B,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F03,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_epsilon, 0x1F13,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F23,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_iota, 0x1F33,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_omicron, 0x1F43,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_upsilon, 0x1F53,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1F63,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F0A,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_EPSILON, 0x1F1A,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F2A,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_IOTA, 0x1F3A,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_OMICRON, 0x1F4A,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1F6A,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F02,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_epsilon, 0x1F12,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F22,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_iota, 0x1F32,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_omicron, 0x1F42,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_upsilon, 0x1F52,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1F62,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_O, 0x1EDC,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_U, 0x1EEA,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_o, 0x1EDD,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_u, 0x1EEB,
--IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_A, 0x1EB0,
--IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_a, 0x1EB1,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_A, 0x1EA6,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_E, 0x1EC0,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_O, 0x1ED2,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_a, 0x1EA7,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_e, 0x1EC1,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_o, 0x1ED3,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_E, 0x1E14,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_O, 0x1E50,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_e, 0x1E15,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_o, 0x1E51,
--IBUS_KEY_Multi_key, IBUS_KEY_b, IBUS_KEY_A, 0x1EB0,
--IBUS_KEY_Multi_key, IBUS_KEY_b, IBUS_KEY_a, 0x1EB1,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_E, 0x1E14,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_O, 0x1E50,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_e, 0x1E15,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_o, 0x1E51,
--IBUS_KEY_space, 0x0027,
--IBUS_KEY_V, 0x01D7,
--IBUS_KEY_v, 0x01D8,
--IBUS_KEY_nobreakspace, 0x0301,
--IBUS_KEY_Abreve, 0x1EAE,
--IBUS_KEY_abreve, 0x1EAF,
--IBUS_KEY_Emacron, 0x1E16,
--IBUS_KEY_emacron, 0x1E17,
--IBUS_KEY_Utilde, 0x1E78,
--IBUS_KEY_omacron, 0x1E53,
--IBUS_KEY_utilde, 0x1E79,
--IBUS_KEY_Cyrillic_ghe, 0x0453,
--IBUS_KEY_Cyrillic_ka, 0x045C,
--IBUS_KEY_Cyrillic_GHE, 0x0403,
--IBUS_KEY_Cyrillic_KA, 0x040C,
--IBUS_KEY_Greek_iotadieresis, 0x0390,
--IBUS_KEY_Greek_upsilondieresis, 0x03B0,
--IBUS_KEY_Greek_ALPHA, 0x0386,
--IBUS_KEY_Greek_EPSILON, 0x0388,
--IBUS_KEY_Greek_ETA, 0x0389,
--IBUS_KEY_Greek_IOTA, 0x038A,
--IBUS_KEY_Greek_OMICRON, 0x038C,
--IBUS_KEY_Greek_UPSILON, 0x038E,
--IBUS_KEY_Greek_OMEGA, 0x038F,
--IBUS_KEY_Greek_alpha, 0x03AC,
--IBUS_KEY_Greek_epsilon, 0x03AD,
--IBUS_KEY_Greek_eta, 0x03AE,
--IBUS_KEY_Greek_iota, 0x03AF,
--IBUS_KEY_Greek_omicron, 0x03CC,
--IBUS_KEY_Greek_upsilon, 0x03CD,
--IBUS_KEY_Greek_omega, 0x03CE,
--IBUS_KEY_dead_acute, 0x00B4,
--IBUS_KEY_dead_diaeresis, IBUS_KEY_space, 0x0385,
--IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_iota, 0x0390,
--IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_upsilon, 0x03B0,
--IBUS_KEY_dead_stroke, IBUS_KEY_O, 0x01FE,
--IBUS_KEY_dead_stroke, IBUS_KEY_o, 0x01FF,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F0C,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_EPSILON, 0x1F1C,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F2C,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_IOTA, 0x1F3C,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMICRON, 0x1F4C,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1F6C,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F04,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_epsilon, 0x1F14,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F24,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_iota, 0x1F34,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_omicron, 0x1F44,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_upsilon, 0x1F54,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1F64,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F0D,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_EPSILON, 0x1F1D,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F2D,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_IOTA, 0x1F3D,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMICRON, 0x1F4D,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_UPSILON, 0x1F5D,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1F6D,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F05,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_epsilon, 0x1F15,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F25,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_iota, 0x1F35,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omicron, 0x1F45,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_upsilon, 0x1F55,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1F65,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_I, 0x1E2E,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01D7,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_i, 0x1E2F,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01D8,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_Greek_iota, 0x0390,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_Greek_upsilon, 0x03B0,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F0D,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_EPSILON, 0x1F1D,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F2D,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_IOTA, 0x1F3D,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMICRON, 0x1F4D,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_UPSILON, 0x1F5D,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1F6D,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F05,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_epsilon, 0x1F15,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F25,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_iota, 0x1F35,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_omicron, 0x1F45,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_upsilon, 0x1F55,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1F65,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F0C,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_EPSILON, 0x1F1C,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F2C,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_IOTA, 0x1F3C,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_OMICRON, 0x1F4C,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1F6C,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F04,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_epsilon, 0x1F14,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F24,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_iota, 0x1F34,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_omicron, 0x1F44,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_upsilon, 0x1F54,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1F64,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_O, 0x1EDA,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_U, 0x1EE8,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_o, 0x1EDB,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_u, 0x1EE9,
--IBUS_KEY_Multi_key, IBUS_KEY_comma, IBUS_KEY_C, 0x1E08,
--IBUS_KEY_Multi_key, IBUS_KEY_comma, IBUS_KEY_c, 0x1E09,
--IBUS_KEY_Multi_key, IBUS_KEY_slash, IBUS_KEY_O, 0x01FE,
--IBUS_KEY_Multi_key, IBUS_KEY_slash, IBUS_KEY_o, 0x01FF,
--IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_A, 0x1EAE,
--IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_a, 0x1EAF,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_A, 0x1EA4,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_E, 0x1EBE,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_O, 0x1ED0,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_a, 0x1EA5,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_e, 0x1EBF,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_o, 0x1ED1,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_E, 0x1E16,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_O, 0x1E52,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_e, 0x1E17,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_o, 0x1E53,
--IBUS_KEY_Multi_key, IBUS_KEY_b, IBUS_KEY_A, 0x1EAE,
--IBUS_KEY_Multi_key, IBUS_KEY_b, IBUS_KEY_a, 0x1EAF,
--IBUS_KEY_Multi_key, IBUS_KEY_o, IBUS_KEY_A, 0x01FA,
--IBUS_KEY_Multi_key, IBUS_KEY_o, IBUS_KEY_a, 0x01FB,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_O, 0x1E4C,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_U, 0x1E78,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_o, 0x1E4D,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_u, 0x1E79,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_E, 0x1E16,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_O, 0x1E52,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_e, 0x1E17,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_o, 0x1E53,
--IBUS_KEY_Multi_key, IBUS_KEY_cedilla, IBUS_KEY_C, 0x1E08,
--IBUS_KEY_Multi_key, IBUS_KEY_cedilla, IBUS_KEY_c, 0x1E09,
--IBUS_KEY_Multi_key, IBUS_KEY_KP_Divide, IBUS_KEY_O, 0x01FE,
--IBUS_KEY_Multi_key, IBUS_KEY_KP_Divide, IBUS_KEY_o, 0x01FF,
--IBUS_KEY_space, 0x005E,
--IBUS_KEY_parenleft, 0x207D,
--IBUS_KEY_parenright, 0x207E,
--IBUS_KEY_plus, 0x207A,
--IBUS_KEY_minus, 0x207B,
--IBUS_KEY_0, 0x2070,
--IBUS_KEY_1, 0x00B9,
--IBUS_KEY_2, 0x00B2,
--IBUS_KEY_3, 0x00B3,
--IBUS_KEY_4, 0x2074,
--IBUS_KEY_5, 0x2075,
--IBUS_KEY_6, 0x2076,
--IBUS_KEY_7, 0x2077,
--IBUS_KEY_8, 0x2078,
--IBUS_KEY_9, 0x2079,
--IBUS_KEY_equal, 0x207C,
--IBUS_KEY_nobreakspace, 0x0302,
--IBUS_KEY_Agrave, 0x1EA6,
--IBUS_KEY_Aacute, 0x1EA4,
--IBUS_KEY_Atilde, 0x1EAA,
--IBUS_KEY_Egrave, 0x1EC0,
--IBUS_KEY_Eacute, 0x1EBE,
--IBUS_KEY_Ograve, 0x1ED2,
--IBUS_KEY_Oacute, 0x1ED0,
--IBUS_KEY_Otilde, 0x1ED6,
--IBUS_KEY_agrave, 0x1EA7,
--IBUS_KEY_aacute, 0x1EA5,
--IBUS_KEY_atilde, 0x1EAB,
--IBUS_KEY_egrave, 0x1EC1,
--IBUS_KEY_eacute, 0x1EBF,
--IBUS_KEY_ograve, 0x1ED3,
--IBUS_KEY_oacute, 0x1ED1,
--IBUS_KEY_otilde, 0x1ED7,
--0x2212, 0x207B,
--0x4E00, 0x3192,
--0x4E01, 0x319C,
--0x4E09, 0x3194,
--0x4E0A, 0x3196,
--0x4E0B, 0x3198,
--0x4E19, 0x319B,
--0x4E2D, 0x3197,
--0x4E59, 0x319A,
--0x4E8C, 0x3193,
--0x4EBA, 0x319F,
--0x56DB, 0x3195,
--0x5730, 0x319E,
--0x5929, 0x319D,
--0x7532, 0x3199,
--IBUS_KEY_dead_circumflex, 0x005E,
--IBUS_KEY_KP_Space, 0x00B2,
--IBUS_KEY_KP_Add, 0x207A,
--IBUS_KEY_KP_0, 0x2070,
--IBUS_KEY_KP_1, 0x00B9,
--IBUS_KEY_KP_2, 0x00B2,
--IBUS_KEY_KP_3, 0x00B3,
--IBUS_KEY_KP_4, 0x2074,
--IBUS_KEY_KP_5, 0x2075,
--IBUS_KEY_KP_6, 0x2076,
--IBUS_KEY_KP_7, 0x2077,
--IBUS_KEY_KP_8, 0x2078,
--IBUS_KEY_KP_9, 0x2079,
--IBUS_KEY_KP_Equal, 0x207C,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_A, 0x1EAC,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_E, 0x1EC6,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_O, 0x1ED8,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_a, 0x1EAD,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_e, 0x1EC7,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_o, 0x1ED9,
--IBUS_KEY_Multi_key, IBUS_KEY_S, IBUS_KEY_M, 0x2120,
--IBUS_KEY_Multi_key, IBUS_KEY_S, IBUS_KEY_m, 0x2120,
--IBUS_KEY_Multi_key, IBUS_KEY_T, IBUS_KEY_M, 0x2122,
--IBUS_KEY_Multi_key, IBUS_KEY_T, IBUS_KEY_m, 0x2122,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_a, 0x00AA,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_h, 0x02B0,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_i, 0x2071,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_j, 0x02B2,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_l, 0x02E1,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_n, 0x207F,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_o, 0x00BA,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_r, 0x02B3,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_s, 0x02E2,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_w, 0x02B7,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_x, 0x02E3,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_y, 0x02B8,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, 0x0263, 0x02E0,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, 0x0266, 0x02B1,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, 0x0279, 0x02B4,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, 0x027B, 0x02B5,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, 0x0281, 0x02B6,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, 0x0295, 0x02E4,
--IBUS_KEY_Multi_key, IBUS_KEY_s, IBUS_KEY_M, 0x2120,
--IBUS_KEY_Multi_key, IBUS_KEY_s, IBUS_KEY_m, 0x2120,
--IBUS_KEY_Multi_key, IBUS_KEY_t, IBUS_KEY_M, 0x2122,
--IBUS_KEY_Multi_key, IBUS_KEY_t, IBUS_KEY_m, 0x2122,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_a, 0x00AA,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_h, 0x02B0,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_i, 0x2071,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_j, 0x02B2,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_l, 0x02E1,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_n, 0x207F,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_o, 0x00BA,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_r, 0x02B3,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_s, 0x02E2,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_w, 0x02B7,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_x, 0x02E3,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, IBUS_KEY_y, 0x02B8,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, 0x0263, 0x02E0,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, 0x0266, 0x02B1,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, 0x0279, 0x02B4,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, 0x027B, 0x02B5,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, 0x0281, 0x02B6,
--IBUS_KEY_Multi_key, IBUS_KEY_underbar, 0x0295, 0x02E4,
--IBUS_KEY_space, 0x007E,
--IBUS_KEY_less, 0x2272,
--IBUS_KEY_equal, 0x2243,
--IBUS_KEY_greater, 0x2273,
--IBUS_KEY_nobreakspace, 0x0303,
--IBUS_KEY_Oacute, 0x1E4C,
--IBUS_KEY_Odiaeresis, 0x1E4E,
--IBUS_KEY_Uacute, 0x1E78,
--IBUS_KEY_oacute, 0x1E4D,
--IBUS_KEY_odiaeresis, 0x1E4F,
--IBUS_KEY_uacute, 0x1E79,
--IBUS_KEY_Abreve, 0x1EB4,
--IBUS_KEY_abreve, 0x1EB5,
--IBUS_KEY_Omacron, 0x022C,
--IBUS_KEY_omacron, 0x022D,
--IBUS_KEY_Greek_iotadieresis, 0x1FD7,
--IBUS_KEY_Greek_upsilondieresis, 0x1FE7,
--IBUS_KEY_Greek_alpha, 0x1FB6,
--IBUS_KEY_Greek_eta, 0x1FC6,
--IBUS_KEY_Greek_iota, 0x1FD6,
--IBUS_KEY_Greek_upsilon, 0x1FE6,
--IBUS_KEY_Greek_omega, 0x1FF6,
--0x1F00, 0x1F06,
--0x1F01, 0x1F07,
--0x1F08, 0x1F0E,
--0x1F09, 0x1F0F,
--0x1F20, 0x1F26,
--0x1F21, 0x1F27,
--0x1F28, 0x1F2E,
--0x1F29, 0x1F2F,
--0x1F30, 0x1F36,
--0x1F31, 0x1F37,
--0x1F38, 0x1F3E,
--0x1F39, 0x1F3F,
--0x1F50, 0x1F56,
--0x1F51, 0x1F57,
--0x1F59, 0x1F5F,
--0x1F60, 0x1F66,
--0x1F61, 0x1F67,
--0x1F68, 0x1F6E,
--0x1F69, 0x1F6F,
--IBUS_KEY_dead_tilde, 0x007E,
--IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_iota, 0x1FD7,
--IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_upsilon, 0x1FE7,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F0E,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F2E,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_IOTA, 0x1F3E,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1F6E,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F06,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F26,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_iota, 0x1F36,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_upsilon, 0x1F56,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1F66,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F0F,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F2F,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_IOTA, 0x1F3F,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_UPSILON, 0x1F5F,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1F6F,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F07,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F27,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_iota, 0x1F37,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_upsilon, 0x1F57,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1F67,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_Greek_iota, 0x1FD7,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_Greek_upsilon, 0x1FE7,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F0F,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F2F,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_IOTA, 0x1F3F,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_UPSILON, 0x1F5F,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1F6F,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F07,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F27,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_iota, 0x1F37,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_upsilon, 0x1F57,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1F67,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F0E,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F2E,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_IOTA, 0x1F3E,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1F6E,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F06,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F26,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_iota, 0x1F36,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_upsilon, 0x1F56,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1F66,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_O, 0x1EE0,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_U, 0x1EEE,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_o, 0x1EE1,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_u, 0x1EEF,
--IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_A, 0x1EB4,
--IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_a, 0x1EB5,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_A, 0x1EAA,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_E, 0x1EC4,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_O, 0x1ED6,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_a, 0x1EAB,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_e, 0x1EC5,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_o, 0x1ED7,
--IBUS_KEY_Multi_key, IBUS_KEY_b, IBUS_KEY_A, 0x1EB4,
--IBUS_KEY_Multi_key, IBUS_KEY_b, IBUS_KEY_a, 0x1EB5,
--IBUS_KEY_space, 0x00AF,
--IBUS_KEY_V, 0x01D5,
--IBUS_KEY_v, 0x01D6,
--IBUS_KEY_nobreakspace, 0x0304,
--IBUS_KEY_Egrave, 0x1E14,
--IBUS_KEY_Eacute, 0x1E16,
--IBUS_KEY_Ograve, 0x1E50,
--IBUS_KEY_Oacute, 0x1E52,
--IBUS_KEY_egrave, 0x1E15,
--IBUS_KEY_eacute, 0x1E17,
--IBUS_KEY_ograve, 0x1E51,
--IBUS_KEY_oacute, 0x1E53,
--IBUS_KEY_Cyrillic_i, 0x04E3,
--IBUS_KEY_Cyrillic_u, 0x04EF,
--IBUS_KEY_Cyrillic_I, 0x04E2,
--IBUS_KEY_Cyrillic_U, 0x04EE,
--IBUS_KEY_Greek_ALPHA, 0x1FB9,
--IBUS_KEY_Greek_IOTA, 0x1FD9,
--IBUS_KEY_Greek_UPSILON, 0x1FE9,
--IBUS_KEY_Greek_alpha, 0x1FB1,
--IBUS_KEY_Greek_iota, 0x1FD1,
--IBUS_KEY_Greek_upsilon, 0x1FE1,
--IBUS_KEY_dead_macron, 0x00AF,
--IBUS_KEY_dead_greek, IBUS_KEY_A, 0x1FB9,
--IBUS_KEY_dead_greek, IBUS_KEY_I, 0x1FD9,
--IBUS_KEY_dead_greek, IBUS_KEY_U, 0x1FE9,
--IBUS_KEY_dead_greek, IBUS_KEY_a, 0x1FB1,
--IBUS_KEY_dead_greek, IBUS_KEY_i, 0x1FD1,
--IBUS_KEY_dead_greek, IBUS_KEY_u, 0x1FE1,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_L, 0x1E38,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_R, 0x1E5C,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_l, 0x1E39,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_r, 0x1E5D,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_A, 0x01DE,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_O, 0x022A,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01D5,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_a, 0x01DF,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_o, 0x022B,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01D6,
--IBUS_KEY_Multi_key, IBUS_KEY_period, IBUS_KEY_A, 0x01E0,
--IBUS_KEY_Multi_key, IBUS_KEY_period, IBUS_KEY_O, 0x0230,
--IBUS_KEY_Multi_key, IBUS_KEY_period, IBUS_KEY_a, 0x01E1,
--IBUS_KEY_Multi_key, IBUS_KEY_period, IBUS_KEY_o, 0x0231,
--IBUS_KEY_Multi_key, IBUS_KEY_semicolon, IBUS_KEY_O, 0x01EC,
--IBUS_KEY_Multi_key, IBUS_KEY_semicolon, IBUS_KEY_o, 0x01ED,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_O, 0x022C,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_o, 0x022D,
--IBUS_KEY_space, 0x02D8,
--IBUS_KEY_nobreakspace, 0x0306,
--IBUS_KEY_Agrave, 0x1EB0,
--IBUS_KEY_Aacute, 0x1EAE,
--IBUS_KEY_Atilde, 0x1EB4,
--IBUS_KEY_agrave, 0x1EB1,
--IBUS_KEY_aacute, 0x1EAF,
--IBUS_KEY_atilde, 0x1EB5,
--IBUS_KEY_Cyrillic_a, 0x04D1,
--IBUS_KEY_Cyrillic_ie, 0x04D7,
--IBUS_KEY_Cyrillic_i, 0x0439,
--IBUS_KEY_Cyrillic_u, 0x045E,
--IBUS_KEY_Cyrillic_zhe, 0x04C2,
--IBUS_KEY_Cyrillic_A, 0x04D0,
--IBUS_KEY_Cyrillic_IE, 0x04D6,
--IBUS_KEY_Cyrillic_I, 0x0419,
--IBUS_KEY_Cyrillic_U, 0x040E,
--IBUS_KEY_Cyrillic_ZHE, 0x04C1,
--IBUS_KEY_Greek_ALPHA, 0x1FB8,
--IBUS_KEY_Greek_IOTA, 0x1FD8,
--IBUS_KEY_Greek_UPSILON, 0x1FE8,
--IBUS_KEY_Greek_alpha, 0x1FB0,
--IBUS_KEY_Greek_iota, 0x1FD0,
--IBUS_KEY_Greek_upsilon, 0x1FE0,
--IBUS_KEY_dead_breve, 0x02D8,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_A, 0x1EB6,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_a, 0x1EB7,
--IBUS_KEY_Multi_key, IBUS_KEY_comma, IBUS_KEY_E, 0x1E1C,
--IBUS_KEY_Multi_key, IBUS_KEY_comma, IBUS_KEY_e, 0x1E1D,
--IBUS_KEY_Multi_key, IBUS_KEY_cedilla, IBUS_KEY_E, 0x1E1C,
--IBUS_KEY_Multi_key, IBUS_KEY_cedilla, IBUS_KEY_e, 0x1E1D,
--IBUS_KEY_space, 0x02D9,
--IBUS_KEY_L, 0x013F,
--IBUS_KEY_i, 0x0131,
--IBUS_KEY_j, 0x0237,
--IBUS_KEY_l, 0x0140,
--IBUS_KEY_nobreakspace, 0x0307,
--IBUS_KEY_Sacute, 0x1E64,
--IBUS_KEY_Scaron, 0x1E66,
--IBUS_KEY_sacute, 0x1E65,
--IBUS_KEY_scaron, 0x1E67,
--IBUS_KEY_Amacron, 0x01E0,
--IBUS_KEY_Omacron, 0x0230,
--IBUS_KEY_amacron, 0x01E1,
--IBUS_KEY_omacron, 0x0231,
--IBUS_KEY_dead_abovedot, 0x02D9,
--IBUS_KEY_dead_stroke, IBUS_KEY_j, 0x025F,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_S, 0x1E68,
--IBUS_KEY_Multi_key, IBUS_KEY_exclam, IBUS_KEY_s, 0x1E69,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_S, 0x1E64,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_s, 0x1E65,
--IBUS_KEY_Multi_key, IBUS_KEY_c, IBUS_KEY_S, 0x1E66,
--IBUS_KEY_Multi_key, IBUS_KEY_c, IBUS_KEY_s, 0x1E67,
--IBUS_KEY_Multi_key, IBUS_KEY_f, IBUS_KEY_s, 0x1E9B,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_S, 0x1E64,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_s, 0x1E65,
--IBUS_KEY_space, 0x0022,
--IBUS_KEY_apostrophe, 0x0344,
--IBUS_KEY_nobreakspace, 0x0308,
--IBUS_KEY_acute, 0x0344,
--IBUS_KEY_Iacute, 0x1E2E,
--IBUS_KEY_Ugrave, 0x01DB,
--IBUS_KEY_Uacute, 0x01D7,
--IBUS_KEY_iacute, 0x1E2F,
--IBUS_KEY_ugrave, 0x01DC,
--IBUS_KEY_uacute, 0x01D8,
--0x01D3, 0x01D9,
--0x01D4, 0x01DA,
--IBUS_KEY_Amacron, 0x01DE,
--IBUS_KEY_Umacron, 0x1E7A,
--IBUS_KEY_amacron, 0x01DF,
--IBUS_KEY_omacron, 0x022B,
--IBUS_KEY_umacron, 0x1E7B,
--IBUS_KEY_Ukrainian_i, 0x0457,
--IBUS_KEY_Ukrainian_I, 0x0407,
--IBUS_KEY_Cyrillic_a, 0x04D3,
--IBUS_KEY_Cyrillic_ie, 0x0451,
--IBUS_KEY_Cyrillic_i, 0x04E5,
--IBUS_KEY_Cyrillic_o, 0x04E7,
--IBUS_KEY_Cyrillic_u, 0x04F1,
--IBUS_KEY_Cyrillic_zhe, 0x04DD,
--IBUS_KEY_Cyrillic_yeru, 0x04F9,
--IBUS_KEY_Cyrillic_ze, 0x04DF,
--IBUS_KEY_Cyrillic_e, 0x04ED,
--IBUS_KEY_Cyrillic_che, 0x04F5,
--IBUS_KEY_Cyrillic_A, 0x04D2,
--IBUS_KEY_Cyrillic_IE, 0x0401,
--IBUS_KEY_Cyrillic_I, 0x04E4,
--IBUS_KEY_Cyrillic_O, 0x04E6,
--IBUS_KEY_Cyrillic_U, 0x04F0,
--IBUS_KEY_Cyrillic_ZHE, 0x04DC,
--IBUS_KEY_Cyrillic_YERU, 0x04F8,
--IBUS_KEY_Cyrillic_ZE, 0x04DE,
--IBUS_KEY_Cyrillic_E, 0x04EC,
--IBUS_KEY_Cyrillic_CHE, 0x04F4,
--IBUS_KEY_Greek_IOTA, 0x03AA,
--IBUS_KEY_Greek_UPSILON, 0x03AB,
--IBUS_KEY_Greek_iota, 0x03CA,
--IBUS_KEY_Greek_upsilon, 0x03CB,
--IBUS_KEY_dead_diaeresis, 0x00A8,
--IBUS_KEY_dead_acute, IBUS_KEY_space, 0x0385,
--IBUS_KEY_dead_acute, IBUS_KEY_Greek_iota, 0x0390,
--IBUS_KEY_dead_acute, IBUS_KEY_Greek_upsilon, 0x03B0,
--IBUS_KEY_dead_belowdiaeresis, IBUS_KEY_equal, 0x2A77,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_U, 0x1E7A,
--IBUS_KEY_Multi_key, IBUS_KEY_underscore, IBUS_KEY_u, 0x1E7B,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_O, 0x1E4E,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_o, 0x1E4F,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_U, 0x1E7A,
--IBUS_KEY_Multi_key, IBUS_KEY_macron, IBUS_KEY_u, 0x1E7B,
--IBUS_KEY_space, 0x00B0,
--IBUS_KEY_nobreakspace, 0x030A,
--IBUS_KEY_Aacute, 0x01FA,
--IBUS_KEY_aacute, 0x01FB,
--IBUS_KEY_dead_abovering, 0x00B0,
--IBUS_KEY_space, 0x02DD,
--IBUS_KEY_nobreakspace, 0x030B,
--IBUS_KEY_Cyrillic_u, 0x04F3,
--IBUS_KEY_Cyrillic_U, 0x04F2,
--IBUS_KEY_dead_doubleacute, 0x02DD,
--IBUS_KEY_space, 0x02C7,
--IBUS_KEY_parenleft, 0x208D,
--IBUS_KEY_parenright, 0x208E,
--IBUS_KEY_plus, 0x208A,
--IBUS_KEY_minus, 0x208B,
--IBUS_KEY_0, 0x2080,
--IBUS_KEY_1, 0x2081,
--IBUS_KEY_2, 0x2082,
--IBUS_KEY_3, 0x2083,
--IBUS_KEY_4, 0x2084,
--IBUS_KEY_5, 0x2085,
--IBUS_KEY_6, 0x2086,
--IBUS_KEY_7, 0x2087,
--IBUS_KEY_8, 0x2088,
--IBUS_KEY_9, 0x2089,
--IBUS_KEY_equal, 0x208C,
--IBUS_KEY_V, 0x01D9,
--IBUS_KEY_v, 0x01DA,
--IBUS_KEY_nobreakspace, 0x030C,
--0x01F2, 0x01C5,
--IBUS_KEY_dead_caron, 0x02C7,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01D9,
--IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01DA,
--IBUS_KEY_space, 0x00B8,
--IBUS_KEY_nobreakspace, 0x0327,
--IBUS_KEY_cent, 0x20B5,
--IBUS_KEY_Cacute, 0x1E08,
--IBUS_KEY_cacute, 0x1E09,
--IBUS_KEY_dead_cedilla, 0x00B8,
--IBUS_KEY_dead_currency, IBUS_KEY_C, 0x20B5,
--IBUS_KEY_dead_currency, IBUS_KEY_c, 0x20B5,
--IBUS_KEY_space, 0x02DB,
--IBUS_KEY_nobreakspace, 0x0328,
--IBUS_KEY_Omacron, 0x01EC,
--IBUS_KEY_omacron, 0x01ED,
--IBUS_KEY_dead_ogonek, 0x02DB,
--IBUS_KEY_space, 0x037A,
--IBUS_KEY_Greek_alphaaccent, 0x1FB4,
--IBUS_KEY_Greek_etaaccent, 0x1FC4,
--IBUS_KEY_Greek_omegaaccent, 0x1FF4,
--IBUS_KEY_Greek_ALPHA, 0x1FBC,
--IBUS_KEY_Greek_ETA, 0x1FCC,
--IBUS_KEY_Greek_OMEGA, 0x1FFC,
--IBUS_KEY_Greek_alpha, 0x1FB3,
--IBUS_KEY_Greek_eta, 0x1FC3,
--IBUS_KEY_Greek_omega, 0x1FF3,
--IBUS_KEY_dead_iota, 0x037A,
--IBUS_KEY_dead_grave, IBUS_KEY_Greek_alpha, 0x1FB2,
--IBUS_KEY_dead_grave, IBUS_KEY_Greek_eta, 0x1FC2,
--IBUS_KEY_dead_grave, IBUS_KEY_Greek_omega, 0x1FF2,
--IBUS_KEY_dead_acute, IBUS_KEY_Greek_alpha, 0x1FB4,
--IBUS_KEY_dead_acute, IBUS_KEY_Greek_eta, 0x1FC4,
--IBUS_KEY_dead_acute, IBUS_KEY_Greek_omega, 0x1FF4,
--IBUS_KEY_dead_tilde, IBUS_KEY_Greek_alpha, 0x1FB7,
--IBUS_KEY_dead_tilde, IBUS_KEY_Greek_eta, 0x1FC7,
--IBUS_KEY_dead_tilde, IBUS_KEY_Greek_omega, 0x1FF7,
--IBUS_KEY_dead_tilde, 0x1F00, 0x1F86,
--IBUS_KEY_dead_tilde, 0x1F01, 0x1F87,
--IBUS_KEY_dead_tilde, 0x1F08, 0x1F8E,
--IBUS_KEY_dead_tilde, 0x1F09, 0x1F8F,
--IBUS_KEY_dead_tilde, 0x1F20, 0x1F96,
--IBUS_KEY_dead_tilde, 0x1F21, 0x1F97,
--IBUS_KEY_dead_tilde, 0x1F28, 0x1F9E,
--IBUS_KEY_dead_tilde, 0x1F29, 0x1F9F,
--IBUS_KEY_dead_tilde, 0x1F60, 0x1FA6,
--IBUS_KEY_dead_tilde, 0x1F61, 0x1FA7,
--IBUS_KEY_dead_tilde, 0x1F68, 0x1FAE,
--IBUS_KEY_dead_tilde, 0x1F69, 0x1FAF,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F88,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F98,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FA8,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F80,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F90,
--IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA0,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F89,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F99,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FA9,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F81,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F91,
--IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA1,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8A,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9A,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAA,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F82,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F92,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA2,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8B,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9B,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAB,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F83,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F93,
--IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA3,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8E,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9E,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAE,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F86,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F96,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA6,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8F,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9F,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAF,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F87,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F97,
--IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA7,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_Greek_alpha, 0x1FB4,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_Greek_eta, 0x1FC4,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_Greek_omega, 0x1FF4,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F00, 0x1F84,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F01, 0x1F85,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F08, 0x1F8C,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F09, 0x1F8D,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F20, 0x1F94,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F21, 0x1F95,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F28, 0x1F9C,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F29, 0x1F9D,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F60, 0x1FA4,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F61, 0x1FA5,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F68, 0x1FAC,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x1F69, 0x1FAD,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F89,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F99,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FA9,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F81,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F91,
--IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA1,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F88,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F98,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FA8,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F80,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F90,
--IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA0,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_Greek_alpha, 0x1FB2,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_Greek_eta, 0x1FC2,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_Greek_omega, 0x1FF2,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F00, 0x1F82,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F01, 0x1F83,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F08, 0x1F8A,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F09, 0x1F8B,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F20, 0x1F92,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F21, 0x1F93,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F28, 0x1F9A,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F29, 0x1F9B,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F60, 0x1FA2,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F61, 0x1FA3,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F68, 0x1FAA,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, 0x1F69, 0x1FAB,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_Greek_alpha, 0x1FB7,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_Greek_eta, 0x1FC7,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_Greek_omega, 0x1FF7,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F00, 0x1F86,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F01, 0x1F87,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F08, 0x1F8E,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F09, 0x1F8F,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F20, 0x1F96,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F21, 0x1F97,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F28, 0x1F9E,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F29, 0x1F9F,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F60, 0x1FA6,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F61, 0x1FA7,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F68, 0x1FAE,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, 0x1F69, 0x1FAF,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_Greek_alpha, 0x1FB4,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_Greek_eta, 0x1FC4,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_Greek_omega, 0x1FF4,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F00, 0x1F84,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F01, 0x1F85,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F08, 0x1F8C,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F09, 0x1F8D,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F20, 0x1F94,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F21, 0x1F95,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F28, 0x1F9C,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F29, 0x1F9D,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F60, 0x1FA4,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F61, 0x1FA5,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F68, 0x1FAC,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x1F69, 0x1FAD,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8B,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9B,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAB,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F83,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F93,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA3,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8A,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9A,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAA,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F82,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F92,
--IBUS_KEY_dead_grave, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA2,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_dead_acute, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8F,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9F,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAF,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F87,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F97,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA7,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8E,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9E,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAE,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F86,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F96,
--IBUS_KEY_dead_tilde, IBUS_KEY_Multi_key, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA6,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8B,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9B,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAB,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F83,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F93,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA3,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8A,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9A,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAA,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F82,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F92,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA2,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8A,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9A,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAA,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F82,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F92,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA2,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8B,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9B,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAB,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F83,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F93,
--IBUS_KEY_Multi_key, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA3,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8F,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9F,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAF,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F87,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F97,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA7,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8E,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9E,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAE,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F86,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F96,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA6,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8E,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9E,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAE,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F86,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F96,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA6,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8F,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9F,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAF,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F87,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F97,
--IBUS_KEY_Multi_key, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA7,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Multi_key, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_kana_WO, 0x30FA,
--IBUS_KEY_kana_U, 0x30F4,
--IBUS_KEY_kana_KA, 0x30AC,
--IBUS_KEY_kana_KI, 0x30AE,
--IBUS_KEY_kana_KU, 0x30B0,
--IBUS_KEY_kana_KE, 0x30B2,
--IBUS_KEY_kana_KO, 0x30B4,
--IBUS_KEY_kana_SA, 0x30B6,
--IBUS_KEY_kana_SHI, 0x30B8,
--IBUS_KEY_kana_SU, 0x30BA,
--IBUS_KEY_kana_SE, 0x30BC,
--IBUS_KEY_kana_SO, 0x30BE,
--IBUS_KEY_kana_TA, 0x30C0,
--IBUS_KEY_kana_CHI, 0x30C2,
--IBUS_KEY_kana_TSU, 0x30C5,
--IBUS_KEY_kana_TE, 0x30C7,
--IBUS_KEY_kana_TO, 0x30C9,
--IBUS_KEY_kana_HA, 0x30D0,
--IBUS_KEY_kana_HI, 0x30D3,
--IBUS_KEY_kana_FU, 0x30D6,
--IBUS_KEY_kana_HE, 0x30D9,
--IBUS_KEY_kana_HO, 0x30DC,
--IBUS_KEY_kana_WA, 0x30F7,
--IBUS_KEY_kana_HA, 0x30D1,
--IBUS_KEY_kana_HI, 0x30D4,
--IBUS_KEY_kana_FU, 0x30D7,
--IBUS_KEY_kana_HE, 0x30DA,
--IBUS_KEY_kana_HO, 0x30DD,
--IBUS_KEY_space, 0x0323,
--IBUS_KEY_plus, 0x2A25,
--IBUS_KEY_minus, 0x2A2A,
--IBUS_KEY_equal, 0x2A66,
--IBUS_KEY_nobreakspace, 0x0323,
--IBUS_KEY_Abreve, 0x1EB6,
--IBUS_KEY_abreve, 0x1EB7,
--IBUS_KEY_dead_belowdot, 0x0323,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_O, 0x1EE2,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_U, 0x1EF0,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_o, 0x1EE3,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_u, 0x1EF1,
--IBUS_KEY_space, 0x0309,
--IBUS_KEY_B, 0x0181,
--IBUS_KEY_C, 0x0187,
--IBUS_KEY_D, 0x018A,
--IBUS_KEY_F, 0x0191,
--IBUS_KEY_G, 0x0193,
--IBUS_KEY_K, 0x0198,
--IBUS_KEY_M, 0x2C6E,
--IBUS_KEY_N, 0x019D,
--IBUS_KEY_P, 0x01A4,
--IBUS_KEY_T, 0x01AC,
--IBUS_KEY_V, 0x01B2,
--IBUS_KEY_W, 0x2C72,
--IBUS_KEY_Z, 0x0224,
--IBUS_KEY_b, 0x0253,
--IBUS_KEY_c, 0x0188,
--IBUS_KEY_d, 0x0257,
--IBUS_KEY_f, 0x0192,
--IBUS_KEY_g, 0x0260,
--IBUS_KEY_h, 0x0266,
--IBUS_KEY_k, 0x0199,
--IBUS_KEY_m, 0x0271,
--IBUS_KEY_n, 0x0272,
--IBUS_KEY_p, 0x01A5,
--IBUS_KEY_q, 0x02A0,
--IBUS_KEY_r, 0x027C,
--IBUS_KEY_s, 0x0282,
--IBUS_KEY_t, 0x01AD,
--IBUS_KEY_v, 0x028B,
--IBUS_KEY_w, 0x2C73,
--IBUS_KEY_z, 0x0225,
--IBUS_KEY_nobreakspace, 0x0309,
--IBUS_KEY_Abreve, 0x1EB2,
--IBUS_KEY_abreve, 0x1EB3,
--0x0256, 0x1D91,
--0x025C, 0x025D,
--0x025F, 0x0284,
--0x0279, 0x027B,
--IBUS_KEY_dead_hook, 0x0309,
--IBUS_KEY_dead_greek, IBUS_KEY_U, 0x03D2,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_O, 0x1EDE,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_U, 0x1EEC,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_o, 0x1EDF,
--IBUS_KEY_Multi_key, IBUS_KEY_plus, IBUS_KEY_u, 0x1EED,
--IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_A, 0x1EB2,
--IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_a, 0x1EB3,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_A, 0x1EA8,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_E, 0x1EC2,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_O, 0x1ED4,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_a, 0x1EA9,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_e, 0x1EC3,
--IBUS_KEY_Multi_key, IBUS_KEY_asciicircum, IBUS_KEY_o, 0x1ED5,
--IBUS_KEY_Multi_key, IBUS_KEY_b, IBUS_KEY_A, 0x1EB2,
--IBUS_KEY_Multi_key, IBUS_KEY_b, IBUS_KEY_a, 0x1EB3,
--IBUS_KEY_space, 0x031B,
--IBUS_KEY_nobreakspace, 0x031B,
--IBUS_KEY_Utilde, 0x1EEE,
--IBUS_KEY_utilde, 0x1EEF,
--IBUS_KEY_dead_horn, 0x031B,
--IBUS_KEY_space, 0x002F,
--IBUS_KEY_2, 0x01BB,
--IBUS_KEY_A, 0x023A,
--IBUS_KEY_B, 0x0243,
--IBUS_KEY_C, 0x023B,
--IBUS_KEY_D, 0x0110,
--IBUS_KEY_E, 0x0246,
--IBUS_KEY_G, 0x01E4,
--IBUS_KEY_H, 0x0126,
--IBUS_KEY_I, 0x0197,
--IBUS_KEY_J, 0x0248,
--IBUS_KEY_L, 0x0141,
--IBUS_KEY_O, 0x00D8,
--IBUS_KEY_P, 0x2C63,
--IBUS_KEY_R, 0x024C,
--IBUS_KEY_T, 0x0166,
--IBUS_KEY_U, 0x0244,
--IBUS_KEY_Y, 0x024E,
--IBUS_KEY_Z, 0x01B5,
--IBUS_KEY_a, 0x2C65,
--IBUS_KEY_b, 0x0180,
--IBUS_KEY_c, 0x023C,
--IBUS_KEY_d, 0x0111,
--IBUS_KEY_e, 0x0247,
--IBUS_KEY_g, 0x01E5,
--IBUS_KEY_h, 0x0127,
--IBUS_KEY_i, 0x0268,
--IBUS_KEY_j, 0x0249,
--IBUS_KEY_l, 0x0142,
--IBUS_KEY_o, 0x00F8,
--IBUS_KEY_p, 0x1D7D,
--IBUS_KEY_r, 0x024D,
--IBUS_KEY_t, 0x0167,
--IBUS_KEY_u, 0x0289,
--IBUS_KEY_y, 0x024F,
--IBUS_KEY_z, 0x01B6,
--IBUS_KEY_nobreakspace, 0x0338,
--IBUS_KEY_Oacute, 0x01FE,
--IBUS_KEY_oacute, 0x01FF,
--0x0237, 0x025F,
--0x0269, 0x1D7C,
--IBUS_KEY_lessthanequal, 0x2270,
--IBUS_KEY_greaterthanequal, 0x2271,
--IBUS_KEY_dead_stroke, 0x002F,
--IBUS_KEY_dead_acute, IBUS_KEY_O, 0x01FE,
--IBUS_KEY_dead_acute, IBUS_KEY_o, 0x01FF,
--IBUS_KEY_dead_abovedot, IBUS_KEY_j, 0x025F,
--IBUS_KEY_dead_greek, IBUS_KEY_r, 0x03FC,
--IBUS_KEY_Greek_ALPHA, 0x1F08,
--IBUS_KEY_Greek_EPSILON, 0x1F18,
--IBUS_KEY_Greek_ETA, 0x1F28,
--IBUS_KEY_Greek_IOTA, 0x1F38,
--IBUS_KEY_Greek_OMICRON, 0x1F48,
--IBUS_KEY_Greek_OMEGA, 0x1F68,
--IBUS_KEY_Greek_alpha, 0x1F00,
--IBUS_KEY_Greek_epsilon, 0x1F10,
--IBUS_KEY_Greek_eta, 0x1F20,
--IBUS_KEY_Greek_iota, 0x1F30,
--IBUS_KEY_Greek_omicron, 0x1F40,
--IBUS_KEY_Greek_rho, 0x1FE4,
--IBUS_KEY_Greek_upsilon, 0x1F50,
--IBUS_KEY_Greek_omega, 0x1F60,
--IBUS_KEY_Greek_ALPHA, 0x1F09,
--IBUS_KEY_Greek_EPSILON, 0x1F19,
--IBUS_KEY_Greek_ETA, 0x1F29,
--IBUS_KEY_Greek_IOTA, 0x1F39,
--IBUS_KEY_Greek_OMICRON, 0x1F49,
--IBUS_KEY_Greek_RHO, 0x1FEC,
--IBUS_KEY_Greek_UPSILON, 0x1F59,
--IBUS_KEY_Greek_OMEGA, 0x1F69,
--IBUS_KEY_Greek_alpha, 0x1F01,
--IBUS_KEY_Greek_epsilon, 0x1F11,
--IBUS_KEY_Greek_eta, 0x1F21,
--IBUS_KEY_Greek_iota, 0x1F31,
--IBUS_KEY_Greek_omicron, 0x1F41,
--IBUS_KEY_Greek_rho, 0x1FE5,
--IBUS_KEY_Greek_upsilon, 0x1F51,
--IBUS_KEY_Greek_omega, 0x1F61,
--IBUS_KEY_bar, 0x2AF0,
--IBUS_KEY_plus, 0x2A26,
--IBUS_KEY_dead_diaeresis, IBUS_KEY_equal, 0x2A77,
--IBUS_KEY_space, 0x002C,
--IBUS_KEY_S, 0x0218,
--IBUS_KEY_T, 0x021A,
--IBUS_KEY_s, 0x0219,
--IBUS_KEY_t, 0x021B,
--IBUS_KEY_nobreakspace, 0x0326,
--IBUS_KEY_dead_belowcomma, 0x002C,
--IBUS_KEY_space, 0x00A4,
--IBUS_KEY_A, 0x20B3,
--IBUS_KEY_B, 0x20B1,
--IBUS_KEY_C, 0x20A1,
--IBUS_KEY_D, 0x20AF,
--IBUS_KEY_E, 0x20A0,
--IBUS_KEY_F, 0x20A3,
--IBUS_KEY_G, 0x20B2,
--IBUS_KEY_H, 0x20B4,
--IBUS_KEY_I, 0x17DB,
--IBUS_KEY_K, 0x20AD,
--IBUS_KEY_L, 0x20A4,
--IBUS_KEY_M, 0x2133,
--IBUS_KEY_N, 0x20A6,
--IBUS_KEY_O, 0x0AF1,
--IBUS_KEY_P, 0x20A7,
--IBUS_KEY_R, 0x20A8,
--IBUS_KEY_S, 0x0024,
--IBUS_KEY_T, 0x20AE,
--IBUS_KEY_U, 0x5713,
--IBUS_KEY_W, 0x20A9,
--IBUS_KEY_Y, 0x5186,
--IBUS_KEY_a, 0x060B,
--IBUS_KEY_b, 0x0E3F,
--IBUS_KEY_c, 0x00A2,
--IBUS_KEY_d, 0x20AB,
--IBUS_KEY_e, 0x20AC,
--IBUS_KEY_f, 0x0192,
--IBUS_KEY_g, 0x20B2,
--IBUS_KEY_h, 0x20B4,
--IBUS_KEY_i, 0xFDFC,
--IBUS_KEY_k, 0x20AD,
--IBUS_KEY_l, 0x00A3,
--IBUS_KEY_m, 0x20A5,
--IBUS_KEY_n, 0x20A6,
--IBUS_KEY_o, 0x0BF9,
--IBUS_KEY_p, 0x20B0,
--IBUS_KEY_r, 0x20A2,
--IBUS_KEY_s, 0x20AA,
--IBUS_KEY_t, 0x09F3,
--IBUS_KEY_u, 0x5143,
--IBUS_KEY_w, 0x20A9,
--IBUS_KEY_y, 0x00A5,
--IBUS_KEY_nobreakspace, 0x00A4,
--IBUS_KEY_Ccedilla, 0x20B5,
--IBUS_KEY_THORN, 0x09F2,
--IBUS_KEY_ccedilla, 0x20B5,
--IBUS_KEY_thorn, 0x09F2,
--IBUS_KEY_dead_currency, 0x00A4,
--IBUS_KEY_dead_cedilla, IBUS_KEY_C, 0x20B5,
--IBUS_KEY_dead_cedilla, IBUS_KEY_c, 0x20B5,
--IBUS_KEY_space, 0x00B5,
--IBUS_KEY_A, 0x0391,
--IBUS_KEY_B, 0x0392,
--IBUS_KEY_D, 0x0394,
--IBUS_KEY_E, 0x0395,
--IBUS_KEY_F, 0x03A6,
--IBUS_KEY_G, 0x0393,
--IBUS_KEY_H, 0x0397,
--IBUS_KEY_I, 0x0399,
--IBUS_KEY_J, 0x0398,
--IBUS_KEY_K, 0x039A,
--IBUS_KEY_L, 0x039B,
--IBUS_KEY_M, 0x039C,
--IBUS_KEY_N, 0x039D,
--IBUS_KEY_O, 0x039F,
--IBUS_KEY_P, 0x03A0,
--IBUS_KEY_Q, 0x03A7,
--IBUS_KEY_R, 0x03A1,
--IBUS_KEY_S, 0x03A3,
--IBUS_KEY_T, 0x03A4,
--IBUS_KEY_U, 0x03A5,
--IBUS_KEY_W, 0x03A9,
--IBUS_KEY_X, 0x039E,
--IBUS_KEY_Y, 0x03A8,
--IBUS_KEY_Z, 0x0396,
--IBUS_KEY_a, 0x03B1,
--IBUS_KEY_b, 0x03B2,
--IBUS_KEY_d, 0x03B4,
--IBUS_KEY_e, 0x03B5,
--IBUS_KEY_f, 0x03C6,
--IBUS_KEY_g, 0x03B3,
--IBUS_KEY_h, 0x03B7,
--IBUS_KEY_i, 0x03B9,
--IBUS_KEY_j, 0x03B8,
--IBUS_KEY_k, 0x03BA,
--IBUS_KEY_l, 0x03BB,
--IBUS_KEY_m, 0x03BC,
--IBUS_KEY_n, 0x03BD,
--IBUS_KEY_o, 0x03BF,
--IBUS_KEY_p, 0x03C0,
--IBUS_KEY_q, 0x03C7,
--IBUS_KEY_r, 0x03C1,
--IBUS_KEY_s, 0x03C3,
--IBUS_KEY_t, 0x03C4,
--IBUS_KEY_u, 0x03C5,
--IBUS_KEY_w, 0x03C9,
--IBUS_KEY_x, 0x03BE,
--IBUS_KEY_y, 0x03C8,
--IBUS_KEY_z, 0x03B6,
--IBUS_KEY_nobreakspace, 0x00B5,
--IBUS_KEY_dead_greek, 0x00B5,
--IBUS_KEY_dead_macron, IBUS_KEY_A, 0x1FB9,
--IBUS_KEY_dead_macron, IBUS_KEY_I, 0x1FD9,
--IBUS_KEY_dead_macron, IBUS_KEY_U, 0x1FE9,
--IBUS_KEY_dead_macron, IBUS_KEY_a, 0x1FB1,
--IBUS_KEY_dead_macron, IBUS_KEY_i, 0x1FD1,
--IBUS_KEY_dead_macron, IBUS_KEY_u, 0x1FE1,
--IBUS_KEY_dead_hook, IBUS_KEY_U, 0x03D2,
--IBUS_KEY_dead_stroke, IBUS_KEY_r, 0x03FC,
--IBUS_KEY_space, IBUS_KEY_space, 0x00A0,
--IBUS_KEY_space, IBUS_KEY_apostrophe, 0x0027,
--IBUS_KEY_space, IBUS_KEY_parenleft, 0x02D8,
--IBUS_KEY_space, IBUS_KEY_comma, 0x00B8,
--IBUS_KEY_space, IBUS_KEY_minus, 0x007E,
--IBUS_KEY_space, IBUS_KEY_period, 0x2008,
--IBUS_KEY_space, IBUS_KEY_less, 0x02C7,
--IBUS_KEY_space, IBUS_KEY_greater, 0x005E,
--IBUS_KEY_space, IBUS_KEY_asciicircum, 0x005E,
--IBUS_KEY_space, IBUS_KEY_grave, 0x0060,
--IBUS_KEY_space, IBUS_KEY_asciitilde, 0x007E,
--IBUS_KEY_exclam, IBUS_KEY_exclam, 0x00A1,
--IBUS_KEY_exclam, IBUS_KEY_question, 0x203D,
--IBUS_KEY_exclam, IBUS_KEY_A, 0x1EA0,
--IBUS_KEY_exclam, IBUS_KEY_B, 0x1E04,
--IBUS_KEY_exclam, IBUS_KEY_D, 0x1E0C,
--IBUS_KEY_exclam, IBUS_KEY_E, 0x1EB8,
--IBUS_KEY_exclam, IBUS_KEY_H, 0x1E24,
--IBUS_KEY_exclam, IBUS_KEY_I, 0x1ECA,
--IBUS_KEY_exclam, IBUS_KEY_K, 0x1E32,
--IBUS_KEY_exclam, IBUS_KEY_L, 0x1E36,
--IBUS_KEY_exclam, IBUS_KEY_M, 0x1E42,
--IBUS_KEY_exclam, IBUS_KEY_N, 0x1E46,
--IBUS_KEY_exclam, IBUS_KEY_O, 0x1ECC,
--IBUS_KEY_exclam, IBUS_KEY_P, 0x00B6,
--IBUS_KEY_exclam, IBUS_KEY_R, 0x1E5A,
--IBUS_KEY_exclam, IBUS_KEY_S, 0x1E62,
--IBUS_KEY_exclam, IBUS_KEY_T, 0x1E6C,
--IBUS_KEY_exclam, IBUS_KEY_U, 0x1EE4,
--IBUS_KEY_exclam, IBUS_KEY_V, 0x1E7E,
--IBUS_KEY_exclam, IBUS_KEY_W, 0x1E88,
--IBUS_KEY_exclam, IBUS_KEY_Y, 0x1EF4,
--IBUS_KEY_exclam, IBUS_KEY_Z, 0x1E92,
--IBUS_KEY_exclam, IBUS_KEY_asciicircum, 0x00A6,
--IBUS_KEY_exclam, IBUS_KEY_a, 0x1EA1,
--IBUS_KEY_exclam, IBUS_KEY_b, 0x1E05,
--IBUS_KEY_exclam, IBUS_KEY_d, 0x1E0D,
--IBUS_KEY_exclam, IBUS_KEY_e, 0x1EB9,
--IBUS_KEY_exclam, IBUS_KEY_h, 0x1E25,
--IBUS_KEY_exclam, IBUS_KEY_i, 0x1ECB,
--IBUS_KEY_exclam, IBUS_KEY_k, 0x1E33,
--IBUS_KEY_exclam, IBUS_KEY_l, 0x1E37,
--IBUS_KEY_exclam, IBUS_KEY_m, 0x1E43,
--IBUS_KEY_exclam, IBUS_KEY_n, 0x1E47,
--IBUS_KEY_exclam, IBUS_KEY_o, 0x1ECD,
--IBUS_KEY_exclam, IBUS_KEY_p, 0x00B6,
--IBUS_KEY_exclam, IBUS_KEY_r, 0x1E5B,
--IBUS_KEY_exclam, IBUS_KEY_s, 0x1E63,
--IBUS_KEY_exclam, IBUS_KEY_t, 0x1E6D,
--IBUS_KEY_exclam, IBUS_KEY_u, 0x1EE5,
--IBUS_KEY_exclam, IBUS_KEY_v, 0x1E7F,
--IBUS_KEY_exclam, IBUS_KEY_w, 0x1E89,
--IBUS_KEY_exclam, IBUS_KEY_y, 0x1EF5,
--IBUS_KEY_exclam, IBUS_KEY_z, 0x1E93,
--IBUS_KEY_quotedbl, IBUS_KEY_quotedbl, 0x00A8,
--IBUS_KEY_quotedbl, IBUS_KEY_apostrophe, 0x0344,
--IBUS_KEY_quotedbl, IBUS_KEY_comma, 0x201E,
--IBUS_KEY_quotedbl, IBUS_KEY_less, 0x201C,
--IBUS_KEY_quotedbl, IBUS_KEY_greater, 0x201D,
--IBUS_KEY_quotedbl, IBUS_KEY_A, 0x00C4,
--IBUS_KEY_quotedbl, IBUS_KEY_E, 0x00CB,
--IBUS_KEY_quotedbl, IBUS_KEY_H, 0x1E26,
--IBUS_KEY_quotedbl, IBUS_KEY_I, 0x00CF,
--IBUS_KEY_quotedbl, IBUS_KEY_O, 0x00D6,
--IBUS_KEY_quotedbl, IBUS_KEY_U, 0x00DC,
--IBUS_KEY_quotedbl, IBUS_KEY_W, 0x1E84,
--IBUS_KEY_quotedbl, IBUS_KEY_X, 0x1E8C,
--IBUS_KEY_quotedbl, IBUS_KEY_Y, 0x0178,
--IBUS_KEY_quotedbl, IBUS_KEY_a, 0x00E4,
--IBUS_KEY_quotedbl, IBUS_KEY_e, 0x00EB,
--IBUS_KEY_quotedbl, IBUS_KEY_h, 0x1E27,
--IBUS_KEY_quotedbl, IBUS_KEY_i, 0x00EF,
--IBUS_KEY_quotedbl, IBUS_KEY_o, 0x00F6,
--IBUS_KEY_quotedbl, IBUS_KEY_t, 0x1E97,
--IBUS_KEY_quotedbl, IBUS_KEY_u, 0x00FC,
--IBUS_KEY_quotedbl, IBUS_KEY_w, 0x1E85,
--IBUS_KEY_quotedbl, IBUS_KEY_x, 0x1E8D,
--IBUS_KEY_quotedbl, IBUS_KEY_y, 0x00FF,
--IBUS_KEY_quotedbl, IBUS_KEY_acute, 0x0344,
--IBUS_KEY_quotedbl, IBUS_KEY_Otilde, 0x1E4E,
--IBUS_KEY_quotedbl, IBUS_KEY_otilde, 0x1E4F,
--IBUS_KEY_quotedbl, 0x03D2, 0x03D4,
--IBUS_KEY_quotedbl, IBUS_KEY_Umacron, 0x1E7A,
--IBUS_KEY_quotedbl, IBUS_KEY_umacron, 0x1E7B,
--IBUS_KEY_quotedbl, 0x04D8, 0x04DA,
--IBUS_KEY_quotedbl, 0x04D9, 0x04DB,
--IBUS_KEY_quotedbl, 0x04E8, 0x04EA,
--IBUS_KEY_quotedbl, 0x04E9, 0x04EB,
--IBUS_KEY_quotedbl, IBUS_KEY_Ukrainian_i, 0x0457,
--IBUS_KEY_quotedbl, IBUS_KEY_Ukrainian_I, 0x0407,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_a, 0x04D3,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_ie, 0x0451,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_i, 0x04E5,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_o, 0x04E7,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_u, 0x04F1,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_zhe, 0x04DD,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_yeru, 0x04F9,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_ze, 0x04DF,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_e, 0x04ED,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_che, 0x04F5,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_A, 0x04D2,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_IE, 0x0401,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_I, 0x04E4,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_O, 0x04E6,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_U, 0x04F0,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_ZHE, 0x04DC,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_YERU, 0x04F8,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_ZE, 0x04DE,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_E, 0x04EC,
--IBUS_KEY_quotedbl, IBUS_KEY_Cyrillic_CHE, 0x04F4,
--IBUS_KEY_quotedbl, IBUS_KEY_Greek_IOTA, 0x03AA,
--IBUS_KEY_quotedbl, IBUS_KEY_Greek_UPSILON, 0x03AB,
--IBUS_KEY_quotedbl, IBUS_KEY_Greek_iota, 0x03CA,
--IBUS_KEY_quotedbl, IBUS_KEY_Greek_upsilon, 0x03CB,
--IBUS_KEY_quotedbl, IBUS_KEY_dead_acute, 0x0344,
--IBUS_KEY_numbersign, IBUS_KEY_numbersign, 0x266F,
--IBUS_KEY_numbersign, IBUS_KEY_E, 0x266B,
--IBUS_KEY_numbersign, IBUS_KEY_S, 0x266C,
--IBUS_KEY_numbersign, IBUS_KEY_b, 0x266D,
--IBUS_KEY_numbersign, IBUS_KEY_e, 0x266A,
--IBUS_KEY_numbersign, IBUS_KEY_f, 0x266E,
--IBUS_KEY_numbersign, IBUS_KEY_q, 0x2669,
--IBUS_KEY_percent, IBUS_KEY_o, 0x2030,
--IBUS_KEY_apostrophe, IBUS_KEY_space, 0x0027,
--IBUS_KEY_apostrophe, IBUS_KEY_apostrophe, 0x00B4,
--IBUS_KEY_apostrophe, IBUS_KEY_comma, 0x201A,
--IBUS_KEY_apostrophe, IBUS_KEY_less, 0x2018,
--IBUS_KEY_apostrophe, IBUS_KEY_greater, 0x2019,
--IBUS_KEY_apostrophe, IBUS_KEY_A, 0x00C1,
--IBUS_KEY_apostrophe, IBUS_KEY_C, 0x0106,
--IBUS_KEY_apostrophe, IBUS_KEY_E, 0x00C9,
--IBUS_KEY_apostrophe, IBUS_KEY_G, 0x01F4,
--IBUS_KEY_apostrophe, IBUS_KEY_I, 0x00CD,
--IBUS_KEY_apostrophe, IBUS_KEY_K, 0x1E30,
--IBUS_KEY_apostrophe, IBUS_KEY_L, 0x0139,
--IBUS_KEY_apostrophe, IBUS_KEY_M, 0x1E3E,
--IBUS_KEY_apostrophe, IBUS_KEY_N, 0x0143,
--IBUS_KEY_apostrophe, IBUS_KEY_O, 0x00D3,
--IBUS_KEY_apostrophe, IBUS_KEY_P, 0x1E54,
--IBUS_KEY_apostrophe, IBUS_KEY_R, 0x0154,
--IBUS_KEY_apostrophe, IBUS_KEY_S, 0x015A,
--IBUS_KEY_apostrophe, IBUS_KEY_U, 0x00DA,
--IBUS_KEY_apostrophe, IBUS_KEY_W, 0x1E82,
--IBUS_KEY_apostrophe, IBUS_KEY_Y, 0x00DD,
--IBUS_KEY_apostrophe, IBUS_KEY_Z, 0x0179,
--IBUS_KEY_apostrophe, IBUS_KEY_a, 0x00E1,
--IBUS_KEY_apostrophe, IBUS_KEY_c, 0x0107,
--IBUS_KEY_apostrophe, IBUS_KEY_e, 0x00E9,
--IBUS_KEY_apostrophe, IBUS_KEY_g, 0x01F5,
--IBUS_KEY_apostrophe, IBUS_KEY_i, 0x00ED,
--IBUS_KEY_apostrophe, IBUS_KEY_k, 0x1E31,
--IBUS_KEY_apostrophe, IBUS_KEY_l, 0x013A,
--IBUS_KEY_apostrophe, IBUS_KEY_m, 0x1E3F,
--IBUS_KEY_apostrophe, IBUS_KEY_n, 0x0144,
--IBUS_KEY_apostrophe, IBUS_KEY_o, 0x00F3,
--IBUS_KEY_apostrophe, IBUS_KEY_p, 0x1E55,
--IBUS_KEY_apostrophe, IBUS_KEY_r, 0x0155,
--IBUS_KEY_apostrophe, IBUS_KEY_s, 0x015B,
--IBUS_KEY_apostrophe, IBUS_KEY_u, 0x00FA,
--IBUS_KEY_apostrophe, IBUS_KEY_w, 0x1E83,
--IBUS_KEY_apostrophe, IBUS_KEY_y, 0x00FD,
--IBUS_KEY_apostrophe, IBUS_KEY_z, 0x017A,
--IBUS_KEY_apostrophe, IBUS_KEY_Acircumflex, 0x1EA4,
--IBUS_KEY_apostrophe, IBUS_KEY_Aring, 0x01FA,
--IBUS_KEY_apostrophe, IBUS_KEY_AE, 0x01FC,
--IBUS_KEY_apostrophe, IBUS_KEY_Ccedilla, 0x1E08,
--IBUS_KEY_apostrophe, IBUS_KEY_Ecircumflex, 0x1EBE,
--IBUS_KEY_apostrophe, IBUS_KEY_Idiaeresis, 0x1E2E,
--IBUS_KEY_apostrophe, IBUS_KEY_Ocircumflex, 0x1ED0,
--IBUS_KEY_apostrophe, IBUS_KEY_Otilde, 0x1E4C,
--IBUS_KEY_apostrophe, IBUS_KEY_Ooblique, 0x01FE,
--IBUS_KEY_apostrophe, IBUS_KEY_Udiaeresis, 0x01D7,
--IBUS_KEY_apostrophe, IBUS_KEY_acircumflex, 0x1EA5,
--IBUS_KEY_apostrophe, IBUS_KEY_aring, 0x01FB,
--IBUS_KEY_apostrophe, IBUS_KEY_ae, 0x01FD,
--IBUS_KEY_apostrophe, IBUS_KEY_ccedilla, 0x1E09,
--IBUS_KEY_apostrophe, IBUS_KEY_ecircumflex, 0x1EBF,
--IBUS_KEY_apostrophe, IBUS_KEY_idiaeresis, 0x1E2F,
--IBUS_KEY_apostrophe, IBUS_KEY_ocircumflex, 0x1ED1,
--IBUS_KEY_apostrophe, IBUS_KEY_otilde, 0x1E4D,
--IBUS_KEY_apostrophe, IBUS_KEY_oslash, 0x01FF,
--IBUS_KEY_apostrophe, IBUS_KEY_udiaeresis, 0x01D8,
--IBUS_KEY_apostrophe, IBUS_KEY_Abreve, 0x1EAE,
--IBUS_KEY_apostrophe, IBUS_KEY_abreve, 0x1EAF,
--IBUS_KEY_apostrophe, IBUS_KEY_Emacron, 0x1E16,
--IBUS_KEY_apostrophe, IBUS_KEY_emacron, 0x1E17,
--IBUS_KEY_apostrophe, IBUS_KEY_Omacron, 0x1E52,
--IBUS_KEY_apostrophe, IBUS_KEY_Utilde, 0x1E78,
--IBUS_KEY_apostrophe, IBUS_KEY_omacron, 0x1E53,
--IBUS_KEY_apostrophe, IBUS_KEY_utilde, 0x1E79,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_ghe, 0x0453,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_ka, 0x045C,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_GHE, 0x0403,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_KA, 0x040C,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_iotadieresis, 0x0390,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_upsilondieresis, 0x03B0,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_ALPHA, 0x0386,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_EPSILON, 0x0388,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_ETA, 0x0389,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_IOTA, 0x038A,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_OMICRON, 0x038C,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_UPSILON, 0x038E,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_OMEGA, 0x038F,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_alpha, 0x03AC,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_epsilon, 0x03AD,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_eta, 0x03AE,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_iota, 0x03AF,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_omicron, 0x03CC,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_upsilon, 0x03CD,
--IBUS_KEY_apostrophe, IBUS_KEY_Greek_omega, 0x03CE,
--IBUS_KEY_apostrophe, 0x1F00, 0x1F04,
--IBUS_KEY_apostrophe, 0x1F01, 0x1F05,
--IBUS_KEY_apostrophe, 0x1F08, 0x1F0C,
--IBUS_KEY_apostrophe, 0x1F09, 0x1F0D,
--IBUS_KEY_apostrophe, 0x1F10, 0x1F14,
--IBUS_KEY_apostrophe, 0x1F11, 0x1F15,
--IBUS_KEY_apostrophe, 0x1F18, 0x1F1C,
--IBUS_KEY_apostrophe, 0x1F19, 0x1F1D,
--IBUS_KEY_apostrophe, 0x1F20, 0x1F24,
--IBUS_KEY_apostrophe, 0x1F21, 0x1F25,
--IBUS_KEY_apostrophe, 0x1F28, 0x1F2C,
--IBUS_KEY_apostrophe, 0x1F29, 0x1F2D,
--IBUS_KEY_apostrophe, 0x1F30, 0x1F34,
--IBUS_KEY_apostrophe, 0x1F31, 0x1F35,
--IBUS_KEY_apostrophe, 0x1F38, 0x1F3C,
--IBUS_KEY_apostrophe, 0x1F39, 0x1F3D,
--IBUS_KEY_apostrophe, 0x1F40, 0x1F44,
--IBUS_KEY_apostrophe, 0x1F41, 0x1F45,
--IBUS_KEY_apostrophe, 0x1F48, 0x1F4C,
--IBUS_KEY_apostrophe, 0x1F49, 0x1F4D,
--IBUS_KEY_apostrophe, 0x1F50, 0x1F54,
--IBUS_KEY_apostrophe, 0x1F51, 0x1F55,
--IBUS_KEY_apostrophe, 0x1F59, 0x1F5D,
--IBUS_KEY_apostrophe, 0x1F60, 0x1F64,
--IBUS_KEY_apostrophe, 0x1F61, 0x1F65,
--IBUS_KEY_apostrophe, 0x1F68, 0x1F6C,
--IBUS_KEY_apostrophe, 0x1F69, 0x1F6D,
--IBUS_KEY_apostrophe, 0x2395, 0x235E,
--IBUS_KEY_parenleft, IBUS_KEY_space, 0x02D8,
--IBUS_KEY_parenleft, IBUS_KEY_parenleft, 0x005B,
--IBUS_KEY_parenleft, IBUS_KEY_minus, 0x007B,
--IBUS_KEY_parenleft, IBUS_KEY_A, 0x0102,
--IBUS_KEY_parenleft, IBUS_KEY_G, 0x011E,
--IBUS_KEY_parenleft, IBUS_KEY_a, 0x0103,
--IBUS_KEY_parenleft, IBUS_KEY_c, 0x00A9,
--IBUS_KEY_parenleft, IBUS_KEY_g, 0x011F,
--IBUS_KEY_parenleft, IBUS_KEY_r, 0x00AE,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F09,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_EPSILON, 0x1F19,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F29,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_IOTA, 0x1F39,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_OMICRON, 0x1F49,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_RHO, 0x1FEC,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_UPSILON, 0x1F59,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1F69,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F01,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_epsilon, 0x1F11,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F21,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_iota, 0x1F31,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_omicron, 0x1F41,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_rho, 0x1FE5,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_upsilon, 0x1F51,
--IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1F61,
--IBUS_KEY_parenright, IBUS_KEY_parenright, 0x005D,
--IBUS_KEY_parenright, IBUS_KEY_minus, 0x007D,
--IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F08,
--IBUS_KEY_parenright, IBUS_KEY_Greek_EPSILON, 0x1F18,
--IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F28,
--IBUS_KEY_parenright, IBUS_KEY_Greek_IOTA, 0x1F38,
--IBUS_KEY_parenright, IBUS_KEY_Greek_OMICRON, 0x1F48,
--IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1F68,
--IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F00,
--IBUS_KEY_parenright, IBUS_KEY_Greek_epsilon, 0x1F10,
--IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F20,
--IBUS_KEY_parenright, IBUS_KEY_Greek_iota, 0x1F30,
--IBUS_KEY_parenright, IBUS_KEY_Greek_omicron, 0x1F40,
--IBUS_KEY_parenright, IBUS_KEY_Greek_rho, 0x1FE4,
--IBUS_KEY_parenright, IBUS_KEY_Greek_upsilon, 0x1F50,
--IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1F60,
--IBUS_KEY_asterisk, IBUS_KEY_0, 0x00B0,
--IBUS_KEY_asterisk, IBUS_KEY_A, 0x00C5,
--IBUS_KEY_asterisk, IBUS_KEY_U, 0x016E,
--IBUS_KEY_asterisk, IBUS_KEY_a, 0x00E5,
--IBUS_KEY_asterisk, IBUS_KEY_u, 0x016F,
--IBUS_KEY_asterisk, IBUS_KEY_diaeresis, 0x2363,
--IBUS_KEY_asterisk, IBUS_KEY_emopencircle, 0x235F,
--IBUS_KEY_plus, IBUS_KEY_plus, 0x0023,
--IBUS_KEY_plus, IBUS_KEY_minus, 0x00B1,
--IBUS_KEY_plus, IBUS_KEY_O, 0x01A0,
--IBUS_KEY_plus, IBUS_KEY_U, 0x01AF,
--IBUS_KEY_plus, IBUS_KEY_o, 0x01A1,
--IBUS_KEY_plus, IBUS_KEY_u, 0x01B0,
--IBUS_KEY_comma, IBUS_KEY_space, 0x00B8,
--IBUS_KEY_comma, IBUS_KEY_quotedbl, 0x201E,
--IBUS_KEY_comma, IBUS_KEY_apostrophe, 0x201A,
--IBUS_KEY_comma, IBUS_KEY_comma, 0x00B8,
--IBUS_KEY_comma, IBUS_KEY_minus, 0x00AC,
--IBUS_KEY_comma, IBUS_KEY_A, 0x0104,
--IBUS_KEY_comma, IBUS_KEY_C, 0x00C7,
--IBUS_KEY_comma, IBUS_KEY_D, 0x1E10,
--IBUS_KEY_comma, IBUS_KEY_E, 0x0118,
--IBUS_KEY_comma, IBUS_KEY_G, 0x0122,
--IBUS_KEY_comma, IBUS_KEY_H, 0x1E28,
--IBUS_KEY_comma, IBUS_KEY_I, 0x012E,
--IBUS_KEY_comma, IBUS_KEY_K, 0x0136,
--IBUS_KEY_comma, IBUS_KEY_L, 0x013B,
--IBUS_KEY_comma, IBUS_KEY_N, 0x0145,
--IBUS_KEY_comma, IBUS_KEY_O, 0x01EA,
--IBUS_KEY_comma, IBUS_KEY_R, 0x0156,
--IBUS_KEY_comma, IBUS_KEY_S, 0x015E,
--IBUS_KEY_comma, IBUS_KEY_T, 0x0162,
--IBUS_KEY_comma, IBUS_KEY_U, 0x0172,
--IBUS_KEY_comma, IBUS_KEY_a, 0x0105,
--IBUS_KEY_comma, IBUS_KEY_c, 0x00E7,
--IBUS_KEY_comma, IBUS_KEY_d, 0x1E11,
--IBUS_KEY_comma, IBUS_KEY_e, 0x0119,
--IBUS_KEY_comma, IBUS_KEY_g, 0x0123,
--IBUS_KEY_comma, IBUS_KEY_h, 0x1E29,
--IBUS_KEY_comma, IBUS_KEY_i, 0x012F,
--IBUS_KEY_comma, IBUS_KEY_k, 0x0137,
--IBUS_KEY_comma, IBUS_KEY_l, 0x013C,
--IBUS_KEY_comma, IBUS_KEY_n, 0x0146,
--IBUS_KEY_comma, IBUS_KEY_o, 0x01EB,
--IBUS_KEY_comma, IBUS_KEY_r, 0x0157,
--IBUS_KEY_comma, IBUS_KEY_s, 0x015F,
--IBUS_KEY_comma, IBUS_KEY_t, 0x0163,
--IBUS_KEY_comma, IBUS_KEY_u, 0x0173,
--IBUS_KEY_minus, IBUS_KEY_space, 0x007E,
--IBUS_KEY_minus, IBUS_KEY_parenleft, 0x007B,
--IBUS_KEY_minus, IBUS_KEY_parenright, 0x007D,
--IBUS_KEY_minus, IBUS_KEY_plus, 0x00B1,
--IBUS_KEY_minus, IBUS_KEY_comma, 0x00AC,
--IBUS_KEY_minus, IBUS_KEY_slash, 0x233F,
--IBUS_KEY_minus, IBUS_KEY_colon, 0x00F7,
--IBUS_KEY_minus, IBUS_KEY_greater, 0x2192,
--IBUS_KEY_minus, IBUS_KEY_A, 0x0100,
--IBUS_KEY_minus, IBUS_KEY_D, 0x0110,
--IBUS_KEY_minus, IBUS_KEY_E, 0x0112,
--IBUS_KEY_minus, IBUS_KEY_I, 0x012A,
--IBUS_KEY_minus, IBUS_KEY_L, 0x00A3,
--IBUS_KEY_minus, IBUS_KEY_N, 0x00D1,
--IBUS_KEY_minus, IBUS_KEY_O, 0x014C,
--IBUS_KEY_minus, IBUS_KEY_U, 0x016A,
--IBUS_KEY_minus, IBUS_KEY_Y, 0x00A5,
--IBUS_KEY_minus, IBUS_KEY_backslash, 0x2340,
--IBUS_KEY_minus, IBUS_KEY_asciicircum, 0x00AF,
--IBUS_KEY_minus, IBUS_KEY_a, 0x0101,
--IBUS_KEY_minus, IBUS_KEY_d, 0x0111,
--IBUS_KEY_minus, IBUS_KEY_e, 0x0113,
--IBUS_KEY_minus, IBUS_KEY_i, 0x012B,
--IBUS_KEY_minus, IBUS_KEY_l, 0x00A3,
--IBUS_KEY_minus, IBUS_KEY_n, 0x00F1,
--IBUS_KEY_minus, IBUS_KEY_o, 0x014D,
--IBUS_KEY_minus, IBUS_KEY_u, 0x016B,
--IBUS_KEY_minus, IBUS_KEY_y, 0x00A5,
--IBUS_KEY_minus, 0x2191, 0x234F,
--IBUS_KEY_minus, 0x2193, 0x2356,
--IBUS_KEY_minus, IBUS_KEY_emopencircle, 0x2296,
--IBUS_KEY_period, IBUS_KEY_minus, 0x00B7,
--IBUS_KEY_period, IBUS_KEY_period, 0x2026,
--IBUS_KEY_period, IBUS_KEY_colon, 0x2235,
--IBUS_KEY_period, IBUS_KEY_less, 0x2039,
--IBUS_KEY_period, IBUS_KEY_equal, 0x2022,
--IBUS_KEY_period, IBUS_KEY_greater, 0x203A,
--IBUS_KEY_period, IBUS_KEY_A, 0x0226,
--IBUS_KEY_period, IBUS_KEY_B, 0x1E02,
--IBUS_KEY_period, IBUS_KEY_C, 0x010A,
--IBUS_KEY_period, IBUS_KEY_D, 0x1E0A,
--IBUS_KEY_period, IBUS_KEY_E, 0x0116,
--IBUS_KEY_period, IBUS_KEY_F, 0x1E1E,
--IBUS_KEY_period, IBUS_KEY_G, 0x0120,
--IBUS_KEY_period, IBUS_KEY_H, 0x1E22,
--IBUS_KEY_period, IBUS_KEY_I, 0x0130,
--IBUS_KEY_period, IBUS_KEY_M, 0x1E40,
--IBUS_KEY_period, IBUS_KEY_N, 0x1E44,
--IBUS_KEY_period, IBUS_KEY_O, 0x022E,
--IBUS_KEY_period, IBUS_KEY_P, 0x1E56,
--IBUS_KEY_period, IBUS_KEY_R, 0x1E58,
--IBUS_KEY_period, IBUS_KEY_S, 0x1E60,
--IBUS_KEY_period, IBUS_KEY_T, 0x1E6A,
--IBUS_KEY_period, IBUS_KEY_W, 0x1E86,
--IBUS_KEY_period, IBUS_KEY_X, 0x1E8A,
--IBUS_KEY_period, IBUS_KEY_Y, 0x1E8E,
--IBUS_KEY_period, IBUS_KEY_Z, 0x017B,
--IBUS_KEY_period, IBUS_KEY_asciicircum, 0x00B7,
--IBUS_KEY_period, IBUS_KEY_a, 0x0227,
--IBUS_KEY_period, IBUS_KEY_b, 0x1E03,
--IBUS_KEY_period, IBUS_KEY_c, 0x010B,
--IBUS_KEY_period, IBUS_KEY_d, 0x1E0B,
--IBUS_KEY_period, IBUS_KEY_e, 0x0117,
--IBUS_KEY_period, IBUS_KEY_f, 0x1E1F,
--IBUS_KEY_period, IBUS_KEY_g, 0x0121,
--IBUS_KEY_period, IBUS_KEY_h, 0x1E23,
--IBUS_KEY_period, IBUS_KEY_i, 0x0131,
--IBUS_KEY_period, IBUS_KEY_m, 0x1E41,
--IBUS_KEY_period, IBUS_KEY_n, 0x1E45,
--IBUS_KEY_period, IBUS_KEY_o, 0x022F,
--IBUS_KEY_period, IBUS_KEY_p, 0x1E57,
--IBUS_KEY_period, IBUS_KEY_r, 0x1E59,
--IBUS_KEY_period, IBUS_KEY_s, 0x1E61,
--IBUS_KEY_period, IBUS_KEY_t, 0x1E6B,
--IBUS_KEY_period, IBUS_KEY_w, 0x1E87,
--IBUS_KEY_period, IBUS_KEY_x, 0x1E8B,
--IBUS_KEY_period, IBUS_KEY_y, 0x1E8F,
--IBUS_KEY_period, IBUS_KEY_z, 0x017C,
--IBUS_KEY_period, 0x017F, 0x1E9B,
--IBUS_KEY_period, IBUS_KEY_Sacute, 0x1E64,
--IBUS_KEY_period, IBUS_KEY_Scaron, 0x1E66,
--IBUS_KEY_period, IBUS_KEY_sacute, 0x1E65,
--IBUS_KEY_period, IBUS_KEY_scaron, 0x1E67,
--IBUS_KEY_period, 0x1E62, 0x1E68,
--IBUS_KEY_period, 0x1E63, 0x1E69,
--IBUS_KEY_period, IBUS_KEY_emopencircle, 0x2299,
--IBUS_KEY_slash, IBUS_KEY_minus, 0x233F,
--IBUS_KEY_slash, IBUS_KEY_slash, 0x005C,
--IBUS_KEY_slash, IBUS_KEY_less, 0x005C,
--IBUS_KEY_slash, IBUS_KEY_equal, 0x2260,
--IBUS_KEY_slash, IBUS_KEY_C, 0x20A1,
--IBUS_KEY_slash, IBUS_KEY_D, 0x0110,
--IBUS_KEY_slash, IBUS_KEY_G, 0x01E4,
--IBUS_KEY_slash, IBUS_KEY_H, 0x0126,
--IBUS_KEY_slash, IBUS_KEY_I, 0x0197,
--IBUS_KEY_slash, IBUS_KEY_L, 0x0141,
--IBUS_KEY_slash, IBUS_KEY_O, 0x00D8,
--IBUS_KEY_slash, IBUS_KEY_T, 0x0166,
--IBUS_KEY_slash, IBUS_KEY_U, 0x00B5,
--IBUS_KEY_slash, IBUS_KEY_Z, 0x01B5,
--IBUS_KEY_slash, IBUS_KEY_asciicircum, 0x007C,
--IBUS_KEY_slash, IBUS_KEY_b, 0x0180,
--IBUS_KEY_slash, IBUS_KEY_c, 0x00A2,
--IBUS_KEY_slash, IBUS_KEY_d, 0x0111,
--IBUS_KEY_slash, IBUS_KEY_g, 0x01E5,
--IBUS_KEY_slash, IBUS_KEY_h, 0x0127,
--IBUS_KEY_slash, IBUS_KEY_i, 0x0268,
--IBUS_KEY_slash, IBUS_KEY_l, 0x0142,
--IBUS_KEY_slash, IBUS_KEY_m, 0x20A5,
--IBUS_KEY_slash, IBUS_KEY_o, 0x00F8,
--IBUS_KEY_slash, IBUS_KEY_t, 0x0167,
--IBUS_KEY_slash, IBUS_KEY_u, 0x00B5,
--IBUS_KEY_slash, IBUS_KEY_v, 0x221A,
--IBUS_KEY_slash, IBUS_KEY_z, 0x01B6,
--IBUS_KEY_slash, 0x0294, 0x02A1,
--IBUS_KEY_slash, 0x04AE, 0x04B0,
--IBUS_KEY_slash, 0x04AF, 0x04B1,
--IBUS_KEY_slash, IBUS_KEY_Cyrillic_ghe, 0x0493,
--IBUS_KEY_slash, IBUS_KEY_Cyrillic_ka, 0x049F,
--IBUS_KEY_slash, IBUS_KEY_Cyrillic_GHE, 0x0492,
--IBUS_KEY_slash, IBUS_KEY_Cyrillic_KA, 0x049E,
--IBUS_KEY_slash, IBUS_KEY_leftarrow, 0x219A,
--IBUS_KEY_slash, IBUS_KEY_rightarrow, 0x219B,
--IBUS_KEY_slash, 0x2194, 0x21AE,
--IBUS_KEY_slash, 0x2395, 0x2341,
--IBUS_KEY_0, IBUS_KEY_asterisk, 0x00B0,
--IBUS_KEY_0, IBUS_KEY_3, 0x2189,
--IBUS_KEY_0, IBUS_KEY_C, 0x00A9,
--IBUS_KEY_0, IBUS_KEY_S, 0x00A7,
--IBUS_KEY_0, IBUS_KEY_X, 0x00A4,
--IBUS_KEY_0, IBUS_KEY_asciicircum, 0x00B0,
--IBUS_KEY_0, IBUS_KEY_c, 0x00A9,
--IBUS_KEY_0, IBUS_KEY_s, 0x00A7,
--IBUS_KEY_0, IBUS_KEY_x, 0x00A4,
--IBUS_KEY_0, IBUS_KEY_asciitilde, 0x236C,
--IBUS_KEY_1, IBUS_KEY_2, 0x00BD,
--IBUS_KEY_1, IBUS_KEY_3, 0x2153,
--IBUS_KEY_1, IBUS_KEY_4, 0x00BC,
--IBUS_KEY_1, IBUS_KEY_5, 0x2155,
--IBUS_KEY_1, IBUS_KEY_6, 0x2159,
--IBUS_KEY_1, IBUS_KEY_7, 0x2150,
--IBUS_KEY_1, IBUS_KEY_8, 0x215B,
--IBUS_KEY_1, IBUS_KEY_9, 0x2151,
--IBUS_KEY_1, IBUS_KEY_S, 0x00B9,
--IBUS_KEY_1, IBUS_KEY_asciicircum, 0x00B9,
--IBUS_KEY_1, IBUS_KEY_s, 0x00B9,
--IBUS_KEY_2, IBUS_KEY_3, 0x2154,
--IBUS_KEY_2, IBUS_KEY_5, 0x2156,
--IBUS_KEY_2, IBUS_KEY_S, 0x00B2,
--IBUS_KEY_2, IBUS_KEY_asciicircum, 0x00B2,
--IBUS_KEY_2, IBUS_KEY_s, 0x00B2,
--IBUS_KEY_3, IBUS_KEY_4, 0x00BE,
--IBUS_KEY_3, IBUS_KEY_5, 0x2157,
--IBUS_KEY_3, IBUS_KEY_8, 0x215C,
--IBUS_KEY_3, IBUS_KEY_S, 0x00B3,
--IBUS_KEY_3, IBUS_KEY_asciicircum, 0x00B3,
--IBUS_KEY_3, IBUS_KEY_s, 0x00B3,
--IBUS_KEY_4, IBUS_KEY_5, 0x2158,
--IBUS_KEY_5, IBUS_KEY_6, 0x215A,
--IBUS_KEY_5, IBUS_KEY_8, 0x215D,
--IBUS_KEY_7, IBUS_KEY_8, 0x215E,
--IBUS_KEY_8, IBUS_KEY_8, 0x221E,
--IBUS_KEY_colon, IBUS_KEY_parenleft, 0x2639,
--IBUS_KEY_colon, IBUS_KEY_parenright, 0x263A,
--IBUS_KEY_colon, IBUS_KEY_minus, 0x00F7,
--IBUS_KEY_colon, IBUS_KEY_period, 0x2234,
--IBUS_KEY_colon, 0x2395, 0x2360,
--IBUS_KEY_semicolon, IBUS_KEY_A, 0x0104,
--IBUS_KEY_semicolon, IBUS_KEY_E, 0x0118,
--IBUS_KEY_semicolon, IBUS_KEY_I, 0x012E,
--IBUS_KEY_semicolon, IBUS_KEY_O, 0x01EA,
--IBUS_KEY_semicolon, IBUS_KEY_S, 0x0218,
--IBUS_KEY_semicolon, IBUS_KEY_T, 0x021A,
--IBUS_KEY_semicolon, IBUS_KEY_U, 0x0172,
--IBUS_KEY_semicolon, IBUS_KEY_underscore, 0x236E,
--IBUS_KEY_semicolon, IBUS_KEY_a, 0x0105,
--IBUS_KEY_semicolon, IBUS_KEY_e, 0x0119,
--IBUS_KEY_semicolon, IBUS_KEY_i, 0x012F,
--IBUS_KEY_semicolon, IBUS_KEY_o, 0x01EB,
--IBUS_KEY_semicolon, IBUS_KEY_s, 0x0219,
--IBUS_KEY_semicolon, IBUS_KEY_t, 0x021B,
--IBUS_KEY_semicolon, IBUS_KEY_u, 0x0173,
--IBUS_KEY_less, IBUS_KEY_space, 0x02C7,
--IBUS_KEY_less, IBUS_KEY_quotedbl, 0x201C,
--IBUS_KEY_less, IBUS_KEY_apostrophe, 0x2018,
--IBUS_KEY_less, IBUS_KEY_minus, 0x2190,
--IBUS_KEY_less, IBUS_KEY_slash, 0x005C,
--IBUS_KEY_less, IBUS_KEY_3, 0x2665,
--IBUS_KEY_less, IBUS_KEY_less, 0x00AB,
--IBUS_KEY_less, IBUS_KEY_equal, 0x2264,
--IBUS_KEY_less, IBUS_KEY_greater, 0x22C4,
--IBUS_KEY_less, IBUS_KEY_C, 0x010C,
--IBUS_KEY_less, IBUS_KEY_D, 0x010E,
--IBUS_KEY_less, IBUS_KEY_E, 0x011A,
--IBUS_KEY_less, IBUS_KEY_L, 0x013D,
--IBUS_KEY_less, IBUS_KEY_N, 0x0147,
--IBUS_KEY_less, IBUS_KEY_R, 0x0158,
--IBUS_KEY_less, IBUS_KEY_S, 0x0160,
--IBUS_KEY_less, IBUS_KEY_T, 0x0164,
--IBUS_KEY_less, IBUS_KEY_Z, 0x017D,
--IBUS_KEY_less, IBUS_KEY_underscore, 0x2264,
--IBUS_KEY_less, IBUS_KEY_c, 0x010D,
--IBUS_KEY_less, IBUS_KEY_d, 0x010F,
--IBUS_KEY_less, IBUS_KEY_e, 0x011B,
--IBUS_KEY_less, IBUS_KEY_l, 0x013E,
--IBUS_KEY_less, IBUS_KEY_n, 0x0148,
--IBUS_KEY_less, IBUS_KEY_r, 0x0159,
--IBUS_KEY_less, IBUS_KEY_s, 0x0161,
--IBUS_KEY_less, IBUS_KEY_t, 0x0165,
--IBUS_KEY_less, IBUS_KEY_z, 0x017E,
--IBUS_KEY_less, 0x0338, 0x226E,
--IBUS_KEY_less, 0x2395, 0x2343,
--IBUS_KEY_equal, IBUS_KEY_slash, 0x2260,
--IBUS_KEY_equal, IBUS_KEY_greater, 0x21D2,
--IBUS_KEY_equal, IBUS_KEY_C, 0x20AC,
--IBUS_KEY_equal, IBUS_KEY_E, 0x20AC,
--IBUS_KEY_equal, IBUS_KEY_L, 0x20A4,
--IBUS_KEY_equal, IBUS_KEY_N, 0x20A6,
--IBUS_KEY_equal, IBUS_KEY_O, 0x0150,
--IBUS_KEY_equal, IBUS_KEY_R, 0x20B9,
--IBUS_KEY_equal, IBUS_KEY_U, 0x0170,
--IBUS_KEY_equal, IBUS_KEY_W, 0x20A9,
--IBUS_KEY_equal, IBUS_KEY_Y, 0x00A5,
--IBUS_KEY_equal, IBUS_KEY_underscore, 0x2261,
--IBUS_KEY_equal, IBUS_KEY_c, 0x20AC,
--IBUS_KEY_equal, IBUS_KEY_d, 0x20AB,
--IBUS_KEY_equal, IBUS_KEY_e, 0x20AC,
--IBUS_KEY_equal, IBUS_KEY_l, 0x00A3,
--IBUS_KEY_equal, IBUS_KEY_o, 0x0151,
--IBUS_KEY_equal, IBUS_KEY_r, 0x20B9,
--IBUS_KEY_equal, IBUS_KEY_u, 0x0171,
--IBUS_KEY_equal, IBUS_KEY_y, 0x00A5,
--IBUS_KEY_equal, 0x0338, 0x2260,
--IBUS_KEY_equal, IBUS_KEY_Cyrillic_u, 0x04F3,
--IBUS_KEY_equal, IBUS_KEY_Cyrillic_IE, 0x20AC,
--IBUS_KEY_equal, IBUS_KEY_Cyrillic_ES, 0x20AC,
--IBUS_KEY_equal, IBUS_KEY_Cyrillic_U, 0x04F2,
--IBUS_KEY_equal, 0x2395, 0x2338,
--IBUS_KEY_greater, IBUS_KEY_space, 0x005E,
--IBUS_KEY_greater, IBUS_KEY_quotedbl, 0x201D,
--IBUS_KEY_greater, IBUS_KEY_apostrophe, 0x2019,
--IBUS_KEY_greater, IBUS_KEY_less, 0x22C4,
--IBUS_KEY_greater, IBUS_KEY_equal, 0x2265,
--IBUS_KEY_greater, IBUS_KEY_greater, 0x00BB,
--IBUS_KEY_greater, IBUS_KEY_A, 0x00C2,
--IBUS_KEY_greater, IBUS_KEY_E, 0x00CA,
--IBUS_KEY_greater, IBUS_KEY_I, 0x00CE,
--IBUS_KEY_greater, IBUS_KEY_O, 0x00D4,
--IBUS_KEY_greater, IBUS_KEY_U, 0x00DB,
--IBUS_KEY_greater, IBUS_KEY_underscore, 0x2265,
--IBUS_KEY_greater, IBUS_KEY_a, 0x00E2,
--IBUS_KEY_greater, IBUS_KEY_e, 0x00EA,
--IBUS_KEY_greater, IBUS_KEY_i, 0x00EE,
--IBUS_KEY_greater, IBUS_KEY_o, 0x00F4,
--IBUS_KEY_greater, IBUS_KEY_u, 0x00FB,
--IBUS_KEY_greater, IBUS_KEY_diaeresis, 0x2369,
--IBUS_KEY_greater, 0x0338, 0x226F,
--IBUS_KEY_greater, 0x2395, 0x2344,
--IBUS_KEY_question, IBUS_KEY_exclam, 0x2E18,
--IBUS_KEY_question, IBUS_KEY_question, 0x00BF,
--IBUS_KEY_question, IBUS_KEY_A, 0x1EA2,
--IBUS_KEY_question, IBUS_KEY_E, 0x1EBA,
--IBUS_KEY_question, IBUS_KEY_I, 0x1EC8,
--IBUS_KEY_question, IBUS_KEY_O, 0x1ECE,
--IBUS_KEY_question, IBUS_KEY_U, 0x1EE6,
--IBUS_KEY_question, IBUS_KEY_Y, 0x1EF6,
--IBUS_KEY_question, IBUS_KEY_a, 0x1EA3,
--IBUS_KEY_question, IBUS_KEY_e, 0x1EBB,
--IBUS_KEY_question, IBUS_KEY_i, 0x1EC9,
--IBUS_KEY_question, IBUS_KEY_o, 0x1ECF,
--IBUS_KEY_question, IBUS_KEY_u, 0x1EE7,
--IBUS_KEY_question, IBUS_KEY_y, 0x1EF7,
--IBUS_KEY_question, IBUS_KEY_Acircumflex, 0x1EA8,
--IBUS_KEY_question, IBUS_KEY_Ecircumflex, 0x1EC2,
--IBUS_KEY_question, IBUS_KEY_Ocircumflex, 0x1ED4,
--IBUS_KEY_question, IBUS_KEY_acircumflex, 0x1EA9,
--IBUS_KEY_question, IBUS_KEY_ecircumflex, 0x1EC3,
--IBUS_KEY_question, IBUS_KEY_ocircumflex, 0x1ED5,
--IBUS_KEY_question, IBUS_KEY_Abreve, 0x1EB2,
--IBUS_KEY_question, IBUS_KEY_abreve, 0x1EB3,
--IBUS_KEY_question, 0x2395, 0x2370,
--IBUS_KEY_A, IBUS_KEY_quotedbl, 0x00C4,
--IBUS_KEY_A, IBUS_KEY_apostrophe, 0x00C1,
--IBUS_KEY_A, IBUS_KEY_parenleft, 0x0102,
--IBUS_KEY_A, IBUS_KEY_asterisk, 0x00C5,
--IBUS_KEY_A, IBUS_KEY_comma, 0x0104,
--IBUS_KEY_A, IBUS_KEY_minus, 0x0100,
--IBUS_KEY_A, IBUS_KEY_semicolon, 0x0104,
--IBUS_KEY_A, IBUS_KEY_greater, 0x00C2,
--IBUS_KEY_A, IBUS_KEY_A, 0x00C5,
--IBUS_KEY_A, IBUS_KEY_E, 0x00C6,
--IBUS_KEY_A, IBUS_KEY_T, 0x0040,
--IBUS_KEY_A, IBUS_KEY_asciicircum, 0x00C2,
--IBUS_KEY_A, IBUS_KEY_underscore, 0x0100,
--IBUS_KEY_A, IBUS_KEY_grave, 0x00C0,
--IBUS_KEY_A, IBUS_KEY_asciitilde, 0x00C3,
--IBUS_KEY_A, IBUS_KEY_diaeresis, 0x00C4,
--IBUS_KEY_A, IBUS_KEY_acute, 0x00C1,
--IBUS_KEY_B, IBUS_KEY_period, 0x1E02,
--IBUS_KEY_C, IBUS_KEY_apostrophe, 0x0106,
--IBUS_KEY_C, IBUS_KEY_comma, 0x00C7,
--IBUS_KEY_C, IBUS_KEY_period, 0x010A,
--IBUS_KEY_C, IBUS_KEY_slash, 0x20A1,
--IBUS_KEY_C, IBUS_KEY_0, 0x00A9,
--IBUS_KEY_C, IBUS_KEY_less, 0x010C,
--IBUS_KEY_C, IBUS_KEY_equal, 0x20AC,
--IBUS_KEY_C, IBUS_KEY_E, 0x20A0,
--IBUS_KEY_C, IBUS_KEY_O, 0x00A9,
--IBUS_KEY_C, IBUS_KEY_o, 0x00A9,
--IBUS_KEY_C, IBUS_KEY_r, 0x20A2,
--IBUS_KEY_C, IBUS_KEY_bar, 0x00A2,
--IBUS_KEY_D, IBUS_KEY_comma, 0x1E10,
--IBUS_KEY_D, IBUS_KEY_minus, 0x0110,
--IBUS_KEY_D, IBUS_KEY_period, 0x1E0A,
--IBUS_KEY_D, IBUS_KEY_less, 0x010E,
--IBUS_KEY_D, IBUS_KEY_H, 0x00D0,
--IBUS_KEY_E, IBUS_KEY_quotedbl, 0x00CB,
--IBUS_KEY_E, IBUS_KEY_apostrophe, 0x00C9,
--IBUS_KEY_E, IBUS_KEY_comma, 0x0118,
--IBUS_KEY_E, IBUS_KEY_minus, 0x0112,
--IBUS_KEY_E, IBUS_KEY_period, 0x0116,
--IBUS_KEY_E, IBUS_KEY_semicolon, 0x0118,
--IBUS_KEY_E, IBUS_KEY_less, 0x011A,
--IBUS_KEY_E, IBUS_KEY_equal, 0x20AC,
--IBUS_KEY_E, IBUS_KEY_greater, 0x00CA,
--IBUS_KEY_E, IBUS_KEY_asciicircum, 0x00CA,
--IBUS_KEY_E, IBUS_KEY_underscore, 0x0112,
--IBUS_KEY_E, IBUS_KEY_grave, 0x00C8,
--IBUS_KEY_E, IBUS_KEY_diaeresis, 0x00CB,
--IBUS_KEY_E, IBUS_KEY_acute, 0x00C9,
--IBUS_KEY_F, IBUS_KEY_period, 0x1E1E,
--IBUS_KEY_F, IBUS_KEY_i, 0xFB03,
--IBUS_KEY_F, IBUS_KEY_l, 0xFB04,
--IBUS_KEY_F, IBUS_KEY_r, 0x20A3,
--IBUS_KEY_G, IBUS_KEY_parenleft, 0x011E,
--IBUS_KEY_G, IBUS_KEY_comma, 0x0122,
--IBUS_KEY_G, IBUS_KEY_period, 0x0120,
--IBUS_KEY_G, IBUS_KEY_U, 0x011E,
--IBUS_KEY_G, IBUS_KEY_breve, 0x011E,
--IBUS_KEY_H, IBUS_KEY_comma, 0x1E28,
--IBUS_KEY_I, IBUS_KEY_quotedbl, 0x00CF,
--IBUS_KEY_I, IBUS_KEY_apostrophe, 0x00CD,
--IBUS_KEY_I, IBUS_KEY_comma, 0x012E,
--IBUS_KEY_I, IBUS_KEY_minus, 0x012A,
--IBUS_KEY_I, IBUS_KEY_period, 0x0130,
--IBUS_KEY_I, IBUS_KEY_semicolon, 0x012E,
--IBUS_KEY_I, IBUS_KEY_greater, 0x00CE,
--IBUS_KEY_I, IBUS_KEY_J, 0x0132,
--IBUS_KEY_I, IBUS_KEY_asciicircum, 0x00CE,
--IBUS_KEY_I, IBUS_KEY_underscore, 0x012A,
--IBUS_KEY_I, IBUS_KEY_grave, 0x00CC,
--IBUS_KEY_I, IBUS_KEY_j, 0x0132,
--IBUS_KEY_I, IBUS_KEY_asciitilde, 0x0128,
--IBUS_KEY_I, IBUS_KEY_diaeresis, 0x00CF,
--IBUS_KEY_I, IBUS_KEY_acute, 0x00CD,
--IBUS_KEY_K, IBUS_KEY_comma, 0x0136,
--IBUS_KEY_L, IBUS_KEY_apostrophe, 0x0139,
--IBUS_KEY_L, IBUS_KEY_comma, 0x013B,
--IBUS_KEY_L, IBUS_KEY_minus, 0x00A3,
--IBUS_KEY_L, IBUS_KEY_slash, 0x0141,
--IBUS_KEY_L, IBUS_KEY_less, 0x013D,
--IBUS_KEY_L, IBUS_KEY_equal, 0x20A4,
--IBUS_KEY_L, IBUS_KEY_V, 0x007C,
--IBUS_KEY_M, IBUS_KEY_period, 0x1E40,
--IBUS_KEY_N, IBUS_KEY_apostrophe, 0x0143,
--IBUS_KEY_N, IBUS_KEY_comma, 0x0145,
--IBUS_KEY_N, IBUS_KEY_minus, 0x00D1,
--IBUS_KEY_N, IBUS_KEY_less, 0x0147,
--IBUS_KEY_N, IBUS_KEY_equal, 0x20A6,
--IBUS_KEY_N, IBUS_KEY_G, 0x014A,
--IBUS_KEY_N, IBUS_KEY_O, 0x2116,
--IBUS_KEY_N, IBUS_KEY_o, 0x2116,
--IBUS_KEY_N, IBUS_KEY_asciitilde, 0x00D1,
--IBUS_KEY_O, IBUS_KEY_quotedbl, 0x00D6,
--IBUS_KEY_O, IBUS_KEY_apostrophe, 0x00D3,
--IBUS_KEY_O, IBUS_KEY_comma, 0x01EA,
--IBUS_KEY_O, IBUS_KEY_minus, 0x014C,
--IBUS_KEY_O, IBUS_KEY_slash, 0x00D8,
--IBUS_KEY_O, IBUS_KEY_semicolon, 0x01EA,
--IBUS_KEY_O, IBUS_KEY_greater, 0x00D4,
--IBUS_KEY_O, IBUS_KEY_A, 0x24B6,
--IBUS_KEY_O, IBUS_KEY_C, 0x00A9,
--IBUS_KEY_O, IBUS_KEY_E, 0x0152,
--IBUS_KEY_O, IBUS_KEY_R, 0x00AE,
--IBUS_KEY_O, IBUS_KEY_S, 0x00A7,
--IBUS_KEY_O, IBUS_KEY_X, 0x00A4,
--IBUS_KEY_O, IBUS_KEY_asciicircum, 0x00D4,
--IBUS_KEY_O, IBUS_KEY_underscore, 0x014C,
--IBUS_KEY_O, IBUS_KEY_grave, 0x00D2,
--IBUS_KEY_O, IBUS_KEY_c, 0x00A9,
--IBUS_KEY_O, IBUS_KEY_r, 0x00AE,
--IBUS_KEY_O, IBUS_KEY_x, 0x00A4,
--IBUS_KEY_O, IBUS_KEY_asciitilde, 0x00D5,
--IBUS_KEY_O, IBUS_KEY_diaeresis, 0x00D6,
--IBUS_KEY_O, IBUS_KEY_acute, 0x00D3,
--IBUS_KEY_P, IBUS_KEY_exclam, 0x00B6,
--IBUS_KEY_P, IBUS_KEY_period, 0x1E56,
--IBUS_KEY_P, IBUS_KEY_P, 0x00B6,
--IBUS_KEY_P, IBUS_KEY_t, 0x20A7,
--IBUS_KEY_R, IBUS_KEY_apostrophe, 0x0154,
--IBUS_KEY_R, IBUS_KEY_comma, 0x0156,
--IBUS_KEY_R, IBUS_KEY_less, 0x0158,
--IBUS_KEY_R, IBUS_KEY_equal, 0x20B9,
--IBUS_KEY_R, IBUS_KEY_O, 0x00AE,
--IBUS_KEY_R, IBUS_KEY_o, 0x00AE,
--IBUS_KEY_R, IBUS_KEY_s, 0x20A8,
--IBUS_KEY_S, IBUS_KEY_exclam, 0x00A7,
--IBUS_KEY_S, IBUS_KEY_apostrophe, 0x015A,
--IBUS_KEY_S, IBUS_KEY_comma, 0x015E,
--IBUS_KEY_S, IBUS_KEY_period, 0x1E60,
--IBUS_KEY_S, IBUS_KEY_0, 0x00A7,
--IBUS_KEY_S, IBUS_KEY_1, 0x00B9,
--IBUS_KEY_S, IBUS_KEY_2, 0x00B2,
--IBUS_KEY_S, IBUS_KEY_3, 0x00B3,
--IBUS_KEY_S, IBUS_KEY_semicolon, 0x0218,
--IBUS_KEY_S, IBUS_KEY_less, 0x0160,
--IBUS_KEY_S, IBUS_KEY_M, 0x2120,
--IBUS_KEY_S, IBUS_KEY_O, 0x00A7,
--IBUS_KEY_S, IBUS_KEY_S, 0x1E9E,
--IBUS_KEY_S, IBUS_KEY_m, 0x2120,
--IBUS_KEY_S, IBUS_KEY_cedilla, 0x015E,
--IBUS_KEY_T, IBUS_KEY_comma, 0x0162,
--IBUS_KEY_T, IBUS_KEY_minus, 0x0166,
--IBUS_KEY_T, IBUS_KEY_period, 0x1E6A,
--IBUS_KEY_T, IBUS_KEY_slash, 0x0166,
--IBUS_KEY_T, IBUS_KEY_semicolon, 0x021A,
--IBUS_KEY_T, IBUS_KEY_less, 0x0164,
--IBUS_KEY_T, IBUS_KEY_H, 0x00DE,
--IBUS_KEY_T, IBUS_KEY_M, 0x2122,
--IBUS_KEY_T, IBUS_KEY_m, 0x2122,
--IBUS_KEY_U, IBUS_KEY_quotedbl, 0x00DC,
--IBUS_KEY_U, IBUS_KEY_apostrophe, 0x00DA,
--IBUS_KEY_U, IBUS_KEY_asterisk, 0x016E,
--IBUS_KEY_U, IBUS_KEY_comma, 0x0172,
--IBUS_KEY_U, IBUS_KEY_minus, 0x016A,
--IBUS_KEY_U, IBUS_KEY_slash, 0x00B5,
--IBUS_KEY_U, IBUS_KEY_semicolon, 0x0172,
--IBUS_KEY_U, IBUS_KEY_greater, 0x00DB,
--IBUS_KEY_U, IBUS_KEY_A, 0x0102,
--IBUS_KEY_U, IBUS_KEY_E, 0x0114,
--IBUS_KEY_U, IBUS_KEY_G, 0x011E,
--IBUS_KEY_U, IBUS_KEY_I, 0x012C,
--IBUS_KEY_U, IBUS_KEY_O, 0x014E,
--IBUS_KEY_U, IBUS_KEY_U, 0x016C,
--IBUS_KEY_U, IBUS_KEY_asciicircum, 0x00DB,
--IBUS_KEY_U, IBUS_KEY_underscore, 0x016A,
--IBUS_KEY_U, IBUS_KEY_grave, 0x00D9,
--IBUS_KEY_U, IBUS_KEY_a, 0x0103,
--IBUS_KEY_U, IBUS_KEY_e, 0x0115,
--IBUS_KEY_U, IBUS_KEY_g, 0x011F,
--IBUS_KEY_U, IBUS_KEY_i, 0x012D,
--IBUS_KEY_U, IBUS_KEY_o, 0x014F,
--IBUS_KEY_U, IBUS_KEY_u, 0x016D,
--IBUS_KEY_U, IBUS_KEY_asciitilde, 0x0168,
--IBUS_KEY_U, IBUS_KEY_diaeresis, 0x00DC,
--IBUS_KEY_U, IBUS_KEY_acute, 0x00DA,
--IBUS_KEY_U, 0x0228, 0x1E1C,
--IBUS_KEY_U, 0x0229, 0x1E1D,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_a, 0x04D1,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_ie, 0x04D7,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_i, 0x0439,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_u, 0x045E,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_zhe, 0x04C2,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_A, 0x04D0,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_IE, 0x04D6,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_I, 0x0419,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_U, 0x040E,
--IBUS_KEY_U, IBUS_KEY_Cyrillic_ZHE, 0x04C1,
--IBUS_KEY_U, IBUS_KEY_Greek_ALPHA, 0x1FB8,
--IBUS_KEY_U, IBUS_KEY_Greek_IOTA, 0x1FD8,
--IBUS_KEY_U, IBUS_KEY_Greek_UPSILON, 0x1FE8,
--IBUS_KEY_U, IBUS_KEY_Greek_alpha, 0x1FB0,
--IBUS_KEY_U, IBUS_KEY_Greek_iota, 0x1FD0,
--IBUS_KEY_U, IBUS_KEY_Greek_upsilon, 0x1FE0,
--IBUS_KEY_U, 0x1EA0, 0x1EB6,
--IBUS_KEY_U, 0x1EA1, 0x1EB7,
--IBUS_KEY_V, IBUS_KEY_L, 0x007C,
--IBUS_KEY_W, IBUS_KEY_equal, 0x20A9,
--IBUS_KEY_W, IBUS_KEY_asciicircum, 0x0174,
--IBUS_KEY_X, IBUS_KEY_0, 0x00A4,
--IBUS_KEY_X, IBUS_KEY_O, 0x00A4,
--IBUS_KEY_X, IBUS_KEY_o, 0x00A4,
--IBUS_KEY_Y, IBUS_KEY_quotedbl, 0x0178,
--IBUS_KEY_Y, IBUS_KEY_apostrophe, 0x00DD,
--IBUS_KEY_Y, IBUS_KEY_minus, 0x00A5,
--IBUS_KEY_Y, IBUS_KEY_equal, 0x00A5,
--IBUS_KEY_Y, IBUS_KEY_asciicircum, 0x0176,
--IBUS_KEY_Y, IBUS_KEY_diaeresis, 0x0178,
--IBUS_KEY_Y, IBUS_KEY_acute, 0x00DD,
--IBUS_KEY_Z, IBUS_KEY_apostrophe, 0x0179,
--IBUS_KEY_Z, IBUS_KEY_period, 0x017B,
--IBUS_KEY_Z, IBUS_KEY_less, 0x017D,
--IBUS_KEY_bracketleft, IBUS_KEY_bracketright, 0x2337,
--IBUS_KEY_backslash, IBUS_KEY_minus, 0x2340,
--IBUS_KEY_backslash, 0x2395, 0x2342,
--IBUS_KEY_backslash, IBUS_KEY_emopencircle, 0x2349,
--IBUS_KEY_bracketright, IBUS_KEY_bracketleft, 0x2337,
--IBUS_KEY_asciicircum, IBUS_KEY_space, 0x005E,
--IBUS_KEY_asciicircum, IBUS_KEY_parenleft, 0x207D,
--IBUS_KEY_asciicircum, IBUS_KEY_parenright, 0x207E,
--IBUS_KEY_asciicircum, IBUS_KEY_plus, 0x207A,
--IBUS_KEY_asciicircum, IBUS_KEY_minus, 0x00AF,
--IBUS_KEY_asciicircum, IBUS_KEY_period, 0x00B7,
--IBUS_KEY_asciicircum, IBUS_KEY_slash, 0x007C,
--IBUS_KEY_asciicircum, IBUS_KEY_0, 0x2070,
--IBUS_KEY_asciicircum, IBUS_KEY_1, 0x00B9,
--IBUS_KEY_asciicircum, IBUS_KEY_2, 0x00B2,
--IBUS_KEY_asciicircum, IBUS_KEY_3, 0x00B3,
--IBUS_KEY_asciicircum, IBUS_KEY_4, 0x2074,
--IBUS_KEY_asciicircum, IBUS_KEY_5, 0x2075,
--IBUS_KEY_asciicircum, IBUS_KEY_6, 0x2076,
--IBUS_KEY_asciicircum, IBUS_KEY_7, 0x2077,
--IBUS_KEY_asciicircum, IBUS_KEY_8, 0x2078,
--IBUS_KEY_asciicircum, IBUS_KEY_9, 0x2079,
--IBUS_KEY_asciicircum, IBUS_KEY_equal, 0x207C,
--IBUS_KEY_asciicircum, IBUS_KEY_A, 0x00C2,
--IBUS_KEY_asciicircum, IBUS_KEY_C, 0x0108,
--IBUS_KEY_asciicircum, IBUS_KEY_E, 0x00CA,
--IBUS_KEY_asciicircum, IBUS_KEY_G, 0x011C,
--IBUS_KEY_asciicircum, IBUS_KEY_H, 0x0124,
--IBUS_KEY_asciicircum, IBUS_KEY_I, 0x00CE,
--IBUS_KEY_asciicircum, IBUS_KEY_J, 0x0134,
--IBUS_KEY_asciicircum, IBUS_KEY_O, 0x00D4,
--IBUS_KEY_asciicircum, IBUS_KEY_S, 0x015C,
--IBUS_KEY_asciicircum, IBUS_KEY_U, 0x00DB,
--IBUS_KEY_asciicircum, IBUS_KEY_W, 0x0174,
--IBUS_KEY_asciicircum, IBUS_KEY_Y, 0x0176,
--IBUS_KEY_asciicircum, IBUS_KEY_Z, 0x1E90,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, 0x00AF,
--IBUS_KEY_asciicircum, IBUS_KEY_a, 0x00E2,
--IBUS_KEY_asciicircum, IBUS_KEY_c, 0x0109,
--IBUS_KEY_asciicircum, IBUS_KEY_e, 0x00EA,
--IBUS_KEY_asciicircum, IBUS_KEY_g, 0x011D,
--IBUS_KEY_asciicircum, IBUS_KEY_h, 0x0125,
--IBUS_KEY_asciicircum, IBUS_KEY_i, 0x00EE,
--IBUS_KEY_asciicircum, IBUS_KEY_j, 0x0135,
--IBUS_KEY_asciicircum, IBUS_KEY_o, 0x00F4,
--IBUS_KEY_asciicircum, IBUS_KEY_s, 0x015D,
--IBUS_KEY_asciicircum, IBUS_KEY_u, 0x00FB,
--IBUS_KEY_asciicircum, IBUS_KEY_w, 0x0175,
--IBUS_KEY_asciicircum, IBUS_KEY_y, 0x0177,
--IBUS_KEY_asciicircum, IBUS_KEY_z, 0x1E91,
--IBUS_KEY_asciicircum, 0x1EA0, 0x1EAC,
--IBUS_KEY_asciicircum, 0x1EA1, 0x1EAD,
--IBUS_KEY_asciicircum, 0x1EB8, 0x1EC6,
--IBUS_KEY_asciicircum, 0x1EB9, 0x1EC7,
--IBUS_KEY_asciicircum, 0x1ECC, 0x1ED8,
--IBUS_KEY_asciicircum, 0x1ECD, 0x1ED9,
--IBUS_KEY_asciicircum, 0x2212, 0x207B,
--IBUS_KEY_asciicircum, 0x4E00, 0x3192,
--IBUS_KEY_asciicircum, 0x4E01, 0x319C,
--IBUS_KEY_asciicircum, 0x4E09, 0x3194,
--IBUS_KEY_asciicircum, 0x4E0A, 0x3196,
--IBUS_KEY_asciicircum, 0x4E0B, 0x3198,
--IBUS_KEY_asciicircum, 0x4E19, 0x319B,
--IBUS_KEY_asciicircum, 0x4E2D, 0x3197,
--IBUS_KEY_asciicircum, 0x4E59, 0x319A,
--IBUS_KEY_asciicircum, 0x4E8C, 0x3193,
--IBUS_KEY_asciicircum, 0x4EBA, 0x319F,
--IBUS_KEY_asciicircum, 0x56DB, 0x3195,
--IBUS_KEY_asciicircum, 0x5730, 0x319E,
--IBUS_KEY_asciicircum, 0x5929, 0x319D,
--IBUS_KEY_asciicircum, 0x7532, 0x3199,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_Space, 0x00B2,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_Add, 0x207A,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_0, 0x2070,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_1, 0x00B9,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_2, 0x00B2,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_3, 0x00B3,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_4, 0x2074,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_5, 0x2075,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_6, 0x2076,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_7, 0x2077,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_8, 0x2078,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_9, 0x2079,
--IBUS_KEY_asciicircum, IBUS_KEY_KP_Equal, 0x207C,
--IBUS_KEY_underscore, IBUS_KEY_apostrophe, 0x2358,
--IBUS_KEY_underscore, IBUS_KEY_parenleft, 0x208D,
--IBUS_KEY_underscore, IBUS_KEY_parenright, 0x208E,
--IBUS_KEY_underscore, IBUS_KEY_plus, 0x208A,
--IBUS_KEY_underscore, IBUS_KEY_0, 0x2080,
--IBUS_KEY_underscore, IBUS_KEY_1, 0x2081,
--IBUS_KEY_underscore, IBUS_KEY_2, 0x2082,
--IBUS_KEY_underscore, IBUS_KEY_3, 0x2083,
--IBUS_KEY_underscore, IBUS_KEY_4, 0x2084,
--IBUS_KEY_underscore, IBUS_KEY_5, 0x2085,
--IBUS_KEY_underscore, IBUS_KEY_6, 0x2086,
--IBUS_KEY_underscore, IBUS_KEY_7, 0x2087,
--IBUS_KEY_underscore, IBUS_KEY_8, 0x2088,
--IBUS_KEY_underscore, IBUS_KEY_9, 0x2089,
--IBUS_KEY_underscore, IBUS_KEY_less, 0x2264,
--IBUS_KEY_underscore, IBUS_KEY_equal, 0x208C,
--IBUS_KEY_underscore, IBUS_KEY_greater, 0x2265,
--IBUS_KEY_underscore, IBUS_KEY_A, 0x0100,
--IBUS_KEY_underscore, IBUS_KEY_E, 0x0112,
--IBUS_KEY_underscore, IBUS_KEY_G, 0x1E20,
--IBUS_KEY_underscore, IBUS_KEY_I, 0x012A,
--IBUS_KEY_underscore, IBUS_KEY_O, 0x014C,
--IBUS_KEY_underscore, IBUS_KEY_U, 0x016A,
--IBUS_KEY_underscore, IBUS_KEY_Y, 0x0232,
--IBUS_KEY_underscore, IBUS_KEY_asciicircum, 0x00AF,
--IBUS_KEY_underscore, IBUS_KEY_underscore, 0x00AF,
--IBUS_KEY_underscore, IBUS_KEY_a, 0x0101,
--IBUS_KEY_underscore, IBUS_KEY_e, 0x0113,
--IBUS_KEY_underscore, IBUS_KEY_g, 0x1E21,
--IBUS_KEY_underscore, IBUS_KEY_i, 0x012B,
--IBUS_KEY_underscore, IBUS_KEY_o, 0x014D,
--IBUS_KEY_underscore, IBUS_KEY_u, 0x016B,
--IBUS_KEY_underscore, IBUS_KEY_y, 0x0233,
--IBUS_KEY_underscore, IBUS_KEY_Adiaeresis, 0x01DE,
--IBUS_KEY_underscore, IBUS_KEY_AE, 0x01E2,
--IBUS_KEY_underscore, IBUS_KEY_Otilde, 0x022C,
--IBUS_KEY_underscore, IBUS_KEY_Odiaeresis, 0x022A,
--IBUS_KEY_underscore, IBUS_KEY_Udiaeresis, 0x01D5,
--IBUS_KEY_underscore, IBUS_KEY_adiaeresis, 0x01DF,
--IBUS_KEY_underscore, IBUS_KEY_ae, 0x01E3,
--IBUS_KEY_underscore, IBUS_KEY_otilde, 0x022D,
--IBUS_KEY_underscore, IBUS_KEY_odiaeresis, 0x022B,
--IBUS_KEY_underscore, IBUS_KEY_udiaeresis, 0x01D6,
--IBUS_KEY_underscore, 0x01EA, 0x01EC,
--IBUS_KEY_underscore, 0x01EB, 0x01ED,
--IBUS_KEY_underscore, 0x0226, 0x01E0,
--IBUS_KEY_underscore, 0x0227, 0x01E1,
--IBUS_KEY_underscore, 0x022E, 0x0230,
--IBUS_KEY_underscore, 0x022F, 0x0231,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_i, 0x04E3,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_u, 0x04EF,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_I, 0x04E2,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_U, 0x04EE,
--IBUS_KEY_underscore, IBUS_KEY_Greek_ALPHA, 0x1FB9,
--IBUS_KEY_underscore, IBUS_KEY_Greek_IOTA, 0x1FD9,
--IBUS_KEY_underscore, IBUS_KEY_Greek_UPSILON, 0x1FE9,
--IBUS_KEY_underscore, IBUS_KEY_Greek_alpha, 0x1FB1,
--IBUS_KEY_underscore, IBUS_KEY_Greek_iota, 0x1FD1,
--IBUS_KEY_underscore, IBUS_KEY_Greek_upsilon, 0x1FE1,
--IBUS_KEY_underscore, 0x1E36, 0x1E38,
--IBUS_KEY_underscore, 0x1E37, 0x1E39,
--IBUS_KEY_underscore, 0x1E5A, 0x1E5C,
--IBUS_KEY_underscore, 0x1E5B, 0x1E5D,
--IBUS_KEY_underscore, 0x2206, 0x2359,
--IBUS_KEY_underscore, 0x220A, 0x2377,
--IBUS_KEY_underscore, 0x2212, 0x208B,
--IBUS_KEY_underscore, 0x2218, 0x235B,
--IBUS_KEY_underscore, 0x2260, 0x2262,
--IBUS_KEY_underscore, 0x2282, 0x2286,
--IBUS_KEY_underscore, 0x2283, 0x2287,
--IBUS_KEY_underscore, IBUS_KEY_downtack, 0x234A,
--IBUS_KEY_underscore, 0x22C4, 0x235A,
--IBUS_KEY_underscore, 0x2373, 0x2378,
--IBUS_KEY_underscore, 0x2375, 0x2379,
--IBUS_KEY_underscore, 0x237A, 0x2376,
--IBUS_KEY_underscore, IBUS_KEY_emopencircle, 0x235C,
--IBUS_KEY_underscore, IBUS_KEY_KP_Space, 0x2082,
--IBUS_KEY_underscore, IBUS_KEY_KP_Add, 0x208A,
--IBUS_KEY_underscore, IBUS_KEY_KP_0, 0x2080,
--IBUS_KEY_underscore, IBUS_KEY_KP_1, 0x2081,
--IBUS_KEY_underscore, IBUS_KEY_KP_2, 0x2082,
--IBUS_KEY_underscore, IBUS_KEY_KP_3, 0x2083,
--IBUS_KEY_underscore, IBUS_KEY_KP_4, 0x2084,
--IBUS_KEY_underscore, IBUS_KEY_KP_5, 0x2085,
--IBUS_KEY_underscore, IBUS_KEY_KP_6, 0x2086,
--IBUS_KEY_underscore, IBUS_KEY_KP_7, 0x2087,
--IBUS_KEY_underscore, IBUS_KEY_KP_8, 0x2088,
--IBUS_KEY_underscore, IBUS_KEY_KP_9, 0x2089,
--IBUS_KEY_underscore, IBUS_KEY_KP_Equal, 0x208C,
--IBUS_KEY_grave, IBUS_KEY_space, 0x0060,
--IBUS_KEY_grave, IBUS_KEY_A, 0x00C0,
--IBUS_KEY_grave, IBUS_KEY_E, 0x00C8,
--IBUS_KEY_grave, IBUS_KEY_I, 0x00CC,
--IBUS_KEY_grave, IBUS_KEY_N, 0x01F8,
--IBUS_KEY_grave, IBUS_KEY_O, 0x00D2,
--IBUS_KEY_grave, IBUS_KEY_U, 0x00D9,
--IBUS_KEY_grave, IBUS_KEY_W, 0x1E80,
--IBUS_KEY_grave, IBUS_KEY_Y, 0x1EF2,
--IBUS_KEY_grave, IBUS_KEY_a, 0x00E0,
--IBUS_KEY_grave, IBUS_KEY_e, 0x00E8,
--IBUS_KEY_grave, IBUS_KEY_i, 0x00EC,
--IBUS_KEY_grave, IBUS_KEY_n, 0x01F9,
--IBUS_KEY_grave, IBUS_KEY_o, 0x00F2,
--IBUS_KEY_grave, IBUS_KEY_u, 0x00F9,
--IBUS_KEY_grave, IBUS_KEY_w, 0x1E81,
--IBUS_KEY_grave, IBUS_KEY_y, 0x1EF3,
--IBUS_KEY_grave, IBUS_KEY_Acircumflex, 0x1EA6,
--IBUS_KEY_grave, IBUS_KEY_Ecircumflex, 0x1EC0,
--IBUS_KEY_grave, IBUS_KEY_Ocircumflex, 0x1ED2,
--IBUS_KEY_grave, IBUS_KEY_Udiaeresis, 0x01DB,
--IBUS_KEY_grave, IBUS_KEY_acircumflex, 0x1EA7,
--IBUS_KEY_grave, IBUS_KEY_ecircumflex, 0x1EC1,
--IBUS_KEY_grave, IBUS_KEY_ocircumflex, 0x1ED3,
--IBUS_KEY_grave, IBUS_KEY_udiaeresis, 0x01DC,
--IBUS_KEY_grave, IBUS_KEY_Abreve, 0x1EB0,
--IBUS_KEY_grave, IBUS_KEY_abreve, 0x1EB1,
--IBUS_KEY_grave, IBUS_KEY_Emacron, 0x1E14,
--IBUS_KEY_grave, IBUS_KEY_emacron, 0x1E15,
--IBUS_KEY_grave, IBUS_KEY_Omacron, 0x1E50,
--IBUS_KEY_grave, IBUS_KEY_omacron, 0x1E51,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_ie, 0x0450,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_i, 0x045D,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_IE, 0x0400,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_I, 0x040D,
--IBUS_KEY_grave, IBUS_KEY_Greek_iotadieresis, 0x1FD2,
--IBUS_KEY_grave, IBUS_KEY_Greek_upsilondieresis, 0x1FE2,
--IBUS_KEY_grave, IBUS_KEY_Greek_ALPHA, 0x1FBA,
--IBUS_KEY_grave, IBUS_KEY_Greek_EPSILON, 0x1FC8,
--IBUS_KEY_grave, IBUS_KEY_Greek_ETA, 0x1FCA,
--IBUS_KEY_grave, IBUS_KEY_Greek_IOTA, 0x1FDA,
--IBUS_KEY_grave, IBUS_KEY_Greek_OMICRON, 0x1FF8,
--IBUS_KEY_grave, IBUS_KEY_Greek_UPSILON, 0x1FEA,
--IBUS_KEY_grave, IBUS_KEY_Greek_OMEGA, 0x1FFA,
--IBUS_KEY_grave, IBUS_KEY_Greek_alpha, 0x1F70,
--IBUS_KEY_grave, IBUS_KEY_Greek_epsilon, 0x1F72,
--IBUS_KEY_grave, IBUS_KEY_Greek_eta, 0x1F74,
--IBUS_KEY_grave, IBUS_KEY_Greek_iota, 0x1F76,
--IBUS_KEY_grave, IBUS_KEY_Greek_omicron, 0x1F78,
--IBUS_KEY_grave, IBUS_KEY_Greek_upsilon, 0x1F7A,
--IBUS_KEY_grave, IBUS_KEY_Greek_omega, 0x1F7C,
--IBUS_KEY_grave, 0x1F00, 0x1F02,
--IBUS_KEY_grave, 0x1F01, 0x1F03,
--IBUS_KEY_grave, 0x1F08, 0x1F0A,
--IBUS_KEY_grave, 0x1F09, 0x1F0B,
--IBUS_KEY_grave, 0x1F10, 0x1F12,
--IBUS_KEY_grave, 0x1F11, 0x1F13,
--IBUS_KEY_grave, 0x1F18, 0x1F1A,
--IBUS_KEY_grave, 0x1F19, 0x1F1B,
--IBUS_KEY_grave, 0x1F20, 0x1F22,
--IBUS_KEY_grave, 0x1F21, 0x1F23,
--IBUS_KEY_grave, 0x1F28, 0x1F2A,
--IBUS_KEY_grave, 0x1F29, 0x1F2B,
--IBUS_KEY_grave, 0x1F30, 0x1F32,
--IBUS_KEY_grave, 0x1F31, 0x1F33,
--IBUS_KEY_grave, 0x1F38, 0x1F3A,
--IBUS_KEY_grave, 0x1F39, 0x1F3B,
--IBUS_KEY_grave, 0x1F40, 0x1F42,
--IBUS_KEY_grave, 0x1F41, 0x1F43,
--IBUS_KEY_grave, 0x1F48, 0x1F4A,
--IBUS_KEY_grave, 0x1F49, 0x1F4B,
--IBUS_KEY_grave, 0x1F50, 0x1F52,
--IBUS_KEY_grave, 0x1F51, 0x1F53,
--IBUS_KEY_grave, 0x1F59, 0x1F5B,
--IBUS_KEY_grave, 0x1F60, 0x1F62,
--IBUS_KEY_grave, 0x1F61, 0x1F63,
--IBUS_KEY_grave, 0x1F68, 0x1F6A,
--IBUS_KEY_grave, 0x1F69, 0x1F6B,
--IBUS_KEY_a, IBUS_KEY_quotedbl, 0x00E4,
--IBUS_KEY_a, IBUS_KEY_apostrophe, 0x00E1,
--IBUS_KEY_a, IBUS_KEY_parenleft, 0x0103,
--IBUS_KEY_a, IBUS_KEY_asterisk, 0x00E5,
--IBUS_KEY_a, IBUS_KEY_comma, 0x0105,
--IBUS_KEY_a, IBUS_KEY_minus, 0x0101,
--IBUS_KEY_a, IBUS_KEY_semicolon, 0x0105,
--IBUS_KEY_a, IBUS_KEY_greater, 0x00E2,
--IBUS_KEY_a, IBUS_KEY_asciicircum, 0x00E2,
--IBUS_KEY_a, IBUS_KEY_underscore, 0x0101,
--IBUS_KEY_a, IBUS_KEY_grave, 0x00E0,
--IBUS_KEY_a, IBUS_KEY_a, 0x00E5,
--IBUS_KEY_a, IBUS_KEY_e, 0x00E6,
--IBUS_KEY_a, IBUS_KEY_asciitilde, 0x00E3,
--IBUS_KEY_a, IBUS_KEY_diaeresis, 0x00E4,
--IBUS_KEY_a, IBUS_KEY_acute, 0x00E1,
--IBUS_KEY_b, IBUS_KEY_period, 0x1E03,
--IBUS_KEY_b, IBUS_KEY_A, 0x0102,
--IBUS_KEY_b, IBUS_KEY_E, 0x0114,
--IBUS_KEY_b, IBUS_KEY_G, 0x011E,
--IBUS_KEY_b, IBUS_KEY_I, 0x012C,
--IBUS_KEY_b, IBUS_KEY_O, 0x014E,
--IBUS_KEY_b, IBUS_KEY_U, 0x016C,
--IBUS_KEY_b, IBUS_KEY_a, 0x0103,
--IBUS_KEY_b, IBUS_KEY_e, 0x0115,
--IBUS_KEY_b, IBUS_KEY_g, 0x011F,
--IBUS_KEY_b, IBUS_KEY_i, 0x012D,
--IBUS_KEY_b, IBUS_KEY_o, 0x014F,
--IBUS_KEY_b, IBUS_KEY_u, 0x016D,
--IBUS_KEY_b, 0x0228, 0x1E1C,
--IBUS_KEY_b, 0x0229, 0x1E1D,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_a, 0x04D1,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_ie, 0x04D7,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_i, 0x0439,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_u, 0x045E,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_zhe, 0x04C2,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_A, 0x04D0,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_IE, 0x04D6,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_I, 0x0419,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_U, 0x040E,
--IBUS_KEY_b, IBUS_KEY_Cyrillic_ZHE, 0x04C1,
--IBUS_KEY_b, IBUS_KEY_Greek_ALPHA, 0x1FB8,
--IBUS_KEY_b, IBUS_KEY_Greek_IOTA, 0x1FD8,
--IBUS_KEY_b, IBUS_KEY_Greek_UPSILON, 0x1FE8,
--IBUS_KEY_b, IBUS_KEY_Greek_alpha, 0x1FB0,
--IBUS_KEY_b, IBUS_KEY_Greek_iota, 0x1FD0,
--IBUS_KEY_b, IBUS_KEY_Greek_upsilon, 0x1FE0,
--IBUS_KEY_b, 0x1EA0, 0x1EB6,
--IBUS_KEY_b, 0x1EA1, 0x1EB7,
--IBUS_KEY_c, IBUS_KEY_apostrophe, 0x0107,
--IBUS_KEY_c, IBUS_KEY_comma, 0x00E7,
--IBUS_KEY_c, IBUS_KEY_period, 0x010B,
--IBUS_KEY_c, IBUS_KEY_slash, 0x00A2,
--IBUS_KEY_c, IBUS_KEY_0, 0x00A9,
--IBUS_KEY_c, IBUS_KEY_less, 0x010D,
--IBUS_KEY_c, IBUS_KEY_equal, 0x20AC,
--IBUS_KEY_c, IBUS_KEY_A, 0x01CD,
--IBUS_KEY_c, IBUS_KEY_C, 0x010C,
--IBUS_KEY_c, IBUS_KEY_D, 0x010E,
--IBUS_KEY_c, IBUS_KEY_E, 0x011A,
--IBUS_KEY_c, IBUS_KEY_G, 0x01E6,
--IBUS_KEY_c, IBUS_KEY_H, 0x021E,
--IBUS_KEY_c, IBUS_KEY_I, 0x01CF,
--IBUS_KEY_c, IBUS_KEY_K, 0x01E8,
--IBUS_KEY_c, IBUS_KEY_L, 0x013D,
--IBUS_KEY_c, IBUS_KEY_N, 0x0147,
--IBUS_KEY_c, IBUS_KEY_O, 0x01D1,
--IBUS_KEY_c, IBUS_KEY_R, 0x0158,
--IBUS_KEY_c, IBUS_KEY_S, 0x0160,
--IBUS_KEY_c, IBUS_KEY_T, 0x0164,
--IBUS_KEY_c, IBUS_KEY_U, 0x01D3,
--IBUS_KEY_c, IBUS_KEY_Z, 0x017D,
--IBUS_KEY_c, IBUS_KEY_a, 0x01CE,
--IBUS_KEY_c, IBUS_KEY_c, 0x010D,
--IBUS_KEY_c, IBUS_KEY_d, 0x010F,
--IBUS_KEY_c, IBUS_KEY_e, 0x011B,
--IBUS_KEY_c, IBUS_KEY_g, 0x01E7,
--IBUS_KEY_c, IBUS_KEY_h, 0x021F,
--IBUS_KEY_c, IBUS_KEY_i, 0x01D0,
--IBUS_KEY_c, IBUS_KEY_j, 0x01F0,
--IBUS_KEY_c, IBUS_KEY_k, 0x01E9,
--IBUS_KEY_c, IBUS_KEY_l, 0x013E,
--IBUS_KEY_c, IBUS_KEY_n, 0x0148,
--IBUS_KEY_c, IBUS_KEY_o, 0x01D2,
--IBUS_KEY_c, IBUS_KEY_r, 0x0159,
--IBUS_KEY_c, IBUS_KEY_s, 0x0161,
--IBUS_KEY_c, IBUS_KEY_t, 0x0165,
--IBUS_KEY_c, IBUS_KEY_u, 0x01D4,
--IBUS_KEY_c, IBUS_KEY_z, 0x017E,
--IBUS_KEY_c, IBUS_KEY_bar, 0x00A2,
--IBUS_KEY_c, IBUS_KEY_Udiaeresis, 0x01D9,
--IBUS_KEY_c, IBUS_KEY_udiaeresis, 0x01DA,
--IBUS_KEY_d, IBUS_KEY_comma, 0x1E11,
--IBUS_KEY_d, IBUS_KEY_minus, 0x0111,
--IBUS_KEY_d, IBUS_KEY_period, 0x1E0B,
--IBUS_KEY_d, IBUS_KEY_less, 0x010F,
--IBUS_KEY_d, IBUS_KEY_equal, 0x20AB,
--IBUS_KEY_d, IBUS_KEY_h, 0x00F0,
--IBUS_KEY_d, IBUS_KEY_i, 0x2300,
--IBUS_KEY_e, IBUS_KEY_quotedbl, 0x00EB,
--IBUS_KEY_e, IBUS_KEY_apostrophe, 0x00E9,
--IBUS_KEY_e, IBUS_KEY_comma, 0x0119,
--IBUS_KEY_e, IBUS_KEY_minus, 0x0113,
--IBUS_KEY_e, IBUS_KEY_period, 0x0117,
--IBUS_KEY_e, IBUS_KEY_semicolon, 0x0119,
--IBUS_KEY_e, IBUS_KEY_less, 0x011B,
--IBUS_KEY_e, IBUS_KEY_equal, 0x20AC,
--IBUS_KEY_e, IBUS_KEY_greater, 0x00EA,
--IBUS_KEY_e, IBUS_KEY_asciicircum, 0x00EA,
--IBUS_KEY_e, IBUS_KEY_underscore, 0x0113,
--IBUS_KEY_e, IBUS_KEY_grave, 0x00E8,
--IBUS_KEY_e, IBUS_KEY_e, 0x0259,
--IBUS_KEY_e, IBUS_KEY_diaeresis, 0x00EB,
--IBUS_KEY_e, IBUS_KEY_acute, 0x00E9,
--IBUS_KEY_f, IBUS_KEY_period, 0x1E1F,
--IBUS_KEY_f, IBUS_KEY_S, 0x017F,
--IBUS_KEY_f, IBUS_KEY_f, 0xFB00,
--IBUS_KEY_f, IBUS_KEY_i, 0xFB01,
--IBUS_KEY_f, IBUS_KEY_l, 0xFB02,
--IBUS_KEY_f, IBUS_KEY_s, 0x017F,
--IBUS_KEY_g, IBUS_KEY_parenleft, 0x011F,
--IBUS_KEY_g, IBUS_KEY_comma, 0x0123,
--IBUS_KEY_g, IBUS_KEY_period, 0x0121,
--IBUS_KEY_g, IBUS_KEY_U, 0x011F,
--IBUS_KEY_g, IBUS_KEY_breve, 0x011F,
--IBUS_KEY_h, IBUS_KEY_comma, 0x1E29,
--IBUS_KEY_i, IBUS_KEY_quotedbl, 0x00EF,
--IBUS_KEY_i, IBUS_KEY_apostrophe, 0x00ED,
--IBUS_KEY_i, IBUS_KEY_comma, 0x012F,
--IBUS_KEY_i, IBUS_KEY_minus, 0x012B,
--IBUS_KEY_i, IBUS_KEY_period, 0x0131,
--IBUS_KEY_i, IBUS_KEY_semicolon, 0x012F,
--IBUS_KEY_i, IBUS_KEY_greater, 0x00EE,
--IBUS_KEY_i, IBUS_KEY_asciicircum, 0x00EE,
--IBUS_KEY_i, IBUS_KEY_underscore, 0x012B,
--IBUS_KEY_i, IBUS_KEY_grave, 0x00EC,
--IBUS_KEY_i, IBUS_KEY_j, 0x0133,
--IBUS_KEY_i, IBUS_KEY_asciitilde, 0x0129,
--IBUS_KEY_i, IBUS_KEY_diaeresis, 0x00EF,
--IBUS_KEY_i, IBUS_KEY_acute, 0x00ED,
--IBUS_KEY_k, IBUS_KEY_comma, 0x0137,
--IBUS_KEY_k, IBUS_KEY_k, 0x0138,
--IBUS_KEY_l, IBUS_KEY_apostrophe, 0x013A,
--IBUS_KEY_l, IBUS_KEY_comma, 0x013C,
--IBUS_KEY_l, IBUS_KEY_minus, 0x00A3,
--IBUS_KEY_l, IBUS_KEY_slash, 0x0142,
--IBUS_KEY_l, IBUS_KEY_less, 0x013E,
--IBUS_KEY_l, IBUS_KEY_equal, 0x00A3,
--IBUS_KEY_l, IBUS_KEY_v, 0x007C,
--IBUS_KEY_m, IBUS_KEY_period, 0x1E41,
--IBUS_KEY_m, IBUS_KEY_slash, 0x20A5,
--IBUS_KEY_m, IBUS_KEY_u, 0x00B5,
--IBUS_KEY_n, IBUS_KEY_apostrophe, 0x0144,
--IBUS_KEY_n, IBUS_KEY_comma, 0x0146,
--IBUS_KEY_n, IBUS_KEY_minus, 0x00F1,
--IBUS_KEY_n, IBUS_KEY_less, 0x0148,
--IBUS_KEY_n, IBUS_KEY_g, 0x014B,
--IBUS_KEY_n, IBUS_KEY_asciitilde, 0x00F1,
--IBUS_KEY_o, IBUS_KEY_quotedbl, 0x00F6,
--IBUS_KEY_o, IBUS_KEY_apostrophe, 0x00F3,
--IBUS_KEY_o, IBUS_KEY_comma, 0x01EB,
--IBUS_KEY_o, IBUS_KEY_minus, 0x014D,
--IBUS_KEY_o, IBUS_KEY_slash, 0x00F8,
--IBUS_KEY_o, IBUS_KEY_semicolon, 0x01EB,
--IBUS_KEY_o, IBUS_KEY_greater, 0x00F4,
--IBUS_KEY_o, IBUS_KEY_A, 0x00C5,
--IBUS_KEY_o, IBUS_KEY_C, 0x00A9,
--IBUS_KEY_o, IBUS_KEY_R, 0x00AE,
--IBUS_KEY_o, IBUS_KEY_U, 0x016E,
--IBUS_KEY_o, IBUS_KEY_X, 0x00A4,
--IBUS_KEY_o, IBUS_KEY_asciicircum, 0x00F4,
--IBUS_KEY_o, IBUS_KEY_underscore, 0x014D,
--IBUS_KEY_o, IBUS_KEY_grave, 0x00F2,
--IBUS_KEY_o, IBUS_KEY_a, 0x00E5,
--IBUS_KEY_o, IBUS_KEY_c, 0x00A9,
--IBUS_KEY_o, IBUS_KEY_e, 0x0153,
--IBUS_KEY_o, IBUS_KEY_o, 0x00B0,
--IBUS_KEY_o, IBUS_KEY_r, 0x00AE,
--IBUS_KEY_o, IBUS_KEY_s, 0x00A7,
--IBUS_KEY_o, IBUS_KEY_u, 0x016F,
--IBUS_KEY_o, IBUS_KEY_w, 0x1E98,
--IBUS_KEY_o, IBUS_KEY_x, 0x00A4,
--IBUS_KEY_o, IBUS_KEY_y, 0x1E99,
--IBUS_KEY_o, IBUS_KEY_asciitilde, 0x00F5,
--IBUS_KEY_o, IBUS_KEY_diaeresis, 0x00F6,
--IBUS_KEY_o, IBUS_KEY_acute, 0x00F3,
--IBUS_KEY_p, IBUS_KEY_exclam, 0x00B6,
--IBUS_KEY_p, IBUS_KEY_period, 0x1E57,
--IBUS_KEY_r, IBUS_KEY_apostrophe, 0x0155,
--IBUS_KEY_r, IBUS_KEY_comma, 0x0157,
--IBUS_KEY_r, IBUS_KEY_less, 0x0159,
--IBUS_KEY_r, IBUS_KEY_equal, 0x20B9,
--IBUS_KEY_s, IBUS_KEY_exclam, 0x00A7,
--IBUS_KEY_s, IBUS_KEY_apostrophe, 0x015B,
--IBUS_KEY_s, IBUS_KEY_comma, 0x015F,
--IBUS_KEY_s, IBUS_KEY_period, 0x1E61,
--IBUS_KEY_s, IBUS_KEY_0, 0x00A7,
--IBUS_KEY_s, IBUS_KEY_1, 0x00B9,
--IBUS_KEY_s, IBUS_KEY_2, 0x00B2,
--IBUS_KEY_s, IBUS_KEY_3, 0x00B3,
--IBUS_KEY_s, IBUS_KEY_semicolon, 0x0219,
--IBUS_KEY_s, IBUS_KEY_less, 0x0161,
--IBUS_KEY_s, IBUS_KEY_M, 0x2120,
--IBUS_KEY_s, IBUS_KEY_m, 0x2120,
--IBUS_KEY_s, IBUS_KEY_o, 0x00A7,
--IBUS_KEY_s, IBUS_KEY_s, 0x00DF,
--IBUS_KEY_s, IBUS_KEY_cedilla, 0x015F,
--IBUS_KEY_t, IBUS_KEY_comma, 0x0163,
--IBUS_KEY_t, IBUS_KEY_minus, 0x0167,
--IBUS_KEY_t, IBUS_KEY_period, 0x1E6B,
--IBUS_KEY_t, IBUS_KEY_slash, 0x0167,
--IBUS_KEY_t, IBUS_KEY_semicolon, 0x021B,
--IBUS_KEY_t, IBUS_KEY_less, 0x0165,
--IBUS_KEY_t, IBUS_KEY_M, 0x2122,
--IBUS_KEY_t, IBUS_KEY_h, 0x00FE,
--IBUS_KEY_t, IBUS_KEY_m, 0x2122,
--IBUS_KEY_u, IBUS_KEY_quotedbl, 0x00FC,
--IBUS_KEY_u, IBUS_KEY_apostrophe, 0x00FA,
--IBUS_KEY_u, IBUS_KEY_asterisk, 0x016F,
--IBUS_KEY_u, IBUS_KEY_comma, 0x0173,
--IBUS_KEY_u, IBUS_KEY_minus, 0x016B,
--IBUS_KEY_u, IBUS_KEY_slash, 0x00B5,
--IBUS_KEY_u, IBUS_KEY_semicolon, 0x0173,
--IBUS_KEY_u, IBUS_KEY_greater, 0x00FB,
--IBUS_KEY_u, IBUS_KEY_A, 0x0102,
--IBUS_KEY_u, IBUS_KEY_U, 0x016C,
--IBUS_KEY_u, IBUS_KEY_asciicircum, 0x00FB,
--IBUS_KEY_u, IBUS_KEY_underscore, 0x016B,
--IBUS_KEY_u, IBUS_KEY_grave, 0x00F9,
--IBUS_KEY_u, IBUS_KEY_a, 0x0103,
--IBUS_KEY_u, IBUS_KEY_u, 0x016D,
--IBUS_KEY_u, IBUS_KEY_asciitilde, 0x0169,
--IBUS_KEY_u, IBUS_KEY_diaeresis, 0x00FC,
--IBUS_KEY_u, IBUS_KEY_acute, 0x00FA,
--IBUS_KEY_v, IBUS_KEY_slash, 0x221A,
--IBUS_KEY_v, IBUS_KEY_Z, 0x017D,
--IBUS_KEY_v, IBUS_KEY_l, 0x007C,
--IBUS_KEY_v, IBUS_KEY_z, 0x017E,
--IBUS_KEY_w, IBUS_KEY_asciicircum, 0x0175,
--IBUS_KEY_x, IBUS_KEY_0, 0x00A4,
--IBUS_KEY_x, IBUS_KEY_O, 0x00A4,
--IBUS_KEY_x, IBUS_KEY_o, 0x00A4,
--IBUS_KEY_x, IBUS_KEY_x, 0x00D7,
--IBUS_KEY_y, IBUS_KEY_quotedbl, 0x00FF,
--IBUS_KEY_y, IBUS_KEY_apostrophe, 0x00FD,
--IBUS_KEY_y, IBUS_KEY_minus, 0x00A5,
--IBUS_KEY_y, IBUS_KEY_equal, 0x00A5,
--IBUS_KEY_y, IBUS_KEY_asciicircum, 0x0177,
--IBUS_KEY_y, IBUS_KEY_diaeresis, 0x00FF,
--IBUS_KEY_y, IBUS_KEY_acute, 0x00FD,
--IBUS_KEY_z, IBUS_KEY_apostrophe, 0x017A,
--IBUS_KEY_z, IBUS_KEY_period, 0x017C,
--IBUS_KEY_z, IBUS_KEY_less, 0x017E,
--IBUS_KEY_braceleft, IBUS_KEY_braceright, 0x2205,
--IBUS_KEY_bar, IBUS_KEY_C, 0x00A2,
--IBUS_KEY_bar, IBUS_KEY_c, 0x00A2,
--IBUS_KEY_bar, IBUS_KEY_asciitilde, 0x236D,
--IBUS_KEY_bar, 0x2190, 0x2345,
--IBUS_KEY_bar, 0x2192, 0x2346,
--IBUS_KEY_bar, 0x2206, 0x234B,
--IBUS_KEY_bar, 0x2207, 0x2352,
--IBUS_KEY_bar, IBUS_KEY_union, 0x2366,
--IBUS_KEY_bar, 0x2282, 0x2367,
--IBUS_KEY_bar, IBUS_KEY_emopencircle, 0x233D,
--IBUS_KEY_asciitilde, IBUS_KEY_space, 0x007E,
--IBUS_KEY_asciitilde, IBUS_KEY_0, 0x236C,
--IBUS_KEY_asciitilde, IBUS_KEY_A, 0x00C3,
--IBUS_KEY_asciitilde, IBUS_KEY_E, 0x1EBC,
--IBUS_KEY_asciitilde, IBUS_KEY_I, 0x0128,
--IBUS_KEY_asciitilde, IBUS_KEY_N, 0x00D1,
--IBUS_KEY_asciitilde, IBUS_KEY_O, 0x00D5,
--IBUS_KEY_asciitilde, IBUS_KEY_U, 0x0168,
--IBUS_KEY_asciitilde, IBUS_KEY_V, 0x1E7C,
--IBUS_KEY_asciitilde, IBUS_KEY_Y, 0x1EF8,
--IBUS_KEY_asciitilde, IBUS_KEY_a, 0x00E3,
--IBUS_KEY_asciitilde, IBUS_KEY_e, 0x1EBD,
--IBUS_KEY_asciitilde, IBUS_KEY_i, 0x0129,
--IBUS_KEY_asciitilde, IBUS_KEY_n, 0x00F1,
--IBUS_KEY_asciitilde, IBUS_KEY_o, 0x00F5,
--IBUS_KEY_asciitilde, IBUS_KEY_u, 0x0169,
--IBUS_KEY_asciitilde, IBUS_KEY_v, 0x1E7D,
--IBUS_KEY_asciitilde, IBUS_KEY_y, 0x1EF9,
--IBUS_KEY_asciitilde, IBUS_KEY_bar, 0x236D,
--IBUS_KEY_asciitilde, IBUS_KEY_diaeresis, 0x2368,
--IBUS_KEY_asciitilde, IBUS_KEY_Acircumflex, 0x1EAA,
--IBUS_KEY_asciitilde, IBUS_KEY_Ecircumflex, 0x1EC4,
--IBUS_KEY_asciitilde, IBUS_KEY_Ocircumflex, 0x1ED6,
--IBUS_KEY_asciitilde, IBUS_KEY_acircumflex, 0x1EAB,
--IBUS_KEY_asciitilde, IBUS_KEY_ecircumflex, 0x1EC5,
--IBUS_KEY_asciitilde, IBUS_KEY_ocircumflex, 0x1ED7,
--IBUS_KEY_asciitilde, IBUS_KEY_Abreve, 0x1EB4,
--IBUS_KEY_asciitilde, IBUS_KEY_abreve, 0x1EB5,
--IBUS_KEY_asciitilde, IBUS_KEY_Greek_iotadieresis, 0x1FD7,
--IBUS_KEY_asciitilde, IBUS_KEY_Greek_upsilondieresis, 0x1FE7,
--IBUS_KEY_asciitilde, IBUS_KEY_Greek_alpha, 0x1FB6,
--IBUS_KEY_asciitilde, IBUS_KEY_Greek_eta, 0x1FC6,
--IBUS_KEY_asciitilde, IBUS_KEY_Greek_iota, 0x1FD6,
--IBUS_KEY_asciitilde, IBUS_KEY_Greek_upsilon, 0x1FE6,
--IBUS_KEY_asciitilde, IBUS_KEY_Greek_omega, 0x1FF6,
--IBUS_KEY_asciitilde, 0x1F00, 0x1F06,
--IBUS_KEY_asciitilde, 0x1F01, 0x1F07,
--IBUS_KEY_asciitilde, 0x1F08, 0x1F0E,
--IBUS_KEY_asciitilde, 0x1F09, 0x1F0F,
--IBUS_KEY_asciitilde, 0x1F20, 0x1F26,
--IBUS_KEY_asciitilde, 0x1F21, 0x1F27,
--IBUS_KEY_asciitilde, 0x1F28, 0x1F2E,
--IBUS_KEY_asciitilde, 0x1F29, 0x1F2F,
--IBUS_KEY_asciitilde, 0x1F30, 0x1F36,
--IBUS_KEY_asciitilde, 0x1F31, 0x1F37,
--IBUS_KEY_asciitilde, 0x1F38, 0x1F3E,
--IBUS_KEY_asciitilde, 0x1F39, 0x1F3F,
--IBUS_KEY_asciitilde, 0x1F50, 0x1F56,
--IBUS_KEY_asciitilde, 0x1F51, 0x1F57,
--IBUS_KEY_asciitilde, 0x1F59, 0x1F5F,
--IBUS_KEY_asciitilde, 0x1F60, 0x1F66,
--IBUS_KEY_asciitilde, 0x1F61, 0x1F67,
--IBUS_KEY_asciitilde, 0x1F68, 0x1F6E,
--IBUS_KEY_asciitilde, 0x1F69, 0x1F6F,
--IBUS_KEY_asciitilde, 0x2207, 0x236B,
--IBUS_KEY_asciitilde, 0x2227, 0x2372,
--IBUS_KEY_asciitilde, 0x2228, 0x2371,
--IBUS_KEY_diaeresis, IBUS_KEY_apostrophe, 0x0385,
--IBUS_KEY_diaeresis, IBUS_KEY_asterisk, 0x2363,
--IBUS_KEY_diaeresis, IBUS_KEY_greater, 0x2369,
--IBUS_KEY_diaeresis, IBUS_KEY_A, 0x00C4,
--IBUS_KEY_diaeresis, IBUS_KEY_E, 0x00CB,
--IBUS_KEY_diaeresis, IBUS_KEY_I, 0x00CF,
--IBUS_KEY_diaeresis, IBUS_KEY_O, 0x00D6,
--IBUS_KEY_diaeresis, IBUS_KEY_U, 0x00DC,
--IBUS_KEY_diaeresis, IBUS_KEY_Y, 0x0178,
--IBUS_KEY_diaeresis, IBUS_KEY_grave, 0x1FED,
--IBUS_KEY_diaeresis, IBUS_KEY_a, 0x00E4,
--IBUS_KEY_diaeresis, IBUS_KEY_e, 0x00EB,
--IBUS_KEY_diaeresis, IBUS_KEY_i, 0x00EF,
--IBUS_KEY_diaeresis, IBUS_KEY_o, 0x00F6,
--IBUS_KEY_diaeresis, IBUS_KEY_u, 0x00FC,
--IBUS_KEY_diaeresis, IBUS_KEY_y, 0x00FF,
--IBUS_KEY_diaeresis, IBUS_KEY_asciitilde, 0x1FC1,
--IBUS_KEY_diaeresis, IBUS_KEY_acute, 0x0385,
--IBUS_KEY_diaeresis, 0x2207, 0x2362,
--IBUS_KEY_diaeresis, 0x2218, 0x2364,
--IBUS_KEY_diaeresis, IBUS_KEY_uptack, 0x2361,
--IBUS_KEY_diaeresis, IBUS_KEY_emopencircle, 0x2365,
--IBUS_KEY_diaeresis, IBUS_KEY_dead_grave, 0x1FED,
--IBUS_KEY_diaeresis, IBUS_KEY_dead_acute, 0x0385,
--IBUS_KEY_diaeresis, IBUS_KEY_dead_tilde, 0x1FC1,
--IBUS_KEY_macron, IBUS_KEY_A, 0x0100,
--IBUS_KEY_macron, IBUS_KEY_E, 0x0112,
--IBUS_KEY_macron, IBUS_KEY_G, 0x1E20,
--IBUS_KEY_macron, IBUS_KEY_I, 0x012A,
--IBUS_KEY_macron, IBUS_KEY_O, 0x014C,
--IBUS_KEY_macron, IBUS_KEY_U, 0x016A,
--IBUS_KEY_macron, IBUS_KEY_Y, 0x0232,
--IBUS_KEY_macron, IBUS_KEY_a, 0x0101,
--IBUS_KEY_macron, IBUS_KEY_e, 0x0113,
--IBUS_KEY_macron, IBUS_KEY_g, 0x1E21,
--IBUS_KEY_macron, IBUS_KEY_i, 0x012B,
--IBUS_KEY_macron, IBUS_KEY_o, 0x014D,
--IBUS_KEY_macron, IBUS_KEY_u, 0x016B,
--IBUS_KEY_macron, IBUS_KEY_y, 0x0233,
--IBUS_KEY_macron, IBUS_KEY_Adiaeresis, 0x01DE,
--IBUS_KEY_macron, IBUS_KEY_AE, 0x01E2,
--IBUS_KEY_macron, IBUS_KEY_Otilde, 0x022C,
--IBUS_KEY_macron, IBUS_KEY_Odiaeresis, 0x022A,
--IBUS_KEY_macron, IBUS_KEY_Udiaeresis, 0x01D5,
--IBUS_KEY_macron, IBUS_KEY_adiaeresis, 0x01DF,
--IBUS_KEY_macron, IBUS_KEY_ae, 0x01E3,
--IBUS_KEY_macron, IBUS_KEY_otilde, 0x022D,
--IBUS_KEY_macron, IBUS_KEY_odiaeresis, 0x022B,
--IBUS_KEY_macron, IBUS_KEY_udiaeresis, 0x01D6,
--IBUS_KEY_macron, 0x01EA, 0x01EC,
--IBUS_KEY_macron, 0x01EB, 0x01ED,
--IBUS_KEY_macron, 0x0226, 0x01E0,
--IBUS_KEY_macron, 0x0227, 0x01E1,
--IBUS_KEY_macron, 0x022E, 0x0230,
--IBUS_KEY_macron, 0x022F, 0x0231,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_i, 0x04E3,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_u, 0x04EF,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_I, 0x04E2,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_U, 0x04EE,
--IBUS_KEY_macron, IBUS_KEY_Greek_ALPHA, 0x1FB9,
--IBUS_KEY_macron, IBUS_KEY_Greek_IOTA, 0x1FD9,
--IBUS_KEY_macron, IBUS_KEY_Greek_UPSILON, 0x1FE9,
--IBUS_KEY_macron, IBUS_KEY_Greek_alpha, 0x1FB1,
--IBUS_KEY_macron, IBUS_KEY_Greek_iota, 0x1FD1,
--IBUS_KEY_macron, IBUS_KEY_Greek_upsilon, 0x1FE1,
--IBUS_KEY_macron, 0x1E36, 0x1E38,
--IBUS_KEY_macron, 0x1E37, 0x1E39,
--IBUS_KEY_macron, 0x1E5A, 0x1E5C,
--IBUS_KEY_macron, 0x1E5B, 0x1E5D,
--IBUS_KEY_macron, IBUS_KEY_uptack, 0x2351,
--IBUS_KEY_acute, IBUS_KEY_A, 0x00C1,
--IBUS_KEY_acute, IBUS_KEY_C, 0x0106,
--IBUS_KEY_acute, IBUS_KEY_E, 0x00C9,
--IBUS_KEY_acute, IBUS_KEY_G, 0x01F4,
--IBUS_KEY_acute, IBUS_KEY_I, 0x00CD,
--IBUS_KEY_acute, IBUS_KEY_K, 0x1E30,
--IBUS_KEY_acute, IBUS_KEY_L, 0x0139,
--IBUS_KEY_acute, IBUS_KEY_M, 0x1E3E,
--IBUS_KEY_acute, IBUS_KEY_N, 0x0143,
--IBUS_KEY_acute, IBUS_KEY_O, 0x00D3,
--IBUS_KEY_acute, IBUS_KEY_P, 0x1E54,
--IBUS_KEY_acute, IBUS_KEY_R, 0x0154,
--IBUS_KEY_acute, IBUS_KEY_S, 0x015A,
--IBUS_KEY_acute, IBUS_KEY_U, 0x00DA,
--IBUS_KEY_acute, IBUS_KEY_W, 0x1E82,
--IBUS_KEY_acute, IBUS_KEY_Y, 0x00DD,
--IBUS_KEY_acute, IBUS_KEY_Z, 0x0179,
--IBUS_KEY_acute, IBUS_KEY_a, 0x00E1,
--IBUS_KEY_acute, IBUS_KEY_c, 0x0107,
--IBUS_KEY_acute, IBUS_KEY_e, 0x00E9,
--IBUS_KEY_acute, IBUS_KEY_g, 0x01F5,
--IBUS_KEY_acute, IBUS_KEY_i, 0x00ED,
--IBUS_KEY_acute, IBUS_KEY_k, 0x1E31,
--IBUS_KEY_acute, IBUS_KEY_l, 0x013A,
--IBUS_KEY_acute, IBUS_KEY_m, 0x1E3F,
--IBUS_KEY_acute, IBUS_KEY_n, 0x0144,
--IBUS_KEY_acute, IBUS_KEY_o, 0x00F3,
--IBUS_KEY_acute, IBUS_KEY_p, 0x1E55,
--IBUS_KEY_acute, IBUS_KEY_r, 0x0155,
--IBUS_KEY_acute, IBUS_KEY_s, 0x015B,
--IBUS_KEY_acute, IBUS_KEY_u, 0x00FA,
--IBUS_KEY_acute, IBUS_KEY_w, 0x1E83,
--IBUS_KEY_acute, IBUS_KEY_y, 0x00FD,
--IBUS_KEY_acute, IBUS_KEY_z, 0x017A,
--IBUS_KEY_acute, IBUS_KEY_Acircumflex, 0x1EA4,
--IBUS_KEY_acute, IBUS_KEY_Aring, 0x01FA,
--IBUS_KEY_acute, IBUS_KEY_AE, 0x01FC,
--IBUS_KEY_acute, IBUS_KEY_Ccedilla, 0x1E08,
--IBUS_KEY_acute, IBUS_KEY_Ecircumflex, 0x1EBE,
--IBUS_KEY_acute, IBUS_KEY_Idiaeresis, 0x1E2E,
--IBUS_KEY_acute, IBUS_KEY_Ocircumflex, 0x1ED0,
--IBUS_KEY_acute, IBUS_KEY_Otilde, 0x1E4C,
--IBUS_KEY_acute, IBUS_KEY_Ooblique, 0x01FE,
--IBUS_KEY_acute, IBUS_KEY_Udiaeresis, 0x01D7,
--IBUS_KEY_acute, IBUS_KEY_acircumflex, 0x1EA5,
--IBUS_KEY_acute, IBUS_KEY_aring, 0x01FB,
--IBUS_KEY_acute, IBUS_KEY_ae, 0x01FD,
--IBUS_KEY_acute, IBUS_KEY_ccedilla, 0x1E09,
--IBUS_KEY_acute, IBUS_KEY_ecircumflex, 0x1EBF,
--IBUS_KEY_acute, IBUS_KEY_idiaeresis, 0x1E2F,
--IBUS_KEY_acute, IBUS_KEY_ocircumflex, 0x1ED1,
--IBUS_KEY_acute, IBUS_KEY_otilde, 0x1E4D,
--IBUS_KEY_acute, IBUS_KEY_oslash, 0x01FF,
--IBUS_KEY_acute, IBUS_KEY_udiaeresis, 0x01D8,
--IBUS_KEY_acute, IBUS_KEY_Abreve, 0x1EAE,
--IBUS_KEY_acute, IBUS_KEY_abreve, 0x1EAF,
--IBUS_KEY_acute, IBUS_KEY_Emacron, 0x1E16,
--IBUS_KEY_acute, IBUS_KEY_emacron, 0x1E17,
--IBUS_KEY_acute, IBUS_KEY_Omacron, 0x1E52,
--IBUS_KEY_acute, IBUS_KEY_Utilde, 0x1E78,
--IBUS_KEY_acute, IBUS_KEY_omacron, 0x1E53,
--IBUS_KEY_acute, IBUS_KEY_utilde, 0x1E79,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_ghe, 0x0453,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_ka, 0x045C,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_GHE, 0x0403,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_KA, 0x040C,
--IBUS_KEY_acute, IBUS_KEY_Greek_iotadieresis, 0x0390,
--IBUS_KEY_acute, IBUS_KEY_Greek_upsilondieresis, 0x03B0,
--IBUS_KEY_acute, IBUS_KEY_Greek_ALPHA, 0x0386,
--IBUS_KEY_acute, IBUS_KEY_Greek_EPSILON, 0x0388,
--IBUS_KEY_acute, IBUS_KEY_Greek_ETA, 0x0389,
--IBUS_KEY_acute, IBUS_KEY_Greek_IOTA, 0x038A,
--IBUS_KEY_acute, IBUS_KEY_Greek_OMICRON, 0x038C,
--IBUS_KEY_acute, IBUS_KEY_Greek_UPSILON, 0x038E,
--IBUS_KEY_acute, IBUS_KEY_Greek_OMEGA, 0x038F,
--IBUS_KEY_acute, IBUS_KEY_Greek_alpha, 0x03AC,
--IBUS_KEY_acute, IBUS_KEY_Greek_epsilon, 0x03AD,
--IBUS_KEY_acute, IBUS_KEY_Greek_eta, 0x03AE,
--IBUS_KEY_acute, IBUS_KEY_Greek_iota, 0x03AF,
--IBUS_KEY_acute, IBUS_KEY_Greek_omicron, 0x03CC,
--IBUS_KEY_acute, IBUS_KEY_Greek_upsilon, 0x03CD,
--IBUS_KEY_acute, IBUS_KEY_Greek_omega, 0x03CE,
--IBUS_KEY_acute, 0x1F00, 0x1F04,
--IBUS_KEY_acute, 0x1F01, 0x1F05,
--IBUS_KEY_acute, 0x1F08, 0x1F0C,
--IBUS_KEY_acute, 0x1F09, 0x1F0D,
--IBUS_KEY_acute, 0x1F10, 0x1F14,
--IBUS_KEY_acute, 0x1F11, 0x1F15,
--IBUS_KEY_acute, 0x1F18, 0x1F1C,
--IBUS_KEY_acute, 0x1F19, 0x1F1D,
--IBUS_KEY_acute, 0x1F20, 0x1F24,
--IBUS_KEY_acute, 0x1F21, 0x1F25,
--IBUS_KEY_acute, 0x1F28, 0x1F2C,
--IBUS_KEY_acute, 0x1F29, 0x1F2D,
--IBUS_KEY_acute, 0x1F30, 0x1F34,
--IBUS_KEY_acute, 0x1F31, 0x1F35,
--IBUS_KEY_acute, 0x1F38, 0x1F3C,
--IBUS_KEY_acute, 0x1F39, 0x1F3D,
--IBUS_KEY_acute, 0x1F40, 0x1F44,
--IBUS_KEY_acute, 0x1F41, 0x1F45,
--IBUS_KEY_acute, 0x1F48, 0x1F4C,
--IBUS_KEY_acute, 0x1F49, 0x1F4D,
--IBUS_KEY_acute, 0x1F50, 0x1F54,
--IBUS_KEY_acute, 0x1F51, 0x1F55,
--IBUS_KEY_acute, 0x1F59, 0x1F5D,
--IBUS_KEY_acute, 0x1F60, 0x1F64,
--IBUS_KEY_acute, 0x1F61, 0x1F65,
--IBUS_KEY_acute, 0x1F68, 0x1F6C,
--IBUS_KEY_acute, 0x1F69, 0x1F6D,
--IBUS_KEY_cedilla, IBUS_KEY_C, 0x00C7,
--IBUS_KEY_cedilla, IBUS_KEY_D, 0x1E10,
--IBUS_KEY_cedilla, IBUS_KEY_E, 0x0228,
--IBUS_KEY_cedilla, IBUS_KEY_G, 0x0122,
--IBUS_KEY_cedilla, IBUS_KEY_H, 0x1E28,
--IBUS_KEY_cedilla, IBUS_KEY_K, 0x0136,
--IBUS_KEY_cedilla, IBUS_KEY_L, 0x013B,
--IBUS_KEY_cedilla, IBUS_KEY_N, 0x0145,
--IBUS_KEY_cedilla, IBUS_KEY_R, 0x0156,
--IBUS_KEY_cedilla, IBUS_KEY_S, 0x015E,
--IBUS_KEY_cedilla, IBUS_KEY_T, 0x0162,
--IBUS_KEY_cedilla, IBUS_KEY_c, 0x00E7,
--IBUS_KEY_cedilla, IBUS_KEY_d, 0x1E11,
--IBUS_KEY_cedilla, IBUS_KEY_e, 0x0229,
--IBUS_KEY_cedilla, IBUS_KEY_g, 0x0123,
--IBUS_KEY_cedilla, IBUS_KEY_h, 0x1E29,
--IBUS_KEY_cedilla, IBUS_KEY_k, 0x0137,
--IBUS_KEY_cedilla, IBUS_KEY_l, 0x013C,
--IBUS_KEY_cedilla, IBUS_KEY_n, 0x0146,
--IBUS_KEY_cedilla, IBUS_KEY_r, 0x0157,
--IBUS_KEY_cedilla, IBUS_KEY_s, 0x015F,
--IBUS_KEY_cedilla, IBUS_KEY_t, 0x0163,
--IBUS_KEY_division, 0x2395, 0x2339,
--IBUS_KEY_breve, IBUS_KEY_G, 0x011E,
--IBUS_KEY_breve, IBUS_KEY_g, 0x011F,
--0x05B4, IBUS_KEY_hebrew_yod, 0xFB1D,
--0x05B7, 0x05F2, 0xFB1F,
--0x05B7, IBUS_KEY_hebrew_aleph, 0xFB2E,
--0x05B8, IBUS_KEY_hebrew_aleph, 0xFB2F,
--0x05B9, IBUS_KEY_hebrew_waw, 0xFB4B,
--0x05BC, IBUS_KEY_hebrew_aleph, 0xFB30,
--0x05BC, IBUS_KEY_hebrew_bet, 0xFB31,
--0x05BC, IBUS_KEY_hebrew_gimel, 0xFB32,
--0x05BC, IBUS_KEY_hebrew_dalet, 0xFB33,
--0x05BC, IBUS_KEY_hebrew_he, 0xFB34,
--0x05BC, IBUS_KEY_hebrew_waw, 0xFB35,
--0x05BC, IBUS_KEY_hebrew_zain, 0xFB36,
--0x05BC, IBUS_KEY_hebrew_tet, 0xFB38,
--0x05BC, IBUS_KEY_hebrew_yod, 0xFB39,
--0x05BC, IBUS_KEY_hebrew_finalkaph, 0xFB3A,
--0x05BC, IBUS_KEY_hebrew_kaph, 0xFB3B,
--0x05BC, IBUS_KEY_hebrew_lamed, 0xFB3C,
--0x05BC, IBUS_KEY_hebrew_mem, 0xFB3E,
--0x05BC, IBUS_KEY_hebrew_nun, 0xFB40,
--0x05BC, IBUS_KEY_hebrew_samech, 0xFB41,
--0x05BC, IBUS_KEY_hebrew_finalpe, 0xFB43,
--0x05BC, IBUS_KEY_hebrew_pe, 0xFB44,
--0x05BC, IBUS_KEY_hebrew_zade, 0xFB46,
--0x05BC, IBUS_KEY_hebrew_kuf, 0xFB47,
--0x05BC, IBUS_KEY_hebrew_resh, 0xFB48,
--0x05BC, IBUS_KEY_hebrew_shin, 0xFB49,
--0x05BC, IBUS_KEY_hebrew_taf, 0xFB4A,
--0x05BF, IBUS_KEY_hebrew_bet, 0xFB4C,
--0x05BF, IBUS_KEY_hebrew_kaph, 0xFB4D,
--0x05BF, IBUS_KEY_hebrew_pe, 0xFB4E,
--0x05C1, IBUS_KEY_hebrew_shin, 0xFB2A,
--0x05C1, 0xFB49, 0xFB2C,
--0x05C2, IBUS_KEY_hebrew_shin, 0xFB2B,
--0x05C2, 0xFB49, 0xFB2D,
--0x0653, IBUS_KEY_Arabic_alef, 0x0622,
--0x0654, IBUS_KEY_Arabic_alef, 0x0623,
--0x0654, IBUS_KEY_Arabic_waw, 0x0624,
--0x0654, IBUS_KEY_Arabic_yeh, 0x0626,
--0x0654, 0x06C1, 0x06C2,
--0x0654, 0x06D2, 0x06D3,
--0x0654, 0x06D5, 0x06C0,
--0x0655, IBUS_KEY_Arabic_alef, 0x0625,
--IBUS_KEY_Cyrillic_pe, IBUS_KEY_Cyrillic_a, 0x00A7,
--IBUS_KEY_Cyrillic_IE, IBUS_KEY_equal, 0x20AC,
--IBUS_KEY_Cyrillic_EN, IBUS_KEY_Cyrillic_o, 0x2116,
--IBUS_KEY_Cyrillic_EN, IBUS_KEY_Cyrillic_O, 0x2116,
--IBUS_KEY_Cyrillic_ES, IBUS_KEY_equal, 0x20AC,
--IBUS_KEY_Greek_ALPHA, IBUS_KEY_apostrophe, 0x0386,
--IBUS_KEY_Greek_EPSILON, IBUS_KEY_apostrophe, 0x0388,
--IBUS_KEY_Greek_ETA, IBUS_KEY_apostrophe, 0x0389,
--IBUS_KEY_Greek_IOTA, IBUS_KEY_quotedbl, 0x03AA,
--IBUS_KEY_Greek_IOTA, IBUS_KEY_apostrophe, 0x038A,
--IBUS_KEY_Greek_OMICRON, IBUS_KEY_apostrophe, 0x038C,
--IBUS_KEY_Greek_UPSILON, IBUS_KEY_quotedbl, 0x03AB,
--IBUS_KEY_Greek_UPSILON, IBUS_KEY_apostrophe, 0x038E,
--IBUS_KEY_Greek_OMEGA, IBUS_KEY_apostrophe, 0x038F,
--IBUS_KEY_Greek_alpha, IBUS_KEY_apostrophe, 0x03AC,
--IBUS_KEY_Greek_epsilon, IBUS_KEY_apostrophe, 0x03AD,
--IBUS_KEY_Greek_eta, IBUS_KEY_apostrophe, 0x03AE,
--IBUS_KEY_Greek_iota, IBUS_KEY_quotedbl, 0x03CA,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x03AF,
--IBUS_KEY_Greek_iota, IBUS_KEY_Greek_alphaaccent, 0x1FB4,
--IBUS_KEY_Greek_iota, IBUS_KEY_Greek_etaaccent, 0x1FC4,
--IBUS_KEY_Greek_iota, IBUS_KEY_Greek_omegaaccent, 0x1FF4,
--IBUS_KEY_Greek_iota, IBUS_KEY_Greek_ALPHA, 0x1FBC,
--IBUS_KEY_Greek_iota, IBUS_KEY_Greek_ETA, 0x1FCC,
--IBUS_KEY_Greek_iota, IBUS_KEY_Greek_OMEGA, 0x1FFC,
--IBUS_KEY_Greek_iota, IBUS_KEY_Greek_alpha, 0x1FB3,
--IBUS_KEY_Greek_iota, IBUS_KEY_Greek_eta, 0x1FC3,
--IBUS_KEY_Greek_iota, IBUS_KEY_Greek_omega, 0x1FF3,
--IBUS_KEY_Greek_iota, 0x1F00, 0x1F80,
--IBUS_KEY_Greek_iota, 0x1F01, 0x1F81,
--IBUS_KEY_Greek_iota, 0x1F02, 0x1F82,
--IBUS_KEY_Greek_iota, 0x1F03, 0x1F83,
--IBUS_KEY_Greek_iota, 0x1F04, 0x1F84,
--IBUS_KEY_Greek_iota, 0x1F05, 0x1F85,
--IBUS_KEY_Greek_iota, 0x1F06, 0x1F86,
--IBUS_KEY_Greek_iota, 0x1F07, 0x1F87,
--IBUS_KEY_Greek_iota, 0x1F08, 0x1F88,
--IBUS_KEY_Greek_iota, 0x1F09, 0x1F89,
--IBUS_KEY_Greek_iota, 0x1F0A, 0x1F8A,
--IBUS_KEY_Greek_iota, 0x1F0B, 0x1F8B,
--IBUS_KEY_Greek_iota, 0x1F0C, 0x1F8C,
--IBUS_KEY_Greek_iota, 0x1F0D, 0x1F8D,
--IBUS_KEY_Greek_iota, 0x1F0E, 0x1F8E,
--IBUS_KEY_Greek_iota, 0x1F0F, 0x1F8F,
--IBUS_KEY_Greek_iota, 0x1F20, 0x1F90,
--IBUS_KEY_Greek_iota, 0x1F21, 0x1F91,
--IBUS_KEY_Greek_iota, 0x1F22, 0x1F92,
--IBUS_KEY_Greek_iota, 0x1F23, 0x1F93,
--IBUS_KEY_Greek_iota, 0x1F24, 0x1F94,
--IBUS_KEY_Greek_iota, 0x1F25, 0x1F95,
--IBUS_KEY_Greek_iota, 0x1F26, 0x1F96,
--IBUS_KEY_Greek_iota, 0x1F27, 0x1F97,
--IBUS_KEY_Greek_iota, 0x1F28, 0x1F98,
--IBUS_KEY_Greek_iota, 0x1F29, 0x1F99,
--IBUS_KEY_Greek_iota, 0x1F2A, 0x1F9A,
--IBUS_KEY_Greek_iota, 0x1F2B, 0x1F9B,
--IBUS_KEY_Greek_iota, 0x1F2C, 0x1F9C,
--IBUS_KEY_Greek_iota, 0x1F2D, 0x1F9D,
--IBUS_KEY_Greek_iota, 0x1F2E, 0x1F9E,
--IBUS_KEY_Greek_iota, 0x1F2F, 0x1F9F,
--IBUS_KEY_Greek_iota, 0x1F60, 0x1FA0,
--IBUS_KEY_Greek_iota, 0x1F61, 0x1FA1,
--IBUS_KEY_Greek_iota, 0x1F62, 0x1FA2,
--IBUS_KEY_Greek_iota, 0x1F63, 0x1FA3,
--IBUS_KEY_Greek_iota, 0x1F64, 0x1FA4,
--IBUS_KEY_Greek_iota, 0x1F65, 0x1FA5,
--IBUS_KEY_Greek_iota, 0x1F66, 0x1FA6,
--IBUS_KEY_Greek_iota, 0x1F67, 0x1FA7,
--IBUS_KEY_Greek_iota, 0x1F68, 0x1FA8,
--IBUS_KEY_Greek_iota, 0x1F69, 0x1FA9,
--IBUS_KEY_Greek_iota, 0x1F6A, 0x1FAA,
--IBUS_KEY_Greek_iota, 0x1F6B, 0x1FAB,
--IBUS_KEY_Greek_iota, 0x1F6C, 0x1FAC,
--IBUS_KEY_Greek_iota, 0x1F6D, 0x1FAD,
--IBUS_KEY_Greek_iota, 0x1F6E, 0x1FAE,
--IBUS_KEY_Greek_iota, 0x1F6F, 0x1FAF,
--IBUS_KEY_Greek_iota, 0x1F70, 0x1FB2,
--IBUS_KEY_Greek_iota, 0x1F74, 0x1FC2,
--IBUS_KEY_Greek_iota, 0x1F7C, 0x1FF2,
--IBUS_KEY_Greek_iota, 0x1FB6, 0x1FB7,
--IBUS_KEY_Greek_iota, 0x1FC6, 0x1FC7,
--IBUS_KEY_Greek_iota, 0x1FF6, 0x1FF7,
--IBUS_KEY_Greek_omicron, IBUS_KEY_apostrophe, 0x03CC,
--IBUS_KEY_Greek_upsilon, IBUS_KEY_quotedbl, 0x03CB,
--IBUS_KEY_Greek_upsilon, IBUS_KEY_apostrophe, 0x03CD,
--IBUS_KEY_Greek_omega, IBUS_KEY_apostrophe, 0x03CE,
--IBUS_KEY_lessthanequal, 0x0338, 0x2270,
--IBUS_KEY_greaterthanequal, 0x0338, 0x2271,
--IBUS_KEY_approximate, 0x0338, 0x2247,
--IBUS_KEY_identical, 0x0338, 0x2262,
--IBUS_KEY_includedin, 0x0338, 0x2284,
--IBUS_KEY_includes, 0x0338, 0x2285,
--0x093C, 0x0915, 0x0958,
--0x093C, 0x0916, 0x0959,
--0x093C, 0x0917, 0x095A,
--0x093C, 0x091C, 0x095B,
--0x093C, 0x0921, 0x095C,
--0x093C, 0x0922, 0x095D,
--0x093C, 0x0928, 0x0929,
--0x093C, 0x092B, 0x095E,
--0x093C, 0x092F, 0x095F,
--0x093C, 0x0930, 0x0931,
--0x093C, 0x0933, 0x0934,
--0x09BC, 0x09A1, 0x09DC,
--0x09BC, 0x09A2, 0x09DD,
--0x09BC, 0x09AF, 0x09DF,
--0x09C7, 0x09BE, 0x09CB,
--0x09C7, 0x09D7, 0x09CC,
--0x0A3C, 0x0A16, 0x0A59,
--0x0A3C, 0x0A17, 0x0A5A,
--0x0A3C, 0x0A1C, 0x0A5B,
--0x0A3C, 0x0A2B, 0x0A5E,
--0x0A3C, 0x0A32, 0x0A33,
--0x0A3C, 0x0A38, 0x0A36,
--0x0B3C, 0x0B21, 0x0B5C,
--0x0B3C, 0x0B22, 0x0B5D,
--0x0B47, 0x0B3E, 0x0B4B,
--0x0B47, 0x0B56, 0x0B48,
--0x0B47, 0x0B57, 0x0B4C,
--IBUS_KEY_leftcaret, 0x0338, 0x226E,
--IBUS_KEY_rightcaret, 0x0338, 0x226F,
--IBUS_KEY_underbar, IBUS_KEY_parenleft, 0x208D,
--IBUS_KEY_underbar, IBUS_KEY_parenright, 0x208E,
--IBUS_KEY_underbar, IBUS_KEY_plus, 0x208A,
--IBUS_KEY_underbar, IBUS_KEY_0, 0x2080,
--IBUS_KEY_underbar, IBUS_KEY_1, 0x2081,
--IBUS_KEY_underbar, IBUS_KEY_2, 0x2082,
--IBUS_KEY_underbar, IBUS_KEY_3, 0x2083,
--IBUS_KEY_underbar, IBUS_KEY_4, 0x2084,
--IBUS_KEY_underbar, IBUS_KEY_5, 0x2085,
--IBUS_KEY_underbar, IBUS_KEY_6, 0x2086,
--IBUS_KEY_underbar, IBUS_KEY_7, 0x2087,
--IBUS_KEY_underbar, IBUS_KEY_8, 0x2088,
--IBUS_KEY_underbar, IBUS_KEY_9, 0x2089,
--IBUS_KEY_underbar, IBUS_KEY_equal, 0x208C,
--0x0BC6, 0x0BBE, 0x0BCA,
--0x0BC6, 0x0BD7, 0x0BCC,
--IBUS_KEY_underbar, 0x2212, 0x208B,
--IBUS_KEY_underbar, IBUS_KEY_KP_Space, 0x2082,
--IBUS_KEY_underbar, IBUS_KEY_KP_Add, 0x208A,
--IBUS_KEY_underbar, IBUS_KEY_KP_0, 0x2080,
--IBUS_KEY_underbar, IBUS_KEY_KP_1, 0x2081,
--IBUS_KEY_underbar, IBUS_KEY_KP_2, 0x2082,
--IBUS_KEY_underbar, IBUS_KEY_KP_3, 0x2083,
--IBUS_KEY_underbar, IBUS_KEY_KP_4, 0x2084,
--IBUS_KEY_underbar, IBUS_KEY_KP_5, 0x2085,
--IBUS_KEY_underbar, IBUS_KEY_KP_6, 0x2086,
--IBUS_KEY_underbar, IBUS_KEY_KP_7, 0x2087,
--IBUS_KEY_underbar, IBUS_KEY_KP_8, 0x2088,
--IBUS_KEY_underbar, IBUS_KEY_KP_9, 0x2089,
--IBUS_KEY_underbar, IBUS_KEY_KP_Equal, 0x208C,
--0x0BC7, 0x0BBE, 0x0BCB,
--0x0BD7, 0x0B92, 0x0B94,
--IBUS_KEY_rightshoe, 0x0338, 0x2285,
--IBUS_KEY_leftshoe, 0x0338, 0x2284,
--IBUS_KEY_righttack, 0x0338, 0x22AC,
--0x0C46, 0x0C56, 0x0C48,
--0x0CBF, 0x0CD5, 0x0CC0,
--0x0CC6, 0x0CC2, 0x0CCA,
--0x0CC6, 0x0CD5, 0x0CC7,
--0x0CC6, 0x0CD6, 0x0CC8,
--0x0CCA, 0x0CD5, 0x0CCB,
--0x0D46, 0x0D3E, 0x0D4A,
--0x0D46, 0x0D57, 0x0D4C,
--0x0D47, 0x0D3E, 0x0D4B,
--0x0DD9, 0x0DCA, 0x0DDA,
--0x0DD9, 0x0DCF, 0x0DDC,
--0x0DD9, 0x0DDF, 0x0DDE,
--0x0DDC, 0x0DCA, 0x0DDD,
--0x0F71, 0x0F72, 0x0F73,
--0x0F71, 0x0F74, 0x0F75,
--0x0F71, 0x0F80, 0x0F81,
--0x0F90, 0x0FB5, 0x0FB9,
--0x0F92, 0x0FB7, 0x0F93,
--0x0F9C, 0x0FB7, 0x0F9D,
--0x0FA1, 0x0FB7, 0x0FA2,
--0x0FA6, 0x0FB7, 0x0FA7,
--0x0FAB, 0x0FB7, 0x0FAC,
--0x0FB2, 0x0F80, 0x0F76,
--0x0FB3, 0x0F80, 0x0F78,
--0x0FB5, 0x0F40, 0x0F69,
--0x0FB7, 0x0F42, 0x0F43,
--0x0FB7, 0x0F4C, 0x0F4D,
--0x0FB7, 0x0F51, 0x0F52,
--0x0FB7, 0x0F56, 0x0F57,
--0x0FB7, 0x0F5B, 0x0F5C,
--0x102E, 0x1025, 0x1026,
--0x1100, 0x1100, 0x1101,
--0x1102, 0x1100, 0x1113,
--0x1102, 0x1102, 0x1114,
--0x1102, 0x1103, 0x1115,
--0x1102, 0x1107, 0x1116,
--0x1103, 0x1100, 0x1117,
--0x1103, 0x1103, 0x1104,
--0x1105, 0x1102, 0x1118,
--0x1105, 0x1105, 0x1119,
--0x1105, 0x110B, 0x111B,
--0x1105, 0x1112, 0x111A,
--0x1106, 0x1107, 0x111C,
--0x1106, 0x110B, 0x111D,
--0x1107, 0x1100, 0x111E,
--0x1107, 0x1102, 0x111F,
--0x1107, 0x1103, 0x1120,
--0x1107, 0x1107, 0x1108,
--0x1107, 0x1109, 0x1121,
--0x1107, 0x110A, 0x1125,
--0x1107, 0x110B, 0x112B,
--0x1107, 0x110C, 0x1127,
--0x1107, 0x110E, 0x1128,
--0x1107, 0x1110, 0x1129,
--0x1107, 0x1111, 0x112A,
--0x1107, 0x112B, 0x112C,
--0x1107, 0x112D, 0x1122,
--0x1107, 0x112F, 0x1123,
--0x1107, 0x1132, 0x1124,
--0x1107, 0x1136, 0x1126,
--0x1108, 0x110B, 0x112C,
--0x1109, 0x1100, 0x112D,
--0x1109, 0x1102, 0x112E,
--0x1109, 0x1103, 0x112F,
--0x1109, 0x1105, 0x1130,
--0x1109, 0x1106, 0x1131,
--0x1109, 0x1107, 0x1132,
--0x1109, 0x1109, 0x110A,
--0x1109, 0x110A, 0x1134,
--0x1109, 0x110B, 0x1135,
--0x1109, 0x110C, 0x1136,
--0x1109, 0x110E, 0x1137,
--0x1109, 0x110F, 0x1138,
--0x1109, 0x1110, 0x1139,
--0x1109, 0x1111, 0x113A,
--0x1109, 0x1112, 0x113B,
--0x1109, 0x111E, 0x1133,
--0x110A, 0x1109, 0x1134,
--0x110B, 0x1100, 0x1141,
--0x110B, 0x1103, 0x1142,
--0x110B, 0x1106, 0x1143,
--0x110B, 0x1107, 0x1144,
--0x110B, 0x1109, 0x1145,
--0x110B, 0x110B, 0x1147,
--0x110B, 0x110C, 0x1148,
--0x110B, 0x110E, 0x1149,
--0x110B, 0x1110, 0x114A,
--0x110B, 0x1111, 0x114B,
--0x110B, 0x1140, 0x1146,
--0x110C, 0x110B, 0x114D,
--0x110C, 0x110C, 0x110D,
--0x110E, 0x110F, 0x1152,
--0x110E, 0x1112, 0x1153,
--0x1111, 0x1107, 0x1156,
--0x1111, 0x110B, 0x1157,
--0x1112, 0x1112, 0x1158,
--0x1121, 0x1100, 0x1122,
--0x1121, 0x1103, 0x1123,
--0x1121, 0x1107, 0x1124,
--0x1121, 0x1109, 0x1125,
--0x1121, 0x110C, 0x1126,
--0x1132, 0x1100, 0x1133,
--0x113C, 0x113C, 0x113D,
--0x113E, 0x113E, 0x113F,
--0x114E, 0x114E, 0x114F,
--0x1150, 0x1150, 0x1151,
--0x1161, 0x1169, 0x1176,
--0x1161, 0x116E, 0x1177,
--0x1161, 0x1175, 0x1162,
--0x1163, 0x1169, 0x1178,
--0x1163, 0x116D, 0x1179,
--0x1163, 0x1175, 0x1164,
--0x1165, 0x1169, 0x117A,
--0x1165, 0x116E, 0x117B,
--0x1165, 0x1173, 0x117C,
--0x1165, 0x1175, 0x1166,
--0x1167, 0x1169, 0x117D,
--0x1167, 0x116E, 0x117E,
--0x1167, 0x1175, 0x1168,
--0x1169, 0x1161, 0x116A,
--0x1169, 0x1162, 0x116B,
--0x1169, 0x1165, 0x117F,
--0x1169, 0x1166, 0x1180,
--0x1169, 0x1168, 0x1181,
--0x1169, 0x1169, 0x1182,
--0x1169, 0x116E, 0x1183,
--0x1169, 0x1175, 0x116C,
--0x116A, 0x1175, 0x116B,
--0x116D, 0x1163, 0x1184,
--0x116D, 0x1164, 0x1185,
--0x116D, 0x1167, 0x1186,
--0x116D, 0x1169, 0x1187,
--0x116D, 0x1175, 0x1188,
--0x116E, 0x1161, 0x1189,
--0x116E, 0x1162, 0x118A,
--0x116E, 0x1165, 0x116F,
--0x116E, 0x1166, 0x1170,
--0x116E, 0x1168, 0x118C,
--0x116E, 0x116E, 0x118D,
--0x116E, 0x1175, 0x1171,
--0x116E, 0x117C, 0x118B,
--0x116F, 0x1173, 0x118B,
--0x116F, 0x1175, 0x1170,
--0x1172, 0x1161, 0x118E,
--0x1172, 0x1165, 0x118F,
--0x1172, 0x1166, 0x1190,
--0x1172, 0x1167, 0x1191,
--0x1172, 0x1168, 0x1192,
--0x1172, 0x116E, 0x1193,
--0x1172, 0x1175, 0x1194,
--0x1173, 0x116E, 0x1195,
--0x1173, 0x1173, 0x1196,
--0x1173, 0x1175, 0x1174,
--0x1174, 0x116E, 0x1197,
--0x1175, 0x1161, 0x1198,
--0x1175, 0x1163, 0x1199,
--0x1175, 0x1169, 0x119A,
--0x1175, 0x116E, 0x119B,
--0x1175, 0x1173, 0x119C,
--0x1175, 0x119E, 0x119D,
--0x119E, 0x1165, 0x119F,
--0x119E, 0x116E, 0x11A0,
--0x119E, 0x1175, 0x11A1,
--0x119E, 0x119E, 0x11A2,
--0x11A8, 0x11A8, 0x11A9,
--0x11A8, 0x11AF, 0x11C3,
--0x11A8, 0x11BA, 0x11AA,
--0x11A8, 0x11E7, 0x11C4,
--0x11AA, 0x11A8, 0x11C4,
--0x11AB, 0x11A8, 0x11C5,
--0x11AB, 0x11AE, 0x11C6,
--0x11AB, 0x11BA, 0x11C7,
--0x11AB, 0x11BD, 0x11AC,
--0x11AB, 0x11C0, 0x11C9,
--0x11AB, 0x11C2, 0x11AD,
--0x11AB, 0x11EB, 0x11C8,
--0x11AE, 0x11A8, 0x11CA,
--0x11AE, 0x11AF, 0x11CB,
--0x11AF, 0x11A8, 0x11B0,
--0x11AF, 0x11AA, 0x11CC,
--0x11AF, 0x11AB, 0x11CD,
--0x11AF, 0x11AE, 0x11CE,
--0x11AF, 0x11AF, 0x11D0,
--0x11AF, 0x11B7, 0x11B1,
--0x11AF, 0x11B8, 0x11B2,
--0x11AF, 0x11B9, 0x11D3,
--0x11AF, 0x11BA, 0x11B3,
--0x11AF, 0x11BB, 0x11D6,
--0x11AF, 0x11BF, 0x11D8,
--0x11AF, 0x11C0, 0x11B4,
--0x11AF, 0x11C1, 0x11B5,
--0x11AF, 0x11C2, 0x11B6,
--0x11AF, 0x11DA, 0x11D1,
--0x11AF, 0x11DD, 0x11D2,
--0x11AF, 0x11E5, 0x11D4,
--0x11AF, 0x11E6, 0x11D5,
--0x11AF, 0x11EB, 0x11D7,
--0x11AF, 0x11F9, 0x11D9,
--0x11B0, 0x11BA, 0x11CC,
--0x11B1, 0x11A8, 0x11D1,
--0x11B1, 0x11BA, 0x11D2,
--0x11B2, 0x11BA, 0x11D3,
--0x11B2, 0x11BC, 0x11D5,
--0x11B2, 0x11C2, 0x11D4,
--0x11B3, 0x11BA, 0x11D6,
--0x11B7, 0x11A8, 0x11DA,
--0x11B7, 0x11AF, 0x11DB,
--0x11B7, 0x11B8, 0x11DC,
--0x11B7, 0x11BA, 0x11DD,
--0x11B7, 0x11BB, 0x11DE,
--0x11B7, 0x11BC, 0x11E2,
--0x11B7, 0x11BE, 0x11E0,
--0x11B7, 0x11C2, 0x11E1,
--0x11B7, 0x11EB, 0x11DF,
--0x11B8, 0x11AF, 0x11E3,
--0x11B8, 0x11BA, 0x11B9,
--0x11B8, 0x11BC, 0x11E6,
--0x11B8, 0x11C1, 0x11E4,
--0x11B8, 0x11C2, 0x11E5,
--0x11BA, 0x11A8, 0x11E7,
--0x11BA, 0x11AE, 0x11E8,
--0x11BA, 0x11AF, 0x11E9,
--0x11BA, 0x11B8, 0x11EA,
--0x11BA, 0x11BA, 0x11BB,
--0x11BC, 0x11A8, 0x11EC,
--0x11BC, 0x11A9, 0x11ED,
--0x11BC, 0x11BC, 0x11EE,
--0x11BC, 0x11BF, 0x11EF,
--0x11C1, 0x11B8, 0x11F3,
--0x11C1, 0x11BC, 0x11F4,
--0x11C2, 0x11AB, 0x11F5,
--0x11C2, 0x11AF, 0x11F6,
--0x11C2, 0x11B7, 0x11F7,
--0x11C2, 0x11B8, 0x11F8,
--0x11CE, 0x11C2, 0x11CF,
--0x11DD, 0x11BA, 0x11DE,
--0x11EC, 0x11A8, 0x11ED,
--0x11F0, 0x11BA, 0x11F1,
--0x11F0, 0x11EB, 0x11F2,
--0x1FBF, IBUS_KEY_apostrophe, 0x1FCE,
--0x1FBF, IBUS_KEY_grave, 0x1FCD,
--0x1FBF, IBUS_KEY_asciitilde, 0x1FCF,
--0x1FBF, IBUS_KEY_acute, 0x1FCE,
--0x1FBF, IBUS_KEY_dead_grave, 0x1FCD,
--0x1FBF, IBUS_KEY_dead_acute, 0x1FCE,
--0x1FBF, IBUS_KEY_dead_tilde, 0x1FCF,
--0x1FFE, IBUS_KEY_apostrophe, 0x1FDE,
--0x1FFE, IBUS_KEY_grave, 0x1FDD,
--0x1FFE, IBUS_KEY_asciitilde, 0x1FDF,
--0x1FFE, IBUS_KEY_acute, 0x1FDE,
--0x1FFE, IBUS_KEY_dead_grave, 0x1FDD,
--0x1FFE, IBUS_KEY_dead_acute, 0x1FDE,
--0x1FFE, IBUS_KEY_dead_tilde, 0x1FDF,
--0x2190, IBUS_KEY_bar, 0x2345,
--0x2190, 0x2395, 0x2347,
--0x2191, IBUS_KEY_minus, 0x234F,
--0x2191, 0x2395, 0x2350,
--0x2192, IBUS_KEY_bar, 0x2346,
--0x2192, 0x2395, 0x2348,
--0x2193, IBUS_KEY_minus, 0x2356,
--0x2193, 0x2395, 0x2357,
--0x2203, 0x0338, 0x2204,
--0x2206, IBUS_KEY_underscore, 0x2359,
--0x2206, IBUS_KEY_bar, 0x234B,
--0x2206, 0x2395, 0x234D,
--0x2207, IBUS_KEY_bar, 0x2352,
--0x2207, IBUS_KEY_asciitilde, 0x236B,
--0x2207, IBUS_KEY_diaeresis, 0x2362,
--0x2207, 0x2395, 0x2354,
--0x2208, 0x0338, 0x2209,
--0x220A, IBUS_KEY_underscore, 0x2377,
--0x220B, 0x0338, 0x220C,
--0x2218, IBUS_KEY_underscore, 0x235B,
--0x2218, IBUS_KEY_diaeresis, 0x2364,
--0x2218, 0x2229, 0x235D,
--0x2218, IBUS_KEY_uptack, 0x2355,
--0x2218, IBUS_KEY_downtack, 0x234E,
--0x2218, 0x2395, 0x233B,
--0x2218, IBUS_KEY_emopencircle, 0x233E,
--0x2223, 0x0338, 0x2224,
--0x2225, 0x0338, 0x2226,
--0x2227, IBUS_KEY_asciitilde, 0x2372,
--0x2227, 0x2228, 0x22C4,
--0x2227, 0x2395, 0x2353,
--0x2228, IBUS_KEY_asciitilde, 0x2371,
--0x2228, 0x2227, 0x22C4,
--0x2228, 0x2395, 0x234C,
--0x2229, 0x2218, 0x235D,
--IBUS_KEY_union, IBUS_KEY_bar, 0x2366,
--0x223C, 0x0338, 0x2241,
--0x2243, 0x0338, 0x2244,
--0x2248, 0x0338, 0x2249,
--0x224D, 0x0338, 0x226D,
--0x2260, IBUS_KEY_underscore, 0x2262,
--0x2260, 0x2395, 0x236F,
--0x2272, 0x0338, 0x2274,
--0x2273, 0x0338, 0x2275,
--0x2276, 0x0338, 0x2278,
--0x2277, 0x0338, 0x2279,
--0x227A, 0x0338, 0x2280,
--0x227B, 0x0338, 0x2281,
--0x227C, 0x0338, 0x22E0,
--0x227D, 0x0338, 0x22E1,
--0x2282, IBUS_KEY_underscore, 0x2286,
--0x2282, IBUS_KEY_bar, 0x2367,
--0x2283, IBUS_KEY_underscore, 0x2287,
--0x2286, 0x0338, 0x2288,
--0x2287, 0x0338, 0x2289,
--0x2291, 0x0338, 0x22E2,
--0x2292, 0x0338, 0x22E3,
--IBUS_KEY_uptack, IBUS_KEY_diaeresis, 0x2361,
--IBUS_KEY_uptack, IBUS_KEY_macron, 0x2351,
--IBUS_KEY_uptack, 0x2218, 0x2355,
--IBUS_KEY_uptack, IBUS_KEY_downtack, 0x2336,
--IBUS_KEY_downtack, IBUS_KEY_underscore, 0x234A,
--IBUS_KEY_downtack, 0x2218, 0x234E,
--IBUS_KEY_downtack, IBUS_KEY_uptack, 0x2336,
--0x22A8, 0x0338, 0x22AD,
--0x22A9, 0x0338, 0x22AE,
--0x22AB, 0x0338, 0x22AF,
--0x22B2, 0x0338, 0x22EA,
--0x22B3, 0x0338, 0x22EB,
--0x22B4, 0x0338, 0x22EC,
--0x22B5, 0x0338, 0x22ED,
--0x22C4, IBUS_KEY_underscore, 0x235A,
--0x22C4, 0x2395, 0x233A,
--0x2373, IBUS_KEY_underscore, 0x2378,
--0x2375, IBUS_KEY_underscore, 0x2379,
--0x237A, IBUS_KEY_underscore, 0x2376,
--0x2395, IBUS_KEY_apostrophe, 0x235E,
--0x2395, IBUS_KEY_slash, 0x2341,
--0x2395, IBUS_KEY_colon, 0x2360,
--0x2395, IBUS_KEY_less, 0x2343,
--0x2395, IBUS_KEY_equal, 0x2338,
--0x2395, IBUS_KEY_greater, 0x2344,
--0x2395, IBUS_KEY_question, 0x2370,
--0x2395, IBUS_KEY_backslash, 0x2342,
--0x2395, IBUS_KEY_division, 0x2339,
--0x2395, 0x2190, 0x2347,
--0x2395, 0x2191, 0x2350,
--0x2395, 0x2192, 0x2348,
--0x2395, 0x2193, 0x2357,
--0x2395, 0x2206, 0x234D,
--0x2395, 0x2207, 0x2354,
--0x2395, 0x2218, 0x233B,
--0x2395, 0x2227, 0x2353,
--0x2395, 0x2228, 0x234C,
--0x2395, 0x2260, 0x236F,
--0x2395, 0x22C4, 0x233A,
--0x2395, IBUS_KEY_emopencircle, 0x233C,
--IBUS_KEY_emopencircle, IBUS_KEY_asterisk, 0x235F,
--IBUS_KEY_emopencircle, IBUS_KEY_minus, 0x2296,
--IBUS_KEY_emopencircle, IBUS_KEY_period, 0x2299,
--IBUS_KEY_emopencircle, IBUS_KEY_backslash, 0x2349,
--IBUS_KEY_emopencircle, IBUS_KEY_underscore, 0x235C,
--IBUS_KEY_emopencircle, IBUS_KEY_bar, 0x233D,
--IBUS_KEY_emopencircle, IBUS_KEY_diaeresis, 0x2365,
--IBUS_KEY_emopencircle, 0x2218, 0x233E,
--IBUS_KEY_emopencircle, 0x2395, 0x233C,
--0x2ADD, 0x0338, 0x2ADC,
--IBUS_KEY_KP_Divide, IBUS_KEY_D, 0x0110,
--IBUS_KEY_KP_Divide, IBUS_KEY_G, 0x01E4,
--IBUS_KEY_KP_Divide, IBUS_KEY_H, 0x0126,
--IBUS_KEY_KP_Divide, IBUS_KEY_I, 0x0197,
--IBUS_KEY_KP_Divide, IBUS_KEY_L, 0x0141,
--IBUS_KEY_KP_Divide, IBUS_KEY_O, 0x00D8,
--IBUS_KEY_KP_Divide, IBUS_KEY_T, 0x0166,
--IBUS_KEY_KP_Divide, IBUS_KEY_Z, 0x01B5,
--IBUS_KEY_KP_Divide, IBUS_KEY_b, 0x0180,
--IBUS_KEY_KP_Divide, IBUS_KEY_d, 0x0111,
--IBUS_KEY_KP_Divide, IBUS_KEY_g, 0x01E5,
--IBUS_KEY_KP_Divide, IBUS_KEY_h, 0x0127,
--IBUS_KEY_KP_Divide, IBUS_KEY_i, 0x0268,
--IBUS_KEY_KP_Divide, IBUS_KEY_l, 0x0142,
--IBUS_KEY_KP_Divide, IBUS_KEY_o, 0x00F8,
--IBUS_KEY_KP_Divide, IBUS_KEY_t, 0x0167,
--IBUS_KEY_KP_Divide, IBUS_KEY_z, 0x01B6,
--IBUS_KEY_KP_Divide, 0x0294, 0x02A1,
--IBUS_KEY_KP_Divide, 0x04AE, 0x04B0,
--IBUS_KEY_KP_Divide, 0x04AF, 0x04B1,
--IBUS_KEY_KP_Divide, IBUS_KEY_Cyrillic_ghe, 0x0493,
--IBUS_KEY_KP_Divide, IBUS_KEY_Cyrillic_ka, 0x049F,
--IBUS_KEY_KP_Divide, IBUS_KEY_Cyrillic_GHE, 0x0492,
--IBUS_KEY_KP_Divide, IBUS_KEY_Cyrillic_KA, 0x049E,
--IBUS_KEY_KP_Divide, IBUS_KEY_leftarrow, 0x219A,
--IBUS_KEY_KP_Divide, IBUS_KEY_rightarrow, 0x219B,
--IBUS_KEY_KP_Divide, 0x2194, 0x21AE,
--IBUS_KEY_KP_Equal, 0x0338, 0x2260,
--IBUS_KEY_exclam, IBUS_KEY_plus, IBUS_KEY_O, 0x1EE2,
--IBUS_KEY_exclam, IBUS_KEY_plus, IBUS_KEY_U, 0x1EF0,
--IBUS_KEY_exclam, IBUS_KEY_plus, IBUS_KEY_o, 0x1EE3,
--IBUS_KEY_exclam, IBUS_KEY_plus, IBUS_KEY_u, 0x1EF1,
--IBUS_KEY_exclam, IBUS_KEY_dead_horn, IBUS_KEY_O, 0x1EE2,
--IBUS_KEY_exclam, IBUS_KEY_dead_horn, IBUS_KEY_U, 0x1EF0,
--IBUS_KEY_exclam, IBUS_KEY_dead_horn, IBUS_KEY_o, 0x1EE3,
--IBUS_KEY_exclam, IBUS_KEY_dead_horn, IBUS_KEY_u, 0x1EF1,
--IBUS_KEY_quotedbl, IBUS_KEY_apostrophe, IBUS_KEY_space, 0x0385,
--IBUS_KEY_quotedbl, IBUS_KEY_apostrophe, IBUS_KEY_Greek_iota, 0x0390,
--IBUS_KEY_quotedbl, IBUS_KEY_apostrophe, IBUS_KEY_Greek_upsilon, 0x03B0,
--IBUS_KEY_quotedbl, IBUS_KEY_underscore, IBUS_KEY_U, 0x1E7A,
--IBUS_KEY_quotedbl, IBUS_KEY_underscore, IBUS_KEY_u, 0x1E7B,
--IBUS_KEY_quotedbl, IBUS_KEY_asciitilde, IBUS_KEY_O, 0x1E4E,
--IBUS_KEY_quotedbl, IBUS_KEY_asciitilde, IBUS_KEY_o, 0x1E4F,
--IBUS_KEY_quotedbl, IBUS_KEY_macron, IBUS_KEY_U, 0x1E7A,
--IBUS_KEY_quotedbl, IBUS_KEY_macron, IBUS_KEY_u, 0x1E7B,
--IBUS_KEY_quotedbl, IBUS_KEY_dead_tilde, IBUS_KEY_O, 0x1E4E,
--IBUS_KEY_quotedbl, IBUS_KEY_dead_tilde, IBUS_KEY_o, 0x1E4F,
--IBUS_KEY_quotedbl, IBUS_KEY_dead_macron, IBUS_KEY_U, 0x1E7A,
--IBUS_KEY_quotedbl, IBUS_KEY_dead_macron, IBUS_KEY_u, 0x1E7B,
--IBUS_KEY_apostrophe, IBUS_KEY_quotedbl, IBUS_KEY_space, 0x0385,
--IBUS_KEY_apostrophe, IBUS_KEY_quotedbl, IBUS_KEY_I, 0x1E2E,
--IBUS_KEY_apostrophe, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01D7,
--IBUS_KEY_apostrophe, IBUS_KEY_quotedbl, IBUS_KEY_i, 0x1E2F,
--IBUS_KEY_apostrophe, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01D8,
--IBUS_KEY_apostrophe, IBUS_KEY_quotedbl, IBUS_KEY_Greek_iota, 0x0390,
--IBUS_KEY_apostrophe, IBUS_KEY_quotedbl, IBUS_KEY_Greek_upsilon, 0x03B0,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F0D,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_EPSILON, 0x1F1D,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F2D,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_IOTA, 0x1F3D,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMICRON, 0x1F4D,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_UPSILON, 0x1F5D,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1F6D,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F05,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_epsilon, 0x1F15,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F25,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_iota, 0x1F35,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_omicron, 0x1F45,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_upsilon, 0x1F55,
--IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1F65,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F0C,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_EPSILON, 0x1F1C,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F2C,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_IOTA, 0x1F3C,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_OMICRON, 0x1F4C,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1F6C,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F04,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_epsilon, 0x1F14,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F24,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_iota, 0x1F34,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_omicron, 0x1F44,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_upsilon, 0x1F54,
--IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1F64,
--IBUS_KEY_apostrophe, IBUS_KEY_plus, IBUS_KEY_O, 0x1EDA,
--IBUS_KEY_apostrophe, IBUS_KEY_plus, IBUS_KEY_U, 0x1EE8,
--IBUS_KEY_apostrophe, IBUS_KEY_plus, IBUS_KEY_o, 0x1EDB,
--IBUS_KEY_apostrophe, IBUS_KEY_plus, IBUS_KEY_u, 0x1EE9,
--IBUS_KEY_apostrophe, IBUS_KEY_slash, IBUS_KEY_O, 0x01FE,
--IBUS_KEY_apostrophe, IBUS_KEY_slash, IBUS_KEY_o, 0x01FF,
--IBUS_KEY_apostrophe, IBUS_KEY_asciicircum, IBUS_KEY_A, 0x1EA4,
--IBUS_KEY_apostrophe, IBUS_KEY_asciicircum, IBUS_KEY_E, 0x1EBE,
--IBUS_KEY_apostrophe, IBUS_KEY_asciicircum, IBUS_KEY_O, 0x1ED0,
--IBUS_KEY_apostrophe, IBUS_KEY_asciicircum, IBUS_KEY_a, 0x1EA5,
--IBUS_KEY_apostrophe, IBUS_KEY_asciicircum, IBUS_KEY_e, 0x1EBF,
--IBUS_KEY_apostrophe, IBUS_KEY_asciicircum, IBUS_KEY_o, 0x1ED1,
--IBUS_KEY_apostrophe, IBUS_KEY_underscore, IBUS_KEY_E, 0x1E16,
--IBUS_KEY_apostrophe, IBUS_KEY_underscore, IBUS_KEY_O, 0x1E52,
--IBUS_KEY_apostrophe, IBUS_KEY_underscore, IBUS_KEY_e, 0x1E17,
--IBUS_KEY_apostrophe, IBUS_KEY_underscore, IBUS_KEY_o, 0x1E53,
--IBUS_KEY_apostrophe, IBUS_KEY_b, IBUS_KEY_A, 0x1EAE,
--IBUS_KEY_apostrophe, IBUS_KEY_b, IBUS_KEY_a, 0x1EAF,
--IBUS_KEY_apostrophe, IBUS_KEY_asciitilde, IBUS_KEY_O, 0x1E4C,
--IBUS_KEY_apostrophe, IBUS_KEY_asciitilde, IBUS_KEY_U, 0x1E78,
--IBUS_KEY_apostrophe, IBUS_KEY_asciitilde, IBUS_KEY_o, 0x1E4D,
--IBUS_KEY_apostrophe, IBUS_KEY_asciitilde, IBUS_KEY_u, 0x1E79,
--IBUS_KEY_apostrophe, IBUS_KEY_macron, IBUS_KEY_E, 0x1E16,
--IBUS_KEY_apostrophe, IBUS_KEY_macron, IBUS_KEY_O, 0x1E52,
--IBUS_KEY_apostrophe, IBUS_KEY_macron, IBUS_KEY_e, 0x1E17,
--IBUS_KEY_apostrophe, IBUS_KEY_macron, IBUS_KEY_o, 0x1E53,
--IBUS_KEY_apostrophe, IBUS_KEY_cedilla, IBUS_KEY_C, 0x1E08,
--IBUS_KEY_apostrophe, IBUS_KEY_cedilla, IBUS_KEY_c, 0x1E09,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_circumflex, IBUS_KEY_A, 0x1EA4,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_circumflex, IBUS_KEY_E, 0x1EBE,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_circumflex, IBUS_KEY_O, 0x1ED0,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_circumflex, IBUS_KEY_a, 0x1EA5,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_circumflex, IBUS_KEY_e, 0x1EBF,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_circumflex, IBUS_KEY_o, 0x1ED1,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_tilde, IBUS_KEY_O, 0x1E4C,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_tilde, IBUS_KEY_U, 0x1E78,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_tilde, IBUS_KEY_o, 0x1E4D,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_tilde, IBUS_KEY_u, 0x1E79,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_macron, IBUS_KEY_E, 0x1E16,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_macron, IBUS_KEY_O, 0x1E52,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_macron, IBUS_KEY_e, 0x1E17,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_macron, IBUS_KEY_o, 0x1E53,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_breve, IBUS_KEY_A, 0x1EAE,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_breve, IBUS_KEY_a, 0x1EAF,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_diaeresis, IBUS_KEY_I, 0x1E2E,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_diaeresis, IBUS_KEY_U, 0x01D7,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_diaeresis, IBUS_KEY_i, 0x1E2F,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_diaeresis, IBUS_KEY_u, 0x01D8,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_iota, 0x0390,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_upsilon, 0x03B0,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_abovering, IBUS_KEY_A, 0x01FA,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_abovering, IBUS_KEY_a, 0x01FB,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_cedilla, IBUS_KEY_C, 0x1E08,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_cedilla, IBUS_KEY_c, 0x1E09,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_horn, IBUS_KEY_O, 0x1EDA,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_horn, IBUS_KEY_U, 0x1EE8,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_horn, IBUS_KEY_o, 0x1EDB,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_horn, IBUS_KEY_u, 0x1EE9,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F0C,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_EPSILON, 0x1F1C,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F2C,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_IOTA, 0x1F3C,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMICRON, 0x1F4C,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1F6C,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F04,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_epsilon, 0x1F14,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F24,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_iota, 0x1F34,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omicron, 0x1F44,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_upsilon, 0x1F54,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1F64,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F0D,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_EPSILON, 0x1F1D,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F2D,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_IOTA, 0x1F3D,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMICRON, 0x1F4D,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_UPSILON, 0x1F5D,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1F6D,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F05,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_epsilon, 0x1F15,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F25,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_iota, 0x1F35,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omicron, 0x1F45,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_upsilon, 0x1F55,
--IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1F65,
--IBUS_KEY_apostrophe, IBUS_KEY_KP_Divide, IBUS_KEY_O, 0x01FE,
--IBUS_KEY_apostrophe, IBUS_KEY_KP_Divide, IBUS_KEY_o, 0x01FF,
--IBUS_KEY_parenleft, IBUS_KEY_0, IBUS_KEY_parenright, 0x24EA,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_parenright, 0x2460,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_parenright, 0x2461,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_parenright, 0x2462,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_parenright, 0x2463,
--IBUS_KEY_parenleft, IBUS_KEY_5, IBUS_KEY_parenright, 0x2464,
--IBUS_KEY_parenleft, IBUS_KEY_6, IBUS_KEY_parenright, 0x2465,
--IBUS_KEY_parenleft, IBUS_KEY_7, IBUS_KEY_parenright, 0x2466,
--IBUS_KEY_parenleft, IBUS_KEY_8, IBUS_KEY_parenright, 0x2467,
--IBUS_KEY_parenleft, IBUS_KEY_9, IBUS_KEY_parenright, 0x2468,
--IBUS_KEY_parenleft, IBUS_KEY_A, IBUS_KEY_parenright, 0x24B6,
--IBUS_KEY_parenleft, IBUS_KEY_B, IBUS_KEY_parenright, 0x24B7,
--IBUS_KEY_parenleft, IBUS_KEY_C, IBUS_KEY_parenright, 0x24B8,
--IBUS_KEY_parenleft, IBUS_KEY_D, IBUS_KEY_parenright, 0x24B9,
--IBUS_KEY_parenleft, IBUS_KEY_E, IBUS_KEY_parenright, 0x24BA,
--IBUS_KEY_parenleft, IBUS_KEY_F, IBUS_KEY_parenright, 0x24BB,
--IBUS_KEY_parenleft, IBUS_KEY_G, IBUS_KEY_parenright, 0x24BC,
--IBUS_KEY_parenleft, IBUS_KEY_H, IBUS_KEY_parenright, 0x24BD,
--IBUS_KEY_parenleft, IBUS_KEY_I, IBUS_KEY_parenright, 0x24BE,
--IBUS_KEY_parenleft, IBUS_KEY_J, IBUS_KEY_parenright, 0x24BF,
--IBUS_KEY_parenleft, IBUS_KEY_K, IBUS_KEY_parenright, 0x24C0,
--IBUS_KEY_parenleft, IBUS_KEY_L, IBUS_KEY_parenright, 0x24C1,
--IBUS_KEY_parenleft, IBUS_KEY_M, IBUS_KEY_parenright, 0x24C2,
--IBUS_KEY_parenleft, IBUS_KEY_N, IBUS_KEY_parenright, 0x24C3,
--IBUS_KEY_parenleft, IBUS_KEY_O, IBUS_KEY_parenright, 0x24C4,
--IBUS_KEY_parenleft, IBUS_KEY_P, IBUS_KEY_parenright, 0x24C5,
--IBUS_KEY_parenleft, IBUS_KEY_Q, IBUS_KEY_parenright, 0x24C6,
--IBUS_KEY_parenleft, IBUS_KEY_R, IBUS_KEY_parenright, 0x24C7,
--IBUS_KEY_parenleft, IBUS_KEY_S, IBUS_KEY_parenright, 0x24C8,
--IBUS_KEY_parenleft, IBUS_KEY_T, IBUS_KEY_parenright, 0x24C9,
--IBUS_KEY_parenleft, IBUS_KEY_U, IBUS_KEY_parenright, 0x24CA,
--IBUS_KEY_parenleft, IBUS_KEY_V, IBUS_KEY_parenright, 0x24CB,
--IBUS_KEY_parenleft, IBUS_KEY_W, IBUS_KEY_parenright, 0x24CC,
--IBUS_KEY_parenleft, IBUS_KEY_X, IBUS_KEY_parenright, 0x24CD,
--IBUS_KEY_parenleft, IBUS_KEY_Y, IBUS_KEY_parenright, 0x24CE,
--IBUS_KEY_parenleft, IBUS_KEY_Z, IBUS_KEY_parenright, 0x24CF,
--IBUS_KEY_parenleft, IBUS_KEY_a, IBUS_KEY_parenright, 0x24D0,
--IBUS_KEY_parenleft, IBUS_KEY_b, IBUS_KEY_parenright, 0x24D1,
--IBUS_KEY_parenleft, IBUS_KEY_c, IBUS_KEY_parenright, 0x24D2,
--IBUS_KEY_parenleft, IBUS_KEY_d, IBUS_KEY_parenright, 0x24D3,
--IBUS_KEY_parenleft, IBUS_KEY_e, IBUS_KEY_parenright, 0x24D4,
--IBUS_KEY_parenleft, IBUS_KEY_f, IBUS_KEY_parenright, 0x24D5,
--IBUS_KEY_parenleft, IBUS_KEY_g, IBUS_KEY_parenright, 0x24D6,
--IBUS_KEY_parenleft, IBUS_KEY_h, IBUS_KEY_parenright, 0x24D7,
--IBUS_KEY_parenleft, IBUS_KEY_i, IBUS_KEY_parenright, 0x24D8,
--IBUS_KEY_parenleft, IBUS_KEY_j, IBUS_KEY_parenright, 0x24D9,
--IBUS_KEY_parenleft, IBUS_KEY_k, IBUS_KEY_parenright, 0x24DA,
--IBUS_KEY_parenleft, IBUS_KEY_l, IBUS_KEY_parenright, 0x24DB,
--IBUS_KEY_parenleft, IBUS_KEY_m, IBUS_KEY_parenright, 0x24DC,
--IBUS_KEY_parenleft, IBUS_KEY_n, IBUS_KEY_parenright, 0x24DD,
--IBUS_KEY_parenleft, IBUS_KEY_o, IBUS_KEY_parenright, 0x24DE,
--IBUS_KEY_parenleft, IBUS_KEY_p, IBUS_KEY_parenright, 0x24DF,
--IBUS_KEY_parenleft, IBUS_KEY_q, IBUS_KEY_parenright, 0x24E0,
--IBUS_KEY_parenleft, IBUS_KEY_r, IBUS_KEY_parenright, 0x24E1,
--IBUS_KEY_parenleft, IBUS_KEY_s, IBUS_KEY_parenright, 0x24E2,
--IBUS_KEY_parenleft, IBUS_KEY_t, IBUS_KEY_parenright, 0x24E3,
--IBUS_KEY_parenleft, IBUS_KEY_u, IBUS_KEY_parenright, 0x24E4,
--IBUS_KEY_parenleft, IBUS_KEY_v, IBUS_KEY_parenright, 0x24E5,
--IBUS_KEY_parenleft, IBUS_KEY_w, IBUS_KEY_parenright, 0x24E6,
--IBUS_KEY_parenleft, IBUS_KEY_x, IBUS_KEY_parenright, 0x24E7,
--IBUS_KEY_parenleft, IBUS_KEY_y, IBUS_KEY_parenright, 0x24E8,
--IBUS_KEY_parenleft, IBUS_KEY_z, IBUS_KEY_parenright, 0x24E9,
--IBUS_KEY_parenleft, IBUS_KEY_kana_WO, IBUS_KEY_parenright, 0x32FE,
--IBUS_KEY_parenleft, IBUS_KEY_kana_A, IBUS_KEY_parenright, 0x32D0,
--IBUS_KEY_parenleft, IBUS_KEY_kana_I, IBUS_KEY_parenright, 0x32D1,
--IBUS_KEY_parenleft, IBUS_KEY_kana_U, IBUS_KEY_parenright, 0x32D2,
--IBUS_KEY_parenleft, IBUS_KEY_kana_E, IBUS_KEY_parenright, 0x32D3,
--IBUS_KEY_parenleft, IBUS_KEY_kana_O, IBUS_KEY_parenright, 0x32D4,
--IBUS_KEY_parenleft, IBUS_KEY_kana_KA, IBUS_KEY_parenright, 0x32D5,
--IBUS_KEY_parenleft, IBUS_KEY_kana_KI, IBUS_KEY_parenright, 0x32D6,
--IBUS_KEY_parenleft, IBUS_KEY_kana_KU, IBUS_KEY_parenright, 0x32D7,
--IBUS_KEY_parenleft, IBUS_KEY_kana_KE, IBUS_KEY_parenright, 0x32D8,
--IBUS_KEY_parenleft, IBUS_KEY_kana_KO, IBUS_KEY_parenright, 0x32D9,
--IBUS_KEY_parenleft, IBUS_KEY_kana_SA, IBUS_KEY_parenright, 0x32DA,
--IBUS_KEY_parenleft, IBUS_KEY_kana_SHI, IBUS_KEY_parenright, 0x32DB,
--IBUS_KEY_parenleft, IBUS_KEY_kana_SU, IBUS_KEY_parenright, 0x32DC,
--IBUS_KEY_parenleft, IBUS_KEY_kana_SE, IBUS_KEY_parenright, 0x32DD,
--IBUS_KEY_parenleft, IBUS_KEY_kana_SO, IBUS_KEY_parenright, 0x32DE,
--IBUS_KEY_parenleft, IBUS_KEY_kana_TA, IBUS_KEY_parenright, 0x32DF,
--IBUS_KEY_parenleft, IBUS_KEY_kana_CHI, IBUS_KEY_parenright, 0x32E0,
--IBUS_KEY_parenleft, IBUS_KEY_kana_TSU, IBUS_KEY_parenright, 0x32E1,
--IBUS_KEY_parenleft, IBUS_KEY_kana_TE, IBUS_KEY_parenright, 0x32E2,
--IBUS_KEY_parenleft, IBUS_KEY_kana_TO, IBUS_KEY_parenright, 0x32E3,
--IBUS_KEY_parenleft, IBUS_KEY_kana_NA, IBUS_KEY_parenright, 0x32E4,
--IBUS_KEY_parenleft, IBUS_KEY_kana_NI, IBUS_KEY_parenright, 0x32E5,
--IBUS_KEY_parenleft, IBUS_KEY_kana_NU, IBUS_KEY_parenright, 0x32E6,
--IBUS_KEY_parenleft, IBUS_KEY_kana_NE, IBUS_KEY_parenright, 0x32E7,
--IBUS_KEY_parenleft, IBUS_KEY_kana_NO, IBUS_KEY_parenright, 0x32E8,
--IBUS_KEY_parenleft, IBUS_KEY_kana_HA, IBUS_KEY_parenright, 0x32E9,
--IBUS_KEY_parenleft, IBUS_KEY_kana_HI, IBUS_KEY_parenright, 0x32EA,
--IBUS_KEY_parenleft, IBUS_KEY_kana_FU, IBUS_KEY_parenright, 0x32EB,
--IBUS_KEY_parenleft, IBUS_KEY_kana_HE, IBUS_KEY_parenright, 0x32EC,
--IBUS_KEY_parenleft, IBUS_KEY_kana_HO, IBUS_KEY_parenright, 0x32ED,
--IBUS_KEY_parenleft, IBUS_KEY_kana_MA, IBUS_KEY_parenright, 0x32EE,
--IBUS_KEY_parenleft, IBUS_KEY_kana_MI, IBUS_KEY_parenright, 0x32EF,
--IBUS_KEY_parenleft, IBUS_KEY_kana_MU, IBUS_KEY_parenright, 0x32F0,
--IBUS_KEY_parenleft, IBUS_KEY_kana_ME, IBUS_KEY_parenright, 0x32F1,
--IBUS_KEY_parenleft, IBUS_KEY_kana_MO, IBUS_KEY_parenright, 0x32F2,
--IBUS_KEY_parenleft, IBUS_KEY_kana_YA, IBUS_KEY_parenright, 0x32F3,
--IBUS_KEY_parenleft, IBUS_KEY_kana_YU, IBUS_KEY_parenright, 0x32F4,
--IBUS_KEY_parenleft, IBUS_KEY_kana_YO, IBUS_KEY_parenright, 0x32F5,
--IBUS_KEY_parenleft, IBUS_KEY_kana_RA, IBUS_KEY_parenright, 0x32F6,
--IBUS_KEY_parenleft, IBUS_KEY_kana_RI, IBUS_KEY_parenright, 0x32F7,
--IBUS_KEY_parenleft, IBUS_KEY_kana_RU, IBUS_KEY_parenright, 0x32F8,
--IBUS_KEY_parenleft, IBUS_KEY_kana_RE, IBUS_KEY_parenright, 0x32F9,
--IBUS_KEY_parenleft, IBUS_KEY_kana_RO, IBUS_KEY_parenright, 0x32FA,
--IBUS_KEY_parenleft, IBUS_KEY_kana_WA, IBUS_KEY_parenright, 0x32FB,
--IBUS_KEY_parenleft, 0x1100, IBUS_KEY_parenright, 0x3260,
--IBUS_KEY_parenleft, 0x1102, IBUS_KEY_parenright, 0x3261,
--IBUS_KEY_parenleft, 0x1103, IBUS_KEY_parenright, 0x3262,
--IBUS_KEY_parenleft, 0x1105, IBUS_KEY_parenright, 0x3263,
--IBUS_KEY_parenleft, 0x1106, IBUS_KEY_parenright, 0x3264,
--IBUS_KEY_parenleft, 0x1107, IBUS_KEY_parenright, 0x3265,
--IBUS_KEY_parenleft, 0x1109, IBUS_KEY_parenright, 0x3266,
--IBUS_KEY_parenleft, 0x110B, IBUS_KEY_parenright, 0x3267,
--IBUS_KEY_parenleft, 0x110C, IBUS_KEY_parenright, 0x3268,
--IBUS_KEY_parenleft, 0x110E, IBUS_KEY_parenright, 0x3269,
--IBUS_KEY_parenleft, 0x110F, IBUS_KEY_parenright, 0x326A,
--IBUS_KEY_parenleft, 0x1110, IBUS_KEY_parenright, 0x326B,
--IBUS_KEY_parenleft, 0x1111, IBUS_KEY_parenright, 0x326C,
--IBUS_KEY_parenleft, 0x1112, IBUS_KEY_parenright, 0x326D,
--IBUS_KEY_parenleft, 0x30F0, IBUS_KEY_parenright, 0x32FC,
--IBUS_KEY_parenleft, 0x30F1, IBUS_KEY_parenright, 0x32FD,
--IBUS_KEY_parenleft, 0x4E00, IBUS_KEY_parenright, 0x3280,
--IBUS_KEY_parenleft, 0x4E03, IBUS_KEY_parenright, 0x3286,
--IBUS_KEY_parenleft, 0x4E09, IBUS_KEY_parenright, 0x3282,
--IBUS_KEY_parenleft, 0x4E0A, IBUS_KEY_parenright, 0x32A4,
--IBUS_KEY_parenleft, 0x4E0B, IBUS_KEY_parenright, 0x32A6,
--IBUS_KEY_parenleft, 0x4E2D, IBUS_KEY_parenright, 0x32A5,
--IBUS_KEY_parenleft, 0x4E5D, IBUS_KEY_parenright, 0x3288,
--IBUS_KEY_parenleft, 0x4E8C, IBUS_KEY_parenright, 0x3281,
--IBUS_KEY_parenleft, 0x4E94, IBUS_KEY_parenright, 0x3284,
--IBUS_KEY_parenleft, 0x4F01, IBUS_KEY_parenright, 0x32AD,
--IBUS_KEY_parenleft, 0x4F11, IBUS_KEY_parenright, 0x32A1,
--IBUS_KEY_parenleft, 0x512A, IBUS_KEY_parenright, 0x329D,
--IBUS_KEY_parenleft, 0x516B, IBUS_KEY_parenright, 0x3287,
--IBUS_KEY_parenleft, 0x516D, IBUS_KEY_parenright, 0x3285,
--IBUS_KEY_parenleft, 0x5199, IBUS_KEY_parenright, 0x32A2,
--IBUS_KEY_parenleft, 0x52B4, IBUS_KEY_parenright, 0x3298,
--IBUS_KEY_parenleft, 0x533B, IBUS_KEY_parenright, 0x32A9,
--IBUS_KEY_parenleft, 0x5341, IBUS_KEY_parenright, 0x3289,
--IBUS_KEY_parenleft, 0x5354, IBUS_KEY_parenright, 0x32AF,
--IBUS_KEY_parenleft, 0x5370, IBUS_KEY_parenright, 0x329E,
--IBUS_KEY_parenleft, 0x53F3, IBUS_KEY_parenright, 0x32A8,
--IBUS_KEY_parenleft, 0x540D, IBUS_KEY_parenright, 0x3294,
--IBUS_KEY_parenleft, 0x56DB, IBUS_KEY_parenright, 0x3283,
--IBUS_KEY_parenleft, 0x571F, IBUS_KEY_parenright, 0x328F,
--IBUS_KEY_parenleft, 0x591C, IBUS_KEY_parenright, 0x32B0,
--IBUS_KEY_parenleft, 0x5973, IBUS_KEY_parenright, 0x329B,
--IBUS_KEY_parenleft, 0x5B66, IBUS_KEY_parenright, 0x32AB,
--IBUS_KEY_parenleft, 0x5B97, IBUS_KEY_parenright, 0x32AA,
--IBUS_KEY_parenleft, 0x5DE6, IBUS_KEY_parenright, 0x32A7,
--IBUS_KEY_parenleft, 0x65E5, IBUS_KEY_parenright, 0x3290,
--IBUS_KEY_parenleft, 0x6708, IBUS_KEY_parenright, 0x328A,
--IBUS_KEY_parenleft, 0x6709, IBUS_KEY_parenright, 0x3292,
--IBUS_KEY_parenleft, 0x6728, IBUS_KEY_parenright, 0x328D,
--IBUS_KEY_parenleft, 0x682A, IBUS_KEY_parenright, 0x3291,
--IBUS_KEY_parenleft, 0x6B63, IBUS_KEY_parenright, 0x32A3,
--IBUS_KEY_parenleft, 0x6C34, IBUS_KEY_parenright, 0x328C,
--IBUS_KEY_parenleft, 0x6CE8, IBUS_KEY_parenright, 0x329F,
--IBUS_KEY_parenleft, 0x706B, IBUS_KEY_parenright, 0x328B,
--IBUS_KEY_parenleft, 0x7279, IBUS_KEY_parenright, 0x3295,
--IBUS_KEY_parenleft, 0x7537, IBUS_KEY_parenright, 0x329A,
--IBUS_KEY_parenleft, 0x76E3, IBUS_KEY_parenright, 0x32AC,
--IBUS_KEY_parenleft, 0x793E, IBUS_KEY_parenright, 0x3293,
--IBUS_KEY_parenleft, 0x795D, IBUS_KEY_parenright, 0x3297,
--IBUS_KEY_parenleft, 0x79D8, IBUS_KEY_parenright, 0x3299,
--IBUS_KEY_parenleft, 0x8CA1, IBUS_KEY_parenright, 0x3296,
--IBUS_KEY_parenleft, 0x8CC7, IBUS_KEY_parenright, 0x32AE,
--IBUS_KEY_parenleft, 0x9069, IBUS_KEY_parenright, 0x329C,
--IBUS_KEY_parenleft, 0x91D1, IBUS_KEY_parenright, 0x328E,
--IBUS_KEY_parenleft, 0x9805, IBUS_KEY_parenright, 0x32A0,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x2461,
--IBUS_KEY_parenleft, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x24EA,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x2460,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x2461,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x2462,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x2463,
--IBUS_KEY_parenleft, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x2464,
--IBUS_KEY_parenleft, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x2465,
--IBUS_KEY_parenleft, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x2466,
--IBUS_KEY_parenleft, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x2467,
--IBUS_KEY_parenleft, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x2468,
--IBUS_KEY_asterisk, IBUS_KEY_apostrophe, IBUS_KEY_A, 0x01FA,
--IBUS_KEY_asterisk, IBUS_KEY_apostrophe, IBUS_KEY_a, 0x01FB,
--IBUS_KEY_minus, IBUS_KEY_minus, IBUS_KEY_space, 0x00AD,
--IBUS_KEY_minus, IBUS_KEY_minus, IBUS_KEY_minus, 0x2014,
--IBUS_KEY_minus, IBUS_KEY_minus, IBUS_KEY_period, 0x2013,
--IBUS_KEY_period, IBUS_KEY_exclam, IBUS_KEY_S, 0x1E68,
--IBUS_KEY_period, IBUS_KEY_exclam, IBUS_KEY_s, 0x1E69,
--IBUS_KEY_period, IBUS_KEY_apostrophe, IBUS_KEY_S, 0x1E64,
--IBUS_KEY_period, IBUS_KEY_apostrophe, IBUS_KEY_s, 0x1E65,
--IBUS_KEY_period, IBUS_KEY_acute, IBUS_KEY_S, 0x1E64,
--IBUS_KEY_period, IBUS_KEY_acute, IBUS_KEY_s, 0x1E65,
--IBUS_KEY_period, IBUS_KEY_dead_acute, IBUS_KEY_S, 0x1E64,
--IBUS_KEY_period, IBUS_KEY_dead_acute, IBUS_KEY_s, 0x1E65,
--IBUS_KEY_period, IBUS_KEY_dead_caron, IBUS_KEY_S, 0x1E66,
--IBUS_KEY_period, IBUS_KEY_dead_caron, IBUS_KEY_s, 0x1E67,
--IBUS_KEY_period, IBUS_KEY_dead_belowdot, IBUS_KEY_S, 0x1E68,
--IBUS_KEY_period, IBUS_KEY_dead_belowdot, IBUS_KEY_s, 0x1E69,
--IBUS_KEY_1, IBUS_KEY_1, IBUS_KEY_0, 0x2152,
--IBUS_KEY_question, IBUS_KEY_plus, IBUS_KEY_O, 0x1EDE,
--IBUS_KEY_question, IBUS_KEY_plus, IBUS_KEY_U, 0x1EEC,
--IBUS_KEY_question, IBUS_KEY_plus, IBUS_KEY_o, 0x1EDF,
--IBUS_KEY_question, IBUS_KEY_plus, IBUS_KEY_u, 0x1EED,
--IBUS_KEY_question, IBUS_KEY_asciicircum, IBUS_KEY_A, 0x1EA8,
--IBUS_KEY_question, IBUS_KEY_asciicircum, IBUS_KEY_E, 0x1EC2,
--IBUS_KEY_question, IBUS_KEY_asciicircum, IBUS_KEY_O, 0x1ED4,
--IBUS_KEY_question, IBUS_KEY_asciicircum, IBUS_KEY_a, 0x1EA9,
--IBUS_KEY_question, IBUS_KEY_asciicircum, IBUS_KEY_e, 0x1EC3,
--IBUS_KEY_question, IBUS_KEY_asciicircum, IBUS_KEY_o, 0x1ED5,
--IBUS_KEY_question, IBUS_KEY_b, IBUS_KEY_A, 0x1EB2,
--IBUS_KEY_question, IBUS_KEY_b, IBUS_KEY_a, 0x1EB3,
--IBUS_KEY_question, IBUS_KEY_dead_circumflex, IBUS_KEY_A, 0x1EA8,
--IBUS_KEY_question, IBUS_KEY_dead_circumflex, IBUS_KEY_E, 0x1EC2,
--IBUS_KEY_question, IBUS_KEY_dead_circumflex, IBUS_KEY_O, 0x1ED4,
--IBUS_KEY_question, IBUS_KEY_dead_circumflex, IBUS_KEY_a, 0x1EA9,
--IBUS_KEY_question, IBUS_KEY_dead_circumflex, IBUS_KEY_e, 0x1EC3,
--IBUS_KEY_question, IBUS_KEY_dead_circumflex, IBUS_KEY_o, 0x1ED5,
--IBUS_KEY_question, IBUS_KEY_dead_breve, IBUS_KEY_A, 0x1EB2,
--IBUS_KEY_question, IBUS_KEY_dead_breve, IBUS_KEY_a, 0x1EB3,
--IBUS_KEY_question, IBUS_KEY_dead_horn, IBUS_KEY_O, 0x1EDE,
--IBUS_KEY_question, IBUS_KEY_dead_horn, IBUS_KEY_U, 0x1EEC,
--IBUS_KEY_question, IBUS_KEY_dead_horn, IBUS_KEY_o, 0x1EDF,
--IBUS_KEY_question, IBUS_KEY_dead_horn, IBUS_KEY_u, 0x1EED,
--IBUS_KEY_U, IBUS_KEY_exclam, IBUS_KEY_A, 0x1EB6,
--IBUS_KEY_U, IBUS_KEY_exclam, IBUS_KEY_a, 0x1EB7,
--IBUS_KEY_U, IBUS_KEY_cedilla, IBUS_KEY_E, 0x1E1C,
--IBUS_KEY_U, IBUS_KEY_cedilla, IBUS_KEY_e, 0x1E1D,
--IBUS_KEY_U, IBUS_KEY_dead_cedilla, IBUS_KEY_E, 0x1E1C,
--IBUS_KEY_U, IBUS_KEY_dead_cedilla, IBUS_KEY_e, 0x1E1D,
--IBUS_KEY_U, IBUS_KEY_dead_belowdot, IBUS_KEY_A, 0x1EB6,
--IBUS_KEY_U, IBUS_KEY_dead_belowdot, IBUS_KEY_a, 0x1EB7,
--IBUS_KEY_asciicircum, IBUS_KEY_exclam, IBUS_KEY_A, 0x1EAC,
--IBUS_KEY_asciicircum, IBUS_KEY_exclam, IBUS_KEY_E, 0x1EC6,
--IBUS_KEY_asciicircum, IBUS_KEY_exclam, IBUS_KEY_O, 0x1ED8,
--IBUS_KEY_asciicircum, IBUS_KEY_exclam, IBUS_KEY_a, 0x1EAD,
--IBUS_KEY_asciicircum, IBUS_KEY_exclam, IBUS_KEY_e, 0x1EC7,
--IBUS_KEY_asciicircum, IBUS_KEY_exclam, IBUS_KEY_o, 0x1ED9,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_a, 0x00AA,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_h, 0x02B0,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_i, 0x2071,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_j, 0x02B2,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_l, 0x02E1,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_n, 0x207F,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_o, 0x00BA,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_r, 0x02B3,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_s, 0x02E2,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_w, 0x02B7,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_x, 0x02E3,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, IBUS_KEY_y, 0x02B8,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, 0x0263, 0x02E0,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, 0x0266, 0x02B1,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, 0x0279, 0x02B4,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, 0x027B, 0x02B5,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, 0x0281, 0x02B6,
--IBUS_KEY_asciicircum, IBUS_KEY_underscore, 0x0295, 0x02E4,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_a, 0x00AA,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_h, 0x02B0,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_i, 0x2071,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_j, 0x02B2,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_l, 0x02E1,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_n, 0x207F,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_o, 0x00BA,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_r, 0x02B3,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_s, 0x02E2,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_w, 0x02B7,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_x, 0x02E3,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, IBUS_KEY_y, 0x02B8,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, 0x0263, 0x02E0,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, 0x0266, 0x02B1,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, 0x0279, 0x02B4,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, 0x027B, 0x02B5,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, 0x0281, 0x02B6,
--IBUS_KEY_asciicircum, IBUS_KEY_underbar, 0x0295, 0x02E4,
--IBUS_KEY_asciicircum, IBUS_KEY_dead_belowdot, IBUS_KEY_A, 0x1EAC,
--IBUS_KEY_asciicircum, IBUS_KEY_dead_belowdot, IBUS_KEY_E, 0x1EC6,
--IBUS_KEY_asciicircum, IBUS_KEY_dead_belowdot, IBUS_KEY_O, 0x1ED8,
--IBUS_KEY_asciicircum, IBUS_KEY_dead_belowdot, IBUS_KEY_a, 0x1EAD,
--IBUS_KEY_asciicircum, IBUS_KEY_dead_belowdot, IBUS_KEY_e, 0x1EC7,
--IBUS_KEY_asciicircum, IBUS_KEY_dead_belowdot, IBUS_KEY_o, 0x1ED9,
--IBUS_KEY_underscore, IBUS_KEY_exclam, IBUS_KEY_L, 0x1E38,
--IBUS_KEY_underscore, IBUS_KEY_exclam, IBUS_KEY_R, 0x1E5C,
--IBUS_KEY_underscore, IBUS_KEY_exclam, IBUS_KEY_l, 0x1E39,
--IBUS_KEY_underscore, IBUS_KEY_exclam, IBUS_KEY_r, 0x1E5D,
--IBUS_KEY_underscore, IBUS_KEY_quotedbl, IBUS_KEY_A, 0x01DE,
--IBUS_KEY_underscore, IBUS_KEY_quotedbl, IBUS_KEY_O, 0x022A,
--IBUS_KEY_underscore, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01D5,
--IBUS_KEY_underscore, IBUS_KEY_quotedbl, IBUS_KEY_a, 0x01DF,
--IBUS_KEY_underscore, IBUS_KEY_quotedbl, IBUS_KEY_o, 0x022B,
--IBUS_KEY_underscore, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01D6,
--IBUS_KEY_underscore, IBUS_KEY_period, IBUS_KEY_A, 0x01E0,
--IBUS_KEY_underscore, IBUS_KEY_period, IBUS_KEY_O, 0x0230,
--IBUS_KEY_underscore, IBUS_KEY_period, IBUS_KEY_a, 0x01E1,
--IBUS_KEY_underscore, IBUS_KEY_period, IBUS_KEY_o, 0x0231,
--IBUS_KEY_underscore, IBUS_KEY_semicolon, IBUS_KEY_O, 0x01EC,
--IBUS_KEY_underscore, IBUS_KEY_semicolon, IBUS_KEY_o, 0x01ED,
--IBUS_KEY_underscore, IBUS_KEY_asciitilde, IBUS_KEY_O, 0x022C,
--IBUS_KEY_underscore, IBUS_KEY_asciitilde, IBUS_KEY_o, 0x022D,
--IBUS_KEY_underscore, IBUS_KEY_dead_tilde, IBUS_KEY_O, 0x022C,
--IBUS_KEY_underscore, IBUS_KEY_dead_tilde, IBUS_KEY_o, 0x022D,
--IBUS_KEY_underscore, IBUS_KEY_dead_abovedot, IBUS_KEY_A, 0x01E0,
--IBUS_KEY_underscore, IBUS_KEY_dead_abovedot, IBUS_KEY_O, 0x0230,
--IBUS_KEY_underscore, IBUS_KEY_dead_abovedot, IBUS_KEY_a, 0x01E1,
--IBUS_KEY_underscore, IBUS_KEY_dead_abovedot, IBUS_KEY_o, 0x0231,
--IBUS_KEY_underscore, IBUS_KEY_dead_diaeresis, IBUS_KEY_A, 0x01DE,
--IBUS_KEY_underscore, IBUS_KEY_dead_diaeresis, IBUS_KEY_O, 0x022A,
--IBUS_KEY_underscore, IBUS_KEY_dead_diaeresis, IBUS_KEY_U, 0x01D5,
--IBUS_KEY_underscore, IBUS_KEY_dead_diaeresis, IBUS_KEY_a, 0x01DF,
--IBUS_KEY_underscore, IBUS_KEY_dead_diaeresis, IBUS_KEY_o, 0x022B,
--IBUS_KEY_underscore, IBUS_KEY_dead_diaeresis, IBUS_KEY_u, 0x01D6,
--IBUS_KEY_underscore, IBUS_KEY_dead_ogonek, IBUS_KEY_O, 0x01EC,
--IBUS_KEY_underscore, IBUS_KEY_dead_ogonek, IBUS_KEY_o, 0x01ED,
--IBUS_KEY_underscore, IBUS_KEY_dead_belowdot, IBUS_KEY_L, 0x1E38,
--IBUS_KEY_underscore, IBUS_KEY_dead_belowdot, IBUS_KEY_R, 0x1E5C,
--IBUS_KEY_underscore, IBUS_KEY_dead_belowdot, IBUS_KEY_l, 0x1E39,
--IBUS_KEY_underscore, IBUS_KEY_dead_belowdot, IBUS_KEY_r, 0x1E5D,
--IBUS_KEY_grave, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01DB,
--IBUS_KEY_grave, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01DC,
--IBUS_KEY_grave, IBUS_KEY_quotedbl, IBUS_KEY_Greek_iota, 0x1FD2,
--IBUS_KEY_grave, IBUS_KEY_quotedbl, IBUS_KEY_Greek_upsilon, 0x1FE2,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F0B,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_EPSILON, 0x1F1B,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F2B,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_IOTA, 0x1F3B,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMICRON, 0x1F4B,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_UPSILON, 0x1F5B,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1F6B,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F03,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_epsilon, 0x1F13,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F23,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_iota, 0x1F33,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_omicron, 0x1F43,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_upsilon, 0x1F53,
--IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1F63,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F0A,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_EPSILON, 0x1F1A,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F2A,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_IOTA, 0x1F3A,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_OMICRON, 0x1F4A,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1F6A,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F02,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_epsilon, 0x1F12,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F22,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_iota, 0x1F32,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_omicron, 0x1F42,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_upsilon, 0x1F52,
--IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1F62,
--IBUS_KEY_grave, IBUS_KEY_plus, IBUS_KEY_O, 0x1EDC,
--IBUS_KEY_grave, IBUS_KEY_plus, IBUS_KEY_U, 0x1EEA,
--IBUS_KEY_grave, IBUS_KEY_plus, IBUS_KEY_o, 0x1EDD,
--IBUS_KEY_grave, IBUS_KEY_plus, IBUS_KEY_u, 0x1EEB,
--IBUS_KEY_grave, IBUS_KEY_asciicircum, IBUS_KEY_A, 0x1EA6,
--IBUS_KEY_grave, IBUS_KEY_asciicircum, IBUS_KEY_E, 0x1EC0,
--IBUS_KEY_grave, IBUS_KEY_asciicircum, IBUS_KEY_O, 0x1ED2,
--IBUS_KEY_grave, IBUS_KEY_asciicircum, IBUS_KEY_a, 0x1EA7,
--IBUS_KEY_grave, IBUS_KEY_asciicircum, IBUS_KEY_e, 0x1EC1,
--IBUS_KEY_grave, IBUS_KEY_asciicircum, IBUS_KEY_o, 0x1ED3,
--IBUS_KEY_grave, IBUS_KEY_underscore, IBUS_KEY_E, 0x1E14,
--IBUS_KEY_grave, IBUS_KEY_underscore, IBUS_KEY_O, 0x1E50,
--IBUS_KEY_grave, IBUS_KEY_underscore, IBUS_KEY_e, 0x1E15,
--IBUS_KEY_grave, IBUS_KEY_underscore, IBUS_KEY_o, 0x1E51,
--IBUS_KEY_grave, IBUS_KEY_b, IBUS_KEY_A, 0x1EB0,
--IBUS_KEY_grave, IBUS_KEY_b, IBUS_KEY_a, 0x1EB1,
--IBUS_KEY_grave, IBUS_KEY_macron, IBUS_KEY_E, 0x1E14,
--IBUS_KEY_grave, IBUS_KEY_macron, IBUS_KEY_O, 0x1E50,
--IBUS_KEY_grave, IBUS_KEY_macron, IBUS_KEY_e, 0x1E15,
--IBUS_KEY_grave, IBUS_KEY_macron, IBUS_KEY_o, 0x1E51,
--IBUS_KEY_grave, IBUS_KEY_dead_circumflex, IBUS_KEY_A, 0x1EA6,
--IBUS_KEY_grave, IBUS_KEY_dead_circumflex, IBUS_KEY_E, 0x1EC0,
--IBUS_KEY_grave, IBUS_KEY_dead_circumflex, IBUS_KEY_O, 0x1ED2,
--IBUS_KEY_grave, IBUS_KEY_dead_circumflex, IBUS_KEY_a, 0x1EA7,
--IBUS_KEY_grave, IBUS_KEY_dead_circumflex, IBUS_KEY_e, 0x1EC1,
--IBUS_KEY_grave, IBUS_KEY_dead_circumflex, IBUS_KEY_o, 0x1ED3,
--IBUS_KEY_grave, IBUS_KEY_dead_macron, IBUS_KEY_E, 0x1E14,
--IBUS_KEY_grave, IBUS_KEY_dead_macron, IBUS_KEY_O, 0x1E50,
--IBUS_KEY_grave, IBUS_KEY_dead_macron, IBUS_KEY_e, 0x1E15,
--IBUS_KEY_grave, IBUS_KEY_dead_macron, IBUS_KEY_o, 0x1E51,
--IBUS_KEY_grave, IBUS_KEY_dead_breve, IBUS_KEY_A, 0x1EB0,
--IBUS_KEY_grave, IBUS_KEY_dead_breve, IBUS_KEY_a, 0x1EB1,
--IBUS_KEY_grave, IBUS_KEY_dead_diaeresis, IBUS_KEY_U, 0x01DB,
--IBUS_KEY_grave, IBUS_KEY_dead_diaeresis, IBUS_KEY_u, 0x01DC,
--IBUS_KEY_grave, IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_iota, 0x1FD2,
--IBUS_KEY_grave, IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_upsilon, 0x1FE2,
--IBUS_KEY_grave, IBUS_KEY_dead_horn, IBUS_KEY_O, 0x1EDC,
--IBUS_KEY_grave, IBUS_KEY_dead_horn, IBUS_KEY_U, 0x1EEA,
--IBUS_KEY_grave, IBUS_KEY_dead_horn, IBUS_KEY_o, 0x1EDD,
--IBUS_KEY_grave, IBUS_KEY_dead_horn, IBUS_KEY_u, 0x1EEB,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F0A,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_EPSILON, 0x1F1A,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F2A,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_IOTA, 0x1F3A,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMICRON, 0x1F4A,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1F6A,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F02,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_epsilon, 0x1F12,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F22,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_iota, 0x1F32,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omicron, 0x1F42,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_upsilon, 0x1F52,
--IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1F62,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F0B,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_EPSILON, 0x1F1B,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F2B,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_IOTA, 0x1F3B,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMICRON, 0x1F4B,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_UPSILON, 0x1F5B,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1F6B,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F03,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_epsilon, 0x1F13,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F23,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_iota, 0x1F33,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omicron, 0x1F43,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_upsilon, 0x1F53,
--IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1F63,
--IBUS_KEY_b, IBUS_KEY_exclam, IBUS_KEY_A, 0x1EB6,
--IBUS_KEY_b, IBUS_KEY_exclam, IBUS_KEY_a, 0x1EB7,
--IBUS_KEY_b, IBUS_KEY_comma, IBUS_KEY_E, 0x1E1C,
--IBUS_KEY_b, IBUS_KEY_comma, IBUS_KEY_e, 0x1E1D,
--IBUS_KEY_b, IBUS_KEY_cedilla, IBUS_KEY_E, 0x1E1C,
--IBUS_KEY_b, IBUS_KEY_cedilla, IBUS_KEY_e, 0x1E1D,
--IBUS_KEY_b, IBUS_KEY_dead_cedilla, IBUS_KEY_E, 0x1E1C,
--IBUS_KEY_b, IBUS_KEY_dead_cedilla, IBUS_KEY_e, 0x1E1D,
--IBUS_KEY_b, IBUS_KEY_dead_belowdot, IBUS_KEY_A, 0x1EB6,
--IBUS_KEY_b, IBUS_KEY_dead_belowdot, IBUS_KEY_a, 0x1EB7,
--IBUS_KEY_c, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01D9,
--IBUS_KEY_c, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01DA,
--IBUS_KEY_c, IBUS_KEY_dead_diaeresis, IBUS_KEY_U, 0x01D9,
--IBUS_KEY_c, IBUS_KEY_dead_diaeresis, IBUS_KEY_u, 0x01DA,
--IBUS_KEY_asciitilde, IBUS_KEY_quotedbl, IBUS_KEY_Greek_iota, 0x1FD7,
--IBUS_KEY_asciitilde, IBUS_KEY_quotedbl, IBUS_KEY_Greek_upsilon, 0x1FE7,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F0F,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F2F,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_IOTA, 0x1F3F,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_UPSILON, 0x1F5F,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1F6F,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F07,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F27,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_iota, 0x1F37,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_upsilon, 0x1F57,
--IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1F67,
--IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F0E,
--IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F2E,
--IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_IOTA, 0x1F3E,
--IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1F6E,
--IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F06,
--IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F26,
--IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_iota, 0x1F36,
--IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_upsilon, 0x1F56,
--IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1F66,
--IBUS_KEY_asciitilde, IBUS_KEY_plus, IBUS_KEY_O, 0x1EE0,
--IBUS_KEY_asciitilde, IBUS_KEY_plus, IBUS_KEY_U, 0x1EEE,
--IBUS_KEY_asciitilde, IBUS_KEY_plus, IBUS_KEY_o, 0x1EE1,
--IBUS_KEY_asciitilde, IBUS_KEY_plus, IBUS_KEY_u, 0x1EEF,
--IBUS_KEY_asciitilde, IBUS_KEY_asciicircum, IBUS_KEY_A, 0x1EAA,
--IBUS_KEY_asciitilde, IBUS_KEY_asciicircum, IBUS_KEY_E, 0x1EC4,
--IBUS_KEY_asciitilde, IBUS_KEY_asciicircum, IBUS_KEY_O, 0x1ED6,
--IBUS_KEY_asciitilde, IBUS_KEY_asciicircum, IBUS_KEY_a, 0x1EAB,
--IBUS_KEY_asciitilde, IBUS_KEY_asciicircum, IBUS_KEY_e, 0x1EC5,
--IBUS_KEY_asciitilde, IBUS_KEY_asciicircum, IBUS_KEY_o, 0x1ED7,
--IBUS_KEY_asciitilde, IBUS_KEY_b, IBUS_KEY_A, 0x1EB4,
--IBUS_KEY_asciitilde, IBUS_KEY_b, IBUS_KEY_a, 0x1EB5,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_circumflex, IBUS_KEY_A, 0x1EAA,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_circumflex, IBUS_KEY_E, 0x1EC4,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_circumflex, IBUS_KEY_O, 0x1ED6,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_circumflex, IBUS_KEY_a, 0x1EAB,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_circumflex, IBUS_KEY_e, 0x1EC5,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_circumflex, IBUS_KEY_o, 0x1ED7,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_breve, IBUS_KEY_A, 0x1EB4,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_breve, IBUS_KEY_a, 0x1EB5,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_iota, 0x1FD7,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_upsilon, 0x1FE7,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_horn, IBUS_KEY_O, 0x1EE0,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_horn, IBUS_KEY_U, 0x1EEE,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_horn, IBUS_KEY_o, 0x1EE1,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_horn, IBUS_KEY_u, 0x1EEF,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F0E,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F2E,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_IOTA, 0x1F3E,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1F6E,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F06,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F26,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_iota, 0x1F36,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_upsilon, 0x1F56,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1F66,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F0F,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F2F,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_IOTA, 0x1F3F,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_UPSILON, 0x1F5F,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1F6F,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F07,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F27,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_iota, 0x1F37,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_upsilon, 0x1F57,
--IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1F67,
--IBUS_KEY_macron, IBUS_KEY_exclam, IBUS_KEY_L, 0x1E38,
--IBUS_KEY_macron, IBUS_KEY_exclam, IBUS_KEY_R, 0x1E5C,
--IBUS_KEY_macron, IBUS_KEY_exclam, IBUS_KEY_l, 0x1E39,
--IBUS_KEY_macron, IBUS_KEY_exclam, IBUS_KEY_r, 0x1E5D,
--IBUS_KEY_macron, IBUS_KEY_quotedbl, IBUS_KEY_A, 0x01DE,
--IBUS_KEY_macron, IBUS_KEY_quotedbl, IBUS_KEY_O, 0x022A,
--IBUS_KEY_macron, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01D5,
--IBUS_KEY_macron, IBUS_KEY_quotedbl, IBUS_KEY_a, 0x01DF,
--IBUS_KEY_macron, IBUS_KEY_quotedbl, IBUS_KEY_o, 0x022B,
--IBUS_KEY_macron, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01D6,
--IBUS_KEY_macron, IBUS_KEY_period, IBUS_KEY_A, 0x01E0,
--IBUS_KEY_macron, IBUS_KEY_period, IBUS_KEY_O, 0x0230,
--IBUS_KEY_macron, IBUS_KEY_period, IBUS_KEY_a, 0x01E1,
--IBUS_KEY_macron, IBUS_KEY_period, IBUS_KEY_o, 0x0231,
--IBUS_KEY_macron, IBUS_KEY_semicolon, IBUS_KEY_O, 0x01EC,
--IBUS_KEY_macron, IBUS_KEY_semicolon, IBUS_KEY_o, 0x01ED,
--IBUS_KEY_macron, IBUS_KEY_asciitilde, IBUS_KEY_O, 0x022C,
--IBUS_KEY_macron, IBUS_KEY_asciitilde, IBUS_KEY_o, 0x022D,
--IBUS_KEY_macron, IBUS_KEY_dead_tilde, IBUS_KEY_O, 0x022C,
--IBUS_KEY_macron, IBUS_KEY_dead_tilde, IBUS_KEY_o, 0x022D,
--IBUS_KEY_macron, IBUS_KEY_dead_abovedot, IBUS_KEY_A, 0x01E0,
--IBUS_KEY_macron, IBUS_KEY_dead_abovedot, IBUS_KEY_O, 0x0230,
--IBUS_KEY_macron, IBUS_KEY_dead_abovedot, IBUS_KEY_a, 0x01E1,
--IBUS_KEY_macron, IBUS_KEY_dead_abovedot, IBUS_KEY_o, 0x0231,
--IBUS_KEY_macron, IBUS_KEY_dead_diaeresis, IBUS_KEY_A, 0x01DE,
--IBUS_KEY_macron, IBUS_KEY_dead_diaeresis, IBUS_KEY_O, 0x022A,
--IBUS_KEY_macron, IBUS_KEY_dead_diaeresis, IBUS_KEY_U, 0x01D5,
--IBUS_KEY_macron, IBUS_KEY_dead_diaeresis, IBUS_KEY_a, 0x01DF,
--IBUS_KEY_macron, IBUS_KEY_dead_diaeresis, IBUS_KEY_o, 0x022B,
--IBUS_KEY_macron, IBUS_KEY_dead_diaeresis, IBUS_KEY_u, 0x01D6,
--IBUS_KEY_macron, IBUS_KEY_dead_ogonek, IBUS_KEY_O, 0x01EC,
--IBUS_KEY_macron, IBUS_KEY_dead_ogonek, IBUS_KEY_o, 0x01ED,
--IBUS_KEY_macron, IBUS_KEY_dead_belowdot, IBUS_KEY_L, 0x1E38,
--IBUS_KEY_macron, IBUS_KEY_dead_belowdot, IBUS_KEY_R, 0x1E5C,
--IBUS_KEY_macron, IBUS_KEY_dead_belowdot, IBUS_KEY_l, 0x1E39,
--IBUS_KEY_macron, IBUS_KEY_dead_belowdot, IBUS_KEY_r, 0x1E5D,
--IBUS_KEY_acute, IBUS_KEY_quotedbl, IBUS_KEY_I, 0x1E2E,
--IBUS_KEY_acute, IBUS_KEY_quotedbl, IBUS_KEY_U, 0x01D7,
--IBUS_KEY_acute, IBUS_KEY_quotedbl, IBUS_KEY_i, 0x1E2F,
--IBUS_KEY_acute, IBUS_KEY_quotedbl, IBUS_KEY_u, 0x01D8,
--IBUS_KEY_acute, IBUS_KEY_quotedbl, IBUS_KEY_Greek_iota, 0x0390,
--IBUS_KEY_acute, IBUS_KEY_quotedbl, IBUS_KEY_Greek_upsilon, 0x03B0,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F0D,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_EPSILON, 0x1F1D,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F2D,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_IOTA, 0x1F3D,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMICRON, 0x1F4D,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_UPSILON, 0x1F5D,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1F6D,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F05,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_epsilon, 0x1F15,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F25,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_iota, 0x1F35,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_omicron, 0x1F45,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_upsilon, 0x1F55,
--IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1F65,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F0C,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_EPSILON, 0x1F1C,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F2C,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_IOTA, 0x1F3C,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_OMICRON, 0x1F4C,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1F6C,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F04,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_epsilon, 0x1F14,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F24,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_iota, 0x1F34,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_omicron, 0x1F44,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_upsilon, 0x1F54,
--IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1F64,
--IBUS_KEY_acute, IBUS_KEY_plus, IBUS_KEY_O, 0x1EDA,
--IBUS_KEY_acute, IBUS_KEY_plus, IBUS_KEY_U, 0x1EE8,
--IBUS_KEY_acute, IBUS_KEY_plus, IBUS_KEY_o, 0x1EDB,
--IBUS_KEY_acute, IBUS_KEY_plus, IBUS_KEY_u, 0x1EE9,
--IBUS_KEY_acute, IBUS_KEY_comma, IBUS_KEY_C, 0x1E08,
--IBUS_KEY_acute, IBUS_KEY_comma, IBUS_KEY_c, 0x1E09,
--IBUS_KEY_acute, IBUS_KEY_slash, IBUS_KEY_O, 0x01FE,
--IBUS_KEY_acute, IBUS_KEY_slash, IBUS_KEY_o, 0x01FF,
--IBUS_KEY_acute, IBUS_KEY_asciicircum, IBUS_KEY_A, 0x1EA4,
--IBUS_KEY_acute, IBUS_KEY_asciicircum, IBUS_KEY_E, 0x1EBE,
--IBUS_KEY_acute, IBUS_KEY_asciicircum, IBUS_KEY_O, 0x1ED0,
--IBUS_KEY_acute, IBUS_KEY_asciicircum, IBUS_KEY_a, 0x1EA5,
--IBUS_KEY_acute, IBUS_KEY_asciicircum, IBUS_KEY_e, 0x1EBF,
--IBUS_KEY_acute, IBUS_KEY_asciicircum, IBUS_KEY_o, 0x1ED1,
--IBUS_KEY_acute, IBUS_KEY_underscore, IBUS_KEY_E, 0x1E16,
--IBUS_KEY_acute, IBUS_KEY_underscore, IBUS_KEY_O, 0x1E52,
--IBUS_KEY_acute, IBUS_KEY_underscore, IBUS_KEY_e, 0x1E17,
--IBUS_KEY_acute, IBUS_KEY_underscore, IBUS_KEY_o, 0x1E53,
--IBUS_KEY_acute, IBUS_KEY_b, IBUS_KEY_A, 0x1EAE,
--IBUS_KEY_acute, IBUS_KEY_b, IBUS_KEY_a, 0x1EAF,
--IBUS_KEY_acute, IBUS_KEY_asciitilde, IBUS_KEY_O, 0x1E4C,
--IBUS_KEY_acute, IBUS_KEY_asciitilde, IBUS_KEY_U, 0x1E78,
--IBUS_KEY_acute, IBUS_KEY_asciitilde, IBUS_KEY_o, 0x1E4D,
--IBUS_KEY_acute, IBUS_KEY_asciitilde, IBUS_KEY_u, 0x1E79,
--IBUS_KEY_acute, IBUS_KEY_macron, IBUS_KEY_E, 0x1E16,
--IBUS_KEY_acute, IBUS_KEY_macron, IBUS_KEY_O, 0x1E52,
--IBUS_KEY_acute, IBUS_KEY_macron, IBUS_KEY_e, 0x1E17,
--IBUS_KEY_acute, IBUS_KEY_macron, IBUS_KEY_o, 0x1E53,
--IBUS_KEY_acute, IBUS_KEY_cedilla, IBUS_KEY_C, 0x1E08,
--IBUS_KEY_acute, IBUS_KEY_cedilla, IBUS_KEY_c, 0x1E09,
--IBUS_KEY_acute, IBUS_KEY_dead_circumflex, IBUS_KEY_A, 0x1EA4,
--IBUS_KEY_acute, IBUS_KEY_dead_circumflex, IBUS_KEY_E, 0x1EBE,
--IBUS_KEY_acute, IBUS_KEY_dead_circumflex, IBUS_KEY_O, 0x1ED0,
--IBUS_KEY_acute, IBUS_KEY_dead_circumflex, IBUS_KEY_a, 0x1EA5,
--IBUS_KEY_acute, IBUS_KEY_dead_circumflex, IBUS_KEY_e, 0x1EBF,
--IBUS_KEY_acute, IBUS_KEY_dead_circumflex, IBUS_KEY_o, 0x1ED1,
--IBUS_KEY_acute, IBUS_KEY_dead_tilde, IBUS_KEY_O, 0x1E4C,
--IBUS_KEY_acute, IBUS_KEY_dead_tilde, IBUS_KEY_U, 0x1E78,
--IBUS_KEY_acute, IBUS_KEY_dead_tilde, IBUS_KEY_o, 0x1E4D,
--IBUS_KEY_acute, IBUS_KEY_dead_tilde, IBUS_KEY_u, 0x1E79,
--IBUS_KEY_acute, IBUS_KEY_dead_macron, IBUS_KEY_E, 0x1E16,
--IBUS_KEY_acute, IBUS_KEY_dead_macron, IBUS_KEY_O, 0x1E52,
--IBUS_KEY_acute, IBUS_KEY_dead_macron, IBUS_KEY_e, 0x1E17,
--IBUS_KEY_acute, IBUS_KEY_dead_macron, IBUS_KEY_o, 0x1E53,
--IBUS_KEY_acute, IBUS_KEY_dead_breve, IBUS_KEY_A, 0x1EAE,
--IBUS_KEY_acute, IBUS_KEY_dead_breve, IBUS_KEY_a, 0x1EAF,
--IBUS_KEY_acute, IBUS_KEY_dead_diaeresis, IBUS_KEY_I, 0x1E2E,
--IBUS_KEY_acute, IBUS_KEY_dead_diaeresis, IBUS_KEY_U, 0x01D7,
--IBUS_KEY_acute, IBUS_KEY_dead_diaeresis, IBUS_KEY_i, 0x1E2F,
--IBUS_KEY_acute, IBUS_KEY_dead_diaeresis, IBUS_KEY_u, 0x01D8,
--IBUS_KEY_acute, IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_iota, 0x0390,
--IBUS_KEY_acute, IBUS_KEY_dead_diaeresis, IBUS_KEY_Greek_upsilon, 0x03B0,
--IBUS_KEY_acute, IBUS_KEY_dead_abovering, IBUS_KEY_A, 0x01FA,
--IBUS_KEY_acute, IBUS_KEY_dead_abovering, IBUS_KEY_a, 0x01FB,
--IBUS_KEY_acute, IBUS_KEY_dead_cedilla, IBUS_KEY_C, 0x1E08,
--IBUS_KEY_acute, IBUS_KEY_dead_cedilla, IBUS_KEY_c, 0x1E09,
--IBUS_KEY_acute, IBUS_KEY_dead_horn, IBUS_KEY_O, 0x1EDA,
--IBUS_KEY_acute, IBUS_KEY_dead_horn, IBUS_KEY_U, 0x1EE8,
--IBUS_KEY_acute, IBUS_KEY_dead_horn, IBUS_KEY_o, 0x1EDB,
--IBUS_KEY_acute, IBUS_KEY_dead_horn, IBUS_KEY_u, 0x1EE9,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F0C,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_EPSILON, 0x1F1C,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F2C,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_IOTA, 0x1F3C,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMICRON, 0x1F4C,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1F6C,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F04,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_epsilon, 0x1F14,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F24,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_iota, 0x1F34,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omicron, 0x1F44,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_upsilon, 0x1F54,
--IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1F64,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F0D,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_EPSILON, 0x1F1D,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F2D,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_IOTA, 0x1F3D,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMICRON, 0x1F4D,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_UPSILON, 0x1F5D,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1F6D,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F05,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_epsilon, 0x1F15,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F25,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_iota, 0x1F35,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omicron, 0x1F45,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_upsilon, 0x1F55,
--IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1F65,
--IBUS_KEY_acute, IBUS_KEY_KP_Divide, IBUS_KEY_O, 0x01FE,
--IBUS_KEY_acute, IBUS_KEY_KP_Divide, IBUS_KEY_o, 0x01FF,
--0x05C1, 0x05BC, IBUS_KEY_hebrew_shin, 0xFB2C,
--0x05C2, 0x05BC, IBUS_KEY_hebrew_shin, 0xFB2D,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_Greek_alpha, 0x1FB4,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_Greek_eta, 0x1FC4,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_Greek_omega, 0x1FF4,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F00, 0x1F84,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F01, 0x1F85,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F08, 0x1F8C,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F09, 0x1F8D,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F20, 0x1F94,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F21, 0x1F95,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F28, 0x1F9C,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F29, 0x1F9D,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F60, 0x1FA4,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F61, 0x1FA5,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F68, 0x1FAC,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, 0x1F69, 0x1FAD,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F89,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F99,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FA9,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F81,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F91,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA1,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F88,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F98,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FA8,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F80,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F90,
--IBUS_KEY_Greek_iota, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA0,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_Greek_alpha, 0x1FB2,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_Greek_eta, 0x1FC2,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_Greek_omega, 0x1FF2,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F00, 0x1F82,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F01, 0x1F83,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F08, 0x1F8A,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F09, 0x1F8B,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F20, 0x1F92,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F21, 0x1F93,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F28, 0x1F9A,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F29, 0x1F9B,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F60, 0x1FA2,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F61, 0x1FA3,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F68, 0x1FAA,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, 0x1F69, 0x1FAB,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_Greek_alpha, 0x1FB7,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_Greek_eta, 0x1FC7,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_Greek_omega, 0x1FF7,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F00, 0x1F86,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F01, 0x1F87,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F08, 0x1F8E,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F09, 0x1F8F,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F20, 0x1F96,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F21, 0x1F97,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F28, 0x1F9E,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F29, 0x1F9F,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F60, 0x1FA6,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F61, 0x1FA7,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F68, 0x1FAE,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, 0x1F69, 0x1FAF,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_Greek_alpha, 0x1FB4,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_Greek_eta, 0x1FC4,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_Greek_omega, 0x1FF4,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F00, 0x1F84,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F01, 0x1F85,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F08, 0x1F8C,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F09, 0x1F8D,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F20, 0x1F94,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F21, 0x1F95,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F28, 0x1F9C,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F29, 0x1F9D,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F60, 0x1FA4,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F61, 0x1FA5,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F68, 0x1FAC,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, 0x1F69, 0x1FAD,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_Greek_alpha, 0x1FB2,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_Greek_eta, 0x1FC2,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_Greek_omega, 0x1FF2,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F00, 0x1F82,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F01, 0x1F83,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F08, 0x1F8A,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F09, 0x1F8B,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F20, 0x1F92,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F21, 0x1F93,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F28, 0x1F9A,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F29, 0x1F9B,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F60, 0x1FA2,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F61, 0x1FA3,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F68, 0x1FAA,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, 0x1F69, 0x1FAB,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_Greek_alpha, 0x1FB4,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_Greek_eta, 0x1FC4,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_Greek_omega, 0x1FF4,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F00, 0x1F84,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F01, 0x1F85,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F08, 0x1F8C,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F09, 0x1F8D,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F20, 0x1F94,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F21, 0x1F95,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F28, 0x1F9C,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F29, 0x1F9D,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F60, 0x1FA4,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F61, 0x1FA5,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F68, 0x1FAC,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, 0x1F69, 0x1FAD,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_Greek_alpha, 0x1FB7,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_Greek_eta, 0x1FC7,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_Greek_omega, 0x1FF7,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F00, 0x1F86,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F01, 0x1F87,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F08, 0x1F8E,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F09, 0x1F8F,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F20, 0x1F96,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F21, 0x1F97,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F28, 0x1F9E,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F29, 0x1F9F,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F60, 0x1FA6,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F61, 0x1FA7,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F68, 0x1FAE,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, 0x1F69, 0x1FAF,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F88,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F98,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FA8,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F80,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F90,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA0,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F89,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F99,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FA9,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F81,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F91,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA1,
--IBUS_KEY_dead_abovedot, IBUS_KEY_f, IBUS_KEY_s, 0x1E9B,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_0, IBUS_KEY_parenright, 0x2469,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_1, IBUS_KEY_parenright, 0x246A,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_2, IBUS_KEY_parenright, 0x246B,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_3, IBUS_KEY_parenright, 0x246C,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_4, IBUS_KEY_parenright, 0x246D,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_5, IBUS_KEY_parenright, 0x246E,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_6, IBUS_KEY_parenright, 0x246F,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_7, IBUS_KEY_parenright, 0x2470,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_8, IBUS_KEY_parenright, 0x2471,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_9, IBUS_KEY_parenright, 0x2472,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x246B,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x2469,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x246A,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x246B,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x246C,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x246D,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x246E,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x246F,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x2470,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x2471,
--IBUS_KEY_parenleft, IBUS_KEY_1, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x2472,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_0, IBUS_KEY_parenright, 0x2473,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_1, IBUS_KEY_parenright, 0x3251,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_2, IBUS_KEY_parenright, 0x3252,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_3, IBUS_KEY_parenright, 0x3253,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_4, IBUS_KEY_parenright, 0x3254,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_5, IBUS_KEY_parenright, 0x3255,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_6, IBUS_KEY_parenright, 0x3256,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_7, IBUS_KEY_parenright, 0x3257,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_8, IBUS_KEY_parenright, 0x3258,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_9, IBUS_KEY_parenright, 0x3259,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x3252,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x2473,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x3251,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x3252,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x3253,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x3254,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x3255,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x3256,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x3257,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x3258,
--IBUS_KEY_parenleft, IBUS_KEY_2, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x3259,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_0, IBUS_KEY_parenright, 0x325A,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_1, IBUS_KEY_parenright, 0x325B,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_2, IBUS_KEY_parenright, 0x325C,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_3, IBUS_KEY_parenright, 0x325D,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_4, IBUS_KEY_parenright, 0x325E,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_5, IBUS_KEY_parenright, 0x325F,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_6, IBUS_KEY_parenright, 0x32B1,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_7, IBUS_KEY_parenright, 0x32B2,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_8, IBUS_KEY_parenright, 0x32B3,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_9, IBUS_KEY_parenright, 0x32B4,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x325C,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x325A,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x325B,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x325C,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x325D,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x325E,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x325F,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x32B1,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x32B2,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x32B3,
--IBUS_KEY_parenleft, IBUS_KEY_3, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x32B4,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_0, IBUS_KEY_parenright, 0x32B5,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_1, IBUS_KEY_parenright, 0x32B6,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_2, IBUS_KEY_parenright, 0x32B7,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_3, IBUS_KEY_parenright, 0x32B8,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_4, IBUS_KEY_parenright, 0x32B9,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_5, IBUS_KEY_parenright, 0x32BA,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_6, IBUS_KEY_parenright, 0x32BB,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_7, IBUS_KEY_parenright, 0x32BC,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_8, IBUS_KEY_parenright, 0x32BD,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_9, IBUS_KEY_parenright, 0x32BE,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x32B7,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x32B5,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x32B6,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x32B7,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x32B8,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x32B9,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x32BA,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x32BB,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x32BC,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x32BD,
--IBUS_KEY_parenleft, IBUS_KEY_4, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x32BE,
--IBUS_KEY_parenleft, IBUS_KEY_5, IBUS_KEY_0, IBUS_KEY_parenright, 0x32BF,
--IBUS_KEY_parenleft, 0x1100, 0x1161, IBUS_KEY_parenright, 0x326E,
--IBUS_KEY_parenleft, 0x1102, 0x1161, IBUS_KEY_parenright, 0x326F,
--IBUS_KEY_parenleft, 0x1103, 0x1161, IBUS_KEY_parenright, 0x3270,
--IBUS_KEY_parenleft, 0x1105, 0x1161, IBUS_KEY_parenright, 0x3271,
--IBUS_KEY_parenleft, 0x1106, 0x1161, IBUS_KEY_parenright, 0x3272,
--IBUS_KEY_parenleft, 0x1107, 0x1161, IBUS_KEY_parenright, 0x3273,
--IBUS_KEY_parenleft, 0x1109, 0x1161, IBUS_KEY_parenright, 0x3274,
--IBUS_KEY_parenleft, 0x110B, 0x1161, IBUS_KEY_parenright, 0x3275,
--IBUS_KEY_parenleft, 0x110C, 0x1161, IBUS_KEY_parenright, 0x3276,
--IBUS_KEY_parenleft, 0x110E, 0x1161, IBUS_KEY_parenright, 0x3277,
--IBUS_KEY_parenleft, 0x110F, 0x1161, IBUS_KEY_parenright, 0x3278,
--IBUS_KEY_parenleft, 0x1110, 0x1161, IBUS_KEY_parenright, 0x3279,
--IBUS_KEY_parenleft, 0x1111, 0x1161, IBUS_KEY_parenright, 0x327A,
--IBUS_KEY_parenleft, 0x1112, 0x1161, IBUS_KEY_parenright, 0x327B,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_0, IBUS_KEY_parenright, 0x2473,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_1, IBUS_KEY_parenright, 0x3251,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_2, IBUS_KEY_parenright, 0x3252,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_3, IBUS_KEY_parenright, 0x3253,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_4, IBUS_KEY_parenright, 0x3254,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_5, IBUS_KEY_parenright, 0x3255,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_6, IBUS_KEY_parenright, 0x3256,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_7, IBUS_KEY_parenright, 0x3257,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_8, IBUS_KEY_parenright, 0x3258,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_9, IBUS_KEY_parenright, 0x3259,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x3252,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x2473,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x3251,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x3252,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x3253,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x3254,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x3255,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x3256,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x3257,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x3258,
--IBUS_KEY_parenleft, IBUS_KEY_KP_Space, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x3259,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_0, IBUS_KEY_parenright, 0x2469,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_1, IBUS_KEY_parenright, 0x246A,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_2, IBUS_KEY_parenright, 0x246B,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_3, IBUS_KEY_parenright, 0x246C,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_4, IBUS_KEY_parenright, 0x246D,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_5, IBUS_KEY_parenright, 0x246E,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_6, IBUS_KEY_parenright, 0x246F,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_7, IBUS_KEY_parenright, 0x2470,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_8, IBUS_KEY_parenright, 0x2471,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_9, IBUS_KEY_parenright, 0x2472,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x246B,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x2469,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x246A,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x246B,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x246C,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x246D,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x246E,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x246F,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x2470,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x2471,
--IBUS_KEY_parenleft, IBUS_KEY_KP_1, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x2472,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_0, IBUS_KEY_parenright, 0x2473,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_1, IBUS_KEY_parenright, 0x3251,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_2, IBUS_KEY_parenright, 0x3252,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_3, IBUS_KEY_parenright, 0x3253,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_4, IBUS_KEY_parenright, 0x3254,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_5, IBUS_KEY_parenright, 0x3255,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_6, IBUS_KEY_parenright, 0x3256,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_7, IBUS_KEY_parenright, 0x3257,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_8, IBUS_KEY_parenright, 0x3258,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_9, IBUS_KEY_parenright, 0x3259,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x3252,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x2473,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x3251,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x3252,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x3253,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x3254,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x3255,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x3256,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x3257,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x3258,
--IBUS_KEY_parenleft, IBUS_KEY_KP_2, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x3259,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_0, IBUS_KEY_parenright, 0x325A,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_1, IBUS_KEY_parenright, 0x325B,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_2, IBUS_KEY_parenright, 0x325C,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_3, IBUS_KEY_parenright, 0x325D,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_4, IBUS_KEY_parenright, 0x325E,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_5, IBUS_KEY_parenright, 0x325F,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_6, IBUS_KEY_parenright, 0x32B1,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_7, IBUS_KEY_parenright, 0x32B2,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_8, IBUS_KEY_parenright, 0x32B3,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_9, IBUS_KEY_parenright, 0x32B4,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x325C,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x325A,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x325B,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x325C,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x325D,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x325E,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x325F,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x32B1,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x32B2,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x32B3,
--IBUS_KEY_parenleft, IBUS_KEY_KP_3, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x32B4,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_0, IBUS_KEY_parenright, 0x32B5,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_1, IBUS_KEY_parenright, 0x32B6,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_2, IBUS_KEY_parenright, 0x32B7,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_3, IBUS_KEY_parenright, 0x32B8,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_4, IBUS_KEY_parenright, 0x32B9,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_5, IBUS_KEY_parenright, 0x32BA,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_6, IBUS_KEY_parenright, 0x32BB,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_7, IBUS_KEY_parenright, 0x32BC,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_8, IBUS_KEY_parenright, 0x32BD,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_9, IBUS_KEY_parenright, 0x32BE,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_Space, IBUS_KEY_parenright, 0x32B7,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_0, IBUS_KEY_parenright, 0x32B5,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_1, IBUS_KEY_parenright, 0x32B6,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_2, IBUS_KEY_parenright, 0x32B7,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_3, IBUS_KEY_parenright, 0x32B8,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_4, IBUS_KEY_parenright, 0x32B9,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_5, IBUS_KEY_parenright, 0x32BA,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_6, IBUS_KEY_parenright, 0x32BB,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_7, IBUS_KEY_parenright, 0x32BC,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_8, IBUS_KEY_parenright, 0x32BD,
--IBUS_KEY_parenleft, IBUS_KEY_KP_4, IBUS_KEY_KP_9, IBUS_KEY_parenright, 0x32BE,
--IBUS_KEY_parenleft, IBUS_KEY_KP_5, IBUS_KEY_0, IBUS_KEY_parenright, 0x32BF,
--IBUS_KEY_C, IBUS_KEY_C, IBUS_KEY_C, IBUS_KEY_P, 0x262D,
--IBUS_KEY_U, IBUS_KEY_space, IBUS_KEY_comma, IBUS_KEY_E, 0x1E1C,
--IBUS_KEY_U, IBUS_KEY_space, IBUS_KEY_comma, IBUS_KEY_e, 0x1E1D,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Greek_iota, IBUS_KEY_apostrophe, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8B,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9B,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAB,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F83,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F93,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA3,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8A,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9A,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAA,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F82,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F92,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA2,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8A,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9A,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAA,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F82,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F92,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA2,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8B,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9B,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAB,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F83,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F93,
--IBUS_KEY_Greek_iota, IBUS_KEY_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA3,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8F,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9F,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAF,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F87,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F97,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA7,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8E,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9E,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAE,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F86,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F96,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA6,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8E,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9E,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAE,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F86,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F96,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA6,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8F,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9F,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAF,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F87,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F97,
--IBUS_KEY_Greek_iota, IBUS_KEY_asciitilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA7,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Greek_iota, IBUS_KEY_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8B,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9B,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAB,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F83,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F93,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA3,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8A,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9A,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAA,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F82,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F92,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA2,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8A,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9A,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAA,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F82,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F92,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA2,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8B,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9B,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAB,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F83,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F93,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_grave, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA3,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8C,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9C,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAC,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F84,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F94,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA4,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8D,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9D,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAD,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F85,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F95,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_acute, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA5,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_ALPHA, 0x1F8F,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_ETA, 0x1F9F,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_OMEGA, 0x1FAF,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_alpha, 0x1F87,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_eta, 0x1F97,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenleft, IBUS_KEY_Greek_omega, 0x1FA7,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenright, IBUS_KEY_Greek_ALPHA, 0x1F8E,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenright, IBUS_KEY_Greek_ETA, 0x1F9E,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenright, IBUS_KEY_Greek_OMEGA, 0x1FAE,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenright, IBUS_KEY_Greek_alpha, 0x1F86,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenright, IBUS_KEY_Greek_eta, 0x1F96,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_parenright, IBUS_KEY_Greek_omega, 0x1FA6,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ALPHA, 0x1F8E,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_ETA, 0x1F9E,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_OMEGA, 0x1FAE,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_alpha, 0x1F86,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_eta, 0x1F96,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_psili, IBUS_KEY_Greek_omega, 0x1FA6,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ALPHA, 0x1F8F,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_ETA, 0x1F9F,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_OMEGA, 0x1FAF,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_alpha, 0x1F87,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_eta, 0x1F97,
--IBUS_KEY_Greek_iota, IBUS_KEY_dead_tilde, IBUS_KEY_dead_dasia, IBUS_KEY_Greek_omega, 0x1FA7,
--};
--
--static const guint16 gtk_compose_seqs_compact_32bit_first[] = {
--IBUS_KEY_dead_grave, 54, 123, 187, 187, 187,
--IBUS_KEY_dead_acute, 187, 268, 316, 316, 316,
--IBUS_KEY_dead_circumflex, 316, 388, 388, 388, 388,
--IBUS_KEY_dead_tilde, 388, 406, 406, 406, 406,
--IBUS_KEY_dead_macron, 406, 466, 466, 466, 466,
--IBUS_KEY_dead_caron, 466, 502, 502, 502, 502,
--IBUS_KEY_dead_doublegrave, 502, 538, 538, 538, 538,
--IBUS_KEY_dead_invertedbreve, 538, 574, 574, 574, 574,
--IBUS_KEY_Multi_key, 574, 574, 850, 920, 926,
--IBUS_KEY_M, 0, 2,
--IBUS_KEY_m, 2, 2,
--0x0186, 4, 2,
--0x018E, 6, 2,
--0x0190, 8, 2,
--0x0196, 10, 2,
--0x01B1, 12, 2,
--0x01B2, 14, 2,
--0x01DD, 16, 2,
--0x0254, 18, 2,
--0x025B, 20, 2,
--0x0269, 22, 2,
--0x028A, 24, 2,
--0x028B, 26, 2,
--IBUS_KEY_ENG, 28, 2,
--IBUS_KEY_Cyrillic_a, 30, 2,
--IBUS_KEY_Cyrillic_o, 32, 2,
--IBUS_KEY_Cyrillic_er, 34, 2,
--IBUS_KEY_Cyrillic_u, 36, 2,
--IBUS_KEY_Cyrillic_A, 38, 2,
--IBUS_KEY_Cyrillic_O, 40, 2,
--IBUS_KEY_Cyrillic_ER, 42, 2,
--IBUS_KEY_Cyrillic_U, 44, 2,
--IBUS_KEY_dead_tilde, IBUS_KEY_A, 46, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_E, 49, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_I, 52, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_O, 55, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_U, 58, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_a, 61, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_e, 64, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_i, 67, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_o, 70, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_u, 73, 3,
--IBUS_KEY_dead_tilde, 0x0186, 76, 3,
--IBUS_KEY_dead_tilde, 0x018E, 79, 3,
--IBUS_KEY_dead_tilde, 0x0190, 82, 3,
--IBUS_KEY_dead_tilde, 0x01DD, 85, 3,
--IBUS_KEY_dead_tilde, 0x0254, 88, 3,
--IBUS_KEY_dead_tilde, 0x025B, 91, 3,
--IBUS_KEY_J, 94, 2,
--IBUS_KEY_j, 96, 2,
--0x0186, 98, 2,
--0x018E, 100, 2,
--0x0190, 102, 2,
--0x0196, 104, 2,
--0x01B1, 106, 2,
--0x01B2, 108, 2,
--0x01DD, 110, 2,
--0x0254, 112, 2,
--0x025B, 114, 2,
--0x0269, 116, 2,
--0x028A, 118, 2,
--0x028B, 120, 2,
--IBUS_KEY_ENG, 122, 2,
--IBUS_KEY_Cyrillic_a, 124, 2,
--IBUS_KEY_Cyrillic_ie, 126, 2,
--IBUS_KEY_Cyrillic_i, 128, 2,
--IBUS_KEY_Cyrillic_o, 130, 2,
--IBUS_KEY_Cyrillic_er, 132, 2,
--IBUS_KEY_Cyrillic_u, 134, 2,
--IBUS_KEY_Cyrillic_A, 136, 2,
--IBUS_KEY_Cyrillic_IE, 138, 2,
--IBUS_KEY_Cyrillic_I, 140, 2,
--IBUS_KEY_Cyrillic_O, 142, 2,
--IBUS_KEY_Cyrillic_ER, 144, 2,
--IBUS_KEY_Cyrillic_U, 146, 2,
--IBUS_KEY_dead_tilde, IBUS_KEY_A, 148, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_E, 151, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_I, 154, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_a, 157, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_e, 160, 3,
--IBUS_KEY_dead_tilde, IBUS_KEY_i, 163, 3,
--IBUS_KEY_dead_tilde, 0x0186, 166, 3,
--IBUS_KEY_dead_tilde, 0x018E, 169, 3,
--IBUS_KEY_dead_tilde, 0x0190, 172, 3,
--IBUS_KEY_dead_tilde, 0x01DD, 175, 3,
--IBUS_KEY_dead_tilde, 0x0254, 178, 3,
--IBUS_KEY_dead_tilde, 0x025B, 181, 3,
--0x0186, 184, 2,
--0x018E, 186, 2,
--0x0190, 188, 2,
--0x0196, 190, 2,
--0x01B1, 192, 2,
--0x01B2, 194, 2,
--0x01DD, 196, 2,
--0x0254, 198, 2,
--0x025B, 200, 2,
--0x0269, 202, 2,
--0x028A, 204, 2,
--0x028B, 206, 2,
--IBUS_KEY_Cyrillic_a, 208, 2,
--IBUS_KEY_Cyrillic_ie, 210, 2,
--IBUS_KEY_Cyrillic_i, 212, 2,
--IBUS_KEY_Cyrillic_o, 214, 2,
--IBUS_KEY_Cyrillic_er, 216, 2,
--IBUS_KEY_Cyrillic_u, 218, 2,
--IBUS_KEY_Cyrillic_A, 220, 2,
--IBUS_KEY_Cyrillic_IE, 222, 2,
--IBUS_KEY_Cyrillic_I, 224, 2,
--IBUS_KEY_Cyrillic_O, 226, 2,
--IBUS_KEY_Cyrillic_ER, 228, 2,
--IBUS_KEY_Cyrillic_U, 230, 2,
--0x0186, 232, 2,
--0x018E, 234, 2,
--0x0190, 236, 2,
--0x01DD, 238, 2,
--0x0254, 240, 2,
--0x025B, 242, 2,
--0x0186, 244, 2,
--0x018E, 246, 2,
--0x0190, 248, 2,
--0x0196, 250, 2,
--0x01B1, 252, 2,
--0x01B2, 254, 2,
--0x01DD, 256, 2,
--0x0254, 258, 2,
--0x025B, 260, 2,
--0x0269, 262, 2,
--0x028A, 264, 2,
--0x028B, 266, 2,
--IBUS_KEY_Cyrillic_a, 268, 2,
--IBUS_KEY_Cyrillic_ie, 270, 2,
--IBUS_KEY_Cyrillic_o, 272, 2,
--IBUS_KEY_Cyrillic_er, 274, 2,
--IBUS_KEY_Cyrillic_A, 276, 2,
--IBUS_KEY_Cyrillic_IE, 278, 2,
--IBUS_KEY_Cyrillic_O, 280, 2,
--IBUS_KEY_Cyrillic_ER, 282, 2,
--0x0186, 284, 2,
--0x018E, 286, 2,
--0x0190, 288, 2,
--0x0196, 290, 2,
--0x01B1, 292, 2,
--0x01B2, 294, 2,
--0x01DD, 296, 2,
--0x0254, 298, 2,
--0x025B, 300, 2,
--0x0269, 302, 2,
--0x028A, 304, 2,
--0x028B, 306, 2,
--IBUS_KEY_Cyrillic_a, 308, 2,
--IBUS_KEY_Cyrillic_ie, 310, 2,
--IBUS_KEY_Cyrillic_i, 312, 2,
--IBUS_KEY_Cyrillic_o, 314, 2,
--IBUS_KEY_Cyrillic_er, 316, 2,
--IBUS_KEY_Cyrillic_u, 318, 2,
--IBUS_KEY_Cyrillic_A, 320, 2,
--IBUS_KEY_Cyrillic_IE, 322, 2,
--IBUS_KEY_Cyrillic_I, 324, 2,
--IBUS_KEY_Cyrillic_O, 326, 2,
--IBUS_KEY_Cyrillic_ER, 328, 2,
--IBUS_KEY_Cyrillic_U, 330, 2,
--IBUS_KEY_Cyrillic_a, 332, 2,
--IBUS_KEY_Cyrillic_ie, 334, 2,
--IBUS_KEY_Cyrillic_i, 336, 2,
--IBUS_KEY_Cyrillic_o, 338, 2,
--IBUS_KEY_Cyrillic_er, 340, 2,
--IBUS_KEY_Cyrillic_u, 342, 2,
--IBUS_KEY_Cyrillic_A, 344, 2,
--IBUS_KEY_Cyrillic_IE, 346, 2,
--IBUS_KEY_Cyrillic_I, 348, 2,
--IBUS_KEY_Cyrillic_O, 350, 2,
--IBUS_KEY_Cyrillic_ER, 352, 2,
--IBUS_KEY_Cyrillic_U, 354, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_J, 356, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_j, 358, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_a, 360, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_ie, 362, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_i, 364, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_o, 366, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_er, 368, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_u, 370, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_A, 372, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_IE, 374, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_I, 376, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_O, 378, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_ER, 380, 2,
--IBUS_KEY_apostrophe, IBUS_KEY_Cyrillic_U, 382, 2,
--IBUS_KEY_F, IBUS_KEY_U, 384, 1,
--IBUS_KEY_J, IBUS_KEY_apostrophe, 385, 2,
--IBUS_KEY_J, IBUS_KEY_acute, 387, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_a, 389, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_ie, 391, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_i, 393, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_o, 395, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_er, 397, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_u, 399, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_A, 401, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_IE, 403, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_I, 405, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_O, 407, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_ER, 409, 2,
--IBUS_KEY_asciicircum, IBUS_KEY_Cyrillic_U, 411, 2,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_a, 413, 2,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_ie, 415, 2,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_o, 417, 2,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_er, 419, 2,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_A, 421, 2,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_IE, 423, 2,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_O, 425, 2,
--IBUS_KEY_underscore, IBUS_KEY_Cyrillic_ER, 427, 2,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_a, 429, 2,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_o, 431, 2,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_er, 433, 2,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_u, 435, 2,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_A, 437, 2,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_O, 439, 2,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_ER, 441, 2,
--IBUS_KEY_grave, IBUS_KEY_Cyrillic_U, 443, 2,
--IBUS_KEY_j, IBUS_KEY_apostrophe, 445, 2,
--IBUS_KEY_j, IBUS_KEY_acute, 447, 2,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_a, 449, 2,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_ie, 451, 2,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_o, 453, 2,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_er, 455, 2,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_A, 457, 2,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_IE, 459, 2,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_O, 461, 2,
--IBUS_KEY_macron, IBUS_KEY_Cyrillic_ER, 463, 2,
--IBUS_KEY_acute, IBUS_KEY_J, 465, 2,
--IBUS_KEY_acute, IBUS_KEY_j, 467, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_a, 469, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_ie, 471, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_i, 473, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_o, 475, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_er, 477, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_u, 479, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_A, 481, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_IE, 483, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_I, 485, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_O, 487, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_ER, 489, 2,
--IBUS_KEY_acute, IBUS_KEY_Cyrillic_U, 491, 2,
--IBUS_KEY_backslash, IBUS_KEY_o, IBUS_KEY_slash, 493, 1,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_a, 494, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_ie, 496, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_i, 498, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_o, 500, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_er, 502, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_u, 504, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_A, 506, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_IE, 508, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_I, 510, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_O, 512, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_ER, 514, 2,
--IBUS_KEY_grave, IBUS_KEY_grave, IBUS_KEY_Cyrillic_U, 516, 2,
--IBUS_KEY_p, IBUS_KEY_o, IBUS_KEY_o, 518, 1,
--IBUS_KEY_L, IBUS_KEY_L, IBUS_KEY_A, IBUS_KEY_P, 519, 1,
--};
--
--static const guint32 gtk_compose_seqs_compact_32bit_second[] = {
--0x004D, 0x0300,
--0x006D, 0x0300,
--0x0186, 0x0300,
--0x018E, 0x0300,
--0x0190, 0x0300,
--0x0196, 0x0300,
--0x01B1, 0x0300,
--0x01B2, 0x0300,
--0x01DD, 0x0300,
--0x0254, 0x0300,
--0x025B, 0x0300,
--0x0269, 0x0300,
--0x028A, 0x0300,
--0x028B, 0x0300,
--0x014A, 0x0300,
--0x0430, 0x0300,
--0x043E, 0x0300,
--0x0440, 0x0300,
--0x0443, 0x0300,
--0x0410, 0x0300,
--0x041E, 0x0300,
--0x0420, 0x0300,
--0x0423, 0x0300,
--0x0041, 0x0303, 0x0300,
--0x0045, 0x0303, 0x0300,
--0x0049, 0x0303, 0x0300,
--0x004F, 0x0303, 0x0300,
--0x0055, 0x0303, 0x0300,
--0x0061, 0x0303, 0x0300,
--0x0065, 0x0303, 0x0300,
--0x0069, 0x0303, 0x0300,
--0x006F, 0x0303, 0x0300,
--0x0075, 0x0303, 0x0300,
--0x0186, 0x0303, 0x0300,
--0x018E, 0x0303, 0x0300,
--0x0190, 0x0303, 0x0300,
--0x01DD, 0x0303, 0x0300,
--0x0254, 0x0303, 0x0300,
--0x025B, 0x0303, 0x0300,
--0x004A, 0x0301,
--0x006A, 0x0301,
--0x0186, 0x0301,
--0x018E, 0x0301,
--0x0190, 0x0301,
--0x0196, 0x0301,
--0x01B1, 0x0301,
--0x01B2, 0x0301,
--0x01DD, 0x0301,
--0x0254, 0x0301,
--0x025B, 0x0301,
--0x0269, 0x0301,
--0x028A, 0x0301,
--0x028B, 0x0301,
--0x014A, 0x0301,
--0x0430, 0x0301,
--0x0435, 0x0301,
--0x0438, 0x0301,
--0x043E, 0x0301,
--0x0440, 0x0301,
--0x0443, 0x0301,
--0x0410, 0x0301,
--0x0415, 0x0301,
--0x0418, 0x0301,
--0x041E, 0x0301,
--0x0420, 0x0301,
--0x0423, 0x0301,
--0x0041, 0x0303, 0x0301,
--0x0045, 0x0303, 0x0301,
--0x0049, 0x0303, 0x0301,
--0x0061, 0x0303, 0x0301,
--0x0065, 0x0303, 0x0301,
--0x0069, 0x0303, 0x0301,
--0x0186, 0x0303, 0x0301,
--0x018E, 0x0303, 0x0301,
--0x0190, 0x0303, 0x0301,
--0x01DD, 0x0303, 0x0301,
--0x0254, 0x0303, 0x0301,
--0x025B, 0x0303, 0x0301,
--0x0186, 0x0302,
--0x018E, 0x0302,
--0x0190, 0x0302,
--0x0196, 0x0302,
--0x01B1, 0x0302,
--0x01B2, 0x0302,
--0x01DD, 0x0302,
--0x0254, 0x0302,
--0x025B, 0x0302,
--0x0269, 0x0302,
--0x028A, 0x0302,
--0x028B, 0x0302,
--0x0430, 0x0302,
--0x0435, 0x0302,
--0x0438, 0x0302,
--0x043E, 0x0302,
--0x0440, 0x0302,
--0x0443, 0x0302,
--0x0410, 0x0302,
--0x0415, 0x0302,
--0x0418, 0x0302,
--0x041E, 0x0302,
--0x0420, 0x0302,
--0x0423, 0x0302,
--0x0186, 0x0303,
--0x018E, 0x0303,
--0x0190, 0x0303,
--0x01DD, 0x0303,
--0x0254, 0x0303,
--0x025B, 0x0303,
--0x0186, 0x0304,
--0x018E, 0x0304,
--0x0190, 0x0304,
--0x0196, 0x0304,
--0x01B1, 0x0304,
--0x01B2, 0x0304,
--0x01DD, 0x0304,
--0x0254, 0x0304,
--0x025B, 0x0304,
--0x0269, 0x0304,
--0x028A, 0x0304,
--0x028B, 0x0304,
--0x0430, 0x0304,
--0x0435, 0x0304,
--0x043E, 0x0304,
--0x0440, 0x0304,
--0x0410, 0x0304,
--0x0415, 0x0304,
--0x041E, 0x0304,
--0x0420, 0x0304,
--0x0186, 0x030C,
--0x018E, 0x030C,
--0x0190, 0x030C,
--0x0196, 0x030C,
--0x01B1, 0x030C,
--0x01B2, 0x030C,
--0x01DD, 0x030C,
--0x0254, 0x030C,
--0x025B, 0x030C,
--0x0269, 0x030C,
--0x028A, 0x030C,
--0x028B, 0x030C,
--0x0430, 0x030F,
--0x0435, 0x030F,
--0x0438, 0x030F,
--0x043E, 0x030F,
--0x0440, 0x030F,
--0x0443, 0x030F,
--0x0410, 0x030F,
--0x0415, 0x030F,
--0x0418, 0x030F,
--0x041E, 0x030F,
--0x0420, 0x030F,
--0x0423, 0x030F,
--0x0430, 0x0311,
--0x0435, 0x0311,
--0x0438, 0x0311,
--0x043E, 0x0311,
--0x0440, 0x0311,
--0x0443, 0x0311,
--0x0410, 0x0311,
--0x0415, 0x0311,
--0x0418, 0x0311,
--0x041E, 0x0311,
--0x0420, 0x0311,
--0x0423, 0x0311,
--0x004A, 0x0301,
--0x006A, 0x0301,
--0x0430, 0x0301,
--0x0435, 0x0301,
--0x0438, 0x0301,
--0x043E, 0x0301,
--0x0440, 0x0301,
--0x0443, 0x0301,
--0x0410, 0x0301,
--0x0415, 0x0301,
--0x0418, 0x0301,
--0x041E, 0x0301,
--0x0420, 0x0301,
--0x0423, 0x0301,
--0x1F595,
--0x004A, 0x0301,
--0x004A, 0x0301,
--0x0430, 0x0302,
--0x0435, 0x0302,
--0x0438, 0x0302,
--0x043E, 0x0302,
--0x0440, 0x0302,
--0x0443, 0x0302,
--0x0410, 0x0302,
--0x0415, 0x0302,
--0x0418, 0x0302,
--0x041E, 0x0302,
--0x0420, 0x0302,
--0x0423, 0x0302,
--0x0430, 0x0304,
--0x0435, 0x0304,
--0x043E, 0x0304,
--0x0440, 0x0304,
--0x0410, 0x0304,
--0x0415, 0x0304,
--0x041E, 0x0304,
--0x0420, 0x0304,
--0x0430, 0x0300,
--0x043E, 0x0300,
--0x0440, 0x0300,
--0x0443, 0x0300,
--0x0410, 0x0300,
--0x041E, 0x0300,
--0x0420, 0x0300,
--0x0423, 0x0300,
--0x006A, 0x0301,
--0x006A, 0x0301,
--0x0430, 0x0304,
--0x0435, 0x0304,
--0x043E, 0x0304,
--0x0440, 0x0304,
--0x0410, 0x0304,
--0x0415, 0x0304,
--0x041E, 0x0304,
--0x0420, 0x0304,
--0x004A, 0x0301,
--0x006A, 0x0301,
--0x0430, 0x0301,
--0x0435, 0x0301,
--0x0438, 0x0301,
--0x043E, 0x0301,
--0x0440, 0x0301,
--0x0443, 0x0301,
--0x0410, 0x0301,
--0x0415, 0x0301,
--0x0418, 0x0301,
--0x041E, 0x0301,
--0x0420, 0x0301,
--0x0423, 0x0301,
--0x1F64C,
--0x0430, 0x030F,
--0x0435, 0x030F,
--0x0438, 0x030F,
--0x043E, 0x030F,
--0x0440, 0x030F,
--0x0443, 0x030F,
--0x0410, 0x030F,
--0x0415, 0x030F,
--0x0418, 0x030F,
--0x041E, 0x030F,
--0x0420, 0x030F,
--0x0423, 0x030F,
--0x1F4A9,
--0x1F596,
--};
--
--#endif /* __GTK_IM_CONTEXT_SIMPLE_SEQS_H__ */
--
-diff --git a/src/ibus.gresources.xml.in b/src/ibus.gresources.xml.in
-new file mode 100644
-index 00000000..0582c2fb
---- /dev/null
-+++ b/src/ibus.gresources.xml.in
-@@ -0,0 +1,6 @@
-+<gresources>
-+ <gresource prefix='/org/freedesktop/ibus'>
-+ <file alias="compose/sequences">compose/sequences-@ENDIAN@-endian</file>
-+ </gresource>
-+</gresources>
-+
-diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
-index 387a24a8..3e7b0f41 100644
---- a/src/ibuscomposetable.c
-+++ b/src/ibuscomposetable.c
-@@ -1,7 +1,7 @@
- /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
- /* ibus - The Input Bus
- * Copyright (C) 2013-2014 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2013-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2013-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
-@@ -36,12 +36,6 @@
-
- #include "ibusenginesimpleprivate.h"
-
--/* This file contains the table of the compose sequences,
-- * static const guint16 gtk_compose_seqs_compact[] = {}
-- * It is generated from the compose-parse.py script.
-- */
--#include "gtkimcontextsimpleseqs.h"
--
-
- #define IBUS_COMPOSE_TABLE_MAGIC "IBusComposeTable"
- #define IBUS_COMPOSE_TABLE_VERSION (4)
-@@ -55,10 +49,6 @@ typedef struct {
- } IBusComposeData;
-
-
--extern const IBusComposeTableCompactEx ibus_compose_table_compact;
--extern const IBusComposeTableCompactEx ibus_compose_table_compact_32bit;
--
--
- static void
- ibus_compose_data_free (IBusComposeData *compose_data)
- {
-@@ -504,24 +494,28 @@ ibus_compose_list_parse_file (const char *compose_file,
-
-
- static GList *
--ibus_compose_list_check_duplicated (GList *compose_list,
-- int max_compose_len)
-+ibus_compose_list_check_duplicated (GList *compose_list,
-+ int max_compose_len,
-+ GSList *compose_tables)
- {
- GList *list;
- static guint16 *keysyms;
- GList *removed_list = NULL;
- IBusComposeData *compose_data;
-- gboolean is_32bit;
-+ GString *output = g_string_new ("");
-
- keysyms = g_new (guint16, max_compose_len + 1);
-
- for (list = compose_list; list != NULL; list = list->next) {
- int i;
- int n_compose = 0;
-+ gboolean is_32bit;
-+ guint n_outputs;
-+ GSList *tmp_list;
- gboolean compose_finish = FALSE;
-- gunichar *output_chars = NULL;
-+ gboolean compose_match = FALSE;
-+ gboolean success = FALSE;
- gunichar output_char = 0;
-- guint n_outputs;
-
- compose_data = list->data;
-
-@@ -541,36 +535,50 @@ ibus_compose_list_check_duplicated (GList *compose_list,
- n_outputs = unichar_length (compose_data->values);
- is_32bit = (n_outputs > 1) ? TRUE :
- (compose_data->values[0] >= 0xFFFF) ? TRUE : FALSE;
-- if (!is_32bit &&
-- ibus_compose_table_compact_check (&ibus_compose_table_compact,
-- keysyms,
-- n_compose,
-- &compose_finish,
-- &output_chars) &&
-- compose_finish) {
-- if (compose_data->values[0] == *output_chars)
-- removed_list = g_list_append (removed_list, compose_data);
-- g_free (output_chars);
-- } else if (is_32bit &&
-- ibus_compose_table_compact_check (
-- &ibus_compose_table_compact_32bit,
-- keysyms,
-- n_compose,
-- &compose_finish,
-- &output_chars) && compose_finish) {
--
-- if (n_outputs == unichar_length (output_chars)) {
-+ g_string_erase (output, 0, -1);
-+ tmp_list = compose_tables;
-+ while (tmp_list) {
-+ is_32bit = FALSE;
-+ if (ibus_compose_table_check (
-+ (IBusComposeTableEx *)tmp_list->data,
-+ keysyms,
-+ n_compose,
-+ &compose_finish,
-+ &compose_match,
-+ output,
-+ is_32bit) && compose_finish && compose_match) {
-+ if (compose_data->values[0] == g_utf8_get_char (output->str)) {
-+ success = TRUE;
-+ break;
-+ }
-+ }
-+ is_32bit = TRUE;
-+ if (ibus_compose_table_check (
-+ (IBusComposeTableEx *)tmp_list->data,
-+ keysyms,
-+ n_compose,
-+ &compose_finish,
-+ &compose_match,
-+ output,
-+ is_32bit) && compose_finish && compose_match) {
- int j = 0;
-+ gchar *str = output->str;
- while (j < n_outputs && compose_data->values[j]) {
-- if (compose_data->values[j] != output_chars[j])
-+ gunichar ch = g_utf8_get_char (str);
-+ if (compose_data->values[j] != ch)
- break;
-+ str = g_utf8_next_char (str);
- ++j;
- }
-- if (j == n_outputs)
-- removed_list = g_list_append (removed_list, compose_data);
-+ if (j == n_outputs && *str == '\0') {
-+ success = TRUE;
-+ break;
-+ }
- }
-- g_free (output_chars);
--
-+ tmp_list = tmp_list->next;
-+ }
-+ if (success) {
-+ removed_list = g_list_append (removed_list, compose_data);
- } else if (ibus_check_algorithmically (keysyms,
- n_compose,
- &output_char)) {
-@@ -578,6 +586,7 @@ ibus_compose_list_check_duplicated (GList *compose_list,
- removed_list = g_list_append (removed_list, compose_data);
- }
- }
-+ g_string_free (output, TRUE);
-
- for (list = removed_list; list != NULL; list = list->next) {
- compose_data = list->data;
-@@ -717,19 +726,100 @@ ibus_compose_hash_get_cache_path (guint32 hash)
-
-
- static GVariant *
--ibus_compose_table_serialize (IBusComposeTableEx *compose_table)
-+compose_data_to_variant (gconstpointer compose_data,
-+ gboolean is_32bit,
-+ guint16 index_stride,
-+ gsize n_seqs,
-+ gboolean reverse_endianness,
-+ GError **error)
-+{
-+ guint16 *compose_data16 = NULL;
-+ guint32 *compose_data32 = NULL;
-+ guint16 *target_data16 = NULL;
-+ guint32 *target_data32 = NULL;
-+ gsize i, length;
-+ GVariant *variant_data = NULL;
-+
-+ g_assert (compose_data);
-+ if (error)
-+ *error = NULL;
-+ if ((index_stride * n_seqs) > G_MAXUINT64) {
-+ if (error) {
-+ g_set_error (error, IBUS_ERROR, IBUS_ERROR_FAILED,
-+ "Length %u x %lu is too long",
-+ index_stride, n_seqs);
-+ }
-+ return NULL;
-+ }
-+ length = index_stride * n_seqs;
-+
-+ if (reverse_endianness) {
-+ if (is_32bit) {
-+ if (!(target_data32 = g_new0 (guint32, length))) {
-+ g_set_error (error, IBUS_ERROR, IBUS_ERROR_FAILED,
-+ "Failed to malloc");
-+ return NULL;
-+ }
-+ compose_data32 = (guint32*)compose_data;
-+ for (i = 0; i < length; i++)
-+ target_data32[i] = GUINT32_SWAP_LE_BE (compose_data32[i]);
-+ } else {
-+ if (!(target_data16 = g_new0 (guint16, length))) {
-+ g_set_error (error, IBUS_ERROR, IBUS_ERROR_FAILED,
-+ "Failed to malloc");
-+ return NULL;
-+ }
-+ compose_data16 = (guint16*)compose_data;
-+ for (i = 0; i < length; i++)
-+ target_data16[i] = GUINT16_SWAP_LE_BE (compose_data16[i]);
-+ }
-+ } else {
-+ if (is_32bit)
-+ target_data32 = (guint32*)compose_data;
-+ else
-+ target_data16 = (guint16*)compose_data;
-+ }
-+
-+ if (is_32bit) {
-+ variant_data = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
-+ target_data32,
-+ length,
-+ sizeof (guint32));
-+ } else {
-+ variant_data = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT16,
-+ target_data16,
-+ length,
-+ sizeof (guint16));
-+ }
-+ if (reverse_endianness) {
-+ g_free (target_data16);
-+ g_free (target_data32);
-+ }
-+ if (!variant_data) {
-+ g_set_error (error, IBUS_ERROR, IBUS_ERROR_FAILED,
-+ "Could not change compose data to GVariant.");
-+ return NULL;
-+ }
-+ return variant_data;
-+}
-+
-+
-+GVariant *
-+ibus_compose_table_serialize (IBusComposeTableEx *compose_table,
-+ gboolean reverse_endianness)
- {
- const char *header = IBUS_COMPOSE_TABLE_MAGIC;
- const guint16 version = IBUS_COMPOSE_TABLE_VERSION;
- guint16 max_seq_len;
- guint16 index_stride;
- guint16 n_seqs;
-- guint16 n_seqs_32bit = 0;
-- guint16 second_size = 0;
-+ gsize n_seqs_32bit = 0;
-+ gsize second_size = 0;
- GVariant *variant_data = NULL;
- GVariant *variant_data_32bit_first = NULL;
- GVariant *variant_data_32bit_second = NULL;
- GVariant *variant_table;
-+ GError *error = NULL;
-
- g_return_val_if_fail (compose_table != NULL, NULL);
-
-@@ -741,13 +831,18 @@ ibus_compose_table_serialize (IBusComposeTableEx *compose_table)
-
- if (n_seqs) {
- g_return_val_if_fail (compose_table->data, NULL);
--
-- variant_data = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT16,
-- compose_table->data,
-- (gsize)index_stride * n_seqs,
-- sizeof (guint16));
-+ variant_data = compose_data_to_variant (compose_table->data,
-+ FALSE,
-+ index_stride,
-+ n_seqs,
-+ reverse_endianness,
-+ &error);
- if (!variant_data) {
-- g_warning ("Could not change compose data to GVariant.");
-+ g_warning (
-+ "Failed to generate variant from 16bit compose ID %u: %s",
-+ compose_table->id,
-+ error->message);
-+ g_error_free (error);
- return NULL;
- }
- } else {
-@@ -782,18 +877,34 @@ ibus_compose_table_serialize (IBusComposeTableEx *compose_table)
- g_warning ("data_second is NULL");
- goto out_serialize;
- }
-- variant_data_32bit_first = g_variant_new_fixed_array (
-- G_VARIANT_TYPE_UINT16,
-- compose_table->priv->data_first,
-- (gsize)index_stride * n_seqs_32bit,
-- sizeof (guint16));
-- variant_data_32bit_second = g_variant_new_fixed_array (
-- G_VARIANT_TYPE_UINT32,
-- compose_table->priv->data_second,
-- compose_table->priv->second_size,
-- sizeof (guint32));
-- if (!variant_data_32bit_first || !variant_data_32bit_second) {
-- g_warning ("Could not change 32bit compose data to GVariant.");
-+ variant_data_32bit_first =
-+ compose_data_to_variant (compose_table->priv->data_first,
-+ FALSE,
-+ index_stride,
-+ n_seqs_32bit,
-+ reverse_endianness,
-+ &error);
-+ if (!variant_data_32bit_first) {
-+ g_warning (
-+ "Failed to generate variant from compose first ID %u: %s",
-+ compose_table->id,
-+ error->message);
-+ g_error_free (error);
-+ goto out_serialize;
-+ }
-+ variant_data_32bit_second =
-+ compose_data_to_variant (compose_table->priv->data_second,
-+ TRUE,
-+ 1,
-+ compose_table->priv->second_size,
-+ reverse_endianness,
-+ &error);
-+ if (!variant_data_32bit_second) {
-+ g_warning (
-+ "Failed to generate variant from compose second ID %u: %s",
-+ compose_table->id,
-+ error->message);
-+ g_error_free (error);
- goto out_serialize;
- }
- } else {
-@@ -840,9 +951,10 @@ ibus_compose_table_find (gconstpointer data1,
- }
-
-
--static IBusComposeTableEx *
-+IBusComposeTableEx *
- ibus_compose_table_deserialize (const char *contents,
-- gsize length)
-+ gsize length,
-+ gboolean reverse_endianness)
- {
- IBusComposeTableEx *retval = NULL;
- GVariantType *type;
-@@ -857,9 +969,9 @@ ibus_compose_table_deserialize (const char *contents,
- guint16 n_seqs_32bit = 0;
- guint16 second_size = 0;
- guint16 index_stride;
-- gconstpointer data = NULL;
-- gconstpointer data_32bit_first = NULL;
-- gconstpointer data_32bit_second = NULL;
-+ const guint16 *data = NULL;
-+ const guint16 *data_32bit_first = NULL;
-+ const guint32 *data_32bit_second = NULL;
- gsize data_length = 0;
-
- g_return_val_if_fail (contents != NULL, NULL);
-@@ -932,9 +1044,9 @@ ibus_compose_table_deserialize (const char *contents,
- }
-
- if (n_seqs && variant_data) {
-- data = g_variant_get_fixed_array (variant_data,
-- &data_length,
-- sizeof (guint16));
-+ data = (const guint16*)g_variant_get_fixed_array (variant_data,
-+ &data_length,
-+ sizeof (guint16));
- }
- index_stride = max_seq_len + 2;
-
-@@ -945,10 +1057,8 @@ ibus_compose_table_deserialize (const char *contents,
- }
-
- retval = g_new0 (IBusComposeTableEx, 1);
-- if (data_length) {
-- retval->data = g_new (guint16, data_length);
-- memcpy (retval->data, data, data_length * sizeof (guint16));
-- }
-+ if (data_length)
-+ retval->data = data;
- retval->max_seq_len = max_seq_len;
- retval->n_seqs = n_seqs;
-
-@@ -965,9 +1075,10 @@ ibus_compose_table_deserialize (const char *contents,
-
- data_length = 0;
- if (n_seqs_32bit && variant_data_32bit_first) {
-- data_32bit_first = g_variant_get_fixed_array (variant_data_32bit_first,
-- &data_length,
-- sizeof (guint16));
-+ data_32bit_first = (const guint16*)g_variant_get_fixed_array (
-+ variant_data_32bit_first,
-+ &data_length,
-+ sizeof (guint16));
- if (data_length != (gsize) index_stride * n_seqs_32bit) {
- g_warning ("32bit cache size is not correct %d %d %lu",
- max_seq_len, n_seqs_32bit, data_length);
-@@ -983,15 +1094,14 @@ ibus_compose_table_deserialize (const char *contents,
- g_warning ("Failed g_new");
- goto out_load_cache;
- }
-- retval->priv->data_first = g_new (guint16, data_length);
-- memcpy (retval->priv->data_first,
-- data_32bit_first, data_length * sizeof (guint16));
-+ /* Do not memcpy for the possible mmap data */
-+ retval->priv->data_first = data_32bit_first;
- retval->priv->first_n_seqs = n_seqs_32bit;
- }
-
- data_length = 0;
- if (second_size && variant_data_32bit_second) {
-- data_32bit_second = g_variant_get_fixed_array (
-+ data_32bit_second = (const guint32*)g_variant_get_fixed_array (
- variant_data_32bit_second,
- &data_length,
- sizeof (guint32));
-@@ -1002,14 +1112,9 @@ ibus_compose_table_deserialize (const char *contents,
- }
- }
- if (data_length) {
-- if ((retval->priv->data_second = g_new (guint32, data_length))) {
-- memcpy (retval->priv->data_second,
-- data_32bit_second, data_length * sizeof (guint32));
-- retval->priv->second_size = second_size;
-- } else {
-- g_warning ("Failed g_new");
-- retval->priv->second_size = 0;
-- }
-+ /* Do not memcpy for the possible mmap data */
-+ retval->priv->data_second = data_32bit_second;
-+ retval->priv->second_size = second_size;
- }
-
-
-@@ -1058,14 +1163,15 @@ ibus_compose_table_load_cache (const gchar *compose_file)
- break;
- }
-
-- retval = ibus_compose_table_deserialize (contents, length);
-- if (retval == NULL)
-+ retval = ibus_compose_table_deserialize (contents, length, FALSE);
-+ if (retval == NULL) {
- g_warning ("Failed to load the cache file: %s", path);
-- else
-+ } else {
-+ retval->rawdata = contents;
- retval->id = hash;
-+ }
- } while (0);
-
-- g_free (contents);
- g_free (path);
- return retval;
- }
-@@ -1083,7 +1189,7 @@ ibus_compose_table_save_cache (IBusComposeTableEx *compose_table)
- if ((path = ibus_compose_hash_get_cache_path (compose_table->id)) == NULL)
- return;
-
-- variant_table = ibus_compose_table_serialize (compose_table);
-+ variant_table = ibus_compose_table_serialize (compose_table, FALSE);
- if (variant_table == NULL) {
- g_warning ("Failed to serialize compose table %s", path);
- goto out_save_cache;
-@@ -1148,6 +1254,7 @@ ibus_compose_table_new_with_list (GList *compose_list,
- gsize s_size_total, s_size_16bit, v_size_32bit, v_index_32bit;
- guint n = 0, m = 0;
- int i, j;
-+ gpointer rawdata;
- guint16 *ibus_compose_seqs = NULL;
- guint16 *ibus_compose_seqs_32bit_first = NULL;
- guint32 *ibus_compose_seqs_32bit_second = NULL;
-@@ -1171,22 +1278,53 @@ ibus_compose_table_new_with_list (GList *compose_list,
- }
-
- if (s_size_16bit) {
-- ibus_compose_seqs = g_new (guint16, s_size_16bit * n_index_stride);
-- if (!ibus_compose_seqs) {
-+ if (G_UNLIKELY ((s_size_16bit * n_index_stride) >
-+ (G_MAXSIZE / sizeof (guint16)))) {
-+ g_warning ("Too long allocation %lu x %u",
-+ s_size_16bit, n_index_stride);
-+ return NULL;
-+ }
-+ rawdata = (gpointer)g_new (guint16, s_size_16bit * n_index_stride);
-+ if (G_UNLIKELY (!rawdata)) {
- g_warning ("Failed g_new");
- return NULL;
- }
-+ ibus_compose_seqs = (guint16*)rawdata;
- }
- if (s_size_total > s_size_16bit) {
-- ibus_compose_seqs_32bit_first =
-- g_new (guint16,
-- (s_size_total - s_size_16bit) * n_index_stride);
-- ibus_compose_seqs_32bit_second = g_new (guint32, v_size_32bit);
-+ if (G_UNLIKELY (((s_size_total - s_size_16bit) * n_index_stride) >
-+ (G_MAXSIZE / sizeof (guint16)))) {
-+ g_warning ("Too long allocation %lu x %u",
-+ s_size_total - s_size_16bit, n_index_stride);
-+ return NULL;
-+ }
-+ rawdata = (gpointer)g_new (
-+ guint16,
-+ (s_size_total - s_size_16bit) * n_index_stride);
-+ if (G_UNLIKELY ((sizeof (guint16) * (s_size_total - s_size_16bit)
-+ * n_index_stride) / sizeof (guint32) + v_size_32bit
-+ > (G_MAXSIZE / sizeof (guint32)))) {
-+ g_warning ("Too long allocation %lu x %u x %lu",
-+ s_size_total - s_size_16bit,
-+ n_index_stride,
-+ v_size_32bit);
-+ return NULL;
-+ }
-+ if (G_LIKELY (rawdata)) {
-+ rawdata = g_realloc (
-+ rawdata,
-+ sizeof (guint16) * (s_size_total - s_size_16bit)
-+ * n_index_stride + sizeof (guint32) * v_size_32bit);
-+ }
-+ if (G_LIKELY (rawdata)) {
-+ ibus_compose_seqs_32bit_first = (guint16*)rawdata;
-+ ibus_compose_seqs_32bit_second =
-+ (guint32*)(rawdata + sizeof (guint16)
-+ * (s_size_total - s_size_16bit) * n_index_stride);
-+ }
- if (!ibus_compose_seqs_32bit_first || !ibus_compose_seqs_32bit_second) {
- g_warning ("Failed g_new");
-- g_free (ibus_compose_seqs);
-- g_free (ibus_compose_seqs_32bit_first);
-- g_free (ibus_compose_seqs_32bit_second);
-+ g_free (rawdata);
- return NULL;
- }
- }
-@@ -1247,6 +1385,7 @@ ibus_compose_table_new_with_list (GList *compose_list,
- retval->max_seq_len = max_compose_len;
- retval->n_seqs = s_size_16bit;
- retval->id = hash;
-+ retval->rawdata = rawdata;
- if (s_size_total > s_size_16bit) {
- retval->priv = g_new0 (IBusComposeTablePrivate, 1);
- retval->priv->data_first = ibus_compose_seqs_32bit_first;
-@@ -1260,7 +1399,8 @@ ibus_compose_table_new_with_list (GList *compose_list,
-
-
- IBusComposeTableEx *
--ibus_compose_table_new_with_file (const gchar *compose_file)
-+ibus_compose_table_new_with_file (const gchar *compose_file,
-+ GSList *compose_tables)
- {
- GList *compose_list = NULL;
- IBusComposeTableEx *compose_table;
-@@ -1275,7 +1415,8 @@ ibus_compose_table_new_with_file (const gchar *compose_file)
- return NULL;
- n_index_stride = max_compose_len + 2;
- compose_list = ibus_compose_list_check_duplicated (compose_list,
-- max_compose_len);
-+ max_compose_len,
-+ compose_tables);
- compose_list = g_list_sort_with_data (
- compose_list,
- (GCompareDataFunc) ibus_compose_data_compare,
-@@ -1370,7 +1511,8 @@ ibus_compose_table_list_add_file (GSList *compose_tables,
- if (compose_table != NULL)
- return g_slist_prepend (compose_tables, compose_table);
-
-- if ((compose_table = ibus_compose_table_new_with_file (compose_file))
-+ if ((compose_table = ibus_compose_table_new_with_file (compose_file,
-+ compose_tables))
- == NULL) {
- return compose_tables;
- }
-@@ -1380,6 +1522,20 @@ ibus_compose_table_list_add_file (GSList *compose_tables,
- }
-
-
-+GSList *
-+ibus_compose_table_list_add_table (GSList *compose_tables,
-+ IBusComposeTableEx *compose_table)
-+{
-+ g_return_val_if_fail (compose_table != NULL, compose_tables);
-+ if (g_slist_find_custom (compose_tables,
-+ GINT_TO_POINTER (compose_table->id),
-+ ibus_compose_table_find) != NULL) {
-+ return compose_tables;
-+ }
-+ return g_slist_prepend (compose_tables, compose_table);
-+}
-+
-+
- static int
- compare_seq (const void *key, const void *value)
- {
-@@ -1410,7 +1566,7 @@ ibus_compose_table_check (const IBusComposeTableEx *table,
- gboolean is_32bit)
- {
- int row_stride = table->max_seq_len + 2;
-- guint16 *data_first;
-+ const guint16 *data_first;
- int n_seqs;
- guint16 *seq;
-
-@@ -1508,147 +1664,6 @@ ibus_compose_table_check (const IBusComposeTableEx *table,
- }
-
-
--static int
--compare_seq_index (const void *key, const void *value)
--{
-- const guint16 *keysyms = key;
-- const guint16 *seq = value;
--
-- if (keysyms[0] < seq[0])
-- return -1;
-- else if (keysyms[0] > seq[0])
-- return 1;
-- return 0;
--}
--
--
--/**
-- * ibus_compose_table_compact_check:
-- * @table: A const `IBusComposeTableCompactEx`
-- * @compose_buffer: Typed compose sequence buffer
-- * @n_compose: The length of `compose_buffer`
-- * @compose_finish: If %TRUE, `output_chars` should be committed
-- * @output_chars: An array of gunichar of output compose characters
-- *
-- * output_chars is better to use gunichar instead of GString because
-- * IBusComposeData->values[] is the gunichar array.
-- */
--gboolean
--ibus_compose_table_compact_check (const IBusComposeTableCompactEx
-- *table,
-- guint16 *compose_buffer,
-- int n_compose,
-- gboolean *compose_finish,
-- gunichar **output_chars)
--{
-- int row_stride;
-- guint16 *seq_index;
-- guint16 *seq;
-- int i;
--
-- /* compose_finish and output_chars should not be initialized because
-- * ibus_compose_table_check() is called at first and
-- * engine->priv->tentative_match will be preedit after this is called.
-- */
--
-- /* Will never match, if the sequence in the compose buffer is longer
-- * than the sequences in the table. Further, compare_seq (key, val)
-- * will overrun val if key is longer than val. */
-- if (n_compose > table->max_seq_len)
-- return FALSE;
--
-- seq_index = bsearch (compose_buffer,
-- table->data,
-- table->n_index_size,
-- sizeof (guint16) * table->n_index_stride,
-- compare_seq_index);
--
-- if (seq_index == NULL)
-- return FALSE;
--
-- if (n_compose == 1)
-- return TRUE;
--
-- seq = NULL;
--
-- if (table->priv) {
-- for (i = n_compose - 1; i < table->max_seq_len; i++) {
-- row_stride = i + 2;
--
-- if (seq_index[i + 1] - seq_index[i] > 0) {
-- g_assert (row_stride);
-- seq = bsearch (compose_buffer + 1,
-- table->data + seq_index[i],
-- (seq_index[i + 1] - seq_index[i]) / row_stride,
-- sizeof (guint16) * row_stride,
-- compare_seq);
-- if (seq) {
-- if (i == n_compose - 1)
-- break;
-- else
-- return TRUE;
-- }
-- }
-- }
-- if (!seq) {
-- return FALSE;
-- } else {
-- int index = seq[row_stride - 2];
-- int length = seq[row_stride - 1];
-- int j;
-- if (compose_finish)
-- *compose_finish = TRUE;
-- if (output_chars) {
-- if (!(*output_chars))
-- *output_chars = g_new (gunichar, length + 1);
-- for (j = 0; j < length; j++) {
-- (*output_chars)[j] = table->priv->data2[index + j];
-- }
-- (*output_chars)[length] = 0;
-- }
--
-- return TRUE;
-- }
-- } else {
-- for (i = n_compose - 1; i < table->max_seq_len; i++) {
-- row_stride = i + 1;
--
-- if (seq_index[i + 1] - seq_index[i] > 0) {
-- g_assert (row_stride);
-- seq = bsearch (compose_buffer + 1,
-- table->data + seq_index[i],
-- (seq_index[i + 1] - seq_index[i]) / row_stride,
-- sizeof (guint16) * row_stride,
-- compare_seq);
--
-- if (seq) {
-- if (i == n_compose - 1)
-- break;
-- else
-- return TRUE;
-- }
-- }
-- }
-- if (!seq) {
-- return FALSE;
-- } else {
-- if (compose_finish)
-- *compose_finish = TRUE;
-- if (output_chars) {
-- if (!(*output_chars))
-- *output_chars = g_new (gunichar, 2);
-- (*output_chars)[0] = seq[row_stride - 1];
-- (*output_chars)[1] = 0;
-- }
--
-- return TRUE;
-- }
-- }
--
-- g_assert_not_reached ();
--}
--
--
- /* 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).
-diff --git a/src/ibuscomposetable.h b/src/ibuscomposetable.h
-index b60e53fe..be1463ae 100644
---- a/src/ibuscomposetable.h
-+++ b/src/ibuscomposetable.h
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2013-2014 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2013-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2013-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
-@@ -46,31 +46,18 @@ struct _IBusComposeTable
- struct _IBusComposeTableEx
- {
- IBusComposeTablePrivate *priv;
-- guint16 *data;
-+ const guint16 *data;
- gint max_seq_len;
- gint n_seqs;
- guint32 id;
-+ char *rawdata;
- };
-
--struct _IBusComposeTableCompact
--{
-- const guint16 *data;
-- gint max_seq_len;
-- gint n_index_size;
-- gint n_index_stride;
--};
--
--struct _IBusComposeTableCompactEx
--{
-- IBusComposeTableCompactPrivate *priv;
-- const guint16 *data;
-- gint max_seq_len;
-- gint n_index_size;
-- gint n_index_stride;
--};
-
- IBusComposeTableEx *
-- ibus_compose_table_new_with_file (const gchar *compose_file);
-+ ibus_compose_table_new_with_file (const gchar *compose_file,
-+ GSList
-+ *compose_tables);
- IBusComposeTableEx *
- ibus_compose_table_load_cache (const gchar *compose_file);
- void ibus_compose_table_save_cache (IBusComposeTableEx
-@@ -85,6 +72,10 @@ GSList * ibus_compose_table_list_add_array
- GSList * ibus_compose_table_list_add_file (GSList
- *compose_tables,
- const gchar *compose_file);
-+GSList * ibus_compose_table_list_add_table (GSList
-+ *compose_tables,
-+ IBusComposeTableEx
-+ *compose_table);
-
- G_BEGIN_DECLS
- #endif
-diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c
-index c57a3ea5..3d1668b2 100644
---- a/src/ibusenginesimple.c
-+++ b/src/ibusenginesimple.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2014 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2015-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2015-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- * Copyright (C) 2014-2017 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
-@@ -34,12 +34,6 @@
- #include "ibuskeysyms.h"
- #include "ibusutil.h"
-
--/* This file contains the table of the compose sequences,
-- * static const guint16 gtk_compose_seqs_compact[] = {}
-- * It is generated from the compose-parse.py script.
-- */
--#include "gtkimcontextsimpleseqs.h"
--
- #include <memory.h>
- #include <stdlib.h>
-
-@@ -92,33 +86,6 @@ struct _IBusEngineSimplePrivate {
- gboolean lookup_table_visible;
- };
-
--/* From the values below, the value 30 means the number of different first keysyms
-- * that exist in the Compose file (from Xorg). When running compose-parse.py without
-- * parameters, you get the count that you can put here. Needed when updating the
-- * gtkimcontextsimpleseqs.h header file (contains the compose sequences).
-- * Assign the value of "Number of different first items" of compose-parse.py
-- * to n_seqs in IBusComposeTableCompact
-- */
--IBusComposeTableCompactPrivate ibus_compose_table_compact_32bit_priv = {
-- gtk_compose_seqs_compact_32bit_second
--};
--
--const IBusComposeTableCompactEx ibus_compose_table_compact = {
-- NULL,
-- gtk_compose_seqs_compact,
-- 5,
-- 30,
-- 6
--};
--
--const IBusComposeTableCompactEx ibus_compose_table_compact_32bit = {
-- &ibus_compose_table_compact_32bit_priv,
-- gtk_compose_seqs_compact_32bit_first,
-- 5,
-- 9,
-- 6
--};
--
- guint COMPOSE_BUFFER_SIZE = 20;
- G_LOCK_DEFINE_STATIC (global_tables);
- static GSList *global_tables;
-@@ -174,6 +141,12 @@ ibus_engine_simple_class_init (IBusEngineSimpleClass *class)
- static void
- ibus_engine_simple_init (IBusEngineSimple *simple)
- {
-+ GBytes *data;
-+ GError *error = NULL;
-+ const char *contents;
-+ gsize length = 0;
-+ IBusComposeTableEx *en_compose_table;
-+
- simple->priv = IBUS_ENGINE_SIMPLE_GET_PRIVATE (simple);
- simple->priv->compose_buffer = g_new0(guint16, COMPOSE_BUFFER_SIZE + 1);
- simple->priv->hex_mode_enabled =
-@@ -181,6 +154,22 @@ ibus_engine_simple_init (IBusEngineSimple *simple)
- g_getenv("IBUS_ENABLE_CONTROL_SHIFT_U") != NULL;
- simple->priv->tentative_match = g_string_new ("");
- simple->priv->tentative_match_len = 0;
-+ data = g_resources_lookup_data ("/org/freedesktop/ibus/compose/sequences",
-+ G_RESOURCE_LOOKUP_FLAGS_NONE,
-+ &error);
-+ if (error) {
-+ g_warning ("Nout found compose resource %s", error->message);
-+ g_clear_error (&error);
-+ return;
-+ }
-+ contents = g_bytes_get_data (data, &length);
-+ en_compose_table = ibus_compose_table_deserialize (contents, length, FALSE);
-+ if (!en_compose_table) {
-+ g_warning ("Failed to load EN compose table");
-+ } else {
-+ global_tables = ibus_compose_table_list_add_table (global_tables,
-+ en_compose_table);
-+ }
- }
-
-
-@@ -785,7 +774,6 @@ ibus_engine_simple_check_all_compose_table (IBusEngineSimple *simple,
- GString *output = g_string_new ("");
- gboolean success = FALSE;
- gboolean is_32bit = FALSE;
-- gunichar *output_chars = NULL;
- gunichar output_char = '\0';
-
- /* GtkIMContextSimple output the first compose char in case of
-@@ -850,57 +838,6 @@ ibus_engine_simple_check_all_compose_table (IBusEngineSimple *simple,
- g_string_free (output, TRUE);
- output = NULL;
-
-- if (ibus_compose_table_compact_check (&ibus_compose_table_compact,
-- priv->compose_buffer,
-- n_compose,
-- &compose_finish,
-- &output_chars)) {
-- priv->in_compose_sequence = TRUE;
-- if (compose_finish) {
-- if (success) {
-- g_string_append_unichar (priv->tentative_match, *output_chars);
-- priv->tentative_match_len = n_compose;
-- } else {
-- ibus_engine_simple_commit_char (simple, *output_chars);
-- priv->compose_buffer[0] = 0;
-- }
-- g_free (output_chars);
-- ibus_engine_simple_update_preedit_text (simple);
-- return TRUE;
-- }
-- success = TRUE;
-- }
-- g_free (output_chars);
-- output_chars = NULL;
-- if (ibus_compose_table_compact_check (&ibus_compose_table_compact_32bit,
-- priv->compose_buffer,
-- n_compose,
-- &compose_finish,
-- &output_chars)) {
-- priv->in_compose_sequence = TRUE;
-- if (compose_finish) {
-- GError *error = NULL;
-- char *str = g_ucs4_to_utf8 (output_chars, -1, NULL, NULL, &error);
-- if (!str) {
-- g_warning ("Failed to output multiple characters: %s",
-- error->message);
-- g_error_free (error);
-- } else if (success) {
-- g_string_append (priv->tentative_match, str);
-- priv->tentative_match_len = n_compose;
-- } else {
-- ibus_engine_simple_commit_str (simple, str);
-- priv->compose_buffer[0] = 0;
-- }
-- g_free (str);
-- g_free (output_chars);
-- ibus_engine_simple_update_preedit_text (simple);
-- return TRUE;
-- }
-- success = TRUE;
-- }
-- g_free (output_chars);
-- output_chars = NULL;
- if (ibus_check_algorithmically (priv->compose_buffer,
- n_compose,
- &output_char)) {
-diff --git a/src/ibusenginesimpleprivate.h b/src/ibusenginesimpleprivate.h
-index ad93d2d2..41269464 100644
---- a/src/ibusenginesimpleprivate.h
-+++ b/src/ibusenginesimpleprivate.h
-@@ -1,7 +1,7 @@
- /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
-- * Copyright (C) 2016-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2016-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- * Copyright (C) 2016 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
-@@ -32,25 +32,29 @@ G_BEGIN_DECLS
- #define IS_DEAD_KEY(k) \
- ((k) >= IBUS_KEY_dead_grave && (k) <= IBUS_KEY_dead_greek)
-
--extern const IBusComposeTableCompactEx ibus_compose_table_compact;
--extern const IBusComposeTableCompactEx ibus_compose_table_compact_32bit;
-
- struct _IBusComposeTablePrivate
- {
-- guint16 *data_first;
-- guint32 *data_second;
-+ const guint16 *data_first;
-+ const guint32 *data_second;
- gsize first_n_seqs;
- gsize second_size;
- };
-
--struct _IBusComposeTableCompactPrivate
--{
-- const guint32 *data2;
--};
-
- gboolean ibus_check_algorithmically (const guint16 *compose_buffer,
- int n_compose,
- gunichar *output);
-+GVariant *
-+ ibus_compose_table_serialize
-+ (IBusComposeTableEx
-+ *compose_table,
-+ gboolean reverse_endian);
-+IBusComposeTableEx *
-+ ibus_compose_table_deserialize
-+ (const char *contents,
-+ gsize length,
-+ gboolean reverse_endian);
- gboolean ibus_compose_table_check (const IBusComposeTableEx *table,
- guint16 *compose_buffer,
- int n_compose,
-@@ -58,13 +62,6 @@ gboolean ibus_compose_table_check (const IBusComposeTableEx *table,
- gboolean *compose_match,
- GString *output,
- gboolean is_32bit);
--gboolean ibus_compose_table_compact_check
-- (const IBusComposeTableCompactEx
-- *table,
-- guint16 *compose_buffer,
-- int n_compose,
-- gboolean *compose_finish,
-- gunichar **output_chars);
- gunichar ibus_keysym_to_unicode (guint16 keysym,
- gboolean combining,
- gboolean *need_space);
-diff --git a/src/ibusshare.c b/src/ibusshare.c
-index 0c0bda10..340168c8 100644
---- a/src/ibusshare.c
-+++ b/src/ibusshare.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2015-2021 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2015-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- * Copyright (C) 2008-2018 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
-@@ -24,6 +24,7 @@
- #include <config.h>
- #endif
-
-+#include "ibusresources.h"
- #include "ibusshare.h"
- #include <glib.h>
- #include <glib/gstdio.h>
-@@ -313,6 +314,7 @@ ibus_init (void)
- IBUS_TYPE_OBSERVED_PATH;
- IBUS_TYPE_REGISTRY;
- IBUS_TYPE_X_EVENT;
-+ _ibus_register_resource ();
- }
-
- static GMainLoop *main_loop = NULL;
---
-2.38.1
-
-From d190bc32fe0fe780b66100e5461326973ac7a804 Mon Sep 17 00:00:00 2001
-From: Eberhard Beilharz <eb1@sil.org>
-Date: Thu, 12 Jan 2023 22:24:42 +0900
-Subject: [PATCH 1/3] configure: Fix texts for surrounding text
-
-The options and corresponding texts for surrounding-text were mixed
-up. This change makes them consistent with the text for other
-options.
-
-BUG=https://github.com/ibus/ibus/pull/2438
----
- configure.ac | 5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index a84c7130..cba242df 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -633,14 +633,13 @@ AC_SUBST(IBUS_ICON_KEYBOARD)
- # --disable-surrounding-text option.
- AC_ARG_ENABLE(surrounding-text,
- AS_HELP_STRING([--disable-surrounding-text],
-- [Enable surrounding-text support]),
-+ [Disable surrounding-text support]),
- [enable_surrounding_text=$enableval],
- [enable_surrounding_text=yes]
- )
- if test x"$enable_surrounding_text" = x"yes"; then
- AC_DEFINE(ENABLE_SURROUNDING, TRUE, [Enable surrounding-text support])
--else
-- enable_surrounding_text="no (disabled, use --enable-surrounding-text to enable)"
-+ enable_surrounding_text="yes (enabled, use --disable-surrounding-text to disable)"
- fi
-
- # --disable-ui
---
-2.38.1
-
-From bd24be4582f67e278fc85e843d39b81629bf7d9b Mon Sep 17 00:00:00 2001
-From: Philippe Rouquier <bonfire-app@wanadoo.fr>
-Date: Mon, 23 Jan 2023 21:04:51 +0900
-Subject: [PATCH 2/3] Add active-surrounding-text property to IBusEngine
-
-When this property is set to TRUE, ibus daemon will update
-surrounding text on every focus(in/out) event which makes
-ibus_engine_get_surrounding_text() calls from an engine
-code unnecessary.
-This property must be set at construct time.
-
-BUG=https://github.com/ibus/ibus/pull/2447
----
- bus/engineproxy.c | 114 ++++++++++++++++++++++++++++++++++++++--------
- bus/ibusimpl.c | 16 +++++++
- bus/ibusimpl.h | 9 ++++
- src/ibusengine.c | 47 ++++++++++++++++++-
- 4 files changed, 167 insertions(+), 19 deletions(-)
-
-diff --git a/bus/engineproxy.c b/bus/engineproxy.c
-index fd1f34fb..b3e16066 100644
---- a/bus/engineproxy.c
-+++ b/bus/engineproxy.c
-@@ -60,6 +60,7 @@ struct _BusEngineProxy {
- /* cached properties */
- IBusPropList *prop_list;
- gboolean has_focus_id;
-+ gboolean has_active_surrounding_text;
- };
-
- struct _BusEngineProxyClass {
-@@ -130,6 +131,8 @@ static void bus_engine_proxy_initable_iface_init
- *initable_iface);
- static void bus_engine_proxy_get_has_focus_id
- (BusEngineProxy *engine);
-+static void bus_engine_proxy_get_active_surrounding_text
-+ (BusEngineProxy *engine);
-
- G_DEFINE_TYPE_WITH_CODE (BusEngineProxy, bus_engine_proxy, IBUS_TYPE_PROXY,
- G_IMPLEMENT_INTERFACE (
-@@ -699,7 +702,6 @@ bus_engine_proxy_new_internal (const gchar *path,
- BusEngineProxy *engine;
- BusIBusImpl *ibus = BUS_DEFAULT_IBUS;
- GHashTable *hash_table = NULL;
-- EngineFocusCategory category = ENGINE_FOCUS_CATEGORY_NONE;
-
- g_assert (path);
- g_assert (IBUS_IS_ENGINE_DESC (desc));
-@@ -721,9 +723,12 @@ bus_engine_proxy_new_internal (const gchar *path,
- if (layout != NULL && layout[0] != '\0') {
- engine->keymap = ibus_keymap_get (layout);
- }
-- if (ibus)
-- hash_table = bus_ibus_impl_get_engine_focus_id_table (ibus);
-+
-+ g_return_val_if_fail (ibus, engine);
-+
-+ hash_table = bus_ibus_impl_get_engine_focus_id_table (ibus);
- if (hash_table) {
-+ EngineFocusCategory category;
- category = (EngineFocusCategory)GPOINTER_TO_INT (
- g_hash_table_lookup (hash_table,
- ibus_engine_desc_get_name (desc)));
-@@ -734,6 +739,21 @@ bus_engine_proxy_new_internal (const gchar *path,
- else
- bus_engine_proxy_get_has_focus_id (engine);
- }
-+
-+ hash_table = bus_ibus_impl_get_engine_active_surrounding_text_table (ibus);
-+ if (hash_table) {
-+ EngineSurroundingTextCategory category;
-+ category = (EngineSurroundingTextCategory)GPOINTER_TO_INT (
-+ g_hash_table_lookup (hash_table,
-+ ibus_engine_desc_get_name (desc)));
-+ if (category == ENGINE_SURROUNDING_TEXT_CATEGORY_HAS_ACTIVE)
-+ engine->has_active_surrounding_text = TRUE;
-+ else if (category == ENGINE_SURROUNDING_TEXT_CATEGORY_NOT_ACTIVE)
-+ engine->has_active_surrounding_text = FALSE;
-+ else
-+ bus_engine_proxy_get_active_surrounding_text (engine);
-+ }
-+
- return engine;
- }
-
-@@ -1263,6 +1283,26 @@ bus_engine_proxy_set_content_type (BusEngineProxy *engine,
- g_variant_unref (content_type);
- }
-
-+static void
-+bus_engine_proxy_get_engine_property (BusEngineProxy *engine,
-+ const gchar *prop_name,
-+ GAsyncReadyCallback callback,
-+ GHashTable *hash_table)
-+{
-+ g_assert (BUS_IS_ENGINE_PROXY (engine));
-+ g_assert (hash_table);
-+ g_dbus_proxy_call ((GDBusProxy *) engine,
-+ "org.freedesktop.DBus.Properties.Get",
-+ g_variant_new ("(ss)",
-+ IBUS_INTERFACE_ENGINE,
-+ prop_name),
-+ G_DBUS_CALL_FLAGS_NONE,
-+ -1,
-+ NULL,
-+ callback,
-+ g_hash_table_ref (hash_table));
-+}
-+
- static void
- _get_has_focus_id_cb (GObject *object,
- GAsyncResult *res,
-@@ -1299,23 +1339,57 @@ static void
- bus_engine_proxy_get_has_focus_id (BusEngineProxy *engine)
- {
- BusIBusImpl *ibus = BUS_DEFAULT_IBUS;
-- GHashTable *hash_table;
--
-- g_assert (BUS_IS_ENGINE_PROXY (engine));
- g_assert (ibus);
-+ bus_engine_proxy_get_engine_property (
-+ engine,
-+ "FocusId",
-+ _get_has_focus_id_cb,
-+ bus_ibus_impl_get_engine_focus_id_table (ibus));
-+}
-
-- hash_table = bus_ibus_impl_get_engine_focus_id_table (ibus);
-- g_assert (hash_table);
-- g_dbus_proxy_call ((GDBusProxy *) engine,
-- "org.freedesktop.DBus.Properties.Get",
-- g_variant_new ("(ss)",
-- IBUS_INTERFACE_ENGINE,
-- "FocusId"),
-- G_DBUS_CALL_FLAGS_NONE,
-- -1,
-- NULL,
-- _get_has_focus_id_cb,
-- g_hash_table_ref (hash_table));
-+static void
-+_get_active_surrounding_text_cb (GObject *object,
-+ GAsyncResult *res,
-+ gpointer user_data)
-+{
-+ GHashTable *hash_table = (GHashTable*)user_data;
-+ BusEngineProxy *engine;
-+ GError *error = NULL;
-+ GVariant *result;
-+
-+ g_return_if_fail (BUS_IS_ENGINE_PROXY (object));
-+ engine = BUS_ENGINE_PROXY (object);
-+ result = g_dbus_proxy_call_finish (G_DBUS_PROXY (object), res, &error);
-+
-+ if (result != NULL) {
-+ GVariant *variant = NULL;
-+ gpointer value;
-+ g_variant_get (result, "(v)", &variant);
-+ engine->has_active_surrounding_text = g_variant_get_boolean (variant);
-+ g_variant_unref (variant);
-+ g_variant_unref (result);
-+ value = GINT_TO_POINTER (
-+ engine->has_active_surrounding_text
-+ ? ENGINE_SURROUNDING_TEXT_CATEGORY_HAS_ACTIVE
-+ : ENGINE_SURROUNDING_TEXT_CATEGORY_NOT_ACTIVE);
-+ g_hash_table_replace (
-+ hash_table,
-+ (gpointer)ibus_engine_desc_get_name (engine->desc),
-+ value);
-+ }
-+ g_hash_table_unref (hash_table);
-+}
-+
-+static void
-+bus_engine_proxy_get_active_surrounding_text (BusEngineProxy *engine)
-+{
-+ BusIBusImpl *ibus = BUS_DEFAULT_IBUS;
-+ g_assert (ibus);
-+ bus_engine_proxy_get_engine_property (
-+ engine,
-+ "ActiveSurroundingText",
-+ _get_active_surrounding_text_cb,
-+ bus_ibus_impl_get_engine_active_surrounding_text_table (ibus));
- }
-
- /* a macro to generate a function to call a nullary D-Bus method. */
-@@ -1348,6 +1422,8 @@ bus_engine_proxy_focus_in (BusEngineProxy *engine,
- if (engine->has_focus)
- return;
- engine->has_focus = TRUE;
-+ if (engine->has_active_surrounding_text)
-+ g_signal_emit (engine, engine_signals[REQUIRE_SURROUNDING_TEXT], 0);
- if (engine->has_focus_id) {
- g_dbus_proxy_call ((GDBusProxy *)engine,
- "FocusInId",
-@@ -1404,6 +1480,8 @@ bus_engine_proxy_enable (BusEngineProxy *engine)
- g_assert (BUS_IS_ENGINE_PROXY (engine));
- if (!engine->enabled) {
- engine->enabled = TRUE;
-+ if (engine->has_active_surrounding_text)
-+ g_signal_emit (engine, engine_signals[REQUIRE_SURROUNDING_TEXT], 0);
- g_dbus_proxy_call ((GDBusProxy *)engine,
- "Enable",
- NULL,
-diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
-index 8a443545..6df86c3f 100644
---- a/bus/ibusimpl.c
-+++ b/bus/ibusimpl.c
-@@ -73,6 +73,7 @@ struct _BusIBusImpl {
- GHashTable *engine_table;
-
- GHashTable *engine_focus_id_table;
-+ GHashTable *engine_active_surrounding_text_table;
-
- BusInputContext *focused_context;
- BusPanelProxy *panel;
-@@ -599,6 +600,8 @@ bus_ibus_impl_init (BusIBusImpl *ibus)
- ibus->global_engine_name = NULL;
- ibus->global_previous_engine_name = NULL;
- ibus->engine_focus_id_table = g_hash_table_new (g_str_hash, g_str_equal);
-+ ibus->engine_active_surrounding_text_table = g_hash_table_new (g_str_hash,
-+ g_str_equal);
-
- /* focus the fake_context, if use_global_engine is enabled. */
- if (ibus->use_global_engine)
-@@ -681,6 +684,11 @@ bus_ibus_impl_destroy (BusIBusImpl *ibus)
-
- bus_ibus_impl_registry_destroy (ibus);
-
-+ if (ibus->engine_active_surrounding_text_table != NULL) {
-+ g_hash_table_destroy (ibus->engine_active_surrounding_text_table);
-+ ibus->engine_active_surrounding_text_table = NULL;
-+ }
-+
- IBUS_OBJECT_CLASS (bus_ibus_impl_parent_class)->destroy (IBUS_OBJECT (ibus));
- }
-
-@@ -2397,3 +2405,11 @@ bus_ibus_impl_get_engine_focus_id_table (BusIBusImpl *ibus)
- return ibus->engine_focus_id_table;
- }
-
-+GHashTable *
-+bus_ibus_impl_get_engine_active_surrounding_text_table (BusIBusImpl *ibus)
-+{
-+
-+ g_assert (BUS_IS_IBUS_IMPL (ibus));
-+
-+ return ibus->engine_active_surrounding_text_table;
-+}
-diff --git a/bus/ibusimpl.h b/bus/ibusimpl.h
-index cbe6856d..93a854de 100644
---- a/bus/ibusimpl.h
-+++ b/bus/ibusimpl.h
-@@ -66,6 +66,13 @@ typedef enum
- ENGINE_FOCUS_CATEGORY_HAS_ID
- } EngineFocusCategory;
-
-+typedef enum
-+{
-+ ENGINE_SURROUNDING_TEXT_CATEGORY_NONE = 0,
-+ ENGINE_SURROUNDING_TEXT_CATEGORY_NOT_ACTIVE,
-+ ENGINE_SURROUNDING_TEXT_CATEGORY_HAS_ACTIVE
-+} EngineSurroundingTextCategory;
-+
- GType bus_ibus_impl_get_type (void);
-
- /**
-@@ -91,5 +98,7 @@ BusInputContext *bus_ibus_impl_get_focused_input_context
- (BusIBusImpl *ibus);
- GHashTable *bus_ibus_impl_get_engine_focus_id_table
- (BusIBusImpl *ibus);
-+GHashTable *bus_ibus_impl_get_engine_active_surrounding_text_table
-+ (BusIBusImpl *ibus);
- G_END_DECLS
- #endif
-diff --git a/src/ibusengine.c b/src/ibusengine.c
-index 7c797103..cc12ac5a 100644
---- a/src/ibusengine.c
-+++ b/src/ibusengine.c
-@@ -64,6 +64,7 @@ enum {
- PROP_0,
- PROP_ENGINE_NAME,
- PROP_HAS_FOCUS_ID,
-+ PROP_ACTIVE_SURROUNDING_TEXT,
- };
-
-
-@@ -86,6 +87,7 @@ struct _IBusEnginePrivate {
- gboolean enable_extension;
- gchar *current_extension_name;
- gboolean has_focus_id;
-+ gboolean has_active_surrounding_text;
- };
-
-
-@@ -303,6 +305,7 @@ static const gchar introspection_xml[] =
- /* FIXME properties */
- " <property name='ContentType' type='(uu)' access='write' />"
- " <property name='FocusId' type='(b)' access='read' />"
-+ " <property name='ActiveSurroundingText' type='(b)' access='read' />"
- " </interface>"
- "</node>";
-
-@@ -391,6 +394,23 @@ ibus_engine_class_init (IBusEngineClass *class)
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
-+ /**
-+ * IBusEngine:active-surrounding-text:
-+ *
-+ * When this property is set to %TRUE, "RequireSurroundingText" D-Bus
-+ * signal will be called by ibus-daemon on every focus-in/out event, with
-+ * no need for the engine to call ibus_engine_get_surrounding_text().
-+ * This property can only be set at construct time.
-+ */
-+ g_object_class_install_property (gobject_class,
-+ PROP_ACTIVE_SURROUNDING_TEXT,
-+ g_param_spec_boolean ("active-surrounding-text",
-+ "enable surrounding text update by focus event",
-+ "Enable surrounding text update by focus event",
-+ FALSE,
-+ G_PARAM_READWRITE |
-+ G_PARAM_CONSTRUCT_ONLY));
-+
- /* install signals */
- /**
- * IBusEngine::process-key-event:
-@@ -988,6 +1008,9 @@ ibus_engine_set_property (IBusEngine *engine,
- case PROP_HAS_FOCUS_ID:
- engine->priv->has_focus_id = g_value_get_boolean (value);
- break;
-+ case PROP_ACTIVE_SURROUNDING_TEXT:
-+ engine->priv->has_active_surrounding_text = g_value_get_boolean (value);
-+ break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (engine, prop_id, pspec);
- }
-@@ -1006,6 +1029,9 @@ ibus_engine_get_property (IBusEngine *engine,
- case PROP_HAS_FOCUS_ID:
- g_value_set_boolean (value, engine->priv->has_focus_id);
- break;
-+ case PROP_ACTIVE_SURROUNDING_TEXT:
-+ g_value_set_boolean (value, engine->priv->has_active_surrounding_text);
-+ break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (engine, prop_id, pspec);
- }
-@@ -1445,6 +1471,24 @@ ibus_engine_service_method_call (IBusService *service,
- g_return_if_reached ();
- }
-
-+/**
-+ * _ibus_engine_get_active_surrounding_text:
-+ *
-+ * Implement the "ActiveSurroundingText" method call of the
-+ * org.freedesktop.IBus interface.
-+ */
-+static GVariant *
-+_ibus_engine_get_active_surrounding_text (IBusEngine *engine,
-+ GDBusConnection *connection,
-+ GError **error)
-+{
-+ if (error) {
-+ *error = NULL;
-+ }
-+
-+ return g_variant_new_boolean (engine->priv->has_active_surrounding_text);
-+}
-+
- /**
- * _ibus_engine_has_focus_id:
- *
-@@ -1478,7 +1522,8 @@ ibus_engine_service_get_property (IBusService *service,
- GDBusConnection *,
- GError **);
- } methods [] = {
-- { "FocusId", _ibus_engine_has_focus_id },
-+ { "FocusId", _ibus_engine_has_focus_id },
-+ { "ActiveSurroundingText", _ibus_engine_get_active_surrounding_text },
- };
-
- if (g_strcmp0 (interface_name, IBUS_INTERFACE_ENGINE) != 0) {
---
-2.38.1
-
-From 2a235c8c33f1de56df4873fe3662d5beb1355715 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 25 Jan 2023 15:10:50 +0900
-Subject: [PATCH 3/3] Refactor surrounding text warning & free focus-id tables
-
-- Free engine_focus_id_table in bus_ibus_impl_destroy
-- It would be better to check the function return value at the
- first calling than the static variable for the surrounding text
- warnings
-- Add API comments
-
-Fixes: https://github.com/ibus/ibus/commit/39b6907
-Fixes: https://github.com/ibus/ibus/commit/7bbcce6
-Fixes: https://github.com/ibus/ibus/commit/19ca106
-Fixes: https://github.com/ibus/ibus/commit/92771d0
----
- bus/ibusimpl.c | 155 ++++++++++++++++++++----------------
- client/gtk2/ibusimcontext.c | 76 +++++++++---------
- src/ibuscomposetable.h | 13 +++
- src/ibusengine.c | 99 +++++++++++++----------
- 4 files changed, 196 insertions(+), 147 deletions(-)
-
-diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
-index 6df86c3f..c2ae88df 100644
---- a/bus/ibusimpl.c
-+++ b/bus/ibusimpl.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2011-2021 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2011-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- * Copyright (C) 2008-2021 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
-@@ -287,8 +287,10 @@ bus_ibus_impl_class_init (BusIBusImplClass *class)
- /**
- * _panel_destroy_cb:
- *
-- * A callback function which is called when (1) the connection to the panel process is terminated,
-- * or (2) ibus_proxy_destroy (ibus->panel); is called. See src/ibusproxy.c for details.
-+ * A callback function which is called when (1) the connection to the panel
-+ * process is terminated,
-+ * or (2) ibus_proxy_destroy (ibus->panel); is called. See src/ibusproxy.c for
-+ * details.
- */
- static void
- _panel_destroy_cb (BusPanelProxy *panel,
-@@ -360,9 +362,8 @@ bus_ibus_impl_set_panel_extension_keys (BusIBusImpl *ibus,
- if (ibus->extension_register_keys)
- g_variant_unref (ibus->extension_register_keys);
- ibus->extension_register_keys = g_variant_ref_sink (parameters);
-- if (ibus->focused_context != NULL) {
-- engine = bus_input_context_get_engine (ibus->focused_context);
-- }
-+ if (ibus->focused_context)
-+ engine = bus_input_context_get_engine (ibus->focused_context);
- if (!engine)
- return;
- bus_engine_proxy_panel_extension_register_keys (engine, parameters);
-@@ -429,8 +430,7 @@ _panel_update_auxiliary_text_received_cb (BusPanelProxy *panel,
-
- if (!ibus->panel)
- return;
-- bus_panel_proxy_update_auxiliary_text (
-- ibus->panel, text, visible);
-+ bus_panel_proxy_update_auxiliary_text (ibus->panel, text, visible);
- }
-
- static void
-@@ -443,8 +443,10 @@ _registry_changed_cb (IBusRegistry *registry,
- /*
- * _dbus_name_owner_changed_cb:
- *
-- * A callback function to be called when the name-owner-changed signal is sent to the dbus object.
-- * This usually means a client (e.g. a panel/config/engine process or an application) is connected/disconnected to/from the bus.
-+ * A callback function to be called when the name-owner-changed signal is sent
-+ * to the dbus object.
-+ * This usually means a client (e.g. a panel/config/engine process or an
-+ * application) is connected/disconnected to/from the bus.
- */
- static void
- _dbus_name_owner_changed_cb (BusDBusImpl *dbus,
-@@ -561,7 +563,8 @@ _dbus_name_owner_changed_cb (BusDBusImpl *dbus,
- /**
- * bus_ibus_impl_init:
- *
-- * The constructor of BusIBusImpl. Initialize all member variables of a BusIBusImpl object.
-+ * The constructor of #BusIBusImpl. Initialize all member variables of a
-+ * #BusIBusImpl object.
- */
- static void
- bus_ibus_impl_init (BusIBusImpl *ibus)
-@@ -645,7 +648,8 @@ bus_ibus_impl_destroy (BusIBusImpl *ibus)
- if (flag == FALSE) {
- gpointer old;
- old = signal (SIGTERM, SIG_IGN);
-- /* send TERM signal to the whole process group (i.e. engines, panel, and config daemon.) */
-+ /* send TERM signal to the whole process group (i.e.
-+ * engines, panel, and config daemon.) */
- kill (-getpid (), SIGTERM);
- signal (SIGTERM, old);
- flag = TRUE;
-@@ -661,35 +665,29 @@ bus_ibus_impl_destroy (BusIBusImpl *ibus)
- g_list_free_full (ibus->register_engine_list, g_object_unref);
- ibus->register_engine_list = NULL;
-
-- if (ibus->factory_dict != NULL) {
-- g_hash_table_destroy (ibus->factory_dict);
-- ibus->factory_dict = NULL;
-- }
-+ if (ibus->factory_dict)
-+ g_clear_pointer (&ibus->factory_dict, g_hash_table_destroy);
-
-- if (ibus->keymap != NULL) {
-- g_object_unref (ibus->keymap);
-- ibus->keymap = NULL;
-- }
-+ if (ibus->keymap)
-+ g_clear_pointer (&ibus->keymap, g_object_unref);
-
-- g_free (ibus->global_engine_name);
-- ibus->global_engine_name = NULL;
-+ g_clear_pointer (&ibus->global_engine_name, g_free);
-+ g_clear_pointer (&ibus->global_previous_engine_name, g_free);
-
-- g_free (ibus->global_previous_engine_name);
-- ibus->global_previous_engine_name = NULL;
--
-- if (ibus->fake_context) {
-- g_object_unref (ibus->fake_context);
-- ibus->fake_context = NULL;
-- }
-+ if (ibus->fake_context)
-+ g_clear_pointer (&ibus->fake_context, g_object_unref);
-
- bus_ibus_impl_registry_destroy (ibus);
-
-+ if (ibus->engine_focus_id_table)
-+ g_clear_pointer (&ibus->engine_focus_id_table, g_hash_table_destroy);
- if (ibus->engine_active_surrounding_text_table != NULL) {
-- g_hash_table_destroy (ibus->engine_active_surrounding_text_table);
-- ibus->engine_active_surrounding_text_table = NULL;
-+ g_clear_pointer (&ibus->engine_active_surrounding_text_table,
-+ g_hash_table_destroy);
- }
-
-- IBUS_OBJECT_CLASS (bus_ibus_impl_parent_class)->destroy (IBUS_OBJECT (ibus));
-+ IBUS_OBJECT_CLASS (bus_ibus_impl_parent_class)->destroy (
-+ IBUS_OBJECT (ibus));
- }
-
- /**
-@@ -749,7 +747,8 @@ _find_engine_desc_by_name (BusIBusImpl *ibus,
- /**
- * _context_request_engine_cb:
- *
-- * A callback function to be called when the "request-engine" signal is sent to the context.
-+ * A callback function to be called when the "request-engine" signal is sent to
-+ * the context.
- */
- static IBusEngineDesc *
- _context_request_engine_cb (BusInputContext *context,
-@@ -788,12 +787,13 @@ bus_ibus_impl_set_context_engine_from_desc (BusIBusImpl *ibus,
- BusInputContext *context,
- IBusEngineDesc *desc)
- {
-- bus_input_context_set_engine_by_desc (context,
-- desc,
-- g_gdbus_timeout, /* timeout in msec. */
-- NULL, /* we do not cancel the call. */
-- NULL, /* use the default callback function. */
-- NULL);
-+ bus_input_context_set_engine_by_desc (
-+ context,
-+ desc,
-+ g_gdbus_timeout, /* timeout in msec. */
-+ NULL, /* we do not cancel the call. */
-+ NULL, /* use the default callback function. */
-+ NULL);
- }
-
- static void
-@@ -827,7 +827,8 @@ bus_ibus_impl_set_focused_context (BusIBusImpl *ibus,
-
- g_assert (BUS_IS_IBUS_IMPL (ibus));
- g_assert (context == NULL || BUS_IS_INPUT_CONTEXT (context));
-- g_assert (context == NULL || bus_input_context_get_capabilities (context) & IBUS_CAP_FOCUS);
-+ g_assert (context == NULL ||
-+ bus_input_context_get_capabilities (context) & IBUS_CAP_FOCUS);
-
- /* Do noting if it is focused context. */
- if (ibus->focused_context == context) {
-@@ -938,8 +939,8 @@ bus_ibus_impl_set_global_engine_by_name (BusIBusImpl *ibus,
- if (!ibus->use_global_engine)
- return;
-
-- BusInputContext *context =
-- ibus->focused_context != NULL ? ibus->focused_context : ibus->fake_context;
-+ BusInputContext *context = ibus->focused_context != NULL
-+ ? ibus->focused_context : ibus->fake_context;
-
- if (context == NULL) {
- return;
-@@ -1008,7 +1009,8 @@ bus_ibus_impl_check_global_engine (BusIBusImpl *ibus)
- /**
- * _context_engine_changed_cb:
- *
-- * A callback function to be called when the "engine-changed" signal is sent to the context.
-+ * A callback function to be called when the "engine-changed" signal is sent to
-+ * the context.
- * Update global engine as well if necessary.
- */
- static void
-@@ -1023,7 +1025,8 @@ _context_engine_changed_cb (BusInputContext *context,
- BusEngineProxy *engine = bus_input_context_get_engine (context);
- if (engine != NULL) {
- /* only set global engine if engine is not NULL */
-- const gchar *name = ibus_engine_desc_get_name (bus_engine_proxy_get_desc (engine));
-+ const gchar *name = ibus_engine_desc_get_name (
-+ bus_engine_proxy_get_desc (engine));
- if (g_strcmp0 (name, ibus->global_engine_name) == 0)
- return;
- g_free (ibus->global_previous_engine_name);
-@@ -1037,8 +1040,10 @@ _context_engine_changed_cb (BusInputContext *context,
- /**
- * _context_focus_in_cb:
- *
-- * A callback function to be called when the "focus-in" signal is sent to the context.
-- * If necessary, enables the global engine on the context and update ibus->focused_context.
-+ * A callback function to be called when the "focus-in" signal is sent to the
-+ * context.
-+ * If necessary, enables the global engine on the context and update
-+ * ibus->focused_context.
- */
- static void
- _context_focus_in_cb (BusInputContext *context,
-@@ -1059,7 +1064,8 @@ _context_focus_in_cb (BusInputContext *context,
- /**
- * _context_focus_out_cb:
- *
-- * A callback function to be called when the "focus-out" signal is sent to the context.
-+ * A callback function to be called when the "focus-out" signal is sent to the
-+ * context.
- */
- static void
- _context_focus_out_cb (BusInputContext *context,
-@@ -1069,7 +1075,8 @@ _context_focus_out_cb (BusInputContext *context,
- g_assert (BUS_IS_INPUT_CONTEXT (context));
-
- /* Do noting if context does not support focus.
-- * Actually, the context should emit focus signals, if it does not support focus */
-+ * Actually, the context should emit focus signals, if it does not support
-+ * focus */
- if ((bus_input_context_get_capabilities (context) & IBUS_CAP_FOCUS) == 0) {
- return;
- }
-@@ -1127,7 +1134,8 @@ bus_ibus_impl_create_input_context (BusIBusImpl *ibus,
- g_object_ref_sink (context);
- ibus->contexts = g_list_append (ibus->contexts, context);
-
-- /* Installs glib signal handlers so that the ibus object could be notified when e.g. an IBus.InputContext D-Bus method is called. */
-+ /* Installs glib signal handlers so that the ibus object could be notified
-+ * when e.g. an IBus.InputContext D-Bus method is called. */
- static const struct {
- gchar *name;
- GCallback callback;
-@@ -1149,7 +1157,8 @@ bus_ibus_impl_create_input_context (BusIBusImpl *ibus,
-
- bus_input_context_enable (context);
-
-- /* register the context object so that the object could handle IBus.InputContext method calls. */
-+ /* register the context object so that the object could handle
-+ * IBus.InputContext method calls. */
- bus_dbus_impl_register_object (BUS_DEFAULT_DBUS,
- (IBusService *) context);
- g_object_ref (context);
-@@ -1159,14 +1168,15 @@ bus_ibus_impl_create_input_context (BusIBusImpl *ibus,
- /**
- * _ibus_create_input_context:
- *
-- * Implement the "CreateInputContext" method call of the org.freedesktop.IBus interface.
-+ * Implement the "CreateInputContext" method call of the org.freedesktop.IBus
-+ * interface.
- */
- static void
- _ibus_create_input_context (BusIBusImpl *ibus,
- GVariant *parameters,
- GDBusMethodInvocation *invocation)
- {
-- const gchar *client_name = NULL; // e.g. "gtk-im"
-+ const gchar *client_name = NULL; /* e.g. "gtk-im" */
- g_variant_get (parameters, "(&s)", &client_name);
-
- BusConnection *connection =
-@@ -1176,9 +1186,11 @@ _ibus_create_input_context (BusIBusImpl *ibus,
- connection,
- client_name);
- if (context) {
-- const gchar *path = ibus_service_get_object_path ((IBusService *) context);
-+ const gchar *path =
-+ ibus_service_get_object_path ((IBusService *) context);
- /* the format-string 'o' is for a D-Bus object path. */
-- g_dbus_method_invocation_return_value (invocation, g_variant_new ("(o)", path));
-+ g_dbus_method_invocation_return_value (invocation,
-+ g_variant_new ("(o)", path));
- g_object_unref (context);
- }
- else {
-@@ -1259,14 +1271,16 @@ _component_destroy_cb (BusComponent *component,
- g_assert (BUS_IS_IBUS_IMPL (ibus));
- g_assert (BUS_IS_COMPONENT (component));
-
-- ibus->registered_components = g_list_remove (ibus->registered_components, component);
-+ ibus->registered_components = g_list_remove (ibus->registered_components,
-+ component);
-
- /* remove engines from engine_list */
- GList *engines = bus_component_get_engines (component);
- GList *p;
- for (p = engines; p != NULL; p = p->next) {
- if (g_list_find (ibus->register_engine_list, p->data)) {
-- ibus->register_engine_list = g_list_remove (ibus->register_engine_list, p->data);
-+ ibus->register_engine_list =
-+ g_list_remove (ibus->register_engine_list, p->data);
- g_object_unref (p->data);
- }
- }
-@@ -1389,7 +1403,8 @@ _ibus_list_engines_depre (BusIBusImpl *ibus,
- /**
- * _ibus_get_engines_by_names:
- *
-- * Implement the "GetEnginesByNames" method call of the org.freedesktop.IBus interface.
-+ * Implement the "GetEnginesByNames" method call of the org.freedesktop.IBus
-+ * interface.
- */
- static void
- _ibus_get_engines_by_names (BusIBusImpl *ibus,
-@@ -1414,7 +1429,8 @@ _ibus_get_engines_by_names (BusIBusImpl *ibus,
- "v",
- ibus_serializable_serialize ((IBusSerializable *)desc));
- }
-- g_dbus_method_invocation_return_value (invocation, g_variant_new ("(av)", &builder));
-+ g_dbus_method_invocation_return_value (invocation,
-+ g_variant_new ("(av)", &builder));
- }
-
- /**
-@@ -1609,7 +1625,7 @@ _ibus_get_global_engine (BusIBusImpl *ibus,
-
- GVariant *variant = ibus_serializable_serialize (
- (IBusSerializable *) desc);
-- // Set type "v" for introspection_xml.
-+ /* Set type "v" for introspection_xml. */
- retval = g_variant_new_variant (variant);
- if (!retval) {
- g_set_error (error,
-@@ -1752,12 +1768,13 @@ _ibus_set_global_engine (BusIBusImpl *ibus,
- SetGlobalEngineData *data = g_slice_new0 (SetGlobalEngineData);
- data->ibus = g_object_ref (ibus);
- data->invocation = invocation;
-- bus_input_context_set_engine_by_desc (context,
-- desc,
-- g_gdbus_timeout, /* timeout in msec. */
-- NULL, /* we do not cancel the call. */
-- (GAsyncReadyCallback) _ibus_set_global_engine_ready_cb,
-- data);
-+ bus_input_context_set_engine_by_desc (
-+ context,
-+ desc,
-+ g_gdbus_timeout, /* timeout in msec. */
-+ NULL, /* we do not cancel the call. */
-+ (GAsyncReadyCallback) _ibus_set_global_engine_ready_cb,
-+ data);
- }
-
- /**
-@@ -2109,19 +2126,17 @@ BusFactoryProxy *
- bus_ibus_impl_lookup_factory (BusIBusImpl *ibus,
- const gchar *path)
- {
-- g_assert (BUS_IS_IBUS_IMPL (ibus));
--
- BusFactoryProxy *factory;
-
-- factory = (BusFactoryProxy *) g_hash_table_lookup (ibus->factory_dict, path);
--
-+ g_assert (BUS_IS_IBUS_IMPL (ibus));
-+ factory = (BusFactoryProxy *) g_hash_table_lookup (ibus->factory_dict,
-+ path);
- return factory;
- }
-
- IBusKeymap *
- bus_ibus_impl_get_keymap (BusIBusImpl *ibus)
- {
--
- g_assert (BUS_IS_IBUS_IMPL (ibus));
-
- return ibus->keymap;
-diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
-index 1f3723e6..ea8270bb 100644
---- a/client/gtk2/ibusimcontext.c
-+++ b/client/gtk2/ibusimcontext.c
-@@ -2,8 +2,8 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2015-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2008-2022 Red Hat, Inc.
-+ * Copyright (C) 2015-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2023 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
-@@ -70,7 +70,6 @@ struct _IBusIMContext {
- #endif
-
- IBusInputContext *ibuscontext;
-- IBusInputContext *ibuscontext_needs_surrounding;
-
- /* preedit status */
- gchar *preedit_string;
-@@ -214,7 +213,7 @@ static gboolean _slave_delete_surrounding_cb
- gint offset_from_cursor,
- guint nchars,
- IBusIMContext *context);
--static void _request_surrounding_text (IBusIMContext *context);
-+static gboolean _request_surrounding_text (IBusIMContext *context);
- static void _create_fake_input_context (void);
- static gboolean _set_content_type (IBusIMContext *context);
-
-@@ -592,34 +591,19 @@ _process_key_event (IBusInputContext *context,
- * context->caps has IBUS_CAP_SURROUNDING_TEXT and the current IBus
- * engine needs surrounding-text.
- */
--static void
-+static gboolean
- _request_surrounding_text (IBusIMContext *context)
- {
-- static gboolean warned = FALSE;
-+ gboolean return_value = TRUE;
- if (context &&
- (context->caps & IBUS_CAP_SURROUNDING_TEXT) != 0 &&
- context->ibuscontext != NULL &&
- ibus_input_context_needs_surrounding_text (context->ibuscontext)) {
-- gboolean return_value;
- IDEBUG ("requesting surrounding text");
- g_signal_emit (context, _signal_retrieve_surrounding_id, 0,
- &return_value);
-- if (!return_value) {
-- /* Engines can disable the surrounding text feature with
-- * the updated capabilities.
-- */
-- if (context->caps & IBUS_CAP_SURROUNDING_TEXT) {
-- context->caps &= ~IBUS_CAP_SURROUNDING_TEXT;
-- ibus_input_context_set_capabilities (context->ibuscontext,
-- context->caps);
-- }
-- if (!warned) {
-- g_warning ("%s has no capability of surrounding-text feature",
-- g_get_prgname ());
-- warned = TRUE;
-- }
-- }
- }
-+ return return_value;
- }
-
- static gboolean
-@@ -1013,7 +997,6 @@ ibus_im_context_init (GObject *obj)
- ibusimcontext->cursor_area.height = 0;
-
- ibusimcontext->ibuscontext = NULL;
-- ibusimcontext->ibuscontext_needs_surrounding = NULL;
- ibusimcontext->has_focus = FALSE;
- ibusimcontext->time = GDK_CURRENT_TIME;
- #ifdef ENABLE_SURROUNDING
-@@ -2212,16 +2195,33 @@ _ibus_context_hide_preedit_text_cb (IBusInputContext *ibuscontext,
- g_signal_emit (ibusimcontext, _signal_preedit_end_id, 0);
- }
-
-+static void
-+_ibus_warn_no_support_surrounding_text (IBusIMContext *context)
-+{
-+ /* Engines can disable the surrounding text feature with
-+ * the updated capabilities.
-+ */
-+ if (context->caps & IBUS_CAP_SURROUNDING_TEXT) {
-+ context->caps &= ~IBUS_CAP_SURROUNDING_TEXT;
-+ ibus_input_context_set_capabilities (context->ibuscontext,
-+ context->caps);
-+ }
-+ g_warning ("%s has no capability of surrounding-text feature",
-+ g_get_prgname ());
-+}
-+
- static void
- _ibus_context_require_surrounding_text_cb (IBusInputContext *ibuscontext,
- IBusIMContext *ibusimcontext)
- {
- IDEBUG ("%s", __FUNCTION__);
- g_assert (ibusimcontext->ibuscontext == ibuscontext);
-- if (ibusimcontext->ibuscontext_needs_surrounding == ibuscontext) {
-- _request_surrounding_text (ibusimcontext);
-- ibusimcontext->ibuscontext_needs_surrounding = NULL;
-- }
-+ if (!_request_surrounding_text (ibusimcontext))
-+ _ibus_warn_no_support_surrounding_text (ibusimcontext);
-+ g_signal_handlers_disconnect_by_func (
-+ ibusimcontext->ibuscontext,
-+ G_CALLBACK (_ibus_context_require_surrounding_text_cb),
-+ ibusimcontext);
- }
-
- static void
-@@ -2263,6 +2263,7 @@ _create_input_context_done (IBusBus *bus,
- g_error_free (error);
- }
- else {
-+ gboolean requested_surrounding_text = FALSE;
- ibus_input_context_set_client_commit_preedit (context, TRUE);
- ibusimcontext->ibuscontext = context;
-
-@@ -2290,16 +2291,12 @@ _create_input_context_done (IBusBus *bus,
- "hide-preedit-text",
- G_CALLBACK (_ibus_context_hide_preedit_text_cb),
- ibusimcontext);
-- g_signal_connect (
-- ibusimcontext->ibuscontext,
-- "require-surrounding-text",
-- G_CALLBACK (_ibus_context_require_surrounding_text_cb),
-- ibusimcontext);
- g_signal_connect (ibusimcontext->ibuscontext, "destroy",
- G_CALLBACK (_ibus_context_destroy_cb),
- ibusimcontext);
-
-- ibus_input_context_set_capabilities (ibusimcontext->ibuscontext, ibusimcontext->caps);
-+ ibus_input_context_set_capabilities (ibusimcontext->ibuscontext,
-+ ibusimcontext->caps);
-
- if (ibusimcontext->has_focus) {
- /* The time order is _create_input_context() ->
-@@ -2313,11 +2310,18 @@ _create_input_context_done (IBusBus *bus,
- _set_cursor_location_internal (ibusimcontext);
- if (ibus_input_context_needs_surrounding_text (
- ibusimcontext->ibuscontext)) {
-- _request_surrounding_text (ibusimcontext);
-- } else {
-- ibusimcontext->ibuscontext_needs_surrounding = ibusimcontext->ibuscontext;
-+ if (!_request_surrounding_text (ibusimcontext))
-+ _ibus_warn_no_support_surrounding_text (ibusimcontext);
-+ requested_surrounding_text = TRUE;
- }
- }
-+ if (!requested_surrounding_text) {
-+ g_signal_connect (
-+ ibusimcontext->ibuscontext,
-+ "require-surrounding-text",
-+ G_CALLBACK (_ibus_context_require_surrounding_text_cb),
-+ ibusimcontext);
-+ }
-
- if (!g_queue_is_empty (ibusimcontext->events_queue)) {
- #if GTK_CHECK_VERSION (3, 98, 4)
-diff --git a/src/ibuscomposetable.h b/src/ibuscomposetable.h
-index be1463ae..32e337f7 100644
---- a/src/ibuscomposetable.h
-+++ b/src/ibuscomposetable.h
-@@ -46,6 +46,8 @@ struct _IBusComposeTable
- struct _IBusComposeTableEx
- {
- IBusComposeTablePrivate *priv;
-+ /* @data is const value to accept mmap data and the releasable allocation
-+ * is assigned to @rawdata. */
- const guint16 *data;
- gint max_seq_len;
- gint n_seqs;
-@@ -54,6 +56,17 @@ struct _IBusComposeTableEx
- };
-
-
-+/**
-+ * ibus_compose_table_new_with_file:
-+ * @compose_file: The path of the compose file
-+ * @compose_tables: (nullable): The list of other @IBusComposeTableEx
-+ * and the generating @IBusComposeTableEx excludes the compose keys
-+ * which are included in the other @IBusComposeTableEx.
-+ *
-+ * Generate @IBusComposeTableEx from the compose file.
-+ *
-+ * Returns: @IBusComposeTableEx
-+ */
- IBusComposeTableEx *
- ibus_compose_table_new_with_file (const gchar *compose_file,
- GSList
-diff --git a/src/ibusengine.c b/src/ibusengine.c
-index cc12ac5a..8aa27b66 100644
---- a/src/ibusengine.c
-+++ b/src/ibusengine.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2018-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2018-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- * Copyright (C) 2008-2021 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
-@@ -371,7 +371,7 @@ ibus_engine_class_init (IBusEngineClass *class)
-
- /* install properties */
- /**
-- * IBusEngine:name:
-+ * IBusEngine:engine-name:
- *
- * Name of this IBusEngine.
- */
-@@ -385,6 +385,16 @@ ibus_engine_class_init (IBusEngineClass *class)
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
-+ /**
-+ * IBusEngine:has-focus-id:
-+ *
-+ * Use #IBusEngine::focus_in_id()/focus_out_id() class method insteads of
-+ * focus_in()/focus_out() class methods when this property is set to %TRUE.
-+ * Otherwise, use #IBusEngine::focus_in()/focus_out class methods.
-+ * This property can only be set at construct time.
-+ *
-+ * See also: IBusEngine::focus-in-id
-+ */
- g_object_class_install_property (gobject_class,
- PROP_HAS_FOCUS_ID,
- g_param_spec_boolean ("has-focus-id",
-@@ -577,7 +587,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * in extended class to receive this signal.
- *
- * See also: ibus_input_context_reset().
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[RESET] =
- g_signal_new (I_("reset"),
-@@ -598,7 +609,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * in extended class to receive this signal.
- *
- * See also: ibus_bus_set_global_engine().
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[ENABLE] =
- g_signal_new (I_("enable"),
-@@ -619,7 +631,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * in extended class to receive this signal.
- *
- * See also: ibus_bus_set_global_engine().
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[DISABLE] =
- g_signal_new (I_("disable"),
-@@ -644,7 +657,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * in extended class to receive this signal.
- *
- * See also: ibus_input_context_set_cursor_location().
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[SET_CURSOR_LOCATION] =
- g_signal_new (I_("set-cursor-location"),
-@@ -670,7 +684,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * in extended class to receive this signal.
- *
- * See also: ibus_input_context_set_capabilities().
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[SET_CAPABILITIES] =
- g_signal_new (I_("set-capabilities"),
-@@ -691,7 +706,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * Implement the member function IBusEngineClass::page_up
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[PAGE_UP] =
- g_signal_new (I_("page-up"),
-@@ -711,7 +727,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * Implement the member function IBusEngineClass::page_down
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[PAGE_DOWN] =
- g_signal_new (I_("page-down"),
-@@ -731,7 +748,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * Implement the member function IBusEngineClass::cursor_up
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[CURSOR_UP] =
- g_signal_new (I_("cursor-up"),
-@@ -751,7 +769,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * Implement the member function IBusEngineClass::cursor_down
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[CURSOR_DOWN] =
- g_signal_new (I_("cursor-down"),
-@@ -774,7 +793,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * Implement the member function IBusEngineClass::candidate_clicked
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[CANDIDATE_CLICKED] =
- g_signal_new (I_("candidate-clicked"),
-@@ -799,7 +819,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * Implement the member function IBusEngineClass::property_activate
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[PROPERTY_ACTIVATE] =
- g_signal_new (I_("property-activate"),
-@@ -822,7 +843,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * Implement the member function IBusEngineClass::property_side
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[PROPERTY_SHOW] =
- g_signal_new (I_("property-show"),
-@@ -844,7 +866,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * Implement the member function IBusEngineClass::property_hide
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[PROPERTY_HIDE] =
- g_signal_new (I_("property-hide"),
-@@ -860,14 +883,16 @@ ibus_engine_class_init (IBusEngineClass *class)
- /**
- * IBusEngine::process-hand-writing-event:
- * @engine: An IBusEngine.
-- * @coordinates: An array of double (0.0 to 1.0) which represents a stroke (i.e. [x1, y1, x2, y2, x3, y3, ...]).
-+ * @coordinates: An array of double (0.0 to 1.0) which represents a stroke
-+ * (i.e. [x1, y1, x2, y2, x3, y3, ...]).
- * @coordinates_len: The number of elements in the array.
- *
- * Emitted when a hand writing operation is cancelled.
- * Implement the member function IBusEngineClass::cancel_hand_writing
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[PROCESS_HAND_WRITING_EVENT] =
- g_signal_new (I_("process-hand-writing-event"),
-@@ -890,7 +915,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * Implement the member function IBusEngineClass::cancel_hand_writing
- * in extended class to receive this signal.
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[CANCEL_HAND_WRITING] =
- g_signal_new (I_("cancel-hand-writing"),
-@@ -916,7 +942,8 @@ ibus_engine_class_init (IBusEngineClass *class)
- * If anchor_pos equals to cursor_pos, it means "there are no selection"
- * or "does not support selection retrival".
- *
-- * <note><para>Argument @user_data is ignored in this function.</para></note>
-+ * <note><para>Argument @user_data is ignored in this function.</para>
-+ * </note>
- */
- engine_signals[SET_SURROUNDING_TEXT] =
- g_signal_new (I_("set-surrounding-text"),
-@@ -1265,7 +1292,8 @@ ibus_engine_service_method_call (IBusService *service,
- keycode,
- state);
- }
-- g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", retval));
-+ g_dbus_method_invocation_return_value (invocation,
-+ g_variant_new ("(b)", retval));
- return;
- }
- if (g_strcmp0 (method_name, "PanelExtensionReceived") == 0) {
-@@ -1449,8 +1477,10 @@ ibus_engine_service_method_call (IBusService *service,
-
- coordinates = g_variant_get_fixed_array (g_variant_get_child_value (parameters, 0), &coordinates_len, sizeof (gdouble));
- g_return_if_fail (coordinates != NULL);
-- g_return_if_fail (coordinates_len >= 4); /* The array should contain at least one line. */
-- g_return_if_fail (coordinates_len <= G_MAXUINT); /* to prevent overflow in the cast in g_signal_emit */
-+ /* The array should contain at least one line. */
-+ g_return_if_fail (coordinates_len >= 4);
-+ /* to prevent overflow in the cast in g_signal_emit */
-+ g_return_if_fail (coordinates_len <= G_MAXUINT);
- g_return_if_fail ((coordinates_len & 1) == 0);
-
- g_signal_emit (engine, engine_signals[PROCESS_HAND_WRITING_EVENT], 0,
-@@ -1656,38 +1686,32 @@ ibus_engine_set_cursor_location (IBusEngine *engine,
- gint w,
- gint h)
- {
-- // g_debug ("set-cursor-location (%d, %d, %d, %d)", x, y, w, h);
- }
-
- static void
- ibus_engine_set_capabilities (IBusEngine *engine,
- guint caps)
- {
-- // g_debug ("set-capabilities (0x%04x)", caps);
- }
-
- static void
- ibus_engine_page_up (IBusEngine *engine)
- {
-- // g_debug ("page-up");
- }
-
- static void
- ibus_engine_page_down (IBusEngine *engine)
- {
-- // g_debug ("page-down");
- }
-
- static void
- ibus_engine_cursor_up (IBusEngine *engine)
- {
-- // g_debug ("cursor-up");
- }
-
- static void
- ibus_engine_cursor_down (IBusEngine *engine)
- {
-- // g_debug ("cursor-down");
- }
-
- static void
-@@ -1696,7 +1720,6 @@ ibus_engine_candidate_clicked (IBusEngine *engine,
- guint button,
- guint state)
- {
-- // g_debug ("candidate-clicked");
- }
-
- static void
-@@ -1704,19 +1727,16 @@ ibus_engine_property_activate (IBusEngine *engine,
- const gchar *prop_name,
- guint prop_state)
- {
-- // g_debug ("property-activate ('%s', %d)", prop_name, prop_state);
- }
-
- static void
- ibus_engine_property_show (IBusEngine *engine, const gchar *prop_name)
- {
-- // g_debug ("property-show ('%s')", prop_name);
- }
-
- static void
- ibus_engine_property_hide (IBusEngine *engine, const gchar *prop_name)
- {
-- // g_debug ("property-hide ('%s')", prop_name);
- }
-
- static void
-@@ -1734,7 +1754,6 @@ ibus_engine_set_surrounding_text (IBusEngine *engine,
- engine->priv->surrounding_text = (IBusText *) g_object_ref_sink (text ? text : text_empty);
- engine->priv->surrounding_cursor_pos = cursor_pos;
- engine->priv->selection_anchor_pos = anchor_pos;
-- // g_debug ("set-surrounding-text ('%s', %d, %d)", text->text, cursor_pos, anchor_pos);
- }
-
- static void
-@@ -1742,17 +1761,18 @@ ibus_engine_process_hand_writing_event (IBusEngine *engine,
- const gdouble *coordinates,
- guint coordinates_len)
- {
-- // guint i;
-- // g_debug ("process-hand-writing-event (%u)", coordinates_len);
-- // for (i = 0; i < coordinates_len; i++)
-- // g_debug (" %lf", coordinates[i]);
-+#if 0
-+ guint i;
-+ g_debug ("process-hand-writing-event (%u)", coordinates_len);
-+ for (i = 0; i < coordinates_len; i++)
-+ g_debug (" %lf", coordinates[i]);
-+#endif
- }
-
- static void
- ibus_engine_cancel_hand_writing (IBusEngine *engine,
- guint n_strokes)
- {
-- // g_debug ("cancel-hand-writing (%u)", n_strokes);
- }
-
- static void
-@@ -1760,7 +1780,6 @@ ibus_engine_set_content_type (IBusEngine *engine,
- guint purpose,
- guint hints)
- {
-- // g_debug ("set-content-type (%u %u)", purpose, hints);
- }
-
- static void
-@@ -2085,8 +2104,6 @@ ibus_engine_get_surrounding_text (IBusEngine *engine,
- ibus_engine_emit_signal (engine,
- "RequireSurroundingText",
- NULL);
--
-- // g_debug ("get-surrounding-text ('%s', %d, %d)", (*text)->text, *cursor_pos, *anchor_pos);
- }
-
- void
---
-2.38.1
-
-From f788f1f8317797ebc59f5f59acb4390824e5a4ef Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 17 Feb 2023 20:35:10 +0900
-Subject: [PATCH] Return error if D-Bus set/get property method is failed
-
-D-Bus set/get property methods are called from DBusConnection
-APIs invoke_set_property_in_idle_cb() and
-invoke_get_property_in_idle_cb() and the error values cannot be
-null if the methods are failed.
-
-BUG=rhbz#2169205
----
- bus/ibusimpl.c | 86 ++++++++++++++++++------------------------
- bus/inputcontext.c | 27 +++++++++++--
- src/ibusengine.c | 44 ++++++++++++++-------
- src/ibusenginesimple.c | 2 +-
- src/ibusservice.c | 27 ++++++++++---
- 5 files changed, 113 insertions(+), 73 deletions(-)
-
-diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
-index c2ae88df..f2ab2b30 100644
---- a/bus/ibusimpl.c
-+++ b/bus/ibusimpl.c
-@@ -700,11 +700,14 @@ _ibus_get_address (BusIBusImpl *ibus,
- GDBusConnection *connection,
- GError **error)
- {
-- if (error) {
-- *error = NULL;
-+ GVariant *retval = g_variant_new_string (bus_server_get_address ());
-+ if (!retval) {
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ "Cannot get IBus address");
- }
--
-- return g_variant_new_string (bus_server_get_address ());
-+ return retval;
- }
-
- static void
-@@ -1213,9 +1216,6 @@ _ibus_get_current_input_context (BusIBusImpl *ibus,
- GError **error)
- {
- GVariant *retval = NULL;
-- if (error) {
-- *error = NULL;
-- }
-
- if (!ibus->focused_context)
- {
-@@ -1359,14 +1359,11 @@ _ibus_get_engines (BusIBusImpl *ibus,
- GDBusConnection *connection,
- GError **error)
- {
-+ GVariant *retval;
- GVariantBuilder builder;
- GList *engines = NULL;
- GList *p;
-
-- if (error) {
-- *error = NULL;
-- }
--
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("av"));
-
- engines = g_hash_table_get_values (ibus->engine_table);
-@@ -1379,7 +1376,9 @@ _ibus_get_engines (BusIBusImpl *ibus,
-
- g_list_free (engines);
-
-- return g_variant_builder_end (&builder);
-+ retval = g_variant_builder_end (&builder);
-+ g_assert (retval);
-+ return retval;
- }
-
- static void
-@@ -1444,13 +1443,10 @@ _ibus_get_active_engines (BusIBusImpl *ibus,
- GDBusConnection *connection,
- GError **error)
- {
-+ GVariant *retval;
- GVariantBuilder builder;
- GList *p;
-
-- if (error) {
-- *error = NULL;
-- }
--
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("av"));
-
- for (p = ibus->register_engine_list; p != NULL; p = p->next) {
-@@ -1459,7 +1455,9 @@ _ibus_get_active_engines (BusIBusImpl *ibus,
- ibus_serializable_serialize ((IBusSerializable *) p->data));
- }
-
-- return g_variant_builder_end (&builder);
-+ retval = g_variant_builder_end (&builder);
-+ g_assert (retval);
-+ return retval;
- }
-
- static void
-@@ -1528,10 +1526,8 @@ _ibus_get_use_sys_layout (BusIBusImpl *ibus,
- GDBusConnection *connection,
- GError **error)
- {
-- if (error) {
-+ if (error)
- *error = NULL;
-- }
--
- return g_variant_new_boolean (ibus->use_sys_layout);
- }
-
-@@ -1566,10 +1562,8 @@ _ibus_get_use_global_engine (BusIBusImpl *ibus,
- GDBusConnection *connection,
- GError **error)
- {
-- if (error) {
-+ if (error)
- *error = NULL;
-- }
--
- return g_variant_new_boolean (ibus->use_global_engine);
- }
-
-@@ -1607,10 +1601,6 @@ _ibus_get_global_engine (BusIBusImpl *ibus,
- IBusEngineDesc *desc = NULL;
- GVariant *retval = NULL;
-
-- if (error) {
-- *error = NULL;
-- }
--
- do {
- if (!ibus->use_global_engine)
- break;
-@@ -1790,10 +1780,8 @@ _ibus_get_global_engine_enabled (BusIBusImpl *ibus,
- {
- gboolean enabled = FALSE;
-
-- if (error) {
-+ if (error)
- *error = NULL;
-- }
--
- do {
- if (!ibus->use_global_engine)
- break;
-@@ -1849,10 +1837,6 @@ _ibus_set_preload_engines (BusIBusImpl *ibus,
- BusFactoryProxy *factory = NULL;
- GPtrArray *array = g_ptr_array_new ();
-
-- if (error) {
-- *error = NULL;
-- }
--
- g_variant_get (value, "^a&s", &names);
-
- for (i = 0; names[i] != NULL; i++) {
-@@ -1912,11 +1896,9 @@ _ibus_get_embed_preedit_text (BusIBusImpl *ibus,
- GDBusConnection *connection,
- GError **error)
- {
-- if (error) {
-- *error = NULL;
-- }
--
-- return g_variant_new_boolean (ibus->embed_preedit_text);
-+ GVariant *retval = g_variant_new_boolean (ibus->embed_preedit_text);
-+ g_assert (retval);
-+ return retval;
- }
-
- /**
-@@ -1931,10 +1913,6 @@ _ibus_set_embed_preedit_text (BusIBusImpl *ibus,
- GVariant *value,
- GError **error)
- {
-- if (error) {
-- *error = NULL;
-- }
--
- gboolean embed_preedit_text = g_variant_get_boolean (value);
- if (embed_preedit_text != ibus->embed_preedit_text) {
- ibus->embed_preedit_text = embed_preedit_text;
-@@ -2038,6 +2016,8 @@ bus_ibus_impl_service_get_property (IBusService *service,
- { "EmbedPreeditText", _ibus_get_embed_preedit_text },
- };
-
-+ if (error)
-+ *error = NULL;
- if (g_strcmp0 (interface_name, IBUS_INTERFACE_IBUS) != 0) {
- return IBUS_SERVICE_CLASS (
- bus_ibus_impl_parent_class)->service_get_property (
-@@ -2054,9 +2034,12 @@ bus_ibus_impl_service_get_property (IBusService *service,
- }
- }
-
-- g_warning ("service_get_property received an unknown property: %s",
-- property_name ? property_name : "(null)");
-- return NULL;
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ "service_get_property received an unknown property: %s",
-+ property_name ? property_name : "(null)");
-+ g_return_val_if_reached (NULL);
- }
-
- /**
-@@ -2087,6 +2070,8 @@ bus_ibus_impl_service_set_property (IBusService *service,
- { "EmbedPreeditText", _ibus_set_embed_preedit_text },
- };
-
-+ if (error)
-+ *error = NULL;
- if (g_strcmp0 (interface_name, IBUS_INTERFACE_IBUS) != 0) {
- return IBUS_SERVICE_CLASS (
- bus_ibus_impl_parent_class)->service_set_property (
-@@ -2104,9 +2089,12 @@ bus_ibus_impl_service_set_property (IBusService *service,
- }
- }
-
-- g_warning ("service_set_property received an unknown property: %s",
-- property_name ? property_name : "(null)");
-- return FALSE;
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ "service_set_property received an unknown property: %s",
-+ property_name ? property_name : "(null)");
-+ g_return_val_if_reached (FALSE);
- }
-
- BusIBusImpl *
-diff --git a/bus/inputcontext.c b/bus/inputcontext.c
-index 72041ecb..e76bbdfc 100644
---- a/bus/inputcontext.c
-+++ b/bus/inputcontext.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2008-2014 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2015-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2015-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- * Copyright (C) 2008-2016 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
-@@ -1388,6 +1388,8 @@ bus_input_context_service_set_property (IBusService *service,
- GVariant *value,
- GError **error)
- {
-+ if (error)
-+ *error = NULL;
- if (g_strcmp0 (interface_name, IBUS_INTERFACE_INPUT_CONTEXT) != 0) {
- return IBUS_SERVICE_CLASS (bus_input_context_parent_class)->
- service_set_property (service,
-@@ -1400,10 +1402,22 @@ bus_input_context_service_set_property (IBusService *service,
- error);
- }
-
-- if (!bus_input_context_service_authorized_method (service, connection))
-+ if (!BUS_IS_INPUT_CONTEXT (service)) {
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ "%p is not BusInputContext.", service);
- return FALSE;
--
-- g_return_val_if_fail (BUS_IS_INPUT_CONTEXT (service), FALSE);
-+ }
-+ if (!bus_input_context_service_authorized_method (service, connection)) {
-+ /* No error message due to the security issue but GError is required
-+ * by gdbusconnection.c:invoke_set_property_in_idle_cb() */
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ " ");
-+ return FALSE;
-+ }
-
- if (g_strcmp0 (property_name, "ContentType") == 0) {
- _ic_set_content_type (BUS_INPUT_CONTEXT (service), value);
-@@ -1414,6 +1428,11 @@ bus_input_context_service_set_property (IBusService *service,
- return TRUE;
- }
-
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ "service_set_property received an unknown property: %s",
-+ property_name ? property_name : "(null)");
- g_return_val_if_reached (FALSE);
- }
-
-diff --git a/src/ibusengine.c b/src/ibusengine.c
-index 8aa27b66..321a58a1 100644
---- a/src/ibusengine.c
-+++ b/src/ibusengine.c
-@@ -1512,11 +1512,10 @@ _ibus_engine_get_active_surrounding_text (IBusEngine *engine,
- GDBusConnection *connection,
- GError **error)
- {
-- if (error) {
-- *error = NULL;
-- }
--
-- return g_variant_new_boolean (engine->priv->has_active_surrounding_text);
-+ GVariant *retval = g_variant_new_boolean (
-+ engine->priv->has_active_surrounding_text);
-+ g_assert (retval);
-+ return retval;
- }
-
- /**
-@@ -1529,11 +1528,9 @@ _ibus_engine_has_focus_id (IBusEngine *engine,
- GDBusConnection *connection,
- GError **error)
- {
-- if (error) {
-- *error = NULL;
-- }
--
-- return g_variant_new_boolean (engine->priv->has_focus_id);
-+ GVariant *retval = g_variant_new_boolean (engine->priv->has_focus_id);
-+ g_assert (retval);
-+ return retval;
- }
-
- static GVariant *
-@@ -1556,6 +1553,8 @@ ibus_engine_service_get_property (IBusService *service,
- { "ActiveSurroundingText", _ibus_engine_get_active_surrounding_text },
- };
-
-+ if (error)
-+ *error = NULL;
- if (g_strcmp0 (interface_name, IBUS_INTERFACE_ENGINE) != 0) {
- return IBUS_SERVICE_CLASS (ibus_engine_parent_class)->
- service_get_property (service,
-@@ -1575,9 +1574,12 @@ ibus_engine_service_get_property (IBusService *service,
- }
- }
-
-- g_warning ("service_get_property received an unknown property: %s",
-- property_name ? property_name : "(null)");
-- return NULL;
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ "service_get_property received an unknown property: %s",
-+ property_name ? property_name : "(null)");
-+ g_return_val_if_reached (NULL);
- }
-
- static gboolean
-@@ -1592,6 +1594,8 @@ ibus_engine_service_set_property (IBusService *service,
- {
- IBusEngine *engine = IBUS_ENGINE (service);
-
-+ if (error)
-+ *error = NULL;
- if (g_strcmp0 (interface_name, IBUS_INTERFACE_ENGINE) != 0) {
- return IBUS_SERVICE_CLASS (ibus_engine_parent_class)->
- service_set_property (service,
-@@ -1604,8 +1608,15 @@ ibus_engine_service_set_property (IBusService *service,
- error);
- }
-
-- if (!ibus_engine_service_authorized_method (service, connection))
-+ if (!ibus_engine_service_authorized_method (service, connection)) {
-+ /* No error message due to the security issue but GError is required
-+ * by gdbusconnection.c:invoke_set_property_in_idle_cb() */
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ " ");
- return FALSE;
-+ }
-
- if (g_strcmp0 (property_name, "ContentType") == 0) {
- guint purpose = 0;
-@@ -1629,6 +1640,11 @@ ibus_engine_service_set_property (IBusService *service,
- return TRUE;
- }
-
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ "service_set_property received an unknown property: %s",
-+ property_name ? property_name : "(null)");
- g_return_val_if_reached (FALSE);
- }
-
-diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c
-index 3d1668b2..409d5a56 100644
---- a/src/ibusenginesimple.c
-+++ b/src/ibusenginesimple.c
-@@ -158,7 +158,7 @@ ibus_engine_simple_init (IBusEngineSimple *simple)
- G_RESOURCE_LOOKUP_FLAGS_NONE,
- &error);
- if (error) {
-- g_warning ("Nout found compose resource %s", error->message);
-+ g_warning ("Not found compose resource %s", error->message);
- g_clear_error (&error);
- return;
- }
-diff --git a/src/ibusservice.c b/src/ibusservice.c
-index 60255bd5..d207f707 100644
---- a/src/ibusservice.c
-+++ b/src/ibusservice.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2015-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2015-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
- * Copyright (C) 2008-2019 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
-@@ -370,8 +370,9 @@ ibus_service_service_method_call (IBusService *service,
- g_dbus_method_invocation_return_error (invocation,
- G_DBUS_ERROR,
- G_DBUS_ERROR_UNKNOWN_METHOD,
-- "%s::%s", interface_name, method_name);
-- return;
-+ "%s::%s",
-+ interface_name, method_name);
-+ g_return_if_reached ();
- }
-
- static GVariant *
-@@ -383,7 +384,15 @@ ibus_service_service_get_property (IBusService *service,
- const gchar *property_name,
- GError **error)
- {
-- return NULL;
-+ if (error) {
-+ *error = NULL;
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ "service_get_property received an unknown property: %s",
-+ property_name ? property_name : "(null)");
-+ }
-+ g_return_val_if_reached (NULL);
- }
-
- static gboolean
-@@ -396,7 +405,15 @@ ibus_service_service_set_property (IBusService *service,
- GVariant *value,
- GError **error)
- {
-- return FALSE;
-+ if (error) {
-+ *error = NULL;
-+ g_set_error (error,
-+ G_DBUS_ERROR,
-+ G_DBUS_ERROR_FAILED,
-+ "service_set_property received an unknown property: %s",
-+ property_name ? property_name : "(null)");
-+ }
-+ g_return_val_if_reached (FALSE);
- }
-
- static void
---
-2.38.1
-
reply other threads:[~2026-05-31 2:08 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178019328622.1.15236656248940941244.rpms-ibus-f48dc0ddb5c6@fedoraproject.org \
--to=tfujiwar@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox