aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaibo Huang <hhb@google.com>2020-11-03 01:57:05 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-11-03 01:57:05 +0000
commit42ca70887866844d87d3fb040b182a28ba65733e (patch)
tree2370f9e46f9dab743fb93b30277ceb21a8fd36e5
parent343a893ca22d99515ce4b0758d990c914f47ee45 (diff)
parentef44d88d802a010def1fce140d8b583d073ae7d6 (diff)
downloadlibxkbcommon-42ca70887866844d87d3fb040b182a28ba65733e.tar.gz
Upgrade libxkbcommon to xkbcommon-1.0.1 am: 44a37d780c am: bfc5d50c3e am: ef44d88d80
Original change: https://android-review.googlesource.com/c/platform/external/libxkbcommon/+/1479536 Change-Id: I6a68f54eb26753362b8a4d4031b0edee15b9c734
-rw-r--r--.github/workflows/main.yml4
-rw-r--r--METADATA8
-rw-r--r--NEWS11
-rw-r--r--config.h (renamed from src/config.h)4
-rw-r--r--meson.build268
-rw-r--r--src/registry.c1
-rw-r--r--src/utils.h2
-rw-r--r--src/xkbcomp/.gitignore0
-rw-r--r--src/xkbcomp/parser.c1089
-rw-r--r--src/xkbcomp/parser.h10
-rw-r--r--src/xkbcomp/parser.y2
-rw-r--r--test/data/keycodes/evdev12
-rw-r--r--test/data/keymaps/quartz.xkb2
-rw-r--r--test/data/rules/base589
-rw-r--r--test/data/rules/base.extras.xml1354
-rw-r--r--test/data/rules/base.xml7705
-rw-r--r--test/data/rules/evdev586
-rw-r--r--test/data/rules/evdev.extras.xml1354
-rw-r--r--test/data/rules/evdev.xml7705
-rw-r--r--test/data/rules/xkb.dtd58
-rw-r--r--test/data/symbols/altwin6
-rw-r--r--test/data/symbols/ca8
-rw-r--r--test/data/symbols/capslock9
-rw-r--r--test/data/symbols/ch8
-rw-r--r--test/data/symbols/ctrl19
-rw-r--r--test/data/symbols/cz232
-rw-r--r--test/data/symbols/de65
-rw-r--r--test/data/symbols/empty2
-rw-r--r--test/data/symbols/il2
-rw-r--r--test/data/symbols/in252
-rw-r--r--test/data/symbols/inet50
-rw-r--r--test/data/symbols/latin2
-rw-r--r--test/data/symbols/level320
-rw-r--r--test/data/symbols/macintosh_vndr/apple2
-rw-r--r--test/data/symbols/pc2
-rw-r--r--test/data/symbols/ru281
-rw-r--r--test/data/symbols/terminate2
-rw-r--r--test/data/symbols/us335
-rw-r--r--test/data/types/extra2
-rw-r--r--test/data/types/iso99952
-rw-r--r--test/data/types/level52
-rw-r--r--test/data/types/mousekeys2
-rw-r--r--test/data/types/numpad2
-rw-r--r--test/data/types/pc2
-rw-r--r--test/registry.c3
-rw-r--r--test/state.c2
-rwxr-xr-xtest/tool-option-parsing.py384
-rw-r--r--tools/how-to-type.c6
-rw-r--r--tools/xkbcli-how-to-type.17
-rw-r--r--xkbcommon-x11.pc.in12
-rw-r--r--xkbcommon.pc.in10
51 files changed, 20639 insertions, 1858 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 308f584..eb4e74f 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -46,14 +46,14 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip meson
- brew install doxygen bison ninja
+ brew install libxml2 doxygen bison ninja
brew link bison --force
env:
HOMEBREW_NO_AUTO_UPDATE: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
- name: Setup
run: |
- PATH="/usr/local/opt/bison/bin:${PATH}" meson setup -Denable-wayland=false -Denable-x11=false -Denable-xkbregistry=false build
+ PATH="/usr/local/opt/bison/bin:${PATH}" meson setup -Denable-wayland=false -Denable-x11=false build
- name: Build
run: |
PATH="/usr/local/opt/bison/bin:${PATH}" meson compile -C build
diff --git a/METADATA b/METADATA
index 38787f6..ffa117d 100644
--- a/METADATA
+++ b/METADATA
@@ -7,13 +7,13 @@ third_party {
}
url {
type: ARCHIVE
- value: "https://github.com/xkbcommon/libxkbcommon/archive/xkbcommon-1.0.0.tar.gz"
+ value: "https://github.com/xkbcommon/libxkbcommon/archive/xkbcommon-1.0.1.tar.gz"
}
- version: "xkbcommon-1.0.0"
+ version: "xkbcommon-1.0.1"
license_type: NOTICE
last_upgrade_date {
year: 2020
- month: 9
- day: 8
+ month: 10
+ day: 28
}
}
diff --git a/NEWS b/NEWS
index 2e7d7bb..fee6a59 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,14 @@
+libxkbcommon 1.0.1 - 2020-09-11
+==================
+
+- Fix the tool-option-parsing test failing.
+
+- Remove requirement for pytest in the tool-option-parsing test.
+
+- Make the table output of `xkbcli how-to-type` aligned.
+
+- Some portability and test isolation fixes.
+
libxkbcommon 1.0.0 - 2020-09-05
==================
diff --git a/src/config.h b/config.h
index 4edf0e9..145bce1 100644
--- a/src/config.h
+++ b/config.h
@@ -31,6 +31,8 @@
#define HAVE_STRNDUP 1
+#define HAVE_UNISTD_H 1
+
#define HAVE_XKBCLI_COMPILE_KEYMAP 1
#define HAVE_XKBCLI_HOW_TO_TYPE 1
@@ -43,7 +45,7 @@
#define LIBXKBCOMMON_TOOL_PATH "/usr/local/libexec/xkbcommon"
-#define LIBXKBCOMMON_VERSION "1.0.0"
+#define LIBXKBCOMMON_VERSION "1.0.1"
#define WIN32_LEAN_AND_MEAN 1
diff --git a/meson.build b/meson.build
index 046fc54..6e433f4 100644
--- a/meson.build
+++ b/meson.build
@@ -1,7 +1,7 @@
project(
'libxkbcommon',
'c',
- version: '1.0.0',
+ version: '1.0.1',
default_options: [
'c_std=c99',
'warning_level=2',
@@ -89,6 +89,9 @@ if get_option('default-options') != ''
else
configh_data.set('DEFAULT_XKB_OPTIONS', 'NULL')
endif
+if cc.has_header('unistd.h')
+ configh_data.set('HAVE_UNISTD_H', 1)
+endif
if cc.links('int main(){if(__builtin_expect(1<0,0)){}}', name: '__builtin_expect')
configh_data.set('HAVE___BUILTIN_EXPECT', 1)
endif
@@ -366,12 +369,140 @@ if get_option('enable-xkbregistry')
)
endif
+man_pages = []
+
+# Tools
+build_tools = have_getopt_long
+if build_tools
+ libxkbcommon_tools_internal = static_library(
+ 'tools-internal',
+ 'tools/tools-common.h',
+ 'tools/tools-common.c',
+ dependencies: libxkbcommon_dep,
+ )
+ tools_dep = declare_dependency(
+ include_directories: [include_directories('tools')],
+ link_with: libxkbcommon_tools_internal,
+ )
+
+ executable('xkbcli', 'tools/xkbcli.c',
+ dependencies: tools_dep, install: true)
+ install_man('tools/xkbcli.1')
+
+ executable('xkbcli-compile-keymap',
+ 'tools/compile-keymap.c',
+ dependencies: tools_dep,
+ install: true,
+ install_dir: dir_libexec)
+ install_man('tools/xkbcli-compile-keymap.1')
+ # The same tool again, but with access to some private APIs.
+ executable('compile-keymap',
+ 'tools/compile-keymap.c',
+ libxkbcommon_sources,
+ dependencies: [tools_dep],
+ c_args: ['-DENABLE_PRIVATE_APIS'],
+ include_directories: [include_directories('src')],
+ install: false)
+ configh_data.set10('HAVE_XKBCLI_COMPILE_KEYMAP', true)
+ executable('xkbcli-how-to-type',
+ 'tools/how-to-type.c',
+ dependencies: tools_dep,
+ install: true,
+ install_dir: dir_libexec)
+ install_man('tools/xkbcli-how-to-type.1')
+ configh_data.set10('HAVE_XKBCLI_HOW_TO_TYPE', true)
+ if cc.has_header('linux/input.h')
+ executable('xkbcli-interactive-evdev',
+ 'tools/interactive-evdev.c',
+ dependencies: tools_dep,
+ install: true,
+ install_dir: dir_libexec)
+ configh_data.set10('HAVE_XKBCLI_INTERACTIVE_EVDEV', true)
+ install_man('tools/xkbcli-interactive-evdev.1')
+ endif
+ if get_option('enable-x11')
+ x11_tools_dep = declare_dependency(
+ link_with: libxkbcommon_x11,
+ dependencies: [
+ tools_dep,
+ xcb_dep,
+ xcb_xkb_dep,
+ ],
+ )
+ executable('xkbcli-interactive-x11',
+ 'tools/interactive-x11.c',
+ dependencies: x11_tools_dep,
+ install: true,
+ install_dir: dir_libexec)
+ install_man('tools/xkbcli-interactive-x11.1')
+ configh_data.set10('HAVE_XKBCLI_INTERACTIVE_X11', true)
+ endif
+ if get_option('enable-wayland')
+ wayland_client_dep = dependency('wayland-client', version: '>=1.2.0', required: false)
+ wayland_protocols_dep = dependency('wayland-protocols', version: '>=1.12', required: false)
+ wayland_scanner_dep = dependency('wayland-scanner', required: false, native: true)
+ if not wayland_client_dep.found() or not wayland_protocols_dep.found() or not wayland_scanner_dep.found()
+ error('''The Wayland xkbcli programs require wayland-client >= 1.2.0, wayland-protocols >= 1.7 which were not found.
+You can disable the Wayland xkbcli programs with -Denable-wayland=false.''')
+ endif
+
+ wayland_scanner = find_program(wayland_scanner_dep.get_pkgconfig_variable('wayland_scanner'))
+ wayland_scanner_code_gen = generator(
+ wayland_scanner,
+ output: '@BASENAME@-protocol.c',
+ arguments: ['code', '@INPUT@', '@OUTPUT@'],
+ )
+ wayland_scanner_client_header_gen = generator(
+ wayland_scanner,
+ output: '@BASENAME@-client-protocol.h',
+ arguments: ['client-header', '@INPUT@', '@OUTPUT@'],
+ )
+ wayland_protocols_datadir = wayland_protocols_dep.get_pkgconfig_variable('pkgdatadir')
+ xdg_shell_xml = wayland_protocols_datadir/'stable/xdg-shell/xdg-shell.xml'
+ xdg_shell_sources = [
+ wayland_scanner_code_gen.process(xdg_shell_xml),
+ wayland_scanner_client_header_gen.process(xdg_shell_xml),
+ ]
+ executable('xkbcli-interactive-wayland',
+ 'tools/interactive-wayland.c',
+ xdg_shell_sources,
+ dependencies: [tools_dep, wayland_client_dep],
+ install: true,
+ install_dir: dir_libexec)
+ install_man('tools/xkbcli-interactive-wayland.1')
+ configh_data.set10('HAVE_XKBCLI_INTERACTIVE_WAYLAND', true)
+ endif
+
+ if get_option('enable-xkbregistry')
+ configh_data.set10('HAVE_XKBCLI_LIST', true)
+ executable('xkbcli-list',
+ 'tools/registry-list.c',
+ dependencies: dep_libxkbregistry,
+ install: true,
+ install_dir: dir_libexec)
+ install_man('tools/xkbcli-list.1')
+ endif
+endif
+
+
+# xkeyboard-config "verifier"
+xkct_config = configuration_data()
+xkct_config.set('MESON_BUILD_ROOT', meson.build_root())
+xkct_config.set('XKB_CONFIG_ROOT', XKBCONFIGROOT)
+configure_file(input: 'test/xkeyboard-config-test.py.in',
+ output: 'xkeyboard-config-test',
+ configuration: xkct_config)
+
# Tests
test_env = environment()
test_env.set('XKB_LOG_LEVEL', 'debug')
test_env.set('XKB_LOG_VERBOSITY', '10')
test_env.set('top_srcdir', meson.source_root())
test_env.set('top_builddir', meson.build_root())
+test_env.set('HAVE_XKBCLI_INTERACTIVE_EVDEV', configh_data.get('HAVE_XKBCLI_INTERACTIVE_EVDEV', 0).to_string())
+test_env.set('HAVE_XKBCLI_INTERACTIVE_WAYLAND', configh_data.get('HAVE_XKBCLI_INTERACTIVE_WAYLAND', 0).to_string())
+test_env.set('HAVE_XKBCLI_INTERACTIVE_X11', configh_data.get('HAVE_XKBCLI_INTERACTIVE_X11', 0).to_string())
+test_env.set('HAVE_XKBCLI_LIST', configh_data.get('HAVE_XKBCLI_LIST', 0).to_string())
test_configh_data = configuration_data()
test_configh_data.set_quoted('TEST_XKB_CONFIG_ROOT', meson.source_root()/'test'/'data')
@@ -519,6 +650,12 @@ if get_option('enable-xkbregistry')
env: test_env,
)
endif
+if build_tools
+ test('tool-option-parsing',
+ find_program('test/tool-option-parsing.py'),
+ env: test_env,
+ suite: ['python-tests'])
+endif
valgrind = find_program('valgrind', required: false)
if valgrind.found()
@@ -538,135 +675,6 @@ endif
executable('fuzz-keymap', 'fuzz/keymap/target.c', dependencies: test_dep)
executable('fuzz-compose', 'fuzz/compose/target.c', dependencies: test_dep)
-man_pages = []
-
-# Tools
-build_tools = have_getopt_long
-if build_tools
- libxkbcommon_tools_internal = static_library(
- 'tools-internal',
- 'tools/tools-common.h',
- 'tools/tools-common.c',
- dependencies: libxkbcommon_dep,
- )
- tools_dep = declare_dependency(
- include_directories: [include_directories('tools')],
- link_with: libxkbcommon_tools_internal,
- )
-
- executable('xkbcli', 'tools/xkbcli.c',
- dependencies: tools_dep, install: true)
- install_man('tools/xkbcli.1')
-
- executable('xkbcli-compile-keymap',
- 'tools/compile-keymap.c',
- dependencies: tools_dep,
- install: true,
- install_dir: dir_libexec)
- install_man('tools/xkbcli-compile-keymap.1')
- # The same tool again, but with access to some private APIs.
- executable('compile-keymap',
- 'tools/compile-keymap.c',
- libxkbcommon_sources,
- dependencies: [tools_dep],
- c_args: ['-DENABLE_PRIVATE_APIS'],
- include_directories: [include_directories('src')],
- install: false)
- configh_data.set10('HAVE_XKBCLI_COMPILE_KEYMAP', true)
- executable('xkbcli-how-to-type',
- 'tools/how-to-type.c',
- dependencies: tools_dep,
- install: true,
- install_dir: dir_libexec)
- install_man('tools/xkbcli-how-to-type.1')
- configh_data.set10('HAVE_XKBCLI_HOW_TO_TYPE', true)
- if cc.has_header('linux/input.h')
- executable('xkbcli-interactive-evdev',
- 'tools/interactive-evdev.c',
- dependencies: tools_dep,
- install: true,
- install_dir: dir_libexec)
- configh_data.set10('HAVE_XKBCLI_INTERACTIVE_EVDEV', true)
- install_man('tools/xkbcli-interactive-evdev.1')
- endif
- if get_option('enable-x11')
- x11_tools_dep = declare_dependency(
- link_with: libxkbcommon_x11,
- dependencies: [
- tools_dep,
- xcb_dep,
- xcb_xkb_dep,
- ],
- )
- executable('xkbcli-interactive-x11',
- 'tools/interactive-x11.c',
- dependencies: x11_tools_dep,
- install: true,
- install_dir: dir_libexec)
- install_man('tools/xkbcli-interactive-x11.1')
- configh_data.set10('HAVE_XKBCLI_INTERACTIVE_X11', true)
- endif
- if get_option('enable-wayland')
- wayland_client_dep = dependency('wayland-client', version: '>=1.2.0', required: false)
- wayland_protocols_dep = dependency('wayland-protocols', version: '>=1.12', required: false)
- wayland_scanner_dep = dependency('wayland-scanner', required: false, native: true)
- if not wayland_client_dep.found() or not wayland_protocols_dep.found() or not wayland_scanner_dep.found()
- error('''The Wayland xkbcli programs require wayland-client >= 1.2.0, wayland-protocols >= 1.7 which were not found.
-You can disable the Wayland xkbcli programs with -Denable-wayland=false.''')
- endif
-
- wayland_scanner = find_program(wayland_scanner_dep.get_pkgconfig_variable('wayland_scanner'))
- wayland_scanner_code_gen = generator(
- wayland_scanner,
- output: '@BASENAME@-protocol.c',
- arguments: ['code', '@INPUT@', '@OUTPUT@'],
- )
- wayland_scanner_client_header_gen = generator(
- wayland_scanner,
- output: '@BASENAME@-client-protocol.h',
- arguments: ['client-header', '@INPUT@', '@OUTPUT@'],
- )
- wayland_protocols_datadir = wayland_protocols_dep.get_pkgconfig_variable('pkgdatadir')
- xdg_shell_xml = wayland_protocols_datadir/'stable/xdg-shell/xdg-shell.xml'
- xdg_shell_sources = [
- wayland_scanner_code_gen.process(xdg_shell_xml),
- wayland_scanner_client_header_gen.process(xdg_shell_xml),
- ]
- executable('xkbcli-interactive-wayland',
- 'tools/interactive-wayland.c',
- xdg_shell_sources,
- dependencies: [tools_dep, wayland_client_dep],
- install: true,
- install_dir: dir_libexec)
- install_man('tools/xkbcli-interactive-wayland.1')
- configh_data.set10('HAVE_XKBCLI_INTERACTIVE_WAYLAND', true)
- endif
-
- if get_option('enable-xkbregistry')
- configh_data.set10('HAVE_XKBCLI_LIST', true)
- executable('xkbcli-list',
- 'tools/registry-list.c',
- dependencies: dep_libxkbregistry,
- install: true,
- install_dir: dir_libexec)
- install_man('tools/xkbcli-list.1')
- endif
-
- test('tool-option-parsing',
- find_program('test/tool-option-parsing.py'),
- env: test_env,
- suite: ['python-tests'])
-endif
-
-
-# xkeyboard-config "verifier"
-xkct_config = configuration_data()
-xkct_config.set('MESON_BUILD_ROOT', meson.build_root())
-xkct_config.set('XKB_CONFIG_ROOT', XKBCONFIGROOT)
-configure_file(input: 'test/xkeyboard-config-test.py.in',
- output: 'xkeyboard-config-test',
- configuration: xkct_config)
-
# Benchmarks.
libxkbcommon_bench_internal = static_library(
diff --git a/src/registry.c b/src/registry.c
index d3d95f5..dcaaa1b 100644
--- a/src/registry.c
+++ b/src/registry.c
@@ -133,6 +133,7 @@ static bool
parse(struct rxkb_context *ctx, const char *path,
enum rxkb_popularity popularity);
+ATTR_PRINTF(3, 4)
static void
rxkb_log(struct rxkb_context *ctx, enum rxkb_log_level level,
const char *fmt, ...)
diff --git a/src/utils.h b/src/utils.h
index d9827c0..cd3e9b1 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -30,7 +30,7 @@
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
-#if defined(HAVE_EACCESS) || defined(HAVE_EUIDACCESS)
+#if HAVE_UNISTD_H
#include <unistd.h>
#else
/* Required on Windows where unistd.h doesn't exist */
diff --git a/src/xkbcomp/.gitignore b/src/xkbcomp/.gitignore
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/xkbcomp/.gitignore
diff --git a/src/xkbcomp/parser.c b/src/xkbcomp/parser.c
index 26d7a57..5cc10e4 100644
--- a/src/xkbcomp/parser.c
+++ b/src/xkbcomp/parser.c
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.3. */
+/* A Bison parser, made by GNU Bison 3.7.2. */
/* Bison implementation for Yacc-like parsers in C
@@ -49,7 +49,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.6.3"
+#define YYBISON_VERSION "3.7.2"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -126,7 +126,7 @@ resolve_keysym(const char *name, xkb_keysym_t *sym_rtrn)
#define param_scanner param->scanner
-#line 130 "xkbcommon@sha/parser.c"
+#line 130 "libxkbcommon.so.0.0.0.p/parser.c"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -149,140 +149,7 @@ resolve_keysym(const char *name, xkb_keysym_t *sym_rtrn)
# endif
# endif
-/* Use api.header.include to #include this header
- instead of duplicating it here. */
-#ifndef YY__XKBCOMMON_XKBCOMMON_SHA_PARSER_H_INCLUDED
-# define YY__XKBCOMMON_XKBCOMMON_SHA_PARSER_H_INCLUDED
-/* Debug traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int _xkbcommon_debug;
-#endif
-
-/* Token kinds. */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
- enum yytokentype
- {
- YYEMPTY = -2,
- END_OF_FILE = 0, /* END_OF_FILE */
- YYerror = 256, /* error */
- YYUNDEF = 257, /* "invalid token" */
- ERROR_TOK = 255, /* ERROR_TOK */
- XKB_KEYMAP = 1, /* XKB_KEYMAP */
- XKB_KEYCODES = 2, /* XKB_KEYCODES */
- XKB_TYPES = 3, /* XKB_TYPES */
- XKB_SYMBOLS = 4, /* XKB_SYMBOLS */
- XKB_COMPATMAP = 5, /* XKB_COMPATMAP */
- XKB_GEOMETRY = 6, /* XKB_GEOMETRY */
- XKB_SEMANTICS = 7, /* XKB_SEMANTICS */
- XKB_LAYOUT = 8, /* XKB_LAYOUT */
- INCLUDE = 10, /* INCLUDE */
- OVERRIDE = 11, /* OVERRIDE */
- AUGMENT = 12, /* AUGMENT */
- REPLACE = 13, /* REPLACE */
- ALTERNATE = 14, /* ALTERNATE */
- VIRTUAL_MODS = 20, /* VIRTUAL_MODS */
- TYPE = 21, /* TYPE */
- INTERPRET = 22, /* INTERPRET */
- ACTION_TOK = 23, /* ACTION_TOK */
- KEY = 24, /* KEY */
- ALIAS = 25, /* ALIAS */
- GROUP = 26, /* GROUP */
- MODIFIER_MAP = 27, /* MODIFIER_MAP */
- INDICATOR = 28, /* INDICATOR */
- SHAPE = 29, /* SHAPE */
- KEYS = 30, /* KEYS */
- ROW = 31, /* ROW */
- SECTION = 32, /* SECTION */
- OVERLAY = 33, /* OVERLAY */
- TEXT = 34, /* TEXT */
- OUTLINE = 35, /* OUTLINE */
- SOLID = 36, /* SOLID */
- LOGO = 37, /* LOGO */
- VIRTUAL = 38, /* VIRTUAL */
- EQUALS = 40, /* EQUALS */
- PLUS = 41, /* PLUS */
- MINUS = 42, /* MINUS */
- DIVIDE = 43, /* DIVIDE */
- TIMES = 44, /* TIMES */
- OBRACE = 45, /* OBRACE */
- CBRACE = 46, /* CBRACE */
- OPAREN = 47, /* OPAREN */
- CPAREN = 48, /* CPAREN */
- OBRACKET = 49, /* OBRACKET */
- CBRACKET = 50, /* CBRACKET */
- DOT = 51, /* DOT */
- COMMA = 52, /* COMMA */
- SEMI = 53, /* SEMI */
- EXCLAM = 54, /* EXCLAM */
- INVERT = 55, /* INVERT */
- STRING = 60, /* STRING */
- INTEGER = 61, /* INTEGER */
- FLOAT = 62, /* FLOAT */
- IDENT = 63, /* IDENT */
- KEYNAME = 64, /* KEYNAME */
- PARTIAL = 70, /* PARTIAL */
- DEFAULT = 71, /* DEFAULT */
- HIDDEN = 72, /* HIDDEN */
- ALPHANUMERIC_KEYS = 73, /* ALPHANUMERIC_KEYS */
- MODIFIER_KEYS = 74, /* MODIFIER_KEYS */
- KEYPAD_KEYS = 75, /* KEYPAD_KEYS */
- FUNCTION_KEYS = 76, /* FUNCTION_KEYS */
- ALTERNATE_GROUP = 77 /* ALTERNATE_GROUP */
- };
- typedef enum yytokentype yytoken_kind_t;
-#endif
-
-/* Value type. */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-union YYSTYPE
-{
-#line 164 "../src/xkbcomp/parser.y"
-
- int64_t num;
- enum xkb_file_type file_type;
- char *str;
- xkb_atom_t atom;
- enum merge_mode merge;
- enum xkb_map_flags mapFlags;
- xkb_keysym_t keysym;
- ParseCommon *any;
- struct { ParseCommon *head; ParseCommon *last; } anyList;
- ExprDef *expr;
- struct { ExprDef *head; ExprDef *last; } exprList;
- VarDef *var;
- struct { VarDef *head; VarDef *last; } varList;
- VModDef *vmod;
- struct { VModDef *head; VModDef *last; } vmodList;
- InterpDef *interp;
- KeyTypeDef *keyType;
- SymbolsDef *syms;
- ModMapDef *modMask;
- GroupCompatDef *groupCompat;
- LedMapDef *ledMap;
- LedNameDef *ledName;
- KeycodeDef *keyCode;
- KeyAliasDef *keyAlias;
- void *geom;
- XkbFile *file;
- struct { XkbFile *head; XkbFile *last; } fileList;
-
-#line 274 "xkbcommon@sha/parser.c"
-
-};
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-
-int _xkbcommon_parse (struct parser_param *param);
-
-#endif /* !YY__XKBCOMMON_XKBCOMMON_SHA_PARSER_H_INCLUDED */
+#include "parser.h"
/* Symbol kind. */
enum yysymbol_kind_t
{
@@ -744,6 +611,7 @@ union yyalloc
/* YYNSTATES -- Number of states. */
#define YYNSTATES 334
+/* YYMAXUTOK -- Last valid token kind. */
#define YYMAXUTOK 257
@@ -1446,250 +1314,250 @@ yydestruct (const char *yymsg,
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
switch (yykind)
{
- case 52: /* STRING */
+ case YYSYMBOL_STRING: /* STRING */
#line 238 "../src/xkbcomp/parser.y"
{ free(((*yyvaluep).str)); }
-#line 1453 "xkbcommon@sha/parser.c"
+#line 1321 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 55: /* IDENT */
+ case YYSYMBOL_IDENT: /* IDENT */
#line 238 "../src/xkbcomp/parser.y"
{ free(((*yyvaluep).str)); }
-#line 1459 "xkbcommon@sha/parser.c"
+#line 1327 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 66: /* XkbFile */
+ case YYSYMBOL_XkbFile: /* XkbFile */
#line 236 "../src/xkbcomp/parser.y"
{ if (!param->rtrn) FreeXkbFile(((*yyvaluep).file)); }
-#line 1465 "xkbcommon@sha/parser.c"
+#line 1333 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 67: /* XkbCompositeMap */
+ case YYSYMBOL_XkbCompositeMap: /* XkbCompositeMap */
#line 236 "../src/xkbcomp/parser.y"
{ if (!param->rtrn) FreeXkbFile(((*yyvaluep).file)); }
-#line 1471 "xkbcommon@sha/parser.c"
+#line 1339 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 69: /* XkbMapConfigList */
+ case YYSYMBOL_XkbMapConfigList: /* XkbMapConfigList */
#line 237 "../src/xkbcomp/parser.y"
{ FreeXkbFile(((*yyvaluep).fileList).head); }
-#line 1477 "xkbcommon@sha/parser.c"
+#line 1345 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 70: /* XkbMapConfig */
+ case YYSYMBOL_XkbMapConfig: /* XkbMapConfig */
#line 236 "../src/xkbcomp/parser.y"
{ if (!param->rtrn) FreeXkbFile(((*yyvaluep).file)); }
-#line 1483 "xkbcommon@sha/parser.c"
+#line 1351 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 75: /* DeclList */
+ case YYSYMBOL_DeclList: /* DeclList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).anyList).head); }
-#line 1489 "xkbcommon@sha/parser.c"
+#line 1357 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 76: /* Decl */
+ case YYSYMBOL_Decl: /* Decl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).any)); }
-#line 1495 "xkbcommon@sha/parser.c"
+#line 1363 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 77: /* VarDecl */
+ case YYSYMBOL_VarDecl: /* VarDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).var)); }
-#line 1501 "xkbcommon@sha/parser.c"
+#line 1369 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 78: /* KeyNameDecl */
+ case YYSYMBOL_KeyNameDecl: /* KeyNameDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).keyCode)); }
-#line 1507 "xkbcommon@sha/parser.c"
+#line 1375 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 79: /* KeyAliasDecl */
+ case YYSYMBOL_KeyAliasDecl: /* KeyAliasDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).keyAlias)); }
-#line 1513 "xkbcommon@sha/parser.c"
+#line 1381 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 80: /* VModDecl */
+ case YYSYMBOL_VModDecl: /* VModDecl */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).vmodList).head); }
-#line 1519 "xkbcommon@sha/parser.c"
+#line 1387 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 81: /* VModDefList */
+ case YYSYMBOL_VModDefList: /* VModDefList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).vmodList).head); }
-#line 1525 "xkbcommon@sha/parser.c"
+#line 1393 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 82: /* VModDef */
+ case YYSYMBOL_VModDef: /* VModDef */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).vmod)); }
-#line 1531 "xkbcommon@sha/parser.c"
+#line 1399 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 83: /* InterpretDecl */
+ case YYSYMBOL_InterpretDecl: /* InterpretDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).interp)); }
-#line 1537 "xkbcommon@sha/parser.c"
+#line 1405 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 84: /* InterpretMatch */
+ case YYSYMBOL_InterpretMatch: /* InterpretMatch */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).interp)); }
-#line 1543 "xkbcommon@sha/parser.c"
+#line 1411 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 85: /* VarDeclList */
+ case YYSYMBOL_VarDeclList: /* VarDeclList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).varList).head); }
-#line 1549 "xkbcommon@sha/parser.c"
+#line 1417 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 86: /* KeyTypeDecl */
+ case YYSYMBOL_KeyTypeDecl: /* KeyTypeDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).keyType)); }
-#line 1555 "xkbcommon@sha/parser.c"
+#line 1423 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 87: /* SymbolsDecl */
+ case YYSYMBOL_SymbolsDecl: /* SymbolsDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).syms)); }
-#line 1561 "xkbcommon@sha/parser.c"
+#line 1429 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 88: /* SymbolsBody */
+ case YYSYMBOL_SymbolsBody: /* SymbolsBody */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).varList).head); }
-#line 1567 "xkbcommon@sha/parser.c"
+#line 1435 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 89: /* SymbolsVarDecl */
+ case YYSYMBOL_SymbolsVarDecl: /* SymbolsVarDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).var)); }
-#line 1573 "xkbcommon@sha/parser.c"
+#line 1441 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 90: /* ArrayInit */
+ case YYSYMBOL_ArrayInit: /* ArrayInit */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1579 "xkbcommon@sha/parser.c"
+#line 1447 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 91: /* GroupCompatDecl */
+ case YYSYMBOL_GroupCompatDecl: /* GroupCompatDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).groupCompat)); }
-#line 1585 "xkbcommon@sha/parser.c"
+#line 1453 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 92: /* ModMapDecl */
+ case YYSYMBOL_ModMapDecl: /* ModMapDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).modMask)); }
-#line 1591 "xkbcommon@sha/parser.c"
+#line 1459 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 93: /* LedMapDecl */
+ case YYSYMBOL_LedMapDecl: /* LedMapDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).ledMap)); }
-#line 1597 "xkbcommon@sha/parser.c"
+#line 1465 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 94: /* LedNameDecl */
+ case YYSYMBOL_LedNameDecl: /* LedNameDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).ledName)); }
-#line 1603 "xkbcommon@sha/parser.c"
+#line 1471 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 108: /* CoordList */
+ case YYSYMBOL_CoordList: /* CoordList */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1609 "xkbcommon@sha/parser.c"
+#line 1477 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 109: /* Coord */
+ case YYSYMBOL_Coord: /* Coord */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1615 "xkbcommon@sha/parser.c"
+#line 1483 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 116: /* OptExprList */
+ case YYSYMBOL_OptExprList: /* OptExprList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).exprList).head); }
-#line 1621 "xkbcommon@sha/parser.c"
+#line 1489 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 117: /* ExprList */
+ case YYSYMBOL_ExprList: /* ExprList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).exprList).head); }
-#line 1627 "xkbcommon@sha/parser.c"
+#line 1495 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 118: /* Expr */
+ case YYSYMBOL_Expr: /* Expr */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1633 "xkbcommon@sha/parser.c"
+#line 1501 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 119: /* Term */
+ case YYSYMBOL_Term: /* Term */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1639 "xkbcommon@sha/parser.c"
+#line 1507 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 120: /* ActionList */
+ case YYSYMBOL_ActionList: /* ActionList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).exprList).head); }
-#line 1645 "xkbcommon@sha/parser.c"
+#line 1513 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 121: /* Action */
+ case YYSYMBOL_Action: /* Action */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1651 "xkbcommon@sha/parser.c"
+#line 1519 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 122: /* Lhs */
+ case YYSYMBOL_Lhs: /* Lhs */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1657 "xkbcommon@sha/parser.c"
+#line 1525 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 123: /* Terminal */
+ case YYSYMBOL_Terminal: /* Terminal */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1663 "xkbcommon@sha/parser.c"
+#line 1531 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 124: /* OptKeySymList */
+ case YYSYMBOL_OptKeySymList: /* OptKeySymList */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1669 "xkbcommon@sha/parser.c"
+#line 1537 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 125: /* KeySymList */
+ case YYSYMBOL_KeySymList: /* KeySymList */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1675 "xkbcommon@sha/parser.c"
+#line 1543 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 126: /* KeySyms */
+ case YYSYMBOL_KeySyms: /* KeySyms */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1681 "xkbcommon@sha/parser.c"
+#line 1549 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 135: /* OptMapName */
+ case YYSYMBOL_OptMapName: /* OptMapName */
#line 238 "../src/xkbcomp/parser.y"
{ free(((*yyvaluep).str)); }
-#line 1687 "xkbcommon@sha/parser.c"
+#line 1555 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 136: /* MapName */
+ case YYSYMBOL_MapName: /* MapName */
#line 238 "../src/xkbcomp/parser.y"
{ free(((*yyvaluep).str)); }
-#line 1693 "xkbcommon@sha/parser.c"
+#line 1561 "libxkbcommon.so.0.0.0.p/parser.c"
break;
default:
@@ -1710,7 +1578,7 @@ yydestruct (const char *yymsg,
int
yyparse (struct parser_param *param)
{
-/* The lookahead symbol. */
+/* Lookahead token kind. */
int yychar;
@@ -1721,36 +1589,32 @@ YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
/* Number of syntax errors so far. */
- int yynerrs;
+ int yynerrs = 0;
- yy_state_fast_t yystate;
+ yy_state_fast_t yystate = 0;
/* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
+ int yyerrstatus = 0;
- /* The stacks and their tools:
- 'yyss': related to states.
- 'yyvs': related to semantic values.
-
- Refer to the stacks through separate pointers, to allow yyoverflow
+ /* Refer to the stacks through separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
/* Their size. */
- YYPTRDIFF_T yystacksize;
+ YYPTRDIFF_T yystacksize = YYINITDEPTH;
- /* The state stack. */
+ /* The state stack: array, bottom, top. */
yy_state_t yyssa[YYINITDEPTH];
- yy_state_t *yyss;
- yy_state_t *yyssp;
+ yy_state_t *yyss = yyssa;
+ yy_state_t *yyssp = yyss;
- /* The semantic value stack. */
+ /* The semantic value stack: array, bottom, top. */
YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs;
- YYSTYPE *yyvsp;
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp = yyvs;
int yyn;
/* The return value of yyparse. */
int yyresult;
- /* Lookahead token as an internal (translated) token number. */
+ /* Lookahead symbol kind. */
yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
/* The variables used to return semantic value and location from the
action routines. */
@@ -1764,15 +1628,6 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
Keep to zero when no symbol should be popped. */
int yylen = 0;
- yynerrs = 0;
- yystate = 0;
- yyerrstatus = 0;
-
- yystacksize = YYINITDEPTH;
- yyssp = yyss = yyssa;
- yyvsp = yyvs = yyvsa;
-
-
YYDPRINTF ((stderr, "Starting parse\n"));
yychar = YYEMPTY; /* Cause a token to be read. */
@@ -1973,171 +1828,171 @@ yyreduce:
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
- case 2:
+ case 2: /* XkbFile: XkbCompositeMap */
#line 255 "../src/xkbcomp/parser.y"
{ (yyval.file) = param->rtrn = (yyvsp[0].file); param->more_maps = !!param->rtrn; }
-#line 1980 "xkbcommon@sha/parser.c"
+#line 1835 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 3:
+ case 3: /* XkbFile: XkbMapConfig */
#line 257 "../src/xkbcomp/parser.y"
{ (yyval.file) = param->rtrn = (yyvsp[0].file); param->more_maps = !!param->rtrn; YYACCEPT; }
-#line 1986 "xkbcommon@sha/parser.c"
+#line 1841 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 4:
+ case 4: /* XkbFile: END_OF_FILE */
#line 259 "../src/xkbcomp/parser.y"
{ (yyval.file) = param->rtrn = NULL; param->more_maps = false; }
-#line 1992 "xkbcommon@sha/parser.c"
+#line 1847 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 5:
+ case 5: /* XkbCompositeMap: OptFlags XkbCompositeType OptMapName OBRACE XkbMapConfigList CBRACE SEMI */
#line 265 "../src/xkbcomp/parser.y"
{ (yyval.file) = XkbFileCreate((yyvsp[-5].file_type), (yyvsp[-4].str), (ParseCommon *) (yyvsp[-2].fileList).head, (yyvsp[-6].mapFlags)); }
-#line 1998 "xkbcommon@sha/parser.c"
+#line 1853 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 6:
+ case 6: /* XkbCompositeType: XKB_KEYMAP */
#line 268 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_KEYMAP; }
-#line 2004 "xkbcommon@sha/parser.c"
+#line 1859 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 7:
+ case 7: /* XkbCompositeType: XKB_SEMANTICS */
#line 269 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_KEYMAP; }
-#line 2010 "xkbcommon@sha/parser.c"
+#line 1865 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 8:
+ case 8: /* XkbCompositeType: XKB_LAYOUT */
#line 270 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_KEYMAP; }
-#line 2016 "xkbcommon@sha/parser.c"
+#line 1871 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 9:
+ case 9: /* XkbMapConfigList: XkbMapConfigList XkbMapConfig */
#line 274 "../src/xkbcomp/parser.y"
{ (yyval.fileList).head = (yyvsp[-1].fileList).head; (yyval.fileList).last->common.next = &(yyvsp[0].file)->common; (yyval.fileList).last = (yyvsp[0].file); }
-#line 2022 "xkbcommon@sha/parser.c"
+#line 1877 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 10:
+ case 10: /* XkbMapConfigList: XkbMapConfig */
#line 276 "../src/xkbcomp/parser.y"
{ (yyval.fileList).head = (yyval.fileList).last = (yyvsp[0].file); }
-#line 2028 "xkbcommon@sha/parser.c"
+#line 1883 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 11:
+ case 11: /* XkbMapConfig: OptFlags FileType OptMapName OBRACE DeclList CBRACE SEMI */
#line 282 "../src/xkbcomp/parser.y"
{
(yyval.file) = XkbFileCreate((yyvsp[-5].file_type), (yyvsp[-4].str), (yyvsp[-2].anyList).head, (yyvsp[-6].mapFlags));
}
-#line 2036 "xkbcommon@sha/parser.c"
+#line 1891 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 12:
+ case 12: /* FileType: XKB_KEYCODES */
#line 287 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_KEYCODES; }
-#line 2042 "xkbcommon@sha/parser.c"
+#line 1897 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 13:
+ case 13: /* FileType: XKB_TYPES */
#line 288 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_TYPES; }
-#line 2048 "xkbcommon@sha/parser.c"
+#line 1903 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 14:
+ case 14: /* FileType: XKB_COMPATMAP */
#line 289 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_COMPAT; }
-#line 2054 "xkbcommon@sha/parser.c"
+#line 1909 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 15:
+ case 15: /* FileType: XKB_SYMBOLS */
#line 290 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_SYMBOLS; }
-#line 2060 "xkbcommon@sha/parser.c"
+#line 1915 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 16:
+ case 16: /* FileType: XKB_GEOMETRY */
#line 291 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_GEOMETRY; }
-#line 2066 "xkbcommon@sha/parser.c"
+#line 1921 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 17:
+ case 17: /* OptFlags: Flags */
#line 294 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = (yyvsp[0].mapFlags); }
-#line 2072 "xkbcommon@sha/parser.c"
+#line 1927 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 18:
+ case 18: /* OptFlags: %empty */
#line 295 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = 0; }
-#line 2078 "xkbcommon@sha/parser.c"
+#line 1933 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 19:
+ case 19: /* Flags: Flags Flag */
#line 298 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = ((yyvsp[-1].mapFlags) | (yyvsp[0].mapFlags)); }
-#line 2084 "xkbcommon@sha/parser.c"
+#line 1939 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 20:
+ case 20: /* Flags: Flag */
#line 299 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = (yyvsp[0].mapFlags); }
-#line 2090 "xkbcommon@sha/parser.c"
+#line 1945 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 21:
+ case 21: /* Flag: PARTIAL */
#line 302 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_IS_PARTIAL; }
-#line 2096 "xkbcommon@sha/parser.c"
+#line 1951 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 22:
+ case 22: /* Flag: DEFAULT */
#line 303 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_IS_DEFAULT; }
-#line 2102 "xkbcommon@sha/parser.c"
+#line 1957 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 23:
+ case 23: /* Flag: HIDDEN */
#line 304 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_IS_HIDDEN; }
-#line 2108 "xkbcommon@sha/parser.c"
+#line 1963 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 24:
+ case 24: /* Flag: ALPHANUMERIC_KEYS */
#line 305 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_HAS_ALPHANUMERIC; }
-#line 2114 "xkbcommon@sha/parser.c"
+#line 1969 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 25:
+ case 25: /* Flag: MODIFIER_KEYS */
#line 306 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_HAS_MODIFIER; }
-#line 2120 "xkbcommon@sha/parser.c"
+#line 1975 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 26:
+ case 26: /* Flag: KEYPAD_KEYS */
#line 307 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_HAS_KEYPAD; }
-#line 2126 "xkbcommon@sha/parser.c"
+#line 1981 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 27:
+ case 27: /* Flag: FUNCTION_KEYS */
#line 308 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_HAS_FN; }
-#line 2132 "xkbcommon@sha/parser.c"
+#line 1987 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 28:
+ case 28: /* Flag: ALTERNATE_GROUP */
#line 309 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_IS_ALTGR; }
-#line 2138 "xkbcommon@sha/parser.c"
+#line 1993 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 29:
+ case 29: /* DeclList: DeclList Decl */
#line 313 "../src/xkbcomp/parser.y"
{
if ((yyvsp[0].any)) {
@@ -2148,10 +2003,10 @@ yyreduce:
}
}
}
-#line 2152 "xkbcommon@sha/parser.c"
+#line 2007 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 30:
+ case 30: /* DeclList: DeclList OptMergeMode VModDecl */
#line 328 "../src/xkbcomp/parser.y"
{
for (VModDef *vmod = (yyvsp[0].vmodList).head; vmod; vmod = (VModDef *) vmod->common.next)
@@ -2162,649 +2017,649 @@ yyreduce:
(yyval.anyList).head = &(yyvsp[0].vmodList).head->common; (yyval.anyList).last = &(yyvsp[0].vmodList).last->common;
}
}
-#line 2166 "xkbcommon@sha/parser.c"
+#line 2021 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 31:
+ case 31: /* DeclList: %empty */
#line 337 "../src/xkbcomp/parser.y"
{ (yyval.anyList).head = (yyval.anyList).last = NULL; }
-#line 2172 "xkbcommon@sha/parser.c"
+#line 2027 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 32:
+ case 32: /* Decl: OptMergeMode VarDecl */
#line 341 "../src/xkbcomp/parser.y"
{
(yyvsp[0].var)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].var);
}
-#line 2181 "xkbcommon@sha/parser.c"
+#line 2036 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 33:
+ case 33: /* Decl: OptMergeMode InterpretDecl */
#line 347 "../src/xkbcomp/parser.y"
{
(yyvsp[0].interp)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].interp);
}
-#line 2190 "xkbcommon@sha/parser.c"
+#line 2045 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 34:
+ case 34: /* Decl: OptMergeMode KeyNameDecl */
#line 352 "../src/xkbcomp/parser.y"
{
(yyvsp[0].keyCode)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].keyCode);
}
-#line 2199 "xkbcommon@sha/parser.c"
+#line 2054 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 35:
+ case 35: /* Decl: OptMergeMode KeyAliasDecl */
#line 357 "../src/xkbcomp/parser.y"
{
(yyvsp[0].keyAlias)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].keyAlias);
}
-#line 2208 "xkbcommon@sha/parser.c"
+#line 2063 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 36:
+ case 36: /* Decl: OptMergeMode KeyTypeDecl */
#line 362 "../src/xkbcomp/parser.y"
{
(yyvsp[0].keyType)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].keyType);
}
-#line 2217 "xkbcommon@sha/parser.c"
+#line 2072 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 37:
+ case 37: /* Decl: OptMergeMode SymbolsDecl */
#line 367 "../src/xkbcomp/parser.y"
{
(yyvsp[0].syms)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].syms);
}
-#line 2226 "xkbcommon@sha/parser.c"
+#line 2081 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 38:
+ case 38: /* Decl: OptMergeMode ModMapDecl */
#line 372 "../src/xkbcomp/parser.y"
{
(yyvsp[0].modMask)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].modMask);
}
-#line 2235 "xkbcommon@sha/parser.c"
+#line 2090 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 39:
+ case 39: /* Decl: OptMergeMode GroupCompatDecl */
#line 377 "../src/xkbcomp/parser.y"
{
(yyvsp[0].groupCompat)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].groupCompat);
}
-#line 2244 "xkbcommon@sha/parser.c"
+#line 2099 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 40:
+ case 40: /* Decl: OptMergeMode LedMapDecl */
#line 382 "../src/xkbcomp/parser.y"
{
(yyvsp[0].ledMap)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].ledMap);
}
-#line 2253 "xkbcommon@sha/parser.c"
+#line 2108 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 41:
+ case 41: /* Decl: OptMergeMode LedNameDecl */
#line 387 "../src/xkbcomp/parser.y"
{
(yyvsp[0].ledName)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].ledName);
}
-#line 2262 "xkbcommon@sha/parser.c"
+#line 2117 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 42:
+ case 42: /* Decl: OptMergeMode ShapeDecl */
#line 391 "../src/xkbcomp/parser.y"
{ (yyval.any) = NULL; }
-#line 2268 "xkbcommon@sha/parser.c"
+#line 2123 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 43:
+ case 43: /* Decl: OptMergeMode SectionDecl */
#line 392 "../src/xkbcomp/parser.y"
{ (yyval.any) = NULL; }
-#line 2274 "xkbcommon@sha/parser.c"
+#line 2129 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 44:
+ case 44: /* Decl: OptMergeMode DoodadDecl */
#line 393 "../src/xkbcomp/parser.y"
{ (yyval.any) = NULL; }
-#line 2280 "xkbcommon@sha/parser.c"
+#line 2135 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 45:
+ case 45: /* Decl: MergeMode STRING */
#line 395 "../src/xkbcomp/parser.y"
{
(yyval.any) = (ParseCommon *) IncludeCreate(param->ctx, (yyvsp[0].str), (yyvsp[-1].merge));
free((yyvsp[0].str));
}
-#line 2289 "xkbcommon@sha/parser.c"
+#line 2144 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 46:
+ case 46: /* VarDecl: Lhs EQUALS Expr SEMI */
#line 402 "../src/xkbcomp/parser.y"
{ (yyval.var) = VarCreate((yyvsp[-3].expr), (yyvsp[-1].expr)); }
-#line 2295 "xkbcommon@sha/parser.c"
+#line 2150 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 47:
+ case 47: /* VarDecl: Ident SEMI */
#line 404 "../src/xkbcomp/parser.y"
{ (yyval.var) = BoolVarCreate((yyvsp[-1].atom), true); }
-#line 2301 "xkbcommon@sha/parser.c"
+#line 2156 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 48:
+ case 48: /* VarDecl: EXCLAM Ident SEMI */
#line 406 "../src/xkbcomp/parser.y"
{ (yyval.var) = BoolVarCreate((yyvsp[-1].atom), false); }
-#line 2307 "xkbcommon@sha/parser.c"
+#line 2162 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 49:
+ case 49: /* KeyNameDecl: KEYNAME EQUALS KeyCode SEMI */
#line 410 "../src/xkbcomp/parser.y"
{ (yyval.keyCode) = KeycodeCreate((yyvsp[-3].atom), (yyvsp[-1].num)); }
-#line 2313 "xkbcommon@sha/parser.c"
+#line 2168 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 50:
+ case 50: /* KeyAliasDecl: ALIAS KEYNAME EQUALS KEYNAME SEMI */
#line 414 "../src/xkbcomp/parser.y"
{ (yyval.keyAlias) = KeyAliasCreate((yyvsp[-3].atom), (yyvsp[-1].atom)); }
-#line 2319 "xkbcommon@sha/parser.c"
+#line 2174 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 51:
+ case 51: /* VModDecl: VIRTUAL_MODS VModDefList SEMI */
#line 418 "../src/xkbcomp/parser.y"
{ (yyval.vmodList) = (yyvsp[-1].vmodList); }
-#line 2325 "xkbcommon@sha/parser.c"
+#line 2180 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 52:
+ case 52: /* VModDefList: VModDefList COMMA VModDef */
#line 422 "../src/xkbcomp/parser.y"
{ (yyval.vmodList).head = (yyvsp[-2].vmodList).head; (yyval.vmodList).last->common.next = &(yyvsp[0].vmod)->common; (yyval.vmodList).last = (yyvsp[0].vmod); }
-#line 2331 "xkbcommon@sha/parser.c"
+#line 2186 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 53:
+ case 53: /* VModDefList: VModDef */
#line 424 "../src/xkbcomp/parser.y"
{ (yyval.vmodList).head = (yyval.vmodList).last = (yyvsp[0].vmod); }
-#line 2337 "xkbcommon@sha/parser.c"
+#line 2192 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 54:
+ case 54: /* VModDef: Ident */
#line 428 "../src/xkbcomp/parser.y"
{ (yyval.vmod) = VModCreate((yyvsp[0].atom), NULL); }
-#line 2343 "xkbcommon@sha/parser.c"
+#line 2198 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 55:
+ case 55: /* VModDef: Ident EQUALS Expr */
#line 430 "../src/xkbcomp/parser.y"
{ (yyval.vmod) = VModCreate((yyvsp[-2].atom), (yyvsp[0].expr)); }
-#line 2349 "xkbcommon@sha/parser.c"
+#line 2204 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 56:
+ case 56: /* InterpretDecl: INTERPRET InterpretMatch OBRACE VarDeclList CBRACE SEMI */
#line 436 "../src/xkbcomp/parser.y"
{ (yyvsp[-4].interp)->def = (yyvsp[-2].varList).head; (yyval.interp) = (yyvsp[-4].interp); }
-#line 2355 "xkbcommon@sha/parser.c"
+#line 2210 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 57:
+ case 57: /* InterpretMatch: KeySym PLUS Expr */
#line 440 "../src/xkbcomp/parser.y"
{ (yyval.interp) = InterpCreate((yyvsp[-2].keysym), (yyvsp[0].expr)); }
-#line 2361 "xkbcommon@sha/parser.c"
+#line 2216 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 58:
+ case 58: /* InterpretMatch: KeySym */
#line 442 "../src/xkbcomp/parser.y"
{ (yyval.interp) = InterpCreate((yyvsp[0].keysym), NULL); }
-#line 2367 "xkbcommon@sha/parser.c"
+#line 2222 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 59:
+ case 59: /* VarDeclList: VarDeclList VarDecl */
#line 446 "../src/xkbcomp/parser.y"
{ (yyval.varList).head = (yyvsp[-1].varList).head; (yyval.varList).last->common.next = &(yyvsp[0].var)->common; (yyval.varList).last = (yyvsp[0].var); }
-#line 2373 "xkbcommon@sha/parser.c"
+#line 2228 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 60:
+ case 60: /* VarDeclList: VarDecl */
#line 448 "../src/xkbcomp/parser.y"
{ (yyval.varList).head = (yyval.varList).last = (yyvsp[0].var); }
-#line 2379 "xkbcommon@sha/parser.c"
+#line 2234 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 61:
+ case 61: /* KeyTypeDecl: TYPE String OBRACE VarDeclList CBRACE SEMI */
#line 454 "../src/xkbcomp/parser.y"
{ (yyval.keyType) = KeyTypeCreate((yyvsp[-4].atom), (yyvsp[-2].varList).head); }
-#line 2385 "xkbcommon@sha/parser.c"
+#line 2240 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 62:
+ case 62: /* SymbolsDecl: KEY KEYNAME OBRACE SymbolsBody CBRACE SEMI */
#line 460 "../src/xkbcomp/parser.y"
{ (yyval.syms) = SymbolsCreate((yyvsp[-4].atom), (yyvsp[-2].varList).head); }
-#line 2391 "xkbcommon@sha/parser.c"
+#line 2246 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 63:
+ case 63: /* SymbolsBody: SymbolsBody COMMA SymbolsVarDecl */
#line 464 "../src/xkbcomp/parser.y"
{ (yyval.varList).head = (yyvsp[-2].varList).head; (yyval.varList).last->common.next = &(yyvsp[0].var)->common; (yyval.varList).last = (yyvsp[0].var); }
-#line 2397 "xkbcommon@sha/parser.c"
+#line 2252 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 64:
+ case 64: /* SymbolsBody: SymbolsVarDecl */
#line 466 "../src/xkbcomp/parser.y"
{ (yyval.varList).head = (yyval.varList).last = (yyvsp[0].var); }
-#line 2403 "xkbcommon@sha/parser.c"
+#line 2258 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 65:
+ case 65: /* SymbolsBody: %empty */
#line 467 "../src/xkbcomp/parser.y"
{ (yyval.varList).head = (yyval.varList).last = NULL; }
-#line 2409 "xkbcommon@sha/parser.c"
+#line 2264 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 66:
+ case 66: /* SymbolsVarDecl: Lhs EQUALS Expr */
#line 470 "../src/xkbcomp/parser.y"
{ (yyval.var) = VarCreate((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2415 "xkbcommon@sha/parser.c"
+#line 2270 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 67:
+ case 67: /* SymbolsVarDecl: Lhs EQUALS ArrayInit */
#line 471 "../src/xkbcomp/parser.y"
{ (yyval.var) = VarCreate((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2421 "xkbcommon@sha/parser.c"
+#line 2276 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 68:
+ case 68: /* SymbolsVarDecl: Ident */
#line 472 "../src/xkbcomp/parser.y"
{ (yyval.var) = BoolVarCreate((yyvsp[0].atom), true); }
-#line 2427 "xkbcommon@sha/parser.c"
+#line 2282 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 69:
+ case 69: /* SymbolsVarDecl: EXCLAM Ident */
#line 473 "../src/xkbcomp/parser.y"
{ (yyval.var) = BoolVarCreate((yyvsp[0].atom), false); }
-#line 2433 "xkbcommon@sha/parser.c"
+#line 2288 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 70:
+ case 70: /* SymbolsVarDecl: ArrayInit */
#line 474 "../src/xkbcomp/parser.y"
{ (yyval.var) = VarCreate(NULL, (yyvsp[0].expr)); }
-#line 2439 "xkbcommon@sha/parser.c"
+#line 2294 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 71:
+ case 71: /* ArrayInit: OBRACKET OptKeySymList CBRACKET */
#line 478 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[-1].expr); }
-#line 2445 "xkbcommon@sha/parser.c"
+#line 2300 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 72:
+ case 72: /* ArrayInit: OBRACKET ActionList CBRACKET */
#line 480 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateActionList((yyvsp[-1].exprList).head); }
-#line 2451 "xkbcommon@sha/parser.c"
+#line 2306 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 73:
+ case 73: /* GroupCompatDecl: GROUP Integer EQUALS Expr SEMI */
#line 484 "../src/xkbcomp/parser.y"
{ (yyval.groupCompat) = GroupCompatCreate((yyvsp[-3].num), (yyvsp[-1].expr)); }
-#line 2457 "xkbcommon@sha/parser.c"
+#line 2312 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 74:
+ case 74: /* ModMapDecl: MODIFIER_MAP Ident OBRACE ExprList CBRACE SEMI */
#line 488 "../src/xkbcomp/parser.y"
{ (yyval.modMask) = ModMapCreate((yyvsp[-4].atom), (yyvsp[-2].exprList).head); }
-#line 2463 "xkbcommon@sha/parser.c"
+#line 2318 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 75:
+ case 75: /* LedMapDecl: INDICATOR String OBRACE VarDeclList CBRACE SEMI */
#line 492 "../src/xkbcomp/parser.y"
{ (yyval.ledMap) = LedMapCreate((yyvsp[-4].atom), (yyvsp[-2].varList).head); }
-#line 2469 "xkbcommon@sha/parser.c"
+#line 2324 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 76:
+ case 76: /* LedNameDecl: INDICATOR Integer EQUALS Expr SEMI */
#line 496 "../src/xkbcomp/parser.y"
{ (yyval.ledName) = LedNameCreate((yyvsp[-3].num), (yyvsp[-1].expr), false); }
-#line 2475 "xkbcommon@sha/parser.c"
+#line 2330 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 77:
+ case 77: /* LedNameDecl: VIRTUAL INDICATOR Integer EQUALS Expr SEMI */
#line 498 "../src/xkbcomp/parser.y"
{ (yyval.ledName) = LedNameCreate((yyvsp[-3].num), (yyvsp[-1].expr), true); }
-#line 2481 "xkbcommon@sha/parser.c"
+#line 2336 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 78:
+ case 78: /* ShapeDecl: SHAPE String OBRACE OutlineList CBRACE SEMI */
#line 502 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2487 "xkbcommon@sha/parser.c"
+#line 2342 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 79:
+ case 79: /* ShapeDecl: SHAPE String OBRACE CoordList CBRACE SEMI */
#line 504 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[-2].expr); (yyval.geom) = NULL; }
-#line 2493 "xkbcommon@sha/parser.c"
+#line 2348 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 80:
+ case 80: /* SectionDecl: SECTION String OBRACE SectionBody CBRACE SEMI */
#line 508 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2499 "xkbcommon@sha/parser.c"
+#line 2354 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 81:
+ case 81: /* SectionBody: SectionBody SectionBodyItem */
#line 511 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL;}
-#line 2505 "xkbcommon@sha/parser.c"
+#line 2360 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 82:
+ case 82: /* SectionBody: SectionBodyItem */
#line 512 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2511 "xkbcommon@sha/parser.c"
+#line 2366 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 83:
+ case 83: /* SectionBodyItem: ROW OBRACE RowBody CBRACE SEMI */
#line 516 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2517 "xkbcommon@sha/parser.c"
+#line 2372 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 84:
+ case 84: /* SectionBodyItem: VarDecl */
#line 518 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[0].var)); (yyval.geom) = NULL; }
-#line 2523 "xkbcommon@sha/parser.c"
+#line 2378 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 85:
+ case 85: /* SectionBodyItem: DoodadDecl */
#line 520 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2529 "xkbcommon@sha/parser.c"
+#line 2384 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 86:
+ case 86: /* SectionBodyItem: LedMapDecl */
#line 522 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[0].ledMap)); (yyval.geom) = NULL; }
-#line 2535 "xkbcommon@sha/parser.c"
+#line 2390 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 87:
+ case 87: /* SectionBodyItem: OverlayDecl */
#line 524 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2541 "xkbcommon@sha/parser.c"
+#line 2396 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 88:
+ case 88: /* RowBody: RowBody RowBodyItem */
#line 527 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL;}
-#line 2547 "xkbcommon@sha/parser.c"
+#line 2402 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 89:
+ case 89: /* RowBody: RowBodyItem */
#line 528 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2553 "xkbcommon@sha/parser.c"
+#line 2408 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 90:
+ case 90: /* RowBodyItem: KEYS OBRACE Keys CBRACE SEMI */
#line 531 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2559 "xkbcommon@sha/parser.c"
+#line 2414 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 91:
+ case 91: /* RowBodyItem: VarDecl */
#line 533 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[0].var)); (yyval.geom) = NULL; }
-#line 2565 "xkbcommon@sha/parser.c"
+#line 2420 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 92:
+ case 92: /* Keys: Keys COMMA Key */
#line 536 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2571 "xkbcommon@sha/parser.c"
+#line 2426 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 93:
+ case 93: /* Keys: Key */
#line 537 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2577 "xkbcommon@sha/parser.c"
+#line 2432 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 94:
+ case 94: /* Key: KEYNAME */
#line 541 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2583 "xkbcommon@sha/parser.c"
+#line 2438 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 95:
+ case 95: /* Key: OBRACE ExprList CBRACE */
#line 543 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[-1].exprList).head); (yyval.geom) = NULL; }
-#line 2589 "xkbcommon@sha/parser.c"
+#line 2444 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 96:
+ case 96: /* OverlayDecl: OVERLAY String OBRACE OverlayKeyList CBRACE SEMI */
#line 547 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2595 "xkbcommon@sha/parser.c"
+#line 2450 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 97:
+ case 97: /* OverlayKeyList: OverlayKeyList COMMA OverlayKey */
#line 550 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2601 "xkbcommon@sha/parser.c"
+#line 2456 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 98:
+ case 98: /* OverlayKeyList: OverlayKey */
#line 551 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2607 "xkbcommon@sha/parser.c"
+#line 2462 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 99:
+ case 99: /* OverlayKey: KEYNAME EQUALS KEYNAME */
#line 554 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2613 "xkbcommon@sha/parser.c"
+#line 2468 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 100:
+ case 100: /* OutlineList: OutlineList COMMA OutlineInList */
#line 558 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL;}
-#line 2619 "xkbcommon@sha/parser.c"
+#line 2474 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 101:
+ case 101: /* OutlineList: OutlineInList */
#line 560 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2625 "xkbcommon@sha/parser.c"
+#line 2480 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 102:
+ case 102: /* OutlineInList: OBRACE CoordList CBRACE */
#line 564 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[-1].expr); (yyval.geom) = NULL; }
-#line 2631 "xkbcommon@sha/parser.c"
+#line 2486 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 103:
+ case 103: /* OutlineInList: Ident EQUALS OBRACE CoordList CBRACE */
#line 566 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[-1].expr); (yyval.geom) = NULL; }
-#line 2637 "xkbcommon@sha/parser.c"
+#line 2492 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 104:
+ case 104: /* OutlineInList: Ident EQUALS Expr */
#line 568 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[0].expr)); (yyval.geom) = NULL; }
-#line 2643 "xkbcommon@sha/parser.c"
+#line 2498 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 105:
+ case 105: /* CoordList: CoordList COMMA Coord */
#line 572 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[-2].expr); (void) (yyvsp[0].expr); (yyval.expr) = NULL; }
-#line 2649 "xkbcommon@sha/parser.c"
+#line 2504 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 106:
+ case 106: /* CoordList: Coord */
#line 574 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[0].expr); (yyval.expr) = NULL; }
-#line 2655 "xkbcommon@sha/parser.c"
+#line 2510 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 107:
+ case 107: /* Coord: OBRACKET SignedNumber COMMA SignedNumber CBRACKET */
#line 578 "../src/xkbcomp/parser.y"
{ (yyval.expr) = NULL; }
-#line 2661 "xkbcommon@sha/parser.c"
+#line 2516 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 108:
+ case 108: /* DoodadDecl: DoodadType String OBRACE VarDeclList CBRACE SEMI */
#line 582 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[-2].varList).head); (yyval.geom) = NULL; }
-#line 2667 "xkbcommon@sha/parser.c"
+#line 2522 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 109:
+ case 109: /* DoodadType: TEXT */
#line 585 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 2673 "xkbcommon@sha/parser.c"
+#line 2528 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 110:
+ case 110: /* DoodadType: OUTLINE */
#line 586 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 2679 "xkbcommon@sha/parser.c"
+#line 2534 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 111:
+ case 111: /* DoodadType: SOLID */
#line 587 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 2685 "xkbcommon@sha/parser.c"
+#line 2540 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 112:
+ case 112: /* DoodadType: LOGO */
#line 588 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 2691 "xkbcommon@sha/parser.c"
+#line 2546 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 113:
+ case 113: /* FieldSpec: Ident */
#line 591 "../src/xkbcomp/parser.y"
{ (yyval.atom) = (yyvsp[0].atom); }
-#line 2697 "xkbcommon@sha/parser.c"
+#line 2552 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 114:
+ case 114: /* FieldSpec: Element */
#line 592 "../src/xkbcomp/parser.y"
{ (yyval.atom) = (yyvsp[0].atom); }
-#line 2703 "xkbcommon@sha/parser.c"
+#line 2558 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 115:
+ case 115: /* Element: ACTION_TOK */
#line 596 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "action"); }
-#line 2709 "xkbcommon@sha/parser.c"
+#line 2564 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 116:
+ case 116: /* Element: INTERPRET */
#line 598 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "interpret"); }
-#line 2715 "xkbcommon@sha/parser.c"
+#line 2570 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 117:
+ case 117: /* Element: TYPE */
#line 600 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "type"); }
-#line 2721 "xkbcommon@sha/parser.c"
+#line 2576 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 118:
+ case 118: /* Element: KEY */
#line 602 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "key"); }
-#line 2727 "xkbcommon@sha/parser.c"
+#line 2582 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 119:
+ case 119: /* Element: GROUP */
#line 604 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "group"); }
-#line 2733 "xkbcommon@sha/parser.c"
+#line 2588 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 120:
+ case 120: /* Element: MODIFIER_MAP */
#line 606 "../src/xkbcomp/parser.y"
{(yyval.atom) = xkb_atom_intern_literal(param->ctx, "modifier_map");}
-#line 2739 "xkbcommon@sha/parser.c"
+#line 2594 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 121:
+ case 121: /* Element: INDICATOR */
#line 608 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "indicator"); }
-#line 2745 "xkbcommon@sha/parser.c"
+#line 2600 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 122:
+ case 122: /* Element: SHAPE */
#line 610 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "shape"); }
-#line 2751 "xkbcommon@sha/parser.c"
+#line 2606 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 123:
+ case 123: /* Element: ROW */
#line 612 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "row"); }
-#line 2757 "xkbcommon@sha/parser.c"
+#line 2612 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 124:
+ case 124: /* Element: SECTION */
#line 614 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "section"); }
-#line 2763 "xkbcommon@sha/parser.c"
+#line 2618 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 125:
+ case 125: /* Element: TEXT */
#line 616 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "text"); }
-#line 2769 "xkbcommon@sha/parser.c"
+#line 2624 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 126:
+ case 126: /* OptMergeMode: MergeMode */
#line 619 "../src/xkbcomp/parser.y"
{ (yyval.merge) = (yyvsp[0].merge); }
-#line 2775 "xkbcommon@sha/parser.c"
+#line 2630 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 127:
+ case 127: /* OptMergeMode: %empty */
#line 620 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_DEFAULT; }
-#line 2781 "xkbcommon@sha/parser.c"
+#line 2636 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 128:
+ case 128: /* MergeMode: INCLUDE */
#line 623 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_DEFAULT; }
-#line 2787 "xkbcommon@sha/parser.c"
+#line 2642 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 129:
+ case 129: /* MergeMode: AUGMENT */
#line 624 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_AUGMENT; }
-#line 2793 "xkbcommon@sha/parser.c"
+#line 2648 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 130:
+ case 130: /* MergeMode: OVERRIDE */
#line 625 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_OVERRIDE; }
-#line 2799 "xkbcommon@sha/parser.c"
+#line 2654 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 131:
+ case 131: /* MergeMode: REPLACE */
#line 626 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_REPLACE; }
-#line 2805 "xkbcommon@sha/parser.c"
+#line 2660 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 132:
+ case 132: /* MergeMode: ALTERNATE */
#line 628 "../src/xkbcomp/parser.y"
{
/*
@@ -2813,246 +2668,246 @@ yyreduce:
*/
(yyval.merge) = MERGE_DEFAULT;
}
-#line 2817 "xkbcommon@sha/parser.c"
+#line 2672 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 133:
+ case 133: /* OptExprList: ExprList */
#line 637 "../src/xkbcomp/parser.y"
{ (yyval.exprList) = (yyvsp[0].exprList); }
-#line 2823 "xkbcommon@sha/parser.c"
+#line 2678 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 134:
+ case 134: /* OptExprList: %empty */
#line 638 "../src/xkbcomp/parser.y"
{ (yyval.exprList).head = (yyval.exprList).last = NULL; }
-#line 2829 "xkbcommon@sha/parser.c"
+#line 2684 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 135:
+ case 135: /* ExprList: ExprList COMMA Expr */
#line 642 "../src/xkbcomp/parser.y"
{ (yyval.exprList).head = (yyvsp[-2].exprList).head; (yyval.exprList).last->common.next = &(yyvsp[0].expr)->common; (yyval.exprList).last = (yyvsp[0].expr); }
-#line 2835 "xkbcommon@sha/parser.c"
+#line 2690 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 136:
+ case 136: /* ExprList: Expr */
#line 644 "../src/xkbcomp/parser.y"
{ (yyval.exprList).head = (yyval.exprList).last = (yyvsp[0].expr); }
-#line 2841 "xkbcommon@sha/parser.c"
+#line 2696 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 137:
+ case 137: /* Expr: Expr DIVIDE Expr */
#line 648 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_DIVIDE, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2847 "xkbcommon@sha/parser.c"
+#line 2702 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 138:
+ case 138: /* Expr: Expr PLUS Expr */
#line 650 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2853 "xkbcommon@sha/parser.c"
+#line 2708 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 139:
+ case 139: /* Expr: Expr MINUS Expr */
#line 652 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_SUBTRACT, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2859 "xkbcommon@sha/parser.c"
+#line 2714 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 140:
+ case 140: /* Expr: Expr TIMES Expr */
#line 654 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_MULTIPLY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2865 "xkbcommon@sha/parser.c"
+#line 2720 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 141:
+ case 141: /* Expr: Lhs EQUALS Expr */
#line 656 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_ASSIGN, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2871 "xkbcommon@sha/parser.c"
+#line 2726 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 142:
+ case 142: /* Expr: Term */
#line 658 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[0].expr); }
-#line 2877 "xkbcommon@sha/parser.c"
+#line 2732 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 143:
+ case 143: /* Term: MINUS Term */
#line 662 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateUnary(EXPR_NEGATE, (yyvsp[0].expr)->expr.value_type, (yyvsp[0].expr)); }
-#line 2883 "xkbcommon@sha/parser.c"
+#line 2738 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 144:
+ case 144: /* Term: PLUS Term */
#line 664 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateUnary(EXPR_UNARY_PLUS, (yyvsp[0].expr)->expr.value_type, (yyvsp[0].expr)); }
-#line 2889 "xkbcommon@sha/parser.c"
+#line 2744 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 145:
+ case 145: /* Term: EXCLAM Term */
#line 666 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateUnary(EXPR_NOT, EXPR_TYPE_BOOLEAN, (yyvsp[0].expr)); }
-#line 2895 "xkbcommon@sha/parser.c"
+#line 2750 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 146:
+ case 146: /* Term: INVERT Term */
#line 668 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateUnary(EXPR_INVERT, (yyvsp[0].expr)->expr.value_type, (yyvsp[0].expr)); }
-#line 2901 "xkbcommon@sha/parser.c"
+#line 2756 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 147:
+ case 147: /* Term: Lhs */
#line 670 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[0].expr); }
-#line 2907 "xkbcommon@sha/parser.c"
+#line 2762 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 148:
+ case 148: /* Term: FieldSpec OPAREN OptExprList CPAREN */
#line 672 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateAction((yyvsp[-3].atom), (yyvsp[-1].exprList).head); }
-#line 2913 "xkbcommon@sha/parser.c"
+#line 2768 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 149:
+ case 149: /* Term: Terminal */
#line 674 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[0].expr); }
-#line 2919 "xkbcommon@sha/parser.c"
+#line 2774 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 150:
+ case 150: /* Term: OPAREN Expr CPAREN */
#line 676 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[-1].expr); }
-#line 2925 "xkbcommon@sha/parser.c"
+#line 2780 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 151:
+ case 151: /* ActionList: ActionList COMMA Action */
#line 680 "../src/xkbcomp/parser.y"
{ (yyval.exprList).head = (yyvsp[-2].exprList).head; (yyval.exprList).last->common.next = &(yyvsp[0].expr)->common; (yyval.exprList).last = (yyvsp[0].expr); }
-#line 2931 "xkbcommon@sha/parser.c"
+#line 2786 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 152:
+ case 152: /* ActionList: Action */
#line 682 "../src/xkbcomp/parser.y"
{ (yyval.exprList).head = (yyval.exprList).last = (yyvsp[0].expr); }
-#line 2937 "xkbcommon@sha/parser.c"
+#line 2792 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 153:
+ case 153: /* Action: FieldSpec OPAREN OptExprList CPAREN */
#line 686 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateAction((yyvsp[-3].atom), (yyvsp[-1].exprList).head); }
-#line 2943 "xkbcommon@sha/parser.c"
+#line 2798 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 154:
+ case 154: /* Lhs: FieldSpec */
#line 690 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateIdent((yyvsp[0].atom)); }
-#line 2949 "xkbcommon@sha/parser.c"
+#line 2804 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 155:
+ case 155: /* Lhs: FieldSpec DOT FieldSpec */
#line 692 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateFieldRef((yyvsp[-2].atom), (yyvsp[0].atom)); }
-#line 2955 "xkbcommon@sha/parser.c"
+#line 2810 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 156:
+ case 156: /* Lhs: FieldSpec OBRACKET Expr CBRACKET */
#line 694 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateArrayRef(XKB_ATOM_NONE, (yyvsp[-3].atom), (yyvsp[-1].expr)); }
-#line 2961 "xkbcommon@sha/parser.c"
+#line 2816 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 157:
+ case 157: /* Lhs: FieldSpec DOT FieldSpec OBRACKET Expr CBRACKET */
#line 696 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateArrayRef((yyvsp[-5].atom), (yyvsp[-3].atom), (yyvsp[-1].expr)); }
-#line 2967 "xkbcommon@sha/parser.c"
+#line 2822 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 158:
+ case 158: /* Terminal: String */
#line 700 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateString((yyvsp[0].atom)); }
-#line 2973 "xkbcommon@sha/parser.c"
+#line 2828 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 159:
+ case 159: /* Terminal: Integer */
#line 702 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateInteger((yyvsp[0].num)); }
-#line 2979 "xkbcommon@sha/parser.c"
+#line 2834 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 160:
+ case 160: /* Terminal: Float */
#line 704 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateFloat(/* Discard $1 */); }
-#line 2985 "xkbcommon@sha/parser.c"
+#line 2840 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 161:
+ case 161: /* Terminal: KEYNAME */
#line 706 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateKeyName((yyvsp[0].atom)); }
-#line 2991 "xkbcommon@sha/parser.c"
+#line 2846 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 162:
+ case 162: /* OptKeySymList: KeySymList */
#line 709 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[0].expr); }
-#line 2997 "xkbcommon@sha/parser.c"
+#line 2852 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 163:
+ case 163: /* OptKeySymList: %empty */
#line 710 "../src/xkbcomp/parser.y"
{ (yyval.expr) = NULL; }
-#line 3003 "xkbcommon@sha/parser.c"
+#line 2858 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 164:
+ case 164: /* KeySymList: KeySymList COMMA KeySym */
#line 714 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprAppendKeysymList((yyvsp[-2].expr), (yyvsp[0].keysym)); }
-#line 3009 "xkbcommon@sha/parser.c"
+#line 2864 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 165:
+ case 165: /* KeySymList: KeySymList COMMA KeySyms */
#line 716 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprAppendMultiKeysymList((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 3015 "xkbcommon@sha/parser.c"
+#line 2870 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 166:
+ case 166: /* KeySymList: KeySym */
#line 718 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateKeysymList((yyvsp[0].keysym)); }
-#line 3021 "xkbcommon@sha/parser.c"
+#line 2876 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 167:
+ case 167: /* KeySymList: KeySyms */
#line 720 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateMultiKeysymList((yyvsp[0].expr)); }
-#line 3027 "xkbcommon@sha/parser.c"
+#line 2882 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 168:
+ case 168: /* KeySyms: OBRACE KeySymList CBRACE */
#line 724 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[-1].expr); }
-#line 3033 "xkbcommon@sha/parser.c"
+#line 2888 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 169:
+ case 169: /* KeySym: IDENT */
#line 728 "../src/xkbcomp/parser.y"
{
if (!resolve_keysym((yyvsp[0].str), &(yyval.keysym)))
parser_warn(param, "unrecognized keysym \"%s\"", (yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3043 "xkbcommon@sha/parser.c"
+#line 2898 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 170:
+ case 170: /* KeySym: SECTION */
#line 733 "../src/xkbcomp/parser.y"
{ (yyval.keysym) = XKB_KEY_section; }
-#line 3049 "xkbcommon@sha/parser.c"
+#line 2904 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 171:
+ case 171: /* KeySym: Integer */
#line 735 "../src/xkbcomp/parser.y"
{
if ((yyvsp[0].num) < 0) {
- parser_warn(param, "unrecognized keysym \"%" PRId64 "\"", (yyvsp[0].num));
+ parser_warn(param, "unrecognized keysym \"%"PRId64"\"", (yyvsp[0].num));
(yyval.keysym) = XKB_KEY_NoSymbol;
}
else if ((yyvsp[0].num) < 10) { /* XKB_KEY_0 .. XKB_KEY_9 */
@@ -3067,89 +2922,89 @@ yyreduce:
}
}
}
-#line 3071 "xkbcommon@sha/parser.c"
+#line 2926 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 172:
+ case 172: /* SignedNumber: MINUS Number */
#line 754 "../src/xkbcomp/parser.y"
{ (yyval.num) = -(yyvsp[0].num); }
-#line 3077 "xkbcommon@sha/parser.c"
+#line 2932 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 173:
+ case 173: /* SignedNumber: Number */
#line 755 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 3083 "xkbcommon@sha/parser.c"
+#line 2938 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 174:
+ case 174: /* Number: FLOAT */
#line 758 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 3089 "xkbcommon@sha/parser.c"
+#line 2944 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 175:
+ case 175: /* Number: INTEGER */
#line 759 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 3095 "xkbcommon@sha/parser.c"
+#line 2950 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 176:
+ case 176: /* Float: FLOAT */
#line 762 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 3101 "xkbcommon@sha/parser.c"
+#line 2956 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 177:
+ case 177: /* Integer: INTEGER */
#line 765 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 3107 "xkbcommon@sha/parser.c"
+#line 2962 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 178:
+ case 178: /* KeyCode: INTEGER */
#line 768 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 3113 "xkbcommon@sha/parser.c"
+#line 2968 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 179:
+ case 179: /* Ident: IDENT */
#line 771 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern(param->ctx, (yyvsp[0].str), strlen((yyvsp[0].str))); free((yyvsp[0].str)); }
-#line 3119 "xkbcommon@sha/parser.c"
+#line 2974 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 180:
+ case 180: /* Ident: DEFAULT */
#line 772 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "default"); }
-#line 3125 "xkbcommon@sha/parser.c"
+#line 2980 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 181:
+ case 181: /* String: STRING */
#line 775 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern(param->ctx, (yyvsp[0].str), strlen((yyvsp[0].str))); free((yyvsp[0].str)); }
-#line 3131 "xkbcommon@sha/parser.c"
+#line 2986 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 182:
+ case 182: /* OptMapName: MapName */
#line 778 "../src/xkbcomp/parser.y"
{ (yyval.str) = (yyvsp[0].str); }
-#line 3137 "xkbcommon@sha/parser.c"
+#line 2992 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 183:
+ case 183: /* OptMapName: %empty */
#line 779 "../src/xkbcomp/parser.y"
{ (yyval.str) = NULL; }
-#line 3143 "xkbcommon@sha/parser.c"
+#line 2998 "libxkbcommon.so.0.0.0.p/parser.c"
break;
- case 184:
+ case 184: /* MapName: STRING */
#line 782 "../src/xkbcomp/parser.y"
{ (yyval.str) = (yyvsp[0].str); }
-#line 3149 "xkbcommon@sha/parser.c"
+#line 3004 "libxkbcommon.so.0.0.0.p/parser.c"
break;
-#line 3153 "xkbcommon@sha/parser.c"
+#line 3008 "libxkbcommon.so.0.0.0.p/parser.c"
default: break;
}
@@ -3309,13 +3164,13 @@ yyabortlab:
yyexhaustedlab:
yyerror (param, YY_("memory exhausted"));
yyresult = 2;
- /* Fall through. */
+ goto yyreturn;
#endif
-/*-----------------------------------------------------.
-| yyreturn -- parsing is finished, return the result. |
-`-----------------------------------------------------*/
+/*-------------------------------------------------------.
+| yyreturn -- parsing is finished, clean up and return. |
+`-------------------------------------------------------*/
yyreturn:
if (yychar != YYEMPTY)
{
diff --git a/src/xkbcomp/parser.h b/src/xkbcomp/parser.h
index e158fa4..3d9dcaf 100644
--- a/src/xkbcomp/parser.h
+++ b/src/xkbcomp/parser.h
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.3. */
+/* A Bison parser, made by GNU Bison 3.7.2. */
/* Bison interface for Yacc-like parsers in C
@@ -35,8 +35,8 @@
especially those whose name start with YY_ or yy_. They are
private implementation details that can be changed or removed. */
-#ifndef YY__XKBCOMMON_XKBCOMMON_SHA_PARSER_H_INCLUDED
-# define YY__XKBCOMMON_XKBCOMMON_SHA_PARSER_H_INCLUDED
+#ifndef YY__XKBCOMMON_LIBXKBCOMMON_SO_0_0_0_P_PARSER_H_INCLUDED
+# define YY__XKBCOMMON_LIBXKBCOMMON_SO_0_0_0_P_PARSER_H_INCLUDED
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
@@ -154,7 +154,7 @@ union YYSTYPE
XkbFile *file;
struct { XkbFile *head; XkbFile *last; } fileList;
-#line 158 "xkbcommon@sha/parser.h"
+#line 158 "libxkbcommon.so.0.0.0.p/parser.h"
};
typedef union YYSTYPE YYSTYPE;
@@ -166,4 +166,4 @@ typedef union YYSTYPE YYSTYPE;
int _xkbcommon_parse (struct parser_param *param);
-#endif /* !YY__XKBCOMMON_XKBCOMMON_SHA_PARSER_H_INCLUDED */
+#endif /* !YY__XKBCOMMON_LIBXKBCOMMON_SO_0_0_0_P_PARSER_H_INCLUDED */
diff --git a/src/xkbcomp/parser.y b/src/xkbcomp/parser.y
index b1e4188..6dcb523 100644
--- a/src/xkbcomp/parser.y
+++ b/src/xkbcomp/parser.y
@@ -734,7 +734,7 @@ KeySym : IDENT
| Integer
{
if ($1 < 0) {
- parser_warn(param, "unrecognized keysym \"%" PRId64 "\"", $1);
+ parser_warn(param, "unrecognized keysym \"%"PRId64"\"", $1);
$$ = XKB_KEY_NoSymbol;
}
else if ($1 < 10) { /* XKB_KEY_0 .. XKB_KEY_9 */
diff --git a/test/data/keycodes/evdev b/test/data/keycodes/evdev
index 624ac68..d41799d 100644
--- a/test/data/keycodes/evdev
+++ b/test/data/keycodes/evdev
@@ -281,6 +281,13 @@ default xkb_keycodes "evdev" {
<I251> = 251; // #define KEY_BRIGHTNESS_CYCLE 243
<I252> = 252; // #define KEY_BRIGHTNESS_ZERO 244
<I253> = 253; // #define KEY_DISPLAY_OFF 245
+ <I254> = 254; // #define KEY_WWAN 246
+ <I255> = 255; // #define KEY_RFKILL 247
+
+ <I372> = 372; // #define KEY_FAVORITES 364
+ <I382> = 382; // #define KEY_KEYBOARD 374
+ <I569> = 569; // #define KEY_ROTATE_LOCK_TOGGLE 561
+ <I380> = 380; // #define KEY_FULL_SCREEN 372
// Fake keycodes for virtual keys
<LVL3> = 92;
@@ -307,8 +314,3 @@ default xkb_keycodes "evdev" {
// For Brazilian ABNT2
alias <KPPT> = <I129>;
};
-
-// PC98
-xkb_keycodes "pc98" {
- include "evdev(evdev)"
-};
diff --git a/test/data/keymaps/quartz.xkb b/test/data/keymaps/quartz.xkb
index c976fce..f932190 100644
--- a/test/data/keymaps/quartz.xkb
+++ b/test/data/keymaps/quartz.xkb
@@ -1136,4 +1136,4 @@ xkb_geometry "pc(pc104)" {
};
};
-}; \ No newline at end of file
+};
diff --git a/test/data/rules/base b/test/data/rules/base
index 11e1b56..71aaa91 100644
--- a/test/data/rules/base
+++ b/test/data/rules/base
@@ -1,4 +1,5 @@
-// DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.sh FROM rules/*.part
+// DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.py FROM rules/*.part
+//
//
// Rules for resolving XKB components for use with XFree86
// Copyright 1996 by Joseph Moss
@@ -13,20 +14,17 @@
// ori pk ru scc sy syr tel th tj tam ua uz
// PC models
-! $pcmodels = pc101 pc102 pc104 pc105
+! $pcmodels = pc86 pc101 pc102 pc104 pc104alt pc105
// Jolla devices and keyboards
! $jollamodels = jollasbj
// Microsoft models (using MS geometry)
-! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose
+! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose microsoftsurface
// Nokia devices and keyboards
! $nokiamodels = nokiasu8w nokiarx44 nokiarx51
-// PC geometries - they have special geometry but symbols are mostly pc105
-! $pcgeometries = latitude
-
// TypeMatrix geometries
! $tmgeometries = tm2020 tm2030PS2 tm2030USB tm2030USB-102 tm2030USB-106
@@ -85,7 +83,6 @@
! $sun_compat = sun_type6 sun_type6_suncompat sun_type7_suncompat suncompat
-! $htcdreamlayouts = us it de
! $inetkbds = acer_c300 acer_ferrari4k acer_laptop \
airkey \
@@ -104,7 +101,7 @@
genius geniuscomfy2 \
gyration honeywell_euroboard \
hp250x hp5xx hp500fa hpdv5 \
- hpi6 hpxe3gc hpxe3gf hpxe4xxx hpxt1000 hpzt11xx htcdream \
+ hpi6 hpxe3gc hpxe3gf hpxe4xxx hpxt1000 hpzt11xx \
ibm_spacesaver ipaq inspiron intel \
logiaccess logicda logicink \
logiex110 logiclx300 \
@@ -124,9 +121,9 @@
silvercrest \
sk1300 sk2500 sk6200 sk7100 \
sven sven303 symplon \
+ teck227 teck229 \
toshiba_s3000 trust trustda \
unitekkb1925 yahoo \
- teck227 teck229 \
apex300
! $inetmediakbds = acer_ferrari4k acer_laptop btc5090 btc9019u cherryblueb \
@@ -188,7 +185,6 @@
omnikey101 = northgate(omnikey101)
sanwaskbkg3 = sanwa(sanwaskbkg3)
$pcmodels = pc(%m)
- $pcgeometries = pc(%m)
everex = everex(STEPnote)
thinkpad = thinkpad(intl)
thinkpad60 = thinkpad(60)
@@ -382,86 +378,85 @@
ws007sh * = pc+sharp_vndr/ws007sh(basic)
ws011sh * = pc+sharp_vndr/ws011sh(basic)
ws020sh * = pc+sharp_vndr/ws020sh(basic)
- htcdream $htcdreamlayouts = %l(htcdream)
* $nonlatin = pc+us+%l%(v):2
* * = pc+%l%(v)
-! model layout[1] = symbols
- * ar = pc+ara%(v[1])
- * ben = pc+in(ben)
- * bs = pc+ba%(v[1])
- * cs = pc+rs%(v[1])
- * cz_qwerty = pc+cz(qwerty)
- * dev = pc+in(deva)
- * dvorak = pc+us(dvorak)
- * dzdwi = pc+bt%(v[1])
- * el = pc+gr%(v[1])
- * en_US = pc+latin%(v[1])
- * guj = pc+in(guj)
- * gur = pc+in(guru)
- * iu = pc+ca(ike)
- * lo = pc+la%(v[1])
- * kan = pc+in(kan)
- * mi = pc+mao%(v[1])
- * ogham = pc+ie(ogam)
- * ori = pc+ie(ori)
- * sapmi = pc+no(smi)
- * sr = pc+srp%(v[1])
- * syr = pc+sy(syc)
- * tel = pc+in(tel)
- * tml = pc+in(tam)
- * yu = pc+srp%(v[1])
- * fr-latin9 = pc+fr(latin9)
- * us_intl = pc+us(alt-intl)
- * ben(basic) = pc+in(ben)
- * ben(probhat) = pc+in(ben_probhat)
- * dev(basic) = pc+in(deva)
- * dvorak($dvoraklayouts) = pc+%v(dvorak)
- * dvorak(basic) = pc+us(dvorak)
- * dvorak(pl_basic) = pc+pl(dvorak)
- * dvorak(pl) = pc+pl(dvorak_quotes)
- * dvorak(pl_altquotes) = pc+pl(dvorak_altquotes)
- * dzdwi(basic) = pc+bt(basic)
- * fi(basic) = pc+fi(classic)
- * ge(azerty_tskapo) = pc+fr(geo)
- * guj(basic) = pc+in(guj)
- * gur(basic) = pc+in(guru)
- * ie(laptop) = pc+ie(basic)
- * ie(CloGaelachLaptop) = pc+ie(CloGaelach)
- * in(urd) = pc+in(urd-phonetic)
- * iu(basic) = pc+ca(ike)
- * lo(basic) = pc+la(basic)
- * kan(basic) = pc+in(kan)
- * mal(basic) = pc+in(mal)
- * mal(mlplusnum) = pc+in(mal)
- * ogham(basic) = pc+ie(ogam)
- * ogham(laptop) = pc+ie(ogam)
- * ogham(is434) = pc+ie(ogam_is434)
- * ogham(is434laptop) = pc+ie(ogam_is434)
- * ori(basic) = pc+in(ori)
- * ro(de) = pc+ro(winkeys)
- * ro(us) = pc+ro(std)
- * ro(academic) = pc+ro(std)
- * ro(std_comma) = pc+ro(std)
- * ro(comma) = pc+ro(basic)
- * ru(os) = pc+ru(os_legacy)
- * pk(urd) = pc+pk(urd-phonetic)
- * sapmi(basic) = pc+no(smi)
- * sapmi(nodeadkeys) = pc+no(smi_nodeadkeys)
- * sapmi(sefi) = pc+fi(smi)
- * sin(phonetic-static) = pc+in(sin_phonetic)
- * syr(basic) = pc+sy(syc)
- * syr(phonetic) = pc+sy(syc_phonetic)
- * tam(INSCRIPT) = pc+in(tam)
- * tam(UNI) = pc+in(tam_unicode)
- * tam(NUMERAL-KEYBOARD) = pc+in(tam_keyboard_with_numerals)
- * tam(TAB) = pc+in(tam_TAB)
- * tam(TSCII) = pc+in(tam_TSCII)
- * tel(basic) = pc+in(tel)
- * yu(basic) = pc+srp(latin)
- * yu(unicode) = pc+srp(latinunicode)
- * yu(yz) = pc+srp(latinyz)
- * yu(unicodeyz) = pc+srp(latinunicodeyz)
+! model layout[1] = symbols
+ * ar = pc+ara%(v[1])
+ * ben = pc+in(ben)
+ * bs = pc+ba%(v[1])
+ * cs = pc+rs%(v[1])
+ * cz_qwerty = pc+cz(qwerty)
+ * dev = pc+in(deva)
+ * dvorak = pc+us(dvorak)
+ * dzdwi = pc+bt%(v[1])
+ * el = pc+gr%(v[1])
+ * en_US = pc+latin%(v[1])
+ * guj = pc+in(guj)
+ * gur = pc+in(guru)
+ * iu = pc+ca(ike)
+ * lo = pc+la%(v[1])
+ * kan = pc+in(kan)
+ * mi = pc+mao%(v[1])
+ * ogham = pc+ie(ogam)
+ * ori = pc+ie(ori)
+ * sapmi = pc+no(smi)
+ * sr = pc+srp%(v[1])
+ * syr = pc+sy(syc)
+ * tel = pc+in(tel)
+ * tml = pc+in(tam)
+ * yu = pc+srp%(v[1])
+ * fr-latin9 = pc+fr(latin9)
+ * us_intl = pc+us(alt-intl)
+ * ben(basic) = pc+in(ben)
+ * ben(probhat) = pc+in(ben_probhat)
+ * dev(basic) = pc+in(deva)
+ * dvorak($dvoraklayouts) = pc+%v(dvorak)
+ * dvorak(basic) = pc+us(dvorak)
+ * dvorak(pl_basic) = pc+pl(dvorak)
+ * dvorak(pl) = pc+pl(dvorak_quotes)
+ * dvorak(pl_altquotes) = pc+pl(dvorak_altquotes)
+ * dzdwi(basic) = pc+bt(basic)
+ * fi(basic) = pc+fi(classic)
+ * ge(azerty_tskapo) = pc+fr(geo)
+ * guj(basic) = pc+in(guj)
+ * gur(basic) = pc+in(guru)
+ * ie(laptop) = pc+ie(basic)
+ * ie(CloGaelachLaptop) = pc+ie(CloGaelach)
+ * in(urd) = pc+in(urd-phonetic)
+ * iu(basic) = pc+ca(ike)
+ * lo(basic) = pc+la(basic)
+ * kan(basic) = pc+in(kan)
+ * mal(basic) = pc+in(mal)
+ * mal(mlplusnum) = pc+in(mal)
+ * ogham(basic) = pc+ie(ogam)
+ * ogham(laptop) = pc+ie(ogam)
+ * ogham(is434) = pc+ie(ogam_is434)
+ * ogham(is434laptop) = pc+ie(ogam_is434)
+ * ori(basic) = pc+in(ori)
+ * ro(de) = pc+ro(winkeys)
+ * ro(us) = pc+ro(std)
+ * ro(academic) = pc+ro(std)
+ * ro(std_comma) = pc+ro(std)
+ * ro(comma) = pc+ro(basic)
+ * ru(os) = pc+ru(os_legacy)
+ * pk(urd) = pc+pk(urd-phonetic)
+ * sapmi(basic) = pc+no(smi)
+ * sapmi(nodeadkeys) = pc+no(smi_nodeadkeys)
+ * sapmi(sefi) = pc+fi(smi)
+ * sin(phonetic-static) = pc+in(sin_phonetic)
+ * syr(basic) = pc+sy(syc)
+ * syr(phonetic) = pc+sy(syc_phonetic)
+ * tam(INSCRIPT) = pc+in(tam)
+ * tam(UNI) = pc+in(tam_unicode)
+ * tam(NUMERAL-KEYBOARD) = pc+in(tam_keyboard_with_numerals)
+ * tam(TAB) = pc+in(tam_TAB)
+ * tam(TSCII) = pc+in(tam_TSCII)
+ * tel(basic) = pc+in(tel)
+ * yu(basic) = pc+srp(latin)
+ * yu(unicode) = pc+srp(latinunicode)
+ * yu(yz) = pc+srp(latinyz)
+ * yu(unicodeyz) = pc+srp(latinunicodeyz)
ataritt * = xfree68_vndr/ataritt(us)+%l[1]%(v[1])
amiga * = xfree68_vndr/amiga(usa1)+%l[1]%(v[1])
jollasbj * = jolla_vndr/sbj(common)+%l[1]%(v[1])
@@ -479,55 +474,55 @@
* * = pc+%l[1]%(v[1])
! model layout[1] variant[1] = symbols
- * ben basic = pc+in(ben)
- * ben probhat = pc+in(ben_probhat)
- * dev basic = pc+in(deva)
- * dvorak $dvoraklayouts = pc+%v(dvorak)
- * dvorak basic = pc+us(dvorak)
- * dvorak pl_basic = pc+pl(dvorak)
- * dvorak pl = pc+pl(dvorak_quotes)
- * dvorak pl_altquotes = pc+pl(dvorak_altquotes)
- * dzdwi basic = pc+bt(basic)
- * fi basic = pc+fi(classic)
- * ge azerty_tskapo = pc+fr(geo)
- * guj basic = pc+in(guj)
- * gur basic = pc+in(guru)
- * ie laptop = pc+ie(basic)
- * ie CloGaelachLaptop = pc+ie(CloGaelach)
- * in urd = pc+in(urd-phonetic)
- * iu basic = pc+ca(ike)
- * lo basic = pc+la(basic)
- * kan basic = pc+in(kan)
- * mal basic = pc+in(mal)
- * mal mlplusnum = pc+in(mal)
- * ogham basic = pc+ie(ogam)
- * ogham laptop = pc+ie(ogam)
- * ogham is434 = pc+ie(ogam_is434)
- * ogham is434laptop = pc+ie(ogam_is434)
- * ori basic = pc+in(ori)
- * ro de = pc+ro(winkeys)
- * ro us = pc+ro(std)
- * ro academic = pc+ro(std)
- * ro std_comma = pc+ro(std)
- * ro comma = pc+ro(basic)
- * ru os = pc+ru(os_legacy)
- * pk urd = pc+pk(urd-phonetic)
- * sapmi basic = pc+no(smi)
- * sapmi nodeadkeys = pc+no(smi_nodeadkeys)
- * sapmi sefi = pc+fi(smi)
- * sin phonetic-static = pc+in(sin_phonetic)
- * syr basic = pc+sy(syc)
- * syr phonetic = pc+sy(syc_phonetic)
- * tam INSCRIPT = pc+in(tam)
- * tam UNI = pc+in(tam_unicode)
- * tam NUMERAL-KEYBOARD = pc+in(tam_keyboard_with_numerals)
- * tam TAB = pc+in(tam_TAB)
- * tam TSCII = pc+in(tam_TSCII)
- * tel basic = pc+in(tel)
- * yu basic = pc+srp(latin)
- * yu unicode = pc+srp(latinunicode)
- * yu yz = pc+srp(latinyz)
- * yu unicodeyz = pc+srp(latinunicodeyz)
+ * ben basic = pc+in(ben)
+ * ben probhat = pc+in(ben_probhat)
+ * dev basic = pc+in(deva)
+ * dvorak $dvoraklayouts = pc+%v(dvorak)
+ * dvorak basic = pc+us(dvorak)
+ * dvorak pl_basic = pc+pl(dvorak)
+ * dvorak pl = pc+pl(dvorak_quotes)
+ * dvorak pl_altquotes = pc+pl(dvorak_altquotes)
+ * dzdwi basic = pc+bt(basic)
+ * fi basic = pc+fi(classic)
+ * ge azerty_tskapo = pc+fr(geo)
+ * guj basic = pc+in(guj)
+ * gur basic = pc+in(guru)
+ * ie laptop = pc+ie(basic)
+ * ie CloGaelachLaptop = pc+ie(CloGaelach)
+ * in urd = pc+in(urd-phonetic)
+ * iu basic = pc+ca(ike)
+ * lo basic = pc+la(basic)
+ * kan basic = pc+in(kan)
+ * mal basic = pc+in(mal)
+ * mal mlplusnum = pc+in(mal)
+ * ogham basic = pc+ie(ogam)
+ * ogham laptop = pc+ie(ogam)
+ * ogham is434 = pc+ie(ogam_is434)
+ * ogham is434laptop = pc+ie(ogam_is434)
+ * ori basic = pc+in(ori)
+ * ro de = pc+ro(winkeys)
+ * ro us = pc+ro(std)
+ * ro academic = pc+ro(std)
+ * ro std_comma = pc+ro(std)
+ * ro comma = pc+ro(basic)
+ * ru os = pc+ru(os_legacy)
+ * pk urd = pc+pk(urd-phonetic)
+ * sapmi basic = pc+no(smi)
+ * sapmi nodeadkeys = pc+no(smi_nodeadkeys)
+ * sapmi sefi = pc+fi(smi)
+ * sin phonetic-static = pc+in(sin_phonetic)
+ * syr basic = pc+sy(syc)
+ * syr phonetic = pc+sy(syc_phonetic)
+ * tam INSCRIPT = pc+in(tam)
+ * tam UNI = pc+in(tam_unicode)
+ * tam NUMERAL-KEYBOARD = pc+in(tam_keyboard_with_numerals)
+ * tam TAB = pc+in(tam_TAB)
+ * tam TSCII = pc+in(tam_TSCII)
+ * tel basic = pc+in(tel)
+ * yu basic = pc+srp(latin)
+ * yu unicode = pc+srp(latinunicode)
+ * yu yz = pc+srp(latinyz)
+ * yu unicodeyz = pc+srp(latinunicodeyz)
! model layout[2] = symbols
* ar = +ara%(v[2]):2
@@ -556,55 +551,55 @@
* yu = +srp%(v[2]):2
* fr-latin9 = +fr(latin9):2
* us_intl = +us(alt-intl):2
- * ben(basic) = +in(ben):2
- * ben(probhat) = +in(ben_probhat):2
- * dev(basic) = +in(deva):2
- * dvorak($dvoraklayouts) = +%v(dvorak):2
- * dvorak(basic) = +us(dvorak):2
- * dvorak(pl_basic) = +pl(dvorak):2
- * dvorak(pl) = +pl(dvorak_quotes):2
- * dvorak(pl_altquotes) = +pl(dvorak_altquotes):2
- * dzdwi(basic) = +bt(basic):2
- * fi(basic) = +fi(classic):2
- * ge(azerty_tskapo) = +fr(geo):2
- * guj(basic) = +in(guj):2
- * gur(basic) = +in(guru):2
- * ie(laptop) = +ie(basic):2
- * ie(CloGaelachLaptop) = +ie(CloGaelach):2
- * in(urd) = +in(urd-phonetic):2
- * iu(basic) = +ca(ike):2
- * lo(basic) = +la(basic):2
- * kan(basic) = +in(kan):2
- * mal(basic) = +in(mal):2
- * mal(mlplusnum) = +in(mal):2
- * ogham(basic) = +ie(ogam):2
- * ogham(laptop) = +ie(ogam):2
- * ogham(is434) = +ie(ogam_is434):2
- * ogham(is434laptop) = +ie(ogam_is434):2
- * ori(basic) = +in(ori):2
- * ro(de) = +ro(winkeys):2
- * ro(us) = +ro(std):2
- * ro(academic) = +ro(std):2
- * ro(std_comma) = +ro(std):2
- * ro(comma) = +ro(basic):2
- * ru(os) = +ru(os_legacy):2
- * pk(urd) = +pk(urd-phonetic):2
- * sapmi(basic) = +no(smi):2
- * sapmi(nodeadkeys) = +no(smi_nodeadkeys):2
- * sapmi(sefi) = +fi(smi):2
- * sin(phonetic-static) = +in(sin_phonetic):2
- * syr(basic) = +sy(syc):2
- * syr(phonetic) = +sy(syc_phonetic):2
- * tam(INSCRIPT) = +in(tam):2
- * tam(UNI) = +in(tam_unicode):2
- * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):2
- * tam(TAB) = +in(tam_TAB):2
- * tam(TSCII) = +in(tam_TSCII):2
- * tel(basic) = +in(tel):2
- * yu(basic) = +srp(latin):2
- * yu(unicode) = +srp(latinunicode):2
- * yu(yz) = +srp(latinyz):2
- * yu(unicodeyz) = +srp(latinunicodeyz):2
+ * ben(basic) = +in(ben):2
+ * ben(probhat) = +in(ben_probhat):2
+ * dev(basic) = +in(deva):2
+ * dvorak($dvoraklayouts) = +%v(dvorak):2
+ * dvorak(basic) = +us(dvorak):2
+ * dvorak(pl_basic) = +pl(dvorak):2
+ * dvorak(pl) = +pl(dvorak_quotes):2
+ * dvorak(pl_altquotes) = +pl(dvorak_altquotes):2
+ * dzdwi(basic) = +bt(basic):2
+ * fi(basic) = +fi(classic):2
+ * ge(azerty_tskapo) = +fr(geo):2
+ * guj(basic) = +in(guj):2
+ * gur(basic) = +in(guru):2
+ * ie(laptop) = +ie(basic):2
+ * ie(CloGaelachLaptop) = +ie(CloGaelach):2
+ * in(urd) = +in(urd-phonetic):2
+ * iu(basic) = +ca(ike):2
+ * lo(basic) = +la(basic):2
+ * kan(basic) = +in(kan):2
+ * mal(basic) = +in(mal):2
+ * mal(mlplusnum) = +in(mal):2
+ * ogham(basic) = +ie(ogam):2
+ * ogham(laptop) = +ie(ogam):2
+ * ogham(is434) = +ie(ogam_is434):2
+ * ogham(is434laptop) = +ie(ogam_is434):2
+ * ori(basic) = +in(ori):2
+ * ro(de) = +ro(winkeys):2
+ * ro(us) = +ro(std):2
+ * ro(academic) = +ro(std):2
+ * ro(std_comma) = +ro(std):2
+ * ro(comma) = +ro(basic):2
+ * ru(os) = +ru(os_legacy):2
+ * pk(urd) = +pk(urd-phonetic):2
+ * sapmi(basic) = +no(smi):2
+ * sapmi(nodeadkeys) = +no(smi_nodeadkeys):2
+ * sapmi(sefi) = +fi(smi):2
+ * sin(phonetic-static) = +in(sin_phonetic):2
+ * syr(basic) = +sy(syc):2
+ * syr(phonetic) = +sy(syc_phonetic):2
+ * tam(INSCRIPT) = +in(tam):2
+ * tam(UNI) = +in(tam_unicode):2
+ * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):2
+ * tam(TAB) = +in(tam_TAB):2
+ * tam(TSCII) = +in(tam_TSCII):2
+ * tel(basic) = +in(tel):2
+ * yu(basic) = +srp(latin):2
+ * yu(unicode) = +srp(latinunicode):2
+ * yu(yz) = +srp(latinyz):2
+ * yu(unicodeyz) = +srp(latinunicodeyz):2
nokiarx51 cz(qwerty) = +nokia_vndr/rx-51(cz_qwerty):2
nokiarx51 * = +nokia_vndr/rx-51(%l[2]%_v[2]):2
$sun $sun_custom = +sun_vndr/%l[2]%(v[2]):2
@@ -637,55 +632,55 @@
* yu = +srp%(v[3]):3
* fr-latin9 = +fr(latin9):3
* us_intl = +us(alt-intl):3
- * ben(basic) = +in(ben):3
- * ben(probhat) = +in(ben_probhat):3
- * dev(basic) = +in(deva):3
- * dvorak($dvoraklayouts) = +%v(dvorak):3
- * dvorak(basic) = +us(dvorak):3
- * dvorak(pl_basic) = +pl(dvorak):3
- * dvorak(pl) = +pl(dvorak_quotes):3
- * dvorak(pl_altquotes) = +pl(dvorak_altquotes):3
- * dzdwi(basic) = +bt(basic):3
- * fi(basic) = +fi(classic):3
- * ge(azerty_tskapo) = +fr(geo):3
- * guj(basic) = +in(guj):3
- * gur(basic) = +in(guru):3
- * ie(laptop) = +ie(basic):3
- * ie(CloGaelachLaptop) = +ie(CloGaelach):3
- * in(urd) = +in(urd-phonetic):3
- * iu(basic) = +ca(ike):3
- * lo(basic) = +la(basic):3
- * kan(basic) = +in(kan):3
- * mal(basic) = +in(mal):3
- * mal(mlplusnum) = +in(mal):3
- * ogham(basic) = +ie(ogam):3
- * ogham(laptop) = +ie(ogam):3
- * ogham(is434) = +ie(ogam_is434):3
- * ogham(is434laptop) = +ie(ogam_is434):3
- * ori(basic) = +in(ori):3
- * ro(de) = +ro(winkeys):3
- * ro(us) = +ro(std):3
- * ro(academic) = +ro(std):3
- * ro(std_comma) = +ro(std):3
- * ro(comma) = +ro(basic):3
- * ru(os) = +ru(os_legacy):3
- * pk(urd) = +pk(urd-phonetic):3
- * sapmi(basic) = +no(smi):3
- * sapmi(nodeadkeys) = +no(smi_nodeadkeys):3
- * sapmi(sefi) = +fi(smi):3
- * sin(phonetic-static) = +in(sin_phonetic):3
- * syr(basic) = +sy(syc):3
- * syr(phonetic) = +sy(syc_phonetic):3
- * tam(INSCRIPT) = +in(tam):3
- * tam(UNI) = +in(tam_unicode):3
- * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):3
- * tam(TAB) = +in(tam_TAB):3
- * tam(TSCII) = +in(tam_TSCII):3
- * tel(basic) = +in(tel):3
- * yu(basic) = +srp(latin):3
- * yu(unicode) = +srp(latinunicode):3
- * yu(yz) = +srp(latinyz):3
- * yu(unicodeyz) = +srp(latinunicodeyz):3
+ * ben(basic) = +in(ben):3
+ * ben(probhat) = +in(ben_probhat):3
+ * dev(basic) = +in(deva):3
+ * dvorak($dvoraklayouts) = +%v(dvorak):3
+ * dvorak(basic) = +us(dvorak):3
+ * dvorak(pl_basic) = +pl(dvorak):3
+ * dvorak(pl) = +pl(dvorak_quotes):3
+ * dvorak(pl_altquotes) = +pl(dvorak_altquotes):3
+ * dzdwi(basic) = +bt(basic):3
+ * fi(basic) = +fi(classic):3
+ * ge(azerty_tskapo) = +fr(geo):3
+ * guj(basic) = +in(guj):3
+ * gur(basic) = +in(guru):3
+ * ie(laptop) = +ie(basic):3
+ * ie(CloGaelachLaptop) = +ie(CloGaelach):3
+ * in(urd) = +in(urd-phonetic):3
+ * iu(basic) = +ca(ike):3
+ * lo(basic) = +la(basic):3
+ * kan(basic) = +in(kan):3
+ * mal(basic) = +in(mal):3
+ * mal(mlplusnum) = +in(mal):3
+ * ogham(basic) = +ie(ogam):3
+ * ogham(laptop) = +ie(ogam):3
+ * ogham(is434) = +ie(ogam_is434):3
+ * ogham(is434laptop) = +ie(ogam_is434):3
+ * ori(basic) = +in(ori):3
+ * ro(de) = +ro(winkeys):3
+ * ro(us) = +ro(std):3
+ * ro(academic) = +ro(std):3
+ * ro(std_comma) = +ro(std):3
+ * ro(comma) = +ro(basic):3
+ * ru(os) = +ru(os_legacy):3
+ * pk(urd) = +pk(urd-phonetic):3
+ * sapmi(basic) = +no(smi):3
+ * sapmi(nodeadkeys) = +no(smi_nodeadkeys):3
+ * sapmi(sefi) = +fi(smi):3
+ * sin(phonetic-static) = +in(sin_phonetic):3
+ * syr(basic) = +sy(syc):3
+ * syr(phonetic) = +sy(syc_phonetic):3
+ * tam(INSCRIPT) = +in(tam):3
+ * tam(UNI) = +in(tam_unicode):3
+ * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):3
+ * tam(TAB) = +in(tam_TAB):3
+ * tam(TSCII) = +in(tam_TSCII):3
+ * tel(basic) = +in(tel):3
+ * yu(basic) = +srp(latin):3
+ * yu(unicode) = +srp(latinunicode):3
+ * yu(yz) = +srp(latinyz):3
+ * yu(unicodeyz) = +srp(latinunicodeyz):3
nokiarx51 cz(qwerty) = +nokia_vndr/rx-51(cz_qwerty):3
nokiarx51 * = +nokia_vndr/rx-51(%l[3]%_v[3]):3
$sun $sun_custom = +sun_vndr/%l[3]%(v[3]):3
@@ -718,55 +713,55 @@
* yu = +srp%(v[4]):4
* fr-latin9 = +fr(latin9):4
* us_intl = +us(alt-intl):4
- * ben(basic) = +in(ben):4
- * ben(probhat) = +in(ben_probhat):4
- * dev(basic) = +in(deva):4
- * dvorak($dvoraklayouts) = +%v(dvorak):4
- * dvorak(basic) = +us(dvorak):4
- * dvorak(pl_basic) = +pl(dvorak):4
- * dvorak(pl) = +pl(dvorak_quotes):4
- * dvorak(pl_altquotes) = +pl(dvorak_altquotes):4
- * dzdwi(basic) = +bt(basic):4
- * fi(basic) = +fi(classic):4
- * ge(azerty_tskapo) = +fr(geo):4
- * guj(basic) = +in(guj):4
- * gur(basic) = +in(guru):4
- * ie(laptop) = +ie(basic):4
- * ie(CloGaelachLaptop) = +ie(CloGaelach):4
- * in(urd) = +in(urd-phonetic):4
- * iu(basic) = +ca(ike):4
- * lo(basic) = +la(basic):4
- * kan(basic) = +in(kan):4
- * mal(basic) = +in(mal):4
- * mal(mlplusnum) = +in(mal):4
- * ogham(basic) = +ie(ogam):4
- * ogham(laptop) = +ie(ogam):4
- * ogham(is434) = +ie(ogam_is434):4
- * ogham(is434laptop) = +ie(ogam_is434):4
- * ori(basic) = +in(ori):4
- * ro(de) = +ro(winkeys):4
- * ro(us) = +ro(std):4
- * ro(academic) = +ro(std):4
- * ro(std_comma) = +ro(std):4
- * ro(comma) = +ro(basic):4
- * ru(os) = +ru(os_legacy):4
- * pk(urd) = +pk(urd-phonetic):4
- * sapmi(basic) = +no(smi):4
- * sapmi(nodeadkeys) = +no(smi_nodeadkeys):4
- * sapmi(sefi) = +fi(smi):4
- * sin(phonetic-static) = +in(sin_phonetic):4
- * syr(basic) = +sy(syc):4
- * syr(phonetic) = +sy(syc_phonetic):4
- * tam(INSCRIPT) = +in(tam):4
- * tam(UNI) = +in(tam_unicode):4
- * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):4
- * tam(TAB) = +in(tam_TAB):4
- * tam(TSCII) = +in(tam_TSCII):4
- * tel(basic) = +in(tel):4
- * yu(basic) = +srp(latin):4
- * yu(unicode) = +srp(latinunicode):4
- * yu(yz) = +srp(latinyz):4
- * yu(unicodeyz) = +srp(latinunicodeyz):4
+ * ben(basic) = +in(ben):4
+ * ben(probhat) = +in(ben_probhat):4
+ * dev(basic) = +in(deva):4
+ * dvorak($dvoraklayouts) = +%v(dvorak):4
+ * dvorak(basic) = +us(dvorak):4
+ * dvorak(pl_basic) = +pl(dvorak):4
+ * dvorak(pl) = +pl(dvorak_quotes):4
+ * dvorak(pl_altquotes) = +pl(dvorak_altquotes):4
+ * dzdwi(basic) = +bt(basic):4
+ * fi(basic) = +fi(classic):4
+ * ge(azerty_tskapo) = +fr(geo):4
+ * guj(basic) = +in(guj):4
+ * gur(basic) = +in(guru):4
+ * ie(laptop) = +ie(basic):4
+ * ie(CloGaelachLaptop) = +ie(CloGaelach):4
+ * in(urd) = +in(urd-phonetic):4
+ * iu(basic) = +ca(ike):4
+ * lo(basic) = +la(basic):4
+ * kan(basic) = +in(kan):4
+ * mal(basic) = +in(mal):4
+ * mal(mlplusnum) = +in(mal):4
+ * ogham(basic) = +ie(ogam):4
+ * ogham(laptop) = +ie(ogam):4
+ * ogham(is434) = +ie(ogam_is434):4
+ * ogham(is434laptop) = +ie(ogam_is434):4
+ * ori(basic) = +in(ori):4
+ * ro(de) = +ro(winkeys):4
+ * ro(us) = +ro(std):4
+ * ro(academic) = +ro(std):4
+ * ro(std_comma) = +ro(std):4
+ * ro(comma) = +ro(basic):4
+ * ru(os) = +ru(os_legacy):4
+ * pk(urd) = +pk(urd-phonetic):4
+ * sapmi(basic) = +no(smi):4
+ * sapmi(nodeadkeys) = +no(smi_nodeadkeys):4
+ * sapmi(sefi) = +fi(smi):4
+ * sin(phonetic-static) = +in(sin_phonetic):4
+ * syr(basic) = +sy(syc):4
+ * syr(phonetic) = +sy(syc_phonetic):4
+ * tam(INSCRIPT) = +in(tam):4
+ * tam(UNI) = +in(tam_unicode):4
+ * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):4
+ * tam(TAB) = +in(tam_TAB):4
+ * tam(TSCII) = +in(tam_TSCII):4
+ * tel(basic) = +in(tel):4
+ * yu(basic) = +srp(latin):4
+ * yu(unicode) = +srp(latinunicode):4
+ * yu(yz) = +srp(latinyz):4
+ * yu(unicodeyz) = +srp(latinunicodeyz):4
nokiarx51 cz(qwerty) = +nokia_vndr/rx-51(cz_qwerty):4
nokiarx51 * = +nokia_vndr/rx-51(%l[4]%_v[4]):4
$sun $sun_custom = +sun_vndr/%l[4]%(v[4]):4
@@ -1053,26 +1048,32 @@
! layout option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle)
* misc:typo = +typo(base)
+ * misc:apl = +apl(level3)
! layout[1] option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):1
* misc:typo = +typo(base):1
+ * misc:apl = +apl(level3):1
! layout[2] option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):2
* misc:typo = +typo(base):2
+ * misc:apl = +apl(level3):2
! layout[3] option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):3
* misc:typo = +typo(base):3
+ * misc:apl = +apl(level3):3
! layout[4] option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):4
* misc:typo = +typo(base):4
+ * misc:apl = +apl(level3):4
! option = symbols
grp:shift_toggle = +group(shifts_toggle)
altwin:menu = +altwin(menu)
+ altwin:menu_win = +altwin(menu_win)
altwin:meta_alt = +altwin(meta_alt)
altwin:alt_win = +altwin(alt_win)
altwin:ctrl_win = +altwin(ctrl_win)
@@ -1139,11 +1140,14 @@
lv3:lwin_switch = +level3(lwin_switch)
lv3:rwin_switch = +level3(rwin_switch)
lv3:enter_switch = +level3(enter_switch)
+ lv3:4_switch_isolated = +level3(4_switch_isolated)
+ lv3:9_switch_isolated = +level3(9_switch_isolated)
caps:capslock = +capslock(capslock)
caps:numlock = +capslock(numlock)
caps:shiftlock = +capslock(shiftlock)
caps:swapescape = +capslock(swapescape)
caps:escape = +capslock(escape)
+ caps:escape_shifted_capslock = +capslock(escape_shifted_capslock)
caps:backspace = +capslock(backspace)
caps:super = +capslock(super)
caps:hyper = +capslock(hyper)
@@ -1153,6 +1157,8 @@
ctrl:nocaps = +ctrl(nocaps)
ctrl:lctrl_meta = +ctrl(lctrl_meta)
ctrl:swapcaps = +ctrl(swapcaps)
+ ctrl:swapcaps_hyper = +ctrl(swapcaps_hyper)
+ ctrl:swapcaps_and_switch_layout = +ctrl(swapcaps_and_switch_layout)
ctrl:ac_ctrl = +ctrl(ac_ctrl)
ctrl:aa_ctrl = +ctrl(aa_ctrl)
ctrl:rctrl_ralt = +ctrl(rctrl_ralt)
@@ -1202,10 +1208,20 @@
nbsp:level4 = +nbsp(level4)
nbsp:level4n = +nbsp(level4n)
nbsp:level4nl = +nbsp(level4nl)
+ nbsp:zwnj2 = +nbsp(zwnj2)
+ nbsp:zwnj2zwj3 = +nbsp(zwnj2zwj3)
+ nbsp:zwnj2zwj3nb4 = +nbsp(zwnj2zwj3nb4)
+ nbsp:zwnj2nb3 = +nbsp(zwnj2nb3)
+ nbsp:zwnj2nb3s = +nbsp(zwnj2nb3s)
+ nbsp:zwnj2nb3zwj4 = +nbsp(zwnj2nb3zwj4)
+ nbsp:zwnj2nb3nnb4 = +nbsp(zwnj2nb3nnb4)
+ nbsp:zwnj3zwj4 = +nbsp(zwnj3zwj4)
japan:nicola_f_bs = +jp(nicola_f_bs)
japan:hztg_escape = +jp(hztg_escape)
- korean:ralt_rctrl = +kr(ralt_hangul)+kr(rctrl_hanja)
- korean:rctrl_ralt = +kr(rctrl_hangul)+kr(ralt_hanja)
+ korean:ralt_hangul = +kr(ralt_hangul)
+ korean:rctrl_hangul = +kr(rctrl_hangul)
+ korean:ralt_hanja = +kr(ralt_hanja)
+ korean:rctrl_hanja = +kr(rctrl_hanja)
kpdl:dot = +kpdl(dot)
kpdl:comma = +kpdl(comma)
kpdl:dotoss = +kpdl(dotoss)
@@ -1237,6 +1253,8 @@
lv3:caps_switch_latch = +level3(caps_switch_latch)
lv3:bksl_switch_latch = +level3(bksl_switch_latch)
lv3:lsgt_switch_latch = +level3(lsgt_switch_latch)
+ lv5:lsgt_switch = +level5(lsgt_switch)
+ lv5:ralt_switch = +level5(ralt_switch)
lv5:lsgt_switch_lock = +level5(lsgt_switch_lock)
lv5:ralt_switch_lock = +level5(ralt_switch_lock)
lv5:lwin_switch_lock = +level5(lwin_switch_lock)
@@ -1252,6 +1270,7 @@
grp_led:num = +lednum(group_lock)
grp_led:caps = +ledcaps(group_lock)
grp_led:scroll = +ledscroll(group_lock)
+ mod_led:compose = +ledcompose(compose)
japan:kana_lock = +japan(kana_lock)
caps:shiftlock = +ledcaps(shift_lock)
grab:break_actions = +xfree86(grab_break)
diff --git a/test/data/rules/base.extras.xml b/test/data/rules/base.extras.xml
new file mode 100644
index 0000000..850f110
--- /dev/null
+++ b/test/data/rules/base.extras.xml
@@ -0,0 +1,1354 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xkbConfigRegistry SYSTEM "xkb.dtd">
+<xkbConfigRegistry>
+ <modelList/>
+ <layoutList>
+ <layout>
+ <configItem popularity="exotic">
+ <name>apl</name>
+ <shortDescription>apl</shortDescription>
+ <description>APL</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>dyalog</name>
+ <shortDescription>dlg</shortDescription>
+ <description>APL symbols (Dyalog APL)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sax</name>
+ <shortDescription>sax</shortDescription>
+ <description>APL symbols (SAX, Sharp APL for Unix)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>unified</name>
+ <shortDescription>ufd</shortDescription>
+ <description>APL symbols (unified)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>apl2</name>
+ <shortDescription>apl2</shortDescription>
+ <description>APL symbols (IBM APL2)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>aplplusII</name>
+ <shortDescription>aplII</shortDescription>
+ <description>APL symbols (Manugistics APL*PLUS II)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>aplx</name>
+ <shortDescription>aplx</shortDescription>
+ <description>APL symbols (APLX unified)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ca</name>
+ <shortDescription>fr</shortDescription>
+ <description>French (Canada)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>kut</name>
+ <shortDescription>kut</shortDescription>
+ <description>Kutenai</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>shs</name>
+ <shortDescription>shs</shortDescription>
+ <description>Secwepemctsin</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Multilingual (Canada, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>de</name>
+ <shortDescription>de</shortDescription>
+ <description>German</description>
+ <languageList>
+ <iso639Id>ger</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>us</name>
+ <description>German (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>hu</name>
+ <description>German (with Hungarian letters, no dead keys)</description>
+ <languageList>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>hun</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>pl</name>
+ <description>Polish (Germany, no dead keys)</description>
+ <languageList>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>pol</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>German (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>adnw</name>
+ <description>German (Aus der Neo-Welt)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>koy</name>
+ <description>German (KOY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>bone</name>
+ <description>German (Bone)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>bone_eszett_home</name>
+ <description>German (Bone, eszett in the home row)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>neo_qwertz</name>
+ <description>German (Neo, QWERTZ)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>neo_qwerty</name>
+ <description>German (Neo, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ru-recom</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Germany, recommended)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ru-translit</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Germany, transliteration)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>lld</name>
+ <shortDescription>de_lld</shortDescription>
+ <description>German (Ladin)</description>
+ <languageList>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>lld</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>eg</name>
+ <shortDescription>ⲕⲏⲙⲉ</shortDescription>
+ <description>Coptic</description>
+ <languageList>
+ <iso639Id>cop</iso639Id>
+ <iso639Id>egy</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>hu</name>
+ <description>Hungarian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>oldhun</name>
+ <shortDescription>oldhun</shortDescription>
+ <description>Old Hungarian</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ohu_lig</name>
+ <shortDescription>ohu_lig</shortDescription>
+ <description>Old Hungarian (for ligatures)</description>
+ </configItem>
+ </variant>
+
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ir</name>
+ <shortDescription>fa</shortDescription>
+ <description>Persian</description>
+ <languageList>
+ <iso639Id>per</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ave</name>
+ <description>Avestan</description>
+ <languageList>
+ <iso639Id>ave</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>lt</name>
+ <shortDescription>lt</shortDescription>
+ <description>Lithuanian</description>
+ <languageList>
+ <iso639Id>lit</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>us_dvorak</name>
+ <description>Lithuanian (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Lithuanian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>lv</name>
+ <shortDescription>lv</shortDescription>
+ <description>Latvian</description>
+ <languageList>
+ <iso639Id>lav</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>dvorak</name>
+ <description>Latvian (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ykeydvorak</name>
+ <description>Latvian (Dvorak, with Y)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>minuskeydvorak</name>
+ <description>Latvian (Dvorak, with minus)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>dvorakprogr</name>
+ <description>Latvian (programmer Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ykeydvorakprogr</name>
+ <description>Latvian (programmer Dvorak, with Y)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>minuskeydvorakprogr</name>
+ <description>Latvian (programmer Dvorak, with minus)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>colemak</name>
+ <description>Latvian (Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>apostrophecolemak</name>
+ <description>Latvian (Colemak, with apostrophe)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Latvian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>us</name>
+ <shortDescription>en</shortDescription>
+ <description>English (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>intl-unicode</name>
+ <description>English (US, intl., AltGr Unicode combining)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>alt-intl-unicode</name>
+ <description>English (US, intl., AltGr Unicode combining, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ats</name>
+ <description>Atsina</description>
+ <!-- No ISO code in ISO639-2, only draft ISO693-3 -->
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>crd</name>
+ <description>Coeur d'Alene Salish</description>
+ <languageList>
+ <iso639Id>crd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>cz_sk_de</name>
+ <description>Czech Slovak and German (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>cze</iso639Id>
+ <iso639Id>slo</iso639Id>
+ <iso639Id>ger</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>drix</name>
+ <description>English (Drix)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>de_se_fi</name>
+ <description>German, Swedish and Finnish (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>swe</iso639Id>
+ <iso639Id>fin</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ibm238l</name>
+ <description>English (US, IBM Arabic 238_L)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>English (US, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx</name>
+ <description>English (Carpalx)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-intl</name>
+ <description>English (Carpalx, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-altgr-intl</name>
+ <description>English (Carpalx, intl., with AltGr dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-full</name>
+ <description>English (Carpalx, full optimization)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-full-intl</name>
+ <description>English (Carpalx, full optimization, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-full-altgr-intl</name>
+ <description>English (Carpalx, full optimization, intl., with AltGr dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>3l</name>
+ <description>English (3l)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>3l-cros</name>
+ <description>English (3l, Chromebook)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>3l-emacs</name>
+ <description>English (3l, emacs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>scn</name>
+ <description>Sicilian (US keyboard)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>ita</iso639Id>
+ <iso639Id>scn</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>pl</name>
+ <shortDescription>pl</shortDescription>
+ <description>Polish</description>
+ <languageList>
+ <iso639Id>pol</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>intl</name>
+ <description>Polish (intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>colemak</name>
+ <description>Polish (Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Polish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>glagolica</name>
+ <description>Polish (Glagolica)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ro</name>
+ <shortDescription>ro</shortDescription>
+ <description>Romanian</description>
+ <languageList>
+ <iso639Id>rum</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>crh_dobruja</name>
+ <shortDescription>crh</shortDescription>
+ <description>Crimean Tatar (Dobruja Q)</description>
+ <languageList>
+ <iso639Id>crh</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ergonomic</name>
+ <description>Romanian (ergonomic Touchtype)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Romanian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>rs</name>
+ <shortDescription>sr</shortDescription>
+ <description>Serbian</description>
+ <languageList>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>combiningkeys</name>
+ <description>Serbian (combining accents instead of dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ru</name>
+ <shortDescription>ru</shortDescription>
+ <description>Russian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>chu</name>
+ <description>Church Slavonic</description>
+ <languageList>
+ <iso639Id>chu</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ruu</name>
+ <shortDescription>ru</shortDescription>
+ <description>Russian (with Ukrainian-Belorussian layout)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ <iso639Id>ukr</iso639Id>
+ <iso639Id>bel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>rulemak</name>
+ <description>Russian (Rulemak, phonetic Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>phonetic_mac</name>
+ <description>Russian (phonetic Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Russian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>unipunct</name>
+ <description>Russian (with US punctuation)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>prxn</name>
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Polyglot and Reactionary)</description>
+ <countryList>
+ <iso3166Id>RU</iso3166Id>
+ <iso3166Id>RS</iso3166Id>
+ <iso3166Id>BA</iso3166Id>
+ <iso3166Id>ME</iso3166Id>
+ <iso3166Id>MK</iso3166Id>
+ <iso3166Id>BG</iso3166Id>
+ <iso3166Id>MD</iso3166Id>
+ <iso3166Id>UA</iso3166Id>
+ <iso3166Id>BY</iso3166Id>
+ <iso3166Id>KZ</iso3166Id>
+ <iso3166Id>MN</iso3166Id>
+ <iso3166Id>KG</iso3166Id>
+ <iso3166Id>TJ</iso3166Id>
+ <iso3166Id>UZ</iso3166Id>
+ <iso3166Id>TM</iso3166Id>
+ <iso3166Id>AZ</iso3166Id>
+ </countryList>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ <iso639Id>rus-petr1708</iso639Id>
+ <iso639Id>ukr</iso639Id>
+ <iso639Id>bel</iso639Id>
+ <iso639Id>srp</iso639Id>
+ <iso639Id>mkd</iso639Id>
+ <iso639Id>bul</iso639Id>
+ <iso639Id>chu</iso639Id>
+ <iso639Id>rum-Cyrl</iso639Id>
+ <iso639Id>kaz</iso639Id>
+ <iso639Id>kir</iso639Id>
+ <iso639Id>uzb</iso639Id>
+ <iso639Id>bak</iso639Id>
+ <iso639Id>aze</iso639Id>
+ <iso639Id>tat</iso639Id>
+ <iso639Id>uig</iso639Id>
+ <iso639Id>kdr</iso639Id>
+ <iso639Id>tyv</iso639Id>
+ <iso639Id>kjh</iso639Id>
+ <iso639Id>crh</iso639Id>
+ <iso639Id>tgk</iso639Id>
+ <iso639Id>abk</iso639Id>
+ <iso639Id>sah</iso639Id>
+ <iso639Id>mon</iso639Id>
+ <iso639Id>kal</iso639Id>
+ <iso639Id>sjd</iso639Id>
+ <iso639Id>chv</iso639Id>
+ <iso639Id>oss</iso639Id>
+ <iso639Id>krl</iso639Id>
+ <iso639Id>ale</iso639Id>
+ <iso639Id>wbl</iso639Id>
+ <iso639Id>kur</iso639Id>
+ <iso639Id>niv</iso639Id>
+ <iso639Id>dng</iso639Id>
+ <iso639Id>kom</iso639Id>
+ <iso639Id>udm</iso639Id>
+ <iso639Id>sel</iso639Id>
+ <iso639Id>ulc</iso639Id>
+ <iso639Id>ude</iso639Id>
+ <iso639Id>oac</iso639Id>
+ <iso639Id>oaa</iso639Id>
+ <iso639Id>gld</iso639Id>
+ <iso639Id>eve</iso639Id>
+ <iso639Id>evn</iso639Id>
+ <iso639Id>kca</iso639Id>
+ <iso639Id>itl</iso639Id>
+ <iso639Id>yrk</iso639Id>
+ <iso639Id>neg</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>am</name>
+ <shortDescription>hy</shortDescription>
+ <description>Armenian</description>
+ <languageList>
+ <iso639Id>hye</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>olpc-phonetic</name>
+ <description>Armenian (OLPC, phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>il</name>
+ <shortDescription>he</shortDescription>
+ <description>Hebrew</description>
+ <languageList>
+ <iso639Id>heb</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>biblicalSIL</name>
+ <description>Hebrew (Biblical, SIL phonetic)</description>
+ <languageList>
+ <iso639Id>heb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ara</name>
+ <shortDescription>ar</shortDescription>
+ <description>Arabic</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Arabic (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>basic_ext</name>
+ <description>Arabic (Arabic numerals, extensions in the 4th level)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>basic_ext_digits</name>
+ <description>Arabic (Eastern Arabic numerals, extensions in the 4th level)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>uga</name>
+ <description>Ugaritic instead of Arabic</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>be</name>
+ <shortDescription>be</shortDescription>
+ <description>Belgian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Belgian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>br</name>
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese (Brazil)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Portuguese (Brazil, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>cz</name>
+ <shortDescription>cs</shortDescription>
+ <description>Czech</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Czech (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>prog</name>
+ <description>Czech (programming)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>typo</name>
+ <description>Czech (typographic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>coder</name>
+ <description>Czech (coder)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>prog_typo</name>
+ <description>Czech (programming, typographic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>dk</name>
+ <shortDescription>da</shortDescription>
+ <description>Danish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Danish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>nl</name>
+ <shortDescription>nl</shortDescription>
+ <description>Dutch</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Dutch (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ee</name>
+ <shortDescription>et</shortDescription>
+ <description>Estonian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Estonian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>fi</name>
+ <shortDescription>fi</shortDescription>
+ <description>Finnish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Finnish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>das</name>
+ <description>Finnish (DAS)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>fidvorak</name>
+ <description>Finnish (Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>fr</name>
+ <shortDescription>fr</shortDescription>
+ <description>French</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>French (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>us-alt</name>
+ <description>French (US with dead keys, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>us-azerty</name>
+ <description>French (US, AZERTY)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>gr</name>
+ <shortDescription>gr</shortDescription>
+ <description>Greek</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Greek (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>colemak</name>
+ <description>Greek (Colemak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>it</name>
+ <shortDescription>it</shortDescription>
+ <description>Italian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Italian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>lld</name>
+ <shortDescription>it_lld</shortDescription>
+ <description>Italian (Ladin)</description>
+ <languageList>
+ <iso639Id>it</iso639Id>
+ <iso639Id>lld</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>jp</name>
+ <shortDescription>ja</shortDescription>
+ <description>Japanese</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Japanese (Sun Type 6)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type7</name>
+ <description>Japanese (Sun Type 7, PC-compatible)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type7_suncompat</name>
+ <description>Japanese (Sun Type 7, Sun-compatible)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>no</name>
+ <shortDescription>no</shortDescription>
+ <description>Norwegian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Norwegian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>pt</name>
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Portuguese (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>pt</name>
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>colemak</name>
+ <description>Portuguese (Colemak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>sk</name>
+ <shortDescription>sk</shortDescription>
+ <description>Slovak</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>acc</name>
+ <description>Slovak (ACC layout, only accented letters)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Slovak (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>es</name>
+ <shortDescription>es</shortDescription>
+ <description>Spanish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Spanish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>se</name>
+ <shortDescription>sv</shortDescription>
+ <description>Swedish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>dvorak_a5</name>
+ <description>Swedish (Dvorak A5)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Swedish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ovd</name>
+ <description>Elfdalian (Swedish, with combining ogonek)</description>
+ <languageList>
+ <iso639Id>ovd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ch</name>
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6_de</name>
+ <description>German (Switzerland, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6_fr</name>
+ <description>French (Switzerland, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>tr</name>
+ <shortDescription>tr</shortDescription>
+ <description>Turkish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Turkish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ua</name>
+ <shortDescription>uk</shortDescription>
+ <description>Ukrainian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Ukrainian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>gb</name>
+ <shortDescription>en</shortDescription>
+ <description>English (UK)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>English (UK, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>kr</name>
+ <shortDescription>ko</shortDescription>
+ <description>Korean</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Korean (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>vn</name>
+ <!-- Keyboard indicator for Vietnamese layouts -->
+ <shortDescription>vi</shortDescription>
+ <description>Vietnamese</description>
+ <languageList>
+ <iso639Id>vie</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>aderty</name>
+ <description>Vietnamese (AÐERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>qderty</name>
+ <description>Vietnamese (QĐERTY)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>eu</name>
+ <!-- Keyboard indicator for European layouts -->
+ <shortDescription>eu</shortDescription>
+ <description>EurKEY (US)</description>
+ <languageList>
+ <iso639Id>cat</iso639Id>
+ <iso639Id>dan</iso639Id>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>est</iso639Id>
+ <iso639Id>fao</iso639Id>
+ <iso639Id>fin</iso639Id>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>gre</iso639Id>
+ <iso639Id>gsw</iso639Id>
+ <iso639Id>ita</iso639Id>
+ <iso639Id>lav</iso639Id>
+ <iso639Id>lit</iso639Id>
+ <iso639Id>nld</iso639Id>
+ <iso639Id>nor</iso639Id>
+ <iso639Id>por</iso639Id>
+ <iso639Id>spa</iso639Id>
+ <iso639Id>swe</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>cm</name>
+ <shortDescription>cm</shortDescription>
+ <description>English (Cameroon)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>mmuock</name>
+ <description>Mmuock</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>trans</name>
+ <!-- Keyboard layouts for transcription and transliteration systems -->
+ <description>International Phonetic Alphabet</description>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>in</name>
+ <!-- Keyboard indicator for Indian layouts -->
+ <shortDescription>in</shortDescription>
+ <description>Indian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>modi-kagapa</name>
+ <shortDescription>mr</shortDescription>
+ <description>Modi (KaGaPa phonetic)</description>
+ <languageList>
+ <iso639Id>mar</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ </layoutList>
+ <optionList>
+ <group allowMultipleSelection="true">
+ <!-- The key combination used to choose the 3rd (and 4th, together with Shift)
+ level of symbols -->
+ <configItem popularity="exotic">
+ <name>lv3</name>
+ <description>Key to choose the 3rd level</description>
+ </configItem>
+ <option>
+ <configItem popularity="exotic">
+ <name>lv3:4_switch_isolated</name>
+ <description>Number key 4 when pressed in isolation</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem popularity="exotic">
+ <name>lv3:9_switch_isolated</name>
+ <description>Number key 9 when pressed in isolation</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Tweaking the position of the "(" and ")" keys -->
+ <configItem popularity="exotic">
+ <name>parens</name>
+ <description>Parentheses position</description>
+ </configItem>
+ <option>
+ <configItem popularity="exotic">
+ <name>parens:swap_brackets</name>
+ <description>Swap with square brackets</description>
+ </configItem>
+ </option>
+ </group>
+ </optionList>
+</xkbConfigRegistry>
diff --git a/test/data/rules/base.xml b/test/data/rules/base.xml
new file mode 100644
index 0000000..a13af8f
--- /dev/null
+++ b/test/data/rules/base.xml
@@ -0,0 +1,7705 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xkbConfigRegistry SYSTEM "xkb.dtd">
+<xkbConfigRegistry version="1.1">
+ <modelList>
+ <model>
+ <configItem>
+ <name>pc86</name>
+ <description>Generic 86-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc101</name>
+ <description>Generic 101-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc102</name>
+ <description>Generic 102-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc104</name>
+ <description>Generic 104-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc104alt</name>
+ <description>Generic 104-key PC with L-shaped Enter key</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc105</name>
+ <description>Generic 105-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dell101</name>
+ <description>Dell 101-key PC</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>latitude</name>
+ <description>Dell Latitude laptop</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dellm65</name>
+ <description>Dell Precision M65 laptop</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>everex</name>
+ <description>Everex STEPnote</description>
+ <vendor>Everex</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>flexpro</name>
+ <description>Keytronic FlexPro</description>
+ <vendor>Keytronic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoft</name>
+ <description>Microsoft Natural</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>omnikey101</name>
+ <description>Northgate OmniKey 101</description>
+ <vendor>Northgate</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>winbook</name>
+ <description>Winbook Model XP5</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc98</name>
+ <description>PC-98</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>a4techKB21</name>
+ <description>A4Tech KB-21</description>
+ <vendor>A4Tech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>a4techKBS8</name>
+ <description>A4Tech KBS-8</description>
+ <vendor>A4Tech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>a4_rfkb23</name>
+ <description>A4Tech Wireless Desktop RFKB-23</description>
+ <vendor>A4Tech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>airkey</name>
+ <description>Acer AirKey V</description>
+ <vendor>Acer</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>azonaRF2300</name>
+ <description>Azona RF2300 wireless Internet</description>
+ <vendor>Azona</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>scorpius</name>
+ <description>Advance Scorpius KI</description>
+ <vendor>Scorpius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>brother</name>
+ <description>Brother Internet</description>
+ <vendor>Brother</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc5113rf</name>
+ <description>BTC 5113RF Multimedia</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc5126t</name>
+ <description>BTC 5126T</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc6301urf</name>
+ <description>BTC 6301URF</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9000</name>
+ <description>BTC 9000</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9000a</name>
+ <description>BTC 9000A</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9001ah</name>
+ <description>BTC 9001AH</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc5090</name>
+ <description>BTC 5090</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9019u</name>
+ <description>BTC 9019U</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9116u</name>
+ <description>BTC 9116U Mini Wireless Internet and Gaming</description>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherryblue</name>
+ <description>Cherry Blue Line CyBo@rd</description>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherryblueb</name>
+ <description>Cherry CyMotion Master XPress</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherrybluea</name>
+ <description>Cherry Blue Line CyBo@rd (alt.)</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherrycyboard</name>
+ <description>Cherry CyBo@rd USB-Hub</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherrycmexpert</name>
+ <description>Cherry CyMotion Expert</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherrybunlim</name>
+ <description>Cherry B.UNLIMITED</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chicony</name>
+ <description>Chicony Internet</description>
+ <vendor>Chicony</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chicony0108</name>
+ <description>Chicony KU-0108</description>
+ <vendor>Chicony</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chicony0420</name>
+ <description>Chicony KU-0420</description>
+ <vendor>Chicony</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chicony9885</name>
+ <description>Chicony KB-9885</description>
+ <vendor>Chicony</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compaqeak8</name>
+ <description>Compaq Easy Access</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compaqik7</name>
+ <description>Compaq Internet (7 keys)</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compaqik13</name>
+ <description>Compaq Internet (13 keys)</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compaqik18</name>
+ <description>Compaq Internet (18 keys)</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cymotionlinux</name>
+ <description>Cherry CyMotion Master Linux</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>armada</name>
+ <description>Compaq Armada laptop</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>presario</name>
+ <description>Compaq Presario laptop</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>ipaq</name>
+ <description>Compaq iPaq</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dell</name>
+ <description>Dell</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dellsk8125</name>
+ <description>Dell SK-8125</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dellsk8135</name>
+ <description>Dell SK-8135</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dellusbmm</name>
+ <description>Dell USB Multimedia</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>inspiron</name>
+ <description>Dell Inspiron 6000/8000 laptop</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>precision_m</name>
+ <description>Dell Precision M laptop</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dexxa</name>
+ <description>Dexxa Wireless Desktop</description>
+ <vendor>Dexxa</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>diamond</name>
+ <description>Diamond 9801/9802</description>
+ <vendor>Diamond</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dtk2000</name>
+ <description>DTK2000</description>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>ennyah_dkb1008</name>
+ <description>Ennyah DKB-1008</description>
+ <vendor>Ennyah</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>fscaa1667g</name>
+ <description>Fujitsu-Siemens Amilo laptop</description>
+ <vendor>Fujitsu-Siemens</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>genius</name>
+ <description>Genius Comfy KB-16M/Multimedia KWD-910</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>geniuscomfy</name>
+ <description>Genius Comfy KB-12e</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>geniuscomfy2</name>
+ <description>Genius Comfy KB-21e-Scroll</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>geniuskb19e</name>
+ <description>Genius KB-19e NB</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>geniuskkb2050hs</name>
+ <description>Genius KKB-2050HS</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>gyration</name>
+ <description>Gyration</description>
+ <vendor>Gyration</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>kinesis</name>
+ <description>Kinesis</description>
+ <vendor>Kinesis</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logitech_base</name>
+ <description>Logitech</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logitech_g15</name>
+ <description>Logitech G15 extra keys via G15daemon</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpi6</name>
+ <description>Hewlett-Packard Internet</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hp250x</name>
+ <description>Hewlett-Packard NEC SK-2500 Multimedia</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpxe3gc</name>
+ <description>Hewlett-Packard Omnibook XE3 GC</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpxe3gf</name>
+ <description>Hewlett-Packard Omnibook XE3 GF</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpxt1000</name>
+ <description>Hewlett-Packard Omnibook XT1000</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpdv5</name>
+ <description>Hewlett-Packard Pavilion dv5</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpzt11xx</name>
+ <description>Hewlett-Packard Pavilion ZT1100</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hp500fa</name>
+ <description>Hewlett-Packard Omnibook 500 FA</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hp5xx</name>
+ <description>Hewlett-Packard Omnibook 500</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpnx9020</name>
+ <description>Hewlett-Packard nx9020</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hp6000</name>
+ <description>Hewlett-Packard Omnibook 6000/6100</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>honeywell_euroboard</name>
+ <description>Honeywell Euroboard</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpmini110</name>
+ <description>Hewlett-Packard Mini 110 laptop</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>rapidaccess</name>
+ <description>IBM Rapid Access</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>rapidaccess2</name>
+ <description>IBM Rapid Access II</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>thinkpad</name>
+ <description>IBM ThinkPad 560Z/600/600E/A22E</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>thinkpad60</name>
+ <description>IBM ThinkPad R60/T60/R61/T61</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>thinkpadz60</name>
+ <description>IBM ThinkPad Z60m/Z60t/Z61m/Z61t</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>ibm_spacesaver</name>
+ <description>IBM Space Saver</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiaccess</name>
+ <description>Logitech Access</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiclx300</name>
+ <description>Logitech Cordless Desktop LX-300</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logii350</name>
+ <description>Logitech Internet 350</description>
+ <vendor>Logitech</vendor>
+ <hwList> <hwId>046d:c313</hwId></hwList>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logimel</name>
+ <description>Logitech Internet 350</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicd</name>
+ <description>Logitech Cordless Desktop</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicd_it</name>
+ <description>Logitech Cordless Desktop iTouch</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicd_nav</name>
+ <description>Logitech Cordless Desktop Navigator</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicd_opt</name>
+ <description>Logitech Cordless Desktop Optical</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicda</name>
+ <description>Logitech Cordless Desktop (alt.)</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicdpa2</name>
+ <description>Logitech Cordless Desktop Pro (2nd alt.)</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicfn</name>
+ <description>Logitech Cordless Freedom/Desktop Navigator</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicdn</name>
+ <description>Logitech Cordless Desktop Navigator</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiitc</name>
+ <description>Logitech iTouch Cordless Y-RB6</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiik</name>
+ <description>Logitech Internet</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>itouch</name>
+ <description>Logitech iTouch</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicink</name>
+ <description>Logitech Internet Navigator</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiex110</name>
+ <description>Logitech Cordless Desktop EX110</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiinkse</name>
+ <description>Logitech iTouch Internet Navigator SE</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiinkseusb</name>
+ <description>Logitech iTouch Internet Navigator SE USB</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiultrax</name>
+ <description>Logitech Ultra-X</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiultraxc</name>
+ <description>Logitech Ultra-X Cordless Media Desktop</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logidinovo</name>
+ <description>Logitech diNovo</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logidinovoedge</name>
+ <description>Logitech diNovo Edge</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>mx1998</name>
+ <description>Memorex MX1998</description>
+ <vendor>Memorex</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>mx2500</name>
+ <description>Memorex MX2500 EZ-Access</description>
+ <vendor>Memorex</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>mx2750</name>
+ <description>Memorex MX2750</description>
+ <vendor>Memorex</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoft4000</name>
+ <description>Microsoft Natural Ergonomic 4000</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoft7000</name>
+ <description>Microsoft Natural Wireless Ergonomic 7000</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftinet</name>
+ <description>Microsoft Internet</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftpro</name>
+ <description>Microsoft Natural Pro/Internet Pro</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftprousb</name>
+ <description>Microsoft Natural Pro USB/Internet Pro</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftprooem</name>
+ <description>Microsoft Natural Pro OEM</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>vsonku306</name>
+ <description>ViewSonic KU-306 Internet</description>
+ <vendor>ViewSonic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftprose</name>
+ <description>Microsoft Internet Pro (Swedish)</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftoffice</name>
+ <description>Microsoft Office Keyboard</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftmult</name>
+ <description>Microsoft Wireless Multimedia 1.0A</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftsurface</name>
+ <description>Microsoft Surface</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftelite</name>
+ <description>Microsoft Natural Elite</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftccurve2k</name>
+ <description>Microsoft Comfort Curve 2000</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>oretec</name>
+ <description>Ortek Multimedia/Internet MCK-800</description>
+ <vendor>Ortek</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>propeller</name>
+ <description>Propeller Voyager KTEZ-1000</description>
+ <vendor>KeyTronic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>qtronix</name>
+ <description>QTronix Scorpius 98N+</description>
+ <vendor>QTronix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>samsung4500</name>
+ <description>Samsung SDM 4500P</description>
+ <vendor>Samsung</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>samsung4510</name>
+ <description>Samsung SDM 4510P</description>
+ <vendor>Samsung</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sanwaskbkg3</name>
+ <description>Sanwa Supply SKB-KG3</description>
+ <vendor>Sanwa Supply Inc.</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sk1300</name>
+ <description>NEC SK-1300</description>
+ <vendor>NEC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sk2500</name>
+ <description>NEC SK-2500</description>
+ <vendor>NEC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sk6200</name>
+ <description>NEC SK-6200</description>
+ <vendor>NEC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sk7100</name>
+ <description>NEC SK-7100</description>
+ <vendor>NEC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sp_inet</name>
+ <description>Super Power Multimedia</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sven</name>
+ <description>SVEN Ergonomic 2500</description>
+ <vendor>SVEN</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sven303</name>
+ <description>SVEN Slim 303</description>
+ <vendor>SVEN</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>symplon</name>
+ <description>Symplon PaceBook tablet</description>
+ <vendor>Symplon</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>toshiba_s3000</name>
+ <description>Toshiba Satellite S3000</description>
+ <vendor>Toshiba</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>trust</name>
+ <description>Trust Wireless Classic</description>
+ <vendor>Trust</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>trustda</name>
+ <description>Trust Direct Access</description>
+ <vendor>Trust</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>trust_slimline</name>
+ <description>Trust Slimline</description>
+ <vendor>Trust</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2020</name>
+ <description>TypeMatrix EZ-Reach 2020</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2030PS2</name>
+ <description>TypeMatrix EZ-Reach 2030 PS2</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2030USB</name>
+ <description>TypeMatrix EZ-Reach 2030 USB</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2030USB-102</name>
+ <description>TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2030USB-106</name>
+ <description>TypeMatrix EZ-Reach 2030 USB (106:JP mode)</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>yahoo</name>
+ <description>Yahoo! Internet</description>
+ <vendor>Yahoo!</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macbook78</name>
+ <description>MacBook/MacBook Pro</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macbook79</name>
+ <description>MacBook/MacBook Pro (intl.)</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macintosh</name>
+ <description>Macintosh</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macintosh_old</name>
+ <description>Macintosh Old</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macintosh_hhk</name>
+ <description>Happy Hacking for Mac</description>
+ <vendor>Fujitsu</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>acer_c300</name>
+ <description>Acer C300</description>
+ <vendor>Acer</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>acer_ferrari4k</name>
+ <description>Acer Ferrari 4000</description>
+ <vendor>Acer</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>acer_laptop</name>
+ <description>Acer laptop</description>
+ <vendor>Acer</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>asus_laptop</name>
+ <description>Asus laptop</description>
+ <vendor>Asus</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>apple</name>
+ <description>Apple</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>apple_laptop</name>
+ <description>Apple laptop</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>applealu_ansi</name>
+ <description>Apple Aluminium (ANSI)</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>applealu_iso</name>
+ <description>Apple Aluminium (ISO)</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>applealu_jis</name>
+ <description>Apple Aluminium (JIS)</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>silvercrest</name>
+ <description>Silvercrest Multimedia Wireless</description>
+ <vendor>Silvercrest</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>emachines</name>
+ <description>eMachines m6800 laptop</description>
+ <vendor>eMachines</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>benqx</name>
+ <description>BenQ X-Touch</description>
+ <vendor>BenQ</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>benqx730</name>
+ <description>BenQ X-Touch 730</description>
+ <vendor>BenQ</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>benqx800</name>
+ <description>BenQ X-Touch 800</description>
+ <vendor>BenQ</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hhk</name>
+ <description>Happy Hacking</description>
+ <vendor>Fujitsu</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>classmate</name>
+ <description>Classmate PC</description>
+ <vendor>Intel</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>olpc</name>
+ <description>OLPC</description>
+ <vendor>OLPC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type7_usb</name>
+ <description>Sun Type 7 USB</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type7_euro_usb</name>
+ <description>Sun Type 7 USB (European)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type7_unix_usb</name>
+ <description>Sun Type 7 USB (Unix)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type7_jp_usb</name>
+ <description>Sun Type 7 USB (Japanese)/Japanese 106-key</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_usb</name>
+ <description>Sun Type 6/7 USB</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_euro_usb</name>
+ <description>Sun Type 6/7 USB (European)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_unix_usb</name>
+ <description>Sun Type 6 USB (Unix)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_jp_usb</name>
+ <description>Sun Type 6 USB (Japanese)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_jp</name>
+ <description>Sun Type 6 (Japanese)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>targa_v811</name>
+ <description>Targa Visionary 811</description>
+ <vendor>Targa</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>unitekkb1925</name>
+ <description>Unitek KB-1925</description>
+ <vendor>Unitek Group</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compalfl90</name>
+ <description>FL90</description>
+ <vendor>Compal Electronics</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>creativedw7000</name>
+ <description>Creative Desktop Wireless 7000</description>
+ <vendor>Creative</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>teck227</name>
+ <description>Truly Ergonomic 227</description>
+ <vendor>Truly Ergonomic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>teck229</name>
+ <description>Truly Ergonomic 229</description>
+ <vendor>Truly Ergonomic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>apex300</name>
+ <description>SteelSeries Apex 300 (Apex RAW)</description>
+ <vendor>SteelSeries</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chromebook</name>
+ <description>Chromebook</description>
+ <vendor>Google</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>teck227</name>
+ <description>Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys)</description>
+ <vendor>Megawin Technology</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>teck229</name>
+ <description>Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key)</description>
+ <vendor>Megawin Technology</vendor>
+ </configItem>
+ </model>
+ </modelList>
+ <layoutList>
+ <layout>
+ <configItem>
+ <name>us</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>chr</name>
+ <!-- Keyboard indicator for Cherokee layouts -->
+ <shortDescription>chr</shortDescription>
+ <description>Cherokee</description>
+ <languageList>
+ <iso639Id>chr</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>haw</name>
+ <shortDescription>haw</shortDescription>
+ <description>Hawaiian</description>
+ <languageList>
+ <iso639Id>haw</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>euro</name>
+ <description>English (US, euro on 5)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>English (US, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alt-intl</name>
+ <description>English (US, alt. intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>English (Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>English (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-intl</name>
+ <description>English (Dvorak, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-alt-intl</name>
+ <description>English (Dvorak, alt. intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-l</name>
+ <description>English (Dvorak, left-handed)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-r</name>
+ <description>English (Dvorak, right-handed)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-classic</name>
+ <description>English (classic Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvp</name>
+ <description>English (programmer Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rus</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (US, phonetic)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>English (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>altgr-intl</name>
+ <description>English (intl., with AltGr dead keys)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>fra</iso639Id>
+ <iso639Id>deu</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>olpc2</name>
+ <description>English (the divide/multiply toggle the layout)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hbs</name>
+ <description>Serbo-Croatian (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>bos</iso639Id>
+ <iso639Id>hbs</iso639Id>
+ <iso639Id>hrv</iso639Id>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>norman</name>
+ <description>English (Norman)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>workman</name>
+ <description>English (Workman)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>workman-intl</name>
+ <description>English (Workman, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>af</name>
+ <!-- Keyboard indicator for Afghani layouts -->
+ <shortDescription>fa</shortDescription>
+ <description>Afghani</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ps</name>
+ <!-- Keyboard indicator for Pashto layouts -->
+ <shortDescription>ps</shortDescription>
+ <description>Pashto</description>
+ <languageList>
+ <iso639Id>pus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>uz</name>
+ <!-- Keyboard indicator for Uzbek layouts -->
+ <shortDescription>uz</shortDescription>
+ <description>Uzbek (Afghanistan)</description>
+ <languageList>
+ <iso639Id>uzb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>olpc-ps</name>
+ <!-- Keyboard indicator for Pashto layouts -->
+ <shortDescription>ps</shortDescription>
+ <description>Pashto (Afghanistan, OLPC)</description>
+ <languageList>
+ <iso639Id>pus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fa-olpc</name>
+ <!-- Keyboard indicator for Persian layouts -->
+ <shortDescription>fa</shortDescription>
+ <description>Persian (Afghanistan, Dari OLPC)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>uz-olpc</name>
+ <!-- Keyboard indicator for Uzbek layouts -->
+ <shortDescription>uz</shortDescription>
+ <description>Uzbek (Afghanistan, OLPC)</description>
+ <languageList>
+ <iso639Id>uzb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ara</name>
+ <!-- Keyboard indicator for Arabic layouts -->
+ <shortDescription>ar</shortDescription>
+ <description>Arabic</description>
+ <countryList>
+ <iso3166Id>AE</iso3166Id>
+ <iso3166Id>BH</iso3166Id>
+ <iso3166Id>DZ</iso3166Id>
+ <iso3166Id>EG</iso3166Id>
+ <iso3166Id>EH</iso3166Id>
+ <iso3166Id>JO</iso3166Id>
+ <iso3166Id>KW</iso3166Id>
+ <iso3166Id>LB</iso3166Id>
+ <iso3166Id>LY</iso3166Id>
+ <iso3166Id>MA</iso3166Id>
+ <iso3166Id>MR</iso3166Id>
+ <iso3166Id>OM</iso3166Id>
+ <iso3166Id>PS</iso3166Id>
+ <iso3166Id>QA</iso3166Id>
+ <iso3166Id>SA</iso3166Id>
+ <iso3166Id>SD</iso3166Id>
+ <iso3166Id>SY</iso3166Id>
+ <iso3166Id>TN</iso3166Id>
+ <iso3166Id>YE</iso3166Id>
+ </countryList>
+ <languageList>
+ <iso639Id>ara</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>azerty</name>
+ <description>Arabic (AZERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>azerty_digits</name>
+ <description>Arabic (AZERTY, Eastern Arabic numerals)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>digits</name>
+ <description>Arabic (Eastern Arabic numerals)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Arabic (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty_digits</name>
+ <description>Arabic (QWERTY, Eastern Arabic numerals)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>buckwalter</name>
+ <description>Arabic (Buckwalter)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>olpc</name>
+ <description>Arabic (OLPC)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Arabic (Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>al</name>
+ <!-- Keyboard indicator for Albanian layouts -->
+ <shortDescription>sq</shortDescription>
+ <description>Albanian</description>
+ <languageList>
+ <iso639Id>sqi</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>plisi</name>
+ <description>Albanian (Plisi)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>veqilharxhi</name>
+ <description>Albanian (Veqilharxhi)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>am</name>
+ <!-- Keyboard indicator for Armenian layouts -->
+ <shortDescription>hy</shortDescription>
+ <description>Armenian</description>
+ <languageList>
+ <iso639Id>hye</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Armenian (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic-alt</name>
+ <description>Armenian (alt. phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eastern</name>
+ <description>Armenian (eastern)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>western</name>
+ <description>Armenian (western)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eastern-alt</name>
+ <description>Armenian (alt. eastern)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>at</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Austria)</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>German (Austria, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>German (Austria, Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>German (Austria, Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>au</name>
+ <!-- Keyboard indicator for Australian layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Australian)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>az</name>
+ <!-- Keyboard indicator for Azerbaijani layouts -->
+ <shortDescription>az</shortDescription>
+ <description>Azerbaijani</description>
+ <languageList>
+ <iso639Id>aze</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>cyrillic</name>
+ <description>Azerbaijani (Cyrillic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>by</name>
+ <!-- Keyboard indicator for Belarusian layouts -->
+ <shortDescription>by</shortDescription>
+ <description>Belarusian</description>
+ <languageList>
+ <iso639Id>bel</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Belarusian (legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin</name>
+ <description>Belarusian (Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ru</name>
+ <description>Russian (Belarus)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>Belarusian (intl.)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>be</name>
+ <!-- Keyboard indicator for Belgian layouts -->
+ <shortDescription>be</shortDescription>
+ <description>Belgian</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ <iso639Id>nld</iso639Id>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>oss</name>
+ <description>Belgian (alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_latin9</name>
+ <description>Belgian (Latin-9 only, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_sundeadkeys</name>
+ <description>Belgian (Sun dead keys, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>iso-alternate</name>
+ <description>Belgian (ISO, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Belgian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Belgian (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>wang</name>
+ <description>Belgian (Wang 724 AZERTY)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>bd</name>
+ <!-- Keyboard indicator for Bangla layouts -->
+ <shortDescription>bn</shortDescription>
+ <description>Bangla</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>probhat</name>
+ <description>Bangla (Probhat)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>in</name>
+ <!-- Keyboard indicator for Indian layouts -->
+ <shortDescription>in</shortDescription>
+ <description>Indian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ben</name>
+ <!-- Keyboard indicator for Bangla layouts -->
+ <shortDescription>bn</shortDescription>
+ <description>Bangla (India)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_probhat</name>
+ <!-- Keyboard indicator for Bangla layouts -->
+ <shortDescription>bn</shortDescription>
+ <description>Bangla (India, Probhat)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_baishakhi</name>
+ <description>Bangla (India, Baishakhi)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_bornona</name>
+ <description>Bangla (India, Bornona)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_gitanjali</name>
+ <description>Bangla (India, Gitanjali)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_inscript</name>
+ <description>Bangla (India, Baishakhi Inscript)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eeyek</name>
+ <description>Manipuri (Eeyek)</description>
+ <languageList>
+ <iso639Id>mni</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>guj</name>
+ <!-- Keyboard indicator for Gujarati layouts -->
+ <shortDescription>gu</shortDescription>
+ <description>Gujarati</description>
+ <languageList>
+ <iso639Id>guj</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>guru</name>
+ <!-- Keyboard indicator for Punjabi layouts -->
+ <shortDescription>pa</shortDescription>
+ <description>Punjabi (Gurmukhi)</description>
+ <languageList>
+ <iso639Id>pan</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>jhelum</name>
+ <!-- Keyboard indicator for Punjabi layouts -->
+ <shortDescription>pa</shortDescription>
+ <description>Punjabi (Gurmukhi Jhelum)</description>
+ <languageList>
+ <iso639Id>pan</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kan</name>
+ <!-- Keyboard indicator for Kannada layouts -->
+ <shortDescription>kn</shortDescription>
+ <description>Kannada</description>
+ <languageList>
+ <iso639Id>kan</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kan-kagapa</name>
+ <!-- Keyboard indicator for Kannada layouts -->
+ <shortDescription>kn</shortDescription>
+ <description>Kannada (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>kan</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mal</name>
+ <!-- Keyboard indicator for Malayalam layouts -->
+ <shortDescription>ml</shortDescription>
+ <description>Malayalam</description>
+ <languageList>
+ <iso639Id>mal</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mal_lalitha</name>
+ <!-- Keyboard indicator for Malayalam layouts -->
+ <shortDescription>ml</shortDescription>
+ <description>Malayalam (Lalitha)</description>
+ <languageList>
+ <iso639Id>mal</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mal_enhanced</name>
+ <!-- Keyboard indicator for Malayalam layouts -->
+ <shortDescription>ml</shortDescription>
+ <description>Malayalam (enhanced Inscript, with rupee)</description>
+ <languageList>
+ <iso639Id>mal</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ori</name>
+ <!-- Keyboard indicator for Oriya layouts -->
+ <shortDescription>or</shortDescription>
+ <description>Oriya</description>
+ <languageList>
+ <iso639Id>ori</iso639Id>
+ <!-- sat-Orya: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>olck</name>
+ <!-- Keyboard indicator for Ol Chiki layouts -->
+ <shortDescription>sat</shortDescription>
+ <description>Ol Chiki</description>
+ <languageList>
+ <!-- sat-Olck: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_tamilnet</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (TamilNet '99)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_tamilnet_with_tam_nums</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (TamilNet '99 with Tamil numerals)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_tamilnet_TAB</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (TamilNet '99, TAB encoding)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_tamilnet_TSCII</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (TamilNet '99, TSCII encoding)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (Inscript)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tel</name>
+ <!-- Keyboard indicator for Telugu layouts -->
+ <shortDescription>te</shortDescription>
+ <description>Telugu</description>
+ <languageList>
+ <iso639Id>tel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tel-kagapa</name>
+ <!-- Keyboard indicator for Telugu layouts -->
+ <shortDescription>te</shortDescription>
+ <description>Telugu (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>tel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tel-sarala</name>
+ <!-- Keyboard indicator for Telugu layouts -->
+ <shortDescription>te</shortDescription>
+ <description>Telugu (Sarala)</description>
+ <languageList>
+ <iso639Id>tel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tel-kagapa</name>
+ <!-- Keyboard indicator for Telugu layouts -->
+ <shortDescription>te</shortDescription>
+ <description>Telugu (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>tel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>urd-phonetic</name>
+ <!-- Keyboard indicator for Urdu layouts -->
+ <shortDescription>ur</shortDescription>
+ <description>Urdu (phonetic)</description>
+ <languageList>
+ <iso639Id>urd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>urd-phonetic3</name>
+ <!-- Keyboard indicator for Urdu layouts -->
+ <shortDescription>ur</shortDescription>
+ <description>Urdu (alt. phonetic)</description>
+ <languageList>
+ <iso639Id>urd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>urd-winkeys</name>
+ <!-- Keyboard indicator for Urdu layouts -->
+ <shortDescription>ur</shortDescription>
+ <description>Urdu (Windows)</description>
+ <languageList>
+ <iso639Id>urd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bolnagri</name>
+ <!-- Keyboard indicator for Hindi layouts -->
+ <shortDescription>hi</shortDescription>
+ <description>Hindi (Bolnagri)</description>
+ <languageList>
+ <iso639Id>hin</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hin-wx</name>
+ <!-- Keyboard indicator for Hindi layouts -->
+ <shortDescription>hi</shortDescription>
+ <description>Hindi (Wx)</description>
+ <languageList>
+ <iso639Id>hin</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hin-kagapa</name>
+ <!-- Keyboard indicator for Hindi layouts -->
+ <shortDescription>hi</shortDescription>
+ <description>Hindi (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>hin</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>san-kagapa</name>
+ <!-- Keyboard indicator for Sanskrit layouts -->
+ <shortDescription>sa</shortDescription>
+ <description>Sanskrit (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>san</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mar-kagapa</name>
+ <!-- Keyboard indicator for Marathi layouts -->
+ <shortDescription>mr</shortDescription>
+ <description>Marathi (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>mar</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eng</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (India, with rupee)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>iipa</name>
+ <shortDescription>iipa</shortDescription>
+ <description>Indic IPA (IIPA)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+
+ <variant>
+ <configItem>
+ <name>marathi</name>
+ <shortDescription>ins</shortDescription>
+ <description>मराठी इन्स्क्रिप्ट</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ba</name>
+ <!-- Keyboard indicator for Bosnian layouts -->
+ <shortDescription>bs</shortDescription>
+ <description>Bosnian</description>
+ <languageList>
+ <iso639Id>bos</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>alternatequotes</name>
+ <description>Bosnian (with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>unicode</name>
+ <description>Bosnian (with Bosnian digraphs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>unicodeus</name>
+ <description>Bosnian (US, with Bosnian digraphs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Bosnian (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>br</name>
+ <!-- Keyboard indicator for Portuguese layouts -->
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese (Brazil)</description>
+ <languageList>
+ <iso639Id>por</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Portuguese (Brazil, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Portuguese (Brazil, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo</name>
+ <description>Portuguese (Brazil, Nativo)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo-us</name>
+ <description>Portuguese (Brazil, Nativo for US keyboards)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo-epo</name>
+ <description>Esperanto (Brazil, Nativo)</description>
+ <languageList>
+ <iso639Id>epo</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>thinkpad</name>
+ <description>Portuguese (Brazil, IBM/Lenovo ThinkPad)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>bg</name>
+ <!-- Keyboard indicator for Bulgarian layouts -->
+ <shortDescription>bg</shortDescription>
+ <description>Bulgarian</description>
+ <languageList>
+ <iso639Id>bul</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Bulgarian (traditional phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bas_phonetic</name>
+ <description>Bulgarian (new phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>dz</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (azerty layout, no dead keys)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>azerty-deadkeys</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (azerty layout, with dead keys)</description>
+ <languageList>
+ <iso639Id>kab</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty-gb-deadkeys</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (qwerty-gb layout, with dead keys)</description>
+ <languageList>
+ <iso639Id>kab</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty-us-deadkeys</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (qwerty-us layout, with dead keys)</description>
+ <languageList>
+ <iso639Id>kab</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ber</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (Algeria, Tifinagh)</description>
+ <languageList>
+ <iso639Id>kab</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ar</name>
+ <shortDescription>ar</shortDescription>
+ <description>Arabic (Algeria)</description>
+ <languageList>
+ <iso639Id>ara</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ma</name>
+ <!-- Keyboard indicator for Arabic layouts -->
+ <shortDescription>ar</shortDescription>
+ <description>Arabic (Morocco)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>french</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Morocco)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-alt</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh alt.)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-alt-phonetic</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh phonetic, alt.)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-extended</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh extended)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-phonetic</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh phonetic)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-extended-phonetic</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh extended phonetic)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>cm</name>
+ <!-- Keyboard indicator for Cameroon layouts -->
+ <shortDescription>cm</shortDescription>
+ <description>English (Cameroon)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>french</name>
+ <description>French (Cameroon)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Cameroon Multilingual (QWERTY, intl.)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>bas</iso639Id>
+ <iso639Id>nmg</iso639Id>
+ <iso639Id>fub</iso639Id>
+ <iso639Id>ewo</iso639Id>
+ <iso639Id>xmd</iso639Id>
+ <iso639Id>mfh</iso639Id>
+ <iso639Id>bkm</iso639Id>
+ <iso639Id>ozm</iso639Id>
+ <iso639Id>lns</iso639Id>
+ <iso639Id>sox</iso639Id>
+ <iso639Id>pny</iso639Id>
+ <iso639Id>wes</iso639Id>
+ <iso639Id>lem</iso639Id>
+ <iso639Id>nyj</iso639Id>
+ <iso639Id>mfk</iso639Id>
+ <iso639Id>mcp</iso639Id>
+ <iso639Id>ass</iso639Id>
+ <iso639Id>xed</iso639Id>
+ <iso639Id>dua</iso639Id>
+ <iso639Id>anv</iso639Id>
+ <iso639Id>bum</iso639Id>
+ <iso639Id>btb</iso639Id>
+ <iso639Id>bfd</iso639Id>
+ <iso639Id>azo</iso639Id>
+ <iso639Id>ken</iso639Id>
+ <iso639Id>yam</iso639Id>
+ <iso639Id>yat</iso639Id>
+ <iso639Id>yas</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>azerty</name>
+ <description>Cameroon (AZERTY, intl.)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ <iso639Id>bas</iso639Id>
+ <iso639Id>nmg</iso639Id>
+ <iso639Id>fub</iso639Id>
+ <iso639Id>ewo</iso639Id>
+ <iso639Id>xmd</iso639Id>
+ <iso639Id>mfh</iso639Id>
+ <iso639Id>bkm</iso639Id>
+ <iso639Id>ozm</iso639Id>
+ <iso639Id>lns</iso639Id>
+ <iso639Id>sox</iso639Id>
+ <iso639Id>pny</iso639Id>
+ <iso639Id>wes</iso639Id>
+ <iso639Id>lem</iso639Id>
+ <iso639Id>nyj</iso639Id>
+ <iso639Id>mfk</iso639Id>
+ <iso639Id>mcp</iso639Id>
+ <iso639Id>ass</iso639Id>
+ <iso639Id>xed</iso639Id>
+ <iso639Id>dua</iso639Id>
+ <iso639Id>anv</iso639Id>
+ <iso639Id>bum</iso639Id>
+ <iso639Id>btb</iso639Id>
+ <iso639Id>bfd</iso639Id>
+ <iso639Id>azo</iso639Id>
+ <iso639Id>ken</iso639Id>
+ <iso639Id>yam</iso639Id>
+ <iso639Id>yat</iso639Id>
+ <iso639Id>yas</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Cameroon (Dvorak, intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mmuock</name>
+ <description>Mmuock</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mm</name>
+ <!-- Keyboard indicator for Burmese layouts -->
+ <shortDescription>my</shortDescription>
+ <description>Burmese</description>
+ <languageList>
+ <iso639Id>mya</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>zawgyi</name>
+ <shortDescription>zg</shortDescription>
+ <description>Burmese Zawgyi</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ca</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Canada)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>fr-dvorak</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Canada, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr-legacy</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Canada, legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>multix</name>
+ <description>Canadian (intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>multi</name>
+ <description>Canadian (intl., 1st part)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>multi-2gr</name>
+ <description>Canadian (intl., 2nd part)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ike</name>
+ <!-- Keyboard indicator for Inuktikut layouts -->
+ <shortDescription>ike</shortDescription>
+ <description>Inuktitut</description>
+ <languageList>
+ <iso639Id>iku</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eng</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Canada)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>cd</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Democratic Republic of the Congo)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>cn</name>
+ <!-- Keyboard indicator for Chinese layouts -->
+ <shortDescription>zh</shortDescription>
+ <description>Chinese</description>
+ <languageList>
+ <iso639Id>zho</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+
+ <variant>
+ <configItem>
+ <name>mon_trad</name>
+ <description>Mongolian (Bichig)</description>
+ <languageList>
+ <iso639Id>mvf</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_trad_todo</name>
+ <description>Mongolian (Todo)</description>
+ <languageList>
+ <iso639Id>mvf</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_trad_xibe</name>
+ <description>Mongolian (Xibe)</description>
+ <languageList>
+ <iso639Id>sjo</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_trad_manchu</name>
+ <description>Mongolian (Manchu)</description>
+ <languageList>
+ <iso639Id>mnc</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_trad_galik</name>
+ <description>Mongolian (Galik)</description>
+ <languageList>
+ <iso639Id>mvf</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_todo_galik</name>
+ <description>Mongolian (Todo Galik)</description>
+ <languageList>
+ <iso639Id>mvf</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_manchu_galik</name>
+ <description>Mongolian (Manchu Galik)</description>
+ <languageList>
+ <iso639Id>mnc</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+
+ <variant>
+ <configItem>
+ <name>tib</name>
+ <description>Tibetan</description>
+ <languageList>
+ <iso639Id>tib</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tib_asciinum</name>
+ <description>Tibetan (with ASCII numerals)</description>
+ <languageList>
+ <iso639Id>tib</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ug</name>
+ <shortDescription>ug</shortDescription>
+ <description>Uyghur</description>
+ <languageList>
+ <iso639Id>uig</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>altgr-pinyin</name>
+ <description>Hanyu Pinyin (with AltGr dead keys)</description>
+ <languageList>
+ <iso639Id>zho</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>hr</name>
+ <!-- Keyboard indicator for Croatian layouts -->
+ <shortDescription>hr</shortDescription>
+ <description>Croatian</description>
+ <languageList>
+ <iso639Id>hrv</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>alternatequotes</name>
+ <description>Croatian (with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>unicode</name>
+ <description>Croatian (with Croatian digraphs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>unicodeus</name>
+ <description>Croatian (US, with Croatian digraphs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Croatian (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>cz</name>
+ <!-- Keyboard indicator for Chech layouts -->
+ <shortDescription>cs</shortDescription>
+ <description>Czech</description>
+ <languageList>
+ <iso639Id>ces</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>bksl</name>
+ <description>Czech (with &lt;\|&gt; key)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Czech (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty_bksl</name>
+ <description>Czech (QWERTY, extended backslash)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty-mac</name>
+ <description>Czech (QWERTY, Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ucw</name>
+ <description>Czech (UCW, only accented letters)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-ucw</name>
+ <description>Czech (US, Dvorak, UCW support)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rus</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Czech, phonetic)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>dk</name>
+ <!-- Keyboard indicator for Danish layouts -->
+ <shortDescription>da</shortDescription>
+ <description>Danish</description>
+ <languageList>
+ <iso639Id>dan</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Danish (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Danish (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Danish (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_nodeadkeys</name>
+ <description>Danish (Macintosh, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Danish (Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>nl</name>
+ <!-- Keyboard indicator for Dutch layouts -->
+ <shortDescription>nl</shortDescription>
+ <description>Dutch</description>
+ <languageList>
+ <iso639Id>nld</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Dutch (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Dutch (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>std</name>
+ <description>Dutch (standard)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>bt</name>
+ <!-- Keyboard indicator for Dzongkha layouts -->
+ <shortDescription>dz</shortDescription>
+ <description>Dzongkha</description>
+ <languageList>
+ <iso639Id>dzo</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ee</name>
+ <!-- Keyboard indicator for Estonian layouts -->
+ <shortDescription>et</shortDescription>
+ <description>Estonian</description>
+ <languageList>
+ <iso639Id>est</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Estonian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Estonian (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Estonian (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ir</name>
+ <!-- Keyboard indicator for Persian layouts -->
+ <shortDescription>fa</shortDescription>
+ <description>Persian</description>
+ <languageList>
+ <iso639Id>fas</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>pes_keypad</name>
+ <description>Persian (with Persian keypad)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iran, Latin Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_f</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iran, F)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_alt</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iran, Latin Alt-Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_ara</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iran, Arabic-Latin)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>iq</name>
+ <!-- Keyboard indicator for Iraqi layouts -->
+ <shortDescription>ar</shortDescription>
+ <description>Iraqi</description>
+ <languageList>
+ <iso639Id>ara</iso639Id>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ku</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iraq, Latin Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_f</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iraq, F)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_alt</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iraq, Latin Alt-Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_ara</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iraq, Arabic-Latin)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>fo</name>
+ <!-- Keyboard indicator for Faroese layouts -->
+ <shortDescription>fo</shortDescription>
+ <description>Faroese</description>
+ <languageList>
+ <iso639Id>fao</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Faroese (no dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>fi</name>
+ <!-- Keyboard indicator for Finnish layouts -->
+ <shortDescription>fi</shortDescription>
+ <description>Finnish</description>
+ <languageList>
+ <iso639Id>fin</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Finnish (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>classic</name>
+ <description>Finnish (classic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Finnish (classic, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>smi</name>
+ <description>Northern Saami (Finland)</description>
+ <languageList>
+ <iso639Id>sme</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Finnish (Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>fr</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>French (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>French (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss</name>
+ <description>French (alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_latin9</name>
+ <description>French (alt., Latin-9 only)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_nodeadkeys</name>
+ <description>French (alt., no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_sundeadkeys</name>
+ <description>French (alt., Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin9</name>
+ <description>French (legacy, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin9_nodeadkeys</name>
+ <description>French (legacy, alt., no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin9_sundeadkeys</name>
+ <description>French (legacy, alt., Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bepo</name>
+ <description>French (BEPO)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bepo_latin9</name>
+ <description>French (BEPO, Latin-9 only)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bepo_afnor</name>
+ <description>French (BEPO, AFNOR)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>French (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>French (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>azerty</name>
+ <description>French (AZERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>afnor</name>
+ <description>French (AZERTY, AFNOR)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bre</name>
+ <description>French (Breton)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oci</name>
+ <description>Occitan</description>
+ <languageList>
+ <iso639Id>oci</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>geo</name>
+ <description>Georgian (France, AZERTY Tskapo)</description>
+ <languageList>
+ <iso639Id>kat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>French (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>gh</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Ghana)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>generic</name>
+ <description>English (Ghana, multilingual)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>akan</name>
+ <!-- Keyboard indicator for Akan layouts -->
+ <shortDescription>ak</shortDescription>
+ <description>Akan</description>
+ <languageList>
+ <iso639Id>aka</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ewe</name>
+ <!-- Keyboard indicator for Ewe layouts -->
+ <shortDescription>ee</shortDescription>
+ <description>Ewe</description>
+ <languageList>
+ <iso639Id>ewe</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fula</name>
+ <!-- Keyboard indicator for Fula layouts -->
+ <shortDescription>ff</shortDescription>
+ <description>Fula</description>
+ <languageList>
+ <iso639Id>ful</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ga</name>
+ <!-- Keyboard indicator for Ga layouts -->
+ <shortDescription>gaa</shortDescription>
+ <description>Ga</description>
+ <languageList>
+ <iso639Id>gaa</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hausa</name>
+ <!-- Keyboard indicator for Hausa layouts -->
+ <shortDescription>ha</shortDescription>
+ <description>Hausa (Ghana)</description>
+ <languageList>
+ <iso639Id>hau</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>avn</name>
+ <!-- Keyboard indicator for Avatime layouts -->
+ <shortDescription>avn</shortDescription>
+ <description>Avatime</description>
+ <languageList>
+ <iso639Id>avn</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>gillbt</name>
+ <description>English (Ghana, GILLBT)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>gn</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Guinea)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ge</name>
+ <!-- Keyboard indicator for Georgian layouts -->
+ <shortDescription>ka</shortDescription>
+ <description>Georgian</description>
+ <languageList>
+ <iso639Id>kat</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ergonomic</name>
+ <description>Georgian (ergonomic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mess</name>
+ <description>Georgian (MESS)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ru</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Georgia)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>os</name>
+ <description>Ossetian (Georgia)</description>
+ <languageList>
+ <iso639Id>oss</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>de</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>deadacute</name>
+ <description>German (dead acute)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>deadgraveacute</name>
+ <description>German (dead grave acute)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>German (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>T3</name>
+ <description>German (T3)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ro</name>
+ <description>Romanian (Germany)</description>
+ <languageList>
+ <iso639Id>ron</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ro_nodeadkeys</name>
+ <description>Romanian (Germany, no dead keys)</description>
+ <languageList>
+ <iso639Id>ron</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>German (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>German (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>neo</name>
+ <description>German (Neo 2)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>German (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_nodeadkeys</name>
+ <description>German (Macintosh, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dsb</name>
+ <description>Lower Sorbian</description>
+ <languageList>
+ <iso639Id>dsb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dsb_qwertz</name>
+ <description>Lower Sorbian (QWERTZ)</description>
+ <languageList>
+ <iso639Id>dsb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>German (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tr</name>
+ <description>Turkish (Germany)</description>
+ <languageList>
+ <iso639Id>tr</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ru</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Germany, phonetic)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>deadtilde</name>
+ <description>German (dead tilde)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>gr</name>
+ <!-- Keyboard indicator for Greek layouts -->
+ <shortDescription>gr</shortDescription>
+ <description>Greek</description>
+ <languageList>
+ <iso639Id>ell</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>simple</name>
+ <description>Greek (simple)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>extended</name>
+ <description>Greek (extended)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Greek (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>polytonic</name>
+ <description>Greek (polytonic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>hu</name>
+ <!-- Keyboard indicator for Hungarian layouts -->
+ <shortDescription>hu</shortDescription>
+ <description>Hungarian</description>
+ <languageList>
+ <iso639Id>hun</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>standard</name>
+ <description>Hungarian (standard)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Hungarian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Hungarian (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwertz_comma_dead</name>
+ <description>Hungarian (QWERTZ, 101-key, comma, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwertz_comma_nodead</name>
+ <description>Hungarian (QWERTZ, 101-key, comma, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwertz_dot_dead</name>
+ <description>Hungarian (QWERTZ, 101-key, dot, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwertz_dot_nodead</name>
+ <description>Hungarian (QWERTZ, 101-key, dot, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwerty_comma_dead</name>
+ <description>Hungarian (QWERTY, 101-key, comma, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwerty_comma_nodead</name>
+ <description>Hungarian (QWERTY, 101-key, comma, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwerty_dot_dead</name>
+ <description>Hungarian (QWERTY, 101-key, dot, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwerty_dot_nodead</name>
+ <description>Hungarian (QWERTY, 101-key, dot, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwertz_comma_dead</name>
+ <description>Hungarian (QWERTZ, 102-key, comma, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwertz_comma_nodead</name>
+ <description>Hungarian (QWERTZ, 102-key, comma, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwertz_dot_dead</name>
+ <description>Hungarian (QWERTZ, 102-key, dot, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwertz_dot_nodead</name>
+ <description>Hungarian (QWERTZ, 102-key, dot, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwerty_comma_dead</name>
+ <description>Hungarian (QWERTY, 102-key, comma, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwerty_comma_nodead</name>
+ <description>Hungarian (QWERTY, 102-key, comma, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwerty_dot_dead</name>
+ <description>Hungarian (QWERTY, 102-key, dot, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwerty_dot_nodead</name>
+ <description>Hungarian (QWERTY, 102-key, dot, no dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>is</name>
+ <!-- Keyboard indicator for Icelandic layouts -->
+ <shortDescription>is</shortDescription>
+ <description>Icelandic</description>
+ <languageList>
+ <iso639Id>isl</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>Sundeadkeys</name>
+ <description>Icelandic (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Icelandic (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_legacy</name>
+ <description>Icelandic (Macintosh, legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Icelandic (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Icelandic (Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>il</name>
+ <!-- Keyboard indicator for Hebrew layouts -->
+ <shortDescription>he</shortDescription>
+ <description>Hebrew</description>
+ <languageList>
+ <iso639Id>heb</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>lyx</name>
+ <description>Hebrew (lyx)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Hebrew (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>biblical</name>
+ <description>Hebrew (Biblical, Tiro)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>it</name>
+ <!-- Keyboard indicator for Italian layouts -->
+ <shortDescription>it</shortDescription>
+ <description>Italian</description>
+ <languageList>
+ <iso639Id>ita</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Italian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Italian (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Italian (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Italian (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>geo</name>
+ <description>Georgian (Italy)</description>
+ <languageList>
+ <iso639Id>kat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ibm</name>
+ <description>Italian (IBM 142)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>Italian (intl., with dead keys)</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ <iso639Id>fra</iso639Id>
+ <iso639Id>ita</iso639Id>
+ <iso639Id>slk</iso639Id>
+ <iso639Id>srd</iso639Id>
+ <iso639Id>nap</iso639Id>
+ <iso639Id>scn</iso639Id>
+ <iso639Id>fur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>scn</name>
+ <description>Sicilian</description>
+ <languageList>
+ <iso639Id>ita</iso639Id>
+ <iso639Id>scn</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fur</name>
+ <description>Friulian (Italy)</description>
+ <languageList>
+ <iso639Id>fur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>jp</name>
+ <!-- Keyboard indicator for Japaneses -->
+ <shortDescription>ja</shortDescription>
+ <description>Japanese</description>
+ <languageList>
+ <iso639Id>jpn</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>kana</name>
+ <description>Japanese (Kana)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kana86</name>
+ <description>Japanese (Kana 86)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>OADG109A</name>
+ <description>Japanese (OADG 109A)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Japanese (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Japanese (Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>kg</name>
+ <!-- Keyboard indicator for Kyrgyz layouts -->
+ <shortDescription>ki</shortDescription>
+ <description>Kyrgyz</description>
+ <languageList>
+ <iso639Id>kir</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Kyrgyz (phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>kh</name>
+ <!-- Keyboard indicator for Khmer layouts -->
+ <shortDescription>km</shortDescription>
+ <description>Khmer (Cambodia)</description>
+ <languageList>
+ <iso639Id>khm</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>kz</name>
+ <!-- Keyboard indicator for Kazakh layouts -->
+ <shortDescription>kk</shortDescription>
+ <description>Kazakh</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ruskaz</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Kazakhstan, with Kazakh)</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kazrus</name>
+ <description>Kazakh (with Russian)</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ext</name>
+ <description>Kazakh (extended)</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin</name>
+ <description>Kazakh (Latin)</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>la</name>
+ <!-- Keyboard indicator for Lao layouts -->
+ <shortDescription>lo</shortDescription>
+ <description>Lao</description>
+ <languageList>
+ <iso639Id>lao</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>stea</name>
+ <description>Lao (STEA)</description>
+ <languageList>
+ <iso639Id>lao</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>latam</name>
+ <!-- Keyboard indicator for Spanish layouts -->
+ <shortDescription>es</shortDescription>
+ <description>Spanish (Latin American)</description>
+ <countryList>
+ <iso3166Id>AR</iso3166Id>
+ <iso3166Id>BO</iso3166Id>
+ <iso3166Id>CL</iso3166Id>
+ <iso3166Id>CO</iso3166Id>
+ <iso3166Id>CR</iso3166Id>
+ <iso3166Id>CU</iso3166Id>
+ <iso3166Id>DO</iso3166Id>
+ <iso3166Id>EC</iso3166Id>
+ <iso3166Id>GT</iso3166Id>
+ <iso3166Id>HN</iso3166Id>
+ <iso3166Id>HT</iso3166Id>
+ <iso3166Id>MX</iso3166Id>
+ <iso3166Id>NI</iso3166Id>
+ <iso3166Id>PA</iso3166Id>
+ <iso3166Id>PE</iso3166Id>
+ <iso3166Id>PR</iso3166Id>
+ <iso3166Id>PY</iso3166Id>
+ <iso3166Id>SV</iso3166Id>
+ <iso3166Id>US</iso3166Id>
+ <iso3166Id>UY</iso3166Id>
+ <iso3166Id>VE</iso3166Id>
+ </countryList>
+ <languageList>
+ <iso639Id>spa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Spanish (Latin American, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>deadtilde</name>
+ <description>Spanish (Latin American, dead tilde)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Spanish (Latin American, Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Spanish (Latin American, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>Spanish (Latin American, Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak-gaming</name>
+ <description>Spanish (Latin American, Colemak for gaming)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>lt</name>
+ <!-- Keyboard indicator for Lithuanian layouts -->
+ <shortDescription>lt</shortDescription>
+ <description>Lithuanian</description>
+ <languageList>
+ <iso639Id>lit</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>std</name>
+ <description>Lithuanian (standard)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Lithuanian (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ibm</name>
+ <description>Lithuanian (IBM LST 1205-92)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>lekp</name>
+ <description>Lithuanian (LEKP)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>lekpa</name>
+ <description>Lithuanian (LEKPa)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sgs</name>
+ <description>Samogitian</description>
+ <languageList>
+ <iso639Id>sgs</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>lv</name>
+ <!-- Keyboard indicator for Latvian layouts -->
+ <shortDescription>lv</shortDescription>
+ <description>Latvian</description>
+ <languageList>
+ <iso639Id>lav</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>apostrophe</name>
+ <description>Latvian (apostrophe)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tilde</name>
+ <description>Latvian (tilde)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fkey</name>
+ <description>Latvian (F)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>modern</name>
+ <description>Latvian (modern)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ergonomic</name>
+ <description>Latvian (ergonomic, ŪGJRMV)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>adapted</name>
+ <description>Latvian (adapted)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mao</name>
+ <!-- Keyboard indicator for Maori layouts -->
+ <shortDescription>mi</shortDescription>
+ <description>Maori</description>
+ <languageList>
+ <iso639Id>mri</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>me</name>
+ <!-- Keyboard indicator for Montenegrin layouts -->
+ <shortDescription>sr</shortDescription>
+ <description>Montenegrin</description>
+ <languageList>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>cyrillic</name>
+ <description>Montenegrin (Cyrillic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cyrillicyz</name>
+ <description>Montenegrin (Cyrillic, ZE and ZHE swapped)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinunicode</name>
+ <description>Montenegrin (Latin, Unicode)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinyz</name>
+ <description>Montenegrin (Latin, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinunicodeyz</name>
+ <description>Montenegrin (Latin, Unicode, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cyrillicalternatequotes</name>
+ <description>Montenegrin (Cyrillic, with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinalternatequotes</name>
+ <description>Montenegrin (Latin, with guillemets)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mk</name>
+ <!-- Keyboard indicator for Macedonian layouts -->
+ <shortDescription>mk</shortDescription>
+ <description>Macedonian</description>
+ <languageList>
+ <iso639Id>mkd</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Macedonian (no dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mt</name>
+ <!-- Keyboard indicator for Maltese layouts -->
+ <shortDescription>mt</shortDescription>
+ <description>Maltese</description>
+ <languageList>
+ <iso639Id>mlt</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Maltese (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alt-us</name>
+ <description>Maltese (US layout with AltGr overrides)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alt-gb</name>
+ <description>Maltese (UK, with AltGr overrides)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mn</name>
+ <!-- Keyboard indicator for Mongolian layouts -->
+ <shortDescription>mn</shortDescription>
+ <description>Mongolian</description>
+ <languageList>
+ <iso639Id>mon</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>no</name>
+ <!-- Keyboard indicator for Norwegian layouts -->
+ <shortDescription>no</shortDescription>
+ <description>Norwegian</description>
+ <languageList>
+ <iso639Id>nor</iso639Id>
+ <iso639Id>nob</iso639Id>
+ <iso639Id>nno</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Norwegian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Norwegian (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Norwegian (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>smi</name>
+ <description>Northern Saami (Norway)</description>
+ <languageList>
+ <iso639Id>sme</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>smi_nodeadkeys</name>
+ <description>Northern Saami (Norway, no dead keys)</description>
+ <languageList>
+ <iso639Id>sme</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Norwegian (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_nodeadkeys</name>
+ <description>Norwegian (Macintosh, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>Norwegian (Colemak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>pl</name>
+ <!-- Keyboard indicator for Polish layouts -->
+ <shortDescription>pl</shortDescription>
+ <description>Polish</description>
+ <languageList>
+ <iso639Id>pol</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Polish (legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwertz</name>
+ <description>Polish (QWERTZ)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Polish (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak_quotes</name>
+ <description>Polish (Dvorak, with Polish quotes on quotemark key)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak_altquotes</name>
+ <description>Polish (Dvorak, with Polish quotes on key 1)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>csb</name>
+ <description>Kashubian</description>
+ <languageList>
+ <iso639Id>csb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>szl</name>
+ <description>Silesian</description>
+ <languageList>
+ <iso639Id>szl</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ru_phonetic_dvorak</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Poland, phonetic Dvorak)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvp</name>
+ <description>Polish (programmer Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>pt</name>
+ <!-- Keyboard indicator for Portuguese layouts -->
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese</description>
+ <languageList>
+ <iso639Id>por</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Portuguese (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Portuguese (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Portuguese (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_nodeadkeys</name>
+ <description>Portuguese (Macintosh, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_sundeadkeys</name>
+ <description>Portuguese (Macintosh, Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo</name>
+ <description>Portuguese (Nativo)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo-us</name>
+ <description>Portuguese (Nativo for US keyboards)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo-epo</name>
+ <description>Esperanto (Portugal, Nativo)</description>
+ <languageList>
+ <iso639Id>epo</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ro</name>
+ <!-- Keyboard indicator for Romanian layouts -->
+ <shortDescription>ro</shortDescription>
+ <description>Romanian</description>
+ <languageList>
+ <iso639Id>ron</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>cedilla</name>
+ <description>Romanian (cedilla)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>std</name>
+ <description>Romanian (standard)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>std_cedilla</name>
+ <description>Romanian (standard cedilla)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Romanian (Windows)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ru</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Russian (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_winkeys</name>
+ <description>Russian (phonetic, Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_YAZHERTY</name>
+ <description>Russian (phonetic, YAZHERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>typewriter</name>
+ <description>Russian (typewriter)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Russian (legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>typewriter-legacy</name>
+ <description>Russian (typewriter, legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tt</name>
+ <description>Tatar</description>
+ <languageList>
+ <iso639Id>tat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>os_legacy</name>
+ <description>Ossetian (legacy)</description>
+ <languageList>
+ <iso639Id>oss</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>os_winkeys</name>
+ <description>Ossetian (Windows)</description>
+ <languageList>
+ <iso639Id>oss</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cv</name>
+ <description>Chuvash</description>
+ <languageList>
+ <iso639Id>chv</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cv_latin</name>
+ <description>Chuvash (Latin)</description>
+ <languageList>
+ <iso639Id>chv</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>udm</name>
+ <description>Udmurt</description>
+ <languageList>
+ <iso639Id>udm</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kom</name>
+ <description>Komi</description>
+ <languageList>
+ <iso639Id>kom</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sah</name>
+ <description>Yakut</description>
+ <languageList>
+ <iso639Id>sah</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>xal</name>
+ <description>Kalmyk</description>
+ <languageList>
+ <iso639Id>xal</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dos</name>
+ <description>Russian (DOS)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Russian (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>srp</name>
+ <description>Serbian (Russia)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bak</name>
+ <description>Bashkirian</description>
+ <languageList>
+ <iso639Id>bak</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>chm</name>
+ <description>Mari</description>
+ <languageList>
+ <iso639Id>chm</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_azerty</name>
+ <description>Russian (phonetic, AZERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_dvorak</name>
+ <description>Russian (phonetic, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_fr</name>
+ <description>Russian (phonetic, French)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>rs</name>
+ <!-- Keyboard indicator for Serbian layouts -->
+ <shortDescription>sr</shortDescription>
+ <description>Serbian</description>
+ <languageList>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>yz</name>
+ <description>Serbian (Cyrillic, ZE and ZHE swapped)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin</name>
+ <description>Serbian (Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinunicode</name>
+ <description>Serbian (Latin, Unicode)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinyz</name>
+ <description>Serbian (Latin, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinunicodeyz</name>
+ <description>Serbian (Latin, Unicode, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alternatequotes</name>
+ <description>Serbian (Cyrillic, with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinalternatequotes</name>
+ <description>Serbian (Latin, with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rue</name>
+ <description>Pannonian Rusyn</description>
+ <languageList>
+ <iso639Id>rue</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>si</name>
+ <!-- Keyboard indicator for Slovenian layouts -->
+ <shortDescription>sl</shortDescription>
+ <description>Slovenian</description>
+ <languageList>
+ <iso639Id>slv</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>alternatequotes</name>
+ <description>Slovenian (with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Slovenian (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>sk</name>
+ <!-- Keyboard indicator for Slovak layouts -->
+ <shortDescription>sk</shortDescription>
+ <description>Slovak</description>
+ <languageList>
+ <iso639Id>slk</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>bksl</name>
+ <description>Slovak (extended backslash)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Slovak (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty_bksl</name>
+ <description>Slovak (QWERTY, extended backslash)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>es</name>
+ <!-- Keyboard indicator for Spanish layouts -->
+ <shortDescription>es</shortDescription>
+ <description>Spanish</description>
+ <languageList>
+ <iso639Id>spa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Spanish (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Spanish (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>deadtilde</name>
+ <description>Spanish (dead tilde)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Spanish (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Spanish (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ast</name>
+ <shortDescription>ast</shortDescription>
+ <description>Asturian (Spain, with bottom-dot H and L)</description>
+ <languageList>
+ <iso639Id>ast</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cat</name>
+ <shortDescription>ca</shortDescription>
+ <description>Catalan (Spain, with middle-dot L)</description>
+ <languageList>
+ <iso639Id>cat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Spanish (Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>se</name>
+ <!-- Keyboard indicator for Swedish layouts -->
+ <shortDescription>sv</shortDescription>
+ <description>Swedish</description>
+ <languageList>
+ <iso639Id>swe</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Swedish (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Swedish (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rus</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Sweden, phonetic)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rus_nodeadkeys</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Sweden, phonetic, no dead keys)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>smi</name>
+ <description>Northern Saami (Sweden)</description>
+ <languageList>
+ <iso639Id>sme</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Swedish (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>svdvorak</name>
+ <description>Swedish (Svdvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us_dvorak</name>
+ <description>Swedish (Dvorak, intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Swedish (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>swl</name>
+ <description>Swedish Sign Language</description>
+ <languageList>
+ <iso639Id>swl</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ch</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland)</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ <iso639Id>gsw</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>German (Switzerland, legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>de_nodeadkeys</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>de_sundeadkeys</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland, Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Switzerland)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr_nodeadkeys</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Switzerland, no dead keys)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr_sundeadkeys</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Switzerland, Sun dead keys)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr_mac</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Switzerland, Macintosh)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>de_mac</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland, Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>sy</name>
+ <!-- Keyboard indicator for Arabic layouts -->
+ <shortDescription>ar</shortDescription>
+ <description>Arabic (Syria)</description>
+ <languageList>
+ <iso639Id>syr</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>syc</name>
+ <!-- Keyboard indicator for Syriac layouts -->
+ <shortDescription>syc</shortDescription>
+ <description>Syriac</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>syc_phonetic</name>
+ <!-- Keyboard indicator for Syriac layouts -->
+ <shortDescription>syc</shortDescription>
+ <description>Syriac (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Syria, Latin Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_f</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Syria, F)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_alt</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Syria, Latin Alt-Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tj</name>
+ <!-- Keyboard indicator for Tajik layouts -->
+ <shortDescription>tg</shortDescription>
+ <description>Tajik</description>
+ <languageList>
+ <iso639Id>tgk</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Tajik (legacy)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>lk</name>
+ <!-- Keyboard indicator for Sinhala layouts -->
+ <shortDescription>si</shortDescription>
+ <description>Sinhala (phonetic)</description>
+ <languageList>
+ <iso639Id>sin</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>tam_unicode</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (Sri Lanka, TamilNet '99)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_TAB</name>
+ <description>Tamil (Sri Lanka, TamilNet '99, TAB encoding)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <!-- Keyboard indicator for US layouts -->
+ <shortDescription>us</shortDescription>
+ <description>Sinhala (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>th</name>
+ <!-- Keyboard indicator for Thai layouts -->
+ <shortDescription>th</shortDescription>
+ <description>Thai</description>
+ <languageList>
+ <iso639Id>tha</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>tis</name>
+ <description>Thai (TIS-820.2538)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>pat</name>
+ <description>Thai (Pattachote)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tr</name>
+ <!-- Keyboard indicator for Turkish layouts -->
+ <shortDescription>tr</shortDescription>
+ <description>Turkish</description>
+ <languageList>
+ <iso639Id>tur</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>f</name>
+ <description>Turkish (F)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alt</name>
+ <description>Turkish (Alt-Q)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Turkish (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Turkey, Latin Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_f</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Turkey, F)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_alt</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Turkey, Latin Alt-Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>Turkish (intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>crh</name>
+ <!-- Keyboard indicator for Crimean Tatar layouts -->
+ <shortDescription>crh</shortDescription>
+ <description>Crimean Tatar (Turkish Q)</description>
+ <languageList>
+ <iso639Id>crh</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>crh_f</name>
+ <!-- Keyboard indicator for Crimean Tatar layouts -->
+ <shortDescription>crh</shortDescription>
+ <description>Crimean Tatar (Turkish F)</description>
+ <languageList>
+ <iso639Id>crh</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>crh_alt</name>
+ <!-- Keyboard indicator for Crimean Tatar layouts -->
+ <shortDescription>crh</shortDescription>
+ <description>Crimean Tatar (Turkish Alt-Q)</description>
+ <languageList>
+ <iso639Id>crh</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tw</name>
+ <!-- Keyboard indicator for Taiwanese layouts -->
+ <shortDescription>zh</shortDescription>
+ <description>Taiwanese</description>
+ <languageList>
+ <iso639Id>fox</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>indigenous</name>
+ <description>Taiwanese (indigenous)</description>
+ <languageList>
+ <iso639Id>ami</iso639Id>
+ <iso639Id>tay</iso639Id>
+ <iso639Id>bnn</iso639Id>
+ <iso639Id>ckv</iso639Id>
+ <iso639Id>pwn</iso639Id>
+ <iso639Id>pyu</iso639Id>
+ <iso639Id>dru</iso639Id>
+ <iso639Id>ais</iso639Id>
+ <iso639Id>ssf</iso639Id>
+ <iso639Id>tao</iso639Id>
+ <iso639Id>tsu</iso639Id>
+ <iso639Id>trv</iso639Id>
+ <iso639Id>xnb</iso639Id>
+ <iso639Id>sxr</iso639Id>
+ <iso639Id>uun</iso639Id>
+ <iso639Id>fos</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>saisiyat</name>
+ <!-- Keyboard indicator for Saisiyat layouts -->
+ <shortDescription>xsy</shortDescription>
+ <description>Saisiyat (Taiwan)</description>
+ <languageList>
+ <iso639Id>xsy</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ua</name>
+ <!-- Keyboard indicator for Ukranian layouts -->
+ <shortDescription>uk</shortDescription>
+ <description>Ukrainian</description>
+ <languageList>
+ <iso639Id>ukr</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Ukrainian (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>typewriter</name>
+ <description>Ukrainian (typewriter)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Ukrainian (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Ukrainian (legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rstu</name>
+ <description>Ukrainian (standard RSTU)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rstu_ru</name>
+ <description>Russian (Ukraine, standard RSTU)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>homophonic</name>
+ <description>Ukrainian (homophonic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>gb</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (UK)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>extd</name>
+ <description>English (UK, extended, Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>English (UK, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>English (UK, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorakukp</name>
+ <description>English (UK, Dvorak, with UK punctuation)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>English (UK, Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_intl</name>
+ <description>English (UK, Macintosh, intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>English (UK, Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>pl</name>
+ <!-- Keyboard indicator for Polish layouts -->
+ <shortDescription>pl</shortDescription>
+ <description>Polish (British keyboard)</description>
+ <languageList>
+ <iso639Id>pol</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>uz</name>
+ <!-- Keyboard indicator for Uzbek layouts -->
+ <shortDescription>uz</shortDescription>
+ <description>Uzbek</description>
+ <languageList>
+ <iso639Id>uzb</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>latin</name>
+ <description>Uzbek (Latin)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>vn</name>
+ <!-- Keyboard indicator for Vietnamese layouts -->
+ <shortDescription>vi</shortDescription>
+ <description>Vietnamese</description>
+ <languageList>
+ <iso639Id>vie</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Vietnamese (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr</name>
+ <description>Vietnamese (French)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>kr</name>
+ <!-- Keyboard indicator for Korean layouts -->
+ <shortDescription>ko</shortDescription>
+ <description>Korean</description>
+ <languageList>
+ <iso639Id>kor</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>kr104</name>
+ <description>Korean (101/104-key compatible)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>nec_vndr/jp</name>
+ <!-- Keyboard indicator for Japaneses -->
+ <shortDescription>ja</shortDescription>
+ <description>Japanese (PC-98)</description>
+ <countryList>
+ <iso3166Id>JP</iso3166Id>
+ </countryList>
+ <languageList>
+ <iso639Id>jpn</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ie</name>
+ <!-- Keyboard indicator for Irish layouts -->
+ <shortDescription>ie</shortDescription>
+ <description>Irish</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>CloGaelach</name>
+ <description>CloGaelach</description>
+ <languageList>
+ <iso639Id>gle</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>UnicodeExpert</name>
+ <description>Irish (UnicodeExpert)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ogam</name>
+ <description>Ogham</description>
+ <languageList>
+ <iso639Id>sga</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ogam_is434</name>
+ <description>Ogham (IS434)</description>
+ <languageList>
+ <iso639Id>sga</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>pk</name>
+ <!-- Keyboard indicator for Urdu layouts -->
+ <shortDescription>ur</shortDescription>
+ <description>Urdu (Pakistan)</description>
+ <languageList>
+ <iso639Id>urd</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>urd-crulp</name>
+ <description>Urdu (Pakistan, CRULP)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>urd-nla</name>
+ <description>Urdu (Pakistan, NLA)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ara</name>
+ <shortDescription>ar</shortDescription>
+ <description>Arabic (Pakistan)</description>
+ <languageList>
+ <iso639Id>ara</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>snd</name>
+ <!-- Keyboard indicator for Sindhi layouts -->
+ <shortDescription>sd</shortDescription>
+ <description>Sindhi</description>
+ <languageList>
+ <iso639Id>snd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mv</name>
+ <!-- Keyboard indicator for Dhivehi layouts -->
+ <shortDescription>dv</shortDescription>
+ <description>Dhivehi</description>
+ <languageList>
+ <iso639Id>div</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>za</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (South Africa)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>epo</name>
+ <!-- Keyboard indicator for Esperanto layouts -->
+ <shortDescription>eo</shortDescription>
+ <description>Esperanto</description>
+ <languageList>
+ <iso639Id>epo</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Esperanto (legacy)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>np</name>
+ <!-- Keyboard indicator for Nepali layouts -->
+ <shortDescription>ne</shortDescription>
+ <description>Nepali</description>
+ <languageList>
+ <iso639Id>nep</iso639Id>
+ <!-- sat-Deva used in Nepal: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ng</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Nigeria)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>igbo</name>
+ <!-- Keyboard indicator for Igbo layouts -->
+ <shortDescription>ig</shortDescription>
+ <description>Igbo</description>
+ <languageList>
+ <iso639Id>ibo</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>yoruba</name>
+ <!-- Keyboard indicator for Yoruba layouts -->
+ <shortDescription>yo</shortDescription>
+ <description>Yoruba</description>
+ <languageList>
+ <iso639Id>yor</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hausa</name>
+ <!-- Keyboard indicator for Hausa layouts -->
+ <shortDescription>ha</shortDescription>
+ <description>Hausa (Nigeria)</description>
+ <languageList>
+ <iso639Id>hau</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>et</name>
+ <!-- Keyboard indicator for Amharic layouts -->
+ <shortDescription>am</shortDescription>
+ <description>Amharic</description>
+ <languageList>
+ <iso639Id>amh</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>sn</name>
+ <!-- Keyboard indicator for Wolof layouts -->
+ <shortDescription>wo</shortDescription>
+ <description>Wolof</description>
+ <languageList>
+ <iso639Id>wol</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>brai</name>
+ <!-- Keyboard indicator for Braille layouts -->
+ <shortDescription>brl</shortDescription>
+ <description>Braille</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>left_hand</name>
+ <description>Braille (left-handed)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>left_hand_invert</name>
+ <description>Braille (left-handed inverted thumb)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>right_hand</name>
+ <description>Braille (right-handed)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>right_hand_invert</name>
+ <description>Braille (right-handed inverted thumb)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tm</name>
+ <!-- Keyboard indicator for Turkmen layouts -->
+ <shortDescription>tk</shortDescription>
+ <description>Turkmen</description>
+ <languageList>
+ <iso639Id>tuk</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>alt</name>
+ <description>Turkmen (Alt-Q)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ml</name>
+ <!-- Keyboard indicator for Bambara layouts -->
+ <shortDescription>bm</shortDescription>
+ <description>Bambara</description>
+ <languageList>
+ <iso639Id>bam</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>fr-oss</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Mali, alt.)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us-mac</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Mali, US, Macintosh)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us-intl</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Mali, US, intl.)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tz</name>
+ <!-- Keyboard indicator for Swahili layouts -->
+ <shortDescription>sw</shortDescription>
+ <description>Swahili (Tanzania)</description>
+ <languageList>
+ <iso639Id>swa</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tg</name>
+ <shortDescription>fr-tg</shortDescription>
+ <description>French (Togo)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ <iso639Id>ajg</iso639Id>
+ <iso639Id>blo</iso639Id>
+ <iso639Id>kpo</iso639Id>
+ <iso639Id>ewe</iso639Id>
+ <iso639Id>fon</iso639Id>
+ <iso639Id>fue</iso639Id>
+ <iso639Id>gej</iso639Id>
+ <iso639Id>ife</iso639Id>
+ <iso639Id>kbp</iso639Id>
+ <iso639Id>las</iso639Id>
+ <iso639Id>dop</iso639Id>
+ <iso639Id>mfg</iso639Id>
+ <iso639Id>nmz</iso639Id>
+ <iso639Id>bud</iso639Id>
+ <iso639Id>gng</iso639Id>
+ <iso639Id>kdh</iso639Id>
+ <iso639Id>soy</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ke</name>
+ <!-- Keyboard indicator for Swahili layouts -->
+ <shortDescription>sw</shortDescription>
+ <description>Swahili (Kenya)</description>
+ <languageList>
+ <iso639Id>swa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>kik</name>
+ <!-- Keyboard indicator for Kikuyu layouts -->
+ <shortDescription>ki</shortDescription>
+ <description>Kikuyu</description>
+ <languageList>
+ <iso639Id>kik</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>bw</name>
+ <!-- Keyboard indicator for Tswana layouts -->
+ <shortDescription>tn</shortDescription>
+ <description>Tswana</description>
+ <languageList>
+ <iso639Id>tsn</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ph</name>
+ <!-- Keyboard indicator for Filipino layouts -->
+ <shortDescription>ph</shortDescription>
+ <description>Filipino</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>qwerty-bay</name>
+ <description>Filipino (QWERTY, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>capewell-dvorak</name>
+ <description>Filipino (Capewell-Dvorak, Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>capewell-dvorak-bay</name>
+ <description>Filipino (Capewell-Dvorak, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>capewell-qwerf2k6</name>
+ <description>Filipino (Capewell-QWERF 2006, Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>capewell-qwerf2k6-bay</name>
+ <description>Filipino (Capewell-QWERF 2006, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>Filipino (Colemak, Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak-bay</name>
+ <description>Filipino (Colemak, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Filipino (Dvorak, Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-bay</name>
+ <description>Filipino (Dvorak, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>md</name>
+ <shortDescription>md</shortDescription>
+ <description>Moldavian</description>
+ <languageList>
+ <iso639Id>ron</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>gag</name>
+ <shortDescription>gag</shortDescription>
+ <description>Moldavian (Gagauz)</description>
+ <languageList>
+ <iso639Id>gag</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>id</name>
+ <shortDescription>id</shortDescription>
+ <description>Indonesian (Arab Melayu, phonetic)</description>
+ <languageList>
+ <iso639Id>ind</iso639Id>
+ <iso639Id>msa</iso639Id>
+ <iso639Id>min</iso639Id>
+ <iso639Id>ace</iso639Id>
+ <iso639Id>bjn</iso639Id>
+ <iso639Id>tsg</iso639Id>
+ <iso639Id>mfa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phoneticx</name>
+ <description>Indonesian (Arab Melayu, extended phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>jv</name>
+ <shortDescription>jv</shortDescription>
+ <description>Indonesian (Javanese)</description>
+ <languageList>
+ <iso639Id>jv</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>my</name>
+ <shortDescription>ms</shortDescription>
+ <description>Malay (Jawi, Arabic Keyboard)</description>
+ <languageList>
+ <iso639Id>ind</iso639Id>
+ <iso639Id>msa</iso639Id>
+ <iso639Id>min</iso639Id>
+ <iso639Id>ace</iso639Id>
+ <iso639Id>bjn</iso639Id>
+ <iso639Id>tsg</iso639Id>
+ <iso639Id>mfa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Malay (Jawi, phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ </layoutList>
+ <optionList>
+ <group allowMultipleSelection="true">
+ <!-- The key combination used to switch between groups -->
+ <configItem>
+ <name>grp</name>
+ <description>Switching to another layout</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>grp:switch</name>
+ <description>Right Alt (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lswitch</name>
+ <description>Left Alt (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lwin_switch</name>
+ <description>Left Win (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rwin_switch</name>
+ <description>Right Win (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:win_switch</name>
+ <description>Any Win (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:menu_switch</name>
+ <description>Menu (while pressed), Shift+Menu for Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:caps_switch</name>
+ <description>Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rctrl_switch</name>
+ <description>Right Ctrl (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:toggle</name>
+ <description>Right Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lalt_toggle</name>
+ <description>Left Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:caps_toggle</name>
+ <description>Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:shift_caps_toggle</name>
+ <description>Shift+Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:shift_caps_switch</name>
+ <description>Caps Lock to first layout; Shift+Caps Lock to last layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:win_menu_switch</name>
+ <description>Left Win to first layout; Right Win/Menu to last layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_rctrl_switch</name>
+ <description>Left Ctrl to first layout; Right Ctrl to last layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:alt_caps_toggle</name>
+ <description>Alt+Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:shifts_toggle</name>
+ <description>Both Shift together</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:alts_toggle</name>
+ <description>Both Alt together</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:ctrls_toggle</name>
+ <description>Both Ctrl together</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:ctrl_shift_toggle</name>
+ <description>Ctrl+Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_lshift_toggle</name>
+ <description>Left Ctrl+Left Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rctrl_rshift_toggle</name>
+ <description>Right Ctrl+Right Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:ctrl_alt_toggle</name>
+ <description>Alt+Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:alt_shift_toggle</name>
+ <description>Alt+Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lalt_lshift_toggle</name>
+ <description>Left Alt+Left Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:alt_space_toggle</name>
+ <description>Alt+Space</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:menu_toggle</name>
+ <description>Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lwin_toggle</name>
+ <description>Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:win_space_toggle</name>
+ <description>Win+Space</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rwin_toggle</name>
+ <description>Right Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lshift_toggle</name>
+ <description>Left Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rshift_toggle</name>
+ <description>Right Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_toggle</name>
+ <description>Left Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rctrl_toggle</name>
+ <description>Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:sclk_toggle</name>
+ <description>Scroll Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_lwin_rctrl_menu</name>
+ <description>Left Ctrl+Left Win to first layout; Right Ctrl+Menu to second layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_lwin_toggle</name>
+ <description>Left Ctrl+Left Win</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- The key combination used to choose the 3rd (and 4th, together with Shift)
+ level of symbols -->
+ <configItem>
+ <name>lv3</name>
+ <description>Key to choose the 3rd level</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>lv3:switch</name>
+ <description>Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:menu_switch</name>
+ <description>Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:win_switch</name>
+ <description>Any Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:lwin_switch</name>
+ <description>Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:rwin_switch</name>
+ <description>Right Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:alt_switch</name>
+ <description>Any Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:lalt_switch</name>
+ <description>Left Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:ralt_switch</name>
+ <description>Right Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:ralt_switch_multikey</name>
+ <description>Right Alt; Shift+Right Alt as Compose</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:ralt_alt</name>
+ <description>Right Alt never chooses 3rd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:enter_switch</name>
+ <description>Enter on keypad</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:caps_switch</name>
+ <description>Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:bksl_switch</name>
+ <description>Backslash</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:lsgt_switch</name>
+ <description>The "&lt; &gt;" key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:caps_switch_latch</name>
+ <description>Caps Lock; acts as onetime lock when pressed together with another 3rd-level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:bksl_switch_latch</name>
+ <description>Backslash; acts as onetime lock when pressed together with another 3rd level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:lsgt_switch_latch</name>
+ <description>The "&lt; &gt;" key; acts as onetime lock when pressed together with another 3rd level chooser</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Tweaking the position of the "Ctrl" key -->
+ <configItem>
+ <name>ctrl</name>
+ <description>Ctrl position</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>ctrl:nocaps</name>
+ <description>Caps Lock as Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:lctrl_meta</name>
+ <description>Left Ctrl as Meta</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swapcaps</name>
+ <description>Swap Ctrl and Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swapcaps_hyper</name>
+ <description>Caps Lock as Ctrl, Ctrl as Hyper</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:ac_ctrl</name>
+ <description>To the left of "A"</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:aa_ctrl</name>
+ <description>At the bottom left</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:rctrl_ralt</name>
+ <description>Right Ctrl as Right Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:menu_rctrl</name>
+ <description>Menu as Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swap_lalt_lctl</name>
+ <description>Swap Left Alt with Left Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swap_lwin_lctl</name>
+ <description>Swap Left Win with Left Ctrl</description>
+ </configItem>
+ </option><option>
+ <configItem>
+ <name>ctrl:swap_rwin_rctl</name>
+ <description>Swap Right Win with Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swap_lalt_lctl_lwin</name>
+ <description>Left Alt as Ctrl, Left Ctrl as Win, Left Win as Left Alt</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Using startard LEDs to indicate the alternative (not first) group(s) -->
+ <configItem>
+ <name>grp_led</name>
+ <description>Use keyboard LED to show alternative layout</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>grp_led:num</name>
+ <description>Num Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp_led:caps</name>
+ <description>Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp_led:scroll</name>
+ <description>Scroll Lock</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Using LEDs to indicate modifiers -->
+ <configItem>
+ <name>mod_led</name>
+ <description>Use keyboard LED to indicate modifiers</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>mod_led:compose</name>
+ <description>Compose</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="false">
+ <!-- Select a keypad type -->
+ <configItem>
+ <name>keypad</name>
+ <description>Layout of numeric keypad</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>keypad:legacy</name>
+ <description>Legacy</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:oss</name>
+ <description>Unicode arrows and math operators</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:future</name>
+ <description>Unicode arrows and math operators on default level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:legacy_wang</name>
+ <description>Legacy Wang 724</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:oss_wang</name>
+ <description>Wang 724 keypad with Unicode arrows and math operators</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:future_wang</name>
+ <description>Wang 724 keypad with Unicode arrows and math operators on default level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:hex</name>
+ <description>Hexadecimal</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:atm</name>
+ <description>Phone and ATM style</description>
+ </configItem>
+ </option>
+ </group>
+ <!-- This option should override the KPDL key defined in keypad; I hope it's declared in the right place -->
+ <group allowMultipleSelection="false">
+ <!-- Select a keypad KPDL variant -->
+ <configItem>
+ <name>kpdl</name>
+ <description>Numeric keypad Delete behavior</description>
+ </configItem>
+ <option>
+ <configItem>
+ <!-- Actually, with KP_DECIMAL, as the old keypad(dot) -->
+ <name>kpdl:dot</name>
+ <description>Legacy key with dot</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:comma</name>
+ <!-- Actually, with KP_SEPARATOR, as the old keypad(comma) -->
+ <description>Legacy key with comma</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:dotoss</name>
+ <description>Four-level key with dot</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:dotoss_latin9</name>
+ <description>Four-level key with dot, Latin-9 only</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:commaoss</name>
+ <description>Four-level key with comma</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:momayyezoss</name>
+ <description>Four-level key with momayyez</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:kposs</name>
+ <!-- This assumes the KP_ abstract symbols are actually useful for some apps
+ The description needs to be rewritten -->
+ <description>Four-level key with abstract separators</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:semi</name>
+ <description>Semicolon on third level</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="false">
+ <!-- Caps Lock tweaks.
+ "Internal" capitalization means capitalization using some internal tables.
+ Otherwise "as Shift" - means using next group. -->
+ <configItem>
+ <name>caps</name>
+ <description>Caps Lock behavior</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>caps:internal</name>
+ <description>Caps Lock uses internal capitalization; Shift "pauses" Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:internal_nocancel</name>
+ <description>Caps Lock uses internal capitalization; Shift does not affect Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:shift</name>
+ <description>Caps Lock acts as Shift with locking; Shift "pauses" Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:shift_nocancel</name>
+ <description>Caps Lock acts as Shift with locking; Shift does not affect Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:capslock</name>
+ <description>Caps Lock toggles normal capitalization of alphabetic characters</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:shiftlock</name>
+ <description>Caps Lock toggles Shift Lock (affects all keys)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:swapescape</name>
+ <description>Swap Esc and Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:escape</name>
+ <description>Make Caps Lock an additional Esc</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:escape_shifted_capslock</name>
+ <description>Make Caps Lock an additional Esc, but Shift + Caps Lock is the regular Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:backspace</name>
+ <description>Make Caps Lock an additional Backspace</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:super</name>
+ <description>Make Caps Lock an additional Super</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:hyper</name>
+ <description>Make Caps Lock an additional Hyper</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:menu</name>
+ <description>Make Caps Lock an additional Menu key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:numlock</name>
+ <description>Make Caps Lock an additional Num Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:ctrl_modifier</name>
+ <description>Caps Lock is also a Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:none</name>
+ <description>Caps Lock is disabled</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="false">
+ <!-- Using special PC keys (Win, Menu) to work as standard X keys (Super, Hyper, etc.) -->
+ <configItem>
+ <name>altwin</name>
+ <description>Alt and Win behavior</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>altwin:menu</name>
+ <description>Add the standard behavior to Menu key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:menu_win</name>
+ <description>Menu is mapped to Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:meta_alt</name>
+ <description>Alt and Meta are on Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:alt_win</name>
+ <description>Alt is mapped to Win and the usual Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:ctrl_win</name>
+ <description>Ctrl is mapped to Win and the usual Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:ctrl_alt_win</name>
+ <description>Ctrl is mapped to Alt, Alt to Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:meta_win</name>
+ <description>Meta is mapped to Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:left_meta_win</name>
+ <description>Meta is mapped to Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:hyper_win</name>
+ <description>Hyper is mapped to Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:alt_super_win</name>
+ <description>Alt is mapped to Right Win, Super to Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:swap_lalt_lwin</name>
+ <description>Left Alt is swapped with Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:swap_alt_win</name>
+ <description>Alt is swapped with Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:prtsc_rwin</name>
+ <description>Win is mapped to PrtSc and the usual Win</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Tweaking the position of the "Compose" key: mapping to existing PC keys -->
+ <configItem>
+ <name>Compose key</name>
+ <description>Position of Compose key</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>compose:ralt</name>
+ <description>Right Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:lwin</name>
+ <description>Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:lwin-altgr</name>
+ <description>3rd level of Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:rwin</name>
+ <description>Right Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:rwin-altgr</name>
+ <description>3rd level of Right Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:menu</name>
+ <description>Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:menu-altgr</name>
+ <description>3rd level of Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:lctrl</name>
+ <description>Left Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:lctrl-altgr</name>
+ <description>3rd level of Left Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:rctrl</name>
+ <description>Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:rctrl-altgr</name>
+ <description>3rd level of Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:caps</name>
+ <description>Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:caps-altgr</name>
+ <description>3rd level of Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:102</name>
+ <description>The "&lt; &gt;" key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:102-altgr</name>
+ <description>3rd level of the "&lt; &gt;" key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:paus</name>
+ <description>Pause</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:prsc</name>
+ <description>PrtSc</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:sclk</name>
+ <description>Scroll Lock</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>compat</name>
+ <description>Compatibility options</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>numpad:pc</name>
+ <description>Default numeric keypad keys</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>numpad:mac</name>
+ <description>Numeric keypad always enters digits (as in macOS)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>numpad:microsoft</name>
+ <description>Num Lock on: digits; Shift for arrows. Num Lock off: arrows (as in Windows)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>numpad:shift3</name>
+ <description>Shift does not cancel Num Lock, chooses 3rd level instead</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>srvrkeys:none</name>
+ <description>Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>apple:alupckeys</name>
+ <description>Apple Aluminium emulates Pause, PrtSc, Scroll Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>shift:breaks_caps</name>
+ <description>Shift cancels Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>misc:typo</name>
+ <description>Enable extra typographic characters</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>misc:apl</name>
+ <description>Enable APL overlay characters</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>shift:both_capslock</name>
+ <description>Both Shift together enable Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>shift:both_capslock_cancel</name>
+ <description>Both Shift together enable Caps Lock; one Shift key disables it</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>shift:both_shiftlock</name>
+ <description>Both Shift together enable Shift Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:pointerkeys</name>
+ <description>Shift + Num Lock enables PointerKeys</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grab:break_actions</name>
+ <description>Allow breaking grabs with keyboard actions (warning: security risk)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grab:debug</name>
+ <description>Allow grab and window tree logging</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Special shortcuts for the Euro character -->
+ <configItem>
+ <name>currencysign</name>
+ <description>Currency signs</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>eurosign:e</name>
+ <description>Euro on E</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>eurosign:2</name>
+ <description>Euro on 2</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>eurosign:4</name>
+ <description>Euro on 4</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>eurosign:5</name>
+ <description>Euro on 5</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>rupeesign:4</name>
+ <description>Rupee on 4</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>lv5</name>
+ <description>Key to choose 5th level</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>lv5:lsgt_switch</name>
+ <description>The "&lt; &gt;" key chooses 5th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:ralt_switch</name>
+ <description>Right Alt chooses 5th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:lsgt_switch_lock</name>
+ <description>The "&lt; &gt;" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:ralt_switch_lock</name>
+ <description>Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:lwin_switch_lock</name>
+ <description>Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:rwin_switch_lock</name>
+ <description>Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+<!--
+ <option>
+ <configItem>
+ <name>lv5:lsgt_switch_lock_cancel</name>
+ <description>The "&lt; &gt;" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:ralt_switch_lock_cancel</name>
+ <description>Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:lwin_switch_lock_cancel</name>
+ <description>Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:rwin_switch_lock_cancel</name>
+ <description>Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:lsgt_switch_lock_cancel</name>
+ <description>The "&lt; &gt;" key chooses 5th level; acts as onetime lock lock when pressed together with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:ralt_switch_lock_cancel</name>
+ <description>Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+-->
+ </group>
+ <group allowMultipleSelection="false">
+ <!-- Let space output NBSP, NNBSP, ZWNJ, and ZWJ for the desired level -->
+ <configItem>
+ <name>nbsp</name>
+ <description>Non-breaking space input</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>nbsp:none</name>
+ <description>Usual space at any level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level2</name>
+ <description>Non-breaking space at the 2nd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level3</name>
+ <description>Non-breaking space at the 3rd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level3s</name>
+ <description>Non-breaking space at the 3rd level, nothing at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level3n</name>
+ <description>Non-breaking space at the 3rd level, thin non-breaking space at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level4</name>
+ <description>Non-breaking space at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level4n</name>
+ <description>Non-breaking space at the 4th level, thin non-breaking space at the 6th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level4nl</name>
+ <description>Non-breaking space at the 4th level, thin non-breaking space at the 6th level (via Ctrl+Shift)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2</name>
+ <description>Zero-width non-joiner at the 2nd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2zwj3</name>
+ <description>Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2zwj3nb4</name>
+ <description>Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level, non-breaking space at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2nb3</name>
+ <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2nb3s</name>
+ <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, nothing at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2nb3zwj4</name>
+ <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, zero-width joiner at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2nb3nnb4</name>
+ <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, thin non-breaking space at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj3zwj4</name>
+ <description>Zero-width non-joiner at the 3rd level, zero-width joiner at the 4th level</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>japan</name>
+ <description>Japanese keyboard options</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>japan:kana_lock</name>
+ <description>Kana Lock key is locking</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>japan:nicola_f_bs</name>
+ <description>NICOLA-F style Backspace</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>japan:hztg_escape</name>
+ <description>Make Zenkaku Hankaku an additional Esc</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>korean</name>
+ <description>Korean Hangul/Hanja keys</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>korean:ralt_hangul</name>
+ <description>Make right Alt a Hangul key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>korean:rctrl_hangul</name>
+ <description>Make right Ctrl a Hangul key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>korean:ralt_hanja</name>
+ <description>Make right Alt a Hanja key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>korean:rctrl_hanja</name>
+ <description>Make right Ctrl a Hanja key</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="false">
+ <configItem>
+ <name>esperanto</name>
+ <description>Esperanto letters with superscripts</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>esperanto:qwerty</name>
+ <description>At the corresponding key in a QWERTY layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>esperanto:dvorak</name>
+ <description>At the corresponding key in a Dvorak layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>esperanto:colemak</name>
+ <description>At the corresponding key in a Colemak layout</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>solaris</name>
+ <description>Old Solaris keycodes compatibility</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>solaris:sun_compat</name>
+ <description>Sun key compatibility</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>terminate</name>
+ <description>Key sequence to kill the X server</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>terminate:ctrl_alt_bksp</name>
+ <description>Ctrl+Alt+Backspace</description>
+ </configItem>
+ </option>
+ </group>
+ </optionList>
+</xkbConfigRegistry>
diff --git a/test/data/rules/evdev b/test/data/rules/evdev
index 872e1de..e949490 100644
--- a/test/data/rules/evdev
+++ b/test/data/rules/evdev
@@ -1,4 +1,5 @@
-// DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.sh FROM rules/*.part
+// DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.py FROM rules/*.part
+//
//
// Rules for resolving XKB components for use with XFree86
// Copyright 1996 by Joseph Moss
@@ -13,20 +14,17 @@
// ori pk ru scc sy syr tel th tj tam ua uz
// PC models
-! $pcmodels = pc101 pc102 pc104 pc105
+! $pcmodels = pc86 pc101 pc102 pc104 pc104alt pc105
// Jolla devices and keyboards
! $jollamodels = jollasbj
// Microsoft models (using MS geometry)
-! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose
+! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose microsoftsurface
// Nokia devices and keyboards
! $nokiamodels = nokiasu8w nokiarx44 nokiarx51
-// PC geometries - they have special geometry but symbols are mostly pc105
-! $pcgeometries = latitude
-
// TypeMatrix geometries
! $tmgeometries = tm2020 tm2030PS2 tm2030USB tm2030USB-102 tm2030USB-106
@@ -85,14 +83,12 @@
! $sun_compat = sun_type6 sun_type6_suncompat sun_type7_suncompat suncompat
-! $htcdreamlayouts = us it de
! $evdevkbds = ibm_spacesaver
! $dvoraklayouts = br ca de ee es fr gb no pl se us
! model = keycodes
- pc98 = evdev(pc98)
applealu_jis = evdev+macintosh(jisevdev)
$jollamodels = evdev+jolla(jolla)
olpc = evdev+olpc(olpc)
@@ -127,7 +123,6 @@
omnikey101 = northgate(omnikey101)
sanwaskbkg3 = sanwa(sanwaskbkg3)
$pcmodels = pc(%m)
- $pcgeometries = pc(%m)
everex = everex(STEPnote)
thinkpad = thinkpad(intl)
thinkpad60 = thinkpad(60)
@@ -321,86 +316,85 @@
ws007sh * = pc+sharp_vndr/ws007sh(basic)
ws011sh * = pc+sharp_vndr/ws011sh(basic)
ws020sh * = pc+sharp_vndr/ws020sh(basic)
- htcdream $htcdreamlayouts = %l(htcdream)
* $nonlatin = pc+us+%l%(v):2
* * = pc+%l%(v)
-! model layout[1] = symbols
- * ar = pc+ara%(v[1])
- * ben = pc+in(ben)
- * bs = pc+ba%(v[1])
- * cs = pc+rs%(v[1])
- * cz_qwerty = pc+cz(qwerty)
- * dev = pc+in(deva)
- * dvorak = pc+us(dvorak)
- * dzdwi = pc+bt%(v[1])
- * el = pc+gr%(v[1])
- * en_US = pc+latin%(v[1])
- * guj = pc+in(guj)
- * gur = pc+in(guru)
- * iu = pc+ca(ike)
- * lo = pc+la%(v[1])
- * kan = pc+in(kan)
- * mi = pc+mao%(v[1])
- * ogham = pc+ie(ogam)
- * ori = pc+ie(ori)
- * sapmi = pc+no(smi)
- * sr = pc+srp%(v[1])
- * syr = pc+sy(syc)
- * tel = pc+in(tel)
- * tml = pc+in(tam)
- * yu = pc+srp%(v[1])
- * fr-latin9 = pc+fr(latin9)
- * us_intl = pc+us(alt-intl)
- * ben(basic) = pc+in(ben)
- * ben(probhat) = pc+in(ben_probhat)
- * dev(basic) = pc+in(deva)
- * dvorak($dvoraklayouts) = pc+%v(dvorak)
- * dvorak(basic) = pc+us(dvorak)
- * dvorak(pl_basic) = pc+pl(dvorak)
- * dvorak(pl) = pc+pl(dvorak_quotes)
- * dvorak(pl_altquotes) = pc+pl(dvorak_altquotes)
- * dzdwi(basic) = pc+bt(basic)
- * fi(basic) = pc+fi(classic)
- * ge(azerty_tskapo) = pc+fr(geo)
- * guj(basic) = pc+in(guj)
- * gur(basic) = pc+in(guru)
- * ie(laptop) = pc+ie(basic)
- * ie(CloGaelachLaptop) = pc+ie(CloGaelach)
- * in(urd) = pc+in(urd-phonetic)
- * iu(basic) = pc+ca(ike)
- * lo(basic) = pc+la(basic)
- * kan(basic) = pc+in(kan)
- * mal(basic) = pc+in(mal)
- * mal(mlplusnum) = pc+in(mal)
- * ogham(basic) = pc+ie(ogam)
- * ogham(laptop) = pc+ie(ogam)
- * ogham(is434) = pc+ie(ogam_is434)
- * ogham(is434laptop) = pc+ie(ogam_is434)
- * ori(basic) = pc+in(ori)
- * ro(de) = pc+ro(winkeys)
- * ro(us) = pc+ro(std)
- * ro(academic) = pc+ro(std)
- * ro(std_comma) = pc+ro(std)
- * ro(comma) = pc+ro(basic)
- * ru(os) = pc+ru(os_legacy)
- * pk(urd) = pc+pk(urd-phonetic)
- * sapmi(basic) = pc+no(smi)
- * sapmi(nodeadkeys) = pc+no(smi_nodeadkeys)
- * sapmi(sefi) = pc+fi(smi)
- * sin(phonetic-static) = pc+in(sin_phonetic)
- * syr(basic) = pc+sy(syc)
- * syr(phonetic) = pc+sy(syc_phonetic)
- * tam(INSCRIPT) = pc+in(tam)
- * tam(UNI) = pc+in(tam_unicode)
- * tam(NUMERAL-KEYBOARD) = pc+in(tam_keyboard_with_numerals)
- * tam(TAB) = pc+in(tam_TAB)
- * tam(TSCII) = pc+in(tam_TSCII)
- * tel(basic) = pc+in(tel)
- * yu(basic) = pc+srp(latin)
- * yu(unicode) = pc+srp(latinunicode)
- * yu(yz) = pc+srp(latinyz)
- * yu(unicodeyz) = pc+srp(latinunicodeyz)
+! model layout[1] = symbols
+ * ar = pc+ara%(v[1])
+ * ben = pc+in(ben)
+ * bs = pc+ba%(v[1])
+ * cs = pc+rs%(v[1])
+ * cz_qwerty = pc+cz(qwerty)
+ * dev = pc+in(deva)
+ * dvorak = pc+us(dvorak)
+ * dzdwi = pc+bt%(v[1])
+ * el = pc+gr%(v[1])
+ * en_US = pc+latin%(v[1])
+ * guj = pc+in(guj)
+ * gur = pc+in(guru)
+ * iu = pc+ca(ike)
+ * lo = pc+la%(v[1])
+ * kan = pc+in(kan)
+ * mi = pc+mao%(v[1])
+ * ogham = pc+ie(ogam)
+ * ori = pc+ie(ori)
+ * sapmi = pc+no(smi)
+ * sr = pc+srp%(v[1])
+ * syr = pc+sy(syc)
+ * tel = pc+in(tel)
+ * tml = pc+in(tam)
+ * yu = pc+srp%(v[1])
+ * fr-latin9 = pc+fr(latin9)
+ * us_intl = pc+us(alt-intl)
+ * ben(basic) = pc+in(ben)
+ * ben(probhat) = pc+in(ben_probhat)
+ * dev(basic) = pc+in(deva)
+ * dvorak($dvoraklayouts) = pc+%v(dvorak)
+ * dvorak(basic) = pc+us(dvorak)
+ * dvorak(pl_basic) = pc+pl(dvorak)
+ * dvorak(pl) = pc+pl(dvorak_quotes)
+ * dvorak(pl_altquotes) = pc+pl(dvorak_altquotes)
+ * dzdwi(basic) = pc+bt(basic)
+ * fi(basic) = pc+fi(classic)
+ * ge(azerty_tskapo) = pc+fr(geo)
+ * guj(basic) = pc+in(guj)
+ * gur(basic) = pc+in(guru)
+ * ie(laptop) = pc+ie(basic)
+ * ie(CloGaelachLaptop) = pc+ie(CloGaelach)
+ * in(urd) = pc+in(urd-phonetic)
+ * iu(basic) = pc+ca(ike)
+ * lo(basic) = pc+la(basic)
+ * kan(basic) = pc+in(kan)
+ * mal(basic) = pc+in(mal)
+ * mal(mlplusnum) = pc+in(mal)
+ * ogham(basic) = pc+ie(ogam)
+ * ogham(laptop) = pc+ie(ogam)
+ * ogham(is434) = pc+ie(ogam_is434)
+ * ogham(is434laptop) = pc+ie(ogam_is434)
+ * ori(basic) = pc+in(ori)
+ * ro(de) = pc+ro(winkeys)
+ * ro(us) = pc+ro(std)
+ * ro(academic) = pc+ro(std)
+ * ro(std_comma) = pc+ro(std)
+ * ro(comma) = pc+ro(basic)
+ * ru(os) = pc+ru(os_legacy)
+ * pk(urd) = pc+pk(urd-phonetic)
+ * sapmi(basic) = pc+no(smi)
+ * sapmi(nodeadkeys) = pc+no(smi_nodeadkeys)
+ * sapmi(sefi) = pc+fi(smi)
+ * sin(phonetic-static) = pc+in(sin_phonetic)
+ * syr(basic) = pc+sy(syc)
+ * syr(phonetic) = pc+sy(syc_phonetic)
+ * tam(INSCRIPT) = pc+in(tam)
+ * tam(UNI) = pc+in(tam_unicode)
+ * tam(NUMERAL-KEYBOARD) = pc+in(tam_keyboard_with_numerals)
+ * tam(TAB) = pc+in(tam_TAB)
+ * tam(TSCII) = pc+in(tam_TSCII)
+ * tel(basic) = pc+in(tel)
+ * yu(basic) = pc+srp(latin)
+ * yu(unicode) = pc+srp(latinunicode)
+ * yu(yz) = pc+srp(latinyz)
+ * yu(unicodeyz) = pc+srp(latinunicodeyz)
ataritt * = xfree68_vndr/ataritt(us)+%l[1]%(v[1])
amiga * = xfree68_vndr/amiga(usa1)+%l[1]%(v[1])
jollasbj * = jolla_vndr/sbj(common)+%l[1]%(v[1])
@@ -418,55 +412,55 @@
* * = pc+%l[1]%(v[1])
! model layout[1] variant[1] = symbols
- * ben basic = pc+in(ben)
- * ben probhat = pc+in(ben_probhat)
- * dev basic = pc+in(deva)
- * dvorak $dvoraklayouts = pc+%v(dvorak)
- * dvorak basic = pc+us(dvorak)
- * dvorak pl_basic = pc+pl(dvorak)
- * dvorak pl = pc+pl(dvorak_quotes)
- * dvorak pl_altquotes = pc+pl(dvorak_altquotes)
- * dzdwi basic = pc+bt(basic)
- * fi basic = pc+fi(classic)
- * ge azerty_tskapo = pc+fr(geo)
- * guj basic = pc+in(guj)
- * gur basic = pc+in(guru)
- * ie laptop = pc+ie(basic)
- * ie CloGaelachLaptop = pc+ie(CloGaelach)
- * in urd = pc+in(urd-phonetic)
- * iu basic = pc+ca(ike)
- * lo basic = pc+la(basic)
- * kan basic = pc+in(kan)
- * mal basic = pc+in(mal)
- * mal mlplusnum = pc+in(mal)
- * ogham basic = pc+ie(ogam)
- * ogham laptop = pc+ie(ogam)
- * ogham is434 = pc+ie(ogam_is434)
- * ogham is434laptop = pc+ie(ogam_is434)
- * ori basic = pc+in(ori)
- * ro de = pc+ro(winkeys)
- * ro us = pc+ro(std)
- * ro academic = pc+ro(std)
- * ro std_comma = pc+ro(std)
- * ro comma = pc+ro(basic)
- * ru os = pc+ru(os_legacy)
- * pk urd = pc+pk(urd-phonetic)
- * sapmi basic = pc+no(smi)
- * sapmi nodeadkeys = pc+no(smi_nodeadkeys)
- * sapmi sefi = pc+fi(smi)
- * sin phonetic-static = pc+in(sin_phonetic)
- * syr basic = pc+sy(syc)
- * syr phonetic = pc+sy(syc_phonetic)
- * tam INSCRIPT = pc+in(tam)
- * tam UNI = pc+in(tam_unicode)
- * tam NUMERAL-KEYBOARD = pc+in(tam_keyboard_with_numerals)
- * tam TAB = pc+in(tam_TAB)
- * tam TSCII = pc+in(tam_TSCII)
- * tel basic = pc+in(tel)
- * yu basic = pc+srp(latin)
- * yu unicode = pc+srp(latinunicode)
- * yu yz = pc+srp(latinyz)
- * yu unicodeyz = pc+srp(latinunicodeyz)
+ * ben basic = pc+in(ben)
+ * ben probhat = pc+in(ben_probhat)
+ * dev basic = pc+in(deva)
+ * dvorak $dvoraklayouts = pc+%v(dvorak)
+ * dvorak basic = pc+us(dvorak)
+ * dvorak pl_basic = pc+pl(dvorak)
+ * dvorak pl = pc+pl(dvorak_quotes)
+ * dvorak pl_altquotes = pc+pl(dvorak_altquotes)
+ * dzdwi basic = pc+bt(basic)
+ * fi basic = pc+fi(classic)
+ * ge azerty_tskapo = pc+fr(geo)
+ * guj basic = pc+in(guj)
+ * gur basic = pc+in(guru)
+ * ie laptop = pc+ie(basic)
+ * ie CloGaelachLaptop = pc+ie(CloGaelach)
+ * in urd = pc+in(urd-phonetic)
+ * iu basic = pc+ca(ike)
+ * lo basic = pc+la(basic)
+ * kan basic = pc+in(kan)
+ * mal basic = pc+in(mal)
+ * mal mlplusnum = pc+in(mal)
+ * ogham basic = pc+ie(ogam)
+ * ogham laptop = pc+ie(ogam)
+ * ogham is434 = pc+ie(ogam_is434)
+ * ogham is434laptop = pc+ie(ogam_is434)
+ * ori basic = pc+in(ori)
+ * ro de = pc+ro(winkeys)
+ * ro us = pc+ro(std)
+ * ro academic = pc+ro(std)
+ * ro std_comma = pc+ro(std)
+ * ro comma = pc+ro(basic)
+ * ru os = pc+ru(os_legacy)
+ * pk urd = pc+pk(urd-phonetic)
+ * sapmi basic = pc+no(smi)
+ * sapmi nodeadkeys = pc+no(smi_nodeadkeys)
+ * sapmi sefi = pc+fi(smi)
+ * sin phonetic-static = pc+in(sin_phonetic)
+ * syr basic = pc+sy(syc)
+ * syr phonetic = pc+sy(syc_phonetic)
+ * tam INSCRIPT = pc+in(tam)
+ * tam UNI = pc+in(tam_unicode)
+ * tam NUMERAL-KEYBOARD = pc+in(tam_keyboard_with_numerals)
+ * tam TAB = pc+in(tam_TAB)
+ * tam TSCII = pc+in(tam_TSCII)
+ * tel basic = pc+in(tel)
+ * yu basic = pc+srp(latin)
+ * yu unicode = pc+srp(latinunicode)
+ * yu yz = pc+srp(latinyz)
+ * yu unicodeyz = pc+srp(latinunicodeyz)
! model layout[2] = symbols
* ar = +ara%(v[2]):2
@@ -495,55 +489,55 @@
* yu = +srp%(v[2]):2
* fr-latin9 = +fr(latin9):2
* us_intl = +us(alt-intl):2
- * ben(basic) = +in(ben):2
- * ben(probhat) = +in(ben_probhat):2
- * dev(basic) = +in(deva):2
- * dvorak($dvoraklayouts) = +%v(dvorak):2
- * dvorak(basic) = +us(dvorak):2
- * dvorak(pl_basic) = +pl(dvorak):2
- * dvorak(pl) = +pl(dvorak_quotes):2
- * dvorak(pl_altquotes) = +pl(dvorak_altquotes):2
- * dzdwi(basic) = +bt(basic):2
- * fi(basic) = +fi(classic):2
- * ge(azerty_tskapo) = +fr(geo):2
- * guj(basic) = +in(guj):2
- * gur(basic) = +in(guru):2
- * ie(laptop) = +ie(basic):2
- * ie(CloGaelachLaptop) = +ie(CloGaelach):2
- * in(urd) = +in(urd-phonetic):2
- * iu(basic) = +ca(ike):2
- * lo(basic) = +la(basic):2
- * kan(basic) = +in(kan):2
- * mal(basic) = +in(mal):2
- * mal(mlplusnum) = +in(mal):2
- * ogham(basic) = +ie(ogam):2
- * ogham(laptop) = +ie(ogam):2
- * ogham(is434) = +ie(ogam_is434):2
- * ogham(is434laptop) = +ie(ogam_is434):2
- * ori(basic) = +in(ori):2
- * ro(de) = +ro(winkeys):2
- * ro(us) = +ro(std):2
- * ro(academic) = +ro(std):2
- * ro(std_comma) = +ro(std):2
- * ro(comma) = +ro(basic):2
- * ru(os) = +ru(os_legacy):2
- * pk(urd) = +pk(urd-phonetic):2
- * sapmi(basic) = +no(smi):2
- * sapmi(nodeadkeys) = +no(smi_nodeadkeys):2
- * sapmi(sefi) = +fi(smi):2
- * sin(phonetic-static) = +in(sin_phonetic):2
- * syr(basic) = +sy(syc):2
- * syr(phonetic) = +sy(syc_phonetic):2
- * tam(INSCRIPT) = +in(tam):2
- * tam(UNI) = +in(tam_unicode):2
- * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):2
- * tam(TAB) = +in(tam_TAB):2
- * tam(TSCII) = +in(tam_TSCII):2
- * tel(basic) = +in(tel):2
- * yu(basic) = +srp(latin):2
- * yu(unicode) = +srp(latinunicode):2
- * yu(yz) = +srp(latinyz):2
- * yu(unicodeyz) = +srp(latinunicodeyz):2
+ * ben(basic) = +in(ben):2
+ * ben(probhat) = +in(ben_probhat):2
+ * dev(basic) = +in(deva):2
+ * dvorak($dvoraklayouts) = +%v(dvorak):2
+ * dvorak(basic) = +us(dvorak):2
+ * dvorak(pl_basic) = +pl(dvorak):2
+ * dvorak(pl) = +pl(dvorak_quotes):2
+ * dvorak(pl_altquotes) = +pl(dvorak_altquotes):2
+ * dzdwi(basic) = +bt(basic):2
+ * fi(basic) = +fi(classic):2
+ * ge(azerty_tskapo) = +fr(geo):2
+ * guj(basic) = +in(guj):2
+ * gur(basic) = +in(guru):2
+ * ie(laptop) = +ie(basic):2
+ * ie(CloGaelachLaptop) = +ie(CloGaelach):2
+ * in(urd) = +in(urd-phonetic):2
+ * iu(basic) = +ca(ike):2
+ * lo(basic) = +la(basic):2
+ * kan(basic) = +in(kan):2
+ * mal(basic) = +in(mal):2
+ * mal(mlplusnum) = +in(mal):2
+ * ogham(basic) = +ie(ogam):2
+ * ogham(laptop) = +ie(ogam):2
+ * ogham(is434) = +ie(ogam_is434):2
+ * ogham(is434laptop) = +ie(ogam_is434):2
+ * ori(basic) = +in(ori):2
+ * ro(de) = +ro(winkeys):2
+ * ro(us) = +ro(std):2
+ * ro(academic) = +ro(std):2
+ * ro(std_comma) = +ro(std):2
+ * ro(comma) = +ro(basic):2
+ * ru(os) = +ru(os_legacy):2
+ * pk(urd) = +pk(urd-phonetic):2
+ * sapmi(basic) = +no(smi):2
+ * sapmi(nodeadkeys) = +no(smi_nodeadkeys):2
+ * sapmi(sefi) = +fi(smi):2
+ * sin(phonetic-static) = +in(sin_phonetic):2
+ * syr(basic) = +sy(syc):2
+ * syr(phonetic) = +sy(syc_phonetic):2
+ * tam(INSCRIPT) = +in(tam):2
+ * tam(UNI) = +in(tam_unicode):2
+ * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):2
+ * tam(TAB) = +in(tam_TAB):2
+ * tam(TSCII) = +in(tam_TSCII):2
+ * tel(basic) = +in(tel):2
+ * yu(basic) = +srp(latin):2
+ * yu(unicode) = +srp(latinunicode):2
+ * yu(yz) = +srp(latinyz):2
+ * yu(unicodeyz) = +srp(latinunicodeyz):2
nokiarx51 cz(qwerty) = +nokia_vndr/rx-51(cz_qwerty):2
nokiarx51 * = +nokia_vndr/rx-51(%l[2]%_v[2]):2
$sun $sun_custom = +sun_vndr/%l[2]%(v[2]):2
@@ -576,55 +570,55 @@
* yu = +srp%(v[3]):3
* fr-latin9 = +fr(latin9):3
* us_intl = +us(alt-intl):3
- * ben(basic) = +in(ben):3
- * ben(probhat) = +in(ben_probhat):3
- * dev(basic) = +in(deva):3
- * dvorak($dvoraklayouts) = +%v(dvorak):3
- * dvorak(basic) = +us(dvorak):3
- * dvorak(pl_basic) = +pl(dvorak):3
- * dvorak(pl) = +pl(dvorak_quotes):3
- * dvorak(pl_altquotes) = +pl(dvorak_altquotes):3
- * dzdwi(basic) = +bt(basic):3
- * fi(basic) = +fi(classic):3
- * ge(azerty_tskapo) = +fr(geo):3
- * guj(basic) = +in(guj):3
- * gur(basic) = +in(guru):3
- * ie(laptop) = +ie(basic):3
- * ie(CloGaelachLaptop) = +ie(CloGaelach):3
- * in(urd) = +in(urd-phonetic):3
- * iu(basic) = +ca(ike):3
- * lo(basic) = +la(basic):3
- * kan(basic) = +in(kan):3
- * mal(basic) = +in(mal):3
- * mal(mlplusnum) = +in(mal):3
- * ogham(basic) = +ie(ogam):3
- * ogham(laptop) = +ie(ogam):3
- * ogham(is434) = +ie(ogam_is434):3
- * ogham(is434laptop) = +ie(ogam_is434):3
- * ori(basic) = +in(ori):3
- * ro(de) = +ro(winkeys):3
- * ro(us) = +ro(std):3
- * ro(academic) = +ro(std):3
- * ro(std_comma) = +ro(std):3
- * ro(comma) = +ro(basic):3
- * ru(os) = +ru(os_legacy):3
- * pk(urd) = +pk(urd-phonetic):3
- * sapmi(basic) = +no(smi):3
- * sapmi(nodeadkeys) = +no(smi_nodeadkeys):3
- * sapmi(sefi) = +fi(smi):3
- * sin(phonetic-static) = +in(sin_phonetic):3
- * syr(basic) = +sy(syc):3
- * syr(phonetic) = +sy(syc_phonetic):3
- * tam(INSCRIPT) = +in(tam):3
- * tam(UNI) = +in(tam_unicode):3
- * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):3
- * tam(TAB) = +in(tam_TAB):3
- * tam(TSCII) = +in(tam_TSCII):3
- * tel(basic) = +in(tel):3
- * yu(basic) = +srp(latin):3
- * yu(unicode) = +srp(latinunicode):3
- * yu(yz) = +srp(latinyz):3
- * yu(unicodeyz) = +srp(latinunicodeyz):3
+ * ben(basic) = +in(ben):3
+ * ben(probhat) = +in(ben_probhat):3
+ * dev(basic) = +in(deva):3
+ * dvorak($dvoraklayouts) = +%v(dvorak):3
+ * dvorak(basic) = +us(dvorak):3
+ * dvorak(pl_basic) = +pl(dvorak):3
+ * dvorak(pl) = +pl(dvorak_quotes):3
+ * dvorak(pl_altquotes) = +pl(dvorak_altquotes):3
+ * dzdwi(basic) = +bt(basic):3
+ * fi(basic) = +fi(classic):3
+ * ge(azerty_tskapo) = +fr(geo):3
+ * guj(basic) = +in(guj):3
+ * gur(basic) = +in(guru):3
+ * ie(laptop) = +ie(basic):3
+ * ie(CloGaelachLaptop) = +ie(CloGaelach):3
+ * in(urd) = +in(urd-phonetic):3
+ * iu(basic) = +ca(ike):3
+ * lo(basic) = +la(basic):3
+ * kan(basic) = +in(kan):3
+ * mal(basic) = +in(mal):3
+ * mal(mlplusnum) = +in(mal):3
+ * ogham(basic) = +ie(ogam):3
+ * ogham(laptop) = +ie(ogam):3
+ * ogham(is434) = +ie(ogam_is434):3
+ * ogham(is434laptop) = +ie(ogam_is434):3
+ * ori(basic) = +in(ori):3
+ * ro(de) = +ro(winkeys):3
+ * ro(us) = +ro(std):3
+ * ro(academic) = +ro(std):3
+ * ro(std_comma) = +ro(std):3
+ * ro(comma) = +ro(basic):3
+ * ru(os) = +ru(os_legacy):3
+ * pk(urd) = +pk(urd-phonetic):3
+ * sapmi(basic) = +no(smi):3
+ * sapmi(nodeadkeys) = +no(smi_nodeadkeys):3
+ * sapmi(sefi) = +fi(smi):3
+ * sin(phonetic-static) = +in(sin_phonetic):3
+ * syr(basic) = +sy(syc):3
+ * syr(phonetic) = +sy(syc_phonetic):3
+ * tam(INSCRIPT) = +in(tam):3
+ * tam(UNI) = +in(tam_unicode):3
+ * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):3
+ * tam(TAB) = +in(tam_TAB):3
+ * tam(TSCII) = +in(tam_TSCII):3
+ * tel(basic) = +in(tel):3
+ * yu(basic) = +srp(latin):3
+ * yu(unicode) = +srp(latinunicode):3
+ * yu(yz) = +srp(latinyz):3
+ * yu(unicodeyz) = +srp(latinunicodeyz):3
nokiarx51 cz(qwerty) = +nokia_vndr/rx-51(cz_qwerty):3
nokiarx51 * = +nokia_vndr/rx-51(%l[3]%_v[3]):3
$sun $sun_custom = +sun_vndr/%l[3]%(v[3]):3
@@ -657,55 +651,55 @@
* yu = +srp%(v[4]):4
* fr-latin9 = +fr(latin9):4
* us_intl = +us(alt-intl):4
- * ben(basic) = +in(ben):4
- * ben(probhat) = +in(ben_probhat):4
- * dev(basic) = +in(deva):4
- * dvorak($dvoraklayouts) = +%v(dvorak):4
- * dvorak(basic) = +us(dvorak):4
- * dvorak(pl_basic) = +pl(dvorak):4
- * dvorak(pl) = +pl(dvorak_quotes):4
- * dvorak(pl_altquotes) = +pl(dvorak_altquotes):4
- * dzdwi(basic) = +bt(basic):4
- * fi(basic) = +fi(classic):4
- * ge(azerty_tskapo) = +fr(geo):4
- * guj(basic) = +in(guj):4
- * gur(basic) = +in(guru):4
- * ie(laptop) = +ie(basic):4
- * ie(CloGaelachLaptop) = +ie(CloGaelach):4
- * in(urd) = +in(urd-phonetic):4
- * iu(basic) = +ca(ike):4
- * lo(basic) = +la(basic):4
- * kan(basic) = +in(kan):4
- * mal(basic) = +in(mal):4
- * mal(mlplusnum) = +in(mal):4
- * ogham(basic) = +ie(ogam):4
- * ogham(laptop) = +ie(ogam):4
- * ogham(is434) = +ie(ogam_is434):4
- * ogham(is434laptop) = +ie(ogam_is434):4
- * ori(basic) = +in(ori):4
- * ro(de) = +ro(winkeys):4
- * ro(us) = +ro(std):4
- * ro(academic) = +ro(std):4
- * ro(std_comma) = +ro(std):4
- * ro(comma) = +ro(basic):4
- * ru(os) = +ru(os_legacy):4
- * pk(urd) = +pk(urd-phonetic):4
- * sapmi(basic) = +no(smi):4
- * sapmi(nodeadkeys) = +no(smi_nodeadkeys):4
- * sapmi(sefi) = +fi(smi):4
- * sin(phonetic-static) = +in(sin_phonetic):4
- * syr(basic) = +sy(syc):4
- * syr(phonetic) = +sy(syc_phonetic):4
- * tam(INSCRIPT) = +in(tam):4
- * tam(UNI) = +in(tam_unicode):4
- * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):4
- * tam(TAB) = +in(tam_TAB):4
- * tam(TSCII) = +in(tam_TSCII):4
- * tel(basic) = +in(tel):4
- * yu(basic) = +srp(latin):4
- * yu(unicode) = +srp(latinunicode):4
- * yu(yz) = +srp(latinyz):4
- * yu(unicodeyz) = +srp(latinunicodeyz):4
+ * ben(basic) = +in(ben):4
+ * ben(probhat) = +in(ben_probhat):4
+ * dev(basic) = +in(deva):4
+ * dvorak($dvoraklayouts) = +%v(dvorak):4
+ * dvorak(basic) = +us(dvorak):4
+ * dvorak(pl_basic) = +pl(dvorak):4
+ * dvorak(pl) = +pl(dvorak_quotes):4
+ * dvorak(pl_altquotes) = +pl(dvorak_altquotes):4
+ * dzdwi(basic) = +bt(basic):4
+ * fi(basic) = +fi(classic):4
+ * ge(azerty_tskapo) = +fr(geo):4
+ * guj(basic) = +in(guj):4
+ * gur(basic) = +in(guru):4
+ * ie(laptop) = +ie(basic):4
+ * ie(CloGaelachLaptop) = +ie(CloGaelach):4
+ * in(urd) = +in(urd-phonetic):4
+ * iu(basic) = +ca(ike):4
+ * lo(basic) = +la(basic):4
+ * kan(basic) = +in(kan):4
+ * mal(basic) = +in(mal):4
+ * mal(mlplusnum) = +in(mal):4
+ * ogham(basic) = +ie(ogam):4
+ * ogham(laptop) = +ie(ogam):4
+ * ogham(is434) = +ie(ogam_is434):4
+ * ogham(is434laptop) = +ie(ogam_is434):4
+ * ori(basic) = +in(ori):4
+ * ro(de) = +ro(winkeys):4
+ * ro(us) = +ro(std):4
+ * ro(academic) = +ro(std):4
+ * ro(std_comma) = +ro(std):4
+ * ro(comma) = +ro(basic):4
+ * ru(os) = +ru(os_legacy):4
+ * pk(urd) = +pk(urd-phonetic):4
+ * sapmi(basic) = +no(smi):4
+ * sapmi(nodeadkeys) = +no(smi_nodeadkeys):4
+ * sapmi(sefi) = +fi(smi):4
+ * sin(phonetic-static) = +in(sin_phonetic):4
+ * syr(basic) = +sy(syc):4
+ * syr(phonetic) = +sy(syc_phonetic):4
+ * tam(INSCRIPT) = +in(tam):4
+ * tam(UNI) = +in(tam_unicode):4
+ * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):4
+ * tam(TAB) = +in(tam_TAB):4
+ * tam(TSCII) = +in(tam_TSCII):4
+ * tel(basic) = +in(tel):4
+ * yu(basic) = +srp(latin):4
+ * yu(unicode) = +srp(latinunicode):4
+ * yu(yz) = +srp(latinyz):4
+ * yu(unicodeyz) = +srp(latinunicodeyz):4
nokiarx51 cz(qwerty) = +nokia_vndr/rx-51(cz_qwerty):4
nokiarx51 * = +nokia_vndr/rx-51(%l[4]%_v[4]):4
$sun $sun_custom = +sun_vndr/%l[4]%(v[4]):4
@@ -941,26 +935,32 @@
! layout option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle)
* misc:typo = +typo(base)
+ * misc:apl = +apl(level3)
! layout[1] option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):1
* misc:typo = +typo(base):1
+ * misc:apl = +apl(level3):1
! layout[2] option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):2
* misc:typo = +typo(base):2
+ * misc:apl = +apl(level3):2
! layout[3] option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):3
* misc:typo = +typo(base):3
+ * misc:apl = +apl(level3):3
! layout[4] option = symbols
$threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):4
* misc:typo = +typo(base):4
+ * misc:apl = +apl(level3):4
! option = symbols
grp:shift_toggle = +group(shifts_toggle)
altwin:menu = +altwin(menu)
+ altwin:menu_win = +altwin(menu_win)
altwin:meta_alt = +altwin(meta_alt)
altwin:alt_win = +altwin(alt_win)
altwin:ctrl_win = +altwin(ctrl_win)
@@ -1027,11 +1027,14 @@
lv3:lwin_switch = +level3(lwin_switch)
lv3:rwin_switch = +level3(rwin_switch)
lv3:enter_switch = +level3(enter_switch)
+ lv3:4_switch_isolated = +level3(4_switch_isolated)
+ lv3:9_switch_isolated = +level3(9_switch_isolated)
caps:capslock = +capslock(capslock)
caps:numlock = +capslock(numlock)
caps:shiftlock = +capslock(shiftlock)
caps:swapescape = +capslock(swapescape)
caps:escape = +capslock(escape)
+ caps:escape_shifted_capslock = +capslock(escape_shifted_capslock)
caps:backspace = +capslock(backspace)
caps:super = +capslock(super)
caps:hyper = +capslock(hyper)
@@ -1041,6 +1044,8 @@
ctrl:nocaps = +ctrl(nocaps)
ctrl:lctrl_meta = +ctrl(lctrl_meta)
ctrl:swapcaps = +ctrl(swapcaps)
+ ctrl:swapcaps_hyper = +ctrl(swapcaps_hyper)
+ ctrl:swapcaps_and_switch_layout = +ctrl(swapcaps_and_switch_layout)
ctrl:ac_ctrl = +ctrl(ac_ctrl)
ctrl:aa_ctrl = +ctrl(aa_ctrl)
ctrl:rctrl_ralt = +ctrl(rctrl_ralt)
@@ -1090,10 +1095,20 @@
nbsp:level4 = +nbsp(level4)
nbsp:level4n = +nbsp(level4n)
nbsp:level4nl = +nbsp(level4nl)
+ nbsp:zwnj2 = +nbsp(zwnj2)
+ nbsp:zwnj2zwj3 = +nbsp(zwnj2zwj3)
+ nbsp:zwnj2zwj3nb4 = +nbsp(zwnj2zwj3nb4)
+ nbsp:zwnj2nb3 = +nbsp(zwnj2nb3)
+ nbsp:zwnj2nb3s = +nbsp(zwnj2nb3s)
+ nbsp:zwnj2nb3zwj4 = +nbsp(zwnj2nb3zwj4)
+ nbsp:zwnj2nb3nnb4 = +nbsp(zwnj2nb3nnb4)
+ nbsp:zwnj3zwj4 = +nbsp(zwnj3zwj4)
japan:nicola_f_bs = +jp(nicola_f_bs)
japan:hztg_escape = +jp(hztg_escape)
- korean:ralt_rctrl = +kr(ralt_hangul)+kr(rctrl_hanja)
- korean:rctrl_ralt = +kr(rctrl_hangul)+kr(ralt_hanja)
+ korean:ralt_hangul = +kr(ralt_hangul)
+ korean:rctrl_hangul = +kr(rctrl_hangul)
+ korean:ralt_hanja = +kr(ralt_hanja)
+ korean:rctrl_hanja = +kr(rctrl_hanja)
kpdl:dot = +kpdl(dot)
kpdl:comma = +kpdl(comma)
kpdl:dotoss = +kpdl(dotoss)
@@ -1125,6 +1140,8 @@
lv3:caps_switch_latch = +level3(caps_switch_latch)
lv3:bksl_switch_latch = +level3(bksl_switch_latch)
lv3:lsgt_switch_latch = +level3(lsgt_switch_latch)
+ lv5:lsgt_switch = +level5(lsgt_switch)
+ lv5:ralt_switch = +level5(ralt_switch)
lv5:lsgt_switch_lock = +level5(lsgt_switch_lock)
lv5:ralt_switch_lock = +level5(ralt_switch_lock)
lv5:lwin_switch_lock = +level5(lwin_switch_lock)
@@ -1140,6 +1157,7 @@
grp_led:num = +lednum(group_lock)
grp_led:caps = +ledcaps(group_lock)
grp_led:scroll = +ledscroll(group_lock)
+ mod_led:compose = +ledcompose(compose)
japan:kana_lock = +japan(kana_lock)
caps:shiftlock = +ledcaps(shift_lock)
grab:break_actions = +xfree86(grab_break)
diff --git a/test/data/rules/evdev.extras.xml b/test/data/rules/evdev.extras.xml
new file mode 100644
index 0000000..850f110
--- /dev/null
+++ b/test/data/rules/evdev.extras.xml
@@ -0,0 +1,1354 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xkbConfigRegistry SYSTEM "xkb.dtd">
+<xkbConfigRegistry>
+ <modelList/>
+ <layoutList>
+ <layout>
+ <configItem popularity="exotic">
+ <name>apl</name>
+ <shortDescription>apl</shortDescription>
+ <description>APL</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>dyalog</name>
+ <shortDescription>dlg</shortDescription>
+ <description>APL symbols (Dyalog APL)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sax</name>
+ <shortDescription>sax</shortDescription>
+ <description>APL symbols (SAX, Sharp APL for Unix)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>unified</name>
+ <shortDescription>ufd</shortDescription>
+ <description>APL symbols (unified)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>apl2</name>
+ <shortDescription>apl2</shortDescription>
+ <description>APL symbols (IBM APL2)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>aplplusII</name>
+ <shortDescription>aplII</shortDescription>
+ <description>APL symbols (Manugistics APL*PLUS II)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>aplx</name>
+ <shortDescription>aplx</shortDescription>
+ <description>APL symbols (APLX unified)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ca</name>
+ <shortDescription>fr</shortDescription>
+ <description>French (Canada)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>kut</name>
+ <shortDescription>kut</shortDescription>
+ <description>Kutenai</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>shs</name>
+ <shortDescription>shs</shortDescription>
+ <description>Secwepemctsin</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Multilingual (Canada, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>de</name>
+ <shortDescription>de</shortDescription>
+ <description>German</description>
+ <languageList>
+ <iso639Id>ger</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>us</name>
+ <description>German (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>hu</name>
+ <description>German (with Hungarian letters, no dead keys)</description>
+ <languageList>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>hun</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>pl</name>
+ <description>Polish (Germany, no dead keys)</description>
+ <languageList>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>pol</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>German (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>adnw</name>
+ <description>German (Aus der Neo-Welt)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>koy</name>
+ <description>German (KOY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>bone</name>
+ <description>German (Bone)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>bone_eszett_home</name>
+ <description>German (Bone, eszett in the home row)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>neo_qwertz</name>
+ <description>German (Neo, QWERTZ)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>neo_qwerty</name>
+ <description>German (Neo, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ru-recom</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Germany, recommended)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ru-translit</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Germany, transliteration)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>lld</name>
+ <shortDescription>de_lld</shortDescription>
+ <description>German (Ladin)</description>
+ <languageList>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>lld</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>eg</name>
+ <shortDescription>ⲕⲏⲙⲉ</shortDescription>
+ <description>Coptic</description>
+ <languageList>
+ <iso639Id>cop</iso639Id>
+ <iso639Id>egy</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>hu</name>
+ <description>Hungarian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>oldhun</name>
+ <shortDescription>oldhun</shortDescription>
+ <description>Old Hungarian</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ohu_lig</name>
+ <shortDescription>ohu_lig</shortDescription>
+ <description>Old Hungarian (for ligatures)</description>
+ </configItem>
+ </variant>
+
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ir</name>
+ <shortDescription>fa</shortDescription>
+ <description>Persian</description>
+ <languageList>
+ <iso639Id>per</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ave</name>
+ <description>Avestan</description>
+ <languageList>
+ <iso639Id>ave</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>lt</name>
+ <shortDescription>lt</shortDescription>
+ <description>Lithuanian</description>
+ <languageList>
+ <iso639Id>lit</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>us_dvorak</name>
+ <description>Lithuanian (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Lithuanian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>lv</name>
+ <shortDescription>lv</shortDescription>
+ <description>Latvian</description>
+ <languageList>
+ <iso639Id>lav</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>dvorak</name>
+ <description>Latvian (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ykeydvorak</name>
+ <description>Latvian (Dvorak, with Y)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>minuskeydvorak</name>
+ <description>Latvian (Dvorak, with minus)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>dvorakprogr</name>
+ <description>Latvian (programmer Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ykeydvorakprogr</name>
+ <description>Latvian (programmer Dvorak, with Y)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>minuskeydvorakprogr</name>
+ <description>Latvian (programmer Dvorak, with minus)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>colemak</name>
+ <description>Latvian (Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>apostrophecolemak</name>
+ <description>Latvian (Colemak, with apostrophe)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Latvian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>us</name>
+ <shortDescription>en</shortDescription>
+ <description>English (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>intl-unicode</name>
+ <description>English (US, intl., AltGr Unicode combining)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>alt-intl-unicode</name>
+ <description>English (US, intl., AltGr Unicode combining, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ats</name>
+ <description>Atsina</description>
+ <!-- No ISO code in ISO639-2, only draft ISO693-3 -->
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>crd</name>
+ <description>Coeur d'Alene Salish</description>
+ <languageList>
+ <iso639Id>crd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>cz_sk_de</name>
+ <description>Czech Slovak and German (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>cze</iso639Id>
+ <iso639Id>slo</iso639Id>
+ <iso639Id>ger</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>drix</name>
+ <description>English (Drix)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>de_se_fi</name>
+ <description>German, Swedish and Finnish (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>swe</iso639Id>
+ <iso639Id>fin</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ibm238l</name>
+ <description>English (US, IBM Arabic 238_L)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>English (US, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx</name>
+ <description>English (Carpalx)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-intl</name>
+ <description>English (Carpalx, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-altgr-intl</name>
+ <description>English (Carpalx, intl., with AltGr dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-full</name>
+ <description>English (Carpalx, full optimization)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-full-intl</name>
+ <description>English (Carpalx, full optimization, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>carpalx-full-altgr-intl</name>
+ <description>English (Carpalx, full optimization, intl., with AltGr dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>3l</name>
+ <description>English (3l)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>3l-cros</name>
+ <description>English (3l, Chromebook)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>3l-emacs</name>
+ <description>English (3l, emacs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>scn</name>
+ <description>Sicilian (US keyboard)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>ita</iso639Id>
+ <iso639Id>scn</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>pl</name>
+ <shortDescription>pl</shortDescription>
+ <description>Polish</description>
+ <languageList>
+ <iso639Id>pol</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>intl</name>
+ <description>Polish (intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>colemak</name>
+ <description>Polish (Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Polish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>glagolica</name>
+ <description>Polish (Glagolica)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ro</name>
+ <shortDescription>ro</shortDescription>
+ <description>Romanian</description>
+ <languageList>
+ <iso639Id>rum</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>crh_dobruja</name>
+ <shortDescription>crh</shortDescription>
+ <description>Crimean Tatar (Dobruja Q)</description>
+ <languageList>
+ <iso639Id>crh</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ergonomic</name>
+ <description>Romanian (ergonomic Touchtype)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Romanian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>rs</name>
+ <shortDescription>sr</shortDescription>
+ <description>Serbian</description>
+ <languageList>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>combiningkeys</name>
+ <description>Serbian (combining accents instead of dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ru</name>
+ <shortDescription>ru</shortDescription>
+ <description>Russian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>chu</name>
+ <description>Church Slavonic</description>
+ <languageList>
+ <iso639Id>chu</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ruu</name>
+ <shortDescription>ru</shortDescription>
+ <description>Russian (with Ukrainian-Belorussian layout)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ <iso639Id>ukr</iso639Id>
+ <iso639Id>bel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>rulemak</name>
+ <description>Russian (Rulemak, phonetic Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>phonetic_mac</name>
+ <description>Russian (phonetic Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Russian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>unipunct</name>
+ <description>Russian (with US punctuation)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>prxn</name>
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Polyglot and Reactionary)</description>
+ <countryList>
+ <iso3166Id>RU</iso3166Id>
+ <iso3166Id>RS</iso3166Id>
+ <iso3166Id>BA</iso3166Id>
+ <iso3166Id>ME</iso3166Id>
+ <iso3166Id>MK</iso3166Id>
+ <iso3166Id>BG</iso3166Id>
+ <iso3166Id>MD</iso3166Id>
+ <iso3166Id>UA</iso3166Id>
+ <iso3166Id>BY</iso3166Id>
+ <iso3166Id>KZ</iso3166Id>
+ <iso3166Id>MN</iso3166Id>
+ <iso3166Id>KG</iso3166Id>
+ <iso3166Id>TJ</iso3166Id>
+ <iso3166Id>UZ</iso3166Id>
+ <iso3166Id>TM</iso3166Id>
+ <iso3166Id>AZ</iso3166Id>
+ </countryList>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ <iso639Id>rus-petr1708</iso639Id>
+ <iso639Id>ukr</iso639Id>
+ <iso639Id>bel</iso639Id>
+ <iso639Id>srp</iso639Id>
+ <iso639Id>mkd</iso639Id>
+ <iso639Id>bul</iso639Id>
+ <iso639Id>chu</iso639Id>
+ <iso639Id>rum-Cyrl</iso639Id>
+ <iso639Id>kaz</iso639Id>
+ <iso639Id>kir</iso639Id>
+ <iso639Id>uzb</iso639Id>
+ <iso639Id>bak</iso639Id>
+ <iso639Id>aze</iso639Id>
+ <iso639Id>tat</iso639Id>
+ <iso639Id>uig</iso639Id>
+ <iso639Id>kdr</iso639Id>
+ <iso639Id>tyv</iso639Id>
+ <iso639Id>kjh</iso639Id>
+ <iso639Id>crh</iso639Id>
+ <iso639Id>tgk</iso639Id>
+ <iso639Id>abk</iso639Id>
+ <iso639Id>sah</iso639Id>
+ <iso639Id>mon</iso639Id>
+ <iso639Id>kal</iso639Id>
+ <iso639Id>sjd</iso639Id>
+ <iso639Id>chv</iso639Id>
+ <iso639Id>oss</iso639Id>
+ <iso639Id>krl</iso639Id>
+ <iso639Id>ale</iso639Id>
+ <iso639Id>wbl</iso639Id>
+ <iso639Id>kur</iso639Id>
+ <iso639Id>niv</iso639Id>
+ <iso639Id>dng</iso639Id>
+ <iso639Id>kom</iso639Id>
+ <iso639Id>udm</iso639Id>
+ <iso639Id>sel</iso639Id>
+ <iso639Id>ulc</iso639Id>
+ <iso639Id>ude</iso639Id>
+ <iso639Id>oac</iso639Id>
+ <iso639Id>oaa</iso639Id>
+ <iso639Id>gld</iso639Id>
+ <iso639Id>eve</iso639Id>
+ <iso639Id>evn</iso639Id>
+ <iso639Id>kca</iso639Id>
+ <iso639Id>itl</iso639Id>
+ <iso639Id>yrk</iso639Id>
+ <iso639Id>neg</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>am</name>
+ <shortDescription>hy</shortDescription>
+ <description>Armenian</description>
+ <languageList>
+ <iso639Id>hye</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>olpc-phonetic</name>
+ <description>Armenian (OLPC, phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>il</name>
+ <shortDescription>he</shortDescription>
+ <description>Hebrew</description>
+ <languageList>
+ <iso639Id>heb</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>biblicalSIL</name>
+ <description>Hebrew (Biblical, SIL phonetic)</description>
+ <languageList>
+ <iso639Id>heb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ara</name>
+ <shortDescription>ar</shortDescription>
+ <description>Arabic</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Arabic (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>basic_ext</name>
+ <description>Arabic (Arabic numerals, extensions in the 4th level)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>basic_ext_digits</name>
+ <description>Arabic (Eastern Arabic numerals, extensions in the 4th level)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>uga</name>
+ <description>Ugaritic instead of Arabic</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>be</name>
+ <shortDescription>be</shortDescription>
+ <description>Belgian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Belgian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>br</name>
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese (Brazil)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Portuguese (Brazil, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>cz</name>
+ <shortDescription>cs</shortDescription>
+ <description>Czech</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Czech (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>prog</name>
+ <description>Czech (programming)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>typo</name>
+ <description>Czech (typographic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>coder</name>
+ <description>Czech (coder)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>prog_typo</name>
+ <description>Czech (programming, typographic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>dk</name>
+ <shortDescription>da</shortDescription>
+ <description>Danish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Danish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>nl</name>
+ <shortDescription>nl</shortDescription>
+ <description>Dutch</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Dutch (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ee</name>
+ <shortDescription>et</shortDescription>
+ <description>Estonian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Estonian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>fi</name>
+ <shortDescription>fi</shortDescription>
+ <description>Finnish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Finnish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>das</name>
+ <description>Finnish (DAS)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>fidvorak</name>
+ <description>Finnish (Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>fr</name>
+ <shortDescription>fr</shortDescription>
+ <description>French</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>French (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>us-alt</name>
+ <description>French (US with dead keys, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>us-azerty</name>
+ <description>French (US, AZERTY)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>gr</name>
+ <shortDescription>gr</shortDescription>
+ <description>Greek</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Greek (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>colemak</name>
+ <description>Greek (Colemak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>it</name>
+ <shortDescription>it</shortDescription>
+ <description>Italian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Italian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>lld</name>
+ <shortDescription>it_lld</shortDescription>
+ <description>Italian (Ladin)</description>
+ <languageList>
+ <iso639Id>it</iso639Id>
+ <iso639Id>lld</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>jp</name>
+ <shortDescription>ja</shortDescription>
+ <description>Japanese</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Japanese (Sun Type 6)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type7</name>
+ <description>Japanese (Sun Type 7, PC-compatible)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type7_suncompat</name>
+ <description>Japanese (Sun Type 7, Sun-compatible)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>no</name>
+ <shortDescription>no</shortDescription>
+ <description>Norwegian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Norwegian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>pt</name>
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Portuguese (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>pt</name>
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>colemak</name>
+ <description>Portuguese (Colemak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>sk</name>
+ <shortDescription>sk</shortDescription>
+ <description>Slovak</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>acc</name>
+ <description>Slovak (ACC layout, only accented letters)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Slovak (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>es</name>
+ <shortDescription>es</shortDescription>
+ <description>Spanish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Spanish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>se</name>
+ <shortDescription>sv</shortDescription>
+ <description>Swedish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>dvorak_a5</name>
+ <description>Swedish (Dvorak A5)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Swedish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>ovd</name>
+ <description>Elfdalian (Swedish, with combining ogonek)</description>
+ <languageList>
+ <iso639Id>ovd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ch</name>
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6_de</name>
+ <description>German (Switzerland, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6_fr</name>
+ <description>French (Switzerland, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>tr</name>
+ <shortDescription>tr</shortDescription>
+ <description>Turkish</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Turkish (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>ua</name>
+ <shortDescription>uk</shortDescription>
+ <description>Ukrainian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Ukrainian (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>gb</name>
+ <shortDescription>en</shortDescription>
+ <description>English (UK)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>English (UK, Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>kr</name>
+ <shortDescription>ko</shortDescription>
+ <description>Korean</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>sun_type6</name>
+ <description>Korean (Sun Type 6/7)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>vn</name>
+ <!-- Keyboard indicator for Vietnamese layouts -->
+ <shortDescription>vi</shortDescription>
+ <description>Vietnamese</description>
+ <languageList>
+ <iso639Id>vie</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>aderty</name>
+ <description>Vietnamese (AÐERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem popularity="exotic">
+ <name>qderty</name>
+ <description>Vietnamese (QĐERTY)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>eu</name>
+ <!-- Keyboard indicator for European layouts -->
+ <shortDescription>eu</shortDescription>
+ <description>EurKEY (US)</description>
+ <languageList>
+ <iso639Id>cat</iso639Id>
+ <iso639Id>dan</iso639Id>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>est</iso639Id>
+ <iso639Id>fao</iso639Id>
+ <iso639Id>fin</iso639Id>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>gre</iso639Id>
+ <iso639Id>gsw</iso639Id>
+ <iso639Id>ita</iso639Id>
+ <iso639Id>lav</iso639Id>
+ <iso639Id>lit</iso639Id>
+ <iso639Id>nld</iso639Id>
+ <iso639Id>nor</iso639Id>
+ <iso639Id>por</iso639Id>
+ <iso639Id>spa</iso639Id>
+ <iso639Id>swe</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>cm</name>
+ <shortDescription>cm</shortDescription>
+ <description>English (Cameroon)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem popularity="exotic">
+ <name>mmuock</name>
+ <description>Mmuock</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem popularity="exotic">
+ <name>trans</name>
+ <!-- Keyboard layouts for transcription and transliteration systems -->
+ <description>International Phonetic Alphabet</description>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>in</name>
+ <!-- Keyboard indicator for Indian layouts -->
+ <shortDescription>in</shortDescription>
+ <description>Indian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>modi-kagapa</name>
+ <shortDescription>mr</shortDescription>
+ <description>Modi (KaGaPa phonetic)</description>
+ <languageList>
+ <iso639Id>mar</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ </layoutList>
+ <optionList>
+ <group allowMultipleSelection="true">
+ <!-- The key combination used to choose the 3rd (and 4th, together with Shift)
+ level of symbols -->
+ <configItem popularity="exotic">
+ <name>lv3</name>
+ <description>Key to choose the 3rd level</description>
+ </configItem>
+ <option>
+ <configItem popularity="exotic">
+ <name>lv3:4_switch_isolated</name>
+ <description>Number key 4 when pressed in isolation</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem popularity="exotic">
+ <name>lv3:9_switch_isolated</name>
+ <description>Number key 9 when pressed in isolation</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Tweaking the position of the "(" and ")" keys -->
+ <configItem popularity="exotic">
+ <name>parens</name>
+ <description>Parentheses position</description>
+ </configItem>
+ <option>
+ <configItem popularity="exotic">
+ <name>parens:swap_brackets</name>
+ <description>Swap with square brackets</description>
+ </configItem>
+ </option>
+ </group>
+ </optionList>
+</xkbConfigRegistry>
diff --git a/test/data/rules/evdev.xml b/test/data/rules/evdev.xml
new file mode 100644
index 0000000..a13af8f
--- /dev/null
+++ b/test/data/rules/evdev.xml
@@ -0,0 +1,7705 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xkbConfigRegistry SYSTEM "xkb.dtd">
+<xkbConfigRegistry version="1.1">
+ <modelList>
+ <model>
+ <configItem>
+ <name>pc86</name>
+ <description>Generic 86-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc101</name>
+ <description>Generic 101-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc102</name>
+ <description>Generic 102-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc104</name>
+ <description>Generic 104-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc104alt</name>
+ <description>Generic 104-key PC with L-shaped Enter key</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc105</name>
+ <description>Generic 105-key PC</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dell101</name>
+ <description>Dell 101-key PC</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>latitude</name>
+ <description>Dell Latitude laptop</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dellm65</name>
+ <description>Dell Precision M65 laptop</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>everex</name>
+ <description>Everex STEPnote</description>
+ <vendor>Everex</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>flexpro</name>
+ <description>Keytronic FlexPro</description>
+ <vendor>Keytronic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoft</name>
+ <description>Microsoft Natural</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>omnikey101</name>
+ <description>Northgate OmniKey 101</description>
+ <vendor>Northgate</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>winbook</name>
+ <description>Winbook Model XP5</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>pc98</name>
+ <description>PC-98</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>a4techKB21</name>
+ <description>A4Tech KB-21</description>
+ <vendor>A4Tech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>a4techKBS8</name>
+ <description>A4Tech KBS-8</description>
+ <vendor>A4Tech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>a4_rfkb23</name>
+ <description>A4Tech Wireless Desktop RFKB-23</description>
+ <vendor>A4Tech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>airkey</name>
+ <description>Acer AirKey V</description>
+ <vendor>Acer</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>azonaRF2300</name>
+ <description>Azona RF2300 wireless Internet</description>
+ <vendor>Azona</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>scorpius</name>
+ <description>Advance Scorpius KI</description>
+ <vendor>Scorpius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>brother</name>
+ <description>Brother Internet</description>
+ <vendor>Brother</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc5113rf</name>
+ <description>BTC 5113RF Multimedia</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc5126t</name>
+ <description>BTC 5126T</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc6301urf</name>
+ <description>BTC 6301URF</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9000</name>
+ <description>BTC 9000</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9000a</name>
+ <description>BTC 9000A</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9001ah</name>
+ <description>BTC 9001AH</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc5090</name>
+ <description>BTC 5090</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9019u</name>
+ <description>BTC 9019U</description>
+ <vendor>BTC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>btc9116u</name>
+ <description>BTC 9116U Mini Wireless Internet and Gaming</description>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherryblue</name>
+ <description>Cherry Blue Line CyBo@rd</description>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherryblueb</name>
+ <description>Cherry CyMotion Master XPress</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherrybluea</name>
+ <description>Cherry Blue Line CyBo@rd (alt.)</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherrycyboard</name>
+ <description>Cherry CyBo@rd USB-Hub</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherrycmexpert</name>
+ <description>Cherry CyMotion Expert</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cherrybunlim</name>
+ <description>Cherry B.UNLIMITED</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chicony</name>
+ <description>Chicony Internet</description>
+ <vendor>Chicony</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chicony0108</name>
+ <description>Chicony KU-0108</description>
+ <vendor>Chicony</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chicony0420</name>
+ <description>Chicony KU-0420</description>
+ <vendor>Chicony</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chicony9885</name>
+ <description>Chicony KB-9885</description>
+ <vendor>Chicony</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compaqeak8</name>
+ <description>Compaq Easy Access</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compaqik7</name>
+ <description>Compaq Internet (7 keys)</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compaqik13</name>
+ <description>Compaq Internet (13 keys)</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compaqik18</name>
+ <description>Compaq Internet (18 keys)</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>cymotionlinux</name>
+ <description>Cherry CyMotion Master Linux</description>
+ <vendor>Cherry</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>armada</name>
+ <description>Compaq Armada laptop</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>presario</name>
+ <description>Compaq Presario laptop</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>ipaq</name>
+ <description>Compaq iPaq</description>
+ <vendor>Compaq</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dell</name>
+ <description>Dell</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dellsk8125</name>
+ <description>Dell SK-8125</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dellsk8135</name>
+ <description>Dell SK-8135</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dellusbmm</name>
+ <description>Dell USB Multimedia</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>inspiron</name>
+ <description>Dell Inspiron 6000/8000 laptop</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>precision_m</name>
+ <description>Dell Precision M laptop</description>
+ <vendor>Dell</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dexxa</name>
+ <description>Dexxa Wireless Desktop</description>
+ <vendor>Dexxa</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>diamond</name>
+ <description>Diamond 9801/9802</description>
+ <vendor>Diamond</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>dtk2000</name>
+ <description>DTK2000</description>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>ennyah_dkb1008</name>
+ <description>Ennyah DKB-1008</description>
+ <vendor>Ennyah</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>fscaa1667g</name>
+ <description>Fujitsu-Siemens Amilo laptop</description>
+ <vendor>Fujitsu-Siemens</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>genius</name>
+ <description>Genius Comfy KB-16M/Multimedia KWD-910</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>geniuscomfy</name>
+ <description>Genius Comfy KB-12e</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>geniuscomfy2</name>
+ <description>Genius Comfy KB-21e-Scroll</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>geniuskb19e</name>
+ <description>Genius KB-19e NB</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>geniuskkb2050hs</name>
+ <description>Genius KKB-2050HS</description>
+ <vendor>Genius</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>gyration</name>
+ <description>Gyration</description>
+ <vendor>Gyration</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>kinesis</name>
+ <description>Kinesis</description>
+ <vendor>Kinesis</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logitech_base</name>
+ <description>Logitech</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logitech_g15</name>
+ <description>Logitech G15 extra keys via G15daemon</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpi6</name>
+ <description>Hewlett-Packard Internet</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hp250x</name>
+ <description>Hewlett-Packard NEC SK-2500 Multimedia</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpxe3gc</name>
+ <description>Hewlett-Packard Omnibook XE3 GC</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpxe3gf</name>
+ <description>Hewlett-Packard Omnibook XE3 GF</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpxt1000</name>
+ <description>Hewlett-Packard Omnibook XT1000</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpdv5</name>
+ <description>Hewlett-Packard Pavilion dv5</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpzt11xx</name>
+ <description>Hewlett-Packard Pavilion ZT1100</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hp500fa</name>
+ <description>Hewlett-Packard Omnibook 500 FA</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hp5xx</name>
+ <description>Hewlett-Packard Omnibook 500</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpnx9020</name>
+ <description>Hewlett-Packard nx9020</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hp6000</name>
+ <description>Hewlett-Packard Omnibook 6000/6100</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>honeywell_euroboard</name>
+ <description>Honeywell Euroboard</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hpmini110</name>
+ <description>Hewlett-Packard Mini 110 laptop</description>
+ <vendor>Hewlett-Packard</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>rapidaccess</name>
+ <description>IBM Rapid Access</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>rapidaccess2</name>
+ <description>IBM Rapid Access II</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>thinkpad</name>
+ <description>IBM ThinkPad 560Z/600/600E/A22E</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>thinkpad60</name>
+ <description>IBM ThinkPad R60/T60/R61/T61</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>thinkpadz60</name>
+ <description>IBM ThinkPad Z60m/Z60t/Z61m/Z61t</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>ibm_spacesaver</name>
+ <description>IBM Space Saver</description>
+ <vendor>Lenovo (previously IBM)</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiaccess</name>
+ <description>Logitech Access</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiclx300</name>
+ <description>Logitech Cordless Desktop LX-300</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logii350</name>
+ <description>Logitech Internet 350</description>
+ <vendor>Logitech</vendor>
+ <hwList> <hwId>046d:c313</hwId></hwList>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logimel</name>
+ <description>Logitech Internet 350</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicd</name>
+ <description>Logitech Cordless Desktop</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicd_it</name>
+ <description>Logitech Cordless Desktop iTouch</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicd_nav</name>
+ <description>Logitech Cordless Desktop Navigator</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicd_opt</name>
+ <description>Logitech Cordless Desktop Optical</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicda</name>
+ <description>Logitech Cordless Desktop (alt.)</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicdpa2</name>
+ <description>Logitech Cordless Desktop Pro (2nd alt.)</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicfn</name>
+ <description>Logitech Cordless Freedom/Desktop Navigator</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicdn</name>
+ <description>Logitech Cordless Desktop Navigator</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiitc</name>
+ <description>Logitech iTouch Cordless Y-RB6</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiik</name>
+ <description>Logitech Internet</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>itouch</name>
+ <description>Logitech iTouch</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logicink</name>
+ <description>Logitech Internet Navigator</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiex110</name>
+ <description>Logitech Cordless Desktop EX110</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiinkse</name>
+ <description>Logitech iTouch Internet Navigator SE</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiinkseusb</name>
+ <description>Logitech iTouch Internet Navigator SE USB</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiultrax</name>
+ <description>Logitech Ultra-X</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logiultraxc</name>
+ <description>Logitech Ultra-X Cordless Media Desktop</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logidinovo</name>
+ <description>Logitech diNovo</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>logidinovoedge</name>
+ <description>Logitech diNovo Edge</description>
+ <vendor>Logitech</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>mx1998</name>
+ <description>Memorex MX1998</description>
+ <vendor>Memorex</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>mx2500</name>
+ <description>Memorex MX2500 EZ-Access</description>
+ <vendor>Memorex</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>mx2750</name>
+ <description>Memorex MX2750</description>
+ <vendor>Memorex</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoft4000</name>
+ <description>Microsoft Natural Ergonomic 4000</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoft7000</name>
+ <description>Microsoft Natural Wireless Ergonomic 7000</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftinet</name>
+ <description>Microsoft Internet</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftpro</name>
+ <description>Microsoft Natural Pro/Internet Pro</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftprousb</name>
+ <description>Microsoft Natural Pro USB/Internet Pro</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftprooem</name>
+ <description>Microsoft Natural Pro OEM</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>vsonku306</name>
+ <description>ViewSonic KU-306 Internet</description>
+ <vendor>ViewSonic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftprose</name>
+ <description>Microsoft Internet Pro (Swedish)</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftoffice</name>
+ <description>Microsoft Office Keyboard</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftmult</name>
+ <description>Microsoft Wireless Multimedia 1.0A</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftsurface</name>
+ <description>Microsoft Surface</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftelite</name>
+ <description>Microsoft Natural Elite</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>microsoftccurve2k</name>
+ <description>Microsoft Comfort Curve 2000</description>
+ <vendor>Microsoft</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>oretec</name>
+ <description>Ortek Multimedia/Internet MCK-800</description>
+ <vendor>Ortek</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>propeller</name>
+ <description>Propeller Voyager KTEZ-1000</description>
+ <vendor>KeyTronic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>qtronix</name>
+ <description>QTronix Scorpius 98N+</description>
+ <vendor>QTronix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>samsung4500</name>
+ <description>Samsung SDM 4500P</description>
+ <vendor>Samsung</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>samsung4510</name>
+ <description>Samsung SDM 4510P</description>
+ <vendor>Samsung</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sanwaskbkg3</name>
+ <description>Sanwa Supply SKB-KG3</description>
+ <vendor>Sanwa Supply Inc.</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sk1300</name>
+ <description>NEC SK-1300</description>
+ <vendor>NEC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sk2500</name>
+ <description>NEC SK-2500</description>
+ <vendor>NEC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sk6200</name>
+ <description>NEC SK-6200</description>
+ <vendor>NEC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sk7100</name>
+ <description>NEC SK-7100</description>
+ <vendor>NEC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sp_inet</name>
+ <description>Super Power Multimedia</description>
+ <vendor>Generic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sven</name>
+ <description>SVEN Ergonomic 2500</description>
+ <vendor>SVEN</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sven303</name>
+ <description>SVEN Slim 303</description>
+ <vendor>SVEN</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>symplon</name>
+ <description>Symplon PaceBook tablet</description>
+ <vendor>Symplon</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>toshiba_s3000</name>
+ <description>Toshiba Satellite S3000</description>
+ <vendor>Toshiba</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>trust</name>
+ <description>Trust Wireless Classic</description>
+ <vendor>Trust</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>trustda</name>
+ <description>Trust Direct Access</description>
+ <vendor>Trust</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>trust_slimline</name>
+ <description>Trust Slimline</description>
+ <vendor>Trust</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2020</name>
+ <description>TypeMatrix EZ-Reach 2020</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2030PS2</name>
+ <description>TypeMatrix EZ-Reach 2030 PS2</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2030USB</name>
+ <description>TypeMatrix EZ-Reach 2030 USB</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2030USB-102</name>
+ <description>TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>tm2030USB-106</name>
+ <description>TypeMatrix EZ-Reach 2030 USB (106:JP mode)</description>
+ <vendor>TypeMatrix</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>yahoo</name>
+ <description>Yahoo! Internet</description>
+ <vendor>Yahoo!</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macbook78</name>
+ <description>MacBook/MacBook Pro</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macbook79</name>
+ <description>MacBook/MacBook Pro (intl.)</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macintosh</name>
+ <description>Macintosh</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macintosh_old</name>
+ <description>Macintosh Old</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>macintosh_hhk</name>
+ <description>Happy Hacking for Mac</description>
+ <vendor>Fujitsu</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>acer_c300</name>
+ <description>Acer C300</description>
+ <vendor>Acer</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>acer_ferrari4k</name>
+ <description>Acer Ferrari 4000</description>
+ <vendor>Acer</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>acer_laptop</name>
+ <description>Acer laptop</description>
+ <vendor>Acer</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>asus_laptop</name>
+ <description>Asus laptop</description>
+ <vendor>Asus</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>apple</name>
+ <description>Apple</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>apple_laptop</name>
+ <description>Apple laptop</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>applealu_ansi</name>
+ <description>Apple Aluminium (ANSI)</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>applealu_iso</name>
+ <description>Apple Aluminium (ISO)</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>applealu_jis</name>
+ <description>Apple Aluminium (JIS)</description>
+ <vendor>Apple</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>silvercrest</name>
+ <description>Silvercrest Multimedia Wireless</description>
+ <vendor>Silvercrest</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>emachines</name>
+ <description>eMachines m6800 laptop</description>
+ <vendor>eMachines</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>benqx</name>
+ <description>BenQ X-Touch</description>
+ <vendor>BenQ</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>benqx730</name>
+ <description>BenQ X-Touch 730</description>
+ <vendor>BenQ</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>benqx800</name>
+ <description>BenQ X-Touch 800</description>
+ <vendor>BenQ</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>hhk</name>
+ <description>Happy Hacking</description>
+ <vendor>Fujitsu</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>classmate</name>
+ <description>Classmate PC</description>
+ <vendor>Intel</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>olpc</name>
+ <description>OLPC</description>
+ <vendor>OLPC</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type7_usb</name>
+ <description>Sun Type 7 USB</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type7_euro_usb</name>
+ <description>Sun Type 7 USB (European)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type7_unix_usb</name>
+ <description>Sun Type 7 USB (Unix)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type7_jp_usb</name>
+ <description>Sun Type 7 USB (Japanese)/Japanese 106-key</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_usb</name>
+ <description>Sun Type 6/7 USB</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_euro_usb</name>
+ <description>Sun Type 6/7 USB (European)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_unix_usb</name>
+ <description>Sun Type 6 USB (Unix)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_jp_usb</name>
+ <description>Sun Type 6 USB (Japanese)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>sun_type6_jp</name>
+ <description>Sun Type 6 (Japanese)</description>
+ <vendor>Sun Microsystems</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>targa_v811</name>
+ <description>Targa Visionary 811</description>
+ <vendor>Targa</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>unitekkb1925</name>
+ <description>Unitek KB-1925</description>
+ <vendor>Unitek Group</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>compalfl90</name>
+ <description>FL90</description>
+ <vendor>Compal Electronics</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>creativedw7000</name>
+ <description>Creative Desktop Wireless 7000</description>
+ <vendor>Creative</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>teck227</name>
+ <description>Truly Ergonomic 227</description>
+ <vendor>Truly Ergonomic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>teck229</name>
+ <description>Truly Ergonomic 229</description>
+ <vendor>Truly Ergonomic</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>apex300</name>
+ <description>SteelSeries Apex 300 (Apex RAW)</description>
+ <vendor>SteelSeries</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>chromebook</name>
+ <description>Chromebook</description>
+ <vendor>Google</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>teck227</name>
+ <description>Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys)</description>
+ <vendor>Megawin Technology</vendor>
+ </configItem>
+ </model>
+ <model>
+ <configItem>
+ <name>teck229</name>
+ <description>Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key)</description>
+ <vendor>Megawin Technology</vendor>
+ </configItem>
+ </model>
+ </modelList>
+ <layoutList>
+ <layout>
+ <configItem>
+ <name>us</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>chr</name>
+ <!-- Keyboard indicator for Cherokee layouts -->
+ <shortDescription>chr</shortDescription>
+ <description>Cherokee</description>
+ <languageList>
+ <iso639Id>chr</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>haw</name>
+ <shortDescription>haw</shortDescription>
+ <description>Hawaiian</description>
+ <languageList>
+ <iso639Id>haw</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>euro</name>
+ <description>English (US, euro on 5)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>English (US, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alt-intl</name>
+ <description>English (US, alt. intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>English (Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>English (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-intl</name>
+ <description>English (Dvorak, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-alt-intl</name>
+ <description>English (Dvorak, alt. intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-l</name>
+ <description>English (Dvorak, left-handed)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-r</name>
+ <description>English (Dvorak, right-handed)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-classic</name>
+ <description>English (classic Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvp</name>
+ <description>English (programmer Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rus</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (US, phonetic)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>English (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>altgr-intl</name>
+ <description>English (intl., with AltGr dead keys)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>fra</iso639Id>
+ <iso639Id>deu</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>olpc2</name>
+ <description>English (the divide/multiply toggle the layout)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hbs</name>
+ <description>Serbo-Croatian (US)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>bos</iso639Id>
+ <iso639Id>hbs</iso639Id>
+ <iso639Id>hrv</iso639Id>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>norman</name>
+ <description>English (Norman)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>workman</name>
+ <description>English (Workman)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>workman-intl</name>
+ <description>English (Workman, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>af</name>
+ <!-- Keyboard indicator for Afghani layouts -->
+ <shortDescription>fa</shortDescription>
+ <description>Afghani</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ps</name>
+ <!-- Keyboard indicator for Pashto layouts -->
+ <shortDescription>ps</shortDescription>
+ <description>Pashto</description>
+ <languageList>
+ <iso639Id>pus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>uz</name>
+ <!-- Keyboard indicator for Uzbek layouts -->
+ <shortDescription>uz</shortDescription>
+ <description>Uzbek (Afghanistan)</description>
+ <languageList>
+ <iso639Id>uzb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>olpc-ps</name>
+ <!-- Keyboard indicator for Pashto layouts -->
+ <shortDescription>ps</shortDescription>
+ <description>Pashto (Afghanistan, OLPC)</description>
+ <languageList>
+ <iso639Id>pus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fa-olpc</name>
+ <!-- Keyboard indicator for Persian layouts -->
+ <shortDescription>fa</shortDescription>
+ <description>Persian (Afghanistan, Dari OLPC)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>uz-olpc</name>
+ <!-- Keyboard indicator for Uzbek layouts -->
+ <shortDescription>uz</shortDescription>
+ <description>Uzbek (Afghanistan, OLPC)</description>
+ <languageList>
+ <iso639Id>uzb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ara</name>
+ <!-- Keyboard indicator for Arabic layouts -->
+ <shortDescription>ar</shortDescription>
+ <description>Arabic</description>
+ <countryList>
+ <iso3166Id>AE</iso3166Id>
+ <iso3166Id>BH</iso3166Id>
+ <iso3166Id>DZ</iso3166Id>
+ <iso3166Id>EG</iso3166Id>
+ <iso3166Id>EH</iso3166Id>
+ <iso3166Id>JO</iso3166Id>
+ <iso3166Id>KW</iso3166Id>
+ <iso3166Id>LB</iso3166Id>
+ <iso3166Id>LY</iso3166Id>
+ <iso3166Id>MA</iso3166Id>
+ <iso3166Id>MR</iso3166Id>
+ <iso3166Id>OM</iso3166Id>
+ <iso3166Id>PS</iso3166Id>
+ <iso3166Id>QA</iso3166Id>
+ <iso3166Id>SA</iso3166Id>
+ <iso3166Id>SD</iso3166Id>
+ <iso3166Id>SY</iso3166Id>
+ <iso3166Id>TN</iso3166Id>
+ <iso3166Id>YE</iso3166Id>
+ </countryList>
+ <languageList>
+ <iso639Id>ara</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>azerty</name>
+ <description>Arabic (AZERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>azerty_digits</name>
+ <description>Arabic (AZERTY, Eastern Arabic numerals)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>digits</name>
+ <description>Arabic (Eastern Arabic numerals)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Arabic (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty_digits</name>
+ <description>Arabic (QWERTY, Eastern Arabic numerals)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>buckwalter</name>
+ <description>Arabic (Buckwalter)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>olpc</name>
+ <description>Arabic (OLPC)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Arabic (Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>al</name>
+ <!-- Keyboard indicator for Albanian layouts -->
+ <shortDescription>sq</shortDescription>
+ <description>Albanian</description>
+ <languageList>
+ <iso639Id>sqi</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>plisi</name>
+ <description>Albanian (Plisi)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>veqilharxhi</name>
+ <description>Albanian (Veqilharxhi)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>am</name>
+ <!-- Keyboard indicator for Armenian layouts -->
+ <shortDescription>hy</shortDescription>
+ <description>Armenian</description>
+ <languageList>
+ <iso639Id>hye</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Armenian (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic-alt</name>
+ <description>Armenian (alt. phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eastern</name>
+ <description>Armenian (eastern)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>western</name>
+ <description>Armenian (western)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eastern-alt</name>
+ <description>Armenian (alt. eastern)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>at</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Austria)</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>German (Austria, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>German (Austria, Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>German (Austria, Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>au</name>
+ <!-- Keyboard indicator for Australian layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Australian)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>az</name>
+ <!-- Keyboard indicator for Azerbaijani layouts -->
+ <shortDescription>az</shortDescription>
+ <description>Azerbaijani</description>
+ <languageList>
+ <iso639Id>aze</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>cyrillic</name>
+ <description>Azerbaijani (Cyrillic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>by</name>
+ <!-- Keyboard indicator for Belarusian layouts -->
+ <shortDescription>by</shortDescription>
+ <description>Belarusian</description>
+ <languageList>
+ <iso639Id>bel</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Belarusian (legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin</name>
+ <description>Belarusian (Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ru</name>
+ <description>Russian (Belarus)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>Belarusian (intl.)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>be</name>
+ <!-- Keyboard indicator for Belgian layouts -->
+ <shortDescription>be</shortDescription>
+ <description>Belgian</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ <iso639Id>nld</iso639Id>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>oss</name>
+ <description>Belgian (alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_latin9</name>
+ <description>Belgian (Latin-9 only, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_sundeadkeys</name>
+ <description>Belgian (Sun dead keys, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>iso-alternate</name>
+ <description>Belgian (ISO, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Belgian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Belgian (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>wang</name>
+ <description>Belgian (Wang 724 AZERTY)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>bd</name>
+ <!-- Keyboard indicator for Bangla layouts -->
+ <shortDescription>bn</shortDescription>
+ <description>Bangla</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>probhat</name>
+ <description>Bangla (Probhat)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>in</name>
+ <!-- Keyboard indicator for Indian layouts -->
+ <shortDescription>in</shortDescription>
+ <description>Indian</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ben</name>
+ <!-- Keyboard indicator for Bangla layouts -->
+ <shortDescription>bn</shortDescription>
+ <description>Bangla (India)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_probhat</name>
+ <!-- Keyboard indicator for Bangla layouts -->
+ <shortDescription>bn</shortDescription>
+ <description>Bangla (India, Probhat)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_baishakhi</name>
+ <description>Bangla (India, Baishakhi)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_bornona</name>
+ <description>Bangla (India, Bornona)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_gitanjali</name>
+ <description>Bangla (India, Gitanjali)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ben_inscript</name>
+ <description>Bangla (India, Baishakhi Inscript)</description>
+ <languageList>
+ <iso639Id>ben</iso639Id>
+ <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eeyek</name>
+ <description>Manipuri (Eeyek)</description>
+ <languageList>
+ <iso639Id>mni</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>guj</name>
+ <!-- Keyboard indicator for Gujarati layouts -->
+ <shortDescription>gu</shortDescription>
+ <description>Gujarati</description>
+ <languageList>
+ <iso639Id>guj</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>guru</name>
+ <!-- Keyboard indicator for Punjabi layouts -->
+ <shortDescription>pa</shortDescription>
+ <description>Punjabi (Gurmukhi)</description>
+ <languageList>
+ <iso639Id>pan</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>jhelum</name>
+ <!-- Keyboard indicator for Punjabi layouts -->
+ <shortDescription>pa</shortDescription>
+ <description>Punjabi (Gurmukhi Jhelum)</description>
+ <languageList>
+ <iso639Id>pan</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kan</name>
+ <!-- Keyboard indicator for Kannada layouts -->
+ <shortDescription>kn</shortDescription>
+ <description>Kannada</description>
+ <languageList>
+ <iso639Id>kan</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kan-kagapa</name>
+ <!-- Keyboard indicator for Kannada layouts -->
+ <shortDescription>kn</shortDescription>
+ <description>Kannada (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>kan</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mal</name>
+ <!-- Keyboard indicator for Malayalam layouts -->
+ <shortDescription>ml</shortDescription>
+ <description>Malayalam</description>
+ <languageList>
+ <iso639Id>mal</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mal_lalitha</name>
+ <!-- Keyboard indicator for Malayalam layouts -->
+ <shortDescription>ml</shortDescription>
+ <description>Malayalam (Lalitha)</description>
+ <languageList>
+ <iso639Id>mal</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mal_enhanced</name>
+ <!-- Keyboard indicator for Malayalam layouts -->
+ <shortDescription>ml</shortDescription>
+ <description>Malayalam (enhanced Inscript, with rupee)</description>
+ <languageList>
+ <iso639Id>mal</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ori</name>
+ <!-- Keyboard indicator for Oriya layouts -->
+ <shortDescription>or</shortDescription>
+ <description>Oriya</description>
+ <languageList>
+ <iso639Id>ori</iso639Id>
+ <!-- sat-Orya: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>olck</name>
+ <!-- Keyboard indicator for Ol Chiki layouts -->
+ <shortDescription>sat</shortDescription>
+ <description>Ol Chiki</description>
+ <languageList>
+ <!-- sat-Olck: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_tamilnet</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (TamilNet '99)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_tamilnet_with_tam_nums</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (TamilNet '99 with Tamil numerals)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_tamilnet_TAB</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (TamilNet '99, TAB encoding)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_tamilnet_TSCII</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (TamilNet '99, TSCII encoding)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (Inscript)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tel</name>
+ <!-- Keyboard indicator for Telugu layouts -->
+ <shortDescription>te</shortDescription>
+ <description>Telugu</description>
+ <languageList>
+ <iso639Id>tel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tel-kagapa</name>
+ <!-- Keyboard indicator for Telugu layouts -->
+ <shortDescription>te</shortDescription>
+ <description>Telugu (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>tel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tel-sarala</name>
+ <!-- Keyboard indicator for Telugu layouts -->
+ <shortDescription>te</shortDescription>
+ <description>Telugu (Sarala)</description>
+ <languageList>
+ <iso639Id>tel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tel-kagapa</name>
+ <!-- Keyboard indicator for Telugu layouts -->
+ <shortDescription>te</shortDescription>
+ <description>Telugu (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>tel</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>urd-phonetic</name>
+ <!-- Keyboard indicator for Urdu layouts -->
+ <shortDescription>ur</shortDescription>
+ <description>Urdu (phonetic)</description>
+ <languageList>
+ <iso639Id>urd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>urd-phonetic3</name>
+ <!-- Keyboard indicator for Urdu layouts -->
+ <shortDescription>ur</shortDescription>
+ <description>Urdu (alt. phonetic)</description>
+ <languageList>
+ <iso639Id>urd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>urd-winkeys</name>
+ <!-- Keyboard indicator for Urdu layouts -->
+ <shortDescription>ur</shortDescription>
+ <description>Urdu (Windows)</description>
+ <languageList>
+ <iso639Id>urd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bolnagri</name>
+ <!-- Keyboard indicator for Hindi layouts -->
+ <shortDescription>hi</shortDescription>
+ <description>Hindi (Bolnagri)</description>
+ <languageList>
+ <iso639Id>hin</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hin-wx</name>
+ <!-- Keyboard indicator for Hindi layouts -->
+ <shortDescription>hi</shortDescription>
+ <description>Hindi (Wx)</description>
+ <languageList>
+ <iso639Id>hin</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hin-kagapa</name>
+ <!-- Keyboard indicator for Hindi layouts -->
+ <shortDescription>hi</shortDescription>
+ <description>Hindi (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>hin</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>san-kagapa</name>
+ <!-- Keyboard indicator for Sanskrit layouts -->
+ <shortDescription>sa</shortDescription>
+ <description>Sanskrit (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>san</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mar-kagapa</name>
+ <!-- Keyboard indicator for Marathi layouts -->
+ <shortDescription>mr</shortDescription>
+ <description>Marathi (KaGaPa, phonetic)</description>
+ <languageList>
+ <iso639Id>mar</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eng</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (India, with rupee)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>iipa</name>
+ <shortDescription>iipa</shortDescription>
+ <description>Indic IPA (IIPA)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+
+ <variant>
+ <configItem>
+ <name>marathi</name>
+ <shortDescription>ins</shortDescription>
+ <description>मराठी इन्स्क्रिप्ट</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ba</name>
+ <!-- Keyboard indicator for Bosnian layouts -->
+ <shortDescription>bs</shortDescription>
+ <description>Bosnian</description>
+ <languageList>
+ <iso639Id>bos</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>alternatequotes</name>
+ <description>Bosnian (with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>unicode</name>
+ <description>Bosnian (with Bosnian digraphs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>unicodeus</name>
+ <description>Bosnian (US, with Bosnian digraphs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Bosnian (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>br</name>
+ <!-- Keyboard indicator for Portuguese layouts -->
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese (Brazil)</description>
+ <languageList>
+ <iso639Id>por</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Portuguese (Brazil, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Portuguese (Brazil, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo</name>
+ <description>Portuguese (Brazil, Nativo)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo-us</name>
+ <description>Portuguese (Brazil, Nativo for US keyboards)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo-epo</name>
+ <description>Esperanto (Brazil, Nativo)</description>
+ <languageList>
+ <iso639Id>epo</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>thinkpad</name>
+ <description>Portuguese (Brazil, IBM/Lenovo ThinkPad)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>bg</name>
+ <!-- Keyboard indicator for Bulgarian layouts -->
+ <shortDescription>bg</shortDescription>
+ <description>Bulgarian</description>
+ <languageList>
+ <iso639Id>bul</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Bulgarian (traditional phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bas_phonetic</name>
+ <description>Bulgarian (new phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>dz</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (azerty layout, no dead keys)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>azerty-deadkeys</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (azerty layout, with dead keys)</description>
+ <languageList>
+ <iso639Id>kab</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty-gb-deadkeys</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (qwerty-gb layout, with dead keys)</description>
+ <languageList>
+ <iso639Id>kab</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty-us-deadkeys</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (qwerty-us layout, with dead keys)</description>
+ <languageList>
+ <iso639Id>kab</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ber</name>
+ <shortDescription>kab</shortDescription>
+ <description>Kabylian (Algeria, Tifinagh)</description>
+ <languageList>
+ <iso639Id>kab</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ar</name>
+ <shortDescription>ar</shortDescription>
+ <description>Arabic (Algeria)</description>
+ <languageList>
+ <iso639Id>ara</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ma</name>
+ <!-- Keyboard indicator for Arabic layouts -->
+ <shortDescription>ar</shortDescription>
+ <description>Arabic (Morocco)</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>french</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Morocco)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-alt</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh alt.)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-alt-phonetic</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh phonetic, alt.)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-extended</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh extended)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-phonetic</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh phonetic)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tifinagh-extended-phonetic</name>
+ <!-- Keyboard indicator for Berber layouts -->
+ <shortDescription>ber</shortDescription>
+ <description>Berber (Morocco, Tifinagh extended phonetic)</description>
+ <languageList>
+ <iso639Id>ber</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>cm</name>
+ <!-- Keyboard indicator for Cameroon layouts -->
+ <shortDescription>cm</shortDescription>
+ <description>English (Cameroon)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>french</name>
+ <description>French (Cameroon)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Cameroon Multilingual (QWERTY, intl.)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>bas</iso639Id>
+ <iso639Id>nmg</iso639Id>
+ <iso639Id>fub</iso639Id>
+ <iso639Id>ewo</iso639Id>
+ <iso639Id>xmd</iso639Id>
+ <iso639Id>mfh</iso639Id>
+ <iso639Id>bkm</iso639Id>
+ <iso639Id>ozm</iso639Id>
+ <iso639Id>lns</iso639Id>
+ <iso639Id>sox</iso639Id>
+ <iso639Id>pny</iso639Id>
+ <iso639Id>wes</iso639Id>
+ <iso639Id>lem</iso639Id>
+ <iso639Id>nyj</iso639Id>
+ <iso639Id>mfk</iso639Id>
+ <iso639Id>mcp</iso639Id>
+ <iso639Id>ass</iso639Id>
+ <iso639Id>xed</iso639Id>
+ <iso639Id>dua</iso639Id>
+ <iso639Id>anv</iso639Id>
+ <iso639Id>bum</iso639Id>
+ <iso639Id>btb</iso639Id>
+ <iso639Id>bfd</iso639Id>
+ <iso639Id>azo</iso639Id>
+ <iso639Id>ken</iso639Id>
+ <iso639Id>yam</iso639Id>
+ <iso639Id>yat</iso639Id>
+ <iso639Id>yas</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>azerty</name>
+ <description>Cameroon (AZERTY, intl.)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ <iso639Id>bas</iso639Id>
+ <iso639Id>nmg</iso639Id>
+ <iso639Id>fub</iso639Id>
+ <iso639Id>ewo</iso639Id>
+ <iso639Id>xmd</iso639Id>
+ <iso639Id>mfh</iso639Id>
+ <iso639Id>bkm</iso639Id>
+ <iso639Id>ozm</iso639Id>
+ <iso639Id>lns</iso639Id>
+ <iso639Id>sox</iso639Id>
+ <iso639Id>pny</iso639Id>
+ <iso639Id>wes</iso639Id>
+ <iso639Id>lem</iso639Id>
+ <iso639Id>nyj</iso639Id>
+ <iso639Id>mfk</iso639Id>
+ <iso639Id>mcp</iso639Id>
+ <iso639Id>ass</iso639Id>
+ <iso639Id>xed</iso639Id>
+ <iso639Id>dua</iso639Id>
+ <iso639Id>anv</iso639Id>
+ <iso639Id>bum</iso639Id>
+ <iso639Id>btb</iso639Id>
+ <iso639Id>bfd</iso639Id>
+ <iso639Id>azo</iso639Id>
+ <iso639Id>ken</iso639Id>
+ <iso639Id>yam</iso639Id>
+ <iso639Id>yat</iso639Id>
+ <iso639Id>yas</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Cameroon (Dvorak, intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mmuock</name>
+ <description>Mmuock</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mm</name>
+ <!-- Keyboard indicator for Burmese layouts -->
+ <shortDescription>my</shortDescription>
+ <description>Burmese</description>
+ <languageList>
+ <iso639Id>mya</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>zawgyi</name>
+ <shortDescription>zg</shortDescription>
+ <description>Burmese Zawgyi</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ca</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Canada)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>fr-dvorak</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Canada, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr-legacy</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Canada, legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>multix</name>
+ <description>Canadian (intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>multi</name>
+ <description>Canadian (intl., 1st part)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>multi-2gr</name>
+ <description>Canadian (intl., 2nd part)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ike</name>
+ <!-- Keyboard indicator for Inuktikut layouts -->
+ <shortDescription>ike</shortDescription>
+ <description>Inuktitut</description>
+ <languageList>
+ <iso639Id>iku</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>eng</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Canada)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>cd</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Democratic Republic of the Congo)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>cn</name>
+ <!-- Keyboard indicator for Chinese layouts -->
+ <shortDescription>zh</shortDescription>
+ <description>Chinese</description>
+ <languageList>
+ <iso639Id>zho</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+
+ <variant>
+ <configItem>
+ <name>mon_trad</name>
+ <description>Mongolian (Bichig)</description>
+ <languageList>
+ <iso639Id>mvf</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_trad_todo</name>
+ <description>Mongolian (Todo)</description>
+ <languageList>
+ <iso639Id>mvf</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_trad_xibe</name>
+ <description>Mongolian (Xibe)</description>
+ <languageList>
+ <iso639Id>sjo</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_trad_manchu</name>
+ <description>Mongolian (Manchu)</description>
+ <languageList>
+ <iso639Id>mnc</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_trad_galik</name>
+ <description>Mongolian (Galik)</description>
+ <languageList>
+ <iso639Id>mvf</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_todo_galik</name>
+ <description>Mongolian (Todo Galik)</description>
+ <languageList>
+ <iso639Id>mvf</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mon_manchu_galik</name>
+ <description>Mongolian (Manchu Galik)</description>
+ <languageList>
+ <iso639Id>mnc</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+
+ <variant>
+ <configItem>
+ <name>tib</name>
+ <description>Tibetan</description>
+ <languageList>
+ <iso639Id>tib</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tib_asciinum</name>
+ <description>Tibetan (with ASCII numerals)</description>
+ <languageList>
+ <iso639Id>tib</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ug</name>
+ <shortDescription>ug</shortDescription>
+ <description>Uyghur</description>
+ <languageList>
+ <iso639Id>uig</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>altgr-pinyin</name>
+ <description>Hanyu Pinyin (with AltGr dead keys)</description>
+ <languageList>
+ <iso639Id>zho</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>hr</name>
+ <!-- Keyboard indicator for Croatian layouts -->
+ <shortDescription>hr</shortDescription>
+ <description>Croatian</description>
+ <languageList>
+ <iso639Id>hrv</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>alternatequotes</name>
+ <description>Croatian (with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>unicode</name>
+ <description>Croatian (with Croatian digraphs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>unicodeus</name>
+ <description>Croatian (US, with Croatian digraphs)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Croatian (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>cz</name>
+ <!-- Keyboard indicator for Chech layouts -->
+ <shortDescription>cs</shortDescription>
+ <description>Czech</description>
+ <languageList>
+ <iso639Id>ces</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>bksl</name>
+ <description>Czech (with &lt;\|&gt; key)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Czech (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty_bksl</name>
+ <description>Czech (QWERTY, extended backslash)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty-mac</name>
+ <description>Czech (QWERTY, Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ucw</name>
+ <description>Czech (UCW, only accented letters)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-ucw</name>
+ <description>Czech (US, Dvorak, UCW support)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rus</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Czech, phonetic)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>dk</name>
+ <!-- Keyboard indicator for Danish layouts -->
+ <shortDescription>da</shortDescription>
+ <description>Danish</description>
+ <languageList>
+ <iso639Id>dan</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Danish (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Danish (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Danish (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_nodeadkeys</name>
+ <description>Danish (Macintosh, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Danish (Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>nl</name>
+ <!-- Keyboard indicator for Dutch layouts -->
+ <shortDescription>nl</shortDescription>
+ <description>Dutch</description>
+ <languageList>
+ <iso639Id>nld</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Dutch (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Dutch (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>std</name>
+ <description>Dutch (standard)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>bt</name>
+ <!-- Keyboard indicator for Dzongkha layouts -->
+ <shortDescription>dz</shortDescription>
+ <description>Dzongkha</description>
+ <languageList>
+ <iso639Id>dzo</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ee</name>
+ <!-- Keyboard indicator for Estonian layouts -->
+ <shortDescription>et</shortDescription>
+ <description>Estonian</description>
+ <languageList>
+ <iso639Id>est</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Estonian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Estonian (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Estonian (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ir</name>
+ <!-- Keyboard indicator for Persian layouts -->
+ <shortDescription>fa</shortDescription>
+ <description>Persian</description>
+ <languageList>
+ <iso639Id>fas</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>pes_keypad</name>
+ <description>Persian (with Persian keypad)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iran, Latin Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_f</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iran, F)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_alt</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iran, Latin Alt-Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_ara</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iran, Arabic-Latin)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>iq</name>
+ <!-- Keyboard indicator for Iraqi layouts -->
+ <shortDescription>ar</shortDescription>
+ <description>Iraqi</description>
+ <languageList>
+ <iso639Id>ara</iso639Id>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ku</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iraq, Latin Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_f</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iraq, F)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_alt</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iraq, Latin Alt-Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_ara</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Iraq, Arabic-Latin)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>fo</name>
+ <!-- Keyboard indicator for Faroese layouts -->
+ <shortDescription>fo</shortDescription>
+ <description>Faroese</description>
+ <languageList>
+ <iso639Id>fao</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Faroese (no dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>fi</name>
+ <!-- Keyboard indicator for Finnish layouts -->
+ <shortDescription>fi</shortDescription>
+ <description>Finnish</description>
+ <languageList>
+ <iso639Id>fin</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Finnish (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>classic</name>
+ <description>Finnish (classic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Finnish (classic, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>smi</name>
+ <description>Northern Saami (Finland)</description>
+ <languageList>
+ <iso639Id>sme</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Finnish (Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>fr</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>French (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>French (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss</name>
+ <description>French (alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_latin9</name>
+ <description>French (alt., Latin-9 only)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_nodeadkeys</name>
+ <description>French (alt., no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oss_sundeadkeys</name>
+ <description>French (alt., Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin9</name>
+ <description>French (legacy, alt.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin9_nodeadkeys</name>
+ <description>French (legacy, alt., no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin9_sundeadkeys</name>
+ <description>French (legacy, alt., Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bepo</name>
+ <description>French (BEPO)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bepo_latin9</name>
+ <description>French (BEPO, Latin-9 only)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bepo_afnor</name>
+ <description>French (BEPO, AFNOR)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>French (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>French (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>azerty</name>
+ <description>French (AZERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>afnor</name>
+ <description>French (AZERTY, AFNOR)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bre</name>
+ <description>French (Breton)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>oci</name>
+ <description>Occitan</description>
+ <languageList>
+ <iso639Id>oci</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>geo</name>
+ <description>Georgian (France, AZERTY Tskapo)</description>
+ <languageList>
+ <iso639Id>kat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>French (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>gh</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Ghana)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>generic</name>
+ <description>English (Ghana, multilingual)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>akan</name>
+ <!-- Keyboard indicator for Akan layouts -->
+ <shortDescription>ak</shortDescription>
+ <description>Akan</description>
+ <languageList>
+ <iso639Id>aka</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ewe</name>
+ <!-- Keyboard indicator for Ewe layouts -->
+ <shortDescription>ee</shortDescription>
+ <description>Ewe</description>
+ <languageList>
+ <iso639Id>ewe</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fula</name>
+ <!-- Keyboard indicator for Fula layouts -->
+ <shortDescription>ff</shortDescription>
+ <description>Fula</description>
+ <languageList>
+ <iso639Id>ful</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ga</name>
+ <!-- Keyboard indicator for Ga layouts -->
+ <shortDescription>gaa</shortDescription>
+ <description>Ga</description>
+ <languageList>
+ <iso639Id>gaa</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hausa</name>
+ <!-- Keyboard indicator for Hausa layouts -->
+ <shortDescription>ha</shortDescription>
+ <description>Hausa (Ghana)</description>
+ <languageList>
+ <iso639Id>hau</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>avn</name>
+ <!-- Keyboard indicator for Avatime layouts -->
+ <shortDescription>avn</shortDescription>
+ <description>Avatime</description>
+ <languageList>
+ <iso639Id>avn</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>gillbt</name>
+ <description>English (Ghana, GILLBT)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>gn</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Guinea)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ge</name>
+ <!-- Keyboard indicator for Georgian layouts -->
+ <shortDescription>ka</shortDescription>
+ <description>Georgian</description>
+ <languageList>
+ <iso639Id>kat</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ergonomic</name>
+ <description>Georgian (ergonomic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mess</name>
+ <description>Georgian (MESS)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ru</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Georgia)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>os</name>
+ <description>Ossetian (Georgia)</description>
+ <languageList>
+ <iso639Id>oss</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>de</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>deadacute</name>
+ <description>German (dead acute)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>deadgraveacute</name>
+ <description>German (dead grave acute)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>German (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>T3</name>
+ <description>German (T3)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ro</name>
+ <description>Romanian (Germany)</description>
+ <languageList>
+ <iso639Id>ron</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ro_nodeadkeys</name>
+ <description>Romanian (Germany, no dead keys)</description>
+ <languageList>
+ <iso639Id>ron</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>German (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>German (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>neo</name>
+ <description>German (Neo 2)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>German (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_nodeadkeys</name>
+ <description>German (Macintosh, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dsb</name>
+ <description>Lower Sorbian</description>
+ <languageList>
+ <iso639Id>dsb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dsb_qwertz</name>
+ <description>Lower Sorbian (QWERTZ)</description>
+ <languageList>
+ <iso639Id>dsb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>German (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tr</name>
+ <description>Turkish (Germany)</description>
+ <languageList>
+ <iso639Id>tr</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ru</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Germany, phonetic)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>deadtilde</name>
+ <description>German (dead tilde)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>gr</name>
+ <!-- Keyboard indicator for Greek layouts -->
+ <shortDescription>gr</shortDescription>
+ <description>Greek</description>
+ <languageList>
+ <iso639Id>ell</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>simple</name>
+ <description>Greek (simple)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>extended</name>
+ <description>Greek (extended)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Greek (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>polytonic</name>
+ <description>Greek (polytonic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>hu</name>
+ <!-- Keyboard indicator for Hungarian layouts -->
+ <shortDescription>hu</shortDescription>
+ <description>Hungarian</description>
+ <languageList>
+ <iso639Id>hun</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>standard</name>
+ <description>Hungarian (standard)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Hungarian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Hungarian (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwertz_comma_dead</name>
+ <description>Hungarian (QWERTZ, 101-key, comma, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwertz_comma_nodead</name>
+ <description>Hungarian (QWERTZ, 101-key, comma, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwertz_dot_dead</name>
+ <description>Hungarian (QWERTZ, 101-key, dot, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwertz_dot_nodead</name>
+ <description>Hungarian (QWERTZ, 101-key, dot, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwerty_comma_dead</name>
+ <description>Hungarian (QWERTY, 101-key, comma, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwerty_comma_nodead</name>
+ <description>Hungarian (QWERTY, 101-key, comma, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwerty_dot_dead</name>
+ <description>Hungarian (QWERTY, 101-key, dot, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>101_qwerty_dot_nodead</name>
+ <description>Hungarian (QWERTY, 101-key, dot, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwertz_comma_dead</name>
+ <description>Hungarian (QWERTZ, 102-key, comma, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwertz_comma_nodead</name>
+ <description>Hungarian (QWERTZ, 102-key, comma, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwertz_dot_dead</name>
+ <description>Hungarian (QWERTZ, 102-key, dot, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwertz_dot_nodead</name>
+ <description>Hungarian (QWERTZ, 102-key, dot, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwerty_comma_dead</name>
+ <description>Hungarian (QWERTY, 102-key, comma, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwerty_comma_nodead</name>
+ <description>Hungarian (QWERTY, 102-key, comma, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwerty_dot_dead</name>
+ <description>Hungarian (QWERTY, 102-key, dot, dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>102_qwerty_dot_nodead</name>
+ <description>Hungarian (QWERTY, 102-key, dot, no dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>is</name>
+ <!-- Keyboard indicator for Icelandic layouts -->
+ <shortDescription>is</shortDescription>
+ <description>Icelandic</description>
+ <languageList>
+ <iso639Id>isl</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>Sundeadkeys</name>
+ <description>Icelandic (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Icelandic (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_legacy</name>
+ <description>Icelandic (Macintosh, legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Icelandic (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Icelandic (Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>il</name>
+ <!-- Keyboard indicator for Hebrew layouts -->
+ <shortDescription>he</shortDescription>
+ <description>Hebrew</description>
+ <languageList>
+ <iso639Id>heb</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>lyx</name>
+ <description>Hebrew (lyx)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Hebrew (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>biblical</name>
+ <description>Hebrew (Biblical, Tiro)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>it</name>
+ <!-- Keyboard indicator for Italian layouts -->
+ <shortDescription>it</shortDescription>
+ <description>Italian</description>
+ <languageList>
+ <iso639Id>ita</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Italian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Italian (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Italian (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Italian (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>geo</name>
+ <description>Georgian (Italy)</description>
+ <languageList>
+ <iso639Id>kat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ibm</name>
+ <description>Italian (IBM 142)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>Italian (intl., with dead keys)</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ <iso639Id>fra</iso639Id>
+ <iso639Id>ita</iso639Id>
+ <iso639Id>slk</iso639Id>
+ <iso639Id>srd</iso639Id>
+ <iso639Id>nap</iso639Id>
+ <iso639Id>scn</iso639Id>
+ <iso639Id>fur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>scn</name>
+ <description>Sicilian</description>
+ <languageList>
+ <iso639Id>ita</iso639Id>
+ <iso639Id>scn</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fur</name>
+ <description>Friulian (Italy)</description>
+ <languageList>
+ <iso639Id>fur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>jp</name>
+ <!-- Keyboard indicator for Japaneses -->
+ <shortDescription>ja</shortDescription>
+ <description>Japanese</description>
+ <languageList>
+ <iso639Id>jpn</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>kana</name>
+ <description>Japanese (Kana)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kana86</name>
+ <description>Japanese (Kana 86)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>OADG109A</name>
+ <description>Japanese (OADG 109A)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Japanese (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Japanese (Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>kg</name>
+ <!-- Keyboard indicator for Kyrgyz layouts -->
+ <shortDescription>ki</shortDescription>
+ <description>Kyrgyz</description>
+ <languageList>
+ <iso639Id>kir</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Kyrgyz (phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>kh</name>
+ <!-- Keyboard indicator for Khmer layouts -->
+ <shortDescription>km</shortDescription>
+ <description>Khmer (Cambodia)</description>
+ <languageList>
+ <iso639Id>khm</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>kz</name>
+ <!-- Keyboard indicator for Kazakh layouts -->
+ <shortDescription>kk</shortDescription>
+ <description>Kazakh</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>ruskaz</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Kazakhstan, with Kazakh)</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kazrus</name>
+ <description>Kazakh (with Russian)</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ext</name>
+ <description>Kazakh (extended)</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin</name>
+ <description>Kazakh (Latin)</description>
+ <languageList>
+ <iso639Id>kaz</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>la</name>
+ <!-- Keyboard indicator for Lao layouts -->
+ <shortDescription>lo</shortDescription>
+ <description>Lao</description>
+ <languageList>
+ <iso639Id>lao</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>stea</name>
+ <description>Lao (STEA)</description>
+ <languageList>
+ <iso639Id>lao</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>latam</name>
+ <!-- Keyboard indicator for Spanish layouts -->
+ <shortDescription>es</shortDescription>
+ <description>Spanish (Latin American)</description>
+ <countryList>
+ <iso3166Id>AR</iso3166Id>
+ <iso3166Id>BO</iso3166Id>
+ <iso3166Id>CL</iso3166Id>
+ <iso3166Id>CO</iso3166Id>
+ <iso3166Id>CR</iso3166Id>
+ <iso3166Id>CU</iso3166Id>
+ <iso3166Id>DO</iso3166Id>
+ <iso3166Id>EC</iso3166Id>
+ <iso3166Id>GT</iso3166Id>
+ <iso3166Id>HN</iso3166Id>
+ <iso3166Id>HT</iso3166Id>
+ <iso3166Id>MX</iso3166Id>
+ <iso3166Id>NI</iso3166Id>
+ <iso3166Id>PA</iso3166Id>
+ <iso3166Id>PE</iso3166Id>
+ <iso3166Id>PR</iso3166Id>
+ <iso3166Id>PY</iso3166Id>
+ <iso3166Id>SV</iso3166Id>
+ <iso3166Id>US</iso3166Id>
+ <iso3166Id>UY</iso3166Id>
+ <iso3166Id>VE</iso3166Id>
+ </countryList>
+ <languageList>
+ <iso639Id>spa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Spanish (Latin American, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>deadtilde</name>
+ <description>Spanish (Latin American, dead tilde)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Spanish (Latin American, Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Spanish (Latin American, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>Spanish (Latin American, Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak-gaming</name>
+ <description>Spanish (Latin American, Colemak for gaming)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>lt</name>
+ <!-- Keyboard indicator for Lithuanian layouts -->
+ <shortDescription>lt</shortDescription>
+ <description>Lithuanian</description>
+ <languageList>
+ <iso639Id>lit</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>std</name>
+ <description>Lithuanian (standard)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Lithuanian (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ibm</name>
+ <description>Lithuanian (IBM LST 1205-92)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>lekp</name>
+ <description>Lithuanian (LEKP)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>lekpa</name>
+ <description>Lithuanian (LEKPa)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sgs</name>
+ <description>Samogitian</description>
+ <languageList>
+ <iso639Id>sgs</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>lv</name>
+ <!-- Keyboard indicator for Latvian layouts -->
+ <shortDescription>lv</shortDescription>
+ <description>Latvian</description>
+ <languageList>
+ <iso639Id>lav</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>apostrophe</name>
+ <description>Latvian (apostrophe)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tilde</name>
+ <description>Latvian (tilde)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fkey</name>
+ <description>Latvian (F)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>modern</name>
+ <description>Latvian (modern)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ergonomic</name>
+ <description>Latvian (ergonomic, ŪGJRMV)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>adapted</name>
+ <description>Latvian (adapted)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mao</name>
+ <!-- Keyboard indicator for Maori layouts -->
+ <shortDescription>mi</shortDescription>
+ <description>Maori</description>
+ <languageList>
+ <iso639Id>mri</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>me</name>
+ <!-- Keyboard indicator for Montenegrin layouts -->
+ <shortDescription>sr</shortDescription>
+ <description>Montenegrin</description>
+ <languageList>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>cyrillic</name>
+ <description>Montenegrin (Cyrillic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cyrillicyz</name>
+ <description>Montenegrin (Cyrillic, ZE and ZHE swapped)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinunicode</name>
+ <description>Montenegrin (Latin, Unicode)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinyz</name>
+ <description>Montenegrin (Latin, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinunicodeyz</name>
+ <description>Montenegrin (Latin, Unicode, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cyrillicalternatequotes</name>
+ <description>Montenegrin (Cyrillic, with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinalternatequotes</name>
+ <description>Montenegrin (Latin, with guillemets)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mk</name>
+ <!-- Keyboard indicator for Macedonian layouts -->
+ <shortDescription>mk</shortDescription>
+ <description>Macedonian</description>
+ <languageList>
+ <iso639Id>mkd</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Macedonian (no dead keys)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mt</name>
+ <!-- Keyboard indicator for Maltese layouts -->
+ <shortDescription>mt</shortDescription>
+ <description>Maltese</description>
+ <languageList>
+ <iso639Id>mlt</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Maltese (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alt-us</name>
+ <description>Maltese (US layout with AltGr overrides)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alt-gb</name>
+ <description>Maltese (UK, with AltGr overrides)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mn</name>
+ <!-- Keyboard indicator for Mongolian layouts -->
+ <shortDescription>mn</shortDescription>
+ <description>Mongolian</description>
+ <languageList>
+ <iso639Id>mon</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>no</name>
+ <!-- Keyboard indicator for Norwegian layouts -->
+ <shortDescription>no</shortDescription>
+ <description>Norwegian</description>
+ <languageList>
+ <iso639Id>nor</iso639Id>
+ <iso639Id>nob</iso639Id>
+ <iso639Id>nno</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Norwegian (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Norwegian (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Norwegian (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>smi</name>
+ <description>Northern Saami (Norway)</description>
+ <languageList>
+ <iso639Id>sme</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>smi_nodeadkeys</name>
+ <description>Northern Saami (Norway, no dead keys)</description>
+ <languageList>
+ <iso639Id>sme</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Norwegian (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_nodeadkeys</name>
+ <description>Norwegian (Macintosh, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>Norwegian (Colemak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>pl</name>
+ <!-- Keyboard indicator for Polish layouts -->
+ <shortDescription>pl</shortDescription>
+ <description>Polish</description>
+ <languageList>
+ <iso639Id>pol</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Polish (legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwertz</name>
+ <description>Polish (QWERTZ)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Polish (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak_quotes</name>
+ <description>Polish (Dvorak, with Polish quotes on quotemark key)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak_altquotes</name>
+ <description>Polish (Dvorak, with Polish quotes on key 1)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>csb</name>
+ <description>Kashubian</description>
+ <languageList>
+ <iso639Id>csb</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>szl</name>
+ <description>Silesian</description>
+ <languageList>
+ <iso639Id>szl</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ru_phonetic_dvorak</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Poland, phonetic Dvorak)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvp</name>
+ <description>Polish (programmer Dvorak)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>pt</name>
+ <!-- Keyboard indicator for Portuguese layouts -->
+ <shortDescription>pt</shortDescription>
+ <description>Portuguese</description>
+ <languageList>
+ <iso639Id>por</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Portuguese (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Portuguese (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Portuguese (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_nodeadkeys</name>
+ <description>Portuguese (Macintosh, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_sundeadkeys</name>
+ <description>Portuguese (Macintosh, Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo</name>
+ <description>Portuguese (Nativo)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo-us</name>
+ <description>Portuguese (Nativo for US keyboards)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>nativo-epo</name>
+ <description>Esperanto (Portugal, Nativo)</description>
+ <languageList>
+ <iso639Id>epo</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ro</name>
+ <!-- Keyboard indicator for Romanian layouts -->
+ <shortDescription>ro</shortDescription>
+ <description>Romanian</description>
+ <languageList>
+ <iso639Id>ron</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>cedilla</name>
+ <description>Romanian (cedilla)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>std</name>
+ <description>Romanian (standard)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>std_cedilla</name>
+ <description>Romanian (standard cedilla)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Romanian (Windows)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ru</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Russian (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_winkeys</name>
+ <description>Russian (phonetic, Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_YAZHERTY</name>
+ <description>Russian (phonetic, YAZHERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>typewriter</name>
+ <description>Russian (typewriter)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Russian (legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>typewriter-legacy</name>
+ <description>Russian (typewriter, legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tt</name>
+ <description>Tatar</description>
+ <languageList>
+ <iso639Id>tat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>os_legacy</name>
+ <description>Ossetian (legacy)</description>
+ <languageList>
+ <iso639Id>oss</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>os_winkeys</name>
+ <description>Ossetian (Windows)</description>
+ <languageList>
+ <iso639Id>oss</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cv</name>
+ <description>Chuvash</description>
+ <languageList>
+ <iso639Id>chv</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cv_latin</name>
+ <description>Chuvash (Latin)</description>
+ <languageList>
+ <iso639Id>chv</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>udm</name>
+ <description>Udmurt</description>
+ <languageList>
+ <iso639Id>udm</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>kom</name>
+ <description>Komi</description>
+ <languageList>
+ <iso639Id>kom</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sah</name>
+ <description>Yakut</description>
+ <languageList>
+ <iso639Id>sah</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>xal</name>
+ <description>Kalmyk</description>
+ <languageList>
+ <iso639Id>xal</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dos</name>
+ <description>Russian (DOS)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Russian (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>srp</name>
+ <description>Serbian (Russia)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>bak</name>
+ <description>Bashkirian</description>
+ <languageList>
+ <iso639Id>bak</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>chm</name>
+ <description>Mari</description>
+ <languageList>
+ <iso639Id>chm</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_azerty</name>
+ <description>Russian (phonetic, AZERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_dvorak</name>
+ <description>Russian (phonetic, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>phonetic_fr</name>
+ <description>Russian (phonetic, French)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>rs</name>
+ <!-- Keyboard indicator for Serbian layouts -->
+ <shortDescription>sr</shortDescription>
+ <description>Serbian</description>
+ <languageList>
+ <iso639Id>srp</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>yz</name>
+ <description>Serbian (Cyrillic, ZE and ZHE swapped)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latin</name>
+ <description>Serbian (Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinunicode</name>
+ <description>Serbian (Latin, Unicode)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinyz</name>
+ <description>Serbian (Latin, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinunicodeyz</name>
+ <description>Serbian (Latin, Unicode, QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alternatequotes</name>
+ <description>Serbian (Cyrillic, with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>latinalternatequotes</name>
+ <description>Serbian (Latin, with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rue</name>
+ <description>Pannonian Rusyn</description>
+ <languageList>
+ <iso639Id>rue</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>si</name>
+ <!-- Keyboard indicator for Slovenian layouts -->
+ <shortDescription>sl</shortDescription>
+ <description>Slovenian</description>
+ <languageList>
+ <iso639Id>slv</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>alternatequotes</name>
+ <description>Slovenian (with guillemets)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Slovenian (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>sk</name>
+ <!-- Keyboard indicator for Slovak layouts -->
+ <shortDescription>sk</shortDescription>
+ <description>Slovak</description>
+ <languageList>
+ <iso639Id>slk</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>bksl</name>
+ <description>Slovak (extended backslash)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty</name>
+ <description>Slovak (QWERTY)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>qwerty_bksl</name>
+ <description>Slovak (QWERTY, extended backslash)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>es</name>
+ <!-- Keyboard indicator for Spanish layouts -->
+ <shortDescription>es</shortDescription>
+ <description>Spanish</description>
+ <languageList>
+ <iso639Id>spa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Spanish (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Spanish (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>deadtilde</name>
+ <description>Spanish (dead tilde)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Spanish (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Spanish (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ast</name>
+ <shortDescription>ast</shortDescription>
+ <description>Asturian (Spain, with bottom-dot H and L)</description>
+ <languageList>
+ <iso639Id>ast</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>cat</name>
+ <shortDescription>ca</shortDescription>
+ <description>Catalan (Spain, with middle-dot L)</description>
+ <languageList>
+ <iso639Id>cat</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Spanish (Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>se</name>
+ <!-- Keyboard indicator for Swedish layouts -->
+ <shortDescription>sv</shortDescription>
+ <description>Swedish</description>
+ <languageList>
+ <iso639Id>swe</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>nodeadkeys</name>
+ <description>Swedish (no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Swedish (Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rus</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Sweden, phonetic)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rus_nodeadkeys</name>
+ <!-- Keyboard indicator for Russian layouts -->
+ <shortDescription>ru</shortDescription>
+ <description>Russian (Sweden, phonetic, no dead keys)</description>
+ <languageList>
+ <iso639Id>rus</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>smi</name>
+ <description>Northern Saami (Sweden)</description>
+ <languageList>
+ <iso639Id>sme</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>Swedish (Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>svdvorak</name>
+ <description>Swedish (Svdvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us_dvorak</name>
+ <description>Swedish (Dvorak, intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Swedish (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>swl</name>
+ <description>Swedish Sign Language</description>
+ <languageList>
+ <iso639Id>swl</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ch</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland)</description>
+ <languageList>
+ <iso639Id>deu</iso639Id>
+ <iso639Id>gsw</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>German (Switzerland, legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>de_nodeadkeys</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland, no dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>de_sundeadkeys</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland, Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Switzerland)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr_nodeadkeys</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Switzerland, no dead keys)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr_sundeadkeys</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Switzerland, Sun dead keys)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr_mac</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Switzerland, Macintosh)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>de_mac</name>
+ <!-- Keyboard indicator for German layouts -->
+ <shortDescription>de</shortDescription>
+ <description>German (Switzerland, Macintosh)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>sy</name>
+ <!-- Keyboard indicator for Arabic layouts -->
+ <shortDescription>ar</shortDescription>
+ <description>Arabic (Syria)</description>
+ <languageList>
+ <iso639Id>syr</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>syc</name>
+ <!-- Keyboard indicator for Syriac layouts -->
+ <shortDescription>syc</shortDescription>
+ <description>Syriac</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>syc_phonetic</name>
+ <!-- Keyboard indicator for Syriac layouts -->
+ <shortDescription>syc</shortDescription>
+ <description>Syriac (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Syria, Latin Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_f</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Syria, F)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_alt</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Syria, Latin Alt-Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tj</name>
+ <!-- Keyboard indicator for Tajik layouts -->
+ <shortDescription>tg</shortDescription>
+ <description>Tajik</description>
+ <languageList>
+ <iso639Id>tgk</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Tajik (legacy)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>lk</name>
+ <!-- Keyboard indicator for Sinhala layouts -->
+ <shortDescription>si</shortDescription>
+ <description>Sinhala (phonetic)</description>
+ <languageList>
+ <iso639Id>sin</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>tam_unicode</name>
+ <!-- Keyboard indicator for Tamil layouts -->
+ <shortDescription>ta</shortDescription>
+ <description>Tamil (Sri Lanka, TamilNet '99)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>tam_TAB</name>
+ <description>Tamil (Sri Lanka, TamilNet '99, TAB encoding)</description>
+ <languageList>
+ <iso639Id>tam</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <!-- Keyboard indicator for US layouts -->
+ <shortDescription>us</shortDescription>
+ <description>Sinhala (US)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>th</name>
+ <!-- Keyboard indicator for Thai layouts -->
+ <shortDescription>th</shortDescription>
+ <description>Thai</description>
+ <languageList>
+ <iso639Id>tha</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>tis</name>
+ <description>Thai (TIS-820.2538)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>pat</name>
+ <description>Thai (Pattachote)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tr</name>
+ <!-- Keyboard indicator for Turkish layouts -->
+ <shortDescription>tr</shortDescription>
+ <description>Turkish</description>
+ <languageList>
+ <iso639Id>tur</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>f</name>
+ <description>Turkish (F)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>alt</name>
+ <description>Turkish (Alt-Q)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>sundeadkeys</name>
+ <description>Turkish (Sun dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Turkey, Latin Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_f</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Turkey, F)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ku_alt</name>
+ <!-- Keyboard indicator for Kurdish layouts -->
+ <shortDescription>ku</shortDescription>
+ <description>Kurdish (Turkey, Latin Alt-Q)</description>
+ <languageList>
+ <iso639Id>kur</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>Turkish (intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>crh</name>
+ <!-- Keyboard indicator for Crimean Tatar layouts -->
+ <shortDescription>crh</shortDescription>
+ <description>Crimean Tatar (Turkish Q)</description>
+ <languageList>
+ <iso639Id>crh</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>crh_f</name>
+ <!-- Keyboard indicator for Crimean Tatar layouts -->
+ <shortDescription>crh</shortDescription>
+ <description>Crimean Tatar (Turkish F)</description>
+ <languageList>
+ <iso639Id>crh</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>crh_alt</name>
+ <!-- Keyboard indicator for Crimean Tatar layouts -->
+ <shortDescription>crh</shortDescription>
+ <description>Crimean Tatar (Turkish Alt-Q)</description>
+ <languageList>
+ <iso639Id>crh</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tw</name>
+ <!-- Keyboard indicator for Taiwanese layouts -->
+ <shortDescription>zh</shortDescription>
+ <description>Taiwanese</description>
+ <languageList>
+ <iso639Id>fox</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>indigenous</name>
+ <description>Taiwanese (indigenous)</description>
+ <languageList>
+ <iso639Id>ami</iso639Id>
+ <iso639Id>tay</iso639Id>
+ <iso639Id>bnn</iso639Id>
+ <iso639Id>ckv</iso639Id>
+ <iso639Id>pwn</iso639Id>
+ <iso639Id>pyu</iso639Id>
+ <iso639Id>dru</iso639Id>
+ <iso639Id>ais</iso639Id>
+ <iso639Id>ssf</iso639Id>
+ <iso639Id>tao</iso639Id>
+ <iso639Id>tsu</iso639Id>
+ <iso639Id>trv</iso639Id>
+ <iso639Id>xnb</iso639Id>
+ <iso639Id>sxr</iso639Id>
+ <iso639Id>uun</iso639Id>
+ <iso639Id>fos</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>saisiyat</name>
+ <!-- Keyboard indicator for Saisiyat layouts -->
+ <shortDescription>xsy</shortDescription>
+ <description>Saisiyat (Taiwan)</description>
+ <languageList>
+ <iso639Id>xsy</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ua</name>
+ <!-- Keyboard indicator for Ukranian layouts -->
+ <shortDescription>uk</shortDescription>
+ <description>Ukrainian</description>
+ <languageList>
+ <iso639Id>ukr</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Ukrainian (phonetic)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>typewriter</name>
+ <description>Ukrainian (typewriter)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>winkeys</name>
+ <description>Ukrainian (Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Ukrainian (legacy)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rstu</name>
+ <description>Ukrainian (standard RSTU)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>rstu_ru</name>
+ <description>Russian (Ukraine, standard RSTU)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>homophonic</name>
+ <description>Ukrainian (homophonic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>gb</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (UK)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>extd</name>
+ <description>English (UK, extended, Windows)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>intl</name>
+ <description>English (UK, intl., with dead keys)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>English (UK, Dvorak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorakukp</name>
+ <description>English (UK, Dvorak, with UK punctuation)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac</name>
+ <description>English (UK, Macintosh)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>mac_intl</name>
+ <description>English (UK, Macintosh, intl.)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>English (UK, Colemak)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>pl</name>
+ <!-- Keyboard indicator for Polish layouts -->
+ <shortDescription>pl</shortDescription>
+ <description>Polish (British keyboard)</description>
+ <languageList>
+ <iso639Id>pol</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>uz</name>
+ <!-- Keyboard indicator for Uzbek layouts -->
+ <shortDescription>uz</shortDescription>
+ <description>Uzbek</description>
+ <languageList>
+ <iso639Id>uzb</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>latin</name>
+ <description>Uzbek (Latin)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>vn</name>
+ <!-- Keyboard indicator for Vietnamese layouts -->
+ <shortDescription>vi</shortDescription>
+ <description>Vietnamese</description>
+ <languageList>
+ <iso639Id>vie</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>us</name>
+ <description>Vietnamese (US)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>fr</name>
+ <description>Vietnamese (French)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>kr</name>
+ <!-- Keyboard indicator for Korean layouts -->
+ <shortDescription>ko</shortDescription>
+ <description>Korean</description>
+ <languageList>
+ <iso639Id>kor</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>kr104</name>
+ <description>Korean (101/104-key compatible)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>nec_vndr/jp</name>
+ <!-- Keyboard indicator for Japaneses -->
+ <shortDescription>ja</shortDescription>
+ <description>Japanese (PC-98)</description>
+ <countryList>
+ <iso3166Id>JP</iso3166Id>
+ </countryList>
+ <languageList>
+ <iso639Id>jpn</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ie</name>
+ <!-- Keyboard indicator for Irish layouts -->
+ <shortDescription>ie</shortDescription>
+ <description>Irish</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>CloGaelach</name>
+ <description>CloGaelach</description>
+ <languageList>
+ <iso639Id>gle</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>UnicodeExpert</name>
+ <description>Irish (UnicodeExpert)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ogam</name>
+ <description>Ogham</description>
+ <languageList>
+ <iso639Id>sga</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ogam_is434</name>
+ <description>Ogham (IS434)</description>
+ <languageList>
+ <iso639Id>sga</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>pk</name>
+ <!-- Keyboard indicator for Urdu layouts -->
+ <shortDescription>ur</shortDescription>
+ <description>Urdu (Pakistan)</description>
+ <languageList>
+ <iso639Id>urd</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>urd-crulp</name>
+ <description>Urdu (Pakistan, CRULP)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>urd-nla</name>
+ <description>Urdu (Pakistan, NLA)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>ara</name>
+ <shortDescription>ar</shortDescription>
+ <description>Arabic (Pakistan)</description>
+ <languageList>
+ <iso639Id>ara</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>snd</name>
+ <!-- Keyboard indicator for Sindhi layouts -->
+ <shortDescription>sd</shortDescription>
+ <description>Sindhi</description>
+ <languageList>
+ <iso639Id>snd</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>mv</name>
+ <!-- Keyboard indicator for Dhivehi layouts -->
+ <shortDescription>dv</shortDescription>
+ <description>Dhivehi</description>
+ <languageList>
+ <iso639Id>div</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>za</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (South Africa)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>epo</name>
+ <!-- Keyboard indicator for Esperanto layouts -->
+ <shortDescription>eo</shortDescription>
+ <description>Esperanto</description>
+ <languageList>
+ <iso639Id>epo</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>legacy</name>
+ <description>Esperanto (legacy)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>np</name>
+ <!-- Keyboard indicator for Nepali layouts -->
+ <shortDescription>ne</shortDescription>
+ <description>Nepali</description>
+ <languageList>
+ <iso639Id>nep</iso639Id>
+ <!-- sat-Deva used in Nepal: http://www.ethnologue.com/language/sat -->
+ <iso639Id>sat</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ng</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Nigeria)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>igbo</name>
+ <!-- Keyboard indicator for Igbo layouts -->
+ <shortDescription>ig</shortDescription>
+ <description>Igbo</description>
+ <languageList>
+ <iso639Id>ibo</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>yoruba</name>
+ <!-- Keyboard indicator for Yoruba layouts -->
+ <shortDescription>yo</shortDescription>
+ <description>Yoruba</description>
+ <languageList>
+ <iso639Id>yor</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>hausa</name>
+ <!-- Keyboard indicator for Hausa layouts -->
+ <shortDescription>ha</shortDescription>
+ <description>Hausa (Nigeria)</description>
+ <languageList>
+ <iso639Id>hau</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>et</name>
+ <!-- Keyboard indicator for Amharic layouts -->
+ <shortDescription>am</shortDescription>
+ <description>Amharic</description>
+ <languageList>
+ <iso639Id>amh</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>sn</name>
+ <!-- Keyboard indicator for Wolof layouts -->
+ <shortDescription>wo</shortDescription>
+ <description>Wolof</description>
+ <languageList>
+ <iso639Id>wol</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>brai</name>
+ <!-- Keyboard indicator for Braille layouts -->
+ <shortDescription>brl</shortDescription>
+ <description>Braille</description>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>left_hand</name>
+ <description>Braille (left-handed)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>left_hand_invert</name>
+ <description>Braille (left-handed inverted thumb)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>right_hand</name>
+ <description>Braille (right-handed)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>right_hand_invert</name>
+ <description>Braille (right-handed inverted thumb)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tm</name>
+ <!-- Keyboard indicator for Turkmen layouts -->
+ <shortDescription>tk</shortDescription>
+ <description>Turkmen</description>
+ <languageList>
+ <iso639Id>tuk</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>alt</name>
+ <description>Turkmen (Alt-Q)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ml</name>
+ <!-- Keyboard indicator for Bambara layouts -->
+ <shortDescription>bm</shortDescription>
+ <description>Bambara</description>
+ <languageList>
+ <iso639Id>bam</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>fr-oss</name>
+ <!-- Keyboard indicator for French layouts -->
+ <shortDescription>fr</shortDescription>
+ <description>French (Mali, alt.)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us-mac</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Mali, US, Macintosh)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>us-intl</name>
+ <!-- Keyboard indicator for English layouts -->
+ <shortDescription>en</shortDescription>
+ <description>English (Mali, US, intl.)</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tz</name>
+ <!-- Keyboard indicator for Swahili layouts -->
+ <shortDescription>sw</shortDescription>
+ <description>Swahili (Tanzania)</description>
+ <languageList>
+ <iso639Id>swa</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>tg</name>
+ <shortDescription>fr-tg</shortDescription>
+ <description>French (Togo)</description>
+ <languageList>
+ <iso639Id>fra</iso639Id>
+ <iso639Id>ajg</iso639Id>
+ <iso639Id>blo</iso639Id>
+ <iso639Id>kpo</iso639Id>
+ <iso639Id>ewe</iso639Id>
+ <iso639Id>fon</iso639Id>
+ <iso639Id>fue</iso639Id>
+ <iso639Id>gej</iso639Id>
+ <iso639Id>ife</iso639Id>
+ <iso639Id>kbp</iso639Id>
+ <iso639Id>las</iso639Id>
+ <iso639Id>dop</iso639Id>
+ <iso639Id>mfg</iso639Id>
+ <iso639Id>nmz</iso639Id>
+ <iso639Id>bud</iso639Id>
+ <iso639Id>gng</iso639Id>
+ <iso639Id>kdh</iso639Id>
+ <iso639Id>soy</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ke</name>
+ <!-- Keyboard indicator for Swahili layouts -->
+ <shortDescription>sw</shortDescription>
+ <description>Swahili (Kenya)</description>
+ <languageList>
+ <iso639Id>swa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>kik</name>
+ <!-- Keyboard indicator for Kikuyu layouts -->
+ <shortDescription>ki</shortDescription>
+ <description>Kikuyu</description>
+ <languageList>
+ <iso639Id>kik</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>bw</name>
+ <!-- Keyboard indicator for Tswana layouts -->
+ <shortDescription>tn</shortDescription>
+ <description>Tswana</description>
+ <languageList>
+ <iso639Id>tsn</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
+ <layout>
+ <configItem>
+ <name>ph</name>
+ <!-- Keyboard indicator for Filipino layouts -->
+ <shortDescription>ph</shortDescription>
+ <description>Filipino</description>
+ <languageList>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>qwerty-bay</name>
+ <description>Filipino (QWERTY, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>capewell-dvorak</name>
+ <description>Filipino (Capewell-Dvorak, Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>capewell-dvorak-bay</name>
+ <description>Filipino (Capewell-Dvorak, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>capewell-qwerf2k6</name>
+ <description>Filipino (Capewell-QWERF 2006, Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>capewell-qwerf2k6-bay</name>
+ <description>Filipino (Capewell-QWERF 2006, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <description>Filipino (Colemak, Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>colemak-bay</name>
+ <description>Filipino (Colemak, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak</name>
+ <description>Filipino (Dvorak, Latin)</description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
+ <name>dvorak-bay</name>
+ <description>Filipino (Dvorak, Baybayin)</description>
+ <languageList>
+ <iso639Id>bik</iso639Id>
+ <iso639Id>ceb</iso639Id>
+ <iso639Id>fil</iso639Id>
+ <iso639Id>hil</iso639Id>
+ <iso639Id>ilo</iso639Id>
+ <iso639Id>pam</iso639Id>
+ <iso639Id>pag</iso639Id>
+ <iso639Id>phi</iso639Id>
+ <iso639Id>tgl</iso639Id>
+ <iso639Id>war</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>md</name>
+ <shortDescription>md</shortDescription>
+ <description>Moldavian</description>
+ <languageList>
+ <iso639Id>ron</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>gag</name>
+ <shortDescription>gag</shortDescription>
+ <description>Moldavian (Gagauz)</description>
+ <languageList>
+ <iso639Id>gag</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>id</name>
+ <shortDescription>id</shortDescription>
+ <description>Indonesian (Arab Melayu, phonetic)</description>
+ <languageList>
+ <iso639Id>ind</iso639Id>
+ <iso639Id>msa</iso639Id>
+ <iso639Id>min</iso639Id>
+ <iso639Id>ace</iso639Id>
+ <iso639Id>bjn</iso639Id>
+ <iso639Id>tsg</iso639Id>
+ <iso639Id>mfa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phoneticx</name>
+ <description>Indonesian (Arab Melayu, extended phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ <layout>
+ <configItem>
+ <name>jv</name>
+ <shortDescription>jv</shortDescription>
+ <description>Indonesian (Javanese)</description>
+ <languageList>
+ <iso639Id>jv</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList/>
+ </layout>
+ <layout>
+ <configItem>
+ <name>my</name>
+ <shortDescription>ms</shortDescription>
+ <description>Malay (Jawi, Arabic Keyboard)</description>
+ <languageList>
+ <iso639Id>ind</iso639Id>
+ <iso639Id>msa</iso639Id>
+ <iso639Id>min</iso639Id>
+ <iso639Id>ace</iso639Id>
+ <iso639Id>bjn</iso639Id>
+ <iso639Id>tsg</iso639Id>
+ <iso639Id>mfa</iso639Id>
+ </languageList>
+ </configItem>
+ <variantList>
+ <variant>
+ <configItem>
+ <name>phonetic</name>
+ <description>Malay (Jawi, phonetic)</description>
+ </configItem>
+ </variant>
+ </variantList>
+ </layout>
+ </layoutList>
+ <optionList>
+ <group allowMultipleSelection="true">
+ <!-- The key combination used to switch between groups -->
+ <configItem>
+ <name>grp</name>
+ <description>Switching to another layout</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>grp:switch</name>
+ <description>Right Alt (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lswitch</name>
+ <description>Left Alt (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lwin_switch</name>
+ <description>Left Win (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rwin_switch</name>
+ <description>Right Win (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:win_switch</name>
+ <description>Any Win (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:menu_switch</name>
+ <description>Menu (while pressed), Shift+Menu for Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:caps_switch</name>
+ <description>Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rctrl_switch</name>
+ <description>Right Ctrl (while pressed)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:toggle</name>
+ <description>Right Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lalt_toggle</name>
+ <description>Left Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:caps_toggle</name>
+ <description>Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:shift_caps_toggle</name>
+ <description>Shift+Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:shift_caps_switch</name>
+ <description>Caps Lock to first layout; Shift+Caps Lock to last layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:win_menu_switch</name>
+ <description>Left Win to first layout; Right Win/Menu to last layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_rctrl_switch</name>
+ <description>Left Ctrl to first layout; Right Ctrl to last layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:alt_caps_toggle</name>
+ <description>Alt+Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:shifts_toggle</name>
+ <description>Both Shift together</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:alts_toggle</name>
+ <description>Both Alt together</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:ctrls_toggle</name>
+ <description>Both Ctrl together</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:ctrl_shift_toggle</name>
+ <description>Ctrl+Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_lshift_toggle</name>
+ <description>Left Ctrl+Left Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rctrl_rshift_toggle</name>
+ <description>Right Ctrl+Right Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:ctrl_alt_toggle</name>
+ <description>Alt+Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:alt_shift_toggle</name>
+ <description>Alt+Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lalt_lshift_toggle</name>
+ <description>Left Alt+Left Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:alt_space_toggle</name>
+ <description>Alt+Space</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:menu_toggle</name>
+ <description>Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lwin_toggle</name>
+ <description>Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:win_space_toggle</name>
+ <description>Win+Space</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rwin_toggle</name>
+ <description>Right Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lshift_toggle</name>
+ <description>Left Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rshift_toggle</name>
+ <description>Right Shift</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_toggle</name>
+ <description>Left Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:rctrl_toggle</name>
+ <description>Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:sclk_toggle</name>
+ <description>Scroll Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_lwin_rctrl_menu</name>
+ <description>Left Ctrl+Left Win to first layout; Right Ctrl+Menu to second layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp:lctrl_lwin_toggle</name>
+ <description>Left Ctrl+Left Win</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- The key combination used to choose the 3rd (and 4th, together with Shift)
+ level of symbols -->
+ <configItem>
+ <name>lv3</name>
+ <description>Key to choose the 3rd level</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>lv3:switch</name>
+ <description>Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:menu_switch</name>
+ <description>Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:win_switch</name>
+ <description>Any Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:lwin_switch</name>
+ <description>Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:rwin_switch</name>
+ <description>Right Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:alt_switch</name>
+ <description>Any Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:lalt_switch</name>
+ <description>Left Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:ralt_switch</name>
+ <description>Right Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:ralt_switch_multikey</name>
+ <description>Right Alt; Shift+Right Alt as Compose</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:ralt_alt</name>
+ <description>Right Alt never chooses 3rd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:enter_switch</name>
+ <description>Enter on keypad</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:caps_switch</name>
+ <description>Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:bksl_switch</name>
+ <description>Backslash</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:lsgt_switch</name>
+ <description>The "&lt; &gt;" key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:caps_switch_latch</name>
+ <description>Caps Lock; acts as onetime lock when pressed together with another 3rd-level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:bksl_switch_latch</name>
+ <description>Backslash; acts as onetime lock when pressed together with another 3rd level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv3:lsgt_switch_latch</name>
+ <description>The "&lt; &gt;" key; acts as onetime lock when pressed together with another 3rd level chooser</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Tweaking the position of the "Ctrl" key -->
+ <configItem>
+ <name>ctrl</name>
+ <description>Ctrl position</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>ctrl:nocaps</name>
+ <description>Caps Lock as Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:lctrl_meta</name>
+ <description>Left Ctrl as Meta</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swapcaps</name>
+ <description>Swap Ctrl and Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swapcaps_hyper</name>
+ <description>Caps Lock as Ctrl, Ctrl as Hyper</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:ac_ctrl</name>
+ <description>To the left of "A"</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:aa_ctrl</name>
+ <description>At the bottom left</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:rctrl_ralt</name>
+ <description>Right Ctrl as Right Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:menu_rctrl</name>
+ <description>Menu as Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swap_lalt_lctl</name>
+ <description>Swap Left Alt with Left Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swap_lwin_lctl</name>
+ <description>Swap Left Win with Left Ctrl</description>
+ </configItem>
+ </option><option>
+ <configItem>
+ <name>ctrl:swap_rwin_rctl</name>
+ <description>Swap Right Win with Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>ctrl:swap_lalt_lctl_lwin</name>
+ <description>Left Alt as Ctrl, Left Ctrl as Win, Left Win as Left Alt</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Using startard LEDs to indicate the alternative (not first) group(s) -->
+ <configItem>
+ <name>grp_led</name>
+ <description>Use keyboard LED to show alternative layout</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>grp_led:num</name>
+ <description>Num Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp_led:caps</name>
+ <description>Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grp_led:scroll</name>
+ <description>Scroll Lock</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Using LEDs to indicate modifiers -->
+ <configItem>
+ <name>mod_led</name>
+ <description>Use keyboard LED to indicate modifiers</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>mod_led:compose</name>
+ <description>Compose</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="false">
+ <!-- Select a keypad type -->
+ <configItem>
+ <name>keypad</name>
+ <description>Layout of numeric keypad</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>keypad:legacy</name>
+ <description>Legacy</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:oss</name>
+ <description>Unicode arrows and math operators</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:future</name>
+ <description>Unicode arrows and math operators on default level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:legacy_wang</name>
+ <description>Legacy Wang 724</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:oss_wang</name>
+ <description>Wang 724 keypad with Unicode arrows and math operators</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:future_wang</name>
+ <description>Wang 724 keypad with Unicode arrows and math operators on default level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:hex</name>
+ <description>Hexadecimal</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:atm</name>
+ <description>Phone and ATM style</description>
+ </configItem>
+ </option>
+ </group>
+ <!-- This option should override the KPDL key defined in keypad; I hope it's declared in the right place -->
+ <group allowMultipleSelection="false">
+ <!-- Select a keypad KPDL variant -->
+ <configItem>
+ <name>kpdl</name>
+ <description>Numeric keypad Delete behavior</description>
+ </configItem>
+ <option>
+ <configItem>
+ <!-- Actually, with KP_DECIMAL, as the old keypad(dot) -->
+ <name>kpdl:dot</name>
+ <description>Legacy key with dot</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:comma</name>
+ <!-- Actually, with KP_SEPARATOR, as the old keypad(comma) -->
+ <description>Legacy key with comma</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:dotoss</name>
+ <description>Four-level key with dot</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:dotoss_latin9</name>
+ <description>Four-level key with dot, Latin-9 only</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:commaoss</name>
+ <description>Four-level key with comma</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:momayyezoss</name>
+ <description>Four-level key with momayyez</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:kposs</name>
+ <!-- This assumes the KP_ abstract symbols are actually useful for some apps
+ The description needs to be rewritten -->
+ <description>Four-level key with abstract separators</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>kpdl:semi</name>
+ <description>Semicolon on third level</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="false">
+ <!-- Caps Lock tweaks.
+ "Internal" capitalization means capitalization using some internal tables.
+ Otherwise "as Shift" - means using next group. -->
+ <configItem>
+ <name>caps</name>
+ <description>Caps Lock behavior</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>caps:internal</name>
+ <description>Caps Lock uses internal capitalization; Shift "pauses" Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:internal_nocancel</name>
+ <description>Caps Lock uses internal capitalization; Shift does not affect Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:shift</name>
+ <description>Caps Lock acts as Shift with locking; Shift "pauses" Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:shift_nocancel</name>
+ <description>Caps Lock acts as Shift with locking; Shift does not affect Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:capslock</name>
+ <description>Caps Lock toggles normal capitalization of alphabetic characters</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:shiftlock</name>
+ <description>Caps Lock toggles Shift Lock (affects all keys)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:swapescape</name>
+ <description>Swap Esc and Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:escape</name>
+ <description>Make Caps Lock an additional Esc</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:escape_shifted_capslock</name>
+ <description>Make Caps Lock an additional Esc, but Shift + Caps Lock is the regular Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:backspace</name>
+ <description>Make Caps Lock an additional Backspace</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:super</name>
+ <description>Make Caps Lock an additional Super</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:hyper</name>
+ <description>Make Caps Lock an additional Hyper</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:menu</name>
+ <description>Make Caps Lock an additional Menu key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:numlock</name>
+ <description>Make Caps Lock an additional Num Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:ctrl_modifier</name>
+ <description>Caps Lock is also a Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>caps:none</name>
+ <description>Caps Lock is disabled</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="false">
+ <!-- Using special PC keys (Win, Menu) to work as standard X keys (Super, Hyper, etc.) -->
+ <configItem>
+ <name>altwin</name>
+ <description>Alt and Win behavior</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>altwin:menu</name>
+ <description>Add the standard behavior to Menu key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:menu_win</name>
+ <description>Menu is mapped to Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:meta_alt</name>
+ <description>Alt and Meta are on Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:alt_win</name>
+ <description>Alt is mapped to Win and the usual Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:ctrl_win</name>
+ <description>Ctrl is mapped to Win and the usual Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:ctrl_alt_win</name>
+ <description>Ctrl is mapped to Alt, Alt to Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:meta_win</name>
+ <description>Meta is mapped to Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:left_meta_win</name>
+ <description>Meta is mapped to Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:hyper_win</name>
+ <description>Hyper is mapped to Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:alt_super_win</name>
+ <description>Alt is mapped to Right Win, Super to Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:swap_lalt_lwin</name>
+ <description>Left Alt is swapped with Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:swap_alt_win</name>
+ <description>Alt is swapped with Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>altwin:prtsc_rwin</name>
+ <description>Win is mapped to PrtSc and the usual Win</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Tweaking the position of the "Compose" key: mapping to existing PC keys -->
+ <configItem>
+ <name>Compose key</name>
+ <description>Position of Compose key</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>compose:ralt</name>
+ <description>Right Alt</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:lwin</name>
+ <description>Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:lwin-altgr</name>
+ <description>3rd level of Left Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:rwin</name>
+ <description>Right Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:rwin-altgr</name>
+ <description>3rd level of Right Win</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:menu</name>
+ <description>Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:menu-altgr</name>
+ <description>3rd level of Menu</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:lctrl</name>
+ <description>Left Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:lctrl-altgr</name>
+ <description>3rd level of Left Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:rctrl</name>
+ <description>Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:rctrl-altgr</name>
+ <description>3rd level of Right Ctrl</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:caps</name>
+ <description>Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:caps-altgr</name>
+ <description>3rd level of Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:102</name>
+ <description>The "&lt; &gt;" key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:102-altgr</name>
+ <description>3rd level of the "&lt; &gt;" key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:paus</name>
+ <description>Pause</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:prsc</name>
+ <description>PrtSc</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>compose:sclk</name>
+ <description>Scroll Lock</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>compat</name>
+ <description>Compatibility options</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>numpad:pc</name>
+ <description>Default numeric keypad keys</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>numpad:mac</name>
+ <description>Numeric keypad always enters digits (as in macOS)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>numpad:microsoft</name>
+ <description>Num Lock on: digits; Shift for arrows. Num Lock off: arrows (as in Windows)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>numpad:shift3</name>
+ <description>Shift does not cancel Num Lock, chooses 3rd level instead</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>srvrkeys:none</name>
+ <description>Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>apple:alupckeys</name>
+ <description>Apple Aluminium emulates Pause, PrtSc, Scroll Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>shift:breaks_caps</name>
+ <description>Shift cancels Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>misc:typo</name>
+ <description>Enable extra typographic characters</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>misc:apl</name>
+ <description>Enable APL overlay characters</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>shift:both_capslock</name>
+ <description>Both Shift together enable Caps Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>shift:both_capslock_cancel</name>
+ <description>Both Shift together enable Caps Lock; one Shift key disables it</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>shift:both_shiftlock</name>
+ <description>Both Shift together enable Shift Lock</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>keypad:pointerkeys</name>
+ <description>Shift + Num Lock enables PointerKeys</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grab:break_actions</name>
+ <description>Allow breaking grabs with keyboard actions (warning: security risk)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>grab:debug</name>
+ <description>Allow grab and window tree logging</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <!-- Special shortcuts for the Euro character -->
+ <configItem>
+ <name>currencysign</name>
+ <description>Currency signs</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>eurosign:e</name>
+ <description>Euro on E</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>eurosign:2</name>
+ <description>Euro on 2</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>eurosign:4</name>
+ <description>Euro on 4</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>eurosign:5</name>
+ <description>Euro on 5</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>rupeesign:4</name>
+ <description>Rupee on 4</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>lv5</name>
+ <description>Key to choose 5th level</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>lv5:lsgt_switch</name>
+ <description>The "&lt; &gt;" key chooses 5th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:ralt_switch</name>
+ <description>Right Alt chooses 5th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:lsgt_switch_lock</name>
+ <description>The "&lt; &gt;" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:ralt_switch_lock</name>
+ <description>Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:lwin_switch_lock</name>
+ <description>Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:rwin_switch_lock</name>
+ <description>Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+<!--
+ <option>
+ <configItem>
+ <name>lv5:lsgt_switch_lock_cancel</name>
+ <description>The "&lt; &gt;" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:ralt_switch_lock_cancel</name>
+ <description>Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:lwin_switch_lock_cancel</name>
+ <description>Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:rwin_switch_lock_cancel</name>
+ <description>Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:lsgt_switch_lock_cancel</name>
+ <description>The "&lt; &gt;" key chooses 5th level; acts as onetime lock lock when pressed together with another 5th level chooser</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>lv5:ralt_switch_lock_cancel</name>
+ <description>Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
+ </configItem>
+ </option>
+-->
+ </group>
+ <group allowMultipleSelection="false">
+ <!-- Let space output NBSP, NNBSP, ZWNJ, and ZWJ for the desired level -->
+ <configItem>
+ <name>nbsp</name>
+ <description>Non-breaking space input</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>nbsp:none</name>
+ <description>Usual space at any level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level2</name>
+ <description>Non-breaking space at the 2nd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level3</name>
+ <description>Non-breaking space at the 3rd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level3s</name>
+ <description>Non-breaking space at the 3rd level, nothing at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level3n</name>
+ <description>Non-breaking space at the 3rd level, thin non-breaking space at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level4</name>
+ <description>Non-breaking space at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level4n</name>
+ <description>Non-breaking space at the 4th level, thin non-breaking space at the 6th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:level4nl</name>
+ <description>Non-breaking space at the 4th level, thin non-breaking space at the 6th level (via Ctrl+Shift)</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2</name>
+ <description>Zero-width non-joiner at the 2nd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2zwj3</name>
+ <description>Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2zwj3nb4</name>
+ <description>Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level, non-breaking space at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2nb3</name>
+ <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2nb3s</name>
+ <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, nothing at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2nb3zwj4</name>
+ <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, zero-width joiner at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj2nb3nnb4</name>
+ <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, thin non-breaking space at the 4th level</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>nbsp:zwnj3zwj4</name>
+ <description>Zero-width non-joiner at the 3rd level, zero-width joiner at the 4th level</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>japan</name>
+ <description>Japanese keyboard options</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>japan:kana_lock</name>
+ <description>Kana Lock key is locking</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>japan:nicola_f_bs</name>
+ <description>NICOLA-F style Backspace</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>japan:hztg_escape</name>
+ <description>Make Zenkaku Hankaku an additional Esc</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>korean</name>
+ <description>Korean Hangul/Hanja keys</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>korean:ralt_hangul</name>
+ <description>Make right Alt a Hangul key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>korean:rctrl_hangul</name>
+ <description>Make right Ctrl a Hangul key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>korean:ralt_hanja</name>
+ <description>Make right Alt a Hanja key</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>korean:rctrl_hanja</name>
+ <description>Make right Ctrl a Hanja key</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="false">
+ <configItem>
+ <name>esperanto</name>
+ <description>Esperanto letters with superscripts</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>esperanto:qwerty</name>
+ <description>At the corresponding key in a QWERTY layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>esperanto:dvorak</name>
+ <description>At the corresponding key in a Dvorak layout</description>
+ </configItem>
+ </option>
+ <option>
+ <configItem>
+ <name>esperanto:colemak</name>
+ <description>At the corresponding key in a Colemak layout</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>solaris</name>
+ <description>Old Solaris keycodes compatibility</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>solaris:sun_compat</name>
+ <description>Sun key compatibility</description>
+ </configItem>
+ </option>
+ </group>
+ <group allowMultipleSelection="true">
+ <configItem>
+ <name>terminate</name>
+ <description>Key sequence to kill the X server</description>
+ </configItem>
+ <option>
+ <configItem>
+ <name>terminate:ctrl_alt_bksp</name>
+ <description>Ctrl+Alt+Backspace</description>
+ </configItem>
+ </option>
+ </group>
+ </optionList>
+</xkbConfigRegistry>
diff --git a/test/data/rules/xkb.dtd b/test/data/rules/xkb.dtd
new file mode 100644
index 0000000..0a37b11
--- /dev/null
+++ b/test/data/rules/xkb.dtd
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+
+ Description: XKB configuration file DTD
+ Author: Sergey V. Udaltsov
+
+-->
+
+<!ELEMENT xkbConfigRegistry (modelList,layoutList,optionList)>
+
+<!ATTLIST xkbConfigRegistry
+ version CDATA "1.1">
+
+<!ELEMENT modelList (model*)>
+
+<!ELEMENT model (configItem)>
+
+<!ELEMENT layoutList (layout*)>
+
+<!ELEMENT layout (configItem,variantList?)>
+
+<!ELEMENT optionList (group*)>
+
+<!ELEMENT variantList (variant*)>
+
+<!ELEMENT variant (configItem)>
+
+<!ELEMENT group (configItem,option*)>
+<!ATTLIST group
+ allowMultipleSelection (true|false) "false">
+
+<!ELEMENT option (configItem)>
+
+<!ELEMENT configItem (name,shortDescription*,description*,vendor?,countryList?,languageList?,hwList?)>
+
+<!ATTLIST configItem
+ popularity (standard|exotic) "standard">
+
+<!ELEMENT name (#PCDATA)>
+
+<!ELEMENT shortDescription (#PCDATA)>
+
+<!ELEMENT description (#PCDATA)>
+
+<!ELEMENT vendor (#PCDATA)>
+
+<!ELEMENT countryList (iso3166Id+)>
+
+<!ELEMENT iso3166Id (#PCDATA)>
+
+<!ELEMENT languageList (iso639Id+)>
+
+<!ELEMENT iso639Id (#PCDATA)>
+
+<!ELEMENT hwList (hwId+)>
+
+<!ELEMENT hwId (#PCDATA)>
diff --git a/test/data/symbols/altwin b/test/data/symbols/altwin
index 7240ab8..038456b 100644
--- a/test/data/symbols/altwin
+++ b/test/data/symbols/altwin
@@ -74,6 +74,12 @@ xkb_symbols "menu" {
key <MENU> { [ Menu ] };
};
+// Menu is mapped to the right Win key.
+partial modifier_keys
+xkb_symbols "menu_win" {
+ key <MENU> { [ Super_R ] };
+};
+
// Layout for Tux key caps with additional right Alt key
partial modifier_keys
xkb_symbols "alt_super_win" {
diff --git a/test/data/symbols/ca b/test/data/symbols/ca
index 84f153c..41a914f 100644
--- a/test/data/symbols/ca
+++ b/test/data/symbols/ca
@@ -1,4 +1,4 @@
-default partial
+default partial
xkb_symbols "fr" {
name[Group1] = "French (Canada)";
@@ -170,7 +170,7 @@ xkb_symbols "multi" {
include "ca(fr)"
- name[Group1] = "Canadian Multilingual (1st part)";
+ name[Group1] = "Canadian (intl., 1st part)";
key <TLDE> { [ slash, backslash, bar ] };
key <AE01> { [ 1, exclam ] };
@@ -206,7 +206,7 @@ xkb_symbols "multi" {
partial
xkb_symbols "multi-2gr" {
- name[Group1] = "Canadian Multilingual (2nd part)";
+ name[Group1] = "Canadian (intl., 2nd part)";
key <TLDE> { [ NoSymbol, hyphen ] };
key <AE01> { [ onesuperior, exclamdown ] };
@@ -327,7 +327,7 @@ xkb_symbols "ike" {
partial
xkb_symbols "multix" {
- name[Group1] = "Canadian Multilingual";
+ name[Group1] = "Canadian (intl.)";
key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
key <TLDE> { [ slash, backslash, bar, NoSymbol,
diff --git a/test/data/symbols/capslock b/test/data/symbols/capslock
index 6b85c3d..a082b75 100644
--- a/test/data/symbols/capslock
+++ b/test/data/symbols/capslock
@@ -35,6 +35,15 @@ xkb_symbols "escape" {
};
hidden partial modifier_keys
+xkb_symbols "escape_shifted_capslock" {
+ key <CAPS> {
+ type[Group1] = "TWO_LEVEL",
+ symbols[Group1] = [ Escape, Caps_Lock ],
+ actions[Group1] = [ NoAction(), LockMods(modifiers = Lock) ]
+ };
+};
+
+hidden partial modifier_keys
xkb_symbols "backspace" {
key <CAPS> { [ BackSpace ] };
};
diff --git a/test/data/symbols/ch b/test/data/symbols/ch
index a87f93a..626778c 100644
--- a/test/data/symbols/ch
+++ b/test/data/symbols/ch
@@ -1,4 +1,4 @@
-default partial alphanumeric_keys
+default partial alphanumeric_keys
xkb_symbols "basic" {
include "latin"
@@ -62,7 +62,7 @@ xkb_symbols "de_Sundeadkeys" {
partial alphanumeric_keys
xkb_symbols "de_sundeadkeys" {
include "ch(de_Sundeadkeys)"
- name[Group1]= "German (Switzerland, with Sun dead keys)";
+ name[Group1]= "German (Switzerland, Sun dead keys)";
};
partial alphanumeric_keys
@@ -104,7 +104,7 @@ xkb_symbols "fr_Sundeadkeys" {
partial alphanumeric_keys
xkb_symbols "fr_sundeadkeys" {
include "ch(fr_Sundeadkeys)"
- name[Group1]= "French (Switzerland, with Sun dead keys)";
+ name[Group1]= "French (Switzerland, Sun dead keys)";
};
partial alphanumeric_keys
@@ -153,7 +153,7 @@ xkb_symbols "de_mac" {
key <AD11> { [ udiaeresis, egrave, section, ydiaeresis ] };
key <AD12> { [ dead_diaeresis, exclam, grave, apostrophe ] };
key <AC01> { [ a, A, aring, Aring ] };
- key <AC02> { [ s, S, ssharp, NoSymbol ] };
+ key <AC02> { [ s, S, ssharp, U1E9E ] };
// ligature fl
key <AC03> { [ d, D, Greek_sigma, NoSymbol ] };
// partialderivative is not available here att
diff --git a/test/data/symbols/ctrl b/test/data/symbols/ctrl
index 8791b49..a9e97f5 100644
--- a/test/data/symbols/ctrl
+++ b/test/data/symbols/ctrl
@@ -20,6 +20,25 @@ xkb_symbols "swapcaps" {
modifier_map Lock { <LCTL> };
};
+// Swap the functions of the CapsLock key and the left Ctrl key,
+// but make the Ctrl key a 'Hyper' modifier
+partial modifier_keys
+xkb_symbols "swapcaps_hyper" {
+ replace key <CAPS> { [ Control_L ] };
+ replace key <LCTL> { [ Hyper_L ] };
+ modifier_map Control { <CAPS> };
+ modifier_map Mod3 { <LCTL> };
+};
+
+// Set CapsLock to left Ctrl and left Ctrl to switch layout.
+partial modifier_keys
+xkb_symbols "swapcaps_and_switch_layout" {
+ replace key <CAPS> { [ Control_L ] };
+ replace key <LCTL> { [ ISO_Next_Group ] };
+ modifier_map Control { <CAPS> };
+ modifier_map Lock { <LCTL> };
+};
+
// Move Ctrl to the leftmost key on the middle row and CapsLock to the
// leftmost key on the bottom row. Only works if the geometry or keycodes
// file has defined appropriate aliases for the keys in question.
diff --git a/test/data/symbols/cz b/test/data/symbols/cz
index 3407e92..8fbff0e 100644
--- a/test/data/symbols/cz
+++ b/test/data/symbols/cz
@@ -1,4 +1,4 @@
-default partial alphanumeric_keys
+default partial alphanumeric_keys
xkb_symbols "basic" {
// This layout conforms to a new Czech compromise standard
@@ -108,6 +108,74 @@ xkb_symbols "qwerty_bksl" {
key <BKSL> { [ backslash, bar, slash, NoSymbol ] };
};
+partial alphanumeric_keys
+xkb_symbols "qwerty-mac" {
+
+ // This layout corresponds to the Apple's Czech - QWERTY.
+ // 2018 by Jakub Jirutka <jakub@jirutka.cz>
+
+ include "latin"
+ name[Group1]= "Czech (QWERTY, Macintosh)";
+
+ key <TLDE> { [ less, greater, lessthanequal, greaterthanequal]};
+ key <AE01> { [ plus, 1, grave, notsign ] };
+ key <AE02> { [ ecaron, 2, at, enfilledcircbullet]};
+ key <AE03> { [ scaron, 3, numbersign, notequal ] };
+ key <AE04> { [ ccaron, 4, dollar, sterling ] };
+ key <AE05> { [ rcaron, 5, asciitilde, U25CA ] };
+ key <AE06> { [ zcaron, 6, asciicircum, dagger ] };
+ key <AE07> { [ yacute, 7, ampersand, paragraph ] };
+ key <AE08> { [ aacute, 8, asterisk, division ] };
+ key <AE09> { [ iacute, 9, braceleft, guillemotleft] };
+ key <AE10> { [ eacute, 0, braceright, guillemotright]};
+ key <AE11> { [ equal, percent, dead_abovering, dead_cedilla]};
+ key <AE12> { [dead_acute, dead_caron, dead_circumflex, dead_macron]};
+
+ key <AD01> { [ q, Q, NoSymbol, NoSymbol ] };
+ key <AD02> { [ w, W, eabovedot, Eabovedot ] };
+ key <AD03> { [ e, E, eogonek, Eogonek ] };
+ key <AD04> { [ r, R, EuroSign, registered ] };
+ key <AD05> { [ t, T, NoSymbol, trademark ] };
+ key <AD06> { [ y, Y, NoSymbol, NoSymbol ] };
+ key <AD07> { [ u, U, NoSymbol, NoSymbol ] };
+ key <AD08> { [ i, I, NoSymbol, NoSymbol ] };
+ key <AD09> { [ o, O, NoSymbol, NoSymbol ] };
+ key <AD10> { [ p, P, NoSymbol, NoSymbol ] };
+
+ key <AD11> { [ uacute, slash, bracketleft, less ] };
+ key <AD12> { [parenright, parenleft, bracketright, greater ] };
+
+ key <AC01> { [ a, A, aogonek, Aogonekl ] };
+ key <AC02> { [ s, S, ssharp, U2211 ] };
+ key <AC03> { [ d, D, partialderivate, U2206 ] };
+ key <AC04> { [ f, F, NoSymbol, NoSymbol ] };
+ key <AC05> { [ g, G, NoSymbol, NoSymbol ] };
+ key <AC06> { [ h, H, leftsinglequotemark, leftdoublequotemark]};
+ key <AC07> { [ j, J, rightsinglequotemark, rightdoublequotemark]};
+ key <AC08> { [ k, K, NoSymbol, NoSymbol ] };
+ key <AC09> { [ l, L, lstroke, Lstroke ] };
+
+ key <AC10> { [ uring, quotedbl, semicolon, ellipsis ] };
+ key <AC11> { [ section, exclam, apostrophe, dead_tilde ] };
+ key <BKSL> { [dead_diaeresis, grave, dead_diaeresis, dead_doubleacute]};
+
+ key <LSGT> { [ backslash, bar, NoSymbol, NoSymbol ] };
+ key <AB01> { [ z, Z, zabovedot, Zabovedot ] };
+ key <AB02> { [ x, X, NoSymbol, NoSymbol ] };
+ key <AB03> { [ c, C, NoSymbol, copyright ] };
+ key <AB04> { [ v, V, NoSymbol, squareroot ] };
+ key <AB05> { [ b, B, NoSymbol, NoSymbol ] };
+ key <AB06> { [ n, N, singlelowquotemark, doublelowquotemark]};
+ key <AB07> { [ m, M, NoSymbol, NoSymbol ] };
+ key <AB08> { [ comma, question, less, lessthanequal] };
+ key <AB09> { [ period, colon, greater, greaterthanequal]};
+ key <AB10> { [ minus, underscore, endash, emdash ] };
+
+ key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+
+ include "level3(ralt_switch)"
+};
+
partial alphanumeric_keys alternate_group
xkb_symbols "ucw" {
@@ -118,7 +186,7 @@ xkb_symbols "ucw" {
name[Group1]= "Czech (UCW, only accented letters)";
key <AB01> { [zcaron, Zcaron ] };
- key <AB02> { [ssharp ] };
+ key <AB02> { [ssharp, U1E9E ] };
key <AB03> { [ccaron, Ccaron ] };
key <AB04> { [ccedilla, Ccedilla ] };
key <AB05> { [ntilde, Ntilde ] };
@@ -253,3 +321,163 @@ partial alphanumeric_keys
xkb_symbols "sun_type6" {
include "sun_vndr/cz(sun_type6)"
};
+
+xkb_symbols "prog" {
+ // cz-prog 1.0 2019-05-15 by Viktor Grešák <vgresak@gmail.com> and Tomáš Hudec <Tommy.Hudec@gmail.com>
+ //
+ // Programmer keyboard. Based on the US layout with accented Czech letters and dead keys.
+ // Using AltGr and a key from the 1st row generates original level 2 US key as level 3 except TLDE and AE12.
+ // Using AltGr+Shift on accented letters generates its uppercase variant.
+ // Using AltGr or AltGr+Shift on letters which have accent in Czech but are not on the 1st row directly accessible generate accented letters,
+ // i.e. [d, D], [t, T], [n, N], [o, O] generate with AltGr and AltGr+Shift: [dcaron, Dcaron], [tcaron, Tcaron], [ncaron, Ncaron], [oacute, Oacute].
+ // Other Czech letters besides alphanumeric keys (like uacute, uring) are generated using AltGr.
+
+ name[Group1]="Czech (programming)";
+
+ key <AB01> { [ z, Z ] };
+ key <AB02> { [ x, X ] };
+ key <AB03> { [ c, C ] };
+ key <AB04> { [ v, V ] };
+ key <AB05> { [ b, B ] };
+ key <AB06> { [ n, N, ncaron, Ncaron ] };
+ key <AB07> { [ m, M ] };
+ key <AB08> { [ comma, less, multiply ] };
+ key <AB09> { [ period, greater, division ] };
+ key <AB10> { [ slash, question, dead_abovedot ] };
+ key <AC01> { [ a, A ] };
+ key <AC02> { [ s, S ] };
+ key <AC03> { [ d, D, dcaron, Dcaron ] };
+ key <AC04> { [ f, F ] };
+ key <AC05> { [ g, G ] };
+ key <AC06> { [ h, H ] };
+ key <AC07> { [ j, J ] };
+ key <AC08> { [ k, K ] };
+ key <AC09> { [ l, L ] };
+ key <AC10> { [ semicolon, colon, uring, Uring ] };
+ key <AC11> { [ apostrophe, quotedbl, section ] };
+ key <AD01> { [ q, Q ] };
+ key <AD02> { [ w, W ] };
+ key <AD03> { [ e, E ] };
+ key <AD04> { [ r, R ] };
+ key <AD05> { [ t, T, tcaron, Tcaron ] };
+ key <AD06> { [ y, Y ] };
+ key <AD07> { [ u, U ] };
+ key <AD08> { [ i, I ] };
+ key <AD09> { [ o, O, oacute, Oacute ] };
+ key <AD10> { [ p, P ] };
+ key <AD11> { [ bracketleft, braceleft, uacute, Uacute ] };
+ key <AD12> { [ bracketright, braceright ] };
+ key <AE01> { [ plus, 1, exclam, NoSymbol ] };
+ key <AE02> { [ ecaron, 2, at, Ecaron ] };
+ key <AE03> { [ scaron, 3, numbersign, Scaron ] };
+ key <AE04> { [ ccaron, 4, dollar, Ccaron ] };
+ key <AE05> { [ rcaron, 5, percent, Rcaron ] };
+ key <AE06> { [ zcaron, 6, asciicircum, Zcaron ] };
+ key <AE07> { [ yacute, 7, ampersand, Yacute ] };
+ key <AE08> { [ aacute, 8, asterisk, Aacute ] };
+ key <AE09> { [ iacute, 9, parenleft, Iacute ] };
+ key <AE10> { [ eacute, 0, parenright, Eacute ] };
+ key <AE11> { [ equal, minus, underscore, U2212 ] };
+ key <AE12> { [ dead_acute, dead_caron, plusminus, notequal ] };
+ key <BKSL> { [ backslash, bar, dead_diaeresis ] };
+ key <BKSP> { [ BackSpace, BackSpace ] };
+ key <CAPS> { [ Caps_Lock ] };
+ key <COMP> { [ Menu, Multi_key ] };
+ key <LALT> { [ Alt_L, Meta_L ] };
+ key <LCTL> { [ Control_L ] };
+ key <LFSH> { [ Shift_L ] };
+ key <LWIN> { [ Super_L ] };
+ key <RALT> { [ ISO_Level3_Shift ] };
+ key <RCTL> { [ Control_R ] };
+ key <RTRN> { [ Return ] };
+ key <RTSH> { [ Shift_R ] };
+ key <RWIN> { [ Super_R ] };
+ key <SPCE> { [ space ] };
+ key <TAB> { [ Tab, ISO_Left_Tab ] };
+ key <TLDE> { [ grave, asciitilde ] };
+
+ include "level3(ralt_switch)"
+};
+
+xkb_symbols "typo" {
+ // cz-typo 1.0 2019-05-15 by Viktor Grešák <vgresak@gmail.com> and Tomáš Hudec <Tommy.Hudec@gmail.com>
+ //
+ // Contains typographic symbols in third and fourth level.
+ // It is intended to be used in conjuction with other existing layout, e.g. setxkbmap -symbols "pc+cz(basic)+cz(typo)+inet(evdev)"
+
+ name[Group1]="Czech (typographic)";
+
+ key <AB01> { [ NoSymbol, NoSymbol, degree, U2300 ] };
+ key <AB02> { [ NoSymbol, NoSymbol, multiply, U22C5 ] };
+ key <AB03> { [ NoSymbol, NoSymbol, ampersand, copyright ] };
+ key <AB04> { [ NoSymbol, NoSymbol, at, ordfeminine ] };
+ key <AB05> { [ NoSymbol, NoSymbol, enfilledcircbullet, enopencircbullet ] };
+ key <AB07> { [ NoSymbol, NoSymbol, U203A, U2039 ] };
+ key <AB08> { [ NoSymbol, NoSymbol, doublelowquotemark, leftdoublequotemark ] };
+ key <AB09> { [ NoSymbol, NoSymbol, ellipsis, rightdoublequotemark ] };
+ key <AB10> { [ NoSymbol, NoSymbol, endash, emdash ] };
+ key <AC04> { [ NoSymbol, NoSymbol, UFB00, UFB05 ] };
+ key <AC06> { [ NoSymbol, NoSymbol, U2010, U2011 ] };
+ key <AC07> { [ NoSymbol, NoSymbol, guillemotright, guillemotleft ] };
+ key <AC08> { [ NoSymbol, NoSymbol, dagger, doubledagger ] };
+ key <AC09> { [ NoSymbol, NoSymbol, UFB02, UFB04 ] };
+ key <AC11> { [ NoSymbol, NoSymbol, NoSymbol, UFB03 ] };
+ key <AD04> { [ NoSymbol, NoSymbol, U2030, registered ] };
+ key <AD06> { [ NoSymbol, NoSymbol, leftarrow ] };
+ key <AD07> { [ NoSymbol, NoSymbol, downarrow, uparrow ] };
+ key <AD08> { [ NoSymbol, NoSymbol, rightarrow, UFB01 ] };
+ key <AD10> { [ NoSymbol, NoSymbol, minutes, seconds ] };
+ key <AE01> { [ NoSymbol, NoSymbol, NoSymbol, rightsinglequotemark ] };
+ key <AE11> { [ NoSymbol, NoSymbol, underscore, U2212 ] };
+ key <SPCE> { [ space, space, space, nobreakspace ] };
+ key <TLDE> { [ NoSymbol, NoSymbol, singlelowquotemark, leftsinglequotemark ] };
+};
+
+xkb_symbols "coder" {
+
+ // US layout with Czech chars under AltGr
+ // for touch-typing programmers who need to write Czech occasionally
+ // https://github.com/michalkahle/czech-coder-xkb
+
+ include "us"
+ name[Group1]= "Czech (coder)";
+
+ key <TLDE>{[ grave, asciitilde, semicolon, dead_abovering ]};
+ key <AE02>{[ 2, at, ecaron, Ecaron ]};
+ key <AE03>{[ 3, numbersign, scaron, Scaron ]};
+ key <AE04>{[ 4, dollar, ccaron, Ccaron ]};
+ key <AE05>{[ 5, percent, rcaron, Rcaron ]};
+ key <AE06>{[ 6, asciicircum, zcaron, Zcaron ]};
+ key <AE07>{[ 7, ampersand, yacute, Yacute ]};
+ key <AE08>{[ 8, asterisk, aacute, Aacute ]};
+ key <AE09>{[ 9, parenleft, iacute, Iacute ]};
+ key <AE10>{[ 0, parenright, eacute, Eacute ]};
+ key <AE12>{[ equal, plus, dead_acute, dead_caron ]};
+
+ key <AD03>{[ e, E, e, EuroSign ]};
+ key <AD11>{[ bracketleft, braceleft, uacute, Uacute ]};
+
+ key <AC10>{[ semicolon, colon, uring, Uring ]};
+ key <AC11>{[ apostrophe, quotedbl, section, quotedbl ]};
+ key <BKSL>{[ backslash, bar, dead_diaeresis, apostrophe ]};
+
+ include "level3(ralt_switch)"
+};
+
+xkb_symbols "prog_typo" {
+ // cz-prog-typo 1.0 2019-06-17 by Viktor Grešák <vgresak@gmail.com> and Tomáš Hudec <Tommy.Hudec@gmail.com>
+ //
+ // Programmer + Typographic keyboard. Based on the US layout with accented Czech letters and dead keys.
+ // Using AltGr and a key from the 1st row generates original level 2 US key as level 3 except TLDE and AE12.
+ // Using AltGr+Shift on accented letters generates its uppercase variant.
+ // Using AltGr or AltGr+Shift on letters which have accent in Czech but are not on the 1st row directly accessible generate accented letters,
+ // i.e. [d, D], [t, T], [n, N], [o, O] generate with AltGr and AltGr+Shift: [dcaron, Dcaron], [tcaron, Tcaron], [ncaron, Ncaron], [oacute, Oacute].
+ // Other Czech letters besides alphanumeric keys (like uacute, uring) are generated using AltGr.
+ //
+ // Contains typographic symbols in third and fourth level.
+
+ name[Group1]="Czech (programming, typographic)";
+
+ include "cz(prog)"
+ include "cz(typo)"
+};
diff --git a/test/data/symbols/de b/test/data/symbols/de
index c025a1c..8c1083f 100644
--- a/test/data/symbols/de
+++ b/test/data/symbols/de
@@ -131,7 +131,7 @@ xkb_symbols "T3" {
key <AD11> { [ udiaeresis, Udiaeresis, dead_horn, NoSymbol, U017F, dead_abovering, dead_grave, NoSymbol ] };
key.type[Group1] = "EIGHT_LEVEL";
key <AD12> { [ plus, asterisk, asciitilde, NoSymbol, dead_tilde, dead_macron, at, NoSymbol ] };
-
+
key.type[Group1] = "ONE_LEVEL";
key <CAPS> { [ Caps_Lock ] };
key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC";
@@ -157,7 +157,7 @@ xkb_symbols "T3" {
key <AB04> { [ v, V, guillemotleft, NoSymbol, leftdoublequotemark, leftsinglequotemark, U2039, NoSymbol ] };
key <AB05> { [ b, B, U2039, NoSymbol, rightdoublequotemark, rightsinglequotemark, U203A, NoSymbol ] };
key <AB06> { [ n, N, endash, NoSymbol, U019E, U0220, endash, NoSymbol ] };
- key <AB07> { [ m, M, Greek_mu, NoSymbol, mu, masculine, emdash, NoSymbol ] };
+ key <AB07> { [ m, M, mu, NoSymbol, mu, masculine, emdash, NoSymbol ] };
key.type[Group1] = "EIGHT_LEVEL";
key <AB08> { [ comma, semicolon, U02BB, NoSymbol, ellipsis, multiply, dollar, NoSymbol ] };
key <AB09> { [ period, colon, U200C, NoSymbol, periodcentered, division, numbersign, NoSymbol ] };
@@ -284,7 +284,7 @@ xkb_symbols "sundeadkeys" {
include "de(Sundeadkeys)"
- name[Group1]="German (with Sun dead keys)";
+ name[Group1]="German (Sun dead keys)";
};
@@ -764,51 +764,6 @@ xkb_symbols "pl" {
};
partial alphanumeric_keys
-xkb_symbols "htcdream" {
- include "inet(htcdream)"
-
- name[Group1]= "German";
-
- //second row
- key <AD01> { [ q, Q, Tab, Tab ] };
- key <AD02> { [ w, W, grave, grave ] };
- key <AD03> { [ e, E, EuroSign, EuroSign ] };
- key <AD04> { [ r, R, underscore, underscore ] };
- key <AD05> { [ t, T, sterling, sterling] };
- key <AD06> { [ z, Z, division, division ] };
- key <AD07> { [ u, U, udiaeresis, udiaeresis ] };
- key <AD08> { [ i, I, minus, minus ] };
- key <AD09> { [ o, O, odiaeresis, odiaeresis ] };
- key <AD10> { [ p, P, equal, equal ] };
-
- //third row
- key <AC01> { [ a, A, adiaeresis, adiaeresis ] };
- key <AC02> { [ s, S, ssharp, ssharp] };
- key <AC03> { [ d ,D, backslash, backslash ] };
- key <AC04> { [ f, F, braceleft, braceleft ] };
- key <AC05> { [ g, G, braceright, braceright ] };
- key <AC06> { [ h, H, multiply, multiply ] };
- key <AC07> { [ j, J, colon, colon ] };
- key <AC08> { [ k, K, plus, plus ] };
- key <AC09> { [ l, L, apostrophe, apostrophe ] };
-
- //forth row
- key <AB01> { [ y, Y, bar, bar ] };
- key <AB02> { [ x, X, bracketleft, bracketleft ] };
- key <AB03> { [ c, C, bracketright, bracketright ] };
- key <AB04> { [ v, V, less, less ] };
- key <AB05> { [ b, B, greater, greater ] };
- key <AB06> { [ n, N, semicolon, semicolon ] };
- key <AB07> { [ m, M, quotedbl, quotedbl ] };
- key <AB08> { [ comma, comma, question, question ] };
-
- //fifth row
- key <FK15> { [ at, at, asciitilde, asciitilde ] };
-
- include "level3(alt_switch)"
-};
-
-partial alphanumeric_keys
xkb_symbols "tr" {
// add turkish-specific letters to the basic German layout.
@@ -832,10 +787,10 @@ partial alphanumeric_keys
xkb_symbols "us" {
include "us"
- name[Group1]="German (US, with German letters)";
+ name[Group1]="German (US)";
key <AC01> { [ a, A, adiaeresis, Adiaeresis ] };
- key <AC02> { [ s, S, ssharp, ssharp ] };
+ key <AC02> { [ s, S, ssharp, U1E9E ] };
key <AC10> { [ semicolon, colon, odiaeresis, Odiaeresis ] };
key <AC11> { [ apostrophe, quotedbl, adiaeresis, Adiaeresis ] };
key <AD03> { [ e, E, EuroSign, EuroSign ] };
@@ -854,7 +809,7 @@ xkb_symbols "hu" {
// modify the basic German layout to not have any dead keys and add Hungarian letters
include "de(basic)"
- name[Group1]="German (with Hungarian letters and no dead keys)";
+ name[Group1]="German (with Hungarian letters, no dead keys)";
key <AB01> { [ y, Y, guillemotleft, less ] };
key <AC10> { [odiaeresis, Odiaeresis, eacute, Eacute ] };
@@ -1055,7 +1010,7 @@ xkb_symbols "bone_eszett_home" {
include "de(bone_eszett_home_base)"
- name[Group1]= "German (Bone, eszett home row)";
+ name[Group1]= "German (Bone, eszett in the home row)";
include "shift(both_capslock)"
include "level3(caps_switch)"
@@ -1111,7 +1066,7 @@ xkb_symbols "neo_qwertz" {
include "de(neo_qwertz_base)"
- name[Group1]= "German (Neo qwertz)";
+ name[Group1]= "German (Neo, QWERTZ)";
include "shift(both_capslock)"
include "level3(caps_switch)"
@@ -1134,7 +1089,7 @@ xkb_symbols "neo_qwerty" {
include "de(neo_qwerty_base)"
- name[Group1]= "German (Neo qwerty)";
+ name[Group1]= "German (Neo, QWERTY)";
include "shift(both_capslock)"
include "level3(caps_switch)"
@@ -1146,7 +1101,7 @@ xkb_symbols "neo_qwerty" {
partial alphanumeric_keys
xkb_symbols "lld" {
include "de(basic)"
- name[Group1] = "German Ladin";
+ name[Group1] = "German (Ladin)";
key <AD10> { [ p, P, ediaeresis, Ediaeresis ] };
diff --git a/test/data/symbols/empty b/test/data/symbols/empty
index acdd677..cae3303 100644
--- a/test/data/symbols/empty
+++ b/test/data/symbols/empty
@@ -1,4 +1,4 @@
-default partial alphanumeric_keys modifier_keys
+default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1]= "Empty";
};
diff --git a/test/data/symbols/il b/test/data/symbols/il
index 67487c1..dcd640c 100644
--- a/test/data/symbols/il
+++ b/test/data/symbols/il
@@ -7,7 +7,7 @@
// This implementation extends the standard with Yiddish digraphs
// (a common extension) and Nun Hafukha (a fun character).
-default partial alphanumeric_keys
+default partial alphanumeric_keys
xkb_symbols "basic" {
// uses the kbd layout in use in Israel.
diff --git a/test/data/symbols/in b/test/data/symbols/in
index 79d5099..b3a5ca9 100644
--- a/test/data/symbols/in
+++ b/test/data/symbols/in
@@ -1,5 +1,7 @@
// This layout includes all Indian layouts, including:
-// - Devanagari (Hindi, Marathi, Sanskrit)
+// - Hindi
+// - Marathi
+// - Sanskrit
// - Bangla
// - Gujarati
// - Kannada
@@ -28,7 +30,7 @@
// based on a keyboard map from an 'xkb/symbols/dev' file
// Devangari is the default. Kill me if I am wrong:)
-default partial alphanumeric_keys
+default partial alphanumeric_keys
xkb_symbols "deva" {
// March 2004 -- David Holl <smyrph+dev_xkb@ece.wpi.edu>
name[Group1]="Indian";
@@ -248,20 +250,22 @@ xkb_symbols "ben" {
xkb_symbols "ben_probhat" {
name[Group1]= "Bangla (India, Probhat)";
+ key.type="FOUR_LEVEL";
+
key <ESC> { [ Escape ] };
// numbers
key <TLDE> { [ U200D, asciitilde ] };
- key <AE01> { [ U09E7, exclam ] };
- key <AE02> { [ U09E8, at ] };
- key <AE03> { [ U09E9, numbersign ] };
- key <AE04> { [ U09EA, U09F3 ] };
+ key <AE01> { [ U09E7, exclam, U09F4 ] };
+ key <AE02> { [ U09E8, at, U09F5 ] };
+ key <AE03> { [ U09E9, numbersign, U09F6 ] };
+ key <AE04> { [ U09EA, U09F3, U09F7, U09F2 ] };
key <AE05> { [ U09EB, percent ] };
key <AE06> { [ U09EC, asciicircum ] };
- key <AE07> { [ U09ED, U099E ] };
+ key <AE07> { [ U09ED, U099E, U09FA ] };
key <AE08> { [ U09EE, U09CE ] };
key <AE09> { [ U09EF, parenleft ] };
- key <AE10> { [ U09E6, parenright ] };
+ key <AE10> { [ U09E6, parenright, U09F8, U09F9 ] };
key <AE11> { [ minus, underscore ] };
key <AE12> { [ equal, plus ] };
key <BKSP> { [ BackSpace ] };
@@ -279,17 +283,17 @@ xkb_symbols "ben_probhat" {
key <AD09> { [ U0993, U0994 ] };
key <AD10> { [ U09AA, U09AB ] };
key <AD11> { [ U09C7, U09C8 ] };
- key <AD12> { [ U09CB, U09CC ] };
+ key <AD12> { [ U09CB, U09CC, U09D7 ] };
key <RTRN> { [ Return ] };
// caps, a to '
// key <CAPS> { [ Caps_Lock ] };
- key <AC01> { [ U09BE, U0985 ] };
- key <AC02> { [ U09B8, U09B7 ] };
- key <AC03> { [ U09A1, U09A2 ] };
+ key <AC01> { [ U09BE, U0985, U098C, U09E0 ] };
+ key <AC02> { [ U09B8, U09B7, U09E1, U09E3 ] };
+ key <AC03> { [ U09A1, U09A2, U09C4, U09E2 ] };
key <AC04> { [ U09A4, U09A5 ] };
key <AC05> { [ U0997, U0998 ] };
- key <AC06> { [ U09B9, U0983 ] };
+ key <AC06> { [ U09B9, U0983, U09BD ] };
key <AC07> { [ U099C, U099D ] };
key <AC08> { [ U0995, U0996 ] };
key <AC09> { [ U09B2, U0982 ] };
@@ -306,7 +310,7 @@ xkb_symbols "ben_probhat" {
key <AB06> { [ U09A8, U09A3 ] };
key <AB07> { [ U09AE, U0999 ] };
key <AB08> { [ comma, U09C3 ] };
- key <AB09> { [ U0964, U0981 ] };
+ key <AB09> { [ U0964, U0981, U09BC ] };
key <AB10> { [ U09CD, question ] };
key <BKSL> { [ U200C, U0965 ] };
@@ -465,7 +469,7 @@ xkb_symbols "ben_inscript" {
};
xkb_symbols "ben_gitanjali" {
- name[Group1]= "Bangla (India, Uni Gitanjali)";
+ name[Group1]= "Bangla (India, Gitanjali)";
key <ESC> { [ Escape ] };
// numbers
@@ -1053,7 +1057,7 @@ xkb_symbols "ori" {
// INSCRIPT
partial alphanumeric_keys
xkb_symbols "tam" {
- name[Group1]= "Tamil";
+ name[Group1]= "Tamil (Inscript)";
key <TLDE> { [ U0BCA, U0B92 ] };
@@ -1118,7 +1122,7 @@ xkb_symbols "tam" {
};
partial alphanumeric_keys
-xkb_symbols "tam_unicode" {
+xkb_symbols "tam_tamilnet" {
// Description: A keymap based on the TamilNet'99 typewriter keyboard
// Encoding: Unicode (http://www.unicode.org)
@@ -1128,7 +1132,7 @@ xkb_symbols "tam_unicode" {
// Date : Fri Sep 4 11:32:00 CST 2009
// Mapping:
- name[Group1]= "Tamil (Unicode)";
+ name[Group1]= "Tamil (TamilNet '99)";
// granthas
key <TLDE> { [ apostrophe, asciitilde ] };
@@ -1184,7 +1188,7 @@ xkb_symbols "tam_unicode" {
};
partial alphanumeric_keys
-xkb_symbols "tam_keyboard_with_numerals" {
+xkb_symbols "tam_tamilnet_with_tam_nums" {
// Description: A keymap based on the TamilNet'99 typewriter keyboard
// Encoding: Unicode (http://www.unicode.org)
@@ -1193,7 +1197,7 @@ xkb_symbols "tam_keyboard_with_numerals" {
// Date : Fri Sep 4 11:33:00 CST 2009
// Mapping:
- name[Group1]= "Tamil (keyboard with numerals)";
+ name[Group1]= "Tamil (TamilNet '99 with Tamil numerals)";
// Mainly numbers.
key <TLDE> { [ apostrophe, asciitilde ] };
@@ -1249,7 +1253,7 @@ xkb_symbols "tam_keyboard_with_numerals" {
};
partial alphanumeric_keys
-xkb_symbols "tam_TSCII" {
+xkb_symbols "tam_tamilnet_TSCII" {
// Description : A Tamil typewrite-style keymap
// loosely based on TamilNet'99 reommendations
@@ -1257,7 +1261,7 @@ xkb_symbols "tam_TSCII" {
// Author : Thuraiappah Vaseeharan <vasee@ieee.org>
// Last Modified: Sat Jan 5 17:11:26 CST 2002
- name[Group1]= "Tamil (TSCII typewriter)";
+ name[Group1]= "Tamil (TamilNet '99, TSCII encoding)";
key <AE01> { [ 0x10000b7, 0x10000a4 ] }; // aytham
key <AE02> { [ 0x1000082, 0x10000a5 ] }; // shri
@@ -1305,14 +1309,14 @@ xkb_symbols "tam_TSCII" {
};
partial alphanumeric_keys
-xkb_symbols "tam_TAB" {
+xkb_symbols "tam_tamilnet_TAB" {
// Description: A keymap based on the TamilNet'99 typewriter keyboard
// Encoding: TAB (http://www.tamilnet99.org)
// Author: Thuraiappah Vaseeharan <t_vasee@yahoo.com>
// Date : Sun Aug 12 02:23:00 CDT 2001
- name[Group1]= "Tamil (TAB typewriter)";
+ name[Group1]= "Tamil (TamilNet '99, TAB encoding)";
// numeral row
key <AE01> { [ 0x10000e7, 0x10000a7 ] } ;
@@ -1517,7 +1521,7 @@ xkb_symbols "urd-phonetic3" {
partial alphanumeric_keys
xkb_symbols "urd-winkeys" {
include "pk(urd-nla)"
- name[Group1]= "Urdu (Win keys)";
+ name[Group1]= "Urdu (Windows)";
};
// based on a keyboard map from an 'xkb/symbols/gur' file
@@ -1910,7 +1914,7 @@ xkb_symbols "mal_enhanced" {
//
partial alphanumeric_keys
xkb_symbols "hin-kagapa" {
- name[Group1] = "Hindi (KaGaPa phonetic)";
+ name[Group1] = "Hindi (KaGaPa, phonetic)";
key.type="FOUR_LEVEL";
// Roman digits
@@ -1976,14 +1980,14 @@ xkb_symbols "hin-kagapa" {
partial alphanumeric_keys
xkb_symbols "san-kagapa" {
include "in(hin-kagapa)"
- name[Group1] = "Sanskrit (KaGaPa phonetic)";
+ name[Group1] = "Sanskrit (KaGaPa, phonetic)";
};
// Marathi uses Devanagari layout of Hindi
partial alphanumeric_keys
xkb_symbols "mar-kagapa" {
include "in(hin-kagapa)"
- name[Group1] = "Marathi (KaGaPa phonetic)";
+ name[Group1] = "Marathi (KaGaPa, phonetic)";
};
@@ -2001,7 +2005,7 @@ xkb_symbols "mar-kagapa" {
//
partial alphanumeric_keys
xkb_symbols "kan-kagapa" {
- name[Group1] = "Kannada (KaGaPa phonetic)";
+ name[Group1] = "Kannada (KaGaPa, phonetic)";
key.type="FOUR_LEVEL";
// Roman digits
@@ -2078,7 +2082,7 @@ xkb_symbols "kan-kagapa" {
//
partial alphanumeric_keys
xkb_symbols "tel-kagapa" {
- name[Group1] = "Telugu (KaGaPa phonetic)";
+ name[Group1] = "Telugu (KaGaPa, phonetic)";
key.type="FOUR_LEVEL";
// Roman digits
@@ -2205,3 +2209,191 @@ xkb_symbols "eeyek" {
include "level3(ralt_switch)"
};
+
+// This layout is developed by Niranjan Tambe in July 2019
+// for typing Indic languages in International Phonetic Alphabet (IPA).
+
+partial alphanumeric_keys modifier_keys
+xkb_symbols "iipa" {
+
+ name[Group1]= "Indic IPA (IIPA)";
+ key <AE01> { [ 1, exclam] };
+ key <AE02> { [ 2, at] };
+ key <AE03> { [ 3, numbersign] };
+ key <AE04> { [ 4, U20B9] };
+ key <AE05> { [ 5, percent] };
+ key <AE06> { [ 6, asciicircum] };
+ key <AE07> { [ 7, ampersand] };
+ key <AE08> { [ 8, asterisk] };
+ key <AE09> { [ 9, parenleft] };
+ key <AE10> { [ 0, parenright] };
+ key <AE11> { [ minus, underscore] };
+ key <AE12> { [ equal, plus] };
+
+ key <AD01> { [ U02B0, U02B1] }; // [ʰ], [ʱ]
+ key <AD02> { [ U00E6, q] }; // [æ], [q] found in Urdu
+ key <AD03> { [ a, U028B] }; // [a], [ʋ]
+ key <AD04> { [ i, U026A] }; // [i] [ɪ]
+ key <AD05> { [ u, U026F] }; // [u] [ɯ] found in Tamil
+ key <AD06> { [ b, Y] }; // [b]
+ key <AD07> { [ h, U014B] }; // [h], [ŋ]
+ key <AD08> { [ g, U0263] }; // [g], [ɣ] found in Urdu
+ key <AD09> { [ d, U00F0] }; // [d], [ð] found in Malayalam
+ key <AD10> { [ U02A4, U02A3] }; // [ʤ], [ʣ] found in Marathi
+ key <AD11> { [ U0256, U027D] }; // [ɖ], [ɽ]
+ key <AD12> { [ bracketleft, bracketright] }; // "[", "]" needed for denoting phonetic symbols
+
+ key <AC01> { [ o, U0254] }; // [o], [ɔ] found in Bangla
+ key <AC02> { [ e, U025B] }; // [e], [ɛ]
+ key <AC03> { [ U0259, U0361] }; // [ə], [ ͡ ]
+ key <AC04> { [ i, U026A] }; // [i], [ɪ]
+ key <AC05> { [ u, U026F] }; // [u], [ɯ]
+ key <AC06> { [ p, f] }; // [p], [f]
+ key <AC07> { [ U027E, r] }; // [ɾ], [r]
+ key <AC08> { [ k, x] }; // [k], [x] found in Urdu
+ key <AC09> { [ t, U03B8] }; // [t], [θ]
+ key <AC10> { [ U02A7, U02A6] }; // [ʧ], [ʦ] found in Marathi
+ key <AC11> { [ U0288, quotedbl] }; // [ʈ]
+ key <TLDE> { [ grave, asciitilde] };
+
+ key <BKSL> { [ backslash, bar] };
+ key <AB01> { [ U032A, U0303] }; // [ ̪], [ ̃] Dental mark, nasalisation mark
+ key <AB02> { [ U0306, X] }; // [ ̆] Short sound
+ key <AB03> { [ m, U0273] }; // [m], [ɳ]
+ key <AB04> { [ n, v] }; // [n], [v]
+ key <AB05> { [ w, z] }; // [w], [z]
+ key <AB06> { [ l, U026D] }; // [l], [ɭ]
+ key <AB07> { [ s, U0283] }; // [s], [ʃ]
+ key <AB08> { [ comma, U0282] }; // [ʂ]
+ key <AB09> { [ period, U02D0] }; // [ː] Long sound
+ key <AB10> { [ j, slash] }; // [j]
+
+};
+
+// This layout is developed by Niranjan Tambe in July 2019
+// for typing Marathi language with some necessary symbols.
+
+xkb_symbols "marathi" {
+ name[Group1]="मराठी इन्स्क्रिप्ट";
+ key <TLDE> { [ U0962, U090C, grave, asciitilde ] }; // Added ॢ & ऌ
+ key <AE01> { [ U0967, exclam, 1, exclam ] }; // Added exclamation mark
+ key <AE02> { [ U0968, U0945, 2, at ] }; // Added ॅ
+ key <AE03> { [ U0969, U093D, 3, numbersign ] }; // Added ऽ
+ key <AE04> { [ U096a, U20B9, 4 ] }; // Added ₹
+ key <AE05> { [ U096b, percent, 5, percent ] };
+ key <AE06> { [ U096c, asciicircum, 6, asciicircum ] };
+ key <AE07> { [ U096d, U0970, 7, ampersand ] }; // Added ॰
+ key <AE08> { [ U096e, U0950, 8, asterisk ] };
+ key <AE09> { [ U096f, parenleft, 9, parenleft ] };
+ key <AE10> { [ U0966, parenright, 0, parenright ] };
+ key <AE11> { [ minus, U0903, minus, underscore ] };
+ key <AE12> { [ U0943, U090b, U0944, U0960 ] };
+
+ key <AD01> { [ U094c, U0914 ] };
+ key <AD02> { [ U0948, U0910 ] };
+ key <AD03> { [ U093e, U0906 ] };
+ key <AD04> { [ U0940, U0908, U0963, U0961 ] };
+ key <AD05> { [ U0942, U090a ] };
+ key <AD06> { [ U092c, U092d ] };
+ key <AD07> { [ U0939, U0919 ] };
+ key <AD08> { [ U0917, U0918, U095a ] };
+ key <AD09> { [ U0926, U0927 ] };
+ key <AD10> { [ U091c, U091d, U095b ] };
+ key <AD11> { [ U0921, U0922, U095c, U095d ] };
+ key <AD12> { [ U093c, U091e ] };
+ key <BKSL> { [ U0949, U0911, U005C, U007C ] };
+
+ key <AC01> { [ U094b, U0913 ] };
+ key <AC02> { [ U0947, U090f ] };
+ key <AC03> { [ U094d, U0905 ] };
+ key <AC04> { [ U093f, U0907, U0962, U090c ] };
+ key <AC05> { [ U0941, U0909 ] };
+ key <AC06> { [ U092a, U092b, NoSymbol, U095e ] };
+ key <AC07> { [ U0930, U0931 ] };
+ key <AC08> { [ U0915, U0916, U0958, U0959 ] };
+ key <AC09> { [ U0924, U0925 ] };
+ key <AC10> { [ U091a, U091b, U0952 ] };
+ key <AC11> { [ U091f, U0920, NoSymbol, U0951 ] };
+
+ key <AB01> { [ apostrophe, U0972, U0953 ] }; // Added apostrophe & ॲ
+ key <AB02> { [ U0902, U0901, NoSymbol, U0950 ] };
+ key <AB03> { [ U092e, U0923, U0954 ] };
+ key <AB04> { [ U0928, quotedbl ] }; // Added "
+ key <AB05> { [ U0935, UA8FB ] }; // Added headstroke
+ key <AB06> { [ U0932, U0933 ] };
+ key <AB07> { [ U0938, U0936 ] };
+ key <AB08> { [ comma, U0937, U0970 ] };
+ key <AB09> { [ period, U0964, U0965, U093d ] };
+ key <AB10> { [ U092f, question, slash, question ] };
+};
+
+// EXTRAS:
+
+// Modi is an ancient Indian script that is used to write texts in Marathi, Hindi and Sanskrit.
+// This keyboard layout is Based on Marathi KaGaPa phonetic layout. Just the characters which are not applicable in modi, are ommited.
+//
+// Author : D.Abhi <abhishekdeshpande128@gmail.com>
+//
+//
+partial alphanumeric_keys
+xkb_symbols "modi-kagapa" {
+ name[Group1] = "Modi (KaGaPa phonetic)";
+ key.type="FOUR_LEVEL";
+
+ // Roman digits
+ key <TLDE> { [ apostrophe, asciitilde, U201C ] }; // U201C: left double quotation mark
+ key <AE01> { [ 1, exclam, U11651 ] };
+ key <AE02> { [ 2, at, U11652, U20A8 ] }; // U20A8: generic rupee sign (Rs)
+ key <AE03> { [ 3, numbersign, U11653 ] };
+ key <AE04> { [ 4, dollar, U11654, U20B9 ] }; // U20B9: new Indian rupee sign
+ key <AE05> { [ 5, percent, U11655 ] };
+ key <AE06> { [ 6, asciicircum, U11656, U200C ] }; // ZWNJ
+ key <AE07> { [ 7, ampersand, U11657, U200D ] }; // ZWJ
+ key <AE08> { [ 8, asterisk, U11658 ] };
+ key <AE09> { [ 9, parenleft, U11659 ] };
+ key <AE10> { [ 0, parenright, U11650, U11643 ] }; // U11643: Modi abbreviation sign
+ key <AE11> { [ minus, underscore ] };
+ key <AE12> { [ equal, plus ] };
+ key <BKSL> { [ U005C, U007C, U11641, U11642 ] }; // backslash, pipe, Modi danda, Modi double danda
+
+ //Q Row
+ key <AD01> { [ U11618, U11619 ] }; // Q: retroflex Modi letter Ta, Tha
+ key <AD02> { [ U1161A, U1161B ] }; // W: retroflex Modi letter Da, Dha
+ key <AD03> { [ U11639, U1160A, U1160B ] }; // E: Modi vovel sign E, Modi letter E, letter ai
+ key <AD04> { [ U11628, U11635, U11606 ] }; // R: Modi ra, Modi vowel sign vocalic R, vocalic letter R
+ key <AD05> { [ U1161D, U1161E ] }; // T: dental Modi letter ta, tha
+ key <AD06> { [ U11627, U1163A ] }; // Y: Modi letter ya, Modi vowel sign ai
+ key <AD07> { [ U11633, U11634, U11604, U11605 ] }; // U: Modi vowel sign u, uu, Modi letter u, uu
+ key <AD08> { [ U11631, U11632, U11602, U11603 ] }; // I: Modi vowel sign i, ii, Modi letter i, ii
+ key <AD09> { [ U1163B, U1160C ] }; // O: Modi vowel sign o, Modi letter o
+ key <AD10> { [ U11622, U11623 ] }; // P: Modi letter pa, pha
+ key <AD11> { [ bracketleft, braceleft ] };
+ key <AD12> { [ bracketright, braceright ] };
+
+ //A Row
+ key <AC01> { [ U11630, U11601, U11600 ] }; // A: Modi vowel sign aa, Modi letter aa, Modi letter a
+ key <AC02> { [ U1162D, U1162B ] }; // S: Modi letter sa, sha
+ key <AC03> { [ U1161F, U11620 ] }; // D: dental Modi letter da, dha
+ key <AC04> { [ U1163F, U11636, U11607 ] }; // F: Modi sign virama, Modi vowel sign vocalic RR, letter vocalic RR
+ key <AC05> { [ U11610, U11611 ] }; // G: Modi letter ga, gha
+ key <AC06> { [ U1162E, U1163E ] }; // H: Modi letter ha, Modi visarga
+ key <AC07> { [ U11615, U11616 ] }; // J: Modi letter ja, jha
+ key <AC08> { [ U1160E, U1160F ] }; // K: Modi letter ka, kha
+ key <AC09> { [ U11629, U1162F, U11637, U11608 ] }; // L: Modi letter la, lla, Modi vowel sign vocalic L, letter vocalic L
+ key <AC10> { [ semicolon, colon ] };
+ key <AC11> { [ apostrophe, quotedbl ] };
+
+ //Z Row
+ key <AB01> { [ U11617, U11612 ] }; // Z: Modi letter nya, nga
+ key <AB02> { [ U1162C, U11609, U11638 ] }; // X: Modi letter ssa, Modi letter vocalic ll, Modi vowel sign vocalic ll
+ key <AB03> { [ U11613, U11614 ] }; // C: Modi letter ca, cha
+ key <AB04> { [ U1162A, U1163C, U1160D ] }; // V: Modi letter va, Modi vowel sign au, Modi letter au
+ key <AB05> { [ U11624, U11625 ] }; // B: Modi letter ba, bha
+ key <AB06> { [ U11621, U1161C ] }; // N: Modi letter na, nna
+ key <AB07> { [ U11626, U1163D, U093D, U0950 ] }; // M: Modi ma, Modi anusvara, avagraha, Devanagari OM
+ key <AB08> { [ comma, U003C, U11640, U11644 ] }; // comma: comma, less than, Modi chandrabindu, Modi sign huva
+ key <AB09> { [ period, U003E ] }; // period: period, greater than, matra, candra o
+ key <AB10> { [ slash, question ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/test/data/symbols/inet b/test/data/symbols/inet
index 5403e77..049ac18 100644
--- a/test/data/symbols/inet
+++ b/test/data/symbols/inet
@@ -184,7 +184,7 @@ xkb_symbols "evdev" {
key <I218> { [ Print ] };
// key <I219> { [ ] }; // KEY_HP
key <I220> { [ XF86WebCam ] };
-// key <I221> { [ ] }; // KEY_SOUND
+ key <I221> { [ XF86AudioPreset ] };
// key <I222> { [ ] }; // KEY_QUESTION
key <I223> { [ XF86Mail ] };
key <I224> { [ XF86Messenger ] }; // KEY_CHAT
@@ -212,11 +212,16 @@ xkb_symbols "evdev" {
key <I246> { [ XF86WLAN ] };
// key <I249> { [ ] }; // KEY_VIDEO_NEXT -- drive next video source
// key <I250> { [ ] }; // KEY_VIDEO_PREV -- drive previous video source
-// key <I251> { [ ] }; // KEY_BRIGHTNESS_CYCLE -- bright up, max++ == min
+ key <I251> { [ XF86MonBrightnessCycle ] }; // KEY_BRIGHTNESS_CYCLE -- bright up, max++ == min
// key <I252> { [ ] }; // KEY_BRIGHTNESS_ZERO -- brightness off
// key <I253> { [ ] }; // KEY_DISPLAY_OFF -- turn off display
-// key <I254> { [ ] }; // KEY_WIMAX
- key <I255> { [ XF86Hibernate ] }; // KEY_HIBERNATE
+ key <I254> { [ XF86WWAN ] }; // KEY_WWAN
+ key <I255> { [ XF86RFKill ] }; // KEY_RFKILL
+
+ key <I372> { [ XF86Favorites ] };
+ key <I382> { [ XF86Keyboard ] };
+ key <I569> { [ XF86RotationLockToggle ] };
+ key <I380> { [ XF86FullScreen ] };
key <FK13> { [ XF86Tools ] };
key <FK14> { [ XF86Launch5 ] };
@@ -1422,6 +1427,16 @@ xkb_symbols "microsoftmult" {
key <I80> { [ XF86Documents ] };
};
+// Microsoft Surface
+partial alphanumeric_keys
+xkb_symbols "microsoftsurface" {
+ include "inet(evdev)"
+ key <I88> { [ XF86Search ] };
+ key <I163> { [ XF86AudioPrev ] };
+ key <I164> { [ XF86AudioPlay, XF86AudioPause ] };
+ key <I165> { [ XF86AudioNext ] };
+};
+
// Oretec
@@ -1850,32 +1865,6 @@ xkb_symbols "pc105" {
include "inet(media_nav_acpi_common)"
};
-
-// HTC Dream
-partial alphanumeric_keys
-xkb_symbols "htcdream" {
- key <BKSP> { [ BackSpace ] };
- key <RTRN> { [ Return ] };
-
- key <AE01> { [ 1, 1, exclam, exclam ] };
- key <AE02> { [ 2, 2, at, at ] };
- key <AE03> { [ 3, 3, numbersign, numbersign ] };
- key <AE04> { [ 4, 4, dollar, dollar ] };
- key <AE05> { [ 5, 5, percent, percent ] };
- key <AE06> { [ 6, 6, dead_circumflex, dead_circumflex ] };
- key <AE07> { [ 7, 7, ampersand, ampersand ] };
- key <AE08> { [ 8, 8, asterisk, asterisk ] };
- key <AE09> { [ 9, 9, parenleft, parenleft ] };
- key <AE10> { [ 0, 0, parenright, parenright ] };
-
- key <LFSH> { [ Shift_L ] };
- key <SPCE> { [ space ] };
- key <AB09> { [ period, period, slash, slash ] };
- key <RTSH> { [ Shift_R ] };
-
- modifier_map Shift { <LFSH>, <RTSH> };
-};
-
partial alphanumeric_keys
xkb_symbols "chromebook" {
include "level3(ralt_switch)"
@@ -1907,3 +1896,4 @@ partial alphanumeric_keys
xkb_symbols "teck229" {
include "inet(teck227)"
};
+
diff --git a/test/data/symbols/latin b/test/data/symbols/latin
index d88e3c4..50ded1f 100644
--- a/test/data/symbols/latin
+++ b/test/data/symbols/latin
@@ -1,6 +1,6 @@
// Common Latin alphabet layout
-default partial
+default partial
xkb_symbols "basic" {
key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
diff --git a/test/data/symbols/level3 b/test/data/symbols/level3
index 1aef970..0042743 100644
--- a/test/data/symbols/level3
+++ b/test/data/symbols/level3
@@ -3,7 +3,7 @@
// The default behaviour:
// the right Alt key (AltGr) chooses the third symbol engraved on a key.
-default partial modifier_keys
+default partial modifier_keys
xkb_symbols "ralt_switch" {
key <RALT> {
type[Group1]="ONE_LEVEL",
@@ -209,3 +209,21 @@ xkb_symbols "lsgt_switch_latch" {
};
include "level3(modifier_mapping)"
};
+
+// Number key 4 chooses third shift level when pressed in isolation.
+partial modifier_keys
+xkb_symbols "4_switch_isolated" {
+ override key <AE04> {
+ symbols[Group1] = [ ISO_Level3_Shift ]
+ };
+ include "level3(modifier_mapping)"
+};
+
+// Number key 9 chooses third shift level when pressed in isolation.
+partial modifier_keys
+xkb_symbols "9_switch_isolated" {
+ override key <AE09> {
+ symbols[Group1] = [ ISO_Level3_Shift ]
+ };
+ include "level3(modifier_mapping)"
+};
diff --git a/test/data/symbols/macintosh_vndr/apple b/test/data/symbols/macintosh_vndr/apple
index 53d260c..342eb7d 100644
--- a/test/data/symbols/macintosh_vndr/apple
+++ b/test/data/symbols/macintosh_vndr/apple
@@ -2,7 +2,7 @@
// Keyboard modification for Apple keyboards
//
-partial default modifier_keys
+default partial modifier_keys
xkb_symbols "extended" {
key <KPEQ> { [ KP_Equal ] };
diff --git a/test/data/symbols/pc b/test/data/symbols/pc
index 0199713..dbe08bb 100644
--- a/test/data/symbols/pc
+++ b/test/data/symbols/pc
@@ -1,4 +1,4 @@
-default partial alphanumeric_keys modifier_keys
+default partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {
key <ESC> { [ Escape ] };
diff --git a/test/data/symbols/ru b/test/data/symbols/ru
index 964705c..7fd8f45 100644
--- a/test/data/symbols/ru
+++ b/test/data/symbols/ru
@@ -2,9 +2,10 @@
// AEN <aen@logic.ru>
// 2001/12/23 by Leon Kanter <leon@blackcatlinux.com>
// 2005/12/09 Valery Inozemtsev <shrek@altlinux.ru>
+// 2018/07/15 @a13 (a.k.a. @dbvvmpg) and Stepanenko Andrey <ftvkyo2011@yandex.ru>
// Windows layout
-default partial alphanumeric_keys
+default partial alphanumeric_keys
xkb_symbols "winkeys" {
include "ru(common)"
@@ -215,7 +216,7 @@ partial alphanumeric_keys
xkb_symbols "phonetic_winkeys" {
include "ru(phonetic)"
- name[Group1]= "Russian (phonetic, with Win keys)";
+ name[Group1]= "Russian (phonetic, Windows)";
key <LatX> { [ Cyrillic_ha, Cyrillic_HA ] };
key <LatH> { [ Cyrillic_che, Cyrillic_CHE ] };
@@ -223,6 +224,15 @@ xkb_symbols "phonetic_winkeys" {
};
partial alphanumeric_keys
+xkb_symbols "phonetic_YAZHERTY" {
+ include "ru(phonetic_winkeys)"
+ name[Group1]= "Russian (phonetic, YAZHERTY)";
+ key <LatW> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <LatV> { [ Cyrillic_ve, Cyrillic_VE ] };
+};
+
+
+partial alphanumeric_keys
xkb_symbols "tt" {
include "ru(winkeys)"
@@ -230,12 +240,12 @@ xkb_symbols "tt" {
key.type[group1]="FOUR_LEVEL";
- key <TLDE> { [ 0x010004bb, 0x010004ba, Cyrillic_io, Cyrillic_IO ] };
- key <AD02> { [ 0x010004e9, 0x010004e8, Cyrillic_tse, Cyrillic_TSE ] };
- key <AD09> { [ 0x010004d9, 0x010004d8, Cyrillic_shcha, Cyrillic_SHCHA ] };
- key <AD12> { [ 0x010004af, 0x010004ae, Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
- key <AC10> { [ 0x010004a3, 0x010004a2, Cyrillic_zhe, Cyrillic_ZHE ] };
- key <AB07> { [ 0x01000497, 0x01000496, Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
+ key <TLDE> { [ Cyrillic_shha, Cyrillic_SHHA, Cyrillic_io, Cyrillic_IO ] };
+ key <AD02> { [ Cyrillic_o_bar, Cyrillic_O_bar, Cyrillic_tse, Cyrillic_TSE ] };
+ key <AD09> { [ Cyrillic_schwa, Cyrillic_SCHWA, Cyrillic_shcha, Cyrillic_SHCHA ] };
+ key <AD12> { [ Cyrillic_u_straight, Cyrillic_U_straight, Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
+ key <AC10> { [ Cyrillic_en_descender, Cyrillic_EN_descender, Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <AB07> { [ Cyrillic_zhe_descender, Cyrillic_ZHE_descender, Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
include "level3(ralt_switch)"
};
@@ -255,7 +265,7 @@ partial alphanumeric_keys
xkb_symbols "os_winkeys" {
include "ru(winkeys)"
- name[Group1]= "Ossetian (Win keys)";
+ name[Group1]= "Ossetian (Windows)";
key <TLDE> { [ Cyrillic_e, Cyrillic_E ] };
key <AC07> { [ Cyrillic_o, Cyrillic_O, Cyrillic_io, Cyrillic_IO ] };
@@ -434,20 +444,20 @@ xkb_symbols "bak" {
key.type[group1]="FOUR_LEVEL";
- key <TLDE> { [ 0x010004d9, 0x010004d8, Cyrillic_io, Cyrillic_IO ] };
- key <AE01> { [ exclam, quotedbl, 1, 1 ] };
- key <AE02> { [ 0x010004e9, 0x010004e8, 2, 2 ] };
- key <AE03> { [ 0x010004a1, 0x010004a0, 3, 3 ] };
- key <AE04> { [ 0x01000493, 0x01000492, 4, 4 ] };
- key <AE05> { [ 0x010004ab, 0x010004aa, 5, 5 ] };
- key <AE06> { [ colon, semicolon, 6, 6 ] };
- key <AE07> { [ 0x01000499, 0x01000498, 7, 7 ] };
- key <AE08> { [ 0x010004bb, 0x010004ba, 8, 8 ] };
- key <AE09> { [ question, parenleft, 9, 9 ] };
- key <AE10> { [ numerosign, parenright, 0, 0 ] };
- key <AE11> { [ minus, percent, minus, underscore ] };
- key <AE12> { [ 0x010004af, 0x010004ae, equal, plus ] };
- key <BKSL> { [ 0x010004a3, 0x010004a2, backslash, slash ] };
+ key <TLDE> { [ Cyrillic_schwa, Cyrillic_SCHWA, Cyrillic_io, Cyrillic_IO ] };
+ key <AE01> { [ exclam, quotedbl, 1, 1 ] };
+ key <AE02> { [ Cyrillic_o_bar, Cyrillic_O_bar, 2, 2 ] };
+ key <AE03> { [ 0x010004a1, 0x010004a0, 3, 3 ] };
+ key <AE04> { [ Cyrillic_ghe_bar, Cyrillic_GHE_bar, 4, 4 ] };
+ key <AE05> { [ 0x010004ab, 0x010004aa, 5, 5 ] };
+ key <AE06> { [ colon, semicolon, 6, 6 ] };
+ key <AE07> { [ 0x01000499, 0x01000498, 7, 7 ] };
+ key <AE08> { [ Cyrillic_shha, Cyrillic_SHHA, 8, 8 ] };
+ key <AE09> { [ question, parenleft, 9, 9 ] };
+ key <AE10> { [ numerosign, parenright, 0, 0 ] };
+ key <AE11> { [ minus, percent, minus, underscore ] };
+ key <AE12> { [ Cyrillic_u_straight, Cyrillic_U_straight, equal, plus ] };
+ key <BKSL> { [ Cyrillic_en_descender, Cyrillic_EN_descender, backslash, slash ] };
include "level3(ralt_switch)"
};
@@ -517,7 +527,7 @@ xkb_symbols "phonetic_azerty" {
key <AE11> { [parenright, degree, bracketright, questiondown ] };
key <AE12> { [ equal, plus, braceright, dead_ogonek ] };
- key <AB07> { [ comma, question, acute, doubleacute ] };
+ key <AB07> { [ comma, question, acute, doubleacute ] };
key <AB08> { [ semicolon, period, horizconnector, multiply ] };
key <AB09> { [ colon, slash, periodcentered, division ] };
key <AB10> { [ exclam, section, dead_belowdot, dead_abovedot ] };
@@ -629,77 +639,92 @@ xkb_symbols "phonetic_fr" {
name[Group1]= "Russian (phonetic, French)";
};
+// EXTRAS:
+
// Rulemak, Colemak based Russian phonetic layout
// contact: Geert Hendrickx <geert@hendrickx.be>
// http://forum.colemak.com/viewtopic.php?id=519
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ Ё ``│ ! ˝ │ @ │ № │ $ │ % │ ^ ¯ │ & │ * ₴ │ ( │ ) │ _ — │ Ъ + ┃ ⌫ ┃
+// │ ё ` │ 1 ´ │ 2 ¨ │ 3 # │ 4 ¢ │ 5 € │ 6 ˘ │ 7 │ 8 ₽ │ 9 [ │ 0 ] │ - – │ ъ = ┃Backspace┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃ ┃ Я Ѣ │ Ж Ѵ │ Ф Ѳ │ П │ Г Ґ │ й Ј │ Л Љ │ У Ў │ Ы Ї │ Ю : │ Ш { │ Щ } ┃ Enter ┃
+// ┃ Tab ↹ ┃ я ѣ │ ж ѵ │ ф ѳ │ п │ г ґ │ й ј │ л љ │ у ў │ ы ї │ ю ; │ ш « │ щ » ┃ ⏎ ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
+// ┃ ⌫ Back ┃ А │ Р │ С │ Т Ћ │ Д Ђ │ Ч Џ │ Н Њ │ Е Є │ И І │ О │ Ь " │ Э | ┃ ┃
+// ┃ space ┃ а │ р │ с │ т ћ │ д ђ │ ч џ │ н њ │ е є │ и і │ о │ ь ' │ э \ ┃ ┃
+// ┣━━━━━━━━┻━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┲━━━┷━━━━━┻━━━━━━┫
+// ┃ ┃ З Ѕ │ Х │ Ц │ В │ Б Ѓ │ К Ќ │ М │ ; │ : │ ? Ӏ ┃ ┃
+// ┃ Shift ⇧ ┃ з ѕ │ х │ ц │ в │ б ѓ │ к ќ │ м │ , < │ . > │ / ӏ ┃ Shift ⇧ ┃
+// ┣━━━━━━━┳━━┻━━━━┳┷━━━━━┷┱────┴─────┴─────┴─────┴─────┴─────┴┲━━━━┷━━┳━━┻━━━━┳━━━━━━━┳━━━┛
+// ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
+// ┃ Ctrl ┃ Meta ┃ Alt ┃ Space ┃AltGr ⇮┃ Menu ┃ Ctrl ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
partial alphanumeric_keys
xkb_symbols "rulemak" {
- include "us(basic)"
name[Group1]= "Russian (Rulemak, phonetic Colemak)";
- key <TLDE> { [ Cyrillic_io, Cyrillic_IO, U0300, asciitilde ] };
- key <AE01> { [ 1, exclam, U0301 ] };
- key <AE02> { [ 2, at, U030B ] };
+ key <TLDE> { [ Cyrillic_io, Cyrillic_IO, U0300, U030F ] }; // Combining grave, double grave
+ key <AE01> { [ 1, exclam, U0301, U030B ] }; // Combining acute, double acute
+ key <AE02> { [ 2, at, U0308 ] }; // Combining diaeresis
key <AE03> { [ 3, numerosign, numbersign ] };
key <AE04> { [ 4, dollar, cent ] };
key <AE05> { [ 5, percent, EuroSign ] };
- key <AE06> { [ 6, asciicircum, U0306 ] };
- key <AE07> { [ 7, ampersand, U0307 ] };
- key <AE08> { [ 8, asterisk, U20BD ] };
+ key <AE06> { [ 6, asciicircum, U0306, U0304 ] }; // Combining breve, macron
+ key <AE07> { [ 7, ampersand ] };
+ key <AE08> { [ 8, asterisk, U20BD, U20B4 ] }; // ruble, hryvnia
key <AE09> { [ 9, parenleft, bracketleft ] };
key <AE10> { [ 0, parenright, bracketright ] };
key <AE11> { [ minus, underscore, endash, emdash ] };
key <AE12> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN, equal, plus ] };
- key <AD01> { [ Cyrillic_ya, Cyrillic_YA, q, Q ] };
- key <AD02> { [ Cyrillic_zhe, Cyrillic_ZHE, w, W ] };
- key <AD03> { [ Cyrillic_ef, Cyrillic_EF, f, F ] };
- key <AD04> { [ Cyrillic_pe, Cyrillic_PE, p, P ] };
- key <AD05> { [ Cyrillic_ghe, Cyrillic_GHE, g, G ] };
- key <AD06> { [ Cyrillic_shorti, Cyrillic_SHORTI, j, J ] };
- key <AD07> { [ Cyrillic_el, Cyrillic_EL, l, L ] };
- key <AD08> { [ Cyrillic_u, Cyrillic_U, u, U ] };
- key <AD09> { [ Cyrillic_yeru, Cyrillic_YERU, y, Y ] };
+ key <AD01> { [ Cyrillic_ya, Cyrillic_YA, U0463, U0462 ] }; // yat
+ key <AD02> { [ Cyrillic_zhe, Cyrillic_ZHE, U0475, U0474 ] }; // izhitsa
+ key <AD03> { [ Cyrillic_ef, Cyrillic_EF, U0473, U0472 ] }; // fita
+ key <AD04> { [ Cyrillic_pe, Cyrillic_PE ] };
+ key <AD05> { [ Cyrillic_ghe, Cyrillic_GHE, Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
+ key <AD06> { [ Cyrillic_shorti, Cyrillic_SHORTI, Cyrillic_je, Cyrillic_JE ] };
+ key <AD07> { [ Cyrillic_el, Cyrillic_EL, Cyrillic_lje, Cyrillic_LJE ] };
+ key <AD08> { [ Cyrillic_u, Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU ] };
+ key <AD09> { [ Cyrillic_yeru, Cyrillic_YERU, Ukrainian_yi, Ukrainian_YI ] };
key <AD10> { [ Cyrillic_yu, Cyrillic_YU, semicolon, colon ] };
key <AD11> { [ Cyrillic_sha, Cyrillic_SHA, guillemotleft, braceleft ] };
key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA, guillemotright, braceright ] };
key <BKSL> { [ Cyrillic_e, Cyrillic_E, backslash, bar ] };
- key <AC01> { [ Cyrillic_a, Cyrillic_A, a, A ] };
- key <AC02> { [ Cyrillic_er, Cyrillic_ER, r, R ] };
- key <AC03> { [ Cyrillic_es, Cyrillic_ES, s, S ] };
- key <AC04> { [ Cyrillic_te, Cyrillic_TE, t, T ] };
- key <AC05> { [ Cyrillic_de, Cyrillic_DE, d, D ] };
- key <AC06> { [ Cyrillic_che, Cyrillic_CHE, h, H ] };
- key <AC07> { [ Cyrillic_en, Cyrillic_EN, n, N ] };
- key <AC08> { [ Cyrillic_ie, Cyrillic_IE, e, E ] };
- key <AC09> { [ Cyrillic_i, Cyrillic_I, i, I ] };
- key <AC10> { [ Cyrillic_o, Cyrillic_O, o, O ] };
+ key <AC01> { [ Cyrillic_a, Cyrillic_A ] };
+ key <AC02> { [ Cyrillic_er, Cyrillic_ER ] };
+ key <AC03> { [ Cyrillic_es, Cyrillic_ES ] };
+ key <AC04> { [ Cyrillic_te, Cyrillic_TE, Serbian_tshe, Serbian_TSHE ] };
+ key <AC05> { [ Cyrillic_de, Cyrillic_DE, Serbian_dje, Serbian_DJE ] };
+ key <AC06> { [ Cyrillic_che, Cyrillic_CHE, Cyrillic_dzhe, Cyrillic_DZHE ] };
+ key <AC07> { [ Cyrillic_en, Cyrillic_EN, Cyrillic_nje, Cyrillic_NJE ] };
+ key <AC08> { [ Cyrillic_ie, Cyrillic_IE, Ukrainian_ie, Ukrainian_IE ] };
+ key <AC09> { [ Cyrillic_i, Cyrillic_I, Ukrainian_i, Ukrainian_I ] };
+ key <AC10> { [ Cyrillic_o, Cyrillic_O ] };
key <AC11> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN, apostrophe, quotedbl ] };
- key <AB01> { [ Cyrillic_ze, Cyrillic_ZE, z, Z ] };
- key <AB02> { [ Cyrillic_ha, Cyrillic_HA, x, X ] };
- key <AB03> { [ Cyrillic_tse, Cyrillic_TSE, c, C ] };
- key <AB04> { [ Cyrillic_ve, Cyrillic_VE, v, V ] };
- key <AB05> { [ Cyrillic_be, Cyrillic_BE, b, B ] };
- key <AB06> { [ Cyrillic_ka, Cyrillic_KA, k, K ] };
- key <AB07> { [ Cyrillic_em, Cyrillic_EM, m, M ] };
+ key <AB01> { [ Cyrillic_ze, Cyrillic_ZE, Macedonia_dse, Macedonia_DSE ] };
+ key <AB02> { [ Cyrillic_ha, Cyrillic_HA ] };
+ key <AB03> { [ Cyrillic_tse, Cyrillic_TSE ] };
+ key <AB04> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <AB05> { [ Cyrillic_be, Cyrillic_BE, Macedonia_gje, Macedonia_GJE ] };
+ key <AB06> { [ Cyrillic_ka, Cyrillic_KA, Macedonia_kje, Macedonia_KJE ] };
+ key <AB07> { [ Cyrillic_em, Cyrillic_EM ] };
key <AB08> { [ comma, semicolon, less ] };
key <AB09> { [ period, colon, greater ] };
- key <AB10> { [ slash, question ] };
+ key <AB10> { [ slash, question, U04CF, U04C0 ] }; // palochka
- key <CAPS> { [ BackSpace, BackSpace, BackSpace, BackSpace ] };
- key <LSGT> { [ U0301, asciitilde, grave ] };
- key <SPCE> { [ space, space, space, nobreakspace ] };
- key <MENU> { [ Mode_switch, Multi_key ] };
+ key <LSGT> { [ equal, plus, multiply, division ] };
include "level3(ralt_switch)"
+ include "capslock(backspace)"
+ include "nbsp(level4)"
};
-// EXTRAS:
-
// Church Slavonic language layout
// based on the Russian standard keyboard
// by Aleksandr Andreev and Yuri Shardt
@@ -709,21 +734,21 @@ xkb_symbols "chu" {
name[Group1]= "Church Slavonic";
- key <TLDE> { [ U0457, U0407, U0482, U20DD ] }; // ї Ї ҂ e.g: а⃝ where the last is a combining ten thousands sign
+ key <TLDE> { [ Ukrainian_yi, Ukrainian_YI, U0482, U20DD ] }; // ї Ї ҂ e.g: а⃝ where the last is a combining ten thousands sign
key <AE01> { [ U0461, U0460, U047D, U047C ] }; // ѡ Ѡ ѽ Ѽ
- key <AE02> { [ U0454, U0404, U0465, U0464 ] }; // є Є ѥ Ѥ
+ key <AE02> { [ Ukrainian_ie, Ukrainian_IE, U0465, U0464 ] }; // є Є ѥ Ѥ
key <AE03> { [ U046F, U046E, U0469, U0468 ] }; // ѯ Ѯ ѩ Ѩ
key <AE04> { [ U0471, U0470, U046D, U046C ] }; // ѱ Ѱ ѭ Ѭ
key <AE05> { [ U0473, U0472, UA657, UA656 ] }; // ѳ Ѳ iotified A
key <AE06> { [ U0475, U0474, U0477, U0476 ] }; // ѵ Ѵ ѷ Ѷ
key <AE07> { [ U047B, U047A, UA64D, UA64C ] }; // ѻ Ѻ ꙍ Ꙍ
key <AE08> { [ U047F, U047E, U046B, U046A ] }; // ѿ Ѿ ѫ Ѫ
- key <AE09> { [ U0455, U0405,parenleft,U002A ] }; // ѕ Ѕ ( *
- key <AE10> { [Cyrillic_u,Cyrillic_U,parenright,U0488]}; // у У ) NB: for digraph Ouk, use Cyrillic_o + Cyrillic_u
+ key <AE09> { [ Macedonia_dse, Macedonia_DSE, parenleft, asterisk ] }; // ѕ Ѕ ( *
+ key <AE10> { [ Cyrillic_u, Cyrillic_U, parenright, U0488]}; // у У ) NB: for digraph Ouk, use Cyrillic_o + Cyrillic_u
key <AE11> { [ U0483, U0486, U0487, U005F ] }; // а҃ а҆ а҇, _ (titlo, psili, pokrytie, underscore)
key <AE12> { [ U0301, U0300, U0484, UA67E ] }; // а̀ а́ а҄ ꙾ (oxia, varia, kamora, kavyka)
- key <AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI, U0456 ] };
+ key <AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI, Ukrainian_i ] };
key <AD02> { [ Cyrillic_tse, Cyrillic_TSE, U2DF0 ] };
key <AD03> { [ UA64B, UA64A, U2DF9 ] }; // Cyrillic monograph Uk (not U)!
key <AD04> { [ Cyrillic_ka, Cyrillic_KA, U2DE6 ] };
@@ -792,33 +817,33 @@ xkb_symbols "ruu" {
name[Group1]= "Russian (with Ukrainian-Belorussian layout)";
key <TLDE> { [ U2019, apostrophe, U0301, asciitilde ] }; // Apostrophe and Stress symbol
- key <AE01> { [ 1, exclam, U00F7, U2248 ] }; // Division Sign and Almost Equal To
+ key <AE01> { [ 1, exclam, division, U2248 ] }; // Division Sign and Almost Equal To
key <AE02> { [ 2, quotedbl, currency, infinity ] };
- key <AE03> { [ 3, numerosign, U00A7, U20B4 ] }; // Paragraph and Hryvnia sign
+ key <AE03> { [ 3, numerosign, section, U20B4 ] }; // Paragraph and Hryvnia sign
key <AE04> { [ 4, semicolon, dollar, EuroSign ] };
- key <AE05> { [ 5, percent, degree, U2030 ] }; // Per Mille Sign
- key <AE06> { [ 6, colon, less, U2264 ] }; // Less-Than Or Equal To
- key <AE07> { [ 7, question, greater, U2265 ] }; // Greater-Than Or Equal To
- key <AE08> { [ 8, asterisk, enfilledcircbullet, U00D7 ] }; // Multiplication Sign
+ key <AE05> { [ 5, percent, degree, permille ] };
+ key <AE06> { [ 6, colon, less, lessthanequal ] };
+ key <AE07> { [ 7, question, greater, greaterthanequal ] };
+ key <AE08> { [ 8, asterisk,enfilledcircbullet,multiply ] };
key <AE09> { [ 9, parenleft, bracketleft, braceleft ] };
key <AE10> { [ 0, parenright, bracketright, braceright ] };
key <AE11> { [ minus, underscore, emdash, endash ] };
key <AE12> { [ equal, plus, notequal, plusminus ] };
key <AD03> { [ Cyrillic_u, Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU ] };
- key <AD04> { [ Cyrillic_ka, Cyrillic_KA, registered ] }; // Registered tm
+ key <AD04> { [ Cyrillic_ka, Cyrillic_KA, registered ] };
key <AD05> { [ Cyrillic_ie, Cyrillic_IE, Cyrillic_io, Cyrillic_IO ] };
key <AD07> { [ Cyrillic_ghe, Cyrillic_GHE, Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
- key <AD10> { [ Cyrillic_ze, Cyrillic_ZE, U00B6 ] }; // Pilcrow Sign
+ key <AD10> { [ Cyrillic_ze, Cyrillic_ZE, paragraph ] };
key <AD12> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN, Ukrainian_yi, Ukrainian_YI ] };
key <AC02> { [ Cyrillic_yeru, Cyrillic_YERU, Ukrainian_i, Ukrainian_I ] };
key <AC11> { [ Cyrillic_e, Cyrillic_E, Ukrainian_ie, Ukrainian_IE ] };
- key <BKSL> { [ slash, bar, backslash, U00A6 ] }; // Broken Bar
+ key <BKSL> { [ slash, bar, backslash, brokenbar ] };
key <AB03> { [ Cyrillic_es, Cyrillic_ES, copyright ] };
key <AB06> { [ Cyrillic_te, Cyrillic_TE, trademark ] };
- key <AB07> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN, U00B5 ] }; // Micro Sign
+ key <AB07> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN, mu ] };
key <AB08> { [ Cyrillic_be, Cyrillic_BE, guillemotleft, doublelowquotemark ] };
key <AB09> { [ Cyrillic_yu, Cyrillic_YU, guillemotright, leftdoublequotemark ] };
key <AB10> { [ period, comma, slash, ellipsis ] };
@@ -884,34 +909,34 @@ xkb_symbols "prxn" {
key <TLDE> { [ U2019, apostrophe, U0301, U0300, U2053, U2015, U02BC, asciitilde ] }; // Typographic Apostrophe, Apostrophe, Combining Acute, Combining Grave, Swung Dash, Quotation Dash, Modifier Letter Apostrophe, Tilde
key <AE01> { [ 1, exclam, U0304, U0306, U0308, U0311, U0307, U0313 ] }; // 1, !, Combining Macron, Combining Breve, Combining Diaresis, Combining Inverted Breve, Combining Dot Above, Combining Comma Above
key <AE02> { [ 2,quotedbl,numerosign, U20BF, U20B8, U20AE, U00A3, U20B9 ] }; // 2 " № ₿ ₸ ₮ £ ₹
- key <AE03> { [ 3, U00A7, U20B4, currency, U20BD, U20AA, U20BC, U20BE ] }; // 3 § ₴ ¤ ₽ ₪ ₼ ₾
+ key <AE03> { [ 3, section, U20B4, currency, U20BD, U20AA, U20BC, U20BE ] }; // 3 § ₴ ¤ ₽ ₪ ₼ ₾
key <AE04> { [ 4, semicolon, dollar, EuroSign, U0482, U20DD, U0488, U0489 ] }; // 4 ; $ € Thousands Sign, Combining Enclosing Circle, Combining Hundred Thousands, Combining Millions
- key <AE05> { [ 5, percent, degree, U2030, UA670, UA671, UA672, UA66F ] }; // 5, %, °, ‰, Combinining Ten Millions, Combining Hundred Millions, Combining Thousand Millions, Combining Vzmet
+ key <AE05> { [ 5, percent, degree, permille, UA670, UA671, UA672, UA66F ] }; // 5, %, °, ‰, Combinining Ten Millions, Combining Hundred Millions, Combining Thousand Millions, Combining Vzmet
key <AE06> { [ 6, colon, U0335, U0336, U0483, U0487, UFE2E, UFE2F ] }; // 6, :, Combining Short Stroke Overlay, Combining Long Stroke Overlay, Combining Titlo, Combining Pokrytie, Combining Titlo Left Half, Combining Titlo Right Half
key <AE07> { [ 7, question, U030B, U030F, U030C, U0303, U032C, U0360 ] }; // 7, ?, Combining Double Acute, Combining Double Grave, Combining Caron/Háček, Combining Tilde, Combining Caron/Háček Below, Combining Double Tilde
key <AE08> { [ 8, asterisk, U0331, U0332, U0333, U032F, U032D, U032E ] }; // 8, *, Combining Macron Below, Combining Low Line, Combining Double Low Line, Combining Inverted Breve Below, Combining Circumflex Accent, Combining Breve Below
key <AE09> { [ 9,parenleft, bracketleft, braceleft, U035F, U035D, U035E, U035C ] }; // 9 ( [ { Combining Double Macron Below, Combining Double Breve, Combining Double Macron, Combining Double Breve Below
key <AE10> { [ 0,parenright,bracketright, braceright, U27E8, U27E9, U04A7, U04A6 ] }; // 0 ) ] } ⟨⟩ ҧ Ҧ
- key <AE11> { [ minus, underscore, emdash, endash, U2011, U00AD, U2010, U2212 ] }; // Hyphen-Minus, Underscore, Em Dash, En Dash, Non-Breaking-Hyphen, Soft Hyphen, Hyphen, Minus Sign
+ key <AE11> { [ minus, underscore, emdash, endash, U2011,hyphen, U2010, U2212 ] }; // Hyphen-Minus, Underscore, Em Dash, En Dash, Non-Breaking-Hyphen, Soft Hyphen, Hyphen, Minus Sign
key <AE12> { [ equal, plus,notequal, U2248, U04FF, U04FE, U050D, U050C ] }; // = + ≠ ≈ ӿ Ӿ ԍ Ԍ
key <AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI, Cyrillic_je, Cyrillic_JE, U04CF, U04C0, U030A, U0325 ] }; // й Й ј Ј ӏ Ӏ, Combining Ring Above and Below
key <AD02> { [ Cyrillic_tse, Cyrillic_TSE, U04B5, U04B4, Cyrillic_u_straight, Cyrillic_U_straight, U051B, U051A ] }; // ц Ц ҵ Ҵ ү Ү ԛ Ԛ
- key <AD03> { [ Cyrillic_u, Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU, Cyrillic_u_straight_bar,Cyrillic_U_straight_bar, Byelorussian_shortu, Byelorussian_SHORTU ] }; // у У ў Ў ұ Ұ ў Ў
- key <AD04> { [ Cyrillic_ka, Cyrillic_KA, Cyrillic_ka_descender,Cyrillic_KA_descender, U049F, U049E, U046F, U046E ] }; // к К Қ қ ҟ Ҟ ѯ Ѯ
+ key <AD03> { [ Cyrillic_u, Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU, Cyrillic_u_straight_bar,Cyrillic_U_straight_bar, Byelorussian_shortu, Byelorussian_SHORTU ] }; // у У ў Ў ұ Ұ ў Ў
+ key <AD04> { [ Cyrillic_ka, Cyrillic_KA, Cyrillic_ka_descender, Cyrillic_KA_descender, U049F, U049E, U046F, U046E ] }; // к К Қ қ ҟ Ҟ ѯ Ѯ
key <AD05> { [ Cyrillic_ie, Cyrillic_IE, Cyrillic_io, Cyrillic_IO, U0463, U0462, UA653, UA652 ] }; // е Е ё Ё ѣ Ѣ ꙓ Ꙓ
key <AD06> { [ Cyrillic_en, Cyrillic_EN, Cyrillic_nje, Cyrillic_NJE, Cyrillic_en_descender, Cyrillic_EN_descender, U04C8, U04C7 ] }; // н Н њ Њ ң Ң ӈ Ӈ
key <AD07> { [ Cyrillic_ghe, Cyrillic_GHE, Ukrainian_ghe_with_upturn,Ukrainian_GHE_WITH_UPTURN, Cyrillic_ghe_bar, Cyrillic_GHE_bar, U04F7, U04F6 ] }; // г Г Ґ ґ ғ Ғ ӷ Ӷ
key <AD08> { [ Cyrillic_sha, Cyrillic_SHA, U04A1, U04A0, U04AB, U04AA, UA67D, UA67F ] }; // ш Ш ҡ Ҡ ҫ Ҫ Combining Payerok Payerok
key <AD09> { [ Cyrillic_shcha, Cyrillic_SHCHA, U0505, U0504, UA68D, UA68C, U050F, U050E ] }; // щ Щ ԅ Ԅ ꚍ Ꚍ ԏ Ԏ
key <AD10> { [ Cyrillic_ze, Cyrillic_ZE, U04E1, U04E0, U0499, U0498, U0507, U0506 ] }; // з З ӡ Ӡ ҙ Ҙ ԇ Ԇ
- key <AD11> { [ Cyrillic_ha, Cyrillic_HA, Cyrillic_shha, Cyrillic_SHHA, Cyrillic_ha_descender, Cyrillic_HA_descender, U04FD, U04FC ] }; // х Х һ Һ ҳ Ҳ ӽ Ӽ
- key <AD12> { [Cyrillic_hardsign,Cyrillic_HARDSIGN, Ukrainian_yi, Ukrainian_YI, Macedonia_dse, Macedonia_DSE, U033E, U2E2F ] }; // ъ Ъ ї Ї ѕ Ѕ, Combining Yerok, Yerok
+ key <AD11> { [ Cyrillic_ha, Cyrillic_HA, Cyrillic_shha, Cyrillic_SHHA, Cyrillic_ha_descender, Cyrillic_HA_descender, U04FD, U04FC ] }; // х Х һ Һ ҳ Ҳ ӽ Ӽ
+ key <AD12> { [Cyrillic_hardsign,Cyrillic_HARDSIGN, Ukrainian_yi, Ukrainian_YI, Macedonia_dse, Macedonia_DSE, U033E, U2E2F ] }; // ъ Ъ ї Ї ѕ Ѕ, Combining Yerok, Yerok
key <AC01> { [ Cyrillic_ef, Cyrillic_EF, U0473, U0472, U04C4, U04C3, U04FB, U04FA ] }; // ф Ф ѳ Ѳ ӄ Ӄ ӻ Ӻ
- key <AC02> { [ Cyrillic_yeru, Cyrillic_YERU, Ukrainian_i, Ukrainian_I, U04D5, U04D4, U04A9, U04A8 ] }; // ы Ы і І ӕ Ӕ ҩ Ҩ
+ key <AC02> { [ Cyrillic_yeru, Cyrillic_YERU, Ukrainian_i, Ukrainian_I, U04D5, U04D4, U04A9, U04A8 ] }; // ы Ы і І ӕ Ӕ ҩ Ҩ
key <AC03> { [ Cyrillic_ve, Cyrillic_VE, U051D, U051C, U0529, U0528, U0527, U0526 ] }; // в В ԝ Ԝ ԩ Ԩ ԧ Ԧ
- key <AC04> { [ Cyrillic_a, Cyrillic_A, U04D9, U04D8, UA657, UA656, UA655, UA654 ] }; // а А ә Ә ꙗ Ꙗ ꙕ Ꙕ
+ key <AC04> { [ Cyrillic_a, Cyrillic_A, Cyrillic_schwa, Cyrillic_SCHWA, UA657, UA656, UA655, UA654 ] }; // а А ә Ә ꙗ Ꙗ ꙕ Ꙕ
key <AC05> { [ Cyrillic_pe, Cyrillic_PE, U0525, U0524, U0471, U0470, UA65F, UA65E ] }; // п П ԥ Ԥ ѱ Ѱ ꙟ Ꙟ
key <AC06> { [ Cyrillic_er, Cyrillic_ER, U0481, U0480, U048F, U048E, U0521, U0520 ] }; // р Р ҁ Ҁ ҏ Ҏ ԡ Ԡ
key <AC07> { [ Cyrillic_o, Cyrillic_O, Cyrillic_o_bar, Cyrillic_O_bar, U047B, U047A, U0461, U0460 ] }; // о О ө Ө ѻ Ѻ ѡ Ѡ
@@ -923,11 +948,11 @@ xkb_symbols "prxn" {
key <LSGT> { [ U0495, U0494, U0501, U0500, U0503, U0502, U0509, U0508 ] }; // ҕ Ҕ ԁ Ԁ ԃ Ԃ ԉ Ԉ
key <AB01> { [ Cyrillic_ya, Cyrillic_YA, U0469, U0468, U0467, U0466, UA657, UA656 ] }; // я Я ѩ Ѩ ѧ Ѧ ꙗ Ꙗ
- key <AB02> { [ Cyrillic_che, Cyrillic_CHE, Serbian_tshe, Serbian_TSHE, U04B7, U04B6, U2016, U00A6 ] }; // ч Ч ћ Ћ ҷ Ҷ ‖ ¦
+ key <AB02> { [ Cyrillic_che, Cyrillic_CHE, Serbian_tshe, Serbian_TSHE, Cyrillic_che_descender, Cyrillic_CHE_descender, U2016, U00A6 ] }; // ч Ч ћ Ћ ҷ Ҷ ‖ ¦
key <AB03> { [ Cyrillic_es, Cyrillic_ES, U046D, U046C, U046B, U046A, U04F7, U04F6 ] }; // с С ѭ Ѭ ѫ Ѫ ӷ Ӷ
- key <AB04> { [ Cyrillic_em, Cyrillic_EM, multiply, U00F7, U22C5, U2219, U04CE, U04CD ] }; // м М × ÷ ⋅ ∙ ӎ Ӎ
- key <AB05> { [ Cyrillic_i, Cyrillic_I, U0475, U0474, U048B, U048A, periodcentered, U261B ] }; // и И ѵ Ѵ ҋ Ҋ · ☛
- key <AB06> { [ Cyrillic_te, Cyrillic_TE, U04AD, U04AC, U051F, U051E, Cyrillic_che_vertstroke,Cyrillic_CHE_vertstroke]}; // т Т ҭ Ҭ ԟ Ԟ ҹ Ҹ
+ key <AB04> { [ Cyrillic_em, Cyrillic_EM, multiply, division, U22C5, U2219, U04CE, U04CD ] }; // м М × ÷ ⋅ ∙ ӎ Ӎ
+ key <AB05> { [ Cyrillic_i, Cyrillic_I, U0475, U0474, U048B, U048A, periodcentered, U261B ] }; // и И ѵ Ѵ ҋ Ҋ · ☛
+ key <AB06> { [ Cyrillic_te, Cyrillic_TE, U04AD, U04AC, U051F, U051E, Cyrillic_che_vertstroke, Cyrillic_CHE_vertstroke ] }; // т Т ҭ Ҭ ԟ Ԟ ҹ Ҹ
key <AB07> { [Cyrillic_softsign,Cyrillic_SOFTSIGN, U04A5, U04A4, UA64F, UA64E, U048D, U048C ] }; // ь Ь ҥ Ҥ ꙏ Ꙏ ҍ Ҍ
key <AB08> { [ Cyrillic_be, Cyrillic_BE, guillemotleft, doublelowquotemark, singlelowquotemark, U2039, U0523, U0522 ] }; // б Б « „ ‚ ‹ ԣ Ԣ
key <AB09> { [ Cyrillic_yu, Cyrillic_YU, guillemotright, leftdoublequotemark, leftsinglequotemark, U203A, rightdoublequotemark, rightsinglequotemark]}; // ю Ю » “ ‘ › ” ’
@@ -959,3 +984,75 @@ xkb_symbols "prxn" {
// srp: Потребно да се ставља lv5:rwin_switch_lock или једна из других брава петег ступња, да би шљакао пребацивач Caps!
// https://bugs.freedesktop.org/show_bug.cgi?id=102189
};
+
+
+partial alphanumeric_keys
+xkb_symbols "unipunct" {
+
+// Раскладка представляет собой обычную русскую раскладку, в которой некоторые редко используемые буквы
+// убрали на третий уровень, и поставили все пунктуационные знаки на то же место, где они стоят на
+// US раскладке (+ добавлен знак номера, который отсутствует в US раскладке, но часто нужен в RU).
+
+// ru(unipunct):
+// `~ 1! 2@ 3#3№ 4$ 5% 6^ 7& 8* 9( 0) -_ =+
+// хХ бБ уУюЮ кК еЕэЭ нН гГ шШщЩ жЖ зЗ [{ ]} \|
+// фФ ыЫ вВ аА пП рР оОёЁ лЛ дД ;: '" //"
+// яЯ чЧцЦ сС мМ иИйЙ тТ ьЬъЪ ,< .> /?
+
+ include "us(basic)"
+ name[Group1]= "Russian (with US punctuation)";
+
+ // Единственный символ, который отсутствует на US раскладке - №
+ key <AE03> { [ 3, numbersign, 3, numerosign ] };
+
+ key <LatQ> { [ Cyrillic_ha, Cyrillic_HA ] };
+ key <LatW> { [ Cyrillic_be, Cyrillic_BE ] };
+ key <LatE> { [ Cyrillic_u, Cyrillic_U, Cyrillic_yu, Cyrillic_YU ] };
+ key <LatR> { [ Cyrillic_ka, Cyrillic_KA ] };
+ key <LatT> { [ Cyrillic_ie, Cyrillic_IE, Cyrillic_e, Cyrillic_E ] };
+ key <LatY> { [ Cyrillic_en, Cyrillic_EN ] };
+ key <LatU> { [ Cyrillic_ghe, Cyrillic_GHE ] };
+ key <LatI> { [ Cyrillic_sha, Cyrillic_SHA, Cyrillic_shcha, Cyrillic_SHCHA ] };
+ key <LatO> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <LatP> { [ Cyrillic_ze, Cyrillic_ZE ] };
+
+ key <LatA> { [ Cyrillic_ef, Cyrillic_EF ] };
+ key <LatS> { [ Cyrillic_yeru, Cyrillic_YERU ] };
+ key <LatD> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <LatF> { [ Cyrillic_a, Cyrillic_A ] };
+ key <LatG> { [ Cyrillic_pe, Cyrillic_PE ] };
+ key <LatH> { [ Cyrillic_er, Cyrillic_ER ] };
+ key <LatJ> { [ Cyrillic_o, Cyrillic_O, Cyrillic_io, Cyrillic_IO ] };
+ key <LatK> { [ Cyrillic_el, Cyrillic_EL ] };
+ key <LatL> { [ Cyrillic_de, Cyrillic_DE ] };
+
+ key <LatZ> { [ Cyrillic_ya, Cyrillic_YA ] };
+ key <LatX> { [ Cyrillic_che, Cyrillic_CHE, Cyrillic_tse, Cyrillic_TSE ] };
+ key <LatC> { [ Cyrillic_es, Cyrillic_ES ] };
+ key <LatV> { [ Cyrillic_em, Cyrillic_EM ] };
+ key <LatB> { [ Cyrillic_i, Cyrillic_I, Cyrillic_shorti, Cyrillic_SHORTI ] };
+ key <LatN> { [ Cyrillic_te, Cyrillic_TE ] };
+ key <LatM> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN, Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "phonetic_mac" {
+
+ include "ru(phonetic_winkeys)"
+ name[Group1]= "Russian (phonetic Macintosh)";
+
+ key <LatE> { [ Cyrillic_ie, Cyrillic_IE, Cyrillic_io, Cyrillic_IO ] };
+ key <LatW> { [ Cyrillic_sha, Cyrillic_SHA ] };
+ key <LatV> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <TLDE> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
+ key <AD11> { [ Cyrillic_yu, Cyrillic_YU ] };
+ key <AD12> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <AE03> { [ 3, numbersign, numerosign ] };
+ key <AE04> { [ 4, dollar, U20BD ] }; // ruble
+ key <AE05> { [ 5, percent ] };
+ key <AE06> { [ 6, caret ] };
+ key <AE11> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN, minus, underscore ] };
+ key <AE12> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN, equal, plus ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/test/data/symbols/terminate b/test/data/symbols/terminate
index a43f2b9..60c2479 100644
--- a/test/data/symbols/terminate
+++ b/test/data/symbols/terminate
@@ -1,4 +1,4 @@
-default partial modifier_keys
+default partial modifier_keys
xkb_symbols "ctrl_alt_bksp" {
key <BKSP> {
type="CTRL+ALT",
diff --git a/test/data/symbols/us b/test/data/symbols/us
index 9cc056d..b876978 100644
--- a/test/data/symbols/us
+++ b/test/data/symbols/us
@@ -1,4 +1,4 @@
-default partial alphanumeric_keys modifier_keys
+default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1]= "English (US)";
@@ -361,7 +361,7 @@ xkb_symbols "dvorak-alt-intl" {
key <AC03> { [ e, E, eacute ] };
key <AC04> { [ u, U, ucircumflex ] };
key <AC05> { [ i, I, icircumflex ] };
- key <AC10> { [ s, S, ssharp ] };
+ key <AC10> { [ s, S, ssharp, U1E9E ] };
key <AB01> { [ semicolon, colon, acircumflex ] };
key <AB02> { [ q, Q, odiaeresis, dead_ogonek ] };
@@ -488,8 +488,8 @@ xkb_symbols "dvorak-r" {
};
// Classic dvorak layout
-// by Piter Punk <piterpk@terra.com.br> - 2006-07-06
-// Based on dvorak layout and e-mail from Russel L. Harris rlharris@oplink.net
+// by Piter Punk <piterpk@terra.com.br> - 2006-07-06
+// Based on dvorak layout and e-mail from Russel L. Harris rlharris@oplink.net
// on xorg list.
partial alphanumeric_keys
xkb_symbols "dvorak-classic" {
@@ -604,7 +604,7 @@ xkb_symbols "dvp" {
key <AC07> { [ h, H, dead_acute ] };
key <AC08> { [ t, T, thorn, THORN ] };
key <AC09> { [ n, N, ntilde, Ntilde ] };
- key <AC10> { [ s, S, ssharp ] };
+ key <AC10> { [ s, S, ssharp, U1E9E ] };
key <AC11> { [ minus, underscore, hyphen, endash ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <BKSL> { [ backslash, bar ] };
@@ -774,7 +774,7 @@ xkb_symbols "colemak" {
key <AC01> { [ a, A, aacute, Aacute ] };
key <AC02> { [ r, R, dead_grave, asciitilde ] };
- key <AC03> { [ s, S, ssharp, asciitilde ] };
+ key <AC03> { [ s, S, ssharp, 0x1001e9e ] };
key <AC04> { [ t, T, dead_acute, dead_doubleacute ] };
key <AC05> { [ d, D, dead_diaeresis, asciitilde ] };
key <AC06> { [ h, H, dead_caron, asciitilde ] };
@@ -878,7 +878,7 @@ xkb_symbols "classmate-intl" {
key <LSGT> { [ backslash, bar, backslash, bar ] };
- key <KP7> { [ KP_Home, KP_7,
+ key <KP7> { [ KP_Home, KP_7,
onehalf, dead_horn ] };
key <KP8> { [ KP_Up, KP_8,
threequarters, dead_ogonek ] };
@@ -957,7 +957,7 @@ xkb_symbols "classmate-altgr-intl" {
key <LSGT> { [ backslash, bar, backslash, bar ] };
- key <KP7> { [ KP_Home, KP_7,
+ key <KP7> { [ KP_Home, KP_7,
dead_horn, dead_horn ] };
key <KP8> { [ KP_Up, KP_8,
dead_ogonek, dead_ogonek ] };
@@ -1032,7 +1032,7 @@ xkb_symbols "olpc" {
key <AD12> { [bracketright, braceright, 0x1000330, 0x1000330 ] }; // combining tilde below
key <AC01> { [ a, A, ae, AE ] };
- key <AC02> { [ s, S, ssharp, 0x1001E9C ] }; // uppercase S sharp
+ key <AC02> { [ s, S, ssharp, 0x1001E9E ] }; // uppercase S sharp
key <AC03> { [ d, D, eth, ETH ] };
key <AC04> { [ f, F, thorn, THORN ] };
key <AC06> { [ h, H, sterling, sterling ] };
@@ -1056,7 +1056,7 @@ xkb_symbols "olpc" {
partial alphanumeric_keys
xkb_symbols "olpc2" {
include "us(olpc)"
- name[Group1]= "English (the divide/multiply keys toggle the layout)";
+ name[Group1]= "English (the divide/multiply toggle the layout)";
include "group(olpc)"
};
@@ -1095,7 +1095,7 @@ xkb_symbols "olpcm" {
key <AD12> { [bracketright, braceright, 0x1000330, 0x1000330 ] }; // combining tilde below
key <AC01> { [ a, A, ae, AE ] };
- key <AC02> { [ s, S, ssharp, 0x1001E9C ] }; // uppercase S sharp
+ key <AC02> { [ s, S, ssharp, 0x1001E9E ] }; // uppercase S sharp
key <AC03> { [ d, D, eth, ETH ] };
key <AC04> { [ f, F, thorn, THORN ] };
key <AC06> { [ h, H, sterling, sterling ] };
@@ -1178,6 +1178,31 @@ xkb_symbols "chr" {
key <AB10> { [ U13C2, U13C9 ] };
};
+// Add Hawaiian `okina and kahako to US layout
+// Author: Greg Meyer <gregory.meyer@gmail.com>, 2020
+// this mapping follows the one for Windows here: http://www.olelo.hawaii.edu/enehana/winkbd.php
+// `okina replaces apostrophe (apostrophe moves to level 3)
+// vowels with kahako (macron) are level 3 symbols
+partial alphanumeric_keys
+xkb_symbols "haw" {
+
+ include "us(basic)"
+ name[Group1] = "Hawaiian";
+
+ // `okina replaces single apostrophe
+ // alt gives the literal apostrophe
+ key <AC11> {[ U02BB, quotedbl, apostrophe ] };
+
+ // kahako
+ key <AC01> {[ a, A, amacron, Amacron ]};
+ key <AD03> {[ e, E, emacron, Emacron ]};
+ key <AD07> {[ u, U, umacron, Umacron ]};
+ key <AD08> {[ i, I, imacron, Imacron ]};
+ key <AD09> {[ o, O, omacron, Omacron ]};
+
+ include "level3(ralt_switch)"
+};
+
// Serbian charecters added as third level symbols to US keyboard layout.
partial alphanumeric_keys
@@ -1203,51 +1228,6 @@ xkb_symbols "hbs" {
include "level3(ralt_switch)"
};
-//based on http://upload.wikimedia.org/wikipedia/commons/1/18/T-Mobile_G1_launch_event_2.jpg
-partial alphanumeric_keys
-xkb_symbols "htcdream" {
- include "inet(htcdream)"
- name[Group1]= "English (US)";
-
- //second row
- key <AD01> { [ q, Q, Tab, Tab ] };
- key <AD02> { [ w, W, grave, grave ] };
- key <AD03> { [ e, E, underscore, underscore ] };
- key <AD04> { [ r, R, sterling, sterling ] };
- key <AD05> { [ t, T, EuroSign, EuroSign ] };
- key <AD06> { [ y, Y, division, division ] };
- key <AD07> { [ u, U, multiply, multiply ] };
- key <AD08> { [ i, I, minus, minus ] };
- key <AD09> { [ o, O, plus, plus ] };
- key <AD10> { [ p, P, equal, equal ] };
-
- //third row
- key <AC01> { [ a, A, NoSymbol, NoSymbol ] };
- key <AC02> { [ s, S, bar, bar ] };
- key <AC03> { [ d ,D, backslash, backslash ] };
- key <AC04> { [ f, F, braceleft, braceleft ] };
- key <AC05> { [ g, G, braceright, braceright ] };
- key <AC06> { [ h, H, colon, colon ] };
- key <AC07> { [ j, J, semicolon, semicolon ] };
- key <AC08> { [ k, K, quotedbl, quotedbl ] };
- key <AC09> { [ l, L, apostrophe, apostrophe ] };
-
- //forth row
- key <AB01> { [ z, Z, NoSymbol, NoSymbol ] };
- key <AB02> { [ x, X, NoSymbol, NoSymbol ] };
- key <AB03> { [ c, C, NoSymbol, NoSymbol ] };
- key <AB04> { [ v, V, bracketleft, bracketleft ] };
- key <AB05> { [ b, B, bracketright, bracketright ] };
- key <AB06> { [ n, N, less, less ] };
- key <AB07> { [ m, M, greater, greater ] };
- key <AB08> { [ comma, comma, question, question ] };
-
- //fifth row
- key <FK15> { [ at, at, asciitilde, asciitilde ] };
-
- include "level3(alt_switch)"
-};
-
// Workman Keyboard Layout symbols for xkb on X.Org Server 7.x
// 09-06-2010 OJ Bucao. http://www.workmanlayout.com
@@ -1642,6 +1622,24 @@ xkb_symbols "cz_sk_de" {
include "level3(ralt_switch)"
};
+// 03 December 2017 - Added us(scn), please refer to
+// Cadèmia Siciliana <l10n@cademiasiciliana.org>
+partial alphanumeric_keys
+xkb_symbols "scn" {
+
+ include "us(intl)"
+ name[Group1]="Sicilian (US keyboard)";
+
+ key <AD03> { [ e, E, U0259, U018F ] };
+ key <AC03> { [ d, D, U1E0D, U1E0C ] };
+ key <AC04> { [ f, F, U0111, U0110 ] };
+ key <AC06> { [ h, H, U1E25, U1E24 ] };
+ key <AB02> { [ x, X, U03C7, U03A7 ] };
+ key <AB09> { [ period, greater, U1D58, dead_caron ] };
+
+ include "level3(ralt_switch)"
+};
+
// XCompose is out! Unicode combining is in! For those of us who live
// on the edge: A keymap using Unicode combining characters instead of
// deadkeys. This variation does not deviate from the lame MS-style
@@ -1665,7 +1663,7 @@ xkb_symbols "cz_sk_de" {
partial alphanumeric_keys
xkb_symbols "intl-unicode" {
- name[Group1]= "English (US, international AltGr Unicode combining)";
+ name[Group1]= "English (US, intl., AltGr Unicode combining)";
include "us(intl)"
include "level3(ralt_switch)"
@@ -1715,7 +1713,7 @@ xkb_symbols "intl-unicode" {
partial alphanumeric_keys
xkb_symbols "alt-intl-unicode" {
- name[Group1]= "English (US, international AltGr Unicode combining, alternative)";
+ name[Group1]= "English (US, intl., AltGr Unicode combining, alt.)";
include "us(intl-unicode)"
@@ -1787,3 +1785,224 @@ partial alphanumeric_keys
xkb_symbols "sun_type6" {
include "sun_vndr/us(sun_type6)"
};
+
+// Implementation of the 3l keyboard layout
+// See https://github.com/jackrosenthal/threelayout for specification
+partial alphanumeric_keys modifier_keys
+xkb_symbols "3l" {
+ name[Group1] = "English (3l)";
+
+ key.type[Group1] = "ONE_LEVEL";
+ key <TAB> { [ Escape ] };
+ key <CAPS> { [ Tab ] };
+ key <AC11> { [ ISO_Level3_Shift ] }; // Sym Modifier
+ key <AB10> { [ ISO_Level5_Shift ] }; // Cur/Num Modifier
+
+ // Top row numbers - not part of spec, but given for convenience
+ key <AE01> { [ 1 ] };
+ key <AE02> { [ 2 ] };
+ key <AE03> { [ 3 ] };
+ key <AE04> { [ 4 ] };
+ key <AE05> { [ 5 ] };
+ key <AE06> { [ 6 ] };
+ key <AE07> { [ 7 ] };
+ key <AE08> { [ 8 ] };
+ key <AE09> { [ 9 ] };
+ key <AE10> { [ 0 ] };
+
+ // Main keys
+ // Order of mods (defined by EIGHT_LEVEL_SEMIALPHABETIC) is:
+ // [ None, Shift, Sym, Shift+Sym, Num, Shift+Num, Sym+Num, Shift+Sym+Num ]
+ key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+
+ // Second row
+ key <AD01> { [ q, Q, quotedbl, Greek_omicron, Prior, Prior, U21CD, Greek_OMICRON ] };
+ key <AD02> { [ f, F, underscore, Greek_phi, BackSpace, BackSpace, U21A4, Greek_PHI ] };
+ key <AD03> { [ u, U, bracketleft, Greek_upsilon, Up, Up, U2191, Greek_UPSILON ] };
+ key <AD04> { [ y, Y, bracketright, Greek_psi, Delete, Delete, U21A6, Greek_PSI ] };
+ key <AD05> { [ z, Z, asciicircum, Greek_zeta, Next, Next, U21CF, Greek_ZETA ] };
+ key <AD06> { [ x, X, exclam, Greek_xi, NoSymbol, NoSymbol, U2260, Greek_XI ] };
+ key <AD07> { [ k, K, less, Greek_kappa, 1, A, U2A7D, Greek_KAPPA ] };
+ key <AD08> { [ c, C, greater, Greek_chi, 2, B, U2A7E, Greek_CHI ] };
+ key <AD09> { [ w, W, equal, Greek_omega, 3, C, U2261, Greek_OMEGA ] };
+ key <AD10> { [ b, B, ampersand, Greek_beta, NoSymbol, NoSymbol, U2248, Greek_BETA ] };
+
+ // Home row
+ key <AC01> { [ o, O, slash, Greek_omega, Home, Home, U21D0, Greek_OMEGA ] };
+ key <AC02> { [ h, H, minus, Greek_theta, Left, Left, U2190, Greek_THETA ] };
+ key <AC03> { [ e, E, braceleft, Greek_epsilon, Down, Down, U2193, Greek_EPSILON ] };
+ key <AC04> { [ a, A, braceright, Greek_alpha, Right, Right, U2192, Greek_ALPHA ] };
+ key <AC05> { [ i, I, asterisk, Greek_iota, End, End, U21D2, Greek_IOTA ] };
+ key <AC06> { [ d, D, question, Greek_delta, period, colon, U2286, Greek_DELTA ] };
+ key <AC07> { [ r, R, parenleft, Greek_rho, 4, D, U2227, Greek_RHO ] };
+ key <AC08> { [ t, T, parenright, Greek_tau, 5, E, U2228, Greek_TAU ] };
+ key <AC09> { [ n, N, apostrophe, Greek_eta, 6, F, U2200, Greek_ETA ] };
+ key <AC10> { [ s, S, colon, Greek_sigma, NoSymbol, NoSymbol, U2203, Greek_SIGMA ] };
+
+ // Bottom row
+ key <AB01> { [ comma, comma, numbersign, NoSymbol, slash, NoSymbol, U21AE, NoSymbol ] };
+ key <AB02> { [ m, M, dollar, Greek_mu, asterisk, NoSymbol, U2194, Greek_MU ] };
+ key <AB03> { [ period, period, bar, NoSymbol, minus, NoSymbol, U21CE, NoSymbol ] };
+ key <AB04> { [ j, J, asciitilde, Greek_SIGMA, plus, NoSymbol, U21D4, NoSymbol ] };
+ key <AB05> { [ semicolon, semicolon, grave, NoSymbol, comma, NoSymbol, U2282, NoSymbol ] };
+ key <AB06> { [ g, G, plus, Greek_gamma, 0, NoSymbol, U2229, Greek_GAMMA ] };
+ key <AB07> { [ l, L, percent, Greek_lambda, 7, parenleft, U222A, Greek_LAMBDA ] };
+ key <AB08> { [ p, P, backslash, Greek_pi, 8, parenright, U2208, Greek_PI ] };
+ key <AB09> { [ v, V, at, Greek_nu, 9, NoSymbol, U2209, Greek_NU ] };
+
+ include "level5(modifier_mapping)"
+};
+
+// Chromebooks typically have the key which is normally in the caps
+// lock position mapped to keycode 133 (LWIN). For 3l, it is critical
+// that the key in this positon correspond to tab, so there is a
+// variant available for chromebook hardware.
+partial modifier_keys
+xkb_symbols "3l-cros" {
+ include "us(3l)"
+ name[Group1] = "English (3l, Chromebook)";
+ key <LWIN> {
+ type[Group1] = "ONE_LEVEL",
+ symbols[Group1] = [ Tab ]
+ };
+};
+
+// A 3l variant for emacs users, which maps control to caps lock and (re)maps
+// tab back to tab.
+partial modifier_keys
+xkb_symbols "3l-emacs" {
+ include "us(3l)"
+ name[Group1] = "English (3l, emacs)";
+
+ key <TAB> { [ Tab ] };
+ key <CAPS> { [ Control_L ] };
+
+ modifier_map Control { <CAPS> };
+};
+
+// Drix EU Latin - version 3.1 (2019-10-07)
+// Author: Jerome Leclanche <jerome@leclan.ch>
+// Latin layout based on classic US qwerty, with azerty-style second-row m key.
+// Features:
+// - Programmer-centric punctuation keys (All common symbols on right hand except < and > on left)
+// - Most common dead accents on altgr-shift number row
+// - Unicode arrows on Altgr+shift+WASD
+// - Some commonly used special characters available:
+// - Most common european special characters
+// - Misc currency symbols, copyright/registered/trademark symbols
+// - Common math symbols + some common greek letters
+// - Compose key replaces Mod5
+//
+// This layout is in the Public Domain.
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ ~ ~ │ " ´ │ ' ` │ ^ ^ │ ` ¨ │ ´ ° │ 6 ¯ │ 7 ¸ │ 8 ˛ │ 9 ˇ │ | ˝ │ _ ± │ = ≠ ┃Backspace┃
+// │ @ £ │ 1 ¹ │ 2 ² │ 3 ³ │ 4 ⁴ │ 5 ⁵ │ 6 ⁶ │ 7 ⁷ │ 8 ⁸ │ 9 ⁹ │ 0 ⁰ │ - " │ + ' ┃ ⌫ ┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃Tab ┃ Q Ø │ W ↑ │ E € │ R ₽ │ T τ │ Y ¥ │ U U │ I ’ │ O Ω │ P ₱ │ [ « │ ] » ┃ ⏎ ┃
+// ┃ ↹ ┃ q ø │ w w │ e € │ r ® │ t ™ │ y ¥ │ u u │ i ‘ │ o œ │ p π │ ( { │ ) } ┃ Enter ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
+// ┃Caps ┃ A ← │ S ↓ │ D → │ F Ƒ │ G G │ H H │ J ” │ K „ │ L λ │ M M │ % ‰ │ & × ┃ ┃
+// ┃Lock ⇬ ┃ a æ │ s ß │ d Δ │ f ƒ │ g g │ h h │ j “ │ k ‚ │ l £ │ m µ │ # ~ │ * $ ┃ ┃
+// ┣━━━━━━┳━┹───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┲━┷━━━━━┻━━━━━━┫
+// ┃Shift ┃ > ≥ │ Z ¶ │ X ÷ │ C ¢ │ V V │ B ₿ │ N N │ ? ¿ │ , · │ ; ´ │ \ ¦ ┃Shift ┃
+// ┃ ⇧ ┃ < ≤ │ z § │ x × │ c © │ v ♀ │ b ♂ │ n ⚥ │ ! ¡ │ . … │ : ` │ / | ┃ ⇧ ┃
+// ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴────┲┷━━━━━╈━━━━━┻┳━━━━━━┳━━━━━━┫
+// ┃Ctrl ┃ Fn ┃Alt ┃ ␣ Space Nobreakspace ⍽ ┃AltGr ┃Multi ┃ Ctxt ┃ Ctrl ┃
+// ┃ ┃ ┃ ┃ ␣ Space Nobreakspace ⍽ ┃ ┃ ┃ Menu ┃ ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┛
+
+partial alphanumeric_keys modifier_keys
+xkb_symbols "drix" {
+
+ name[Group1] = "English (Drix)";
+
+ // First row
+ key <TLDE> {[ at, asciitilde, sterling, dead_tilde ]}; // @ ~ £ ~
+ key <AE01> {[ 1, quotedbl, onesuperior, dead_grave ]}; // 1 " ¹ `
+ key <AE02> {[ 2, apostrophe, twosuperior, dead_acute ]}; // 2 ' ² ´
+ key <AE03> {[ 3, asciicircum, threesuperior, dead_circumflex ]}; // 3 ^ ³ ^
+ key <AE04> {[ 4, grave, foursuperior, dead_diaeresis ]}; // 4 4 ⁴ ¨
+ key <AE05> {[ 5, degree, fivesuperior, dead_abovering ]}; // 5 ° ⁵ °
+ key <AE06> {[ 6, 6, sixsuperior, dead_macron ]}; // 6 6 ⁶ ¯
+ key <AE07> {[ 7, 7, sevensuperior, dead_cedilla ]}; // 7 7 ⁷ ¸
+ key <AE08> {[ 8, 8, eightsuperior, dead_ogonek ]}; // 8 8 ⁸ ˛
+ key <AE09> {[ 9, 9, ninesuperior, dead_caron ]}; // 9 9 ⁹ ˇ
+ key <AE10> {[ 0, bar, zerosuperior, dead_doubleacute ]}; // 0 | ⁰ ˝
+ key <AE11> {[ minus, underscore, quotedbl, plusminus ]}; // - _ " ±
+ key <AE12> {[ plus, equal, apostrophe, notequal ]}; // + = ' ≠
+
+ // Second row
+ key <AD01> {[ q, Q, oslash, Ooblique ]}; // q Q ø Ø
+ key <AD02> {[ w, W, w, uparrow ]}; // w W w ↑
+ key <AD03> {[ e, E, EuroSign, EuroS ]}; // e E € €
+ key <AD04> {[ r, R, registered, 0x10020bd ]}; // r R ® ₽
+ key <AD05> {[ t, T, trademark, Greek_tau ]}; // t T ™ τ
+ key <AD06> {[ y, Y, yen, yen ]}; // y Y ¥ ¥
+ key <AD07> {[ u, U, u, U ]}; // u U u U
+ key <AD08> {[ i, I, leftsinglequotemark, rightsinglequotemark ]}; // i I ‘ ’
+ key <AD09> {[ o, O, oe, Greek_OMEGA ]}; // o O œ Ω
+ key <AD10> {[ p, P, Greek_pi, 0x10020b1 ]}; // p P π ₱
+ key <AD11> {[ parenleft, bracketleft, braceleft, guillemotleft ]}; // ( [ { «
+ key <AD12> {[ parenright, bracketright, braceright, guillemotright ]}; // ) ] } »
+
+ // Third row
+ key <AC01> {[ a, A, ae, leftarrow ]}; // a A æ ←
+ key <AC02> {[ s, S, ssharp, downarrow ]}; // s S ß ↓
+ key <AC03> {[ d, D, Greek_DELTA, rightarrow ]}; // d D Δ →
+ key <AC04> {[ f, F, 0x1000192, 0x1000191 ]}; // f F ƒ Ƒ
+ key <AC05> {[ g, G, g, G ]}; // g G g G
+ key <AC06> {[ h, H, h, H ]}; // h H h H
+ key <AC07> {[ j, J, leftdoublequotemark, rightdoublequotemark ]}; // j J “ ”
+ key <AC08> {[ k, K, singlelowquotemark, doublelowquotemark ]}; // k K ‚ „
+ key <AC09> {[ l, L, sterling, Greek_lambda ]}; // l L £ λ
+ key <AC10> {[ m, M, mu, M ]}; // m M µ M
+ key <AC11> {[ numbersign, percent, asciitilde, 0x1002030 ]}; // # % ~ ‰
+
+ // Fourth row
+ key <LSGT> {[ less, greater, lessthanequal, greaterthanequal ]}; // < > ≤ ≥
+ key <AB01> {[ z, Z, section, paragraph ]}; // z Z § ¶
+ key <AB02> {[ x, X, multiply, division ]}; // x X × ÷
+ key <AB03> {[ c, C, copyright, cent ]}; // c C © ¢
+ key <AB04> {[ v, V, 0x1002640, V ]}; // v V ♀ V
+ key <AB05> {[ b, B, 0x1002642, 0x10020bf ]}; // b B ♂ ₿
+ key <AB06> {[ n, N, 0x10026a5, N ]}; // n N ⚥ N
+ key <AB07> {[ exclam, question, exclamdown, questiondown ]}; // ! ? ¡ ¿
+ key <AB08> {[ period, comma, 0x1002026, periodcentered ]}; // . , … ·
+ key <AB09> {[ colon, semicolon, grave, acute ]}; // : ; ` ´
+ key <AB10> {[ slash, backslash, bar, brokenbar ]}; // / \ | ¦
+
+ // Next to the enter key
+ key <BKSL> {[ asterisk, ampersand, dollar, multiply ]}; // * & $ ×
+
+ // Rebind right Super (windows key) into a Compose key
+ key <RWIN> {[ Multi_key ]};
+
+ // Implement AltGr and AltGr+Shift
+ // For some reason, include "level3(ralt_switch)" doesn't do the trick.
+ key <RALT> {
+ type[Group1]="TWO_LEVEL",
+ [ ISO_Level3_Shift, Multi_key ]
+ };
+};
+
+// German and Swedish characters added as third level symbols to the US keyboard layout
+// Author: Stephan Lachnit <stephanlachnit@protonmail.com>, 2019
+// the german umlauts are placed over the characters without diaeresis, the sharp-s over the s
+// the swedish ao is placed over the p, since it's closed to the position on a swedish keyboard
+// the euro sign is placed over the e, as it is usual for german and swedish keyboards
+partial alphanumeric_keys
+xkb_symbols "de_se_fi" {
+
+ include "us(basic)"
+ include "eurosign(e)"
+ name[Group1] = "German, Swedish and Finnish (US)";
+
+ key <AC01> {[ a, A, adiaeresis, Adiaeresis ]};
+ key <AD09> {[ o, O, odiaeresis, Odiaeresis ]};
+ key <AC02> {[ s, S, ssharp, U1E9E ]};
+ key <AD07> {[ u, U, udiaeresis, Udiaeresis ]};
+ key <AD10> {[ p, P, aring, Aring ]};
+
+ include "level3(ralt_switch)"
+};
diff --git a/test/data/types/extra b/test/data/types/extra
index e7529f4..3f1e48d 100644
--- a/test/data/types/extra
+++ b/test/data/types/extra
@@ -1,4 +1,4 @@
-partial default xkb_types "default" {
+default partial xkb_types "default" {
// Defines a type with a four-level shift, similar to the three-level
// type used for iso9995, but it lets the Shift key behave "normally".
diff --git a/test/data/types/iso9995 b/test/data/types/iso9995
index d3c4e0b..137a522 100644
--- a/test/data/types/iso9995
+++ b/test/data/types/iso9995
@@ -1,4 +1,4 @@
-partial default xkb_types "default" {
+default partial xkb_types "default" {
// A key type which can be used to implement
// an ISO9995-style level-three shift.
diff --git a/test/data/types/level5 b/test/data/types/level5
index 0570725..19d1552 100644
--- a/test/data/types/level5
+++ b/test/data/types/level5
@@ -1,4 +1,4 @@
-partial default xkb_types "default" {
+default partial xkb_types "default" {
// Defines a type with an eight-level shift, similar to the three-level
// type used for iso9995, but it lets the Shift key behave "normally".
diff --git a/test/data/types/mousekeys b/test/data/types/mousekeys
index 901848a..0bf8384 100644
--- a/test/data/types/mousekeys
+++ b/test/data/types/mousekeys
@@ -1,4 +1,4 @@
-partial default xkb_types "default" {
+default partial xkb_types "default" {
virtual_modifiers Alt;
type "SHIFT+ALT" {
diff --git a/test/data/types/numpad b/test/data/types/numpad
index 5861f11..01723e9 100644
--- a/test/data/types/numpad
+++ b/test/data/types/numpad
@@ -1,4 +1,4 @@
-partial default xkb_types "pc" {
+default partial xkb_types "pc" {
type "KEYPAD" {
modifiers = Shift+NumLock;
map[None] = Level1;
diff --git a/test/data/types/pc b/test/data/types/pc
index 404e3c9..a980664 100644
--- a/test/data/types/pc
+++ b/test/data/types/pc
@@ -1,4 +1,4 @@
-partial default xkb_types "default" {
+default partial xkb_types "default" {
// Some types that are necessary
// for a full implementation of
diff --git a/test/registry.c b/test/registry.c
index fc5f6da..fab3b69 100644
--- a/test/registry.c
+++ b/test/registry.c
@@ -24,6 +24,9 @@
#include "config.h"
#include <assert.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
#include <stdarg.h>
#include <stdio.h>
#include <sys/stat.h>
diff --git a/test/state.c b/test/state.c
index 3ec7c66..08832f9 100644
--- a/test/state.c
+++ b/test/state.c
@@ -514,7 +514,7 @@ test_range(struct xkb_keymap *keymap)
xkb_keycode_t counter;
assert(xkb_keymap_min_keycode(keymap) == 9);
- assert(xkb_keymap_max_keycode(keymap) == 253);
+ assert(xkb_keymap_max_keycode(keymap) == 569);
counter = xkb_keymap_min_keycode(keymap);
xkb_keymap_key_for_each(keymap, key_iter, &counter);
diff --git a/test/tool-option-parsing.py b/test/tool-option-parsing.py
index de638d1..a2072b3 100755
--- a/test/tool-option-parsing.py
+++ b/test/tool-option-parsing.py
@@ -28,15 +28,11 @@ import sys
import subprocess
import logging
import tempfile
-
-try:
- import pytest
-except ImportError:
- print('Failed to import pytest. Skipping.', file=sys.stderr)
- sys.exit(77)
+import unittest
top_builddir = os.environ['top_builddir']
+top_srcdir = os.environ['top_srcdir']
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('test')
@@ -45,7 +41,7 @@ logger.setLevel(logging.DEBUG)
# Permutation of RMLVO that we use in multiple tests
rmlvos = [list(x) for x in itertools.permutations(
['--rules=evdev', '--model=pc104',
- '--layout=fr', '--options=eurosign:5']
+ '--layout=ch', '--options=eurosign:5']
)]
@@ -69,11 +65,15 @@ class XkbcliTool:
xkbcli_tool = 'xkbcli'
subtool = None
- def __init__(self, subtool=None):
+ def __init__(self, subtool=None, skipIf=()):
self.tool_path = top_builddir
self.subtool = subtool
+ self.skipIf = skipIf
def run_command(self, args):
+ for condition, reason in self.skipIf:
+ if condition:
+ raise unittest.SkipTest(reason)
if self.subtool is not None:
tool = '{}-{}'.format(self.xkbcli_tool, self.subtool)
else:
@@ -104,209 +104,187 @@ class XkbcliTool:
assert stdout.startswith('Usage') or stdout == ''
assert 'requires an argument' in stderr
-
-def get_tool(subtool=None):
- return XkbcliTool(subtool)
-
-
-def get_all_tools():
- return [get_tool(x) for x in [None, 'list',
- 'compile-keymap',
- 'how-to-type',
- 'interactive-evdev',
- 'interactive-wayland',
- 'interactive-x11']]
-
-
-@pytest.fixture
-def xkbcli():
- return get_tool()
-
-
-@pytest.fixture
-def xkbcli_list():
- return get_tool('list')
-
-
-@pytest.fixture
-def xkbcli_how_to_type():
- return get_tool('how-to-type')
-
-
-@pytest.fixture
-def xkbcli_compile_keymap():
- return get_tool('compile-keymap')
-
-
-@pytest.fixture
-def xkbcli_interactive_evdev():
- return get_tool('interactive-evdev')
-
-
-@pytest.fixture
-def xkbcli_interactive_x11():
- return get_tool('interactive-x11')
-
-
-@pytest.fixture
-def xkbcli_interactive_wayland():
- return get_tool('interactive-wayland')
-
-
-# --help is supported by all tools
-@pytest.mark.parametrize('tool', get_all_tools())
-def test_help(tool):
- stdout, stderr = tool.run_command_success(['--help'])
- assert stdout.startswith('Usage:')
- assert stderr == ''
-
-
-# --foobar generates "Usage:" for all tools
-@pytest.mark.parametrize('tool', get_all_tools())
-def test_invalid_option(tool):
- tool.run_command_unrecognized_option(['--foobar'])
-
-
-# xkbcli --version
-def test_xkbcli_version(xkbcli):
- stdout, stderr = xkbcli.run_command_success(['--version'])
- assert stdout.startswith('0')
- assert stderr == ''
-
-
-def test_xkbcli_too_many_args(xkbcli):
- xkbcli.run_command_invalid(['a'] * 64)
-
-
-@pytest.mark.parametrize('args', [['--verbose'],
- ['--rmlvo'],
- # ['--kccgst'],
- ['--verbose', '--rmlvo'],
- # ['--verbose', '--kccgst'],
- ])
-def test_compile_keymap_args(xkbcli_compile_keymap, args):
- xkbcli_compile_keymap.run_command_success(args)
-
-
-@pytest.mark.parametrize('rmlvos', rmlvos)
-def test_compile_keymap_rmlvo(xkbcli_compile_keymap, rmlvos):
- xkbcli_compile_keymap.run_command_success(rmlvos)
-
-
-@pytest.mark.parametrize('args', [['--include', '.', '--include-defaults'],
- ['--include', '/tmp', '--include-defaults'],
- ])
-def test_compile_keymap_include(xkbcli_compile_keymap, args):
- # Succeeds thanks to include-defaults
- xkbcli_compile_keymap.run_command_success(args)
-
-
-def test_compile_keymap_include_invalid(xkbcli_compile_keymap):
- # A non-directory is rejected by default
- args = ['--include', '/proc/version']
- rc, stdout, stderr = xkbcli_compile_keymap.run_command(args)
- assert rc == 1, (stdout, stderr)
- assert "There are no include paths to search" in stderr
-
- # A non-existing directory is rejected by default
- args = ['--include', '/tmp/does/not/exist']
- rc, stdout, stderr = xkbcli_compile_keymap.run_command(args)
- assert rc == 1, (stdout, stderr)
- assert "There are no include paths to search" in stderr
-
- # Valid dir, but missing files
- args = ['--include', '/tmp']
- rc, stdout, stderr = xkbcli_compile_keymap.run_command(args)
- assert rc == 1, (stdout, stderr)
- assert "Couldn't look up rules" in stderr
-
-
-# Unicode codepoint conversions, we support whatever strtol does
-@pytest.mark.parametrize('args', [['123'], ['0x123'], ['0123']])
-def test_how_to_type(xkbcli_how_to_type, args):
- xkbcli_how_to_type.run_command_success(args)
-
-
-@pytest.mark.parametrize('rmlvos', rmlvos)
-def test_how_to_type_rmlvo(xkbcli_how_to_type, rmlvos):
- args = rmlvos + ['0x1234']
- xkbcli_how_to_type.run_command_success(args)
-
-
-@pytest.mark.parametrize('args', [['--verbose'],
- ['-v'],
- ['--verbose', '--load-exotic'],
- ['--load-exotic'],
- ['--ruleset=evdev'],
- ['--ruleset=base'],
- ])
-def test_list_rmlvo(xkbcli_list, args):
- xkbcli_list.run_command_success(args)
-
-
-def test_list_rmlvo_includes(xkbcli_list):
- args = ['/tmp/']
- xkbcli_list.run_command_success(args)
-
-
-def test_list_rmlvo_includes_invalid(xkbcli_list):
- args = ['/proc/version']
- rc, stdout, stderr = xkbcli_list.run_command(args)
- assert rc == 1
- assert "Failed to append include path" in stderr
-
-
-def test_list_rmlvo_includes_no_defaults(xkbcli_list):
- args = ['--skip-default-paths', '/tmp']
- rc, stdout, stderr = xkbcli_list.run_command(args)
- assert rc == 1
- assert "Failed to parse XKB description" in stderr
-
-
-@pytest.mark.skipif(not os.path.exists('/dev/input/event0'), reason='event node required')
-@pytest.mark.skipif(not os.access('/dev/input/event0', os.R_OK), reason='insufficient permissions')
-@pytest.mark.parametrize('rmlvos', rmlvos)
-def test_interactive_evdev_rmlvo(xkbcli_interactive_evdev, rmlvos):
- return
- xkbcli_interactive_evdev.run_command_success(rmlvos)
-
-
-@pytest.mark.skipif(not os.path.exists('/dev/input/event0'),
- reason='event node required')
-@pytest.mark.skipif(not os.access('/dev/input/event0', os.R_OK),
- reason='insufficient permissions')
-@pytest.mark.parametrize('args', [['--report-state-changes'],
- ['--enable-compose'],
- ['--consumed-mode=xkb'],
- ['--consumed-mode=gtk'],
- ['--without-x11-offset'],
- ])
-def test_interactive_evdev(xkbcli_interactive_evdev, args):
- # Note: --enable-compose fails if $prefix doesn't have the compose tables
- # installed
- xkbcli_interactive_evdev.run_command_success(args)
-
-
-@pytest.mark.skipif(not os.getenv('DISPLAY'), reason='DISPLAY not set')
-def test_interactive_x11(xkbcli_interactive_x11):
- # To be filled in if we handle something other than --help
- pass
-
-
-@pytest.mark.skipif(not os.getenv('WAYLAND_DISPLAY'),
- reason='WAYLAND_DISPLAY not set')
-def test_interactive_wayland(xkbcli_interactive_wayland):
- # To be filled in if we handle something other than --help
- pass
+ def __str__(self):
+ return str(self.subtool)
+
+
+class TestXkbcli(unittest.TestCase):
+ @classmethod
+ def setUpClass(cls):
+ cls.xkbcli = XkbcliTool()
+ cls.xkbcli_list = XkbcliTool('list', skipIf=(
+ (not int(os.getenv('HAVE_XKBCLI_LIST', '1')), 'xkbregistory not enabled'),
+ ))
+ cls.xkbcli_how_to_type = XkbcliTool('how-to-type')
+ cls.xkbcli_compile_keymap = XkbcliTool('compile-keymap')
+ cls.xkbcli_interactive_evdev = XkbcliTool('interactive-evdev', skipIf=(
+ (not int(os.getenv('HAVE_XKBCLI_INTERACTIVE_EVDEV', '1')), 'evdev not enabled'),
+ (not os.path.exists('/dev/input/event0'), 'event node required'),
+ (not os.access('/dev/input/event0', os.R_OK), 'insufficient permissions'),
+ ))
+ cls.xkbcli_interactive_x11 = XkbcliTool('interactive-x11', skipIf=(
+ (not int(os.getenv('HAVE_XKBCLI_INTERACTIVE_X11', '1')), 'x11 not enabled'),
+ (not os.getenv('DISPLAY'), 'DISPLAY not set'),
+ ))
+ cls.xkbcli_interactive_wayland = XkbcliTool('interactive-wayland', skipIf=(
+ (not int(os.getenv('HAVE_XKBCLI_INTERACTIVE_WAYLAND', '1')), 'wayland not enabled'),
+ (not os.getenv('WAYLAND_DISPLAY'), 'WAYLAND_DISPLAY not set'),
+ ))
+ cls.all_tools = [
+ cls.xkbcli,
+ cls.xkbcli_list,
+ cls.xkbcli_how_to_type,
+ cls.xkbcli_compile_keymap,
+ cls.xkbcli_interactive_evdev,
+ cls.xkbcli_interactive_x11,
+ cls.xkbcli_interactive_wayland,
+ ]
+
+ def test_help(self):
+ # --help is supported by all tools
+ for tool in self.all_tools:
+ with self.subTest(tool=tool):
+ stdout, stderr = tool.run_command_success(['--help'])
+ assert stdout.startswith('Usage:')
+ assert stderr == ''
+
+ def test_invalid_option(self):
+ # --foobar generates "Usage:" for all tools
+ for tool in self.all_tools:
+ with self.subTest(tool=tool):
+ tool.run_command_unrecognized_option(['--foobar'])
+
+ def test_xkbcli_version(self):
+ # xkbcli --version
+ stdout, stderr = self.xkbcli.run_command_success(['--version'])
+ assert stdout.startswith('1')
+ assert stderr == ''
+
+ def test_xkbcli_too_many_args(self):
+ self.xkbcli.run_command_invalid(['a'] * 64)
+
+ def test_compile_keymap_args(self):
+ for args in (
+ ['--verbose'],
+ ['--rmlvo'],
+ # ['--kccgst'],
+ ['--verbose', '--rmlvo'],
+ # ['--verbose', '--kccgst'],
+ ):
+ with self.subTest(args=args):
+ self.xkbcli_compile_keymap.run_command_success(args)
+
+ def test_compile_keymap_rmlvo(self):
+ for rmlvo in rmlvos:
+ with self.subTest(rmlvo=rmlvo):
+ self.xkbcli_compile_keymap.run_command_success(rmlvo)
+
+ def test_compile_keymap_include(self):
+ for args in (
+ ['--include', '.', '--include-defaults'],
+ ['--include', '/tmp', '--include-defaults'],
+ ):
+ with self.subTest(args=args):
+ # Succeeds thanks to include-defaults
+ self.xkbcli_compile_keymap.run_command_success(args)
+
+ def test_compile_keymap_include_invalid(self):
+ # A non-directory is rejected by default
+ args = ['--include', '/proc/version']
+ rc, stdout, stderr = self.xkbcli_compile_keymap.run_command(args)
+ assert rc == 1, (stdout, stderr)
+ assert "There are no include paths to search" in stderr
+
+ # A non-existing directory is rejected by default
+ args = ['--include', '/tmp/does/not/exist']
+ rc, stdout, stderr = self.xkbcli_compile_keymap.run_command(args)
+ assert rc == 1, (stdout, stderr)
+ assert "There are no include paths to search" in stderr
+
+ # Valid dir, but missing files
+ args = ['--include', '/tmp']
+ rc, stdout, stderr = self.xkbcli_compile_keymap.run_command(args)
+ assert rc == 1, (stdout, stderr)
+ assert "Couldn't look up rules" in stderr
+
+ def test_how_to_type(self):
+ # Unicode codepoint conversions, we support whatever strtol does
+ for args in (['123'], ['0x123'], ['0123']):
+ with self.subTest(args=args):
+ self.xkbcli_how_to_type.run_command_success(args)
+
+ def test_how_to_type_rmlvo(self):
+ for rmlvo in rmlvos:
+ with self.subTest(rmlvo=rmlvo):
+ args = rmlvo + ['0x1234']
+ self.xkbcli_how_to_type.run_command_success(args)
+
+ def test_list_rmlvo(self):
+ for args in (
+ ['--verbose'],
+ ['-v'],
+ ['--verbose', '--load-exotic'],
+ ['--load-exotic'],
+ ['--ruleset=evdev'],
+ ['--ruleset=base'],
+ ):
+ with self.subTest(args=args):
+ self.xkbcli_list.run_command_success(args)
+
+ def test_list_rmlvo_includes(self):
+ args = ['/tmp/']
+ self.xkbcli_list.run_command_success(args)
+
+ def test_list_rmlvo_includes_invalid(self):
+ args = ['/proc/version']
+ rc, stdout, stderr = self.xkbcli_list.run_command(args)
+ assert rc == 1
+ assert "Failed to append include path" in stderr
+
+ def test_list_rmlvo_includes_no_defaults(self):
+ args = ['--skip-default-paths', '/tmp']
+ rc, stdout, stderr = self.xkbcli_list.run_command(args)
+ assert rc == 1
+ assert "Failed to parse XKB description" in stderr
+
+ def test_interactive_evdev_rmlvo(self):
+ for rmlvo in rmlvos:
+ with self.subTest(rmlvo=rmlvo):
+ self.xkbcli_interactive_evdev.run_command_success(rmlvos)
+
+ def test_interactive_evdev(self):
+ # Note: --enable-compose fails if $prefix doesn't have the compose tables
+ # installed
+ for args in (
+ ['--report-state-changes'],
+ ['--enable-compose'],
+ ['--consumed-mode=xkb'],
+ ['--consumed-mode=gtk'],
+ ['--without-x11-offset'],
+ ):
+ with self.subTest(args=args):
+ self.xkbcli_interactive_evdev.run_command_success(args)
+
+ def test_interactive_x11(self):
+ # To be filled in if we handle something other than --help
+ pass
+
+ def test_interactive_wayland(self):
+ # To be filled in if we handle something other than --help
+ pass
if __name__ == '__main__':
with tempfile.TemporaryDirectory() as tmpdir:
+ # Use our own test xkeyboard-config copy.
+ os.environ['XKB_CONFIG_ROOT'] = top_srcdir + '/test/data'
# libxkbcommon has fallbacks when XDG_CONFIG_HOME isn't set so we need
# to override it with a known (empty) directory. Otherwise our test
# behavior depends on the system the test is run on.
os.environ['XDG_CONFIG_HOME'] = tmpdir
+ # Prevent the legacy $HOME/.xkb from kicking in.
+ del os.environ['HOME']
# This needs to be separated if we do specific extra path testing
os.environ['XKB_CONFIG_EXTRA_PATH'] = tmpdir
- sys.exit(pytest.main(args=[__file__]))
+ unittest.main()
diff --git a/tools/how-to-type.c b/tools/how-to-type.c
index 903a3ed..0a6f79e 100644
--- a/tools/how-to-type.c
+++ b/tools/how-to-type.c
@@ -38,7 +38,6 @@ usage(const char *argv0, FILE *fp)
fprintf(fp, "Usage: %s [--rules <rules>] [--model <model>] "
"[--layout <layout>] [--variant <variant>] [--options <options>]"
" <unicode codepoint>\n", argv0);
- fprintf(fp, "Pipe into `column -ts $'\\t'` for nicely aligned output.\n");
}
int
@@ -155,7 +154,8 @@ main(int argc, char *argv[])
}
printf("keysym: %s (%#x)\n", name, keysym);
- printf("KEYCODE\tKEY NAME\tLAYOUT#\tLAYOUT NAME\tLEVEL#\tMODIFIERS\n");
+ printf("%-8s %-9s %-8s %-20s %-7s %-s\n",
+ "KEYCODE", "KEY NAME", "LAYOUT", "LAYOUT NAME", "LEVEL#", "MODIFIERS");
min_keycode = xkb_keymap_min_keycode(keymap);
max_keycode = xkb_keymap_max_keycode(keymap);
@@ -202,7 +202,7 @@ main(int argc, char *argv[])
for (size_t i = 0; i < num_masks; i++) {
xkb_mod_mask_t mask = masks[i];
- printf("%u\t%s\t%u\t%s\t%u\t[ ",
+ printf("%-8u %-9s %-8u %-20s %-7u [ ",
keycode, key_name, layout + 1, layout_name, level + 1);
for (xkb_mod_index_t mod = 0; mod < num_mods; mod++) {
if ((mask & (1 << mod)) == 0) {
diff --git a/tools/xkbcli-how-to-type.1 b/tools/xkbcli-how-to-type.1
index a697e20..5211d0f 100644
--- a/tools/xkbcli-how-to-type.1
+++ b/tools/xkbcli-how-to-type.1
@@ -13,11 +13,8 @@
.
.Sh DESCRIPTION
.Nm
-prints key sequences to type the given Unicode codepoint.
-.Pp
-Pipe into
-.Dq "column \-ts $\'\e\et\'"
-for nicely aligned output.
+prints the key combinations (keycode + modifiers) in the keymap's layouts which
+would produce the given Unicode codepoint.
.
.Bl -tag -width Ds
.It Fl \-rules Ar rules
diff --git a/xkbcommon-x11.pc.in b/xkbcommon-x11.pc.in
deleted file mode 100644
index c4efc43..0000000
--- a/xkbcommon-x11.pc.in
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: xkbcommon-x11
-Description: XKB API common to servers and clients - X11 support
-Version: @PACKAGE_VERSION@
-Requires: xkbcommon
-Requires.private: xcb xcb-xkb
-Cflags: -I${includedir}
-Libs: -L${libdir} -lxkbcommon-x11
diff --git a/xkbcommon.pc.in b/xkbcommon.pc.in
deleted file mode 100644
index 17e1172..0000000
--- a/xkbcommon.pc.in
+++ /dev/null
@@ -1,10 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: xkbcommon
-Description: XKB API common to servers and clients
-Version: @PACKAGE_VERSION@
-Cflags: -I${includedir}
-Libs: -L${libdir} -lxkbcommon