Implement keymaps, merged keymaps branch
authorPeng Huang <shawn.p.huang@gmail.com>
Sun, 14 Jun 2009 06:29:27 +0000 (14:29 +0800)
committerPeng Huang <shawn.p.huang@gmail.com>
Sun, 14 Jun 2009 06:29:27 +0000 (14:29 +0800)
58 files changed:
bus/engineproxy.c
bus/engineproxy.h
bus/ibusimpl.c
bus/ibusimpl.h
bus/inputcontext.c
client/gtk2/ibusimcontext.c
client/x11/main.c
configure.ac
data/Makefile.am
data/keymaps/Makefile.am [new file with mode: 0644]
data/keymaps/ar [new file with mode: 0644]
data/keymaps/common [new file with mode: 0644]
data/keymaps/da [new file with mode: 0644]
data/keymaps/de [new file with mode: 0644]
data/keymaps/de-ch [new file with mode: 0644]
data/keymaps/en-gb [new file with mode: 0644]
data/keymaps/es [new file with mode: 0644]
data/keymaps/et [new file with mode: 0644]
data/keymaps/fi [new file with mode: 0644]
data/keymaps/fo [new file with mode: 0644]
data/keymaps/fr [new file with mode: 0644]
data/keymaps/fr-be [new file with mode: 0644]
data/keymaps/fr-ca [new file with mode: 0644]
data/keymaps/fr-ch [new file with mode: 0644]
data/keymaps/hr [new file with mode: 0644]
data/keymaps/hu [new file with mode: 0644]
data/keymaps/is [new file with mode: 0644]
data/keymaps/it [new file with mode: 0644]
data/keymaps/jp [new file with mode: 0644]
data/keymaps/lt [new file with mode: 0644]
data/keymaps/lv [new file with mode: 0644]
data/keymaps/mk [new file with mode: 0644]
data/keymaps/modifiers [new file with mode: 0644]
data/keymaps/nl [new file with mode: 0644]
data/keymaps/nl-be [new file with mode: 0644]
data/keymaps/no [new file with mode: 0644]
data/keymaps/pl [new file with mode: 0644]
data/keymaps/pt [new file with mode: 0644]
data/keymaps/pt-br [new file with mode: 0644]
data/keymaps/ru [new file with mode: 0644]
data/keymaps/sl [new file with mode: 0644]
data/keymaps/sv [new file with mode: 0644]
data/keymaps/th [new file with mode: 0644]
data/keymaps/tr [new file with mode: 0644]
data/keymaps/us [new file with mode: 0644]
ibus/engine.py
ibus/inputcontext.py
ibus/interface/iengine.py
src/Makefile.am
src/ibus.h
src/ibusengine.c
src/ibusengine.h
src/ibusinputcontext.c
src/ibusinputcontext.h
src/ibuskeymap.c [new file with mode: 0644]
src/ibuskeymap.h [new file with mode: 0644]
src/ibusmarshalers.list
src/test-keymap.c [new file with mode: 0644]

index 5a2f841f8cbee0fe53154af10e86b60a4503ab9d..03a3151a9763c2177550a4e4c7f3bf3995ba288d 100644 (file)
@@ -22,9 +22,6 @@
 #include <ibusmarshalers.h>
 #include "engineproxy.h"
 
-#define BUS_ENGINE_PROXY_GET_PRIVATE(o)  \
-   (G_TYPE_INSTANCE_GET_PRIVATE ((o), BUS_TYPE_ENGINE_PROXY, BusEngineProxyPrivate))
-
 enum {
     COMMIT_TEXT,
     FORWARD_KEY_EVENT,
@@ -47,15 +44,6 @@ enum {
 };
 
 
-/* BusEngineProxyPriv */
-struct _BusEngineProxyPrivate {
-    gboolean enabled;
-    IBusEngineDesc *desc;
-
-    IBusPropList *prop_list;
-};
-typedef struct _BusEngineProxyPrivate BusEngineProxyPrivate;
-
 static guint    engine_signals[LAST_SIGNAL] = { 0 };
 // static guint            engine_signals[LAST_SIGNAL] = { 0 };
 
@@ -112,10 +100,15 @@ bus_engine_proxy_new (const gchar    *path,
                                               "connection", connection,
                                               NULL);
 
-    BusEngineProxyPrivate *priv;
-    priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
-    priv->desc = desc;
+    engine->desc = desc;
     g_object_ref (desc);
+    if (desc->layout != NULL && desc->layout[0] != '\0') {
+        engine->keymap = ibus_keymap_new (desc->layout);
+    }
+
+    if (engine->keymap == NULL) {
+        engine->keymap = ibus_keymap_new ("us");
+    }
 
     return engine;
 }
@@ -129,8 +122,6 @@ bus_engine_proxy_class_init (BusEngineProxyClass *klass)
 
     parent_class = (IBusProxyClass *) g_type_class_peek_parent (klass);
 
-    g_type_class_add_private (klass, sizeof (BusEngineProxyPrivate));
-
     ibus_object_class->destroy = (IBusObjectDestroyFunc) bus_engine_proxy_real_destroy;
 
     proxy_class->ibus_signal = bus_engine_proxy_ibus_signal;
@@ -323,23 +314,18 @@ bus_engine_proxy_class_init (BusEngineProxyClass *klass)
 static void
 bus_engine_proxy_init (BusEngineProxy *engine)
 {
-    BusEngineProxyPrivate *priv;
-    priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
-
-    priv->enabled = FALSE;
-    priv->prop_list = NULL;
-    priv->desc = NULL;
+    engine->enabled = FALSE;
+    engine->prop_list = NULL;
+    engine->desc = NULL;
+    engine->keymap = NULL;
 }
 
 static void
 bus_engine_proxy_real_destroy (BusEngineProxy *engine)
 {
-    BusEngineProxyPrivate *priv;
-    priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
-
-    if (priv->prop_list) {
-        g_object_unref (priv->prop_list);
-        priv->prop_list = NULL;
+    if (engine->prop_list) {
+        g_object_unref (engine->prop_list);
+        engine->prop_list = NULL;
     }
 
     if (ibus_proxy_get_connection ((IBusProxy *) engine)) {
@@ -348,9 +334,14 @@ bus_engine_proxy_real_destroy (BusEngineProxy *engine)
                          G_TYPE_INVALID);
     }
 
-    if (priv->desc) {
-        g_object_unref (priv->desc);
-        priv->desc = NULL;
+    if (engine->desc) {
+        g_object_unref (engine->desc);
+        engine->desc = NULL;
+    }
+
+    if (engine->keymap) {
+        g_object_unref (engine->keymap);
+        engine->keymap = NULL;
     }
 
     IBUS_OBJECT_CLASS(parent_class)->destroy (IBUS_OBJECT (engine));
@@ -364,7 +355,6 @@ bus_engine_proxy_ibus_signal (IBusProxy     *proxy,
     g_assert (message != NULL);
 
     BusEngineProxy *engine;
-    BusEngineProxyPrivate *priv;
     IBusError *error;
     gint i;
 
@@ -386,7 +376,6 @@ bus_engine_proxy_ibus_signal (IBusProxy     *proxy,
     };
 
     engine = BUS_ENGINE_PROXY (proxy);
-    priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
 
     for (i = 0; ; i++) {
         if (signals[i].member == NULL)
@@ -482,20 +471,20 @@ bus_engine_proxy_ibus_signal (IBusProxy     *proxy,
     else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "RegisterProperties")) {
         gboolean retval;
 
-        if (priv->prop_list) {
-            g_object_unref (priv->prop_list);
-            priv->prop_list = NULL;
+        if (engine->prop_list) {
+            g_object_unref (engine->prop_list);
+            engine->prop_list = NULL;
         }
 
         retval = ibus_message_get_args (message,
                                         &error,
-                                        IBUS_TYPE_PROP_LIST, &priv->prop_list,
+                                        IBUS_TYPE_PROP_LIST, &engine->prop_list,
                                         G_TYPE_INVALID);
         if (!retval) {
-            priv->prop_list = NULL;
+            engine->prop_list = NULL;
             goto failed;
         }
-        g_signal_emit (engine, engine_signals[REGISTER_PROPERTIES], 0, priv->prop_list);
+        g_signal_emit (engine, engine_signals[REGISTER_PROPERTIES], 0, engine->prop_list);
     }
     else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "UpdateProperty")) {
         IBusProperty *prop;
@@ -571,6 +560,7 @@ bus_engine_proxy_process_key_event_reply_cb (IBusPendingCall *pending,
 void
 bus_engine_proxy_process_key_event (BusEngineProxy *engine,
                                     guint           keyval,
+                                    guint           keycode,
                                     guint           state,
                                     GFunc           return_cb,
                                     gpointer        user_data)
@@ -583,12 +573,20 @@ bus_engine_proxy_process_key_event (BusEngineProxy *engine,
     IBusError *error;
     gboolean retval;
 
+    if (keycode != 0 && engine->keymap != NULL) {
+        guint t = ibus_keymap_lookup_keysym (engine->keymap, keycode, state);
+        if (t != IBUS_VoidSymbol) {
+            keyval = t;
+        }
+    }
+
     retval = ibus_proxy_call_with_reply ((IBusProxy *) engine,
                                          "ProcessKeyEvent",
                                          &pending,
                                          -1,
                                          &error,
                                          G_TYPE_UINT, &keyval,
+                                         G_TYPE_UINT, &keycode,
                                          G_TYPE_UINT, &state,
                                          G_TYPE_INVALID);
     if (!retval) {
@@ -729,8 +727,5 @@ bus_engine_proxy_get_desc (BusEngineProxy *engine)
 {
     g_assert (BUS_IS_ENGINE_PROXY (engine));
 
-    BusEngineProxyPrivate *priv;
-    priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
-
-    return priv->desc;
+    return engine->desc;
 }
index 8d1067c4cd386f59e1a285a027cf8df2c4305b92..c934ca8a50eeadd66e5ce7d23861ed169bf4dfaf 100644 (file)
@@ -49,6 +49,10 @@ typedef struct _BusEngineProxyClass BusEngineProxyClass;
 struct _BusEngineProxy {
     IBusProxy parent;
     /* instance members */
+    gboolean enabled;
+    IBusEngineDesc *desc;
+    IBusKeymap     *keymap;
+    IBusPropList *prop_list;
 };
 
 struct _BusEngineProxyClass {
@@ -63,6 +67,7 @@ BusEngineProxy  *bus_engine_proxy_new               (const gchar    *path,
 IBusEngineDesc  *bus_engine_proxy_get_desc          (BusEngineProxy *engine);
 void             bus_engine_proxy_process_key_event (BusEngineProxy *engine,
                                                      guint           keyval,
+                                                     guint           keycode,
                                                      guint           state,
                                                      GFunc           return_cn,
                                                      gpointer        user_data);
index f07a8506e7ffb303c2a8a9448819ca7790a9f1e0..23b11f4a6b8bdb6eb4d827e607963aa7964eab86 100644 (file)
@@ -485,6 +485,7 @@ bus_ibus_impl_init (BusIBusImpl *ibus)
     ibus->config = NULL;
 
     ibus->hotkey_profile = ibus_hotkey_profile_new ();
+    ibus->keymap = ibus_keymap_new ("us");
 
     bus_ibus_impl_reload_config (ibus);
 
@@ -550,6 +551,11 @@ bus_ibus_impl_destroy (BusIBusImpl *ibus)
         ibus->hotkey_profile = NULL;
     }
 
+    if (ibus->keymap != NULL) {
+        g_object_unref (ibus->keymap);
+        ibus->keymap = NULL;
+    }
+
     bus_server_quit (BUS_DEFAULT_SERVER);
     ibus_object_destroy ((IBusObject *) BUS_DEFAULT_SERVER);
     IBUS_OBJECT_CLASS(parent_class)->destroy (IBUS_OBJECT (ibus));
@@ -1171,6 +1177,15 @@ bus_ibus_impl_get_hotkey_profile (BusIBusImpl *ibus)
     return ibus->hotkey_profile;
 }
 
+IBusKeymap *
+bus_ibus_impl_get_keymap (BusIBusImpl *ibus)
+{
+
+    g_assert (BUS_IS_IBUS_IMPL (ibus));
+
+    return ibus->keymap;
+}
+
 BusRegistry *
 bus_ibus_impl_get_registry (BusIBusImpl *ibus)
 {
index fd85138b520916400557632196c228d109396e18..cdb235f0b20e39755c19e3179990042d20403864 100644 (file)
@@ -49,6 +49,8 @@
     (bus_ibus_impl_get_default ())
 #define BUS_DEFAULT_HOTKEY_PROFILE \
     (bus_ibus_impl_get_hotkey_profile (BUS_DEFAULT_IBUS))
+#define BUS_DEFAULT_KEYMAP \
+    (bus_ibus_impl_get_keymap (BUS_DEFAULT_IBUS))
 #define BUS_DEFAULT_REGISTRY \
     (bus_ibus_impl_get_registry (BUS_DEFAULT_IBUS))
 
@@ -75,6 +77,7 @@ struct _BusIBusImpl {
     BusPanelProxy   *panel;
     IBusConfig      *config;
     IBusHotkeyProfile *hotkey_profile;
+    IBusKeymap      *keymap;
 
 };
 
@@ -95,6 +98,7 @@ BusFactoryProxy *bus_ibus_impl_lookup_factory       (BusIBusImpl        *ibus,
                                                      const gchar        *path);
 IBusHotkeyProfile
                 *bus_ibus_impl_get_hotkey_profile   (BusIBusImpl        *ibus);
+IBusKeymap      *bus_ibus_impl_get_keymap           (BusIBusImpl        *ibus);
 BusRegistry     *bus_ibus_impl_get_registry         (BusIBusImpl        *ibus);
 
 G_END_DECLS
index bec08c3509c6e895cfe838f8b8c6a74f36f75753..cdea4b4e073f40c108636e36b9c14d1710720ea8 100644 (file)
@@ -116,6 +116,7 @@ static gboolean bus_input_context_ibus_message  (BusInputContext        *context
 static gboolean bus_input_context_filter_keyboard_shortcuts
                                                 (BusInputContext        *context,
                                                  guint                   keyval,
+                                                 guint                   keycode,
                                                  guint                   modifiers);
 static gboolean bus_input_context_send_signal   (BusInputContext        *context,
                                                  const gchar            *signal_name,
@@ -676,16 +677,16 @@ _ic_process_key_event_reply_cb (gpointer data,
 }
 
 static IBusMessage *
-_ic_process_key_event (BusInputContext *context,
-                       IBusMessage     *message,
-                       BusConnection   *connection)
+_ic_process_key_event  (BusInputContext *context,
+                        IBusMessage     *message,
+                        BusConnection   *connection)
 {
     g_assert (BUS_IS_INPUT_CONTEXT (context));
     g_assert (message != NULL);
     g_assert (BUS_IS_CONNECTION (connection));
 
     IBusMessage *reply = NULL;
-    guint keyval, modifiers;
+    guint keyval, keycode, modifiers;
     gboolean retval;
     IBusError *error;
 
@@ -695,6 +696,7 @@ _ic_process_key_event (BusInputContext *context,
     retval = ibus_message_get_args (message,
                 &error,
                 G_TYPE_UINT, &keyval,
+                G_TYPE_UINT, &keycode,
                 G_TYPE_UINT, &modifiers,
                 G_TYPE_INVALID);
 
@@ -706,10 +708,9 @@ _ic_process_key_event (BusInputContext *context,
         return reply;
     }
 
-    retval = bus_input_context_filter_keyboard_shortcuts (context, keyval, modifiers);
+    retval = bus_input_context_filter_keyboard_shortcuts (context, keyval, keycode, modifiers);
 
     if (retval) {
-        priv->filter_release = TRUE;
         reply = ibus_message_new_method_return (message);
         ibus_message_append_args (reply,
                                   G_TYPE_BOOLEAN, &retval,
@@ -728,6 +729,7 @@ _ic_process_key_event (BusInputContext *context,
 
         bus_engine_proxy_process_key_event (priv->engine,
                                             keyval,
+                                            keycode,
                                             modifiers,
                                             (GFunc) _ic_process_key_event_reply_cb,
                                             call_data);
@@ -2013,6 +2015,7 @@ bus_input_context_get_engine (BusInputContext *context)
 static gboolean
 bus_input_context_filter_keyboard_shortcuts (BusInputContext    *context,
                                              guint               keyval,
+                                             guint               keycode,
                                              guint               modifiers)
 {
     g_assert (BUS_IS_INPUT_CONTEXT (context));
@@ -2028,6 +2031,17 @@ bus_input_context_filter_keyboard_shortcuts (BusInputContext    *context,
 
     GQuark event;
 
+    if (keycode != 0) {
+        IBusKeymap *keymap = BUS_DEFAULT_KEYMAP;
+        if (keymap != NULL) {
+            guint t = ibus_keymap_lookup_keysym (keymap,
+                                                 keycode,
+                                                 modifiers);
+            if (t != IBUS_VoidSymbol)
+                keyval = t;
+        }
+    }
+
     if (trigger == 0) {
         trigger = g_quark_from_static_string ("trigger");
         next_factory = g_quark_from_static_string ("next-engine");
index 6c94afd46943c0dce3884ecb98851b491ca128df..da56fbce4cd09fb0abc2e62b6f4986bce5cd931e 100644 (file)
@@ -216,11 +216,13 @@ _key_snooper_cb (GtkWidget   *widget,
     case GDK_KEY_RELEASE:
         retval = ibus_input_context_process_key_event (ibusimcontext->ibuscontext,
                                                        event->keyval,
+                                                       event->hardware_keycode - 8,
                                                        event->state | IBUS_RELEASE_MASK);
         break;
     case GDK_KEY_PRESS:
         retval = ibus_input_context_process_key_event (ibusimcontext->ibuscontext,
                                                        event->keyval,
+                                                       event->hardware_keycode - 8,
                                                        event->state);
         break;
     default:
@@ -419,11 +421,13 @@ ibus_im_context_filter_keypress (GtkIMContext *context,
         case GDK_KEY_RELEASE:
             retval = ibus_input_context_process_key_event (ibusimcontext->ibuscontext,
                                                            event->keyval,
+                                                           event->hardware_keycode - 8,
                                                            event->state | IBUS_RELEASE_MASK);
             break;
         case GDK_KEY_PRESS:
             retval = ibus_input_context_process_key_event (ibusimcontext->ibuscontext,
                                                            event->keyval,
+                                                           event->hardware_keycode - 8,
                                                            event->state);
             break;
         default:
index f5ea892e7e7e97b098a68f9ca57b37e1a4d3f559..69308e1843da84c9dfc618bef75518732059fb54 100644 (file)
@@ -463,7 +463,9 @@ xim_forward_event (XIMS xims, IMForwardEventStruct *call_data)
     }
 
     if (ibus_input_context_process_key_event (x11ic->context,
-                event.keyval, event.state)) {
+                                              event.keyval,
+                                              event.hardware_keycode - 8,
+                                              event.state)) {
         if (! x11ic->has_preedit_area) {
             _xim_set_cursor_location (x11ic);
         }
index 614932edca7c7050fd643a17e0b0193ad088f7c2..eae476351404b6675c5a8914cf6d107d271f1543 100644 (file)
@@ -22,7 +22,7 @@
 # if not 1, append datestamp to the version number.
 m4_define([ibus_released], [0])
 m4_define([ibus_major_version], [1])
-m4_define([ibus_minor_version], [1])
+m4_define([ibus_minor_version], [2])
 m4_define([ibus_micro_version], [0])
 m4_define(ibus_maybe_datestamp,
     m4_esyscmd([if test x]ibus_released[ != x1; then date +.%Y%m%d | tr -d '\n\r'; fi]))
@@ -59,7 +59,7 @@ AC_SUBST(DATE_DISPLAY)
 # If only source code changed, lt_revision + 1
 # If any interface added, lt_age + 1
 # If any interfaces changed or removed, lt_current + 1
-m4_define([lt_current], [0])
+m4_define([lt_current], [1])
 m4_define([lt_revision], [0])
 m4_define([lt_age], [0])
 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
@@ -286,6 +286,7 @@ util/Makefile
 util/IMdkit/Makefile
 data/Makefile
 data/icons/Makefile
+data/keymaps/Makefile
 docs/Makefile
 docs/reference/Makefile
 docs/reference/ibus/Makefile
index 32854e1215add7cf3abb47da798abab93a926401..618cffafb39f5717a26f7e8842a45c510144379c 100644 (file)
@@ -21,9 +21,9 @@
 
 SUBDIRS = \
        icons \
+       keymaps \
        $(NULL)
 
-
 schemasdir = $(GCONF_SCHEMA_FILE_DIR)
 schemas_in_files = ibus.schemas.in
 schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
diff --git a/data/keymaps/Makefile.am b/data/keymaps/Makefile.am
new file mode 100644 (file)
index 0000000..fe31ed4
--- /dev/null
@@ -0,0 +1,72 @@
+# vim:set noet ts=4:
+#
+# ibus - The Input Bus
+#
+# Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
+#
+# 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 program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+# Boston, MA  02111-1307  USA
+
+# keymaps = \
+#      ar \
+#      common \
+#      da \
+#      de \
+#      de-ch \
+#      en-gb \
+#      es \
+#      et \
+#      fi \
+#      fo \
+#      fr \
+#      fr-be \
+#      fr-ca \
+#      fr-ch \
+#      hr \
+#      hu \
+#      is \
+#      it \
+#      jp \
+#      lt \
+#      lv \
+#      mk \
+#      modifiers \
+#      nl \
+#      nl-be \
+#      no \
+#      pl \
+#      pt \
+#      pt-br \
+#      ru \
+#      sl \
+#      sv \
+#      th \
+#      tr \
+#      us \
+#      $(NULL)
+
+keymaps = \
+       common \
+       modifiers \
+       jp \
+       us \
+       $(NULL)
+
+keymaps_DATA = $(keymaps)
+keymapsdir = $(pkgdatadir)/keymaps
+
+EXTRA_DIST = \
+       $(keymaps) \
+       $(NULL)
diff --git a/data/keymaps/ar b/data/keymaps/ar
new file mode 100644 (file)
index 0000000..0d006ee
--- /dev/null
@@ -0,0 +1,96 @@
+include common
+    shift keycode 2 = exclam
+    shift keycode 3 = at
+    shift keycode 4 = numbersign
+    shift keycode 5 = dollar
+    shift keycode 6 = percent
+    shift keycode 7 = asciicircum
+    shift keycode 8 = ampersand
+    shift keycode 9 = asterisk
+    shift keycode 10 = parenleft
+    shift keycode 11 = parenright
+keycode 12 = minus
+    shift keycode 12 = underscore
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 16 = Arabic_dad
+    shift altgr keycode 16 = Arabic_fatha
+    altgr keycode 17 = Arabic_sad
+    shift altgr keycode 17 = Arabic_fathatan
+    altgr keycode 18 = Arabic_theh
+    shift altgr keycode 18 = Arabic_damma
+    altgr keycode 19 = Arabic_qaf
+    shift altgr keycode 19 = Arabic_dammatan
+    altgr keycode 20 = Arabic_feh
+#    shift altgr keycode 20 = UFEF9
+    altgr keycode 21 = Arabic_ghain
+    shift altgr keycode 21 = Arabic_hamzaunderalef
+    altgr keycode 22 = Arabic_ain
+    shift altgr keycode 22 = grave
+    altgr keycode 23 = Arabic_ha
+    shift altgr keycode 23 = division
+    altgr keycode 24 = Arabic_khah
+    shift altgr keycode 24 = multiply
+    altgr keycode 25 = Arabic_hah
+    shift altgr keycode 25 = Arabic_semicolon
+keycode 26 = bracketleft
+    shift keycode 26 = braceleft
+    altgr keycode 26 = Arabic_jeem
+keycode 27 = bracketright
+    shift keycode 27 = braceright
+    altgr keycode 27 = Arabic_dal
+    altgr keycode 30 = Arabic_sheen
+    shift altgr keycode 30 = backslash
+    altgr keycode 31 = Arabic_seen
+    altgr keycode 32 = Arabic_yeh
+    shift altgr keycode 32 = bracketleft
+    altgr keycode 33 = Arabic_beh
+    shift altgr keycode 33 = bracketright
+    altgr keycode 34 = Arabic_lam
+#    shift altgr keycode 34 = UFEF7
+    altgr keycode 35 = Arabic_alef
+    shift altgr keycode 35 = Arabic_hamzaonalef
+    altgr keycode 36 = Arabic_teh
+    shift altgr keycode 36 = Arabic_tatweel
+    altgr keycode 37 = Arabic_noon
+    shift altgr keycode 37 = Arabic_comma
+    altgr keycode 38 = Arabic_meem
+    shift altgr keycode 38 = slash
+keycode 39 = semicolon
+    shift keycode 39 = colon
+    altgr keycode 39 = Arabic_kaf
+keycode 40 = apostrophe
+    shift keycode 40 = quotedbl
+    altgr keycode 40 = Arabic_tah
+keycode 41 = grave
+    shift keycode 41 = asciitilde
+    altgr keycode 41 = Arabic_thal
+    shift altgr keycode 41 = Arabic_shadda
+keycode 43 = backslash
+    shift keycode 43 = bar
+    altgr keycode 43 = less
+    shift altgr keycode 43 = greater
+    altgr keycode 44 = Arabic_hamzaonyeh
+    shift altgr keycode 44 = asciitilde
+    altgr keycode 45 = Arabic_hamza
+    shift altgr keycode 45 = Arabic_sukun
+    altgr keycode 46 = Arabic_hamzaonwaw
+    shift altgr keycode 46 = Arabic_kasra
+    altgr keycode 47 = Arabic_ra
+    shift altgr keycode 47 = Arabic_kasratan
+#    altgr keycode 48 = UFEFB
+#    shift altgr keycode 48 = UFEF5
+    altgr keycode 49 = Arabic_alefmaksura
+    shift altgr keycode 49 = Arabic_maddaonalef
+    altgr keycode 50 = Arabic_tehmarbuta
+    shift altgr keycode 50 = apostrophe
+keycode 51 = comma
+    shift keycode 51 = less
+    altgr keycode 51 = Arabic_waw
+keycode 52 = period
+    shift keycode 52 = greater
+    altgr keycode 52 = Arabic_zain
+keycode 53 = slash
+    shift keycode 53 = question
+    altgr keycode 53 = Arabic_zah
+    shift altgr keycode 53 = Arabic_question_mark
diff --git a/data/keymaps/common b/data/keymaps/common
new file mode 100644 (file)
index 0000000..132d29e
--- /dev/null
@@ -0,0 +1,152 @@
+include modifiers
+keycode 1 = Escape
+    shift keycode 1 = Escape
+keycode 2 = 1
+keycode 3 = 2
+keycode 4 = 3
+keycode 5 = 4
+keycode 6 = 5
+keycode 7 = 6
+keycode 8 = 7
+keycode 9 = 8
+keycode 10 = 9
+keycode 11 = 0
+keycode 14 = BackSpace
+keycode 15 = Tab
+    shift keycode 15 = ISO_Left_Tab
+keycode 16 = q
+    shift keycode 16 = Q
+keycode 17 = w
+    shift keycode 17 = W
+keycode 18 = e
+    shift keycode 18 = E
+keycode 19 = r
+    shift keycode 19 = R
+keycode 20 = t
+    shift keycode 20 = T
+keycode 21 = y
+    shift keycode 21 = Y
+keycode 22 = u
+    shift keycode 22 = U
+keycode 23 = i
+    shift keycode 23 = I
+keycode 24 = o
+    shift keycode 24 = O
+keycode 25 = p
+    shift keycode 25 = P
+keycode 28 = Return
+    shift keycode 28 = Return
+keycode 30 = a
+    shift keycode 30 = A
+keycode 31 = s
+    shift keycode 31 = S
+keycode 32 = d
+    shift keycode 32 = D
+keycode 33 = f
+    shift keycode 33 = F
+keycode 34 = g
+    shift keycode 34 = G
+keycode 35 = h
+    shift keycode 35 = H
+keycode 36 = j
+    shift keycode 36 = J
+keycode 37 = k
+    shift keycode 37 = K
+keycode 38 = l
+    shift keycode 38 = L
+keycode 44 = z
+    shift keycode 44 = Z
+keycode 45 = x
+    shift keycode 45 = X
+keycode 46 = c
+    shift keycode 46 = C
+keycode 47 = v
+    shift keycode 47 = V
+keycode 48 = b
+    shift keycode 48 = B
+keycode 49 = n
+    shift keycode 49 = N
+keycode 50 = m
+    shift keycode 50 = M
+keycode 55 = KP_Multiply
+keycode 57 = space
+    shift keycode 57 = space
+keycode 58 = Caps_Lock
+keycode 59 = F1
+    shift keycode 59 = F1
+keycode 60 = F2
+    shift keycode 60 = F2
+keycode 61 = F3
+    shift keycode 61 = F3
+keycode 62 = F4
+    shift keycode 62 = F4
+keycode 63 = F5
+    shift keycode 63 = F5
+keycode 64 = F6
+    shift keycode 64 = F6
+keycode 65 = F7
+    shift keycode 65 = F7
+keycode 66 = F8
+    shift keycode 66 = F8
+keycode 67 = F9
+    shift keycode 67 = F9
+keycode 68 = F10
+    shift keycode 68 = F10
+keycode 69 = Num_Lock
+keycode 70 = Scroll_Lock
+keycode 71 = KP_Home
+    numlock keycode 71 = KP_7
+keycode 72 = KP_Up
+    numlock keycode 72 = KP_8
+keycode 73 = KP_Prior
+    numlock keycode 73 = KP_9
+keycode 74 = KP_Subtract
+keycode 75 = KP_Left
+    numlock keycode 75 = KP_4
+keycode 76 = KP_Begin
+    numlock keycode 76 = KP_5
+keycode 77 = KP_Right
+    numlock keycode 77 = KP_6
+keycode 78 = KP_Add
+keycode 79 = KP_End
+    numlock keycode 79 = KP_1
+keycode 80 = KP_Down
+    numlock keycode 80 = KP_2
+keycode 81 = KP_Next
+    numlock keycode 81 = KP_3
+keycode 82 = KP_Insert
+    numlock keycode 82 = KP_0
+keycode 83 = KP_Delete
+    numlock keycode 83 = KP_Separator
+keycode 86 = less
+    shift keycode 86 = greater
+    altgr keycode 86 = bar
+    shift altgr keycode 86 = brokenbar
+keycode 87 = F11
+    shift keycode 87 = F11
+keycode 88 = F12
+    shift keycode 88 = F12
+keycode 156 = KP_Enter
+keycode 181 = KP_Divide
+keycode 183 = Execute
+    shift keycode 183 = Execute
+keycode 199 = Home
+    shift keycode 199 = Home
+keycode 200 = Up
+    shift keycode 200 = Up
+keycode 201 = Page_Up
+    shift keycode 201 = Page_Up
+keycode 203 = Left
+    shift keycode 203 = Left
+keycode 205 = Right
+    shift keycode 205 = Right
+keycode 207 = End
+    shift keycode 207 = End
+keycode 208 = Down
+    shift keycode 208 = Down
+keycode 209 = Page_Down
+    shift keycode 209 = Page_Down
+keycode 210 = Insert
+    shift keycode 210 = Insert
+keycode 211 = Delete
+    shift keycode 211 = Delete
diff --git a/data/keymaps/da b/data/keymaps/da
new file mode 100644 (file)
index 0000000..742625c
--- /dev/null
@@ -0,0 +1,118 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = exclamdown
+    shift altgr keycode 2 = onesuperior
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift altgr keycode 3 = twosuperior
+    shift keycode 4 = numbersign
+    altgr keycode 4 = sterling
+    shift altgr keycode 4 = threesuperior
+    shift keycode 5 = currency
+    altgr keycode 5 = dollar
+    shift altgr keycode 5 = onequarter
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = cent
+    shift keycode 7 = ampersand
+    altgr keycode 7 = yen
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = division
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = guillemotleft
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = guillemotright
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = plus
+    shift keycode 12 = question
+    altgr keycode 12 = plusminus
+    shift altgr keycode 12 = questiondown
+keycode 13 = dead_acute
+    shift keycode 13 = dead_grave
+    altgr keycode 13 = bar
+    shift altgr keycode 13 = brokenbar
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    shift altgr keycode 18 = cent
+    altgr keycode 19 = registered
+    altgr keycode 20 = thorn
+    shift altgr keycode 20 = THORN
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oe
+    shift altgr keycode 24 = OE
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = aring
+    shift keycode 26 = Aring
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = dead_diaeresis
+    shift keycode 27 = dead_circumflex
+    altgr keycode 27 = dead_tilde
+    shift altgr keycode 27 = dead_caron
+    altgr keycode 30 = ordfeminine
+    shift altgr keycode 30 = masculine
+    altgr keycode 31 = ssharp
+    shift altgr keycode 31 = section
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = ae
+    shift keycode 39 = AE
+keycode 40 = oslash
+    shift keycode 40 = Ooblique
+    shift altgr keycode 40 = dead_caron
+keycode 41 = onehalf
+    shift keycode 41 = section
+    altgr keycode 41 = threequarters
+    shift altgr keycode 41 = paragraph
+keycode 43 = apostrophe
+    shift keycode 43 = asterisk
+    altgr keycode 43 = dead_doubleacute
+    shift altgr keycode 43 = multiply
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = dead_cedilla
+    shift altgr keycode 51 = dead_ogonek
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = dead_abovedot
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = hyphen
+    shift altgr keycode 53 = macron
+    altgr keycode 57 = nobreakspace
+keycode 86 = less
+    shift keycode 86 = greater
+    altgr keycode 86 = backslash
+    shift altgr keycode 86 = notsign
diff --git a/data/keymaps/de b/data/keymaps/de
new file mode 100644 (file)
index 0000000..d458ec5
--- /dev/null
@@ -0,0 +1,110 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = twosuperior
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = section
+    altgr keycode 4 = threesuperior
+    shift altgr keycode 4 = sterling
+    shift keycode 5 = dollar
+    altgr keycode 5 = onequarter
+    shift altgr keycode 5 = currency
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = ampersand
+    altgr keycode 7 = threequarters
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+keycode 12 = ssharp
+    shift keycode 12 = question
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = dead_acute
+    shift keycode 13 = dead_grave
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = dead_ogonek
+    altgr keycode 16 = at
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+keycode 21 = z
+    shift keycode 21 = Z
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = udiaeresis
+    shift keycode 26 = Udiaeresis
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = plus
+    shift keycode 27 = asterisk
+    altgr keycode 27 = dead_tilde
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+keycode 39 = odiaeresis
+    shift keycode 39 = Odiaeresis
+    altgr keycode 39 = dead_doubleacute
+keycode 40 = adiaeresis
+    shift keycode 40 = Adiaeresis
+    shift altgr keycode 40 = dead_caron
+keycode 41 = dead_circumflex
+    shift keycode 41 = degree
+    altgr keycode 41 = notsign
+keycode 43 = numbersign
+    shift keycode 43 = apostrophe
+    shift altgr keycode 43 = dead_breve
+keycode 44 = y
+    shift keycode 44 = Y
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
diff --git a/data/keymaps/de-ch b/data/keymaps/de-ch
new file mode 100644 (file)
index 0000000..48f728a
--- /dev/null
@@ -0,0 +1,51 @@
+include common
+    shift keycode 2 = plus
+    altgr keycode 2 = brokenbar
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift keycode 4 = asterisk
+    altgr keycode 4 = numbersign
+    shift keycode 5 = ccedilla
+    shift keycode 6 = percent
+    shift keycode 7 = ampersand
+    altgr keycode 7 = notsign
+    shift keycode 8 = slash
+    altgr keycode 8 = bar
+    shift keycode 9 = parenleft
+    altgr keycode 9 = cent
+    shift keycode 10 = parenright
+    shift keycode 11 = equal
+keycode 12 = apostrophe
+    shift keycode 12 = question
+    altgr keycode 12 = dead_acute
+keycode 13 = dead_circumflex
+    shift keycode 13 = dead_grave
+    altgr keycode 13 = dead_tilde
+    altgr keycode 18 = EuroSign
+keycode 21 = z
+    shift keycode 21 = Z
+keycode 26 = udiaeresis
+    shift keycode 26 = egrave
+    altgr keycode 26 = bracketleft
+keycode 27 = dead_diaeresis
+    shift keycode 27 = exclam
+    altgr keycode 27 = bracketright
+keycode 39 = odiaeresis
+    shift keycode 39 = eacute
+keycode 40 = adiaeresis
+    shift keycode 40 = agrave
+    altgr keycode 40 = braceleft
+keycode 41 = section
+    shift keycode 41 = degree
+keycode 43 = dollar
+    shift keycode 43 = sterling
+    altgr keycode 43 = braceright
+keycode 44 = y
+    shift keycode 44 = Y
+keycode 51 = comma
+    shift keycode 51 = semicolon
+keycode 52 = period
+    shift keycode 52 = colon
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 86 = backslash
diff --git a/data/keymaps/en-gb b/data/keymaps/en-gb
new file mode 100644 (file)
index 0000000..fdfb73a
--- /dev/null
@@ -0,0 +1,117 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = twosuperior
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = sterling
+    altgr keycode 4 = threesuperior
+    shift keycode 5 = dollar
+    altgr keycode 5 = EuroSign
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = asciicircum
+    altgr keycode 7 = threequarters
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = ampersand
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = asterisk
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenleft
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = parenright
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = minus
+    shift keycode 12 = underscore
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = dead_ogonek
+    altgr keycode 16 = at
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = bracketleft
+    shift keycode 26 = braceleft
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = bracketright
+    shift keycode 27 = braceright
+    altgr keycode 27 = dead_tilde
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 31 = ssharp
+    shift altgr keycode 31 = section
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = semicolon
+    shift keycode 39 = colon
+    altgr keycode 39 = dead_acute
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = apostrophe
+    shift keycode 40 = at
+    altgr keycode 40 = dead_circumflex
+    shift altgr keycode 40 = dead_caron
+keycode 41 = grave
+    shift keycode 41 = notsign
+    altgr keycode 41 = bar
+keycode 43 = numbersign
+    shift keycode 43 = asciitilde
+    altgr keycode 43 = dead_grave
+    shift altgr keycode 43 = dead_breve
+    altgr keycode 44 = guillemotleft
+    shift altgr keycode 44 = less
+    altgr keycode 45 = guillemotright
+    shift altgr keycode 45 = greater
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = less
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = greater
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = slash
+    shift keycode 53 = question
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
+keycode 86 = backslash
+    shift keycode 86 = bar
diff --git a/data/keymaps/es b/data/keymaps/es
new file mode 100644 (file)
index 0000000..9287ed6
--- /dev/null
@@ -0,0 +1,103 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = bar
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = periodcentered
+    altgr keycode 4 = numbersign
+    shift altgr keycode 4 = sterling
+    shift keycode 5 = dollar
+    altgr keycode 5 = asciitilde
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = ampersand
+    altgr keycode 7 = notsign
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = parenleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = equal
+    shift altgr keycode 11 = degree
+keycode 12 = apostrophe
+    shift keycode 12 = question
+keycode 13 = exclamdown
+    shift keycode 13 = questiondown
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = dead_grave
+    shift keycode 26 = dead_circumflex
+    altgr keycode 26 = bracketleft
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = plus
+    shift keycode 27 = asterisk
+    altgr keycode 27 = bracketright
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 31 = ssharp
+    shift altgr keycode 31 = section
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = ntilde
+    shift keycode 39 = Ntilde
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = dead_acute
+    shift keycode 40 = dead_diaeresis
+    altgr keycode 40 = braceleft
+keycode 41 = masculine
+    shift keycode 41 = ordfeminine
+    altgr keycode 41 = backslash
+keycode 43 = ccedilla
+    shift keycode 43 = Ccedilla
+    altgr keycode 43 = braceright
+    shift altgr keycode 43 = dead_breve
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 50 = mu
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = colon
+    shift altgr keycode 52 = division
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
+keycode 86 = less
+    shift keycode 86 = greater
diff --git a/data/keymaps/et b/data/keymaps/et
new file mode 100644 (file)
index 0000000..2a80a76
--- /dev/null
@@ -0,0 +1,52 @@
+include common
+    shift keycode 2 = exclam
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift keycode 4 = numbersign
+    altgr keycode 4 = sterling
+    shift keycode 5 = currency
+    altgr keycode 5 = dollar
+    shift keycode 6 = percent
+    shift keycode 7 = ampersand
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+keycode 12 = plus
+    shift keycode 12 = question
+    altgr keycode 12 = backslash
+keycode 13 = dead_acute
+    shift keycode 13 = dead_grave
+    altgr keycode 18 = EuroSign
+keycode 26 = udiaeresis
+    shift keycode 26 = Udiaeresis
+keycode 27 = otilde
+    shift keycode 27 = Otilde
+    altgr keycode 27 = section
+    altgr keycode 31 = scaron
+    shift altgr keycode 31 = Scaron
+keycode 39 = odiaeresis
+    shift keycode 39 = Odiaeresis
+keycode 40 = adiaeresis
+    shift keycode 40 = Adiaeresis
+    altgr keycode 40 = asciicircum
+keycode 41 = dead_caron
+    shift keycode 41 = dead_tilde
+keycode 43 = apostrophe
+    shift keycode 43 = asterisk
+    altgr keycode 43 = onehalf
+    altgr keycode 44 = zcaron
+    shift altgr keycode 44 = Zcaron
+keycode 51 = comma
+    shift keycode 51 = semicolon
+keycode 52 = period
+    shift keycode 52 = colon
+keycode 53 = minus
+    shift keycode 53 = underscore
+keycode 86 = less
+    shift keycode 86 = greater
+    altgr keycode 86 = bar
diff --git a/data/keymaps/fi b/data/keymaps/fi
new file mode 100644 (file)
index 0000000..5efd036
--- /dev/null
@@ -0,0 +1,122 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = exclamdown
+    shift altgr keycode 2 = onesuperior
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift altgr keycode 3 = twosuperior
+    shift keycode 4 = numbersign
+    altgr keycode 4 = sterling
+    shift altgr keycode 4 = threesuperior
+    shift keycode 5 = currency
+    altgr keycode 5 = dollar
+    shift altgr keycode 5 = onequarter
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = cent
+    shift keycode 7 = ampersand
+    altgr keycode 7 = yen
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = division
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = guillemotleft
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = guillemotright
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = plus
+    shift keycode 12 = question
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = dead_acute
+    shift keycode 13 = dead_grave
+    altgr keycode 13 = plusminus
+    shift altgr keycode 13 = notsign
+    altgr keycode 16 = at
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    shift altgr keycode 18 = cent
+    altgr keycode 19 = registered
+    altgr keycode 20 = thorn
+    shift altgr keycode 20 = THORN
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oe
+    shift altgr keycode 24 = OE
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = aring
+    shift keycode 26 = Aring
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = dead_diaeresis
+    shift keycode 27 = dead_circumflex
+    altgr keycode 27 = dead_tilde
+    shift altgr keycode 27 = dead_caron
+    altgr keycode 30 = ordfeminine
+    shift altgr keycode 30 = masculine
+    altgr keycode 31 = ssharp
+    shift altgr keycode 31 = section
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    shift altgr keycode 37 = ampersand
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = odiaeresis
+    shift keycode 39 = Odiaeresis
+    altgr keycode 39 = oslash
+    shift altgr keycode 39 = Ooblique
+keycode 40 = adiaeresis
+    shift keycode 40 = Adiaeresis
+    altgr keycode 40 = ae
+    shift altgr keycode 40 = AE
+keycode 41 = section
+    shift keycode 41 = onehalf
+    altgr keycode 41 = paragraph
+    shift altgr keycode 41 = threequarters
+keycode 43 = apostrophe
+    shift keycode 43 = asterisk
+    altgr keycode 43 = acute
+    shift altgr keycode 43 = multiply
+    altgr keycode 44 = guillemotleft
+    shift altgr keycode 44 = less
+    altgr keycode 45 = guillemotright
+    shift altgr keycode 45 = greater
+    altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = rightdoublequotemark
+    shift altgr keycode 48 = apostrophe
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = dead_cedilla
+    shift altgr keycode 51 = dead_ogonek
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = dead_abovedot
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = hyphen
+    shift altgr keycode 53 = macron
+    altgr keycode 57 = nobreakspace
diff --git a/data/keymaps/fo b/data/keymaps/fo
new file mode 100644 (file)
index 0000000..bfda445
--- /dev/null
@@ -0,0 +1,46 @@
+include common
+    shift keycode 2 = exclam
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift keycode 4 = numbersign
+    altgr keycode 4 = sterling
+    shift keycode 5 = currency
+    altgr keycode 5 = dollar
+    shift keycode 6 = percent
+    shift keycode 7 = ampersand
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+keycode 12 = plus
+    shift keycode 12 = question
+    altgr keycode 12 = plusminus
+keycode 13 = dead_acute
+    altgr keycode 13 = bar
+    altgr keycode 18 = EuroSign
+keycode 26 = aring
+    shift keycode 26 = Aring
+keycode 27 = eth
+    shift keycode 27 = ETH
+    altgr keycode 27 = asciitilde
+keycode 39 = ae
+    shift keycode 39 = AE
+keycode 40 = oslash
+    shift keycode 40 = Ooblique
+keycode 41 = onehalf
+    shift keycode 41 = section
+keycode 43 = apostrophe
+    shift keycode 43 = asterisk
+keycode 51 = comma
+    shift keycode 51 = semicolon
+keycode 52 = period
+    shift keycode 52 = colon
+keycode 53 = minus
+    shift keycode 53 = underscore
+keycode 86 = less
+    shift keycode 86 = greater
+    altgr keycode 86 = backslash
diff --git a/data/keymaps/fr b/data/keymaps/fr
new file mode 100644 (file)
index 0000000..40de16f
--- /dev/null
@@ -0,0 +1,127 @@
+include common
+keycode 2 = ampersand
+    shift keycode 2 = 1
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+keycode 3 = eacute
+    shift keycode 3 = 2
+    altgr keycode 3 = asciitilde
+    shift altgr keycode 3 = oneeighth
+keycode 4 = quotedbl
+    shift keycode 4 = 3
+    altgr keycode 4 = numbersign
+keycode 5 = apostrophe
+    shift keycode 5 = 4
+    altgr keycode 5 = braceleft
+keycode 6 = parenleft
+    shift keycode 6 = 5
+    altgr keycode 6 = bracketleft
+    shift altgr keycode 6 = threeeighths
+keycode 7 = minus
+    shift keycode 7 = 6
+    altgr keycode 7 = bar
+    shift altgr keycode 7 = fiveeighths
+keycode 8 = egrave
+    shift keycode 8 = 7
+    altgr keycode 8 = grave
+    shift altgr keycode 8 = seveneighths
+keycode 9 = underscore
+    shift keycode 9 = 8
+    altgr keycode 9 = backslash
+    shift altgr keycode 9 = trademark
+keycode 10 = ccedilla
+    shift keycode 10 = 9
+    altgr keycode 10 = asciicircum
+    shift altgr keycode 10 = plusminus
+keycode 11 = agrave
+    shift keycode 11 = 0
+    altgr keycode 11 = at
+keycode 12 = parenright
+    shift keycode 12 = degree
+    altgr keycode 12 = bracketright
+    shift altgr keycode 12 = questiondown
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 13 = braceright
+    shift altgr keycode 13 = dead_ogonek
+keycode 16 = a
+    shift keycode 16 = A
+    altgr keycode 16 = ae
+    shift altgr keycode 16 = AE
+keycode 17 = z
+    shift keycode 17 = Z
+    altgr keycode 17 = guillemotleft
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = dead_circumflex
+    shift keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = dollar
+    shift keycode 27 = sterling
+    altgr keycode 27 = currency
+    shift altgr keycode 27 = dead_macron
+keycode 30 = q
+    shift keycode 30 = Q
+    shift altgr keycode 30 = Greek_OMEGA
+    altgr keycode 31 = ssharp
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = m
+    shift keycode 39 = M
+    shift altgr keycode 39 = masculine
+keycode 40 = ugrave
+    shift keycode 40 = percent
+    shift altgr keycode 40 = dead_caron
+keycode 41 = twosuperior
+    altgr keycode 41 = notsign
+keycode 43 = asterisk
+    shift keycode 43 = mu
+    altgr keycode 43 = dead_grave
+    shift altgr keycode 43 = dead_breve
+keycode 44 = w
+    shift keycode 44 = W
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    altgr keycode 48 = rightdoublequotemark
+keycode 50 = comma
+    shift keycode 50 = question
+    altgr keycode 50 = dead_acute
+    shift altgr keycode 50 = dead_doubleacute
+keycode 51 = semicolon
+    shift keycode 51 = period
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = colon
+    shift keycode 52 = slash
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = exclam
+    shift keycode 53 = section
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
+keycode 86 = less
+    shift keycode 86 = greater
diff --git a/data/keymaps/fr-be b/data/keymaps/fr-be
new file mode 100644 (file)
index 0000000..e9e40e7
--- /dev/null
@@ -0,0 +1,137 @@
+include common
+keycode 2 = ampersand
+    shift keycode 2 = 1
+    altgr keycode 2 = bar
+    shift altgr keycode 2 = exclamdown
+keycode 3 = eacute
+    shift keycode 3 = 2
+    altgr keycode 3 = at
+    shift altgr keycode 3 = oneeighth
+keycode 4 = quotedbl
+    shift keycode 4 = 3
+    altgr keycode 4 = numbersign
+    shift altgr keycode 4 = sterling
+keycode 5 = apostrophe
+    shift keycode 5 = 4
+    altgr keycode 5 = onequarter
+    shift altgr keycode 5 = dollar
+keycode 6 = parenleft
+    shift keycode 6 = 5
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+keycode 7 = section
+    shift keycode 7 = 6
+    altgr keycode 7 = asciicircum
+    shift altgr keycode 7 = fiveeighths
+keycode 8 = egrave
+    shift keycode 8 = 7
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+keycode 9 = exclam
+    shift keycode 9 = 8
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = trademark
+keycode 10 = ccedilla
+    shift keycode 10 = 9
+    altgr keycode 10 = braceleft
+    shift altgr keycode 10 = plusminus
+keycode 11 = agrave
+    shift keycode 11 = 0
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = parenright
+    shift keycode 12 = degree
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = minus
+    shift keycode 13 = underscore
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = dead_ogonek
+keycode 16 = a
+    shift keycode 16 = A
+    shift altgr keycode 16 = Greek_OMEGA
+keycode 17 = z
+    shift keycode 17 = Z
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    shift altgr keycode 18 = cent
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = dead_circumflex
+    shift keycode 26 = dead_diaeresis
+    altgr keycode 26 = bracketleft
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = dollar
+    shift keycode 27 = asterisk
+    altgr keycode 27 = bracketright
+    shift altgr keycode 27 = dead_macron
+keycode 30 = q
+    shift keycode 30 = Q
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 31 = ssharp
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = m
+    shift keycode 39 = M
+    altgr keycode 39 = dead_acute
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = ugrave
+    shift keycode 40 = percent
+    altgr keycode 40 = dead_acute
+    shift altgr keycode 40 = dead_caron
+keycode 41 = twosuperior
+    shift keycode 41 = threesuperior
+    altgr keycode 41 = notsign
+keycode 43 = mu
+    shift keycode 43 = sterling
+    altgr keycode 43 = dead_grave
+    shift altgr keycode 43 = dead_breve
+keycode 44 = w
+    shift keycode 44 = W
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = rightdoublequotemark
+keycode 50 = comma
+    shift keycode 50 = question
+    altgr keycode 50 = dead_cedilla
+    shift altgr keycode 50 = masculine
+keycode 51 = semicolon
+    shift keycode 51 = period
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = colon
+    shift keycode 52 = slash
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = equal
+    shift keycode 53 = plus
+    altgr keycode 53 = dead_tilde
+    shift altgr keycode 53 = dead_abovedot
+    altgr keycode 86 = backslash
diff --git a/data/keymaps/fr-ca b/data/keymaps/fr-ca
new file mode 100644 (file)
index 0000000..c9ff4bc
--- /dev/null
@@ -0,0 +1,46 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = plusminus
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift keycode 4 = slash
+    altgr keycode 4 = sterling
+    shift keycode 5 = dollar
+    altgr keycode 5 = cent
+    shift keycode 6 = percent
+    altgr keycode 6 = currency
+    shift keycode 7 = question
+    altgr keycode 7 = notsign
+    shift keycode 8 = ampersand
+    shift keycode 9 = asterisk
+    altgr keycode 9 = twosuperior
+    shift keycode 10 = parenleft
+    altgr keycode 10 = threesuperior
+    shift keycode 11 = parenright
+    altgr keycode 11 = onequarter
+    shift keycode 12 = underscore
+    altgr keycode 12 = onehalf
+    shift keycode 13 = plus
+    altgr keycode 13 = threequarters
+    altgr keycode 24 = section
+    altgr keycode 25 = paragraph
+keycode 26 = dead_circumflex
+    shift keycode 26 = dead_circumflex
+    altgr keycode 26 = bracketleft
+keycode 27 = dead_cedilla
+    shift keycode 27 = dead_diaeresis
+    altgr keycode 27 = bracketright
+    altgr keycode 39 = asciitilde
+keycode 40 = dead_grave
+    altgr keycode 40 = braceleft
+    shift keycode 41 = bar
+    altgr keycode 41 = backslash
+keycode 43 = less
+    shift keycode 43 = greater
+    altgr keycode 43 = braceright
+    altgr keycode 50 = mu
+keycode 53 = eacute
+    altgr keycode 53 = dead_acute
+keycode 86 = guillemotleft
+    shift keycode 86 = guillemotright
+    altgr keycode 86 = degree
diff --git a/data/keymaps/fr-ch b/data/keymaps/fr-ch
new file mode 100644 (file)
index 0000000..d458ec5
--- /dev/null
@@ -0,0 +1,110 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = twosuperior
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = section
+    altgr keycode 4 = threesuperior
+    shift altgr keycode 4 = sterling
+    shift keycode 5 = dollar
+    altgr keycode 5 = onequarter
+    shift altgr keycode 5 = currency
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = ampersand
+    altgr keycode 7 = threequarters
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+keycode 12 = ssharp
+    shift keycode 12 = question
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = dead_acute
+    shift keycode 13 = dead_grave
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = dead_ogonek
+    altgr keycode 16 = at
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+keycode 21 = z
+    shift keycode 21 = Z
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = udiaeresis
+    shift keycode 26 = Udiaeresis
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = plus
+    shift keycode 27 = asterisk
+    altgr keycode 27 = dead_tilde
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+keycode 39 = odiaeresis
+    shift keycode 39 = Odiaeresis
+    altgr keycode 39 = dead_doubleacute
+keycode 40 = adiaeresis
+    shift keycode 40 = Adiaeresis
+    shift altgr keycode 40 = dead_caron
+keycode 41 = dead_circumflex
+    shift keycode 41 = degree
+    altgr keycode 41 = notsign
+keycode 43 = numbersign
+    shift keycode 43 = apostrophe
+    shift altgr keycode 43 = dead_breve
+keycode 44 = y
+    shift keycode 44 = Y
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
diff --git a/data/keymaps/hr b/data/keymaps/hr
new file mode 100644 (file)
index 0000000..9423a91
--- /dev/null
@@ -0,0 +1,125 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = asciitilde
+    shift altgr keycode 2 = dead_tilde
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = dead_caron
+    shift altgr keycode 3 = caron
+    shift keycode 4 = numbersign
+    altgr keycode 4 = asciicircum
+    shift altgr keycode 4 = dead_circumflex
+    shift keycode 5 = dollar
+    altgr keycode 5 = dead_breve
+    shift altgr keycode 5 = breve
+    shift keycode 6 = percent
+    altgr keycode 6 = degree
+    shift altgr keycode 6 = dead_abovering
+    shift keycode 7 = ampersand
+    altgr keycode 7 = dead_ogonek
+    shift altgr keycode 7 = ogonek
+    shift keycode 8 = slash
+    altgr keycode 8 = grave
+    shift altgr keycode 8 = dead_grave
+    shift keycode 9 = parenleft
+    altgr keycode 9 = dead_abovedot
+    shift altgr keycode 9 = abovedot
+    shift keycode 10 = parenright
+    altgr keycode 10 = dead_acute
+    shift altgr keycode 10 = apostrophe
+    shift keycode 11 = equal
+    altgr keycode 11 = dead_doubleacute
+    shift altgr keycode 11 = doubleacute
+keycode 12 = apostrophe
+    shift keycode 12 = question
+    altgr keycode 12 = dead_diaeresis
+    shift altgr keycode 12 = diaeresis
+keycode 13 = plus
+    shift keycode 13 = asterisk
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = cedilla
+    altgr keycode 16 = backslash
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = bar
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+keycode 21 = z
+    shift keycode 21 = Z
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = scaron
+    shift keycode 26 = Scaron
+    altgr keycode 26 = division
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = dstroke
+    shift keycode 27 = Dstroke
+    altgr keycode 27 = multiply
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 31 = ssharp
+    shift altgr keycode 31 = section
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = bracketleft
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = bracketright
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = lstroke
+    shift altgr keycode 37 = ampersand
+    altgr keycode 38 = Lstroke
+keycode 39 = ccaron
+    shift keycode 39 = Ccaron
+    altgr keycode 39 = dead_acute
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = cacute
+    shift keycode 40 = Cacute
+    altgr keycode 40 = ssharp
+    shift altgr keycode 40 = dead_caron
+keycode 41 = dead_cedilla
+    shift keycode 41 = dead_diaeresis
+    altgr keycode 41 = notsign
+keycode 43 = zcaron
+    shift keycode 43 = Zcaron
+    altgr keycode 43 = currency
+    shift altgr keycode 43 = dead_breve
+keycode 44 = y
+    shift keycode 44 = Y
+    altgr keycode 44 = guillemotleft
+    shift altgr keycode 44 = less
+    altgr keycode 45 = guillemotright
+    shift altgr keycode 45 = greater
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = at
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = braceleft
+    shift altgr keycode 48 = apostrophe
+    altgr keycode 49 = braceright
+    altgr keycode 50 = section
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
diff --git a/data/keymaps/hu b/data/keymaps/hu
new file mode 100644 (file)
index 0000000..42b58a3
--- /dev/null
@@ -0,0 +1,88 @@
+include common
+    shift keycode 2 = apostrophe
+    altgr keycode 2 = asciitilde
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = caron
+    shift keycode 4 = plus
+    altgr keycode 4 = asciicircum
+    shift keycode 5 = exclam
+    altgr keycode 5 = breve
+    shift keycode 6 = percent
+    altgr keycode 6 = degree
+    shift keycode 7 = slash
+    altgr keycode 7 = ogonek
+    shift keycode 8 = equal
+    altgr keycode 8 = grave
+    shift keycode 9 = parenleft
+    altgr keycode 9 = abovedot
+    shift keycode 10 = parenright
+    altgr keycode 10 = acute
+keycode 11 = odiaeresis
+    shift keycode 11 = Odiaeresis
+    altgr keycode 11 = doubleacute
+keycode 12 = udiaeresis
+    shift keycode 12 = Udiaeresis
+    altgr keycode 12 = diaeresis
+keycode 13 = oacute
+    shift keycode 13 = Oacute
+    altgr keycode 13 = cedilla
+    altgr keycode 16 = backslash
+    altgr keycode 17 = bar
+    altgr keycode 18 = EuroSign
+keycode 21 = z
+    shift keycode 21 = Z
+    altgr keycode 23 = Iacute
+keycode 26 = odoubleacute
+    shift keycode 26 = Odoubleacute
+    altgr keycode 26 = division
+keycode 27 = uacute
+    shift keycode 27 = Uacute
+    altgr keycode 27 = multiply
+    altgr keycode 31 = dstroke
+    altgr keycode 32 = Dstroke
+    altgr keycode 33 = bracketleft
+    altgr keycode 34 = bracketright
+    altgr keycode 36 = iacute
+    altgr keycode 37 = lstroke
+    altgr keycode 38 = Lstroke
+keycode 39 = eacute
+    shift keycode 39 = Eacute
+    altgr keycode 39 = dollar
+keycode 40 = aacute
+    shift keycode 40 = Aacute
+    altgr keycode 40 = ssharp
+keycode 41 = 0
+    shift keycode 41 = section
+    altgr keycode 41 = notsign
+keycode 43 = udoubleacute
+    shift keycode 43 = Udoubleacute
+    altgr keycode 43 = currency
+keycode 44 = y
+    shift keycode 44 = Y
+    altgr keycode 44 = greater
+    altgr keycode 45 = numbersign
+    altgr keycode 46 = ampersand
+    altgr keycode 47 = at
+    altgr keycode 48 = braceleft
+    altgr keycode 49 = braceright
+keycode 51 = comma
+    shift keycode 51 = question
+    altgr keycode 51 = semicolon
+keycode 52 = period
+    shift keycode 52 = colon
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = asterisk
+    shift keycode 59 = F13
+    shift keycode 60 = F14
+    shift keycode 61 = F15
+    shift keycode 62 = F16
+    shift keycode 63 = F17
+    shift keycode 64 = F18
+    shift keycode 65 = F19
+    shift keycode 66 = F20
+    shift keycode 67 = F21
+    shift keycode 68 = F22
+    altgr keycode 86 = less
+    shift keycode 87 = F23
+    shift keycode 88 = F24
diff --git a/data/keymaps/is b/data/keymaps/is
new file mode 100644 (file)
index 0000000..2f10e83
--- /dev/null
@@ -0,0 +1,92 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = twosuperior
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = numbersign
+    altgr keycode 4 = threesuperior
+    shift altgr keycode 4 = sterling
+    shift keycode 5 = dollar
+    altgr keycode 5 = onequarter
+    shift altgr keycode 5 = currency
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = ampersand
+    altgr keycode 7 = threequarters
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+keycode 12 = odiaeresis
+    shift keycode 12 = Odiaeresis
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = minus
+    shift keycode 13 = underscore
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = dead_ogonek
+    altgr keycode 16 = at
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+keycode 26 = eth
+    shift keycode 26 = ETH
+keycode 27 = apostrophe
+    shift keycode 27 = question
+    altgr keycode 27 = asciitilde
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+keycode 39 = ae
+    shift keycode 39 = AE
+    altgr keycode 39 = dead_doubleacute
+keycode 40 = dead_acute
+keycode 43 = plus
+    shift keycode 43 = asterisk
+    altgr keycode 43 = grave
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = thorn
+    shift keycode 53 = THORN
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
diff --git a/data/keymaps/it b/data/keymaps/it
new file mode 100644 (file)
index 0000000..7195ba5
--- /dev/null
@@ -0,0 +1,113 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = twosuperior
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = sterling
+    altgr keycode 4 = threesuperior
+    shift keycode 5 = dollar
+    altgr keycode 5 = onequarter
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = ampersand
+    altgr keycode 7 = threequarters
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = parenleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = apostrophe
+    shift keycode 12 = question
+    altgr keycode 12 = grave
+    shift altgr keycode 12 = questiondown
+keycode 13 = igrave
+    shift keycode 13 = asciicircum
+    altgr keycode 13 = asciitilde
+    shift altgr keycode 13 = dead_ogonek
+    altgr keycode 16 = at
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    shift altgr keycode 18 = cent
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = egrave
+    shift keycode 26 = eacute
+    altgr keycode 26 = bracketleft
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = plus
+    shift keycode 27 = asterisk
+    altgr keycode 27 = bracketright
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 31 = ssharp
+    shift altgr keycode 31 = section
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = ograve
+    shift keycode 39 = ccedilla
+    altgr keycode 39 = at
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = agrave
+    shift keycode 40 = degree
+    altgr keycode 40 = numbersign
+keycode 41 = backslash
+    shift keycode 41 = bar
+    altgr keycode 41 = notsign
+keycode 43 = ugrave
+    shift keycode 43 = section
+    altgr keycode 43 = dead_grave
+    shift altgr keycode 43 = dead_breve
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
diff --git a/data/keymaps/jp b/data/keymaps/jp
new file mode 100644 (file)
index 0000000..e9b9412
--- /dev/null
@@ -0,0 +1,102 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = kana_NU
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = kana_FU
+    shift keycode 4 = numbersign
+    altgr keycode 4 = kana_A
+    shift altgr keycode 4 = kana_a
+    shift keycode 5 = dollar
+    altgr keycode 5 = kana_U
+    shift altgr keycode 5 = kana_u
+    shift keycode 6 = percent
+    altgr keycode 6 = kana_E
+    shift altgr keycode 6 = kana_e
+    shift keycode 7 = ampersand
+    altgr keycode 7 = kana_O
+    shift altgr keycode 7 = kana_o
+    shift keycode 8 = apostrophe
+    altgr keycode 8 = kana_YA
+    shift altgr keycode 8 = kana_ya
+    shift keycode 9 = parenleft
+    altgr keycode 9 = kana_YU
+    shift altgr keycode 9 = kana_yu
+    shift keycode 10 = parenright
+    altgr keycode 10 = kana_YO
+    shift altgr keycode 10 = kana_yo
+    shift keycode 11 = asciitilde
+    altgr keycode 11 = kana_WA
+    shift altgr keycode 11 = kana_WO
+keycode 12 = minus
+    shift keycode 12 = equal
+    altgr keycode 12 = kana_HO
+keycode 13 = asciicircum
+    shift keycode 13 = asciitilde
+    altgr keycode 13 = kana_HE
+    altgr keycode 16 = kana_TA
+    altgr keycode 17 = kana_TE
+    altgr keycode 18 = kana_I
+    shift altgr keycode 18 = kana_i
+    altgr keycode 19 = kana_SU
+    altgr keycode 20 = kana_KA
+    altgr keycode 21 = kana_N
+    altgr keycode 22 = kana_NA
+    altgr keycode 23 = kana_NI
+    altgr keycode 24 = kana_RA
+    altgr keycode 25 = kana_SE
+keycode 26 = at
+    shift keycode 26 = grave
+    altgr keycode 26 = voicedsound
+keycode 27 = bracketleft
+    shift keycode 27 = braceleft
+    altgr keycode 27 = semivoicedsound
+    shift altgr keycode 27 = kana_openingbracket
+    altgr keycode 30 = kana_CHI
+    altgr keycode 31 = kana_TO
+    altgr keycode 32 = kana_SHI
+    altgr keycode 33 = kana_HA
+    altgr keycode 34 = kana_KI
+    altgr keycode 35 = kana_KU
+    altgr keycode 36 = kana_MA
+    altgr keycode 37 = kana_NO
+    altgr keycode 38 = kana_RI
+keycode 39 = semicolon
+    shift keycode 39 = plus
+    altgr keycode 39 = kana_RE
+keycode 40 = colon
+    shift keycode 40 = asterisk
+    altgr keycode 40 = kana_KE
+keycode 41 = Zenkaku_Hankaku
+keycode 43 = bracketright
+    shift keycode 43 = braceright
+    altgr keycode 43 = kana_MU
+    shift altgr keycode 43 = kana_closingbracket
+    altgr keycode 44 = kana_TSU
+    shift altgr keycode 44 = kana_tsu
+    altgr keycode 45 = kana_SA
+    altgr keycode 46 = kana_SO
+    altgr keycode 47 = kana_HI
+    altgr keycode 48 = kana_KO
+    altgr keycode 49 = kana_MI
+    altgr keycode 50 = kana_MO
+keycode 51 = comma
+    shift keycode 51 = less
+    altgr keycode 51 = kana_NE
+    shift altgr keycode 51 = kana_comma
+keycode 52 = period
+    shift keycode 52 = greater
+    altgr keycode 52 = kana_RU
+    shift altgr keycode 52 = kana_fullstop
+keycode 53 = slash
+    shift keycode 53 = question
+    altgr keycode 53 = kana_ME
+    shift altgr keycode 53 = kana_conjunctive
+    shift keycode 58 = Eisu_toggle
+    shift keycode 84 = Execute
+keycode 112 = Katakana
+keycode 115 = backslash
+    shift keycode 115 = underscore
+keycode 121 = Henkan_Mode
+keycode 123 = Muhenkan
+keycode 125 = yen
+    shift keycode 125 = bar
diff --git a/data/keymaps/lt b/data/keymaps/lt
new file mode 100644 (file)
index 0000000..02b6f0b
--- /dev/null
@@ -0,0 +1,55 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = aogonek
+    shift altgr keycode 2 = Aogonek
+    shift keycode 3 = at
+    altgr keycode 3 = ccaron
+    shift altgr keycode 3 = Ccaron
+    shift keycode 4 = numbersign
+    altgr keycode 4 = eogonek
+    shift altgr keycode 4 = Eogonek
+    shift keycode 5 = dollar
+    altgr keycode 5 = eabovedot
+    shift altgr keycode 5 = Eabovedot
+    shift keycode 6 = percent
+    altgr keycode 6 = iogonek
+    shift altgr keycode 6 = Iogonek
+    shift keycode 7 = asciicircum
+    altgr keycode 7 = scaron
+    shift altgr keycode 7 = Scaron
+    shift keycode 8 = ampersand
+    altgr keycode 8 = uogonek
+    shift altgr keycode 8 = Uogonek
+    shift keycode 9 = asterisk
+    altgr keycode 9 = umacron
+    shift altgr keycode 9 = Umacron
+    shift keycode 10 = parenleft
+    altgr keycode 10 = doublelowquotemark
+    shift keycode 11 = parenright
+    altgr keycode 11 = leftdoublequotemark
+keycode 12 = minus
+    shift keycode 12 = underscore
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 13 = zcaron
+    shift altgr keycode 13 = Zcaron
+keycode 26 = bracketleft
+    shift keycode 26 = braceleft
+keycode 27 = bracketright
+    shift keycode 27 = braceright
+keycode 39 = semicolon
+    shift keycode 39 = colon
+keycode 40 = apostrophe
+    shift keycode 40 = quotedbl
+keycode 41 = grave
+    shift keycode 41 = asciitilde
+keycode 43 = backslash
+    shift keycode 43 = bar
+keycode 51 = comma
+    shift keycode 51 = less
+keycode 52 = period
+    shift keycode 52 = greater
+keycode 53 = slash
+    shift keycode 53 = question
+keycode 86 = endash
+    shift keycode 86 = EuroSign
diff --git a/data/keymaps/lv b/data/keymaps/lv
new file mode 100644 (file)
index 0000000..0ad3eeb
--- /dev/null
@@ -0,0 +1,126 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = at
+    altgr keycode 3 = twosuperior
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = numbersign
+    altgr keycode 4 = threesuperior
+    shift altgr keycode 4 = sterling
+    shift keycode 5 = dollar
+    altgr keycode 5 = EuroSign
+    shift altgr keycode 5 = cent
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = asciicircum
+    altgr keycode 7 = threequarters
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = ampersand
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = asterisk
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenleft
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = parenright
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = minus
+    shift keycode 12 = underscore
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = dead_ogonek
+    altgr keycode 16 = at
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = emacron
+    shift altgr keycode 18 = Emacron
+    altgr keycode 19 = rcedilla
+    shift altgr keycode 19 = Rcedilla
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = umacron
+    shift altgr keycode 22 = Umacron
+    altgr keycode 23 = imacron
+    shift altgr keycode 23 = Imacron
+    altgr keycode 24 = omacron
+    shift altgr keycode 24 = Omacron
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = bracketleft
+    shift keycode 26 = braceleft
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = bracketright
+    shift keycode 27 = braceright
+    altgr keycode 27 = dead_tilde
+    shift altgr keycode 27 = dead_macron
+    shift keycode 28 = ISO_Next_Group
+    altgr keycode 30 = amacron
+    shift altgr keycode 30 = Amacron
+    altgr keycode 31 = scaron
+    shift altgr keycode 31 = Scaron
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = gcedilla
+    shift altgr keycode 34 = Gcedilla
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kcedilla
+    shift altgr keycode 37 = Kcedilla
+    altgr keycode 38 = lcedilla
+    shift altgr keycode 38 = Lcedilla
+keycode 39 = semicolon
+    shift keycode 39 = colon
+    altgr keycode 39 = dead_acute
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = apostrophe
+    shift keycode 40 = quotedbl
+    altgr keycode 40 = leftdoublequotemark
+    shift altgr keycode 40 = doublelowquotemark
+keycode 41 = grave
+    shift keycode 41 = asciitilde
+    altgr keycode 41 = notsign
+keycode 43 = backslash
+    shift keycode 43 = bar
+    altgr keycode 43 = dead_grave
+    shift altgr keycode 43 = dead_breve
+    altgr keycode 44 = zcaron
+    shift altgr keycode 44 = Zcaron
+    altgr keycode 45 = guillemotright
+    shift altgr keycode 45 = greater
+    altgr keycode 46 = ccaron
+    shift altgr keycode 46 = Ccaron
+    altgr keycode 47 = leftdoublequotemark
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = rightdoublequotemark
+    shift altgr keycode 48 = apostrophe
+    altgr keycode 49 = ncedilla
+    shift altgr keycode 49 = Ncedilla
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = less
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = greater
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = slash
+    shift keycode 53 = question
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
+    altgr keycode 57 = nobreakspace
diff --git a/data/keymaps/mk b/data/keymaps/mk
new file mode 100644 (file)
index 0000000..8b5e07b
--- /dev/null
@@ -0,0 +1,99 @@
+include common
+    shift keycode 2 = exclam
+    shift keycode 3 = at
+    shift altgr keycode 3 = doublelowquotemark
+    shift keycode 4 = numbersign
+    shift altgr keycode 4 = leftdoublequotemark
+    shift keycode 5 = dollar
+    shift keycode 6 = percent
+    shift keycode 7 = asciicircum
+    shift keycode 8 = ampersand
+    shift keycode 9 = asterisk
+    shift keycode 10 = parenleft
+    shift keycode 11 = parenright
+keycode 12 = minus
+    shift keycode 12 = underscore
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 16 = Cyrillic_lje
+    shift altgr keycode 16 = Cyrillic_LJE
+    altgr keycode 17 = Cyrillic_nje
+    shift altgr keycode 17 = Cyrillic_NJE
+    altgr keycode 18 = Cyrillic_ie
+    shift altgr keycode 18 = Cyrillic_IE
+    altgr keycode 19 = Cyrillic_er
+    shift altgr keycode 19 = Cyrillic_ER
+    altgr keycode 20 = Cyrillic_te
+    shift altgr keycode 20 = Cyrillic_TE
+    altgr keycode 21 = Macedonia_dse
+    shift altgr keycode 21 = Macedonia_DSE
+    altgr keycode 22 = Cyrillic_u
+    shift altgr keycode 22 = Cyrillic_U
+    altgr keycode 23 = Cyrillic_i
+    shift altgr keycode 23 = Cyrillic_I
+    altgr keycode 24 = Cyrillic_o
+    shift altgr keycode 24 = Cyrillic_O
+    altgr keycode 25 = Cyrillic_pe
+    shift altgr keycode 25 = Cyrillic_PE
+keycode 26 = bracketleft
+    shift keycode 26 = braceleft
+    altgr keycode 26 = Cyrillic_sha
+    shift altgr keycode 26 = Cyrillic_SHA
+keycode 27 = bracketright
+    shift keycode 27 = braceright
+    altgr keycode 27 = Macedonia_gje
+    shift altgr keycode 27 = Macedonia_GJE
+    altgr keycode 30 = Cyrillic_a
+    shift altgr keycode 30 = Cyrillic_A
+    altgr keycode 31 = Cyrillic_es
+    shift altgr keycode 31 = Cyrillic_ES
+    altgr keycode 32 = Cyrillic_de
+    shift altgr keycode 32 = Cyrillic_DE
+    altgr keycode 33 = Cyrillic_ef
+    shift altgr keycode 33 = Cyrillic_EF
+    altgr keycode 34 = Cyrillic_ghe
+    shift altgr keycode 34 = Cyrillic_GHE
+    altgr keycode 35 = Cyrillic_ha
+    shift altgr keycode 35 = Cyrillic_HA
+    altgr keycode 36 = Cyrillic_je
+    shift altgr keycode 36 = Cyrillic_JE
+    altgr keycode 37 = Cyrillic_ka
+    shift altgr keycode 37 = Cyrillic_KA
+    altgr keycode 38 = Cyrillic_el
+    shift altgr keycode 38 = Cyrillic_EL
+keycode 39 = semicolon
+    shift keycode 39 = colon
+    altgr keycode 39 = Cyrillic_che
+    shift altgr keycode 39 = Cyrillic_CHE
+keycode 40 = apostrophe
+    shift keycode 40 = quotedbl
+    altgr keycode 40 = Macedonia_kje
+    shift altgr keycode 40 = Macedonia_KJE
+keycode 41 = grave
+    shift keycode 41 = asciitilde
+keycode 43 = backslash
+    shift keycode 43 = bar
+    altgr keycode 43 = Cyrillic_zhe
+    shift altgr keycode 43 = Cyrillic_ZHE
+    altgr keycode 44 = Cyrillic_ze
+    shift altgr keycode 44 = Cyrillic_ZE
+    altgr keycode 45 = Cyrillic_dzhe
+    shift altgr keycode 45 = Cyrillic_DZHE
+    altgr keycode 46 = Cyrillic_tse
+    shift altgr keycode 46 = Cyrillic_TSE
+    altgr keycode 47 = Cyrillic_ve
+    shift altgr keycode 47 = Cyrillic_VE
+    altgr keycode 48 = Cyrillic_be
+    shift altgr keycode 48 = Cyrillic_BE
+    altgr keycode 49 = Cyrillic_en
+    shift altgr keycode 49 = Cyrillic_EN
+    altgr keycode 50 = Cyrillic_em
+    shift altgr keycode 50 = Cyrillic_EM
+keycode 51 = comma
+    shift keycode 51 = less
+    shift altgr keycode 51 = semicolon
+keycode 52 = period
+    shift keycode 52 = greater
+    shift altgr keycode 52 = colon
+keycode 53 = slash
+    shift keycode 53 = question
diff --git a/data/keymaps/modifiers b/data/keymaps/modifiers
new file mode 100644 (file)
index 0000000..531ac8b
--- /dev/null
@@ -0,0 +1,9 @@
+keycode 29 = Control_L
+keycode 42 = Shift_L
+keycode 54 = Shift_R
+keycode 56 = Alt_L
+keycode 157 = Control_R
+keycode 184 = ISO_Level3_Shift
+keycode 219 = Super_L
+keycode 220 = Super_R
+keycode 221 = Menu
diff --git a/data/keymaps/nl b/data/keymaps/nl
new file mode 100644 (file)
index 0000000..21aef87
--- /dev/null
@@ -0,0 +1,56 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+#    shift keycode 3 = quotebl
+    altgr keycode 3 = twosuperior
+    shift keycode 4 = numbersign
+    altgr keycode 4 = threesuperior
+    shift keycode 5 = dollar
+    altgr keycode 5 = onequarter
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift keycode 7 = ampersand
+    altgr keycode 7 = threequarters
+    shift keycode 8 = underscore
+    altgr keycode 8 = sterling
+    shift keycode 9 = parenleft
+    altgr keycode 9 = braceleft
+    shift keycode 10 = parenright
+    altgr keycode 10 = braceright
+    shift keycode 11 = apostrophe
+keycode 12 = slash
+    shift keycode 12 = question
+    altgr keycode 12 = backslash
+keycode 13 = degree
+    shift keycode 13 = dead_tilde
+    altgr keycode 13 = dead_cedilla
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = paragraph
+keycode 26 = dead_diaeresis
+    shift keycode 26 = dead_circumflex
+keycode 27 = asterisk
+    shift keycode 27 = bar
+    altgr keycode 31 = ssharp
+keycode 39 = plus
+    shift keycode 39 = plusminus
+keycode 40 = dead_acute
+    shift keycode 40 = dead_grave
+keycode 41 = at
+    shift keycode 41 = section
+    altgr keycode 41 = notsign
+keycode 43 = less
+    shift keycode 43 = greater
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = copyright
+    altgr keycode 50 = mu
+keycode 51 = comma
+    shift keycode 51 = semicolon
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+keycode 53 = hyphen
+    shift keycode 53 = equal
+keycode 86 = bracketright
+    shift keycode 86 = bracketleft
+    altgr keycode 86 = brokenbar
diff --git a/data/keymaps/nl-be b/data/keymaps/nl-be
new file mode 100644 (file)
index 0000000..6f1966f
--- /dev/null
@@ -0,0 +1 @@
+include common
diff --git a/data/keymaps/no b/data/keymaps/no
new file mode 100644 (file)
index 0000000..0b94ac8
--- /dev/null
@@ -0,0 +1,115 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = exclamdown
+    shift altgr keycode 2 = onesuperior
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift altgr keycode 3 = twosuperior
+    shift keycode 4 = numbersign
+    altgr keycode 4 = sterling
+    shift altgr keycode 4 = threesuperior
+    shift keycode 5 = currency
+    altgr keycode 5 = dollar
+    shift altgr keycode 5 = onequarter
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = cent
+    shift keycode 7 = ampersand
+    altgr keycode 7 = yen
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = division
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = guillemotleft
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = guillemotright
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = plus
+    shift keycode 12 = question
+    altgr keycode 12 = plusminus
+    shift altgr keycode 12 = questiondown
+keycode 13 = backslash
+    shift keycode 13 = dead_grave
+    altgr keycode 13 = dead_acute
+    shift altgr keycode 13 = notsign
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    shift altgr keycode 18 = cent
+    altgr keycode 19 = registered
+    altgr keycode 20 = thorn
+    shift altgr keycode 20 = THORN
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oe
+    shift altgr keycode 24 = OE
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = aring
+    shift keycode 26 = Aring
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = dead_diaeresis
+    shift keycode 27 = asciicircum
+    altgr keycode 27 = asciitilde
+    shift altgr keycode 27 = dead_caron
+    altgr keycode 30 = ordfeminine
+    shift altgr keycode 30 = masculine
+    altgr keycode 31 = ssharp
+    shift altgr keycode 31 = section
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = oslash
+    shift keycode 39 = Ooblique
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = ae
+    shift keycode 40 = AE
+    shift altgr keycode 40 = dead_caron
+keycode 41 = bar
+    shift keycode 41 = section
+    altgr keycode 41 = brokenbar
+    shift altgr keycode 41 = paragraph
+keycode 43 = apostrophe
+    shift keycode 43 = asterisk
+    shift altgr keycode 43 = multiply
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = dead_cedilla
+    shift altgr keycode 51 = dead_ogonek
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = dead_abovedot
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = hyphen
+    shift altgr keycode 53 = macron
+    altgr keycode 57 = nobreakspace
+    altgr keycode 86 = onehalf
+    shift altgr keycode 86 = threequarters
diff --git a/data/keymaps/pl b/data/keymaps/pl
new file mode 100644 (file)
index 0000000..6de836e
--- /dev/null
@@ -0,0 +1,120 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = at
+    altgr keycode 3 = twosuperior
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = numbersign
+    altgr keycode 4 = threesuperior
+    shift altgr keycode 4 = sterling
+    shift keycode 5 = dollar
+    altgr keycode 5 = onequarter
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = asciicircum
+    altgr keycode 7 = threequarters
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = ampersand
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = asterisk
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenleft
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = parenright
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = minus
+    shift keycode 12 = underscore
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = dead_ogonek
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = eogonek
+    shift altgr keycode 18 = Eogonek
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = EuroSign
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oacute
+    shift altgr keycode 24 = Oacute
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = bracketleft
+    shift keycode 26 = braceleft
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = bracketright
+    shift keycode 27 = braceright
+    altgr keycode 27 = dead_tilde
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = aogonek
+    shift altgr keycode 30 = Aogonek
+    altgr keycode 31 = sacute
+    shift altgr keycode 31 = Sacute
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = semicolon
+    shift keycode 39 = colon
+    altgr keycode 39 = dead_acute
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = apostrophe
+    shift keycode 40 = quotedbl
+    altgr keycode 40 = dead_circumflex
+    shift altgr keycode 40 = dead_caron
+keycode 41 = grave
+    shift keycode 41 = asciitilde
+    altgr keycode 41 = notsign
+keycode 43 = backslash
+    shift keycode 43 = bar
+    altgr keycode 43 = dead_grave
+    shift altgr keycode 43 = dead_breve
+    altgr keycode 44 = zabovedot
+    shift altgr keycode 44 = Zabovedot
+    altgr keycode 45 = zacute
+    shift altgr keycode 45 = Zacute
+    altgr keycode 46 = cacute
+    shift altgr keycode 46 = Cacute
+    altgr keycode 47 = leftdoublequotemark
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 49 = nacute
+    shift altgr keycode 49 = Nacute
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = less
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = greater
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = slash
+    shift keycode 53 = question
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
diff --git a/data/keymaps/pt b/data/keymaps/pt
new file mode 100644 (file)
index 0000000..4cb83a4
--- /dev/null
@@ -0,0 +1,111 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = numbersign
+    altgr keycode 4 = sterling
+    shift keycode 5 = dollar
+    altgr keycode 5 = section
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = ampersand
+    altgr keycode 7 = threequarters
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = apostrophe
+    shift keycode 12 = question
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = guillemotleft
+    shift keycode 13 = guillemotright
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = dead_ogonek
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    shift altgr keycode 18 = cent
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = plus
+    shift keycode 26 = asterisk
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = dead_acute
+    shift keycode 27 = dead_grave
+    altgr keycode 27 = dead_tilde
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 31 = ssharp
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = ccedilla
+    shift keycode 39 = Ccedilla
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = masculine
+    shift keycode 40 = ordfeminine
+    altgr keycode 40 = dead_circumflex
+    shift altgr keycode 40 = dead_caron
+keycode 41 = backslash
+    shift keycode 41 = bar
+    altgr keycode 41 = notsign
+keycode 43 = dead_tilde
+    shift keycode 43 = dead_circumflex
+    shift altgr keycode 43 = dead_breve
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = rightdoublequotemark
+    altgr keycode 50 = mu
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = horizconnector
+    shift altgr keycode 51 = multiply
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+    shift altgr keycode 52 = division
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
+keycode 86 = less
+    shift keycode 86 = greater
diff --git a/data/keymaps/pt-br b/data/keymaps/pt-br
new file mode 100644 (file)
index 0000000..e419e0f
--- /dev/null
@@ -0,0 +1,66 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = at
+    altgr keycode 3 = twosuperior
+    shift altgr keycode 3 = onehalf
+    shift keycode 4 = numbersign
+    altgr keycode 4 = threesuperior
+    shift altgr keycode 4 = threequarters
+    shift keycode 5 = dollar
+    altgr keycode 5 = sterling
+    shift altgr keycode 5 = onequarter
+    shift keycode 6 = percent
+    altgr keycode 6 = cent
+    shift keycode 7 = dead_diaeresis
+    altgr keycode 7 = notsign
+    shift altgr keycode 7 = diaeresis
+    shift keycode 8 = ampersand
+    altgr keycode 8 = braceleft
+    shift keycode 9 = asterisk
+    altgr keycode 9 = bracketleft
+    shift keycode 10 = parenleft
+    altgr keycode 10 = bracketright
+    shift keycode 11 = parenright
+    altgr keycode 11 = braceright
+keycode 12 = minus
+    shift keycode 12 = underscore
+    altgr keycode 12 = backslash
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 13 = section
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = registered
+keycode 26 = dead_acute
+    shift keycode 26 = dead_grave
+    altgr keycode 26 = acute
+    shift altgr keycode 26 = grave
+keycode 27 = bracketleft
+    shift keycode 27 = braceleft
+    altgr keycode 27 = ordfeminine
+keycode 39 = ccedilla
+    shift keycode 39 = Ccedilla
+keycode 40 = dead_tilde
+    shift keycode 40 = dead_circumflex
+    altgr keycode 40 = asciitilde
+    shift altgr keycode 40 = asciicircum
+keycode 41 = apostrophe
+    shift keycode 41 = quotedbl
+keycode 43 = bracketright
+    shift keycode 43 = braceright
+    altgr keycode 43 = masculine
+    altgr keycode 46 = copyright
+    altgr keycode 50 = mu
+keycode 51 = comma
+    shift keycode 51 = less
+keycode 52 = KP_Decimal
+    shift keycode 52 = greater
+keycode 53 = semicolon
+    shift keycode 53 = colon
+    numlock keycode 83 = comma
+keycode 86 = backslash
+    shift keycode 86 = bar
+keycode 115 = slash
+    shift keycode 115 = question
+    altgr keycode 115 = degree
diff --git a/data/keymaps/ru b/data/keymaps/ru
new file mode 100644 (file)
index 0000000..b221812
--- /dev/null
@@ -0,0 +1,107 @@
+include common
+    shift keycode 2 = exclam
+    shift keycode 3 = at
+    shift altgr keycode 3 = quotedbl
+    shift keycode 4 = numbersign
+    shift keycode 5 = dollar
+    shift altgr keycode 5 = asterisk
+    shift keycode 6 = percent
+    shift altgr keycode 6 = colon
+    shift keycode 7 = asciicircum
+    shift altgr keycode 7 = comma
+    shift keycode 8 = ampersand
+    shift altgr keycode 8 = period
+    shift keycode 9 = asterisk
+    shift altgr keycode 9 = semicolon
+    shift keycode 10 = parenleft
+    shift keycode 11 = parenright
+keycode 12 = minus
+    shift keycode 12 = underscore
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 16 = Cyrillic_shorti
+    shift altgr keycode 16 = Cyrillic_SHORTI
+    altgr keycode 17 = Cyrillic_tse
+    shift altgr keycode 17 = Cyrillic_TSE
+    altgr keycode 18 = Cyrillic_u
+    shift altgr keycode 18 = Cyrillic_U
+    altgr keycode 19 = Cyrillic_ka
+    shift altgr keycode 19 = Cyrillic_KA
+    altgr keycode 20 = Cyrillic_ie
+    shift altgr keycode 20 = Cyrillic_IE
+    altgr keycode 21 = Cyrillic_en
+    shift altgr keycode 21 = Cyrillic_EN
+    altgr keycode 22 = Cyrillic_ghe
+    shift altgr keycode 22 = Cyrillic_GHE
+    altgr keycode 23 = Cyrillic_sha
+    shift altgr keycode 23 = Cyrillic_SHA
+    altgr keycode 24 = Cyrillic_shcha
+    shift altgr keycode 24 = Cyrillic_SHCHA
+    altgr keycode 25 = Cyrillic_ze
+    shift altgr keycode 25 = Cyrillic_ZE
+keycode 26 = bracketleft
+    shift keycode 26 = braceleft
+    altgr keycode 26 = Cyrillic_ha
+    shift altgr keycode 26 = Cyrillic_HA
+keycode 27 = bracketright
+    shift keycode 27 = braceright
+    altgr keycode 27 = Cyrillic_hardsign
+    shift altgr keycode 27 = Cyrillic_HARDSIGN
+    altgr keycode 30 = Cyrillic_ef
+    shift altgr keycode 30 = Cyrillic_EF
+    altgr keycode 31 = Cyrillic_yeru
+    shift altgr keycode 31 = Cyrillic_YERU
+    altgr keycode 32 = Cyrillic_ve
+    shift altgr keycode 32 = Cyrillic_VE
+    altgr keycode 33 = Cyrillic_a
+    shift altgr keycode 33 = Cyrillic_A
+    altgr keycode 34 = Cyrillic_pe
+    shift altgr keycode 34 = Cyrillic_PE
+    altgr keycode 35 = Cyrillic_er
+    shift altgr keycode 35 = Cyrillic_ER
+    altgr keycode 36 = Cyrillic_o
+    shift altgr keycode 36 = Cyrillic_O
+    altgr keycode 37 = Cyrillic_el
+    shift altgr keycode 37 = Cyrillic_EL
+    altgr keycode 38 = Cyrillic_de
+    shift altgr keycode 38 = Cyrillic_DE
+keycode 39 = semicolon
+    shift keycode 39 = colon
+    altgr keycode 39 = Cyrillic_zhe
+    shift altgr keycode 39 = Cyrillic_ZHE
+keycode 40 = apostrophe
+    shift keycode 40 = quotedbl
+    altgr keycode 40 = Cyrillic_e
+    shift altgr keycode 40 = Cyrillic_E
+keycode 41 = grave
+    shift keycode 41 = asciitilde
+    altgr keycode 41 = Cyrillic_io
+    shift altgr keycode 41 = Cyrillic_IO
+keycode 43 = backslash
+    shift keycode 43 = bar
+    altgr keycode 44 = Cyrillic_ya
+    shift altgr keycode 44 = Cyrillic_YA
+    altgr keycode 45 = Cyrillic_che
+    shift altgr keycode 45 = Cyrillic_CHE
+    altgr keycode 46 = Cyrillic_es
+    shift altgr keycode 46 = Cyrillic_ES
+    altgr keycode 47 = Cyrillic_em
+    shift altgr keycode 47 = Cyrillic_EM
+    altgr keycode 48 = Cyrillic_i
+    shift altgr keycode 48 = Cyrillic_I
+    altgr keycode 49 = Cyrillic_te
+    shift altgr keycode 49 = Cyrillic_TE
+    altgr keycode 50 = Cyrillic_softsign
+    shift altgr keycode 50 = Cyrillic_SOFTSIGN
+keycode 51 = comma
+    shift keycode 51 = less
+    altgr keycode 51 = Cyrillic_be
+    shift altgr keycode 51 = Cyrillic_BE
+keycode 52 = period
+    shift keycode 52 = greater
+    altgr keycode 52 = Cyrillic_yu
+    shift altgr keycode 52 = Cyrillic_YU
+keycode 53 = slash
+    shift keycode 53 = question
+    altgr keycode 86 = slash
+    shift altgr keycode 86 = bar
diff --git a/data/keymaps/sl b/data/keymaps/sl
new file mode 100644 (file)
index 0000000..21ded10
--- /dev/null
@@ -0,0 +1,110 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = asciitilde
+    shift altgr keycode 2 = dead_tilde
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = dead_caron
+    shift altgr keycode 3 = caron
+    shift keycode 4 = numbersign
+    altgr keycode 4 = asciicircum
+    shift altgr keycode 4 = dead_circumflex
+    shift keycode 5 = dollar
+    altgr keycode 5 = dead_breve
+    shift altgr keycode 5 = breve
+    shift keycode 6 = percent
+    altgr keycode 6 = degree
+    shift altgr keycode 6 = dead_abovering
+    shift keycode 7 = ampersand
+    altgr keycode 7 = dead_ogonek
+    shift altgr keycode 7 = ogonek
+    shift keycode 8 = slash
+    altgr keycode 8 = grave
+    shift altgr keycode 8 = dead_grave
+    shift keycode 9 = parenleft
+    altgr keycode 9 = dead_abovedot
+    shift altgr keycode 9 = abovedot
+    shift keycode 10 = parenright
+    altgr keycode 10 = dead_acute
+    shift keycode 11 = equal
+    altgr keycode 11 = dead_doubleacute
+    shift altgr keycode 11 = doubleacute
+keycode 12 = apostrophe
+    shift keycode 12 = question
+    altgr keycode 12 = dead_diaeresis
+    shift altgr keycode 12 = diaeresis
+keycode 13 = plus
+    shift keycode 13 = asterisk
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = cedilla
+    altgr keycode 16 = backslash
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = bar
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+keycode 21 = z
+    shift keycode 21 = Z
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+    altgr keycode 23 = rightarrow
+    shift altgr keycode 23 = idotless
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = scaron
+    shift keycode 26 = Scaron
+    altgr keycode 26 = division
+keycode 27 = dstroke
+    shift keycode 27 = Dstroke
+    altgr keycode 27 = multiply
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 31 = ssharp
+    shift altgr keycode 31 = section
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = bracketleft
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = bracketright
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = lstroke
+    altgr keycode 38 = Lstroke
+keycode 39 = ccaron
+    shift keycode 39 = Ccaron
+keycode 40 = cacute
+    shift keycode 40 = Cacute
+    altgr keycode 40 = ssharp
+keycode 41 = dead_cedilla
+    altgr keycode 41 = notsign
+keycode 43 = zcaron
+    shift keycode 43 = Zcaron
+    altgr keycode 43 = currency
+keycode 44 = y
+    shift keycode 44 = Y
+    altgr keycode 44 = guillemotleft
+    altgr keycode 45 = guillemotright
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = at
+    altgr keycode 48 = braceleft
+    altgr keycode 49 = braceright
+    altgr keycode 50 = section
+    shift altgr keycode 50 = masculine
+keycode 51 = comma
+    shift keycode 51 = semicolon
+    altgr keycode 51 = horizconnector
+keycode 52 = period
+    shift keycode 52 = colon
+    altgr keycode 52 = periodcentered
+keycode 53 = minus
+    shift keycode 53 = underscore
+    altgr keycode 53 = dead_belowdot
diff --git a/data/keymaps/sv b/data/keymaps/sv
new file mode 100644 (file)
index 0000000..5d1f6a1
--- /dev/null
@@ -0,0 +1,47 @@
+include common
+    shift keycode 2 = exclam
+    shift keycode 3 = quotedbl
+    altgr keycode 3 = at
+    shift keycode 4 = numbersign
+    altgr keycode 4 = sterling
+    shift keycode 5 = currency
+    altgr keycode 5 = dollar
+    shift keycode 6 = percent
+    shift keycode 7 = ampersand
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+keycode 12 = plus
+    shift keycode 12 = question
+    altgr keycode 12 = backslash
+keycode 13 = dead_acute
+    shift keycode 13 = dead_grave
+    altgr keycode 18 = EuroSign
+keycode 26 = aring
+    shift keycode 26 = Aring
+keycode 27 = dead_diaeresis
+    shift keycode 27 = dead_circumflex
+    altgr keycode 27 = dead_tilde
+keycode 39 = odiaeresis
+    shift keycode 39 = Odiaeresis
+keycode 40 = adiaeresis
+    shift keycode 40 = Adiaeresis
+keycode 41 = section
+    shift keycode 41 = onehalf
+keycode 43 = apostrophe
+    shift keycode 43 = asterisk
+    altgr keycode 50 = mu
+keycode 51 = comma
+    shift keycode 51 = semicolon
+keycode 52 = period
+    shift keycode 52 = colon
+keycode 53 = minus
+    shift keycode 53 = underscore
+keycode 86 = less
+    shift keycode 86 = greater
+    altgr keycode 86 = bar
diff --git a/data/keymaps/th b/data/keymaps/th
new file mode 100644 (file)
index 0000000..72a5900
--- /dev/null
@@ -0,0 +1,129 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = Thai_lakkhangyao
+    shift altgr keycode 2 = plus
+    shift keycode 3 = at
+    altgr keycode 3 = slash
+    shift altgr keycode 3 = Thai_leknung
+    shift keycode 4 = numbersign
+    altgr keycode 4 = minus
+    shift altgr keycode 4 = Thai_leksong
+    shift keycode 5 = dollar
+    altgr keycode 5 = Thai_phosamphao
+    shift altgr keycode 5 = Thai_leksam
+    shift keycode 6 = percent
+    altgr keycode 6 = Thai_thothung
+    shift altgr keycode 6 = Thai_leksi
+    shift keycode 7 = asciicircum
+    altgr keycode 7 = Thai_sarau
+    shift altgr keycode 7 = Thai_sarauu
+    shift keycode 8 = ampersand
+    altgr keycode 8 = Thai_saraue
+    shift altgr keycode 8 = Thai_baht
+    shift keycode 9 = asterisk
+    altgr keycode 9 = Thai_khokhwai
+    shift altgr keycode 9 = Thai_lekha
+    shift keycode 10 = parenleft
+    altgr keycode 10 = Thai_totao
+    shift altgr keycode 10 = Thai_lekhok
+    shift keycode 11 = parenright
+    altgr keycode 11 = Thai_chochan
+    shift altgr keycode 11 = Thai_lekchet
+keycode 12 = minus
+    shift keycode 12 = underscore
+    altgr keycode 12 = Thai_khokhai
+    shift altgr keycode 12 = Thai_lekpaet
+keycode 13 = equal
+    shift keycode 13 = plus
+    altgr keycode 13 = Thai_chochang
+    shift altgr keycode 13 = Thai_lekkao
+    altgr keycode 16 = Thai_maiyamok
+    shift altgr keycode 16 = Thai_leksun
+    altgr keycode 17 = Thai_saraaimaimalai
+    shift altgr keycode 17 = quotedbl
+    altgr keycode 18 = Thai_saraam
+    shift altgr keycode 18 = Thai_dochada
+    altgr keycode 19 = Thai_phophan
+    shift altgr keycode 19 = Thai_thonangmontho
+    altgr keycode 20 = Thai_saraa
+    shift altgr keycode 20 = Thai_thothong
+    altgr keycode 21 = Thai_maihanakat
+    shift altgr keycode 21 = Thai_nikhahit
+    altgr keycode 22 = Thai_saraii
+    shift altgr keycode 22 = Thai_maitri
+    altgr keycode 23 = Thai_rorua
+    shift altgr keycode 23 = Thai_nonen
+    altgr keycode 24 = Thai_nonu
+    shift altgr keycode 24 = Thai_paiyannoi
+    altgr keycode 25 = Thai_yoyak
+    shift altgr keycode 25 = Thai_yoying
+keycode 26 = bracketleft
+    shift keycode 26 = braceleft
+    altgr keycode 26 = Thai_bobaimai
+    shift altgr keycode 26 = Thai_thothan
+keycode 27 = bracketright
+    shift keycode 27 = braceright
+    altgr keycode 27 = Thai_loling
+    shift altgr keycode 27 = comma
+    altgr keycode 30 = Thai_fofan
+    shift altgr keycode 30 = Thai_ru
+    altgr keycode 31 = Thai_hohip
+    shift altgr keycode 31 = Thai_khorakhang
+    altgr keycode 32 = Thai_kokai
+    shift altgr keycode 32 = Thai_topatak
+    altgr keycode 33 = Thai_dodek
+    shift altgr keycode 33 = Thai_sarao
+    altgr keycode 34 = Thai_sarae
+    shift altgr keycode 34 = Thai_chochoe
+    altgr keycode 35 = Thai_maitho
+    shift altgr keycode 35 = Thai_maitaikhu
+    altgr keycode 36 = Thai_maiek
+    shift altgr keycode 36 = Thai_maichattawa
+    altgr keycode 37 = Thai_saraaa
+    shift altgr keycode 37 = Thai_sorusi
+    altgr keycode 38 = Thai_sosua
+    shift altgr keycode 38 = Thai_sosala
+keycode 39 = semicolon
+    shift keycode 39 = colon
+    altgr keycode 39 = Thai_wowaen
+    shift altgr keycode 39 = Thai_soso
+keycode 40 = apostrophe
+    shift keycode 40 = quotedbl
+    altgr keycode 40 = Thai_ngongu
+    shift altgr keycode 40 = period
+keycode 41 = grave
+    shift keycode 41 = asciitilde
+    altgr keycode 41 = underscore
+    shift altgr keycode 41 = percent
+    shift keycode 42 = ISO_First_Group
+keycode 43 = backslash
+    shift keycode 43 = bar
+    altgr keycode 43 = Thai_khokhuat
+    shift altgr keycode 43 = Thai_khokhon
+    altgr keycode 44 = Thai_phophung
+    shift altgr keycode 44 = parenleft
+    altgr keycode 45 = Thai_popla
+    shift altgr keycode 45 = parenright
+    altgr keycode 46 = Thai_saraae
+    shift altgr keycode 46 = Thai_choching
+    altgr keycode 47 = Thai_oang
+    shift altgr keycode 47 = Thai_honokhuk
+    altgr keycode 48 = Thai_sarai
+    shift altgr keycode 48 = Thai_phinthu
+    altgr keycode 49 = Thai_sarauee
+    shift altgr keycode 49 = Thai_thanthakhat
+    altgr keycode 50 = Thai_thothahan
+    shift altgr keycode 50 = question
+keycode 51 = comma
+    shift keycode 51 = less
+    altgr keycode 51 = Thai_moma
+    shift altgr keycode 51 = Thai_thophuthao
+keycode 52 = period
+    shift keycode 52 = greater
+    altgr keycode 52 = Thai_saraaimaimuan
+    shift altgr keycode 52 = Thai_lochula
+keycode 53 = slash
+    shift keycode 53 = question
+    altgr keycode 53 = Thai_fofa
+    shift altgr keycode 53 = Thai_lu
+    shift keycode 54 = ISO_Last_Group
diff --git a/data/keymaps/tr b/data/keymaps/tr
new file mode 100644 (file)
index 0000000..4bd8432
--- /dev/null
@@ -0,0 +1,121 @@
+include common
+    shift keycode 2 = exclam
+    altgr keycode 2 = onesuperior
+    shift altgr keycode 2 = exclamdown
+    shift keycode 3 = apostrophe
+    altgr keycode 3 = at
+    shift altgr keycode 3 = oneeighth
+    shift keycode 4 = dead_circumflex
+    altgr keycode 4 = numbersign
+    shift altgr keycode 4 = sterling
+    shift keycode 5 = plus
+    altgr keycode 5 = dollar
+    shift keycode 6 = percent
+    altgr keycode 6 = onehalf
+    shift altgr keycode 6 = threeeighths
+    shift keycode 7 = ampersand
+    altgr keycode 7 = asciicircum
+    shift altgr keycode 7 = fiveeighths
+    shift keycode 8 = slash
+    altgr keycode 8 = braceleft
+    shift altgr keycode 8 = seveneighths
+    shift keycode 9 = parenleft
+    altgr keycode 9 = bracketleft
+    shift altgr keycode 9 = trademark
+    shift keycode 10 = parenright
+    altgr keycode 10 = bracketright
+    shift altgr keycode 10 = plusminus
+    shift keycode 11 = equal
+    altgr keycode 11 = braceright
+    shift altgr keycode 11 = degree
+keycode 12 = asterisk
+    shift keycode 12 = question
+    altgr keycode 12 = backslash
+    shift altgr keycode 12 = questiondown
+keycode 13 = minus
+    shift keycode 13 = underscore
+    altgr keycode 13 = dead_cedilla
+    shift altgr keycode 13 = dead_ogonek
+    altgr keycode 16 = at
+    shift altgr keycode 16 = Greek_OMEGA
+    altgr keycode 17 = lstroke
+    shift altgr keycode 17 = Lstroke
+    altgr keycode 18 = EuroSign
+    altgr keycode 19 = paragraph
+    shift altgr keycode 19 = registered
+    altgr keycode 20 = tslash
+    shift altgr keycode 20 = Tslash
+    altgr keycode 21 = leftarrow
+    shift altgr keycode 21 = yen
+    altgr keycode 22 = downarrow
+    shift altgr keycode 22 = uparrow
+keycode 23 = idotless
+    shift keycode 23 = I
+    altgr keycode 23 = rightarrow
+    altgr keycode 24 = oslash
+    shift altgr keycode 24 = Ooblique
+    altgr keycode 25 = thorn
+    shift altgr keycode 25 = THORN
+keycode 26 = gbreve
+    shift keycode 26 = Gbreve
+    altgr keycode 26 = dead_diaeresis
+    shift altgr keycode 26 = dead_abovering
+keycode 27 = udiaeresis
+    shift keycode 27 = Udiaeresis
+    altgr keycode 27 = asciitilde
+    shift altgr keycode 27 = dead_macron
+    altgr keycode 30 = ae
+    shift altgr keycode 30 = AE
+    altgr keycode 31 = ssharp
+    shift altgr keycode 31 = section
+    altgr keycode 32 = eth
+    shift altgr keycode 32 = ETH
+    altgr keycode 33 = dstroke
+    shift altgr keycode 33 = ordfeminine
+    altgr keycode 34 = eng
+    shift altgr keycode 34 = ENG
+    altgr keycode 35 = hstroke
+    shift altgr keycode 35 = Hstroke
+    altgr keycode 37 = kra
+    shift altgr keycode 37 = ampersand
+    altgr keycode 38 = lstroke
+    shift altgr keycode 38 = Lstroke
+keycode 39 = scedilla
+    shift keycode 39 = Scedilla
+    altgr keycode 39 = dead_acute
+    shift altgr keycode 39 = dead_doubleacute
+keycode 40 = i
+    shift keycode 40 = Iabovedot
+    altgr keycode 40 = dead_circumflex
+    shift altgr keycode 40 = dead_caron
+keycode 41 = backslash
+    shift keycode 41 = quotedbl
+    altgr keycode 41 = asciitilde
+keycode 43 = comma
+    shift keycode 43 = semicolon
+    altgr keycode 43 = bar
+    shift altgr keycode 43 = dead_breve
+    altgr keycode 44 = guillemotleft
+    shift altgr keycode 44 = less
+    altgr keycode 45 = guillemotright
+    shift altgr keycode 45 = greater
+    altgr keycode 46 = cent
+    shift altgr keycode 46 = copyright
+    altgr keycode 47 = leftdoublequotemark
+    shift altgr keycode 47 = grave
+    altgr keycode 48 = rightdoublequotemark
+    shift altgr keycode 48 = apostrophe
+    altgr keycode 50 = mu
+    shift altgr keycode 50 = masculine
+keycode 51 = odiaeresis
+    shift keycode 51 = Odiaeresis
+    altgr keycode 51 = less
+    shift altgr keycode 51 = multiply
+keycode 52 = ccedilla
+    shift keycode 52 = Ccedilla
+    altgr keycode 52 = greater
+    shift altgr keycode 52 = division
+keycode 53 = period
+    shift keycode 53 = colon
+    altgr keycode 53 = dead_belowdot
+    shift altgr keycode 53 = dead_abovedot
diff --git a/data/keymaps/us b/data/keymaps/us
new file mode 100644 (file)
index 0000000..62f2002
--- /dev/null
@@ -0,0 +1,33 @@
+include common
+    shift keycode 2 = exclam
+    shift keycode 3 = at
+    shift keycode 4 = numbersign
+    shift keycode 5 = dollar
+    shift keycode 6 = percent
+    shift keycode 7 = asciicircum
+    shift keycode 8 = ampersand
+    shift keycode 9 = asterisk
+    shift keycode 10 = parenleft
+    shift keycode 11 = parenright
+keycode 12 = minus
+    shift keycode 12 = underscore
+keycode 13 = equal
+    shift keycode 13 = plus
+keycode 26 = bracketleft
+    shift keycode 26 = braceleft
+keycode 27 = bracketright
+    shift keycode 27 = braceright
+keycode 39 = semicolon
+    shift keycode 39 = colon
+keycode 40 = apostrophe
+    shift keycode 40 = quotedbl
+keycode 41 = grave
+    shift keycode 41 = asciitilde
+keycode 43 = backslash
+    shift keycode 43 = bar
+keycode 51 = comma
+    shift keycode 51 = less
+keycode 52 = period
+    shift keycode 52 = greater
+keycode 53 = slash
+    shift keycode 53 = question
index 15ffe8f6bb22964ed72f05026e81cce870078f1e..4a232bd69d2e91fefc5907f2acf68ea730c4802f 100644 (file)
@@ -32,7 +32,7 @@ class EngineBase(object.Object):
         super(EngineBase, self).__init__()
         self.__proxy = EngineProxy (self, bus.get_dbusconn(), object_path)
 
-    def process_key_event(self, keyval, state):
+    def process_key_event(self, keyval, keycode, state):
         return False
 
     def focus_in(self):
@@ -149,8 +149,8 @@ class EngineProxy(interface.IEngine):
         super(EngineProxy, self).__init__(conn, object_path)
         self.__engine = engine
 
-    def ProcessKeyEvent(self, keyval, state):
-        return self.__engine.process_key_event(keyval, state)
+    def ProcessKeyEvent(self, keyval, keycode, state):
+        return self.__engine.process_key_event(keyval, keycode, state)
 
     def FocusIn(self):
         return self.__engine.focus_in()
index c9aa634203736918b0e2f4d6af8a94a76f8ba622..5dbdbf59427e27831b1288c7d92d70d5f166ae84 100644 (file)
@@ -176,10 +176,11 @@ class InputContext(object.Object):
         visible = args[1]
         self.emit("update-lookup-table", table, visible)
 
-    def process_key_event(self, keyval, modifiers):
+    def process_key_event(self, keyval, keycode, modifiers):
         keyval = dbus.UInt32(keyval)
+        keycode = dbus.UInt32(keycode)
         modifiers = dbus.UInt32(modifiers)
-        return self.__context.ProcessKeyEvent(keyval, modifiers)
+        return self.__context.ProcessKeyEvent(keyval, keycode, modifiers)
 
     def set_cursor_location(self, x, y, w, h):
         x = dbus.Int32(x)
index 21b0305689d0175bfb2b19b1acaba4357985bc54..e9988c1df6cb37dd8fc17e5bf39a6190f1f0f2ba 100644 (file)
@@ -42,8 +42,8 @@ class IEngine(dbus.service.Object):
                             async_callbacks=("reply_cb", "error_cb"), \
                             **args)
 
-    @method(in_signature="uu", out_signature="b")
-    def ProcessKeyEvent(self, keyval, state):
+    @method(in_signature="uuu", out_signature="b")
+    def ProcessKeyEvent(self, keyval, keycode, state):
         pass
 
     @method(in_signature="iiii")
index aa96c465217da05af712a61375ca918582a40fd0..c52d99b10d5c2f38daf77d81c6c739f7b937b5d0 100644 (file)
@@ -50,6 +50,7 @@ ibus_public_h_sources = \
        ibusfactory.h \
        ibusengine.h \
        ibustext.h \
+       ibuskeymap.h \
        ibusattribute.h \
        ibusproperty.h \
        ibuslookuptable.h \
@@ -87,6 +88,7 @@ ibus_c_sources = \
        ibusfactory.c \
        ibusengine.c \
        ibustext.c \
+       ibuskeymap.c \
        ibusattribute.c \
        ibusproperty.c \
        ibuslookuptable.c \
@@ -125,6 +127,7 @@ libibus_la_CFLAGS = \
        @GIO2_CFLAGS@ \
        @DBUS_CFLAGS@ \
        -DG_LOG_DOMAIN=\"IBUS\" \
+       -DIBUS_DATA_DIR=\"$(pkgdatadir)\" \
        $(NULL)
 libibus_la_LDFLAGS = \
        @X11_LIBS@ \
@@ -159,12 +162,14 @@ AM_LDFLAGS = \
 
 TESTS = \
        test-text \
+       test-keymap \
        test-keynames \
        test-attribute \
        test-lookuptable \
        $(NULL)
 noinst_PROGRAMS = $(TESTS)
 test_text_DEPENDENCIES = $(DEPS)
+test_keymap_DEPENDENCIES = $(DEPS)
 test_keynames_DEPENDENCIES = $(DEPS)
 test_attribute_DEPENDENCIES = $(DEPS)
 test_lookuptable_DEPENDENCIES = $(DEPS)
index 3dcfc285e9e0bf16f5394fcea8b5958be8ca1f1d..ddfd164eb22be8acc0a0f17cde9af1a3086e2a04 100644 (file)
@@ -36,6 +36,7 @@
 #include <ibuslookuptable.h>
 #include <ibusbus.h>
 #include <ibuskeysyms.h>
+#include <ibuskeymap.h>
 #include <ibusmessage.h>
 #include <ibuspendingcall.h>
 #include <ibuserror.h>
index f71b5158dc81b5a4d4ce9029bace47616eaec07e..5bc284b16dca432947617c2f5371acf8ed536ac2 100644 (file)
@@ -80,6 +80,7 @@ static gboolean ibus_engine_ibus_message    (IBusEngine         *engine,
 static gboolean ibus_engine_process_key_event
                                             (IBusEngine         *engine,
                                              guint               keyval,
+                                             guint               keycode,
                                              guint               state);
 static void     ibus_engine_focus_in        (IBusEngine         *engine);
 static void     ibus_engine_focus_out       (IBusEngine         *engine);
@@ -241,9 +242,10 @@ ibus_engine_class_init (IBusEngineClass *klass)
             G_SIGNAL_RUN_LAST,
             G_STRUCT_OFFSET (IBusEngineClass, process_key_event),
             NULL, NULL,
-            ibus_marshal_BOOL__UINT_UINT,
+            ibus_marshal_BOOL__UINT_UINT_UINT,
             G_TYPE_BOOLEAN,
-            2,
+            3,
+            G_TYPE_UINT,
             G_TYPE_UINT,
             G_TYPE_UINT);
 
@@ -678,24 +680,26 @@ ibus_engine_ibus_message (IBusEngine     *engine,
     }
 
     if (ibus_message_is_method_call (message, IBUS_INTERFACE_ENGINE, "ProcessKeyEvent")) {
-        guint keyval, state;
+        guint keyval, keycode, state;
         gboolean retval;
         IBusError *error = NULL;
 
         retval = ibus_message_get_args (message,
                                         &error,
                                         G_TYPE_UINT, &keyval,
+                                        G_TYPE_UINT, &keycode,
                                         G_TYPE_UINT, &state,
                                         G_TYPE_INVALID);
 
         if (!retval)
-            goto _keypress_fail;
+            goto _keypress2_fail;
 
         retval = FALSE;
         g_signal_emit (engine,
                        engine_signals[PROCESS_KEY_EVENT],
                        0,
                        keyval,
+                       keycode,
                        state,
                        &retval);
 
@@ -707,15 +711,16 @@ ibus_engine_ibus_message (IBusEngine     *engine,
         ibus_message_unref (return_message);
         return TRUE;
 
-    _keypress_fail:
+    _keypress2_fail:
         error_message = ibus_message_new_error_printf (message,
                         DBUS_ERROR_INVALID_ARGS,
-                        "%s.%s: Can not match signature (uu) of method",
-                        IBUS_INTERFACE_ENGINE, "ProcessKeyEvent");
+                        "%s.%s: Can not match signature (ubu) of method",
+                        IBUS_INTERFACE_ENGINE, "ProcessKeyEvent2");
         ibus_connection_send (connection, error_message);
         ibus_message_unref (error_message);
         return TRUE;
     }
+
     else if (ibus_message_is_method_call (message, IBUS_INTERFACE_ENGINE, "CandidateClicked")) {
         guint index, button, state;
         gboolean retval;
@@ -938,9 +943,9 @@ ibus_engine_ibus_message (IBusEngine     *engine,
 static gboolean
 ibus_engine_process_key_event (IBusEngine *engine,
                                guint       keyval,
+                               guint       keycode,
                                guint       state)
 {
-    // g_debug ("process-key-event (%d, %d)", keyval, state);
     return FALSE;
 }
 
index 43730affc53e54c0863b4d2c633936c2ddce607d..11181021e54290bdf51d156f19eb4e7661a193d0 100644 (file)
@@ -86,6 +86,7 @@ struct _IBusEngineClass {
     gboolean    (* process_key_event)
                                     (IBusEngine     *engine,
                                      guint           keyval,
+                                     guint           keycode,
                                      guint           state);
     void        (* focus_in)        (IBusEngine     *engine);
     void        (* focus_out)       (IBusEngine     *engine);
@@ -121,8 +122,6 @@ struct _IBusEngineClass {
                                      guint           button,
                                      guint           state);
 
-
-
     /*< private >*/
     /* padding */
     gpointer pdummy[8];
index 52547ff91a27f55d2c29878ce86a3a6d84e076f3..64c0101d997522e35c0733ee5aeb50da7241c391 100644 (file)
@@ -541,9 +541,11 @@ failed:
     return FALSE;
 }
 
+
 gboolean
 ibus_input_context_process_key_event (IBusInputContext *context,
                                       guint32           keyval,
+                                      guint32           keycode,
                                       guint32           state)
 {
     g_assert (IBUS_IS_INPUT_CONTEXT (context));
@@ -565,6 +567,7 @@ ibus_input_context_process_key_event (IBusInputContext *context,
                                          -1,
                                          &error,
                                          G_TYPE_UINT, &keyval,
+                                         G_TYPE_UINT, &keycode,
                                          G_TYPE_UINT, &state,
                                          G_TYPE_INVALID);
     if (!retval) {
index 56f776be972c48a56a71a0bf2dc5d49d6ef6bcf4..3f5508cf2092e896e5d4e435be45aa5f1279895f 100644 (file)
@@ -75,6 +75,7 @@ IBusInputContext
 gboolean     ibus_input_context_process_key_event
                                             (IBusInputContext   *context,
                                              guint32             keyval,
+                                             guint32             keycode,
                                              guint32             state);
 void         ibus_input_context_set_cursor_location
                                             (IBusInputContext   *context,
diff --git a/src/ibuskeymap.c b/src/ibuskeymap.c
new file mode 100644 (file)
index 0000000..398c497
--- /dev/null
@@ -0,0 +1,294 @@
+/* vim:set et sts=4: */
+/* IBus - The Input Bus
+ * Copyright (C) 2008-2009 Huang Peng <shawn.p.huang@gmail.com>
+ *
+ * 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, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib/gstdio.h>
+#include "ibusshare.h"
+#include "ibuskeysyms.h"
+#include "ibuskeymap.h"
+
+/* functions prototype */
+static void         ibus_keymap_class_init      (IBusKeymapClass        *klass);
+static void         ibus_keymap_init            (IBusKeymap             *keymap);
+static void         ibus_keymap_destroy         (IBusKeymap             *keymap);
+static gboolean     ibus_keymap_load            (const gchar            *name,
+                                                 KEYMAP                  keymap);
+static IBusObjectClass *parent_class = NULL;
+static GHashTable      *keymaps = NULL;
+
+GType
+ibus_keymap_get_type (void)
+{
+    static GType type = 0;
+
+    static const GTypeInfo type_info = {
+        sizeof (IBusKeymapClass),
+        (GBaseInitFunc)     NULL,
+        (GBaseFinalizeFunc) NULL,
+        (GClassInitFunc)    ibus_keymap_class_init,
+        NULL,               /* class finialize */
+        NULL,               /* class data */
+        sizeof (IBusKeymap),
+        0,
+        (GInstanceInitFunc) ibus_keymap_init,
+    };
+
+    if (type == 0) {
+        type = g_type_register_static (IBUS_TYPE_OBJECT,
+                                       "IBusKeymap",
+                                       &type_info,
+                                       0);
+    }
+
+    return type;
+}
+
+static void
+ibus_keymap_class_init (IBusKeymapClass *klass)
+{
+    IBusObjectClass *object_class = IBUS_OBJECT_CLASS (klass);
+
+    parent_class = (IBusObjectClass *) g_type_class_peek_parent (klass);
+
+    object_class->destroy = (IBusObjectDestroyFunc) ibus_keymap_destroy;
+}
+
+static void
+ibus_keymap_init (IBusKeymap *keymap)
+{
+    keymap->name = NULL;
+    memset (keymap->keymap, 0, sizeof (keymap->keymap));
+}
+
+static void
+ibus_keymap_destroy (IBusKeymap *keymap)
+{
+    if (keymap->name != NULL) {
+        g_free (keymap->name);
+        keymap->name = NULL;
+    }
+    IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)keymap);
+}
+
+#define SKIP_SPACE(p)   \
+    while (*p == ' ') p++;
+
+static gboolean
+ibus_keymap_parse_line (gchar  *str,
+                        KEYMAP  keymap)
+{
+    gchar *p1, *p2;
+    gint i;
+    guint keycode;
+    guint keysym;
+
+    const struct {
+        const gchar *prefix;
+        const gint len;
+    } prefix [] = {
+        { "keycode ", sizeof ("keycode ") - 1 },
+        { "shift keycode ", sizeof ("shift keycode ") - 1 },
+        { "altgr keycode ", sizeof ("altgr keycode ") - 1},
+        { "shift altgr keycode ", sizeof ("shift altgr keycode ") - 1},
+        { "numlock keycode ", sizeof ("numlock keycode ") - 1},
+    };
+
+    p1 = str;
+
+    SKIP_SPACE(p1);
+
+    if (*p1 == '#')
+        return TRUE;
+
+    if (strncmp (p1, "include ", sizeof ("include ") - 1) == 0) {
+        p1 += sizeof ("include ") - 1;
+        for (p2 = p1; *p2 != '\n'; p2++);
+        *p2 = '\0';
+        return ibus_keymap_load (p1, keymap);
+    }
+
+    for (i = 0; i < sizeof (prefix) / sizeof (prefix[0]); i++) {
+        if (strncmp (p1, prefix[i].prefix, prefix[i].len) == 0) {
+            p1 += prefix[i].len;
+            break;
+        }
+    }
+
+    if (i >= sizeof (prefix) / sizeof (prefix[0]))
+        return FALSE;
+
+    keycode = (guint) strtoul (p1, &p2, 10);
+
+    if (keycode == 0 && p1 == p2)
+        return FALSE;
+
+    if (keycode < 0 || keycode > 255)
+        return FALSE;
+
+    p1 = p2;
+
+    if (*p1++ != ' ')
+        return FALSE;
+    if (*p1++ != '=')
+        return FALSE;
+    if (*p1++ != ' ')
+        return FALSE;
+
+    for (p2 = p1; *p2 != '\n'; p2++);
+    *p2 = '\0';
+
+    keysym = ibus_keyval_from_name (p1);
+
+    if (keysym == IBUS_VoidSymbol)
+        return FALSE;
+
+    keymap[keycode][i] = keysym;
+
+    return TRUE;
+}
+
+static gboolean
+ibus_keymap_load (const gchar *name,
+                  KEYMAP       keymap)
+{
+    gchar *fname;
+    FILE *pf;
+    gchar buf[256];
+    gint lineno;
+
+
+    fname = g_build_filename (IBUS_DATA_DIR, "keymaps", name, NULL);
+
+    if (fname == NULL) {
+        return FALSE;
+    }
+    pf = g_fopen (fname, "r");
+    g_free (fname);
+
+    if (pf == NULL) {
+        return FALSE;
+    }
+
+    lineno = 0;
+    while (fgets (buf, sizeof (buf), pf) != NULL) {
+        lineno ++;
+        if (!ibus_keymap_parse_line (buf, keymap)) {
+            g_warning ("parse %s failed on %d line", name, lineno);
+            lineno = -1;
+            break;
+        }
+    }
+
+    fclose (pf);
+
+    if (lineno == -1) {
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+void
+ibus_keymap_fill (KEYMAP keymap)
+{
+    gint i;
+    for (i = 0; i < 256; i++) {
+        if (keymap[i][1] == 0)
+            keymap[i][1] = keymap[i][0];
+        if (keymap[i][2] == 0)
+            keymap[i][2] = keymap[i][0];
+        if (keymap[i][3] == 0)
+            keymap[i][3] = keymap[i][2];
+    }
+}
+
+static void
+_keymap_destroy_cb (IBusKeymap *keymap,
+                    gpointer    user_data)
+{
+    g_hash_table_remove (keymaps, keymap->name);
+}
+
+IBusKeymap *
+ibus_keymap_new (const gchar *name)
+{
+    g_assert (name != NULL);
+
+    IBusKeymap *keymap;
+
+    if (keymaps == NULL) {
+        keymaps = g_hash_table_new_full (g_str_hash,
+                                         g_str_equal,
+                                         (GDestroyNotify) g_free,
+                                         (GDestroyNotify)  g_object_unref);
+    }
+
+    keymap = (IBusKeymap *) g_hash_table_lookup (keymaps, name);
+    if (keymap != NULL) {
+        g_object_ref (keymap);
+        return keymap;
+    }
+
+    keymap = g_object_new (IBUS_TYPE_KEYMAP, NULL);
+    if (!ibus_keymap_load (name, keymap->keymap)) {
+        g_object_unref (keymap);
+        return NULL;
+    }
+
+    ibus_keymap_fill (keymap->keymap);
+    keymap->name = g_strdup (name);
+    g_hash_table_insert (keymaps, g_strdup (keymap->name), g_object_ref (keymap));
+
+    g_signal_connect (keymap, "destroy", G_CALLBACK (_keymap_destroy_cb), NULL);
+
+    return keymap;
+}
+
+
+guint32
+ibus_keymap_lookup_keysym (IBusKeymap *keymap,
+                           guint16     keycode,
+                           guint32     state)
+{
+    g_assert (IBUS_IS_KEYMAP (keymap));
+
+    guint32 keysym;
+
+    keysym = IBUS_VoidSymbol;
+
+    if (keycode < 256) {
+        gboolean is_upper;
+        is_upper = (((state & IBUS_SHIFT_MASK) == IBUS_SHIFT_MASK) ^ ((state & IBUS_LOCK_MASK) == IBUS_LOCK_MASK)) != 0;
+
+        if ((state & IBUS_MOD2_MASK) && (keymap->keymap[keycode][4] != 0)) {
+            keysym = keymap->keymap[keycode][4];
+        }
+        else if (state & IBUS_MOD5_MASK) {
+            keysym = keymap->keymap[keycode][is_upper ? 3: 2];
+        }
+        else {
+            keysym = keymap->keymap[keycode][is_upper ? 1: 0];
+        }
+    }
+
+    return keysym;
+}
diff --git a/src/ibuskeymap.h b/src/ibuskeymap.h
new file mode 100644 (file)
index 0000000..7e83d6d
--- /dev/null
@@ -0,0 +1,87 @@
+/* vim:set et sts=4: */
+/* IBus - The Input Bus
+ * Copyright (C) 2008-2009 Huang Peng <shawn.p.huang@gmail.com>
+ *
+ * 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, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION: ibuskeymap
+ * @short_description: Keymap with decorating information.
+ *
+ */
+
+#ifndef __IBUS_KEYMAP_H_
+#define __IBUS_KEYMAP_H_
+
+#include "ibusobject.h"
+
+/*
+ * Type macros.
+ */
+/* define IBusKeymap macros */
+#define IBUS_TYPE_KEYMAP             \
+    (ibus_keymap_get_type ())
+#define IBUS_KEYMAP(obj)             \
+    (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_KEYMAP, IBusKeymap))
+#define IBUS_KEYMAP_CLASS(klass)     \
+    (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_KEYMAP, IBusKeymapClass))
+#define IBUS_IS_KEYMAP(obj)          \
+    (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_KEYMAP))
+#define IBUS_IS_KEYMAP_CLASS(klass)  \
+    (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_KEYMAP))
+#define IBUS_KEYMAP_GET_CLASS(obj)   \
+    (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_KEYMAP, IBusKeymapClass))
+
+G_BEGIN_DECLS
+
+typedef struct _IBusKeymap IBusKeymap;
+typedef struct _IBusKeymapClass IBusKeymapClass;
+typedef guint KEYMAP[256][5];
+
+/**
+ * IBusKeymap:
+ * A keymap object in IBus.
+ */
+struct _IBusKeymap {
+    IBusObject parent;
+
+    /* members */
+    /*< public >*/
+    gchar *name;
+    KEYMAP keymap;
+};
+
+struct _IBusKeymapClass {
+    IBusObjectClass parent;
+};
+
+GType            ibus_keymap_get_type               (void);
+
+/**
+ * ibus_keymap_new:
+ * @name: keymap name.
+ * @returns: A newly allocated IBusKeymap.
+ *
+ * New an IBusKeymap.
+ */
+IBusKeymap        *ibus_keymap_new                  (const gchar        *name);
+guint              ibus_keymap_lookup_keysym        (IBusKeymap         *keymap,
+                                                     guint16             keycode,
+                                                     guint32             state);
+
+G_END_DECLS
+#endif
+
index ca7d07bd7d5d46ae191a12013118caa7996cd462..3cae6ae2d5ec66932f8a6d9ffecf03d9e004d8b8 100644 (file)
@@ -7,6 +7,7 @@ VOID:STRING,UINT
 BOOL:POINTER
 BOOL:POINTER,POINTER
 BOOL:UINT,UINT
+BOOL:UINT,UINT,UINT
 BOOL:ULONG
 VOID:INT,INT,INT,INT
 VOID:UINT,UINT
diff --git a/src/test-keymap.c b/src/test-keymap.c
new file mode 100644 (file)
index 0000000..ec9c207
--- /dev/null
@@ -0,0 +1,44 @@
+#include <linux/input.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "ibus.h"
+
+#define KEYBOARDPATH "/dev/input/event4"
+
+int main (int argc, char **argv)
+{
+    gint fd;
+    struct input_event e;
+
+    g_type_init ();
+
+    IBusKeymap *keymap = ibus_keymap_new (argc > 1 ? argv[1] : "us");
+
+    g_object_unref (keymap);
+       return 0;
+
+    fd = open (KEYBOARDPATH, O_RDONLY);
+
+
+    while (fd >= 0 && read (fd, &e, sizeof (e)) == sizeof (e)) {
+        if (e.type != EV_KEY)
+            continue;
+        if (e.value != 0)
+            continue;
+
+        g_debug ("=========================================================================");
+        g_debug ("keycode = %d, %s %s %s %s %s", e.code,
+                    ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, 0)),
+                    ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, IBUS_SHIFT_MASK)),
+                    ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, IBUS_MOD5_MASK)),
+                    ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, IBUS_MOD5_MASK | IBUS_SHIFT_MASK)),
+                    ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, IBUS_MOD2_MASK))
+        );
+    }
+
+    g_object_unref (keymap);
+       return 0;
+
+}