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