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 -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 -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 -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 -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 -- * Copyright (C) 2018-2019 Takao Fujiwara -+ * Copyright (C) 2018-2022 Takao Fujiwara - * 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 -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 -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 -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 -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 -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 --# Copyright (c) 2015-2022 Takao Fujiwara --# Copyright (c) 2007-2022 Red Hat, Inc. -+# Copyright (c) 2015-2023 Takao Fujiwara -+# 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 -+ #if __BYTE_ORDER != __LITTLE_ENDIAN -+ #error -+ #endif -+ ]] -+ )], -+ [ENDIAN=little] -+) -+AC_RUN_IFELSE( -+ [AC_LANG_PROGRAM( -+ [[ -+ #include -+ #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 --# Copyright (c) 2015-2021 Takao Fujiwara -+# Copyright (c) 2015-2023 Takao Fujiwara - # 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 -+# 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 -+ * 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 -+#include -+#include -+#include -+ -+#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 . -- */ -- --/* -- * 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 -- * 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 @@ -+ -+ -+ compose/sequences-@ENDIAN@-endian -+ -+ -+ -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 -- * Copyright (C) 2013-2022 Takao Fujiwara -+ * Copyright (C) 2013-2023 Takao Fujiwara - * - * 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 -- * Copyright (C) 2013-2019 Takao Fujiwara -+ * Copyright (C) 2013-2023 Takao Fujiwara - * - * 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 -- * Copyright (C) 2015-2022 Takao Fujiwara -+ * Copyright (C) 2015-2023 Takao Fujiwara - * 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 - #include - -@@ -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 -+ * Copyright (C) 2016-2023 Takao Fujiwara - * 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 -- * Copyright (C) 2015-2021 Takao Fujiwara -+ * Copyright (C) 2015-2023 Takao Fujiwara - * Copyright (C) 2008-2018 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or -@@ -24,6 +24,7 @@ - #include - #endif - -+#include "ibusresources.h" - #include "ibusshare.h" - #include - #include -@@ -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 -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 -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 */ - " " - " " -+ " " - " " - ""; - -@@ -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 -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 -- * Copyright (C) 2011-2021 Takao Fujiwara -+ * Copyright (C) 2011-2023 Takao Fujiwara - * 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 -- * Copyright (C) 2015-2022 Takao Fujiwara -- * Copyright (C) 2008-2022 Red Hat, Inc. -+ * Copyright (C) 2015-2023 Takao Fujiwara -+ * 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 -- * Copyright (C) 2018-2022 Takao Fujiwara -+ * Copyright (C) 2018-2023 Takao Fujiwara - * 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(). -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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(). -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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(). -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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(). -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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(). -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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. - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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". - * -- * Argument @user_data is ignored in this function. -+ * Argument @user_data is ignored in this function. -+ * - */ - 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 -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 -- * Copyright (C) 2015-2018 Takao Fujiwara -+ * Copyright (C) 2015-2023 Takao Fujiwara - * 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 -- * Copyright (C) 2015-2019 Takao Fujiwara -+ * Copyright (C) 2015-2023 Takao Fujiwara - * 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 -