aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2022-08-15 22:02:45 -0700
committerXin Li <delphij@google.com>2022-08-15 22:02:45 -0700
commit0381da6fe61aadd73352cad8a7568501b5b97b6a (patch)
tree876958239f94fd3777080157f13d15f301cf52a2
parent2b7ad37a4f3c898de694cad1dd0e1cc0130650ef (diff)
parent406f81b3e5f7a07220dd1d9e4e081cf9c04f495d (diff)
downloadlibxkbcommon-0381da6fe61aadd73352cad8a7568501b5b97b6a.tar.gz
DO NOT MERGE - Merge Android 13main-16k
Bug: 242648940 Merged-In: I278a58f24712b21522e6a14a2a6a3979406b40e9 Change-Id: I4f50b1a0e4c609f050ea6efd37d7098d8c4f3349
-rw-r--r--Android.bp23
-rw-r--r--METADATA11
-rw-r--r--NEWS126
-rw-r--r--README.md1
-rw-r--r--bench/.gitignore4
-rw-r--r--bench/atom.c93
-rw-r--r--bench/compose.c2
-rw-r--r--bench/rules.c3
-rw-r--r--bench/rulescomp.c2
l---------config.h1
-rw-r--r--config/config.h2
-rw-r--r--config/libxkbcommon.so.0.0.0.p/parser.c588
-rw-r--r--config/libxkbcommon.so.0.0.0.p/parser.h8
-rw-r--r--doc/.gitignore2
-rw-r--r--doc/keymap-format-text-v1.md116
-rw-r--r--doc/user-configuration.md4
-rw-r--r--fuzz/.gitignore1
-rw-r--r--include/xkbcommon/xkbcommon-compat.h (renamed from xkbcommon/xkbcommon-compat.h)0
-rw-r--r--include/xkbcommon/xkbcommon-compose.h (renamed from xkbcommon/xkbcommon-compose.h)0
-rw-r--r--include/xkbcommon/xkbcommon-keysyms.h (renamed from xkbcommon/xkbcommon-keysyms.h)437
-rw-r--r--include/xkbcommon/xkbcommon-names.h (renamed from xkbcommon/xkbcommon-names.h)0
-rw-r--r--include/xkbcommon/xkbcommon-x11.h (renamed from xkbcommon/xkbcommon-x11.h)0
-rw-r--r--include/xkbcommon/xkbcommon.h (renamed from xkbcommon/xkbcommon.h)7
-rw-r--r--include/xkbcommon/xkbregistry.h (renamed from xkbcommon/xkbregistry.h)0
-rw-r--r--meson.build156
-rw-r--r--meson_options.txt8
-rwxr-xr-xscripts/makeheader11
-rwxr-xr-xscripts/makekeys40
-rwxr-xr-xscripts/map-to-def30
-rw-r--r--scripts/meson-junit-report.py92
-rw-r--r--scripts/perfect_hash.py674
-rwxr-xr-xscripts/update-keysyms4
-rw-r--r--src/atom.c133
-rw-r--r--src/compose/parser.c171
-rw-r--r--src/compose/state.c31
-rw-r--r--src/compose/table.c18
-rw-r--r--src/compose/table.h77
-rw-r--r--src/keysym-utf.c6
-rw-r--r--src/keysym.c210
-rw-r--r--src/ks_tables.h7741
-rw-r--r--src/registry.c46
-rw-r--r--src/utils.h1
-rw-r--r--src/x11/keymap.c196
-rw-r--r--src/x11/util.c224
-rw-r--r--src/x11/x11-priv.h60
-rw-r--r--src/xkbcomp/.gitignore2
-rw-r--r--src/xkbcomp/action.c9
-rw-r--r--src/xkbcomp/ast-build.c11
-rw-r--r--src/xkbcomp/ast.h1
-rw-r--r--src/xkbcomp/compat.c2
-rw-r--r--test/.gitignore24
-rw-r--r--test/compose.c54
-rw-r--r--test/data/locale/compose.dir944
-rw-r--r--test/data/locale/en_US.UTF-8/Compose5973
-rw-r--r--test/data/locale/locale.alias2482
-rw-r--r--test/data/locale/locale.dir948
-rw-r--r--test/data/symbols/compose89
-rwxr-xr-xtest/data/sync.sh11
-rw-r--r--test/keysym.c21
-rw-r--r--test/registry.c201
-rwxr-xr-xtest/test-keysym.py71
-rwxr-xr-xtest/tool-option-parsing.py36
-rwxr-xr-xtest/xkeyboard-config-test.py.in278
-rw-r--r--tools/compose.c126
-rw-r--r--tools/how-to-type.c41
-rw-r--r--tools/interactive-evdev.c45
-rw-r--r--tools/interactive-wayland.c35
-rw-r--r--tools/interactive-x11.c2
-rw-r--r--tools/registry-list.c68
-rw-r--r--tools/xkbcli-how-to-type.15
-rw-r--r--tools/xkbcli-interactive-evdev.12
-rw-r--r--tools/xkbcli-list.18
-rw-r--r--tools/xkbcli.16
-rw-r--r--tools/xkbcli.c2
74 files changed, 18044 insertions, 4813 deletions
diff --git a/Android.bp b/Android.bp
index c766cd5..9803e87 100644
--- a/Android.bp
+++ b/Android.bp
@@ -34,6 +34,7 @@ license {
name: "external_libxkbcommon_license",
visibility: [":__subpackages__"],
license_kinds: [
+ "SPDX-license-identifier-BSD-3-Clause",
"SPDX-license-identifier-GPL",
"SPDX-license-identifier-GPL-2.0",
"SPDX-license-identifier-GPL-3.0",
@@ -71,26 +72,38 @@ cc_library_static {
"src/atom.c",
"src/context.c",
"src/context-priv.c",
- "src/keysym.c",
- "src/keysym-utf.c",
"src/keymap.c",
"src/keymap-priv.c",
+ "src/keysym.c",
+ "src/keysym-utf.c",
+ "src/registry.c",
"src/state.c",
"src/text.c",
"src/utf8.c",
+ "src/util-list.c",
"src/utils.c",
],
cflags: [
- "-std=c99",
+ "-std=c11",
+ "-fno-strict-aliasing",
+ "-fsanitize-undefined-trap-on-error",
"-Wall",
"-Werror",
+ "-Wno-format",
"-Wno-unused-parameter",
"-Wno-missing-field-initializers",
// Needed because libxkbcommon uses GNU extension asprintf().
"-D_GNU_SOURCE",
],
- local_include_dirs: ["src", "config/libxkbcommon.so.0.0.0.p"],
- export_include_dirs: ["."],
+ static_libs: [
+ "libxml2"
+ ],
+ local_include_dirs: [
+ "src",
+ "config",
+ "config/libxkbcommon.so.0.0.0.p"
+ ],
+ export_include_dirs: ["include"],
vendor_available: true,
host_supported: true,
name: "libxkbcommon",
diff --git a/METADATA b/METADATA
index 83f420b..a57c127 100644
--- a/METADATA
+++ b/METADATA
@@ -7,14 +7,15 @@ third_party {
}
url {
type: ARCHIVE
- value: "https://github.com/xkbcommon/libxkbcommon/archive/xkbcommon-1.0.3.tar.gz"
+ value: "https://xkbcommon.org/download/libxkbcommon-1.4.0.tar.xz"
}
- version: "xkbcommon-1.0.3"
+ version: "xkbcommon-1.4.0"
license_note: "would be NOTICE save for test/evdev-scancodes.h"
license_type: RESTRICTED
last_upgrade_date {
- year: 2020
- month: 11
- day: 24
+ year: 2022
+ month: 4
+ day: 22
}
+ local_modifications: "atom_intern() in atom.c is modified to suppress Wreturn-type warning."
}
diff --git a/NEWS b/NEWS
index 968f183..3b35bb6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,129 @@
+libxkbcommon 1.4.0 - 2022-02-04
+==================
+
+- Add `enable-tools` option to Meson build (on by default) to allow disabling
+ the `xkbcli` tools.
+
+ Contributed by Alex Xu (Hello71).
+
+- In `xkbcli list`, fix "YAML Norway problem" in output.
+
+ Contributed by Peter Hutterer.
+
+- In libxkbregistry, variants now inherit iso639, iso3166 and brief from parent
+ layout if omitted.
+
+ Contributed by M Hickford.
+
+- In libxkbregistry, don't call `xmlCleanupParser()` - it's not supposed to
+ be called by libraries.
+
+ Contributed by Peter Hutterer.
+
+- In libxkbregistry, skip over invalid ISO-639 or ISO-3166 entries.
+
+ Contributed by Peter Hutterer.
+
+libxkbcommon 1.3.1 - 2021-09-10
+==================
+
+- In `xkbcli interactive-x11`, use the Esc keysym instead of the Esc keycode
+ for quitting.
+
+ Contributed by Simon Ser.
+
+- In `xkbcli how-to-type`, add `--keysym` argugment for how to type a keysym
+ instead of a Unicode codepoint.
+
+- Fix a crash in `xkb_x11_keymap_new_from_device` error handling given some
+ invalid keymaps. Regressed in 1.2.0.
+
+ Reported by Zack Weinberg. Tested by Uli Schlachter.
+
+libxkbcommon 1.3.0 - 2021-05-01
+==================
+
+- Change `xkbcli list` to output YAML, instead of the previous ad-hoc format.
+
+ This allows to more easily process the information in a programmetic way, for
+ example
+
+ xkbcli list | yq -r ".layouts[].layout"
+
+ Contributed by Peter Hutterer.
+
+- Optimize a certain part of keymap compilation (atom interning).
+
+- Fix segmentation fault in case-insensitive `xkb_keysym_from_name` for certain
+ values like the empty string.
+
+ Contributed by Isaac Freund.
+
+- Support building libxkbcommon as a meson subproject.
+
+ Contributed by Adrian Perez de Castro.
+
+- Add `ftruncate` fallback for `posix_fallocate` in `xkbcli interactive-wayland`
+ for FreeBSD.
+
+ Contributed by Evgeniy Khramtsov.
+
+- Properly export library symbols in MSVC.
+
+ Contributed by Adrian Perez de Castro.
+
+libxkbcommon 1.2.1 - 2021-04-07
+==================
+
+- Fix `xkb_x11_keymap_new_from_device()` failing when the keymap contains key
+ types with missing level names, like the one used by the `numpad:mac` option
+ in xkeyboard-config. Regressed in 1.2.0.
+
+libxkbcommon 1.2.0 - 2021-04-03
+==================
+
+- `xkb_x11_keymap_new_from_device()` is much faster. It now performs only 2
+ roundtrips to the X server, instead of dozens (in first-time calls).
+
+ Contributed by Uli Schlachter.
+
+- Case-sensitive `xkb_keysym_from_name()` is much faster.
+
+- Keysym names of the form `0x12AB` and `U12AB` are parsed more strictly.
+ Previously the hexadecimal part was parsed with `strtoul()`, now only up
+ to 8 hexadecimal digits (0-9A-Fa-f) are allowed.
+
+- Compose files now have a size limit (65535 internal nodes). Further sequences
+ are discared and a warning is issued.
+
+- Compose table loading (`xkb_compose_table_new_from_locale()` and similar) is
+ much faster.
+
+- Use `poll()` instead of `epoll()` for `xlbcli interactive-evdev`, making it
+ portable to FreeBSD which provides evdev but not epoll. On FreeBSD, remember
+ to install the `evdev-proto` package to get the evdev headers.
+
+- The build now requires a C11 compiler (uses anonymous structs/unions).
+
+libxkbcommon 1.1.0 - 2021-02-27
+==================
+
+- Publish the `xkb-format-text-v1.md` file in the HTML documentation. This file
+ existed for a long time but only in the Git repository.
+ Link: https://xkbcommon.org/doc/current/md_doc_keymap_format_text_v1.html
+
+- Add partial documentation for xkb_symbols to xkb-format-text-v1.md.
+
+ Contributed by Simon Zeni.
+
+- Update keysym definitions to latest xorgproto. In particular, this adds many
+ special keysyms corresponding to Linux evdev keycodes.
+
+ Contributed by Peter Hutterer <@who-t.net>.
+
+- New API:
+ Too many XKB_KEY_* definitions to list here.
+
libxkbcommon 1.0.3 - 2020-11-23
==================
diff --git a/README.md b/README.md
index 74d1d27..4425578 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ libxkbcommon is built with [Meson](http://mesonbuild.com/):
meson setup build
ninja -C build
+ ninja -C build test # Run the tests.
To build for use with Wayland, you can disable X11 support while still
using the X11 keyboard configuration resource files thusly:
diff --git a/bench/.gitignore b/bench/.gitignore
deleted file mode 100644
index cd32dfc..0000000
--- a/bench/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-key-proc
-rules
-rulescomp
-compose
diff --git a/bench/atom.c b/bench/atom.c
new file mode 100644
index 0000000..7d78f64
--- /dev/null
+++ b/bench/atom.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2021 Ran Benita <ran@unusedvar.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "config.h"
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#include "atom.h"
+#include "bench.h"
+#include "darray.h"
+
+#define BENCHMARK_ITERATIONS 100
+
+int
+main(void)
+{
+ FILE *file;
+ char wordbuf[1024];
+ darray(char *) words;
+ char **worditer;
+ struct atom_table *table;
+ xkb_atom_t atom;
+ const char *text;
+ struct bench bench;
+ char *elapsed;
+
+ darray_init(words);
+ file = fopen("/usr/share/dict/words", "rb");
+ if (file == NULL) {
+ perror("/usr/share/dict/words");
+ return -1;
+ }
+ while (fgets(wordbuf, sizeof(wordbuf), file)) {
+ size_t len = strlen(wordbuf);
+ if (len > 0 && wordbuf[len - 1] == '\n')
+ wordbuf[len - 1] = '\0';
+ darray_append(words, strdup(wordbuf));
+ }
+ fclose(file);
+
+ bench_start(&bench);
+ for (int i = 0; i < BENCHMARK_ITERATIONS; i++) {
+ table = atom_table_new();
+ assert(table);
+
+ darray_foreach(worditer, words) {
+ atom = atom_intern(table, *worditer, strlen(*worditer) - 1, true);
+ assert(atom != XKB_ATOM_NONE);
+
+ text = atom_text(table, atom);
+ assert(text != NULL);
+ }
+
+ atom_table_free(table);
+ }
+ bench_stop(&bench);
+
+ elapsed = bench_elapsed_str(&bench);
+ fprintf(stderr, "%d iterations in %ss\n",
+ BENCHMARK_ITERATIONS, elapsed);
+ free(elapsed);
+
+ darray_foreach(worditer, words) {
+ free(*worditer);
+ }
+ darray_free(words);
+
+ return 0;
+}
diff --git a/bench/compose.c b/bench/compose.c
index 7ff0798..4198e32 100644
--- a/bench/compose.c
+++ b/bench/compose.c
@@ -45,7 +45,7 @@ main(void)
ctx = test_get_context(CONTEXT_NO_FLAG);
assert(ctx);
- path = test_get_path("compose/en_US.UTF-8/Compose");
+ path = test_get_path("locale/en_US.UTF-8/Compose");
file = fopen(path, "rb");
if (file == NULL) {
perror(path);
diff --git a/bench/rules.c b/bench/rules.c
index 3206583..1306dc4 100644
--- a/bench/rules.c
+++ b/bench/rules.c
@@ -40,7 +40,6 @@ main(int argc, char *argv[])
struct xkb_rule_names rmlvo = {
"evdev", "pc105", "us,il", ",", "ctrl:nocaps,grp:menu_toggle",
};
- struct xkb_component_names kccgst;
struct bench bench;
char *elapsed;
@@ -52,6 +51,8 @@ main(int argc, char *argv[])
bench_start(&bench);
for (i = 0; i < BENCHMARK_ITERATIONS; i++) {
+ struct xkb_component_names kccgst;
+
assert(xkb_components_from_rules(ctx, &rmlvo, &kccgst));
free(kccgst.keycodes);
free(kccgst.types);
diff --git a/bench/rulescomp.c b/bench/rulescomp.c
index 3972a7b..0da4d3c 100644
--- a/bench/rulescomp.c
+++ b/bench/rulescomp.c
@@ -28,7 +28,7 @@
#include "../test/test.h"
#include "bench.h"
-#define BENCHMARK_ITERATIONS 2500
+#define BENCHMARK_ITERATIONS 1000
int
main(int argc, char *argv[])
diff --git a/config.h b/config.h
deleted file mode 120000
index 2d4dea9..0000000
--- a/config.h
+++ /dev/null
@@ -1 +0,0 @@
-config/config.h \ No newline at end of file
diff --git a/config/config.h b/config/config.h
index 76ab62a..1ac39f3 100644
--- a/config/config.h
+++ b/config/config.h
@@ -45,7 +45,7 @@
#define LIBXKBCOMMON_TOOL_PATH "/usr/local/libexec/xkbcommon"
-#define LIBXKBCOMMON_VERSION "1.0.3"
+#define LIBXKBCOMMON_VERSION "1.4.0"
#define WIN32_LEAN_AND_MEAN 1
diff --git a/config/libxkbcommon.so.0.0.0.p/parser.c b/config/libxkbcommon.so.0.0.0.p/parser.c
index 921673f..bbb4c1e 100644
--- a/config/libxkbcommon.so.0.0.0.p/parser.c
+++ b/config/libxkbcommon.so.0.0.0.p/parser.c
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.7.2. */
+/* A Bison parser, made by GNU Bison 3.8.2. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -45,11 +45,11 @@
define necessary library symbols; they are noted "INFRINGES ON
USER NAME SPACE" below. */
-/* Identify Bison output. */
-#define YYBISON 1
+/* Identify Bison output, and Bison version. */
+#define YYBISON 30802
-/* Bison version. */
-#define YYBISON_VERSION "3.7.2"
+/* Bison version string. */
+#define YYBISON_VERSION "3.8.2"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -334,6 +334,18 @@ typedef int_least16_t yytype_int16;
typedef short yytype_int16;
#endif
+/* Work around bug in HP-UX 11.23, which defines these macros
+ incorrectly for preprocessor constants. This workaround can likely
+ be removed in 2023, as HPE has promised support for HP-UX 11.23
+ (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+ <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
+#ifdef __hpux
+# undef UINT_LEAST8_MAX
+# undef UINT_LEAST16_MAX
+# define UINT_LEAST8_MAX 255
+# define UINT_LEAST16_MAX 65535
+#endif
+
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
@@ -431,17 +443,23 @@ typedef int yy_state_fast_t;
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
+# define YY_USE(E) ((void) (E))
#else
-# define YYUSE(E) /* empty */
+# define YY_USE(E) /* empty */
#endif
-#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
+# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
+# else
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# endif
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop")
#else
@@ -655,7 +673,7 @@ static const yytype_int8 yytranslate[] =
};
#if YYDEBUG
- /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
0, 254, 254, 256, 258, 262, 268, 269, 270, 273,
@@ -727,21 +745,6 @@ yysymbol_name (yysymbol_kind_t yysymbol)
}
#endif
-#ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
- (internal) symbol number NUM (which must be that of a token). */
-static const yytype_int16 yytoknum[] =
-{
- 0, 256, 257, 255, 1, 2, 3, 4, 5, 6,
- 7, 8, 10, 11, 12, 13, 14, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 60, 61, 62, 63, 64, 70, 71, 72,
- 73, 74, 75, 76, 77
-};
-#endif
-
#define YYPACT_NINF (-182)
#define yypact_value_is_default(Yyn) \
@@ -752,8 +755,8 @@ static const yytype_int16 yytoknum[] =
#define yytable_value_is_error(Yyn) \
0
- /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
static const yytype_int16 yypact[] =
{
176, -182, -182, -182, -182, -182, -182, -182, -182, -182,
@@ -792,9 +795,9 @@ static const yytype_int16 yypact[] =
-182, -182, -182, -182
};
- /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
- Performed when YYTABLE does not specify something else to do. Zero
- means the default is an error. */
+/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE does not specify something else to do. Zero
+ means the default is an error. */
static const yytype_uint8 yydefact[] =
{
18, 4, 21, 22, 23, 24, 25, 26, 27, 28,
@@ -833,7 +836,7 @@ static const yytype_uint8 yydefact[] =
97, 95, 90, 92
};
- /* YYPGOTO[NTERM-NUM]. */
+/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
-182, -182, -182, -182, -182, 181, -182, 402, -182, 389,
@@ -846,10 +849,10 @@ static const yytype_int16 yypgoto[] =
420, -182
};
- /* YYDEFGOTO[NTERM-NUM]. */
+/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 10, 11, 25, 34, 12, 26, 36, 14, 15,
+ 0, 10, 11, 25, 34, 12, 26, 36, 14, 15,
37, 46, 167, 73, 74, 75, 92, 93, 76, 100,
168, 77, 78, 173, 174, 175, 79, 80, 195, 82,
83, 84, 196, 197, 293, 294, 319, 320, 198, 312,
@@ -859,9 +862,9 @@ static const yytype_int16 yydefgoto[] =
29, 30
};
- /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule whose
- number is the opposite. If YYTABLE_NINF, syntax error. */
+/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule whose
+ number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
90, 101, 180, 241, 94, 184, 16, 69, 242, 102,
@@ -1018,8 +1021,8 @@ static const yytype_int16 yycheck[] =
-1, -1, 55, -1, -1, 58
};
- /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
+/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
+ state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
0, 0, 57, 58, 59, 60, 61, 62, 63, 64,
@@ -1058,7 +1061,7 @@ static const yytype_uint8 yystos[] =
105, 42, 49, 102
};
- /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
static const yytype_uint8 yyr1[] =
{
0, 65, 66, 66, 66, 67, 68, 68, 68, 69,
@@ -1082,7 +1085,7 @@ static const yytype_uint8 yyr1[] =
133, 134, 135, 135, 136
};
- /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
+/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
static const yytype_int8 yyr2[] =
{
0, 2, 1, 1, 1, 7, 1, 1, 1, 2,
@@ -1115,6 +1118,7 @@ enum { YYENOMEM = -2 };
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrorlab
+#define YYNOMEM goto yyexhaustedlab
#define YYRECOVERING() (!!yyerrstatus)
@@ -1155,10 +1159,7 @@ do { \
YYFPRINTF Args; \
} while (0)
-/* This macro is provided for backward compatibility. */
-# ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
+
# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
@@ -1182,16 +1183,12 @@ yy_symbol_value_print (FILE *yyo,
yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, struct parser_param *param)
{
FILE *yyoutput = yyo;
- YYUSE (yyoutput);
- YYUSE (param);
+ YY_USE (yyoutput);
+ YY_USE (param);
if (!yyvaluep)
return;
-# ifdef YYPRINT
- if (yykind < YYNTOKENS)
- YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
-# endif
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
- YYUSE (yykind);
+ YY_USE (yykind);
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
@@ -1305,8 +1302,8 @@ static void
yydestruct (const char *yymsg,
yysymbol_kind_t yykind, YYSTYPE *yyvaluep, struct parser_param *param)
{
- YYUSE (yyvaluep);
- YYUSE (param);
+ YY_USE (yyvaluep);
+ YY_USE (param);
if (!yymsg)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
@@ -1317,247 +1314,247 @@ yydestruct (const char *yymsg,
case YYSYMBOL_STRING: /* STRING */
#line 238 "../src/xkbcomp/parser.y"
{ free(((*yyvaluep).str)); }
-#line 1321 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1318 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_IDENT: /* IDENT */
#line 238 "../src/xkbcomp/parser.y"
{ free(((*yyvaluep).str)); }
-#line 1327 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1324 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_XkbFile: /* XkbFile */
#line 236 "../src/xkbcomp/parser.y"
{ if (!param->rtrn) FreeXkbFile(((*yyvaluep).file)); }
-#line 1333 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1330 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_XkbCompositeMap: /* XkbCompositeMap */
#line 236 "../src/xkbcomp/parser.y"
{ if (!param->rtrn) FreeXkbFile(((*yyvaluep).file)); }
-#line 1339 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1336 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_XkbMapConfigList: /* XkbMapConfigList */
#line 237 "../src/xkbcomp/parser.y"
{ FreeXkbFile(((*yyvaluep).fileList).head); }
-#line 1345 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1342 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_XkbMapConfig: /* XkbMapConfig */
#line 236 "../src/xkbcomp/parser.y"
{ if (!param->rtrn) FreeXkbFile(((*yyvaluep).file)); }
-#line 1351 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1348 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_DeclList: /* DeclList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).anyList).head); }
-#line 1357 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1354 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_Decl: /* Decl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).any)); }
-#line 1363 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1360 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_VarDecl: /* VarDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).var)); }
-#line 1369 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1366 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_KeyNameDecl: /* KeyNameDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).keyCode)); }
-#line 1375 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1372 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_KeyAliasDecl: /* KeyAliasDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).keyAlias)); }
-#line 1381 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1378 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_VModDecl: /* VModDecl */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).vmodList).head); }
-#line 1387 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1384 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_VModDefList: /* VModDefList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).vmodList).head); }
-#line 1393 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1390 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_VModDef: /* VModDef */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).vmod)); }
-#line 1399 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1396 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_InterpretDecl: /* InterpretDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).interp)); }
-#line 1405 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1402 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_InterpretMatch: /* InterpretMatch */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).interp)); }
-#line 1411 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1408 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_VarDeclList: /* VarDeclList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).varList).head); }
-#line 1417 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1414 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_KeyTypeDecl: /* KeyTypeDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).keyType)); }
-#line 1423 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1420 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_SymbolsDecl: /* SymbolsDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).syms)); }
-#line 1429 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1426 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_SymbolsBody: /* SymbolsBody */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).varList).head); }
-#line 1435 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1432 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_SymbolsVarDecl: /* SymbolsVarDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).var)); }
-#line 1441 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1438 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_ArrayInit: /* ArrayInit */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1447 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1444 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_GroupCompatDecl: /* GroupCompatDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).groupCompat)); }
-#line 1453 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1450 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_ModMapDecl: /* ModMapDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).modMask)); }
-#line 1459 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1456 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_LedMapDecl: /* LedMapDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).ledMap)); }
-#line 1465 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1462 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_LedNameDecl: /* LedNameDecl */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).ledName)); }
-#line 1471 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1468 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_CoordList: /* CoordList */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1477 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1474 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_Coord: /* Coord */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1483 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1480 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_OptExprList: /* OptExprList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).exprList).head); }
-#line 1489 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1486 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_ExprList: /* ExprList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).exprList).head); }
-#line 1495 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1492 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_Expr: /* Expr */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1501 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1498 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_Term: /* Term */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1507 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1504 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_ActionList: /* ActionList */
#line 232 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).exprList).head); }
-#line 1513 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1510 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_Action: /* Action */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1519 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1516 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_Lhs: /* Lhs */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1525 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1522 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_Terminal: /* Terminal */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1531 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1528 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_OptKeySymList: /* OptKeySymList */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1537 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1534 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_KeySymList: /* KeySymList */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1543 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1540 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_KeySyms: /* KeySyms */
#line 229 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-#line 1549 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1546 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_OptMapName: /* OptMapName */
#line 238 "../src/xkbcomp/parser.y"
{ free(((*yyvaluep).str)); }
-#line 1555 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1552 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case YYSYMBOL_MapName: /* MapName */
#line 238 "../src/xkbcomp/parser.y"
{ free(((*yyvaluep).str)); }
-#line 1561 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1558 "libxkbcommon.so.0.0.0.p/parser.c"
break;
default:
@@ -1631,6 +1628,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
YYDPRINTF ((stderr, "Starting parse\n"));
yychar = YYEMPTY; /* Cause a token to be read. */
+
goto yysetstate;
@@ -1656,7 +1654,7 @@ yysetstate:
if (yyss + yystacksize - 1 <= yyssp)
#if !defined yyoverflow && !defined YYSTACK_RELOCATE
- goto yyexhaustedlab;
+ YYNOMEM;
#else
{
/* Get the current used size of the three stacks, in elements. */
@@ -1684,7 +1682,7 @@ yysetstate:
# else /* defined YYSTACK_RELOCATE */
/* Extend the stack our own way. */
if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
+ YYNOMEM;
yystacksize *= 2;
if (YYMAXDEPTH < yystacksize)
yystacksize = YYMAXDEPTH;
@@ -1695,7 +1693,7 @@ yysetstate:
YY_CAST (union yyalloc *,
YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
if (! yyptr)
- goto yyexhaustedlab;
+ YYNOMEM;
YYSTACK_RELOCATE (yyss_alloc, yyss);
YYSTACK_RELOCATE (yyvs_alloc, yyvs);
# undef YYSTACK_RELOCATE
@@ -1717,6 +1715,7 @@ yysetstate:
}
#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
+
if (yystate == YYFINAL)
YYACCEPT;
@@ -1831,55 +1830,55 @@ yyreduce:
case 2: /* XkbFile: XkbCompositeMap */
#line 255 "../src/xkbcomp/parser.y"
{ (yyval.file) = param->rtrn = (yyvsp[0].file); param->more_maps = !!param->rtrn; }
-#line 1835 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1834 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 3: /* XkbFile: XkbMapConfig */
#line 257 "../src/xkbcomp/parser.y"
{ (yyval.file) = param->rtrn = (yyvsp[0].file); param->more_maps = !!param->rtrn; YYACCEPT; }
-#line 1841 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1840 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 4: /* XkbFile: END_OF_FILE */
#line 259 "../src/xkbcomp/parser.y"
{ (yyval.file) = param->rtrn = NULL; param->more_maps = false; }
-#line 1847 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1846 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 1853 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1852 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 6: /* XkbCompositeType: XKB_KEYMAP */
#line 268 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_KEYMAP; }
-#line 1859 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1858 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 7: /* XkbCompositeType: XKB_SEMANTICS */
#line 269 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_KEYMAP; }
-#line 1865 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1864 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 8: /* XkbCompositeType: XKB_LAYOUT */
#line 270 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_KEYMAP; }
-#line 1871 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1870 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 1877 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1876 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 10: /* XkbMapConfigList: XkbMapConfig */
#line 276 "../src/xkbcomp/parser.y"
{ (yyval.fileList).head = (yyval.fileList).last = (yyvsp[0].file); }
-#line 1883 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1882 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 11: /* XkbMapConfig: OptFlags FileType OptMapName OBRACE DeclList CBRACE SEMI */
@@ -1887,109 +1886,109 @@ yyreduce:
{
(yyval.file) = XkbFileCreate((yyvsp[-5].file_type), (yyvsp[-4].str), (yyvsp[-2].anyList).head, (yyvsp[-6].mapFlags));
}
-#line 1891 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1890 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 12: /* FileType: XKB_KEYCODES */
#line 287 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_KEYCODES; }
-#line 1897 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1896 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 13: /* FileType: XKB_TYPES */
#line 288 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_TYPES; }
-#line 1903 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1902 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 14: /* FileType: XKB_COMPATMAP */
#line 289 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_COMPAT; }
-#line 1909 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1908 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 15: /* FileType: XKB_SYMBOLS */
#line 290 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_SYMBOLS; }
-#line 1915 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1914 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 16: /* FileType: XKB_GEOMETRY */
#line 291 "../src/xkbcomp/parser.y"
{ (yyval.file_type) = FILE_TYPE_GEOMETRY; }
-#line 1921 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1920 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 17: /* OptFlags: Flags */
#line 294 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = (yyvsp[0].mapFlags); }
-#line 1927 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1926 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 18: /* OptFlags: %empty */
#line 295 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = 0; }
-#line 1933 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1932 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 19: /* Flags: Flags Flag */
#line 298 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = ((yyvsp[-1].mapFlags) | (yyvsp[0].mapFlags)); }
-#line 1939 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1938 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 20: /* Flags: Flag */
#line 299 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = (yyvsp[0].mapFlags); }
-#line 1945 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1944 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 21: /* Flag: PARTIAL */
#line 302 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_IS_PARTIAL; }
-#line 1951 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1950 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 22: /* Flag: DEFAULT */
#line 303 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_IS_DEFAULT; }
-#line 1957 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1956 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 23: /* Flag: HIDDEN */
#line 304 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_IS_HIDDEN; }
-#line 1963 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1962 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 24: /* Flag: ALPHANUMERIC_KEYS */
#line 305 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_HAS_ALPHANUMERIC; }
-#line 1969 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1968 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 25: /* Flag: MODIFIER_KEYS */
#line 306 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_HAS_MODIFIER; }
-#line 1975 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1974 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 26: /* Flag: KEYPAD_KEYS */
#line 307 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_HAS_KEYPAD; }
-#line 1981 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1980 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 27: /* Flag: FUNCTION_KEYS */
#line 308 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_HAS_FN; }
-#line 1987 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1986 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 28: /* Flag: ALTERNATE_GROUP */
#line 309 "../src/xkbcomp/parser.y"
{ (yyval.mapFlags) = MAP_IS_ALTGR; }
-#line 1993 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 1992 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 29: /* DeclList: DeclList Decl */
@@ -2003,7 +2002,7 @@ yyreduce:
}
}
}
-#line 2007 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2006 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 30: /* DeclList: DeclList OptMergeMode VModDecl */
@@ -2017,13 +2016,13 @@ yyreduce:
(yyval.anyList).head = &(yyvsp[0].vmodList).head->common; (yyval.anyList).last = &(yyvsp[0].vmodList).last->common;
}
}
-#line 2021 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2020 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 31: /* DeclList: %empty */
#line 337 "../src/xkbcomp/parser.y"
{ (yyval.anyList).head = (yyval.anyList).last = NULL; }
-#line 2027 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2026 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 32: /* Decl: OptMergeMode VarDecl */
@@ -2032,7 +2031,7 @@ yyreduce:
(yyvsp[0].var)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].var);
}
-#line 2036 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2035 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 33: /* Decl: OptMergeMode InterpretDecl */
@@ -2041,7 +2040,7 @@ yyreduce:
(yyvsp[0].interp)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].interp);
}
-#line 2045 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2044 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 34: /* Decl: OptMergeMode KeyNameDecl */
@@ -2050,7 +2049,7 @@ yyreduce:
(yyvsp[0].keyCode)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].keyCode);
}
-#line 2054 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2053 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 35: /* Decl: OptMergeMode KeyAliasDecl */
@@ -2059,7 +2058,7 @@ yyreduce:
(yyvsp[0].keyAlias)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].keyAlias);
}
-#line 2063 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2062 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 36: /* Decl: OptMergeMode KeyTypeDecl */
@@ -2068,7 +2067,7 @@ yyreduce:
(yyvsp[0].keyType)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].keyType);
}
-#line 2072 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2071 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 37: /* Decl: OptMergeMode SymbolsDecl */
@@ -2077,7 +2076,7 @@ yyreduce:
(yyvsp[0].syms)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].syms);
}
-#line 2081 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2080 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 38: /* Decl: OptMergeMode ModMapDecl */
@@ -2086,7 +2085,7 @@ yyreduce:
(yyvsp[0].modMask)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].modMask);
}
-#line 2090 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2089 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 39: /* Decl: OptMergeMode GroupCompatDecl */
@@ -2095,7 +2094,7 @@ yyreduce:
(yyvsp[0].groupCompat)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].groupCompat);
}
-#line 2099 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2098 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 40: /* Decl: OptMergeMode LedMapDecl */
@@ -2104,7 +2103,7 @@ yyreduce:
(yyvsp[0].ledMap)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].ledMap);
}
-#line 2108 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2107 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 41: /* Decl: OptMergeMode LedNameDecl */
@@ -2113,25 +2112,25 @@ yyreduce:
(yyvsp[0].ledName)->merge = (yyvsp[-1].merge);
(yyval.any) = (ParseCommon *) (yyvsp[0].ledName);
}
-#line 2117 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2116 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 42: /* Decl: OptMergeMode ShapeDecl */
#line 391 "../src/xkbcomp/parser.y"
{ (yyval.any) = NULL; }
-#line 2123 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2122 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 43: /* Decl: OptMergeMode SectionDecl */
#line 392 "../src/xkbcomp/parser.y"
{ (yyval.any) = NULL; }
-#line 2129 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2128 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 44: /* Decl: OptMergeMode DoodadDecl */
#line 393 "../src/xkbcomp/parser.y"
{ (yyval.any) = NULL; }
-#line 2135 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2134 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 45: /* Decl: MergeMode STRING */
@@ -2140,523 +2139,523 @@ yyreduce:
(yyval.any) = (ParseCommon *) IncludeCreate(param->ctx, (yyvsp[0].str), (yyvsp[-1].merge));
free((yyvsp[0].str));
}
-#line 2144 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2143 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 46: /* VarDecl: Lhs EQUALS Expr SEMI */
#line 402 "../src/xkbcomp/parser.y"
{ (yyval.var) = VarCreate((yyvsp[-3].expr), (yyvsp[-1].expr)); }
-#line 2150 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2149 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 47: /* VarDecl: Ident SEMI */
#line 404 "../src/xkbcomp/parser.y"
{ (yyval.var) = BoolVarCreate((yyvsp[-1].atom), true); }
-#line 2156 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2155 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 48: /* VarDecl: EXCLAM Ident SEMI */
#line 406 "../src/xkbcomp/parser.y"
{ (yyval.var) = BoolVarCreate((yyvsp[-1].atom), false); }
-#line 2162 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2161 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 49: /* KeyNameDecl: KEYNAME EQUALS KeyCode SEMI */
#line 410 "../src/xkbcomp/parser.y"
{ (yyval.keyCode) = KeycodeCreate((yyvsp[-3].atom), (yyvsp[-1].num)); }
-#line 2168 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2167 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 50: /* KeyAliasDecl: ALIAS KEYNAME EQUALS KEYNAME SEMI */
#line 414 "../src/xkbcomp/parser.y"
{ (yyval.keyAlias) = KeyAliasCreate((yyvsp[-3].atom), (yyvsp[-1].atom)); }
-#line 2174 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2173 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 51: /* VModDecl: VIRTUAL_MODS VModDefList SEMI */
#line 418 "../src/xkbcomp/parser.y"
{ (yyval.vmodList) = (yyvsp[-1].vmodList); }
-#line 2180 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2179 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2186 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2185 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 53: /* VModDefList: VModDef */
#line 424 "../src/xkbcomp/parser.y"
{ (yyval.vmodList).head = (yyval.vmodList).last = (yyvsp[0].vmod); }
-#line 2192 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2191 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 54: /* VModDef: Ident */
#line 428 "../src/xkbcomp/parser.y"
{ (yyval.vmod) = VModCreate((yyvsp[0].atom), NULL); }
-#line 2198 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2197 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 55: /* VModDef: Ident EQUALS Expr */
#line 430 "../src/xkbcomp/parser.y"
{ (yyval.vmod) = VModCreate((yyvsp[-2].atom), (yyvsp[0].expr)); }
-#line 2204 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2203 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2210 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2209 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 57: /* InterpretMatch: KeySym PLUS Expr */
#line 440 "../src/xkbcomp/parser.y"
{ (yyval.interp) = InterpCreate((yyvsp[-2].keysym), (yyvsp[0].expr)); }
-#line 2216 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2215 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 58: /* InterpretMatch: KeySym */
#line 442 "../src/xkbcomp/parser.y"
{ (yyval.interp) = InterpCreate((yyvsp[0].keysym), NULL); }
-#line 2222 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2221 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2228 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2227 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 60: /* VarDeclList: VarDecl */
#line 448 "../src/xkbcomp/parser.y"
{ (yyval.varList).head = (yyval.varList).last = (yyvsp[0].var); }
-#line 2234 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2233 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2240 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2239 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2246 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2245 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2252 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2251 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 64: /* SymbolsBody: SymbolsVarDecl */
#line 466 "../src/xkbcomp/parser.y"
{ (yyval.varList).head = (yyval.varList).last = (yyvsp[0].var); }
-#line 2258 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2257 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 65: /* SymbolsBody: %empty */
#line 467 "../src/xkbcomp/parser.y"
{ (yyval.varList).head = (yyval.varList).last = NULL; }
-#line 2264 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2263 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 66: /* SymbolsVarDecl: Lhs EQUALS Expr */
#line 470 "../src/xkbcomp/parser.y"
{ (yyval.var) = VarCreate((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2270 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2269 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 67: /* SymbolsVarDecl: Lhs EQUALS ArrayInit */
#line 471 "../src/xkbcomp/parser.y"
{ (yyval.var) = VarCreate((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2276 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2275 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 68: /* SymbolsVarDecl: Ident */
#line 472 "../src/xkbcomp/parser.y"
{ (yyval.var) = BoolVarCreate((yyvsp[0].atom), true); }
-#line 2282 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2281 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 69: /* SymbolsVarDecl: EXCLAM Ident */
#line 473 "../src/xkbcomp/parser.y"
{ (yyval.var) = BoolVarCreate((yyvsp[0].atom), false); }
-#line 2288 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2287 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 70: /* SymbolsVarDecl: ArrayInit */
#line 474 "../src/xkbcomp/parser.y"
{ (yyval.var) = VarCreate(NULL, (yyvsp[0].expr)); }
-#line 2294 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2293 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 71: /* ArrayInit: OBRACKET OptKeySymList CBRACKET */
#line 478 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[-1].expr); }
-#line 2300 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2299 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 72: /* ArrayInit: OBRACKET ActionList CBRACKET */
#line 480 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateActionList((yyvsp[-1].exprList).head); }
-#line 2306 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2305 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 73: /* GroupCompatDecl: GROUP Integer EQUALS Expr SEMI */
#line 484 "../src/xkbcomp/parser.y"
{ (yyval.groupCompat) = GroupCompatCreate((yyvsp[-3].num), (yyvsp[-1].expr)); }
-#line 2312 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2311 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2318 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2317 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2324 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2323 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2330 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2329 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2336 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2335 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 78: /* ShapeDecl: SHAPE String OBRACE OutlineList CBRACE SEMI */
#line 502 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2342 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2341 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 79: /* ShapeDecl: SHAPE String OBRACE CoordList CBRACE SEMI */
#line 504 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[-2].expr); (yyval.geom) = NULL; }
-#line 2348 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2347 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 80: /* SectionDecl: SECTION String OBRACE SectionBody CBRACE SEMI */
#line 508 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2354 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2353 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 81: /* SectionBody: SectionBody SectionBodyItem */
#line 511 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL;}
-#line 2360 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2359 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 82: /* SectionBody: SectionBodyItem */
#line 512 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2366 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2365 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 83: /* SectionBodyItem: ROW OBRACE RowBody CBRACE SEMI */
#line 516 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2372 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2371 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 84: /* SectionBodyItem: VarDecl */
#line 518 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[0].var)); (yyval.geom) = NULL; }
-#line 2378 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2377 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 85: /* SectionBodyItem: DoodadDecl */
#line 520 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2384 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2383 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 86: /* SectionBodyItem: LedMapDecl */
#line 522 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[0].ledMap)); (yyval.geom) = NULL; }
-#line 2390 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2389 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 87: /* SectionBodyItem: OverlayDecl */
#line 524 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2396 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2395 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 88: /* RowBody: RowBody RowBodyItem */
#line 527 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL;}
-#line 2402 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2401 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 89: /* RowBody: RowBodyItem */
#line 528 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2408 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2407 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 90: /* RowBodyItem: KEYS OBRACE Keys CBRACE SEMI */
#line 531 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2414 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2413 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 91: /* RowBodyItem: VarDecl */
#line 533 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[0].var)); (yyval.geom) = NULL; }
-#line 2420 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2419 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 92: /* Keys: Keys COMMA Key */
#line 536 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2426 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2425 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 93: /* Keys: Key */
#line 537 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2432 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2431 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 94: /* Key: KEYNAME */
#line 541 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2438 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2437 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 95: /* Key: OBRACE ExprList CBRACE */
#line 543 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[-1].exprList).head); (yyval.geom) = NULL; }
-#line 2444 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2443 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 96: /* OverlayDecl: OVERLAY String OBRACE OverlayKeyList CBRACE SEMI */
#line 547 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2450 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2449 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 97: /* OverlayKeyList: OverlayKeyList COMMA OverlayKey */
#line 550 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2456 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2455 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 98: /* OverlayKeyList: OverlayKey */
#line 551 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2462 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2461 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 99: /* OverlayKey: KEYNAME EQUALS KEYNAME */
#line 554 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2468 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2467 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 100: /* OutlineList: OutlineList COMMA OutlineInList */
#line 558 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL;}
-#line 2474 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2473 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 101: /* OutlineList: OutlineInList */
#line 560 "../src/xkbcomp/parser.y"
{ (yyval.geom) = NULL; }
-#line 2480 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2479 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 102: /* OutlineInList: OBRACE CoordList CBRACE */
#line 564 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[-1].expr); (yyval.geom) = NULL; }
-#line 2486 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2485 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 103: /* OutlineInList: Ident EQUALS OBRACE CoordList CBRACE */
#line 566 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[-1].expr); (yyval.geom) = NULL; }
-#line 2492 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2491 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 104: /* OutlineInList: Ident EQUALS Expr */
#line 568 "../src/xkbcomp/parser.y"
{ FreeStmt((ParseCommon *) (yyvsp[0].expr)); (yyval.geom) = NULL; }
-#line 2498 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2497 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 105: /* CoordList: CoordList COMMA Coord */
#line 572 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[-2].expr); (void) (yyvsp[0].expr); (yyval.expr) = NULL; }
-#line 2504 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2503 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 106: /* CoordList: Coord */
#line 574 "../src/xkbcomp/parser.y"
{ (void) (yyvsp[0].expr); (yyval.expr) = NULL; }
-#line 2510 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2509 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 107: /* Coord: OBRACKET SignedNumber COMMA SignedNumber CBRACKET */
#line 578 "../src/xkbcomp/parser.y"
{ (yyval.expr) = NULL; }
-#line 2516 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2515 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2522 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2521 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 109: /* DoodadType: TEXT */
#line 585 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 2528 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2527 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 110: /* DoodadType: OUTLINE */
#line 586 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 2534 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2533 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 111: /* DoodadType: SOLID */
#line 587 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 2540 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2539 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 112: /* DoodadType: LOGO */
#line 588 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 2546 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2545 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 113: /* FieldSpec: Ident */
#line 591 "../src/xkbcomp/parser.y"
{ (yyval.atom) = (yyvsp[0].atom); }
-#line 2552 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2551 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 114: /* FieldSpec: Element */
#line 592 "../src/xkbcomp/parser.y"
{ (yyval.atom) = (yyvsp[0].atom); }
-#line 2558 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2557 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 115: /* Element: ACTION_TOK */
#line 596 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "action"); }
-#line 2564 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2563 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 116: /* Element: INTERPRET */
#line 598 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "interpret"); }
-#line 2570 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2569 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 117: /* Element: TYPE */
#line 600 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "type"); }
-#line 2576 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2575 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 118: /* Element: KEY */
#line 602 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "key"); }
-#line 2582 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2581 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 119: /* Element: GROUP */
#line 604 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "group"); }
-#line 2588 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2587 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 120: /* Element: MODIFIER_MAP */
#line 606 "../src/xkbcomp/parser.y"
{(yyval.atom) = xkb_atom_intern_literal(param->ctx, "modifier_map");}
-#line 2594 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2593 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 121: /* Element: INDICATOR */
#line 608 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "indicator"); }
-#line 2600 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2599 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 122: /* Element: SHAPE */
#line 610 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "shape"); }
-#line 2606 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2605 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 123: /* Element: ROW */
#line 612 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "row"); }
-#line 2612 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2611 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 124: /* Element: SECTION */
#line 614 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "section"); }
-#line 2618 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2617 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 125: /* Element: TEXT */
#line 616 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "text"); }
-#line 2624 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2623 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 126: /* OptMergeMode: MergeMode */
#line 619 "../src/xkbcomp/parser.y"
{ (yyval.merge) = (yyvsp[0].merge); }
-#line 2630 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2629 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 127: /* OptMergeMode: %empty */
#line 620 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_DEFAULT; }
-#line 2636 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2635 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 128: /* MergeMode: INCLUDE */
#line 623 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_DEFAULT; }
-#line 2642 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2641 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 129: /* MergeMode: AUGMENT */
#line 624 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_AUGMENT; }
-#line 2648 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2647 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 130: /* MergeMode: OVERRIDE */
#line 625 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_OVERRIDE; }
-#line 2654 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2653 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 131: /* MergeMode: REPLACE */
#line 626 "../src/xkbcomp/parser.y"
{ (yyval.merge) = MERGE_REPLACE; }
-#line 2660 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2659 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 132: /* MergeMode: ALTERNATE */
@@ -2668,223 +2667,223 @@ yyreduce:
*/
(yyval.merge) = MERGE_DEFAULT;
}
-#line 2672 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2671 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 133: /* OptExprList: ExprList */
#line 637 "../src/xkbcomp/parser.y"
{ (yyval.exprList) = (yyvsp[0].exprList); }
-#line 2678 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2677 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 134: /* OptExprList: %empty */
#line 638 "../src/xkbcomp/parser.y"
{ (yyval.exprList).head = (yyval.exprList).last = NULL; }
-#line 2684 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2683 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2690 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2689 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 136: /* ExprList: Expr */
#line 644 "../src/xkbcomp/parser.y"
{ (yyval.exprList).head = (yyval.exprList).last = (yyvsp[0].expr); }
-#line 2696 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2695 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 137: /* Expr: Expr DIVIDE Expr */
#line 648 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_DIVIDE, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2702 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2701 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 138: /* Expr: Expr PLUS Expr */
#line 650 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2708 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2707 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 139: /* Expr: Expr MINUS Expr */
#line 652 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_SUBTRACT, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2714 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2713 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 140: /* Expr: Expr TIMES Expr */
#line 654 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_MULTIPLY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2720 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2719 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 141: /* Expr: Lhs EQUALS Expr */
#line 656 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateBinary(EXPR_ASSIGN, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2726 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2725 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 142: /* Expr: Term */
#line 658 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[0].expr); }
-#line 2732 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2731 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2738 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2737 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2744 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2743 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 145: /* Term: EXCLAM Term */
#line 666 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateUnary(EXPR_NOT, EXPR_TYPE_BOOLEAN, (yyvsp[0].expr)); }
-#line 2750 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2749 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2756 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2755 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 147: /* Term: Lhs */
#line 670 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[0].expr); }
-#line 2762 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2761 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 148: /* Term: FieldSpec OPAREN OptExprList CPAREN */
#line 672 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateAction((yyvsp[-3].atom), (yyvsp[-1].exprList).head); }
-#line 2768 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2767 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 149: /* Term: Terminal */
#line 674 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[0].expr); }
-#line 2774 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2773 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 150: /* Term: OPAREN Expr CPAREN */
#line 676 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[-1].expr); }
-#line 2780 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2779 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2786 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2785 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 152: /* ActionList: Action */
#line 682 "../src/xkbcomp/parser.y"
{ (yyval.exprList).head = (yyval.exprList).last = (yyvsp[0].expr); }
-#line 2792 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2791 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 153: /* Action: FieldSpec OPAREN OptExprList CPAREN */
#line 686 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateAction((yyvsp[-3].atom), (yyvsp[-1].exprList).head); }
-#line 2798 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2797 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 154: /* Lhs: FieldSpec */
#line 690 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateIdent((yyvsp[0].atom)); }
-#line 2804 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2803 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 155: /* Lhs: FieldSpec DOT FieldSpec */
#line 692 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateFieldRef((yyvsp[-2].atom), (yyvsp[0].atom)); }
-#line 2810 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2809 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2816 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2815 "libxkbcommon.so.0.0.0.p/parser.c"
break;
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 2822 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2821 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 158: /* Terminal: String */
#line 700 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateString((yyvsp[0].atom)); }
-#line 2828 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2827 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 159: /* Terminal: Integer */
#line 702 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateInteger((yyvsp[0].num)); }
-#line 2834 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2833 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 160: /* Terminal: Float */
#line 704 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateFloat(/* Discard $1 */); }
-#line 2840 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2839 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 161: /* Terminal: KEYNAME */
#line 706 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateKeyName((yyvsp[0].atom)); }
-#line 2846 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2845 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 162: /* OptKeySymList: KeySymList */
#line 709 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[0].expr); }
-#line 2852 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2851 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 163: /* OptKeySymList: %empty */
#line 710 "../src/xkbcomp/parser.y"
{ (yyval.expr) = NULL; }
-#line 2858 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2857 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 164: /* KeySymList: KeySymList COMMA KeySym */
#line 714 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprAppendKeysymList((yyvsp[-2].expr), (yyvsp[0].keysym)); }
-#line 2864 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2863 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 165: /* KeySymList: KeySymList COMMA KeySyms */
#line 716 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprAppendMultiKeysymList((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2870 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2869 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 166: /* KeySymList: KeySym */
#line 718 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateKeysymList((yyvsp[0].keysym)); }
-#line 2876 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2875 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 167: /* KeySymList: KeySyms */
#line 720 "../src/xkbcomp/parser.y"
{ (yyval.expr) = ExprCreateMultiKeysymList((yyvsp[0].expr)); }
-#line 2882 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2881 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 168: /* KeySyms: OBRACE KeySymList CBRACE */
#line 724 "../src/xkbcomp/parser.y"
{ (yyval.expr) = (yyvsp[-1].expr); }
-#line 2888 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2887 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 169: /* KeySym: IDENT */
@@ -2896,13 +2895,13 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 2900 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2899 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 170: /* KeySym: SECTION */
#line 735 "../src/xkbcomp/parser.y"
{ (yyval.keysym) = XKB_KEY_section; }
-#line 2906 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2905 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 171: /* KeySym: Integer */
@@ -2924,89 +2923,89 @@ yyreduce:
}
}
}
-#line 2928 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2927 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 172: /* SignedNumber: MINUS Number */
#line 756 "../src/xkbcomp/parser.y"
{ (yyval.num) = -(yyvsp[0].num); }
-#line 2934 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2933 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 173: /* SignedNumber: Number */
#line 757 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 2940 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2939 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 174: /* Number: FLOAT */
#line 760 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 2946 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2945 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 175: /* Number: INTEGER */
#line 761 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 2952 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2951 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 176: /* Float: FLOAT */
#line 764 "../src/xkbcomp/parser.y"
{ (yyval.num) = 0; }
-#line 2958 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2957 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 177: /* Integer: INTEGER */
#line 767 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 2964 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2963 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 178: /* KeyCode: INTEGER */
#line 770 "../src/xkbcomp/parser.y"
{ (yyval.num) = (yyvsp[0].num); }
-#line 2970 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2969 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 179: /* Ident: IDENT */
#line 773 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern(param->ctx, (yyvsp[0].str), strlen((yyvsp[0].str))); free((yyvsp[0].str)); }
-#line 2976 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2975 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 180: /* Ident: DEFAULT */
#line 774 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern_literal(param->ctx, "default"); }
-#line 2982 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2981 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 181: /* String: STRING */
#line 777 "../src/xkbcomp/parser.y"
{ (yyval.atom) = xkb_atom_intern(param->ctx, (yyvsp[0].str), strlen((yyvsp[0].str))); free((yyvsp[0].str)); }
-#line 2988 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2987 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 182: /* OptMapName: MapName */
#line 780 "../src/xkbcomp/parser.y"
{ (yyval.str) = (yyvsp[0].str); }
-#line 2994 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2993 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 183: /* OptMapName: %empty */
#line 781 "../src/xkbcomp/parser.y"
{ (yyval.str) = NULL; }
-#line 3000 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 2999 "libxkbcommon.so.0.0.0.p/parser.c"
break;
case 184: /* MapName: STRING */
#line 784 "../src/xkbcomp/parser.y"
{ (yyval.str) = (yyvsp[0].str); }
-#line 3006 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 3005 "libxkbcommon.so.0.0.0.p/parser.c"
break;
-#line 3010 "libxkbcommon.so.0.0.0.p/parser.c"
+#line 3009 "libxkbcommon.so.0.0.0.p/parser.c"
default: break;
}
@@ -3088,6 +3087,7 @@ yyerrorlab:
label yyerrorlab therefore never appears in user code. */
if (0)
YYERROR;
+ ++yynerrs;
/* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
@@ -3148,7 +3148,7 @@ yyerrlab1:
`-------------------------------------*/
yyacceptlab:
yyresult = 0;
- goto yyreturn;
+ goto yyreturnlab;
/*-----------------------------------.
@@ -3156,24 +3156,22 @@ yyacceptlab:
`-----------------------------------*/
yyabortlab:
yyresult = 1;
- goto yyreturn;
+ goto yyreturnlab;
-#if !defined yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here. |
-`-------------------------------------------------*/
+/*-----------------------------------------------------------.
+| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
+`-----------------------------------------------------------*/
yyexhaustedlab:
yyerror (param, YY_("memory exhausted"));
yyresult = 2;
- goto yyreturn;
-#endif
+ goto yyreturnlab;
-/*-------------------------------------------------------.
-| yyreturn -- parsing is finished, clean up and return. |
-`-------------------------------------------------------*/
-yyreturn:
+/*----------------------------------------------------------.
+| yyreturnlab -- parsing is finished, clean up and return. |
+`----------------------------------------------------------*/
+yyreturnlab:
if (yychar != YYEMPTY)
{
/* Make sure we have latest lookahead translation. See comments at
diff --git a/config/libxkbcommon.so.0.0.0.p/parser.h b/config/libxkbcommon.so.0.0.0.p/parser.h
index 3d9dcaf..dfa0954 100644
--- a/config/libxkbcommon.so.0.0.0.p/parser.h
+++ b/config/libxkbcommon.so.0.0.0.p/parser.h
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.7.2. */
+/* A Bison parser, made by GNU Bison 3.8.2. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -164,6 +164,8 @@ typedef union YYSTYPE YYSTYPE;
+
int _xkbcommon_parse (struct parser_param *param);
+
#endif /* !YY__XKBCOMMON_LIBXKBCOMMON_SO_0_0_0_P_PARSER_H_INCLUDED */
diff --git a/doc/.gitignore b/doc/.gitignore
deleted file mode 100644
index 63b767d..0000000
--- a/doc/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Doxyfile
-html/
diff --git a/doc/keymap-format-text-v1.md b/doc/keymap-format-text-v1.md
index eda6ebb..8726947 100644
--- a/doc/keymap-format-text-v1.md
+++ b/doc/keymap-format-text-v1.md
@@ -3,6 +3,12 @@
This document describes the `XKB_KEYMAP_FORMAT_TEXT_V1` keymap format,
as implemented by libxkbcommon.
+NOTE: This document is ever incomplete. Some additional resources are:
+
+- [Ivan Pascal's XKB documentation](https://web.archive.org/web/20190724015820/http://pascal.tsu.ru/en/xkb/)
+- [An Unreliable Guide to XKB Configuration](https://www.charvolant.org/doug/xkb/html/index.html)
+- [ArchWiki XKB page](https://wiki.archlinux.org/index.php/X_keyboard_extension)
+
A keymap consists of a single top-level `xkb_keymap` block, underwhich
are nested the following sections.
@@ -26,7 +32,7 @@ assign them the names `TLDE` and `AE01` respectively. The format
`<WXYZ>` is always used to refer to a key by name.
[The naming convention `<AE01>` just denotes the position of the key
-in the main alphanumric section of a standard QWERTY keyboard, with
+in the main alphanumeric section of a standard QWERTY keyboard, with
the two letters specifying the row and the two digits specifying the
column, from the bottom left.]
@@ -69,7 +75,7 @@ section and by the user.
## The `xkb_types` section
-This section is the second to be processesed, after `xkb_keycodes`.
+This section is the second to be processed, after `xkb_keycodes`.
However, it is completely independent and could have been the first to
be processed (it does not refer to specific keys as specified in the
`xkb_keycodes` section).
@@ -299,7 +305,7 @@ statements:
If the given modifiers are in the required state (see below), the
LED is lit.
-#### `whichModState` statment
+#### `whichModState` statement
whichModState = Latched+Locked;
@@ -351,11 +357,109 @@ satisfied the LED is lit.
## The `xkb_symbols` section
-This section is the fourth to be processed, after `xkb_keycodes`,
-`xkb_types` and `xkb_compat`.
+NOTE: The documentation of this section is incomplete.
-TODO
+This section is the fourth to be processed, after `xkb_keycodes`, `xkb_types`
+and `xkb_compat`.
+
+Statements of the form:
+
+ xkb_symbols "basic" {
+ ...
+ }
+
+Declare a symbols map named `basic`. Statements inside the curly braces only
+affect the symbols map.
+
+A map can have various flags applied to it above the statement, separated by
+whitespace:
+
+ partial alphanumeric_keys
+ xkb_symbols "basic" {
+ ...
+ }
+
+The possible flags are:
+
+ * `partial` - Indicates that the map doesn't cover a complete keyboard.
+ * `default` - Marks the symbol map as the default map in the file when no
+ explicit map is specified. If no map is marked as a default, the first map
+ in the file is the default.
+ * `hidden` - Variant that can only be used internally
+ * `alphanumeric_keys` - Indicates that the map contains alphanumeric keys
+ * `modifier_keys` - Indicates that the map contains modifier keys
+ * `keypad_keys` - Indicates that the map contains keypad keys
+ * `function_keys` - Indicates that the map contains function keys
+ * `alternate_group` - Indicates that the map contains keys for an alternate
+ group
+
+If no `*_keys` flags are supplied, then the map is assumed to cover a complete
+keyboard.
+
+At present, except for `default`, none of the flags affect key processing in
+libxkbcommon, and only serve as metadata.
+
+### Name statements
+
+Statements of the form:
+
+ name[Group1] = "US/ASCII";
+ groupName[1] = "US/ASCII";
+
+Gives the name "US/ASCII" to the first group of symbols. Other groups can be
+named using a different group index (ex: `Group2`), and with a different name.
+A group must be named.
+
+`group` and `groupName` mean the same thing, and the `Group` in `Group1` is
+optional.
+
+### Include statements
+
+Statements of the form:
+
+ include "nokia_vndr/rx-51(nordic_base)
+
+Will include data from another `xkb_symbols` section, possibly located in
+another file. Here it would include the `xkb_symbols` section called
+`nordic_base`, from the file `rx-51` located in the `nokia_vndr` folder, itself
+located in an XKB include path.
+
+### Key statement
+
+Statements of the form:
+
+ key <AD01> { [ q, Q ] };
+
+Describes the mapping of a keycode `<AD01>` to a given group of symbols. The
+possible keycodes are the keycodes defined in the `xkb_keycodes` section.
+
+Symbols are named using the symbolic names from the
+`xkbcommon/xkbcommon-keysyms.h` file. A group of symbols is enclosed in brackets
+and separated by commas. Each element of the symbol arrays corresponds to a
+different modifier level. In this example, the symbol (keysym) `XKB_KEY_q` for
+level 1 and `XKB_KEY_Q` for level 2.
+
+#### Groups
+
+Each group represents a list of symbols mapped to a keycode:
+
+ name[Group1]= "US/ASCII";
+ name[Group2]= "Russian";
+ ...
+ key <AD01> { [ q, Q ],
+ [ Cyrillic_shorti, Cyrillic_SHORTI ] };
+
+A long-form syntax can also be used:
+
+ key <AD01> {
+ symbols[Group1]= [ q, Q ],
+ symbols[Group2]= [ Cyrillic_shorti, Cyrillic_SHORTI ]
+ };
+
+Groups can also be omitted, but the brackets must be present. The following
+statement only defines the Group3 of a mapping:
+ key <AD01> { [], [], [ q, Q ] };
## Virtual modifier statements
diff --git a/doc/user-configuration.md b/doc/user-configuration.md
index 2146599..40f7f77 100644
--- a/doc/user-configuration.md
+++ b/doc/user-configuration.md
@@ -197,8 +197,10 @@ $ cat $XDG_CONFIG_HOME/xkb/rules/evdev.xml
<name>orange</name>
<shortDescription>or</shortDescription>
<description>Orange (Banana)</description>
- </variant>
+ </configItem>
+ </variant>
</variantList>
+ </layout>
</layoutList>
<optionList>
<group allowMultipleSelection="true">
diff --git a/fuzz/.gitignore b/fuzz/.gitignore
deleted file mode 100644
index 413910a..0000000
--- a/fuzz/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-findings/
diff --git a/xkbcommon/xkbcommon-compat.h b/include/xkbcommon/xkbcommon-compat.h
index 299732f..299732f 100644
--- a/xkbcommon/xkbcommon-compat.h
+++ b/include/xkbcommon/xkbcommon-compat.h
diff --git a/xkbcommon/xkbcommon-compose.h b/include/xkbcommon/xkbcommon-compose.h
index 8b41b98..8b41b98 100644
--- a/xkbcommon/xkbcommon-compose.h
+++ b/include/xkbcommon/xkbcommon-compose.h
diff --git a/xkbcommon/xkbcommon-keysyms.h b/include/xkbcommon/xkbcommon-keysyms.h
index 540704e..7c75c29 100644
--- a/xkbcommon/xkbcommon-keysyms.h
+++ b/include/xkbcommon/xkbcommon-keysyms.h
@@ -93,8 +93,8 @@ SOFTWARE.
* Mnemonic names for keysyms are defined in this file with lines
* that match one of these Perl regular expressions:
*
- * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\* U+([0-9A-F]{4,6}) (.*) \*\/\s*$/
- * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\*\(U+([0-9A-F]{4,6}) (.*)\)\*\/\s*$/
+ * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\* U\+([0-9A-F]{4,6}) (.*) \*\/\s*$/
+ * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\*\(U\+([0-9A-F]{4,6}) (.*)\)\*\/\s*$/
* /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*(\/\*\s*(.*)\s*\*\/)?\s*$/
*
* Before adding new keysyms, please do consider the following: In
@@ -1431,9 +1431,9 @@ SOFTWARE.
#define XKB_KEY_fivesixths 0x0ab7 /* U+215A VULGAR FRACTION FIVE SIXTHS */
#define XKB_KEY_careof 0x0ab8 /* U+2105 CARE OF */
#define XKB_KEY_figdash 0x0abb /* U+2012 FIGURE DASH */
-#define XKB_KEY_leftanglebracket 0x0abc /*(U+27E8 MATHEMATICAL LEFT ANGLE BRACKET)*/
+#define XKB_KEY_leftanglebracket 0x0abc /*(U+2329 LEFT-POINTING ANGLE BRACKET)*/
#define XKB_KEY_decimalpoint 0x0abd /*(U+002E FULL STOP)*/
-#define XKB_KEY_rightanglebracket 0x0abe /*(U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET)*/
+#define XKB_KEY_rightanglebracket 0x0abe /*(U+232A RIGHT-POINTING ANGLE BRACKET)*/
#define XKB_KEY_marker 0x0abf
#define XKB_KEY_oneeighth 0x0ac3 /* U+215B VULGAR FRACTION ONE EIGHTH */
#define XKB_KEY_threeeighths 0x0ac4 /* U+215C VULGAR FRACTION THREE EIGHTHS */
@@ -1678,106 +1678,106 @@ SOFTWARE.
#define XKB_KEY_Hangul_switch 0xff7e /* Alias for mode_switch */
/* Hangul Consonant Characters */
-#define XKB_KEY_Hangul_Kiyeog 0x0ea1
-#define XKB_KEY_Hangul_SsangKiyeog 0x0ea2
-#define XKB_KEY_Hangul_KiyeogSios 0x0ea3
-#define XKB_KEY_Hangul_Nieun 0x0ea4
-#define XKB_KEY_Hangul_NieunJieuj 0x0ea5
-#define XKB_KEY_Hangul_NieunHieuh 0x0ea6
-#define XKB_KEY_Hangul_Dikeud 0x0ea7
-#define XKB_KEY_Hangul_SsangDikeud 0x0ea8
-#define XKB_KEY_Hangul_Rieul 0x0ea9
-#define XKB_KEY_Hangul_RieulKiyeog 0x0eaa
-#define XKB_KEY_Hangul_RieulMieum 0x0eab
-#define XKB_KEY_Hangul_RieulPieub 0x0eac
-#define XKB_KEY_Hangul_RieulSios 0x0ead
-#define XKB_KEY_Hangul_RieulTieut 0x0eae
-#define XKB_KEY_Hangul_RieulPhieuf 0x0eaf
-#define XKB_KEY_Hangul_RieulHieuh 0x0eb0
-#define XKB_KEY_Hangul_Mieum 0x0eb1
-#define XKB_KEY_Hangul_Pieub 0x0eb2
-#define XKB_KEY_Hangul_SsangPieub 0x0eb3
-#define XKB_KEY_Hangul_PieubSios 0x0eb4
-#define XKB_KEY_Hangul_Sios 0x0eb5
-#define XKB_KEY_Hangul_SsangSios 0x0eb6
-#define XKB_KEY_Hangul_Ieung 0x0eb7
-#define XKB_KEY_Hangul_Jieuj 0x0eb8
-#define XKB_KEY_Hangul_SsangJieuj 0x0eb9
-#define XKB_KEY_Hangul_Cieuc 0x0eba
-#define XKB_KEY_Hangul_Khieuq 0x0ebb
-#define XKB_KEY_Hangul_Tieut 0x0ebc
-#define XKB_KEY_Hangul_Phieuf 0x0ebd
-#define XKB_KEY_Hangul_Hieuh 0x0ebe
+#define XKB_KEY_Hangul_Kiyeog 0x0ea1 /* U+3131 HANGUL LETTER KIYEOK */
+#define XKB_KEY_Hangul_SsangKiyeog 0x0ea2 /* U+3132 HANGUL LETTER SSANGKIYEOK */
+#define XKB_KEY_Hangul_KiyeogSios 0x0ea3 /* U+3133 HANGUL LETTER KIYEOK-SIOS */
+#define XKB_KEY_Hangul_Nieun 0x0ea4 /* U+3134 HANGUL LETTER NIEUN */
+#define XKB_KEY_Hangul_NieunJieuj 0x0ea5 /* U+3135 HANGUL LETTER NIEUN-CIEUC */
+#define XKB_KEY_Hangul_NieunHieuh 0x0ea6 /* U+3136 HANGUL LETTER NIEUN-HIEUH */
+#define XKB_KEY_Hangul_Dikeud 0x0ea7 /* U+3137 HANGUL LETTER TIKEUT */
+#define XKB_KEY_Hangul_SsangDikeud 0x0ea8 /* U+3138 HANGUL LETTER SSANGTIKEUT */
+#define XKB_KEY_Hangul_Rieul 0x0ea9 /* U+3139 HANGUL LETTER RIEUL */
+#define XKB_KEY_Hangul_RieulKiyeog 0x0eaa /* U+313A HANGUL LETTER RIEUL-KIYEOK */
+#define XKB_KEY_Hangul_RieulMieum 0x0eab /* U+313B HANGUL LETTER RIEUL-MIEUM */
+#define XKB_KEY_Hangul_RieulPieub 0x0eac /* U+313C HANGUL LETTER RIEUL-PIEUP */
+#define XKB_KEY_Hangul_RieulSios 0x0ead /* U+313D HANGUL LETTER RIEUL-SIOS */
+#define XKB_KEY_Hangul_RieulTieut 0x0eae /* U+313E HANGUL LETTER RIEUL-THIEUTH */
+#define XKB_KEY_Hangul_RieulPhieuf 0x0eaf /* U+313F HANGUL LETTER RIEUL-PHIEUPH */
+#define XKB_KEY_Hangul_RieulHieuh 0x0eb0 /* U+3140 HANGUL LETTER RIEUL-HIEUH */
+#define XKB_KEY_Hangul_Mieum 0x0eb1 /* U+3141 HANGUL LETTER MIEUM */
+#define XKB_KEY_Hangul_Pieub 0x0eb2 /* U+3142 HANGUL LETTER PIEUP */
+#define XKB_KEY_Hangul_SsangPieub 0x0eb3 /* U+3143 HANGUL LETTER SSANGPIEUP */
+#define XKB_KEY_Hangul_PieubSios 0x0eb4 /* U+3144 HANGUL LETTER PIEUP-SIOS */
+#define XKB_KEY_Hangul_Sios 0x0eb5 /* U+3145 HANGUL LETTER SIOS */
+#define XKB_KEY_Hangul_SsangSios 0x0eb6 /* U+3146 HANGUL LETTER SSANGSIOS */
+#define XKB_KEY_Hangul_Ieung 0x0eb7 /* U+3147 HANGUL LETTER IEUNG */
+#define XKB_KEY_Hangul_Jieuj 0x0eb8 /* U+3148 HANGUL LETTER CIEUC */
+#define XKB_KEY_Hangul_SsangJieuj 0x0eb9 /* U+3149 HANGUL LETTER SSANGCIEUC */
+#define XKB_KEY_Hangul_Cieuc 0x0eba /* U+314A HANGUL LETTER CHIEUCH */
+#define XKB_KEY_Hangul_Khieuq 0x0ebb /* U+314B HANGUL LETTER KHIEUKH */
+#define XKB_KEY_Hangul_Tieut 0x0ebc /* U+314C HANGUL LETTER THIEUTH */
+#define XKB_KEY_Hangul_Phieuf 0x0ebd /* U+314D HANGUL LETTER PHIEUPH */
+#define XKB_KEY_Hangul_Hieuh 0x0ebe /* U+314E HANGUL LETTER HIEUH */
/* Hangul Vowel Characters */
-#define XKB_KEY_Hangul_A 0x0ebf
-#define XKB_KEY_Hangul_AE 0x0ec0
-#define XKB_KEY_Hangul_YA 0x0ec1
-#define XKB_KEY_Hangul_YAE 0x0ec2
-#define XKB_KEY_Hangul_EO 0x0ec3
-#define XKB_KEY_Hangul_E 0x0ec4
-#define XKB_KEY_Hangul_YEO 0x0ec5
-#define XKB_KEY_Hangul_YE 0x0ec6
-#define XKB_KEY_Hangul_O 0x0ec7
-#define XKB_KEY_Hangul_WA 0x0ec8
-#define XKB_KEY_Hangul_WAE 0x0ec9
-#define XKB_KEY_Hangul_OE 0x0eca
-#define XKB_KEY_Hangul_YO 0x0ecb
-#define XKB_KEY_Hangul_U 0x0ecc
-#define XKB_KEY_Hangul_WEO 0x0ecd
-#define XKB_KEY_Hangul_WE 0x0ece
-#define XKB_KEY_Hangul_WI 0x0ecf
-#define XKB_KEY_Hangul_YU 0x0ed0
-#define XKB_KEY_Hangul_EU 0x0ed1
-#define XKB_KEY_Hangul_YI 0x0ed2
-#define XKB_KEY_Hangul_I 0x0ed3
+#define XKB_KEY_Hangul_A 0x0ebf /* U+314F HANGUL LETTER A */
+#define XKB_KEY_Hangul_AE 0x0ec0 /* U+3150 HANGUL LETTER AE */
+#define XKB_KEY_Hangul_YA 0x0ec1 /* U+3151 HANGUL LETTER YA */
+#define XKB_KEY_Hangul_YAE 0x0ec2 /* U+3152 HANGUL LETTER YAE */
+#define XKB_KEY_Hangul_EO 0x0ec3 /* U+3153 HANGUL LETTER EO */
+#define XKB_KEY_Hangul_E 0x0ec4 /* U+3154 HANGUL LETTER E */
+#define XKB_KEY_Hangul_YEO 0x0ec5 /* U+3155 HANGUL LETTER YEO */
+#define XKB_KEY_Hangul_YE 0x0ec6 /* U+3156 HANGUL LETTER YE */
+#define XKB_KEY_Hangul_O 0x0ec7 /* U+3157 HANGUL LETTER O */
+#define XKB_KEY_Hangul_WA 0x0ec8 /* U+3158 HANGUL LETTER WA */
+#define XKB_KEY_Hangul_WAE 0x0ec9 /* U+3159 HANGUL LETTER WAE */
+#define XKB_KEY_Hangul_OE 0x0eca /* U+315A HANGUL LETTER OE */
+#define XKB_KEY_Hangul_YO 0x0ecb /* U+315B HANGUL LETTER YO */
+#define XKB_KEY_Hangul_U 0x0ecc /* U+315C HANGUL LETTER U */
+#define XKB_KEY_Hangul_WEO 0x0ecd /* U+315D HANGUL LETTER WEO */
+#define XKB_KEY_Hangul_WE 0x0ece /* U+315E HANGUL LETTER WE */
+#define XKB_KEY_Hangul_WI 0x0ecf /* U+315F HANGUL LETTER WI */
+#define XKB_KEY_Hangul_YU 0x0ed0 /* U+3160 HANGUL LETTER YU */
+#define XKB_KEY_Hangul_EU 0x0ed1 /* U+3161 HANGUL LETTER EU */
+#define XKB_KEY_Hangul_YI 0x0ed2 /* U+3162 HANGUL LETTER YI */
+#define XKB_KEY_Hangul_I 0x0ed3 /* U+3163 HANGUL LETTER I */
/* Hangul syllable-final (JongSeong) Characters */
-#define XKB_KEY_Hangul_J_Kiyeog 0x0ed4
-#define XKB_KEY_Hangul_J_SsangKiyeog 0x0ed5
-#define XKB_KEY_Hangul_J_KiyeogSios 0x0ed6
-#define XKB_KEY_Hangul_J_Nieun 0x0ed7
-#define XKB_KEY_Hangul_J_NieunJieuj 0x0ed8
-#define XKB_KEY_Hangul_J_NieunHieuh 0x0ed9
-#define XKB_KEY_Hangul_J_Dikeud 0x0eda
-#define XKB_KEY_Hangul_J_Rieul 0x0edb
-#define XKB_KEY_Hangul_J_RieulKiyeog 0x0edc
-#define XKB_KEY_Hangul_J_RieulMieum 0x0edd
-#define XKB_KEY_Hangul_J_RieulPieub 0x0ede
-#define XKB_KEY_Hangul_J_RieulSios 0x0edf
-#define XKB_KEY_Hangul_J_RieulTieut 0x0ee0
-#define XKB_KEY_Hangul_J_RieulPhieuf 0x0ee1
-#define XKB_KEY_Hangul_J_RieulHieuh 0x0ee2
-#define XKB_KEY_Hangul_J_Mieum 0x0ee3
-#define XKB_KEY_Hangul_J_Pieub 0x0ee4
-#define XKB_KEY_Hangul_J_PieubSios 0x0ee5
-#define XKB_KEY_Hangul_J_Sios 0x0ee6
-#define XKB_KEY_Hangul_J_SsangSios 0x0ee7
-#define XKB_KEY_Hangul_J_Ieung 0x0ee8
-#define XKB_KEY_Hangul_J_Jieuj 0x0ee9
-#define XKB_KEY_Hangul_J_Cieuc 0x0eea
-#define XKB_KEY_Hangul_J_Khieuq 0x0eeb
-#define XKB_KEY_Hangul_J_Tieut 0x0eec
-#define XKB_KEY_Hangul_J_Phieuf 0x0eed
-#define XKB_KEY_Hangul_J_Hieuh 0x0eee
+#define XKB_KEY_Hangul_J_Kiyeog 0x0ed4 /* U+11A8 HANGUL JONGSEONG KIYEOK */
+#define XKB_KEY_Hangul_J_SsangKiyeog 0x0ed5 /* U+11A9 HANGUL JONGSEONG SSANGKIYEOK */
+#define XKB_KEY_Hangul_J_KiyeogSios 0x0ed6 /* U+11AA HANGUL JONGSEONG KIYEOK-SIOS */
+#define XKB_KEY_Hangul_J_Nieun 0x0ed7 /* U+11AB HANGUL JONGSEONG NIEUN */
+#define XKB_KEY_Hangul_J_NieunJieuj 0x0ed8 /* U+11AC HANGUL JONGSEONG NIEUN-CIEUC */
+#define XKB_KEY_Hangul_J_NieunHieuh 0x0ed9 /* U+11AD HANGUL JONGSEONG NIEUN-HIEUH */
+#define XKB_KEY_Hangul_J_Dikeud 0x0eda /* U+11AE HANGUL JONGSEONG TIKEUT */
+#define XKB_KEY_Hangul_J_Rieul 0x0edb /* U+11AF HANGUL JONGSEONG RIEUL */
+#define XKB_KEY_Hangul_J_RieulKiyeog 0x0edc /* U+11B0 HANGUL JONGSEONG RIEUL-KIYEOK */
+#define XKB_KEY_Hangul_J_RieulMieum 0x0edd /* U+11B1 HANGUL JONGSEONG RIEUL-MIEUM */
+#define XKB_KEY_Hangul_J_RieulPieub 0x0ede /* U+11B2 HANGUL JONGSEONG RIEUL-PIEUP */
+#define XKB_KEY_Hangul_J_RieulSios 0x0edf /* U+11B3 HANGUL JONGSEONG RIEUL-SIOS */
+#define XKB_KEY_Hangul_J_RieulTieut 0x0ee0 /* U+11B4 HANGUL JONGSEONG RIEUL-THIEUTH */
+#define XKB_KEY_Hangul_J_RieulPhieuf 0x0ee1 /* U+11B5 HANGUL JONGSEONG RIEUL-PHIEUPH */
+#define XKB_KEY_Hangul_J_RieulHieuh 0x0ee2 /* U+11B6 HANGUL JONGSEONG RIEUL-HIEUH */
+#define XKB_KEY_Hangul_J_Mieum 0x0ee3 /* U+11B7 HANGUL JONGSEONG MIEUM */
+#define XKB_KEY_Hangul_J_Pieub 0x0ee4 /* U+11B8 HANGUL JONGSEONG PIEUP */
+#define XKB_KEY_Hangul_J_PieubSios 0x0ee5 /* U+11B9 HANGUL JONGSEONG PIEUP-SIOS */
+#define XKB_KEY_Hangul_J_Sios 0x0ee6 /* U+11BA HANGUL JONGSEONG SIOS */
+#define XKB_KEY_Hangul_J_SsangSios 0x0ee7 /* U+11BB HANGUL JONGSEONG SSANGSIOS */
+#define XKB_KEY_Hangul_J_Ieung 0x0ee8 /* U+11BC HANGUL JONGSEONG IEUNG */
+#define XKB_KEY_Hangul_J_Jieuj 0x0ee9 /* U+11BD HANGUL JONGSEONG CIEUC */
+#define XKB_KEY_Hangul_J_Cieuc 0x0eea /* U+11BE HANGUL JONGSEONG CHIEUCH */
+#define XKB_KEY_Hangul_J_Khieuq 0x0eeb /* U+11BF HANGUL JONGSEONG KHIEUKH */
+#define XKB_KEY_Hangul_J_Tieut 0x0eec /* U+11C0 HANGUL JONGSEONG THIEUTH */
+#define XKB_KEY_Hangul_J_Phieuf 0x0eed /* U+11C1 HANGUL JONGSEONG PHIEUPH */
+#define XKB_KEY_Hangul_J_Hieuh 0x0eee /* U+11C2 HANGUL JONGSEONG HIEUH */
/* Ancient Hangul Consonant Characters */
-#define XKB_KEY_Hangul_RieulYeorinHieuh 0x0eef
-#define XKB_KEY_Hangul_SunkyeongeumMieum 0x0ef0
-#define XKB_KEY_Hangul_SunkyeongeumPieub 0x0ef1
-#define XKB_KEY_Hangul_PanSios 0x0ef2
-#define XKB_KEY_Hangul_KkogjiDalrinIeung 0x0ef3
-#define XKB_KEY_Hangul_SunkyeongeumPhieuf 0x0ef4
-#define XKB_KEY_Hangul_YeorinHieuh 0x0ef5
+#define XKB_KEY_Hangul_RieulYeorinHieuh 0x0eef /* U+316D HANGUL LETTER RIEUL-YEORINHIEUH */
+#define XKB_KEY_Hangul_SunkyeongeumMieum 0x0ef0 /* U+3171 HANGUL LETTER KAPYEOUNMIEUM */
+#define XKB_KEY_Hangul_SunkyeongeumPieub 0x0ef1 /* U+3178 HANGUL LETTER KAPYEOUNPIEUP */
+#define XKB_KEY_Hangul_PanSios 0x0ef2 /* U+317F HANGUL LETTER PANSIOS */
+#define XKB_KEY_Hangul_KkogjiDalrinIeung 0x0ef3 /* U+3181 HANGUL LETTER YESIEUNG */
+#define XKB_KEY_Hangul_SunkyeongeumPhieuf 0x0ef4 /* U+3184 HANGUL LETTER KAPYEOUNPHIEUPH */
+#define XKB_KEY_Hangul_YeorinHieuh 0x0ef5 /* U+3186 HANGUL LETTER YEORINHIEUH */
/* Ancient Hangul Vowel Characters */
-#define XKB_KEY_Hangul_AraeA 0x0ef6
-#define XKB_KEY_Hangul_AraeAE 0x0ef7
+#define XKB_KEY_Hangul_AraeA 0x0ef6 /* U+318D HANGUL LETTER ARAEA */
+#define XKB_KEY_Hangul_AraeAE 0x0ef7 /* U+318E HANGUL LETTER ARAEAE */
/* Ancient Hangul syllable-final (JongSeong) Characters */
-#define XKB_KEY_Hangul_J_PanSios 0x0ef8
-#define XKB_KEY_Hangul_J_KkogjiDalrinIeung 0x0ef9
-#define XKB_KEY_Hangul_J_YeorinHieuh 0x0efa
+#define XKB_KEY_Hangul_J_PanSios 0x0ef8 /* U+11EB HANGUL JONGSEONG PANSIOS */
+#define XKB_KEY_Hangul_J_KkogjiDalrinIeung 0x0ef9 /* U+11F0 HANGUL JONGSEONG YESIEUNG */
+#define XKB_KEY_Hangul_J_YeorinHieuh 0x0efa /* U+11F9 HANGUL JONGSEONG YEORINHIEUH */
/* Korean currency symbol */
#define XKB_KEY_Korean_Won 0x0eff /*(U+20A9 WON SIGN)*/
@@ -2044,6 +2044,11 @@ SOFTWARE.
#define XKB_KEY_ohorn 0x10001a1 /* U+01A1 LATIN SMALL LETTER O WITH HORN */
#define XKB_KEY_Uhorn 0x10001af /* U+01AF LATIN CAPITAL LETTER U WITH HORN */
#define XKB_KEY_uhorn 0x10001b0 /* U+01B0 LATIN SMALL LETTER U WITH HORN */
+#define XKB_KEY_combining_tilde 0x1000303 /* U+0303 COMBINING TILDE */
+#define XKB_KEY_combining_grave 0x1000300 /* U+0300 COMBINING GRAVE ACCENT */
+#define XKB_KEY_combining_acute 0x1000301 /* U+0301 COMBINING ACUTE ACCENT */
+#define XKB_KEY_combining_hook 0x1000309 /* U+0309 COMBINING HOOK ABOVE */
+#define XKB_KEY_combining_belowdot 0x1000323 /* U+0323 COMBINING DOT BELOW */
#define XKB_KEY_EcuSign 0x10020a0 /* U+20A0 EURO-CURRENCY SIGN */
@@ -2089,8 +2094,8 @@ SOFTWARE.
#define XKB_KEY_dintegral 0x100222C /* U+222C DOUBLE INTEGRAL */
#define XKB_KEY_tintegral 0x100222D /* U+222D TRIPLE INTEGRAL */
#define XKB_KEY_because 0x1002235 /* U+2235 BECAUSE */
-#define XKB_KEY_approxeq 0x1002248 /* U+2245 ALMOST EQUAL TO */
-#define XKB_KEY_notapproxeq 0x1002247 /* U+2247 NOT ALMOST EQUAL TO */
+#define XKB_KEY_approxeq 0x1002248 /*(U+2248 ALMOST EQUAL TO)*/
+#define XKB_KEY_notapproxeq 0x1002247 /*(U+2247 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO)*/
#define XKB_KEY_notidentical 0x1002262 /* U+2262 NOT IDENTICAL TO */
#define XKB_KEY_stricteq 0x1002263 /* U+2263 STRICTLY EQUIVALENT TO */
@@ -2451,8 +2456,10 @@ SOFTWARE.
*
* The XFree86 keysym range is 0x10080001 - 0x1008FFFF.
*
- * X.Org will not be adding to the XF86 set of keysyms, though they have
- * been adopted and are considered a "standard" part of X keysym definitions.
+ * The XF86 set of keysyms is a catch-all set of defines for keysyms found
+ * on various multimedia keyboards. Originally specific to XFree86 they have
+ * been been adopted over time and are considered a "standard" part of X
+ * keysym definitions.
* XFree86 never properly commented these keysyms, so we have done our
* best to explain the semantic meaning of these keys.
*
@@ -2678,6 +2685,238 @@ SOFTWARE.
#define XKB_KEY_XF86Prev_VMode 0x1008FE23 /* prev. video mode available */
#define XKB_KEY_XF86LogWindowTree 0x1008FE24 /* print window tree to log */
#define XKB_KEY_XF86LogGrabInfo 0x1008FE25 /* print all active grabs to log */
+
+
+/*
+ * Reserved range for evdev symbols: 0x10081000-0x10081FFF
+ *
+ * Key syms within this range must match the Linux kernel
+ * input-event-codes.h file in the format:
+ * XF86XK_CamelCaseKernelName _EVDEVK(kernel value)
+ * For example, the kernel
+ * #define KEY_MACRO_RECORD_START 0x2b0
+ * effectively ends up as:
+ * #define XKB_KEY_XF86MacroRecordStart 0x100812b0
+ *
+ * For historical reasons, some keysyms within the reserved range will be
+ * missing, most notably all "normal" keys that are mapped through default
+ * XKB layouts (e.g. KEY_Q).
+ *
+ * CamelCasing is done with a human control as last authority, e.g. see VOD
+ * instead of Vod for the Video on Demand key.
+ *
+ * The format for #defines is strict:
+ *
+ * #define XKB_KEY_XF86FOO<tab...>_EVDEVK(0xABC)<tab><tab> |* kver KEY_FOO *|
+ *
+ * Where
+ * - alignment by tabs
+ * - the _EVDEVK macro must be used
+ * - the hex code must be in uppercase hex
+ * - the kernel version (kver) is in the form v5.10
+ * - kver and key name are within a slash-star comment (a pipe is used in
+ * this example for technical reasons)
+ * These #defines are parsed by scripts. Do not stray from the given format.
+ *
+ * Where the evdev keycode is mapped to a different symbol, please add a
+ * comment line starting with Use: but otherwise the same format, e.g.
+ * Use: XF86XK_RotationLockToggle _EVDEVK(0x231) v4.16 KEY_ROTATE_LOCK_TOGGLE
+ *
+ */
+/* Use: XF86XK_Eject _EVDEVK(0x0A2) KEY_EJECTCLOSECD */
+/* Use: XF86XK_New _EVDEVK(0x0B5) v2.6.14 KEY_NEW */
+/* Use: XK_Redo _EVDEVK(0x0B6) v2.6.14 KEY_REDO */
+/* KEY_DASHBOARD has been mapped to LaunchB in xkeyboard-config since 2011 */
+/* Use: XF86XK_LaunchB _EVDEVK(0x0CC) v2.6.28 KEY_DASHBOARD */
+/* Use: XF86XK_Display _EVDEVK(0x0E3) v2.6.12 KEY_SWITCHVIDEOMODE */
+/* Use: XF86XK_KbdLightOnOff _EVDEVK(0x0E4) v2.6.12 KEY_KBDILLUMTOGGLE */
+/* Use: XF86XK_KbdBrightnessDown _EVDEVK(0x0E5) v2.6.12 KEY_KBDILLUMDOWN */
+/* Use: XF86XK_KbdBrightnessUp _EVDEVK(0x0E6) v2.6.12 KEY_KBDILLUMUP */
+/* Use: XF86XK_Send _EVDEVK(0x0E7) v2.6.14 KEY_SEND */
+/* Use: XF86XK_Reply _EVDEVK(0x0E8) v2.6.14 KEY_REPLY */
+/* Use: XF86XK_MailForward _EVDEVK(0x0E9) v2.6.14 KEY_FORWARDMAIL */
+/* Use: XF86XK_Save _EVDEVK(0x0EA) v2.6.14 KEY_SAVE */
+/* Use: XF86XK_Documents _EVDEVK(0x0EB) v2.6.14 KEY_DOCUMENTS */
+/* Use: XF86XK_Battery _EVDEVK(0x0EC) v2.6.17 KEY_BATTERY */
+/* Use: XF86XK_Bluetooth _EVDEVK(0x0ED) v2.6.19 KEY_BLUETOOTH */
+/* Use: XF86XK_WLAN _EVDEVK(0x0EE) v2.6.19 KEY_WLAN */
+/* Use: XF86XK_UWB _EVDEVK(0x0EF) v2.6.24 KEY_UWB */
+/* Use: XF86XK_Next_VMode _EVDEVK(0x0F1) v2.6.23 KEY_VIDEO_NEXT */
+/* Use: XF86XK_Prev_VMode _EVDEVK(0x0F2) v2.6.23 KEY_VIDEO_PREV */
+/* Use: XF86XK_MonBrightnessCycle _EVDEVK(0x0F3) v2.6.23 KEY_BRIGHTNESS_CYCLE */
+#define XKB_KEY_XF86BrightnessAuto 0x100810f4 /* v3.16 KEY_BRIGHTNESS_AUTO */
+#define XKB_KEY_XF86DisplayOff 0x100810f5 /* v2.6.23 KEY_DISPLAY_OFF */
+/* Use: XF86XK_WWAN _EVDEVK(0x0F6) v3.13 KEY_WWAN */
+/* Use: XF86XK_RFKill _EVDEVK(0x0F7) v2.6.33 KEY_RFKILL */
+/* Use: XF86XK_AudioMicMute _EVDEVK(0x0F8) v3.1 KEY_MICMUTE */
+#define XKB_KEY_XF86Info 0x10081166 /* KEY_INFO */
+/* Use: XF86XK_CycleAngle _EVDEVK(0x173) KEY_ANGLE */
+/* Use: XF86XK_FullScreen _EVDEVK(0x174) v5.1 KEY_FULL_SCREEN */
+#define XKB_KEY_XF86AspectRatio 0x10081177 /* v5.1 KEY_ASPECT_RATIO */
+#define XKB_KEY_XF86DVD 0x10081185 /* KEY_DVD */
+#define XKB_KEY_XF86Audio 0x10081188 /* KEY_AUDIO */
+/* Use: XF86XK_Video _EVDEVK(0x189) KEY_VIDEO */
+/* Use: XF86XK_Calendar _EVDEVK(0x18D) KEY_CALENDAR */
+#define XKB_KEY_XF86ChannelUp 0x10081192 /* KEY_CHANNELUP */
+#define XKB_KEY_XF86ChannelDown 0x10081193 /* KEY_CHANNELDOWN */
+/* Use: XF86XK_AudioRandomPlay _EVDEVK(0x19A) KEY_SHUFFLE */
+#define XKB_KEY_XF86Break 0x1008119b /* KEY_BREAK */
+#define XKB_KEY_XF86VideoPhone 0x100811a0 /* v2.6.20 KEY_VIDEOPHONE */
+/* Use: XF86XK_Game _EVDEVK(0x1A1) v2.6.20 KEY_GAMES */
+/* Use: XF86XK_ZoomIn _EVDEVK(0x1A2) v2.6.20 KEY_ZOOMIN */
+/* Use: XF86XK_ZoomOut _EVDEVK(0x1A3) v2.6.20 KEY_ZOOMOUT */
+#define XKB_KEY_XF86ZoomReset 0x100811a4 /* v2.6.20 KEY_ZOOMRESET */
+/* Use: XF86XK_Word _EVDEVK(0x1A5) v2.6.20 KEY_WORDPROCESSOR */
+#define XKB_KEY_XF86Editor 0x100811a6 /* v2.6.20 KEY_EDITOR */
+/* Use: XF86XK_Excel _EVDEVK(0x1A7) v2.6.20 KEY_SPREADSHEET */
+#define XKB_KEY_XF86GraphicsEditor 0x100811a8 /* v2.6.20 KEY_GRAPHICSEDITOR */
+#define XKB_KEY_XF86Presentation 0x100811a9 /* v2.6.20 KEY_PRESENTATION */
+#define XKB_KEY_XF86Database 0x100811aa /* v2.6.20 KEY_DATABASE */
+/* Use: XF86XK_News _EVDEVK(0x1AB) v2.6.20 KEY_NEWS */
+#define XKB_KEY_XF86Voicemail 0x100811ac /* v2.6.20 KEY_VOICEMAIL */
+#define XKB_KEY_XF86Addressbook 0x100811ad /* v2.6.20 KEY_ADDRESSBOOK */
+/* Use: XF86XK_Messenger _EVDEVK(0x1AE) v2.6.20 KEY_MESSENGER */
+#define XKB_KEY_XF86DisplayToggle 0x100811af /* v2.6.20 KEY_DISPLAYTOGGLE */
+#define XKB_KEY_XF86SpellCheck 0x100811b0 /* v2.6.24 KEY_SPELLCHECK */
+/* Use: XF86XK_LogOff _EVDEVK(0x1B1) v2.6.24 KEY_LOGOFF */
+/* Use: XK_dollar _EVDEVK(0x1B2) v2.6.24 KEY_DOLLAR */
+/* Use: XK_EuroSign _EVDEVK(0x1B3) v2.6.24 KEY_EURO */
+/* Use: XF86XK_FrameBack _EVDEVK(0x1B4) v2.6.24 KEY_FRAMEBACK */
+/* Use: XF86XK_FrameForward _EVDEVK(0x1B5) v2.6.24 KEY_FRAMEFORWARD */
+#define XKB_KEY_XF86ContextMenu 0x100811b6 /* v2.6.24 KEY_CONTEXT_MENU */
+#define XKB_KEY_XF86MediaRepeat 0x100811b7 /* v2.6.26 KEY_MEDIA_REPEAT */
+#define XKB_KEY_XF8610ChannelsUp 0x100811b8 /* v2.6.38 KEY_10CHANNELSUP */
+#define XKB_KEY_XF8610ChannelsDown 0x100811b9 /* v2.6.38 KEY_10CHANNELSDOWN */
+#define XKB_KEY_XF86Images 0x100811ba /* v2.6.39 KEY_IMAGES */
+#define XKB_KEY_XF86NotificationCenter 0x100811bc /* v5.10 KEY_NOTIFICATION_CENTER */
+#define XKB_KEY_XF86PickupPhone 0x100811bd /* v5.10 KEY_PICKUP_PHONE */
+#define XKB_KEY_XF86HangupPhone 0x100811be /* v5.10 KEY_HANGUP_PHONE */
+#define XKB_KEY_XF86Fn 0x100811d0 /* KEY_FN */
+#define XKB_KEY_XF86Fn_Esc 0x100811d1 /* KEY_FN_ESC */
+#define XKB_KEY_XF86FnRightShift 0x100811e5 /* v5.10 KEY_FN_RIGHT_SHIFT */
+/* Use: XK_braille_dot_1 _EVDEVK(0x1F1) v2.6.17 KEY_BRL_DOT1 */
+/* Use: XK_braille_dot_2 _EVDEVK(0x1F2) v2.6.17 KEY_BRL_DOT2 */
+/* Use: XK_braille_dot_3 _EVDEVK(0x1F3) v2.6.17 KEY_BRL_DOT3 */
+/* Use: XK_braille_dot_4 _EVDEVK(0x1F4) v2.6.17 KEY_BRL_DOT4 */
+/* Use: XK_braille_dot_5 _EVDEVK(0x1F5) v2.6.17 KEY_BRL_DOT5 */
+/* Use: XK_braille_dot_6 _EVDEVK(0x1F6) v2.6.17 KEY_BRL_DOT6 */
+/* Use: XK_braille_dot_7 _EVDEVK(0x1F7) v2.6.17 KEY_BRL_DOT7 */
+/* Use: XK_braille_dot_8 _EVDEVK(0x1F8) v2.6.17 KEY_BRL_DOT8 */
+/* Use: XK_braille_dot_9 _EVDEVK(0x1F9) v2.6.23 KEY_BRL_DOT9 */
+/* Use: XK_braille_dot_1 _EVDEVK(0x1FA) v2.6.23 KEY_BRL_DOT10 */
+#define XKB_KEY_XF86Numeric0 0x10081200 /* v2.6.28 KEY_NUMERIC_0 */
+#define XKB_KEY_XF86Numeric1 0x10081201 /* v2.6.28 KEY_NUMERIC_1 */
+#define XKB_KEY_XF86Numeric2 0x10081202 /* v2.6.28 KEY_NUMERIC_2 */
+#define XKB_KEY_XF86Numeric3 0x10081203 /* v2.6.28 KEY_NUMERIC_3 */
+#define XKB_KEY_XF86Numeric4 0x10081204 /* v2.6.28 KEY_NUMERIC_4 */
+#define XKB_KEY_XF86Numeric5 0x10081205 /* v2.6.28 KEY_NUMERIC_5 */
+#define XKB_KEY_XF86Numeric6 0x10081206 /* v2.6.28 KEY_NUMERIC_6 */
+#define XKB_KEY_XF86Numeric7 0x10081207 /* v2.6.28 KEY_NUMERIC_7 */
+#define XKB_KEY_XF86Numeric8 0x10081208 /* v2.6.28 KEY_NUMERIC_8 */
+#define XKB_KEY_XF86Numeric9 0x10081209 /* v2.6.28 KEY_NUMERIC_9 */
+#define XKB_KEY_XF86NumericStar 0x1008120a /* v2.6.28 KEY_NUMERIC_STAR */
+#define XKB_KEY_XF86NumericPound 0x1008120b /* v2.6.28 KEY_NUMERIC_POUND */
+#define XKB_KEY_XF86NumericA 0x1008120c /* v4.1 KEY_NUMERIC_A */
+#define XKB_KEY_XF86NumericB 0x1008120d /* v4.1 KEY_NUMERIC_B */
+#define XKB_KEY_XF86NumericC 0x1008120e /* v4.1 KEY_NUMERIC_C */
+#define XKB_KEY_XF86NumericD 0x1008120f /* v4.1 KEY_NUMERIC_D */
+#define XKB_KEY_XF86CameraFocus 0x10081210 /* v2.6.33 KEY_CAMERA_FOCUS */
+#define XKB_KEY_XF86WPSButton 0x10081211 /* v2.6.34 KEY_WPS_BUTTON */
+/* Use: XF86XK_TouchpadToggle _EVDEVK(0x212) v2.6.37 KEY_TOUCHPAD_TOGGLE */
+/* Use: XF86XK_TouchpadOn _EVDEVK(0x213) v2.6.37 KEY_TOUCHPAD_ON */
+/* Use: XF86XK_TouchpadOff _EVDEVK(0x214) v2.6.37 KEY_TOUCHPAD_OFF */
+#define XKB_KEY_XF86CameraZoomIn 0x10081215 /* v2.6.39 KEY_CAMERA_ZOOMIN */
+#define XKB_KEY_XF86CameraZoomOut 0x10081216 /* v2.6.39 KEY_CAMERA_ZOOMOUT */
+#define XKB_KEY_XF86CameraUp 0x10081217 /* v2.6.39 KEY_CAMERA_UP */
+#define XKB_KEY_XF86CameraDown 0x10081218 /* v2.6.39 KEY_CAMERA_DOWN */
+#define XKB_KEY_XF86CameraLeft 0x10081219 /* v2.6.39 KEY_CAMERA_LEFT */
+#define XKB_KEY_XF86CameraRight 0x1008121a /* v2.6.39 KEY_CAMERA_RIGHT */
+#define XKB_KEY_XF86AttendantOn 0x1008121b /* v3.10 KEY_ATTENDANT_ON */
+#define XKB_KEY_XF86AttendantOff 0x1008121c /* v3.10 KEY_ATTENDANT_OFF */
+#define XKB_KEY_XF86AttendantToggle 0x1008121d /* v3.10 KEY_ATTENDANT_TOGGLE */
+#define XKB_KEY_XF86LightsToggle 0x1008121e /* v3.10 KEY_LIGHTS_TOGGLE */
+#define XKB_KEY_XF86ALSToggle 0x10081230 /* v3.13 KEY_ALS_TOGGLE */
+/* Use: XF86XK_RotationLockToggle _EVDEVK(0x231) v4.16 KEY_ROTATE_LOCK_TOGGLE */
+#define XKB_KEY_XF86Buttonconfig 0x10081240 /* v3.16 KEY_BUTTONCONFIG */
+#define XKB_KEY_XF86Taskmanager 0x10081241 /* v3.16 KEY_TASKMANAGER */
+#define XKB_KEY_XF86Journal 0x10081242 /* v3.16 KEY_JOURNAL */
+#define XKB_KEY_XF86ControlPanel 0x10081243 /* v3.16 KEY_CONTROLPANEL */
+#define XKB_KEY_XF86AppSelect 0x10081244 /* v3.16 KEY_APPSELECT */
+#define XKB_KEY_XF86Screensaver 0x10081245 /* v3.16 KEY_SCREENSAVER */
+#define XKB_KEY_XF86VoiceCommand 0x10081246 /* v3.16 KEY_VOICECOMMAND */
+#define XKB_KEY_XF86Assistant 0x10081247 /* v4.13 KEY_ASSISTANT */
+/* Use: XK_ISO_Next_Group _EVDEVK(0x248) v5.2 KEY_KBD_LAYOUT_NEXT */
+#define XKB_KEY_XF86BrightnessMin 0x10081250 /* v3.16 KEY_BRIGHTNESS_MIN */
+#define XKB_KEY_XF86BrightnessMax 0x10081251 /* v3.16 KEY_BRIGHTNESS_MAX */
+#define XKB_KEY_XF86KbdInputAssistPrev 0x10081260 /* v3.18 KEY_KBDINPUTASSIST_PREV */
+#define XKB_KEY_XF86KbdInputAssistNext 0x10081261 /* v3.18 KEY_KBDINPUTASSIST_NEXT */
+#define XKB_KEY_XF86KbdInputAssistPrevgroup 0x10081262 /* v3.18 KEY_KBDINPUTASSIST_PREVGROUP */
+#define XKB_KEY_XF86KbdInputAssistNextgroup 0x10081263 /* v3.18 KEY_KBDINPUTASSIST_NEXTGROUP */
+#define XKB_KEY_XF86KbdInputAssistAccept 0x10081264 /* v3.18 KEY_KBDINPUTASSIST_ACCEPT */
+#define XKB_KEY_XF86KbdInputAssistCancel 0x10081265 /* v3.18 KEY_KBDINPUTASSIST_CANCEL */
+#define XKB_KEY_XF86RightUp 0x10081266 /* v4.7 KEY_RIGHT_UP */
+#define XKB_KEY_XF86RightDown 0x10081267 /* v4.7 KEY_RIGHT_DOWN */
+#define XKB_KEY_XF86LeftUp 0x10081268 /* v4.7 KEY_LEFT_UP */
+#define XKB_KEY_XF86LeftDown 0x10081269 /* v4.7 KEY_LEFT_DOWN */
+#define XKB_KEY_XF86RootMenu 0x1008126a /* v4.7 KEY_ROOT_MENU */
+#define XKB_KEY_XF86MediaTopMenu 0x1008126b /* v4.7 KEY_MEDIA_TOP_MENU */
+#define XKB_KEY_XF86Numeric11 0x1008126c /* v4.7 KEY_NUMERIC_11 */
+#define XKB_KEY_XF86Numeric12 0x1008126d /* v4.7 KEY_NUMERIC_12 */
+#define XKB_KEY_XF86AudioDesc 0x1008126e /* v4.7 KEY_AUDIO_DESC */
+#define XKB_KEY_XF863DMode 0x1008126f /* v4.7 KEY_3D_MODE */
+#define XKB_KEY_XF86NextFavorite 0x10081270 /* v4.7 KEY_NEXT_FAVORITE */
+#define XKB_KEY_XF86StopRecord 0x10081271 /* v4.7 KEY_STOP_RECORD */
+#define XKB_KEY_XF86PauseRecord 0x10081272 /* v4.7 KEY_PAUSE_RECORD */
+#define XKB_KEY_XF86VOD 0x10081273 /* v4.7 KEY_VOD */
+#define XKB_KEY_XF86Unmute 0x10081274 /* v4.7 KEY_UNMUTE */
+#define XKB_KEY_XF86FastReverse 0x10081275 /* v4.7 KEY_FASTREVERSE */
+#define XKB_KEY_XF86SlowReverse 0x10081276 /* v4.7 KEY_SLOWREVERSE */
+#define XKB_KEY_XF86Data 0x10081277 /* v4.7 KEY_DATA */
+#define XKB_KEY_XF86OnScreenKeyboard 0x10081278 /* v4.12 KEY_ONSCREEN_KEYBOARD */
+#define XKB_KEY_XF86PrivacyScreenToggle 0x10081279 /* v5.5 KEY_PRIVACY_SCREEN_TOGGLE */
+#define XKB_KEY_XF86SelectiveScreenshot 0x1008127a /* v5.6 KEY_SELECTIVE_SCREENSHOT */
+#define XKB_KEY_XF86Macro1 0x10081290 /* v5.5 KEY_MACRO1 */
+#define XKB_KEY_XF86Macro2 0x10081291 /* v5.5 KEY_MACRO2 */
+#define XKB_KEY_XF86Macro3 0x10081292 /* v5.5 KEY_MACRO3 */
+#define XKB_KEY_XF86Macro4 0x10081293 /* v5.5 KEY_MACRO4 */
+#define XKB_KEY_XF86Macro5 0x10081294 /* v5.5 KEY_MACRO5 */
+#define XKB_KEY_XF86Macro6 0x10081295 /* v5.5 KEY_MACRO6 */
+#define XKB_KEY_XF86Macro7 0x10081296 /* v5.5 KEY_MACRO7 */
+#define XKB_KEY_XF86Macro8 0x10081297 /* v5.5 KEY_MACRO8 */
+#define XKB_KEY_XF86Macro9 0x10081298 /* v5.5 KEY_MACRO9 */
+#define XKB_KEY_XF86Macro10 0x10081299 /* v5.5 KEY_MACRO10 */
+#define XKB_KEY_XF86Macro11 0x1008129a /* v5.5 KEY_MACRO11 */
+#define XKB_KEY_XF86Macro12 0x1008129b /* v5.5 KEY_MACRO12 */
+#define XKB_KEY_XF86Macro13 0x1008129c /* v5.5 KEY_MACRO13 */
+#define XKB_KEY_XF86Macro14 0x1008129d /* v5.5 KEY_MACRO14 */
+#define XKB_KEY_XF86Macro15 0x1008129e /* v5.5 KEY_MACRO15 */
+#define XKB_KEY_XF86Macro16 0x1008129f /* v5.5 KEY_MACRO16 */
+#define XKB_KEY_XF86Macro17 0x100812a0 /* v5.5 KEY_MACRO17 */
+#define XKB_KEY_XF86Macro18 0x100812a1 /* v5.5 KEY_MACRO18 */
+#define XKB_KEY_XF86Macro19 0x100812a2 /* v5.5 KEY_MACRO19 */
+#define XKB_KEY_XF86Macro20 0x100812a3 /* v5.5 KEY_MACRO20 */
+#define XKB_KEY_XF86Macro21 0x100812a4 /* v5.5 KEY_MACRO21 */
+#define XKB_KEY_XF86Macro22 0x100812a5 /* v5.5 KEY_MACRO22 */
+#define XKB_KEY_XF86Macro23 0x100812a6 /* v5.5 KEY_MACRO23 */
+#define XKB_KEY_XF86Macro24 0x100812a7 /* v5.5 KEY_MACRO24 */
+#define XKB_KEY_XF86Macro25 0x100812a8 /* v5.5 KEY_MACRO25 */
+#define XKB_KEY_XF86Macro26 0x100812a9 /* v5.5 KEY_MACRO26 */
+#define XKB_KEY_XF86Macro27 0x100812aa /* v5.5 KEY_MACRO27 */
+#define XKB_KEY_XF86Macro28 0x100812ab /* v5.5 KEY_MACRO28 */
+#define XKB_KEY_XF86Macro29 0x100812ac /* v5.5 KEY_MACRO29 */
+#define XKB_KEY_XF86Macro30 0x100812ad /* v5.5 KEY_MACRO30 */
+#define XKB_KEY_XF86MacroRecordStart 0x100812b0 /* v5.5 KEY_MACRO_RECORD_START */
+#define XKB_KEY_XF86MacroRecordStop 0x100812b1 /* v5.5 KEY_MACRO_RECORD_STOP */
+#define XKB_KEY_XF86MacroPresetCycle 0x100812b2 /* v5.5 KEY_MACRO_PRESET_CYCLE */
+#define XKB_KEY_XF86MacroPreset1 0x100812b3 /* v5.5 KEY_MACRO_PRESET1 */
+#define XKB_KEY_XF86MacroPreset2 0x100812b4 /* v5.5 KEY_MACRO_PRESET2 */
+#define XKB_KEY_XF86MacroPreset3 0x100812b5 /* v5.5 KEY_MACRO_PRESET3 */
+#define XKB_KEY_XF86KbdLcdMenu1 0x100812b8 /* v5.5 KEY_KBD_LCD_MENU1 */
+#define XKB_KEY_XF86KbdLcdMenu2 0x100812b9 /* v5.5 KEY_KBD_LCD_MENU2 */
+#define XKB_KEY_XF86KbdLcdMenu3 0x100812ba /* v5.5 KEY_KBD_LCD_MENU3 */
+#define XKB_KEY_XF86KbdLcdMenu4 0x100812bb /* v5.5 KEY_KBD_LCD_MENU4 */
+#define XKB_KEY_XF86KbdLcdMenu5 0x100812bc /* v5.5 KEY_KBD_LCD_MENU5 */
+#undef _EVDEVK
/*
* Copyright (c) 1991, Oracle and/or its affiliates. All rights reserved.
*
@@ -2897,7 +3136,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD
-TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+TO THIS SOFTWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. Hewlett-Packard shall not be liable for errors
contained herein or direct, indirect, special, incidental or
diff --git a/xkbcommon/xkbcommon-names.h b/include/xkbcommon/xkbcommon-names.h
index ecb551f..ecb551f 100644
--- a/xkbcommon/xkbcommon-names.h
+++ b/include/xkbcommon/xkbcommon-names.h
diff --git a/xkbcommon/xkbcommon-x11.h b/include/xkbcommon/xkbcommon-x11.h
index 4eb716a..4eb716a 100644
--- a/xkbcommon/xkbcommon-x11.h
+++ b/include/xkbcommon/xkbcommon-x11.h
diff --git a/xkbcommon/xkbcommon.h b/include/xkbcommon/xkbcommon.h
index ee7143c..f52dcfa 100644
--- a/xkbcommon/xkbcommon.h
+++ b/include/xkbcommon/xkbcommon.h
@@ -355,6 +355,9 @@ struct xkb_rule_names {
* A comma separated list of variants, one per layout, which may
* modify or augment the respective layout in various ways.
*
+ * Generally, should either be empty or have the same number of values
+ * as the number of layouts. You may use empty values as in "intl,,neo".
+ *
* If NULL or the empty string "", and a default value is also used
* for the layout, a default value is used. Otherwise no variant is
* used.
@@ -562,7 +565,7 @@ xkb_keysym_to_lower(xkb_keysym_t ks);
*
* The user may set some environment variables which affect the library:
*
- * - `XKB_CONFIG_ROOT`, `XKB_EXTRA_PATH`, `XDG_CONFIG_DIR`, `HOME` - see @ref include-path.
+ * - `XKB_CONFIG_ROOT`, `XKB_CONFIG_EXTRA_PATH`, `XDG_CONFIG_DIR`, `HOME` - see @ref include-path.
* - `XKB_LOG_LEVEL` - see xkb_context_set_log_level().
* - `XKB_LOG_VERBOSITY` - see xkb_context_set_log_verbosity().
* - `XKB_DEFAULT_RULES`, `XKB_DEFAULT_MODEL`, `XKB_DEFAULT_LAYOUT`,
@@ -653,7 +656,7 @@ xkb_context_get_user_data(struct xkb_context *context);
* fallback to `$HOME/.config/` if unset.
* - The path `$HOME/.xkb`, where $HOME is the value of the environment
* variable `HOME`.
- * - The `XKB_EXTRA_PATH` environment variable, if defined, otherwise the
+ * - The `XKB_CONFIG_EXTRA_PATH` environment variable, if defined, otherwise the
* system configuration directory, defined at library configuration time
* (usually `/etc/xkb`).
* - The `XKB_CONFIG_ROOT` environment variable, if defined, otherwise
diff --git a/xkbcommon/xkbregistry.h b/include/xkbcommon/xkbregistry.h
index 4e7e926..4e7e926 100644
--- a/xkbcommon/xkbregistry.h
+++ b/include/xkbcommon/xkbregistry.h
diff --git a/meson.build b/meson.build
index 47c436f..fb77185 100644
--- a/meson.build
+++ b/meson.build
@@ -1,9 +1,9 @@
project(
'libxkbcommon',
'c',
- version: '1.0.3',
+ version: '1.4.0',
default_options: [
- 'c_std=c99',
+ 'c_std=c11',
'warning_level=2',
'b_lundef=true',
],
@@ -49,7 +49,7 @@ endif
XKBCONFIGEXTRAPATH = get_option('xkb-config-extra-path')
if XKBCONFIGEXTRAPATH == ''
- XKBCONFIGEXTRAPATH = join_paths(get_option('prefix'), get_option('sysconfdir'), 'xkb')
+ XKBCONFIGEXTRAPATH = get_option('prefix')/get_option('sysconfdir')/'xkb'
endif
# The X locale directory for compose.
@@ -125,8 +125,6 @@ elif cc.has_header_symbol('stdlib.h', '__secure_getenv', prefix: system_ext_defi
else
message('C library does not support secure_getenv, using getenv instead')
endif
-have_getopt_long = cc.has_header_symbol('getopt.h', 'getopt_long',
- prefix: '#define _GNU_SOURCE')
if not cc.has_header_symbol('limits.h', 'PATH_MAX', prefix: system_ext_define)
if host_machine.system() == 'windows'
# see https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#maximum-path-length-limitation
@@ -152,6 +150,7 @@ have_version_script = cc.links(
name: '-Wl,--version-script',
)
+map_to_def = find_program('scripts/map-to-def')
# libxkbcommon.
# Note: we use some yacc extensions, which work with either GNU bison
@@ -231,30 +230,42 @@ libxkbcommon_sources = [
'src/utils.h',
]
libxkbcommon_link_args = []
+libxkbcommon_link_deps = []
if have_version_script
libxkbcommon_link_args += '-Wl,--version-script=' + meson.source_root()/'xkbcommon.map'
+ libxkbcommon_link_deps += 'xkbcommon.map'
+elif cc.get_argument_syntax() == 'msvc'
+ libxkbcommon_def = custom_target('xkbcommon.def',
+ command: [map_to_def, '@INPUT@', '@OUTPUT@'],
+ input: 'xkbcommon.map',
+ output: 'kxbcommon.def',
+ )
+ libxkbcommon_link_deps += libxkbcommon_def
+ libxkbcommon_link_args += '/DEF:' + libxkbcommon_def.full_path()
endif
libxkbcommon = library(
'xkbcommon',
- 'xkbcommon/xkbcommon.h',
+ 'include/xkbcommon/xkbcommon.h',
libxkbcommon_sources,
link_args: libxkbcommon_link_args,
- link_depends: 'xkbcommon.map',
+ link_depends: libxkbcommon_link_deps,
gnu_symbol_visibility: 'hidden',
version: '0.0.0',
install: true,
- include_directories: include_directories('src'),
+ include_directories: include_directories('src', 'include'),
)
install_headers(
- 'xkbcommon/xkbcommon.h',
- 'xkbcommon/xkbcommon-compat.h',
- 'xkbcommon/xkbcommon-compose.h',
- 'xkbcommon/xkbcommon-keysyms.h',
- 'xkbcommon/xkbcommon-names.h',
+ 'include/xkbcommon/xkbcommon.h',
+ 'include/xkbcommon/xkbcommon-compat.h',
+ 'include/xkbcommon/xkbcommon-compose.h',
+ 'include/xkbcommon/xkbcommon-keysyms.h',
+ 'include/xkbcommon/xkbcommon-names.h',
subdir: 'xkbcommon',
)
-libxkbcommon_dep = declare_dependency(
+
+dep_libxkbcommon = declare_dependency(
link_with: libxkbcommon,
+ include_directories: include_directories('include'),
)
pkgconfig.generate(
libxkbcommon,
@@ -287,19 +298,29 @@ You can disable X11 support with -Denable-x11=false.''')
'src/atom.c',
]
libxkbcommon_x11_link_args = []
+ libxkbcommon_x11_link_deps = []
if have_version_script
libxkbcommon_x11_link_args += '-Wl,--version-script=' + meson.source_root()/'xkbcommon-x11.map'
+ libxkbcommon_x11_link_deps += 'xkbcommon-x11.map'
+ elif cc.get_argument_syntax() == 'msvc'
+ libxkbcommon_x11_def = custom_target('xkbcommon-x11.def',
+ command: [map_to_def, '@INPUT@', '@OUTPUT@'],
+ input: 'xkbcommon-x11.map',
+ output: 'xkbcommon-x11.def',
+ )
+ libxkbcommon_x11_link_deps += libxkbcommon_x11_def
+ libxkbcommon_x11_link_args += '/DEF:' + libxkbcommon_x11_def.full_path()
endif
libxkbcommon_x11 = library(
'xkbcommon-x11',
- 'xkbcommon/xkbcommon-x11.h',
+ 'include/xkbcommon/xkbcommon-x11.h',
libxkbcommon_x11_sources,
link_args: libxkbcommon_x11_link_args,
- link_depends: 'xkbcommon-x11.map',
+ link_depends: libxkbcommon_x11_link_deps,
gnu_symbol_visibility: 'hidden',
version: '0.0.0',
install: true,
- include_directories: include_directories('src'),
+ include_directories: include_directories('src', 'include'),
link_with: libxkbcommon,
dependencies: [
xcb_dep,
@@ -307,11 +328,12 @@ You can disable X11 support with -Denable-x11=false.''')
],
)
install_headers(
- 'xkbcommon/xkbcommon-x11.h',
+ 'include/xkbcommon/xkbcommon-x11.h',
subdir: 'xkbcommon',
)
- libxkbcommon_x11_dep = declare_dependency(
+ dep_libxkbcommon_x11 = declare_dependency(
link_with: libxkbcommon_x11,
+ include_directories: include_directories('include'),
)
pkgconfig.generate(
libxkbcommon_x11,
@@ -336,23 +358,33 @@ if get_option('enable-xkbregistry')
'src/util-list.c',
]
libxkbregistry_link_args = []
+ libxkbregistry_link_deps = []
if have_version_script
libxkbregistry_link_args += '-Wl,--version-script=' + meson.source_root()/'xkbregistry.map'
+ libxkbregistry_link_deps += 'xkbregistry.map'
+ elif cc.get_argument_syntax() == 'msvc'
+ libxkbregistry_def = custom_target('xkbregistry.def',
+ command: [map_to_def, '@INPUT@', '@OUTPUT@'],
+ input: 'xkbregistry.map',
+ output: 'xkbregistry.def',
+ )
+ libxkbregistry_link_deps += libxkbregistry_def
+ libxkbregistry_link_args += '/DEF:' + libxkbregistry_def.full_path()
endif
libxkbregistry = library(
'xkbregistry',
- 'xkbcommon/xkbregistry.h',
+ 'include/xkbcommon/xkbregistry.h',
libxkbregistry_sources,
link_args: libxkbregistry_link_args,
- link_depends: 'xkbregistry.map',
+ link_depends: libxkbregistry_link_deps,
gnu_symbol_visibility: 'hidden',
dependencies: deps_libxkbregistry,
version: '0.0.0',
install: true,
- include_directories: include_directories('src'),
+ include_directories: include_directories('src', 'include'),
)
install_headers(
- 'xkbcommon/xkbregistry.h',
+ 'include/xkbcommon/xkbregistry.h',
subdir: 'xkbcommon',
)
pkgconfig.generate(
@@ -364,24 +396,24 @@ if get_option('enable-xkbregistry')
)
dep_libxkbregistry = declare_dependency(
- include_directories: include_directories('xkbcommon'),
- link_with: libxkbregistry
- )
+ link_with: libxkbregistry,
+ include_directories: include_directories('include'),
+ )
endif
man_pages = []
# Tools
-build_tools = have_getopt_long
+build_tools = get_option('enable-tools') and cc.has_header_symbol('getopt.h', 'getopt_long', prefix: '#define _GNU_SOURCE')
if build_tools
libxkbcommon_tools_internal = static_library(
'tools-internal',
'tools/tools-common.h',
'tools/tools-common.c',
- dependencies: libxkbcommon_dep,
+ dependencies: dep_libxkbcommon,
)
tools_dep = declare_dependency(
- include_directories: [include_directories('tools')],
+ include_directories: [include_directories('tools', 'include')],
link_with: libxkbcommon_tools_internal,
)
@@ -389,11 +421,11 @@ if build_tools
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)
+ xkbcli_compile_keymap = 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',
@@ -401,7 +433,12 @@ if build_tools
libxkbcommon_sources,
dependencies: [tools_dep],
c_args: ['-DENABLE_PRIVATE_APIS'],
- include_directories: [include_directories('src')],
+ include_directories: [include_directories('src', 'include')],
+ install: false)
+ executable('compose',
+ 'tools/compose.c',
+ dependencies: tools_dep,
+ include_directories: [include_directories('src', 'include')],
install: false)
configh_data.set10('HAVE_XKBCLI_COMPILE_KEYMAP', true)
executable('xkbcli-how-to-type',
@@ -518,17 +555,17 @@ libxkbcommon_test_internal = static_library(
'bench/bench.c',
'bench/bench.h',
libxkbcommon_sources,
- include_directories: include_directories('src'),
+ include_directories: include_directories('src', 'include'),
)
test_dep = declare_dependency(
- include_directories: include_directories('src'),
+ include_directories: include_directories('src', 'include'),
link_with: libxkbcommon_test_internal,
)
if get_option('enable-x11')
libxkbcommon_x11_internal = static_library(
'xkbcommon-x11-internal',
libxkbcommon_x11_sources,
- include_directories: include_directories('src'),
+ include_directories: include_directories('src', 'include'),
link_with: libxkbcommon_test_internal,
dependencies: [
xcb_dep,
@@ -657,6 +694,22 @@ if build_tools
find_program('test/tool-option-parsing.py'),
env: test_env,
suite: ['python-tests'])
+
+ # A set of keysyms to test for. Add one or two symbols to this array
+ # whenever the xorgproto gets updated to make sure we resolve them.
+ keysyms_to_test = [
+ 'XF86Macro23',
+ ]
+
+ env = environment()
+ env.set('XKB_CONFIG_ROOT', meson.source_root()/'test'/'data')
+ foreach keysym: keysyms_to_test
+ test('keysym-test-@0@'.format(keysym),
+ find_program('test/test-keysym.py'),
+ env: env,
+ args: [keysym, '--tool', xkbcli_compile_keymap],
+ suite: ['python-tests'])
+ endforeach
endif
valgrind = find_program('valgrind', required: false)
@@ -701,6 +754,11 @@ benchmark(
executable('bench-compose', 'bench/compose.c', dependencies: test_dep),
env: bench_env,
)
+benchmark(
+ 'atom',
+ executable('bench-atom', 'bench/atom.c', dependencies: test_dep),
+ env: bench_env,
+)
if get_option('enable-x11')
benchmark(
'x11',
@@ -726,11 +784,12 @@ You can disable the documentation with -Denable-docs=false.''')
'doc/compat.md',
'doc/user-configuration.md',
'doc/rules-format.md',
- 'xkbcommon/xkbcommon.h',
- 'xkbcommon/xkbcommon-names.h',
- 'xkbcommon/xkbcommon-x11.h',
- 'xkbcommon/xkbcommon-compose.h',
- 'xkbcommon/xkbregistry.h',
+ 'doc/keymap-format-text-v1.md',
+ 'include/xkbcommon/xkbcommon.h',
+ 'include/xkbcommon/xkbcommon-names.h',
+ 'include/xkbcommon/xkbcommon-x11.h',
+ 'include/xkbcommon/xkbcommon-compose.h',
+ 'include/xkbcommon/xkbregistry.h',
]
doxygen_data = configuration_data()
doxygen_data.set('PACKAGE_NAME', meson.project_name())
@@ -756,3 +815,14 @@ You can disable the documentation with -Denable-docs=false.''')
endif
configure_file(output: 'config.h', configuration: configh_data)
+
+
+# Stable variables for projects using xkbcommon as a subproject.
+# These variables should not be renamed.
+libxkbcommon_dep = dep_libxkbcommon
+if get_option('enable-x11')
+ libxkbcommon_x11_dep = dep_libxkbcommon_x11
+endif
+if get_option('enable-xkbregistry')
+ libxkbregistry_dep = dep_libxkbregistry
+endif
diff --git a/meson_options.txt b/meson_options.txt
index 04982c6..69850b8 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -44,6 +44,12 @@ option(
description: 'Default XKB options',
)
option(
+ 'enable-tools',
+ type: 'boolean',
+ value: true,
+ description: 'Enable building tools',
+)
+option(
'enable-x11',
type: 'boolean',
value: true,
@@ -59,7 +65,7 @@ option(
'enable-wayland',
type: 'boolean',
value: true,
- description: 'Enable support for Wayland utility programs',
+ description: 'Enable support for Wayland utility programs (requires enable-tools)',
)
option(
'enable-xkbregistry',
diff --git a/scripts/makeheader b/scripts/makeheader
index 600b565..52d1375 100755
--- a/scripts/makeheader
+++ b/scripts/makeheader
@@ -3,6 +3,9 @@ from __future__ import print_function
import re
import os
+# expected format:
+# #define XF86XK_FooBar _EVDEVK(0x123) /* some optional comment */
+evdev_pattern = re.compile(r'^#define\s+XF86XK_(?P<name>\w+)\s+_EVDEVK\((?P<value>0x[0-9A-Fa-f]+)\)')
prefix = os.environ.get('X11_HEADERS_PREFIX', '/usr')
HEADERS = [
@@ -35,6 +38,14 @@ for path in HEADERS:
if 'XK_Ydiaeresis' in line and '0x100000ee' in line:
continue
+ # Replace the xorgproto _EVDEVK macro with the actual value
+ # 0x10081000 is the base, the evdev hex code is added to that.
+ # We replace to make parsing of the keys later easier.
+ match = re.match(evdev_pattern, line)
+ if match:
+ value = 0x10081000 + int(match.group('value'), 16)
+ line = re.sub(r'_EVDEVK\(0x([0-9A-Fa-f]+)\)', '{:#x}'.format(value), line)
+
line = re.sub(r'#define\s*(\w*)XK_', r'#define XKB_KEY_\1', line)
print(line, end='')
diff --git a/scripts/makekeys b/scripts/makekeys
index f6a0280..fe30067 100755
--- a/scripts/makekeys
+++ b/scripts/makekeys
@@ -2,10 +2,15 @@
import re, sys, itertools
+import perfect_hash
+
pattern = re.compile(r'^#define\s+XKB_KEY_(?P<name>\w+)\s+(?P<value>0x[0-9a-fA-F]+)\s')
matches = [pattern.match(line) for line in open(sys.argv[1])]
entries = [(m.group("name"), int(m.group("value"), 16)) for m in matches if m]
+entries_isorted = sorted(entries, key=lambda e: e[0].lower())
+entries_kssorted = sorted(entries, key=lambda e: e[1])
+
print('''
/**
* This file comes from libxkbcommon and was generated by makekeys.py
@@ -24,7 +29,7 @@ print('''
static const char *keysym_names =
'''.strip())
offs = 0
-for (name, _) in sorted(entries, key=lambda e: e[0].lower()):
+for (name, _) in entries_isorted:
entry_offsets[name] = offs
print(' "{name}\\0"'.format(name=name))
offs += len(name) + 1
@@ -35,6 +40,35 @@ print('''
#endif
'''.strip())
+
+template = r'''
+static const uint16_t keysym_name_G[] = {
+ $G
+};
+
+static size_t
+keysym_name_hash_f(const char *key, const char *T)
+{
+ size_t sum = 0;
+ for (size_t i = 0; key[i] != '\0'; i++)
+ sum += T[i % $NS] * key[i];
+ return sum % $NG;
+}
+
+static size_t
+keysym_name_perfect_hash(const char *key)
+{
+ return (
+ keysym_name_G[keysym_name_hash_f(key, "$S1")] +
+ keysym_name_G[keysym_name_hash_f(key, "$S2")]
+ ) % $NG;
+}
+'''
+print(perfect_hash.generate_code(
+ keys=[name for name, value in entries_isorted],
+ template=template,
+))
+
print('''
struct name_keysym {
xkb_keysym_t keysym;
@@ -46,10 +80,10 @@ def print_entries(x):
print(' {{ 0x{value:08x}, {offs} }}, /* {name} */'.format(offs=entry_offsets[name], value=value, name=name))
print('static const struct name_keysym name_to_keysym[] = {')
-print_entries(sorted(entries, key=lambda e: e[0].lower()))
+print_entries(entries_isorted)
print('};\n')
# *.sort() is stable so we always get the first keysym for duplicate
print('static const struct name_keysym keysym_to_name[] = {')
-print_entries(next(g[1]) for g in itertools.groupby(sorted(entries, key=lambda e: e[1]), key=lambda e: e[1]))
+print_entries(next(g[1]) for g in itertools.groupby(entries_kssorted, key=lambda e: e[1]))
print('};')
diff --git a/scripts/map-to-def b/scripts/map-to-def
new file mode 100755
index 0000000..63b566e
--- /dev/null
+++ b/scripts/map-to-def
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+
+"""A script to generate MSVC Module-Definition files from version-script
+files (which are maintained manually)."""
+
+import re
+import sys
+import pathlib
+
+
+def symbols_from_map(path):
+ return re.findall(r'^\s+(r?xkb_.*);', path.read_text('utf-8'), re.MULTILINE)
+
+
+if 2 > len(sys.argv) > 3:
+ raise SystemExit("Usage: {} file.map [file.def]".format(sys.argv[0]))
+
+
+map_file = pathlib.Path(sys.argv[1])
+map_symbols = set(symbols_from_map(map_file))
+
+if len(sys.argv) == 3:
+ def_file = open(sys.argv[2], "w", encoding="utf-8")
+else:
+ def_file = sys.stdout
+
+def_file.write("LIBRARY {}\n".format(map_file.stem))
+def_file.write("EXPORTS\n")
+for symbol in sorted(map_symbols):
+ def_file.write("\t{}\n".format(symbol))
diff --git a/scripts/meson-junit-report.py b/scripts/meson-junit-report.py
deleted file mode 100644
index a6cbb0b..0000000
--- a/scripts/meson-junit-report.py
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/env python3
-
-import argparse
-import json
-import sys
-import unicodedata
-import xml.etree.ElementTree as ET
-from datetime import datetime
-
-
-aparser = argparse.ArgumentParser(
- description='Convert Meson test log into JUnit report')
-aparser.add_argument('--project-name', metavar='NAME',
- help='The project name',
- default='unknown')
-aparser.add_argument('--job-id', metavar='ID',
- help='The job ID for the report',
- default='Unknown')
-aparser.add_argument('--branch', metavar='NAME',
- help='Branch of the project being tested',
- default='master')
-aparser.add_argument('--output', metavar='FILE',
- help='The output file, stdout by default',
- type=argparse.FileType('w', encoding='UTF-8'),
- default=sys.stdout)
-aparser.add_argument('infile', metavar='FILE',
- help='The input testlog.json, stdin by default',
- type=argparse.FileType('r', encoding='UTF-8'),
- default=sys.stdin)
-args = aparser.parse_args()
-
-outfile = args.output
-
-testsuites = ET.Element('testsuites')
-testsuites.set('id', '{}/{}'.format(args.job_id, args.branch))
-testsuites.set('package', args.project_name)
-testsuites.set('timestamp', datetime.utcnow().isoformat(timespec='minutes'))
-
-testsuite = ET.SubElement(testsuites, 'testsuite')
-testsuite.set('name', args.project_name)
-
-successes = 0
-failures = 0
-skips = 0
-
-
-def escape_control_chars(text):
- return "".join(c if unicodedata.category(c)[0] != "C" else
- "<{:02x}>".format(ord(c)) for c in text)
-
-
-for line in args.infile:
- unit = json.loads(line)
-
- testcase = ET.SubElement(testsuite, 'testcase')
- testcase.set('classname', '{}/{}'.format(args.project_name, unit['name']))
- testcase.set('name', unit['name'])
- testcase.set('time', str(unit['duration']))
-
- stdout = escape_control_chars(unit.get('stdout', ''))
- stderr = escape_control_chars(unit.get('stderr', ''))
- if stdout:
- ET.SubElement(testcase, 'system-out').text = stdout
- if stderr:
- ET.SubElement(testcase, 'system-out').text = stderr
-
- result = unit['result'].lower()
- if result == 'skip':
- skips += 1
- ET.SubElement(testcase, 'skipped')
- elif result == 'fail':
- failures += 1
- failure = ET.SubElement(testcase, 'failure')
- failure.set('message', "{} failed".format(unit['name']))
- failure.text = "### stdout\n{}\n### stderr\n{}\n".format(stdout,
- stderr)
- else:
- successes += 1
- assert unit['returncode'] == 0
-
-testsuite.set('tests', str(successes + failures + skips))
-testsuite.set('skipped', str(skips))
-testsuite.set('errors', str(failures))
-testsuite.set('failures', str(failures))
-
-print('{}: {} pass, {} fail, {} skip'.format(args.project_name,
- successes,
- failures,
- skips))
-
-output = ET.tostring(testsuites, encoding='unicode')
-outfile.write(output)
diff --git a/scripts/perfect_hash.py b/scripts/perfect_hash.py
new file mode 100644
index 0000000..95c6156
--- /dev/null
+++ b/scripts/perfect_hash.py
@@ -0,0 +1,674 @@
+# Derived from: https://github.com/ilanschnell/perfect-hash
+# Commit: 6b7dd80a525dbd4349ea2c69f04a9c96f3c2fd54
+
+# BSD 3-Clause License
+#
+# Copyright (c) 2019 - 2021, Ilan Schnell
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the Ilan Schnell nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL ILAN SCHNELL BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""
+Generate a minimal perfect hash function for the keys in a file,
+desired hash values may be specified within this file as well.
+A given code template is filled with parameters, such that the
+output is code which implements the hash function.
+Templates can easily be constructed for any programming language.
+
+The code is based on an a program A.M. Kuchling wrote:
+http://www.amk.ca/python/code/perfect-hash
+
+The algorithm the program uses is described in the paper
+'Optimal algorithms for minimal perfect hashing',
+Z. J. Czech, G. Havas and B.S. Majewski.
+http://citeseer.ist.psu.edu/122364.html
+
+The algorithm works like this:
+
+1. You have K keys, that you want to perfectly hash against some
+ desired hash values.
+
+2. Choose a number N larger than K. This is the number of
+ vertices in a graph G, and also the size of the resulting table G.
+
+3. Pick two random hash functions f1, f2, that return values from 0..N-1.
+
+4. Now, for all keys, you draw an edge between vertices f1(key) and f2(key)
+ of the graph G, and associate the desired hash value with that edge.
+
+5. If G is cyclic, go back to step 2.
+
+6. Assign values to each vertex such that, for each edge, you can add
+ the values for the two vertices and get the desired (hash) value
+ for that edge. This task is easy, because the graph is acyclic.
+ This is done by picking a vertex, and assigning it a value of 0.
+ Then do a depth-first search, assigning values to new vertices so that
+ they sum up properly.
+
+7. f1, f2, and vertex values of G now make up a perfect hash function.
+
+
+For simplicity, the implementation of the algorithm combines steps 5 and 6.
+That is, we check for loops in G and assign the vertex values in one procedure.
+If this procedure succeeds, G is acyclic and the vertex values are assigned.
+If the procedure fails, G is cyclic, and we go back to step 2, replacing G
+with a new graph, and thereby discarding the vertex values from the failed
+attempt.
+"""
+from __future__ import absolute_import, division, print_function
+
+import sys
+import random
+import string
+import subprocess
+import shutil
+import tempfile
+from collections import defaultdict
+from os.path import join
+
+if sys.version_info[0] == 2:
+ from cStringIO import StringIO
+else:
+ from io import StringIO
+
+
+__version__ = '0.4.2'
+
+
+verbose = False
+trials = 150
+
+
+class Graph(object):
+ """
+ Implements a graph with 'N' vertices. First, you connect the graph with
+ edges, which have a desired value associated. Then the vertex values
+ are assigned, which will fail if the graph is cyclic. The vertex values
+ are assigned such that the two values corresponding to an edge add up to
+ the desired edge value (mod N).
+ """
+ def __init__(self, N):
+ self.N = N # number of vertices
+
+ # maps a vertex number to the list of tuples (vertex, edge value)
+ # to which it is connected by edges.
+ self.adjacent = defaultdict(list)
+
+ def connect(self, vertex1, vertex2, edge_value):
+ """
+ Connect 'vertex1' and 'vertex2' with an edge, with associated
+ value 'value'
+ """
+ # Add vertices to each other's adjacent list
+ self.adjacent[vertex1].append((vertex2, edge_value))
+ self.adjacent[vertex2].append((vertex1, edge_value))
+
+ def assign_vertex_values(self):
+ """
+ Try to assign the vertex values, such that, for each edge, you can
+ add the values for the two vertices involved and get the desired
+ value for that edge, i.e. the desired hash key.
+ This will fail when the graph is cyclic.
+
+ This is done by a Depth-First Search of the graph. If the search
+ finds a vertex that was visited before, there's a loop and False is
+ returned immediately, i.e. the assignment is terminated.
+ On success (when the graph is acyclic) True is returned.
+ """
+ self.vertex_values = self.N * [-1] # -1 means unassigned
+
+ visited = self.N * [False]
+
+ # Loop over all vertices, taking unvisited ones as roots.
+ for root in range(self.N):
+ if visited[root]:
+ continue
+
+ # explore tree starting at 'root'
+ self.vertex_values[root] = 0 # set arbitrarily to zero
+
+ # Stack of vertices to visit, a list of tuples (parent, vertex)
+ tovisit = [(None, root)]
+ while tovisit:
+ parent, vertex = tovisit.pop()
+ visited[vertex] = True
+
+ # Loop over adjacent vertices, but skip the vertex we arrived
+ # here from the first time it is encountered.
+ skip = True
+ for neighbor, edge_value in self.adjacent[vertex]:
+ if skip and neighbor == parent:
+ skip = False
+ continue
+
+ if visited[neighbor]:
+ # We visited here before, so the graph is cyclic.
+ return False
+
+ tovisit.append((vertex, neighbor))
+
+ # Set new vertex's value to the desired edge value,
+ # minus the value of the vertex we came here from.
+ self.vertex_values[neighbor] = (
+ edge_value - self.vertex_values[vertex]) % self.N
+
+ # check if all vertices have a valid value
+ for vertex in range(self.N):
+ assert self.vertex_values[vertex] >= 0
+
+ # We got though, so the graph is acyclic,
+ # and all values are now assigned.
+ return True
+
+
+class StrSaltHash(object):
+ """
+ Random hash function generator.
+ Simple byte level hashing: each byte is multiplied to another byte from
+ a random string of characters, summed up, and finally modulo NG is
+ taken.
+ """
+ chars = string.ascii_letters + string.digits
+
+ def __init__(self, N):
+ self.N = N
+ self.salt = ''
+
+ def __call__(self, key):
+ # XXX: xkbcommon modification: make the salt length a power of 2
+ # so that the % operation in the hash is fast.
+ while len(self.salt) < max(len(key), 32): # add more salt as necessary
+ self.salt += random.choice(self.chars)
+
+ return sum(ord(self.salt[i]) * ord(c)
+ for i, c in enumerate(key)) % self.N
+
+ template = """
+def hash_f(key, T):
+ return sum(ord(T[i % $NS]) * ord(c) for i, c in enumerate(key)) % $NG
+
+def perfect_hash(key):
+ return (G[hash_f(key, "$S1")] +
+ G[hash_f(key, "$S2")]) % $NG
+"""
+
+class IntSaltHash(object):
+ """
+ Random hash function generator.
+ Simple byte level hashing, each byte is multiplied in sequence to a table
+ containing random numbers, summed tp, and finally modulo NG is taken.
+ """
+ def __init__(self, N):
+ self.N = N
+ self.salt = []
+
+ def __call__(self, key):
+ while len(self.salt) < len(key): # add more salt as necessary
+ self.salt.append(random.randint(1, self.N - 1))
+
+ return sum(self.salt[i] * ord(c)
+ for i, c in enumerate(key)) % self.N
+
+ template = """
+S1 = [$S1]
+S2 = [$S2]
+assert len(S1) == len(S2) == $NS
+
+def hash_f(key, T):
+ return sum(T[i % $NS] * ord(c) for i, c in enumerate(key)) % $NG
+
+def perfect_hash(key):
+ return (G[hash_f(key, S1)] + G[hash_f(key, S2)]) % $NG
+"""
+
+def builtin_template(Hash):
+ return """\
+# =======================================================================
+# ================= Python code for perfect hash function ===============
+# =======================================================================
+
+G = [$G]
+""" + Hash.template + """
+# ============================ Sanity check =============================
+
+K = [$K]
+assert len(K) == $NK
+
+for h, k in enumerate(K):
+ assert perfect_hash(k) == h
+"""
+
+
+class TooManyInterationsError(Exception):
+ pass
+
+
+def generate_hash(keys, Hash=StrSaltHash):
+ """
+ Return hash functions f1 and f2, and G for a perfect minimal hash.
+ Input is an iterable of 'keys', whos indicies are the desired hash values.
+ 'Hash' is a random hash function generator, that means Hash(N) returns a
+ returns a random hash function which returns hash values from 0..N-1.
+ """
+ if not isinstance(keys, (list, tuple)):
+ raise TypeError("list or tuple expected")
+ NK = len(keys)
+ if NK != len(set(keys)):
+ raise ValueError("duplicate keys")
+ for key in keys:
+ if not isinstance(key, str):
+ raise TypeError("key a not string: %r" % key)
+ if NK > 10000 and Hash == StrSaltHash:
+ print("""\
+WARNING: You have %d keys.
+ Using --hft=1 is likely to fail for so many keys.
+ Please use --hft=2 instead.
+""" % NK)
+
+ # the number of vertices in the graph G
+ NG = NK + 1
+ if verbose:
+ print('NG = %d' % NG)
+
+ trial = 0 # Number of trial graphs so far
+ while True:
+ if (trial % trials) == 0: # trials failures, increase NG slightly
+ if trial > 0:
+ NG = max(NG + 1, int(1.05 * NG))
+ if verbose:
+ sys.stdout.write('\nGenerating graphs NG = %d ' % NG)
+ trial += 1
+
+ if NG > 100 * (NK + 1):
+ raise TooManyInterationsError("%d keys" % NK)
+
+ if verbose:
+ sys.stdout.write('.')
+ sys.stdout.flush()
+
+ G = Graph(NG) # Create graph with NG vertices
+ f1 = Hash(NG) # Create 2 random hash functions
+ f2 = Hash(NG)
+
+ # Connect vertices given by the values of the two hash functions
+ # for each key. Associate the desired hash value with each edge.
+ for hashval, key in enumerate(keys):
+ G.connect(f1(key), f2(key), hashval)
+
+ # Try to assign the vertex values. This will fail when the graph
+ # is cyclic. But when the graph is acyclic it will succeed and we
+ # break out, because we're done.
+ if G.assign_vertex_values():
+ break
+
+ if verbose:
+ print('\nAcyclic graph found after %d trials.' % trial)
+ print('NG = %d' % NG)
+
+ # Sanity check the result by actually verifying that all the keys
+ # hash to the right value.
+ for hashval, key in enumerate(keys):
+ assert hashval == (
+ G.vertex_values[f1(key)] + G.vertex_values[f2(key)]
+ ) % NG
+
+ if verbose:
+ print('OK')
+
+ return f1, f2, G.vertex_values
+
+
+class Format(object):
+
+ def __init__(self, width=76, indent=4, delimiter=', '):
+ self.width = width
+ self.indent = indent
+ self.delimiter = delimiter
+
+ def print_format(self):
+ print("Format options:")
+ for name in 'width', 'indent', 'delimiter':
+ print(' %s: %r' % (name, getattr(self, name)))
+
+ def __call__(self, data, quote=False):
+ if not isinstance(data, (list, tuple)):
+ return str(data)
+
+ lendel = len(self.delimiter)
+ aux = StringIO()
+ pos = 20
+ for i, elt in enumerate(data):
+ last = bool(i == len(data) - 1)
+
+ s = ('"%s"' if quote else '%s') % elt
+
+ if pos + len(s) + lendel > self.width:
+ aux.write('\n' + (self.indent * ' '))
+ pos = self.indent
+
+ aux.write(s)
+ pos += len(s)
+ if not last:
+ aux.write(self.delimiter)
+ pos += lendel
+
+ return '\n'.join(l.rstrip() for l in aux.getvalue().split('\n'))
+
+
+def generate_code(keys, Hash=StrSaltHash, template=None, options=None):
+ """
+ Takes a list of key value pairs and inserts the generated parameter
+ lists into the 'template' string. 'Hash' is the random hash function
+ generator, and the optional keywords are formating options.
+ The return value is the substituted code template.
+ """
+ f1, f2, G = generate_hash(keys, Hash)
+
+ assert f1.N == f2.N == len(G)
+ try:
+ salt_len = len(f1.salt)
+ assert salt_len == len(f2.salt)
+ except TypeError:
+ salt_len = None
+
+ if template is None:
+ template = builtin_template(Hash)
+
+ if options is None:
+ fmt = Format()
+ else:
+ fmt = Format(width=options.width, indent=options.indent,
+ delimiter=options.delimiter)
+
+ if verbose:
+ fmt.print_format()
+
+ return string.Template(template).substitute(
+ NS = salt_len,
+ S1 = fmt(f1.salt),
+ S2 = fmt(f2.salt),
+ NG = len(G),
+ G = fmt(G),
+ NK = len(keys),
+ K = fmt(list(keys), quote=True))
+
+
+def read_table(filename, options):
+ """
+ Reads keys and desired hash value pairs from a file. If no column
+ for the hash value is specified, a sequence of hash values is generated,
+ from 0 to N-1, where N is the number of rows found in the file.
+ """
+ if verbose:
+ print("Reading table from file `%s' to extract keys." % filename)
+ try:
+ fi = open(filename)
+ except IOError:
+ sys.exit("Error: Could not open `%s' for reading." % filename)
+
+ keys = []
+
+ if verbose:
+ print("Reader options:")
+ for name in 'comment', 'splitby', 'keycol':
+ print(' %s: %r' % (name, getattr(options, name)))
+
+ for n, line in enumerate(fi):
+ line = line.strip()
+ if not line or line.startswith(options.comment):
+ continue
+
+ if line.count(options.comment): # strip content after comment
+ line = line.split(options.comment)[0].strip()
+
+ row = [col.strip() for col in line.split(options.splitby)]
+
+ try:
+ key = row[options.keycol - 1]
+ except IndexError:
+ sys.exit("%s:%d: Error: Cannot read key, not enough columns." %
+ (filename, n + 1))
+
+ keys.append(key)
+
+ fi.close()
+
+ if not keys:
+ exit("Error: no keys found in file `%s'." % filename)
+
+ return keys
+
+
+def read_template(filename):
+ if verbose:
+ print("Reading template from file `%s'" % filename)
+ try:
+ with open(filename, 'r') as fi:
+ return fi.read()
+ except IOError:
+ sys.exit("Error: Could not open `%s' for reading." % filename)
+
+
+def run_code(code):
+ tmpdir = tempfile.mkdtemp()
+ path = join(tmpdir, 't.py')
+ with open(path, 'w') as fo:
+ fo.write(code)
+ try:
+ subprocess.check_call([sys.executable, path])
+ except subprocess.CalledProcessError as e:
+ raise AssertionError(e)
+ finally:
+ shutil.rmtree(tmpdir)
+
+
+def main():
+ from optparse import OptionParser
+
+ usage = "usage: %prog [options] KEYS_FILE [TMPL_FILE]"
+
+ description = """\
+Generates code for perfect hash functions from
+a file with keywords and a code template.
+If no template file is provided, a small built-in Python template
+is processed and the output code is written to stdout.
+"""
+
+ parser = OptionParser(usage = usage,
+ description = description,
+ prog = sys.argv[0],
+ version = "%prog: " + __version__)
+
+ parser.add_option("--delimiter",
+ action = "store",
+ default = ", ",
+ help = "Delimiter for list items used in output, "
+ "the default delimiter is '%default'",
+ metavar = "STR")
+
+ parser.add_option("--indent",
+ action = "store",
+ default = 4,
+ type = "int",
+ help = "Make INT spaces at the beginning of a "
+ "new line when generated list is wrapped. "
+ "Default is %default",
+ metavar = "INT")
+
+ parser.add_option("--width",
+ action = "store",
+ default = 76,
+ type = "int",
+ help = "Maximal width of generated list when "
+ "wrapped. Default width is %default",
+ metavar = "INT")
+
+ parser.add_option("--comment",
+ action = "store",
+ default = "#",
+ help = "STR is the character, or sequence of "
+ "characters, which marks the beginning "
+ "of a comment (which runs till "
+ "the end of the line), in the input "
+ "KEYS_FILE. "
+ "Default is '%default'",
+ metavar = "STR")
+
+ parser.add_option("--splitby",
+ action = "store",
+ default = ",",
+ help = "STR is the character by which the columns "
+ "in the input KEYS_FILE are split. "
+ "Default is '%default'",
+ metavar = "STR")
+
+ parser.add_option("--keycol",
+ action = "store",
+ default = 1,
+ type = "int",
+ help = "Specifies the column INT in the input "
+ "KEYS_FILE which contains the keys. "
+ "Default is %default, i.e. the first column.",
+ metavar = "INT")
+
+ parser.add_option("--trials",
+ action = "store",
+ default = 5,
+ type = "int",
+ help = "Specifies the number of trials before "
+ "NG is increased. A small INT will give "
+ "compute faster, but the array G will be "
+ "large. A large INT will take longer to "
+ "compute but G will be smaller. "
+ "Default is %default",
+ metavar = "INT")
+
+ parser.add_option("--hft",
+ action = "store",
+ default = 1,
+ type = "int",
+ help = "Hash function type INT. Possible values "
+ "are 1 (StrSaltHash) and 2 (IntSaltHash). "
+ "The default is %default",
+ metavar = "INT")
+
+ parser.add_option("-e", "--execute",
+ action = "store_true",
+ help = "Execute the generated code within "
+ "the Python interpreter.")
+
+ parser.add_option("-o", "--output",
+ action = "store",
+ help = "Specify output FILE explicitly. "
+ "`-o std' means standard output. "
+ "`-o no' means no output. "
+ "By default, the file name is obtained "
+ "from the name of the template file by "
+ "substituting `tmpl' to `code'.",
+ metavar = "FILE")
+
+ parser.add_option("-v", "--verbose",
+ action = "store_true",
+ help = "verbosity")
+
+ options, args = parser.parse_args()
+
+ if options.trials <= 0:
+ parser.error("trials before increasing N has to be larger than zero")
+
+ global trials
+ trials = options.trials
+
+ global verbose
+ verbose = options.verbose
+
+ if len(args) not in (1, 2):
+ parser.error("incorrect number of arguments")
+
+ if len(args) == 2 and not args[1].count('tmpl'):
+ parser.error("template filename does not contain 'tmpl'")
+
+ if options.hft == 1:
+ Hash = StrSaltHash
+ elif options.hft == 2:
+ Hash = IntSaltHash
+ else:
+ parser.error("Hash function %s not implemented." % options.hft)
+
+ # --------------------- end parsing and checking --------------
+
+ keys_file = args[0]
+
+ if verbose:
+ print("keys_file = %r" % keys_file)
+
+ keys = read_table(keys_file, options)
+
+ if verbose:
+ print("Number os keys: %d" % len(keys))
+
+ tmpl_file = args[1] if len(args) == 2 else None
+
+ if verbose:
+ print("tmpl_file = %r" % tmpl_file)
+
+ template = read_template(tmpl_file) if tmpl_file else None
+
+ if options.output:
+ outname = options.output
+ else:
+ if tmpl_file:
+ if 'tmpl' not in tmpl_file:
+ sys.exit("Hmm, template filename does not contain 'tmpl'")
+ outname = tmpl_file.replace('tmpl', 'code')
+ else:
+ outname = 'std'
+
+ if verbose:
+ print("outname = %r\n" % outname)
+
+ if outname == 'std':
+ outstream = sys.stdout
+ elif outname == 'no':
+ outstream = None
+ else:
+ try:
+ outstream = open(outname, 'w')
+ except IOError:
+ sys.exit("Error: Could not open `%s' for writing." % outname)
+
+ code = generate_code(keys, Hash, template, options)
+
+ if options.execute or template == builtin_template(Hash):
+ if verbose:
+ print('Executing code...\n')
+ run_code(code)
+
+ if outstream:
+ outstream.write(code)
+ if not outname == 'std':
+ outstream.close()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/scripts/update-keysyms b/scripts/update-keysyms
index 3356a35..5410474 100755
--- a/scripts/update-keysyms
+++ b/scripts/update-keysyms
@@ -2,5 +2,5 @@
# Run this to regenerate xkbcommon-keysyms.h from the X11 headers
# defining the keysyms and update the name <-> keysym mapping.
export LC_CTYPE=C
-scripts/makeheader > xkbcommon/xkbcommon-keysyms.h
-scripts/makekeys xkbcommon/xkbcommon-keysyms.h > src/ks_tables.h
+scripts/makeheader > include/xkbcommon/xkbcommon-keysyms.h
+scripts/makekeys include/xkbcommon/xkbcommon-keysyms.h > src/ks_tables.h
diff --git a/src/atom.c b/src/atom.c
index 180b25f..763bff5 100644
--- a/src/atom.c
+++ b/src/atom.c
@@ -72,8 +72,14 @@
#include "config.h"
-#include "utils.h"
+#include <assert.h>
+#include <inttypes.h>
+#include <stdbool.h>
+#include <string.h>
+
#include "atom.h"
+#include "darray.h"
+#include "utils.h"
/* FNV-1a (http://www.isthe.com/chongo/tech/comp/fnv/). */
static inline uint32_t
@@ -90,31 +96,14 @@ hash_buf(const char *string, size_t len)
}
/*
- * The atom table is a insert-only unbalanced binary search tree
- * mapping strings to atoms.
- *
- * The tree nodes are kept contiguously in the `table` array.
- *
- * The atom value is the index of the tree node in the array.
- *
- * As an optimization, strings are not compared by value directly,
- * s1 < s2
- * instead, they are compared by fingerprint (hash) and the value
- * is only used to resolve collisions:
- * (fingerprint(s1), s1) < (fingerprint(s2), s2)
- * Fingerprint are pre-calculated and saved in the tree nodes.
- *
- * Why is this not just a hash table? Who knows!
+ * The atom table is an insert-only linear probing hash table
+ * mapping strings to atoms. Another array maps the atoms to
+ * strings. The atom value is the position in the strings array.
*/
-struct atom_node {
- xkb_atom_t left, right;
- uint32_t fingerprint;
- char *string;
-};
-
struct atom_table {
- xkb_atom_t root;
- darray(struct atom_node) table;
+ xkb_atom_t *index;
+ size_t index_size;
+ darray(char *) strings;
};
struct atom_table *
@@ -124,9 +113,10 @@ atom_table_new(void)
if (!table)
return NULL;
- darray_init(table->table);
- /* The original throw-away root is here, at the illegal atom 0. */
- darray_resize0(table->table, 1);
+ darray_init(table->strings);
+ darray_append(table->strings, NULL);
+ table->index_size = 4;
+ table->index = calloc(table->index_size, sizeof(*table->index));
return table;
}
@@ -137,61 +127,68 @@ atom_table_free(struct atom_table *table)
if (!table)
return;
- struct atom_node *node;
- darray_foreach(node, table->table)
- free(node->string);
- darray_free(table->table);
+ char **string;
+ darray_foreach(string, table->strings)
+ free(*string);
+ darray_free(table->strings);
+ free(table->index);
free(table);
}
const char *
atom_text(struct atom_table *table, xkb_atom_t atom)
{
- assert(atom < darray_size(table->table));
- return darray_item(table->table, atom).string;
+ assert(atom < darray_size(table->strings));
+ return darray_item(table->strings, atom);
}
xkb_atom_t
atom_intern(struct atom_table *table, const char *string, size_t len, bool add)
{
- uint32_t fingerprint = hash_buf(string, len);
-
- xkb_atom_t *atomp = &table->root;
- while (*atomp != XKB_ATOM_NONE) {
- struct atom_node *node = &darray_item(table->table, *atomp);
-
- if (fingerprint > node->fingerprint) {
- atomp = &node->right;
- }
- else if (fingerprint < node->fingerprint) {
- atomp = &node->left;
- }
- else {
- /* Now start testing the strings. */
- const int cmp = strncmp(string, node->string, len);
- if (likely(cmp == 0 && node->string[len] == '\0')) {
- return *atomp;
- }
- else if (cmp > 0) {
- atomp = &node->right;
+ if (darray_size(table->strings) > 0.80 * table->index_size) {
+ table->index_size *= 2;
+ table->index = realloc(table->index, table->index_size * sizeof(*table->index));
+ memset(table->index, 0, table->index_size * sizeof(*table->index));
+ for (size_t j = 1; j < darray_size(table->strings); j++) {
+ const char *s = darray_item(table->strings, j);
+ uint32_t hash = hash_buf(s, strlen(s));
+ for (size_t i = 0; i < table->index_size; i++) {
+ size_t index_pos = (hash + i) & (table->index_size - 1);
+ if (index_pos == 0)
+ continue;
+
+ xkb_atom_t atom = table->index[index_pos];
+ if (atom == XKB_ATOM_NONE) {
+ table->index[index_pos] = j;
+ break;
+ }
}
- else {
- atomp = &node->left;
+ }
+ }
+
+ uint32_t hash = hash_buf(string, len);
+ for (size_t i = 0; i < table->index_size; i++) {
+ size_t index_pos = (hash + i) & (table->index_size - 1);
+ if (index_pos == 0)
+ continue;
+
+ xkb_atom_t existing_atom = table->index[index_pos];
+ if (existing_atom == XKB_ATOM_NONE) {
+ if (add) {
+ xkb_atom_t new_atom = darray_size(table->strings);
+ darray_append(table->strings, strndup(string, len));
+ table->index[index_pos] = new_atom;
+ return new_atom;
+ } else {
+ return XKB_ATOM_NONE;
}
}
+
+ const char *existing_value = darray_item(table->strings, existing_atom);
+ if (strncmp(existing_value, string, len) == 0 && existing_value[len] == '\0')
+ return existing_atom;
}
- if (!add)
- return XKB_ATOM_NONE;
-
- struct atom_node node;
- node.string = strndup(string, len);
- assert(node.string != NULL);
- node.left = node.right = XKB_ATOM_NONE;
- node.fingerprint = fingerprint;
- xkb_atom_t atom = darray_size(table->table);
- /* Do this before the append, as it may realloc and change the offsets. */
- *atomp = atom;
- darray_append(table->table, node);
- return atom;
+ assert(!"couldn't find an empty slot during probing");
+ return XKB_ATOM_NONE;
}
diff --git a/src/compose/parser.c b/src/compose/parser.c
index 0f85a92..08018f2 100644
--- a/src/compose/parser.c
+++ b/src/compose/parser.c
@@ -327,109 +327,108 @@ struct production {
xkb_mod_mask_t mods;
};
-static uint32_t
-add_node(struct xkb_compose_table *table, xkb_keysym_t keysym)
-{
- struct compose_node new = {
- .keysym = keysym,
- .next = 0,
- .is_leaf = true,
- };
- darray_append(table->nodes, new);
- return darray_size(table->nodes) - 1;
-}
-
static void
add_production(struct xkb_compose_table *table, struct scanner *s,
const struct production *production)
{
- unsigned lhs_pos;
- uint32_t curr;
- struct compose_node *node;
-
- curr = 0;
- node = &darray_item(table->nodes, curr);
+ unsigned lhs_pos = 0;
+ uint16_t curr = darray_size(table->nodes) == 1 ? 0 : 1;
+ uint16_t *pptr = NULL;
+ struct compose_node *node = NULL;
+
+ /* Warn before potentially going over the limit, discard silently after. */
+ if (darray_size(table->nodes) + production->len + MAX_LHS_LEN > MAX_COMPOSE_NODES)
+ scanner_warn(s, "too many sequences for one Compose file; will ignore further lines");
+ if (darray_size(table->nodes) + production->len >= MAX_COMPOSE_NODES)
+ return;
/*
- * Insert the sequence to the trie, creating new nodes as needed.
+ * Insert the sequence to the ternary search tree, creating new nodes as
+ * needed.
*
- * TODO: This can be sped up a bit by first trying the path that the
- * previous production took, and only then doing the linear search
- * through the trie levels. This will work because sequences in the
- * Compose files are often clustered by a common prefix; especially
- * in the 1st and 2nd keysyms, which is where the largest variation
- * (thus, longest search) is.
+ * TODO: We insert in the order given, this means some inputs can create
+ * long O(n) chains, which results in total O(n^2) parsing time. We should
+ * ensure the tree is reasonably balanced somehow.
*/
- for (lhs_pos = 0; lhs_pos < production->len; lhs_pos++) {
- while (production->lhs[lhs_pos] != node->keysym) {
- if (node->next == 0) {
- uint32_t next = add_node(table, production->lhs[lhs_pos]);
- /* Refetch since add_node could have realloc()ed. */
- node = &darray_item(table->nodes, curr);
- node->next = next;
+ while (true) {
+ const xkb_keysym_t keysym = production->lhs[lhs_pos];
+ const bool last = lhs_pos + 1 == production->len;
+
+ if (curr == 0) {
+ /*
+ * Create a new node and update the parent pointer to it.
+ * Update the pointer first because the append invalidates it.
+ */
+ struct compose_node new = {
+ .keysym = keysym,
+ .lokid = 0,
+ .hikid = 0,
+ .internal = {
+ .eqkid = 0,
+ .is_leaf = false,
+ },
+ };
+ curr = darray_size(table->nodes);
+ if (pptr != NULL) {
+ *pptr = curr;
+ pptr = NULL;
}
-
- curr = node->next;
- node = &darray_item(table->nodes, curr);
+ darray_append(table->nodes, new);
}
- if (lhs_pos + 1 == production->len)
- break;
+ node = &darray_item(table->nodes, curr);
- if (node->is_leaf) {
- if (node->u.leaf.utf8 != 0 ||
- node->u.leaf.keysym != XKB_KEY_NoSymbol) {
+ if (keysym < node->keysym) {
+ pptr = &node->lokid;
+ curr = node->lokid;
+ } else if (keysym > node->keysym) {
+ pptr = &node->hikid;
+ curr = node->hikid;
+ } else if (!last) {
+ if (node->is_leaf) {
scanner_warn(s, "a sequence already exists which is a prefix of this sequence; overriding");
- node->u.leaf.utf8 = 0;
- node->u.leaf.keysym = XKB_KEY_NoSymbol;
+ node->internal.eqkid = node->lokid = node->hikid = 0;
+ node->internal.is_leaf = false;
}
-
- {
- uint32_t successor = add_node(table, production->lhs[lhs_pos + 1]);
- /* Refetch since add_node could have realloc()ed. */
- node = &darray_item(table->nodes, curr);
- node->is_leaf = false;
- node->u.successor = successor;
+ lhs_pos++;
+ pptr = &node->internal.eqkid;
+ curr = node->internal.eqkid;
+ } else {
+ if (node->is_leaf) {
+ bool same_string =
+ (node->leaf.utf8 == 0 && !production->has_string) ||
+ (
+ node->leaf.utf8 != 0 && production->has_string &&
+ streq(&darray_item(table->utf8, node->leaf.utf8),
+ production->string)
+ );
+ bool same_keysym =
+ (node->leaf.keysym == XKB_KEY_NoSymbol && !production->has_keysym) ||
+ (
+ node->leaf.keysym != XKB_KEY_NoSymbol && production->has_keysym &&
+ node->leaf.keysym == production->keysym
+ );
+ if (same_string && same_keysym) {
+ scanner_warn(s, "this compose sequence is a duplicate of another; skipping line");
+ return;
+ } else {
+ scanner_warn(s, "this compose sequence already exists; overriding");
+ }
+ } else if (node->internal.eqkid != 0) {
+ scanner_warn(s, "this compose sequence is a prefix of another; skipping line");
+ return;
+ }
+ node->is_leaf = true;
+ if (production->has_string) {
+ node->leaf.utf8 = darray_size(table->utf8);
+ darray_append_items(table->utf8, production->string,
+ strlen(production->string) + 1);
+ }
+ if (production->has_keysym) {
+ node->leaf.keysym = production->keysym;
}
- }
-
- curr = node->u.successor;
- node = &darray_item(table->nodes, curr);
- }
-
- if (!node->is_leaf) {
- scanner_warn(s, "this compose sequence is a prefix of another; skipping line");
- return;
- }
-
- if (node->u.leaf.utf8 != 0 || node->u.leaf.keysym != XKB_KEY_NoSymbol) {
- bool same_string =
- (node->u.leaf.utf8 == 0 && !production->has_string) ||
- (
- node->u.leaf.utf8 != 0 && production->has_string &&
- streq(&darray_item(table->utf8, node->u.leaf.utf8),
- production->string)
- );
- bool same_keysym =
- (node->u.leaf.keysym == XKB_KEY_NoSymbol && !production->has_keysym) ||
- (
- node->u.leaf.keysym != XKB_KEY_NoSymbol && production->has_keysym &&
- node->u.leaf.keysym == production->keysym
- );
- if (same_string && same_keysym) {
- scanner_warn(s, "this compose sequence is a duplicate of another; skipping line");
return;
}
- scanner_warn(s, "this compose sequence already exists; overriding");
- }
-
- if (production->has_string) {
- node->u.leaf.utf8 = darray_size(table->utf8);
- darray_append_items(table->utf8, production->string,
- strlen(production->string) + 1);
- }
- if (production->has_keysym) {
- node->u.leaf.keysym = production->keysym;
}
}
diff --git a/src/compose/state.c b/src/compose/state.c
index 9c64eb4..6ba0344 100644
--- a/src/compose/state.c
+++ b/src/compose/state.c
@@ -41,8 +41,8 @@ struct xkb_compose_state {
* This is also sufficient for inferring the current status; see
* xkb_compose_state_get_status().
*/
- uint32_t prev_context;
- uint32_t context;
+ uint16_t prev_context;
+ uint16_t context;
};
XKB_EXPORT struct xkb_compose_state *
@@ -91,7 +91,7 @@ xkb_compose_state_get_compose_table(struct xkb_compose_state *state)
XKB_EXPORT enum xkb_compose_feed_result
xkb_compose_state_feed(struct xkb_compose_state *state, xkb_keysym_t keysym)
{
- uint32_t context;
+ uint16_t context;
const struct compose_node *node;
/*
@@ -109,17 +109,20 @@ xkb_compose_state_feed(struct xkb_compose_state *state, xkb_keysym_t keysym)
node = &darray_item(state->table->nodes, state->context);
- context = (node->is_leaf ? 0 : node->u.successor);
- node = &darray_item(state->table->nodes, context);
+ context = (node->is_leaf ? 1 : node->internal.eqkid);
+ if (context == 1 && darray_size(state->table->nodes) == 1)
+ context = 0;
- while (node->keysym != keysym && node->next != 0) {
- context = node->next;
+ while (context != 0) {
node = &darray_item(state->table->nodes, context);
+ if (keysym < node->keysym)
+ context = node->lokid;
+ else if (keysym > node->keysym)
+ context = node->hikid;
+ else
+ break;
}
- if (node->keysym != keysym)
- context = 0;
-
state->prev_context = state->context;
state->context = context;
return XKB_COMPOSE_FEED_ACCEPTED;
@@ -164,11 +167,11 @@ xkb_compose_state_get_utf8(struct xkb_compose_state *state,
/* If there's no string specified, but only a keysym, try to do the
* most helpful thing. */
- if (node->u.leaf.utf8 == 0 && node->u.leaf.keysym != XKB_KEY_NoSymbol) {
+ if (node->leaf.utf8 == 0 && node->leaf.keysym != XKB_KEY_NoSymbol) {
char name[64];
int ret;
- ret = xkb_keysym_to_utf8(node->u.leaf.keysym, name, sizeof(name));
+ ret = xkb_keysym_to_utf8(node->leaf.keysym, name, sizeof(name));
if (ret < 0 || ret == 0) {
/* ret < 0 is impossible.
* ret == 0 means the keysym has no string representation. */
@@ -179,7 +182,7 @@ xkb_compose_state_get_utf8(struct xkb_compose_state *state,
}
return snprintf(buffer, size, "%s",
- &darray_item(state->table->utf8, node->u.leaf.utf8));
+ &darray_item(state->table->utf8, node->leaf.utf8));
fail:
if (size > 0)
@@ -194,5 +197,5 @@ xkb_compose_state_get_one_sym(struct xkb_compose_state *state)
&darray_item(state->table->nodes, state->context);
if (!node->is_leaf)
return XKB_KEY_NoSymbol;
- return node->u.leaf.keysym;
+ return node->leaf.keysym;
}
diff --git a/src/compose/table.c b/src/compose/table.c
index 38d4406..8a8d11f 100644
--- a/src/compose/table.c
+++ b/src/compose/table.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013 Ran Benita <ran234@gmail.com>
+ * Copyright © 2013,2021 Ran Benita <ran234@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -36,7 +36,7 @@ xkb_compose_table_new(struct xkb_context *ctx,
{
char *resolved_locale;
struct xkb_compose_table *table;
- struct compose_node root;
+ struct compose_node dummy;
resolved_locale = resolve_locale(locale);
if (!resolved_locale)
@@ -58,12 +58,11 @@ xkb_compose_table_new(struct xkb_context *ctx,
darray_init(table->nodes);
darray_init(table->utf8);
- root.keysym = XKB_KEY_NoSymbol;
- root.next = 0;
- root.is_leaf = true;
- root.u.leaf.utf8 = 0;
- root.u.leaf.keysym = XKB_KEY_NoSymbol;
- darray_append(table->nodes, root);
+ dummy.keysym = XKB_KEY_NoSymbol;
+ dummy.leaf.is_leaf = true;
+ dummy.leaf.utf8 = 0;
+ dummy.leaf.keysym = XKB_KEY_NoSymbol;
+ darray_append(table->nodes, dummy);
darray_append(table->utf8, '\0');
@@ -207,7 +206,8 @@ xkb_compose_table_new_from_locale(struct xkb_context *ctx,
}
free(path);
- log_err(ctx, "couldn't find a Compose file for locale \"%s\"\n", locale);
+ log_err(ctx, "couldn't find a Compose file for locale \"%s\" (mapped to \"%s\")\n",
+ locale, table->locale);
xkb_compose_table_unref(table);
return NULL;
diff --git a/src/compose/table.h b/src/compose/table.h
index 05a415f..6be4348 100644
--- a/src/compose/table.h
+++ b/src/compose/table.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013 Ran Benita <ran234@gmail.com>
+ * Copyright © 2013,2021 Ran Benita <ran234@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -29,36 +29,43 @@
#include "context.h"
/*
- * The compose table data structure is a simple trie. An example will
- * help. Given these sequences:
+ * The compose table data structure is a ternary search tree.
*
- * <A> <B> : "first" dead_a
- * <A> <C> <D> : "second" dead_b
- * <E> <F> : "third" dead_c
+ * Reference: https://www.drdobbs.com/database/ternary-search-trees/184410528
+ * Visualization: https://www.cs.usfca.edu/~galles/visualization/TST.html
*
- * the trie would look like:
+ * Short example. Given these sequences:
+ *
+ * <B> <C> : "first" dead_a
+ * <B> <D> <E> : "second" dead_b
+ * <A> <F> : "third" dead_c
+ *
+ * the tree would look like:
+ *
+ * -------- [<B>]---------
+ * | | #
+ * v V
+ * -- [<A>] -- [<C>] --------
+ * # | # | |
+ * v # -- [<D>] --
+ * -- [<F>] -- # | #
+ * # | # v
+ * # -- [<E>] --
+ * # | #
+ * #
*
- * [root] ---> [<A>] -----------------> [<E>] -#
- * | | |
- * # v v
- * [<B>] ---> [<C>] -# [<F>] -#
- * | | -
- * # v #
- * [<D>] -#
- * |
- * #
* where:
- * - [root] is a special empty root node.
* - [<X>] is a node for a sequence keysym <X>.
- * - right arrows are `next` pointers.
- * - down arrows are `successor` pointers.
+ * - right arrows are `hikid` pointers.
+ * - left arrows are `lokid` pointers.
+ * - down arrows are `eqkid` pointers.
* - # is a nil pointer.
*
* The nodes are all kept in a contiguous array. Pointers are represented
* as integer offsets into this array. A nil pointer is represented as 0
- * (which, helpfully, is the offset of the empty root node).
+ * (which, helpfully, is the offset of an empty dummy node).
*
- * Nodes without a successor are leaf nodes. Since a sequence cannot be a
+ * Nodes without an eqkid are leaf nodes. Since a sequence cannot be a
* prefix of another, these are exactly the nodes which terminate the
* sequences (in a bijective manner).
*
@@ -68,21 +75,35 @@
* \0 is so offset 0 points to an empty string).
*/
+/* Fits in uint16_t, also a good idea to have some limit. */
+#define MAX_COMPOSE_NODES 65535
+
struct compose_node {
xkb_keysym_t keysym;
- /* Offset into xkb_compose_table::nodes. */
- unsigned int next:31;
- bool is_leaf:1;
+
+ /* Offset into xkb_compose_table::nodes or 0. */
+ uint16_t lokid;
+ /* Offset into xkb_compose_table::nodes or 0. */
+ uint16_t hikid;
union {
- /* Offset into xkb_compose_table::nodes. */
- uint32_t successor;
+ struct {
+ uint32_t _pad:31;
+ bool is_leaf:1;
+ };
+ struct {
+ uint32_t _pad:31;
+ bool is_leaf:1;
+ /* Offset into xkb_compose_table::nodes or 0. */
+ uint16_t eqkid;
+ } internal;
struct {
/* Offset into xkb_compose_table::utf8. */
- uint32_t utf8;
+ uint32_t utf8:31;
+ bool is_leaf:1;
xkb_keysym_t keysym;
} leaf;
- } u;
+ };
};
struct xkb_compose_table {
diff --git a/src/keysym-utf.c b/src/keysym-utf.c
index a49944a..7769672 100644
--- a/src/keysym-utf.c
+++ b/src/keysym-utf.c
@@ -614,8 +614,8 @@ static const struct codepair keysymtab[] = {
{ 0x0bd6, 0x222a }, /* downshoe ∪ UNION */
{ 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */
{ 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */
- { 0x0bdc, 0x22a2 }, /* lefttack ⊢ RIGHT TACK */
- { 0x0bfc, 0x22a3 }, /* righttack ⊣ LEFT TACK */
+ { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */
+ { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */
{ 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */
{ 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */
{ 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */
@@ -810,7 +810,7 @@ static const struct codepair keysymtab[] = {
{ 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
{ 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
{ 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
-/* 0x0ef3 Hangul_KkogjiDalrinIeung ? ??? */
+ { 0x0ef3, 0x3181 }, /* Hangul_KkogjiDalrinIeung ㆁ HANGUL LETTER YESIEUNG */
{ 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
{ 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
{ 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
diff --git a/src/keysym.c b/src/keysym.c
index 7b492e2..bf49c63 100644
--- a/src/keysym.c
+++ b/src/keysym.c
@@ -61,42 +61,25 @@ get_name(const struct name_keysym *entry)
return keysym_names + entry->offset;
}
-static int
-compare_by_keysym(const void *a, const void *b)
-{
- const xkb_keysym_t *key = a;
- const struct name_keysym *entry = b;
- if (*key < entry->keysym)
- return -1;
- if (*key > entry->keysym)
- return 1;
- return 0;
-}
-
-static int
-compare_by_name(const void *a, const void *b)
-{
- const char *key = a;
- const struct name_keysym *entry = b;
- return istrcmp(key, get_name(entry));
-}
-
XKB_EXPORT int
xkb_keysym_get_name(xkb_keysym_t ks, char *buffer, size_t size)
{
- const struct name_keysym *entry;
-
if ((ks & ((unsigned long) ~0x1fffffff)) != 0) {
snprintf(buffer, size, "Invalid");
return -1;
}
- entry = bsearch(&ks, keysym_to_name,
- ARRAY_SIZE(keysym_to_name),
- sizeof(*keysym_to_name),
- compare_by_keysym);
- if (entry)
- return snprintf(buffer, size, "%s", get_name(entry));
+ int32_t lo = 0, hi = ARRAY_SIZE(keysym_to_name) - 1;
+ while (hi >= lo) {
+ int32_t mid = (lo + hi) / 2;
+ if (ks > keysym_to_name[mid].keysym) {
+ lo = mid + 1;
+ } else if (ks < keysym_to_name[mid].keysym) {
+ hi = mid - 1;
+ } else {
+ return snprintf(buffer, size, "%s", get_name(&keysym_to_name[mid]));
+ }
+ }
/* Unnamed Unicode codepoint. */
if (ks >= 0x01000100 && ks <= 0x0110ffff) {
@@ -109,108 +92,135 @@ xkb_keysym_get_name(xkb_keysym_t ks, char *buffer, size_t size)
}
/*
- * Find the correct keysym if one case-insensitive match is given.
- *
- * The name_to_keysym table is sorted by istrcmp(). So bsearch() may return
- * _any_ of all possible case-insensitive duplicates. This function searches the
- * returned entry @entry, all previous and all next entries that match by
- * case-insensitive comparison and returns the exact match to @name. If @icase
- * is true, then this returns the best case-insensitive match instead of a
- * correct match.
- * The "best" case-insensitive match is the lower-case keysym which we find with
- * the help of xkb_keysym_is_lower().
- * The only keysyms that only differ by letter-case are keysyms that are
- * available as lower-case and upper-case variant (like KEY_a and KEY_A). So
- * returning the first lower-case match is enough in this case.
+ * Parse the numeric part of a 0xXXXX and UXXXX keysym.
+ * Not using strtoul -- it's slower and accepts a bunch of stuff
+ * we don't want to allow, like signs, spaces, even locale stuff.
*/
-static const struct name_keysym *
-find_sym(const struct name_keysym *entry, const char *name, bool icase)
+static bool
+parse_keysym_hex(const char *s, uint32_t *out)
{
- const struct name_keysym *iter, *last;
- size_t len = ARRAY_SIZE(name_to_keysym);
-
- if (!entry)
- return NULL;
-
- if (!icase && strcmp(get_name(entry), name) == 0)
- return entry;
- if (icase && xkb_keysym_is_lower(entry->keysym))
- return entry;
-
- for (iter = entry - 1; iter >= name_to_keysym; --iter) {
- if (!icase && strcmp(get_name(iter), name) == 0)
- return iter;
- if (istrcmp(get_name(iter), get_name(entry)) != 0)
- break;
- if (icase && xkb_keysym_is_lower(iter->keysym))
- return iter;
+ uint32_t result = 0;
+ int i;
+ for (i = 0; i < 8 && s[i] != '\0'; i++) {
+ result <<= 4;
+ if ('0' <= s[i] && s[i] <= '9')
+ result += s[i] - '0';
+ else if ('a' <= s[i] && s[i] <= 'f')
+ result += 10 + s[i] - 'a';
+ else if ('A' <= s[i] && s[i] <= 'F')
+ result += 10 + s[i] - 'A';
+ else
+ return false;
}
-
- last = name_to_keysym + len;
- for (iter = entry + 1; iter < last; ++iter) {
- if (!icase && strcmp(get_name(iter), name) == 0)
- return iter;
- if (istrcmp(get_name(iter), get_name(entry)) != 0)
- break;
- if (icase && xkb_keysym_is_lower(iter->keysym))
- return iter;
- }
-
- if (icase)
- return entry;
- return NULL;
+ *out = result;
+ return s[i] == '\0' && i > 0;
}
XKB_EXPORT xkb_keysym_t
-xkb_keysym_from_name(const char *s, enum xkb_keysym_flags flags)
+xkb_keysym_from_name(const char *name, enum xkb_keysym_flags flags)
{
- const struct name_keysym *entry;
+ const struct name_keysym *entry = NULL;
char *tmp;
- xkb_keysym_t val;
+ uint32_t val;
bool icase = (flags & XKB_KEYSYM_CASE_INSENSITIVE);
if (flags & ~XKB_KEYSYM_CASE_INSENSITIVE)
return XKB_KEY_NoSymbol;
- entry = bsearch(s, name_to_keysym,
- ARRAY_SIZE(name_to_keysym),
- sizeof(*name_to_keysym),
- compare_by_name);
- entry = find_sym(entry, s, icase);
- if (entry)
- return entry->keysym;
-
- if (*s == 'U' || (icase && *s == 'u')) {
- val = strtoul(&s[1], &tmp, 16);
- if (tmp && *tmp != '\0')
+ /*
+ * We need to !icase case to be fast, for e.g. Compose file parsing.
+ * So do it in a fast path.
+ */
+ if (!icase) {
+ size_t pos = keysym_name_perfect_hash(name);
+ if (pos < ARRAY_SIZE(name_to_keysym)) {
+ const char *s = get_name(&name_to_keysym[pos]);
+ if (strcmp(name, s) == 0)
+ return name_to_keysym[pos].keysym;
+ }
+ }
+ /*
+ * Find the correct keysym for case-insensitive match.
+ *
+ * The name_to_keysym table is sorted by istrcmp(). So the binary
+ * search may return _any_ of all possible case-insensitive duplicates. This
+ * code searches the entry, all previous and all next entries that match by
+ * case-insensitive comparison and returns the "best" case-insensitive
+ * match.
+ *
+ * The "best" case-insensitive match is the lower-case keysym which we find
+ * with the help of xkb_keysym_is_lower(). The only keysyms that only differ
+ * by letter-case are keysyms that are available as lower-case and
+ * upper-case variant (like KEY_a and KEY_A). So returning the first
+ * lower-case match is enough in this case.
+ */
+ else {
+ int32_t lo = 0, hi = ARRAY_SIZE(name_to_keysym) - 1;
+ while (hi >= lo) {
+ int32_t mid = (lo + hi) / 2;
+ int cmp = istrcmp(name, get_name(&name_to_keysym[mid]));
+ if (cmp > 0) {
+ lo = mid + 1;
+ } else if (cmp < 0) {
+ hi = mid - 1;
+ } else {
+ entry = &name_to_keysym[mid];
+ break;
+ }
+ }
+ if (entry) {
+ const struct name_keysym *iter, *last;
+
+ if (icase && xkb_keysym_is_lower(entry->keysym))
+ return entry->keysym;
+
+ for (iter = entry - 1; iter >= name_to_keysym; --iter) {
+ if (istrcmp(get_name(iter), get_name(entry)) != 0)
+ break;
+ if (xkb_keysym_is_lower(iter->keysym))
+ return iter->keysym;
+ }
+
+ last = name_to_keysym + ARRAY_SIZE(name_to_keysym);
+ for (iter = entry + 1; iter < last; ++iter) {
+ if (istrcmp(get_name(iter), get_name(entry)) != 0)
+ break;
+ if (xkb_keysym_is_lower(iter->keysym))
+ return iter->keysym;
+ }
+
+ return entry->keysym;
+ }
+ }
+
+ if (*name == 'U' || (icase && *name == 'u')) {
+ if (!parse_keysym_hex(&name[1], &val))
return XKB_KEY_NoSymbol;
if (val < 0x20 || (val > 0x7e && val < 0xa0))
return XKB_KEY_NoSymbol;
if (val < 0x100)
- return val;
+ return (xkb_keysym_t) val;
if (val > 0x10ffff)
return XKB_KEY_NoSymbol;
- return val | 0x01000000;
+ return (xkb_keysym_t) val | 0x01000000;
}
- else if (s[0] == '0' && (s[1] == 'x' || (icase && s[1] == 'X'))) {
- val = strtoul(&s[2], &tmp, 16);
- if (tmp && *tmp != '\0')
+ else if (name[0] == '0' && (name[1] == 'x' || (icase && name[1] == 'X'))) {
+ if (!parse_keysym_hex(&name[2], &val))
return XKB_KEY_NoSymbol;
-
- return val;
+ return (xkb_keysym_t) val;
}
/* Stupid inconsistency between the headers and XKeysymDB: the former has
* no separating underscore, while some XF86* syms in the latter did.
* As a last ditch effort, try without. */
- if (strncmp(s, "XF86_", 5) == 0 ||
- (icase && istrncmp(s, "XF86_", 5) == 0)) {
+ if (strncmp(name, "XF86_", 5) == 0 ||
+ (icase && istrncmp(name, "XF86_", 5) == 0)) {
xkb_keysym_t ret;
- tmp = strdup(s);
+ tmp = strdup(name);
if (!tmp)
return XKB_KEY_NoSymbol;
- memmove(&tmp[4], &tmp[5], strlen(s) - 5 + 1);
+ memmove(&tmp[4], &tmp[5], strlen(name) - 5 + 1);
ret = xkb_keysym_from_name(tmp, flags);
free(tmp);
return ret;
diff --git a/src/ks_tables.h b/src/ks_tables.h
index 12dc4c0..46d6f98 100644
--- a/src/ks_tables.h
+++ b/src/ks_tables.h
@@ -613,6 +613,11 @@ static const char *keysym_names =
"Codeinput\0"
"colon\0"
"ColonSign\0"
+ "combining_acute\0"
+ "combining_belowdot\0"
+ "combining_grave\0"
+ "combining_hook\0"
+ "combining_tilde\0"
"comma\0"
"containsas\0"
"Control_L\0"
@@ -2203,10 +2208,23 @@ static const char *keysym_names =
"x\0"
"Xabovedot\0"
"xabovedot\0"
+ "XF8610ChannelsDown\0"
+ "XF8610ChannelsUp\0"
+ "XF863DMode\0"
"XF86AddFavorite\0"
+ "XF86Addressbook\0"
+ "XF86ALSToggle\0"
"XF86ApplicationLeft\0"
"XF86ApplicationRight\0"
+ "XF86AppSelect\0"
+ "XF86AspectRatio\0"
+ "XF86Assistant\0"
+ "XF86AttendantOff\0"
+ "XF86AttendantOn\0"
+ "XF86AttendantToggle\0"
+ "XF86Audio\0"
"XF86AudioCycleTrack\0"
+ "XF86AudioDesc\0"
"XF86AudioForward\0"
"XF86AudioLowerVolume\0"
"XF86AudioMedia\0"
@@ -2230,41 +2248,83 @@ static const char *keysym_names =
"XF86Blue\0"
"XF86Bluetooth\0"
"XF86Book\0"
+ "XF86Break\0"
"XF86BrightnessAdjust\0"
+ "XF86BrightnessAuto\0"
+ "XF86BrightnessMax\0"
+ "XF86BrightnessMin\0"
+ "XF86Buttonconfig\0"
"XF86Calculater\0"
"XF86Calculator\0"
"XF86Calendar\0"
+ "XF86CameraDown\0"
+ "XF86CameraFocus\0"
+ "XF86CameraLeft\0"
+ "XF86CameraRight\0"
+ "XF86CameraUp\0"
+ "XF86CameraZoomIn\0"
+ "XF86CameraZoomOut\0"
"XF86CD\0"
+ "XF86ChannelDown\0"
+ "XF86ChannelUp\0"
"XF86Clear\0"
"XF86ClearGrab\0"
"XF86Close\0"
"XF86Community\0"
+ "XF86ContextMenu\0"
"XF86ContrastAdjust\0"
+ "XF86ControlPanel\0"
"XF86Copy\0"
"XF86Cut\0"
"XF86CycleAngle\0"
+ "XF86Data\0"
+ "XF86Database\0"
"XF86Display\0"
+ "XF86DisplayOff\0"
+ "XF86DisplayToggle\0"
"XF86Documents\0"
"XF86DOS\0"
+ "XF86DVD\0"
+ "XF86Editor\0"
"XF86Eject\0"
"XF86Excel\0"
"XF86Explorer\0"
+ "XF86FastReverse\0"
"XF86Favorites\0"
"XF86Finance\0"
+ "XF86Fn\0"
+ "XF86Fn_Esc\0"
+ "XF86FnRightShift\0"
"XF86Forward\0"
"XF86FrameBack\0"
"XF86FrameForward\0"
"XF86FullScreen\0"
"XF86Game\0"
"XF86Go\0"
+ "XF86GraphicsEditor\0"
"XF86Green\0"
+ "XF86HangupPhone\0"
"XF86Hibernate\0"
"XF86History\0"
"XF86HomePage\0"
"XF86HotLinks\0"
+ "XF86Images\0"
+ "XF86Info\0"
"XF86iTouch\0"
+ "XF86Journal\0"
"XF86KbdBrightnessDown\0"
"XF86KbdBrightnessUp\0"
+ "XF86KbdInputAssistAccept\0"
+ "XF86KbdInputAssistCancel\0"
+ "XF86KbdInputAssistNext\0"
+ "XF86KbdInputAssistNextgroup\0"
+ "XF86KbdInputAssistPrev\0"
+ "XF86KbdInputAssistPrevgroup\0"
+ "XF86KbdLcdMenu1\0"
+ "XF86KbdLcdMenu2\0"
+ "XF86KbdLcdMenu3\0"
+ "XF86KbdLcdMenu4\0"
+ "XF86KbdLcdMenu5\0"
"XF86KbdLightOnOff\0"
"XF86Keyboard\0"
"XF86Launch0\0"
@@ -2283,13 +2343,54 @@ static const char *keysym_names =
"XF86LaunchD\0"
"XF86LaunchE\0"
"XF86LaunchF\0"
+ "XF86LeftDown\0"
+ "XF86LeftUp\0"
"XF86LightBulb\0"
+ "XF86LightsToggle\0"
"XF86LogGrabInfo\0"
"XF86LogOff\0"
"XF86LogWindowTree\0"
+ "XF86Macro1\0"
+ "XF86Macro10\0"
+ "XF86Macro11\0"
+ "XF86Macro12\0"
+ "XF86Macro13\0"
+ "XF86Macro14\0"
+ "XF86Macro15\0"
+ "XF86Macro16\0"
+ "XF86Macro17\0"
+ "XF86Macro18\0"
+ "XF86Macro19\0"
+ "XF86Macro2\0"
+ "XF86Macro20\0"
+ "XF86Macro21\0"
+ "XF86Macro22\0"
+ "XF86Macro23\0"
+ "XF86Macro24\0"
+ "XF86Macro25\0"
+ "XF86Macro26\0"
+ "XF86Macro27\0"
+ "XF86Macro28\0"
+ "XF86Macro29\0"
+ "XF86Macro3\0"
+ "XF86Macro30\0"
+ "XF86Macro4\0"
+ "XF86Macro5\0"
+ "XF86Macro6\0"
+ "XF86Macro7\0"
+ "XF86Macro8\0"
+ "XF86Macro9\0"
+ "XF86MacroPreset1\0"
+ "XF86MacroPreset2\0"
+ "XF86MacroPreset3\0"
+ "XF86MacroPresetCycle\0"
+ "XF86MacroRecordStart\0"
+ "XF86MacroRecordStop\0"
"XF86Mail\0"
"XF86MailForward\0"
"XF86Market\0"
+ "XF86MediaRepeat\0"
+ "XF86MediaTopMenu\0"
"XF86Meeting\0"
"XF86Memo\0"
"XF86MenuKB\0"
@@ -2305,44 +2406,77 @@ static const char *keysym_names =
"XF86New\0"
"XF86News\0"
"XF86Next_VMode\0"
+ "XF86NextFavorite\0"
+ "XF86NotificationCenter\0"
+ "XF86Numeric0\0"
+ "XF86Numeric1\0"
+ "XF86Numeric11\0"
+ "XF86Numeric12\0"
+ "XF86Numeric2\0"
+ "XF86Numeric3\0"
+ "XF86Numeric4\0"
+ "XF86Numeric5\0"
+ "XF86Numeric6\0"
+ "XF86Numeric7\0"
+ "XF86Numeric8\0"
+ "XF86Numeric9\0"
+ "XF86NumericA\0"
+ "XF86NumericB\0"
+ "XF86NumericC\0"
+ "XF86NumericD\0"
+ "XF86NumericPound\0"
+ "XF86NumericStar\0"
"XF86OfficeHome\0"
+ "XF86OnScreenKeyboard\0"
"XF86Open\0"
"XF86OpenURL\0"
"XF86Option\0"
"XF86Paste\0"
+ "XF86PauseRecord\0"
"XF86Phone\0"
+ "XF86PickupPhone\0"
"XF86Pictures\0"
"XF86PowerDown\0"
"XF86PowerOff\0"
+ "XF86Presentation\0"
"XF86Prev_VMode\0"
+ "XF86PrivacyScreenToggle\0"
"XF86Q\0"
"XF86Red\0"
"XF86Refresh\0"
"XF86Reload\0"
"XF86Reply\0"
"XF86RFKill\0"
+ "XF86RightDown\0"
+ "XF86RightUp\0"
"XF86RockerDown\0"
"XF86RockerEnter\0"
"XF86RockerUp\0"
+ "XF86RootMenu\0"
"XF86RotateWindows\0"
"XF86RotationKB\0"
"XF86RotationLockToggle\0"
"XF86RotationPB\0"
"XF86Save\0"
"XF86ScreenSaver\0"
+ "XF86Screensaver\0"
"XF86ScrollClick\0"
"XF86ScrollDown\0"
"XF86ScrollUp\0"
"XF86Search\0"
"XF86Select\0"
+ "XF86SelectiveScreenshot\0"
"XF86Send\0"
"XF86Shop\0"
"XF86Sleep\0"
+ "XF86SlowReverse\0"
"XF86Spell\0"
+ "XF86SpellCheck\0"
"XF86SplitScreen\0"
"XF86Standby\0"
"XF86Start\0"
"XF86Stop\0"
+ "XF86StopRecord\0"
"XF86Subtitle\0"
"XF86Support\0"
"XF86Suspend\0"
@@ -2358,6 +2492,7 @@ static const char *keysym_names =
"XF86Switch_VT_7\0"
"XF86Switch_VT_8\0"
"XF86Switch_VT_9\0"
+ "XF86Taskmanager\0"
"XF86TaskPane\0"
"XF86Terminal\0"
"XF86Time\0"
@@ -2369,24 +2504,31 @@ static const char *keysym_names =
"XF86TouchpadToggle\0"
"XF86Travel\0"
"XF86Ungrab\0"
+ "XF86Unmute\0"
"XF86User1KB\0"
"XF86User2KB\0"
"XF86UserPB\0"
"XF86UWB\0"
"XF86VendorHome\0"
"XF86Video\0"
+ "XF86VideoPhone\0"
"XF86View\0"
+ "XF86VOD\0"
+ "XF86VoiceCommand\0"
+ "XF86Voicemail\0"
"XF86WakeUp\0"
"XF86WebCam\0"
"XF86WheelButton\0"
"XF86WLAN\0"
"XF86Word\0"
+ "XF86WPSButton\0"
"XF86WWAN\0"
"XF86WWW\0"
"XF86Xfer\0"
"XF86Yellow\0"
"XF86ZoomIn\0"
"XF86ZoomOut\0"
+ "XF86ZoomReset\0"
"Y\0"
"y\0"
"Yacute\0"
@@ -2424,6 +2566,323 @@ static const char *keysym_names =
#pragma GCC diagnostic pop
#endif
+static const uint16_t keysym_name_G[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0,
+ 0, 1245, 0, 3310, 4490, 0, 0, 0, 0, 4529, 0, 0, 0, 0, 3857, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2266, 0, 0, 0, 0, 0,
+ 3688, 0, 0, 4511, 0, 0, 0, 0, 0, 0, 0, 3299, 0, 0, 0, 0, 0, 544, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1200, 3223, 4207, 0, 672, 0, 0, 0, 0, 0, 3303,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4369, 0, 2211, 0, 0, 0, 2592, 0, 0,
+ 0, 0, 1606, 0, 2530, 1223, 0, 0, 727, 0, 0, 297, 0, 4204, 0, 0, 0, 0,
+ 0, 2370, 0, 0, 3160, 0, 0, 0, 0, 3661, 0, 0, 0, 0, 1253, 0, 0, 2229,
+ 4008, 4269, 0, 0, 0, 0, 1572, 0, 1730, 3284, 0, 3643, 0, 0, 0, 4448,
+ 783, 0, 0, 0, 419, 0, 0, 564, 0, 0, 0, 0, 0, 1896, 2895, 0, 303, 0,
+ 3482, 1037, 0, 0, 0, 888, 0, 0, 0, 0, 3829, 0, 486, 0, 0, 0, 244, 0,
+ 1731, 0, 0, 0, 0, 1609, 417, 2333, 2106, 4289, 1503, 0, 0, 0, 0, 0,
+ 1880, 0, 0, 0, 0, 1740, 0, 0, 1273, 1470, 0, 0, 188, 0, 0, 0, 0, 1001,
+ 0, 0, 3155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2269, 3789, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1492, 3200, 0, 0, 0, 0, 0, 2009, 24, 0, 0, 0, 80, 3123, 0, 0, 0, 0,
+ 0, 0, 0, 1126, 0, 0, 0, 0, 3585, 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 811, 0, 4003, 3813, 0, 0, 2583, 113, 4408, 0, 386, 4182, 0, 0, 142,
+ 1325, 0, 0, 3074, 2313, 1469, 0, 0, 0, 3369, 2485, 0, 0, 4129, 1512, 0,
+ 0, 0, 0, 0, 771, 0, 0, 0, 767, 0, 0, 0, 1664, 0, 1616, 0, 0, 2363, 0,
+ 0, 0, 0, 2513, 0, 496, 1054, 0, 2211, 0, 0, 0, 0, 0, 1986, 348, 0, 0,
+ 2203, 0, 2784, 1635, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 347, 3512, 0,
+ 0, 0, 1129, 4390, 0, 4273, 0, 0, 1171, 0, 0, 0, 114, 874, 4517, 0, 0,
+ 0, 0, 0, 0, 1747, 0, 0, 0, 0, 0, 4188, 0, 2430, 0, 0, 0, 0, 0, 0, 2788,
+ 0, 2921, 0, 0, 874, 0, 0, 0, 0, 0, 2047, 0, 1604, 0, 0, 3995, 2895, 0,
+ 0, 0, 0, 0, 2604, 0, 0, 1881, 0, 0, 0, 4253, 1024, 4228, 0, 0, 1914,
+ 4001, 1011, 1639, 0, 0, 0, 0, 0, 3540, 0, 0, 2461, 0, 0, 3833, 0, 0,
+ 2013, 0, 0, 0, 2245, 0, 3283, 2902, 2494, 0, 610, 1708, 0, 0, 0, 0, 0,
+ 2934, 4383, 0, 1636, 0, 0, 0, 0, 3355, 0, 1971, 482, 1599, 0, 3749,
+ 2152, 0, 0, 0, 0, 1097, 982, 3592, 2806, 0, 0, 0, 0, 173, 780, 0, 2659,
+ 3730, 0, 599, 361, 382, 0, 574, 571, 0, 158, 0, 0, 0, 4332, 654, 0,
+ 478, 2666, 0, 0, 4354, 0, 723, 745, 0, 2334, 0, 0, 0, 315, 0, 0, 0,
+ 2285, 0, 0, 0, 0, 0, 0, 0, 0, 190, 2779, 2749, 0, 0, 0, 0, 0, 2127, 0,
+ 0, 168, 0, 2437, 2837, 3502, 0, 0, 0, 0, 0, 0, 1849, 1598, 0, 4373, 0,
+ 1200, 0, 238, 3420, 0, 3178, 0, 1571, 372, 0, 0, 1495, 3121, 0, 4099,
+ 0, 3109, 0, 0, 0, 0, 0, 1373, 0, 4432, 0, 0, 3370, 3279, 0, 0, 2799, 0,
+ 0, 0, 0, 2953, 3278, 1971, 1613, 0, 0, 0, 0, 0, 0, 0, 0, 1369, 2843, 0,
+ 989, 0, 358, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 964, 3811, 0, 0, 0, 0,
+ 1364, 0, 0, 344, 2501, 0, 0, 1167, 1318, 137, 0, 0, 0, 930, 0, 1340,
+ 1404, 873, 0, 0, 0, 0, 0, 391, 0, 2376, 3115, 2659, 1273, 2214, 0,
+ 1769, 0, 194, 0, 3009, 0, 0, 1100, 2540, 1308, 1729, 3882, 0, 0, 1925,
+ 0, 0, 0, 0, 3324, 3605, 1221, 0, 0, 0, 644, 4360, 4557, 0, 0, 0, 0,
+ 1224, 2656, 0, 4378, 4065, 0, 0, 0, 0, 0, 203, 0, 173, 0, 0, 0, 435,
+ 2916, 3546, 288, 0, 0, 0, 0, 0, 3744, 2681, 0, 0, 4396, 0, 0, 0, 3078,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 1523, 0, 0, 2313, 4347, 3320, 0, 0,
+ 3360, 566, 0, 88, 0, 0, 0, 0, 0, 2736, 0, 0, 4062, 0, 1939, 0, 2354, 0,
+ 4354, 4398, 0, 2328, 1976, 270, 0, 0, 2344, 1040, 0, 0, 3016, 4339,
+ 1220, 1136, 0, 1813, 0, 0, 990, 1892, 2453, 3252, 0, 2452, 2497, 2007,
+ 3329, 508, 0, 4500, 0, 0, 0, 0, 4293, 1207, 0, 719, 257, 0, 4532, 3884,
+ 2899, 2065, 967, 0, 0, 0, 4561, 0, 0, 1197, 0, 0, 0, 2578, 3109, 0,
+ 112, 0, 1923, 0, 809, 0, 4444, 3287, 0, 3693, 4508, 0, 0, 0, 0, 0, 0,
+ 0, 2024, 0, 0, 0, 0, 0, 2196, 0, 0, 0, 0, 3174, 3287, 0, 1813, 0, 0,
+ 3626, 2618, 2811, 0, 0, 0, 0, 910, 0, 1874, 0, 290, 1791, 0, 1291, 0,
+ 4027, 0, 3605, 0, 0, 0, 3275, 874, 3363, 0, 0, 1321, 0, 1500, 0, 0,
+ 4206, 2033, 4437, 2991, 0, 0, 0, 0, 4382, 3870, 1984, 0, 0, 0, 1096, 0,
+ 0, 4036, 0, 0, 3578, 1230, 0, 0, 2550, 0, 978, 3007, 0, 140, 0, 1157,
+ 0, 0, 0, 0, 0, 0, 4544, 4453, 0, 0, 0, 0, 504, 1136, 1395, 0, 0, 0,
+ 1736, 0, 2745, 952, 0, 0, 2650, 0, 0, 3808, 0, 0, 1148, 0, 0, 1821,
+ 622, 1626, 4464, 0, 0, 3930, 2404, 117, 0, 0, 10, 0, 2283, 1235, 4224,
+ 0, 0, 0, 0, 2917, 0, 0, 0, 2356, 0, 156, 1142, 0, 0, 0, 0, 1677, 0,
+ 3796, 3689, 602, 0, 0, 737, 0, 0, 1591, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0, 0, 3265, 0, 0, 0, 0, 621, 2329, 2059, 2850, 0, 0, 0, 0,
+ 40, 0, 0, 1095, 0, 743, 3541, 0, 0, 0, 3625, 4459, 1580, 4164, 1255, 0,
+ 0, 0, 1599, 0, 1036, 0, 0, 3438, 2656, 0, 0, 0, 1261, 224, 3600, 0,
+ 3943, 949, 2512, 0, 2796, 4233, 0, 1863, 0, 3283, 175, 0, 148, 0, 0,
+ 4320, 2004, 1503, 0, 0, 1438, 2823, 402, 1019, 0, 3343, 4216, 0, 0,
+ 2357, 0, 0, 0, 0, 1547, 0, 0, 3307, 0, 2347, 256, 0, 853, 0, 0, 0,
+ 1785, 0, 0, 0, 0, 1663, 0, 3095, 2419, 1711, 0, 4493, 0, 0, 1144, 0, 0,
+ 0, 1492, 370, 0, 0, 1007, 3167, 2813, 0, 562, 2721, 2083, 0, 2706, 0,
+ 0, 0, 0, 2937, 0, 0, 1876, 568, 0, 1859, 0, 0, 0, 0, 0, 3006, 3663,
+ 3429, 0, 1369, 0, 1599, 0, 0, 771, 1338, 0, 0, 0, 0, 0, 0, 2529, 0, 0,
+ 178, 2516, 0, 0, 2130, 2859, 1920, 0, 1992, 0, 4554, 0, 0, 0, 0, 0,
+ 2702, 4463, 688, 0, 0, 1500, 2711, 0, 0, 206, 3960, 0, 0, 0, 1051,
+ 4456, 1089, 0, 0, 712, 879, 621, 0, 0, 1353, 779, 0, 1075, 0, 1778, 0,
+ 1311, 3544, 0, 1373, 0, 0, 650, 0, 1475, 4297, 1100, 0, 343, 2758,
+ 1764, 0, 4163, 1327, 3569, 1363, 0, 2967, 0, 0, 137, 2277, 0, 0, 2411,
+ 0, 2685, 0, 2001, 948, 0, 159, 870, 1921, 1561, 0, 0, 2183, 0, 1004, 0,
+ 0, 0, 2363, 0, 0, 3473, 0, 0, 0, 2218, 0, 1021, 1919, 0, 0, 0, 0, 0,
+ 2324, 0, 1031, 0, 3739, 185, 0, 1932, 2109, 1363, 0, 0, 35, 2104, 1041,
+ 573, 0, 1518, 0, 0, 1515, 0, 0, 0, 2500, 1426, 1422, 0, 0, 2395, 706,
+ 0, 214, 889, 3801, 4108, 0, 0, 0, 2087, 0, 0, 2881, 1904, 2258, 0, 0,
+ 2408, 0, 454, 3224, 0, 0, 0, 0, 1337, 1509, 3638, 0, 0, 0, 3689, 0, 0,
+ 1774, 0, 0, 0, 0, 0, 1252, 1139, 0, 0, 0, 0, 75, 3651, 0, 1656, 0,
+ 1937, 0, 0, 4027, 0, 0, 0, 911, 1719, 0, 0, 3449, 0, 0, 0, 0, 4342,
+ 3593, 0, 0, 3476, 1690, 2585, 4484, 4479, 0, 0, 3932, 0, 3837, 3028,
+ 4047, 0, 705, 2616, 3782, 0, 0, 0, 108, 0, 0, 0, 1874, 1744, 0, 0,
+ 1147, 0, 0, 0, 166, 4277, 513, 0, 3623, 415, 0, 1574, 3753, 2473, 734,
+ 1129, 0, 0, 0, 0, 2241, 862, 0, 0, 0, 0, 2103, 1999, 2605, 821, 0, 0,
+ 0, 1653, 3756, 0, 0, 0, 2470, 0, 400, 2791, 717, 0, 154, 3490, 197,
+ 2675, 1405, 0, 2048, 0, 0, 1560, 4143, 4495, 0, 0, 0, 1299, 4554, 3847,
+ 0, 4308, 1560, 0, 3992, 0, 3209, 0, 452, 0, 2346, 0, 0, 225, 3030, 0,
+ 4370, 12, 239, 881, 0, 1561, 4251, 3310, 494, 0, 0, 232, 2509, 3198, 0,
+ 0, 0, 3390, 2956, 0, 1255, 0, 2148, 2692, 3865, 3864, 2586, 293, 0,
+ 4220, 4073, 0, 3423, 1262, 0, 1410, 2104, 0, 2074, 0, 0, 980, 0, 1684,
+ 1686, 0, 0, 429, 0, 358, 161, 0, 0, 0, 2029, 0, 2511, 817, 0, 3331, 0,
+ 1552, 0, 3380, 0, 0, 0, 3240, 0, 3499, 4041, 2450, 0, 0, 0, 0, 2214,
+ 787, 2906, 464, 1122, 3813, 0, 0, 2034, 0, 0, 0, 1037, 961, 0, 0, 3884,
+ 0, 0, 2764, 0, 0, 915, 0, 1417, 0, 6, 4134, 0, 2797, 1881, 259, 795, 0,
+ 15, 0, 2863, 0, 0, 0, 0, 0, 223, 720, 0, 1702, 0, 0, 0, 984, 1110, 0,
+ 547, 1906, 0, 0, 4286, 1875, 0, 0, 0, 1324, 0, 3589, 3911, 0, 0, 0, 0,
+ 2520, 844, 2801, 1149, 656, 0, 1837, 3441, 2127, 0, 0, 1325, 377, 1012,
+ 4280, 2404, 0, 1286, 0, 0, 0, 855, 0, 1793, 0, 4512, 2776, 2200, 2056,
+ 0, 2144, 1763, 0, 0, 549, 2475, 845, 1493, 0, 0, 306, 1398, 0, 0, 3775,
+ 0, 1451, 597, 2130, 0, 232, 2836, 957, 0, 619, 0, 2041, 0, 0, 295, 0,
+ 4361, 0, 2223, 0, 3727, 0, 0, 4294, 0, 33, 4397, 4511, 3626, 3329, 0,
+ 40, 0, 0, 0, 0, 478, 0, 0, 0, 2925, 0, 0, 3779, 1880, 0, 1556, 0, 1545,
+ 3249, 0, 0, 0, 1080, 0, 4112, 0, 3086, 46, 0, 0, 3165, 3414, 0, 0, 342,
+ 1885, 0, 0, 0, 0, 3071, 3404, 0, 0, 35, 0, 0, 0, 0, 857, 0, 627, 21, 0,
+ 0, 0, 0, 1021, 2099, 3483, 0, 0, 2693, 1014, 11, 0, 3352, 0, 3751,
+ 2476, 3014, 0, 1327, 974, 3502, 0, 611, 1838, 0, 4467, 2970, 1191, 474,
+ 0, 1366, 230, 1879, 3942, 0, 0, 0, 0, 1406, 0, 1304, 0, 0, 0, 277,
+ 3398, 0, 735, 165, 0, 0, 4185, 0, 3404, 0, 3821, 0, 0, 3450, 4161, 0,
+ 761, 0, 0, 0, 1807, 0, 0, 0, 0, 0, 0, 3962, 0, 0, 1833, 0, 1710, 0,
+ 1670, 2946, 1186, 56, 0, 533, 991, 246, 141, 0, 0, 0, 0, 687, 3830, 0,
+ 2495, 245, 0, 0, 2921, 2534, 706, 3729, 3941, 4335, 4295, 1671, 549,
+ 2015, 1777, 3057, 0, 1399, 1197, 2741, 4091, 0, 938, 0, 4322, 561, 0,
+ 527, 0, 481, 2496, 0, 0, 1771, 3444, 0, 2951, 0, 0, 0, 2244, 1013, 256,
+ 0, 1672, 0, 3115, 2720, 0, 1458, 0, 1476, 0, 2729, 0, 0, 1889, 2226,
+ 3945, 0, 1937, 0, 0, 0, 0, 4254, 1906, 4260, 2108, 0, 197, 4071, 2688,
+ 1691, 0, 0, 4467, 0, 1271, 0, 2029, 1625, 0, 0, 4259, 1222, 4139, 1497,
+ 0, 2919, 0, 86, 0, 0, 1685, 2585, 0, 1363, 0, 0, 0, 1548, 3807, 1891,
+ 4369, 774, 409, 4191, 0, 0, 3898, 1893, 4164, 765, 893, 1340, 0, 0, 0,
+ 4086, 2119, 173, 3518, 0, 0, 742, 0, 2059, 0, 0, 2955, 612, 0, 1660,
+ 4201, 2466, 485, 3476, 0, 945, 1441, 0, 3974, 0, 1551, 0, 664, 2978, 0,
+ 0, 1798, 2640, 0, 0, 0, 349, 0, 0, 3992, 0, 4168, 0, 0, 3294, 308,
+ 1332, 1191, 0, 0, 3821, 3969, 411, 1184, 0, 1417, 4191, 0, 4509, 881,
+ 593, 407, 1659, 0, 4237, 0, 1285, 2877, 2965, 3187, 0, 2725, 997, 530,
+ 2675, 0, 541, 4405, 1975, 0, 0, 2067, 801, 0, 0, 0, 0, 3746, 3215,
+ 3657, 0, 82, 0, 0, 0, 1624, 221, 0, 0, 2193, 483, 1281, 669, 2430, 0,
+ 1340, 4426, 0, 2419, 0, 2303, 0, 2691, 0, 305, 0, 0, 4276, 2246, 0,
+ 2533, 1139, 0, 626, 0, 9, 0, 2276, 2052, 178, 527, 2479, 2242, 762,
+ 212, 0, 860, 1718, 537, 0, 0, 1190, 4038, 1017, 0, 0, 0, 0, 1271, 0, 0,
+ 2261, 732, 4062, 2896, 4335, 1570, 3121, 0, 1791, 1798, 3642, 0, 125,
+ 3588, 2802, 0, 1162, 4276, 3536, 4314, 999, 0, 1518, 34, 0, 264, 4085,
+ 85, 4152, 2133, 1519, 1367, 0, 0, 3903, 420, 0, 2737, 490, 1704, 4389,
+ 0, 1631, 3809, 0, 1758, 0, 1162, 154, 980, 0, 0, 1188, 0, 0, 0, 1634,
+ 2486, 0, 0, 2972, 3280, 0, 0, 1909, 1386, 915, 2446, 0, 0, 0, 2371, 0,
+ 4499, 1915, 656, 2964, 4228, 0, 0, 0, 0, 910, 0, 0, 0, 1505, 3300, 0,
+ 2754, 2586, 2505, 3028, 135, 1124, 2602, 34, 2658, 1047, 885, 0, 0, 0,
+ 2117, 221, 2841, 153, 2240, 0, 3880, 0, 1101, 4095, 3147, 1757, 692,
+ 2280, 3049, 0, 2319, 1519, 0, 0, 0, 0, 4291, 4464, 164, 0, 1108, 4291,
+ 2707, 3843, 0, 0, 1160, 4318, 2473, 0, 4391, 0, 0, 0, 2743, 2146, 1050,
+ 0, 0, 0, 58, 191, 1754, 1704, 0, 0, 2581, 1920, 2443, 0, 3264, 0, 1379,
+ 0, 3933, 1049, 4127, 0, 2030, 0, 1363, 1411, 720, 945, 0, 367, 1312, 0,
+ 0, 0, 0, 1257, 2000, 0, 0, 260, 2860, 3118, 0, 85, 2600, 1842, 3727,
+ 554, 0, 0, 3763, 111, 0, 2993, 2128, 4103, 620, 0, 4018, 3867, 967,
+ 3281, 808, 482, 0, 2321, 0, 0, 943, 574, 256, 4177, 574, 0, 4048, 212,
+ 3917, 0, 4026, 0, 4161, 3004, 0, 3974, 0, 668, 426, 1194, 0, 0, 0,
+ 2099, 3538, 0, 1951, 0, 0, 0, 2892, 0, 0, 451, 0, 3417, 2937, 0, 0,
+ 2086, 0, 406, 0, 0, 0, 0, 4572, 1399, 3622, 894, 824, 195, 2309, 0, 0,
+ 2169, 0, 1898, 2616, 0, 626, 1848, 7, 0, 3290, 2404, 0, 3593, 0, 4205,
+ 1884, 0, 0, 3522, 1862, 2700, 0, 946, 2876, 1349, 0, 4208, 0, 0, 0,
+ 670, 0, 0, 0, 2742, 145, 776, 0, 63, 850, 781, 0, 0, 3548, 1898, 1220,
+ 490, 0, 875, 0, 0, 0, 520, 877, 1172, 1527, 0, 897, 0, 2415, 1127, 638,
+ 4329, 0, 523, 4283, 1165, 0, 15, 2321, 978, 0, 1307, 0, 816, 1025,
+ 3393, 0, 240, 145, 0, 3635, 3382, 2315, 3567, 3047, 0, 1752, 49, 4512,
+ 4482, 3417, 0, 0, 4282, 463, 4462, 0, 128, 0, 23, 4462, 836, 0, 1029,
+ 0, 2019, 0, 0, 2658, 0, 4525, 0, 3862, 0, 1577, 0, 0, 2372, 4416, 2195,
+ 0, 516, 0, 0, 551, 849, 1716, 2507, 522, 550, 0, 1543, 1983, 4223,
+ 3500, 0, 0, 1262, 502, 1512, 0, 0, 898, 292, 1236, 0, 0, 1004, 1963,
+ 1952, 0, 0, 287, 2341, 3718, 1251, 4119, 1321, 3407, 0, 0, 0, 0, 2423,
+ 251, 573, 3729, 4519, 1526, 4165, 2557, 0, 788, 0, 1448, 0, 0, 618, 0,
+ 850, 0, 161, 1350, 644, 853, 1374, 0, 1767, 1315, 1539, 596, 753, 0,
+ 467, 0, 4512, 970, 1730, 0, 0, 527, 3617, 2164, 2371, 0, 2418, 0, 0,
+ 2504, 405, 0, 3599, 1925, 0, 1064, 0, 370, 0, 4526, 325, 1972, 0, 3356,
+ 1134, 3930, 1318, 421, 2514, 2476, 638, 3571, 0, 0, 2142, 3054, 0,
+ 2064, 2541, 1652, 3622, 0, 823, 1941, 878, 1673, 0, 3435, 0, 0, 0, 661,
+ 3064, 0, 627, 0, 0, 0, 2359, 4291, 2531, 0, 4000, 0, 296, 0, 3074, 225,
+ 0, 0, 2491, 99, 0, 0, 0, 0, 0, 0, 695, 1499, 0, 0, 2403, 3941, 558, 0,
+ 0, 2265, 1068, 0, 845, 0, 0, 2485, 1864, 0, 1349, 598, 1415, 0, 544, 0,
+ 3472, 0, 392, 113, 3942, 3088, 1266, 1235, 0, 540, 169, 436, 4186,
+ 1878, 4206, 4094, 0, 662, 0, 2003, 2545, 3270, 708, 0, 0, 4359, 59, 0,
+ 2044, 1527, 4373, 0, 528, 736, 0, 0, 0, 1621, 1206, 4202, 0, 0, 2613,
+ 4059, 0, 844, 0, 2071, 0, 1126, 1719, 448, 3767, 2876, 1428, 925, 0, 0,
+ 2965, 1816, 64, 0, 0, 3750, 0, 0, 1995, 0, 0, 1647, 0, 0, 0, 755, 0, 0,
+ 0, 0, 0, 3336, 3374, 123, 0, 2172, 0, 0, 0, 2338, 519, 2630, 3573, 0,
+ 0, 1269, 2325, 0, 1935, 485, 0, 0, 2310, 2413, 4405, 2397, 1122, 1824,
+ 2055, 4062, 1449, 671, 412, 446, 4007, 286, 3846, 1387, 1978, 2443,
+ 534, 0, 1061, 2005, 2269, 597, 2272, 0, 0, 3738, 0, 0, 1562, 741, 0, 0,
+ 0, 0, 2349, 0, 2030, 0, 0, 0, 0, 0, 991, 0, 2416, 0, 2178, 1493, 0,
+ 2163, 0, 17, 1651, 1348, 4337, 2029, 0, 117, 1605, 0, 3444, 1965, 0,
+ 1776, 458, 397, 3063, 5, 4058, 535, 2807, 977, 314, 3613, 105, 3191,
+ 153, 4397, 2752, 1412, 4069, 0, 0, 0, 0, 1089, 0, 1968, 0, 768, 2132,
+ 0, 2582, 0, 0, 3753, 3512, 0, 909, 3256, 3999, 2436, 710, 0, 700, 248,
+ 4078, 4347, 1222, 3669, 0, 0, 882, 0, 0, 0, 0, 2293, 362, 81, 1667,
+ 3662, 2259, 0, 433, 4306, 3200, 0, 2445, 786, 3554, 0, 0, 0, 704, 0,
+ 2695, 3256, 3676, 881, 2107, 1637, 0, 778, 0, 2232, 1858, 1616, 2872,
+ 1467, 1545, 1613, 2512, 1587, 0, 1816, 4354, 1844, 0, 0, 3707, 3982,
+ 3115, 2408, 1957, 0, 0, 4180, 177, 0, 759, 2615, 0, 2657, 208, 286, 0,
+ 0, 0, 3075, 174, 1690, 2099, 0, 1345, 2018, 19, 1714, 0, 4440, 0, 3433,
+ 0, 2951, 3090, 0, 1572, 1834, 3590, 0, 0, 443, 0, 3912, 0, 3850, 0,
+ 497, 0, 2180, 2326, 1839, 0, 4155, 2871, 767, 0, 1249, 1687, 32, 4323,
+ 4213, 2276, 1015, 0, 0, 2246, 327, 3992, 580, 1752, 3376, 2986, 2046,
+ 2680, 0, 3862, 1306, 1087, 0, 50, 0, 0, 1553, 307, 0, 2332, 2418, 2474,
+ 0, 1160, 1935, 1511, 0, 2082, 1193, 0, 0, 4054, 0, 367, 0, 1201, 1052,
+ 0, 4550, 0, 1202, 1630, 0, 3705, 0, 0, 1923, 1124, 0, 508, 0, 2268, 0,
+ 1205, 977, 2839, 0, 1054, 577, 3807, 1596, 0, 0, 1252, 0, 2653, 805,
+ 2845, 942, 2231, 4007, 0, 2601, 277, 0, 1288, 1431, 0, 236, 3253, 0,
+ 544, 1633, 928, 1446, 3652, 2, 467, 555, 1602, 0, 1105, 0, 10, 163, 0,
+ 0, 1877, 0, 0, 0, 162, 1367, 4327, 0, 2915, 2460, 0, 0, 3361, 719,
+ 1406, 201, 0, 467, 0, 0, 4303, 3609, 1599, 330, 108, 316, 0, 0, 0, 0,
+ 2013, 18, 120, 1763, 3139, 0, 3485, 2025, 855, 0, 0, 572, 2308, 2496,
+ 4410, 1711, 0, 3226, 0, 543, 0, 1621, 76, 3210, 3215, 17, 384, 0, 3294,
+ 4505, 0, 0, 0, 1675, 1668, 1035, 0, 119, 0, 2789, 0, 3570, 4549, 98,
+ 204, 2275, 0, 0, 0, 1949, 0, 0, 717, 0, 0, 0, 0, 113, 202, 0, 1557, 0,
+ 1485, 840, 1002, 0, 0, 4427, 626, 4249, 0, 0, 2078, 165, 0, 929, 705,
+ 1441, 0, 0, 1210, 972, 2190, 0, 0, 0, 0, 1931, 869, 0, 3521, 1203, 346,
+ 0, 0, 0, 0, 0, 318, 1320, 667, 2715, 699, 1811, 0, 129, 813, 133, 1170,
+ 0, 2082, 97, 0, 3526, 326, 0, 3954, 0, 4154, 0, 4309, 2381, 3528, 0,
+ 30, 871, 4124, 4443, 2937, 0, 1725, 0, 0, 0, 2310, 455, 1619, 0, 1311,
+ 0, 1380, 0, 0, 1836, 0, 0, 1089, 2913, 4345, 246, 0, 26, 961, 0, 0,
+ 4157, 784, 0, 0, 2551, 3071, 485, 939, 2498, 0, 0, 0, 780, 4229, 1715,
+ 0, 0, 0, 0, 70, 347, 3277, 639, 0, 0, 1504, 583, 0, 3743, 1826, 0, 45,
+ 0, 0, 1008, 2163, 334, 1442, 0, 3030, 2537, 2051, 2729, 233, 3286, 0,
+ 2576, 937, 950, 0, 2733, 0, 330, 4489, 2811, 0, 0, 0, 4544, 744, 2276,
+ 0, 0, 1033, 203, 1114, 4197, 0, 0, 0, 0, 0, 2414, 295, 2339, 320, 1012,
+ 0, 0, 3831, 2284, 0, 0, 1032, 134, 1726, 0, 0, 0, 3449, 0, 0, 3858,
+ 191, 0, 1722, 790, 0, 2422, 0, 0, 1274, 0, 2270, 0, 0, 1010, 0, 0, 0,
+ 1282, 1284, 0, 449, 0, 3027, 193, 0, 2027, 0, 1373, 0, 980, 3570, 1766,
+ 1599, 4117, 167, 2021, 0, 2297, 471, 4085, 3018, 0, 335, 2835, 0, 2171,
+ 0, 1360, 0, 1099, 3721, 1043, 0, 0, 0, 475, 3827, 16, 0, 672, 3315, 0,
+ 4339, 0, 4427, 2223, 0, 0, 337, 0, 501, 229, 355, 85, 2613, 1226, 2295,
+ 2336, 105, 0, 4538, 1538, 0, 0, 0, 2782, 3838, 0, 648, 0, 3778, 0, 0,
+ 0, 0, 0, 0, 1336, 0, 0, 0, 2497, 743, 2249, 4081, 1023, 1864, 0, 3566,
+ 2420, 1134, 1465, 1353, 1077, 149, 1704, 1778, 0, 0, 3553, 2079, 3287,
+ 0, 0, 0, 1268, 599, 0, 0, 1112, 3816, 2411, 2535, 508, 0, 1829, 3311,
+ 4312, 660, 2714, 0, 1657, 1994, 82, 3885, 1442, 0, 3432, 4337, 2665,
+ 2778, 1687, 2522, 0, 1835, 1945, 1097, 682, 3420, 0, 0, 1450, 2138,
+ 1006, 1376, 1456, 226, 3999, 982, 1417, 3602, 1964, 1894, 1525, 2505,
+ 0, 4288, 0, 0, 2350, 441, 0, 0, 4083, 925, 3113, 310, 2991, 189, 1721,
+ 544, 4105, 4546, 3498, 3022, 978, 0, 2007, 0, 1107, 0, 2286, 0, 1037,
+ 0, 0, 0, 285, 0, 1559, 0, 0, 1728, 0, 0, 0, 284, 624, 263, 303, 1181,
+ 2548, 1546, 2138, 0, 3610, 4024, 720, 2156, 0, 0, 446, 0, 0, 0, 0, 747,
+ 0, 3594, 461, 3128, 505, 0, 67, 0, 2413, 0, 2775, 0, 0, 1780, 802, 0,
+ 0, 0, 401, 1834, 2278, 4251, 0, 0, 0, 413, 0, 3070, 1726, 0, 0, 475, 0,
+ 1857, 685, 2597, 981, 0, 0, 1655, 1180, 2228, 1253, 132, 63, 4266,
+ 3166, 78, 0, 2635, 1295, 344, 3971, 743, 1580, 320, 4562, 0, 4412,
+ 1166, 4460, 2660, 2264, 2579, 2733, 0, 2113, 3809, 2064, 1495, 0, 618,
+ 886, 0, 0, 0, 4410, 1989, 0, 3907, 1781, 0, 2385, 92, 330, 1729, 3966,
+ 1631, 4133, 2905, 2557, 3232, 0, 0, 0, 0, 0, 0, 291, 220, 3039, 465, 0,
+ 4496, 0, 315, 3140, 0, 781, 0, 0, 0, 0, 0, 1419, 325, 4515, 4243, 1209,
+ 2121, 0, 0, 2217, 2871, 417, 0, 0, 2310, 0, 2700, 4347, 1805, 1330,
+ 3905, 760, 3564, 0, 2297, 2413, 1603, 1234, 3139, 0, 3836, 1431, 833,
+ 1461, 146, 2173, 1111, 0, 1226, 1383, 0, 683, 2289, 783, 0, 0, 0, 0,
+ 2024, 2362, 0, 2822, 0, 2184, 3117, 2289, 2884, 3942, 0, 0, 1806, 2073,
+ 1039, 1332, 4148, 3602, 1500, 703, 0, 0, 0, 4304, 4271, 3563, 0, 214,
+ 27, 1267, 1882, 3233, 3015, 0, 0, 0, 0, 2139, 1571, 0, 0, 4364, 3885,
+ 3251, 0, 1662, 481, 9, 595, 0, 0, 1805, 0, 1783, 1270, 4365, 1375, 0,
+ 0, 0, 3269, 1077, 2763, 324, 0, 4353, 2358, 2675, 0, 1843, 0, 1649,
+ 333, 0, 0, 3961, 4484, 0, 0, 1368, 0, 3211, 4118, 4373, 3908, 1991, 0,
+ 2189, 1381, 0, 2168, 1463, 1308, 466, 145, 3355, 0, 0, 298, 298, 1183,
+ 0, 1145, 2060, 1516, 199, 0, 3088, 3607, 4408, 2304, 0, 2190, 2747, 0,
+ 474, 0, 0, 3078, 4275, 820, 876, 1004, 2364, 0, 0, 3908, 2394, 1474,
+ 2723, 1814, 2086, 294, 1788, 4408, 0, 2955, 3862, 912, 3296, 2130, 116,
+ 1388, 2762, 2870, 0, 165, 0, 1852, 2287, 0, 0, 489, 2160, 441, 0, 2625,
+ 349, 2280, 3030, 58, 0, 0, 4201, 0, 1229, 1760, 0, 4234, 791, 1053,
+ 1349, 1951, 0, 1694, 1742, 4365, 3099, 2439, 4373, 0, 413, 0, 0, 0, 0,
+ 3261, 1612, 0, 0, 3708, 1350, 252, 2326, 3770, 2427, 0, 1973, 3648,
+ 2213, 253, 2017, 1533, 2014, 0, 0, 0, 1254, 2047, 0, 285, 1208, 2385,
+ 0, 3284, 1586, 1396, 0, 0, 0, 1567, 1056, 0, 2370, 2208, 2196, 930,
+ 1787, 0, 0, 0, 101, 0, 4554, 589, 1093, 3184, 0, 1063, 2620, 0, 323,
+ 3160, 0, 1985, 2649, 0, 2950, 1670, 1932, 303, 630, 0, 1604, 0, 384,
+ 1160, 4004, 3476, 4046, 1701, 0, 1182, 0, 3666, 1562, 1622, 1384, 0, 0,
+ 0, 3622, 1340, 0, 3506, 2618, 2792, 1141, 1702, 4495, 2269, 0, 4344,
+ 2047, 0, 2506, 0, 604, 0, 1979, 1455, 148, 2255, 0, 1069, 0, 4532, 0,
+ 0, 3671, 265, 87, 0, 0, 4398, 4347, 1070, 970, 0, 1960, 3092, 943, 0,
+ 1007, 0, 2528, 2173, 313, 347, 1560, 946, 4204, 2101, 0, 991, 0, 2102,
+ 2053, 0, 680, 1979, 0, 1701, 0, 3621, 1556, 0, 331, 2707, 2448, 1240,
+ 4042, 1616, 0, 3662, 0, 0, 0, 53, 4001, 0, 3069, 1309, 1446, 304, 357,
+ 0, 3309, 2111, 3132, 264, 0, 103, 1400, 3319, 809, 2150, 2224, 0, 1528,
+ 1147, 1528, 2667, 0, 0, 415, 0, 175, 3613, 1402, 1905, 0, 803, 1744,
+ 2833, 804, 0, 0, 0, 0, 4466, 585, 2964, 1606, 3440, 297, 4247, 1275, 0,
+ 0, 0, 1508, 0, 2835, 3573, 0, 400, 0, 4481, 3301, 734, 1036, 823, 1398,
+ 706, 0, 0, 3880, 2284, 0, 0, 619, 0, 1317, 0, 0, 2219, 0, 4480, 628,
+ 983, 4502, 3011, 1487, 44, 0, 0, 30, 2527, 2246, 804, 0, 2016, 2001,
+ 1657, 0, 0, 1330, 739, 0, 0, 0, 0, 3978, 219, 974, 339, 3993, 2, 1118,
+ 1395, 2451, 3610, 1189, 2341, 53, 110, 2132, 4538, 4392, 393, 53, 2176,
+ 92, 2282, 0, 584, 885, 1401, 2282, 79, 1644, 0, 4316, 0, 4033, 0, 4235,
+ 3232, 2752, 0, 0, 2010, 2446, 0, 0, 4547, 0, 2203, 247, 4125, 0, 0,
+ 1261, 216, 0, 4138, 0, 0, 0, 0, 1637, 0, 0, 200, 750, 262, 0, 4510, 0,
+ 1506, 2069, 4241, 1589, 661, 0, 277, 3425, 1294, 14, 0, 1747, 2220,
+ 2297, 0, 0, 238, 0, 547, 476, 2223, 4221, 4355, 1385, 1724, 0, 0, 2139,
+ 1990, 902, 0, 1183, 18, 0, 1607, 0, 2513, 1427, 395, 975, 0, 3106,
+ 1756, 2038, 561, 0, 1217, 925, 158, 989, 4043, 0, 0, 0, 2342, 0, 2070,
+ 297, 457, 0, 3756, 451, 0, 4085, 0, 4111, 2184, 0, 0, 0, 3984, 373, 0,
+ 3175, 1178, 4351, 1137, 2453, 1709, 1594, 4546, 3060, 0, 1834, 3303, 0,
+ 1327, 1177, 553, 404, 4148, 1271, 0, 603, 0, 0, 1541, 0, 2530, 0, 0,
+ 2593, 1055, 0, 2346, 0, 424, 2332, 0, 1654, 0, 2249, 466, 1189, 700,
+ 4013, 852, 126, 1203, 221, 852, 667, 350, 0, 758, 4008, 0, 4389, 854,
+ 2392, 0, 2277, 782, 1516, 0, 2643, 766, 1171, 137, 3759, 733, 981, 0,
+ 0, 1208, 1949, 2894, 0, 1871, 4499, 0, 1179, 0, 263, 414, 3460, 3873,
+ 131, 1836, 528, 0, 0, 2185, 0, 2149, 0, 0, 1688, 1626, 4532, 0, 4415,
+ 0, 4262, 0, 0, 1962, 0, 0, 453, 2195, 3045, 648, 3824, 1109, 2294,
+ 3776, 0, 1433, 3623, 761, 2010, 0, 2049, 496, 0, 2094, 4421, 0, 420, 0,
+ 0, 90, 0, 0, 485, 0, 0, 2499, 1177, 0, 0, 4511, 2369, 1523, 0, 0, 3755,
+ 2071
+};
+
+static size_t
+keysym_name_hash_f(const char *key, const char *T)
+{
+ size_t sum = 0;
+ for (size_t i = 0; key[i] != '\0'; i++)
+ sum += T[i % 32] * key[i];
+ return sum % 4573;
+}
+
+static size_t
+keysym_name_perfect_hash(const char *key)
+{
+ return (
+ keysym_name_G[keysym_name_hash_f(key, "xQ6s5AweQcmhYSjcMnXcbUZV5VlaPl27")] +
+ keysym_name_G[keysym_name_hash_f(key, "rCH1UKEZTzn9hlnUvX76Sw7VmrLuST7A")]
+ ) % 4573;
+}
+
+
struct name_keysym {
xkb_keysym_t keysym;
uint32_t offset;
@@ -3033,1832 +3492,1974 @@ static const struct name_keysym name_to_keysym[] = {
{ 0x0000ff37, 8654 }, /* Codeinput */
{ 0x0000003a, 8664 }, /* colon */
{ 0x010020a1, 8670 }, /* ColonSign */
- { 0x0000002c, 8680 }, /* comma */
- { 0x0100220b, 8686 }, /* containsas */
- { 0x0000ffe3, 8697 }, /* Control_L */
- { 0x0000ffe4, 8707 }, /* Control_R */
- { 0x000000a9, 8717 }, /* copyright */
- { 0x000009e4, 8727 }, /* cr */
- { 0x000009ee, 8730 }, /* crossinglines */
- { 0x010020a2, 8744 }, /* CruzeiroSign */
- { 0x0100221b, 8757 }, /* cuberoot */
- { 0x000000a4, 8766 }, /* currency */
- { 0x00000aff, 8775 }, /* cursor */
- { 0x000006c1, 8782 }, /* Cyrillic_a */
- { 0x000006e1, 8793 }, /* Cyrillic_A */
- { 0x000006c2, 8804 }, /* Cyrillic_be */
- { 0x000006e2, 8816 }, /* Cyrillic_BE */
- { 0x000006de, 8828 }, /* Cyrillic_che */
- { 0x000006fe, 8841 }, /* Cyrillic_CHE */
- { 0x010004b6, 8854 }, /* Cyrillic_CHE_descender */
- { 0x010004b7, 8877 }, /* Cyrillic_che_descender */
- { 0x010004b8, 8900 }, /* Cyrillic_CHE_vertstroke */
- { 0x010004b9, 8924 }, /* Cyrillic_che_vertstroke */
- { 0x000006c4, 8948 }, /* Cyrillic_de */
- { 0x000006e4, 8960 }, /* Cyrillic_DE */
- { 0x000006af, 8972 }, /* Cyrillic_dzhe */
- { 0x000006bf, 8986 }, /* Cyrillic_DZHE */
- { 0x000006dc, 9000 }, /* Cyrillic_e */
- { 0x000006fc, 9011 }, /* Cyrillic_E */
- { 0x000006c6, 9022 }, /* Cyrillic_ef */
- { 0x000006e6, 9034 }, /* Cyrillic_EF */
- { 0x000006cc, 9046 }, /* Cyrillic_el */
- { 0x000006ec, 9058 }, /* Cyrillic_EL */
- { 0x000006cd, 9070 }, /* Cyrillic_em */
- { 0x000006ed, 9082 }, /* Cyrillic_EM */
- { 0x000006ce, 9094 }, /* Cyrillic_en */
- { 0x000006ee, 9106 }, /* Cyrillic_EN */
- { 0x010004a2, 9118 }, /* Cyrillic_EN_descender */
- { 0x010004a3, 9140 }, /* Cyrillic_en_descender */
- { 0x000006d2, 9162 }, /* Cyrillic_er */
- { 0x000006f2, 9174 }, /* Cyrillic_ER */
- { 0x000006d3, 9186 }, /* Cyrillic_es */
- { 0x000006f3, 9198 }, /* Cyrillic_ES */
- { 0x000006c7, 9210 }, /* Cyrillic_ghe */
- { 0x000006e7, 9223 }, /* Cyrillic_GHE */
- { 0x01000492, 9236 }, /* Cyrillic_GHE_bar */
- { 0x01000493, 9253 }, /* Cyrillic_ghe_bar */
- { 0x000006c8, 9270 }, /* Cyrillic_ha */
- { 0x000006e8, 9282 }, /* Cyrillic_HA */
- { 0x010004b2, 9294 }, /* Cyrillic_HA_descender */
- { 0x010004b3, 9316 }, /* Cyrillic_ha_descender */
- { 0x000006df, 9338 }, /* Cyrillic_hardsign */
- { 0x000006ff, 9356 }, /* Cyrillic_HARDSIGN */
- { 0x000006c9, 9374 }, /* Cyrillic_i */
- { 0x000006e9, 9385 }, /* Cyrillic_I */
- { 0x010004e2, 9396 }, /* Cyrillic_I_macron */
- { 0x010004e3, 9414 }, /* Cyrillic_i_macron */
- { 0x000006c5, 9432 }, /* Cyrillic_ie */
- { 0x000006e5, 9444 }, /* Cyrillic_IE */
- { 0x000006a3, 9456 }, /* Cyrillic_io */
- { 0x000006b3, 9468 }, /* Cyrillic_IO */
- { 0x000006a8, 9480 }, /* Cyrillic_je */
- { 0x000006b8, 9492 }, /* Cyrillic_JE */
- { 0x000006cb, 9504 }, /* Cyrillic_ka */
- { 0x000006eb, 9516 }, /* Cyrillic_KA */
- { 0x0100049a, 9528 }, /* Cyrillic_KA_descender */
- { 0x0100049b, 9550 }, /* Cyrillic_ka_descender */
- { 0x0100049c, 9572 }, /* Cyrillic_KA_vertstroke */
- { 0x0100049d, 9595 }, /* Cyrillic_ka_vertstroke */
- { 0x000006a9, 9618 }, /* Cyrillic_lje */
- { 0x000006b9, 9631 }, /* Cyrillic_LJE */
- { 0x000006aa, 9644 }, /* Cyrillic_nje */
- { 0x000006ba, 9657 }, /* Cyrillic_NJE */
- { 0x000006cf, 9670 }, /* Cyrillic_o */
- { 0x000006ef, 9681 }, /* Cyrillic_O */
- { 0x010004e8, 9692 }, /* Cyrillic_O_bar */
- { 0x010004e9, 9707 }, /* Cyrillic_o_bar */
- { 0x000006d0, 9722 }, /* Cyrillic_pe */
- { 0x000006f0, 9734 }, /* Cyrillic_PE */
- { 0x010004d8, 9746 }, /* Cyrillic_SCHWA */
- { 0x010004d9, 9761 }, /* Cyrillic_schwa */
- { 0x000006db, 9776 }, /* Cyrillic_sha */
- { 0x000006fb, 9789 }, /* Cyrillic_SHA */
- { 0x000006dd, 9802 }, /* Cyrillic_shcha */
- { 0x000006fd, 9817 }, /* Cyrillic_SHCHA */
- { 0x010004ba, 9832 }, /* Cyrillic_SHHA */
- { 0x010004bb, 9846 }, /* Cyrillic_shha */
- { 0x000006ca, 9860 }, /* Cyrillic_shorti */
- { 0x000006ea, 9876 }, /* Cyrillic_SHORTI */
- { 0x000006d8, 9892 }, /* Cyrillic_softsign */
- { 0x000006f8, 9910 }, /* Cyrillic_SOFTSIGN */
- { 0x000006d4, 9928 }, /* Cyrillic_te */
- { 0x000006f4, 9940 }, /* Cyrillic_TE */
- { 0x000006c3, 9952 }, /* Cyrillic_tse */
- { 0x000006e3, 9965 }, /* Cyrillic_TSE */
- { 0x000006d5, 9978 }, /* Cyrillic_u */
- { 0x000006f5, 9989 }, /* Cyrillic_U */
- { 0x010004ee, 10000 }, /* Cyrillic_U_macron */
- { 0x010004ef, 10018 }, /* Cyrillic_u_macron */
- { 0x010004ae, 10036 }, /* Cyrillic_U_straight */
- { 0x010004af, 10056 }, /* Cyrillic_u_straight */
- { 0x010004b0, 10076 }, /* Cyrillic_U_straight_bar */
- { 0x010004b1, 10100 }, /* Cyrillic_u_straight_bar */
- { 0x000006d7, 10124 }, /* Cyrillic_ve */
- { 0x000006f7, 10136 }, /* Cyrillic_VE */
- { 0x000006d1, 10148 }, /* Cyrillic_ya */
- { 0x000006f1, 10160 }, /* Cyrillic_YA */
- { 0x000006d9, 10172 }, /* Cyrillic_yeru */
- { 0x000006f9, 10186 }, /* Cyrillic_YERU */
- { 0x000006c0, 10200 }, /* Cyrillic_yu */
- { 0x000006e0, 10212 }, /* Cyrillic_YU */
- { 0x000006da, 10224 }, /* Cyrillic_ze */
- { 0x000006fa, 10236 }, /* Cyrillic_ZE */
- { 0x000006d6, 10248 }, /* Cyrillic_zhe */
- { 0x000006f6, 10261 }, /* Cyrillic_ZHE */
- { 0x01000496, 10274 }, /* Cyrillic_ZHE_descender */
- { 0x01000497, 10297 }, /* Cyrillic_zhe_descender */
- { 0x00000044, 10320 }, /* D */
- { 0x00000064, 10322 }, /* d */
- { 0x01001e0a, 10324 }, /* Dabovedot */
- { 0x01001e0b, 10334 }, /* dabovedot */
- { 0x1000fe27, 10344 }, /* Dacute_accent */
- { 0x00000af1, 10358 }, /* dagger */
- { 0x000001cf, 10365 }, /* Dcaron */
- { 0x000001ef, 10372 }, /* dcaron */
- { 0x1000fe2c, 10379 }, /* Dcedilla_accent */
- { 0x1000fe5e, 10395 }, /* Dcircumflex_accent */
- { 0x1000fe22, 10414 }, /* Ddiaeresis */
- { 0x0000fe80, 10425 }, /* dead_a */
- { 0x0000fe81, 10432 }, /* dead_A */
- { 0x0000fe64, 10439 }, /* dead_abovecomma */
- { 0x0000fe56, 10455 }, /* dead_abovedot */
- { 0x0000fe65, 10469 }, /* dead_abovereversedcomma */
- { 0x0000fe58, 10493 }, /* dead_abovering */
- { 0x0000fe91, 10508 }, /* dead_aboveverticalline */
- { 0x0000fe51, 10531 }, /* dead_acute */
- { 0x0000fe6b, 10542 }, /* dead_belowbreve */
- { 0x0000fe69, 10558 }, /* dead_belowcircumflex */
- { 0x0000fe6e, 10579 }, /* dead_belowcomma */
- { 0x0000fe6c, 10595 }, /* dead_belowdiaeresis */
- { 0x0000fe60, 10615 }, /* dead_belowdot */
- { 0x0000fe68, 10629 }, /* dead_belowmacron */
- { 0x0000fe67, 10646 }, /* dead_belowring */
- { 0x0000fe6a, 10661 }, /* dead_belowtilde */
- { 0x0000fe92, 10677 }, /* dead_belowverticalline */
- { 0x0000fe55, 10700 }, /* dead_breve */
- { 0x0000fe8b, 10711 }, /* dead_capital_schwa */
- { 0x0000fe5a, 10730 }, /* dead_caron */
- { 0x0000fe5b, 10741 }, /* dead_cedilla */
- { 0x0000fe52, 10754 }, /* dead_circumflex */
- { 0x0000fe6f, 10770 }, /* dead_currency */
- { 0x0000fe65, 10784 }, /* dead_dasia */
- { 0x0000fe57, 10795 }, /* dead_diaeresis */
- { 0x0000fe59, 10810 }, /* dead_doubleacute */
- { 0x0000fe66, 10827 }, /* dead_doublegrave */
- { 0x0000fe82, 10844 }, /* dead_e */
- { 0x0000fe83, 10851 }, /* dead_E */
- { 0x0000fe50, 10858 }, /* dead_grave */
- { 0x0000fe8c, 10869 }, /* dead_greek */
- { 0x0000fe61, 10880 }, /* dead_hook */
- { 0x0000fe62, 10890 }, /* dead_horn */
- { 0x0000fe84, 10900 }, /* dead_i */
- { 0x0000fe85, 10907 }, /* dead_I */
- { 0x0000fe6d, 10914 }, /* dead_invertedbreve */
- { 0x0000fe5d, 10933 }, /* dead_iota */
- { 0x0000fe93, 10943 }, /* dead_longsolidusoverlay */
- { 0x0000fe90, 10967 }, /* dead_lowline */
- { 0x0000fe54, 10980 }, /* dead_macron */
- { 0x0000fe86, 10992 }, /* dead_o */
- { 0x0000fe87, 10999 }, /* dead_O */
- { 0x0000fe5c, 11006 }, /* dead_ogonek */
- { 0x0000fe53, 11018 }, /* dead_perispomeni */
- { 0x0000fe64, 11035 }, /* dead_psili */
- { 0x0000fe5f, 11046 }, /* dead_semivoiced_sound */
- { 0x0000fe8a, 11068 }, /* dead_small_schwa */
- { 0x0000fe63, 11085 }, /* dead_stroke */
- { 0x0000fe53, 11097 }, /* dead_tilde */
- { 0x0000fe88, 11108 }, /* dead_u */
- { 0x0000fe89, 11115 }, /* dead_U */
- { 0x0000fe5e, 11122 }, /* dead_voiced_sound */
- { 0x00000abd, 11140 }, /* decimalpoint */
- { 0x000000b0, 11153 }, /* degree */
- { 0x0000ffff, 11160 }, /* Delete */
- { 0x1000ff73, 11167 }, /* DeleteChar */
- { 0x1000ff71, 11178 }, /* DeleteLine */
- { 0x1000fe60, 11189 }, /* Dgrave_accent */
- { 0x000000a8, 11203 }, /* diaeresis */
- { 0x00000aed, 11213 }, /* diamond */
- { 0x00000aa5, 11221 }, /* digitspace */
- { 0x0100222c, 11232 }, /* dintegral */
- { 0x000000f7, 11242 }, /* division */
- { 0x00000024, 11251 }, /* dollar */
- { 0x010020ab, 11258 }, /* DongSign */
- { 0x00000aaf, 11267 }, /* doubbaselinedot */
- { 0x000001bd, 11283 }, /* doubleacute */
- { 0x00000af2, 11295 }, /* doubledagger */
- { 0x00000afe, 11308 }, /* doublelowquotemark */
- { 0x0000ff54, 11327 }, /* Down */
- { 0x000008fe, 11332 }, /* downarrow */
- { 0x00000ba8, 11342 }, /* downcaret */
- { 0x00000bd6, 11352 }, /* downshoe */
- { 0x00000bc4, 11361 }, /* downstile */
- { 0x00000bc2, 11371 }, /* downtack */
- { 0x1000ff00, 11380 }, /* DRemove */
- { 0x1000feb0, 11388 }, /* Dring_accent */
- { 0x000001d0, 11401 }, /* Dstroke */
- { 0x000001f0, 11409 }, /* dstroke */
- { 0x1000fe7e, 11417 }, /* Dtilde */
- { 0x00000045, 11424 }, /* E */
- { 0x00000065, 11426 }, /* e */
- { 0x000003cc, 11428 }, /* Eabovedot */
- { 0x000003ec, 11438 }, /* eabovedot */
- { 0x000000c9, 11448 }, /* Eacute */
- { 0x000000e9, 11455 }, /* eacute */
- { 0x01001eb8, 11462 }, /* Ebelowdot */
- { 0x01001eb9, 11472 }, /* ebelowdot */
- { 0x000001cc, 11482 }, /* Ecaron */
- { 0x000001ec, 11489 }, /* ecaron */
- { 0x000000ca, 11496 }, /* Ecircumflex */
- { 0x000000ea, 11508 }, /* ecircumflex */
- { 0x01001ebe, 11520 }, /* Ecircumflexacute */
- { 0x01001ebf, 11537 }, /* ecircumflexacute */
- { 0x01001ec6, 11554 }, /* Ecircumflexbelowdot */
- { 0x01001ec7, 11574 }, /* ecircumflexbelowdot */
- { 0x01001ec0, 11594 }, /* Ecircumflexgrave */
- { 0x01001ec1, 11611 }, /* ecircumflexgrave */
- { 0x01001ec2, 11628 }, /* Ecircumflexhook */
- { 0x01001ec3, 11644 }, /* ecircumflexhook */
- { 0x01001ec4, 11660 }, /* Ecircumflextilde */
- { 0x01001ec5, 11677 }, /* ecircumflextilde */
- { 0x010020a0, 11694 }, /* EcuSign */
- { 0x000000cb, 11702 }, /* Ediaeresis */
- { 0x000000eb, 11713 }, /* ediaeresis */
- { 0x000000c8, 11724 }, /* Egrave */
- { 0x000000e8, 11731 }, /* egrave */
- { 0x01001eba, 11738 }, /* Ehook */
- { 0x01001ebb, 11744 }, /* ehook */
- { 0x01002088, 11750 }, /* eightsubscript */
- { 0x01002078, 11765 }, /* eightsuperior */
- { 0x0000ff2f, 11779 }, /* Eisu_Shift */
- { 0x0000ff30, 11790 }, /* Eisu_toggle */
- { 0x01002208, 11802 }, /* elementof */
- { 0x00000aae, 11812 }, /* ellipsis */
- { 0x00000aa3, 11821 }, /* em3space */
- { 0x00000aa4, 11830 }, /* em4space */
- { 0x000003aa, 11839 }, /* Emacron */
- { 0x000003ba, 11847 }, /* emacron */
- { 0x00000aa9, 11855 }, /* emdash */
- { 0x00000ade, 11862 }, /* emfilledcircle */
- { 0x00000adf, 11877 }, /* emfilledrect */
- { 0x00000ace, 11890 }, /* emopencircle */
- { 0x00000acf, 11903 }, /* emopenrectangle */
- { 0x01002205, 11919 }, /* emptyset */
- { 0x00000aa1, 11928 }, /* emspace */
- { 0x0000ff57, 11936 }, /* End */
- { 0x00000aaa, 11940 }, /* endash */
- { 0x00000ae6, 11947 }, /* enfilledcircbullet */
- { 0x00000ae7, 11966 }, /* enfilledsqbullet */
- { 0x000003bd, 11983 }, /* ENG */
- { 0x000003bf, 11987 }, /* eng */
- { 0x00000ae0, 11991 }, /* enopencircbullet */
- { 0x00000ae1, 12008 }, /* enopensquarebullet */
- { 0x00000aa2, 12027 }, /* enspace */
- { 0x000001ca, 12035 }, /* Eogonek */
- { 0x000001ea, 12043 }, /* eogonek */
- { 0x0000003d, 12051 }, /* equal */
- { 0x0000ff1b, 12057 }, /* Escape */
- { 0x000000d0, 12064 }, /* ETH */
- { 0x000000d0, 12068 }, /* Eth */
- { 0x000000f0, 12072 }, /* eth */
- { 0x01001ebc, 12076 }, /* Etilde */
- { 0x01001ebd, 12083 }, /* etilde */
- { 0x000020ac, 12090 }, /* EuroSign */
- { 0x00000021, 12099 }, /* exclam */
- { 0x000000a1, 12106 }, /* exclamdown */
- { 0x0000ff62, 12117 }, /* Execute */
- { 0x1000ff76, 12125 }, /* Ext16bit_L */
- { 0x1000ff77, 12136 }, /* Ext16bit_R */
- { 0x010001b7, 12147 }, /* EZH */
- { 0x01000292, 12151 }, /* ezh */
- { 0x00000046, 12155 }, /* F */
- { 0x00000066, 12157 }, /* f */
- { 0x0000ffbe, 12159 }, /* F1 */
- { 0x0000ffc7, 12162 }, /* F10 */
- { 0x0000ffc8, 12166 }, /* F11 */
- { 0x0000ffc9, 12170 }, /* F12 */
- { 0x0000ffca, 12174 }, /* F13 */
- { 0x0000ffcb, 12178 }, /* F14 */
- { 0x0000ffcc, 12182 }, /* F15 */
- { 0x0000ffcd, 12186 }, /* F16 */
- { 0x0000ffce, 12190 }, /* F17 */
- { 0x0000ffcf, 12194 }, /* F18 */
- { 0x0000ffd0, 12198 }, /* F19 */
- { 0x0000ffbf, 12202 }, /* F2 */
- { 0x0000ffd1, 12205 }, /* F20 */
- { 0x0000ffd2, 12209 }, /* F21 */
- { 0x0000ffd3, 12213 }, /* F22 */
- { 0x0000ffd4, 12217 }, /* F23 */
- { 0x0000ffd5, 12221 }, /* F24 */
- { 0x0000ffd6, 12225 }, /* F25 */
- { 0x0000ffd7, 12229 }, /* F26 */
- { 0x0000ffd8, 12233 }, /* F27 */
- { 0x0000ffd9, 12237 }, /* F28 */
- { 0x0000ffda, 12241 }, /* F29 */
- { 0x0000ffc0, 12245 }, /* F3 */
- { 0x0000ffdb, 12248 }, /* F30 */
- { 0x0000ffdc, 12252 }, /* F31 */
- { 0x0000ffdd, 12256 }, /* F32 */
- { 0x0000ffde, 12260 }, /* F33 */
- { 0x0000ffdf, 12264 }, /* F34 */
- { 0x0000ffe0, 12268 }, /* F35 */
- { 0x0000ffc1, 12272 }, /* F4 */
- { 0x0000ffc2, 12275 }, /* F5 */
- { 0x0000ffc3, 12278 }, /* F6 */
- { 0x0000ffc4, 12281 }, /* F7 */
- { 0x0000ffc5, 12284 }, /* F8 */
- { 0x0000ffc6, 12287 }, /* F9 */
- { 0x01001e1e, 12290 }, /* Fabovedot */
- { 0x01001e1f, 12300 }, /* fabovedot */
- { 0x010006f0, 12310 }, /* Farsi_0 */
- { 0x010006f1, 12318 }, /* Farsi_1 */
- { 0x010006f2, 12326 }, /* Farsi_2 */
- { 0x010006f3, 12334 }, /* Farsi_3 */
- { 0x010006f4, 12342 }, /* Farsi_4 */
- { 0x010006f5, 12350 }, /* Farsi_5 */
- { 0x010006f6, 12358 }, /* Farsi_6 */
- { 0x010006f7, 12366 }, /* Farsi_7 */
- { 0x010006f8, 12374 }, /* Farsi_8 */
- { 0x010006f9, 12382 }, /* Farsi_9 */
- { 0x010006cc, 12390 }, /* Farsi_yeh */
- { 0x00000af8, 12400 }, /* femalesymbol */
- { 0x000009e3, 12413 }, /* ff */
- { 0x010020a3, 12416 }, /* FFrancSign */
- { 0x00000abb, 12427 }, /* figdash */
- { 0x00000adc, 12435 }, /* filledlefttribullet */
- { 0x00000adb, 12455 }, /* filledrectbullet */
- { 0x00000add, 12472 }, /* filledrighttribullet */
- { 0x00000ae9, 12493 }, /* filledtribulletdown */
- { 0x00000ae8, 12513 }, /* filledtribulletup */
- { 0x0000ff68, 12531 }, /* Find */
- { 0x0000fed0, 12536 }, /* First_Virtual_Screen */
- { 0x00000ac5, 12557 }, /* fiveeighths */
- { 0x00000ab7, 12569 }, /* fivesixths */
- { 0x01002085, 12580 }, /* fivesubscript */
- { 0x01002075, 12594 }, /* fivesuperior */
- { 0x00000ab5, 12607 }, /* fourfifths */
- { 0x01002084, 12618 }, /* foursubscript */
- { 0x01002074, 12632 }, /* foursuperior */
- { 0x0100221c, 12645 }, /* fourthroot */
- { 0x000008f6, 12656 }, /* function */
- { 0x00000047, 12665 }, /* G */
- { 0x00000067, 12667 }, /* g */
- { 0x000002d5, 12669 }, /* Gabovedot */
- { 0x000002f5, 12679 }, /* gabovedot */
- { 0x000002ab, 12689 }, /* Gbreve */
- { 0x000002bb, 12696 }, /* gbreve */
- { 0x010001e6, 12703 }, /* Gcaron */
- { 0x010001e7, 12710 }, /* gcaron */
- { 0x000003ab, 12717 }, /* Gcedilla */
- { 0x000003bb, 12726 }, /* gcedilla */
- { 0x000002d8, 12735 }, /* Gcircumflex */
- { 0x000002f8, 12747 }, /* gcircumflex */
- { 0x010010d0, 12759 }, /* Georgian_an */
- { 0x010010d1, 12771 }, /* Georgian_ban */
- { 0x010010ea, 12784 }, /* Georgian_can */
- { 0x010010ed, 12797 }, /* Georgian_char */
- { 0x010010e9, 12811 }, /* Georgian_chin */
- { 0x010010ec, 12825 }, /* Georgian_cil */
- { 0x010010d3, 12838 }, /* Georgian_don */
- { 0x010010d4, 12851 }, /* Georgian_en */
- { 0x010010f6, 12863 }, /* Georgian_fi */
- { 0x010010d2, 12875 }, /* Georgian_gan */
- { 0x010010e6, 12888 }, /* Georgian_ghan */
- { 0x010010f0, 12902 }, /* Georgian_hae */
- { 0x010010f4, 12915 }, /* Georgian_har */
- { 0x010010f1, 12928 }, /* Georgian_he */
- { 0x010010f2, 12940 }, /* Georgian_hie */
- { 0x010010f5, 12953 }, /* Georgian_hoe */
- { 0x010010d8, 12966 }, /* Georgian_in */
- { 0x010010ef, 12978 }, /* Georgian_jhan */
- { 0x010010eb, 12992 }, /* Georgian_jil */
- { 0x010010d9, 13005 }, /* Georgian_kan */
- { 0x010010e5, 13018 }, /* Georgian_khar */
- { 0x010010da, 13032 }, /* Georgian_las */
- { 0x010010db, 13045 }, /* Georgian_man */
- { 0x010010dc, 13058 }, /* Georgian_nar */
- { 0x010010dd, 13071 }, /* Georgian_on */
- { 0x010010de, 13083 }, /* Georgian_par */
- { 0x010010e4, 13096 }, /* Georgian_phar */
- { 0x010010e7, 13110 }, /* Georgian_qar */
- { 0x010010e0, 13123 }, /* Georgian_rae */
- { 0x010010e1, 13136 }, /* Georgian_san */
- { 0x010010e8, 13149 }, /* Georgian_shin */
- { 0x010010d7, 13163 }, /* Georgian_tan */
- { 0x010010e2, 13176 }, /* Georgian_tar */
- { 0x010010e3, 13189 }, /* Georgian_un */
- { 0x010010d5, 13201 }, /* Georgian_vin */
- { 0x010010f3, 13214 }, /* Georgian_we */
- { 0x010010ee, 13226 }, /* Georgian_xan */
- { 0x010010d6, 13239 }, /* Georgian_zen */
- { 0x010010df, 13252 }, /* Georgian_zhar */
- { 0x00000060, 13266 }, /* grave */
- { 0x0000003e, 13272 }, /* greater */
- { 0x000008be, 13280 }, /* greaterthanequal */
- { 0x000007ae, 13297 }, /* Greek_accentdieresis */
- { 0x000007c1, 13318 }, /* Greek_ALPHA */
- { 0x000007e1, 13330 }, /* Greek_alpha */
- { 0x000007a1, 13342 }, /* Greek_ALPHAaccent */
- { 0x000007b1, 13360 }, /* Greek_alphaaccent */
- { 0x000007c2, 13378 }, /* Greek_BETA */
- { 0x000007e2, 13389 }, /* Greek_beta */
- { 0x000007d7, 13400 }, /* Greek_CHI */
- { 0x000007f7, 13410 }, /* Greek_chi */
- { 0x000007c4, 13420 }, /* Greek_DELTA */
- { 0x000007e4, 13432 }, /* Greek_delta */
- { 0x000007c5, 13444 }, /* Greek_EPSILON */
- { 0x000007e5, 13458 }, /* Greek_epsilon */
- { 0x000007a2, 13472 }, /* Greek_EPSILONaccent */
- { 0x000007b2, 13492 }, /* Greek_epsilonaccent */
- { 0x000007c7, 13512 }, /* Greek_ETA */
- { 0x000007e7, 13522 }, /* Greek_eta */
- { 0x000007a3, 13532 }, /* Greek_ETAaccent */
- { 0x000007b3, 13548 }, /* Greek_etaaccent */
- { 0x000007f3, 13564 }, /* Greek_finalsmallsigma */
- { 0x000007c3, 13586 }, /* Greek_GAMMA */
- { 0x000007e3, 13598 }, /* Greek_gamma */
- { 0x000007af, 13610 }, /* Greek_horizbar */
- { 0x000007c9, 13625 }, /* Greek_IOTA */
- { 0x000007e9, 13636 }, /* Greek_iota */
- { 0x000007a4, 13647 }, /* Greek_IOTAaccent */
- { 0x000007b4, 13664 }, /* Greek_iotaaccent */
- { 0x000007b6, 13681 }, /* Greek_iotaaccentdieresis */
- { 0x000007a5, 13706 }, /* Greek_IOTAdiaeresis */
- { 0x000007a5, 13726 }, /* Greek_IOTAdieresis */
- { 0x000007b5, 13745 }, /* Greek_iotadieresis */
- { 0x000007ca, 13764 }, /* Greek_KAPPA */
- { 0x000007ea, 13776 }, /* Greek_kappa */
- { 0x000007cb, 13788 }, /* Greek_LAMBDA */
- { 0x000007eb, 13801 }, /* Greek_lambda */
- { 0x000007cb, 13814 }, /* Greek_LAMDA */
- { 0x000007eb, 13826 }, /* Greek_lamda */
- { 0x000007cc, 13838 }, /* Greek_MU */
- { 0x000007ec, 13847 }, /* Greek_mu */
- { 0x000007cd, 13856 }, /* Greek_NU */
- { 0x000007ed, 13865 }, /* Greek_nu */
- { 0x000007d9, 13874 }, /* Greek_OMEGA */
- { 0x000007f9, 13886 }, /* Greek_omega */
- { 0x000007ab, 13898 }, /* Greek_OMEGAaccent */
- { 0x000007bb, 13916 }, /* Greek_omegaaccent */
- { 0x000007cf, 13934 }, /* Greek_OMICRON */
- { 0x000007ef, 13948 }, /* Greek_omicron */
- { 0x000007a7, 13962 }, /* Greek_OMICRONaccent */
- { 0x000007b7, 13982 }, /* Greek_omicronaccent */
- { 0x000007d6, 14002 }, /* Greek_PHI */
- { 0x000007f6, 14012 }, /* Greek_phi */
- { 0x000007d0, 14022 }, /* Greek_PI */
- { 0x000007f0, 14031 }, /* Greek_pi */
- { 0x000007d8, 14040 }, /* Greek_PSI */
- { 0x000007f8, 14050 }, /* Greek_psi */
- { 0x000007d1, 14060 }, /* Greek_RHO */
- { 0x000007f1, 14070 }, /* Greek_rho */
- { 0x000007d2, 14080 }, /* Greek_SIGMA */
- { 0x000007f2, 14092 }, /* Greek_sigma */
- { 0x0000ff7e, 14104 }, /* Greek_switch */
- { 0x000007d4, 14117 }, /* Greek_TAU */
- { 0x000007f4, 14127 }, /* Greek_tau */
- { 0x000007c8, 14137 }, /* Greek_THETA */
- { 0x000007e8, 14149 }, /* Greek_theta */
- { 0x000007d5, 14161 }, /* Greek_UPSILON */
- { 0x000007f5, 14175 }, /* Greek_upsilon */
- { 0x000007a8, 14189 }, /* Greek_UPSILONaccent */
- { 0x000007b8, 14209 }, /* Greek_upsilonaccent */
- { 0x000007ba, 14229 }, /* Greek_upsilonaccentdieresis */
- { 0x000007a9, 14257 }, /* Greek_UPSILONdieresis */
- { 0x000007b9, 14279 }, /* Greek_upsilondieresis */
- { 0x000007ce, 14301 }, /* Greek_XI */
- { 0x000007ee, 14310 }, /* Greek_xi */
- { 0x000007c6, 14319 }, /* Greek_ZETA */
- { 0x000007e6, 14330 }, /* Greek_zeta */
- { 0x100000be, 14341 }, /* guilder */
- { 0x000000ab, 14349 }, /* guillemotleft */
- { 0x000000bb, 14363 }, /* guillemotright */
- { 0x00000048, 14378 }, /* H */
- { 0x00000068, 14380 }, /* h */
- { 0x00000aa8, 14382 }, /* hairspace */
- { 0x0000ff31, 14392 }, /* Hangul */
- { 0x00000ebf, 14399 }, /* Hangul_A */
- { 0x00000ec0, 14408 }, /* Hangul_AE */
- { 0x00000ef6, 14418 }, /* Hangul_AraeA */
- { 0x00000ef7, 14431 }, /* Hangul_AraeAE */
- { 0x0000ff39, 14445 }, /* Hangul_Banja */
- { 0x00000eba, 14458 }, /* Hangul_Cieuc */
- { 0x0000ff37, 14471 }, /* Hangul_Codeinput */
- { 0x00000ea7, 14488 }, /* Hangul_Dikeud */
- { 0x00000ec4, 14502 }, /* Hangul_E */
- { 0x0000ff33, 14511 }, /* Hangul_End */
- { 0x00000ec3, 14522 }, /* Hangul_EO */
- { 0x00000ed1, 14532 }, /* Hangul_EU */
- { 0x0000ff34, 14542 }, /* Hangul_Hanja */
- { 0x00000ebe, 14555 }, /* Hangul_Hieuh */
- { 0x00000ed3, 14568 }, /* Hangul_I */
- { 0x00000eb7, 14577 }, /* Hangul_Ieung */
- { 0x00000eea, 14590 }, /* Hangul_J_Cieuc */
- { 0x00000eda, 14605 }, /* Hangul_J_Dikeud */
- { 0x00000eee, 14621 }, /* Hangul_J_Hieuh */
- { 0x00000ee8, 14636 }, /* Hangul_J_Ieung */
- { 0x00000ee9, 14651 }, /* Hangul_J_Jieuj */
- { 0x00000eeb, 14666 }, /* Hangul_J_Khieuq */
- { 0x00000ed4, 14682 }, /* Hangul_J_Kiyeog */
- { 0x00000ed6, 14698 }, /* Hangul_J_KiyeogSios */
- { 0x00000ef9, 14718 }, /* Hangul_J_KkogjiDalrinIeung */
- { 0x00000ee3, 14745 }, /* Hangul_J_Mieum */
- { 0x00000ed7, 14760 }, /* Hangul_J_Nieun */
- { 0x00000ed9, 14775 }, /* Hangul_J_NieunHieuh */
- { 0x00000ed8, 14795 }, /* Hangul_J_NieunJieuj */
- { 0x00000ef8, 14815 }, /* Hangul_J_PanSios */
- { 0x00000eed, 14832 }, /* Hangul_J_Phieuf */
- { 0x00000ee4, 14848 }, /* Hangul_J_Pieub */
- { 0x00000ee5, 14863 }, /* Hangul_J_PieubSios */
- { 0x00000edb, 14882 }, /* Hangul_J_Rieul */
- { 0x00000ee2, 14897 }, /* Hangul_J_RieulHieuh */
- { 0x00000edc, 14917 }, /* Hangul_J_RieulKiyeog */
- { 0x00000edd, 14938 }, /* Hangul_J_RieulMieum */
- { 0x00000ee1, 14958 }, /* Hangul_J_RieulPhieuf */
- { 0x00000ede, 14979 }, /* Hangul_J_RieulPieub */
- { 0x00000edf, 14999 }, /* Hangul_J_RieulSios */
- { 0x00000ee0, 15018 }, /* Hangul_J_RieulTieut */
- { 0x00000ee6, 15038 }, /* Hangul_J_Sios */
- { 0x00000ed5, 15052 }, /* Hangul_J_SsangKiyeog */
- { 0x00000ee7, 15073 }, /* Hangul_J_SsangSios */
- { 0x00000eec, 15092 }, /* Hangul_J_Tieut */
- { 0x00000efa, 15107 }, /* Hangul_J_YeorinHieuh */
- { 0x0000ff35, 15128 }, /* Hangul_Jamo */
- { 0x0000ff38, 15140 }, /* Hangul_Jeonja */
- { 0x00000eb8, 15154 }, /* Hangul_Jieuj */
- { 0x00000ebb, 15167 }, /* Hangul_Khieuq */
- { 0x00000ea1, 15181 }, /* Hangul_Kiyeog */
- { 0x00000ea3, 15195 }, /* Hangul_KiyeogSios */
- { 0x00000ef3, 15213 }, /* Hangul_KkogjiDalrinIeung */
- { 0x00000eb1, 15238 }, /* Hangul_Mieum */
- { 0x0000ff3d, 15251 }, /* Hangul_MultipleCandidate */
- { 0x00000ea4, 15276 }, /* Hangul_Nieun */
- { 0x00000ea6, 15289 }, /* Hangul_NieunHieuh */
- { 0x00000ea5, 15307 }, /* Hangul_NieunJieuj */
- { 0x00000ec7, 15325 }, /* Hangul_O */
- { 0x00000eca, 15334 }, /* Hangul_OE */
- { 0x00000ef2, 15344 }, /* Hangul_PanSios */
- { 0x00000ebd, 15359 }, /* Hangul_Phieuf */
- { 0x00000eb2, 15373 }, /* Hangul_Pieub */
- { 0x00000eb4, 15386 }, /* Hangul_PieubSios */
- { 0x0000ff3b, 15403 }, /* Hangul_PostHanja */
- { 0x0000ff3a, 15420 }, /* Hangul_PreHanja */
- { 0x0000ff3e, 15436 }, /* Hangul_PreviousCandidate */
- { 0x00000ea9, 15461 }, /* Hangul_Rieul */
- { 0x00000eb0, 15474 }, /* Hangul_RieulHieuh */
- { 0x00000eaa, 15492 }, /* Hangul_RieulKiyeog */
- { 0x00000eab, 15511 }, /* Hangul_RieulMieum */
- { 0x00000eaf, 15529 }, /* Hangul_RieulPhieuf */
- { 0x00000eac, 15548 }, /* Hangul_RieulPieub */
- { 0x00000ead, 15566 }, /* Hangul_RieulSios */
- { 0x00000eae, 15583 }, /* Hangul_RieulTieut */
- { 0x00000eef, 15601 }, /* Hangul_RieulYeorinHieuh */
- { 0x0000ff36, 15625 }, /* Hangul_Romaja */
- { 0x0000ff3c, 15639 }, /* Hangul_SingleCandidate */
- { 0x00000eb5, 15662 }, /* Hangul_Sios */
- { 0x0000ff3f, 15674 }, /* Hangul_Special */
- { 0x00000ea8, 15689 }, /* Hangul_SsangDikeud */
- { 0x00000eb9, 15708 }, /* Hangul_SsangJieuj */
- { 0x00000ea2, 15726 }, /* Hangul_SsangKiyeog */
- { 0x00000eb3, 15745 }, /* Hangul_SsangPieub */
- { 0x00000eb6, 15763 }, /* Hangul_SsangSios */
- { 0x0000ff32, 15780 }, /* Hangul_Start */
- { 0x00000ef0, 15793 }, /* Hangul_SunkyeongeumMieum */
- { 0x00000ef4, 15818 }, /* Hangul_SunkyeongeumPhieuf */
- { 0x00000ef1, 15844 }, /* Hangul_SunkyeongeumPieub */
- { 0x0000ff7e, 15869 }, /* Hangul_switch */
- { 0x00000ebc, 15883 }, /* Hangul_Tieut */
- { 0x00000ecc, 15896 }, /* Hangul_U */
- { 0x00000ec8, 15905 }, /* Hangul_WA */
- { 0x00000ec9, 15915 }, /* Hangul_WAE */
- { 0x00000ece, 15926 }, /* Hangul_WE */
- { 0x00000ecd, 15936 }, /* Hangul_WEO */
- { 0x00000ecf, 15947 }, /* Hangul_WI */
- { 0x00000ec1, 15957 }, /* Hangul_YA */
- { 0x00000ec2, 15967 }, /* Hangul_YAE */
- { 0x00000ec6, 15978 }, /* Hangul_YE */
- { 0x00000ec5, 15988 }, /* Hangul_YEO */
- { 0x00000ef5, 15999 }, /* Hangul_YeorinHieuh */
- { 0x00000ed2, 16018 }, /* Hangul_YI */
- { 0x00000ecb, 16028 }, /* Hangul_YO */
- { 0x00000ed0, 16038 }, /* Hangul_YU */
- { 0x0000ff29, 16048 }, /* Hankaku */
- { 0x000002a6, 16056 }, /* Hcircumflex */
- { 0x000002b6, 16068 }, /* hcircumflex */
- { 0x00000aee, 16080 }, /* heart */
- { 0x00000ce0, 16086 }, /* hebrew_aleph */
- { 0x00000cf2, 16099 }, /* hebrew_ayin */
- { 0x00000ce1, 16111 }, /* hebrew_bet */
- { 0x00000ce1, 16122 }, /* hebrew_beth */
- { 0x00000ce7, 16134 }, /* hebrew_chet */
- { 0x00000ce3, 16146 }, /* hebrew_dalet */
- { 0x00000ce3, 16159 }, /* hebrew_daleth */
- { 0x00000cdf, 16173 }, /* hebrew_doublelowline */
- { 0x00000cea, 16194 }, /* hebrew_finalkaph */
- { 0x00000ced, 16211 }, /* hebrew_finalmem */
- { 0x00000cef, 16227 }, /* hebrew_finalnun */
- { 0x00000cf3, 16243 }, /* hebrew_finalpe */
- { 0x00000cf5, 16258 }, /* hebrew_finalzade */
- { 0x00000cf5, 16275 }, /* hebrew_finalzadi */
- { 0x00000ce2, 16292 }, /* hebrew_gimel */
- { 0x00000ce2, 16305 }, /* hebrew_gimmel */
- { 0x00000ce4, 16319 }, /* hebrew_he */
- { 0x00000ce7, 16329 }, /* hebrew_het */
- { 0x00000ceb, 16340 }, /* hebrew_kaph */
- { 0x00000cf7, 16352 }, /* hebrew_kuf */
- { 0x00000cec, 16363 }, /* hebrew_lamed */
- { 0x00000cee, 16376 }, /* hebrew_mem */
- { 0x00000cf0, 16387 }, /* hebrew_nun */
- { 0x00000cf4, 16398 }, /* hebrew_pe */
- { 0x00000cf7, 16408 }, /* hebrew_qoph */
- { 0x00000cf8, 16420 }, /* hebrew_resh */
- { 0x00000cf1, 16432 }, /* hebrew_samech */
- { 0x00000cf1, 16446 }, /* hebrew_samekh */
- { 0x00000cf9, 16460 }, /* hebrew_shin */
- { 0x0000ff7e, 16472 }, /* Hebrew_switch */
- { 0x00000cfa, 16486 }, /* hebrew_taf */
- { 0x00000cfa, 16497 }, /* hebrew_taw */
- { 0x00000ce8, 16508 }, /* hebrew_tet */
- { 0x00000ce8, 16519 }, /* hebrew_teth */
- { 0x00000ce5, 16531 }, /* hebrew_waw */
- { 0x00000ce9, 16542 }, /* hebrew_yod */
- { 0x00000cf6, 16553 }, /* hebrew_zade */
- { 0x00000cf6, 16565 }, /* hebrew_zadi */
- { 0x00000ce6, 16577 }, /* hebrew_zain */
- { 0x00000ce6, 16589 }, /* hebrew_zayin */
- { 0x0000ff6a, 16602 }, /* Help */
- { 0x0000ff23, 16607 }, /* Henkan */
- { 0x0000ff23, 16614 }, /* Henkan_Mode */
- { 0x00000ada, 16626 }, /* hexagram */
- { 0x0000ff25, 16635 }, /* Hiragana */
- { 0x0000ff27, 16644 }, /* Hiragana_Katakana */
- { 0x0000ff50, 16662 }, /* Home */
- { 0x000008a3, 16667 }, /* horizconnector */
- { 0x000009ef, 16682 }, /* horizlinescan1 */
- { 0x000009f0, 16697 }, /* horizlinescan3 */
- { 0x000009f1, 16712 }, /* horizlinescan5 */
- { 0x000009f2, 16727 }, /* horizlinescan7 */
- { 0x000009f3, 16742 }, /* horizlinescan9 */
- { 0x1000ff74, 16757 }, /* hpBackTab */
- { 0x100000fc, 16767 }, /* hpblock */
- { 0x1000ff6f, 16775 }, /* hpClearLine */
- { 0x1000ff73, 16787 }, /* hpDeleteChar */
- { 0x1000ff71, 16800 }, /* hpDeleteLine */
- { 0x100000be, 16813 }, /* hpguilder */
- { 0x1000ff72, 16823 }, /* hpInsertChar */
- { 0x1000ff70, 16836 }, /* hpInsertLine */
- { 0x100000ee, 16849 }, /* hpIO */
- { 0x1000ff75, 16854 }, /* hpKP_BackTab */
- { 0x100000af, 16867 }, /* hplira */
- { 0x100000f6, 16874 }, /* hplongminus */
- { 0x1000ff48, 16886 }, /* hpModelock1 */
- { 0x1000ff49, 16898 }, /* hpModelock2 */
- { 0x100000a8, 16910 }, /* hpmute_acute */
- { 0x100000aa, 16923 }, /* hpmute_asciicircum */
- { 0x100000ac, 16942 }, /* hpmute_asciitilde */
- { 0x100000ab, 16960 }, /* hpmute_diaeresis */
- { 0x100000a9, 16977 }, /* hpmute_grave */
- { 0x1000ff6c, 16990 }, /* hpReset */
- { 0x1000ff6d, 16998 }, /* hpSystem */
- { 0x1000ff6e, 17007 }, /* hpUser */
- { 0x100000ee, 17014 }, /* hpYdiaeresis */
- { 0x000002a1, 17027 }, /* Hstroke */
- { 0x000002b1, 17035 }, /* hstroke */
- { 0x000009e2, 17043 }, /* ht */
- { 0x0000ffed, 17046 }, /* Hyper_L */
- { 0x0000ffee, 17054 }, /* Hyper_R */
- { 0x000000ad, 17062 }, /* hyphen */
- { 0x00000049, 17069 }, /* I */
- { 0x00000069, 17071 }, /* i */
- { 0x000002a9, 17073 }, /* Iabovedot */
- { 0x000000cd, 17083 }, /* Iacute */
- { 0x000000ed, 17090 }, /* iacute */
- { 0x01001eca, 17097 }, /* Ibelowdot */
- { 0x01001ecb, 17107 }, /* ibelowdot */
- { 0x0100012c, 17117 }, /* Ibreve */
- { 0x0100012d, 17124 }, /* ibreve */
- { 0x000000ce, 17131 }, /* Icircumflex */
- { 0x000000ee, 17143 }, /* icircumflex */
- { 0x000008cf, 17155 }, /* identical */
- { 0x000000cf, 17165 }, /* Idiaeresis */
- { 0x000000ef, 17176 }, /* idiaeresis */
- { 0x000002b9, 17187 }, /* idotless */
- { 0x000008cd, 17196 }, /* ifonlyif */
- { 0x000000cc, 17205 }, /* Igrave */
- { 0x000000ec, 17212 }, /* igrave */
- { 0x01001ec8, 17219 }, /* Ihook */
- { 0x01001ec9, 17225 }, /* ihook */
- { 0x000003cf, 17231 }, /* Imacron */
- { 0x000003ef, 17239 }, /* imacron */
- { 0x000008ce, 17247 }, /* implies */
- { 0x000008da, 17255 }, /* includedin */
- { 0x000008db, 17266 }, /* includes */
- { 0x000008c2, 17275 }, /* infinity */
- { 0x0000ff63, 17284 }, /* Insert */
- { 0x1000ff72, 17291 }, /* InsertChar */
- { 0x1000ff70, 17302 }, /* InsertLine */
- { 0x000008bf, 17313 }, /* integral */
- { 0x000008dc, 17322 }, /* intersection */
- { 0x100000ee, 17335 }, /* IO */
- { 0x000003c7, 17338 }, /* Iogonek */
- { 0x000003e7, 17346 }, /* iogonek */
- { 0x0000fe33, 17354 }, /* ISO_Center_Object */
- { 0x0000fe30, 17372 }, /* ISO_Continuous_Underline */
- { 0x0000fe31, 17397 }, /* ISO_Discontinuous_Underline */
- { 0x0000fe32, 17425 }, /* ISO_Emphasize */
- { 0x0000fe34, 17439 }, /* ISO_Enter */
- { 0x0000fe2f, 17449 }, /* ISO_Fast_Cursor_Down */
- { 0x0000fe2c, 17470 }, /* ISO_Fast_Cursor_Left */
- { 0x0000fe2d, 17491 }, /* ISO_Fast_Cursor_Right */
- { 0x0000fe2e, 17513 }, /* ISO_Fast_Cursor_Up */
- { 0x0000fe0c, 17532 }, /* ISO_First_Group */
- { 0x0000fe0d, 17548 }, /* ISO_First_Group_Lock */
- { 0x0000fe06, 17569 }, /* ISO_Group_Latch */
- { 0x0000fe07, 17585 }, /* ISO_Group_Lock */
- { 0x0000ff7e, 17600 }, /* ISO_Group_Shift */
- { 0x0000fe0e, 17616 }, /* ISO_Last_Group */
- { 0x0000fe0f, 17631 }, /* ISO_Last_Group_Lock */
- { 0x0000fe20, 17651 }, /* ISO_Left_Tab */
- { 0x0000fe02, 17664 }, /* ISO_Level2_Latch */
- { 0x0000fe04, 17681 }, /* ISO_Level3_Latch */
- { 0x0000fe05, 17698 }, /* ISO_Level3_Lock */
- { 0x0000fe03, 17714 }, /* ISO_Level3_Shift */
- { 0x0000fe12, 17731 }, /* ISO_Level5_Latch */
- { 0x0000fe13, 17748 }, /* ISO_Level5_Lock */
- { 0x0000fe11, 17764 }, /* ISO_Level5_Shift */
- { 0x0000fe01, 17781 }, /* ISO_Lock */
- { 0x0000fe22, 17790 }, /* ISO_Move_Line_Down */
- { 0x0000fe21, 17809 }, /* ISO_Move_Line_Up */
- { 0x0000fe08, 17826 }, /* ISO_Next_Group */
- { 0x0000fe09, 17841 }, /* ISO_Next_Group_Lock */
- { 0x0000fe24, 17861 }, /* ISO_Partial_Line_Down */
- { 0x0000fe23, 17883 }, /* ISO_Partial_Line_Up */
- { 0x0000fe25, 17903 }, /* ISO_Partial_Space_Left */
- { 0x0000fe26, 17926 }, /* ISO_Partial_Space_Right */
- { 0x0000fe0a, 17950 }, /* ISO_Prev_Group */
- { 0x0000fe0b, 17965 }, /* ISO_Prev_Group_Lock */
- { 0x0000fe2b, 17985 }, /* ISO_Release_Both_Margins */
- { 0x0000fe29, 18010 }, /* ISO_Release_Margin_Left */
- { 0x0000fe2a, 18034 }, /* ISO_Release_Margin_Right */
- { 0x0000fe27, 18059 }, /* ISO_Set_Margin_Left */
- { 0x0000fe28, 18079 }, /* ISO_Set_Margin_Right */
- { 0x000003a5, 18100 }, /* Itilde */
- { 0x000003b5, 18107 }, /* itilde */
- { 0x0000004a, 18114 }, /* J */
- { 0x0000006a, 18116 }, /* j */
- { 0x000002ac, 18118 }, /* Jcircumflex */
- { 0x000002bc, 18130 }, /* jcircumflex */
- { 0x00000bca, 18142 }, /* jot */
- { 0x0000004b, 18146 }, /* K */
- { 0x0000006b, 18148 }, /* k */
- { 0x000004a7, 18150 }, /* kana_a */
- { 0x000004b1, 18157 }, /* kana_A */
- { 0x000004c1, 18164 }, /* kana_CHI */
- { 0x000004a3, 18173 }, /* kana_closingbracket */
- { 0x000004a4, 18193 }, /* kana_comma */
- { 0x000004a5, 18204 }, /* kana_conjunctive */
- { 0x000004aa, 18221 }, /* kana_e */
- { 0x000004b4, 18228 }, /* kana_E */
- { 0x000004cc, 18235 }, /* kana_FU */
- { 0x000004a1, 18243 }, /* kana_fullstop */
- { 0x000004ca, 18257 }, /* kana_HA */
- { 0x000004cd, 18265 }, /* kana_HE */
- { 0x000004cb, 18273 }, /* kana_HI */
- { 0x000004ce, 18281 }, /* kana_HO */
- { 0x000004cc, 18289 }, /* kana_HU */
- { 0x000004a8, 18297 }, /* kana_i */
- { 0x000004b2, 18304 }, /* kana_I */
- { 0x000004b6, 18311 }, /* kana_KA */
- { 0x000004b9, 18319 }, /* kana_KE */
- { 0x000004b7, 18327 }, /* kana_KI */
- { 0x000004ba, 18335 }, /* kana_KO */
- { 0x000004b8, 18343 }, /* kana_KU */
- { 0x0000ff2d, 18351 }, /* Kana_Lock */
- { 0x000004cf, 18361 }, /* kana_MA */
- { 0x000004d2, 18369 }, /* kana_ME */
- { 0x000004d0, 18377 }, /* kana_MI */
- { 0x000004a5, 18385 }, /* kana_middledot */
- { 0x000004d3, 18400 }, /* kana_MO */
- { 0x000004d1, 18408 }, /* kana_MU */
- { 0x000004dd, 18416 }, /* kana_N */
- { 0x000004c5, 18423 }, /* kana_NA */
- { 0x000004c8, 18431 }, /* kana_NE */
- { 0x000004c6, 18439 }, /* kana_NI */
- { 0x000004c9, 18447 }, /* kana_NO */
- { 0x000004c7, 18455 }, /* kana_NU */
- { 0x000004ab, 18463 }, /* kana_o */
- { 0x000004b5, 18470 }, /* kana_O */
- { 0x000004a2, 18477 }, /* kana_openingbracket */
- { 0x000004d7, 18497 }, /* kana_RA */
- { 0x000004da, 18505 }, /* kana_RE */
- { 0x000004d8, 18513 }, /* kana_RI */
- { 0x000004db, 18521 }, /* kana_RO */
- { 0x000004d9, 18529 }, /* kana_RU */
- { 0x000004bb, 18537 }, /* kana_SA */
- { 0x000004be, 18545 }, /* kana_SE */
- { 0x000004bc, 18553 }, /* kana_SHI */
- { 0x0000ff2e, 18562 }, /* Kana_Shift */
- { 0x000004bf, 18573 }, /* kana_SO */
- { 0x000004bd, 18581 }, /* kana_SU */
- { 0x0000ff7e, 18589 }, /* kana_switch */
- { 0x000004c0, 18601 }, /* kana_TA */
- { 0x000004c3, 18609 }, /* kana_TE */
- { 0x000004c1, 18617 }, /* kana_TI */
- { 0x000004c4, 18625 }, /* kana_TO */
- { 0x000004af, 18633 }, /* kana_tsu */
- { 0x000004c2, 18642 }, /* kana_TSU */
- { 0x000004af, 18651 }, /* kana_tu */
- { 0x000004c2, 18659 }, /* kana_TU */
- { 0x000004a9, 18667 }, /* kana_u */
- { 0x000004b3, 18674 }, /* kana_U */
- { 0x000004dc, 18681 }, /* kana_WA */
- { 0x000004a6, 18689 }, /* kana_WO */
- { 0x000004ac, 18697 }, /* kana_ya */
- { 0x000004d4, 18705 }, /* kana_YA */
- { 0x000004ae, 18713 }, /* kana_yo */
- { 0x000004d6, 18721 }, /* kana_YO */
- { 0x000004ad, 18729 }, /* kana_yu */
- { 0x000004d5, 18737 }, /* kana_YU */
- { 0x0000ff21, 18745 }, /* Kanji */
- { 0x0000ff37, 18751 }, /* Kanji_Bangou */
- { 0x000003a2, 18764 }, /* kappa */
- { 0x0000ff26, 18770 }, /* Katakana */
- { 0x000003d3, 18779 }, /* Kcedilla */
- { 0x000003f3, 18788 }, /* kcedilla */
- { 0x00000eff, 18797 }, /* Korean_Won */
- { 0x0000ffb0, 18808 }, /* KP_0 */
- { 0x0000ffb1, 18813 }, /* KP_1 */
- { 0x0000ffb2, 18818 }, /* KP_2 */
- { 0x0000ffb3, 18823 }, /* KP_3 */
- { 0x0000ffb4, 18828 }, /* KP_4 */
- { 0x0000ffb5, 18833 }, /* KP_5 */
- { 0x0000ffb6, 18838 }, /* KP_6 */
- { 0x0000ffb7, 18843 }, /* KP_7 */
- { 0x0000ffb8, 18848 }, /* KP_8 */
- { 0x0000ffb9, 18853 }, /* KP_9 */
- { 0x0000ffab, 18858 }, /* KP_Add */
- { 0x1000ff75, 18865 }, /* KP_BackTab */
- { 0x0000ff9d, 18876 }, /* KP_Begin */
- { 0x0000ffae, 18885 }, /* KP_Decimal */
- { 0x0000ff9f, 18896 }, /* KP_Delete */
- { 0x0000ffaf, 18906 }, /* KP_Divide */
- { 0x0000ff99, 18916 }, /* KP_Down */
- { 0x0000ff9c, 18924 }, /* KP_End */
- { 0x0000ff8d, 18931 }, /* KP_Enter */
- { 0x0000ffbd, 18940 }, /* KP_Equal */
- { 0x0000ff91, 18949 }, /* KP_F1 */
- { 0x0000ff92, 18955 }, /* KP_F2 */
- { 0x0000ff93, 18961 }, /* KP_F3 */
- { 0x0000ff94, 18967 }, /* KP_F4 */
- { 0x0000ff95, 18973 }, /* KP_Home */
- { 0x0000ff9e, 18981 }, /* KP_Insert */
- { 0x0000ff96, 18991 }, /* KP_Left */
- { 0x0000ffaa, 18999 }, /* KP_Multiply */
- { 0x0000ff9b, 19011 }, /* KP_Next */
- { 0x0000ff9b, 19019 }, /* KP_Page_Down */
- { 0x0000ff9a, 19032 }, /* KP_Page_Up */
- { 0x0000ff9a, 19043 }, /* KP_Prior */
- { 0x0000ff98, 19052 }, /* KP_Right */
- { 0x0000ffac, 19061 }, /* KP_Separator */
- { 0x0000ff80, 19074 }, /* KP_Space */
- { 0x0000ffad, 19083 }, /* KP_Subtract */
- { 0x0000ff89, 19095 }, /* KP_Tab */
- { 0x0000ff97, 19102 }, /* KP_Up */
- { 0x000003a2, 19108 }, /* kra */
- { 0x0000004c, 19112 }, /* L */
- { 0x0000006c, 19114 }, /* l */
- { 0x0000ffc8, 19116 }, /* L1 */
- { 0x0000ffd1, 19119 }, /* L10 */
- { 0x0000ffc9, 19123 }, /* L2 */
- { 0x0000ffca, 19126 }, /* L3 */
- { 0x0000ffcb, 19129 }, /* L4 */
- { 0x0000ffcc, 19132 }, /* L5 */
- { 0x0000ffcd, 19135 }, /* L6 */
- { 0x0000ffce, 19138 }, /* L7 */
- { 0x0000ffcf, 19141 }, /* L8 */
- { 0x0000ffd0, 19144 }, /* L9 */
- { 0x000001c5, 19147 }, /* Lacute */
- { 0x000001e5, 19154 }, /* lacute */
- { 0x0000fed4, 19161 }, /* Last_Virtual_Screen */
- { 0x00000ad9, 19181 }, /* latincross */
- { 0x01001e36, 19192 }, /* Lbelowdot */
- { 0x01001e37, 19202 }, /* lbelowdot */
- { 0x000001a5, 19212 }, /* Lcaron */
- { 0x000001b5, 19219 }, /* lcaron */
- { 0x000003a6, 19226 }, /* Lcedilla */
- { 0x000003b6, 19235 }, /* lcedilla */
- { 0x0000ff51, 19244 }, /* Left */
- { 0x00000abc, 19249 }, /* leftanglebracket */
- { 0x000008fb, 19266 }, /* leftarrow */
- { 0x00000ba3, 19276 }, /* leftcaret */
- { 0x00000ad2, 19286 }, /* leftdoublequotemark */
- { 0x000008af, 19306 }, /* leftmiddlecurlybrace */
- { 0x00000acc, 19327 }, /* leftopentriangle */
- { 0x00000aea, 19344 }, /* leftpointer */
- { 0x000008a1, 19356 }, /* leftradical */
- { 0x00000bda, 19368 }, /* leftshoe */
- { 0x00000ad0, 19377 }, /* leftsinglequotemark */
- { 0x000009f4, 19397 }, /* leftt */
- { 0x00000bdc, 19403 }, /* lefttack */
- { 0x0000003c, 19412 }, /* less */
- { 0x000008bc, 19417 }, /* lessthanequal */
- { 0x000009e5, 19431 }, /* lf */
- { 0x0000ff0a, 19434 }, /* Linefeed */
- { 0x100000af, 19443 }, /* lira */
- { 0x010020a4, 19448 }, /* LiraSign */
- { 0x000008de, 19457 }, /* logicaland */
- { 0x000008df, 19468 }, /* logicalor */
- { 0x100000f6, 19478 }, /* longminus */
- { 0x000009ed, 19488 }, /* lowleftcorner */
- { 0x000009ea, 19502 }, /* lowrightcorner */
- { 0x000001a3, 19517 }, /* Lstroke */
- { 0x000001b3, 19525 }, /* lstroke */
- { 0x0000004d, 19533 }, /* M */
- { 0x0000006d, 19535 }, /* m */
- { 0x01001e40, 19537 }, /* Mabovedot */
- { 0x01001e41, 19547 }, /* mabovedot */
- { 0x000006a5, 19557 }, /* Macedonia_dse */
- { 0x000006b5, 19571 }, /* Macedonia_DSE */
- { 0x000006a2, 19585 }, /* Macedonia_gje */
- { 0x000006b2, 19599 }, /* Macedonia_GJE */
- { 0x000006ac, 19613 }, /* Macedonia_kje */
- { 0x000006bc, 19627 }, /* Macedonia_KJE */
- { 0x000000af, 19641 }, /* macron */
- { 0x0000ff3e, 19648 }, /* Mae_Koho */
- { 0x00000af7, 19657 }, /* malesymbol */
- { 0x00000af0, 19668 }, /* maltesecross */
- { 0x00000abf, 19681 }, /* marker */
- { 0x000000ba, 19688 }, /* masculine */
- { 0x0000ff2c, 19698 }, /* Massyo */
- { 0x0000ff67, 19705 }, /* Menu */
- { 0x0000ffe7, 19710 }, /* Meta_L */
- { 0x0000ffe8, 19717 }, /* Meta_R */
- { 0x010020a5, 19724 }, /* MillSign */
- { 0x0000002d, 19733 }, /* minus */
- { 0x00000ad6, 19739 }, /* minutes */
- { 0x0000ff7e, 19747 }, /* Mode_switch */
- { 0x0000fe77, 19759 }, /* MouseKeys_Accel_Enable */
- { 0x0000fe76, 19782 }, /* MouseKeys_Enable */
- { 0x000000b5, 19799 }, /* mu */
- { 0x0000ff22, 19802 }, /* Muhenkan */
- { 0x0000ff20, 19811 }, /* Multi_key */
- { 0x0000ff3d, 19821 }, /* MultipleCandidate */
- { 0x000000d7, 19839 }, /* multiply */
- { 0x00000af6, 19848 }, /* musicalflat */
- { 0x00000af5, 19860 }, /* musicalsharp */
- { 0x100000a8, 19873 }, /* mute_acute */
- { 0x100000aa, 19884 }, /* mute_asciicircum */
- { 0x100000ac, 19901 }, /* mute_asciitilde */
- { 0x100000ab, 19917 }, /* mute_diaeresis */
- { 0x100000a9, 19932 }, /* mute_grave */
- { 0x0000004e, 19943 }, /* N */
- { 0x0000006e, 19945 }, /* n */
- { 0x000008c5, 19947 }, /* nabla */
- { 0x000001d1, 19953 }, /* Nacute */
- { 0x000001f1, 19960 }, /* nacute */
- { 0x010020a6, 19967 }, /* NairaSign */
- { 0x000001d2, 19977 }, /* Ncaron */
- { 0x000001f2, 19984 }, /* ncaron */
- { 0x000003d1, 19991 }, /* Ncedilla */
- { 0x000003f1, 20000 }, /* ncedilla */
- { 0x010020aa, 20009 }, /* NewSheqelSign */
- { 0x0000ff56, 20023 }, /* Next */
- { 0x0000fed2, 20028 }, /* Next_Virtual_Screen */
- { 0x01002089, 20048 }, /* ninesubscript */
- { 0x01002079, 20062 }, /* ninesuperior */
- { 0x000009e8, 20075 }, /* nl */
- { 0x000000a0, 20078 }, /* nobreakspace */
- { 0x00000000, 20091 }, /* NoSymbol */
- { 0x01002247, 20100 }, /* notapproxeq */
- { 0x01002209, 20112 }, /* notelementof */
- { 0x000008bd, 20125 }, /* notequal */
- { 0x01002262, 20134 }, /* notidentical */
- { 0x000000ac, 20147 }, /* notsign */
- { 0x000000d1, 20155 }, /* Ntilde */
- { 0x000000f1, 20162 }, /* ntilde */
- { 0x0000ff7f, 20169 }, /* Num_Lock */
- { 0x00000023, 20178 }, /* numbersign */
- { 0x000006b0, 20189 }, /* numerosign */
- { 0x0000004f, 20200 }, /* O */
- { 0x0000006f, 20202 }, /* o */
- { 0x000000d3, 20204 }, /* Oacute */
- { 0x000000f3, 20211 }, /* oacute */
- { 0x0100019f, 20218 }, /* Obarred */
- { 0x01000275, 20226 }, /* obarred */
- { 0x01001ecc, 20234 }, /* Obelowdot */
- { 0x01001ecd, 20244 }, /* obelowdot */
- { 0x010001d1, 20254 }, /* Ocaron */
- { 0x010001d2, 20261 }, /* ocaron */
- { 0x000000d4, 20268 }, /* Ocircumflex */
- { 0x000000f4, 20280 }, /* ocircumflex */
- { 0x01001ed0, 20292 }, /* Ocircumflexacute */
- { 0x01001ed1, 20309 }, /* ocircumflexacute */
- { 0x01001ed8, 20326 }, /* Ocircumflexbelowdot */
- { 0x01001ed9, 20346 }, /* ocircumflexbelowdot */
- { 0x01001ed2, 20366 }, /* Ocircumflexgrave */
- { 0x01001ed3, 20383 }, /* ocircumflexgrave */
- { 0x01001ed4, 20400 }, /* Ocircumflexhook */
- { 0x01001ed5, 20416 }, /* ocircumflexhook */
- { 0x01001ed6, 20432 }, /* Ocircumflextilde */
- { 0x01001ed7, 20449 }, /* ocircumflextilde */
- { 0x000000d6, 20466 }, /* Odiaeresis */
- { 0x000000f6, 20477 }, /* odiaeresis */
- { 0x000001d5, 20488 }, /* Odoubleacute */
- { 0x000001f5, 20501 }, /* odoubleacute */
- { 0x000013bc, 20514 }, /* OE */
- { 0x000013bd, 20517 }, /* oe */
- { 0x000001b2, 20520 }, /* ogonek */
- { 0x000000d2, 20527 }, /* Ograve */
- { 0x000000f2, 20534 }, /* ograve */
- { 0x01001ece, 20541 }, /* Ohook */
- { 0x01001ecf, 20547 }, /* ohook */
- { 0x010001a0, 20553 }, /* Ohorn */
- { 0x010001a1, 20559 }, /* ohorn */
- { 0x01001eda, 20565 }, /* Ohornacute */
- { 0x01001edb, 20576 }, /* ohornacute */
- { 0x01001ee2, 20587 }, /* Ohornbelowdot */
- { 0x01001ee3, 20601 }, /* ohornbelowdot */
- { 0x01001edc, 20615 }, /* Ohorngrave */
- { 0x01001edd, 20626 }, /* ohorngrave */
- { 0x01001ede, 20637 }, /* Ohornhook */
- { 0x01001edf, 20647 }, /* ohornhook */
- { 0x01001ee0, 20657 }, /* Ohorntilde */
- { 0x01001ee1, 20668 }, /* ohorntilde */
- { 0x000003d2, 20679 }, /* Omacron */
- { 0x000003f2, 20687 }, /* omacron */
- { 0x00000ac3, 20695 }, /* oneeighth */
- { 0x00000ab2, 20705 }, /* onefifth */
- { 0x000000bd, 20714 }, /* onehalf */
- { 0x000000bc, 20722 }, /* onequarter */
- { 0x00000ab6, 20733 }, /* onesixth */
- { 0x01002081, 20742 }, /* onesubscript */
- { 0x000000b9, 20755 }, /* onesuperior */
- { 0x00000ab0, 20767 }, /* onethird */
- { 0x000000d8, 20776 }, /* Ooblique */
- { 0x000000f8, 20785 }, /* ooblique */
- { 0x00000ae2, 20794 }, /* openrectbullet */
- { 0x00000ae5, 20809 }, /* openstar */
- { 0x00000ae4, 20818 }, /* opentribulletdown */
- { 0x00000ae3, 20836 }, /* opentribulletup */
- { 0x000000aa, 20852 }, /* ordfeminine */
- { 0x1004ff44, 20864 }, /* osfActivate */
- { 0x1004ff31, 20876 }, /* osfAddMode */
- { 0x1004ff08, 20887 }, /* osfBackSpace */
- { 0x1004ff07, 20900 }, /* osfBackTab */
- { 0x1004ff5a, 20911 }, /* osfBeginData */
- { 0x1004ff58, 20924 }, /* osfBeginLine */
- { 0x1004ff69, 20937 }, /* osfCancel */
- { 0x1004ff0b, 20947 }, /* osfClear */
- { 0x1004ff02, 20956 }, /* osfCopy */
- { 0x1004ff03, 20964 }, /* osfCut */
- { 0x1004ffff, 20971 }, /* osfDelete */
- { 0x1004ff72, 20981 }, /* osfDeselectAll */
- { 0x1004ff54, 20996 }, /* osfDown */
- { 0x1004ff59, 21004 }, /* osfEndData */
- { 0x1004ff57, 21015 }, /* osfEndLine */
- { 0x1004ff1b, 21026 }, /* osfEscape */
- { 0x1004ff74, 21036 }, /* osfExtend */
- { 0x1004ff6a, 21046 }, /* osfHelp */
- { 0x1004ff63, 21054 }, /* osfInsert */
- { 0x1004ff51, 21064 }, /* osfLeft */
- { 0x1004ff67, 21072 }, /* osfMenu */
- { 0x1004ff45, 21080 }, /* osfMenuBar */
- { 0x1004ff5e, 21091 }, /* osfNextField */
- { 0x1004ff5c, 21104 }, /* osfNextMenu */
- { 0x1004ff42, 21116 }, /* osfPageDown */
- { 0x1004ff40, 21128 }, /* osfPageLeft */
- { 0x1004ff43, 21140 }, /* osfPageRight */
- { 0x1004ff41, 21153 }, /* osfPageUp */
- { 0x1004ff04, 21163 }, /* osfPaste */
- { 0x1004ff5d, 21172 }, /* osfPrevField */
- { 0x1004ff5b, 21185 }, /* osfPrevMenu */
- { 0x1004ff32, 21197 }, /* osfPrimaryPaste */
- { 0x1004ff33, 21213 }, /* osfQuickPaste */
- { 0x1004ff73, 21227 }, /* osfReselect */
- { 0x1004ff78, 21239 }, /* osfRestore */
- { 0x1004ff53, 21250 }, /* osfRight */
- { 0x1004ff60, 21259 }, /* osfSelect */
- { 0x1004ff71, 21269 }, /* osfSelectAll */
- { 0x1004ff65, 21282 }, /* osfUndo */
- { 0x1004ff52, 21290 }, /* osfUp */
- { 0x000000d8, 21296 }, /* Oslash */
- { 0x000000f8, 21303 }, /* oslash */
- { 0x000000d5, 21310 }, /* Otilde */
- { 0x000000f5, 21317 }, /* otilde */
- { 0x00000bc0, 21324 }, /* overbar */
- { 0x0000fe78, 21332 }, /* Overlay1_Enable */
- { 0x0000fe79, 21348 }, /* Overlay2_Enable */
- { 0x0000047e, 21364 }, /* overline */
- { 0x00000050, 21373 }, /* P */
- { 0x00000070, 21375 }, /* p */
- { 0x01001e56, 21377 }, /* Pabovedot */
- { 0x01001e57, 21387 }, /* pabovedot */
- { 0x0000ff56, 21397 }, /* Page_Down */
- { 0x0000ff55, 21407 }, /* Page_Up */
- { 0x000000b6, 21415 }, /* paragraph */
- { 0x00000028, 21425 }, /* parenleft */
- { 0x00000029, 21435 }, /* parenright */
- { 0x01002202, 21446 }, /* partdifferential */
- { 0x000008ef, 21463 }, /* partialderivative */
- { 0x0000ff13, 21481 }, /* Pause */
- { 0x00000025, 21487 }, /* percent */
- { 0x0000002e, 21495 }, /* period */
- { 0x000000b7, 21502 }, /* periodcentered */
- { 0x00000ad5, 21517 }, /* permille */
- { 0x010020a7, 21526 }, /* PesetaSign */
- { 0x00000afb, 21537 }, /* phonographcopyright */
- { 0x0000002b, 21557 }, /* plus */
- { 0x000000b1, 21562 }, /* plusminus */
- { 0x0000fefa, 21572 }, /* Pointer_Accelerate */
- { 0x0000fee9, 21591 }, /* Pointer_Button1 */
- { 0x0000feea, 21607 }, /* Pointer_Button2 */
- { 0x0000feeb, 21623 }, /* Pointer_Button3 */
- { 0x0000feec, 21639 }, /* Pointer_Button4 */
- { 0x0000feed, 21655 }, /* Pointer_Button5 */
- { 0x0000fee8, 21671 }, /* Pointer_Button_Dflt */
- { 0x0000feef, 21691 }, /* Pointer_DblClick1 */
- { 0x0000fef0, 21709 }, /* Pointer_DblClick2 */
- { 0x0000fef1, 21727 }, /* Pointer_DblClick3 */
- { 0x0000fef2, 21745 }, /* Pointer_DblClick4 */
- { 0x0000fef3, 21763 }, /* Pointer_DblClick5 */
- { 0x0000feee, 21781 }, /* Pointer_DblClick_Dflt */
- { 0x0000fefb, 21803 }, /* Pointer_DfltBtnNext */
- { 0x0000fefc, 21823 }, /* Pointer_DfltBtnPrev */
- { 0x0000fee3, 21843 }, /* Pointer_Down */
- { 0x0000fee6, 21856 }, /* Pointer_DownLeft */
- { 0x0000fee7, 21873 }, /* Pointer_DownRight */
- { 0x0000fef5, 21891 }, /* Pointer_Drag1 */
- { 0x0000fef6, 21905 }, /* Pointer_Drag2 */
- { 0x0000fef7, 21919 }, /* Pointer_Drag3 */
- { 0x0000fef8, 21933 }, /* Pointer_Drag4 */
- { 0x0000fefd, 21947 }, /* Pointer_Drag5 */
- { 0x0000fef4, 21961 }, /* Pointer_Drag_Dflt */
- { 0x0000fef9, 21979 }, /* Pointer_EnableKeys */
- { 0x0000fee0, 21998 }, /* Pointer_Left */
- { 0x0000fee1, 22011 }, /* Pointer_Right */
- { 0x0000fee2, 22025 }, /* Pointer_Up */
- { 0x0000fee4, 22036 }, /* Pointer_UpLeft */
- { 0x0000fee5, 22051 }, /* Pointer_UpRight */
- { 0x00000ad4, 22067 }, /* prescription */
- { 0x0000fed1, 22080 }, /* Prev_Virtual_Screen */
- { 0x0000ff3e, 22100 }, /* PreviousCandidate */
- { 0x0000ff61, 22118 }, /* Print */
- { 0x0000ff55, 22124 }, /* Prior */
- { 0x000004b0, 22130 }, /* prolongedsound */
- { 0x00000aa6, 22145 }, /* punctspace */
- { 0x00000051, 22156 }, /* Q */
- { 0x00000071, 22158 }, /* q */
- { 0x00000bcc, 22160 }, /* quad */
- { 0x0000003f, 22165 }, /* question */
- { 0x000000bf, 22174 }, /* questiondown */
- { 0x00000022, 22187 }, /* quotedbl */
- { 0x00000060, 22196 }, /* quoteleft */
- { 0x00000027, 22206 }, /* quoteright */
- { 0x00000052, 22217 }, /* R */
- { 0x00000072, 22219 }, /* r */
- { 0x0000ffd2, 22221 }, /* R1 */
- { 0x0000ffdb, 22224 }, /* R10 */
- { 0x0000ffdc, 22228 }, /* R11 */
- { 0x0000ffdd, 22232 }, /* R12 */
- { 0x0000ffde, 22236 }, /* R13 */
- { 0x0000ffdf, 22240 }, /* R14 */
- { 0x0000ffe0, 22244 }, /* R15 */
- { 0x0000ffd3, 22248 }, /* R2 */
- { 0x0000ffd4, 22251 }, /* R3 */
- { 0x0000ffd5, 22254 }, /* R4 */
- { 0x0000ffd6, 22257 }, /* R5 */
- { 0x0000ffd7, 22260 }, /* R6 */
- { 0x0000ffd8, 22263 }, /* R7 */
- { 0x0000ffd9, 22266 }, /* R8 */
- { 0x0000ffda, 22269 }, /* R9 */
- { 0x000001c0, 22272 }, /* Racute */
- { 0x000001e0, 22279 }, /* racute */
- { 0x000008d6, 22286 }, /* radical */
- { 0x000001d8, 22294 }, /* Rcaron */
- { 0x000001f8, 22301 }, /* rcaron */
- { 0x000003a3, 22308 }, /* Rcedilla */
- { 0x000003b3, 22317 }, /* rcedilla */
- { 0x0000ff66, 22326 }, /* Redo */
- { 0x000000ae, 22331 }, /* registered */
- { 0x0000fe72, 22342 }, /* RepeatKeys_Enable */
- { 0x1000ff6c, 22360 }, /* Reset */
- { 0x0000ff0d, 22366 }, /* Return */
- { 0x0000ff53, 22373 }, /* Right */
- { 0x00000abe, 22379 }, /* rightanglebracket */
- { 0x000008fd, 22397 }, /* rightarrow */
- { 0x00000ba6, 22408 }, /* rightcaret */
- { 0x00000ad3, 22419 }, /* rightdoublequotemark */
- { 0x000008b0, 22440 }, /* rightmiddlecurlybrace */
- { 0x000008b7, 22462 }, /* rightmiddlesummation */
- { 0x00000acd, 22483 }, /* rightopentriangle */
- { 0x00000aeb, 22501 }, /* rightpointer */
- { 0x00000bd8, 22514 }, /* rightshoe */
- { 0x00000ad1, 22524 }, /* rightsinglequotemark */
- { 0x000009f5, 22545 }, /* rightt */
- { 0x00000bfc, 22552 }, /* righttack */
- { 0x0000ff24, 22562 }, /* Romaji */
- { 0x010020a8, 22569 }, /* RupeeSign */
- { 0x00000053, 22579 }, /* S */
- { 0x00000073, 22581 }, /* s */
- { 0x01001e60, 22583 }, /* Sabovedot */
- { 0x01001e61, 22593 }, /* sabovedot */
- { 0x000001a6, 22603 }, /* Sacute */
- { 0x000001b6, 22610 }, /* sacute */
- { 0x000001a9, 22617 }, /* Scaron */
- { 0x000001b9, 22624 }, /* scaron */
- { 0x000001aa, 22631 }, /* Scedilla */
- { 0x000001ba, 22640 }, /* scedilla */
- { 0x0100018f, 22649 }, /* SCHWA */
- { 0x01000259, 22655 }, /* schwa */
- { 0x000002de, 22661 }, /* Scircumflex */
- { 0x000002fe, 22673 }, /* scircumflex */
- { 0x0000ff7e, 22685 }, /* script_switch */
- { 0x0000ff14, 22699 }, /* Scroll_Lock */
- { 0x00000ad7, 22711 }, /* seconds */
- { 0x000000a7, 22719 }, /* section */
- { 0x0000ff60, 22727 }, /* Select */
- { 0x0000003b, 22734 }, /* semicolon */
- { 0x000004df, 22744 }, /* semivoicedsound */
- { 0x000006a1, 22760 }, /* Serbian_dje */
- { 0x000006b1, 22772 }, /* Serbian_DJE */
- { 0x000006af, 22784 }, /* Serbian_dze */
- { 0x000006bf, 22796 }, /* Serbian_DZE */
- { 0x000006a8, 22808 }, /* Serbian_je */
- { 0x000006b8, 22819 }, /* Serbian_JE */
- { 0x000006a9, 22830 }, /* Serbian_lje */
- { 0x000006b9, 22842 }, /* Serbian_LJE */
- { 0x000006aa, 22854 }, /* Serbian_nje */
- { 0x000006ba, 22866 }, /* Serbian_NJE */
- { 0x000006ab, 22878 }, /* Serbian_tshe */
- { 0x000006bb, 22891 }, /* Serbian_TSHE */
- { 0x00000ac6, 22904 }, /* seveneighths */
- { 0x01002087, 22917 }, /* sevensubscript */
- { 0x01002077, 22932 }, /* sevensuperior */
- { 0x0000ffe1, 22946 }, /* Shift_L */
- { 0x0000ffe6, 22954 }, /* Shift_Lock */
- { 0x0000ffe2, 22965 }, /* Shift_R */
- { 0x00000aca, 22973 }, /* signaturemark */
- { 0x00000aac, 22987 }, /* signifblank */
- { 0x000008c9, 22999 }, /* similarequal */
- { 0x0000ff3c, 23012 }, /* SingleCandidate */
- { 0x00000afd, 23028 }, /* singlelowquotemark */
- { 0x01000d85, 23047 }, /* Sinh_a */
- { 0x01000d86, 23054 }, /* Sinh_aa */
- { 0x01000dcf, 23062 }, /* Sinh_aa2 */
- { 0x01000d87, 23071 }, /* Sinh_ae */
- { 0x01000dd0, 23079 }, /* Sinh_ae2 */
- { 0x01000d88, 23088 }, /* Sinh_aee */
- { 0x01000dd1, 23097 }, /* Sinh_aee2 */
- { 0x01000d93, 23107 }, /* Sinh_ai */
- { 0x01000ddb, 23115 }, /* Sinh_ai2 */
- { 0x01000dca, 23124 }, /* Sinh_al */
- { 0x01000d96, 23132 }, /* Sinh_au */
- { 0x01000dde, 23140 }, /* Sinh_au2 */
- { 0x01000db6, 23149 }, /* Sinh_ba */
- { 0x01000db7, 23157 }, /* Sinh_bha */
- { 0x01000da0, 23166 }, /* Sinh_ca */
- { 0x01000da1, 23174 }, /* Sinh_cha */
- { 0x01000da9, 23183 }, /* Sinh_dda */
- { 0x01000daa, 23192 }, /* Sinh_ddha */
- { 0x01000daf, 23202 }, /* Sinh_dha */
- { 0x01000db0, 23211 }, /* Sinh_dhha */
- { 0x01000d91, 23221 }, /* Sinh_e */
- { 0x01000dd9, 23228 }, /* Sinh_e2 */
- { 0x01000d92, 23236 }, /* Sinh_ee */
- { 0x01000dda, 23244 }, /* Sinh_ee2 */
- { 0x01000dc6, 23253 }, /* Sinh_fa */
- { 0x01000d9c, 23261 }, /* Sinh_ga */
- { 0x01000d9d, 23269 }, /* Sinh_gha */
- { 0x01000d83, 23278 }, /* Sinh_h2 */
- { 0x01000dc4, 23286 }, /* Sinh_ha */
- { 0x01000d89, 23294 }, /* Sinh_i */
- { 0x01000dd2, 23301 }, /* Sinh_i2 */
- { 0x01000d8a, 23309 }, /* Sinh_ii */
- { 0x01000dd3, 23317 }, /* Sinh_ii2 */
- { 0x01000da2, 23326 }, /* Sinh_ja */
- { 0x01000da3, 23334 }, /* Sinh_jha */
- { 0x01000da5, 23343 }, /* Sinh_jnya */
- { 0x01000d9a, 23353 }, /* Sinh_ka */
- { 0x01000d9b, 23361 }, /* Sinh_kha */
- { 0x01000df4, 23370 }, /* Sinh_kunddaliya */
- { 0x01000dbd, 23386 }, /* Sinh_la */
- { 0x01000dc5, 23394 }, /* Sinh_lla */
- { 0x01000d8f, 23403 }, /* Sinh_lu */
- { 0x01000ddf, 23411 }, /* Sinh_lu2 */
- { 0x01000d90, 23420 }, /* Sinh_luu */
- { 0x01000df3, 23429 }, /* Sinh_luu2 */
- { 0x01000db8, 23439 }, /* Sinh_ma */
- { 0x01000db9, 23447 }, /* Sinh_mba */
- { 0x01000db1, 23456 }, /* Sinh_na */
- { 0x01000dac, 23464 }, /* Sinh_ndda */
- { 0x01000db3, 23474 }, /* Sinh_ndha */
- { 0x01000d82, 23484 }, /* Sinh_ng */
- { 0x01000d9e, 23492 }, /* Sinh_ng2 */
- { 0x01000d9f, 23501 }, /* Sinh_nga */
- { 0x01000da6, 23510 }, /* Sinh_nja */
- { 0x01000dab, 23519 }, /* Sinh_nna */
- { 0x01000da4, 23528 }, /* Sinh_nya */
- { 0x01000d94, 23537 }, /* Sinh_o */
- { 0x01000ddc, 23544 }, /* Sinh_o2 */
- { 0x01000d95, 23552 }, /* Sinh_oo */
- { 0x01000ddd, 23560 }, /* Sinh_oo2 */
- { 0x01000db4, 23569 }, /* Sinh_pa */
- { 0x01000db5, 23577 }, /* Sinh_pha */
- { 0x01000dbb, 23586 }, /* Sinh_ra */
- { 0x01000d8d, 23594 }, /* Sinh_ri */
- { 0x01000d8e, 23602 }, /* Sinh_rii */
- { 0x01000dd8, 23611 }, /* Sinh_ru2 */
- { 0x01000df2, 23620 }, /* Sinh_ruu2 */
- { 0x01000dc3, 23630 }, /* Sinh_sa */
- { 0x01000dc1, 23638 }, /* Sinh_sha */
- { 0x01000dc2, 23647 }, /* Sinh_ssha */
- { 0x01000dad, 23657 }, /* Sinh_tha */
- { 0x01000dae, 23666 }, /* Sinh_thha */
- { 0x01000da7, 23676 }, /* Sinh_tta */
- { 0x01000da8, 23685 }, /* Sinh_ttha */
- { 0x01000d8b, 23695 }, /* Sinh_u */
- { 0x01000dd4, 23702 }, /* Sinh_u2 */
- { 0x01000d8c, 23710 }, /* Sinh_uu */
- { 0x01000dd6, 23718 }, /* Sinh_uu2 */
- { 0x01000dc0, 23727 }, /* Sinh_va */
- { 0x01000dba, 23735 }, /* Sinh_ya */
- { 0x01002086, 23743 }, /* sixsubscript */
- { 0x01002076, 23756 }, /* sixsuperior */
- { 0x0000002f, 23768 }, /* slash */
- { 0x0000fe73, 23774 }, /* SlowKeys_Enable */
- { 0x000009e0, 23790 }, /* soliddiamond */
- { 0x00000020, 23803 }, /* space */
- { 0x0100221a, 23809 }, /* squareroot */
- { 0x000000df, 23820 }, /* ssharp */
- { 0x000000a3, 23827 }, /* sterling */
- { 0x0000fe75, 23836 }, /* StickyKeys_Enable */
- { 0x01002263, 23854 }, /* stricteq */
- { 0x0000ff66, 23863 }, /* SunAgain */
- { 0x0000ff7e, 23872 }, /* SunAltGraph */
- { 0x1005ff77, 23884 }, /* SunAudioLowerVolume */
- { 0x1005ff78, 23904 }, /* SunAudioMute */
- { 0x1005ff79, 23917 }, /* SunAudioRaiseVolume */
- { 0x0000ff20, 23937 }, /* SunCompose */
- { 0x1005ff72, 23948 }, /* SunCopy */
- { 0x1005ff75, 23956 }, /* SunCut */
- { 0x1005ff10, 23963 }, /* SunF36 */
- { 0x1005ff11, 23970 }, /* SunF37 */
- { 0x1005ff03, 23977 }, /* SunFA_Acute */
- { 0x1005ff05, 23989 }, /* SunFA_Cedilla */
- { 0x1005ff01, 24003 }, /* SunFA_Circum */
- { 0x1005ff04, 24016 }, /* SunFA_Diaeresis */
- { 0x1005ff00, 24032 }, /* SunFA_Grave */
- { 0x1005ff02, 24044 }, /* SunFA_Tilde */
- { 0x0000ff68, 24056 }, /* SunFind */
- { 0x1005ff71, 24064 }, /* SunFront */
- { 0x1005ff73, 24073 }, /* SunOpen */
- { 0x0000ff56, 24081 }, /* SunPageDown */
- { 0x0000ff55, 24093 }, /* SunPageUp */
- { 0x1005ff74, 24103 }, /* SunPaste */
- { 0x1005ff76, 24112 }, /* SunPowerSwitch */
- { 0x1005ff7d, 24127 }, /* SunPowerSwitchShift */
- { 0x0000ff61, 24147 }, /* SunPrint_Screen */
- { 0x1005ff70, 24163 }, /* SunProps */
- { 0x0000ff69, 24172 }, /* SunStop */
- { 0x1005ff60, 24180 }, /* SunSys_Req */
- { 0x0000ff65, 24191 }, /* SunUndo */
- { 0x1005ff7a, 24199 }, /* SunVideoDegauss */
- { 0x1005ff7b, 24215 }, /* SunVideoLowerBrightness */
- { 0x1005ff7c, 24239 }, /* SunVideoRaiseBrightness */
- { 0x0000ffeb, 24263 }, /* Super_L */
- { 0x0000ffec, 24271 }, /* Super_R */
- { 0x0000ff15, 24279 }, /* Sys_Req */
- { 0x1000ff6d, 24287 }, /* System */
- { 0x00000054, 24294 }, /* T */
- { 0x00000074, 24296 }, /* t */
- { 0x0000ff09, 24298 }, /* Tab */
- { 0x01001e6a, 24302 }, /* Tabovedot */
- { 0x01001e6b, 24312 }, /* tabovedot */
- { 0x000001ab, 24322 }, /* Tcaron */
- { 0x000001bb, 24329 }, /* tcaron */
- { 0x000001de, 24336 }, /* Tcedilla */
- { 0x000001fe, 24345 }, /* tcedilla */
- { 0x00000af9, 24354 }, /* telephone */
- { 0x00000afa, 24364 }, /* telephonerecorder */
- { 0x0000fed5, 24382 }, /* Terminate_Server */
- { 0x00000ddf, 24399 }, /* Thai_baht */
- { 0x00000dba, 24409 }, /* Thai_bobaimai */
- { 0x00000da8, 24423 }, /* Thai_chochan */
- { 0x00000daa, 24436 }, /* Thai_chochang */
- { 0x00000da9, 24450 }, /* Thai_choching */
- { 0x00000dac, 24464 }, /* Thai_chochoe */
- { 0x00000dae, 24477 }, /* Thai_dochada */
- { 0x00000db4, 24490 }, /* Thai_dodek */
- { 0x00000dbd, 24501 }, /* Thai_fofa */
- { 0x00000dbf, 24511 }, /* Thai_fofan */
- { 0x00000dcb, 24522 }, /* Thai_hohip */
- { 0x00000dce, 24533 }, /* Thai_honokhuk */
- { 0x00000da2, 24547 }, /* Thai_khokhai */
- { 0x00000da5, 24560 }, /* Thai_khokhon */
- { 0x00000da3, 24573 }, /* Thai_khokhuat */
- { 0x00000da4, 24587 }, /* Thai_khokhwai */
- { 0x00000da6, 24601 }, /* Thai_khorakhang */
- { 0x00000da1, 24617 }, /* Thai_kokai */
- { 0x00000de5, 24628 }, /* Thai_lakkhangyao */
- { 0x00000df7, 24645 }, /* Thai_lekchet */
- { 0x00000df5, 24658 }, /* Thai_lekha */
- { 0x00000df6, 24669 }, /* Thai_lekhok */
- { 0x00000df9, 24681 }, /* Thai_lekkao */
- { 0x00000df1, 24693 }, /* Thai_leknung */
- { 0x00000df8, 24706 }, /* Thai_lekpaet */
- { 0x00000df3, 24719 }, /* Thai_leksam */
- { 0x00000df4, 24731 }, /* Thai_leksi */
- { 0x00000df2, 24742 }, /* Thai_leksong */
- { 0x00000df0, 24755 }, /* Thai_leksun */
- { 0x00000dcc, 24767 }, /* Thai_lochula */
- { 0x00000dc5, 24780 }, /* Thai_loling */
- { 0x00000dc6, 24792 }, /* Thai_lu */
- { 0x00000deb, 24800 }, /* Thai_maichattawa */
- { 0x00000de8, 24817 }, /* Thai_maiek */
- { 0x00000dd1, 24828 }, /* Thai_maihanakat */
- { 0x00000dde, 24844 }, /* Thai_maihanakat_maitho */
- { 0x00000de7, 24867 }, /* Thai_maitaikhu */
- { 0x00000de9, 24882 }, /* Thai_maitho */
- { 0x00000dea, 24894 }, /* Thai_maitri */
- { 0x00000de6, 24906 }, /* Thai_maiyamok */
- { 0x00000dc1, 24920 }, /* Thai_moma */
- { 0x00000da7, 24930 }, /* Thai_ngongu */
- { 0x00000ded, 24942 }, /* Thai_nikhahit */
- { 0x00000db3, 24956 }, /* Thai_nonen */
- { 0x00000db9, 24967 }, /* Thai_nonu */
- { 0x00000dcd, 24977 }, /* Thai_oang */
- { 0x00000dcf, 24987 }, /* Thai_paiyannoi */
- { 0x00000dda, 25002 }, /* Thai_phinthu */
- { 0x00000dbe, 25015 }, /* Thai_phophan */
- { 0x00000dbc, 25028 }, /* Thai_phophung */
- { 0x00000dc0, 25042 }, /* Thai_phosamphao */
- { 0x00000dbb, 25058 }, /* Thai_popla */
- { 0x00000dc3, 25069 }, /* Thai_rorua */
- { 0x00000dc4, 25080 }, /* Thai_ru */
- { 0x00000dd0, 25088 }, /* Thai_saraa */
- { 0x00000dd2, 25099 }, /* Thai_saraaa */
- { 0x00000de1, 25111 }, /* Thai_saraae */
- { 0x00000de4, 25123 }, /* Thai_saraaimaimalai */
- { 0x00000de3, 25143 }, /* Thai_saraaimaimuan */
- { 0x00000dd3, 25162 }, /* Thai_saraam */
- { 0x00000de0, 25174 }, /* Thai_sarae */
- { 0x00000dd4, 25185 }, /* Thai_sarai */
- { 0x00000dd5, 25196 }, /* Thai_saraii */
- { 0x00000de2, 25208 }, /* Thai_sarao */
- { 0x00000dd8, 25219 }, /* Thai_sarau */
- { 0x00000dd6, 25230 }, /* Thai_saraue */
- { 0x00000dd7, 25242 }, /* Thai_sarauee */
- { 0x00000dd9, 25255 }, /* Thai_sarauu */
- { 0x00000dc9, 25267 }, /* Thai_sorusi */
- { 0x00000dc8, 25279 }, /* Thai_sosala */
- { 0x00000dab, 25291 }, /* Thai_soso */
- { 0x00000dca, 25301 }, /* Thai_sosua */
- { 0x00000dec, 25312 }, /* Thai_thanthakhat */
- { 0x00000db1, 25329 }, /* Thai_thonangmontho */
- { 0x00000db2, 25348 }, /* Thai_thophuthao */
- { 0x00000db7, 25364 }, /* Thai_thothahan */
- { 0x00000db0, 25379 }, /* Thai_thothan */
- { 0x00000db8, 25392 }, /* Thai_thothong */
- { 0x00000db6, 25406 }, /* Thai_thothung */
- { 0x00000daf, 25420 }, /* Thai_topatak */
- { 0x00000db5, 25433 }, /* Thai_totao */
- { 0x00000dc7, 25444 }, /* Thai_wowaen */
- { 0x00000dc2, 25456 }, /* Thai_yoyak */
- { 0x00000dad, 25467 }, /* Thai_yoying */
- { 0x000008c0, 25479 }, /* therefore */
- { 0x00000aa7, 25489 }, /* thinspace */
- { 0x000000de, 25499 }, /* THORN */
- { 0x000000de, 25505 }, /* Thorn */
- { 0x000000fe, 25511 }, /* thorn */
- { 0x00000ac4, 25517 }, /* threeeighths */
- { 0x00000ab4, 25530 }, /* threefifths */
- { 0x000000be, 25542 }, /* threequarters */
- { 0x01002083, 25556 }, /* threesubscript */
- { 0x000000b3, 25571 }, /* threesuperior */
- { 0x0100222d, 25585 }, /* tintegral */
- { 0x000008a4, 25595 }, /* topintegral */
- { 0x000008ab, 25607 }, /* topleftparens */
- { 0x000008a2, 25621 }, /* topleftradical */
- { 0x000008a7, 25636 }, /* topleftsqbracket */
- { 0x000008b1, 25653 }, /* topleftsummation */
- { 0x000008ad, 25670 }, /* toprightparens */
- { 0x000008a9, 25685 }, /* toprightsqbracket */
- { 0x000008b5, 25703 }, /* toprightsummation */
- { 0x000009f7, 25721 }, /* topt */
- { 0x000008b3, 25726 }, /* topvertsummationconnector */
- { 0x0000ff2b, 25752 }, /* Touroku */
- { 0x00000ac9, 25760 }, /* trademark */
- { 0x00000acb, 25770 }, /* trademarkincircle */
- { 0x000003ac, 25788 }, /* Tslash */
- { 0x000003bc, 25795 }, /* tslash */
- { 0x00000ab3, 25802 }, /* twofifths */
- { 0x01002082, 25812 }, /* twosubscript */
- { 0x000000b2, 25825 }, /* twosuperior */
- { 0x00000ab1, 25837 }, /* twothirds */
- { 0x00000055, 25847 }, /* U */
- { 0x00000075, 25849 }, /* u */
- { 0x000000da, 25851 }, /* Uacute */
- { 0x000000fa, 25858 }, /* uacute */
- { 0x01001ee4, 25865 }, /* Ubelowdot */
- { 0x01001ee5, 25875 }, /* ubelowdot */
- { 0x000002dd, 25885 }, /* Ubreve */
- { 0x000002fd, 25892 }, /* ubreve */
- { 0x000000db, 25899 }, /* Ucircumflex */
- { 0x000000fb, 25911 }, /* ucircumflex */
- { 0x000000dc, 25923 }, /* Udiaeresis */
- { 0x000000fc, 25934 }, /* udiaeresis */
- { 0x000001db, 25945 }, /* Udoubleacute */
- { 0x000001fb, 25958 }, /* udoubleacute */
- { 0x000000d9, 25971 }, /* Ugrave */
- { 0x000000f9, 25978 }, /* ugrave */
- { 0x01001ee6, 25985 }, /* Uhook */
- { 0x01001ee7, 25991 }, /* uhook */
- { 0x010001af, 25997 }, /* Uhorn */
- { 0x010001b0, 26003 }, /* uhorn */
- { 0x01001ee8, 26009 }, /* Uhornacute */
- { 0x01001ee9, 26020 }, /* uhornacute */
- { 0x01001ef0, 26031 }, /* Uhornbelowdot */
- { 0x01001ef1, 26045 }, /* uhornbelowdot */
- { 0x01001eea, 26059 }, /* Uhorngrave */
- { 0x01001eeb, 26070 }, /* uhorngrave */
- { 0x01001eec, 26081 }, /* Uhornhook */
- { 0x01001eed, 26091 }, /* uhornhook */
- { 0x01001eee, 26101 }, /* Uhorntilde */
- { 0x01001eef, 26112 }, /* uhorntilde */
- { 0x000006ad, 26123 }, /* Ukrainian_ghe_with_upturn */
- { 0x000006bd, 26149 }, /* Ukrainian_GHE_WITH_UPTURN */
- { 0x000006a6, 26175 }, /* Ukrainian_i */
- { 0x000006b6, 26187 }, /* Ukrainian_I */
- { 0x000006a4, 26199 }, /* Ukrainian_ie */
- { 0x000006b4, 26212 }, /* Ukrainian_IE */
- { 0x000006a7, 26225 }, /* Ukrainian_yi */
- { 0x000006b7, 26238 }, /* Ukrainian_YI */
- { 0x000006a6, 26251 }, /* Ukranian_i */
- { 0x000006b6, 26262 }, /* Ukranian_I */
- { 0x000006a4, 26273 }, /* Ukranian_je */
- { 0x000006b4, 26285 }, /* Ukranian_JE */
- { 0x000006a7, 26297 }, /* Ukranian_yi */
- { 0x000006b7, 26309 }, /* Ukranian_YI */
- { 0x000003de, 26321 }, /* Umacron */
- { 0x000003fe, 26329 }, /* umacron */
- { 0x00000bc6, 26337 }, /* underbar */
- { 0x0000005f, 26346 }, /* underscore */
- { 0x0000ff65, 26357 }, /* Undo */
- { 0x000008dd, 26362 }, /* union */
- { 0x000003d9, 26368 }, /* Uogonek */
- { 0x000003f9, 26376 }, /* uogonek */
- { 0x0000ff52, 26384 }, /* Up */
- { 0x000008fc, 26387 }, /* uparrow */
- { 0x00000ba9, 26395 }, /* upcaret */
- { 0x000009ec, 26403 }, /* upleftcorner */
- { 0x000009eb, 26416 }, /* uprightcorner */
- { 0x00000bc3, 26430 }, /* upshoe */
- { 0x00000bd3, 26437 }, /* upstile */
- { 0x00000bce, 26445 }, /* uptack */
- { 0x000001d9, 26452 }, /* Uring */
- { 0x000001f9, 26458 }, /* uring */
- { 0x1000ff6e, 26464 }, /* User */
- { 0x000003dd, 26469 }, /* Utilde */
- { 0x000003fd, 26476 }, /* utilde */
- { 0x00000056, 26483 }, /* V */
- { 0x00000076, 26485 }, /* v */
- { 0x000008c1, 26487 }, /* variation */
- { 0x000009f8, 26497 }, /* vertbar */
- { 0x000008a6, 26505 }, /* vertconnector */
- { 0x000004de, 26519 }, /* voicedsound */
- { 0x00ffffff, 26531 }, /* VoidSymbol */
- { 0x000009e9, 26542 }, /* vt */
- { 0x00000057, 26545 }, /* W */
- { 0x00000077, 26547 }, /* w */
- { 0x01001e82, 26549 }, /* Wacute */
- { 0x01001e83, 26556 }, /* wacute */
- { 0x01000174, 26563 }, /* Wcircumflex */
- { 0x01000175, 26575 }, /* wcircumflex */
- { 0x01001e84, 26587 }, /* Wdiaeresis */
- { 0x01001e85, 26598 }, /* wdiaeresis */
- { 0x01001e80, 26609 }, /* Wgrave */
- { 0x01001e81, 26616 }, /* wgrave */
- { 0x010020a9, 26623 }, /* WonSign */
- { 0x00000058, 26631 }, /* X */
- { 0x00000078, 26633 }, /* x */
- { 0x01001e8a, 26635 }, /* Xabovedot */
- { 0x01001e8b, 26645 }, /* xabovedot */
- { 0x1008ff39, 26655 }, /* XF86AddFavorite */
- { 0x1008ff50, 26671 }, /* XF86ApplicationLeft */
- { 0x1008ff51, 26691 }, /* XF86ApplicationRight */
- { 0x1008ff9b, 26712 }, /* XF86AudioCycleTrack */
- { 0x1008ff97, 26732 }, /* XF86AudioForward */
- { 0x1008ff11, 26749 }, /* XF86AudioLowerVolume */
- { 0x1008ff32, 26770 }, /* XF86AudioMedia */
- { 0x1008ffb2, 26785 }, /* XF86AudioMicMute */
- { 0x1008ff12, 26802 }, /* XF86AudioMute */
- { 0x1008ff17, 26816 }, /* XF86AudioNext */
- { 0x1008ff31, 26830 }, /* XF86AudioPause */
- { 0x1008ff14, 26845 }, /* XF86AudioPlay */
- { 0x1008ffb6, 26859 }, /* XF86AudioPreset */
- { 0x1008ff16, 26875 }, /* XF86AudioPrev */
- { 0x1008ff13, 26889 }, /* XF86AudioRaiseVolume */
- { 0x1008ff99, 26910 }, /* XF86AudioRandomPlay */
- { 0x1008ff1c, 26930 }, /* XF86AudioRecord */
- { 0x1008ff98, 26946 }, /* XF86AudioRepeat */
- { 0x1008ff3e, 26962 }, /* XF86AudioRewind */
- { 0x1008ff15, 26978 }, /* XF86AudioStop */
- { 0x1008ff8d, 26992 }, /* XF86Away */
- { 0x1008ff26, 27001 }, /* XF86Back */
- { 0x1008ff3f, 27010 }, /* XF86BackForward */
- { 0x1008ff93, 27026 }, /* XF86Battery */
- { 0x1008ffa6, 27038 }, /* XF86Blue */
- { 0x1008ff94, 27047 }, /* XF86Bluetooth */
- { 0x1008ff52, 27061 }, /* XF86Book */
- { 0x1008ff3b, 27070 }, /* XF86BrightnessAdjust */
- { 0x1008ff54, 27091 }, /* XF86Calculater */
- { 0x1008ff1d, 27106 }, /* XF86Calculator */
- { 0x1008ff20, 27121 }, /* XF86Calendar */
- { 0x1008ff53, 27134 }, /* XF86CD */
- { 0x1008ff55, 27141 }, /* XF86Clear */
- { 0x1008fe21, 27151 }, /* XF86ClearGrab */
- { 0x1008ff56, 27165 }, /* XF86Close */
- { 0x1008ff3d, 27175 }, /* XF86Community */
- { 0x1008ff22, 27189 }, /* XF86ContrastAdjust */
- { 0x1008ff57, 27208 }, /* XF86Copy */
- { 0x1008ff58, 27217 }, /* XF86Cut */
- { 0x1008ff9c, 27225 }, /* XF86CycleAngle */
- { 0x1008ff59, 27240 }, /* XF86Display */
- { 0x1008ff5b, 27252 }, /* XF86Documents */
- { 0x1008ff5a, 27266 }, /* XF86DOS */
- { 0x1008ff2c, 27274 }, /* XF86Eject */
- { 0x1008ff5c, 27284 }, /* XF86Excel */
- { 0x1008ff5d, 27294 }, /* XF86Explorer */
- { 0x1008ff30, 27307 }, /* XF86Favorites */
- { 0x1008ff3c, 27321 }, /* XF86Finance */
- { 0x1008ff27, 27333 }, /* XF86Forward */
- { 0x1008ff9d, 27345 }, /* XF86FrameBack */
- { 0x1008ff9e, 27359 }, /* XF86FrameForward */
- { 0x1008ffb8, 27376 }, /* XF86FullScreen */
- { 0x1008ff5e, 27391 }, /* XF86Game */
- { 0x1008ff5f, 27400 }, /* XF86Go */
- { 0x1008ffa4, 27407 }, /* XF86Green */
- { 0x1008ffa8, 27417 }, /* XF86Hibernate */
- { 0x1008ff37, 27431 }, /* XF86History */
- { 0x1008ff18, 27443 }, /* XF86HomePage */
- { 0x1008ff3a, 27456 }, /* XF86HotLinks */
- { 0x1008ff60, 27469 }, /* XF86iTouch */
- { 0x1008ff06, 27480 }, /* XF86KbdBrightnessDown */
- { 0x1008ff05, 27502 }, /* XF86KbdBrightnessUp */
- { 0x1008ff04, 27522 }, /* XF86KbdLightOnOff */
- { 0x1008ffb3, 27540 }, /* XF86Keyboard */
- { 0x1008ff40, 27553 }, /* XF86Launch0 */
- { 0x1008ff41, 27565 }, /* XF86Launch1 */
- { 0x1008ff42, 27577 }, /* XF86Launch2 */
- { 0x1008ff43, 27589 }, /* XF86Launch3 */
- { 0x1008ff44, 27601 }, /* XF86Launch4 */
- { 0x1008ff45, 27613 }, /* XF86Launch5 */
- { 0x1008ff46, 27625 }, /* XF86Launch6 */
- { 0x1008ff47, 27637 }, /* XF86Launch7 */
- { 0x1008ff48, 27649 }, /* XF86Launch8 */
- { 0x1008ff49, 27661 }, /* XF86Launch9 */
- { 0x1008ff4a, 27673 }, /* XF86LaunchA */
- { 0x1008ff4b, 27685 }, /* XF86LaunchB */
- { 0x1008ff4c, 27697 }, /* XF86LaunchC */
- { 0x1008ff4d, 27709 }, /* XF86LaunchD */
- { 0x1008ff4e, 27721 }, /* XF86LaunchE */
- { 0x1008ff4f, 27733 }, /* XF86LaunchF */
- { 0x1008ff35, 27745 }, /* XF86LightBulb */
- { 0x1008fe25, 27759 }, /* XF86LogGrabInfo */
- { 0x1008ff61, 27775 }, /* XF86LogOff */
- { 0x1008fe24, 27786 }, /* XF86LogWindowTree */
- { 0x1008ff19, 27804 }, /* XF86Mail */
- { 0x1008ff90, 27813 }, /* XF86MailForward */
- { 0x1008ff62, 27829 }, /* XF86Market */
- { 0x1008ff63, 27840 }, /* XF86Meeting */
- { 0x1008ff1e, 27852 }, /* XF86Memo */
- { 0x1008ff65, 27861 }, /* XF86MenuKB */
- { 0x1008ff66, 27872 }, /* XF86MenuPB */
- { 0x1008ff8e, 27883 }, /* XF86Messenger */
- { 0x1008ff01, 27897 }, /* XF86ModeLock */
- { 0x1008ff07, 27910 }, /* XF86MonBrightnessCycle */
- { 0x1008ff03, 27933 }, /* XF86MonBrightnessDown */
- { 0x1008ff02, 27955 }, /* XF86MonBrightnessUp */
- { 0x1008ff92, 27975 }, /* XF86Music */
- { 0x1008ff33, 27985 }, /* XF86MyComputer */
- { 0x1008ff67, 28000 }, /* XF86MySites */
- { 0x1008ff68, 28012 }, /* XF86New */
- { 0x1008ff69, 28020 }, /* XF86News */
- { 0x1008fe22, 28029 }, /* XF86Next_VMode */
- { 0x1008ff6a, 28044 }, /* XF86OfficeHome */
- { 0x1008ff6b, 28059 }, /* XF86Open */
- { 0x1008ff38, 28068 }, /* XF86OpenURL */
- { 0x1008ff6c, 28080 }, /* XF86Option */
- { 0x1008ff6d, 28091 }, /* XF86Paste */
- { 0x1008ff6e, 28101 }, /* XF86Phone */
- { 0x1008ff91, 28111 }, /* XF86Pictures */
- { 0x1008ff21, 28124 }, /* XF86PowerDown */
- { 0x1008ff2a, 28138 }, /* XF86PowerOff */
- { 0x1008fe23, 28151 }, /* XF86Prev_VMode */
- { 0x1008ff70, 28166 }, /* XF86Q */
- { 0x1008ffa3, 28172 }, /* XF86Red */
- { 0x1008ff29, 28180 }, /* XF86Refresh */
- { 0x1008ff73, 28192 }, /* XF86Reload */
- { 0x1008ff72, 28203 }, /* XF86Reply */
- { 0x1008ffb5, 28213 }, /* XF86RFKill */
- { 0x1008ff24, 28224 }, /* XF86RockerDown */
- { 0x1008ff25, 28239 }, /* XF86RockerEnter */
- { 0x1008ff23, 28255 }, /* XF86RockerUp */
- { 0x1008ff74, 28268 }, /* XF86RotateWindows */
- { 0x1008ff76, 28286 }, /* XF86RotationKB */
- { 0x1008ffb7, 28301 }, /* XF86RotationLockToggle */
- { 0x1008ff75, 28324 }, /* XF86RotationPB */
- { 0x1008ff77, 28339 }, /* XF86Save */
- { 0x1008ff2d, 28348 }, /* XF86ScreenSaver */
- { 0x1008ff7a, 28364 }, /* XF86ScrollClick */
- { 0x1008ff79, 28380 }, /* XF86ScrollDown */
- { 0x1008ff78, 28395 }, /* XF86ScrollUp */
- { 0x1008ff1b, 28408 }, /* XF86Search */
- { 0x1008ffa0, 28419 }, /* XF86Select */
- { 0x1008ff7b, 28430 }, /* XF86Send */
- { 0x1008ff36, 28439 }, /* XF86Shop */
- { 0x1008ff2f, 28448 }, /* XF86Sleep */
- { 0x1008ff7c, 28458 }, /* XF86Spell */
- { 0x1008ff7d, 28468 }, /* XF86SplitScreen */
- { 0x1008ff10, 28484 }, /* XF86Standby */
- { 0x1008ff1a, 28496 }, /* XF86Start */
- { 0x1008ff28, 28506 }, /* XF86Stop */
- { 0x1008ff9a, 28515 }, /* XF86Subtitle */
- { 0x1008ff7e, 28528 }, /* XF86Support */
- { 0x1008ffa7, 28540 }, /* XF86Suspend */
- { 0x1008fe01, 28552 }, /* XF86Switch_VT_1 */
- { 0x1008fe0a, 28568 }, /* XF86Switch_VT_10 */
- { 0x1008fe0b, 28585 }, /* XF86Switch_VT_11 */
- { 0x1008fe0c, 28602 }, /* XF86Switch_VT_12 */
- { 0x1008fe02, 28619 }, /* XF86Switch_VT_2 */
- { 0x1008fe03, 28635 }, /* XF86Switch_VT_3 */
- { 0x1008fe04, 28651 }, /* XF86Switch_VT_4 */
- { 0x1008fe05, 28667 }, /* XF86Switch_VT_5 */
- { 0x1008fe06, 28683 }, /* XF86Switch_VT_6 */
- { 0x1008fe07, 28699 }, /* XF86Switch_VT_7 */
- { 0x1008fe08, 28715 }, /* XF86Switch_VT_8 */
- { 0x1008fe09, 28731 }, /* XF86Switch_VT_9 */
- { 0x1008ff7f, 28747 }, /* XF86TaskPane */
- { 0x1008ff80, 28760 }, /* XF86Terminal */
- { 0x1008ff9f, 28773 }, /* XF86Time */
- { 0x1008ff1f, 28782 }, /* XF86ToDoList */
- { 0x1008ff81, 28795 }, /* XF86Tools */
- { 0x1008ffa2, 28805 }, /* XF86TopMenu */
- { 0x1008ffb1, 28817 }, /* XF86TouchpadOff */
- { 0x1008ffb0, 28833 }, /* XF86TouchpadOn */
- { 0x1008ffa9, 28848 }, /* XF86TouchpadToggle */
- { 0x1008ff82, 28867 }, /* XF86Travel */
- { 0x1008fe20, 28878 }, /* XF86Ungrab */
- { 0x1008ff85, 28889 }, /* XF86User1KB */
- { 0x1008ff86, 28901 }, /* XF86User2KB */
- { 0x1008ff84, 28913 }, /* XF86UserPB */
- { 0x1008ff96, 28924 }, /* XF86UWB */
- { 0x1008ff34, 28932 }, /* XF86VendorHome */
- { 0x1008ff87, 28947 }, /* XF86Video */
- { 0x1008ffa1, 28957 }, /* XF86View */
- { 0x1008ff2b, 28966 }, /* XF86WakeUp */
- { 0x1008ff8f, 28977 }, /* XF86WebCam */
- { 0x1008ff88, 28988 }, /* XF86WheelButton */
- { 0x1008ff95, 29004 }, /* XF86WLAN */
- { 0x1008ff89, 29013 }, /* XF86Word */
- { 0x1008ffb4, 29022 }, /* XF86WWAN */
- { 0x1008ff2e, 29031 }, /* XF86WWW */
- { 0x1008ff8a, 29039 }, /* XF86Xfer */
- { 0x1008ffa5, 29048 }, /* XF86Yellow */
- { 0x1008ff8b, 29059 }, /* XF86ZoomIn */
- { 0x1008ff8c, 29070 }, /* XF86ZoomOut */
- { 0x00000059, 29082 }, /* Y */
- { 0x00000079, 29084 }, /* y */
- { 0x000000dd, 29086 }, /* Yacute */
- { 0x000000fd, 29093 }, /* yacute */
- { 0x01001ef4, 29100 }, /* Ybelowdot */
- { 0x01001ef5, 29110 }, /* ybelowdot */
- { 0x01000176, 29120 }, /* Ycircumflex */
- { 0x01000177, 29132 }, /* ycircumflex */
- { 0x000000ff, 29144 }, /* ydiaeresis */
- { 0x000013be, 29155 }, /* Ydiaeresis */
- { 0x000000a5, 29166 }, /* yen */
- { 0x01001ef2, 29170 }, /* Ygrave */
- { 0x01001ef3, 29177 }, /* ygrave */
- { 0x01001ef6, 29184 }, /* Yhook */
- { 0x01001ef7, 29190 }, /* yhook */
- { 0x01001ef8, 29196 }, /* Ytilde */
- { 0x01001ef9, 29203 }, /* ytilde */
- { 0x0000005a, 29210 }, /* Z */
- { 0x0000007a, 29212 }, /* z */
- { 0x000001af, 29214 }, /* Zabovedot */
- { 0x000001bf, 29224 }, /* zabovedot */
- { 0x000001ac, 29234 }, /* Zacute */
- { 0x000001bc, 29241 }, /* zacute */
- { 0x000001ae, 29248 }, /* Zcaron */
- { 0x000001be, 29255 }, /* zcaron */
- { 0x0000ff3d, 29262 }, /* Zen_Koho */
- { 0x0000ff28, 29271 }, /* Zenkaku */
- { 0x0000ff2a, 29279 }, /* Zenkaku_Hankaku */
- { 0x01002080, 29295 }, /* zerosubscript */
- { 0x01002070, 29309 }, /* zerosuperior */
- { 0x010001b5, 29322 }, /* Zstroke */
- { 0x010001b6, 29330 }, /* zstroke */
+ { 0x01000301, 8680 }, /* combining_acute */
+ { 0x01000323, 8696 }, /* combining_belowdot */
+ { 0x01000300, 8715 }, /* combining_grave */
+ { 0x01000309, 8731 }, /* combining_hook */
+ { 0x01000303, 8746 }, /* combining_tilde */
+ { 0x0000002c, 8762 }, /* comma */
+ { 0x0100220b, 8768 }, /* containsas */
+ { 0x0000ffe3, 8779 }, /* Control_L */
+ { 0x0000ffe4, 8789 }, /* Control_R */
+ { 0x000000a9, 8799 }, /* copyright */
+ { 0x000009e4, 8809 }, /* cr */
+ { 0x000009ee, 8812 }, /* crossinglines */
+ { 0x010020a2, 8826 }, /* CruzeiroSign */
+ { 0x0100221b, 8839 }, /* cuberoot */
+ { 0x000000a4, 8848 }, /* currency */
+ { 0x00000aff, 8857 }, /* cursor */
+ { 0x000006c1, 8864 }, /* Cyrillic_a */
+ { 0x000006e1, 8875 }, /* Cyrillic_A */
+ { 0x000006c2, 8886 }, /* Cyrillic_be */
+ { 0x000006e2, 8898 }, /* Cyrillic_BE */
+ { 0x000006de, 8910 }, /* Cyrillic_che */
+ { 0x000006fe, 8923 }, /* Cyrillic_CHE */
+ { 0x010004b6, 8936 }, /* Cyrillic_CHE_descender */
+ { 0x010004b7, 8959 }, /* Cyrillic_che_descender */
+ { 0x010004b8, 8982 }, /* Cyrillic_CHE_vertstroke */
+ { 0x010004b9, 9006 }, /* Cyrillic_che_vertstroke */
+ { 0x000006c4, 9030 }, /* Cyrillic_de */
+ { 0x000006e4, 9042 }, /* Cyrillic_DE */
+ { 0x000006af, 9054 }, /* Cyrillic_dzhe */
+ { 0x000006bf, 9068 }, /* Cyrillic_DZHE */
+ { 0x000006dc, 9082 }, /* Cyrillic_e */
+ { 0x000006fc, 9093 }, /* Cyrillic_E */
+ { 0x000006c6, 9104 }, /* Cyrillic_ef */
+ { 0x000006e6, 9116 }, /* Cyrillic_EF */
+ { 0x000006cc, 9128 }, /* Cyrillic_el */
+ { 0x000006ec, 9140 }, /* Cyrillic_EL */
+ { 0x000006cd, 9152 }, /* Cyrillic_em */
+ { 0x000006ed, 9164 }, /* Cyrillic_EM */
+ { 0x000006ce, 9176 }, /* Cyrillic_en */
+ { 0x000006ee, 9188 }, /* Cyrillic_EN */
+ { 0x010004a2, 9200 }, /* Cyrillic_EN_descender */
+ { 0x010004a3, 9222 }, /* Cyrillic_en_descender */
+ { 0x000006d2, 9244 }, /* Cyrillic_er */
+ { 0x000006f2, 9256 }, /* Cyrillic_ER */
+ { 0x000006d3, 9268 }, /* Cyrillic_es */
+ { 0x000006f3, 9280 }, /* Cyrillic_ES */
+ { 0x000006c7, 9292 }, /* Cyrillic_ghe */
+ { 0x000006e7, 9305 }, /* Cyrillic_GHE */
+ { 0x01000492, 9318 }, /* Cyrillic_GHE_bar */
+ { 0x01000493, 9335 }, /* Cyrillic_ghe_bar */
+ { 0x000006c8, 9352 }, /* Cyrillic_ha */
+ { 0x000006e8, 9364 }, /* Cyrillic_HA */
+ { 0x010004b2, 9376 }, /* Cyrillic_HA_descender */
+ { 0x010004b3, 9398 }, /* Cyrillic_ha_descender */
+ { 0x000006df, 9420 }, /* Cyrillic_hardsign */
+ { 0x000006ff, 9438 }, /* Cyrillic_HARDSIGN */
+ { 0x000006c9, 9456 }, /* Cyrillic_i */
+ { 0x000006e9, 9467 }, /* Cyrillic_I */
+ { 0x010004e2, 9478 }, /* Cyrillic_I_macron */
+ { 0x010004e3, 9496 }, /* Cyrillic_i_macron */
+ { 0x000006c5, 9514 }, /* Cyrillic_ie */
+ { 0x000006e5, 9526 }, /* Cyrillic_IE */
+ { 0x000006a3, 9538 }, /* Cyrillic_io */
+ { 0x000006b3, 9550 }, /* Cyrillic_IO */
+ { 0x000006a8, 9562 }, /* Cyrillic_je */
+ { 0x000006b8, 9574 }, /* Cyrillic_JE */
+ { 0x000006cb, 9586 }, /* Cyrillic_ka */
+ { 0x000006eb, 9598 }, /* Cyrillic_KA */
+ { 0x0100049a, 9610 }, /* Cyrillic_KA_descender */
+ { 0x0100049b, 9632 }, /* Cyrillic_ka_descender */
+ { 0x0100049c, 9654 }, /* Cyrillic_KA_vertstroke */
+ { 0x0100049d, 9677 }, /* Cyrillic_ka_vertstroke */
+ { 0x000006a9, 9700 }, /* Cyrillic_lje */
+ { 0x000006b9, 9713 }, /* Cyrillic_LJE */
+ { 0x000006aa, 9726 }, /* Cyrillic_nje */
+ { 0x000006ba, 9739 }, /* Cyrillic_NJE */
+ { 0x000006cf, 9752 }, /* Cyrillic_o */
+ { 0x000006ef, 9763 }, /* Cyrillic_O */
+ { 0x010004e8, 9774 }, /* Cyrillic_O_bar */
+ { 0x010004e9, 9789 }, /* Cyrillic_o_bar */
+ { 0x000006d0, 9804 }, /* Cyrillic_pe */
+ { 0x000006f0, 9816 }, /* Cyrillic_PE */
+ { 0x010004d8, 9828 }, /* Cyrillic_SCHWA */
+ { 0x010004d9, 9843 }, /* Cyrillic_schwa */
+ { 0x000006db, 9858 }, /* Cyrillic_sha */
+ { 0x000006fb, 9871 }, /* Cyrillic_SHA */
+ { 0x000006dd, 9884 }, /* Cyrillic_shcha */
+ { 0x000006fd, 9899 }, /* Cyrillic_SHCHA */
+ { 0x010004ba, 9914 }, /* Cyrillic_SHHA */
+ { 0x010004bb, 9928 }, /* Cyrillic_shha */
+ { 0x000006ca, 9942 }, /* Cyrillic_shorti */
+ { 0x000006ea, 9958 }, /* Cyrillic_SHORTI */
+ { 0x000006d8, 9974 }, /* Cyrillic_softsign */
+ { 0x000006f8, 9992 }, /* Cyrillic_SOFTSIGN */
+ { 0x000006d4, 10010 }, /* Cyrillic_te */
+ { 0x000006f4, 10022 }, /* Cyrillic_TE */
+ { 0x000006c3, 10034 }, /* Cyrillic_tse */
+ { 0x000006e3, 10047 }, /* Cyrillic_TSE */
+ { 0x000006d5, 10060 }, /* Cyrillic_u */
+ { 0x000006f5, 10071 }, /* Cyrillic_U */
+ { 0x010004ee, 10082 }, /* Cyrillic_U_macron */
+ { 0x010004ef, 10100 }, /* Cyrillic_u_macron */
+ { 0x010004ae, 10118 }, /* Cyrillic_U_straight */
+ { 0x010004af, 10138 }, /* Cyrillic_u_straight */
+ { 0x010004b0, 10158 }, /* Cyrillic_U_straight_bar */
+ { 0x010004b1, 10182 }, /* Cyrillic_u_straight_bar */
+ { 0x000006d7, 10206 }, /* Cyrillic_ve */
+ { 0x000006f7, 10218 }, /* Cyrillic_VE */
+ { 0x000006d1, 10230 }, /* Cyrillic_ya */
+ { 0x000006f1, 10242 }, /* Cyrillic_YA */
+ { 0x000006d9, 10254 }, /* Cyrillic_yeru */
+ { 0x000006f9, 10268 }, /* Cyrillic_YERU */
+ { 0x000006c0, 10282 }, /* Cyrillic_yu */
+ { 0x000006e0, 10294 }, /* Cyrillic_YU */
+ { 0x000006da, 10306 }, /* Cyrillic_ze */
+ { 0x000006fa, 10318 }, /* Cyrillic_ZE */
+ { 0x000006d6, 10330 }, /* Cyrillic_zhe */
+ { 0x000006f6, 10343 }, /* Cyrillic_ZHE */
+ { 0x01000496, 10356 }, /* Cyrillic_ZHE_descender */
+ { 0x01000497, 10379 }, /* Cyrillic_zhe_descender */
+ { 0x00000044, 10402 }, /* D */
+ { 0x00000064, 10404 }, /* d */
+ { 0x01001e0a, 10406 }, /* Dabovedot */
+ { 0x01001e0b, 10416 }, /* dabovedot */
+ { 0x1000fe27, 10426 }, /* Dacute_accent */
+ { 0x00000af1, 10440 }, /* dagger */
+ { 0x000001cf, 10447 }, /* Dcaron */
+ { 0x000001ef, 10454 }, /* dcaron */
+ { 0x1000fe2c, 10461 }, /* Dcedilla_accent */
+ { 0x1000fe5e, 10477 }, /* Dcircumflex_accent */
+ { 0x1000fe22, 10496 }, /* Ddiaeresis */
+ { 0x0000fe80, 10507 }, /* dead_a */
+ { 0x0000fe81, 10514 }, /* dead_A */
+ { 0x0000fe64, 10521 }, /* dead_abovecomma */
+ { 0x0000fe56, 10537 }, /* dead_abovedot */
+ { 0x0000fe65, 10551 }, /* dead_abovereversedcomma */
+ { 0x0000fe58, 10575 }, /* dead_abovering */
+ { 0x0000fe91, 10590 }, /* dead_aboveverticalline */
+ { 0x0000fe51, 10613 }, /* dead_acute */
+ { 0x0000fe6b, 10624 }, /* dead_belowbreve */
+ { 0x0000fe69, 10640 }, /* dead_belowcircumflex */
+ { 0x0000fe6e, 10661 }, /* dead_belowcomma */
+ { 0x0000fe6c, 10677 }, /* dead_belowdiaeresis */
+ { 0x0000fe60, 10697 }, /* dead_belowdot */
+ { 0x0000fe68, 10711 }, /* dead_belowmacron */
+ { 0x0000fe67, 10728 }, /* dead_belowring */
+ { 0x0000fe6a, 10743 }, /* dead_belowtilde */
+ { 0x0000fe92, 10759 }, /* dead_belowverticalline */
+ { 0x0000fe55, 10782 }, /* dead_breve */
+ { 0x0000fe8b, 10793 }, /* dead_capital_schwa */
+ { 0x0000fe5a, 10812 }, /* dead_caron */
+ { 0x0000fe5b, 10823 }, /* dead_cedilla */
+ { 0x0000fe52, 10836 }, /* dead_circumflex */
+ { 0x0000fe6f, 10852 }, /* dead_currency */
+ { 0x0000fe65, 10866 }, /* dead_dasia */
+ { 0x0000fe57, 10877 }, /* dead_diaeresis */
+ { 0x0000fe59, 10892 }, /* dead_doubleacute */
+ { 0x0000fe66, 10909 }, /* dead_doublegrave */
+ { 0x0000fe82, 10926 }, /* dead_e */
+ { 0x0000fe83, 10933 }, /* dead_E */
+ { 0x0000fe50, 10940 }, /* dead_grave */
+ { 0x0000fe8c, 10951 }, /* dead_greek */
+ { 0x0000fe61, 10962 }, /* dead_hook */
+ { 0x0000fe62, 10972 }, /* dead_horn */
+ { 0x0000fe84, 10982 }, /* dead_i */
+ { 0x0000fe85, 10989 }, /* dead_I */
+ { 0x0000fe6d, 10996 }, /* dead_invertedbreve */
+ { 0x0000fe5d, 11015 }, /* dead_iota */
+ { 0x0000fe93, 11025 }, /* dead_longsolidusoverlay */
+ { 0x0000fe90, 11049 }, /* dead_lowline */
+ { 0x0000fe54, 11062 }, /* dead_macron */
+ { 0x0000fe86, 11074 }, /* dead_o */
+ { 0x0000fe87, 11081 }, /* dead_O */
+ { 0x0000fe5c, 11088 }, /* dead_ogonek */
+ { 0x0000fe53, 11100 }, /* dead_perispomeni */
+ { 0x0000fe64, 11117 }, /* dead_psili */
+ { 0x0000fe5f, 11128 }, /* dead_semivoiced_sound */
+ { 0x0000fe8a, 11150 }, /* dead_small_schwa */
+ { 0x0000fe63, 11167 }, /* dead_stroke */
+ { 0x0000fe53, 11179 }, /* dead_tilde */
+ { 0x0000fe88, 11190 }, /* dead_u */
+ { 0x0000fe89, 11197 }, /* dead_U */
+ { 0x0000fe5e, 11204 }, /* dead_voiced_sound */
+ { 0x00000abd, 11222 }, /* decimalpoint */
+ { 0x000000b0, 11235 }, /* degree */
+ { 0x0000ffff, 11242 }, /* Delete */
+ { 0x1000ff73, 11249 }, /* DeleteChar */
+ { 0x1000ff71, 11260 }, /* DeleteLine */
+ { 0x1000fe60, 11271 }, /* Dgrave_accent */
+ { 0x000000a8, 11285 }, /* diaeresis */
+ { 0x00000aed, 11295 }, /* diamond */
+ { 0x00000aa5, 11303 }, /* digitspace */
+ { 0x0100222c, 11314 }, /* dintegral */
+ { 0x000000f7, 11324 }, /* division */
+ { 0x00000024, 11333 }, /* dollar */
+ { 0x010020ab, 11340 }, /* DongSign */
+ { 0x00000aaf, 11349 }, /* doubbaselinedot */
+ { 0x000001bd, 11365 }, /* doubleacute */
+ { 0x00000af2, 11377 }, /* doubledagger */
+ { 0x00000afe, 11390 }, /* doublelowquotemark */
+ { 0x0000ff54, 11409 }, /* Down */
+ { 0x000008fe, 11414 }, /* downarrow */
+ { 0x00000ba8, 11424 }, /* downcaret */
+ { 0x00000bd6, 11434 }, /* downshoe */
+ { 0x00000bc4, 11443 }, /* downstile */
+ { 0x00000bc2, 11453 }, /* downtack */
+ { 0x1000ff00, 11462 }, /* DRemove */
+ { 0x1000feb0, 11470 }, /* Dring_accent */
+ { 0x000001d0, 11483 }, /* Dstroke */
+ { 0x000001f0, 11491 }, /* dstroke */
+ { 0x1000fe7e, 11499 }, /* Dtilde */
+ { 0x00000045, 11506 }, /* E */
+ { 0x00000065, 11508 }, /* e */
+ { 0x000003cc, 11510 }, /* Eabovedot */
+ { 0x000003ec, 11520 }, /* eabovedot */
+ { 0x000000c9, 11530 }, /* Eacute */
+ { 0x000000e9, 11537 }, /* eacute */
+ { 0x01001eb8, 11544 }, /* Ebelowdot */
+ { 0x01001eb9, 11554 }, /* ebelowdot */
+ { 0x000001cc, 11564 }, /* Ecaron */
+ { 0x000001ec, 11571 }, /* ecaron */
+ { 0x000000ca, 11578 }, /* Ecircumflex */
+ { 0x000000ea, 11590 }, /* ecircumflex */
+ { 0x01001ebe, 11602 }, /* Ecircumflexacute */
+ { 0x01001ebf, 11619 }, /* ecircumflexacute */
+ { 0x01001ec6, 11636 }, /* Ecircumflexbelowdot */
+ { 0x01001ec7, 11656 }, /* ecircumflexbelowdot */
+ { 0x01001ec0, 11676 }, /* Ecircumflexgrave */
+ { 0x01001ec1, 11693 }, /* ecircumflexgrave */
+ { 0x01001ec2, 11710 }, /* Ecircumflexhook */
+ { 0x01001ec3, 11726 }, /* ecircumflexhook */
+ { 0x01001ec4, 11742 }, /* Ecircumflextilde */
+ { 0x01001ec5, 11759 }, /* ecircumflextilde */
+ { 0x010020a0, 11776 }, /* EcuSign */
+ { 0x000000cb, 11784 }, /* Ediaeresis */
+ { 0x000000eb, 11795 }, /* ediaeresis */
+ { 0x000000c8, 11806 }, /* Egrave */
+ { 0x000000e8, 11813 }, /* egrave */
+ { 0x01001eba, 11820 }, /* Ehook */
+ { 0x01001ebb, 11826 }, /* ehook */
+ { 0x01002088, 11832 }, /* eightsubscript */
+ { 0x01002078, 11847 }, /* eightsuperior */
+ { 0x0000ff2f, 11861 }, /* Eisu_Shift */
+ { 0x0000ff30, 11872 }, /* Eisu_toggle */
+ { 0x01002208, 11884 }, /* elementof */
+ { 0x00000aae, 11894 }, /* ellipsis */
+ { 0x00000aa3, 11903 }, /* em3space */
+ { 0x00000aa4, 11912 }, /* em4space */
+ { 0x000003aa, 11921 }, /* Emacron */
+ { 0x000003ba, 11929 }, /* emacron */
+ { 0x00000aa9, 11937 }, /* emdash */
+ { 0x00000ade, 11944 }, /* emfilledcircle */
+ { 0x00000adf, 11959 }, /* emfilledrect */
+ { 0x00000ace, 11972 }, /* emopencircle */
+ { 0x00000acf, 11985 }, /* emopenrectangle */
+ { 0x01002205, 12001 }, /* emptyset */
+ { 0x00000aa1, 12010 }, /* emspace */
+ { 0x0000ff57, 12018 }, /* End */
+ { 0x00000aaa, 12022 }, /* endash */
+ { 0x00000ae6, 12029 }, /* enfilledcircbullet */
+ { 0x00000ae7, 12048 }, /* enfilledsqbullet */
+ { 0x000003bd, 12065 }, /* ENG */
+ { 0x000003bf, 12069 }, /* eng */
+ { 0x00000ae0, 12073 }, /* enopencircbullet */
+ { 0x00000ae1, 12090 }, /* enopensquarebullet */
+ { 0x00000aa2, 12109 }, /* enspace */
+ { 0x000001ca, 12117 }, /* Eogonek */
+ { 0x000001ea, 12125 }, /* eogonek */
+ { 0x0000003d, 12133 }, /* equal */
+ { 0x0000ff1b, 12139 }, /* Escape */
+ { 0x000000d0, 12146 }, /* ETH */
+ { 0x000000d0, 12150 }, /* Eth */
+ { 0x000000f0, 12154 }, /* eth */
+ { 0x01001ebc, 12158 }, /* Etilde */
+ { 0x01001ebd, 12165 }, /* etilde */
+ { 0x000020ac, 12172 }, /* EuroSign */
+ { 0x00000021, 12181 }, /* exclam */
+ { 0x000000a1, 12188 }, /* exclamdown */
+ { 0x0000ff62, 12199 }, /* Execute */
+ { 0x1000ff76, 12207 }, /* Ext16bit_L */
+ { 0x1000ff77, 12218 }, /* Ext16bit_R */
+ { 0x010001b7, 12229 }, /* EZH */
+ { 0x01000292, 12233 }, /* ezh */
+ { 0x00000046, 12237 }, /* F */
+ { 0x00000066, 12239 }, /* f */
+ { 0x0000ffbe, 12241 }, /* F1 */
+ { 0x0000ffc7, 12244 }, /* F10 */
+ { 0x0000ffc8, 12248 }, /* F11 */
+ { 0x0000ffc9, 12252 }, /* F12 */
+ { 0x0000ffca, 12256 }, /* F13 */
+ { 0x0000ffcb, 12260 }, /* F14 */
+ { 0x0000ffcc, 12264 }, /* F15 */
+ { 0x0000ffcd, 12268 }, /* F16 */
+ { 0x0000ffce, 12272 }, /* F17 */
+ { 0x0000ffcf, 12276 }, /* F18 */
+ { 0x0000ffd0, 12280 }, /* F19 */
+ { 0x0000ffbf, 12284 }, /* F2 */
+ { 0x0000ffd1, 12287 }, /* F20 */
+ { 0x0000ffd2, 12291 }, /* F21 */
+ { 0x0000ffd3, 12295 }, /* F22 */
+ { 0x0000ffd4, 12299 }, /* F23 */
+ { 0x0000ffd5, 12303 }, /* F24 */
+ { 0x0000ffd6, 12307 }, /* F25 */
+ { 0x0000ffd7, 12311 }, /* F26 */
+ { 0x0000ffd8, 12315 }, /* F27 */
+ { 0x0000ffd9, 12319 }, /* F28 */
+ { 0x0000ffda, 12323 }, /* F29 */
+ { 0x0000ffc0, 12327 }, /* F3 */
+ { 0x0000ffdb, 12330 }, /* F30 */
+ { 0x0000ffdc, 12334 }, /* F31 */
+ { 0x0000ffdd, 12338 }, /* F32 */
+ { 0x0000ffde, 12342 }, /* F33 */
+ { 0x0000ffdf, 12346 }, /* F34 */
+ { 0x0000ffe0, 12350 }, /* F35 */
+ { 0x0000ffc1, 12354 }, /* F4 */
+ { 0x0000ffc2, 12357 }, /* F5 */
+ { 0x0000ffc3, 12360 }, /* F6 */
+ { 0x0000ffc4, 12363 }, /* F7 */
+ { 0x0000ffc5, 12366 }, /* F8 */
+ { 0x0000ffc6, 12369 }, /* F9 */
+ { 0x01001e1e, 12372 }, /* Fabovedot */
+ { 0x01001e1f, 12382 }, /* fabovedot */
+ { 0x010006f0, 12392 }, /* Farsi_0 */
+ { 0x010006f1, 12400 }, /* Farsi_1 */
+ { 0x010006f2, 12408 }, /* Farsi_2 */
+ { 0x010006f3, 12416 }, /* Farsi_3 */
+ { 0x010006f4, 12424 }, /* Farsi_4 */
+ { 0x010006f5, 12432 }, /* Farsi_5 */
+ { 0x010006f6, 12440 }, /* Farsi_6 */
+ { 0x010006f7, 12448 }, /* Farsi_7 */
+ { 0x010006f8, 12456 }, /* Farsi_8 */
+ { 0x010006f9, 12464 }, /* Farsi_9 */
+ { 0x010006cc, 12472 }, /* Farsi_yeh */
+ { 0x00000af8, 12482 }, /* femalesymbol */
+ { 0x000009e3, 12495 }, /* ff */
+ { 0x010020a3, 12498 }, /* FFrancSign */
+ { 0x00000abb, 12509 }, /* figdash */
+ { 0x00000adc, 12517 }, /* filledlefttribullet */
+ { 0x00000adb, 12537 }, /* filledrectbullet */
+ { 0x00000add, 12554 }, /* filledrighttribullet */
+ { 0x00000ae9, 12575 }, /* filledtribulletdown */
+ { 0x00000ae8, 12595 }, /* filledtribulletup */
+ { 0x0000ff68, 12613 }, /* Find */
+ { 0x0000fed0, 12618 }, /* First_Virtual_Screen */
+ { 0x00000ac5, 12639 }, /* fiveeighths */
+ { 0x00000ab7, 12651 }, /* fivesixths */
+ { 0x01002085, 12662 }, /* fivesubscript */
+ { 0x01002075, 12676 }, /* fivesuperior */
+ { 0x00000ab5, 12689 }, /* fourfifths */
+ { 0x01002084, 12700 }, /* foursubscript */
+ { 0x01002074, 12714 }, /* foursuperior */
+ { 0x0100221c, 12727 }, /* fourthroot */
+ { 0x000008f6, 12738 }, /* function */
+ { 0x00000047, 12747 }, /* G */
+ { 0x00000067, 12749 }, /* g */
+ { 0x000002d5, 12751 }, /* Gabovedot */
+ { 0x000002f5, 12761 }, /* gabovedot */
+ { 0x000002ab, 12771 }, /* Gbreve */
+ { 0x000002bb, 12778 }, /* gbreve */
+ { 0x010001e6, 12785 }, /* Gcaron */
+ { 0x010001e7, 12792 }, /* gcaron */
+ { 0x000003ab, 12799 }, /* Gcedilla */
+ { 0x000003bb, 12808 }, /* gcedilla */
+ { 0x000002d8, 12817 }, /* Gcircumflex */
+ { 0x000002f8, 12829 }, /* gcircumflex */
+ { 0x010010d0, 12841 }, /* Georgian_an */
+ { 0x010010d1, 12853 }, /* Georgian_ban */
+ { 0x010010ea, 12866 }, /* Georgian_can */
+ { 0x010010ed, 12879 }, /* Georgian_char */
+ { 0x010010e9, 12893 }, /* Georgian_chin */
+ { 0x010010ec, 12907 }, /* Georgian_cil */
+ { 0x010010d3, 12920 }, /* Georgian_don */
+ { 0x010010d4, 12933 }, /* Georgian_en */
+ { 0x010010f6, 12945 }, /* Georgian_fi */
+ { 0x010010d2, 12957 }, /* Georgian_gan */
+ { 0x010010e6, 12970 }, /* Georgian_ghan */
+ { 0x010010f0, 12984 }, /* Georgian_hae */
+ { 0x010010f4, 12997 }, /* Georgian_har */
+ { 0x010010f1, 13010 }, /* Georgian_he */
+ { 0x010010f2, 13022 }, /* Georgian_hie */
+ { 0x010010f5, 13035 }, /* Georgian_hoe */
+ { 0x010010d8, 13048 }, /* Georgian_in */
+ { 0x010010ef, 13060 }, /* Georgian_jhan */
+ { 0x010010eb, 13074 }, /* Georgian_jil */
+ { 0x010010d9, 13087 }, /* Georgian_kan */
+ { 0x010010e5, 13100 }, /* Georgian_khar */
+ { 0x010010da, 13114 }, /* Georgian_las */
+ { 0x010010db, 13127 }, /* Georgian_man */
+ { 0x010010dc, 13140 }, /* Georgian_nar */
+ { 0x010010dd, 13153 }, /* Georgian_on */
+ { 0x010010de, 13165 }, /* Georgian_par */
+ { 0x010010e4, 13178 }, /* Georgian_phar */
+ { 0x010010e7, 13192 }, /* Georgian_qar */
+ { 0x010010e0, 13205 }, /* Georgian_rae */
+ { 0x010010e1, 13218 }, /* Georgian_san */
+ { 0x010010e8, 13231 }, /* Georgian_shin */
+ { 0x010010d7, 13245 }, /* Georgian_tan */
+ { 0x010010e2, 13258 }, /* Georgian_tar */
+ { 0x010010e3, 13271 }, /* Georgian_un */
+ { 0x010010d5, 13283 }, /* Georgian_vin */
+ { 0x010010f3, 13296 }, /* Georgian_we */
+ { 0x010010ee, 13308 }, /* Georgian_xan */
+ { 0x010010d6, 13321 }, /* Georgian_zen */
+ { 0x010010df, 13334 }, /* Georgian_zhar */
+ { 0x00000060, 13348 }, /* grave */
+ { 0x0000003e, 13354 }, /* greater */
+ { 0x000008be, 13362 }, /* greaterthanequal */
+ { 0x000007ae, 13379 }, /* Greek_accentdieresis */
+ { 0x000007c1, 13400 }, /* Greek_ALPHA */
+ { 0x000007e1, 13412 }, /* Greek_alpha */
+ { 0x000007a1, 13424 }, /* Greek_ALPHAaccent */
+ { 0x000007b1, 13442 }, /* Greek_alphaaccent */
+ { 0x000007c2, 13460 }, /* Greek_BETA */
+ { 0x000007e2, 13471 }, /* Greek_beta */
+ { 0x000007d7, 13482 }, /* Greek_CHI */
+ { 0x000007f7, 13492 }, /* Greek_chi */
+ { 0x000007c4, 13502 }, /* Greek_DELTA */
+ { 0x000007e4, 13514 }, /* Greek_delta */
+ { 0x000007c5, 13526 }, /* Greek_EPSILON */
+ { 0x000007e5, 13540 }, /* Greek_epsilon */
+ { 0x000007a2, 13554 }, /* Greek_EPSILONaccent */
+ { 0x000007b2, 13574 }, /* Greek_epsilonaccent */
+ { 0x000007c7, 13594 }, /* Greek_ETA */
+ { 0x000007e7, 13604 }, /* Greek_eta */
+ { 0x000007a3, 13614 }, /* Greek_ETAaccent */
+ { 0x000007b3, 13630 }, /* Greek_etaaccent */
+ { 0x000007f3, 13646 }, /* Greek_finalsmallsigma */
+ { 0x000007c3, 13668 }, /* Greek_GAMMA */
+ { 0x000007e3, 13680 }, /* Greek_gamma */
+ { 0x000007af, 13692 }, /* Greek_horizbar */
+ { 0x000007c9, 13707 }, /* Greek_IOTA */
+ { 0x000007e9, 13718 }, /* Greek_iota */
+ { 0x000007a4, 13729 }, /* Greek_IOTAaccent */
+ { 0x000007b4, 13746 }, /* Greek_iotaaccent */
+ { 0x000007b6, 13763 }, /* Greek_iotaaccentdieresis */
+ { 0x000007a5, 13788 }, /* Greek_IOTAdiaeresis */
+ { 0x000007a5, 13808 }, /* Greek_IOTAdieresis */
+ { 0x000007b5, 13827 }, /* Greek_iotadieresis */
+ { 0x000007ca, 13846 }, /* Greek_KAPPA */
+ { 0x000007ea, 13858 }, /* Greek_kappa */
+ { 0x000007cb, 13870 }, /* Greek_LAMBDA */
+ { 0x000007eb, 13883 }, /* Greek_lambda */
+ { 0x000007cb, 13896 }, /* Greek_LAMDA */
+ { 0x000007eb, 13908 }, /* Greek_lamda */
+ { 0x000007cc, 13920 }, /* Greek_MU */
+ { 0x000007ec, 13929 }, /* Greek_mu */
+ { 0x000007cd, 13938 }, /* Greek_NU */
+ { 0x000007ed, 13947 }, /* Greek_nu */
+ { 0x000007d9, 13956 }, /* Greek_OMEGA */
+ { 0x000007f9, 13968 }, /* Greek_omega */
+ { 0x000007ab, 13980 }, /* Greek_OMEGAaccent */
+ { 0x000007bb, 13998 }, /* Greek_omegaaccent */
+ { 0x000007cf, 14016 }, /* Greek_OMICRON */
+ { 0x000007ef, 14030 }, /* Greek_omicron */
+ { 0x000007a7, 14044 }, /* Greek_OMICRONaccent */
+ { 0x000007b7, 14064 }, /* Greek_omicronaccent */
+ { 0x000007d6, 14084 }, /* Greek_PHI */
+ { 0x000007f6, 14094 }, /* Greek_phi */
+ { 0x000007d0, 14104 }, /* Greek_PI */
+ { 0x000007f0, 14113 }, /* Greek_pi */
+ { 0x000007d8, 14122 }, /* Greek_PSI */
+ { 0x000007f8, 14132 }, /* Greek_psi */
+ { 0x000007d1, 14142 }, /* Greek_RHO */
+ { 0x000007f1, 14152 }, /* Greek_rho */
+ { 0x000007d2, 14162 }, /* Greek_SIGMA */
+ { 0x000007f2, 14174 }, /* Greek_sigma */
+ { 0x0000ff7e, 14186 }, /* Greek_switch */
+ { 0x000007d4, 14199 }, /* Greek_TAU */
+ { 0x000007f4, 14209 }, /* Greek_tau */
+ { 0x000007c8, 14219 }, /* Greek_THETA */
+ { 0x000007e8, 14231 }, /* Greek_theta */
+ { 0x000007d5, 14243 }, /* Greek_UPSILON */
+ { 0x000007f5, 14257 }, /* Greek_upsilon */
+ { 0x000007a8, 14271 }, /* Greek_UPSILONaccent */
+ { 0x000007b8, 14291 }, /* Greek_upsilonaccent */
+ { 0x000007ba, 14311 }, /* Greek_upsilonaccentdieresis */
+ { 0x000007a9, 14339 }, /* Greek_UPSILONdieresis */
+ { 0x000007b9, 14361 }, /* Greek_upsilondieresis */
+ { 0x000007ce, 14383 }, /* Greek_XI */
+ { 0x000007ee, 14392 }, /* Greek_xi */
+ { 0x000007c6, 14401 }, /* Greek_ZETA */
+ { 0x000007e6, 14412 }, /* Greek_zeta */
+ { 0x100000be, 14423 }, /* guilder */
+ { 0x000000ab, 14431 }, /* guillemotleft */
+ { 0x000000bb, 14445 }, /* guillemotright */
+ { 0x00000048, 14460 }, /* H */
+ { 0x00000068, 14462 }, /* h */
+ { 0x00000aa8, 14464 }, /* hairspace */
+ { 0x0000ff31, 14474 }, /* Hangul */
+ { 0x00000ebf, 14481 }, /* Hangul_A */
+ { 0x00000ec0, 14490 }, /* Hangul_AE */
+ { 0x00000ef6, 14500 }, /* Hangul_AraeA */
+ { 0x00000ef7, 14513 }, /* Hangul_AraeAE */
+ { 0x0000ff39, 14527 }, /* Hangul_Banja */
+ { 0x00000eba, 14540 }, /* Hangul_Cieuc */
+ { 0x0000ff37, 14553 }, /* Hangul_Codeinput */
+ { 0x00000ea7, 14570 }, /* Hangul_Dikeud */
+ { 0x00000ec4, 14584 }, /* Hangul_E */
+ { 0x0000ff33, 14593 }, /* Hangul_End */
+ { 0x00000ec3, 14604 }, /* Hangul_EO */
+ { 0x00000ed1, 14614 }, /* Hangul_EU */
+ { 0x0000ff34, 14624 }, /* Hangul_Hanja */
+ { 0x00000ebe, 14637 }, /* Hangul_Hieuh */
+ { 0x00000ed3, 14650 }, /* Hangul_I */
+ { 0x00000eb7, 14659 }, /* Hangul_Ieung */
+ { 0x00000eea, 14672 }, /* Hangul_J_Cieuc */
+ { 0x00000eda, 14687 }, /* Hangul_J_Dikeud */
+ { 0x00000eee, 14703 }, /* Hangul_J_Hieuh */
+ { 0x00000ee8, 14718 }, /* Hangul_J_Ieung */
+ { 0x00000ee9, 14733 }, /* Hangul_J_Jieuj */
+ { 0x00000eeb, 14748 }, /* Hangul_J_Khieuq */
+ { 0x00000ed4, 14764 }, /* Hangul_J_Kiyeog */
+ { 0x00000ed6, 14780 }, /* Hangul_J_KiyeogSios */
+ { 0x00000ef9, 14800 }, /* Hangul_J_KkogjiDalrinIeung */
+ { 0x00000ee3, 14827 }, /* Hangul_J_Mieum */
+ { 0x00000ed7, 14842 }, /* Hangul_J_Nieun */
+ { 0x00000ed9, 14857 }, /* Hangul_J_NieunHieuh */
+ { 0x00000ed8, 14877 }, /* Hangul_J_NieunJieuj */
+ { 0x00000ef8, 14897 }, /* Hangul_J_PanSios */
+ { 0x00000eed, 14914 }, /* Hangul_J_Phieuf */
+ { 0x00000ee4, 14930 }, /* Hangul_J_Pieub */
+ { 0x00000ee5, 14945 }, /* Hangul_J_PieubSios */
+ { 0x00000edb, 14964 }, /* Hangul_J_Rieul */
+ { 0x00000ee2, 14979 }, /* Hangul_J_RieulHieuh */
+ { 0x00000edc, 14999 }, /* Hangul_J_RieulKiyeog */
+ { 0x00000edd, 15020 }, /* Hangul_J_RieulMieum */
+ { 0x00000ee1, 15040 }, /* Hangul_J_RieulPhieuf */
+ { 0x00000ede, 15061 }, /* Hangul_J_RieulPieub */
+ { 0x00000edf, 15081 }, /* Hangul_J_RieulSios */
+ { 0x00000ee0, 15100 }, /* Hangul_J_RieulTieut */
+ { 0x00000ee6, 15120 }, /* Hangul_J_Sios */
+ { 0x00000ed5, 15134 }, /* Hangul_J_SsangKiyeog */
+ { 0x00000ee7, 15155 }, /* Hangul_J_SsangSios */
+ { 0x00000eec, 15174 }, /* Hangul_J_Tieut */
+ { 0x00000efa, 15189 }, /* Hangul_J_YeorinHieuh */
+ { 0x0000ff35, 15210 }, /* Hangul_Jamo */
+ { 0x0000ff38, 15222 }, /* Hangul_Jeonja */
+ { 0x00000eb8, 15236 }, /* Hangul_Jieuj */
+ { 0x00000ebb, 15249 }, /* Hangul_Khieuq */
+ { 0x00000ea1, 15263 }, /* Hangul_Kiyeog */
+ { 0x00000ea3, 15277 }, /* Hangul_KiyeogSios */
+ { 0x00000ef3, 15295 }, /* Hangul_KkogjiDalrinIeung */
+ { 0x00000eb1, 15320 }, /* Hangul_Mieum */
+ { 0x0000ff3d, 15333 }, /* Hangul_MultipleCandidate */
+ { 0x00000ea4, 15358 }, /* Hangul_Nieun */
+ { 0x00000ea6, 15371 }, /* Hangul_NieunHieuh */
+ { 0x00000ea5, 15389 }, /* Hangul_NieunJieuj */
+ { 0x00000ec7, 15407 }, /* Hangul_O */
+ { 0x00000eca, 15416 }, /* Hangul_OE */
+ { 0x00000ef2, 15426 }, /* Hangul_PanSios */
+ { 0x00000ebd, 15441 }, /* Hangul_Phieuf */
+ { 0x00000eb2, 15455 }, /* Hangul_Pieub */
+ { 0x00000eb4, 15468 }, /* Hangul_PieubSios */
+ { 0x0000ff3b, 15485 }, /* Hangul_PostHanja */
+ { 0x0000ff3a, 15502 }, /* Hangul_PreHanja */
+ { 0x0000ff3e, 15518 }, /* Hangul_PreviousCandidate */
+ { 0x00000ea9, 15543 }, /* Hangul_Rieul */
+ { 0x00000eb0, 15556 }, /* Hangul_RieulHieuh */
+ { 0x00000eaa, 15574 }, /* Hangul_RieulKiyeog */
+ { 0x00000eab, 15593 }, /* Hangul_RieulMieum */
+ { 0x00000eaf, 15611 }, /* Hangul_RieulPhieuf */
+ { 0x00000eac, 15630 }, /* Hangul_RieulPieub */
+ { 0x00000ead, 15648 }, /* Hangul_RieulSios */
+ { 0x00000eae, 15665 }, /* Hangul_RieulTieut */
+ { 0x00000eef, 15683 }, /* Hangul_RieulYeorinHieuh */
+ { 0x0000ff36, 15707 }, /* Hangul_Romaja */
+ { 0x0000ff3c, 15721 }, /* Hangul_SingleCandidate */
+ { 0x00000eb5, 15744 }, /* Hangul_Sios */
+ { 0x0000ff3f, 15756 }, /* Hangul_Special */
+ { 0x00000ea8, 15771 }, /* Hangul_SsangDikeud */
+ { 0x00000eb9, 15790 }, /* Hangul_SsangJieuj */
+ { 0x00000ea2, 15808 }, /* Hangul_SsangKiyeog */
+ { 0x00000eb3, 15827 }, /* Hangul_SsangPieub */
+ { 0x00000eb6, 15845 }, /* Hangul_SsangSios */
+ { 0x0000ff32, 15862 }, /* Hangul_Start */
+ { 0x00000ef0, 15875 }, /* Hangul_SunkyeongeumMieum */
+ { 0x00000ef4, 15900 }, /* Hangul_SunkyeongeumPhieuf */
+ { 0x00000ef1, 15926 }, /* Hangul_SunkyeongeumPieub */
+ { 0x0000ff7e, 15951 }, /* Hangul_switch */
+ { 0x00000ebc, 15965 }, /* Hangul_Tieut */
+ { 0x00000ecc, 15978 }, /* Hangul_U */
+ { 0x00000ec8, 15987 }, /* Hangul_WA */
+ { 0x00000ec9, 15997 }, /* Hangul_WAE */
+ { 0x00000ece, 16008 }, /* Hangul_WE */
+ { 0x00000ecd, 16018 }, /* Hangul_WEO */
+ { 0x00000ecf, 16029 }, /* Hangul_WI */
+ { 0x00000ec1, 16039 }, /* Hangul_YA */
+ { 0x00000ec2, 16049 }, /* Hangul_YAE */
+ { 0x00000ec6, 16060 }, /* Hangul_YE */
+ { 0x00000ec5, 16070 }, /* Hangul_YEO */
+ { 0x00000ef5, 16081 }, /* Hangul_YeorinHieuh */
+ { 0x00000ed2, 16100 }, /* Hangul_YI */
+ { 0x00000ecb, 16110 }, /* Hangul_YO */
+ { 0x00000ed0, 16120 }, /* Hangul_YU */
+ { 0x0000ff29, 16130 }, /* Hankaku */
+ { 0x000002a6, 16138 }, /* Hcircumflex */
+ { 0x000002b6, 16150 }, /* hcircumflex */
+ { 0x00000aee, 16162 }, /* heart */
+ { 0x00000ce0, 16168 }, /* hebrew_aleph */
+ { 0x00000cf2, 16181 }, /* hebrew_ayin */
+ { 0x00000ce1, 16193 }, /* hebrew_bet */
+ { 0x00000ce1, 16204 }, /* hebrew_beth */
+ { 0x00000ce7, 16216 }, /* hebrew_chet */
+ { 0x00000ce3, 16228 }, /* hebrew_dalet */
+ { 0x00000ce3, 16241 }, /* hebrew_daleth */
+ { 0x00000cdf, 16255 }, /* hebrew_doublelowline */
+ { 0x00000cea, 16276 }, /* hebrew_finalkaph */
+ { 0x00000ced, 16293 }, /* hebrew_finalmem */
+ { 0x00000cef, 16309 }, /* hebrew_finalnun */
+ { 0x00000cf3, 16325 }, /* hebrew_finalpe */
+ { 0x00000cf5, 16340 }, /* hebrew_finalzade */
+ { 0x00000cf5, 16357 }, /* hebrew_finalzadi */
+ { 0x00000ce2, 16374 }, /* hebrew_gimel */
+ { 0x00000ce2, 16387 }, /* hebrew_gimmel */
+ { 0x00000ce4, 16401 }, /* hebrew_he */
+ { 0x00000ce7, 16411 }, /* hebrew_het */
+ { 0x00000ceb, 16422 }, /* hebrew_kaph */
+ { 0x00000cf7, 16434 }, /* hebrew_kuf */
+ { 0x00000cec, 16445 }, /* hebrew_lamed */
+ { 0x00000cee, 16458 }, /* hebrew_mem */
+ { 0x00000cf0, 16469 }, /* hebrew_nun */
+ { 0x00000cf4, 16480 }, /* hebrew_pe */
+ { 0x00000cf7, 16490 }, /* hebrew_qoph */
+ { 0x00000cf8, 16502 }, /* hebrew_resh */
+ { 0x00000cf1, 16514 }, /* hebrew_samech */
+ { 0x00000cf1, 16528 }, /* hebrew_samekh */
+ { 0x00000cf9, 16542 }, /* hebrew_shin */
+ { 0x0000ff7e, 16554 }, /* Hebrew_switch */
+ { 0x00000cfa, 16568 }, /* hebrew_taf */
+ { 0x00000cfa, 16579 }, /* hebrew_taw */
+ { 0x00000ce8, 16590 }, /* hebrew_tet */
+ { 0x00000ce8, 16601 }, /* hebrew_teth */
+ { 0x00000ce5, 16613 }, /* hebrew_waw */
+ { 0x00000ce9, 16624 }, /* hebrew_yod */
+ { 0x00000cf6, 16635 }, /* hebrew_zade */
+ { 0x00000cf6, 16647 }, /* hebrew_zadi */
+ { 0x00000ce6, 16659 }, /* hebrew_zain */
+ { 0x00000ce6, 16671 }, /* hebrew_zayin */
+ { 0x0000ff6a, 16684 }, /* Help */
+ { 0x0000ff23, 16689 }, /* Henkan */
+ { 0x0000ff23, 16696 }, /* Henkan_Mode */
+ { 0x00000ada, 16708 }, /* hexagram */
+ { 0x0000ff25, 16717 }, /* Hiragana */
+ { 0x0000ff27, 16726 }, /* Hiragana_Katakana */
+ { 0x0000ff50, 16744 }, /* Home */
+ { 0x000008a3, 16749 }, /* horizconnector */
+ { 0x000009ef, 16764 }, /* horizlinescan1 */
+ { 0x000009f0, 16779 }, /* horizlinescan3 */
+ { 0x000009f1, 16794 }, /* horizlinescan5 */
+ { 0x000009f2, 16809 }, /* horizlinescan7 */
+ { 0x000009f3, 16824 }, /* horizlinescan9 */
+ { 0x1000ff74, 16839 }, /* hpBackTab */
+ { 0x100000fc, 16849 }, /* hpblock */
+ { 0x1000ff6f, 16857 }, /* hpClearLine */
+ { 0x1000ff73, 16869 }, /* hpDeleteChar */
+ { 0x1000ff71, 16882 }, /* hpDeleteLine */
+ { 0x100000be, 16895 }, /* hpguilder */
+ { 0x1000ff72, 16905 }, /* hpInsertChar */
+ { 0x1000ff70, 16918 }, /* hpInsertLine */
+ { 0x100000ee, 16931 }, /* hpIO */
+ { 0x1000ff75, 16936 }, /* hpKP_BackTab */
+ { 0x100000af, 16949 }, /* hplira */
+ { 0x100000f6, 16956 }, /* hplongminus */
+ { 0x1000ff48, 16968 }, /* hpModelock1 */
+ { 0x1000ff49, 16980 }, /* hpModelock2 */
+ { 0x100000a8, 16992 }, /* hpmute_acute */
+ { 0x100000aa, 17005 }, /* hpmute_asciicircum */
+ { 0x100000ac, 17024 }, /* hpmute_asciitilde */
+ { 0x100000ab, 17042 }, /* hpmute_diaeresis */
+ { 0x100000a9, 17059 }, /* hpmute_grave */
+ { 0x1000ff6c, 17072 }, /* hpReset */
+ { 0x1000ff6d, 17080 }, /* hpSystem */
+ { 0x1000ff6e, 17089 }, /* hpUser */
+ { 0x100000ee, 17096 }, /* hpYdiaeresis */
+ { 0x000002a1, 17109 }, /* Hstroke */
+ { 0x000002b1, 17117 }, /* hstroke */
+ { 0x000009e2, 17125 }, /* ht */
+ { 0x0000ffed, 17128 }, /* Hyper_L */
+ { 0x0000ffee, 17136 }, /* Hyper_R */
+ { 0x000000ad, 17144 }, /* hyphen */
+ { 0x00000049, 17151 }, /* I */
+ { 0x00000069, 17153 }, /* i */
+ { 0x000002a9, 17155 }, /* Iabovedot */
+ { 0x000000cd, 17165 }, /* Iacute */
+ { 0x000000ed, 17172 }, /* iacute */
+ { 0x01001eca, 17179 }, /* Ibelowdot */
+ { 0x01001ecb, 17189 }, /* ibelowdot */
+ { 0x0100012c, 17199 }, /* Ibreve */
+ { 0x0100012d, 17206 }, /* ibreve */
+ { 0x000000ce, 17213 }, /* Icircumflex */
+ { 0x000000ee, 17225 }, /* icircumflex */
+ { 0x000008cf, 17237 }, /* identical */
+ { 0x000000cf, 17247 }, /* Idiaeresis */
+ { 0x000000ef, 17258 }, /* idiaeresis */
+ { 0x000002b9, 17269 }, /* idotless */
+ { 0x000008cd, 17278 }, /* ifonlyif */
+ { 0x000000cc, 17287 }, /* Igrave */
+ { 0x000000ec, 17294 }, /* igrave */
+ { 0x01001ec8, 17301 }, /* Ihook */
+ { 0x01001ec9, 17307 }, /* ihook */
+ { 0x000003cf, 17313 }, /* Imacron */
+ { 0x000003ef, 17321 }, /* imacron */
+ { 0x000008ce, 17329 }, /* implies */
+ { 0x000008da, 17337 }, /* includedin */
+ { 0x000008db, 17348 }, /* includes */
+ { 0x000008c2, 17357 }, /* infinity */
+ { 0x0000ff63, 17366 }, /* Insert */
+ { 0x1000ff72, 17373 }, /* InsertChar */
+ { 0x1000ff70, 17384 }, /* InsertLine */
+ { 0x000008bf, 17395 }, /* integral */
+ { 0x000008dc, 17404 }, /* intersection */
+ { 0x100000ee, 17417 }, /* IO */
+ { 0x000003c7, 17420 }, /* Iogonek */
+ { 0x000003e7, 17428 }, /* iogonek */
+ { 0x0000fe33, 17436 }, /* ISO_Center_Object */
+ { 0x0000fe30, 17454 }, /* ISO_Continuous_Underline */
+ { 0x0000fe31, 17479 }, /* ISO_Discontinuous_Underline */
+ { 0x0000fe32, 17507 }, /* ISO_Emphasize */
+ { 0x0000fe34, 17521 }, /* ISO_Enter */
+ { 0x0000fe2f, 17531 }, /* ISO_Fast_Cursor_Down */
+ { 0x0000fe2c, 17552 }, /* ISO_Fast_Cursor_Left */
+ { 0x0000fe2d, 17573 }, /* ISO_Fast_Cursor_Right */
+ { 0x0000fe2e, 17595 }, /* ISO_Fast_Cursor_Up */
+ { 0x0000fe0c, 17614 }, /* ISO_First_Group */
+ { 0x0000fe0d, 17630 }, /* ISO_First_Group_Lock */
+ { 0x0000fe06, 17651 }, /* ISO_Group_Latch */
+ { 0x0000fe07, 17667 }, /* ISO_Group_Lock */
+ { 0x0000ff7e, 17682 }, /* ISO_Group_Shift */
+ { 0x0000fe0e, 17698 }, /* ISO_Last_Group */
+ { 0x0000fe0f, 17713 }, /* ISO_Last_Group_Lock */
+ { 0x0000fe20, 17733 }, /* ISO_Left_Tab */
+ { 0x0000fe02, 17746 }, /* ISO_Level2_Latch */
+ { 0x0000fe04, 17763 }, /* ISO_Level3_Latch */
+ { 0x0000fe05, 17780 }, /* ISO_Level3_Lock */
+ { 0x0000fe03, 17796 }, /* ISO_Level3_Shift */
+ { 0x0000fe12, 17813 }, /* ISO_Level5_Latch */
+ { 0x0000fe13, 17830 }, /* ISO_Level5_Lock */
+ { 0x0000fe11, 17846 }, /* ISO_Level5_Shift */
+ { 0x0000fe01, 17863 }, /* ISO_Lock */
+ { 0x0000fe22, 17872 }, /* ISO_Move_Line_Down */
+ { 0x0000fe21, 17891 }, /* ISO_Move_Line_Up */
+ { 0x0000fe08, 17908 }, /* ISO_Next_Group */
+ { 0x0000fe09, 17923 }, /* ISO_Next_Group_Lock */
+ { 0x0000fe24, 17943 }, /* ISO_Partial_Line_Down */
+ { 0x0000fe23, 17965 }, /* ISO_Partial_Line_Up */
+ { 0x0000fe25, 17985 }, /* ISO_Partial_Space_Left */
+ { 0x0000fe26, 18008 }, /* ISO_Partial_Space_Right */
+ { 0x0000fe0a, 18032 }, /* ISO_Prev_Group */
+ { 0x0000fe0b, 18047 }, /* ISO_Prev_Group_Lock */
+ { 0x0000fe2b, 18067 }, /* ISO_Release_Both_Margins */
+ { 0x0000fe29, 18092 }, /* ISO_Release_Margin_Left */
+ { 0x0000fe2a, 18116 }, /* ISO_Release_Margin_Right */
+ { 0x0000fe27, 18141 }, /* ISO_Set_Margin_Left */
+ { 0x0000fe28, 18161 }, /* ISO_Set_Margin_Right */
+ { 0x000003a5, 18182 }, /* Itilde */
+ { 0x000003b5, 18189 }, /* itilde */
+ { 0x0000004a, 18196 }, /* J */
+ { 0x0000006a, 18198 }, /* j */
+ { 0x000002ac, 18200 }, /* Jcircumflex */
+ { 0x000002bc, 18212 }, /* jcircumflex */
+ { 0x00000bca, 18224 }, /* jot */
+ { 0x0000004b, 18228 }, /* K */
+ { 0x0000006b, 18230 }, /* k */
+ { 0x000004a7, 18232 }, /* kana_a */
+ { 0x000004b1, 18239 }, /* kana_A */
+ { 0x000004c1, 18246 }, /* kana_CHI */
+ { 0x000004a3, 18255 }, /* kana_closingbracket */
+ { 0x000004a4, 18275 }, /* kana_comma */
+ { 0x000004a5, 18286 }, /* kana_conjunctive */
+ { 0x000004aa, 18303 }, /* kana_e */
+ { 0x000004b4, 18310 }, /* kana_E */
+ { 0x000004cc, 18317 }, /* kana_FU */
+ { 0x000004a1, 18325 }, /* kana_fullstop */
+ { 0x000004ca, 18339 }, /* kana_HA */
+ { 0x000004cd, 18347 }, /* kana_HE */
+ { 0x000004cb, 18355 }, /* kana_HI */
+ { 0x000004ce, 18363 }, /* kana_HO */
+ { 0x000004cc, 18371 }, /* kana_HU */
+ { 0x000004a8, 18379 }, /* kana_i */
+ { 0x000004b2, 18386 }, /* kana_I */
+ { 0x000004b6, 18393 }, /* kana_KA */
+ { 0x000004b9, 18401 }, /* kana_KE */
+ { 0x000004b7, 18409 }, /* kana_KI */
+ { 0x000004ba, 18417 }, /* kana_KO */
+ { 0x000004b8, 18425 }, /* kana_KU */
+ { 0x0000ff2d, 18433 }, /* Kana_Lock */
+ { 0x000004cf, 18443 }, /* kana_MA */
+ { 0x000004d2, 18451 }, /* kana_ME */
+ { 0x000004d0, 18459 }, /* kana_MI */
+ { 0x000004a5, 18467 }, /* kana_middledot */
+ { 0x000004d3, 18482 }, /* kana_MO */
+ { 0x000004d1, 18490 }, /* kana_MU */
+ { 0x000004dd, 18498 }, /* kana_N */
+ { 0x000004c5, 18505 }, /* kana_NA */
+ { 0x000004c8, 18513 }, /* kana_NE */
+ { 0x000004c6, 18521 }, /* kana_NI */
+ { 0x000004c9, 18529 }, /* kana_NO */
+ { 0x000004c7, 18537 }, /* kana_NU */
+ { 0x000004ab, 18545 }, /* kana_o */
+ { 0x000004b5, 18552 }, /* kana_O */
+ { 0x000004a2, 18559 }, /* kana_openingbracket */
+ { 0x000004d7, 18579 }, /* kana_RA */
+ { 0x000004da, 18587 }, /* kana_RE */
+ { 0x000004d8, 18595 }, /* kana_RI */
+ { 0x000004db, 18603 }, /* kana_RO */
+ { 0x000004d9, 18611 }, /* kana_RU */
+ { 0x000004bb, 18619 }, /* kana_SA */
+ { 0x000004be, 18627 }, /* kana_SE */
+ { 0x000004bc, 18635 }, /* kana_SHI */
+ { 0x0000ff2e, 18644 }, /* Kana_Shift */
+ { 0x000004bf, 18655 }, /* kana_SO */
+ { 0x000004bd, 18663 }, /* kana_SU */
+ { 0x0000ff7e, 18671 }, /* kana_switch */
+ { 0x000004c0, 18683 }, /* kana_TA */
+ { 0x000004c3, 18691 }, /* kana_TE */
+ { 0x000004c1, 18699 }, /* kana_TI */
+ { 0x000004c4, 18707 }, /* kana_TO */
+ { 0x000004af, 18715 }, /* kana_tsu */
+ { 0x000004c2, 18724 }, /* kana_TSU */
+ { 0x000004af, 18733 }, /* kana_tu */
+ { 0x000004c2, 18741 }, /* kana_TU */
+ { 0x000004a9, 18749 }, /* kana_u */
+ { 0x000004b3, 18756 }, /* kana_U */
+ { 0x000004dc, 18763 }, /* kana_WA */
+ { 0x000004a6, 18771 }, /* kana_WO */
+ { 0x000004ac, 18779 }, /* kana_ya */
+ { 0x000004d4, 18787 }, /* kana_YA */
+ { 0x000004ae, 18795 }, /* kana_yo */
+ { 0x000004d6, 18803 }, /* kana_YO */
+ { 0x000004ad, 18811 }, /* kana_yu */
+ { 0x000004d5, 18819 }, /* kana_YU */
+ { 0x0000ff21, 18827 }, /* Kanji */
+ { 0x0000ff37, 18833 }, /* Kanji_Bangou */
+ { 0x000003a2, 18846 }, /* kappa */
+ { 0x0000ff26, 18852 }, /* Katakana */
+ { 0x000003d3, 18861 }, /* Kcedilla */
+ { 0x000003f3, 18870 }, /* kcedilla */
+ { 0x00000eff, 18879 }, /* Korean_Won */
+ { 0x0000ffb0, 18890 }, /* KP_0 */
+ { 0x0000ffb1, 18895 }, /* KP_1 */
+ { 0x0000ffb2, 18900 }, /* KP_2 */
+ { 0x0000ffb3, 18905 }, /* KP_3 */
+ { 0x0000ffb4, 18910 }, /* KP_4 */
+ { 0x0000ffb5, 18915 }, /* KP_5 */
+ { 0x0000ffb6, 18920 }, /* KP_6 */
+ { 0x0000ffb7, 18925 }, /* KP_7 */
+ { 0x0000ffb8, 18930 }, /* KP_8 */
+ { 0x0000ffb9, 18935 }, /* KP_9 */
+ { 0x0000ffab, 18940 }, /* KP_Add */
+ { 0x1000ff75, 18947 }, /* KP_BackTab */
+ { 0x0000ff9d, 18958 }, /* KP_Begin */
+ { 0x0000ffae, 18967 }, /* KP_Decimal */
+ { 0x0000ff9f, 18978 }, /* KP_Delete */
+ { 0x0000ffaf, 18988 }, /* KP_Divide */
+ { 0x0000ff99, 18998 }, /* KP_Down */
+ { 0x0000ff9c, 19006 }, /* KP_End */
+ { 0x0000ff8d, 19013 }, /* KP_Enter */
+ { 0x0000ffbd, 19022 }, /* KP_Equal */
+ { 0x0000ff91, 19031 }, /* KP_F1 */
+ { 0x0000ff92, 19037 }, /* KP_F2 */
+ { 0x0000ff93, 19043 }, /* KP_F3 */
+ { 0x0000ff94, 19049 }, /* KP_F4 */
+ { 0x0000ff95, 19055 }, /* KP_Home */
+ { 0x0000ff9e, 19063 }, /* KP_Insert */
+ { 0x0000ff96, 19073 }, /* KP_Left */
+ { 0x0000ffaa, 19081 }, /* KP_Multiply */
+ { 0x0000ff9b, 19093 }, /* KP_Next */
+ { 0x0000ff9b, 19101 }, /* KP_Page_Down */
+ { 0x0000ff9a, 19114 }, /* KP_Page_Up */
+ { 0x0000ff9a, 19125 }, /* KP_Prior */
+ { 0x0000ff98, 19134 }, /* KP_Right */
+ { 0x0000ffac, 19143 }, /* KP_Separator */
+ { 0x0000ff80, 19156 }, /* KP_Space */
+ { 0x0000ffad, 19165 }, /* KP_Subtract */
+ { 0x0000ff89, 19177 }, /* KP_Tab */
+ { 0x0000ff97, 19184 }, /* KP_Up */
+ { 0x000003a2, 19190 }, /* kra */
+ { 0x0000004c, 19194 }, /* L */
+ { 0x0000006c, 19196 }, /* l */
+ { 0x0000ffc8, 19198 }, /* L1 */
+ { 0x0000ffd1, 19201 }, /* L10 */
+ { 0x0000ffc9, 19205 }, /* L2 */
+ { 0x0000ffca, 19208 }, /* L3 */
+ { 0x0000ffcb, 19211 }, /* L4 */
+ { 0x0000ffcc, 19214 }, /* L5 */
+ { 0x0000ffcd, 19217 }, /* L6 */
+ { 0x0000ffce, 19220 }, /* L7 */
+ { 0x0000ffcf, 19223 }, /* L8 */
+ { 0x0000ffd0, 19226 }, /* L9 */
+ { 0x000001c5, 19229 }, /* Lacute */
+ { 0x000001e5, 19236 }, /* lacute */
+ { 0x0000fed4, 19243 }, /* Last_Virtual_Screen */
+ { 0x00000ad9, 19263 }, /* latincross */
+ { 0x01001e36, 19274 }, /* Lbelowdot */
+ { 0x01001e37, 19284 }, /* lbelowdot */
+ { 0x000001a5, 19294 }, /* Lcaron */
+ { 0x000001b5, 19301 }, /* lcaron */
+ { 0x000003a6, 19308 }, /* Lcedilla */
+ { 0x000003b6, 19317 }, /* lcedilla */
+ { 0x0000ff51, 19326 }, /* Left */
+ { 0x00000abc, 19331 }, /* leftanglebracket */
+ { 0x000008fb, 19348 }, /* leftarrow */
+ { 0x00000ba3, 19358 }, /* leftcaret */
+ { 0x00000ad2, 19368 }, /* leftdoublequotemark */
+ { 0x000008af, 19388 }, /* leftmiddlecurlybrace */
+ { 0x00000acc, 19409 }, /* leftopentriangle */
+ { 0x00000aea, 19426 }, /* leftpointer */
+ { 0x000008a1, 19438 }, /* leftradical */
+ { 0x00000bda, 19450 }, /* leftshoe */
+ { 0x00000ad0, 19459 }, /* leftsinglequotemark */
+ { 0x000009f4, 19479 }, /* leftt */
+ { 0x00000bdc, 19485 }, /* lefttack */
+ { 0x0000003c, 19494 }, /* less */
+ { 0x000008bc, 19499 }, /* lessthanequal */
+ { 0x000009e5, 19513 }, /* lf */
+ { 0x0000ff0a, 19516 }, /* Linefeed */
+ { 0x100000af, 19525 }, /* lira */
+ { 0x010020a4, 19530 }, /* LiraSign */
+ { 0x000008de, 19539 }, /* logicaland */
+ { 0x000008df, 19550 }, /* logicalor */
+ { 0x100000f6, 19560 }, /* longminus */
+ { 0x000009ed, 19570 }, /* lowleftcorner */
+ { 0x000009ea, 19584 }, /* lowrightcorner */
+ { 0x000001a3, 19599 }, /* Lstroke */
+ { 0x000001b3, 19607 }, /* lstroke */
+ { 0x0000004d, 19615 }, /* M */
+ { 0x0000006d, 19617 }, /* m */
+ { 0x01001e40, 19619 }, /* Mabovedot */
+ { 0x01001e41, 19629 }, /* mabovedot */
+ { 0x000006a5, 19639 }, /* Macedonia_dse */
+ { 0x000006b5, 19653 }, /* Macedonia_DSE */
+ { 0x000006a2, 19667 }, /* Macedonia_gje */
+ { 0x000006b2, 19681 }, /* Macedonia_GJE */
+ { 0x000006ac, 19695 }, /* Macedonia_kje */
+ { 0x000006bc, 19709 }, /* Macedonia_KJE */
+ { 0x000000af, 19723 }, /* macron */
+ { 0x0000ff3e, 19730 }, /* Mae_Koho */
+ { 0x00000af7, 19739 }, /* malesymbol */
+ { 0x00000af0, 19750 }, /* maltesecross */
+ { 0x00000abf, 19763 }, /* marker */
+ { 0x000000ba, 19770 }, /* masculine */
+ { 0x0000ff2c, 19780 }, /* Massyo */
+ { 0x0000ff67, 19787 }, /* Menu */
+ { 0x0000ffe7, 19792 }, /* Meta_L */
+ { 0x0000ffe8, 19799 }, /* Meta_R */
+ { 0x010020a5, 19806 }, /* MillSign */
+ { 0x0000002d, 19815 }, /* minus */
+ { 0x00000ad6, 19821 }, /* minutes */
+ { 0x0000ff7e, 19829 }, /* Mode_switch */
+ { 0x0000fe77, 19841 }, /* MouseKeys_Accel_Enable */
+ { 0x0000fe76, 19864 }, /* MouseKeys_Enable */
+ { 0x000000b5, 19881 }, /* mu */
+ { 0x0000ff22, 19884 }, /* Muhenkan */
+ { 0x0000ff20, 19893 }, /* Multi_key */
+ { 0x0000ff3d, 19903 }, /* MultipleCandidate */
+ { 0x000000d7, 19921 }, /* multiply */
+ { 0x00000af6, 19930 }, /* musicalflat */
+ { 0x00000af5, 19942 }, /* musicalsharp */
+ { 0x100000a8, 19955 }, /* mute_acute */
+ { 0x100000aa, 19966 }, /* mute_asciicircum */
+ { 0x100000ac, 19983 }, /* mute_asciitilde */
+ { 0x100000ab, 19999 }, /* mute_diaeresis */
+ { 0x100000a9, 20014 }, /* mute_grave */
+ { 0x0000004e, 20025 }, /* N */
+ { 0x0000006e, 20027 }, /* n */
+ { 0x000008c5, 20029 }, /* nabla */
+ { 0x000001d1, 20035 }, /* Nacute */
+ { 0x000001f1, 20042 }, /* nacute */
+ { 0x010020a6, 20049 }, /* NairaSign */
+ { 0x000001d2, 20059 }, /* Ncaron */
+ { 0x000001f2, 20066 }, /* ncaron */
+ { 0x000003d1, 20073 }, /* Ncedilla */
+ { 0x000003f1, 20082 }, /* ncedilla */
+ { 0x010020aa, 20091 }, /* NewSheqelSign */
+ { 0x0000ff56, 20105 }, /* Next */
+ { 0x0000fed2, 20110 }, /* Next_Virtual_Screen */
+ { 0x01002089, 20130 }, /* ninesubscript */
+ { 0x01002079, 20144 }, /* ninesuperior */
+ { 0x000009e8, 20157 }, /* nl */
+ { 0x000000a0, 20160 }, /* nobreakspace */
+ { 0x00000000, 20173 }, /* NoSymbol */
+ { 0x01002247, 20182 }, /* notapproxeq */
+ { 0x01002209, 20194 }, /* notelementof */
+ { 0x000008bd, 20207 }, /* notequal */
+ { 0x01002262, 20216 }, /* notidentical */
+ { 0x000000ac, 20229 }, /* notsign */
+ { 0x000000d1, 20237 }, /* Ntilde */
+ { 0x000000f1, 20244 }, /* ntilde */
+ { 0x0000ff7f, 20251 }, /* Num_Lock */
+ { 0x00000023, 20260 }, /* numbersign */
+ { 0x000006b0, 20271 }, /* numerosign */
+ { 0x0000004f, 20282 }, /* O */
+ { 0x0000006f, 20284 }, /* o */
+ { 0x000000d3, 20286 }, /* Oacute */
+ { 0x000000f3, 20293 }, /* oacute */
+ { 0x0100019f, 20300 }, /* Obarred */
+ { 0x01000275, 20308 }, /* obarred */
+ { 0x01001ecc, 20316 }, /* Obelowdot */
+ { 0x01001ecd, 20326 }, /* obelowdot */
+ { 0x010001d1, 20336 }, /* Ocaron */
+ { 0x010001d2, 20343 }, /* ocaron */
+ { 0x000000d4, 20350 }, /* Ocircumflex */
+ { 0x000000f4, 20362 }, /* ocircumflex */
+ { 0x01001ed0, 20374 }, /* Ocircumflexacute */
+ { 0x01001ed1, 20391 }, /* ocircumflexacute */
+ { 0x01001ed8, 20408 }, /* Ocircumflexbelowdot */
+ { 0x01001ed9, 20428 }, /* ocircumflexbelowdot */
+ { 0x01001ed2, 20448 }, /* Ocircumflexgrave */
+ { 0x01001ed3, 20465 }, /* ocircumflexgrave */
+ { 0x01001ed4, 20482 }, /* Ocircumflexhook */
+ { 0x01001ed5, 20498 }, /* ocircumflexhook */
+ { 0x01001ed6, 20514 }, /* Ocircumflextilde */
+ { 0x01001ed7, 20531 }, /* ocircumflextilde */
+ { 0x000000d6, 20548 }, /* Odiaeresis */
+ { 0x000000f6, 20559 }, /* odiaeresis */
+ { 0x000001d5, 20570 }, /* Odoubleacute */
+ { 0x000001f5, 20583 }, /* odoubleacute */
+ { 0x000013bc, 20596 }, /* OE */
+ { 0x000013bd, 20599 }, /* oe */
+ { 0x000001b2, 20602 }, /* ogonek */
+ { 0x000000d2, 20609 }, /* Ograve */
+ { 0x000000f2, 20616 }, /* ograve */
+ { 0x01001ece, 20623 }, /* Ohook */
+ { 0x01001ecf, 20629 }, /* ohook */
+ { 0x010001a0, 20635 }, /* Ohorn */
+ { 0x010001a1, 20641 }, /* ohorn */
+ { 0x01001eda, 20647 }, /* Ohornacute */
+ { 0x01001edb, 20658 }, /* ohornacute */
+ { 0x01001ee2, 20669 }, /* Ohornbelowdot */
+ { 0x01001ee3, 20683 }, /* ohornbelowdot */
+ { 0x01001edc, 20697 }, /* Ohorngrave */
+ { 0x01001edd, 20708 }, /* ohorngrave */
+ { 0x01001ede, 20719 }, /* Ohornhook */
+ { 0x01001edf, 20729 }, /* ohornhook */
+ { 0x01001ee0, 20739 }, /* Ohorntilde */
+ { 0x01001ee1, 20750 }, /* ohorntilde */
+ { 0x000003d2, 20761 }, /* Omacron */
+ { 0x000003f2, 20769 }, /* omacron */
+ { 0x00000ac3, 20777 }, /* oneeighth */
+ { 0x00000ab2, 20787 }, /* onefifth */
+ { 0x000000bd, 20796 }, /* onehalf */
+ { 0x000000bc, 20804 }, /* onequarter */
+ { 0x00000ab6, 20815 }, /* onesixth */
+ { 0x01002081, 20824 }, /* onesubscript */
+ { 0x000000b9, 20837 }, /* onesuperior */
+ { 0x00000ab0, 20849 }, /* onethird */
+ { 0x000000d8, 20858 }, /* Ooblique */
+ { 0x000000f8, 20867 }, /* ooblique */
+ { 0x00000ae2, 20876 }, /* openrectbullet */
+ { 0x00000ae5, 20891 }, /* openstar */
+ { 0x00000ae4, 20900 }, /* opentribulletdown */
+ { 0x00000ae3, 20918 }, /* opentribulletup */
+ { 0x000000aa, 20934 }, /* ordfeminine */
+ { 0x1004ff44, 20946 }, /* osfActivate */
+ { 0x1004ff31, 20958 }, /* osfAddMode */
+ { 0x1004ff08, 20969 }, /* osfBackSpace */
+ { 0x1004ff07, 20982 }, /* osfBackTab */
+ { 0x1004ff5a, 20993 }, /* osfBeginData */
+ { 0x1004ff58, 21006 }, /* osfBeginLine */
+ { 0x1004ff69, 21019 }, /* osfCancel */
+ { 0x1004ff0b, 21029 }, /* osfClear */
+ { 0x1004ff02, 21038 }, /* osfCopy */
+ { 0x1004ff03, 21046 }, /* osfCut */
+ { 0x1004ffff, 21053 }, /* osfDelete */
+ { 0x1004ff72, 21063 }, /* osfDeselectAll */
+ { 0x1004ff54, 21078 }, /* osfDown */
+ { 0x1004ff59, 21086 }, /* osfEndData */
+ { 0x1004ff57, 21097 }, /* osfEndLine */
+ { 0x1004ff1b, 21108 }, /* osfEscape */
+ { 0x1004ff74, 21118 }, /* osfExtend */
+ { 0x1004ff6a, 21128 }, /* osfHelp */
+ { 0x1004ff63, 21136 }, /* osfInsert */
+ { 0x1004ff51, 21146 }, /* osfLeft */
+ { 0x1004ff67, 21154 }, /* osfMenu */
+ { 0x1004ff45, 21162 }, /* osfMenuBar */
+ { 0x1004ff5e, 21173 }, /* osfNextField */
+ { 0x1004ff5c, 21186 }, /* osfNextMenu */
+ { 0x1004ff42, 21198 }, /* osfPageDown */
+ { 0x1004ff40, 21210 }, /* osfPageLeft */
+ { 0x1004ff43, 21222 }, /* osfPageRight */
+ { 0x1004ff41, 21235 }, /* osfPageUp */
+ { 0x1004ff04, 21245 }, /* osfPaste */
+ { 0x1004ff5d, 21254 }, /* osfPrevField */
+ { 0x1004ff5b, 21267 }, /* osfPrevMenu */
+ { 0x1004ff32, 21279 }, /* osfPrimaryPaste */
+ { 0x1004ff33, 21295 }, /* osfQuickPaste */
+ { 0x1004ff73, 21309 }, /* osfReselect */
+ { 0x1004ff78, 21321 }, /* osfRestore */
+ { 0x1004ff53, 21332 }, /* osfRight */
+ { 0x1004ff60, 21341 }, /* osfSelect */
+ { 0x1004ff71, 21351 }, /* osfSelectAll */
+ { 0x1004ff65, 21364 }, /* osfUndo */
+ { 0x1004ff52, 21372 }, /* osfUp */
+ { 0x000000d8, 21378 }, /* Oslash */
+ { 0x000000f8, 21385 }, /* oslash */
+ { 0x000000d5, 21392 }, /* Otilde */
+ { 0x000000f5, 21399 }, /* otilde */
+ { 0x00000bc0, 21406 }, /* overbar */
+ { 0x0000fe78, 21414 }, /* Overlay1_Enable */
+ { 0x0000fe79, 21430 }, /* Overlay2_Enable */
+ { 0x0000047e, 21446 }, /* overline */
+ { 0x00000050, 21455 }, /* P */
+ { 0x00000070, 21457 }, /* p */
+ { 0x01001e56, 21459 }, /* Pabovedot */
+ { 0x01001e57, 21469 }, /* pabovedot */
+ { 0x0000ff56, 21479 }, /* Page_Down */
+ { 0x0000ff55, 21489 }, /* Page_Up */
+ { 0x000000b6, 21497 }, /* paragraph */
+ { 0x00000028, 21507 }, /* parenleft */
+ { 0x00000029, 21517 }, /* parenright */
+ { 0x01002202, 21528 }, /* partdifferential */
+ { 0x000008ef, 21545 }, /* partialderivative */
+ { 0x0000ff13, 21563 }, /* Pause */
+ { 0x00000025, 21569 }, /* percent */
+ { 0x0000002e, 21577 }, /* period */
+ { 0x000000b7, 21584 }, /* periodcentered */
+ { 0x00000ad5, 21599 }, /* permille */
+ { 0x010020a7, 21608 }, /* PesetaSign */
+ { 0x00000afb, 21619 }, /* phonographcopyright */
+ { 0x0000002b, 21639 }, /* plus */
+ { 0x000000b1, 21644 }, /* plusminus */
+ { 0x0000fefa, 21654 }, /* Pointer_Accelerate */
+ { 0x0000fee9, 21673 }, /* Pointer_Button1 */
+ { 0x0000feea, 21689 }, /* Pointer_Button2 */
+ { 0x0000feeb, 21705 }, /* Pointer_Button3 */
+ { 0x0000feec, 21721 }, /* Pointer_Button4 */
+ { 0x0000feed, 21737 }, /* Pointer_Button5 */
+ { 0x0000fee8, 21753 }, /* Pointer_Button_Dflt */
+ { 0x0000feef, 21773 }, /* Pointer_DblClick1 */
+ { 0x0000fef0, 21791 }, /* Pointer_DblClick2 */
+ { 0x0000fef1, 21809 }, /* Pointer_DblClick3 */
+ { 0x0000fef2, 21827 }, /* Pointer_DblClick4 */
+ { 0x0000fef3, 21845 }, /* Pointer_DblClick5 */
+ { 0x0000feee, 21863 }, /* Pointer_DblClick_Dflt */
+ { 0x0000fefb, 21885 }, /* Pointer_DfltBtnNext */
+ { 0x0000fefc, 21905 }, /* Pointer_DfltBtnPrev */
+ { 0x0000fee3, 21925 }, /* Pointer_Down */
+ { 0x0000fee6, 21938 }, /* Pointer_DownLeft */
+ { 0x0000fee7, 21955 }, /* Pointer_DownRight */
+ { 0x0000fef5, 21973 }, /* Pointer_Drag1 */
+ { 0x0000fef6, 21987 }, /* Pointer_Drag2 */
+ { 0x0000fef7, 22001 }, /* Pointer_Drag3 */
+ { 0x0000fef8, 22015 }, /* Pointer_Drag4 */
+ { 0x0000fefd, 22029 }, /* Pointer_Drag5 */
+ { 0x0000fef4, 22043 }, /* Pointer_Drag_Dflt */
+ { 0x0000fef9, 22061 }, /* Pointer_EnableKeys */
+ { 0x0000fee0, 22080 }, /* Pointer_Left */
+ { 0x0000fee1, 22093 }, /* Pointer_Right */
+ { 0x0000fee2, 22107 }, /* Pointer_Up */
+ { 0x0000fee4, 22118 }, /* Pointer_UpLeft */
+ { 0x0000fee5, 22133 }, /* Pointer_UpRight */
+ { 0x00000ad4, 22149 }, /* prescription */
+ { 0x0000fed1, 22162 }, /* Prev_Virtual_Screen */
+ { 0x0000ff3e, 22182 }, /* PreviousCandidate */
+ { 0x0000ff61, 22200 }, /* Print */
+ { 0x0000ff55, 22206 }, /* Prior */
+ { 0x000004b0, 22212 }, /* prolongedsound */
+ { 0x00000aa6, 22227 }, /* punctspace */
+ { 0x00000051, 22238 }, /* Q */
+ { 0x00000071, 22240 }, /* q */
+ { 0x00000bcc, 22242 }, /* quad */
+ { 0x0000003f, 22247 }, /* question */
+ { 0x000000bf, 22256 }, /* questiondown */
+ { 0x00000022, 22269 }, /* quotedbl */
+ { 0x00000060, 22278 }, /* quoteleft */
+ { 0x00000027, 22288 }, /* quoteright */
+ { 0x00000052, 22299 }, /* R */
+ { 0x00000072, 22301 }, /* r */
+ { 0x0000ffd2, 22303 }, /* R1 */
+ { 0x0000ffdb, 22306 }, /* R10 */
+ { 0x0000ffdc, 22310 }, /* R11 */
+ { 0x0000ffdd, 22314 }, /* R12 */
+ { 0x0000ffde, 22318 }, /* R13 */
+ { 0x0000ffdf, 22322 }, /* R14 */
+ { 0x0000ffe0, 22326 }, /* R15 */
+ { 0x0000ffd3, 22330 }, /* R2 */
+ { 0x0000ffd4, 22333 }, /* R3 */
+ { 0x0000ffd5, 22336 }, /* R4 */
+ { 0x0000ffd6, 22339 }, /* R5 */
+ { 0x0000ffd7, 22342 }, /* R6 */
+ { 0x0000ffd8, 22345 }, /* R7 */
+ { 0x0000ffd9, 22348 }, /* R8 */
+ { 0x0000ffda, 22351 }, /* R9 */
+ { 0x000001c0, 22354 }, /* Racute */
+ { 0x000001e0, 22361 }, /* racute */
+ { 0x000008d6, 22368 }, /* radical */
+ { 0x000001d8, 22376 }, /* Rcaron */
+ { 0x000001f8, 22383 }, /* rcaron */
+ { 0x000003a3, 22390 }, /* Rcedilla */
+ { 0x000003b3, 22399 }, /* rcedilla */
+ { 0x0000ff66, 22408 }, /* Redo */
+ { 0x000000ae, 22413 }, /* registered */
+ { 0x0000fe72, 22424 }, /* RepeatKeys_Enable */
+ { 0x1000ff6c, 22442 }, /* Reset */
+ { 0x0000ff0d, 22448 }, /* Return */
+ { 0x0000ff53, 22455 }, /* Right */
+ { 0x00000abe, 22461 }, /* rightanglebracket */
+ { 0x000008fd, 22479 }, /* rightarrow */
+ { 0x00000ba6, 22490 }, /* rightcaret */
+ { 0x00000ad3, 22501 }, /* rightdoublequotemark */
+ { 0x000008b0, 22522 }, /* rightmiddlecurlybrace */
+ { 0x000008b7, 22544 }, /* rightmiddlesummation */
+ { 0x00000acd, 22565 }, /* rightopentriangle */
+ { 0x00000aeb, 22583 }, /* rightpointer */
+ { 0x00000bd8, 22596 }, /* rightshoe */
+ { 0x00000ad1, 22606 }, /* rightsinglequotemark */
+ { 0x000009f5, 22627 }, /* rightt */
+ { 0x00000bfc, 22634 }, /* righttack */
+ { 0x0000ff24, 22644 }, /* Romaji */
+ { 0x010020a8, 22651 }, /* RupeeSign */
+ { 0x00000053, 22661 }, /* S */
+ { 0x00000073, 22663 }, /* s */
+ { 0x01001e60, 22665 }, /* Sabovedot */
+ { 0x01001e61, 22675 }, /* sabovedot */
+ { 0x000001a6, 22685 }, /* Sacute */
+ { 0x000001b6, 22692 }, /* sacute */
+ { 0x000001a9, 22699 }, /* Scaron */
+ { 0x000001b9, 22706 }, /* scaron */
+ { 0x000001aa, 22713 }, /* Scedilla */
+ { 0x000001ba, 22722 }, /* scedilla */
+ { 0x0100018f, 22731 }, /* SCHWA */
+ { 0x01000259, 22737 }, /* schwa */
+ { 0x000002de, 22743 }, /* Scircumflex */
+ { 0x000002fe, 22755 }, /* scircumflex */
+ { 0x0000ff7e, 22767 }, /* script_switch */
+ { 0x0000ff14, 22781 }, /* Scroll_Lock */
+ { 0x00000ad7, 22793 }, /* seconds */
+ { 0x000000a7, 22801 }, /* section */
+ { 0x0000ff60, 22809 }, /* Select */
+ { 0x0000003b, 22816 }, /* semicolon */
+ { 0x000004df, 22826 }, /* semivoicedsound */
+ { 0x000006a1, 22842 }, /* Serbian_dje */
+ { 0x000006b1, 22854 }, /* Serbian_DJE */
+ { 0x000006af, 22866 }, /* Serbian_dze */
+ { 0x000006bf, 22878 }, /* Serbian_DZE */
+ { 0x000006a8, 22890 }, /* Serbian_je */
+ { 0x000006b8, 22901 }, /* Serbian_JE */
+ { 0x000006a9, 22912 }, /* Serbian_lje */
+ { 0x000006b9, 22924 }, /* Serbian_LJE */
+ { 0x000006aa, 22936 }, /* Serbian_nje */
+ { 0x000006ba, 22948 }, /* Serbian_NJE */
+ { 0x000006ab, 22960 }, /* Serbian_tshe */
+ { 0x000006bb, 22973 }, /* Serbian_TSHE */
+ { 0x00000ac6, 22986 }, /* seveneighths */
+ { 0x01002087, 22999 }, /* sevensubscript */
+ { 0x01002077, 23014 }, /* sevensuperior */
+ { 0x0000ffe1, 23028 }, /* Shift_L */
+ { 0x0000ffe6, 23036 }, /* Shift_Lock */
+ { 0x0000ffe2, 23047 }, /* Shift_R */
+ { 0x00000aca, 23055 }, /* signaturemark */
+ { 0x00000aac, 23069 }, /* signifblank */
+ { 0x000008c9, 23081 }, /* similarequal */
+ { 0x0000ff3c, 23094 }, /* SingleCandidate */
+ { 0x00000afd, 23110 }, /* singlelowquotemark */
+ { 0x01000d85, 23129 }, /* Sinh_a */
+ { 0x01000d86, 23136 }, /* Sinh_aa */
+ { 0x01000dcf, 23144 }, /* Sinh_aa2 */
+ { 0x01000d87, 23153 }, /* Sinh_ae */
+ { 0x01000dd0, 23161 }, /* Sinh_ae2 */
+ { 0x01000d88, 23170 }, /* Sinh_aee */
+ { 0x01000dd1, 23179 }, /* Sinh_aee2 */
+ { 0x01000d93, 23189 }, /* Sinh_ai */
+ { 0x01000ddb, 23197 }, /* Sinh_ai2 */
+ { 0x01000dca, 23206 }, /* Sinh_al */
+ { 0x01000d96, 23214 }, /* Sinh_au */
+ { 0x01000dde, 23222 }, /* Sinh_au2 */
+ { 0x01000db6, 23231 }, /* Sinh_ba */
+ { 0x01000db7, 23239 }, /* Sinh_bha */
+ { 0x01000da0, 23248 }, /* Sinh_ca */
+ { 0x01000da1, 23256 }, /* Sinh_cha */
+ { 0x01000da9, 23265 }, /* Sinh_dda */
+ { 0x01000daa, 23274 }, /* Sinh_ddha */
+ { 0x01000daf, 23284 }, /* Sinh_dha */
+ { 0x01000db0, 23293 }, /* Sinh_dhha */
+ { 0x01000d91, 23303 }, /* Sinh_e */
+ { 0x01000dd9, 23310 }, /* Sinh_e2 */
+ { 0x01000d92, 23318 }, /* Sinh_ee */
+ { 0x01000dda, 23326 }, /* Sinh_ee2 */
+ { 0x01000dc6, 23335 }, /* Sinh_fa */
+ { 0x01000d9c, 23343 }, /* Sinh_ga */
+ { 0x01000d9d, 23351 }, /* Sinh_gha */
+ { 0x01000d83, 23360 }, /* Sinh_h2 */
+ { 0x01000dc4, 23368 }, /* Sinh_ha */
+ { 0x01000d89, 23376 }, /* Sinh_i */
+ { 0x01000dd2, 23383 }, /* Sinh_i2 */
+ { 0x01000d8a, 23391 }, /* Sinh_ii */
+ { 0x01000dd3, 23399 }, /* Sinh_ii2 */
+ { 0x01000da2, 23408 }, /* Sinh_ja */
+ { 0x01000da3, 23416 }, /* Sinh_jha */
+ { 0x01000da5, 23425 }, /* Sinh_jnya */
+ { 0x01000d9a, 23435 }, /* Sinh_ka */
+ { 0x01000d9b, 23443 }, /* Sinh_kha */
+ { 0x01000df4, 23452 }, /* Sinh_kunddaliya */
+ { 0x01000dbd, 23468 }, /* Sinh_la */
+ { 0x01000dc5, 23476 }, /* Sinh_lla */
+ { 0x01000d8f, 23485 }, /* Sinh_lu */
+ { 0x01000ddf, 23493 }, /* Sinh_lu2 */
+ { 0x01000d90, 23502 }, /* Sinh_luu */
+ { 0x01000df3, 23511 }, /* Sinh_luu2 */
+ { 0x01000db8, 23521 }, /* Sinh_ma */
+ { 0x01000db9, 23529 }, /* Sinh_mba */
+ { 0x01000db1, 23538 }, /* Sinh_na */
+ { 0x01000dac, 23546 }, /* Sinh_ndda */
+ { 0x01000db3, 23556 }, /* Sinh_ndha */
+ { 0x01000d82, 23566 }, /* Sinh_ng */
+ { 0x01000d9e, 23574 }, /* Sinh_ng2 */
+ { 0x01000d9f, 23583 }, /* Sinh_nga */
+ { 0x01000da6, 23592 }, /* Sinh_nja */
+ { 0x01000dab, 23601 }, /* Sinh_nna */
+ { 0x01000da4, 23610 }, /* Sinh_nya */
+ { 0x01000d94, 23619 }, /* Sinh_o */
+ { 0x01000ddc, 23626 }, /* Sinh_o2 */
+ { 0x01000d95, 23634 }, /* Sinh_oo */
+ { 0x01000ddd, 23642 }, /* Sinh_oo2 */
+ { 0x01000db4, 23651 }, /* Sinh_pa */
+ { 0x01000db5, 23659 }, /* Sinh_pha */
+ { 0x01000dbb, 23668 }, /* Sinh_ra */
+ { 0x01000d8d, 23676 }, /* Sinh_ri */
+ { 0x01000d8e, 23684 }, /* Sinh_rii */
+ { 0x01000dd8, 23693 }, /* Sinh_ru2 */
+ { 0x01000df2, 23702 }, /* Sinh_ruu2 */
+ { 0x01000dc3, 23712 }, /* Sinh_sa */
+ { 0x01000dc1, 23720 }, /* Sinh_sha */
+ { 0x01000dc2, 23729 }, /* Sinh_ssha */
+ { 0x01000dad, 23739 }, /* Sinh_tha */
+ { 0x01000dae, 23748 }, /* Sinh_thha */
+ { 0x01000da7, 23758 }, /* Sinh_tta */
+ { 0x01000da8, 23767 }, /* Sinh_ttha */
+ { 0x01000d8b, 23777 }, /* Sinh_u */
+ { 0x01000dd4, 23784 }, /* Sinh_u2 */
+ { 0x01000d8c, 23792 }, /* Sinh_uu */
+ { 0x01000dd6, 23800 }, /* Sinh_uu2 */
+ { 0x01000dc0, 23809 }, /* Sinh_va */
+ { 0x01000dba, 23817 }, /* Sinh_ya */
+ { 0x01002086, 23825 }, /* sixsubscript */
+ { 0x01002076, 23838 }, /* sixsuperior */
+ { 0x0000002f, 23850 }, /* slash */
+ { 0x0000fe73, 23856 }, /* SlowKeys_Enable */
+ { 0x000009e0, 23872 }, /* soliddiamond */
+ { 0x00000020, 23885 }, /* space */
+ { 0x0100221a, 23891 }, /* squareroot */
+ { 0x000000df, 23902 }, /* ssharp */
+ { 0x000000a3, 23909 }, /* sterling */
+ { 0x0000fe75, 23918 }, /* StickyKeys_Enable */
+ { 0x01002263, 23936 }, /* stricteq */
+ { 0x0000ff66, 23945 }, /* SunAgain */
+ { 0x0000ff7e, 23954 }, /* SunAltGraph */
+ { 0x1005ff77, 23966 }, /* SunAudioLowerVolume */
+ { 0x1005ff78, 23986 }, /* SunAudioMute */
+ { 0x1005ff79, 23999 }, /* SunAudioRaiseVolume */
+ { 0x0000ff20, 24019 }, /* SunCompose */
+ { 0x1005ff72, 24030 }, /* SunCopy */
+ { 0x1005ff75, 24038 }, /* SunCut */
+ { 0x1005ff10, 24045 }, /* SunF36 */
+ { 0x1005ff11, 24052 }, /* SunF37 */
+ { 0x1005ff03, 24059 }, /* SunFA_Acute */
+ { 0x1005ff05, 24071 }, /* SunFA_Cedilla */
+ { 0x1005ff01, 24085 }, /* SunFA_Circum */
+ { 0x1005ff04, 24098 }, /* SunFA_Diaeresis */
+ { 0x1005ff00, 24114 }, /* SunFA_Grave */
+ { 0x1005ff02, 24126 }, /* SunFA_Tilde */
+ { 0x0000ff68, 24138 }, /* SunFind */
+ { 0x1005ff71, 24146 }, /* SunFront */
+ { 0x1005ff73, 24155 }, /* SunOpen */
+ { 0x0000ff56, 24163 }, /* SunPageDown */
+ { 0x0000ff55, 24175 }, /* SunPageUp */
+ { 0x1005ff74, 24185 }, /* SunPaste */
+ { 0x1005ff76, 24194 }, /* SunPowerSwitch */
+ { 0x1005ff7d, 24209 }, /* SunPowerSwitchShift */
+ { 0x0000ff61, 24229 }, /* SunPrint_Screen */
+ { 0x1005ff70, 24245 }, /* SunProps */
+ { 0x0000ff69, 24254 }, /* SunStop */
+ { 0x1005ff60, 24262 }, /* SunSys_Req */
+ { 0x0000ff65, 24273 }, /* SunUndo */
+ { 0x1005ff7a, 24281 }, /* SunVideoDegauss */
+ { 0x1005ff7b, 24297 }, /* SunVideoLowerBrightness */
+ { 0x1005ff7c, 24321 }, /* SunVideoRaiseBrightness */
+ { 0x0000ffeb, 24345 }, /* Super_L */
+ { 0x0000ffec, 24353 }, /* Super_R */
+ { 0x0000ff15, 24361 }, /* Sys_Req */
+ { 0x1000ff6d, 24369 }, /* System */
+ { 0x00000054, 24376 }, /* T */
+ { 0x00000074, 24378 }, /* t */
+ { 0x0000ff09, 24380 }, /* Tab */
+ { 0x01001e6a, 24384 }, /* Tabovedot */
+ { 0x01001e6b, 24394 }, /* tabovedot */
+ { 0x000001ab, 24404 }, /* Tcaron */
+ { 0x000001bb, 24411 }, /* tcaron */
+ { 0x000001de, 24418 }, /* Tcedilla */
+ { 0x000001fe, 24427 }, /* tcedilla */
+ { 0x00000af9, 24436 }, /* telephone */
+ { 0x00000afa, 24446 }, /* telephonerecorder */
+ { 0x0000fed5, 24464 }, /* Terminate_Server */
+ { 0x00000ddf, 24481 }, /* Thai_baht */
+ { 0x00000dba, 24491 }, /* Thai_bobaimai */
+ { 0x00000da8, 24505 }, /* Thai_chochan */
+ { 0x00000daa, 24518 }, /* Thai_chochang */
+ { 0x00000da9, 24532 }, /* Thai_choching */
+ { 0x00000dac, 24546 }, /* Thai_chochoe */
+ { 0x00000dae, 24559 }, /* Thai_dochada */
+ { 0x00000db4, 24572 }, /* Thai_dodek */
+ { 0x00000dbd, 24583 }, /* Thai_fofa */
+ { 0x00000dbf, 24593 }, /* Thai_fofan */
+ { 0x00000dcb, 24604 }, /* Thai_hohip */
+ { 0x00000dce, 24615 }, /* Thai_honokhuk */
+ { 0x00000da2, 24629 }, /* Thai_khokhai */
+ { 0x00000da5, 24642 }, /* Thai_khokhon */
+ { 0x00000da3, 24655 }, /* Thai_khokhuat */
+ { 0x00000da4, 24669 }, /* Thai_khokhwai */
+ { 0x00000da6, 24683 }, /* Thai_khorakhang */
+ { 0x00000da1, 24699 }, /* Thai_kokai */
+ { 0x00000de5, 24710 }, /* Thai_lakkhangyao */
+ { 0x00000df7, 24727 }, /* Thai_lekchet */
+ { 0x00000df5, 24740 }, /* Thai_lekha */
+ { 0x00000df6, 24751 }, /* Thai_lekhok */
+ { 0x00000df9, 24763 }, /* Thai_lekkao */
+ { 0x00000df1, 24775 }, /* Thai_leknung */
+ { 0x00000df8, 24788 }, /* Thai_lekpaet */
+ { 0x00000df3, 24801 }, /* Thai_leksam */
+ { 0x00000df4, 24813 }, /* Thai_leksi */
+ { 0x00000df2, 24824 }, /* Thai_leksong */
+ { 0x00000df0, 24837 }, /* Thai_leksun */
+ { 0x00000dcc, 24849 }, /* Thai_lochula */
+ { 0x00000dc5, 24862 }, /* Thai_loling */
+ { 0x00000dc6, 24874 }, /* Thai_lu */
+ { 0x00000deb, 24882 }, /* Thai_maichattawa */
+ { 0x00000de8, 24899 }, /* Thai_maiek */
+ { 0x00000dd1, 24910 }, /* Thai_maihanakat */
+ { 0x00000dde, 24926 }, /* Thai_maihanakat_maitho */
+ { 0x00000de7, 24949 }, /* Thai_maitaikhu */
+ { 0x00000de9, 24964 }, /* Thai_maitho */
+ { 0x00000dea, 24976 }, /* Thai_maitri */
+ { 0x00000de6, 24988 }, /* Thai_maiyamok */
+ { 0x00000dc1, 25002 }, /* Thai_moma */
+ { 0x00000da7, 25012 }, /* Thai_ngongu */
+ { 0x00000ded, 25024 }, /* Thai_nikhahit */
+ { 0x00000db3, 25038 }, /* Thai_nonen */
+ { 0x00000db9, 25049 }, /* Thai_nonu */
+ { 0x00000dcd, 25059 }, /* Thai_oang */
+ { 0x00000dcf, 25069 }, /* Thai_paiyannoi */
+ { 0x00000dda, 25084 }, /* Thai_phinthu */
+ { 0x00000dbe, 25097 }, /* Thai_phophan */
+ { 0x00000dbc, 25110 }, /* Thai_phophung */
+ { 0x00000dc0, 25124 }, /* Thai_phosamphao */
+ { 0x00000dbb, 25140 }, /* Thai_popla */
+ { 0x00000dc3, 25151 }, /* Thai_rorua */
+ { 0x00000dc4, 25162 }, /* Thai_ru */
+ { 0x00000dd0, 25170 }, /* Thai_saraa */
+ { 0x00000dd2, 25181 }, /* Thai_saraaa */
+ { 0x00000de1, 25193 }, /* Thai_saraae */
+ { 0x00000de4, 25205 }, /* Thai_saraaimaimalai */
+ { 0x00000de3, 25225 }, /* Thai_saraaimaimuan */
+ { 0x00000dd3, 25244 }, /* Thai_saraam */
+ { 0x00000de0, 25256 }, /* Thai_sarae */
+ { 0x00000dd4, 25267 }, /* Thai_sarai */
+ { 0x00000dd5, 25278 }, /* Thai_saraii */
+ { 0x00000de2, 25290 }, /* Thai_sarao */
+ { 0x00000dd8, 25301 }, /* Thai_sarau */
+ { 0x00000dd6, 25312 }, /* Thai_saraue */
+ { 0x00000dd7, 25324 }, /* Thai_sarauee */
+ { 0x00000dd9, 25337 }, /* Thai_sarauu */
+ { 0x00000dc9, 25349 }, /* Thai_sorusi */
+ { 0x00000dc8, 25361 }, /* Thai_sosala */
+ { 0x00000dab, 25373 }, /* Thai_soso */
+ { 0x00000dca, 25383 }, /* Thai_sosua */
+ { 0x00000dec, 25394 }, /* Thai_thanthakhat */
+ { 0x00000db1, 25411 }, /* Thai_thonangmontho */
+ { 0x00000db2, 25430 }, /* Thai_thophuthao */
+ { 0x00000db7, 25446 }, /* Thai_thothahan */
+ { 0x00000db0, 25461 }, /* Thai_thothan */
+ { 0x00000db8, 25474 }, /* Thai_thothong */
+ { 0x00000db6, 25488 }, /* Thai_thothung */
+ { 0x00000daf, 25502 }, /* Thai_topatak */
+ { 0x00000db5, 25515 }, /* Thai_totao */
+ { 0x00000dc7, 25526 }, /* Thai_wowaen */
+ { 0x00000dc2, 25538 }, /* Thai_yoyak */
+ { 0x00000dad, 25549 }, /* Thai_yoying */
+ { 0x000008c0, 25561 }, /* therefore */
+ { 0x00000aa7, 25571 }, /* thinspace */
+ { 0x000000de, 25581 }, /* THORN */
+ { 0x000000de, 25587 }, /* Thorn */
+ { 0x000000fe, 25593 }, /* thorn */
+ { 0x00000ac4, 25599 }, /* threeeighths */
+ { 0x00000ab4, 25612 }, /* threefifths */
+ { 0x000000be, 25624 }, /* threequarters */
+ { 0x01002083, 25638 }, /* threesubscript */
+ { 0x000000b3, 25653 }, /* threesuperior */
+ { 0x0100222d, 25667 }, /* tintegral */
+ { 0x000008a4, 25677 }, /* topintegral */
+ { 0x000008ab, 25689 }, /* topleftparens */
+ { 0x000008a2, 25703 }, /* topleftradical */
+ { 0x000008a7, 25718 }, /* topleftsqbracket */
+ { 0x000008b1, 25735 }, /* topleftsummation */
+ { 0x000008ad, 25752 }, /* toprightparens */
+ { 0x000008a9, 25767 }, /* toprightsqbracket */
+ { 0x000008b5, 25785 }, /* toprightsummation */
+ { 0x000009f7, 25803 }, /* topt */
+ { 0x000008b3, 25808 }, /* topvertsummationconnector */
+ { 0x0000ff2b, 25834 }, /* Touroku */
+ { 0x00000ac9, 25842 }, /* trademark */
+ { 0x00000acb, 25852 }, /* trademarkincircle */
+ { 0x000003ac, 25870 }, /* Tslash */
+ { 0x000003bc, 25877 }, /* tslash */
+ { 0x00000ab3, 25884 }, /* twofifths */
+ { 0x01002082, 25894 }, /* twosubscript */
+ { 0x000000b2, 25907 }, /* twosuperior */
+ { 0x00000ab1, 25919 }, /* twothirds */
+ { 0x00000055, 25929 }, /* U */
+ { 0x00000075, 25931 }, /* u */
+ { 0x000000da, 25933 }, /* Uacute */
+ { 0x000000fa, 25940 }, /* uacute */
+ { 0x01001ee4, 25947 }, /* Ubelowdot */
+ { 0x01001ee5, 25957 }, /* ubelowdot */
+ { 0x000002dd, 25967 }, /* Ubreve */
+ { 0x000002fd, 25974 }, /* ubreve */
+ { 0x000000db, 25981 }, /* Ucircumflex */
+ { 0x000000fb, 25993 }, /* ucircumflex */
+ { 0x000000dc, 26005 }, /* Udiaeresis */
+ { 0x000000fc, 26016 }, /* udiaeresis */
+ { 0x000001db, 26027 }, /* Udoubleacute */
+ { 0x000001fb, 26040 }, /* udoubleacute */
+ { 0x000000d9, 26053 }, /* Ugrave */
+ { 0x000000f9, 26060 }, /* ugrave */
+ { 0x01001ee6, 26067 }, /* Uhook */
+ { 0x01001ee7, 26073 }, /* uhook */
+ { 0x010001af, 26079 }, /* Uhorn */
+ { 0x010001b0, 26085 }, /* uhorn */
+ { 0x01001ee8, 26091 }, /* Uhornacute */
+ { 0x01001ee9, 26102 }, /* uhornacute */
+ { 0x01001ef0, 26113 }, /* Uhornbelowdot */
+ { 0x01001ef1, 26127 }, /* uhornbelowdot */
+ { 0x01001eea, 26141 }, /* Uhorngrave */
+ { 0x01001eeb, 26152 }, /* uhorngrave */
+ { 0x01001eec, 26163 }, /* Uhornhook */
+ { 0x01001eed, 26173 }, /* uhornhook */
+ { 0x01001eee, 26183 }, /* Uhorntilde */
+ { 0x01001eef, 26194 }, /* uhorntilde */
+ { 0x000006ad, 26205 }, /* Ukrainian_ghe_with_upturn */
+ { 0x000006bd, 26231 }, /* Ukrainian_GHE_WITH_UPTURN */
+ { 0x000006a6, 26257 }, /* Ukrainian_i */
+ { 0x000006b6, 26269 }, /* Ukrainian_I */
+ { 0x000006a4, 26281 }, /* Ukrainian_ie */
+ { 0x000006b4, 26294 }, /* Ukrainian_IE */
+ { 0x000006a7, 26307 }, /* Ukrainian_yi */
+ { 0x000006b7, 26320 }, /* Ukrainian_YI */
+ { 0x000006a6, 26333 }, /* Ukranian_i */
+ { 0x000006b6, 26344 }, /* Ukranian_I */
+ { 0x000006a4, 26355 }, /* Ukranian_je */
+ { 0x000006b4, 26367 }, /* Ukranian_JE */
+ { 0x000006a7, 26379 }, /* Ukranian_yi */
+ { 0x000006b7, 26391 }, /* Ukranian_YI */
+ { 0x000003de, 26403 }, /* Umacron */
+ { 0x000003fe, 26411 }, /* umacron */
+ { 0x00000bc6, 26419 }, /* underbar */
+ { 0x0000005f, 26428 }, /* underscore */
+ { 0x0000ff65, 26439 }, /* Undo */
+ { 0x000008dd, 26444 }, /* union */
+ { 0x000003d9, 26450 }, /* Uogonek */
+ { 0x000003f9, 26458 }, /* uogonek */
+ { 0x0000ff52, 26466 }, /* Up */
+ { 0x000008fc, 26469 }, /* uparrow */
+ { 0x00000ba9, 26477 }, /* upcaret */
+ { 0x000009ec, 26485 }, /* upleftcorner */
+ { 0x000009eb, 26498 }, /* uprightcorner */
+ { 0x00000bc3, 26512 }, /* upshoe */
+ { 0x00000bd3, 26519 }, /* upstile */
+ { 0x00000bce, 26527 }, /* uptack */
+ { 0x000001d9, 26534 }, /* Uring */
+ { 0x000001f9, 26540 }, /* uring */
+ { 0x1000ff6e, 26546 }, /* User */
+ { 0x000003dd, 26551 }, /* Utilde */
+ { 0x000003fd, 26558 }, /* utilde */
+ { 0x00000056, 26565 }, /* V */
+ { 0x00000076, 26567 }, /* v */
+ { 0x000008c1, 26569 }, /* variation */
+ { 0x000009f8, 26579 }, /* vertbar */
+ { 0x000008a6, 26587 }, /* vertconnector */
+ { 0x000004de, 26601 }, /* voicedsound */
+ { 0x00ffffff, 26613 }, /* VoidSymbol */
+ { 0x000009e9, 26624 }, /* vt */
+ { 0x00000057, 26627 }, /* W */
+ { 0x00000077, 26629 }, /* w */
+ { 0x01001e82, 26631 }, /* Wacute */
+ { 0x01001e83, 26638 }, /* wacute */
+ { 0x01000174, 26645 }, /* Wcircumflex */
+ { 0x01000175, 26657 }, /* wcircumflex */
+ { 0x01001e84, 26669 }, /* Wdiaeresis */
+ { 0x01001e85, 26680 }, /* wdiaeresis */
+ { 0x01001e80, 26691 }, /* Wgrave */
+ { 0x01001e81, 26698 }, /* wgrave */
+ { 0x010020a9, 26705 }, /* WonSign */
+ { 0x00000058, 26713 }, /* X */
+ { 0x00000078, 26715 }, /* x */
+ { 0x01001e8a, 26717 }, /* Xabovedot */
+ { 0x01001e8b, 26727 }, /* xabovedot */
+ { 0x100811b9, 26737 }, /* XF8610ChannelsDown */
+ { 0x100811b8, 26756 }, /* XF8610ChannelsUp */
+ { 0x1008126f, 26773 }, /* XF863DMode */
+ { 0x1008ff39, 26784 }, /* XF86AddFavorite */
+ { 0x100811ad, 26800 }, /* XF86Addressbook */
+ { 0x10081230, 26816 }, /* XF86ALSToggle */
+ { 0x1008ff50, 26830 }, /* XF86ApplicationLeft */
+ { 0x1008ff51, 26850 }, /* XF86ApplicationRight */
+ { 0x10081244, 26871 }, /* XF86AppSelect */
+ { 0x10081177, 26885 }, /* XF86AspectRatio */
+ { 0x10081247, 26901 }, /* XF86Assistant */
+ { 0x1008121c, 26915 }, /* XF86AttendantOff */
+ { 0x1008121b, 26932 }, /* XF86AttendantOn */
+ { 0x1008121d, 26948 }, /* XF86AttendantToggle */
+ { 0x10081188, 26968 }, /* XF86Audio */
+ { 0x1008ff9b, 26978 }, /* XF86AudioCycleTrack */
+ { 0x1008126e, 26998 }, /* XF86AudioDesc */
+ { 0x1008ff97, 27012 }, /* XF86AudioForward */
+ { 0x1008ff11, 27029 }, /* XF86AudioLowerVolume */
+ { 0x1008ff32, 27050 }, /* XF86AudioMedia */
+ { 0x1008ffb2, 27065 }, /* XF86AudioMicMute */
+ { 0x1008ff12, 27082 }, /* XF86AudioMute */
+ { 0x1008ff17, 27096 }, /* XF86AudioNext */
+ { 0x1008ff31, 27110 }, /* XF86AudioPause */
+ { 0x1008ff14, 27125 }, /* XF86AudioPlay */
+ { 0x1008ffb6, 27139 }, /* XF86AudioPreset */
+ { 0x1008ff16, 27155 }, /* XF86AudioPrev */
+ { 0x1008ff13, 27169 }, /* XF86AudioRaiseVolume */
+ { 0x1008ff99, 27190 }, /* XF86AudioRandomPlay */
+ { 0x1008ff1c, 27210 }, /* XF86AudioRecord */
+ { 0x1008ff98, 27226 }, /* XF86AudioRepeat */
+ { 0x1008ff3e, 27242 }, /* XF86AudioRewind */
+ { 0x1008ff15, 27258 }, /* XF86AudioStop */
+ { 0x1008ff8d, 27272 }, /* XF86Away */
+ { 0x1008ff26, 27281 }, /* XF86Back */
+ { 0x1008ff3f, 27290 }, /* XF86BackForward */
+ { 0x1008ff93, 27306 }, /* XF86Battery */
+ { 0x1008ffa6, 27318 }, /* XF86Blue */
+ { 0x1008ff94, 27327 }, /* XF86Bluetooth */
+ { 0x1008ff52, 27341 }, /* XF86Book */
+ { 0x1008119b, 27350 }, /* XF86Break */
+ { 0x1008ff3b, 27360 }, /* XF86BrightnessAdjust */
+ { 0x100810f4, 27381 }, /* XF86BrightnessAuto */
+ { 0x10081251, 27400 }, /* XF86BrightnessMax */
+ { 0x10081250, 27418 }, /* XF86BrightnessMin */
+ { 0x10081240, 27436 }, /* XF86Buttonconfig */
+ { 0x1008ff54, 27453 }, /* XF86Calculater */
+ { 0x1008ff1d, 27468 }, /* XF86Calculator */
+ { 0x1008ff20, 27483 }, /* XF86Calendar */
+ { 0x10081218, 27496 }, /* XF86CameraDown */
+ { 0x10081210, 27511 }, /* XF86CameraFocus */
+ { 0x10081219, 27527 }, /* XF86CameraLeft */
+ { 0x1008121a, 27542 }, /* XF86CameraRight */
+ { 0x10081217, 27558 }, /* XF86CameraUp */
+ { 0x10081215, 27571 }, /* XF86CameraZoomIn */
+ { 0x10081216, 27588 }, /* XF86CameraZoomOut */
+ { 0x1008ff53, 27606 }, /* XF86CD */
+ { 0x10081193, 27613 }, /* XF86ChannelDown */
+ { 0x10081192, 27629 }, /* XF86ChannelUp */
+ { 0x1008ff55, 27643 }, /* XF86Clear */
+ { 0x1008fe21, 27653 }, /* XF86ClearGrab */
+ { 0x1008ff56, 27667 }, /* XF86Close */
+ { 0x1008ff3d, 27677 }, /* XF86Community */
+ { 0x100811b6, 27691 }, /* XF86ContextMenu */
+ { 0x1008ff22, 27707 }, /* XF86ContrastAdjust */
+ { 0x10081243, 27726 }, /* XF86ControlPanel */
+ { 0x1008ff57, 27743 }, /* XF86Copy */
+ { 0x1008ff58, 27752 }, /* XF86Cut */
+ { 0x1008ff9c, 27760 }, /* XF86CycleAngle */
+ { 0x10081277, 27775 }, /* XF86Data */
+ { 0x100811aa, 27784 }, /* XF86Database */
+ { 0x1008ff59, 27797 }, /* XF86Display */
+ { 0x100810f5, 27809 }, /* XF86DisplayOff */
+ { 0x100811af, 27824 }, /* XF86DisplayToggle */
+ { 0x1008ff5b, 27842 }, /* XF86Documents */
+ { 0x1008ff5a, 27856 }, /* XF86DOS */
+ { 0x10081185, 27864 }, /* XF86DVD */
+ { 0x100811a6, 27872 }, /* XF86Editor */
+ { 0x1008ff2c, 27883 }, /* XF86Eject */
+ { 0x1008ff5c, 27893 }, /* XF86Excel */
+ { 0x1008ff5d, 27903 }, /* XF86Explorer */
+ { 0x10081275, 27916 }, /* XF86FastReverse */
+ { 0x1008ff30, 27932 }, /* XF86Favorites */
+ { 0x1008ff3c, 27946 }, /* XF86Finance */
+ { 0x100811d0, 27958 }, /* XF86Fn */
+ { 0x100811d1, 27965 }, /* XF86Fn_Esc */
+ { 0x100811e5, 27976 }, /* XF86FnRightShift */
+ { 0x1008ff27, 27993 }, /* XF86Forward */
+ { 0x1008ff9d, 28005 }, /* XF86FrameBack */
+ { 0x1008ff9e, 28019 }, /* XF86FrameForward */
+ { 0x1008ffb8, 28036 }, /* XF86FullScreen */
+ { 0x1008ff5e, 28051 }, /* XF86Game */
+ { 0x1008ff5f, 28060 }, /* XF86Go */
+ { 0x100811a8, 28067 }, /* XF86GraphicsEditor */
+ { 0x1008ffa4, 28086 }, /* XF86Green */
+ { 0x100811be, 28096 }, /* XF86HangupPhone */
+ { 0x1008ffa8, 28112 }, /* XF86Hibernate */
+ { 0x1008ff37, 28126 }, /* XF86History */
+ { 0x1008ff18, 28138 }, /* XF86HomePage */
+ { 0x1008ff3a, 28151 }, /* XF86HotLinks */
+ { 0x100811ba, 28164 }, /* XF86Images */
+ { 0x10081166, 28175 }, /* XF86Info */
+ { 0x1008ff60, 28184 }, /* XF86iTouch */
+ { 0x10081242, 28195 }, /* XF86Journal */
+ { 0x1008ff06, 28207 }, /* XF86KbdBrightnessDown */
+ { 0x1008ff05, 28229 }, /* XF86KbdBrightnessUp */
+ { 0x10081264, 28249 }, /* XF86KbdInputAssistAccept */
+ { 0x10081265, 28274 }, /* XF86KbdInputAssistCancel */
+ { 0x10081261, 28299 }, /* XF86KbdInputAssistNext */
+ { 0x10081263, 28322 }, /* XF86KbdInputAssistNextgroup */
+ { 0x10081260, 28350 }, /* XF86KbdInputAssistPrev */
+ { 0x10081262, 28373 }, /* XF86KbdInputAssistPrevgroup */
+ { 0x100812b8, 28401 }, /* XF86KbdLcdMenu1 */
+ { 0x100812b9, 28417 }, /* XF86KbdLcdMenu2 */
+ { 0x100812ba, 28433 }, /* XF86KbdLcdMenu3 */
+ { 0x100812bb, 28449 }, /* XF86KbdLcdMenu4 */
+ { 0x100812bc, 28465 }, /* XF86KbdLcdMenu5 */
+ { 0x1008ff04, 28481 }, /* XF86KbdLightOnOff */
+ { 0x1008ffb3, 28499 }, /* XF86Keyboard */
+ { 0x1008ff40, 28512 }, /* XF86Launch0 */
+ { 0x1008ff41, 28524 }, /* XF86Launch1 */
+ { 0x1008ff42, 28536 }, /* XF86Launch2 */
+ { 0x1008ff43, 28548 }, /* XF86Launch3 */
+ { 0x1008ff44, 28560 }, /* XF86Launch4 */
+ { 0x1008ff45, 28572 }, /* XF86Launch5 */
+ { 0x1008ff46, 28584 }, /* XF86Launch6 */
+ { 0x1008ff47, 28596 }, /* XF86Launch7 */
+ { 0x1008ff48, 28608 }, /* XF86Launch8 */
+ { 0x1008ff49, 28620 }, /* XF86Launch9 */
+ { 0x1008ff4a, 28632 }, /* XF86LaunchA */
+ { 0x1008ff4b, 28644 }, /* XF86LaunchB */
+ { 0x1008ff4c, 28656 }, /* XF86LaunchC */
+ { 0x1008ff4d, 28668 }, /* XF86LaunchD */
+ { 0x1008ff4e, 28680 }, /* XF86LaunchE */
+ { 0x1008ff4f, 28692 }, /* XF86LaunchF */
+ { 0x10081269, 28704 }, /* XF86LeftDown */
+ { 0x10081268, 28717 }, /* XF86LeftUp */
+ { 0x1008ff35, 28728 }, /* XF86LightBulb */
+ { 0x1008121e, 28742 }, /* XF86LightsToggle */
+ { 0x1008fe25, 28759 }, /* XF86LogGrabInfo */
+ { 0x1008ff61, 28775 }, /* XF86LogOff */
+ { 0x1008fe24, 28786 }, /* XF86LogWindowTree */
+ { 0x10081290, 28804 }, /* XF86Macro1 */
+ { 0x10081299, 28815 }, /* XF86Macro10 */
+ { 0x1008129a, 28827 }, /* XF86Macro11 */
+ { 0x1008129b, 28839 }, /* XF86Macro12 */
+ { 0x1008129c, 28851 }, /* XF86Macro13 */
+ { 0x1008129d, 28863 }, /* XF86Macro14 */
+ { 0x1008129e, 28875 }, /* XF86Macro15 */
+ { 0x1008129f, 28887 }, /* XF86Macro16 */
+ { 0x100812a0, 28899 }, /* XF86Macro17 */
+ { 0x100812a1, 28911 }, /* XF86Macro18 */
+ { 0x100812a2, 28923 }, /* XF86Macro19 */
+ { 0x10081291, 28935 }, /* XF86Macro2 */
+ { 0x100812a3, 28946 }, /* XF86Macro20 */
+ { 0x100812a4, 28958 }, /* XF86Macro21 */
+ { 0x100812a5, 28970 }, /* XF86Macro22 */
+ { 0x100812a6, 28982 }, /* XF86Macro23 */
+ { 0x100812a7, 28994 }, /* XF86Macro24 */
+ { 0x100812a8, 29006 }, /* XF86Macro25 */
+ { 0x100812a9, 29018 }, /* XF86Macro26 */
+ { 0x100812aa, 29030 }, /* XF86Macro27 */
+ { 0x100812ab, 29042 }, /* XF86Macro28 */
+ { 0x100812ac, 29054 }, /* XF86Macro29 */
+ { 0x10081292, 29066 }, /* XF86Macro3 */
+ { 0x100812ad, 29077 }, /* XF86Macro30 */
+ { 0x10081293, 29089 }, /* XF86Macro4 */
+ { 0x10081294, 29100 }, /* XF86Macro5 */
+ { 0x10081295, 29111 }, /* XF86Macro6 */
+ { 0x10081296, 29122 }, /* XF86Macro7 */
+ { 0x10081297, 29133 }, /* XF86Macro8 */
+ { 0x10081298, 29144 }, /* XF86Macro9 */
+ { 0x100812b3, 29155 }, /* XF86MacroPreset1 */
+ { 0x100812b4, 29172 }, /* XF86MacroPreset2 */
+ { 0x100812b5, 29189 }, /* XF86MacroPreset3 */
+ { 0x100812b2, 29206 }, /* XF86MacroPresetCycle */
+ { 0x100812b0, 29227 }, /* XF86MacroRecordStart */
+ { 0x100812b1, 29248 }, /* XF86MacroRecordStop */
+ { 0x1008ff19, 29268 }, /* XF86Mail */
+ { 0x1008ff90, 29277 }, /* XF86MailForward */
+ { 0x1008ff62, 29293 }, /* XF86Market */
+ { 0x100811b7, 29304 }, /* XF86MediaRepeat */
+ { 0x1008126b, 29320 }, /* XF86MediaTopMenu */
+ { 0x1008ff63, 29337 }, /* XF86Meeting */
+ { 0x1008ff1e, 29349 }, /* XF86Memo */
+ { 0x1008ff65, 29358 }, /* XF86MenuKB */
+ { 0x1008ff66, 29369 }, /* XF86MenuPB */
+ { 0x1008ff8e, 29380 }, /* XF86Messenger */
+ { 0x1008ff01, 29394 }, /* XF86ModeLock */
+ { 0x1008ff07, 29407 }, /* XF86MonBrightnessCycle */
+ { 0x1008ff03, 29430 }, /* XF86MonBrightnessDown */
+ { 0x1008ff02, 29452 }, /* XF86MonBrightnessUp */
+ { 0x1008ff92, 29472 }, /* XF86Music */
+ { 0x1008ff33, 29482 }, /* XF86MyComputer */
+ { 0x1008ff67, 29497 }, /* XF86MySites */
+ { 0x1008ff68, 29509 }, /* XF86New */
+ { 0x1008ff69, 29517 }, /* XF86News */
+ { 0x1008fe22, 29526 }, /* XF86Next_VMode */
+ { 0x10081270, 29541 }, /* XF86NextFavorite */
+ { 0x100811bc, 29558 }, /* XF86NotificationCenter */
+ { 0x10081200, 29581 }, /* XF86Numeric0 */
+ { 0x10081201, 29594 }, /* XF86Numeric1 */
+ { 0x1008126c, 29607 }, /* XF86Numeric11 */
+ { 0x1008126d, 29621 }, /* XF86Numeric12 */
+ { 0x10081202, 29635 }, /* XF86Numeric2 */
+ { 0x10081203, 29648 }, /* XF86Numeric3 */
+ { 0x10081204, 29661 }, /* XF86Numeric4 */
+ { 0x10081205, 29674 }, /* XF86Numeric5 */
+ { 0x10081206, 29687 }, /* XF86Numeric6 */
+ { 0x10081207, 29700 }, /* XF86Numeric7 */
+ { 0x10081208, 29713 }, /* XF86Numeric8 */
+ { 0x10081209, 29726 }, /* XF86Numeric9 */
+ { 0x1008120c, 29739 }, /* XF86NumericA */
+ { 0x1008120d, 29752 }, /* XF86NumericB */
+ { 0x1008120e, 29765 }, /* XF86NumericC */
+ { 0x1008120f, 29778 }, /* XF86NumericD */
+ { 0x1008120b, 29791 }, /* XF86NumericPound */
+ { 0x1008120a, 29808 }, /* XF86NumericStar */
+ { 0x1008ff6a, 29824 }, /* XF86OfficeHome */
+ { 0x10081278, 29839 }, /* XF86OnScreenKeyboard */
+ { 0x1008ff6b, 29860 }, /* XF86Open */
+ { 0x1008ff38, 29869 }, /* XF86OpenURL */
+ { 0x1008ff6c, 29881 }, /* XF86Option */
+ { 0x1008ff6d, 29892 }, /* XF86Paste */
+ { 0x10081272, 29902 }, /* XF86PauseRecord */
+ { 0x1008ff6e, 29918 }, /* XF86Phone */
+ { 0x100811bd, 29928 }, /* XF86PickupPhone */
+ { 0x1008ff91, 29944 }, /* XF86Pictures */
+ { 0x1008ff21, 29957 }, /* XF86PowerDown */
+ { 0x1008ff2a, 29971 }, /* XF86PowerOff */
+ { 0x100811a9, 29984 }, /* XF86Presentation */
+ { 0x1008fe23, 30001 }, /* XF86Prev_VMode */
+ { 0x10081279, 30016 }, /* XF86PrivacyScreenToggle */
+ { 0x1008ff70, 30040 }, /* XF86Q */
+ { 0x1008ffa3, 30046 }, /* XF86Red */
+ { 0x1008ff29, 30054 }, /* XF86Refresh */
+ { 0x1008ff73, 30066 }, /* XF86Reload */
+ { 0x1008ff72, 30077 }, /* XF86Reply */
+ { 0x1008ffb5, 30087 }, /* XF86RFKill */
+ { 0x10081267, 30098 }, /* XF86RightDown */
+ { 0x10081266, 30112 }, /* XF86RightUp */
+ { 0x1008ff24, 30124 }, /* XF86RockerDown */
+ { 0x1008ff25, 30139 }, /* XF86RockerEnter */
+ { 0x1008ff23, 30155 }, /* XF86RockerUp */
+ { 0x1008126a, 30168 }, /* XF86RootMenu */
+ { 0x1008ff74, 30181 }, /* XF86RotateWindows */
+ { 0x1008ff76, 30199 }, /* XF86RotationKB */
+ { 0x1008ffb7, 30214 }, /* XF86RotationLockToggle */
+ { 0x1008ff75, 30237 }, /* XF86RotationPB */
+ { 0x1008ff77, 30252 }, /* XF86Save */
+ { 0x1008ff2d, 30261 }, /* XF86ScreenSaver */
+ { 0x10081245, 30277 }, /* XF86Screensaver */
+ { 0x1008ff7a, 30293 }, /* XF86ScrollClick */
+ { 0x1008ff79, 30309 }, /* XF86ScrollDown */
+ { 0x1008ff78, 30324 }, /* XF86ScrollUp */
+ { 0x1008ff1b, 30337 }, /* XF86Search */
+ { 0x1008ffa0, 30348 }, /* XF86Select */
+ { 0x1008127a, 30359 }, /* XF86SelectiveScreenshot */
+ { 0x1008ff7b, 30383 }, /* XF86Send */
+ { 0x1008ff36, 30392 }, /* XF86Shop */
+ { 0x1008ff2f, 30401 }, /* XF86Sleep */
+ { 0x10081276, 30411 }, /* XF86SlowReverse */
+ { 0x1008ff7c, 30427 }, /* XF86Spell */
+ { 0x100811b0, 30437 }, /* XF86SpellCheck */
+ { 0x1008ff7d, 30452 }, /* XF86SplitScreen */
+ { 0x1008ff10, 30468 }, /* XF86Standby */
+ { 0x1008ff1a, 30480 }, /* XF86Start */
+ { 0x1008ff28, 30490 }, /* XF86Stop */
+ { 0x10081271, 30499 }, /* XF86StopRecord */
+ { 0x1008ff9a, 30514 }, /* XF86Subtitle */
+ { 0x1008ff7e, 30527 }, /* XF86Support */
+ { 0x1008ffa7, 30539 }, /* XF86Suspend */
+ { 0x1008fe01, 30551 }, /* XF86Switch_VT_1 */
+ { 0x1008fe0a, 30567 }, /* XF86Switch_VT_10 */
+ { 0x1008fe0b, 30584 }, /* XF86Switch_VT_11 */
+ { 0x1008fe0c, 30601 }, /* XF86Switch_VT_12 */
+ { 0x1008fe02, 30618 }, /* XF86Switch_VT_2 */
+ { 0x1008fe03, 30634 }, /* XF86Switch_VT_3 */
+ { 0x1008fe04, 30650 }, /* XF86Switch_VT_4 */
+ { 0x1008fe05, 30666 }, /* XF86Switch_VT_5 */
+ { 0x1008fe06, 30682 }, /* XF86Switch_VT_6 */
+ { 0x1008fe07, 30698 }, /* XF86Switch_VT_7 */
+ { 0x1008fe08, 30714 }, /* XF86Switch_VT_8 */
+ { 0x1008fe09, 30730 }, /* XF86Switch_VT_9 */
+ { 0x10081241, 30746 }, /* XF86Taskmanager */
+ { 0x1008ff7f, 30762 }, /* XF86TaskPane */
+ { 0x1008ff80, 30775 }, /* XF86Terminal */
+ { 0x1008ff9f, 30788 }, /* XF86Time */
+ { 0x1008ff1f, 30797 }, /* XF86ToDoList */
+ { 0x1008ff81, 30810 }, /* XF86Tools */
+ { 0x1008ffa2, 30820 }, /* XF86TopMenu */
+ { 0x1008ffb1, 30832 }, /* XF86TouchpadOff */
+ { 0x1008ffb0, 30848 }, /* XF86TouchpadOn */
+ { 0x1008ffa9, 30863 }, /* XF86TouchpadToggle */
+ { 0x1008ff82, 30882 }, /* XF86Travel */
+ { 0x1008fe20, 30893 }, /* XF86Ungrab */
+ { 0x10081274, 30904 }, /* XF86Unmute */
+ { 0x1008ff85, 30915 }, /* XF86User1KB */
+ { 0x1008ff86, 30927 }, /* XF86User2KB */
+ { 0x1008ff84, 30939 }, /* XF86UserPB */
+ { 0x1008ff96, 30950 }, /* XF86UWB */
+ { 0x1008ff34, 30958 }, /* XF86VendorHome */
+ { 0x1008ff87, 30973 }, /* XF86Video */
+ { 0x100811a0, 30983 }, /* XF86VideoPhone */
+ { 0x1008ffa1, 30998 }, /* XF86View */
+ { 0x10081273, 31007 }, /* XF86VOD */
+ { 0x10081246, 31015 }, /* XF86VoiceCommand */
+ { 0x100811ac, 31032 }, /* XF86Voicemail */
+ { 0x1008ff2b, 31046 }, /* XF86WakeUp */
+ { 0x1008ff8f, 31057 }, /* XF86WebCam */
+ { 0x1008ff88, 31068 }, /* XF86WheelButton */
+ { 0x1008ff95, 31084 }, /* XF86WLAN */
+ { 0x1008ff89, 31093 }, /* XF86Word */
+ { 0x10081211, 31102 }, /* XF86WPSButton */
+ { 0x1008ffb4, 31116 }, /* XF86WWAN */
+ { 0x1008ff2e, 31125 }, /* XF86WWW */
+ { 0x1008ff8a, 31133 }, /* XF86Xfer */
+ { 0x1008ffa5, 31142 }, /* XF86Yellow */
+ { 0x1008ff8b, 31153 }, /* XF86ZoomIn */
+ { 0x1008ff8c, 31164 }, /* XF86ZoomOut */
+ { 0x100811a4, 31176 }, /* XF86ZoomReset */
+ { 0x00000059, 31190 }, /* Y */
+ { 0x00000079, 31192 }, /* y */
+ { 0x000000dd, 31194 }, /* Yacute */
+ { 0x000000fd, 31201 }, /* yacute */
+ { 0x01001ef4, 31208 }, /* Ybelowdot */
+ { 0x01001ef5, 31218 }, /* ybelowdot */
+ { 0x01000176, 31228 }, /* Ycircumflex */
+ { 0x01000177, 31240 }, /* ycircumflex */
+ { 0x000000ff, 31252 }, /* ydiaeresis */
+ { 0x000013be, 31263 }, /* Ydiaeresis */
+ { 0x000000a5, 31274 }, /* yen */
+ { 0x01001ef2, 31278 }, /* Ygrave */
+ { 0x01001ef3, 31285 }, /* ygrave */
+ { 0x01001ef6, 31292 }, /* Yhook */
+ { 0x01001ef7, 31298 }, /* yhook */
+ { 0x01001ef8, 31304 }, /* Ytilde */
+ { 0x01001ef9, 31311 }, /* ytilde */
+ { 0x0000005a, 31318 }, /* Z */
+ { 0x0000007a, 31320 }, /* z */
+ { 0x000001af, 31322 }, /* Zabovedot */
+ { 0x000001bf, 31332 }, /* zabovedot */
+ { 0x000001ac, 31342 }, /* Zacute */
+ { 0x000001bc, 31349 }, /* zacute */
+ { 0x000001ae, 31356 }, /* Zcaron */
+ { 0x000001be, 31363 }, /* zcaron */
+ { 0x0000ff3d, 31370 }, /* Zen_Koho */
+ { 0x0000ff28, 31379 }, /* Zenkaku */
+ { 0x0000ff2a, 31387 }, /* Zenkaku_Hankaku */
+ { 0x01002080, 31403 }, /* zerosubscript */
+ { 0x01002070, 31417 }, /* zerosuperior */
+ { 0x010001b5, 31430 }, /* Zstroke */
+ { 0x010001b6, 31438 }, /* zstroke */
};
static const struct name_keysym keysym_to_name[] = {
- { 0x00000000, 20091 }, /* NoSymbol */
- { 0x00000020, 23803 }, /* space */
- { 0x00000021, 12099 }, /* exclam */
- { 0x00000022, 22187 }, /* quotedbl */
- { 0x00000023, 20178 }, /* numbersign */
- { 0x00000024, 11251 }, /* dollar */
- { 0x00000025, 21487 }, /* percent */
+ { 0x00000000, 20173 }, /* NoSymbol */
+ { 0x00000020, 23885 }, /* space */
+ { 0x00000021, 12181 }, /* exclam */
+ { 0x00000022, 22269 }, /* quotedbl */
+ { 0x00000023, 20260 }, /* numbersign */
+ { 0x00000024, 11333 }, /* dollar */
+ { 0x00000025, 21569 }, /* percent */
{ 0x00000026, 908 }, /* ampersand */
{ 0x00000027, 934 }, /* apostrophe */
- { 0x00000028, 21425 }, /* parenleft */
- { 0x00000029, 21435 }, /* parenright */
+ { 0x00000028, 21507 }, /* parenleft */
+ { 0x00000029, 21517 }, /* parenright */
{ 0x0000002a, 3283 }, /* asterisk */
- { 0x0000002b, 21557 }, /* plus */
- { 0x0000002c, 8680 }, /* comma */
- { 0x0000002d, 19733 }, /* minus */
- { 0x0000002e, 21495 }, /* period */
- { 0x0000002f, 23768 }, /* slash */
+ { 0x0000002b, 21639 }, /* plus */
+ { 0x0000002c, 8762 }, /* comma */
+ { 0x0000002d, 19815 }, /* minus */
+ { 0x0000002e, 21577 }, /* period */
+ { 0x0000002f, 23850 }, /* slash */
{ 0x00000030, 0 }, /* 0 */
{ 0x00000031, 2 }, /* 1 */
{ 0x00000032, 4 }, /* 2 */
@@ -4870,106 +5471,106 @@ static const struct name_keysym keysym_to_name[] = {
{ 0x00000038, 394 }, /* 8 */
{ 0x00000039, 396 }, /* 9 */
{ 0x0000003a, 8664 }, /* colon */
- { 0x0000003b, 22734 }, /* semicolon */
- { 0x0000003c, 19412 }, /* less */
- { 0x0000003d, 12051 }, /* equal */
- { 0x0000003e, 13272 }, /* greater */
- { 0x0000003f, 22165 }, /* question */
+ { 0x0000003b, 22816 }, /* semicolon */
+ { 0x0000003c, 19494 }, /* less */
+ { 0x0000003d, 12133 }, /* equal */
+ { 0x0000003e, 13354 }, /* greater */
+ { 0x0000003f, 22247 }, /* question */
{ 0x00000040, 3292 }, /* at */
{ 0x00000041, 398 }, /* A */
{ 0x00000042, 3328 }, /* B */
{ 0x00000043, 8439 }, /* C */
- { 0x00000044, 10320 }, /* D */
- { 0x00000045, 11424 }, /* E */
- { 0x00000046, 12155 }, /* F */
- { 0x00000047, 12665 }, /* G */
- { 0x00000048, 14378 }, /* H */
- { 0x00000049, 17069 }, /* I */
- { 0x0000004a, 18114 }, /* J */
- { 0x0000004b, 18146 }, /* K */
- { 0x0000004c, 19112 }, /* L */
- { 0x0000004d, 19533 }, /* M */
- { 0x0000004e, 19943 }, /* N */
- { 0x0000004f, 20200 }, /* O */
- { 0x00000050, 21373 }, /* P */
- { 0x00000051, 22156 }, /* Q */
- { 0x00000052, 22217 }, /* R */
- { 0x00000053, 22579 }, /* S */
- { 0x00000054, 24294 }, /* T */
- { 0x00000055, 25847 }, /* U */
- { 0x00000056, 26483 }, /* V */
- { 0x00000057, 26545 }, /* W */
- { 0x00000058, 26631 }, /* X */
- { 0x00000059, 29082 }, /* Y */
- { 0x0000005a, 29210 }, /* Z */
+ { 0x00000044, 10402 }, /* D */
+ { 0x00000045, 11506 }, /* E */
+ { 0x00000046, 12237 }, /* F */
+ { 0x00000047, 12747 }, /* G */
+ { 0x00000048, 14460 }, /* H */
+ { 0x00000049, 17151 }, /* I */
+ { 0x0000004a, 18196 }, /* J */
+ { 0x0000004b, 18228 }, /* K */
+ { 0x0000004c, 19194 }, /* L */
+ { 0x0000004d, 19615 }, /* M */
+ { 0x0000004e, 20025 }, /* N */
+ { 0x0000004f, 20282 }, /* O */
+ { 0x00000050, 21455 }, /* P */
+ { 0x00000051, 22238 }, /* Q */
+ { 0x00000052, 22299 }, /* R */
+ { 0x00000053, 22661 }, /* S */
+ { 0x00000054, 24376 }, /* T */
+ { 0x00000055, 25929 }, /* U */
+ { 0x00000056, 26565 }, /* V */
+ { 0x00000057, 26627 }, /* W */
+ { 0x00000058, 26713 }, /* X */
+ { 0x00000059, 31190 }, /* Y */
+ { 0x0000005a, 31318 }, /* Z */
{ 0x0000005b, 3603 }, /* bracketleft */
{ 0x0000005c, 3352 }, /* backslash */
{ 0x0000005d, 3615 }, /* bracketright */
{ 0x0000005e, 3260 }, /* asciicircum */
- { 0x0000005f, 26346 }, /* underscore */
- { 0x00000060, 13266 }, /* grave */
+ { 0x0000005f, 26428 }, /* underscore */
+ { 0x00000060, 13348 }, /* grave */
{ 0x00000061, 400 }, /* a */
{ 0x00000062, 3330 }, /* b */
{ 0x00000063, 8441 }, /* c */
- { 0x00000064, 10322 }, /* d */
- { 0x00000065, 11426 }, /* e */
- { 0x00000066, 12157 }, /* f */
- { 0x00000067, 12667 }, /* g */
- { 0x00000068, 14380 }, /* h */
- { 0x00000069, 17071 }, /* i */
- { 0x0000006a, 18116 }, /* j */
- { 0x0000006b, 18148 }, /* k */
- { 0x0000006c, 19114 }, /* l */
- { 0x0000006d, 19535 }, /* m */
- { 0x0000006e, 19945 }, /* n */
- { 0x0000006f, 20202 }, /* o */
- { 0x00000070, 21375 }, /* p */
- { 0x00000071, 22158 }, /* q */
- { 0x00000072, 22219 }, /* r */
- { 0x00000073, 22581 }, /* s */
- { 0x00000074, 24296 }, /* t */
- { 0x00000075, 25849 }, /* u */
- { 0x00000076, 26485 }, /* v */
- { 0x00000077, 26547 }, /* w */
- { 0x00000078, 26633 }, /* x */
- { 0x00000079, 29084 }, /* y */
- { 0x0000007a, 29212 }, /* z */
+ { 0x00000064, 10404 }, /* d */
+ { 0x00000065, 11508 }, /* e */
+ { 0x00000066, 12239 }, /* f */
+ { 0x00000067, 12749 }, /* g */
+ { 0x00000068, 14462 }, /* h */
+ { 0x00000069, 17153 }, /* i */
+ { 0x0000006a, 18198 }, /* j */
+ { 0x0000006b, 18230 }, /* k */
+ { 0x0000006c, 19196 }, /* l */
+ { 0x0000006d, 19617 }, /* m */
+ { 0x0000006e, 20027 }, /* n */
+ { 0x0000006f, 20284 }, /* o */
+ { 0x00000070, 21457 }, /* p */
+ { 0x00000071, 22240 }, /* q */
+ { 0x00000072, 22301 }, /* r */
+ { 0x00000073, 22663 }, /* s */
+ { 0x00000074, 24378 }, /* t */
+ { 0x00000075, 25931 }, /* u */
+ { 0x00000076, 26567 }, /* v */
+ { 0x00000077, 26629 }, /* w */
+ { 0x00000078, 26715 }, /* x */
+ { 0x00000079, 31192 }, /* y */
+ { 0x0000007a, 31320 }, /* z */
{ 0x0000007b, 3582 }, /* braceleft */
{ 0x0000007c, 3392 }, /* bar */
{ 0x0000007d, 3592 }, /* braceright */
{ 0x0000007e, 3272 }, /* asciitilde */
- { 0x000000a0, 20078 }, /* nobreakspace */
- { 0x000000a1, 12106 }, /* exclamdown */
+ { 0x000000a0, 20160 }, /* nobreakspace */
+ { 0x000000a1, 12188 }, /* exclamdown */
{ 0x000000a2, 8589 }, /* cent */
- { 0x000000a3, 23827 }, /* sterling */
- { 0x000000a4, 8766 }, /* currency */
- { 0x000000a5, 29166 }, /* yen */
+ { 0x000000a3, 23909 }, /* sterling */
+ { 0x000000a4, 8848 }, /* currency */
+ { 0x000000a5, 31274 }, /* yen */
{ 0x000000a6, 8389 }, /* brokenbar */
- { 0x000000a7, 22719 }, /* section */
- { 0x000000a8, 11203 }, /* diaeresis */
- { 0x000000a9, 8717 }, /* copyright */
- { 0x000000aa, 20852 }, /* ordfeminine */
- { 0x000000ab, 14349 }, /* guillemotleft */
- { 0x000000ac, 20147 }, /* notsign */
- { 0x000000ad, 17062 }, /* hyphen */
- { 0x000000ae, 22331 }, /* registered */
- { 0x000000af, 19641 }, /* macron */
- { 0x000000b0, 11153 }, /* degree */
- { 0x000000b1, 21562 }, /* plusminus */
- { 0x000000b2, 25825 }, /* twosuperior */
- { 0x000000b3, 25571 }, /* threesuperior */
+ { 0x000000a7, 22801 }, /* section */
+ { 0x000000a8, 11285 }, /* diaeresis */
+ { 0x000000a9, 8799 }, /* copyright */
+ { 0x000000aa, 20934 }, /* ordfeminine */
+ { 0x000000ab, 14431 }, /* guillemotleft */
+ { 0x000000ac, 20229 }, /* notsign */
+ { 0x000000ad, 17144 }, /* hyphen */
+ { 0x000000ae, 22413 }, /* registered */
+ { 0x000000af, 19723 }, /* macron */
+ { 0x000000b0, 11235 }, /* degree */
+ { 0x000000b1, 21644 }, /* plusminus */
+ { 0x000000b2, 25907 }, /* twosuperior */
+ { 0x000000b3, 25653 }, /* threesuperior */
{ 0x000000b4, 820 }, /* acute */
- { 0x000000b5, 19799 }, /* mu */
- { 0x000000b6, 21415 }, /* paragraph */
- { 0x000000b7, 21502 }, /* periodcentered */
+ { 0x000000b5, 19881 }, /* mu */
+ { 0x000000b6, 21497 }, /* paragraph */
+ { 0x000000b7, 21584 }, /* periodcentered */
{ 0x000000b8, 8581 }, /* cedilla */
- { 0x000000b9, 20755 }, /* onesuperior */
- { 0x000000ba, 19688 }, /* masculine */
- { 0x000000bb, 14363 }, /* guillemotright */
- { 0x000000bc, 20722 }, /* onequarter */
- { 0x000000bd, 20714 }, /* onehalf */
- { 0x000000be, 25542 }, /* threequarters */
- { 0x000000bf, 22174 }, /* questiondown */
+ { 0x000000b9, 20837 }, /* onesuperior */
+ { 0x000000ba, 19770 }, /* masculine */
+ { 0x000000bb, 14445 }, /* guillemotright */
+ { 0x000000bc, 20804 }, /* onequarter */
+ { 0x000000bd, 20796 }, /* onehalf */
+ { 0x000000be, 25624 }, /* threequarters */
+ { 0x000000bf, 22256 }, /* questiondown */
{ 0x000000c0, 854 }, /* Agrave */
{ 0x000000c1, 402 }, /* Aacute */
{ 0x000000c2, 622 }, /* Acircumflex */
@@ -4978,30 +5579,30 @@ static const struct name_keysym keysym_to_name[] = {
{ 0x000000c5, 2036 }, /* Aring */
{ 0x000000c6, 848 }, /* AE */
{ 0x000000c7, 8539 }, /* Ccedilla */
- { 0x000000c8, 11724 }, /* Egrave */
- { 0x000000c9, 11448 }, /* Eacute */
- { 0x000000ca, 11496 }, /* Ecircumflex */
- { 0x000000cb, 11702 }, /* Ediaeresis */
- { 0x000000cc, 17205 }, /* Igrave */
- { 0x000000cd, 17083 }, /* Iacute */
- { 0x000000ce, 17131 }, /* Icircumflex */
- { 0x000000cf, 17165 }, /* Idiaeresis */
- { 0x000000d0, 12064 }, /* ETH */
- { 0x000000d1, 20155 }, /* Ntilde */
- { 0x000000d2, 20527 }, /* Ograve */
- { 0x000000d3, 20204 }, /* Oacute */
- { 0x000000d4, 20268 }, /* Ocircumflex */
- { 0x000000d5, 21310 }, /* Otilde */
- { 0x000000d6, 20466 }, /* Odiaeresis */
- { 0x000000d7, 19839 }, /* multiply */
- { 0x000000d8, 21296 }, /* Oslash */
- { 0x000000d9, 25971 }, /* Ugrave */
- { 0x000000da, 25851 }, /* Uacute */
- { 0x000000db, 25899 }, /* Ucircumflex */
- { 0x000000dc, 25923 }, /* Udiaeresis */
- { 0x000000dd, 29086 }, /* Yacute */
- { 0x000000de, 25499 }, /* THORN */
- { 0x000000df, 23820 }, /* ssharp */
+ { 0x000000c8, 11806 }, /* Egrave */
+ { 0x000000c9, 11530 }, /* Eacute */
+ { 0x000000ca, 11578 }, /* Ecircumflex */
+ { 0x000000cb, 11784 }, /* Ediaeresis */
+ { 0x000000cc, 17287 }, /* Igrave */
+ { 0x000000cd, 17165 }, /* Iacute */
+ { 0x000000ce, 17213 }, /* Icircumflex */
+ { 0x000000cf, 17247 }, /* Idiaeresis */
+ { 0x000000d0, 12146 }, /* ETH */
+ { 0x000000d1, 20237 }, /* Ntilde */
+ { 0x000000d2, 20609 }, /* Ograve */
+ { 0x000000d3, 20286 }, /* Oacute */
+ { 0x000000d4, 20350 }, /* Ocircumflex */
+ { 0x000000d5, 21392 }, /* Otilde */
+ { 0x000000d6, 20548 }, /* Odiaeresis */
+ { 0x000000d7, 19921 }, /* multiply */
+ { 0x000000d8, 21378 }, /* Oslash */
+ { 0x000000d9, 26053 }, /* Ugrave */
+ { 0x000000da, 25933 }, /* Uacute */
+ { 0x000000db, 25981 }, /* Ucircumflex */
+ { 0x000000dc, 26005 }, /* Udiaeresis */
+ { 0x000000dd, 31194 }, /* Yacute */
+ { 0x000000de, 25581 }, /* THORN */
+ { 0x000000df, 23902 }, /* ssharp */
{ 0x000000e0, 861 }, /* agrave */
{ 0x000000e1, 409 }, /* aacute */
{ 0x000000e2, 634 }, /* acircumflex */
@@ -5010,208 +5611,208 @@ static const struct name_keysym keysym_to_name[] = {
{ 0x000000e5, 2042 }, /* aring */
{ 0x000000e6, 851 }, /* ae */
{ 0x000000e7, 8548 }, /* ccedilla */
- { 0x000000e8, 11731 }, /* egrave */
- { 0x000000e9, 11455 }, /* eacute */
- { 0x000000ea, 11508 }, /* ecircumflex */
- { 0x000000eb, 11713 }, /* ediaeresis */
- { 0x000000ec, 17212 }, /* igrave */
- { 0x000000ed, 17090 }, /* iacute */
- { 0x000000ee, 17143 }, /* icircumflex */
- { 0x000000ef, 17176 }, /* idiaeresis */
- { 0x000000f0, 12072 }, /* eth */
- { 0x000000f1, 20162 }, /* ntilde */
- { 0x000000f2, 20534 }, /* ograve */
- { 0x000000f3, 20211 }, /* oacute */
- { 0x000000f4, 20280 }, /* ocircumflex */
- { 0x000000f5, 21317 }, /* otilde */
- { 0x000000f6, 20477 }, /* odiaeresis */
- { 0x000000f7, 11242 }, /* division */
- { 0x000000f8, 21303 }, /* oslash */
- { 0x000000f9, 25978 }, /* ugrave */
- { 0x000000fa, 25858 }, /* uacute */
- { 0x000000fb, 25911 }, /* ucircumflex */
- { 0x000000fc, 25934 }, /* udiaeresis */
- { 0x000000fd, 29093 }, /* yacute */
- { 0x000000fe, 25511 }, /* thorn */
- { 0x000000ff, 29144 }, /* ydiaeresis */
+ { 0x000000e8, 11813 }, /* egrave */
+ { 0x000000e9, 11537 }, /* eacute */
+ { 0x000000ea, 11590 }, /* ecircumflex */
+ { 0x000000eb, 11795 }, /* ediaeresis */
+ { 0x000000ec, 17294 }, /* igrave */
+ { 0x000000ed, 17172 }, /* iacute */
+ { 0x000000ee, 17225 }, /* icircumflex */
+ { 0x000000ef, 17258 }, /* idiaeresis */
+ { 0x000000f0, 12154 }, /* eth */
+ { 0x000000f1, 20244 }, /* ntilde */
+ { 0x000000f2, 20616 }, /* ograve */
+ { 0x000000f3, 20293 }, /* oacute */
+ { 0x000000f4, 20362 }, /* ocircumflex */
+ { 0x000000f5, 21399 }, /* otilde */
+ { 0x000000f6, 20559 }, /* odiaeresis */
+ { 0x000000f7, 11324 }, /* division */
+ { 0x000000f8, 21385 }, /* oslash */
+ { 0x000000f9, 26060 }, /* ugrave */
+ { 0x000000fa, 25940 }, /* uacute */
+ { 0x000000fb, 25993 }, /* ucircumflex */
+ { 0x000000fc, 26016 }, /* udiaeresis */
+ { 0x000000fd, 31201 }, /* yacute */
+ { 0x000000fe, 25593 }, /* thorn */
+ { 0x000000ff, 31252 }, /* ydiaeresis */
{ 0x000001a1, 918 }, /* Aogonek */
{ 0x000001a2, 8383 }, /* breve */
- { 0x000001a3, 19517 }, /* Lstroke */
- { 0x000001a5, 19212 }, /* Lcaron */
- { 0x000001a6, 22603 }, /* Sacute */
- { 0x000001a9, 22617 }, /* Scaron */
- { 0x000001aa, 22631 }, /* Scedilla */
- { 0x000001ab, 24322 }, /* Tcaron */
- { 0x000001ac, 29234 }, /* Zacute */
- { 0x000001ae, 29248 }, /* Zcaron */
- { 0x000001af, 29214 }, /* Zabovedot */
+ { 0x000001a3, 19599 }, /* Lstroke */
+ { 0x000001a5, 19294 }, /* Lcaron */
+ { 0x000001a6, 22685 }, /* Sacute */
+ { 0x000001a9, 22699 }, /* Scaron */
+ { 0x000001aa, 22713 }, /* Scedilla */
+ { 0x000001ab, 24404 }, /* Tcaron */
+ { 0x000001ac, 31342 }, /* Zacute */
+ { 0x000001ae, 31356 }, /* Zcaron */
+ { 0x000001af, 31322 }, /* Zabovedot */
{ 0x000001b1, 926 }, /* aogonek */
- { 0x000001b2, 20520 }, /* ogonek */
- { 0x000001b3, 19525 }, /* lstroke */
- { 0x000001b5, 19219 }, /* lcaron */
- { 0x000001b6, 22610 }, /* sacute */
+ { 0x000001b2, 20602 }, /* ogonek */
+ { 0x000001b3, 19607 }, /* lstroke */
+ { 0x000001b5, 19301 }, /* lcaron */
+ { 0x000001b6, 22692 }, /* sacute */
{ 0x000001b7, 8519 }, /* caron */
- { 0x000001b9, 22624 }, /* scaron */
- { 0x000001ba, 22640 }, /* scedilla */
- { 0x000001bb, 24329 }, /* tcaron */
- { 0x000001bc, 29241 }, /* zacute */
- { 0x000001bd, 11283 }, /* doubleacute */
- { 0x000001be, 29255 }, /* zcaron */
- { 0x000001bf, 29224 }, /* zabovedot */
- { 0x000001c0, 22272 }, /* Racute */
+ { 0x000001b9, 22706 }, /* scaron */
+ { 0x000001ba, 22722 }, /* scedilla */
+ { 0x000001bb, 24411 }, /* tcaron */
+ { 0x000001bc, 31349 }, /* zacute */
+ { 0x000001bd, 11365 }, /* doubleacute */
+ { 0x000001be, 31363 }, /* zcaron */
+ { 0x000001bf, 31332 }, /* zabovedot */
+ { 0x000001c0, 22354 }, /* Racute */
{ 0x000001c3, 445 }, /* Abreve */
- { 0x000001c5, 19147 }, /* Lacute */
+ { 0x000001c5, 19229 }, /* Lacute */
{ 0x000001c6, 8475 }, /* Cacute */
{ 0x000001c8, 8525 }, /* Ccaron */
- { 0x000001ca, 12035 }, /* Eogonek */
- { 0x000001cc, 11482 }, /* Ecaron */
- { 0x000001cf, 10365 }, /* Dcaron */
- { 0x000001d0, 11401 }, /* Dstroke */
- { 0x000001d1, 19953 }, /* Nacute */
- { 0x000001d2, 19977 }, /* Ncaron */
- { 0x000001d5, 20488 }, /* Odoubleacute */
- { 0x000001d8, 22294 }, /* Rcaron */
- { 0x000001d9, 26452 }, /* Uring */
- { 0x000001db, 25945 }, /* Udoubleacute */
- { 0x000001de, 24336 }, /* Tcedilla */
- { 0x000001e0, 22279 }, /* racute */
+ { 0x000001ca, 12117 }, /* Eogonek */
+ { 0x000001cc, 11564 }, /* Ecaron */
+ { 0x000001cf, 10447 }, /* Dcaron */
+ { 0x000001d0, 11483 }, /* Dstroke */
+ { 0x000001d1, 20035 }, /* Nacute */
+ { 0x000001d2, 20059 }, /* Ncaron */
+ { 0x000001d5, 20570 }, /* Odoubleacute */
+ { 0x000001d8, 22376 }, /* Rcaron */
+ { 0x000001d9, 26534 }, /* Uring */
+ { 0x000001db, 26027 }, /* Udoubleacute */
+ { 0x000001de, 24418 }, /* Tcedilla */
+ { 0x000001e0, 22361 }, /* racute */
{ 0x000001e3, 452 }, /* abreve */
- { 0x000001e5, 19154 }, /* lacute */
+ { 0x000001e5, 19236 }, /* lacute */
{ 0x000001e6, 8482 }, /* cacute */
{ 0x000001e8, 8532 }, /* ccaron */
- { 0x000001ea, 12043 }, /* eogonek */
- { 0x000001ec, 11489 }, /* ecaron */
- { 0x000001ef, 10372 }, /* dcaron */
- { 0x000001f0, 11409 }, /* dstroke */
- { 0x000001f1, 19960 }, /* nacute */
- { 0x000001f2, 19984 }, /* ncaron */
- { 0x000001f5, 20501 }, /* odoubleacute */
- { 0x000001f8, 22301 }, /* rcaron */
- { 0x000001f9, 26458 }, /* uring */
- { 0x000001fb, 25958 }, /* udoubleacute */
- { 0x000001fe, 24345 }, /* tcedilla */
+ { 0x000001ea, 12125 }, /* eogonek */
+ { 0x000001ec, 11571 }, /* ecaron */
+ { 0x000001ef, 10454 }, /* dcaron */
+ { 0x000001f0, 11491 }, /* dstroke */
+ { 0x000001f1, 20042 }, /* nacute */
+ { 0x000001f2, 20066 }, /* ncaron */
+ { 0x000001f5, 20583 }, /* odoubleacute */
+ { 0x000001f8, 22383 }, /* rcaron */
+ { 0x000001f9, 26540 }, /* uring */
+ { 0x000001fb, 26040 }, /* udoubleacute */
+ { 0x000001fe, 24427 }, /* tcedilla */
{ 0x000001ff, 436 }, /* abovedot */
- { 0x000002a1, 17027 }, /* Hstroke */
- { 0x000002a6, 16056 }, /* Hcircumflex */
- { 0x000002a9, 17073 }, /* Iabovedot */
- { 0x000002ab, 12689 }, /* Gbreve */
- { 0x000002ac, 18118 }, /* Jcircumflex */
- { 0x000002b1, 17035 }, /* hstroke */
- { 0x000002b6, 16068 }, /* hcircumflex */
- { 0x000002b9, 17187 }, /* idotless */
- { 0x000002bb, 12696 }, /* gbreve */
- { 0x000002bc, 18130 }, /* jcircumflex */
+ { 0x000002a1, 17109 }, /* Hstroke */
+ { 0x000002a6, 16138 }, /* Hcircumflex */
+ { 0x000002a9, 17155 }, /* Iabovedot */
+ { 0x000002ab, 12771 }, /* Gbreve */
+ { 0x000002ac, 18200 }, /* Jcircumflex */
+ { 0x000002b1, 17117 }, /* hstroke */
+ { 0x000002b6, 16150 }, /* hcircumflex */
+ { 0x000002b9, 17269 }, /* idotless */
+ { 0x000002bb, 12778 }, /* gbreve */
+ { 0x000002bc, 18212 }, /* jcircumflex */
{ 0x000002c5, 8455 }, /* Cabovedot */
{ 0x000002c6, 8557 }, /* Ccircumflex */
- { 0x000002d5, 12669 }, /* Gabovedot */
- { 0x000002d8, 12735 }, /* Gcircumflex */
- { 0x000002dd, 25885 }, /* Ubreve */
- { 0x000002de, 22661 }, /* Scircumflex */
+ { 0x000002d5, 12751 }, /* Gabovedot */
+ { 0x000002d8, 12817 }, /* Gcircumflex */
+ { 0x000002dd, 25967 }, /* Ubreve */
+ { 0x000002de, 22743 }, /* Scircumflex */
{ 0x000002e5, 8465 }, /* cabovedot */
{ 0x000002e6, 8569 }, /* ccircumflex */
- { 0x000002f5, 12679 }, /* gabovedot */
- { 0x000002f8, 12747 }, /* gcircumflex */
- { 0x000002fd, 25892 }, /* ubreve */
- { 0x000002fe, 22673 }, /* scircumflex */
- { 0x000003a2, 19108 }, /* kra */
- { 0x000003a3, 22308 }, /* Rcedilla */
- { 0x000003a5, 18100 }, /* Itilde */
- { 0x000003a6, 19226 }, /* Lcedilla */
- { 0x000003aa, 11839 }, /* Emacron */
- { 0x000003ab, 12717 }, /* Gcedilla */
- { 0x000003ac, 25788 }, /* Tslash */
- { 0x000003b3, 22317 }, /* rcedilla */
- { 0x000003b5, 18107 }, /* itilde */
- { 0x000003b6, 19235 }, /* lcedilla */
- { 0x000003ba, 11847 }, /* emacron */
- { 0x000003bb, 12726 }, /* gcedilla */
- { 0x000003bc, 25795 }, /* tslash */
- { 0x000003bd, 11983 }, /* ENG */
- { 0x000003bf, 11987 }, /* eng */
+ { 0x000002f5, 12761 }, /* gabovedot */
+ { 0x000002f8, 12829 }, /* gcircumflex */
+ { 0x000002fd, 25974 }, /* ubreve */
+ { 0x000002fe, 22755 }, /* scircumflex */
+ { 0x000003a2, 19190 }, /* kra */
+ { 0x000003a3, 22390 }, /* Rcedilla */
+ { 0x000003a5, 18182 }, /* Itilde */
+ { 0x000003a6, 19308 }, /* Lcedilla */
+ { 0x000003aa, 11921 }, /* Emacron */
+ { 0x000003ab, 12799 }, /* Gcedilla */
+ { 0x000003ac, 25870 }, /* Tslash */
+ { 0x000003b3, 22399 }, /* rcedilla */
+ { 0x000003b5, 18189 }, /* itilde */
+ { 0x000003b6, 19317 }, /* lcedilla */
+ { 0x000003ba, 11929 }, /* emacron */
+ { 0x000003bb, 12808 }, /* gcedilla */
+ { 0x000003bc, 25877 }, /* tslash */
+ { 0x000003bd, 12065 }, /* ENG */
+ { 0x000003bf, 12069 }, /* eng */
{ 0x000003c0, 892 }, /* Amacron */
- { 0x000003c7, 17338 }, /* Iogonek */
- { 0x000003cc, 11428 }, /* Eabovedot */
- { 0x000003cf, 17231 }, /* Imacron */
- { 0x000003d1, 19991 }, /* Ncedilla */
- { 0x000003d2, 20679 }, /* Omacron */
- { 0x000003d3, 18779 }, /* Kcedilla */
- { 0x000003d9, 26368 }, /* Uogonek */
- { 0x000003dd, 26469 }, /* Utilde */
- { 0x000003de, 26321 }, /* Umacron */
+ { 0x000003c7, 17420 }, /* Iogonek */
+ { 0x000003cc, 11510 }, /* Eabovedot */
+ { 0x000003cf, 17313 }, /* Imacron */
+ { 0x000003d1, 20073 }, /* Ncedilla */
+ { 0x000003d2, 20761 }, /* Omacron */
+ { 0x000003d3, 18861 }, /* Kcedilla */
+ { 0x000003d9, 26450 }, /* Uogonek */
+ { 0x000003dd, 26551 }, /* Utilde */
+ { 0x000003de, 26403 }, /* Umacron */
{ 0x000003e0, 900 }, /* amacron */
- { 0x000003e7, 17346 }, /* iogonek */
- { 0x000003ec, 11438 }, /* eabovedot */
- { 0x000003ef, 17239 }, /* imacron */
- { 0x000003f1, 20000 }, /* ncedilla */
- { 0x000003f2, 20687 }, /* omacron */
- { 0x000003f3, 18788 }, /* kcedilla */
- { 0x000003f9, 26376 }, /* uogonek */
- { 0x000003fd, 26476 }, /* utilde */
- { 0x000003fe, 26329 }, /* umacron */
- { 0x0000047e, 21364 }, /* overline */
- { 0x000004a1, 18243 }, /* kana_fullstop */
- { 0x000004a2, 18477 }, /* kana_openingbracket */
- { 0x000004a3, 18173 }, /* kana_closingbracket */
- { 0x000004a4, 18193 }, /* kana_comma */
- { 0x000004a5, 18204 }, /* kana_conjunctive */
- { 0x000004a6, 18689 }, /* kana_WO */
- { 0x000004a7, 18150 }, /* kana_a */
- { 0x000004a8, 18297 }, /* kana_i */
- { 0x000004a9, 18667 }, /* kana_u */
- { 0x000004aa, 18221 }, /* kana_e */
- { 0x000004ab, 18463 }, /* kana_o */
- { 0x000004ac, 18697 }, /* kana_ya */
- { 0x000004ad, 18729 }, /* kana_yu */
- { 0x000004ae, 18713 }, /* kana_yo */
- { 0x000004af, 18633 }, /* kana_tsu */
- { 0x000004b0, 22130 }, /* prolongedsound */
- { 0x000004b1, 18157 }, /* kana_A */
- { 0x000004b2, 18304 }, /* kana_I */
- { 0x000004b3, 18674 }, /* kana_U */
- { 0x000004b4, 18228 }, /* kana_E */
- { 0x000004b5, 18470 }, /* kana_O */
- { 0x000004b6, 18311 }, /* kana_KA */
- { 0x000004b7, 18327 }, /* kana_KI */
- { 0x000004b8, 18343 }, /* kana_KU */
- { 0x000004b9, 18319 }, /* kana_KE */
- { 0x000004ba, 18335 }, /* kana_KO */
- { 0x000004bb, 18537 }, /* kana_SA */
- { 0x000004bc, 18553 }, /* kana_SHI */
- { 0x000004bd, 18581 }, /* kana_SU */
- { 0x000004be, 18545 }, /* kana_SE */
- { 0x000004bf, 18573 }, /* kana_SO */
- { 0x000004c0, 18601 }, /* kana_TA */
- { 0x000004c1, 18164 }, /* kana_CHI */
- { 0x000004c2, 18642 }, /* kana_TSU */
- { 0x000004c3, 18609 }, /* kana_TE */
- { 0x000004c4, 18625 }, /* kana_TO */
- { 0x000004c5, 18423 }, /* kana_NA */
- { 0x000004c6, 18439 }, /* kana_NI */
- { 0x000004c7, 18455 }, /* kana_NU */
- { 0x000004c8, 18431 }, /* kana_NE */
- { 0x000004c9, 18447 }, /* kana_NO */
- { 0x000004ca, 18257 }, /* kana_HA */
- { 0x000004cb, 18273 }, /* kana_HI */
- { 0x000004cc, 18235 }, /* kana_FU */
- { 0x000004cd, 18265 }, /* kana_HE */
- { 0x000004ce, 18281 }, /* kana_HO */
- { 0x000004cf, 18361 }, /* kana_MA */
- { 0x000004d0, 18377 }, /* kana_MI */
- { 0x000004d1, 18408 }, /* kana_MU */
- { 0x000004d2, 18369 }, /* kana_ME */
- { 0x000004d3, 18400 }, /* kana_MO */
- { 0x000004d4, 18705 }, /* kana_YA */
- { 0x000004d5, 18737 }, /* kana_YU */
- { 0x000004d6, 18721 }, /* kana_YO */
- { 0x000004d7, 18497 }, /* kana_RA */
- { 0x000004d8, 18513 }, /* kana_RI */
- { 0x000004d9, 18529 }, /* kana_RU */
- { 0x000004da, 18505 }, /* kana_RE */
- { 0x000004db, 18521 }, /* kana_RO */
- { 0x000004dc, 18681 }, /* kana_WA */
- { 0x000004dd, 18416 }, /* kana_N */
- { 0x000004de, 26519 }, /* voicedsound */
- { 0x000004df, 22744 }, /* semivoicedsound */
+ { 0x000003e7, 17428 }, /* iogonek */
+ { 0x000003ec, 11520 }, /* eabovedot */
+ { 0x000003ef, 17321 }, /* imacron */
+ { 0x000003f1, 20082 }, /* ncedilla */
+ { 0x000003f2, 20769 }, /* omacron */
+ { 0x000003f3, 18870 }, /* kcedilla */
+ { 0x000003f9, 26458 }, /* uogonek */
+ { 0x000003fd, 26558 }, /* utilde */
+ { 0x000003fe, 26411 }, /* umacron */
+ { 0x0000047e, 21446 }, /* overline */
+ { 0x000004a1, 18325 }, /* kana_fullstop */
+ { 0x000004a2, 18559 }, /* kana_openingbracket */
+ { 0x000004a3, 18255 }, /* kana_closingbracket */
+ { 0x000004a4, 18275 }, /* kana_comma */
+ { 0x000004a5, 18286 }, /* kana_conjunctive */
+ { 0x000004a6, 18771 }, /* kana_WO */
+ { 0x000004a7, 18232 }, /* kana_a */
+ { 0x000004a8, 18379 }, /* kana_i */
+ { 0x000004a9, 18749 }, /* kana_u */
+ { 0x000004aa, 18303 }, /* kana_e */
+ { 0x000004ab, 18545 }, /* kana_o */
+ { 0x000004ac, 18779 }, /* kana_ya */
+ { 0x000004ad, 18811 }, /* kana_yu */
+ { 0x000004ae, 18795 }, /* kana_yo */
+ { 0x000004af, 18715 }, /* kana_tsu */
+ { 0x000004b0, 22212 }, /* prolongedsound */
+ { 0x000004b1, 18239 }, /* kana_A */
+ { 0x000004b2, 18386 }, /* kana_I */
+ { 0x000004b3, 18756 }, /* kana_U */
+ { 0x000004b4, 18310 }, /* kana_E */
+ { 0x000004b5, 18552 }, /* kana_O */
+ { 0x000004b6, 18393 }, /* kana_KA */
+ { 0x000004b7, 18409 }, /* kana_KI */
+ { 0x000004b8, 18425 }, /* kana_KU */
+ { 0x000004b9, 18401 }, /* kana_KE */
+ { 0x000004ba, 18417 }, /* kana_KO */
+ { 0x000004bb, 18619 }, /* kana_SA */
+ { 0x000004bc, 18635 }, /* kana_SHI */
+ { 0x000004bd, 18663 }, /* kana_SU */
+ { 0x000004be, 18627 }, /* kana_SE */
+ { 0x000004bf, 18655 }, /* kana_SO */
+ { 0x000004c0, 18683 }, /* kana_TA */
+ { 0x000004c1, 18246 }, /* kana_CHI */
+ { 0x000004c2, 18724 }, /* kana_TSU */
+ { 0x000004c3, 18691 }, /* kana_TE */
+ { 0x000004c4, 18707 }, /* kana_TO */
+ { 0x000004c5, 18505 }, /* kana_NA */
+ { 0x000004c6, 18521 }, /* kana_NI */
+ { 0x000004c7, 18537 }, /* kana_NU */
+ { 0x000004c8, 18513 }, /* kana_NE */
+ { 0x000004c9, 18529 }, /* kana_NO */
+ { 0x000004ca, 18339 }, /* kana_HA */
+ { 0x000004cb, 18355 }, /* kana_HI */
+ { 0x000004cc, 18317 }, /* kana_FU */
+ { 0x000004cd, 18347 }, /* kana_HE */
+ { 0x000004ce, 18363 }, /* kana_HO */
+ { 0x000004cf, 18443 }, /* kana_MA */
+ { 0x000004d0, 18459 }, /* kana_MI */
+ { 0x000004d1, 18490 }, /* kana_MU */
+ { 0x000004d2, 18451 }, /* kana_ME */
+ { 0x000004d3, 18482 }, /* kana_MO */
+ { 0x000004d4, 18787 }, /* kana_YA */
+ { 0x000004d5, 18819 }, /* kana_YU */
+ { 0x000004d6, 18803 }, /* kana_YO */
+ { 0x000004d7, 18579 }, /* kana_RA */
+ { 0x000004d8, 18595 }, /* kana_RI */
+ { 0x000004d9, 18611 }, /* kana_RU */
+ { 0x000004da, 18587 }, /* kana_RE */
+ { 0x000004db, 18603 }, /* kana_RO */
+ { 0x000004dc, 18763 }, /* kana_WA */
+ { 0x000004dd, 18498 }, /* kana_N */
+ { 0x000004de, 26601 }, /* voicedsound */
+ { 0x000004df, 22826 }, /* semivoicedsound */
{ 0x000005ac, 1109 }, /* Arabic_comma */
{ 0x000005bb, 1764 }, /* Arabic_semicolon */
{ 0x000005bf, 1698 }, /* Arabic_question_mark */
@@ -5260,555 +5861,555 @@ static const struct name_keysym keysym_to_name[] = {
{ 0x000005f0, 1515 }, /* Arabic_kasra */
{ 0x000005f1, 1781 }, /* Arabic_shadda */
{ 0x000005f2, 1808 }, /* Arabic_sukun */
- { 0x000006a1, 22760 }, /* Serbian_dje */
- { 0x000006a2, 19585 }, /* Macedonia_gje */
- { 0x000006a3, 9456 }, /* Cyrillic_io */
- { 0x000006a4, 26199 }, /* Ukrainian_ie */
- { 0x000006a5, 19557 }, /* Macedonia_dse */
- { 0x000006a6, 26175 }, /* Ukrainian_i */
- { 0x000006a7, 26225 }, /* Ukrainian_yi */
- { 0x000006a8, 9480 }, /* Cyrillic_je */
- { 0x000006a9, 9618 }, /* Cyrillic_lje */
- { 0x000006aa, 9644 }, /* Cyrillic_nje */
- { 0x000006ab, 22878 }, /* Serbian_tshe */
- { 0x000006ac, 19613 }, /* Macedonia_kje */
- { 0x000006ad, 26123 }, /* Ukrainian_ghe_with_upturn */
+ { 0x000006a1, 22842 }, /* Serbian_dje */
+ { 0x000006a2, 19667 }, /* Macedonia_gje */
+ { 0x000006a3, 9538 }, /* Cyrillic_io */
+ { 0x000006a4, 26281 }, /* Ukrainian_ie */
+ { 0x000006a5, 19639 }, /* Macedonia_dse */
+ { 0x000006a6, 26257 }, /* Ukrainian_i */
+ { 0x000006a7, 26307 }, /* Ukrainian_yi */
+ { 0x000006a8, 9562 }, /* Cyrillic_je */
+ { 0x000006a9, 9700 }, /* Cyrillic_lje */
+ { 0x000006aa, 9726 }, /* Cyrillic_nje */
+ { 0x000006ab, 22960 }, /* Serbian_tshe */
+ { 0x000006ac, 19695 }, /* Macedonia_kje */
+ { 0x000006ad, 26205 }, /* Ukrainian_ghe_with_upturn */
{ 0x000006ae, 8399 }, /* Byelorussian_shortu */
- { 0x000006af, 8972 }, /* Cyrillic_dzhe */
- { 0x000006b0, 20189 }, /* numerosign */
- { 0x000006b1, 22772 }, /* Serbian_DJE */
- { 0x000006b2, 19599 }, /* Macedonia_GJE */
- { 0x000006b3, 9468 }, /* Cyrillic_IO */
- { 0x000006b4, 26212 }, /* Ukrainian_IE */
- { 0x000006b5, 19571 }, /* Macedonia_DSE */
- { 0x000006b6, 26187 }, /* Ukrainian_I */
- { 0x000006b7, 26238 }, /* Ukrainian_YI */
- { 0x000006b8, 9492 }, /* Cyrillic_JE */
- { 0x000006b9, 9631 }, /* Cyrillic_LJE */
- { 0x000006ba, 9657 }, /* Cyrillic_NJE */
- { 0x000006bb, 22891 }, /* Serbian_TSHE */
- { 0x000006bc, 19627 }, /* Macedonia_KJE */
- { 0x000006bd, 26149 }, /* Ukrainian_GHE_WITH_UPTURN */
+ { 0x000006af, 9054 }, /* Cyrillic_dzhe */
+ { 0x000006b0, 20271 }, /* numerosign */
+ { 0x000006b1, 22854 }, /* Serbian_DJE */
+ { 0x000006b2, 19681 }, /* Macedonia_GJE */
+ { 0x000006b3, 9550 }, /* Cyrillic_IO */
+ { 0x000006b4, 26294 }, /* Ukrainian_IE */
+ { 0x000006b5, 19653 }, /* Macedonia_DSE */
+ { 0x000006b6, 26269 }, /* Ukrainian_I */
+ { 0x000006b7, 26320 }, /* Ukrainian_YI */
+ { 0x000006b8, 9574 }, /* Cyrillic_JE */
+ { 0x000006b9, 9713 }, /* Cyrillic_LJE */
+ { 0x000006ba, 9739 }, /* Cyrillic_NJE */
+ { 0x000006bb, 22973 }, /* Serbian_TSHE */
+ { 0x000006bc, 19709 }, /* Macedonia_KJE */
+ { 0x000006bd, 26231 }, /* Ukrainian_GHE_WITH_UPTURN */
{ 0x000006be, 8419 }, /* Byelorussian_SHORTU */
- { 0x000006bf, 8986 }, /* Cyrillic_DZHE */
- { 0x000006c0, 10200 }, /* Cyrillic_yu */
- { 0x000006c1, 8782 }, /* Cyrillic_a */
- { 0x000006c2, 8804 }, /* Cyrillic_be */
- { 0x000006c3, 9952 }, /* Cyrillic_tse */
- { 0x000006c4, 8948 }, /* Cyrillic_de */
- { 0x000006c5, 9432 }, /* Cyrillic_ie */
- { 0x000006c6, 9022 }, /* Cyrillic_ef */
- { 0x000006c7, 9210 }, /* Cyrillic_ghe */
- { 0x000006c8, 9270 }, /* Cyrillic_ha */
- { 0x000006c9, 9374 }, /* Cyrillic_i */
- { 0x000006ca, 9860 }, /* Cyrillic_shorti */
- { 0x000006cb, 9504 }, /* Cyrillic_ka */
- { 0x000006cc, 9046 }, /* Cyrillic_el */
- { 0x000006cd, 9070 }, /* Cyrillic_em */
- { 0x000006ce, 9094 }, /* Cyrillic_en */
- { 0x000006cf, 9670 }, /* Cyrillic_o */
- { 0x000006d0, 9722 }, /* Cyrillic_pe */
- { 0x000006d1, 10148 }, /* Cyrillic_ya */
- { 0x000006d2, 9162 }, /* Cyrillic_er */
- { 0x000006d3, 9186 }, /* Cyrillic_es */
- { 0x000006d4, 9928 }, /* Cyrillic_te */
- { 0x000006d5, 9978 }, /* Cyrillic_u */
- { 0x000006d6, 10248 }, /* Cyrillic_zhe */
- { 0x000006d7, 10124 }, /* Cyrillic_ve */
- { 0x000006d8, 9892 }, /* Cyrillic_softsign */
- { 0x000006d9, 10172 }, /* Cyrillic_yeru */
- { 0x000006da, 10224 }, /* Cyrillic_ze */
- { 0x000006db, 9776 }, /* Cyrillic_sha */
- { 0x000006dc, 9000 }, /* Cyrillic_e */
- { 0x000006dd, 9802 }, /* Cyrillic_shcha */
- { 0x000006de, 8828 }, /* Cyrillic_che */
- { 0x000006df, 9338 }, /* Cyrillic_hardsign */
- { 0x000006e0, 10212 }, /* Cyrillic_YU */
- { 0x000006e1, 8793 }, /* Cyrillic_A */
- { 0x000006e2, 8816 }, /* Cyrillic_BE */
- { 0x000006e3, 9965 }, /* Cyrillic_TSE */
- { 0x000006e4, 8960 }, /* Cyrillic_DE */
- { 0x000006e5, 9444 }, /* Cyrillic_IE */
- { 0x000006e6, 9034 }, /* Cyrillic_EF */
- { 0x000006e7, 9223 }, /* Cyrillic_GHE */
- { 0x000006e8, 9282 }, /* Cyrillic_HA */
- { 0x000006e9, 9385 }, /* Cyrillic_I */
- { 0x000006ea, 9876 }, /* Cyrillic_SHORTI */
- { 0x000006eb, 9516 }, /* Cyrillic_KA */
- { 0x000006ec, 9058 }, /* Cyrillic_EL */
- { 0x000006ed, 9082 }, /* Cyrillic_EM */
- { 0x000006ee, 9106 }, /* Cyrillic_EN */
- { 0x000006ef, 9681 }, /* Cyrillic_O */
- { 0x000006f0, 9734 }, /* Cyrillic_PE */
- { 0x000006f1, 10160 }, /* Cyrillic_YA */
- { 0x000006f2, 9174 }, /* Cyrillic_ER */
- { 0x000006f3, 9198 }, /* Cyrillic_ES */
- { 0x000006f4, 9940 }, /* Cyrillic_TE */
- { 0x000006f5, 9989 }, /* Cyrillic_U */
- { 0x000006f6, 10261 }, /* Cyrillic_ZHE */
- { 0x000006f7, 10136 }, /* Cyrillic_VE */
- { 0x000006f8, 9910 }, /* Cyrillic_SOFTSIGN */
- { 0x000006f9, 10186 }, /* Cyrillic_YERU */
- { 0x000006fa, 10236 }, /* Cyrillic_ZE */
- { 0x000006fb, 9789 }, /* Cyrillic_SHA */
- { 0x000006fc, 9011 }, /* Cyrillic_E */
- { 0x000006fd, 9817 }, /* Cyrillic_SHCHA */
- { 0x000006fe, 8841 }, /* Cyrillic_CHE */
- { 0x000006ff, 9356 }, /* Cyrillic_HARDSIGN */
- { 0x000007a1, 13342 }, /* Greek_ALPHAaccent */
- { 0x000007a2, 13472 }, /* Greek_EPSILONaccent */
- { 0x000007a3, 13532 }, /* Greek_ETAaccent */
- { 0x000007a4, 13647 }, /* Greek_IOTAaccent */
- { 0x000007a5, 13726 }, /* Greek_IOTAdieresis */
- { 0x000007a7, 13962 }, /* Greek_OMICRONaccent */
- { 0x000007a8, 14189 }, /* Greek_UPSILONaccent */
- { 0x000007a9, 14257 }, /* Greek_UPSILONdieresis */
- { 0x000007ab, 13898 }, /* Greek_OMEGAaccent */
- { 0x000007ae, 13297 }, /* Greek_accentdieresis */
- { 0x000007af, 13610 }, /* Greek_horizbar */
- { 0x000007b1, 13360 }, /* Greek_alphaaccent */
- { 0x000007b2, 13492 }, /* Greek_epsilonaccent */
- { 0x000007b3, 13548 }, /* Greek_etaaccent */
- { 0x000007b4, 13664 }, /* Greek_iotaaccent */
- { 0x000007b5, 13745 }, /* Greek_iotadieresis */
- { 0x000007b6, 13681 }, /* Greek_iotaaccentdieresis */
- { 0x000007b7, 13982 }, /* Greek_omicronaccent */
- { 0x000007b8, 14209 }, /* Greek_upsilonaccent */
- { 0x000007b9, 14279 }, /* Greek_upsilondieresis */
- { 0x000007ba, 14229 }, /* Greek_upsilonaccentdieresis */
- { 0x000007bb, 13916 }, /* Greek_omegaaccent */
- { 0x000007c1, 13318 }, /* Greek_ALPHA */
- { 0x000007c2, 13378 }, /* Greek_BETA */
- { 0x000007c3, 13586 }, /* Greek_GAMMA */
- { 0x000007c4, 13420 }, /* Greek_DELTA */
- { 0x000007c5, 13444 }, /* Greek_EPSILON */
- { 0x000007c6, 14319 }, /* Greek_ZETA */
- { 0x000007c7, 13512 }, /* Greek_ETA */
- { 0x000007c8, 14137 }, /* Greek_THETA */
- { 0x000007c9, 13625 }, /* Greek_IOTA */
- { 0x000007ca, 13764 }, /* Greek_KAPPA */
- { 0x000007cb, 13814 }, /* Greek_LAMDA */
- { 0x000007cc, 13838 }, /* Greek_MU */
- { 0x000007cd, 13856 }, /* Greek_NU */
- { 0x000007ce, 14301 }, /* Greek_XI */
- { 0x000007cf, 13934 }, /* Greek_OMICRON */
- { 0x000007d0, 14022 }, /* Greek_PI */
- { 0x000007d1, 14060 }, /* Greek_RHO */
- { 0x000007d2, 14080 }, /* Greek_SIGMA */
- { 0x000007d4, 14117 }, /* Greek_TAU */
- { 0x000007d5, 14161 }, /* Greek_UPSILON */
- { 0x000007d6, 14002 }, /* Greek_PHI */
- { 0x000007d7, 13400 }, /* Greek_CHI */
- { 0x000007d8, 14040 }, /* Greek_PSI */
- { 0x000007d9, 13874 }, /* Greek_OMEGA */
- { 0x000007e1, 13330 }, /* Greek_alpha */
- { 0x000007e2, 13389 }, /* Greek_beta */
- { 0x000007e3, 13598 }, /* Greek_gamma */
- { 0x000007e4, 13432 }, /* Greek_delta */
- { 0x000007e5, 13458 }, /* Greek_epsilon */
- { 0x000007e6, 14330 }, /* Greek_zeta */
- { 0x000007e7, 13522 }, /* Greek_eta */
- { 0x000007e8, 14149 }, /* Greek_theta */
- { 0x000007e9, 13636 }, /* Greek_iota */
- { 0x000007ea, 13776 }, /* Greek_kappa */
- { 0x000007eb, 13826 }, /* Greek_lamda */
- { 0x000007ec, 13847 }, /* Greek_mu */
- { 0x000007ed, 13865 }, /* Greek_nu */
- { 0x000007ee, 14310 }, /* Greek_xi */
- { 0x000007ef, 13948 }, /* Greek_omicron */
- { 0x000007f0, 14031 }, /* Greek_pi */
- { 0x000007f1, 14070 }, /* Greek_rho */
- { 0x000007f2, 14092 }, /* Greek_sigma */
- { 0x000007f3, 13564 }, /* Greek_finalsmallsigma */
- { 0x000007f4, 14127 }, /* Greek_tau */
- { 0x000007f5, 14175 }, /* Greek_upsilon */
- { 0x000007f6, 14012 }, /* Greek_phi */
- { 0x000007f7, 13410 }, /* Greek_chi */
- { 0x000007f8, 14050 }, /* Greek_psi */
- { 0x000007f9, 13886 }, /* Greek_omega */
- { 0x000008a1, 19356 }, /* leftradical */
- { 0x000008a2, 25621 }, /* topleftradical */
- { 0x000008a3, 16667 }, /* horizconnector */
- { 0x000008a4, 25595 }, /* topintegral */
+ { 0x000006bf, 9068 }, /* Cyrillic_DZHE */
+ { 0x000006c0, 10282 }, /* Cyrillic_yu */
+ { 0x000006c1, 8864 }, /* Cyrillic_a */
+ { 0x000006c2, 8886 }, /* Cyrillic_be */
+ { 0x000006c3, 10034 }, /* Cyrillic_tse */
+ { 0x000006c4, 9030 }, /* Cyrillic_de */
+ { 0x000006c5, 9514 }, /* Cyrillic_ie */
+ { 0x000006c6, 9104 }, /* Cyrillic_ef */
+ { 0x000006c7, 9292 }, /* Cyrillic_ghe */
+ { 0x000006c8, 9352 }, /* Cyrillic_ha */
+ { 0x000006c9, 9456 }, /* Cyrillic_i */
+ { 0x000006ca, 9942 }, /* Cyrillic_shorti */
+ { 0x000006cb, 9586 }, /* Cyrillic_ka */
+ { 0x000006cc, 9128 }, /* Cyrillic_el */
+ { 0x000006cd, 9152 }, /* Cyrillic_em */
+ { 0x000006ce, 9176 }, /* Cyrillic_en */
+ { 0x000006cf, 9752 }, /* Cyrillic_o */
+ { 0x000006d0, 9804 }, /* Cyrillic_pe */
+ { 0x000006d1, 10230 }, /* Cyrillic_ya */
+ { 0x000006d2, 9244 }, /* Cyrillic_er */
+ { 0x000006d3, 9268 }, /* Cyrillic_es */
+ { 0x000006d4, 10010 }, /* Cyrillic_te */
+ { 0x000006d5, 10060 }, /* Cyrillic_u */
+ { 0x000006d6, 10330 }, /* Cyrillic_zhe */
+ { 0x000006d7, 10206 }, /* Cyrillic_ve */
+ { 0x000006d8, 9974 }, /* Cyrillic_softsign */
+ { 0x000006d9, 10254 }, /* Cyrillic_yeru */
+ { 0x000006da, 10306 }, /* Cyrillic_ze */
+ { 0x000006db, 9858 }, /* Cyrillic_sha */
+ { 0x000006dc, 9082 }, /* Cyrillic_e */
+ { 0x000006dd, 9884 }, /* Cyrillic_shcha */
+ { 0x000006de, 8910 }, /* Cyrillic_che */
+ { 0x000006df, 9420 }, /* Cyrillic_hardsign */
+ { 0x000006e0, 10294 }, /* Cyrillic_YU */
+ { 0x000006e1, 8875 }, /* Cyrillic_A */
+ { 0x000006e2, 8898 }, /* Cyrillic_BE */
+ { 0x000006e3, 10047 }, /* Cyrillic_TSE */
+ { 0x000006e4, 9042 }, /* Cyrillic_DE */
+ { 0x000006e5, 9526 }, /* Cyrillic_IE */
+ { 0x000006e6, 9116 }, /* Cyrillic_EF */
+ { 0x000006e7, 9305 }, /* Cyrillic_GHE */
+ { 0x000006e8, 9364 }, /* Cyrillic_HA */
+ { 0x000006e9, 9467 }, /* Cyrillic_I */
+ { 0x000006ea, 9958 }, /* Cyrillic_SHORTI */
+ { 0x000006eb, 9598 }, /* Cyrillic_KA */
+ { 0x000006ec, 9140 }, /* Cyrillic_EL */
+ { 0x000006ed, 9164 }, /* Cyrillic_EM */
+ { 0x000006ee, 9188 }, /* Cyrillic_EN */
+ { 0x000006ef, 9763 }, /* Cyrillic_O */
+ { 0x000006f0, 9816 }, /* Cyrillic_PE */
+ { 0x000006f1, 10242 }, /* Cyrillic_YA */
+ { 0x000006f2, 9256 }, /* Cyrillic_ER */
+ { 0x000006f3, 9280 }, /* Cyrillic_ES */
+ { 0x000006f4, 10022 }, /* Cyrillic_TE */
+ { 0x000006f5, 10071 }, /* Cyrillic_U */
+ { 0x000006f6, 10343 }, /* Cyrillic_ZHE */
+ { 0x000006f7, 10218 }, /* Cyrillic_VE */
+ { 0x000006f8, 9992 }, /* Cyrillic_SOFTSIGN */
+ { 0x000006f9, 10268 }, /* Cyrillic_YERU */
+ { 0x000006fa, 10318 }, /* Cyrillic_ZE */
+ { 0x000006fb, 9871 }, /* Cyrillic_SHA */
+ { 0x000006fc, 9093 }, /* Cyrillic_E */
+ { 0x000006fd, 9899 }, /* Cyrillic_SHCHA */
+ { 0x000006fe, 8923 }, /* Cyrillic_CHE */
+ { 0x000006ff, 9438 }, /* Cyrillic_HARDSIGN */
+ { 0x000007a1, 13424 }, /* Greek_ALPHAaccent */
+ { 0x000007a2, 13554 }, /* Greek_EPSILONaccent */
+ { 0x000007a3, 13614 }, /* Greek_ETAaccent */
+ { 0x000007a4, 13729 }, /* Greek_IOTAaccent */
+ { 0x000007a5, 13808 }, /* Greek_IOTAdieresis */
+ { 0x000007a7, 14044 }, /* Greek_OMICRONaccent */
+ { 0x000007a8, 14271 }, /* Greek_UPSILONaccent */
+ { 0x000007a9, 14339 }, /* Greek_UPSILONdieresis */
+ { 0x000007ab, 13980 }, /* Greek_OMEGAaccent */
+ { 0x000007ae, 13379 }, /* Greek_accentdieresis */
+ { 0x000007af, 13692 }, /* Greek_horizbar */
+ { 0x000007b1, 13442 }, /* Greek_alphaaccent */
+ { 0x000007b2, 13574 }, /* Greek_epsilonaccent */
+ { 0x000007b3, 13630 }, /* Greek_etaaccent */
+ { 0x000007b4, 13746 }, /* Greek_iotaaccent */
+ { 0x000007b5, 13827 }, /* Greek_iotadieresis */
+ { 0x000007b6, 13763 }, /* Greek_iotaaccentdieresis */
+ { 0x000007b7, 14064 }, /* Greek_omicronaccent */
+ { 0x000007b8, 14291 }, /* Greek_upsilonaccent */
+ { 0x000007b9, 14361 }, /* Greek_upsilondieresis */
+ { 0x000007ba, 14311 }, /* Greek_upsilonaccentdieresis */
+ { 0x000007bb, 13998 }, /* Greek_omegaaccent */
+ { 0x000007c1, 13400 }, /* Greek_ALPHA */
+ { 0x000007c2, 13460 }, /* Greek_BETA */
+ { 0x000007c3, 13668 }, /* Greek_GAMMA */
+ { 0x000007c4, 13502 }, /* Greek_DELTA */
+ { 0x000007c5, 13526 }, /* Greek_EPSILON */
+ { 0x000007c6, 14401 }, /* Greek_ZETA */
+ { 0x000007c7, 13594 }, /* Greek_ETA */
+ { 0x000007c8, 14219 }, /* Greek_THETA */
+ { 0x000007c9, 13707 }, /* Greek_IOTA */
+ { 0x000007ca, 13846 }, /* Greek_KAPPA */
+ { 0x000007cb, 13896 }, /* Greek_LAMDA */
+ { 0x000007cc, 13920 }, /* Greek_MU */
+ { 0x000007cd, 13938 }, /* Greek_NU */
+ { 0x000007ce, 14383 }, /* Greek_XI */
+ { 0x000007cf, 14016 }, /* Greek_OMICRON */
+ { 0x000007d0, 14104 }, /* Greek_PI */
+ { 0x000007d1, 14142 }, /* Greek_RHO */
+ { 0x000007d2, 14162 }, /* Greek_SIGMA */
+ { 0x000007d4, 14199 }, /* Greek_TAU */
+ { 0x000007d5, 14243 }, /* Greek_UPSILON */
+ { 0x000007d6, 14084 }, /* Greek_PHI */
+ { 0x000007d7, 13482 }, /* Greek_CHI */
+ { 0x000007d8, 14122 }, /* Greek_PSI */
+ { 0x000007d9, 13956 }, /* Greek_OMEGA */
+ { 0x000007e1, 13412 }, /* Greek_alpha */
+ { 0x000007e2, 13471 }, /* Greek_beta */
+ { 0x000007e3, 13680 }, /* Greek_gamma */
+ { 0x000007e4, 13514 }, /* Greek_delta */
+ { 0x000007e5, 13540 }, /* Greek_epsilon */
+ { 0x000007e6, 14412 }, /* Greek_zeta */
+ { 0x000007e7, 13604 }, /* Greek_eta */
+ { 0x000007e8, 14231 }, /* Greek_theta */
+ { 0x000007e9, 13718 }, /* Greek_iota */
+ { 0x000007ea, 13858 }, /* Greek_kappa */
+ { 0x000007eb, 13908 }, /* Greek_lamda */
+ { 0x000007ec, 13929 }, /* Greek_mu */
+ { 0x000007ed, 13947 }, /* Greek_nu */
+ { 0x000007ee, 14392 }, /* Greek_xi */
+ { 0x000007ef, 14030 }, /* Greek_omicron */
+ { 0x000007f0, 14113 }, /* Greek_pi */
+ { 0x000007f1, 14152 }, /* Greek_rho */
+ { 0x000007f2, 14174 }, /* Greek_sigma */
+ { 0x000007f3, 13646 }, /* Greek_finalsmallsigma */
+ { 0x000007f4, 14209 }, /* Greek_tau */
+ { 0x000007f5, 14257 }, /* Greek_upsilon */
+ { 0x000007f6, 14094 }, /* Greek_phi */
+ { 0x000007f7, 13492 }, /* Greek_chi */
+ { 0x000007f8, 14132 }, /* Greek_psi */
+ { 0x000007f9, 13968 }, /* Greek_omega */
+ { 0x000008a1, 19438 }, /* leftradical */
+ { 0x000008a2, 25703 }, /* topleftradical */
+ { 0x000008a3, 16749 }, /* horizconnector */
+ { 0x000008a4, 25677 }, /* topintegral */
{ 0x000008a5, 3422 }, /* botintegral */
- { 0x000008a6, 26505 }, /* vertconnector */
- { 0x000008a7, 25636 }, /* topleftsqbracket */
+ { 0x000008a6, 26587 }, /* vertconnector */
+ { 0x000008a7, 25718 }, /* topleftsqbracket */
{ 0x000008a8, 3448 }, /* botleftsqbracket */
- { 0x000008a9, 25685 }, /* toprightsqbracket */
+ { 0x000008a9, 25767 }, /* toprightsqbracket */
{ 0x000008aa, 3497 }, /* botrightsqbracket */
- { 0x000008ab, 25607 }, /* topleftparens */
+ { 0x000008ab, 25689 }, /* topleftparens */
{ 0x000008ac, 3434 }, /* botleftparens */
- { 0x000008ad, 25670 }, /* toprightparens */
+ { 0x000008ad, 25752 }, /* toprightparens */
{ 0x000008ae, 3482 }, /* botrightparens */
- { 0x000008af, 19306 }, /* leftmiddlecurlybrace */
- { 0x000008b0, 22440 }, /* rightmiddlecurlybrace */
- { 0x000008b1, 25653 }, /* topleftsummation */
+ { 0x000008af, 19388 }, /* leftmiddlecurlybrace */
+ { 0x000008b0, 22522 }, /* rightmiddlecurlybrace */
+ { 0x000008b1, 25735 }, /* topleftsummation */
{ 0x000008b2, 3465 }, /* botleftsummation */
- { 0x000008b3, 25726 }, /* topvertsummationconnector */
+ { 0x000008b3, 25808 }, /* topvertsummationconnector */
{ 0x000008b4, 3538 }, /* botvertsummationconnector */
- { 0x000008b5, 25703 }, /* toprightsummation */
+ { 0x000008b5, 25785 }, /* toprightsummation */
{ 0x000008b6, 3515 }, /* botrightsummation */
- { 0x000008b7, 22462 }, /* rightmiddlesummation */
- { 0x000008bc, 19417 }, /* lessthanequal */
- { 0x000008bd, 20125 }, /* notequal */
- { 0x000008be, 13280 }, /* greaterthanequal */
- { 0x000008bf, 17313 }, /* integral */
- { 0x000008c0, 25479 }, /* therefore */
- { 0x000008c1, 26487 }, /* variation */
- { 0x000008c2, 17275 }, /* infinity */
- { 0x000008c5, 19947 }, /* nabla */
+ { 0x000008b7, 22544 }, /* rightmiddlesummation */
+ { 0x000008bc, 19499 }, /* lessthanequal */
+ { 0x000008bd, 20207 }, /* notequal */
+ { 0x000008be, 13362 }, /* greaterthanequal */
+ { 0x000008bf, 17395 }, /* integral */
+ { 0x000008c0, 25561 }, /* therefore */
+ { 0x000008c1, 26569 }, /* variation */
+ { 0x000008c2, 17357 }, /* infinity */
+ { 0x000008c5, 20029 }, /* nabla */
{ 0x000008c8, 954 }, /* approximate */
- { 0x000008c9, 22999 }, /* similarequal */
- { 0x000008cd, 17196 }, /* ifonlyif */
- { 0x000008ce, 17247 }, /* implies */
- { 0x000008cf, 17155 }, /* identical */
- { 0x000008d6, 22286 }, /* radical */
- { 0x000008da, 17255 }, /* includedin */
- { 0x000008db, 17266 }, /* includes */
- { 0x000008dc, 17322 }, /* intersection */
- { 0x000008dd, 26362 }, /* union */
- { 0x000008de, 19457 }, /* logicaland */
- { 0x000008df, 19468 }, /* logicalor */
- { 0x000008ef, 21463 }, /* partialderivative */
- { 0x000008f6, 12656 }, /* function */
- { 0x000008fb, 19266 }, /* leftarrow */
- { 0x000008fc, 26387 }, /* uparrow */
- { 0x000008fd, 22397 }, /* rightarrow */
- { 0x000008fe, 11332 }, /* downarrow */
+ { 0x000008c9, 23081 }, /* similarequal */
+ { 0x000008cd, 17278 }, /* ifonlyif */
+ { 0x000008ce, 17329 }, /* implies */
+ { 0x000008cf, 17237 }, /* identical */
+ { 0x000008d6, 22368 }, /* radical */
+ { 0x000008da, 17337 }, /* includedin */
+ { 0x000008db, 17348 }, /* includes */
+ { 0x000008dc, 17404 }, /* intersection */
+ { 0x000008dd, 26444 }, /* union */
+ { 0x000008de, 19539 }, /* logicaland */
+ { 0x000008df, 19550 }, /* logicalor */
+ { 0x000008ef, 21545 }, /* partialderivative */
+ { 0x000008f6, 12738 }, /* function */
+ { 0x000008fb, 19348 }, /* leftarrow */
+ { 0x000008fc, 26469 }, /* uparrow */
+ { 0x000008fd, 22479 }, /* rightarrow */
+ { 0x000008fe, 11414 }, /* downarrow */
{ 0x000009df, 3410 }, /* blank */
- { 0x000009e0, 23790 }, /* soliddiamond */
+ { 0x000009e0, 23872 }, /* soliddiamond */
{ 0x000009e1, 8603 }, /* checkerboard */
- { 0x000009e2, 17043 }, /* ht */
- { 0x000009e3, 12413 }, /* ff */
- { 0x000009e4, 8727 }, /* cr */
- { 0x000009e5, 19431 }, /* lf */
- { 0x000009e8, 20075 }, /* nl */
- { 0x000009e9, 26542 }, /* vt */
- { 0x000009ea, 19502 }, /* lowrightcorner */
- { 0x000009eb, 26416 }, /* uprightcorner */
- { 0x000009ec, 26403 }, /* upleftcorner */
- { 0x000009ed, 19488 }, /* lowleftcorner */
- { 0x000009ee, 8730 }, /* crossinglines */
- { 0x000009ef, 16682 }, /* horizlinescan1 */
- { 0x000009f0, 16697 }, /* horizlinescan3 */
- { 0x000009f1, 16712 }, /* horizlinescan5 */
- { 0x000009f2, 16727 }, /* horizlinescan7 */
- { 0x000009f3, 16742 }, /* horizlinescan9 */
- { 0x000009f4, 19397 }, /* leftt */
- { 0x000009f5, 22545 }, /* rightt */
+ { 0x000009e2, 17125 }, /* ht */
+ { 0x000009e3, 12495 }, /* ff */
+ { 0x000009e4, 8809 }, /* cr */
+ { 0x000009e5, 19513 }, /* lf */
+ { 0x000009e8, 20157 }, /* nl */
+ { 0x000009e9, 26624 }, /* vt */
+ { 0x000009ea, 19584 }, /* lowrightcorner */
+ { 0x000009eb, 26498 }, /* uprightcorner */
+ { 0x000009ec, 26485 }, /* upleftcorner */
+ { 0x000009ed, 19570 }, /* lowleftcorner */
+ { 0x000009ee, 8812 }, /* crossinglines */
+ { 0x000009ef, 16764 }, /* horizlinescan1 */
+ { 0x000009f0, 16779 }, /* horizlinescan3 */
+ { 0x000009f1, 16794 }, /* horizlinescan5 */
+ { 0x000009f2, 16809 }, /* horizlinescan7 */
+ { 0x000009f3, 16824 }, /* horizlinescan9 */
+ { 0x000009f4, 19479 }, /* leftt */
+ { 0x000009f5, 22627 }, /* rightt */
{ 0x000009f6, 3533 }, /* bott */
- { 0x000009f7, 25721 }, /* topt */
- { 0x000009f8, 26497 }, /* vertbar */
- { 0x00000aa1, 11928 }, /* emspace */
- { 0x00000aa2, 12027 }, /* enspace */
- { 0x00000aa3, 11821 }, /* em3space */
- { 0x00000aa4, 11830 }, /* em4space */
- { 0x00000aa5, 11221 }, /* digitspace */
- { 0x00000aa6, 22145 }, /* punctspace */
- { 0x00000aa7, 25489 }, /* thinspace */
- { 0x00000aa8, 14382 }, /* hairspace */
- { 0x00000aa9, 11855 }, /* emdash */
- { 0x00000aaa, 11940 }, /* endash */
- { 0x00000aac, 22987 }, /* signifblank */
- { 0x00000aae, 11812 }, /* ellipsis */
- { 0x00000aaf, 11267 }, /* doubbaselinedot */
- { 0x00000ab0, 20767 }, /* onethird */
- { 0x00000ab1, 25837 }, /* twothirds */
- { 0x00000ab2, 20705 }, /* onefifth */
- { 0x00000ab3, 25802 }, /* twofifths */
- { 0x00000ab4, 25530 }, /* threefifths */
- { 0x00000ab5, 12607 }, /* fourfifths */
- { 0x00000ab6, 20733 }, /* onesixth */
- { 0x00000ab7, 12569 }, /* fivesixths */
+ { 0x000009f7, 25803 }, /* topt */
+ { 0x000009f8, 26579 }, /* vertbar */
+ { 0x00000aa1, 12010 }, /* emspace */
+ { 0x00000aa2, 12109 }, /* enspace */
+ { 0x00000aa3, 11903 }, /* em3space */
+ { 0x00000aa4, 11912 }, /* em4space */
+ { 0x00000aa5, 11303 }, /* digitspace */
+ { 0x00000aa6, 22227 }, /* punctspace */
+ { 0x00000aa7, 25571 }, /* thinspace */
+ { 0x00000aa8, 14464 }, /* hairspace */
+ { 0x00000aa9, 11937 }, /* emdash */
+ { 0x00000aaa, 12022 }, /* endash */
+ { 0x00000aac, 23069 }, /* signifblank */
+ { 0x00000aae, 11894 }, /* ellipsis */
+ { 0x00000aaf, 11349 }, /* doubbaselinedot */
+ { 0x00000ab0, 20849 }, /* onethird */
+ { 0x00000ab1, 25919 }, /* twothirds */
+ { 0x00000ab2, 20787 }, /* onefifth */
+ { 0x00000ab3, 25884 }, /* twofifths */
+ { 0x00000ab4, 25612 }, /* threefifths */
+ { 0x00000ab5, 12689 }, /* fourfifths */
+ { 0x00000ab6, 20815 }, /* onesixth */
+ { 0x00000ab7, 12651 }, /* fivesixths */
{ 0x00000ab8, 8506 }, /* careof */
- { 0x00000abb, 12427 }, /* figdash */
- { 0x00000abc, 19249 }, /* leftanglebracket */
- { 0x00000abd, 11140 }, /* decimalpoint */
- { 0x00000abe, 22379 }, /* rightanglebracket */
- { 0x00000abf, 19681 }, /* marker */
- { 0x00000ac3, 20695 }, /* oneeighth */
- { 0x00000ac4, 25517 }, /* threeeighths */
- { 0x00000ac5, 12557 }, /* fiveeighths */
- { 0x00000ac6, 22904 }, /* seveneighths */
- { 0x00000ac9, 25760 }, /* trademark */
- { 0x00000aca, 22973 }, /* signaturemark */
- { 0x00000acb, 25770 }, /* trademarkincircle */
- { 0x00000acc, 19327 }, /* leftopentriangle */
- { 0x00000acd, 22483 }, /* rightopentriangle */
- { 0x00000ace, 11890 }, /* emopencircle */
- { 0x00000acf, 11903 }, /* emopenrectangle */
- { 0x00000ad0, 19377 }, /* leftsinglequotemark */
- { 0x00000ad1, 22524 }, /* rightsinglequotemark */
- { 0x00000ad2, 19286 }, /* leftdoublequotemark */
- { 0x00000ad3, 22419 }, /* rightdoublequotemark */
- { 0x00000ad4, 22067 }, /* prescription */
- { 0x00000ad5, 21517 }, /* permille */
- { 0x00000ad6, 19739 }, /* minutes */
- { 0x00000ad7, 22711 }, /* seconds */
- { 0x00000ad9, 19181 }, /* latincross */
- { 0x00000ada, 16626 }, /* hexagram */
- { 0x00000adb, 12455 }, /* filledrectbullet */
- { 0x00000adc, 12435 }, /* filledlefttribullet */
- { 0x00000add, 12472 }, /* filledrighttribullet */
- { 0x00000ade, 11862 }, /* emfilledcircle */
- { 0x00000adf, 11877 }, /* emfilledrect */
- { 0x00000ae0, 11991 }, /* enopencircbullet */
- { 0x00000ae1, 12008 }, /* enopensquarebullet */
- { 0x00000ae2, 20794 }, /* openrectbullet */
- { 0x00000ae3, 20836 }, /* opentribulletup */
- { 0x00000ae4, 20818 }, /* opentribulletdown */
- { 0x00000ae5, 20809 }, /* openstar */
- { 0x00000ae6, 11947 }, /* enfilledcircbullet */
- { 0x00000ae7, 11966 }, /* enfilledsqbullet */
- { 0x00000ae8, 12513 }, /* filledtribulletup */
- { 0x00000ae9, 12493 }, /* filledtribulletdown */
- { 0x00000aea, 19344 }, /* leftpointer */
- { 0x00000aeb, 22501 }, /* rightpointer */
+ { 0x00000abb, 12509 }, /* figdash */
+ { 0x00000abc, 19331 }, /* leftanglebracket */
+ { 0x00000abd, 11222 }, /* decimalpoint */
+ { 0x00000abe, 22461 }, /* rightanglebracket */
+ { 0x00000abf, 19763 }, /* marker */
+ { 0x00000ac3, 20777 }, /* oneeighth */
+ { 0x00000ac4, 25599 }, /* threeeighths */
+ { 0x00000ac5, 12639 }, /* fiveeighths */
+ { 0x00000ac6, 22986 }, /* seveneighths */
+ { 0x00000ac9, 25842 }, /* trademark */
+ { 0x00000aca, 23055 }, /* signaturemark */
+ { 0x00000acb, 25852 }, /* trademarkincircle */
+ { 0x00000acc, 19409 }, /* leftopentriangle */
+ { 0x00000acd, 22565 }, /* rightopentriangle */
+ { 0x00000ace, 11972 }, /* emopencircle */
+ { 0x00000acf, 11985 }, /* emopenrectangle */
+ { 0x00000ad0, 19459 }, /* leftsinglequotemark */
+ { 0x00000ad1, 22606 }, /* rightsinglequotemark */
+ { 0x00000ad2, 19368 }, /* leftdoublequotemark */
+ { 0x00000ad3, 22501 }, /* rightdoublequotemark */
+ { 0x00000ad4, 22149 }, /* prescription */
+ { 0x00000ad5, 21599 }, /* permille */
+ { 0x00000ad6, 19821 }, /* minutes */
+ { 0x00000ad7, 22793 }, /* seconds */
+ { 0x00000ad9, 19263 }, /* latincross */
+ { 0x00000ada, 16708 }, /* hexagram */
+ { 0x00000adb, 12537 }, /* filledrectbullet */
+ { 0x00000adc, 12517 }, /* filledlefttribullet */
+ { 0x00000add, 12554 }, /* filledrighttribullet */
+ { 0x00000ade, 11944 }, /* emfilledcircle */
+ { 0x00000adf, 11959 }, /* emfilledrect */
+ { 0x00000ae0, 12073 }, /* enopencircbullet */
+ { 0x00000ae1, 12090 }, /* enopensquarebullet */
+ { 0x00000ae2, 20876 }, /* openrectbullet */
+ { 0x00000ae3, 20918 }, /* opentribulletup */
+ { 0x00000ae4, 20900 }, /* opentribulletdown */
+ { 0x00000ae5, 20891 }, /* openstar */
+ { 0x00000ae6, 12029 }, /* enfilledcircbullet */
+ { 0x00000ae7, 12048 }, /* enfilledsqbullet */
+ { 0x00000ae8, 12595 }, /* filledtribulletup */
+ { 0x00000ae9, 12575 }, /* filledtribulletdown */
+ { 0x00000aea, 19426 }, /* leftpointer */
+ { 0x00000aeb, 22583 }, /* rightpointer */
{ 0x00000aec, 8649 }, /* club */
- { 0x00000aed, 11213 }, /* diamond */
- { 0x00000aee, 16080 }, /* heart */
- { 0x00000af0, 19668 }, /* maltesecross */
- { 0x00000af1, 10358 }, /* dagger */
- { 0x00000af2, 11295 }, /* doubledagger */
+ { 0x00000aed, 11295 }, /* diamond */
+ { 0x00000aee, 16162 }, /* heart */
+ { 0x00000af0, 19750 }, /* maltesecross */
+ { 0x00000af1, 10440 }, /* dagger */
+ { 0x00000af2, 11377 }, /* doubledagger */
{ 0x00000af3, 8616 }, /* checkmark */
{ 0x00000af4, 3380 }, /* ballotcross */
- { 0x00000af5, 19860 }, /* musicalsharp */
- { 0x00000af6, 19848 }, /* musicalflat */
- { 0x00000af7, 19657 }, /* malesymbol */
- { 0x00000af8, 12400 }, /* femalesymbol */
- { 0x00000af9, 24354 }, /* telephone */
- { 0x00000afa, 24364 }, /* telephonerecorder */
- { 0x00000afb, 21537 }, /* phonographcopyright */
+ { 0x00000af5, 19942 }, /* musicalsharp */
+ { 0x00000af6, 19930 }, /* musicalflat */
+ { 0x00000af7, 19739 }, /* malesymbol */
+ { 0x00000af8, 12482 }, /* femalesymbol */
+ { 0x00000af9, 24436 }, /* telephone */
+ { 0x00000afa, 24446 }, /* telephonerecorder */
+ { 0x00000afb, 21619 }, /* phonographcopyright */
{ 0x00000afc, 8513 }, /* caret */
- { 0x00000afd, 23028 }, /* singlelowquotemark */
- { 0x00000afe, 11308 }, /* doublelowquotemark */
- { 0x00000aff, 8775 }, /* cursor */
- { 0x00000ba3, 19276 }, /* leftcaret */
- { 0x00000ba6, 22408 }, /* rightcaret */
- { 0x00000ba8, 11342 }, /* downcaret */
- { 0x00000ba9, 26395 }, /* upcaret */
- { 0x00000bc0, 21324 }, /* overbar */
- { 0x00000bc2, 11371 }, /* downtack */
- { 0x00000bc3, 26430 }, /* upshoe */
- { 0x00000bc4, 11361 }, /* downstile */
- { 0x00000bc6, 26337 }, /* underbar */
- { 0x00000bca, 18142 }, /* jot */
- { 0x00000bcc, 22160 }, /* quad */
- { 0x00000bce, 26445 }, /* uptack */
+ { 0x00000afd, 23110 }, /* singlelowquotemark */
+ { 0x00000afe, 11390 }, /* doublelowquotemark */
+ { 0x00000aff, 8857 }, /* cursor */
+ { 0x00000ba3, 19358 }, /* leftcaret */
+ { 0x00000ba6, 22490 }, /* rightcaret */
+ { 0x00000ba8, 11424 }, /* downcaret */
+ { 0x00000ba9, 26477 }, /* upcaret */
+ { 0x00000bc0, 21406 }, /* overbar */
+ { 0x00000bc2, 11453 }, /* downtack */
+ { 0x00000bc3, 26512 }, /* upshoe */
+ { 0x00000bc4, 11443 }, /* downstile */
+ { 0x00000bc6, 26419 }, /* underbar */
+ { 0x00000bca, 18224 }, /* jot */
+ { 0x00000bcc, 22242 }, /* quad */
+ { 0x00000bce, 26527 }, /* uptack */
{ 0x00000bcf, 8626 }, /* circle */
- { 0x00000bd3, 26437 }, /* upstile */
- { 0x00000bd6, 11352 }, /* downshoe */
- { 0x00000bd8, 22514 }, /* rightshoe */
- { 0x00000bda, 19368 }, /* leftshoe */
- { 0x00000bdc, 19403 }, /* lefttack */
- { 0x00000bfc, 22552 }, /* righttack */
- { 0x00000cdf, 16173 }, /* hebrew_doublelowline */
- { 0x00000ce0, 16086 }, /* hebrew_aleph */
- { 0x00000ce1, 16111 }, /* hebrew_bet */
- { 0x00000ce2, 16292 }, /* hebrew_gimel */
- { 0x00000ce3, 16146 }, /* hebrew_dalet */
- { 0x00000ce4, 16319 }, /* hebrew_he */
- { 0x00000ce5, 16531 }, /* hebrew_waw */
- { 0x00000ce6, 16577 }, /* hebrew_zain */
- { 0x00000ce7, 16134 }, /* hebrew_chet */
- { 0x00000ce8, 16508 }, /* hebrew_tet */
- { 0x00000ce9, 16542 }, /* hebrew_yod */
- { 0x00000cea, 16194 }, /* hebrew_finalkaph */
- { 0x00000ceb, 16340 }, /* hebrew_kaph */
- { 0x00000cec, 16363 }, /* hebrew_lamed */
- { 0x00000ced, 16211 }, /* hebrew_finalmem */
- { 0x00000cee, 16376 }, /* hebrew_mem */
- { 0x00000cef, 16227 }, /* hebrew_finalnun */
- { 0x00000cf0, 16387 }, /* hebrew_nun */
- { 0x00000cf1, 16432 }, /* hebrew_samech */
- { 0x00000cf2, 16099 }, /* hebrew_ayin */
- { 0x00000cf3, 16243 }, /* hebrew_finalpe */
- { 0x00000cf4, 16398 }, /* hebrew_pe */
- { 0x00000cf5, 16258 }, /* hebrew_finalzade */
- { 0x00000cf6, 16553 }, /* hebrew_zade */
- { 0x00000cf7, 16408 }, /* hebrew_qoph */
- { 0x00000cf8, 16420 }, /* hebrew_resh */
- { 0x00000cf9, 16460 }, /* hebrew_shin */
- { 0x00000cfa, 16497 }, /* hebrew_taw */
- { 0x00000da1, 24617 }, /* Thai_kokai */
- { 0x00000da2, 24547 }, /* Thai_khokhai */
- { 0x00000da3, 24573 }, /* Thai_khokhuat */
- { 0x00000da4, 24587 }, /* Thai_khokhwai */
- { 0x00000da5, 24560 }, /* Thai_khokhon */
- { 0x00000da6, 24601 }, /* Thai_khorakhang */
- { 0x00000da7, 24930 }, /* Thai_ngongu */
- { 0x00000da8, 24423 }, /* Thai_chochan */
- { 0x00000da9, 24450 }, /* Thai_choching */
- { 0x00000daa, 24436 }, /* Thai_chochang */
- { 0x00000dab, 25291 }, /* Thai_soso */
- { 0x00000dac, 24464 }, /* Thai_chochoe */
- { 0x00000dad, 25467 }, /* Thai_yoying */
- { 0x00000dae, 24477 }, /* Thai_dochada */
- { 0x00000daf, 25420 }, /* Thai_topatak */
- { 0x00000db0, 25379 }, /* Thai_thothan */
- { 0x00000db1, 25329 }, /* Thai_thonangmontho */
- { 0x00000db2, 25348 }, /* Thai_thophuthao */
- { 0x00000db3, 24956 }, /* Thai_nonen */
- { 0x00000db4, 24490 }, /* Thai_dodek */
- { 0x00000db5, 25433 }, /* Thai_totao */
- { 0x00000db6, 25406 }, /* Thai_thothung */
- { 0x00000db7, 25364 }, /* Thai_thothahan */
- { 0x00000db8, 25392 }, /* Thai_thothong */
- { 0x00000db9, 24967 }, /* Thai_nonu */
- { 0x00000dba, 24409 }, /* Thai_bobaimai */
- { 0x00000dbb, 25058 }, /* Thai_popla */
- { 0x00000dbc, 25028 }, /* Thai_phophung */
- { 0x00000dbd, 24501 }, /* Thai_fofa */
- { 0x00000dbe, 25015 }, /* Thai_phophan */
- { 0x00000dbf, 24511 }, /* Thai_fofan */
- { 0x00000dc0, 25042 }, /* Thai_phosamphao */
- { 0x00000dc1, 24920 }, /* Thai_moma */
- { 0x00000dc2, 25456 }, /* Thai_yoyak */
- { 0x00000dc3, 25069 }, /* Thai_rorua */
- { 0x00000dc4, 25080 }, /* Thai_ru */
- { 0x00000dc5, 24780 }, /* Thai_loling */
- { 0x00000dc6, 24792 }, /* Thai_lu */
- { 0x00000dc7, 25444 }, /* Thai_wowaen */
- { 0x00000dc8, 25279 }, /* Thai_sosala */
- { 0x00000dc9, 25267 }, /* Thai_sorusi */
- { 0x00000dca, 25301 }, /* Thai_sosua */
- { 0x00000dcb, 24522 }, /* Thai_hohip */
- { 0x00000dcc, 24767 }, /* Thai_lochula */
- { 0x00000dcd, 24977 }, /* Thai_oang */
- { 0x00000dce, 24533 }, /* Thai_honokhuk */
- { 0x00000dcf, 24987 }, /* Thai_paiyannoi */
- { 0x00000dd0, 25088 }, /* Thai_saraa */
- { 0x00000dd1, 24828 }, /* Thai_maihanakat */
- { 0x00000dd2, 25099 }, /* Thai_saraaa */
- { 0x00000dd3, 25162 }, /* Thai_saraam */
- { 0x00000dd4, 25185 }, /* Thai_sarai */
- { 0x00000dd5, 25196 }, /* Thai_saraii */
- { 0x00000dd6, 25230 }, /* Thai_saraue */
- { 0x00000dd7, 25242 }, /* Thai_sarauee */
- { 0x00000dd8, 25219 }, /* Thai_sarau */
- { 0x00000dd9, 25255 }, /* Thai_sarauu */
- { 0x00000dda, 25002 }, /* Thai_phinthu */
- { 0x00000dde, 24844 }, /* Thai_maihanakat_maitho */
- { 0x00000ddf, 24399 }, /* Thai_baht */
- { 0x00000de0, 25174 }, /* Thai_sarae */
- { 0x00000de1, 25111 }, /* Thai_saraae */
- { 0x00000de2, 25208 }, /* Thai_sarao */
- { 0x00000de3, 25143 }, /* Thai_saraaimaimuan */
- { 0x00000de4, 25123 }, /* Thai_saraaimaimalai */
- { 0x00000de5, 24628 }, /* Thai_lakkhangyao */
- { 0x00000de6, 24906 }, /* Thai_maiyamok */
- { 0x00000de7, 24867 }, /* Thai_maitaikhu */
- { 0x00000de8, 24817 }, /* Thai_maiek */
- { 0x00000de9, 24882 }, /* Thai_maitho */
- { 0x00000dea, 24894 }, /* Thai_maitri */
- { 0x00000deb, 24800 }, /* Thai_maichattawa */
- { 0x00000dec, 25312 }, /* Thai_thanthakhat */
- { 0x00000ded, 24942 }, /* Thai_nikhahit */
- { 0x00000df0, 24755 }, /* Thai_leksun */
- { 0x00000df1, 24693 }, /* Thai_leknung */
- { 0x00000df2, 24742 }, /* Thai_leksong */
- { 0x00000df3, 24719 }, /* Thai_leksam */
- { 0x00000df4, 24731 }, /* Thai_leksi */
- { 0x00000df5, 24658 }, /* Thai_lekha */
- { 0x00000df6, 24669 }, /* Thai_lekhok */
- { 0x00000df7, 24645 }, /* Thai_lekchet */
- { 0x00000df8, 24706 }, /* Thai_lekpaet */
- { 0x00000df9, 24681 }, /* Thai_lekkao */
- { 0x00000ea1, 15181 }, /* Hangul_Kiyeog */
- { 0x00000ea2, 15726 }, /* Hangul_SsangKiyeog */
- { 0x00000ea3, 15195 }, /* Hangul_KiyeogSios */
- { 0x00000ea4, 15276 }, /* Hangul_Nieun */
- { 0x00000ea5, 15307 }, /* Hangul_NieunJieuj */
- { 0x00000ea6, 15289 }, /* Hangul_NieunHieuh */
- { 0x00000ea7, 14488 }, /* Hangul_Dikeud */
- { 0x00000ea8, 15689 }, /* Hangul_SsangDikeud */
- { 0x00000ea9, 15461 }, /* Hangul_Rieul */
- { 0x00000eaa, 15492 }, /* Hangul_RieulKiyeog */
- { 0x00000eab, 15511 }, /* Hangul_RieulMieum */
- { 0x00000eac, 15548 }, /* Hangul_RieulPieub */
- { 0x00000ead, 15566 }, /* Hangul_RieulSios */
- { 0x00000eae, 15583 }, /* Hangul_RieulTieut */
- { 0x00000eaf, 15529 }, /* Hangul_RieulPhieuf */
- { 0x00000eb0, 15474 }, /* Hangul_RieulHieuh */
- { 0x00000eb1, 15238 }, /* Hangul_Mieum */
- { 0x00000eb2, 15373 }, /* Hangul_Pieub */
- { 0x00000eb3, 15745 }, /* Hangul_SsangPieub */
- { 0x00000eb4, 15386 }, /* Hangul_PieubSios */
- { 0x00000eb5, 15662 }, /* Hangul_Sios */
- { 0x00000eb6, 15763 }, /* Hangul_SsangSios */
- { 0x00000eb7, 14577 }, /* Hangul_Ieung */
- { 0x00000eb8, 15154 }, /* Hangul_Jieuj */
- { 0x00000eb9, 15708 }, /* Hangul_SsangJieuj */
- { 0x00000eba, 14458 }, /* Hangul_Cieuc */
- { 0x00000ebb, 15167 }, /* Hangul_Khieuq */
- { 0x00000ebc, 15883 }, /* Hangul_Tieut */
- { 0x00000ebd, 15359 }, /* Hangul_Phieuf */
- { 0x00000ebe, 14555 }, /* Hangul_Hieuh */
- { 0x00000ebf, 14399 }, /* Hangul_A */
- { 0x00000ec0, 14408 }, /* Hangul_AE */
- { 0x00000ec1, 15957 }, /* Hangul_YA */
- { 0x00000ec2, 15967 }, /* Hangul_YAE */
- { 0x00000ec3, 14522 }, /* Hangul_EO */
- { 0x00000ec4, 14502 }, /* Hangul_E */
- { 0x00000ec5, 15988 }, /* Hangul_YEO */
- { 0x00000ec6, 15978 }, /* Hangul_YE */
- { 0x00000ec7, 15325 }, /* Hangul_O */
- { 0x00000ec8, 15905 }, /* Hangul_WA */
- { 0x00000ec9, 15915 }, /* Hangul_WAE */
- { 0x00000eca, 15334 }, /* Hangul_OE */
- { 0x00000ecb, 16028 }, /* Hangul_YO */
- { 0x00000ecc, 15896 }, /* Hangul_U */
- { 0x00000ecd, 15936 }, /* Hangul_WEO */
- { 0x00000ece, 15926 }, /* Hangul_WE */
- { 0x00000ecf, 15947 }, /* Hangul_WI */
- { 0x00000ed0, 16038 }, /* Hangul_YU */
- { 0x00000ed1, 14532 }, /* Hangul_EU */
- { 0x00000ed2, 16018 }, /* Hangul_YI */
- { 0x00000ed3, 14568 }, /* Hangul_I */
- { 0x00000ed4, 14682 }, /* Hangul_J_Kiyeog */
- { 0x00000ed5, 15052 }, /* Hangul_J_SsangKiyeog */
- { 0x00000ed6, 14698 }, /* Hangul_J_KiyeogSios */
- { 0x00000ed7, 14760 }, /* Hangul_J_Nieun */
- { 0x00000ed8, 14795 }, /* Hangul_J_NieunJieuj */
- { 0x00000ed9, 14775 }, /* Hangul_J_NieunHieuh */
- { 0x00000eda, 14605 }, /* Hangul_J_Dikeud */
- { 0x00000edb, 14882 }, /* Hangul_J_Rieul */
- { 0x00000edc, 14917 }, /* Hangul_J_RieulKiyeog */
- { 0x00000edd, 14938 }, /* Hangul_J_RieulMieum */
- { 0x00000ede, 14979 }, /* Hangul_J_RieulPieub */
- { 0x00000edf, 14999 }, /* Hangul_J_RieulSios */
- { 0x00000ee0, 15018 }, /* Hangul_J_RieulTieut */
- { 0x00000ee1, 14958 }, /* Hangul_J_RieulPhieuf */
- { 0x00000ee2, 14897 }, /* Hangul_J_RieulHieuh */
- { 0x00000ee3, 14745 }, /* Hangul_J_Mieum */
- { 0x00000ee4, 14848 }, /* Hangul_J_Pieub */
- { 0x00000ee5, 14863 }, /* Hangul_J_PieubSios */
- { 0x00000ee6, 15038 }, /* Hangul_J_Sios */
- { 0x00000ee7, 15073 }, /* Hangul_J_SsangSios */
- { 0x00000ee8, 14636 }, /* Hangul_J_Ieung */
- { 0x00000ee9, 14651 }, /* Hangul_J_Jieuj */
- { 0x00000eea, 14590 }, /* Hangul_J_Cieuc */
- { 0x00000eeb, 14666 }, /* Hangul_J_Khieuq */
- { 0x00000eec, 15092 }, /* Hangul_J_Tieut */
- { 0x00000eed, 14832 }, /* Hangul_J_Phieuf */
- { 0x00000eee, 14621 }, /* Hangul_J_Hieuh */
- { 0x00000eef, 15601 }, /* Hangul_RieulYeorinHieuh */
- { 0x00000ef0, 15793 }, /* Hangul_SunkyeongeumMieum */
- { 0x00000ef1, 15844 }, /* Hangul_SunkyeongeumPieub */
- { 0x00000ef2, 15344 }, /* Hangul_PanSios */
- { 0x00000ef3, 15213 }, /* Hangul_KkogjiDalrinIeung */
- { 0x00000ef4, 15818 }, /* Hangul_SunkyeongeumPhieuf */
- { 0x00000ef5, 15999 }, /* Hangul_YeorinHieuh */
- { 0x00000ef6, 14418 }, /* Hangul_AraeA */
- { 0x00000ef7, 14431 }, /* Hangul_AraeAE */
- { 0x00000ef8, 14815 }, /* Hangul_J_PanSios */
- { 0x00000ef9, 14718 }, /* Hangul_J_KkogjiDalrinIeung */
- { 0x00000efa, 15107 }, /* Hangul_J_YeorinHieuh */
- { 0x00000eff, 18797 }, /* Korean_Won */
- { 0x000013bc, 20514 }, /* OE */
- { 0x000013bd, 20517 }, /* oe */
- { 0x000013be, 29155 }, /* Ydiaeresis */
- { 0x000020ac, 12090 }, /* EuroSign */
+ { 0x00000bd3, 26519 }, /* upstile */
+ { 0x00000bd6, 11434 }, /* downshoe */
+ { 0x00000bd8, 22596 }, /* rightshoe */
+ { 0x00000bda, 19450 }, /* leftshoe */
+ { 0x00000bdc, 19485 }, /* lefttack */
+ { 0x00000bfc, 22634 }, /* righttack */
+ { 0x00000cdf, 16255 }, /* hebrew_doublelowline */
+ { 0x00000ce0, 16168 }, /* hebrew_aleph */
+ { 0x00000ce1, 16193 }, /* hebrew_bet */
+ { 0x00000ce2, 16374 }, /* hebrew_gimel */
+ { 0x00000ce3, 16228 }, /* hebrew_dalet */
+ { 0x00000ce4, 16401 }, /* hebrew_he */
+ { 0x00000ce5, 16613 }, /* hebrew_waw */
+ { 0x00000ce6, 16659 }, /* hebrew_zain */
+ { 0x00000ce7, 16216 }, /* hebrew_chet */
+ { 0x00000ce8, 16590 }, /* hebrew_tet */
+ { 0x00000ce9, 16624 }, /* hebrew_yod */
+ { 0x00000cea, 16276 }, /* hebrew_finalkaph */
+ { 0x00000ceb, 16422 }, /* hebrew_kaph */
+ { 0x00000cec, 16445 }, /* hebrew_lamed */
+ { 0x00000ced, 16293 }, /* hebrew_finalmem */
+ { 0x00000cee, 16458 }, /* hebrew_mem */
+ { 0x00000cef, 16309 }, /* hebrew_finalnun */
+ { 0x00000cf0, 16469 }, /* hebrew_nun */
+ { 0x00000cf1, 16514 }, /* hebrew_samech */
+ { 0x00000cf2, 16181 }, /* hebrew_ayin */
+ { 0x00000cf3, 16325 }, /* hebrew_finalpe */
+ { 0x00000cf4, 16480 }, /* hebrew_pe */
+ { 0x00000cf5, 16340 }, /* hebrew_finalzade */
+ { 0x00000cf6, 16635 }, /* hebrew_zade */
+ { 0x00000cf7, 16490 }, /* hebrew_qoph */
+ { 0x00000cf8, 16502 }, /* hebrew_resh */
+ { 0x00000cf9, 16542 }, /* hebrew_shin */
+ { 0x00000cfa, 16579 }, /* hebrew_taw */
+ { 0x00000da1, 24699 }, /* Thai_kokai */
+ { 0x00000da2, 24629 }, /* Thai_khokhai */
+ { 0x00000da3, 24655 }, /* Thai_khokhuat */
+ { 0x00000da4, 24669 }, /* Thai_khokhwai */
+ { 0x00000da5, 24642 }, /* Thai_khokhon */
+ { 0x00000da6, 24683 }, /* Thai_khorakhang */
+ { 0x00000da7, 25012 }, /* Thai_ngongu */
+ { 0x00000da8, 24505 }, /* Thai_chochan */
+ { 0x00000da9, 24532 }, /* Thai_choching */
+ { 0x00000daa, 24518 }, /* Thai_chochang */
+ { 0x00000dab, 25373 }, /* Thai_soso */
+ { 0x00000dac, 24546 }, /* Thai_chochoe */
+ { 0x00000dad, 25549 }, /* Thai_yoying */
+ { 0x00000dae, 24559 }, /* Thai_dochada */
+ { 0x00000daf, 25502 }, /* Thai_topatak */
+ { 0x00000db0, 25461 }, /* Thai_thothan */
+ { 0x00000db1, 25411 }, /* Thai_thonangmontho */
+ { 0x00000db2, 25430 }, /* Thai_thophuthao */
+ { 0x00000db3, 25038 }, /* Thai_nonen */
+ { 0x00000db4, 24572 }, /* Thai_dodek */
+ { 0x00000db5, 25515 }, /* Thai_totao */
+ { 0x00000db6, 25488 }, /* Thai_thothung */
+ { 0x00000db7, 25446 }, /* Thai_thothahan */
+ { 0x00000db8, 25474 }, /* Thai_thothong */
+ { 0x00000db9, 25049 }, /* Thai_nonu */
+ { 0x00000dba, 24491 }, /* Thai_bobaimai */
+ { 0x00000dbb, 25140 }, /* Thai_popla */
+ { 0x00000dbc, 25110 }, /* Thai_phophung */
+ { 0x00000dbd, 24583 }, /* Thai_fofa */
+ { 0x00000dbe, 25097 }, /* Thai_phophan */
+ { 0x00000dbf, 24593 }, /* Thai_fofan */
+ { 0x00000dc0, 25124 }, /* Thai_phosamphao */
+ { 0x00000dc1, 25002 }, /* Thai_moma */
+ { 0x00000dc2, 25538 }, /* Thai_yoyak */
+ { 0x00000dc3, 25151 }, /* Thai_rorua */
+ { 0x00000dc4, 25162 }, /* Thai_ru */
+ { 0x00000dc5, 24862 }, /* Thai_loling */
+ { 0x00000dc6, 24874 }, /* Thai_lu */
+ { 0x00000dc7, 25526 }, /* Thai_wowaen */
+ { 0x00000dc8, 25361 }, /* Thai_sosala */
+ { 0x00000dc9, 25349 }, /* Thai_sorusi */
+ { 0x00000dca, 25383 }, /* Thai_sosua */
+ { 0x00000dcb, 24604 }, /* Thai_hohip */
+ { 0x00000dcc, 24849 }, /* Thai_lochula */
+ { 0x00000dcd, 25059 }, /* Thai_oang */
+ { 0x00000dce, 24615 }, /* Thai_honokhuk */
+ { 0x00000dcf, 25069 }, /* Thai_paiyannoi */
+ { 0x00000dd0, 25170 }, /* Thai_saraa */
+ { 0x00000dd1, 24910 }, /* Thai_maihanakat */
+ { 0x00000dd2, 25181 }, /* Thai_saraaa */
+ { 0x00000dd3, 25244 }, /* Thai_saraam */
+ { 0x00000dd4, 25267 }, /* Thai_sarai */
+ { 0x00000dd5, 25278 }, /* Thai_saraii */
+ { 0x00000dd6, 25312 }, /* Thai_saraue */
+ { 0x00000dd7, 25324 }, /* Thai_sarauee */
+ { 0x00000dd8, 25301 }, /* Thai_sarau */
+ { 0x00000dd9, 25337 }, /* Thai_sarauu */
+ { 0x00000dda, 25084 }, /* Thai_phinthu */
+ { 0x00000dde, 24926 }, /* Thai_maihanakat_maitho */
+ { 0x00000ddf, 24481 }, /* Thai_baht */
+ { 0x00000de0, 25256 }, /* Thai_sarae */
+ { 0x00000de1, 25193 }, /* Thai_saraae */
+ { 0x00000de2, 25290 }, /* Thai_sarao */
+ { 0x00000de3, 25225 }, /* Thai_saraaimaimuan */
+ { 0x00000de4, 25205 }, /* Thai_saraaimaimalai */
+ { 0x00000de5, 24710 }, /* Thai_lakkhangyao */
+ { 0x00000de6, 24988 }, /* Thai_maiyamok */
+ { 0x00000de7, 24949 }, /* Thai_maitaikhu */
+ { 0x00000de8, 24899 }, /* Thai_maiek */
+ { 0x00000de9, 24964 }, /* Thai_maitho */
+ { 0x00000dea, 24976 }, /* Thai_maitri */
+ { 0x00000deb, 24882 }, /* Thai_maichattawa */
+ { 0x00000dec, 25394 }, /* Thai_thanthakhat */
+ { 0x00000ded, 25024 }, /* Thai_nikhahit */
+ { 0x00000df0, 24837 }, /* Thai_leksun */
+ { 0x00000df1, 24775 }, /* Thai_leknung */
+ { 0x00000df2, 24824 }, /* Thai_leksong */
+ { 0x00000df3, 24801 }, /* Thai_leksam */
+ { 0x00000df4, 24813 }, /* Thai_leksi */
+ { 0x00000df5, 24740 }, /* Thai_lekha */
+ { 0x00000df6, 24751 }, /* Thai_lekhok */
+ { 0x00000df7, 24727 }, /* Thai_lekchet */
+ { 0x00000df8, 24788 }, /* Thai_lekpaet */
+ { 0x00000df9, 24763 }, /* Thai_lekkao */
+ { 0x00000ea1, 15263 }, /* Hangul_Kiyeog */
+ { 0x00000ea2, 15808 }, /* Hangul_SsangKiyeog */
+ { 0x00000ea3, 15277 }, /* Hangul_KiyeogSios */
+ { 0x00000ea4, 15358 }, /* Hangul_Nieun */
+ { 0x00000ea5, 15389 }, /* Hangul_NieunJieuj */
+ { 0x00000ea6, 15371 }, /* Hangul_NieunHieuh */
+ { 0x00000ea7, 14570 }, /* Hangul_Dikeud */
+ { 0x00000ea8, 15771 }, /* Hangul_SsangDikeud */
+ { 0x00000ea9, 15543 }, /* Hangul_Rieul */
+ { 0x00000eaa, 15574 }, /* Hangul_RieulKiyeog */
+ { 0x00000eab, 15593 }, /* Hangul_RieulMieum */
+ { 0x00000eac, 15630 }, /* Hangul_RieulPieub */
+ { 0x00000ead, 15648 }, /* Hangul_RieulSios */
+ { 0x00000eae, 15665 }, /* Hangul_RieulTieut */
+ { 0x00000eaf, 15611 }, /* Hangul_RieulPhieuf */
+ { 0x00000eb0, 15556 }, /* Hangul_RieulHieuh */
+ { 0x00000eb1, 15320 }, /* Hangul_Mieum */
+ { 0x00000eb2, 15455 }, /* Hangul_Pieub */
+ { 0x00000eb3, 15827 }, /* Hangul_SsangPieub */
+ { 0x00000eb4, 15468 }, /* Hangul_PieubSios */
+ { 0x00000eb5, 15744 }, /* Hangul_Sios */
+ { 0x00000eb6, 15845 }, /* Hangul_SsangSios */
+ { 0x00000eb7, 14659 }, /* Hangul_Ieung */
+ { 0x00000eb8, 15236 }, /* Hangul_Jieuj */
+ { 0x00000eb9, 15790 }, /* Hangul_SsangJieuj */
+ { 0x00000eba, 14540 }, /* Hangul_Cieuc */
+ { 0x00000ebb, 15249 }, /* Hangul_Khieuq */
+ { 0x00000ebc, 15965 }, /* Hangul_Tieut */
+ { 0x00000ebd, 15441 }, /* Hangul_Phieuf */
+ { 0x00000ebe, 14637 }, /* Hangul_Hieuh */
+ { 0x00000ebf, 14481 }, /* Hangul_A */
+ { 0x00000ec0, 14490 }, /* Hangul_AE */
+ { 0x00000ec1, 16039 }, /* Hangul_YA */
+ { 0x00000ec2, 16049 }, /* Hangul_YAE */
+ { 0x00000ec3, 14604 }, /* Hangul_EO */
+ { 0x00000ec4, 14584 }, /* Hangul_E */
+ { 0x00000ec5, 16070 }, /* Hangul_YEO */
+ { 0x00000ec6, 16060 }, /* Hangul_YE */
+ { 0x00000ec7, 15407 }, /* Hangul_O */
+ { 0x00000ec8, 15987 }, /* Hangul_WA */
+ { 0x00000ec9, 15997 }, /* Hangul_WAE */
+ { 0x00000eca, 15416 }, /* Hangul_OE */
+ { 0x00000ecb, 16110 }, /* Hangul_YO */
+ { 0x00000ecc, 15978 }, /* Hangul_U */
+ { 0x00000ecd, 16018 }, /* Hangul_WEO */
+ { 0x00000ece, 16008 }, /* Hangul_WE */
+ { 0x00000ecf, 16029 }, /* Hangul_WI */
+ { 0x00000ed0, 16120 }, /* Hangul_YU */
+ { 0x00000ed1, 14614 }, /* Hangul_EU */
+ { 0x00000ed2, 16100 }, /* Hangul_YI */
+ { 0x00000ed3, 14650 }, /* Hangul_I */
+ { 0x00000ed4, 14764 }, /* Hangul_J_Kiyeog */
+ { 0x00000ed5, 15134 }, /* Hangul_J_SsangKiyeog */
+ { 0x00000ed6, 14780 }, /* Hangul_J_KiyeogSios */
+ { 0x00000ed7, 14842 }, /* Hangul_J_Nieun */
+ { 0x00000ed8, 14877 }, /* Hangul_J_NieunJieuj */
+ { 0x00000ed9, 14857 }, /* Hangul_J_NieunHieuh */
+ { 0x00000eda, 14687 }, /* Hangul_J_Dikeud */
+ { 0x00000edb, 14964 }, /* Hangul_J_Rieul */
+ { 0x00000edc, 14999 }, /* Hangul_J_RieulKiyeog */
+ { 0x00000edd, 15020 }, /* Hangul_J_RieulMieum */
+ { 0x00000ede, 15061 }, /* Hangul_J_RieulPieub */
+ { 0x00000edf, 15081 }, /* Hangul_J_RieulSios */
+ { 0x00000ee0, 15100 }, /* Hangul_J_RieulTieut */
+ { 0x00000ee1, 15040 }, /* Hangul_J_RieulPhieuf */
+ { 0x00000ee2, 14979 }, /* Hangul_J_RieulHieuh */
+ { 0x00000ee3, 14827 }, /* Hangul_J_Mieum */
+ { 0x00000ee4, 14930 }, /* Hangul_J_Pieub */
+ { 0x00000ee5, 14945 }, /* Hangul_J_PieubSios */
+ { 0x00000ee6, 15120 }, /* Hangul_J_Sios */
+ { 0x00000ee7, 15155 }, /* Hangul_J_SsangSios */
+ { 0x00000ee8, 14718 }, /* Hangul_J_Ieung */
+ { 0x00000ee9, 14733 }, /* Hangul_J_Jieuj */
+ { 0x00000eea, 14672 }, /* Hangul_J_Cieuc */
+ { 0x00000eeb, 14748 }, /* Hangul_J_Khieuq */
+ { 0x00000eec, 15174 }, /* Hangul_J_Tieut */
+ { 0x00000eed, 14914 }, /* Hangul_J_Phieuf */
+ { 0x00000eee, 14703 }, /* Hangul_J_Hieuh */
+ { 0x00000eef, 15683 }, /* Hangul_RieulYeorinHieuh */
+ { 0x00000ef0, 15875 }, /* Hangul_SunkyeongeumMieum */
+ { 0x00000ef1, 15926 }, /* Hangul_SunkyeongeumPieub */
+ { 0x00000ef2, 15426 }, /* Hangul_PanSios */
+ { 0x00000ef3, 15295 }, /* Hangul_KkogjiDalrinIeung */
+ { 0x00000ef4, 15900 }, /* Hangul_SunkyeongeumPhieuf */
+ { 0x00000ef5, 16081 }, /* Hangul_YeorinHieuh */
+ { 0x00000ef6, 14500 }, /* Hangul_AraeA */
+ { 0x00000ef7, 14513 }, /* Hangul_AraeAE */
+ { 0x00000ef8, 14897 }, /* Hangul_J_PanSios */
+ { 0x00000ef9, 14800 }, /* Hangul_J_KkogjiDalrinIeung */
+ { 0x00000efa, 15189 }, /* Hangul_J_YeorinHieuh */
+ { 0x00000eff, 18879 }, /* Korean_Won */
+ { 0x000013bc, 20596 }, /* OE */
+ { 0x000013bd, 20599 }, /* oe */
+ { 0x000013be, 31263 }, /* Ydiaeresis */
+ { 0x000020ac, 12172 }, /* EuroSign */
{ 0x0000fd01, 125 }, /* 3270_Duplicate */
{ 0x0000fd02, 195 }, /* 3270_FieldMark */
{ 0x0000fd03, 343 }, /* 3270_Right2 */
@@ -5839,293 +6440,293 @@ static const struct name_keysym keysym_to_name[] = {
{ 0x0000fd1c, 91 }, /* 3270_CursorSelect */
{ 0x0000fd1d, 293 }, /* 3270_PrintScreen */
{ 0x0000fd1e, 140 }, /* 3270_Enter */
- { 0x0000fe01, 17781 }, /* ISO_Lock */
- { 0x0000fe02, 17664 }, /* ISO_Level2_Latch */
- { 0x0000fe03, 17714 }, /* ISO_Level3_Shift */
- { 0x0000fe04, 17681 }, /* ISO_Level3_Latch */
- { 0x0000fe05, 17698 }, /* ISO_Level3_Lock */
- { 0x0000fe06, 17569 }, /* ISO_Group_Latch */
- { 0x0000fe07, 17585 }, /* ISO_Group_Lock */
- { 0x0000fe08, 17826 }, /* ISO_Next_Group */
- { 0x0000fe09, 17841 }, /* ISO_Next_Group_Lock */
- { 0x0000fe0a, 17950 }, /* ISO_Prev_Group */
- { 0x0000fe0b, 17965 }, /* ISO_Prev_Group_Lock */
- { 0x0000fe0c, 17532 }, /* ISO_First_Group */
- { 0x0000fe0d, 17548 }, /* ISO_First_Group_Lock */
- { 0x0000fe0e, 17616 }, /* ISO_Last_Group */
- { 0x0000fe0f, 17631 }, /* ISO_Last_Group_Lock */
- { 0x0000fe11, 17764 }, /* ISO_Level5_Shift */
- { 0x0000fe12, 17731 }, /* ISO_Level5_Latch */
- { 0x0000fe13, 17748 }, /* ISO_Level5_Lock */
- { 0x0000fe20, 17651 }, /* ISO_Left_Tab */
- { 0x0000fe21, 17809 }, /* ISO_Move_Line_Up */
- { 0x0000fe22, 17790 }, /* ISO_Move_Line_Down */
- { 0x0000fe23, 17883 }, /* ISO_Partial_Line_Up */
- { 0x0000fe24, 17861 }, /* ISO_Partial_Line_Down */
- { 0x0000fe25, 17903 }, /* ISO_Partial_Space_Left */
- { 0x0000fe26, 17926 }, /* ISO_Partial_Space_Right */
- { 0x0000fe27, 18059 }, /* ISO_Set_Margin_Left */
- { 0x0000fe28, 18079 }, /* ISO_Set_Margin_Right */
- { 0x0000fe29, 18010 }, /* ISO_Release_Margin_Left */
- { 0x0000fe2a, 18034 }, /* ISO_Release_Margin_Right */
- { 0x0000fe2b, 17985 }, /* ISO_Release_Both_Margins */
- { 0x0000fe2c, 17470 }, /* ISO_Fast_Cursor_Left */
- { 0x0000fe2d, 17491 }, /* ISO_Fast_Cursor_Right */
- { 0x0000fe2e, 17513 }, /* ISO_Fast_Cursor_Up */
- { 0x0000fe2f, 17449 }, /* ISO_Fast_Cursor_Down */
- { 0x0000fe30, 17372 }, /* ISO_Continuous_Underline */
- { 0x0000fe31, 17397 }, /* ISO_Discontinuous_Underline */
- { 0x0000fe32, 17425 }, /* ISO_Emphasize */
- { 0x0000fe33, 17354 }, /* ISO_Center_Object */
- { 0x0000fe34, 17439 }, /* ISO_Enter */
- { 0x0000fe50, 10858 }, /* dead_grave */
- { 0x0000fe51, 10531 }, /* dead_acute */
- { 0x0000fe52, 10754 }, /* dead_circumflex */
- { 0x0000fe53, 11097 }, /* dead_tilde */
- { 0x0000fe54, 10980 }, /* dead_macron */
- { 0x0000fe55, 10700 }, /* dead_breve */
- { 0x0000fe56, 10455 }, /* dead_abovedot */
- { 0x0000fe57, 10795 }, /* dead_diaeresis */
- { 0x0000fe58, 10493 }, /* dead_abovering */
- { 0x0000fe59, 10810 }, /* dead_doubleacute */
- { 0x0000fe5a, 10730 }, /* dead_caron */
- { 0x0000fe5b, 10741 }, /* dead_cedilla */
- { 0x0000fe5c, 11006 }, /* dead_ogonek */
- { 0x0000fe5d, 10933 }, /* dead_iota */
- { 0x0000fe5e, 11122 }, /* dead_voiced_sound */
- { 0x0000fe5f, 11046 }, /* dead_semivoiced_sound */
- { 0x0000fe60, 10615 }, /* dead_belowdot */
- { 0x0000fe61, 10880 }, /* dead_hook */
- { 0x0000fe62, 10890 }, /* dead_horn */
- { 0x0000fe63, 11085 }, /* dead_stroke */
- { 0x0000fe64, 10439 }, /* dead_abovecomma */
- { 0x0000fe65, 10469 }, /* dead_abovereversedcomma */
- { 0x0000fe66, 10827 }, /* dead_doublegrave */
- { 0x0000fe67, 10646 }, /* dead_belowring */
- { 0x0000fe68, 10629 }, /* dead_belowmacron */
- { 0x0000fe69, 10558 }, /* dead_belowcircumflex */
- { 0x0000fe6a, 10661 }, /* dead_belowtilde */
- { 0x0000fe6b, 10542 }, /* dead_belowbreve */
- { 0x0000fe6c, 10595 }, /* dead_belowdiaeresis */
- { 0x0000fe6d, 10914 }, /* dead_invertedbreve */
- { 0x0000fe6e, 10579 }, /* dead_belowcomma */
- { 0x0000fe6f, 10770 }, /* dead_currency */
+ { 0x0000fe01, 17863 }, /* ISO_Lock */
+ { 0x0000fe02, 17746 }, /* ISO_Level2_Latch */
+ { 0x0000fe03, 17796 }, /* ISO_Level3_Shift */
+ { 0x0000fe04, 17763 }, /* ISO_Level3_Latch */
+ { 0x0000fe05, 17780 }, /* ISO_Level3_Lock */
+ { 0x0000fe06, 17651 }, /* ISO_Group_Latch */
+ { 0x0000fe07, 17667 }, /* ISO_Group_Lock */
+ { 0x0000fe08, 17908 }, /* ISO_Next_Group */
+ { 0x0000fe09, 17923 }, /* ISO_Next_Group_Lock */
+ { 0x0000fe0a, 18032 }, /* ISO_Prev_Group */
+ { 0x0000fe0b, 18047 }, /* ISO_Prev_Group_Lock */
+ { 0x0000fe0c, 17614 }, /* ISO_First_Group */
+ { 0x0000fe0d, 17630 }, /* ISO_First_Group_Lock */
+ { 0x0000fe0e, 17698 }, /* ISO_Last_Group */
+ { 0x0000fe0f, 17713 }, /* ISO_Last_Group_Lock */
+ { 0x0000fe11, 17846 }, /* ISO_Level5_Shift */
+ { 0x0000fe12, 17813 }, /* ISO_Level5_Latch */
+ { 0x0000fe13, 17830 }, /* ISO_Level5_Lock */
+ { 0x0000fe20, 17733 }, /* ISO_Left_Tab */
+ { 0x0000fe21, 17891 }, /* ISO_Move_Line_Up */
+ { 0x0000fe22, 17872 }, /* ISO_Move_Line_Down */
+ { 0x0000fe23, 17965 }, /* ISO_Partial_Line_Up */
+ { 0x0000fe24, 17943 }, /* ISO_Partial_Line_Down */
+ { 0x0000fe25, 17985 }, /* ISO_Partial_Space_Left */
+ { 0x0000fe26, 18008 }, /* ISO_Partial_Space_Right */
+ { 0x0000fe27, 18141 }, /* ISO_Set_Margin_Left */
+ { 0x0000fe28, 18161 }, /* ISO_Set_Margin_Right */
+ { 0x0000fe29, 18092 }, /* ISO_Release_Margin_Left */
+ { 0x0000fe2a, 18116 }, /* ISO_Release_Margin_Right */
+ { 0x0000fe2b, 18067 }, /* ISO_Release_Both_Margins */
+ { 0x0000fe2c, 17552 }, /* ISO_Fast_Cursor_Left */
+ { 0x0000fe2d, 17573 }, /* ISO_Fast_Cursor_Right */
+ { 0x0000fe2e, 17595 }, /* ISO_Fast_Cursor_Up */
+ { 0x0000fe2f, 17531 }, /* ISO_Fast_Cursor_Down */
+ { 0x0000fe30, 17454 }, /* ISO_Continuous_Underline */
+ { 0x0000fe31, 17479 }, /* ISO_Discontinuous_Underline */
+ { 0x0000fe32, 17507 }, /* ISO_Emphasize */
+ { 0x0000fe33, 17436 }, /* ISO_Center_Object */
+ { 0x0000fe34, 17521 }, /* ISO_Enter */
+ { 0x0000fe50, 10940 }, /* dead_grave */
+ { 0x0000fe51, 10613 }, /* dead_acute */
+ { 0x0000fe52, 10836 }, /* dead_circumflex */
+ { 0x0000fe53, 11179 }, /* dead_tilde */
+ { 0x0000fe54, 11062 }, /* dead_macron */
+ { 0x0000fe55, 10782 }, /* dead_breve */
+ { 0x0000fe56, 10537 }, /* dead_abovedot */
+ { 0x0000fe57, 10877 }, /* dead_diaeresis */
+ { 0x0000fe58, 10575 }, /* dead_abovering */
+ { 0x0000fe59, 10892 }, /* dead_doubleacute */
+ { 0x0000fe5a, 10812 }, /* dead_caron */
+ { 0x0000fe5b, 10823 }, /* dead_cedilla */
+ { 0x0000fe5c, 11088 }, /* dead_ogonek */
+ { 0x0000fe5d, 11015 }, /* dead_iota */
+ { 0x0000fe5e, 11204 }, /* dead_voiced_sound */
+ { 0x0000fe5f, 11128 }, /* dead_semivoiced_sound */
+ { 0x0000fe60, 10697 }, /* dead_belowdot */
+ { 0x0000fe61, 10962 }, /* dead_hook */
+ { 0x0000fe62, 10972 }, /* dead_horn */
+ { 0x0000fe63, 11167 }, /* dead_stroke */
+ { 0x0000fe64, 10521 }, /* dead_abovecomma */
+ { 0x0000fe65, 10551 }, /* dead_abovereversedcomma */
+ { 0x0000fe66, 10909 }, /* dead_doublegrave */
+ { 0x0000fe67, 10728 }, /* dead_belowring */
+ { 0x0000fe68, 10711 }, /* dead_belowmacron */
+ { 0x0000fe69, 10640 }, /* dead_belowcircumflex */
+ { 0x0000fe6a, 10743 }, /* dead_belowtilde */
+ { 0x0000fe6b, 10624 }, /* dead_belowbreve */
+ { 0x0000fe6c, 10677 }, /* dead_belowdiaeresis */
+ { 0x0000fe6d, 10996 }, /* dead_invertedbreve */
+ { 0x0000fe6e, 10661 }, /* dead_belowcomma */
+ { 0x0000fe6f, 10852 }, /* dead_currency */
{ 0x0000fe70, 583 }, /* AccessX_Enable */
{ 0x0000fe71, 598 }, /* AccessX_Feedback_Enable */
- { 0x0000fe72, 22342 }, /* RepeatKeys_Enable */
- { 0x0000fe73, 23774 }, /* SlowKeys_Enable */
+ { 0x0000fe72, 22424 }, /* RepeatKeys_Enable */
+ { 0x0000fe73, 23856 }, /* SlowKeys_Enable */
{ 0x0000fe74, 3564 }, /* BounceKeys_Enable */
- { 0x0000fe75, 23836 }, /* StickyKeys_Enable */
- { 0x0000fe76, 19782 }, /* MouseKeys_Enable */
- { 0x0000fe77, 19759 }, /* MouseKeys_Accel_Enable */
- { 0x0000fe78, 21332 }, /* Overlay1_Enable */
- { 0x0000fe79, 21348 }, /* Overlay2_Enable */
+ { 0x0000fe75, 23918 }, /* StickyKeys_Enable */
+ { 0x0000fe76, 19864 }, /* MouseKeys_Enable */
+ { 0x0000fe77, 19841 }, /* MouseKeys_Accel_Enable */
+ { 0x0000fe78, 21414 }, /* Overlay1_Enable */
+ { 0x0000fe79, 21430 }, /* Overlay2_Enable */
{ 0x0000fe7a, 3309 }, /* AudibleBell_Enable */
- { 0x0000fe80, 10425 }, /* dead_a */
- { 0x0000fe81, 10432 }, /* dead_A */
- { 0x0000fe82, 10844 }, /* dead_e */
- { 0x0000fe83, 10851 }, /* dead_E */
- { 0x0000fe84, 10900 }, /* dead_i */
- { 0x0000fe85, 10907 }, /* dead_I */
- { 0x0000fe86, 10992 }, /* dead_o */
- { 0x0000fe87, 10999 }, /* dead_O */
- { 0x0000fe88, 11108 }, /* dead_u */
- { 0x0000fe89, 11115 }, /* dead_U */
- { 0x0000fe8a, 11068 }, /* dead_small_schwa */
- { 0x0000fe8b, 10711 }, /* dead_capital_schwa */
- { 0x0000fe8c, 10869 }, /* dead_greek */
- { 0x0000fe90, 10967 }, /* dead_lowline */
- { 0x0000fe91, 10508 }, /* dead_aboveverticalline */
- { 0x0000fe92, 10677 }, /* dead_belowverticalline */
- { 0x0000fe93, 10943 }, /* dead_longsolidusoverlay */
+ { 0x0000fe80, 10507 }, /* dead_a */
+ { 0x0000fe81, 10514 }, /* dead_A */
+ { 0x0000fe82, 10926 }, /* dead_e */
+ { 0x0000fe83, 10933 }, /* dead_E */
+ { 0x0000fe84, 10982 }, /* dead_i */
+ { 0x0000fe85, 10989 }, /* dead_I */
+ { 0x0000fe86, 11074 }, /* dead_o */
+ { 0x0000fe87, 11081 }, /* dead_O */
+ { 0x0000fe88, 11190 }, /* dead_u */
+ { 0x0000fe89, 11197 }, /* dead_U */
+ { 0x0000fe8a, 11150 }, /* dead_small_schwa */
+ { 0x0000fe8b, 10793 }, /* dead_capital_schwa */
+ { 0x0000fe8c, 10951 }, /* dead_greek */
+ { 0x0000fe90, 11049 }, /* dead_lowline */
+ { 0x0000fe91, 10590 }, /* dead_aboveverticalline */
+ { 0x0000fe92, 10759 }, /* dead_belowverticalline */
+ { 0x0000fe93, 11025 }, /* dead_longsolidusoverlay */
{ 0x0000fea0, 8594 }, /* ch */
{ 0x0000fea1, 8597 }, /* Ch */
{ 0x0000fea2, 8600 }, /* CH */
{ 0x0000fea3, 8443 }, /* c_h */
{ 0x0000fea4, 8447 }, /* C_h */
{ 0x0000fea5, 8451 }, /* C_H */
- { 0x0000fed0, 12536 }, /* First_Virtual_Screen */
- { 0x0000fed1, 22080 }, /* Prev_Virtual_Screen */
- { 0x0000fed2, 20028 }, /* Next_Virtual_Screen */
- { 0x0000fed4, 19161 }, /* Last_Virtual_Screen */
- { 0x0000fed5, 24382 }, /* Terminate_Server */
- { 0x0000fee0, 21998 }, /* Pointer_Left */
- { 0x0000fee1, 22011 }, /* Pointer_Right */
- { 0x0000fee2, 22025 }, /* Pointer_Up */
- { 0x0000fee3, 21843 }, /* Pointer_Down */
- { 0x0000fee4, 22036 }, /* Pointer_UpLeft */
- { 0x0000fee5, 22051 }, /* Pointer_UpRight */
- { 0x0000fee6, 21856 }, /* Pointer_DownLeft */
- { 0x0000fee7, 21873 }, /* Pointer_DownRight */
- { 0x0000fee8, 21671 }, /* Pointer_Button_Dflt */
- { 0x0000fee9, 21591 }, /* Pointer_Button1 */
- { 0x0000feea, 21607 }, /* Pointer_Button2 */
- { 0x0000feeb, 21623 }, /* Pointer_Button3 */
- { 0x0000feec, 21639 }, /* Pointer_Button4 */
- { 0x0000feed, 21655 }, /* Pointer_Button5 */
- { 0x0000feee, 21781 }, /* Pointer_DblClick_Dflt */
- { 0x0000feef, 21691 }, /* Pointer_DblClick1 */
- { 0x0000fef0, 21709 }, /* Pointer_DblClick2 */
- { 0x0000fef1, 21727 }, /* Pointer_DblClick3 */
- { 0x0000fef2, 21745 }, /* Pointer_DblClick4 */
- { 0x0000fef3, 21763 }, /* Pointer_DblClick5 */
- { 0x0000fef4, 21961 }, /* Pointer_Drag_Dflt */
- { 0x0000fef5, 21891 }, /* Pointer_Drag1 */
- { 0x0000fef6, 21905 }, /* Pointer_Drag2 */
- { 0x0000fef7, 21919 }, /* Pointer_Drag3 */
- { 0x0000fef8, 21933 }, /* Pointer_Drag4 */
- { 0x0000fef9, 21979 }, /* Pointer_EnableKeys */
- { 0x0000fefa, 21572 }, /* Pointer_Accelerate */
- { 0x0000fefb, 21803 }, /* Pointer_DfltBtnNext */
- { 0x0000fefc, 21823 }, /* Pointer_DfltBtnPrev */
- { 0x0000fefd, 21947 }, /* Pointer_Drag5 */
+ { 0x0000fed0, 12618 }, /* First_Virtual_Screen */
+ { 0x0000fed1, 22162 }, /* Prev_Virtual_Screen */
+ { 0x0000fed2, 20110 }, /* Next_Virtual_Screen */
+ { 0x0000fed4, 19243 }, /* Last_Virtual_Screen */
+ { 0x0000fed5, 24464 }, /* Terminate_Server */
+ { 0x0000fee0, 22080 }, /* Pointer_Left */
+ { 0x0000fee1, 22093 }, /* Pointer_Right */
+ { 0x0000fee2, 22107 }, /* Pointer_Up */
+ { 0x0000fee3, 21925 }, /* Pointer_Down */
+ { 0x0000fee4, 22118 }, /* Pointer_UpLeft */
+ { 0x0000fee5, 22133 }, /* Pointer_UpRight */
+ { 0x0000fee6, 21938 }, /* Pointer_DownLeft */
+ { 0x0000fee7, 21955 }, /* Pointer_DownRight */
+ { 0x0000fee8, 21753 }, /* Pointer_Button_Dflt */
+ { 0x0000fee9, 21673 }, /* Pointer_Button1 */
+ { 0x0000feea, 21689 }, /* Pointer_Button2 */
+ { 0x0000feeb, 21705 }, /* Pointer_Button3 */
+ { 0x0000feec, 21721 }, /* Pointer_Button4 */
+ { 0x0000feed, 21737 }, /* Pointer_Button5 */
+ { 0x0000feee, 21863 }, /* Pointer_DblClick_Dflt */
+ { 0x0000feef, 21773 }, /* Pointer_DblClick1 */
+ { 0x0000fef0, 21791 }, /* Pointer_DblClick2 */
+ { 0x0000fef1, 21809 }, /* Pointer_DblClick3 */
+ { 0x0000fef2, 21827 }, /* Pointer_DblClick4 */
+ { 0x0000fef3, 21845 }, /* Pointer_DblClick5 */
+ { 0x0000fef4, 22043 }, /* Pointer_Drag_Dflt */
+ { 0x0000fef5, 21973 }, /* Pointer_Drag1 */
+ { 0x0000fef6, 21987 }, /* Pointer_Drag2 */
+ { 0x0000fef7, 22001 }, /* Pointer_Drag3 */
+ { 0x0000fef8, 22015 }, /* Pointer_Drag4 */
+ { 0x0000fef9, 22061 }, /* Pointer_EnableKeys */
+ { 0x0000fefa, 21654 }, /* Pointer_Accelerate */
+ { 0x0000fefb, 21885 }, /* Pointer_DfltBtnNext */
+ { 0x0000fefc, 21905 }, /* Pointer_DfltBtnPrev */
+ { 0x0000fefd, 22029 }, /* Pointer_Drag5 */
{ 0x0000ff08, 3362 }, /* BackSpace */
- { 0x0000ff09, 24298 }, /* Tab */
- { 0x0000ff0a, 19434 }, /* Linefeed */
+ { 0x0000ff09, 24380 }, /* Tab */
+ { 0x0000ff0a, 19516 }, /* Linefeed */
{ 0x0000ff0b, 8633 }, /* Clear */
- { 0x0000ff0d, 22366 }, /* Return */
- { 0x0000ff13, 21481 }, /* Pause */
- { 0x0000ff14, 22699 }, /* Scroll_Lock */
- { 0x0000ff15, 24279 }, /* Sys_Req */
- { 0x0000ff1b, 12057 }, /* Escape */
- { 0x0000ff20, 19811 }, /* Multi_key */
- { 0x0000ff21, 18745 }, /* Kanji */
- { 0x0000ff22, 19802 }, /* Muhenkan */
- { 0x0000ff23, 16614 }, /* Henkan_Mode */
- { 0x0000ff24, 22562 }, /* Romaji */
- { 0x0000ff25, 16635 }, /* Hiragana */
- { 0x0000ff26, 18770 }, /* Katakana */
- { 0x0000ff27, 16644 }, /* Hiragana_Katakana */
- { 0x0000ff28, 29271 }, /* Zenkaku */
- { 0x0000ff29, 16048 }, /* Hankaku */
- { 0x0000ff2a, 29279 }, /* Zenkaku_Hankaku */
- { 0x0000ff2b, 25752 }, /* Touroku */
- { 0x0000ff2c, 19698 }, /* Massyo */
- { 0x0000ff2d, 18351 }, /* Kana_Lock */
- { 0x0000ff2e, 18562 }, /* Kana_Shift */
- { 0x0000ff2f, 11779 }, /* Eisu_Shift */
- { 0x0000ff30, 11790 }, /* Eisu_toggle */
- { 0x0000ff31, 14392 }, /* Hangul */
- { 0x0000ff32, 15780 }, /* Hangul_Start */
- { 0x0000ff33, 14511 }, /* Hangul_End */
- { 0x0000ff34, 14542 }, /* Hangul_Hanja */
- { 0x0000ff35, 15128 }, /* Hangul_Jamo */
- { 0x0000ff36, 15625 }, /* Hangul_Romaja */
+ { 0x0000ff0d, 22448 }, /* Return */
+ { 0x0000ff13, 21563 }, /* Pause */
+ { 0x0000ff14, 22781 }, /* Scroll_Lock */
+ { 0x0000ff15, 24361 }, /* Sys_Req */
+ { 0x0000ff1b, 12139 }, /* Escape */
+ { 0x0000ff20, 19893 }, /* Multi_key */
+ { 0x0000ff21, 18827 }, /* Kanji */
+ { 0x0000ff22, 19884 }, /* Muhenkan */
+ { 0x0000ff23, 16696 }, /* Henkan_Mode */
+ { 0x0000ff24, 22644 }, /* Romaji */
+ { 0x0000ff25, 16717 }, /* Hiragana */
+ { 0x0000ff26, 18852 }, /* Katakana */
+ { 0x0000ff27, 16726 }, /* Hiragana_Katakana */
+ { 0x0000ff28, 31379 }, /* Zenkaku */
+ { 0x0000ff29, 16130 }, /* Hankaku */
+ { 0x0000ff2a, 31387 }, /* Zenkaku_Hankaku */
+ { 0x0000ff2b, 25834 }, /* Touroku */
+ { 0x0000ff2c, 19780 }, /* Massyo */
+ { 0x0000ff2d, 18433 }, /* Kana_Lock */
+ { 0x0000ff2e, 18644 }, /* Kana_Shift */
+ { 0x0000ff2f, 11861 }, /* Eisu_Shift */
+ { 0x0000ff30, 11872 }, /* Eisu_toggle */
+ { 0x0000ff31, 14474 }, /* Hangul */
+ { 0x0000ff32, 15862 }, /* Hangul_Start */
+ { 0x0000ff33, 14593 }, /* Hangul_End */
+ { 0x0000ff34, 14624 }, /* Hangul_Hanja */
+ { 0x0000ff35, 15210 }, /* Hangul_Jamo */
+ { 0x0000ff36, 15707 }, /* Hangul_Romaja */
{ 0x0000ff37, 8654 }, /* Codeinput */
- { 0x0000ff38, 15140 }, /* Hangul_Jeonja */
- { 0x0000ff39, 14445 }, /* Hangul_Banja */
- { 0x0000ff3a, 15420 }, /* Hangul_PreHanja */
- { 0x0000ff3b, 15403 }, /* Hangul_PostHanja */
- { 0x0000ff3c, 23012 }, /* SingleCandidate */
- { 0x0000ff3d, 19821 }, /* MultipleCandidate */
- { 0x0000ff3e, 22100 }, /* PreviousCandidate */
- { 0x0000ff3f, 15674 }, /* Hangul_Special */
- { 0x0000ff50, 16662 }, /* Home */
- { 0x0000ff51, 19244 }, /* Left */
- { 0x0000ff52, 26384 }, /* Up */
- { 0x0000ff53, 22373 }, /* Right */
- { 0x0000ff54, 11327 }, /* Down */
- { 0x0000ff55, 22124 }, /* Prior */
- { 0x0000ff56, 20023 }, /* Next */
- { 0x0000ff57, 11936 }, /* End */
+ { 0x0000ff38, 15222 }, /* Hangul_Jeonja */
+ { 0x0000ff39, 14527 }, /* Hangul_Banja */
+ { 0x0000ff3a, 15502 }, /* Hangul_PreHanja */
+ { 0x0000ff3b, 15485 }, /* Hangul_PostHanja */
+ { 0x0000ff3c, 23094 }, /* SingleCandidate */
+ { 0x0000ff3d, 19903 }, /* MultipleCandidate */
+ { 0x0000ff3e, 22182 }, /* PreviousCandidate */
+ { 0x0000ff3f, 15756 }, /* Hangul_Special */
+ { 0x0000ff50, 16744 }, /* Home */
+ { 0x0000ff51, 19326 }, /* Left */
+ { 0x0000ff52, 26466 }, /* Up */
+ { 0x0000ff53, 22455 }, /* Right */
+ { 0x0000ff54, 11409 }, /* Down */
+ { 0x0000ff55, 22206 }, /* Prior */
+ { 0x0000ff56, 20105 }, /* Next */
+ { 0x0000ff57, 12018 }, /* End */
{ 0x0000ff58, 3404 }, /* Begin */
- { 0x0000ff60, 22727 }, /* Select */
- { 0x0000ff61, 22118 }, /* Print */
- { 0x0000ff62, 12117 }, /* Execute */
- { 0x0000ff63, 17284 }, /* Insert */
- { 0x0000ff65, 26357 }, /* Undo */
- { 0x0000ff66, 22326 }, /* Redo */
- { 0x0000ff67, 19705 }, /* Menu */
- { 0x0000ff68, 12531 }, /* Find */
+ { 0x0000ff60, 22809 }, /* Select */
+ { 0x0000ff61, 22200 }, /* Print */
+ { 0x0000ff62, 12199 }, /* Execute */
+ { 0x0000ff63, 17366 }, /* Insert */
+ { 0x0000ff65, 26439 }, /* Undo */
+ { 0x0000ff66, 22408 }, /* Redo */
+ { 0x0000ff67, 19787 }, /* Menu */
+ { 0x0000ff68, 12613 }, /* Find */
{ 0x0000ff69, 8489 }, /* Cancel */
- { 0x0000ff6a, 16602 }, /* Help */
+ { 0x0000ff6a, 16684 }, /* Help */
{ 0x0000ff6b, 8377 }, /* Break */
- { 0x0000ff7e, 19747 }, /* Mode_switch */
- { 0x0000ff7f, 20169 }, /* Num_Lock */
- { 0x0000ff80, 19074 }, /* KP_Space */
- { 0x0000ff89, 19095 }, /* KP_Tab */
- { 0x0000ff8d, 18931 }, /* KP_Enter */
- { 0x0000ff91, 18949 }, /* KP_F1 */
- { 0x0000ff92, 18955 }, /* KP_F2 */
- { 0x0000ff93, 18961 }, /* KP_F3 */
- { 0x0000ff94, 18967 }, /* KP_F4 */
- { 0x0000ff95, 18973 }, /* KP_Home */
- { 0x0000ff96, 18991 }, /* KP_Left */
- { 0x0000ff97, 19102 }, /* KP_Up */
- { 0x0000ff98, 19052 }, /* KP_Right */
- { 0x0000ff99, 18916 }, /* KP_Down */
- { 0x0000ff9a, 19043 }, /* KP_Prior */
- { 0x0000ff9b, 19011 }, /* KP_Next */
- { 0x0000ff9c, 18924 }, /* KP_End */
- { 0x0000ff9d, 18876 }, /* KP_Begin */
- { 0x0000ff9e, 18981 }, /* KP_Insert */
- { 0x0000ff9f, 18896 }, /* KP_Delete */
- { 0x0000ffaa, 18999 }, /* KP_Multiply */
- { 0x0000ffab, 18858 }, /* KP_Add */
- { 0x0000ffac, 19061 }, /* KP_Separator */
- { 0x0000ffad, 19083 }, /* KP_Subtract */
- { 0x0000ffae, 18885 }, /* KP_Decimal */
- { 0x0000ffaf, 18906 }, /* KP_Divide */
- { 0x0000ffb0, 18808 }, /* KP_0 */
- { 0x0000ffb1, 18813 }, /* KP_1 */
- { 0x0000ffb2, 18818 }, /* KP_2 */
- { 0x0000ffb3, 18823 }, /* KP_3 */
- { 0x0000ffb4, 18828 }, /* KP_4 */
- { 0x0000ffb5, 18833 }, /* KP_5 */
- { 0x0000ffb6, 18838 }, /* KP_6 */
- { 0x0000ffb7, 18843 }, /* KP_7 */
- { 0x0000ffb8, 18848 }, /* KP_8 */
- { 0x0000ffb9, 18853 }, /* KP_9 */
- { 0x0000ffbd, 18940 }, /* KP_Equal */
- { 0x0000ffbe, 12159 }, /* F1 */
- { 0x0000ffbf, 12202 }, /* F2 */
- { 0x0000ffc0, 12245 }, /* F3 */
- { 0x0000ffc1, 12272 }, /* F4 */
- { 0x0000ffc2, 12275 }, /* F5 */
- { 0x0000ffc3, 12278 }, /* F6 */
- { 0x0000ffc4, 12281 }, /* F7 */
- { 0x0000ffc5, 12284 }, /* F8 */
- { 0x0000ffc6, 12287 }, /* F9 */
- { 0x0000ffc7, 12162 }, /* F10 */
- { 0x0000ffc8, 12166 }, /* F11 */
- { 0x0000ffc9, 12170 }, /* F12 */
- { 0x0000ffca, 12174 }, /* F13 */
- { 0x0000ffcb, 12178 }, /* F14 */
- { 0x0000ffcc, 12182 }, /* F15 */
- { 0x0000ffcd, 12186 }, /* F16 */
- { 0x0000ffce, 12190 }, /* F17 */
- { 0x0000ffcf, 12194 }, /* F18 */
- { 0x0000ffd0, 12198 }, /* F19 */
- { 0x0000ffd1, 12205 }, /* F20 */
- { 0x0000ffd2, 12209 }, /* F21 */
- { 0x0000ffd3, 12213 }, /* F22 */
- { 0x0000ffd4, 12217 }, /* F23 */
- { 0x0000ffd5, 12221 }, /* F24 */
- { 0x0000ffd6, 12225 }, /* F25 */
- { 0x0000ffd7, 12229 }, /* F26 */
- { 0x0000ffd8, 12233 }, /* F27 */
- { 0x0000ffd9, 12237 }, /* F28 */
- { 0x0000ffda, 12241 }, /* F29 */
- { 0x0000ffdb, 12248 }, /* F30 */
- { 0x0000ffdc, 12252 }, /* F31 */
- { 0x0000ffdd, 12256 }, /* F32 */
- { 0x0000ffde, 12260 }, /* F33 */
- { 0x0000ffdf, 12264 }, /* F34 */
- { 0x0000ffe0, 12268 }, /* F35 */
- { 0x0000ffe1, 22946 }, /* Shift_L */
- { 0x0000ffe2, 22965 }, /* Shift_R */
- { 0x0000ffe3, 8697 }, /* Control_L */
- { 0x0000ffe4, 8707 }, /* Control_R */
+ { 0x0000ff7e, 19829 }, /* Mode_switch */
+ { 0x0000ff7f, 20251 }, /* Num_Lock */
+ { 0x0000ff80, 19156 }, /* KP_Space */
+ { 0x0000ff89, 19177 }, /* KP_Tab */
+ { 0x0000ff8d, 19013 }, /* KP_Enter */
+ { 0x0000ff91, 19031 }, /* KP_F1 */
+ { 0x0000ff92, 19037 }, /* KP_F2 */
+ { 0x0000ff93, 19043 }, /* KP_F3 */
+ { 0x0000ff94, 19049 }, /* KP_F4 */
+ { 0x0000ff95, 19055 }, /* KP_Home */
+ { 0x0000ff96, 19073 }, /* KP_Left */
+ { 0x0000ff97, 19184 }, /* KP_Up */
+ { 0x0000ff98, 19134 }, /* KP_Right */
+ { 0x0000ff99, 18998 }, /* KP_Down */
+ { 0x0000ff9a, 19125 }, /* KP_Prior */
+ { 0x0000ff9b, 19093 }, /* KP_Next */
+ { 0x0000ff9c, 19006 }, /* KP_End */
+ { 0x0000ff9d, 18958 }, /* KP_Begin */
+ { 0x0000ff9e, 19063 }, /* KP_Insert */
+ { 0x0000ff9f, 18978 }, /* KP_Delete */
+ { 0x0000ffaa, 19081 }, /* KP_Multiply */
+ { 0x0000ffab, 18940 }, /* KP_Add */
+ { 0x0000ffac, 19143 }, /* KP_Separator */
+ { 0x0000ffad, 19165 }, /* KP_Subtract */
+ { 0x0000ffae, 18967 }, /* KP_Decimal */
+ { 0x0000ffaf, 18988 }, /* KP_Divide */
+ { 0x0000ffb0, 18890 }, /* KP_0 */
+ { 0x0000ffb1, 18895 }, /* KP_1 */
+ { 0x0000ffb2, 18900 }, /* KP_2 */
+ { 0x0000ffb3, 18905 }, /* KP_3 */
+ { 0x0000ffb4, 18910 }, /* KP_4 */
+ { 0x0000ffb5, 18915 }, /* KP_5 */
+ { 0x0000ffb6, 18920 }, /* KP_6 */
+ { 0x0000ffb7, 18925 }, /* KP_7 */
+ { 0x0000ffb8, 18930 }, /* KP_8 */
+ { 0x0000ffb9, 18935 }, /* KP_9 */
+ { 0x0000ffbd, 19022 }, /* KP_Equal */
+ { 0x0000ffbe, 12241 }, /* F1 */
+ { 0x0000ffbf, 12284 }, /* F2 */
+ { 0x0000ffc0, 12327 }, /* F3 */
+ { 0x0000ffc1, 12354 }, /* F4 */
+ { 0x0000ffc2, 12357 }, /* F5 */
+ { 0x0000ffc3, 12360 }, /* F6 */
+ { 0x0000ffc4, 12363 }, /* F7 */
+ { 0x0000ffc5, 12366 }, /* F8 */
+ { 0x0000ffc6, 12369 }, /* F9 */
+ { 0x0000ffc7, 12244 }, /* F10 */
+ { 0x0000ffc8, 12248 }, /* F11 */
+ { 0x0000ffc9, 12252 }, /* F12 */
+ { 0x0000ffca, 12256 }, /* F13 */
+ { 0x0000ffcb, 12260 }, /* F14 */
+ { 0x0000ffcc, 12264 }, /* F15 */
+ { 0x0000ffcd, 12268 }, /* F16 */
+ { 0x0000ffce, 12272 }, /* F17 */
+ { 0x0000ffcf, 12276 }, /* F18 */
+ { 0x0000ffd0, 12280 }, /* F19 */
+ { 0x0000ffd1, 12287 }, /* F20 */
+ { 0x0000ffd2, 12291 }, /* F21 */
+ { 0x0000ffd3, 12295 }, /* F22 */
+ { 0x0000ffd4, 12299 }, /* F23 */
+ { 0x0000ffd5, 12303 }, /* F24 */
+ { 0x0000ffd6, 12307 }, /* F25 */
+ { 0x0000ffd7, 12311 }, /* F26 */
+ { 0x0000ffd8, 12315 }, /* F27 */
+ { 0x0000ffd9, 12319 }, /* F28 */
+ { 0x0000ffda, 12323 }, /* F29 */
+ { 0x0000ffdb, 12330 }, /* F30 */
+ { 0x0000ffdc, 12334 }, /* F31 */
+ { 0x0000ffdd, 12338 }, /* F32 */
+ { 0x0000ffde, 12342 }, /* F33 */
+ { 0x0000ffdf, 12346 }, /* F34 */
+ { 0x0000ffe0, 12350 }, /* F35 */
+ { 0x0000ffe1, 23028 }, /* Shift_L */
+ { 0x0000ffe2, 23047 }, /* Shift_R */
+ { 0x0000ffe3, 8779 }, /* Control_L */
+ { 0x0000ffe4, 8789 }, /* Control_R */
{ 0x0000ffe5, 8496 }, /* Caps_Lock */
- { 0x0000ffe6, 22954 }, /* Shift_Lock */
- { 0x0000ffe7, 19710 }, /* Meta_L */
- { 0x0000ffe8, 19717 }, /* Meta_R */
+ { 0x0000ffe6, 23036 }, /* Shift_Lock */
+ { 0x0000ffe7, 19792 }, /* Meta_L */
+ { 0x0000ffe8, 19799 }, /* Meta_R */
{ 0x0000ffe9, 880 }, /* Alt_L */
{ 0x0000ffea, 886 }, /* Alt_R */
- { 0x0000ffeb, 24263 }, /* Super_L */
- { 0x0000ffec, 24271 }, /* Super_R */
- { 0x0000ffed, 17046 }, /* Hyper_L */
- { 0x0000ffee, 17054 }, /* Hyper_R */
+ { 0x0000ffeb, 24345 }, /* Super_L */
+ { 0x0000ffec, 24353 }, /* Super_R */
+ { 0x0000ffed, 17128 }, /* Hyper_L */
+ { 0x0000ffee, 17136 }, /* Hyper_R */
{ 0x0000fff1, 3642 }, /* braille_dot_1 */
{ 0x0000fff2, 3671 }, /* braille_dot_2 */
{ 0x0000fff3, 3685 }, /* braille_dot_3 */
@@ -6136,60 +6737,65 @@ static const struct name_keysym keysym_to_name[] = {
{ 0x0000fff8, 3755 }, /* braille_dot_8 */
{ 0x0000fff9, 3769 }, /* braille_dot_9 */
{ 0x0000fffa, 3656 }, /* braille_dot_10 */
- { 0x0000ffff, 11160 }, /* Delete */
- { 0x00ffffff, 26531 }, /* VoidSymbol */
- { 0x0100012c, 17117 }, /* Ibreve */
- { 0x0100012d, 17124 }, /* ibreve */
- { 0x01000174, 26563 }, /* Wcircumflex */
- { 0x01000175, 26575 }, /* wcircumflex */
- { 0x01000176, 29120 }, /* Ycircumflex */
- { 0x01000177, 29132 }, /* ycircumflex */
- { 0x0100018f, 22649 }, /* SCHWA */
- { 0x0100019f, 20218 }, /* Obarred */
- { 0x010001a0, 20553 }, /* Ohorn */
- { 0x010001a1, 20559 }, /* ohorn */
- { 0x010001af, 25997 }, /* Uhorn */
- { 0x010001b0, 26003 }, /* uhorn */
- { 0x010001b5, 29322 }, /* Zstroke */
- { 0x010001b6, 29330 }, /* zstroke */
- { 0x010001b7, 12147 }, /* EZH */
- { 0x010001d1, 20254 }, /* Ocaron */
- { 0x010001d2, 20261 }, /* ocaron */
- { 0x010001e6, 12703 }, /* Gcaron */
- { 0x010001e7, 12710 }, /* gcaron */
- { 0x01000259, 22655 }, /* schwa */
- { 0x01000275, 20226 }, /* obarred */
- { 0x01000292, 12151 }, /* ezh */
- { 0x01000492, 9236 }, /* Cyrillic_GHE_bar */
- { 0x01000493, 9253 }, /* Cyrillic_ghe_bar */
- { 0x01000496, 10274 }, /* Cyrillic_ZHE_descender */
- { 0x01000497, 10297 }, /* Cyrillic_zhe_descender */
- { 0x0100049a, 9528 }, /* Cyrillic_KA_descender */
- { 0x0100049b, 9550 }, /* Cyrillic_ka_descender */
- { 0x0100049c, 9572 }, /* Cyrillic_KA_vertstroke */
- { 0x0100049d, 9595 }, /* Cyrillic_ka_vertstroke */
- { 0x010004a2, 9118 }, /* Cyrillic_EN_descender */
- { 0x010004a3, 9140 }, /* Cyrillic_en_descender */
- { 0x010004ae, 10036 }, /* Cyrillic_U_straight */
- { 0x010004af, 10056 }, /* Cyrillic_u_straight */
- { 0x010004b0, 10076 }, /* Cyrillic_U_straight_bar */
- { 0x010004b1, 10100 }, /* Cyrillic_u_straight_bar */
- { 0x010004b2, 9294 }, /* Cyrillic_HA_descender */
- { 0x010004b3, 9316 }, /* Cyrillic_ha_descender */
- { 0x010004b6, 8854 }, /* Cyrillic_CHE_descender */
- { 0x010004b7, 8877 }, /* Cyrillic_che_descender */
- { 0x010004b8, 8900 }, /* Cyrillic_CHE_vertstroke */
- { 0x010004b9, 8924 }, /* Cyrillic_che_vertstroke */
- { 0x010004ba, 9832 }, /* Cyrillic_SHHA */
- { 0x010004bb, 9846 }, /* Cyrillic_shha */
- { 0x010004d8, 9746 }, /* Cyrillic_SCHWA */
- { 0x010004d9, 9761 }, /* Cyrillic_schwa */
- { 0x010004e2, 9396 }, /* Cyrillic_I_macron */
- { 0x010004e3, 9414 }, /* Cyrillic_i_macron */
- { 0x010004e8, 9692 }, /* Cyrillic_O_bar */
- { 0x010004e9, 9707 }, /* Cyrillic_o_bar */
- { 0x010004ee, 10000 }, /* Cyrillic_U_macron */
- { 0x010004ef, 10018 }, /* Cyrillic_u_macron */
+ { 0x0000ffff, 11242 }, /* Delete */
+ { 0x00ffffff, 26613 }, /* VoidSymbol */
+ { 0x0100012c, 17199 }, /* Ibreve */
+ { 0x0100012d, 17206 }, /* ibreve */
+ { 0x01000174, 26645 }, /* Wcircumflex */
+ { 0x01000175, 26657 }, /* wcircumflex */
+ { 0x01000176, 31228 }, /* Ycircumflex */
+ { 0x01000177, 31240 }, /* ycircumflex */
+ { 0x0100018f, 22731 }, /* SCHWA */
+ { 0x0100019f, 20300 }, /* Obarred */
+ { 0x010001a0, 20635 }, /* Ohorn */
+ { 0x010001a1, 20641 }, /* ohorn */
+ { 0x010001af, 26079 }, /* Uhorn */
+ { 0x010001b0, 26085 }, /* uhorn */
+ { 0x010001b5, 31430 }, /* Zstroke */
+ { 0x010001b6, 31438 }, /* zstroke */
+ { 0x010001b7, 12229 }, /* EZH */
+ { 0x010001d1, 20336 }, /* Ocaron */
+ { 0x010001d2, 20343 }, /* ocaron */
+ { 0x010001e6, 12785 }, /* Gcaron */
+ { 0x010001e7, 12792 }, /* gcaron */
+ { 0x01000259, 22737 }, /* schwa */
+ { 0x01000275, 20308 }, /* obarred */
+ { 0x01000292, 12233 }, /* ezh */
+ { 0x01000300, 8715 }, /* combining_grave */
+ { 0x01000301, 8680 }, /* combining_acute */
+ { 0x01000303, 8746 }, /* combining_tilde */
+ { 0x01000309, 8731 }, /* combining_hook */
+ { 0x01000323, 8696 }, /* combining_belowdot */
+ { 0x01000492, 9318 }, /* Cyrillic_GHE_bar */
+ { 0x01000493, 9335 }, /* Cyrillic_ghe_bar */
+ { 0x01000496, 10356 }, /* Cyrillic_ZHE_descender */
+ { 0x01000497, 10379 }, /* Cyrillic_zhe_descender */
+ { 0x0100049a, 9610 }, /* Cyrillic_KA_descender */
+ { 0x0100049b, 9632 }, /* Cyrillic_ka_descender */
+ { 0x0100049c, 9654 }, /* Cyrillic_KA_vertstroke */
+ { 0x0100049d, 9677 }, /* Cyrillic_ka_vertstroke */
+ { 0x010004a2, 9200 }, /* Cyrillic_EN_descender */
+ { 0x010004a3, 9222 }, /* Cyrillic_en_descender */
+ { 0x010004ae, 10118 }, /* Cyrillic_U_straight */
+ { 0x010004af, 10138 }, /* Cyrillic_u_straight */
+ { 0x010004b0, 10158 }, /* Cyrillic_U_straight_bar */
+ { 0x010004b1, 10182 }, /* Cyrillic_u_straight_bar */
+ { 0x010004b2, 9376 }, /* Cyrillic_HA_descender */
+ { 0x010004b3, 9398 }, /* Cyrillic_ha_descender */
+ { 0x010004b6, 8936 }, /* Cyrillic_CHE_descender */
+ { 0x010004b7, 8959 }, /* Cyrillic_che_descender */
+ { 0x010004b8, 8982 }, /* Cyrillic_CHE_vertstroke */
+ { 0x010004b9, 9006 }, /* Cyrillic_che_vertstroke */
+ { 0x010004ba, 9914 }, /* Cyrillic_SHHA */
+ { 0x010004bb, 9928 }, /* Cyrillic_shha */
+ { 0x010004d8, 9828 }, /* Cyrillic_SCHWA */
+ { 0x010004d9, 9843 }, /* Cyrillic_schwa */
+ { 0x010004e2, 9478 }, /* Cyrillic_I_macron */
+ { 0x010004e3, 9496 }, /* Cyrillic_i_macron */
+ { 0x010004e8, 9774 }, /* Cyrillic_O_bar */
+ { 0x010004e9, 9789 }, /* Cyrillic_o_bar */
+ { 0x010004ee, 10082 }, /* Cyrillic_U_macron */
+ { 0x010004ef, 10100 }, /* Cyrillic_u_macron */
{ 0x01000531, 2124 }, /* Armenian_AYB */
{ 0x01000532, 2150 }, /* Armenian_BEN */
{ 0x01000533, 2374 }, /* Armenian_GIM */
@@ -6301,162 +6907,162 @@ static const struct name_keysym keysym_to_name[] = {
{ 0x010006ba, 1642 }, /* Arabic_noon_ghunna */
{ 0x010006be, 1442 }, /* Arabic_heh_doachashmee */
{ 0x010006c1, 1465 }, /* Arabic_heh_goal */
- { 0x010006cc, 12390 }, /* Farsi_yeh */
+ { 0x010006cc, 12472 }, /* Farsi_yeh */
{ 0x010006d2, 1996 }, /* Arabic_yeh_baree */
{ 0x010006d4, 1242 }, /* Arabic_fullstop */
- { 0x010006f0, 12310 }, /* Farsi_0 */
- { 0x010006f1, 12318 }, /* Farsi_1 */
- { 0x010006f2, 12326 }, /* Farsi_2 */
- { 0x010006f3, 12334 }, /* Farsi_3 */
- { 0x010006f4, 12342 }, /* Farsi_4 */
- { 0x010006f5, 12350 }, /* Farsi_5 */
- { 0x010006f6, 12358 }, /* Farsi_6 */
- { 0x010006f7, 12366 }, /* Farsi_7 */
- { 0x010006f8, 12374 }, /* Farsi_8 */
- { 0x010006f9, 12382 }, /* Farsi_9 */
- { 0x01000d82, 23484 }, /* Sinh_ng */
- { 0x01000d83, 23278 }, /* Sinh_h2 */
- { 0x01000d85, 23047 }, /* Sinh_a */
- { 0x01000d86, 23054 }, /* Sinh_aa */
- { 0x01000d87, 23071 }, /* Sinh_ae */
- { 0x01000d88, 23088 }, /* Sinh_aee */
- { 0x01000d89, 23294 }, /* Sinh_i */
- { 0x01000d8a, 23309 }, /* Sinh_ii */
- { 0x01000d8b, 23695 }, /* Sinh_u */
- { 0x01000d8c, 23710 }, /* Sinh_uu */
- { 0x01000d8d, 23594 }, /* Sinh_ri */
- { 0x01000d8e, 23602 }, /* Sinh_rii */
- { 0x01000d8f, 23403 }, /* Sinh_lu */
- { 0x01000d90, 23420 }, /* Sinh_luu */
- { 0x01000d91, 23221 }, /* Sinh_e */
- { 0x01000d92, 23236 }, /* Sinh_ee */
- { 0x01000d93, 23107 }, /* Sinh_ai */
- { 0x01000d94, 23537 }, /* Sinh_o */
- { 0x01000d95, 23552 }, /* Sinh_oo */
- { 0x01000d96, 23132 }, /* Sinh_au */
- { 0x01000d9a, 23353 }, /* Sinh_ka */
- { 0x01000d9b, 23361 }, /* Sinh_kha */
- { 0x01000d9c, 23261 }, /* Sinh_ga */
- { 0x01000d9d, 23269 }, /* Sinh_gha */
- { 0x01000d9e, 23492 }, /* Sinh_ng2 */
- { 0x01000d9f, 23501 }, /* Sinh_nga */
- { 0x01000da0, 23166 }, /* Sinh_ca */
- { 0x01000da1, 23174 }, /* Sinh_cha */
- { 0x01000da2, 23326 }, /* Sinh_ja */
- { 0x01000da3, 23334 }, /* Sinh_jha */
- { 0x01000da4, 23528 }, /* Sinh_nya */
- { 0x01000da5, 23343 }, /* Sinh_jnya */
- { 0x01000da6, 23510 }, /* Sinh_nja */
- { 0x01000da7, 23676 }, /* Sinh_tta */
- { 0x01000da8, 23685 }, /* Sinh_ttha */
- { 0x01000da9, 23183 }, /* Sinh_dda */
- { 0x01000daa, 23192 }, /* Sinh_ddha */
- { 0x01000dab, 23519 }, /* Sinh_nna */
- { 0x01000dac, 23464 }, /* Sinh_ndda */
- { 0x01000dad, 23657 }, /* Sinh_tha */
- { 0x01000dae, 23666 }, /* Sinh_thha */
- { 0x01000daf, 23202 }, /* Sinh_dha */
- { 0x01000db0, 23211 }, /* Sinh_dhha */
- { 0x01000db1, 23456 }, /* Sinh_na */
- { 0x01000db3, 23474 }, /* Sinh_ndha */
- { 0x01000db4, 23569 }, /* Sinh_pa */
- { 0x01000db5, 23577 }, /* Sinh_pha */
- { 0x01000db6, 23149 }, /* Sinh_ba */
- { 0x01000db7, 23157 }, /* Sinh_bha */
- { 0x01000db8, 23439 }, /* Sinh_ma */
- { 0x01000db9, 23447 }, /* Sinh_mba */
- { 0x01000dba, 23735 }, /* Sinh_ya */
- { 0x01000dbb, 23586 }, /* Sinh_ra */
- { 0x01000dbd, 23386 }, /* Sinh_la */
- { 0x01000dc0, 23727 }, /* Sinh_va */
- { 0x01000dc1, 23638 }, /* Sinh_sha */
- { 0x01000dc2, 23647 }, /* Sinh_ssha */
- { 0x01000dc3, 23630 }, /* Sinh_sa */
- { 0x01000dc4, 23286 }, /* Sinh_ha */
- { 0x01000dc5, 23394 }, /* Sinh_lla */
- { 0x01000dc6, 23253 }, /* Sinh_fa */
- { 0x01000dca, 23124 }, /* Sinh_al */
- { 0x01000dcf, 23062 }, /* Sinh_aa2 */
- { 0x01000dd0, 23079 }, /* Sinh_ae2 */
- { 0x01000dd1, 23097 }, /* Sinh_aee2 */
- { 0x01000dd2, 23301 }, /* Sinh_i2 */
- { 0x01000dd3, 23317 }, /* Sinh_ii2 */
- { 0x01000dd4, 23702 }, /* Sinh_u2 */
- { 0x01000dd6, 23718 }, /* Sinh_uu2 */
- { 0x01000dd8, 23611 }, /* Sinh_ru2 */
- { 0x01000dd9, 23228 }, /* Sinh_e2 */
- { 0x01000dda, 23244 }, /* Sinh_ee2 */
- { 0x01000ddb, 23115 }, /* Sinh_ai2 */
- { 0x01000ddc, 23544 }, /* Sinh_o2 */
- { 0x01000ddd, 23560 }, /* Sinh_oo2 */
- { 0x01000dde, 23140 }, /* Sinh_au2 */
- { 0x01000ddf, 23411 }, /* Sinh_lu2 */
- { 0x01000df2, 23620 }, /* Sinh_ruu2 */
- { 0x01000df3, 23429 }, /* Sinh_luu2 */
- { 0x01000df4, 23370 }, /* Sinh_kunddaliya */
- { 0x010010d0, 12759 }, /* Georgian_an */
- { 0x010010d1, 12771 }, /* Georgian_ban */
- { 0x010010d2, 12875 }, /* Georgian_gan */
- { 0x010010d3, 12838 }, /* Georgian_don */
- { 0x010010d4, 12851 }, /* Georgian_en */
- { 0x010010d5, 13201 }, /* Georgian_vin */
- { 0x010010d6, 13239 }, /* Georgian_zen */
- { 0x010010d7, 13163 }, /* Georgian_tan */
- { 0x010010d8, 12966 }, /* Georgian_in */
- { 0x010010d9, 13005 }, /* Georgian_kan */
- { 0x010010da, 13032 }, /* Georgian_las */
- { 0x010010db, 13045 }, /* Georgian_man */
- { 0x010010dc, 13058 }, /* Georgian_nar */
- { 0x010010dd, 13071 }, /* Georgian_on */
- { 0x010010de, 13083 }, /* Georgian_par */
- { 0x010010df, 13252 }, /* Georgian_zhar */
- { 0x010010e0, 13123 }, /* Georgian_rae */
- { 0x010010e1, 13136 }, /* Georgian_san */
- { 0x010010e2, 13176 }, /* Georgian_tar */
- { 0x010010e3, 13189 }, /* Georgian_un */
- { 0x010010e4, 13096 }, /* Georgian_phar */
- { 0x010010e5, 13018 }, /* Georgian_khar */
- { 0x010010e6, 12888 }, /* Georgian_ghan */
- { 0x010010e7, 13110 }, /* Georgian_qar */
- { 0x010010e8, 13149 }, /* Georgian_shin */
- { 0x010010e9, 12811 }, /* Georgian_chin */
- { 0x010010ea, 12784 }, /* Georgian_can */
- { 0x010010eb, 12992 }, /* Georgian_jil */
- { 0x010010ec, 12825 }, /* Georgian_cil */
- { 0x010010ed, 12797 }, /* Georgian_char */
- { 0x010010ee, 13226 }, /* Georgian_xan */
- { 0x010010ef, 12978 }, /* Georgian_jhan */
- { 0x010010f0, 12902 }, /* Georgian_hae */
- { 0x010010f1, 12928 }, /* Georgian_he */
- { 0x010010f2, 12940 }, /* Georgian_hie */
- { 0x010010f3, 13214 }, /* Georgian_we */
- { 0x010010f4, 12915 }, /* Georgian_har */
- { 0x010010f5, 12953 }, /* Georgian_hoe */
- { 0x010010f6, 12863 }, /* Georgian_fi */
+ { 0x010006f0, 12392 }, /* Farsi_0 */
+ { 0x010006f1, 12400 }, /* Farsi_1 */
+ { 0x010006f2, 12408 }, /* Farsi_2 */
+ { 0x010006f3, 12416 }, /* Farsi_3 */
+ { 0x010006f4, 12424 }, /* Farsi_4 */
+ { 0x010006f5, 12432 }, /* Farsi_5 */
+ { 0x010006f6, 12440 }, /* Farsi_6 */
+ { 0x010006f7, 12448 }, /* Farsi_7 */
+ { 0x010006f8, 12456 }, /* Farsi_8 */
+ { 0x010006f9, 12464 }, /* Farsi_9 */
+ { 0x01000d82, 23566 }, /* Sinh_ng */
+ { 0x01000d83, 23360 }, /* Sinh_h2 */
+ { 0x01000d85, 23129 }, /* Sinh_a */
+ { 0x01000d86, 23136 }, /* Sinh_aa */
+ { 0x01000d87, 23153 }, /* Sinh_ae */
+ { 0x01000d88, 23170 }, /* Sinh_aee */
+ { 0x01000d89, 23376 }, /* Sinh_i */
+ { 0x01000d8a, 23391 }, /* Sinh_ii */
+ { 0x01000d8b, 23777 }, /* Sinh_u */
+ { 0x01000d8c, 23792 }, /* Sinh_uu */
+ { 0x01000d8d, 23676 }, /* Sinh_ri */
+ { 0x01000d8e, 23684 }, /* Sinh_rii */
+ { 0x01000d8f, 23485 }, /* Sinh_lu */
+ { 0x01000d90, 23502 }, /* Sinh_luu */
+ { 0x01000d91, 23303 }, /* Sinh_e */
+ { 0x01000d92, 23318 }, /* Sinh_ee */
+ { 0x01000d93, 23189 }, /* Sinh_ai */
+ { 0x01000d94, 23619 }, /* Sinh_o */
+ { 0x01000d95, 23634 }, /* Sinh_oo */
+ { 0x01000d96, 23214 }, /* Sinh_au */
+ { 0x01000d9a, 23435 }, /* Sinh_ka */
+ { 0x01000d9b, 23443 }, /* Sinh_kha */
+ { 0x01000d9c, 23343 }, /* Sinh_ga */
+ { 0x01000d9d, 23351 }, /* Sinh_gha */
+ { 0x01000d9e, 23574 }, /* Sinh_ng2 */
+ { 0x01000d9f, 23583 }, /* Sinh_nga */
+ { 0x01000da0, 23248 }, /* Sinh_ca */
+ { 0x01000da1, 23256 }, /* Sinh_cha */
+ { 0x01000da2, 23408 }, /* Sinh_ja */
+ { 0x01000da3, 23416 }, /* Sinh_jha */
+ { 0x01000da4, 23610 }, /* Sinh_nya */
+ { 0x01000da5, 23425 }, /* Sinh_jnya */
+ { 0x01000da6, 23592 }, /* Sinh_nja */
+ { 0x01000da7, 23758 }, /* Sinh_tta */
+ { 0x01000da8, 23767 }, /* Sinh_ttha */
+ { 0x01000da9, 23265 }, /* Sinh_dda */
+ { 0x01000daa, 23274 }, /* Sinh_ddha */
+ { 0x01000dab, 23601 }, /* Sinh_nna */
+ { 0x01000dac, 23546 }, /* Sinh_ndda */
+ { 0x01000dad, 23739 }, /* Sinh_tha */
+ { 0x01000dae, 23748 }, /* Sinh_thha */
+ { 0x01000daf, 23284 }, /* Sinh_dha */
+ { 0x01000db0, 23293 }, /* Sinh_dhha */
+ { 0x01000db1, 23538 }, /* Sinh_na */
+ { 0x01000db3, 23556 }, /* Sinh_ndha */
+ { 0x01000db4, 23651 }, /* Sinh_pa */
+ { 0x01000db5, 23659 }, /* Sinh_pha */
+ { 0x01000db6, 23231 }, /* Sinh_ba */
+ { 0x01000db7, 23239 }, /* Sinh_bha */
+ { 0x01000db8, 23521 }, /* Sinh_ma */
+ { 0x01000db9, 23529 }, /* Sinh_mba */
+ { 0x01000dba, 23817 }, /* Sinh_ya */
+ { 0x01000dbb, 23668 }, /* Sinh_ra */
+ { 0x01000dbd, 23468 }, /* Sinh_la */
+ { 0x01000dc0, 23809 }, /* Sinh_va */
+ { 0x01000dc1, 23720 }, /* Sinh_sha */
+ { 0x01000dc2, 23729 }, /* Sinh_ssha */
+ { 0x01000dc3, 23712 }, /* Sinh_sa */
+ { 0x01000dc4, 23368 }, /* Sinh_ha */
+ { 0x01000dc5, 23476 }, /* Sinh_lla */
+ { 0x01000dc6, 23335 }, /* Sinh_fa */
+ { 0x01000dca, 23206 }, /* Sinh_al */
+ { 0x01000dcf, 23144 }, /* Sinh_aa2 */
+ { 0x01000dd0, 23161 }, /* Sinh_ae2 */
+ { 0x01000dd1, 23179 }, /* Sinh_aee2 */
+ { 0x01000dd2, 23383 }, /* Sinh_i2 */
+ { 0x01000dd3, 23399 }, /* Sinh_ii2 */
+ { 0x01000dd4, 23784 }, /* Sinh_u2 */
+ { 0x01000dd6, 23800 }, /* Sinh_uu2 */
+ { 0x01000dd8, 23693 }, /* Sinh_ru2 */
+ { 0x01000dd9, 23310 }, /* Sinh_e2 */
+ { 0x01000dda, 23326 }, /* Sinh_ee2 */
+ { 0x01000ddb, 23197 }, /* Sinh_ai2 */
+ { 0x01000ddc, 23626 }, /* Sinh_o2 */
+ { 0x01000ddd, 23642 }, /* Sinh_oo2 */
+ { 0x01000dde, 23222 }, /* Sinh_au2 */
+ { 0x01000ddf, 23493 }, /* Sinh_lu2 */
+ { 0x01000df2, 23702 }, /* Sinh_ruu2 */
+ { 0x01000df3, 23511 }, /* Sinh_luu2 */
+ { 0x01000df4, 23452 }, /* Sinh_kunddaliya */
+ { 0x010010d0, 12841 }, /* Georgian_an */
+ { 0x010010d1, 12853 }, /* Georgian_ban */
+ { 0x010010d2, 12957 }, /* Georgian_gan */
+ { 0x010010d3, 12920 }, /* Georgian_don */
+ { 0x010010d4, 12933 }, /* Georgian_en */
+ { 0x010010d5, 13283 }, /* Georgian_vin */
+ { 0x010010d6, 13321 }, /* Georgian_zen */
+ { 0x010010d7, 13245 }, /* Georgian_tan */
+ { 0x010010d8, 13048 }, /* Georgian_in */
+ { 0x010010d9, 13087 }, /* Georgian_kan */
+ { 0x010010da, 13114 }, /* Georgian_las */
+ { 0x010010db, 13127 }, /* Georgian_man */
+ { 0x010010dc, 13140 }, /* Georgian_nar */
+ { 0x010010dd, 13153 }, /* Georgian_on */
+ { 0x010010de, 13165 }, /* Georgian_par */
+ { 0x010010df, 13334 }, /* Georgian_zhar */
+ { 0x010010e0, 13205 }, /* Georgian_rae */
+ { 0x010010e1, 13218 }, /* Georgian_san */
+ { 0x010010e2, 13258 }, /* Georgian_tar */
+ { 0x010010e3, 13271 }, /* Georgian_un */
+ { 0x010010e4, 13178 }, /* Georgian_phar */
+ { 0x010010e5, 13100 }, /* Georgian_khar */
+ { 0x010010e6, 12970 }, /* Georgian_ghan */
+ { 0x010010e7, 13192 }, /* Georgian_qar */
+ { 0x010010e8, 13231 }, /* Georgian_shin */
+ { 0x010010e9, 12893 }, /* Georgian_chin */
+ { 0x010010ea, 12866 }, /* Georgian_can */
+ { 0x010010eb, 13074 }, /* Georgian_jil */
+ { 0x010010ec, 12907 }, /* Georgian_cil */
+ { 0x010010ed, 12879 }, /* Georgian_char */
+ { 0x010010ee, 13308 }, /* Georgian_xan */
+ { 0x010010ef, 13060 }, /* Georgian_jhan */
+ { 0x010010f0, 12984 }, /* Georgian_hae */
+ { 0x010010f1, 13010 }, /* Georgian_he */
+ { 0x010010f2, 13022 }, /* Georgian_hie */
+ { 0x010010f3, 13296 }, /* Georgian_we */
+ { 0x010010f4, 12997 }, /* Georgian_har */
+ { 0x010010f5, 13035 }, /* Georgian_hoe */
+ { 0x010010f6, 12945 }, /* Georgian_fi */
{ 0x01001e02, 3332 }, /* Babovedot */
{ 0x01001e03, 3342 }, /* babovedot */
- { 0x01001e0a, 10324 }, /* Dabovedot */
- { 0x01001e0b, 10334 }, /* dabovedot */
- { 0x01001e1e, 12290 }, /* Fabovedot */
- { 0x01001e1f, 12300 }, /* fabovedot */
- { 0x01001e36, 19192 }, /* Lbelowdot */
- { 0x01001e37, 19202 }, /* lbelowdot */
- { 0x01001e40, 19537 }, /* Mabovedot */
- { 0x01001e41, 19547 }, /* mabovedot */
- { 0x01001e56, 21377 }, /* Pabovedot */
- { 0x01001e57, 21387 }, /* pabovedot */
- { 0x01001e60, 22583 }, /* Sabovedot */
- { 0x01001e61, 22593 }, /* sabovedot */
- { 0x01001e6a, 24302 }, /* Tabovedot */
- { 0x01001e6b, 24312 }, /* tabovedot */
- { 0x01001e80, 26609 }, /* Wgrave */
- { 0x01001e81, 26616 }, /* wgrave */
- { 0x01001e82, 26549 }, /* Wacute */
- { 0x01001e83, 26556 }, /* wacute */
- { 0x01001e84, 26587 }, /* Wdiaeresis */
- { 0x01001e85, 26598 }, /* wdiaeresis */
- { 0x01001e8a, 26635 }, /* Xabovedot */
- { 0x01001e8b, 26645 }, /* xabovedot */
+ { 0x01001e0a, 10406 }, /* Dabovedot */
+ { 0x01001e0b, 10416 }, /* dabovedot */
+ { 0x01001e1e, 12372 }, /* Fabovedot */
+ { 0x01001e1f, 12382 }, /* fabovedot */
+ { 0x01001e36, 19274 }, /* Lbelowdot */
+ { 0x01001e37, 19284 }, /* lbelowdot */
+ { 0x01001e40, 19619 }, /* Mabovedot */
+ { 0x01001e41, 19629 }, /* mabovedot */
+ { 0x01001e56, 21459 }, /* Pabovedot */
+ { 0x01001e57, 21469 }, /* pabovedot */
+ { 0x01001e60, 22665 }, /* Sabovedot */
+ { 0x01001e61, 22675 }, /* sabovedot */
+ { 0x01001e6a, 24384 }, /* Tabovedot */
+ { 0x01001e6b, 24394 }, /* tabovedot */
+ { 0x01001e80, 26691 }, /* Wgrave */
+ { 0x01001e81, 26698 }, /* wgrave */
+ { 0x01001e82, 26631 }, /* Wacute */
+ { 0x01001e83, 26638 }, /* wacute */
+ { 0x01001e84, 26669 }, /* Wdiaeresis */
+ { 0x01001e85, 26680 }, /* wdiaeresis */
+ { 0x01001e8a, 26717 }, /* Xabovedot */
+ { 0x01001e8b, 26727 }, /* xabovedot */
{ 0x01001ea0, 416 }, /* Abelowdot */
{ 0x01001ea1, 426 }, /* abelowdot */
{ 0x01001ea2, 868 }, /* Ahook */
@@ -6481,116 +7087,116 @@ static const struct name_keysym keysym_to_name[] = {
{ 0x01001eb5, 571 }, /* abrevetilde */
{ 0x01001eb6, 483 }, /* Abrevebelowdot */
{ 0x01001eb7, 498 }, /* abrevebelowdot */
- { 0x01001eb8, 11462 }, /* Ebelowdot */
- { 0x01001eb9, 11472 }, /* ebelowdot */
- { 0x01001eba, 11738 }, /* Ehook */
- { 0x01001ebb, 11744 }, /* ehook */
- { 0x01001ebc, 12076 }, /* Etilde */
- { 0x01001ebd, 12083 }, /* etilde */
- { 0x01001ebe, 11520 }, /* Ecircumflexacute */
- { 0x01001ebf, 11537 }, /* ecircumflexacute */
- { 0x01001ec0, 11594 }, /* Ecircumflexgrave */
- { 0x01001ec1, 11611 }, /* ecircumflexgrave */
- { 0x01001ec2, 11628 }, /* Ecircumflexhook */
- { 0x01001ec3, 11644 }, /* ecircumflexhook */
- { 0x01001ec4, 11660 }, /* Ecircumflextilde */
- { 0x01001ec5, 11677 }, /* ecircumflextilde */
- { 0x01001ec6, 11554 }, /* Ecircumflexbelowdot */
- { 0x01001ec7, 11574 }, /* ecircumflexbelowdot */
- { 0x01001ec8, 17219 }, /* Ihook */
- { 0x01001ec9, 17225 }, /* ihook */
- { 0x01001eca, 17097 }, /* Ibelowdot */
- { 0x01001ecb, 17107 }, /* ibelowdot */
- { 0x01001ecc, 20234 }, /* Obelowdot */
- { 0x01001ecd, 20244 }, /* obelowdot */
- { 0x01001ece, 20541 }, /* Ohook */
- { 0x01001ecf, 20547 }, /* ohook */
- { 0x01001ed0, 20292 }, /* Ocircumflexacute */
- { 0x01001ed1, 20309 }, /* ocircumflexacute */
- { 0x01001ed2, 20366 }, /* Ocircumflexgrave */
- { 0x01001ed3, 20383 }, /* ocircumflexgrave */
- { 0x01001ed4, 20400 }, /* Ocircumflexhook */
- { 0x01001ed5, 20416 }, /* ocircumflexhook */
- { 0x01001ed6, 20432 }, /* Ocircumflextilde */
- { 0x01001ed7, 20449 }, /* ocircumflextilde */
- { 0x01001ed8, 20326 }, /* Ocircumflexbelowdot */
- { 0x01001ed9, 20346 }, /* ocircumflexbelowdot */
- { 0x01001eda, 20565 }, /* Ohornacute */
- { 0x01001edb, 20576 }, /* ohornacute */
- { 0x01001edc, 20615 }, /* Ohorngrave */
- { 0x01001edd, 20626 }, /* ohorngrave */
- { 0x01001ede, 20637 }, /* Ohornhook */
- { 0x01001edf, 20647 }, /* ohornhook */
- { 0x01001ee0, 20657 }, /* Ohorntilde */
- { 0x01001ee1, 20668 }, /* ohorntilde */
- { 0x01001ee2, 20587 }, /* Ohornbelowdot */
- { 0x01001ee3, 20601 }, /* ohornbelowdot */
- { 0x01001ee4, 25865 }, /* Ubelowdot */
- { 0x01001ee5, 25875 }, /* ubelowdot */
- { 0x01001ee6, 25985 }, /* Uhook */
- { 0x01001ee7, 25991 }, /* uhook */
- { 0x01001ee8, 26009 }, /* Uhornacute */
- { 0x01001ee9, 26020 }, /* uhornacute */
- { 0x01001eea, 26059 }, /* Uhorngrave */
- { 0x01001eeb, 26070 }, /* uhorngrave */
- { 0x01001eec, 26081 }, /* Uhornhook */
- { 0x01001eed, 26091 }, /* uhornhook */
- { 0x01001eee, 26101 }, /* Uhorntilde */
- { 0x01001eef, 26112 }, /* uhorntilde */
- { 0x01001ef0, 26031 }, /* Uhornbelowdot */
- { 0x01001ef1, 26045 }, /* uhornbelowdot */
- { 0x01001ef2, 29170 }, /* Ygrave */
- { 0x01001ef3, 29177 }, /* ygrave */
- { 0x01001ef4, 29100 }, /* Ybelowdot */
- { 0x01001ef5, 29110 }, /* ybelowdot */
- { 0x01001ef6, 29184 }, /* Yhook */
- { 0x01001ef7, 29190 }, /* yhook */
- { 0x01001ef8, 29196 }, /* Ytilde */
- { 0x01001ef9, 29203 }, /* ytilde */
- { 0x01002070, 29309 }, /* zerosuperior */
- { 0x01002074, 12632 }, /* foursuperior */
- { 0x01002075, 12594 }, /* fivesuperior */
- { 0x01002076, 23756 }, /* sixsuperior */
- { 0x01002077, 22932 }, /* sevensuperior */
- { 0x01002078, 11765 }, /* eightsuperior */
- { 0x01002079, 20062 }, /* ninesuperior */
- { 0x01002080, 29295 }, /* zerosubscript */
- { 0x01002081, 20742 }, /* onesubscript */
- { 0x01002082, 25812 }, /* twosubscript */
- { 0x01002083, 25556 }, /* threesubscript */
- { 0x01002084, 12618 }, /* foursubscript */
- { 0x01002085, 12580 }, /* fivesubscript */
- { 0x01002086, 23743 }, /* sixsubscript */
- { 0x01002087, 22917 }, /* sevensubscript */
- { 0x01002088, 11750 }, /* eightsubscript */
- { 0x01002089, 20048 }, /* ninesubscript */
- { 0x010020a0, 11694 }, /* EcuSign */
+ { 0x01001eb8, 11544 }, /* Ebelowdot */
+ { 0x01001eb9, 11554 }, /* ebelowdot */
+ { 0x01001eba, 11820 }, /* Ehook */
+ { 0x01001ebb, 11826 }, /* ehook */
+ { 0x01001ebc, 12158 }, /* Etilde */
+ { 0x01001ebd, 12165 }, /* etilde */
+ { 0x01001ebe, 11602 }, /* Ecircumflexacute */
+ { 0x01001ebf, 11619 }, /* ecircumflexacute */
+ { 0x01001ec0, 11676 }, /* Ecircumflexgrave */
+ { 0x01001ec1, 11693 }, /* ecircumflexgrave */
+ { 0x01001ec2, 11710 }, /* Ecircumflexhook */
+ { 0x01001ec3, 11726 }, /* ecircumflexhook */
+ { 0x01001ec4, 11742 }, /* Ecircumflextilde */
+ { 0x01001ec5, 11759 }, /* ecircumflextilde */
+ { 0x01001ec6, 11636 }, /* Ecircumflexbelowdot */
+ { 0x01001ec7, 11656 }, /* ecircumflexbelowdot */
+ { 0x01001ec8, 17301 }, /* Ihook */
+ { 0x01001ec9, 17307 }, /* ihook */
+ { 0x01001eca, 17179 }, /* Ibelowdot */
+ { 0x01001ecb, 17189 }, /* ibelowdot */
+ { 0x01001ecc, 20316 }, /* Obelowdot */
+ { 0x01001ecd, 20326 }, /* obelowdot */
+ { 0x01001ece, 20623 }, /* Ohook */
+ { 0x01001ecf, 20629 }, /* ohook */
+ { 0x01001ed0, 20374 }, /* Ocircumflexacute */
+ { 0x01001ed1, 20391 }, /* ocircumflexacute */
+ { 0x01001ed2, 20448 }, /* Ocircumflexgrave */
+ { 0x01001ed3, 20465 }, /* ocircumflexgrave */
+ { 0x01001ed4, 20482 }, /* Ocircumflexhook */
+ { 0x01001ed5, 20498 }, /* ocircumflexhook */
+ { 0x01001ed6, 20514 }, /* Ocircumflextilde */
+ { 0x01001ed7, 20531 }, /* ocircumflextilde */
+ { 0x01001ed8, 20408 }, /* Ocircumflexbelowdot */
+ { 0x01001ed9, 20428 }, /* ocircumflexbelowdot */
+ { 0x01001eda, 20647 }, /* Ohornacute */
+ { 0x01001edb, 20658 }, /* ohornacute */
+ { 0x01001edc, 20697 }, /* Ohorngrave */
+ { 0x01001edd, 20708 }, /* ohorngrave */
+ { 0x01001ede, 20719 }, /* Ohornhook */
+ { 0x01001edf, 20729 }, /* ohornhook */
+ { 0x01001ee0, 20739 }, /* Ohorntilde */
+ { 0x01001ee1, 20750 }, /* ohorntilde */
+ { 0x01001ee2, 20669 }, /* Ohornbelowdot */
+ { 0x01001ee3, 20683 }, /* ohornbelowdot */
+ { 0x01001ee4, 25947 }, /* Ubelowdot */
+ { 0x01001ee5, 25957 }, /* ubelowdot */
+ { 0x01001ee6, 26067 }, /* Uhook */
+ { 0x01001ee7, 26073 }, /* uhook */
+ { 0x01001ee8, 26091 }, /* Uhornacute */
+ { 0x01001ee9, 26102 }, /* uhornacute */
+ { 0x01001eea, 26141 }, /* Uhorngrave */
+ { 0x01001eeb, 26152 }, /* uhorngrave */
+ { 0x01001eec, 26163 }, /* Uhornhook */
+ { 0x01001eed, 26173 }, /* uhornhook */
+ { 0x01001eee, 26183 }, /* Uhorntilde */
+ { 0x01001eef, 26194 }, /* uhorntilde */
+ { 0x01001ef0, 26113 }, /* Uhornbelowdot */
+ { 0x01001ef1, 26127 }, /* uhornbelowdot */
+ { 0x01001ef2, 31278 }, /* Ygrave */
+ { 0x01001ef3, 31285 }, /* ygrave */
+ { 0x01001ef4, 31208 }, /* Ybelowdot */
+ { 0x01001ef5, 31218 }, /* ybelowdot */
+ { 0x01001ef6, 31292 }, /* Yhook */
+ { 0x01001ef7, 31298 }, /* yhook */
+ { 0x01001ef8, 31304 }, /* Ytilde */
+ { 0x01001ef9, 31311 }, /* ytilde */
+ { 0x01002070, 31417 }, /* zerosuperior */
+ { 0x01002074, 12714 }, /* foursuperior */
+ { 0x01002075, 12676 }, /* fivesuperior */
+ { 0x01002076, 23838 }, /* sixsuperior */
+ { 0x01002077, 23014 }, /* sevensuperior */
+ { 0x01002078, 11847 }, /* eightsuperior */
+ { 0x01002079, 20144 }, /* ninesuperior */
+ { 0x01002080, 31403 }, /* zerosubscript */
+ { 0x01002081, 20824 }, /* onesubscript */
+ { 0x01002082, 25894 }, /* twosubscript */
+ { 0x01002083, 25638 }, /* threesubscript */
+ { 0x01002084, 12700 }, /* foursubscript */
+ { 0x01002085, 12662 }, /* fivesubscript */
+ { 0x01002086, 23825 }, /* sixsubscript */
+ { 0x01002087, 22999 }, /* sevensubscript */
+ { 0x01002088, 11832 }, /* eightsubscript */
+ { 0x01002089, 20130 }, /* ninesubscript */
+ { 0x010020a0, 11776 }, /* EcuSign */
{ 0x010020a1, 8670 }, /* ColonSign */
- { 0x010020a2, 8744 }, /* CruzeiroSign */
- { 0x010020a3, 12416 }, /* FFrancSign */
- { 0x010020a4, 19448 }, /* LiraSign */
- { 0x010020a5, 19724 }, /* MillSign */
- { 0x010020a6, 19967 }, /* NairaSign */
- { 0x010020a7, 21526 }, /* PesetaSign */
- { 0x010020a8, 22569 }, /* RupeeSign */
- { 0x010020a9, 26623 }, /* WonSign */
- { 0x010020aa, 20009 }, /* NewSheqelSign */
- { 0x010020ab, 11258 }, /* DongSign */
- { 0x01002202, 21446 }, /* partdifferential */
- { 0x01002205, 11919 }, /* emptyset */
- { 0x01002208, 11802 }, /* elementof */
- { 0x01002209, 20112 }, /* notelementof */
- { 0x0100220b, 8686 }, /* containsas */
- { 0x0100221a, 23809 }, /* squareroot */
- { 0x0100221b, 8757 }, /* cuberoot */
- { 0x0100221c, 12645 }, /* fourthroot */
- { 0x0100222c, 11232 }, /* dintegral */
- { 0x0100222d, 25585 }, /* tintegral */
+ { 0x010020a2, 8826 }, /* CruzeiroSign */
+ { 0x010020a3, 12498 }, /* FFrancSign */
+ { 0x010020a4, 19530 }, /* LiraSign */
+ { 0x010020a5, 19806 }, /* MillSign */
+ { 0x010020a6, 20049 }, /* NairaSign */
+ { 0x010020a7, 21608 }, /* PesetaSign */
+ { 0x010020a8, 22651 }, /* RupeeSign */
+ { 0x010020a9, 26705 }, /* WonSign */
+ { 0x010020aa, 20091 }, /* NewSheqelSign */
+ { 0x010020ab, 11340 }, /* DongSign */
+ { 0x01002202, 21528 }, /* partdifferential */
+ { 0x01002205, 12001 }, /* emptyset */
+ { 0x01002208, 11884 }, /* elementof */
+ { 0x01002209, 20194 }, /* notelementof */
+ { 0x0100220b, 8768 }, /* containsas */
+ { 0x0100221a, 23891 }, /* squareroot */
+ { 0x0100221b, 8839 }, /* cuberoot */
+ { 0x0100221c, 12727 }, /* fourthroot */
+ { 0x0100222c, 11314 }, /* dintegral */
+ { 0x0100222d, 25667 }, /* tintegral */
{ 0x01002235, 3396 }, /* because */
- { 0x01002247, 20100 }, /* notapproxeq */
+ { 0x01002247, 20182 }, /* notapproxeq */
{ 0x01002248, 945 }, /* approxeq */
- { 0x01002262, 20134 }, /* notidentical */
- { 0x01002263, 23854 }, /* stricteq */
+ { 0x01002262, 20216 }, /* notidentical */
+ { 0x01002263, 23936 }, /* stricteq */
{ 0x01002800, 3628 }, /* braille_blank */
{ 0x01002801, 3783 }, /* braille_dots_1 */
{ 0x01002802, 6151 }, /* braille_dots_2 */
@@ -6847,283 +7453,420 @@ static const struct name_keysym keysym_to_name[] = {
{ 0x010028fd, 5104 }, /* braille_dots_1345678 */
{ 0x010028fe, 6256 }, /* braille_dots_2345678 */
{ 0x010028ff, 3909 }, /* braille_dots_12345678 */
- { 0x100000a8, 16910 }, /* hpmute_acute */
- { 0x100000a9, 16977 }, /* hpmute_grave */
- { 0x100000aa, 16923 }, /* hpmute_asciicircum */
- { 0x100000ab, 16960 }, /* hpmute_diaeresis */
- { 0x100000ac, 16942 }, /* hpmute_asciitilde */
- { 0x100000af, 16867 }, /* hplira */
- { 0x100000be, 16813 }, /* hpguilder */
- { 0x100000ee, 17014 }, /* hpYdiaeresis */
- { 0x100000f6, 16874 }, /* hplongminus */
- { 0x100000fc, 16767 }, /* hpblock */
- { 0x1000fe22, 10414 }, /* Ddiaeresis */
- { 0x1000fe27, 10344 }, /* Dacute_accent */
- { 0x1000fe2c, 10379 }, /* Dcedilla_accent */
- { 0x1000fe5e, 10395 }, /* Dcircumflex_accent */
- { 0x1000fe60, 11189 }, /* Dgrave_accent */
- { 0x1000fe7e, 11417 }, /* Dtilde */
- { 0x1000feb0, 11388 }, /* Dring_accent */
- { 0x1000ff00, 11380 }, /* DRemove */
- { 0x1000ff48, 16886 }, /* hpModelock1 */
- { 0x1000ff49, 16898 }, /* hpModelock2 */
- { 0x1000ff6c, 16990 }, /* hpReset */
- { 0x1000ff6d, 16998 }, /* hpSystem */
- { 0x1000ff6e, 17007 }, /* hpUser */
- { 0x1000ff6f, 16775 }, /* hpClearLine */
- { 0x1000ff70, 16836 }, /* hpInsertLine */
- { 0x1000ff71, 16800 }, /* hpDeleteLine */
- { 0x1000ff72, 16823 }, /* hpInsertChar */
- { 0x1000ff73, 16787 }, /* hpDeleteChar */
- { 0x1000ff74, 16757 }, /* hpBackTab */
- { 0x1000ff75, 16854 }, /* hpKP_BackTab */
- { 0x1000ff76, 12125 }, /* Ext16bit_L */
- { 0x1000ff77, 12136 }, /* Ext16bit_R */
- { 0x1004ff02, 20956 }, /* osfCopy */
- { 0x1004ff03, 20964 }, /* osfCut */
- { 0x1004ff04, 21163 }, /* osfPaste */
- { 0x1004ff07, 20900 }, /* osfBackTab */
- { 0x1004ff08, 20887 }, /* osfBackSpace */
- { 0x1004ff0b, 20947 }, /* osfClear */
- { 0x1004ff1b, 21026 }, /* osfEscape */
- { 0x1004ff31, 20876 }, /* osfAddMode */
- { 0x1004ff32, 21197 }, /* osfPrimaryPaste */
- { 0x1004ff33, 21213 }, /* osfQuickPaste */
- { 0x1004ff40, 21128 }, /* osfPageLeft */
- { 0x1004ff41, 21153 }, /* osfPageUp */
- { 0x1004ff42, 21116 }, /* osfPageDown */
- { 0x1004ff43, 21140 }, /* osfPageRight */
- { 0x1004ff44, 20864 }, /* osfActivate */
- { 0x1004ff45, 21080 }, /* osfMenuBar */
- { 0x1004ff51, 21064 }, /* osfLeft */
- { 0x1004ff52, 21290 }, /* osfUp */
- { 0x1004ff53, 21250 }, /* osfRight */
- { 0x1004ff54, 20996 }, /* osfDown */
- { 0x1004ff57, 21015 }, /* osfEndLine */
- { 0x1004ff58, 20924 }, /* osfBeginLine */
- { 0x1004ff59, 21004 }, /* osfEndData */
- { 0x1004ff5a, 20911 }, /* osfBeginData */
- { 0x1004ff5b, 21185 }, /* osfPrevMenu */
- { 0x1004ff5c, 21104 }, /* osfNextMenu */
- { 0x1004ff5d, 21172 }, /* osfPrevField */
- { 0x1004ff5e, 21091 }, /* osfNextField */
- { 0x1004ff60, 21259 }, /* osfSelect */
- { 0x1004ff63, 21054 }, /* osfInsert */
- { 0x1004ff65, 21282 }, /* osfUndo */
- { 0x1004ff67, 21072 }, /* osfMenu */
- { 0x1004ff69, 20937 }, /* osfCancel */
- { 0x1004ff6a, 21046 }, /* osfHelp */
- { 0x1004ff71, 21269 }, /* osfSelectAll */
- { 0x1004ff72, 20981 }, /* osfDeselectAll */
- { 0x1004ff73, 21227 }, /* osfReselect */
- { 0x1004ff74, 21036 }, /* osfExtend */
- { 0x1004ff78, 21239 }, /* osfRestore */
- { 0x1004ffff, 20971 }, /* osfDelete */
- { 0x1005ff00, 24032 }, /* SunFA_Grave */
- { 0x1005ff01, 24003 }, /* SunFA_Circum */
- { 0x1005ff02, 24044 }, /* SunFA_Tilde */
- { 0x1005ff03, 23977 }, /* SunFA_Acute */
- { 0x1005ff04, 24016 }, /* SunFA_Diaeresis */
- { 0x1005ff05, 23989 }, /* SunFA_Cedilla */
- { 0x1005ff10, 23963 }, /* SunF36 */
- { 0x1005ff11, 23970 }, /* SunF37 */
- { 0x1005ff60, 24180 }, /* SunSys_Req */
- { 0x1005ff70, 24163 }, /* SunProps */
- { 0x1005ff71, 24064 }, /* SunFront */
- { 0x1005ff72, 23948 }, /* SunCopy */
- { 0x1005ff73, 24073 }, /* SunOpen */
- { 0x1005ff74, 24103 }, /* SunPaste */
- { 0x1005ff75, 23956 }, /* SunCut */
- { 0x1005ff76, 24112 }, /* SunPowerSwitch */
- { 0x1005ff77, 23884 }, /* SunAudioLowerVolume */
- { 0x1005ff78, 23904 }, /* SunAudioMute */
- { 0x1005ff79, 23917 }, /* SunAudioRaiseVolume */
- { 0x1005ff7a, 24199 }, /* SunVideoDegauss */
- { 0x1005ff7b, 24215 }, /* SunVideoLowerBrightness */
- { 0x1005ff7c, 24239 }, /* SunVideoRaiseBrightness */
- { 0x1005ff7d, 24127 }, /* SunPowerSwitchShift */
- { 0x1008fe01, 28552 }, /* XF86Switch_VT_1 */
- { 0x1008fe02, 28619 }, /* XF86Switch_VT_2 */
- { 0x1008fe03, 28635 }, /* XF86Switch_VT_3 */
- { 0x1008fe04, 28651 }, /* XF86Switch_VT_4 */
- { 0x1008fe05, 28667 }, /* XF86Switch_VT_5 */
- { 0x1008fe06, 28683 }, /* XF86Switch_VT_6 */
- { 0x1008fe07, 28699 }, /* XF86Switch_VT_7 */
- { 0x1008fe08, 28715 }, /* XF86Switch_VT_8 */
- { 0x1008fe09, 28731 }, /* XF86Switch_VT_9 */
- { 0x1008fe0a, 28568 }, /* XF86Switch_VT_10 */
- { 0x1008fe0b, 28585 }, /* XF86Switch_VT_11 */
- { 0x1008fe0c, 28602 }, /* XF86Switch_VT_12 */
- { 0x1008fe20, 28878 }, /* XF86Ungrab */
- { 0x1008fe21, 27151 }, /* XF86ClearGrab */
- { 0x1008fe22, 28029 }, /* XF86Next_VMode */
- { 0x1008fe23, 28151 }, /* XF86Prev_VMode */
- { 0x1008fe24, 27786 }, /* XF86LogWindowTree */
- { 0x1008fe25, 27759 }, /* XF86LogGrabInfo */
- { 0x1008ff01, 27897 }, /* XF86ModeLock */
- { 0x1008ff02, 27955 }, /* XF86MonBrightnessUp */
- { 0x1008ff03, 27933 }, /* XF86MonBrightnessDown */
- { 0x1008ff04, 27522 }, /* XF86KbdLightOnOff */
- { 0x1008ff05, 27502 }, /* XF86KbdBrightnessUp */
- { 0x1008ff06, 27480 }, /* XF86KbdBrightnessDown */
- { 0x1008ff07, 27910 }, /* XF86MonBrightnessCycle */
- { 0x1008ff10, 28484 }, /* XF86Standby */
- { 0x1008ff11, 26749 }, /* XF86AudioLowerVolume */
- { 0x1008ff12, 26802 }, /* XF86AudioMute */
- { 0x1008ff13, 26889 }, /* XF86AudioRaiseVolume */
- { 0x1008ff14, 26845 }, /* XF86AudioPlay */
- { 0x1008ff15, 26978 }, /* XF86AudioStop */
- { 0x1008ff16, 26875 }, /* XF86AudioPrev */
- { 0x1008ff17, 26816 }, /* XF86AudioNext */
- { 0x1008ff18, 27443 }, /* XF86HomePage */
- { 0x1008ff19, 27804 }, /* XF86Mail */
- { 0x1008ff1a, 28496 }, /* XF86Start */
- { 0x1008ff1b, 28408 }, /* XF86Search */
- { 0x1008ff1c, 26930 }, /* XF86AudioRecord */
- { 0x1008ff1d, 27106 }, /* XF86Calculator */
- { 0x1008ff1e, 27852 }, /* XF86Memo */
- { 0x1008ff1f, 28782 }, /* XF86ToDoList */
- { 0x1008ff20, 27121 }, /* XF86Calendar */
- { 0x1008ff21, 28124 }, /* XF86PowerDown */
- { 0x1008ff22, 27189 }, /* XF86ContrastAdjust */
- { 0x1008ff23, 28255 }, /* XF86RockerUp */
- { 0x1008ff24, 28224 }, /* XF86RockerDown */
- { 0x1008ff25, 28239 }, /* XF86RockerEnter */
- { 0x1008ff26, 27001 }, /* XF86Back */
- { 0x1008ff27, 27333 }, /* XF86Forward */
- { 0x1008ff28, 28506 }, /* XF86Stop */
- { 0x1008ff29, 28180 }, /* XF86Refresh */
- { 0x1008ff2a, 28138 }, /* XF86PowerOff */
- { 0x1008ff2b, 28966 }, /* XF86WakeUp */
- { 0x1008ff2c, 27274 }, /* XF86Eject */
- { 0x1008ff2d, 28348 }, /* XF86ScreenSaver */
- { 0x1008ff2e, 29031 }, /* XF86WWW */
- { 0x1008ff2f, 28448 }, /* XF86Sleep */
- { 0x1008ff30, 27307 }, /* XF86Favorites */
- { 0x1008ff31, 26830 }, /* XF86AudioPause */
- { 0x1008ff32, 26770 }, /* XF86AudioMedia */
- { 0x1008ff33, 27985 }, /* XF86MyComputer */
- { 0x1008ff34, 28932 }, /* XF86VendorHome */
- { 0x1008ff35, 27745 }, /* XF86LightBulb */
- { 0x1008ff36, 28439 }, /* XF86Shop */
- { 0x1008ff37, 27431 }, /* XF86History */
- { 0x1008ff38, 28068 }, /* XF86OpenURL */
- { 0x1008ff39, 26655 }, /* XF86AddFavorite */
- { 0x1008ff3a, 27456 }, /* XF86HotLinks */
- { 0x1008ff3b, 27070 }, /* XF86BrightnessAdjust */
- { 0x1008ff3c, 27321 }, /* XF86Finance */
- { 0x1008ff3d, 27175 }, /* XF86Community */
- { 0x1008ff3e, 26962 }, /* XF86AudioRewind */
- { 0x1008ff3f, 27010 }, /* XF86BackForward */
- { 0x1008ff40, 27553 }, /* XF86Launch0 */
- { 0x1008ff41, 27565 }, /* XF86Launch1 */
- { 0x1008ff42, 27577 }, /* XF86Launch2 */
- { 0x1008ff43, 27589 }, /* XF86Launch3 */
- { 0x1008ff44, 27601 }, /* XF86Launch4 */
- { 0x1008ff45, 27613 }, /* XF86Launch5 */
- { 0x1008ff46, 27625 }, /* XF86Launch6 */
- { 0x1008ff47, 27637 }, /* XF86Launch7 */
- { 0x1008ff48, 27649 }, /* XF86Launch8 */
- { 0x1008ff49, 27661 }, /* XF86Launch9 */
- { 0x1008ff4a, 27673 }, /* XF86LaunchA */
- { 0x1008ff4b, 27685 }, /* XF86LaunchB */
- { 0x1008ff4c, 27697 }, /* XF86LaunchC */
- { 0x1008ff4d, 27709 }, /* XF86LaunchD */
- { 0x1008ff4e, 27721 }, /* XF86LaunchE */
- { 0x1008ff4f, 27733 }, /* XF86LaunchF */
- { 0x1008ff50, 26671 }, /* XF86ApplicationLeft */
- { 0x1008ff51, 26691 }, /* XF86ApplicationRight */
- { 0x1008ff52, 27061 }, /* XF86Book */
- { 0x1008ff53, 27134 }, /* XF86CD */
- { 0x1008ff54, 27091 }, /* XF86Calculater */
- { 0x1008ff55, 27141 }, /* XF86Clear */
- { 0x1008ff56, 27165 }, /* XF86Close */
- { 0x1008ff57, 27208 }, /* XF86Copy */
- { 0x1008ff58, 27217 }, /* XF86Cut */
- { 0x1008ff59, 27240 }, /* XF86Display */
- { 0x1008ff5a, 27266 }, /* XF86DOS */
- { 0x1008ff5b, 27252 }, /* XF86Documents */
- { 0x1008ff5c, 27284 }, /* XF86Excel */
- { 0x1008ff5d, 27294 }, /* XF86Explorer */
- { 0x1008ff5e, 27391 }, /* XF86Game */
- { 0x1008ff5f, 27400 }, /* XF86Go */
- { 0x1008ff60, 27469 }, /* XF86iTouch */
- { 0x1008ff61, 27775 }, /* XF86LogOff */
- { 0x1008ff62, 27829 }, /* XF86Market */
- { 0x1008ff63, 27840 }, /* XF86Meeting */
- { 0x1008ff65, 27861 }, /* XF86MenuKB */
- { 0x1008ff66, 27872 }, /* XF86MenuPB */
- { 0x1008ff67, 28000 }, /* XF86MySites */
- { 0x1008ff68, 28012 }, /* XF86New */
- { 0x1008ff69, 28020 }, /* XF86News */
- { 0x1008ff6a, 28044 }, /* XF86OfficeHome */
- { 0x1008ff6b, 28059 }, /* XF86Open */
- { 0x1008ff6c, 28080 }, /* XF86Option */
- { 0x1008ff6d, 28091 }, /* XF86Paste */
- { 0x1008ff6e, 28101 }, /* XF86Phone */
- { 0x1008ff70, 28166 }, /* XF86Q */
- { 0x1008ff72, 28203 }, /* XF86Reply */
- { 0x1008ff73, 28192 }, /* XF86Reload */
- { 0x1008ff74, 28268 }, /* XF86RotateWindows */
- { 0x1008ff75, 28324 }, /* XF86RotationPB */
- { 0x1008ff76, 28286 }, /* XF86RotationKB */
- { 0x1008ff77, 28339 }, /* XF86Save */
- { 0x1008ff78, 28395 }, /* XF86ScrollUp */
- { 0x1008ff79, 28380 }, /* XF86ScrollDown */
- { 0x1008ff7a, 28364 }, /* XF86ScrollClick */
- { 0x1008ff7b, 28430 }, /* XF86Send */
- { 0x1008ff7c, 28458 }, /* XF86Spell */
- { 0x1008ff7d, 28468 }, /* XF86SplitScreen */
- { 0x1008ff7e, 28528 }, /* XF86Support */
- { 0x1008ff7f, 28747 }, /* XF86TaskPane */
- { 0x1008ff80, 28760 }, /* XF86Terminal */
- { 0x1008ff81, 28795 }, /* XF86Tools */
- { 0x1008ff82, 28867 }, /* XF86Travel */
- { 0x1008ff84, 28913 }, /* XF86UserPB */
- { 0x1008ff85, 28889 }, /* XF86User1KB */
- { 0x1008ff86, 28901 }, /* XF86User2KB */
- { 0x1008ff87, 28947 }, /* XF86Video */
- { 0x1008ff88, 28988 }, /* XF86WheelButton */
- { 0x1008ff89, 29013 }, /* XF86Word */
- { 0x1008ff8a, 29039 }, /* XF86Xfer */
- { 0x1008ff8b, 29059 }, /* XF86ZoomIn */
- { 0x1008ff8c, 29070 }, /* XF86ZoomOut */
- { 0x1008ff8d, 26992 }, /* XF86Away */
- { 0x1008ff8e, 27883 }, /* XF86Messenger */
- { 0x1008ff8f, 28977 }, /* XF86WebCam */
- { 0x1008ff90, 27813 }, /* XF86MailForward */
- { 0x1008ff91, 28111 }, /* XF86Pictures */
- { 0x1008ff92, 27975 }, /* XF86Music */
- { 0x1008ff93, 27026 }, /* XF86Battery */
- { 0x1008ff94, 27047 }, /* XF86Bluetooth */
- { 0x1008ff95, 29004 }, /* XF86WLAN */
- { 0x1008ff96, 28924 }, /* XF86UWB */
- { 0x1008ff97, 26732 }, /* XF86AudioForward */
- { 0x1008ff98, 26946 }, /* XF86AudioRepeat */
- { 0x1008ff99, 26910 }, /* XF86AudioRandomPlay */
- { 0x1008ff9a, 28515 }, /* XF86Subtitle */
- { 0x1008ff9b, 26712 }, /* XF86AudioCycleTrack */
- { 0x1008ff9c, 27225 }, /* XF86CycleAngle */
- { 0x1008ff9d, 27345 }, /* XF86FrameBack */
- { 0x1008ff9e, 27359 }, /* XF86FrameForward */
- { 0x1008ff9f, 28773 }, /* XF86Time */
- { 0x1008ffa0, 28419 }, /* XF86Select */
- { 0x1008ffa1, 28957 }, /* XF86View */
- { 0x1008ffa2, 28805 }, /* XF86TopMenu */
- { 0x1008ffa3, 28172 }, /* XF86Red */
- { 0x1008ffa4, 27407 }, /* XF86Green */
- { 0x1008ffa5, 29048 }, /* XF86Yellow */
- { 0x1008ffa6, 27038 }, /* XF86Blue */
- { 0x1008ffa7, 28540 }, /* XF86Suspend */
- { 0x1008ffa8, 27417 }, /* XF86Hibernate */
- { 0x1008ffa9, 28848 }, /* XF86TouchpadToggle */
- { 0x1008ffb0, 28833 }, /* XF86TouchpadOn */
- { 0x1008ffb1, 28817 }, /* XF86TouchpadOff */
- { 0x1008ffb2, 26785 }, /* XF86AudioMicMute */
- { 0x1008ffb3, 27540 }, /* XF86Keyboard */
- { 0x1008ffb4, 29022 }, /* XF86WWAN */
- { 0x1008ffb5, 28213 }, /* XF86RFKill */
- { 0x1008ffb6, 26859 }, /* XF86AudioPreset */
- { 0x1008ffb7, 28301 }, /* XF86RotationLockToggle */
- { 0x1008ffb8, 27376 }, /* XF86FullScreen */
+ { 0x100000a8, 16992 }, /* hpmute_acute */
+ { 0x100000a9, 17059 }, /* hpmute_grave */
+ { 0x100000aa, 17005 }, /* hpmute_asciicircum */
+ { 0x100000ab, 17042 }, /* hpmute_diaeresis */
+ { 0x100000ac, 17024 }, /* hpmute_asciitilde */
+ { 0x100000af, 16949 }, /* hplira */
+ { 0x100000be, 16895 }, /* hpguilder */
+ { 0x100000ee, 17096 }, /* hpYdiaeresis */
+ { 0x100000f6, 16956 }, /* hplongminus */
+ { 0x100000fc, 16849 }, /* hpblock */
+ { 0x1000fe22, 10496 }, /* Ddiaeresis */
+ { 0x1000fe27, 10426 }, /* Dacute_accent */
+ { 0x1000fe2c, 10461 }, /* Dcedilla_accent */
+ { 0x1000fe5e, 10477 }, /* Dcircumflex_accent */
+ { 0x1000fe60, 11271 }, /* Dgrave_accent */
+ { 0x1000fe7e, 11499 }, /* Dtilde */
+ { 0x1000feb0, 11470 }, /* Dring_accent */
+ { 0x1000ff00, 11462 }, /* DRemove */
+ { 0x1000ff48, 16968 }, /* hpModelock1 */
+ { 0x1000ff49, 16980 }, /* hpModelock2 */
+ { 0x1000ff6c, 17072 }, /* hpReset */
+ { 0x1000ff6d, 17080 }, /* hpSystem */
+ { 0x1000ff6e, 17089 }, /* hpUser */
+ { 0x1000ff6f, 16857 }, /* hpClearLine */
+ { 0x1000ff70, 16918 }, /* hpInsertLine */
+ { 0x1000ff71, 16882 }, /* hpDeleteLine */
+ { 0x1000ff72, 16905 }, /* hpInsertChar */
+ { 0x1000ff73, 16869 }, /* hpDeleteChar */
+ { 0x1000ff74, 16839 }, /* hpBackTab */
+ { 0x1000ff75, 16936 }, /* hpKP_BackTab */
+ { 0x1000ff76, 12207 }, /* Ext16bit_L */
+ { 0x1000ff77, 12218 }, /* Ext16bit_R */
+ { 0x1004ff02, 21038 }, /* osfCopy */
+ { 0x1004ff03, 21046 }, /* osfCut */
+ { 0x1004ff04, 21245 }, /* osfPaste */
+ { 0x1004ff07, 20982 }, /* osfBackTab */
+ { 0x1004ff08, 20969 }, /* osfBackSpace */
+ { 0x1004ff0b, 21029 }, /* osfClear */
+ { 0x1004ff1b, 21108 }, /* osfEscape */
+ { 0x1004ff31, 20958 }, /* osfAddMode */
+ { 0x1004ff32, 21279 }, /* osfPrimaryPaste */
+ { 0x1004ff33, 21295 }, /* osfQuickPaste */
+ { 0x1004ff40, 21210 }, /* osfPageLeft */
+ { 0x1004ff41, 21235 }, /* osfPageUp */
+ { 0x1004ff42, 21198 }, /* osfPageDown */
+ { 0x1004ff43, 21222 }, /* osfPageRight */
+ { 0x1004ff44, 20946 }, /* osfActivate */
+ { 0x1004ff45, 21162 }, /* osfMenuBar */
+ { 0x1004ff51, 21146 }, /* osfLeft */
+ { 0x1004ff52, 21372 }, /* osfUp */
+ { 0x1004ff53, 21332 }, /* osfRight */
+ { 0x1004ff54, 21078 }, /* osfDown */
+ { 0x1004ff57, 21097 }, /* osfEndLine */
+ { 0x1004ff58, 21006 }, /* osfBeginLine */
+ { 0x1004ff59, 21086 }, /* osfEndData */
+ { 0x1004ff5a, 20993 }, /* osfBeginData */
+ { 0x1004ff5b, 21267 }, /* osfPrevMenu */
+ { 0x1004ff5c, 21186 }, /* osfNextMenu */
+ { 0x1004ff5d, 21254 }, /* osfPrevField */
+ { 0x1004ff5e, 21173 }, /* osfNextField */
+ { 0x1004ff60, 21341 }, /* osfSelect */
+ { 0x1004ff63, 21136 }, /* osfInsert */
+ { 0x1004ff65, 21364 }, /* osfUndo */
+ { 0x1004ff67, 21154 }, /* osfMenu */
+ { 0x1004ff69, 21019 }, /* osfCancel */
+ { 0x1004ff6a, 21128 }, /* osfHelp */
+ { 0x1004ff71, 21351 }, /* osfSelectAll */
+ { 0x1004ff72, 21063 }, /* osfDeselectAll */
+ { 0x1004ff73, 21309 }, /* osfReselect */
+ { 0x1004ff74, 21118 }, /* osfExtend */
+ { 0x1004ff78, 21321 }, /* osfRestore */
+ { 0x1004ffff, 21053 }, /* osfDelete */
+ { 0x1005ff00, 24114 }, /* SunFA_Grave */
+ { 0x1005ff01, 24085 }, /* SunFA_Circum */
+ { 0x1005ff02, 24126 }, /* SunFA_Tilde */
+ { 0x1005ff03, 24059 }, /* SunFA_Acute */
+ { 0x1005ff04, 24098 }, /* SunFA_Diaeresis */
+ { 0x1005ff05, 24071 }, /* SunFA_Cedilla */
+ { 0x1005ff10, 24045 }, /* SunF36 */
+ { 0x1005ff11, 24052 }, /* SunF37 */
+ { 0x1005ff60, 24262 }, /* SunSys_Req */
+ { 0x1005ff70, 24245 }, /* SunProps */
+ { 0x1005ff71, 24146 }, /* SunFront */
+ { 0x1005ff72, 24030 }, /* SunCopy */
+ { 0x1005ff73, 24155 }, /* SunOpen */
+ { 0x1005ff74, 24185 }, /* SunPaste */
+ { 0x1005ff75, 24038 }, /* SunCut */
+ { 0x1005ff76, 24194 }, /* SunPowerSwitch */
+ { 0x1005ff77, 23966 }, /* SunAudioLowerVolume */
+ { 0x1005ff78, 23986 }, /* SunAudioMute */
+ { 0x1005ff79, 23999 }, /* SunAudioRaiseVolume */
+ { 0x1005ff7a, 24281 }, /* SunVideoDegauss */
+ { 0x1005ff7b, 24297 }, /* SunVideoLowerBrightness */
+ { 0x1005ff7c, 24321 }, /* SunVideoRaiseBrightness */
+ { 0x1005ff7d, 24209 }, /* SunPowerSwitchShift */
+ { 0x100810f4, 27381 }, /* XF86BrightnessAuto */
+ { 0x100810f5, 27809 }, /* XF86DisplayOff */
+ { 0x10081166, 28175 }, /* XF86Info */
+ { 0x10081177, 26885 }, /* XF86AspectRatio */
+ { 0x10081185, 27864 }, /* XF86DVD */
+ { 0x10081188, 26968 }, /* XF86Audio */
+ { 0x10081192, 27629 }, /* XF86ChannelUp */
+ { 0x10081193, 27613 }, /* XF86ChannelDown */
+ { 0x1008119b, 27350 }, /* XF86Break */
+ { 0x100811a0, 30983 }, /* XF86VideoPhone */
+ { 0x100811a4, 31176 }, /* XF86ZoomReset */
+ { 0x100811a6, 27872 }, /* XF86Editor */
+ { 0x100811a8, 28067 }, /* XF86GraphicsEditor */
+ { 0x100811a9, 29984 }, /* XF86Presentation */
+ { 0x100811aa, 27784 }, /* XF86Database */
+ { 0x100811ac, 31032 }, /* XF86Voicemail */
+ { 0x100811ad, 26800 }, /* XF86Addressbook */
+ { 0x100811af, 27824 }, /* XF86DisplayToggle */
+ { 0x100811b0, 30437 }, /* XF86SpellCheck */
+ { 0x100811b6, 27691 }, /* XF86ContextMenu */
+ { 0x100811b7, 29304 }, /* XF86MediaRepeat */
+ { 0x100811b8, 26756 }, /* XF8610ChannelsUp */
+ { 0x100811b9, 26737 }, /* XF8610ChannelsDown */
+ { 0x100811ba, 28164 }, /* XF86Images */
+ { 0x100811bc, 29558 }, /* XF86NotificationCenter */
+ { 0x100811bd, 29928 }, /* XF86PickupPhone */
+ { 0x100811be, 28096 }, /* XF86HangupPhone */
+ { 0x100811d0, 27958 }, /* XF86Fn */
+ { 0x100811d1, 27965 }, /* XF86Fn_Esc */
+ { 0x100811e5, 27976 }, /* XF86FnRightShift */
+ { 0x10081200, 29581 }, /* XF86Numeric0 */
+ { 0x10081201, 29594 }, /* XF86Numeric1 */
+ { 0x10081202, 29635 }, /* XF86Numeric2 */
+ { 0x10081203, 29648 }, /* XF86Numeric3 */
+ { 0x10081204, 29661 }, /* XF86Numeric4 */
+ { 0x10081205, 29674 }, /* XF86Numeric5 */
+ { 0x10081206, 29687 }, /* XF86Numeric6 */
+ { 0x10081207, 29700 }, /* XF86Numeric7 */
+ { 0x10081208, 29713 }, /* XF86Numeric8 */
+ { 0x10081209, 29726 }, /* XF86Numeric9 */
+ { 0x1008120a, 29808 }, /* XF86NumericStar */
+ { 0x1008120b, 29791 }, /* XF86NumericPound */
+ { 0x1008120c, 29739 }, /* XF86NumericA */
+ { 0x1008120d, 29752 }, /* XF86NumericB */
+ { 0x1008120e, 29765 }, /* XF86NumericC */
+ { 0x1008120f, 29778 }, /* XF86NumericD */
+ { 0x10081210, 27511 }, /* XF86CameraFocus */
+ { 0x10081211, 31102 }, /* XF86WPSButton */
+ { 0x10081215, 27571 }, /* XF86CameraZoomIn */
+ { 0x10081216, 27588 }, /* XF86CameraZoomOut */
+ { 0x10081217, 27558 }, /* XF86CameraUp */
+ { 0x10081218, 27496 }, /* XF86CameraDown */
+ { 0x10081219, 27527 }, /* XF86CameraLeft */
+ { 0x1008121a, 27542 }, /* XF86CameraRight */
+ { 0x1008121b, 26932 }, /* XF86AttendantOn */
+ { 0x1008121c, 26915 }, /* XF86AttendantOff */
+ { 0x1008121d, 26948 }, /* XF86AttendantToggle */
+ { 0x1008121e, 28742 }, /* XF86LightsToggle */
+ { 0x10081230, 26816 }, /* XF86ALSToggle */
+ { 0x10081240, 27436 }, /* XF86Buttonconfig */
+ { 0x10081241, 30746 }, /* XF86Taskmanager */
+ { 0x10081242, 28195 }, /* XF86Journal */
+ { 0x10081243, 27726 }, /* XF86ControlPanel */
+ { 0x10081244, 26871 }, /* XF86AppSelect */
+ { 0x10081245, 30277 }, /* XF86Screensaver */
+ { 0x10081246, 31015 }, /* XF86VoiceCommand */
+ { 0x10081247, 26901 }, /* XF86Assistant */
+ { 0x10081250, 27418 }, /* XF86BrightnessMin */
+ { 0x10081251, 27400 }, /* XF86BrightnessMax */
+ { 0x10081260, 28350 }, /* XF86KbdInputAssistPrev */
+ { 0x10081261, 28299 }, /* XF86KbdInputAssistNext */
+ { 0x10081262, 28373 }, /* XF86KbdInputAssistPrevgroup */
+ { 0x10081263, 28322 }, /* XF86KbdInputAssistNextgroup */
+ { 0x10081264, 28249 }, /* XF86KbdInputAssistAccept */
+ { 0x10081265, 28274 }, /* XF86KbdInputAssistCancel */
+ { 0x10081266, 30112 }, /* XF86RightUp */
+ { 0x10081267, 30098 }, /* XF86RightDown */
+ { 0x10081268, 28717 }, /* XF86LeftUp */
+ { 0x10081269, 28704 }, /* XF86LeftDown */
+ { 0x1008126a, 30168 }, /* XF86RootMenu */
+ { 0x1008126b, 29320 }, /* XF86MediaTopMenu */
+ { 0x1008126c, 29607 }, /* XF86Numeric11 */
+ { 0x1008126d, 29621 }, /* XF86Numeric12 */
+ { 0x1008126e, 26998 }, /* XF86AudioDesc */
+ { 0x1008126f, 26773 }, /* XF863DMode */
+ { 0x10081270, 29541 }, /* XF86NextFavorite */
+ { 0x10081271, 30499 }, /* XF86StopRecord */
+ { 0x10081272, 29902 }, /* XF86PauseRecord */
+ { 0x10081273, 31007 }, /* XF86VOD */
+ { 0x10081274, 30904 }, /* XF86Unmute */
+ { 0x10081275, 27916 }, /* XF86FastReverse */
+ { 0x10081276, 30411 }, /* XF86SlowReverse */
+ { 0x10081277, 27775 }, /* XF86Data */
+ { 0x10081278, 29839 }, /* XF86OnScreenKeyboard */
+ { 0x10081279, 30016 }, /* XF86PrivacyScreenToggle */
+ { 0x1008127a, 30359 }, /* XF86SelectiveScreenshot */
+ { 0x10081290, 28804 }, /* XF86Macro1 */
+ { 0x10081291, 28935 }, /* XF86Macro2 */
+ { 0x10081292, 29066 }, /* XF86Macro3 */
+ { 0x10081293, 29089 }, /* XF86Macro4 */
+ { 0x10081294, 29100 }, /* XF86Macro5 */
+ { 0x10081295, 29111 }, /* XF86Macro6 */
+ { 0x10081296, 29122 }, /* XF86Macro7 */
+ { 0x10081297, 29133 }, /* XF86Macro8 */
+ { 0x10081298, 29144 }, /* XF86Macro9 */
+ { 0x10081299, 28815 }, /* XF86Macro10 */
+ { 0x1008129a, 28827 }, /* XF86Macro11 */
+ { 0x1008129b, 28839 }, /* XF86Macro12 */
+ { 0x1008129c, 28851 }, /* XF86Macro13 */
+ { 0x1008129d, 28863 }, /* XF86Macro14 */
+ { 0x1008129e, 28875 }, /* XF86Macro15 */
+ { 0x1008129f, 28887 }, /* XF86Macro16 */
+ { 0x100812a0, 28899 }, /* XF86Macro17 */
+ { 0x100812a1, 28911 }, /* XF86Macro18 */
+ { 0x100812a2, 28923 }, /* XF86Macro19 */
+ { 0x100812a3, 28946 }, /* XF86Macro20 */
+ { 0x100812a4, 28958 }, /* XF86Macro21 */
+ { 0x100812a5, 28970 }, /* XF86Macro22 */
+ { 0x100812a6, 28982 }, /* XF86Macro23 */
+ { 0x100812a7, 28994 }, /* XF86Macro24 */
+ { 0x100812a8, 29006 }, /* XF86Macro25 */
+ { 0x100812a9, 29018 }, /* XF86Macro26 */
+ { 0x100812aa, 29030 }, /* XF86Macro27 */
+ { 0x100812ab, 29042 }, /* XF86Macro28 */
+ { 0x100812ac, 29054 }, /* XF86Macro29 */
+ { 0x100812ad, 29077 }, /* XF86Macro30 */
+ { 0x100812b0, 29227 }, /* XF86MacroRecordStart */
+ { 0x100812b1, 29248 }, /* XF86MacroRecordStop */
+ { 0x100812b2, 29206 }, /* XF86MacroPresetCycle */
+ { 0x100812b3, 29155 }, /* XF86MacroPreset1 */
+ { 0x100812b4, 29172 }, /* XF86MacroPreset2 */
+ { 0x100812b5, 29189 }, /* XF86MacroPreset3 */
+ { 0x100812b8, 28401 }, /* XF86KbdLcdMenu1 */
+ { 0x100812b9, 28417 }, /* XF86KbdLcdMenu2 */
+ { 0x100812ba, 28433 }, /* XF86KbdLcdMenu3 */
+ { 0x100812bb, 28449 }, /* XF86KbdLcdMenu4 */
+ { 0x100812bc, 28465 }, /* XF86KbdLcdMenu5 */
+ { 0x1008fe01, 30551 }, /* XF86Switch_VT_1 */
+ { 0x1008fe02, 30618 }, /* XF86Switch_VT_2 */
+ { 0x1008fe03, 30634 }, /* XF86Switch_VT_3 */
+ { 0x1008fe04, 30650 }, /* XF86Switch_VT_4 */
+ { 0x1008fe05, 30666 }, /* XF86Switch_VT_5 */
+ { 0x1008fe06, 30682 }, /* XF86Switch_VT_6 */
+ { 0x1008fe07, 30698 }, /* XF86Switch_VT_7 */
+ { 0x1008fe08, 30714 }, /* XF86Switch_VT_8 */
+ { 0x1008fe09, 30730 }, /* XF86Switch_VT_9 */
+ { 0x1008fe0a, 30567 }, /* XF86Switch_VT_10 */
+ { 0x1008fe0b, 30584 }, /* XF86Switch_VT_11 */
+ { 0x1008fe0c, 30601 }, /* XF86Switch_VT_12 */
+ { 0x1008fe20, 30893 }, /* XF86Ungrab */
+ { 0x1008fe21, 27653 }, /* XF86ClearGrab */
+ { 0x1008fe22, 29526 }, /* XF86Next_VMode */
+ { 0x1008fe23, 30001 }, /* XF86Prev_VMode */
+ { 0x1008fe24, 28786 }, /* XF86LogWindowTree */
+ { 0x1008fe25, 28759 }, /* XF86LogGrabInfo */
+ { 0x1008ff01, 29394 }, /* XF86ModeLock */
+ { 0x1008ff02, 29452 }, /* XF86MonBrightnessUp */
+ { 0x1008ff03, 29430 }, /* XF86MonBrightnessDown */
+ { 0x1008ff04, 28481 }, /* XF86KbdLightOnOff */
+ { 0x1008ff05, 28229 }, /* XF86KbdBrightnessUp */
+ { 0x1008ff06, 28207 }, /* XF86KbdBrightnessDown */
+ { 0x1008ff07, 29407 }, /* XF86MonBrightnessCycle */
+ { 0x1008ff10, 30468 }, /* XF86Standby */
+ { 0x1008ff11, 27029 }, /* XF86AudioLowerVolume */
+ { 0x1008ff12, 27082 }, /* XF86AudioMute */
+ { 0x1008ff13, 27169 }, /* XF86AudioRaiseVolume */
+ { 0x1008ff14, 27125 }, /* XF86AudioPlay */
+ { 0x1008ff15, 27258 }, /* XF86AudioStop */
+ { 0x1008ff16, 27155 }, /* XF86AudioPrev */
+ { 0x1008ff17, 27096 }, /* XF86AudioNext */
+ { 0x1008ff18, 28138 }, /* XF86HomePage */
+ { 0x1008ff19, 29268 }, /* XF86Mail */
+ { 0x1008ff1a, 30480 }, /* XF86Start */
+ { 0x1008ff1b, 30337 }, /* XF86Search */
+ { 0x1008ff1c, 27210 }, /* XF86AudioRecord */
+ { 0x1008ff1d, 27468 }, /* XF86Calculator */
+ { 0x1008ff1e, 29349 }, /* XF86Memo */
+ { 0x1008ff1f, 30797 }, /* XF86ToDoList */
+ { 0x1008ff20, 27483 }, /* XF86Calendar */
+ { 0x1008ff21, 29957 }, /* XF86PowerDown */
+ { 0x1008ff22, 27707 }, /* XF86ContrastAdjust */
+ { 0x1008ff23, 30155 }, /* XF86RockerUp */
+ { 0x1008ff24, 30124 }, /* XF86RockerDown */
+ { 0x1008ff25, 30139 }, /* XF86RockerEnter */
+ { 0x1008ff26, 27281 }, /* XF86Back */
+ { 0x1008ff27, 27993 }, /* XF86Forward */
+ { 0x1008ff28, 30490 }, /* XF86Stop */
+ { 0x1008ff29, 30054 }, /* XF86Refresh */
+ { 0x1008ff2a, 29971 }, /* XF86PowerOff */
+ { 0x1008ff2b, 31046 }, /* XF86WakeUp */
+ { 0x1008ff2c, 27883 }, /* XF86Eject */
+ { 0x1008ff2d, 30261 }, /* XF86ScreenSaver */
+ { 0x1008ff2e, 31125 }, /* XF86WWW */
+ { 0x1008ff2f, 30401 }, /* XF86Sleep */
+ { 0x1008ff30, 27932 }, /* XF86Favorites */
+ { 0x1008ff31, 27110 }, /* XF86AudioPause */
+ { 0x1008ff32, 27050 }, /* XF86AudioMedia */
+ { 0x1008ff33, 29482 }, /* XF86MyComputer */
+ { 0x1008ff34, 30958 }, /* XF86VendorHome */
+ { 0x1008ff35, 28728 }, /* XF86LightBulb */
+ { 0x1008ff36, 30392 }, /* XF86Shop */
+ { 0x1008ff37, 28126 }, /* XF86History */
+ { 0x1008ff38, 29869 }, /* XF86OpenURL */
+ { 0x1008ff39, 26784 }, /* XF86AddFavorite */
+ { 0x1008ff3a, 28151 }, /* XF86HotLinks */
+ { 0x1008ff3b, 27360 }, /* XF86BrightnessAdjust */
+ { 0x1008ff3c, 27946 }, /* XF86Finance */
+ { 0x1008ff3d, 27677 }, /* XF86Community */
+ { 0x1008ff3e, 27242 }, /* XF86AudioRewind */
+ { 0x1008ff3f, 27290 }, /* XF86BackForward */
+ { 0x1008ff40, 28512 }, /* XF86Launch0 */
+ { 0x1008ff41, 28524 }, /* XF86Launch1 */
+ { 0x1008ff42, 28536 }, /* XF86Launch2 */
+ { 0x1008ff43, 28548 }, /* XF86Launch3 */
+ { 0x1008ff44, 28560 }, /* XF86Launch4 */
+ { 0x1008ff45, 28572 }, /* XF86Launch5 */
+ { 0x1008ff46, 28584 }, /* XF86Launch6 */
+ { 0x1008ff47, 28596 }, /* XF86Launch7 */
+ { 0x1008ff48, 28608 }, /* XF86Launch8 */
+ { 0x1008ff49, 28620 }, /* XF86Launch9 */
+ { 0x1008ff4a, 28632 }, /* XF86LaunchA */
+ { 0x1008ff4b, 28644 }, /* XF86LaunchB */
+ { 0x1008ff4c, 28656 }, /* XF86LaunchC */
+ { 0x1008ff4d, 28668 }, /* XF86LaunchD */
+ { 0x1008ff4e, 28680 }, /* XF86LaunchE */
+ { 0x1008ff4f, 28692 }, /* XF86LaunchF */
+ { 0x1008ff50, 26830 }, /* XF86ApplicationLeft */
+ { 0x1008ff51, 26850 }, /* XF86ApplicationRight */
+ { 0x1008ff52, 27341 }, /* XF86Book */
+ { 0x1008ff53, 27606 }, /* XF86CD */
+ { 0x1008ff54, 27453 }, /* XF86Calculater */
+ { 0x1008ff55, 27643 }, /* XF86Clear */
+ { 0x1008ff56, 27667 }, /* XF86Close */
+ { 0x1008ff57, 27743 }, /* XF86Copy */
+ { 0x1008ff58, 27752 }, /* XF86Cut */
+ { 0x1008ff59, 27797 }, /* XF86Display */
+ { 0x1008ff5a, 27856 }, /* XF86DOS */
+ { 0x1008ff5b, 27842 }, /* XF86Documents */
+ { 0x1008ff5c, 27893 }, /* XF86Excel */
+ { 0x1008ff5d, 27903 }, /* XF86Explorer */
+ { 0x1008ff5e, 28051 }, /* XF86Game */
+ { 0x1008ff5f, 28060 }, /* XF86Go */
+ { 0x1008ff60, 28184 }, /* XF86iTouch */
+ { 0x1008ff61, 28775 }, /* XF86LogOff */
+ { 0x1008ff62, 29293 }, /* XF86Market */
+ { 0x1008ff63, 29337 }, /* XF86Meeting */
+ { 0x1008ff65, 29358 }, /* XF86MenuKB */
+ { 0x1008ff66, 29369 }, /* XF86MenuPB */
+ { 0x1008ff67, 29497 }, /* XF86MySites */
+ { 0x1008ff68, 29509 }, /* XF86New */
+ { 0x1008ff69, 29517 }, /* XF86News */
+ { 0x1008ff6a, 29824 }, /* XF86OfficeHome */
+ { 0x1008ff6b, 29860 }, /* XF86Open */
+ { 0x1008ff6c, 29881 }, /* XF86Option */
+ { 0x1008ff6d, 29892 }, /* XF86Paste */
+ { 0x1008ff6e, 29918 }, /* XF86Phone */
+ { 0x1008ff70, 30040 }, /* XF86Q */
+ { 0x1008ff72, 30077 }, /* XF86Reply */
+ { 0x1008ff73, 30066 }, /* XF86Reload */
+ { 0x1008ff74, 30181 }, /* XF86RotateWindows */
+ { 0x1008ff75, 30237 }, /* XF86RotationPB */
+ { 0x1008ff76, 30199 }, /* XF86RotationKB */
+ { 0x1008ff77, 30252 }, /* XF86Save */
+ { 0x1008ff78, 30324 }, /* XF86ScrollUp */
+ { 0x1008ff79, 30309 }, /* XF86ScrollDown */
+ { 0x1008ff7a, 30293 }, /* XF86ScrollClick */
+ { 0x1008ff7b, 30383 }, /* XF86Send */
+ { 0x1008ff7c, 30427 }, /* XF86Spell */
+ { 0x1008ff7d, 30452 }, /* XF86SplitScreen */
+ { 0x1008ff7e, 30527 }, /* XF86Support */
+ { 0x1008ff7f, 30762 }, /* XF86TaskPane */
+ { 0x1008ff80, 30775 }, /* XF86Terminal */
+ { 0x1008ff81, 30810 }, /* XF86Tools */
+ { 0x1008ff82, 30882 }, /* XF86Travel */
+ { 0x1008ff84, 30939 }, /* XF86UserPB */
+ { 0x1008ff85, 30915 }, /* XF86User1KB */
+ { 0x1008ff86, 30927 }, /* XF86User2KB */
+ { 0x1008ff87, 30973 }, /* XF86Video */
+ { 0x1008ff88, 31068 }, /* XF86WheelButton */
+ { 0x1008ff89, 31093 }, /* XF86Word */
+ { 0x1008ff8a, 31133 }, /* XF86Xfer */
+ { 0x1008ff8b, 31153 }, /* XF86ZoomIn */
+ { 0x1008ff8c, 31164 }, /* XF86ZoomOut */
+ { 0x1008ff8d, 27272 }, /* XF86Away */
+ { 0x1008ff8e, 29380 }, /* XF86Messenger */
+ { 0x1008ff8f, 31057 }, /* XF86WebCam */
+ { 0x1008ff90, 29277 }, /* XF86MailForward */
+ { 0x1008ff91, 29944 }, /* XF86Pictures */
+ { 0x1008ff92, 29472 }, /* XF86Music */
+ { 0x1008ff93, 27306 }, /* XF86Battery */
+ { 0x1008ff94, 27327 }, /* XF86Bluetooth */
+ { 0x1008ff95, 31084 }, /* XF86WLAN */
+ { 0x1008ff96, 30950 }, /* XF86UWB */
+ { 0x1008ff97, 27012 }, /* XF86AudioForward */
+ { 0x1008ff98, 27226 }, /* XF86AudioRepeat */
+ { 0x1008ff99, 27190 }, /* XF86AudioRandomPlay */
+ { 0x1008ff9a, 30514 }, /* XF86Subtitle */
+ { 0x1008ff9b, 26978 }, /* XF86AudioCycleTrack */
+ { 0x1008ff9c, 27760 }, /* XF86CycleAngle */
+ { 0x1008ff9d, 28005 }, /* XF86FrameBack */
+ { 0x1008ff9e, 28019 }, /* XF86FrameForward */
+ { 0x1008ff9f, 30788 }, /* XF86Time */
+ { 0x1008ffa0, 30348 }, /* XF86Select */
+ { 0x1008ffa1, 30998 }, /* XF86View */
+ { 0x1008ffa2, 30820 }, /* XF86TopMenu */
+ { 0x1008ffa3, 30046 }, /* XF86Red */
+ { 0x1008ffa4, 28086 }, /* XF86Green */
+ { 0x1008ffa5, 31142 }, /* XF86Yellow */
+ { 0x1008ffa6, 27318 }, /* XF86Blue */
+ { 0x1008ffa7, 30539 }, /* XF86Suspend */
+ { 0x1008ffa8, 28112 }, /* XF86Hibernate */
+ { 0x1008ffa9, 30863 }, /* XF86TouchpadToggle */
+ { 0x1008ffb0, 30848 }, /* XF86TouchpadOn */
+ { 0x1008ffb1, 30832 }, /* XF86TouchpadOff */
+ { 0x1008ffb2, 27065 }, /* XF86AudioMicMute */
+ { 0x1008ffb3, 28499 }, /* XF86Keyboard */
+ { 0x1008ffb4, 31116 }, /* XF86WWAN */
+ { 0x1008ffb5, 30087 }, /* XF86RFKill */
+ { 0x1008ffb6, 27139 }, /* XF86AudioPreset */
+ { 0x1008ffb7, 30214 }, /* XF86RotationLockToggle */
+ { 0x1008ffb8, 28036 }, /* XF86FullScreen */
};
diff --git a/src/registry.c b/src/registry.c
index dcaaa1b..dbaac2a 100644
--- a/src/registry.c
+++ b/src/registry.c
@@ -742,6 +742,10 @@ parse_config_item(struct rxkb_context *ctx,
if (!*name || !strlen(*name)) {
log_err(ctx, "xml:%d: missing required element 'name'\n",
ci->line);
+ free(*name);
+ free(*description);
+ free(*brief);
+ free(*vendor);
return false;
}
@@ -804,6 +808,11 @@ parse_language_list(xmlNode *language_list, struct rxkb_layout *layout)
char *str = extract_text(node);
struct rxkb_object *parent;
+ if (!str || strlen(str) != 3) {
+ free(str);
+ continue;
+ }
+
parent = &layout->base;
code = rxkb_iso639_code_create(parent);
code->code = str;
@@ -823,6 +832,11 @@ parse_country_list(xmlNode *country_list, struct rxkb_layout *layout)
char *str = extract_text(node);
struct rxkb_object *parent;
+ if (!str || strlen(str) != 2) {
+ free(str);
+ continue;
+ }
+
parent = &layout->base;
code = rxkb_iso3166_code_create(parent);
code->code = str;
@@ -856,7 +870,8 @@ parse_variant(struct rxkb_context *ctx, struct rxkb_layout *l,
v->name = strdup(l->name);
v->variant = name;
v->description = description;
- v->brief = brief;
+ // if variant omits brief, inherit from parent layout.
+ v->brief = brief == NULL ? strdup_safe(l->brief) : brief;
v->popularity = popularity;
list_append(&ctx->layouts, &v->base.link);
@@ -866,11 +881,35 @@ parse_variant(struct rxkb_context *ctx, struct rxkb_layout *l,
if (!is_node(ci, "configItem"))
continue;
+ bool found_language_list = false;
+ bool found_country_list = false;
for (node = ci->children; node; node = node->next) {
- if (is_node(node, "languageList"))
+ if (is_node(node, "languageList")) {
parse_language_list(node, v);
- if (is_node(node, "countryList"))
+ found_language_list = true;
+ }
+ if (is_node(node, "countryList")) {
parse_country_list(node, v);
+ found_country_list = true;
+ }
+ }
+ if (!found_language_list) {
+ // inherit from parent layout
+ struct rxkb_iso639_code* x;
+ list_for_each(x, &l->iso639s, base.link) {
+ struct rxkb_iso639_code* code = rxkb_iso639_code_create(&v->base);
+ code->code = strdup(x->code);
+ list_append(&v->iso639s, &code->base.link);
+ }
+ }
+ if (!found_country_list) {
+ // inherit from parent layout
+ struct rxkb_iso3166_code* x;
+ list_for_each(x, &l->iso3166s, base.link) {
+ struct rxkb_iso3166_code* code = rxkb_iso3166_code_create(&v->base);
+ code->code = strdup(x->code);
+ list_append(&v->iso3166s, &code->base.link);
+ }
}
}
} else {
@@ -1193,7 +1232,6 @@ parse(struct rxkb_context *ctx, const char *path,
success = true;
error:
xmlFreeDoc(doc);
- xmlCleanupParser();
return success;
}
diff --git a/src/utils.h b/src/utils.h
index cd3e9b1..7557dab 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -66,6 +66,7 @@ istrncmp(const char *a, const char *b, size_t n);
static inline bool
streq(const char *s1, const char *s2)
{
+ assert(s1 && s2);
return strcmp(s1, s2) == 0;
}
diff --git a/src/x11/keymap.c b/src/x11/keymap.c
index f5b368f..473a89d 100644
--- a/src/x11/keymap.c
+++ b/src/x11/keymap.c
@@ -88,6 +88,33 @@
} \
} while (0)
+static const xcb_xkb_map_part_t get_map_required_components =
+ (XCB_XKB_MAP_PART_KEY_TYPES |
+ XCB_XKB_MAP_PART_KEY_SYMS |
+ XCB_XKB_MAP_PART_MODIFIER_MAP |
+ XCB_XKB_MAP_PART_EXPLICIT_COMPONENTS |
+ XCB_XKB_MAP_PART_KEY_ACTIONS |
+ XCB_XKB_MAP_PART_VIRTUAL_MODS |
+ XCB_XKB_MAP_PART_VIRTUAL_MOD_MAP);
+
+static const xcb_xkb_name_detail_t get_names_wanted =
+ (XCB_XKB_NAME_DETAIL_KEYCODES |
+ XCB_XKB_NAME_DETAIL_SYMBOLS |
+ XCB_XKB_NAME_DETAIL_TYPES |
+ XCB_XKB_NAME_DETAIL_COMPAT |
+ XCB_XKB_NAME_DETAIL_KEY_TYPE_NAMES |
+ XCB_XKB_NAME_DETAIL_KT_LEVEL_NAMES |
+ XCB_XKB_NAME_DETAIL_INDICATOR_NAMES |
+ XCB_XKB_NAME_DETAIL_KEY_NAMES |
+ XCB_XKB_NAME_DETAIL_KEY_ALIASES |
+ XCB_XKB_NAME_DETAIL_VIRTUAL_MOD_NAMES |
+ XCB_XKB_NAME_DETAIL_GROUP_NAMES);
+static const xcb_xkb_name_detail_t get_names_required =
+ (XCB_XKB_NAME_DETAIL_KEY_TYPE_NAMES |
+ XCB_XKB_NAME_DETAIL_KT_LEVEL_NAMES |
+ XCB_XKB_NAME_DETAIL_KEY_NAMES |
+ XCB_XKB_NAME_DETAIL_VIRTUAL_MOD_NAMES);
+
static xkb_mod_mask_t
translate_mods(uint8_t rmods, uint16_t vmods_low, uint16_t vmods_high)
@@ -645,26 +672,15 @@ fail:
}
static bool
-get_map(struct xkb_keymap *keymap, xcb_connection_t *conn, uint16_t device_id)
+get_map(struct xkb_keymap *keymap, xcb_connection_t *conn,
+ xcb_xkb_get_map_cookie_t cookie)
{
- static const xcb_xkb_map_part_t required_components =
- (XCB_XKB_MAP_PART_KEY_TYPES |
- XCB_XKB_MAP_PART_KEY_SYMS |
- XCB_XKB_MAP_PART_MODIFIER_MAP |
- XCB_XKB_MAP_PART_EXPLICIT_COMPONENTS |
- XCB_XKB_MAP_PART_KEY_ACTIONS |
- XCB_XKB_MAP_PART_VIRTUAL_MODS |
- XCB_XKB_MAP_PART_VIRTUAL_MOD_MAP);
-
- xcb_xkb_get_map_cookie_t cookie =
- xcb_xkb_get_map(conn, device_id, required_components,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
xcb_xkb_get_map_reply_t *reply = xcb_xkb_get_map_reply(conn, cookie, NULL);
xcb_xkb_get_map_map_t map;
FAIL_IF_BAD_REPLY(reply, "XkbGetMap");
- if ((reply->present & required_components) != required_components)
+ if ((reply->present & get_map_required_components) != get_map_required_components)
goto fail;
xcb_xkb_get_map_map_unpack(xcb_xkb_get_map_map(reply),
@@ -749,10 +765,8 @@ get_indicators(struct xkb_keymap *keymap, xcb_connection_t *conn,
static bool
get_indicator_map(struct xkb_keymap *keymap, xcb_connection_t *conn,
- uint16_t device_id)
+ xcb_xkb_get_indicator_map_cookie_t cookie)
{
- xcb_xkb_get_indicator_map_cookie_t cookie =
- xcb_xkb_get_indicator_map(conn, device_id, ALL_INDICATORS_MASK);
xcb_xkb_get_indicator_map_reply_t *reply =
xcb_xkb_get_indicator_map_reply(conn, cookie, NULL);
@@ -831,10 +845,8 @@ fail:
static bool
get_compat_map(struct xkb_keymap *keymap, xcb_connection_t *conn,
- uint16_t device_id)
+ xcb_xkb_get_compat_map_cookie_t cookie)
{
- xcb_xkb_get_compat_map_cookie_t cookie =
- xcb_xkb_get_compat_map(conn, device_id, 0, true, 0, 0);
xcb_xkb_get_compat_map_reply_t *reply =
xcb_xkb_get_compat_map_reply(conn, cookie, NULL);
@@ -852,7 +864,7 @@ fail:
}
static bool
-get_type_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
+get_type_names(struct xkb_keymap *keymap, struct x11_atom_interner *interner,
xcb_xkb_get_names_reply_t *reply,
xcb_xkb_get_names_value_list_t *list)
{
@@ -880,13 +892,11 @@ get_type_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
ALLOC_OR_FAIL(type->level_names, type->num_levels);
- if (!adopt_atom(keymap->ctx, conn, wire_type_name, &type->name))
- goto fail;
-
- if (!adopt_atoms(keymap->ctx, conn,
- kt_level_names_iter, type->level_names,
- wire_num_levels))
- goto fail;
+ x11_atom_interner_adopt_atom(interner, wire_type_name, &type->name);
+ for (size_t j = 0; j < wire_num_levels; j++) {
+ x11_atom_interner_adopt_atom(interner, kt_level_names_iter[j],
+ &type->level_names[j]);
+ }
type->num_level_names = type->num_levels;
kt_level_names_iter += wire_num_levels;
@@ -901,7 +911,8 @@ fail:
}
static bool
-get_indicator_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
+get_indicator_names(struct xkb_keymap *keymap,
+ struct x11_atom_interner *interner,
xcb_xkb_get_names_reply_t *reply,
xcb_xkb_get_names_value_list_t *list)
{
@@ -914,8 +925,7 @@ get_indicator_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
xcb_atom_t wire = *iter;
struct xkb_led *led = &keymap->leds[i];
- if (!adopt_atom(keymap->ctx, conn, wire, &led->name))
- return false;
+ x11_atom_interner_adopt_atom(interner, wire, &led->name);
iter++;
}
@@ -928,7 +938,7 @@ fail:
}
static bool
-get_vmod_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
+get_vmod_names(struct xkb_keymap *keymap, struct x11_atom_interner *interner,
xcb_xkb_get_names_reply_t *reply,
xcb_xkb_get_names_value_list_t *list)
{
@@ -947,8 +957,7 @@ get_vmod_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
xcb_atom_t wire = *iter;
struct xkb_mod *mod = &keymap->mods.mods[NUM_REAL_MODS + i];
- if (!adopt_atom(keymap->ctx, conn, wire, &mod->name))
- return false;
+ x11_atom_interner_adopt_atom(interner, wire, &mod->name);
iter++;
}
@@ -958,7 +967,7 @@ get_vmod_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
}
static bool
-get_group_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
+get_group_names(struct xkb_keymap *keymap, struct x11_atom_interner *interner,
xcb_xkb_get_names_reply_t *reply,
xcb_xkb_get_names_value_list_t *list)
{
@@ -968,9 +977,10 @@ get_group_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
keymap->num_group_names = msb_pos(reply->groupNames);
ALLOC_OR_FAIL(keymap->group_names, keymap->num_group_names);
- if (!adopt_atoms(keymap->ctx, conn,
- iter, keymap->group_names, length))
- goto fail;
+ for (int i = 0; i < length; i++) {
+ x11_atom_interner_adopt_atom(interner, iter[i],
+ &keymap->group_names[i]);
+ }
return true;
@@ -1051,36 +1061,17 @@ fail:
}
static bool
-get_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
- uint16_t device_id)
+get_names(struct xkb_keymap *keymap, struct x11_atom_interner *interner,
+ xcb_xkb_get_names_cookie_t cookie)
{
- static const xcb_xkb_name_detail_t wanted =
- (XCB_XKB_NAME_DETAIL_KEYCODES |
- XCB_XKB_NAME_DETAIL_SYMBOLS |
- XCB_XKB_NAME_DETAIL_TYPES |
- XCB_XKB_NAME_DETAIL_COMPAT |
- XCB_XKB_NAME_DETAIL_KEY_TYPE_NAMES |
- XCB_XKB_NAME_DETAIL_KT_LEVEL_NAMES |
- XCB_XKB_NAME_DETAIL_INDICATOR_NAMES |
- XCB_XKB_NAME_DETAIL_KEY_NAMES |
- XCB_XKB_NAME_DETAIL_KEY_ALIASES |
- XCB_XKB_NAME_DETAIL_VIRTUAL_MOD_NAMES |
- XCB_XKB_NAME_DETAIL_GROUP_NAMES);
- static const xcb_xkb_name_detail_t required =
- (XCB_XKB_NAME_DETAIL_KEY_TYPE_NAMES |
- XCB_XKB_NAME_DETAIL_KT_LEVEL_NAMES |
- XCB_XKB_NAME_DETAIL_KEY_NAMES |
- XCB_XKB_NAME_DETAIL_VIRTUAL_MOD_NAMES);
-
- xcb_xkb_get_names_cookie_t cookie =
- xcb_xkb_get_names(conn, device_id, wanted);
+ xcb_connection_t *conn = interner->conn;
xcb_xkb_get_names_reply_t *reply =
xcb_xkb_get_names_reply(conn, cookie, NULL);
xcb_xkb_get_names_value_list_t list;
FAIL_IF_BAD_REPLY(reply, "XkbGetNames");
- FAIL_UNLESS((reply->which & required) == required);
+ FAIL_UNLESS((reply->which & get_names_required) == get_names_required);
xcb_xkb_get_names_value_list_unpack(xcb_xkb_get_names_value_list(reply),
reply->nTypes,
@@ -1093,23 +1084,22 @@ get_names(struct xkb_keymap *keymap, xcb_connection_t *conn,
reply->which,
&list);
- if (!get_atom_name(conn, list.keycodesName, &keymap->keycodes_section_name) ||
- !get_atom_name(conn, list.symbolsName, &keymap->symbols_section_name) ||
- !get_atom_name(conn, list.typesName, &keymap->types_section_name) ||
- !get_atom_name(conn, list.compatName, &keymap->compat_section_name) ||
- !get_type_names(keymap, conn, reply, &list) ||
- !get_indicator_names(keymap, conn, reply, &list) ||
- !get_vmod_names(keymap, conn, reply, &list) ||
- !get_group_names(keymap, conn, reply, &list) ||
+ x11_atom_interner_get_escaped_atom_name(interner, list.keycodesName,
+ &keymap->keycodes_section_name);
+ x11_atom_interner_get_escaped_atom_name(interner, list.symbolsName,
+ &keymap->symbols_section_name);
+ x11_atom_interner_get_escaped_atom_name(interner, list.typesName,
+ &keymap->types_section_name);
+ x11_atom_interner_get_escaped_atom_name(interner, list.compatName,
+ &keymap->compat_section_name);
+ if (!get_type_names(keymap, interner, reply, &list) ||
+ !get_indicator_names(keymap, interner, reply, &list) ||
+ !get_vmod_names(keymap, interner, reply, &list) ||
+ !get_group_names(keymap, interner, reply, &list) ||
!get_key_names(keymap, conn, reply, &list) ||
!get_aliases(keymap, conn, reply, &list))
goto fail;
- XkbEscapeMapName(keymap->keycodes_section_name);
- XkbEscapeMapName(keymap->symbols_section_name);
- XkbEscapeMapName(keymap->types_section_name);
- XkbEscapeMapName(keymap->compat_section_name);
-
free(reply);
return true;
@@ -1120,10 +1110,8 @@ fail:
static bool
get_controls(struct xkb_keymap *keymap, xcb_connection_t *conn,
- uint16_t device_id)
+ xcb_xkb_get_controls_cookie_t cookie)
{
- xcb_xkb_get_controls_cookie_t cookie =
- xcb_xkb_get_controls(conn, device_id);
xcb_xkb_get_controls_reply_t *reply =
xcb_xkb_get_controls_reply(conn, cookie, NULL);
@@ -1169,14 +1157,52 @@ xkb_x11_keymap_new_from_device(struct xkb_context *ctx,
if (!keymap)
return NULL;
- if (!get_map(keymap, conn, device_id) ||
- !get_indicator_map(keymap, conn, device_id) ||
- !get_compat_map(keymap, conn, device_id) ||
- !get_names(keymap, conn, device_id) ||
- !get_controls(keymap, conn, device_id)) {
- xkb_keymap_unref(keymap);
- return NULL;
- }
+ struct x11_atom_interner interner;
+ x11_atom_interner_init(&interner, ctx, conn);
+
+ /*
+ * Send all requests together so only one roundtrip is needed
+ * to get the replies.
+ */
+ xcb_xkb_get_map_cookie_t map_cookie =
+ xcb_xkb_get_map(conn, device_id, get_map_required_components,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ xcb_xkb_get_indicator_map_cookie_t indicator_map_cookie =
+ xcb_xkb_get_indicator_map(conn, device_id, ALL_INDICATORS_MASK);
+ xcb_xkb_get_compat_map_cookie_t compat_map_cookie =
+ xcb_xkb_get_compat_map(conn, device_id, 0, true, 0, 0);
+ xcb_xkb_get_names_cookie_t names_cookie =
+ xcb_xkb_get_names(conn, device_id, get_names_wanted);
+ xcb_xkb_get_controls_cookie_t controls_cookie =
+ xcb_xkb_get_controls(conn, device_id);
+
+ if (!get_map(keymap, conn, map_cookie))
+ goto err_map;
+ if (!get_indicator_map(keymap, conn, indicator_map_cookie))
+ goto err_indicator_map;
+ if (!get_compat_map(keymap, conn, compat_map_cookie))
+ goto err_compat_map;
+ if (!get_names(keymap, &interner, names_cookie))
+ goto err_names;
+ if (!get_controls(keymap, conn, controls_cookie))
+ goto err_controls;
+ x11_atom_interner_round_trip(&interner);
+ if (interner.had_error)
+ goto err_interner;
return keymap;
+
+err_map:
+ xcb_discard_reply(conn, indicator_map_cookie.sequence);
+err_indicator_map:
+ xcb_discard_reply(conn, compat_map_cookie.sequence);
+err_compat_map:
+ xcb_discard_reply(conn, names_cookie.sequence);
+err_names:
+ xcb_discard_reply(conn, controls_cookie.sequence);
+err_controls:
+ x11_atom_interner_round_trip(&interner);
+err_interner:
+ xkb_keymap_unref(keymap);
+ return NULL;
}
diff --git a/src/x11/util.c b/src/x11/util.c
index 660d885..cc4c71c 100644
--- a/src/x11/util.c
+++ b/src/x11/util.c
@@ -124,37 +124,6 @@ xkb_x11_get_core_keyboard_device_id(xcb_connection_t *conn)
return device_id;
}
-bool
-get_atom_name(xcb_connection_t *conn, xcb_atom_t atom, char **out)
-{
- xcb_get_atom_name_cookie_t cookie;
- xcb_get_atom_name_reply_t *reply;
- int length;
- char *name;
-
- if (atom == 0) {
- *out = NULL;
- return true;
- }
-
- cookie = xcb_get_atom_name(conn, atom);
- reply = xcb_get_atom_name_reply(conn, cookie, NULL);
- if (!reply)
- return false;
-
- length = xcb_get_atom_name_name_length(reply);
- name = xcb_get_atom_name_name(reply);
-
- *out = strndup(name, length);
- if (!*out) {
- free(reply);
- return false;
- }
-
- free(reply);
- return true;
-}
-
struct x11_atom_cache {
/*
* Invalidate the cache based on the XCB connection.
@@ -169,14 +138,9 @@ struct x11_atom_cache {
size_t len;
};
-bool
-adopt_atoms(struct xkb_context *ctx, xcb_connection_t *conn,
- const xcb_atom_t *from, xkb_atom_t *to, const size_t count)
+static struct x11_atom_cache *
+get_cache(struct xkb_context *ctx, xcb_connection_t *conn)
{
- enum { SIZE = 128 };
- xcb_get_atom_name_cookie_t cookies[SIZE];
- const size_t num_batches = ROUNDUP(count, SIZE) / SIZE;
-
if (!ctx->x11_atom_cache) {
ctx->x11_atom_cache = calloc(1, sizeof(struct x11_atom_cache));
}
@@ -186,79 +150,149 @@ adopt_atoms(struct xkb_context *ctx, xcb_connection_t *conn,
cache->conn = conn;
cache->len = 0;
}
+ return cache;
+}
- memset(to, 0, count * sizeof(*to));
-
- /* Send and collect the atoms in batches of reasonable SIZE. */
- for (size_t batch = 0; batch < num_batches; batch++) {
- const size_t start = batch * SIZE;
- const size_t stop = MIN((batch + 1) * SIZE, count);
-
- /* Send. */
- for (size_t i = start; i < stop; i++) {
- bool cache_hit = false;
- if (cache) {
- for (size_t c = 0; c < cache->len; c++) {
- if (cache->cache[c].from == from[i]) {
- to[i] = cache->cache[c].to;
- cache_hit = true;
- break;
- }
- }
+void
+x11_atom_interner_init(struct x11_atom_interner *interner,
+ struct xkb_context *ctx, xcb_connection_t *conn)
+{
+ interner->had_error = false;
+ interner->ctx = ctx;
+ interner->conn = conn;
+ interner->num_pending = 0;
+ interner->num_copies = 0;
+ interner->num_escaped = 0;
+}
+
+void
+x11_atom_interner_adopt_atom(struct x11_atom_interner *interner,
+ const xcb_atom_t atom, xkb_atom_t *out)
+{
+ *out = XKB_ATOM_NONE;
+
+ if (atom == XCB_ATOM_NONE)
+ return;
+
+ /* Can be NULL in case the malloc failed. */
+ struct x11_atom_cache *cache = get_cache(interner->ctx, interner->conn);
+
+retry:
+
+ /* Already in the cache? */
+ if (cache) {
+ for (size_t c = 0; c < cache->len; c++) {
+ if (cache->cache[c].from == atom) {
+ *out = cache->cache[c].to;
+ return;
}
- if (!cache_hit && from[i] != XCB_ATOM_NONE)
- cookies[i % SIZE] = xcb_get_atom_name(conn, from[i]);
}
+ }
- /* Collect. */
- for (size_t i = start; i < stop; i++) {
- xcb_get_atom_name_reply_t *reply;
-
- if (from[i] == XCB_ATOM_NONE)
- continue;
+ /* Already pending? */
+ for (size_t i = 0; i < interner->num_pending; i++) {
+ if (interner->pending[i].from == atom) {
+ if (interner->num_copies == ARRAY_SIZE(interner->copies)) {
+ x11_atom_interner_round_trip(interner);
+ goto retry;
+ }
- /* Was filled from cache. */
- if (to[i] != 0)
- continue;
+ size_t idx = interner->num_copies++;
+ interner->copies[idx].from = atom;
+ interner->copies[idx].out = out;
+ return;
+ }
+ }
- reply = xcb_get_atom_name_reply(conn, cookies[i % SIZE], NULL);
- if (!reply)
- goto err_discard;
+ /* We have to send a GetAtomName request */
+ if (interner->num_pending == ARRAY_SIZE(interner->pending)) {
+ x11_atom_interner_round_trip(interner);
+ assert(interner->num_pending < ARRAY_SIZE(interner->pending));
+ }
+ size_t idx = interner->num_pending++;
+ interner->pending[idx].from = atom;
+ interner->pending[idx].out = out;
+ interner->pending[idx].cookie = xcb_get_atom_name(interner->conn, atom);
+}
- to[i] = xkb_atom_intern(ctx,
- xcb_get_atom_name_name(reply),
- xcb_get_atom_name_name_length(reply));
- free(reply);
+void
+x11_atom_interner_round_trip(struct x11_atom_interner *interner) {
+ struct xkb_context *ctx = interner->ctx;
+ xcb_connection_t *conn = interner->conn;
- if (to[i] == XKB_ATOM_NONE)
- goto err_discard;
+ /* Can be NULL in case the malloc failed. */
+ struct x11_atom_cache *cache = get_cache(ctx, conn);
- if (cache && cache->len < ARRAY_SIZE(cache->cache)) {
- size_t idx = cache->len++;
- cache->cache[idx].from = from[i];
- cache->cache[idx].to = to[i];
- }
+ for (size_t i = 0; i < interner->num_pending; i++) {
+ xcb_get_atom_name_reply_t *reply;
+ reply = xcb_get_atom_name_reply(conn, interner->pending[i].cookie, NULL);
+ if (!reply) {
+ interner->had_error = true;
continue;
+ }
+ xcb_atom_t x11_atom = interner->pending[i].from;
+ xkb_atom_t atom = xkb_atom_intern(ctx,
+ xcb_get_atom_name_name(reply),
+ xcb_get_atom_name_name_length(reply));
+ free(reply);
- /*
- * If we don't discard the uncollected replies, they just
- * sit in the XCB queue waiting forever. Sad.
- */
-err_discard:
- for (size_t j = i + 1; j < stop; j++)
- if (from[j] != XCB_ATOM_NONE)
- xcb_discard_reply(conn, cookies[j % SIZE].sequence);
- return false;
+ if (cache && cache->len < ARRAY_SIZE(cache->cache)) {
+ size_t idx = cache->len++;
+ cache->cache[idx].from = x11_atom;
+ cache->cache[idx].to = atom;
+ }
+
+ *interner->pending[i].out = atom;
+
+ for (size_t j = 0; j < interner->num_copies; j++) {
+ if (interner->copies[j].from == x11_atom)
+ *interner->copies[j].out = atom;
}
}
- return true;
+ for (size_t i = 0; i < interner->num_escaped; i++) {
+ xcb_get_atom_name_reply_t *reply;
+ int length;
+ char *name;
+ char **out = interner->escaped[i].out;
+
+ reply = xcb_get_atom_name_reply(conn, interner->escaped[i].cookie, NULL);
+ *interner->escaped[i].out = NULL;
+ if (!reply) {
+ interner->had_error = true;
+ } else {
+ length = xcb_get_atom_name_name_length(reply);
+ name = xcb_get_atom_name_name(reply);
+
+ *out = strndup(name, length);
+ free(reply);
+ if (*out == NULL) {
+ interner->had_error = true;
+ } else {
+ XkbEscapeMapName(*out);
+ }
+ }
+ }
+
+ interner->num_pending = 0;
+ interner->num_copies = 0;
+ interner->num_escaped = 0;
}
-bool
-adopt_atom(struct xkb_context *ctx, xcb_connection_t *conn, xcb_atom_t atom,
- xkb_atom_t *out)
+void
+x11_atom_interner_get_escaped_atom_name(struct x11_atom_interner *interner,
+ xcb_atom_t atom, char **out)
{
- return adopt_atoms(ctx, conn, &atom, out, 1);
+ if (atom == 0) {
+ *out = NULL;
+ return;
+ }
+ size_t idx = interner->num_escaped++;
+ /* There can only be a fixed number of calls to this function "in-flight",
+ * thus we assert this number. Increase the array size if this assert fails.
+ */
+ assert(idx < ARRAY_SIZE(interner->escaped));
+ interner->escaped[idx].out = out;
+ interner->escaped[idx].cookie = xcb_get_atom_name(interner->conn, atom);
}
diff --git a/src/x11/x11-priv.h b/src/x11/x11-priv.h
index 3a19e99..7f37fd5 100644
--- a/src/x11/x11-priv.h
+++ b/src/x11/x11-priv.h
@@ -29,26 +29,52 @@
#include "keymap.h"
#include "xkbcommon/xkbcommon-x11.h"
-/* Get a strdup'd name of an X atom. */
-bool
-get_atom_name(xcb_connection_t *conn, xcb_atom_t atom, char **out);
+struct x11_atom_interner {
+ struct xkb_context *ctx;
+ xcb_connection_t *conn;
+ bool had_error;
+ /* Atoms for which we send a GetAtomName request */
+ struct {
+ xcb_atom_t from;
+ xkb_atom_t *out;
+ xcb_get_atom_name_cookie_t cookie;
+ } pending[128];
+ size_t num_pending;
+ /* Atoms which were already pending but queried again */
+ struct {
+ xcb_atom_t from;
+ xkb_atom_t *out;
+ } copies[128];
+ size_t num_copies;
+ /* These are not interned, but saved directly (after XkbEscapeMapName) */
+ struct {
+ xcb_get_atom_name_cookie_t cookie;
+ char **out;
+ } escaped[4];
+ size_t num_escaped;
+};
+
+void
+x11_atom_interner_init(struct x11_atom_interner *interner,
+ struct xkb_context *ctx, xcb_connection_t *conn);
+
+void
+x11_atom_interner_round_trip(struct x11_atom_interner *interner);
/*
- * Make a xkb_atom_t's from X atoms (prefer to send as many as possible
- * at once, to avoid many roundtrips).
- *
- * TODO: We can make this more flexible, such that @to doesn't have to
- * be sequential. Then we can convert most adopt_atom() calls to
- * adopt_atoms().
- * Atom caching would also likely be useful for avoiding quite a
- * few requests.
+ * Make a xkb_atom_t's from X atoms. The actual write is delayed until the next
+ * call to x11_atom_interner_round_trip() or when too many atoms are pending.
*/
-bool
-adopt_atoms(struct xkb_context *ctx, xcb_connection_t *conn,
- const xcb_atom_t *from, xkb_atom_t *to, size_t count);
+void
+x11_atom_interner_adopt_atom(struct x11_atom_interner *interner,
+ const xcb_atom_t atom, xkb_atom_t *out);
-bool
-adopt_atom(struct xkb_context *ctx, xcb_connection_t *conn, xcb_atom_t atom,
- xkb_atom_t *out);
+/*
+ * Get a strdup'd and XkbEscapeMapName'd name of an X atom. The actual write is
+ * delayed until the next call to x11_atom_interner_round_trip().
+ */
+void
+x11_atom_interner_get_escaped_atom_name(struct x11_atom_interner *interner,
+ xcb_atom_t atom, char **out);
#endif
diff --git a/src/xkbcomp/.gitignore b/src/xkbcomp/.gitignore
deleted file mode 100644
index d7814e4..0000000
--- a/src/xkbcomp/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-parser.c
-parser.h
diff --git a/src/xkbcomp/action.c b/src/xkbcomp/action.c
index 605f159..e2d4c40 100644
--- a/src/xkbcomp/action.c
+++ b/src/xkbcomp/action.c
@@ -700,15 +700,16 @@ HandlePrivate(struct xkb_context *ctx, const struct xkb_mod_set *mods,
str = xkb_atom_text(ctx, val);
len = strlen(str);
- if (len < 1 || len > 7) {
+ if (len < 1 || len > sizeof(act->data)) {
log_warn(ctx,
- "A private action has 7 data bytes; "
- "Illegal data ignored\n");
+ "A private action has %ld data bytes; "
+ "Illegal data ignored\n", sizeof(act->data));
return false;
}
/* act->data may not be null-terminated, this is intentional */
- strncpy((char *) act->data, str, sizeof(act->data));
+ memset(act->data, 0, sizeof(act->data));
+ memcpy(act->data, str, len);
return true;
}
else {
diff --git a/src/xkbcomp/ast-build.c b/src/xkbcomp/ast-build.c
index 7ee13d0..347eed8 100644
--- a/src/xkbcomp/ast-build.c
+++ b/src/xkbcomp/ast-build.c
@@ -462,15 +462,16 @@ IncludeStmt *
IncludeCreate(struct xkb_context *ctx, char *str, enum merge_mode merge)
{
IncludeStmt *incl, *first;
- char *file, *map, *stmt, *tmp, *extra_data;
+ char *stmt, *tmp;
char nextop;
incl = first = NULL;
- file = map = NULL;
tmp = str;
stmt = strdup_safe(str);
while (tmp && *tmp)
{
+ char *file = NULL, *map = NULL, *extra_data = NULL;
+
if (!ParseIncludeMap(&tmp, &file, &map, &nextop, &extra_data))
goto err;
@@ -494,8 +495,12 @@ IncludeCreate(struct xkb_context *ctx, char *str, enum merge_mode merge)
incl = incl->next_incl;
}
- if (!incl)
+ if (!incl) {
+ free(file);
+ free(map);
+ free(extra_data);
break;
+ }
incl->common.type = STMT_INCLUDE;
incl->common.next = NULL;
diff --git a/src/xkbcomp/ast.h b/src/xkbcomp/ast.h
index ee61106..6c51ce4 100644
--- a/src/xkbcomp/ast.h
+++ b/src/xkbcomp/ast.h
@@ -243,7 +243,6 @@ typedef struct {
union ExprDef {
ParseCommon common;
- /* Maybe someday we can use C11 anonymous struct for ExprCommon here. */
ExprCommon expr;
ExprIdent ident;
ExprString string;
diff --git a/src/xkbcomp/compat.c b/src/xkbcomp/compat.c
index 26b2bb7..b8922c9 100644
--- a/src/xkbcomp/compat.c
+++ b/src/xkbcomp/compat.c
@@ -690,7 +690,7 @@ HandleInterpDef(CompatInfo *info, InterpDef *def, enum merge_mode merge)
}
si = info->default_interp;
- si.merge = merge = (def->merge == MERGE_DEFAULT ? merge : def->merge);
+ si.merge = (def->merge == MERGE_DEFAULT ? merge : def->merge);
si.interp.sym = def->sym;
si.interp.match = pred;
si.interp.mods = mods;
diff --git a/test/.gitignore b/test/.gitignore
deleted file mode 100644
index def76f0..0000000
--- a/test/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-*.log
-*.trs
-filecomp
-rulescomp
-keymap
-keysym
-state
-context
-rules-file
-stringcomp
-buffercomp
-keyseq
-log
-interactive-evdev
-rmlvo-to-kccgst
-rmlvo-to-keymap
-print-compiled-keymap
-atom
-x11
-interactive-x11
-interactive-wayland
-utf8
-x11comp
-compose
diff --git a/test/compose.c b/test/compose.c
index 5ba5751..35790a3 100644
--- a/test/compose.c
+++ b/test/compose.c
@@ -179,7 +179,7 @@ test_seqs(struct xkb_context *ctx)
char *path;
FILE *file;
- path = test_get_path("compose/en_US.UTF-8/Compose");
+ path = test_get_path("locale/en_US.UTF-8/Compose");
file = fopen(path, "rb");
assert(file);
free(path);
@@ -353,7 +353,7 @@ test_state(struct xkb_context *ctx)
char *path;
FILE *file;
- path = test_get_path("compose/en_US.UTF-8/Compose");
+ path = test_get_path("locale/en_US.UTF-8/Compose");
file = fopen(path, "rb");
assert(file);
free(path);
@@ -410,7 +410,7 @@ test_XCOMPOSEFILE(struct xkb_context *ctx)
struct xkb_compose_table *table;
char *path;
- path = test_get_path("compose/en_US.UTF-8/Compose");
+ path = test_get_path("locale/en_US.UTF-8/Compose");
setenv("XCOMPOSEFILE", path, 1);
free(path);
@@ -418,6 +418,8 @@ test_XCOMPOSEFILE(struct xkb_context *ctx)
XKB_COMPOSE_COMPILE_NO_FLAGS);
assert(table);
+ unsetenv("XCOMPOSEFILE");
+
assert(test_compose_seq(table,
XKB_KEY_dead_tilde, XKB_COMPOSE_FEED_ACCEPTED, XKB_COMPOSE_COMPOSING, "", XKB_KEY_NoSymbol,
XKB_KEY_space, XKB_COMPOSE_FEED_ACCEPTED, XKB_COMPOSE_COMPOSED, "~", XKB_KEY_asciitilde,
@@ -427,6 +429,49 @@ test_XCOMPOSEFILE(struct xkb_context *ctx)
}
static void
+test_from_locale(struct xkb_context *ctx)
+{
+ struct xkb_compose_table *table;
+ char *path;
+
+ path = test_get_path("locale");
+ setenv("XLOCALEDIR", path, 1);
+ free(path);
+
+ /* Direct directory name match. */
+ table = xkb_compose_table_new_from_locale(ctx, "en_US.UTF-8",
+ XKB_COMPOSE_COMPILE_NO_FLAGS);
+ assert(table);
+ xkb_compose_table_unref(table);
+
+ /* Direct locale name match. */
+ table = xkb_compose_table_new_from_locale(ctx, "C.UTF-8",
+ XKB_COMPOSE_COMPILE_NO_FLAGS);
+ assert(table);
+ xkb_compose_table_unref(table);
+
+ /* Alias. */
+ table = xkb_compose_table_new_from_locale(ctx, "univ.utf8",
+ XKB_COMPOSE_COMPILE_NO_FLAGS);
+ assert(table);
+ xkb_compose_table_unref(table);
+
+ /* Special case - C. */
+ table = xkb_compose_table_new_from_locale(ctx, "C",
+ XKB_COMPOSE_COMPILE_NO_FLAGS);
+ assert(table);
+ xkb_compose_table_unref(table);
+
+ /* Bogus - not found. */
+ table = xkb_compose_table_new_from_locale(ctx, "blabla",
+ XKB_COMPOSE_COMPILE_NO_FLAGS);
+ assert(!table);
+
+ unsetenv("XLOCALEDIR");
+}
+
+
+static void
test_modifier_syntax(struct xkb_context *ctx)
{
const char *table_string;
@@ -486,7 +531,7 @@ test_include(struct xkb_context *ctx)
{
char *path, *table_string;
- path = test_get_path("compose/en_US.UTF-8/Compose");
+ path = test_get_path("locale/en_US.UTF-8/Compose");
assert(path);
/* We don't have a mechanism to change the include paths like we
@@ -526,6 +571,7 @@ main(int argc, char *argv[])
test_seqs(ctx);
test_conflicting(ctx);
test_XCOMPOSEFILE(ctx);
+ test_from_locale(ctx);
test_state(ctx);
test_modifier_syntax(ctx);
test_include(ctx);
diff --git a/test/data/locale/compose.dir b/test/data/locale/compose.dir
new file mode 100644
index 0000000..ee88bdc
--- /dev/null
+++ b/test/data/locale/compose.dir
@@ -0,0 +1,944 @@
+#
+# This file contains compose table file names.
+# The first word is the compose table file name
+# and the second word is the full locale name.
+#
+#
+iso8859-1/Compose C
+iso8859-1/Compose af_ZA.ISO8859-1
+iso8859-6/Compose ar_AA.ISO8859-6
+iso8859-6/Compose ar_AE.ISO8859-6
+iso8859-6/Compose ar_BH.ISO8859-6
+iso8859-6/Compose ar_DZ.ISO8859-6
+iso8859-6/Compose ar_EG.ISO8859-6
+iso8859-6/Compose ar_IQ.ISO8859-6
+iso8859-6/Compose ar_JO.ISO8859-6
+iso8859-6/Compose ar_KW.ISO8859-6
+iso8859-6/Compose ar_LB.ISO8859-6
+iso8859-6/Compose ar_LY.ISO8859-6
+iso8859-6/Compose ar_MA.ISO8859-6
+iso8859-6/Compose ar_OM.ISO8859-6
+iso8859-6/Compose ar_QA.ISO8859-6
+iso8859-6/Compose ar_SA.ISO8859-6
+iso8859-6/Compose ar_SD.ISO8859-6
+iso8859-6/Compose ar_SY.ISO8859-6
+iso8859-6/Compose ar_TN.ISO8859-6
+iso8859-6/Compose ar_YE.ISO8859-6
+iso8859-9e/Compose az_AZ.ISO8859-9E
+koi8-c/Compose az_AZ.KOI8-C
+microsoft-cp1251/Compose be_BY.CP1251
+iso8859-5/Compose be_BY.ISO8859-5
+iso8859-5/Compose bg_BG.ISO8859-5
+microsoft-cp1251/Compose bg_BG.CP1251
+koi8-r/Compose bg_BG.KOI8-R
+iso8859-1/Compose br_FR.ISO8859-1
+iso8859-14/Compose br_FR.ISO8859-14
+iso8859-15/Compose br_FR.ISO8859-15
+iso8859-2/Compose bs_BA.ISO8859-2
+iso8859-1/Compose ca_AD.ISO8859-1
+iso8859-15/Compose ca_AD.ISO8859-15
+iso8859-1/Compose ca_ES.ISO8859-1
+iso8859-15/Compose ca_ES.ISO8859-15
+iso8859-1/Compose ca_FR.ISO8859-1
+iso8859-15/Compose ca_FR.ISO8859-15
+iso8859-1/Compose ca_IT.ISO8859-1
+iso8859-15/Compose ca_IT.ISO8859-15
+iso8859-2/Compose cs_CZ.ISO8859-2
+iso8859-1/Compose cy_GB.ISO8859-1
+iso8859-14/Compose cy_GB.ISO8859-14
+iso8859-15/Compose cy_GB.ISO8859-15
+iso8859-1/Compose da_DK.ISO8859-1
+iso8859-15/Compose da_DK.ISO8859-15
+iso8859-1/Compose de_AT.ISO8859-1
+iso8859-15/Compose de_AT.ISO8859-15
+iso8859-1/Compose de_BE.ISO8859-1
+iso8859-15/Compose de_BE.ISO8859-15
+iso8859-1/Compose de_CH.ISO8859-1
+iso8859-15/Compose de_CH.ISO8859-15
+iso8859-1/Compose de_DE.ISO8859-1
+iso8859-15/Compose de_DE.ISO8859-15
+iso8859-1/Compose de_LI.ISO8859-1
+iso8859-15/Compose de_LI.ISO8859-15
+iso8859-1/Compose de_LU.ISO8859-1
+iso8859-15/Compose de_LU.ISO8859-15
+iso8859-4/Compose ee_EE.ISO8859-4
+iso8859-7/Compose el_GR.ISO8859-7
+iso8859-15/Compose el_GR.ISO8859-15
+iso8859-1/Compose en_AU.ISO8859-1
+iso8859-1/Compose en_BE.ISO8859-1
+iso8859-15/Compose en_BE.ISO8859-15
+iso8859-1/Compose en_BW.ISO8859-1
+iso8859-1/Compose en_BZ.ISO8859-1
+iso8859-1/Compose en_CA.ISO8859-1
+iso8859-1/Compose en_EN.ISO8859-1
+iso8859-1/Compose en_GB.ISO8859-1
+iso8859-15/Compose en_GB.ISO8859-15
+iso8859-1/Compose en_HK.ISO8859-1
+iso8859-1/Compose en_IE.ISO8859-1
+iso8859-15/Compose en_IE.ISO8859-15
+iso8859-15/Compose en_IN.ISO8859-15
+iso8859-1/Compose en_JM.ISO8859-1
+iso8859-1/Compose en_NZ.ISO8859-1
+iso8859-1/Compose en_PH.ISO8859-1
+iso8859-1/Compose en_SG.ISO8859-1
+iso8859-1/Compose en_TT.ISO8859-1
+iso8859-1/Compose en_UK.ISO8859-1
+iso8859-15/Compose en_UK.ISO8859-15
+iso8859-1/Compose en_US.ISO8859-1
+iso8859-15/Compose en_US.ISO8859-15
+iso8859-1/Compose en_ZA.ISO8859-1
+iso8859-15/Compose en_ZA.ISO8859-15
+iso8859-1/Compose en_ZW.ISO8859-1
+iso8859-3/Compose eo_EO.ISO8859-3
+iso8859-3/Compose eo_XX.ISO8859-3
+iso8859-1/Compose es_AR.ISO8859-1
+iso8859-1/Compose es_BO.ISO8859-1
+iso8859-1/Compose es_CL.ISO8859-1
+iso8859-1/Compose es_CO.ISO8859-1
+iso8859-1/Compose es_CR.ISO8859-1
+iso8859-1/Compose es_DO.ISO8859-1
+iso8859-1/Compose es_EC.ISO8859-1
+iso8859-1/Compose es_ES.ISO8859-1
+iso8859-15/Compose es_ES.ISO8859-15
+iso8859-1/Compose es_GT.ISO8859-1
+iso8859-1/Compose es_HN.ISO8859-1
+iso8859-1/Compose es_MX.ISO8859-1
+iso8859-1/Compose es_NI.ISO8859-1
+iso8859-1/Compose es_PA.ISO8859-1
+iso8859-15/Compose es_PA.ISO8859-15
+iso8859-1/Compose es_PE.ISO8859-1
+iso8859-15/Compose es_PE.ISO8859-15
+iso8859-1/Compose es_PR.ISO8859-1
+iso8859-1/Compose es_PY.ISO8859-1
+iso8859-15/Compose es_PY.ISO8859-15
+iso8859-1/Compose es_SV.ISO8859-1
+iso8859-15/Compose es_SV.ISO8859-15
+iso8859-1/Compose es_US.ISO8859-1
+iso8859-1/Compose es_UY.ISO8859-1
+iso8859-15/Compose es_UY.ISO8859-15
+iso8859-1/Compose es_VE.ISO8859-1
+iso8859-15/Compose es_VE.ISO8859-15
+iso8859-1/Compose et_EE.ISO8859-1
+iso8859-4/Compose et_EE.ISO8859-4
+iso8859-13/Compose et_EE.ISO8859-13
+iso8859-15/Compose et_EE.ISO8859-15
+iso8859-1/Compose eu_ES.ISO8859-1
+iso8859-15/Compose eu_ES.ISO8859-15
+isiri-3342/Compose fa_IR.ISIRI-3342
+iso8859-1/Compose fi_FI.ISO8859-1
+iso8859-15/Compose fi_FI.ISO8859-15
+iso8859-1/Compose fo_FO.ISO8859-1
+iso8859-15/Compose fo_FO.ISO8859-15
+iso8859-1/Compose fr_BE.ISO8859-1
+iso8859-15/Compose fr_BE.ISO8859-15
+iso8859-1/Compose fr_CA.ISO8859-1
+iso8859-15/Compose fr_CA.ISO8859-15
+iso8859-1/Compose fr_CH.ISO8859-1
+iso8859-15/Compose fr_CH.ISO8859-15
+iso8859-1/Compose fr_FR.ISO8859-1
+iso8859-15/Compose fr_FR.ISO8859-15
+iso8859-1/Compose fr_LU.ISO8859-1
+iso8859-15/Compose fr_LU.ISO8859-15
+iso8859-1/Compose ga_IE.ISO8859-1
+iso8859-14/Compose ga_IE.ISO8859-14
+iso8859-15/Compose ga_IE.ISO8859-15
+iso8859-1/Compose gd_GB.ISO8859-1
+iso8859-14/Compose gd_GB.ISO8859-14
+iso8859-15/Compose gd_GB.ISO8859-15
+iso8859-1/Compose gl_ES.ISO8859-1
+iso8859-15/Compose gl_ES.ISO8859-15
+iso8859-1/Compose gv_GB.ISO8859-1
+iso8859-14/Compose gv_GB.ISO8859-14
+iso8859-15/Compose gv_GB.ISO8859-15
+iso8859-8/Compose he_IL.ISO8859-8
+microsoft-cp1255/Compose he_IL.CP1255
+iscii-dev/Compose hi_IN.ISCII-DEV
+iso8859-2/Compose hr_HR.ISO8859-2
+iso8859-2/Compose hu_HU.ISO8859-2
+armscii-8/Compose hy_AM.ARMSCII-8
+iso8859-1/Compose id_ID.ISO8859-1
+iso8859-15/Compose id_ID.ISO8859-15
+iso8859-1/Compose is_IS.ISO8859-1
+iso8859-15/Compose is_IS.ISO8859-15
+iso8859-1/Compose it_CH.ISO8859-1
+iso8859-15/Compose it_CH.ISO8859-15
+iso8859-1/Compose it_IT.ISO8859-1
+iso8859-15/Compose it_IT.ISO8859-15
+ja/Compose ja_JP.eucJP
+ja.SJIS/Compose ja_JP.SJIS
+ja.JIS/Compose ja_JP.JIS7
+georgian-academy/Compose ka_GE.GEORGIAN-ACADEMY
+georgian-ps/Compose ka_GE.GEORGIAN-PS
+iso8859-1/Compose kl_GL.ISO8859-1
+iso8859-15/Compose kl_GL.ISO8859-15
+iso8859-1/Compose kw_GB.ISO8859-1
+iso8859-14/Compose kw_GB.ISO8859-14
+iso8859-15/Compose kw_GB.ISO8859-15
+ko/Compose ko_KR.eucKR
+ibm-cp1133/Compose lo_LA.IBM-CP1133
+mulelao-1/Compose lo_LA.MULELAO-1
+iso8859-4/Compose lt_LT.ISO8859-4
+iso8859-13/Compose lt_LT.ISO8859-13
+iso8859-4/Compose lv_LV.ISO8859-4
+iso8859-13/Compose lv_LV.ISO8859-13
+iso8859-13/Compose mi_NZ.ISO8859-13
+iso8859-5/Compose mk_MK.ISO8859-5
+microsoft-cp1251/Compose mk_MK.CP1251
+iso8859-1/Compose ms_MY.ISO8859-1
+iso8859-3/Compose mt_MT.ISO8859-3
+iso8859-1/Compose nl_BE.ISO8859-1
+iso8859-15/Compose nl_BE.ISO8859-15
+iso8859-1/Compose nl_NL.ISO8859-1
+iso8859-15/Compose nl_NL.ISO8859-15
+iso8859-1/Compose no_NO.ISO8859-1
+iso8859-15/Compose no_NO.ISO8859-15
+iso8859-1/Compose nb_NO.ISO8859-1
+iso8859-15/Compose nb_NO.ISO8859-15
+iso8859-1/Compose nn_NO.ISO8859-1
+iso8859-15/Compose nn_NO.ISO8859-15
+iso8859-1/Compose nr_ZA.ISO8859-1
+iso8859-15/Compose nso_ZA.ISO8859-15
+iso8859-1/Compose ny_NO.ISO8859-1
+iso8859-15/Compose ny_NO.ISO8859-15
+iso8859-1/Compose oc_FR.ISO8859-1
+iso8859-15/Compose oc_FR.ISO8859-15
+iso8859-1/Compose pd_DE.ISO8859-1
+iso8859-15/Compose pd_DE.ISO8859-15
+iso8859-1/Compose pd_US.ISO8859-1
+iso8859-15/Compose pd_US.ISO8859-15
+iso8859-1/Compose ph_PH.ISO8859-1
+iso8859-2/Compose pl_PL.ISO8859-2
+iso8859-1/Compose pp_AN.ISO8859-1
+iso8859-1/Compose pt_BR.ISO8859-1
+iso8859-15/Compose pt_BR.ISO8859-15
+iso8859-1/Compose pt_PT.ISO8859-1
+iso8859-15/Compose pt_PT.ISO8859-15
+iso8859-2/Compose ro_RO.ISO8859-2
+koi8-r/Compose ru_RU.KOI8-R
+iso8859-5/Compose ru_RU.ISO8859-5
+microsoft-cp1251/Compose ru_RU.CP1251
+microsoft-cp1251/Compose ru_UA.CP1251
+koi8-u/Compose ru_UA.KOI8-U
+iso8859-1/Compose rw_RW.ISO8859-1
+iso8859-2/Compose sh_YU.ISO8859-2
+iso8859-2/Compose sk_SK.ISO8859-2
+iso8859-2/Compose sl_SI.ISO8859-2
+iso8859-2/Compose sq_AL.ISO8859-2
+iso8859-2/Compose sr_YU.ISO8859-2
+microsoft-cp1251/Compose sr_YU.CP1251
+iso8859-5/Compose sr_YU.ISO8859-5
+iso8859-1/Compose ss_ZA.ISO8859-1
+iso8859-1/Compose st_ZA.ISO8859-1
+iso8859-1/Compose sv_FI.ISO8859-1
+iso8859-15/Compose sv_FI.ISO8859-15
+iso8859-1/Compose sv_SE.ISO8859-1
+iso8859-15/Compose sv_SE.ISO8859-15
+tscii-0/Compose ta_IN.TSCII-0
+koi8-c/Compose tg_TJ.KOI8-C
+iso8859-1/Compose tl_PH.ISO8859-1
+iso8859-11/Compose th_TH.ISO8859-11
+th_TH/Compose th_TH.TIS620
+iso8859-15/Compose tn_ZA.ISO8859-15
+iso8859-9/Compose tr_TR.ISO8859-9
+iso8859-1/Compose ts_ZA.ISO8859-1
+tatar-cyr/Compose tt_RU.TATAR-CYR
+microsoft-cp1251/Compose uk_UA.CP1251
+koi8-c/Compose tt_RU.KOI8-C
+koi8-u/Compose uk_UA.KOI8-U
+iso8859-5/Compose uk_UA.ISO8859-5
+microsoft-cp1256/Compose ur_PK.CP1256
+iso8859-1/Compose uz_UZ.ISO8859-1
+vi_VN.viscii/Compose vi_VN.VISCII
+vi_VN.tcvn/Compose vi_VN.TCVN
+iso8859-1/Compose wa_BE.ISO8859-1
+iso8859-15/Compose wa_BE.ISO8859-15
+iso8859-1/Compose xh_ZA.ISO8859-1
+microsoft-cp1255/Compose yi_US.CP1255
+zh_CN/Compose zh_CN.eucCN
+zh_CN/Compose zh_CN.gb2312
+zh_CN.gbk/Compose zh_CN.gbk
+zh_CN.gb18030/Compose zh_CN.gb18030
+zh_HK.big5/Compose zh_HK.big5
+zh_HK.big5hkscs/Compose zh_HK.big5hkscs
+zh_TW.big5/Compose zh_TW.big5
+zh_TW/Compose zh_TW.eucTW
+iso8859-1/Compose zu_ZA.ISO8859-1
+#
+#
+en_US.UTF-8/Compose C.UTF-8
+en_US.UTF-8/Compose af_ZA.UTF-8
+am_ET.UTF-8/Compose am_ET.UTF-8
+en_US.UTF-8/Compose ar_AA.UTF-8
+en_US.UTF-8/Compose ar_AE.UTF-8
+en_US.UTF-8/Compose ar_BH.UTF-8
+en_US.UTF-8/Compose ar_DZ.UTF-8
+en_US.UTF-8/Compose ar_EG.UTF-8
+en_US.UTF-8/Compose ar_IN.UTF-8
+en_US.UTF-8/Compose ar_IQ.UTF-8
+en_US.UTF-8/Compose ar_JO.UTF-8
+en_US.UTF-8/Compose ar_KW.UTF-8
+en_US.UTF-8/Compose ar_LB.UTF-8
+en_US.UTF-8/Compose ar_LY.UTF-8
+en_US.UTF-8/Compose ar_MA.UTF-8
+en_US.UTF-8/Compose ar_OM.UTF-8
+en_US.UTF-8/Compose ar_QA.UTF-8
+en_US.UTF-8/Compose ar_SA.UTF-8
+en_US.UTF-8/Compose ar_SD.UTF-8
+en_US.UTF-8/Compose ar_SY.UTF-8
+en_US.UTF-8/Compose ar_TN.UTF-8
+en_US.UTF-8/Compose ar_YE.UTF-8
+en_US.UTF-8/Compose ast_ES.UTF-8
+en_US.UTF-8/Compose as_IN.UTF-8
+en_US.UTF-8/Compose az_AZ.UTF-8
+en_US.UTF-8/Compose be_BY.UTF-8
+en_US.UTF-8/Compose bg_BG.UTF-8
+en_US.UTF-8/Compose bn_BD.UTF-8
+en_US.UTF-8/Compose bn_IN.UTF-8
+en_US.UTF-8/Compose bo_IN.UTF-8
+en_US.UTF-8/Compose br_FR.UTF-8
+en_US.UTF-8/Compose bs_BA.UTF-8
+en_US.UTF-8/Compose ca_AD.UTF-8
+en_US.UTF-8/Compose ca_ES.UTF-8
+en_US.UTF-8/Compose ca_FR.UTF-8
+en_US.UTF-8/Compose ca_IT.UTF-8
+cs_CZ.UTF-8/Compose cs_CZ.UTF-8
+en_US.UTF-8/Compose cy_GB.UTF-8
+en_US.UTF-8/Compose da_DK.UTF-8
+en_US.UTF-8/Compose de_AT.UTF-8
+en_US.UTF-8/Compose de_BE.UTF-8
+en_US.UTF-8/Compose de_CH.UTF-8
+en_US.UTF-8/Compose de_DE.UTF-8
+en_US.UTF-8/Compose de_IT.UTF-8
+en_US.UTF-8/Compose de_LI.UTF-8
+en_US.UTF-8/Compose de_LU.UTF-8
+el_GR.UTF-8/Compose el_CY.UTF-8
+el_GR.UTF-8/Compose el_GR.UTF-8
+en_US.UTF-8/Compose en_AU.UTF-8
+en_US.UTF-8/Compose en_BE.UTF-8
+en_US.UTF-8/Compose en_BW.UTF-8
+en_US.UTF-8/Compose en_BZ.UTF-8
+en_US.UTF-8/Compose en_CA.UTF-8
+en_US.UTF-8/Compose en_DK.UTF-8
+en_US.UTF-8/Compose en_EN.UTF-8
+en_US.UTF-8/Compose en_GB.UTF-8
+en_US.UTF-8/Compose en_HK.UTF-8
+en_US.UTF-8/Compose en_IE.UTF-8
+en_US.UTF-8/Compose en_IN.UTF-8
+en_US.UTF-8/Compose en_JM.UTF-8
+en_US.UTF-8/Compose en_MT.UTF-8
+en_US.UTF-8/Compose en_NZ.UTF-8
+en_US.UTF-8/Compose en_PH.UTF-8
+en_US.UTF-8/Compose en_SG.UTF-8
+en_US.UTF-8/Compose en_TT.UTF-8
+en_US.UTF-8/Compose en_UK.UTF-8
+en_US.UTF-8/Compose en_US.UTF-8
+en_US.UTF-8/Compose en_ZA.UTF-8
+en_US.UTF-8/Compose en_ZW.UTF-8
+en_US.UTF-8/Compose eo_EO.UTF-8
+en_US.UTF-8/Compose eo_XX.UTF-8
+en_US.UTF-8/Compose es_AR.UTF-8
+en_US.UTF-8/Compose es_BO.UTF-8
+en_US.UTF-8/Compose es_CL.UTF-8
+en_US.UTF-8/Compose es_CO.UTF-8
+en_US.UTF-8/Compose es_CR.UTF-8
+en_US.UTF-8/Compose es_DO.UTF-8
+en_US.UTF-8/Compose es_EC.UTF-8
+en_US.UTF-8/Compose es_ES.UTF-8
+en_US.UTF-8/Compose es_GT.UTF-8
+en_US.UTF-8/Compose es_HN.UTF-8
+en_US.UTF-8/Compose es_MX.UTF-8
+en_US.UTF-8/Compose es_NI.UTF-8
+en_US.UTF-8/Compose es_PA.UTF-8
+en_US.UTF-8/Compose es_PE.UTF-8
+en_US.UTF-8/Compose es_PR.UTF-8
+en_US.UTF-8/Compose es_PY.UTF-8
+en_US.UTF-8/Compose es_SV.UTF-8
+en_US.UTF-8/Compose es_US.UTF-8
+en_US.UTF-8/Compose es_UY.UTF-8
+en_US.UTF-8/Compose es_VE.UTF-8
+en_US.UTF-8/Compose et_EE.UTF-8
+en_US.UTF-8/Compose eu_ES.UTF-8
+en_US.UTF-8/Compose fa_IR.UTF-8
+fi_FI.UTF-8/Compose fi_FI.UTF-8
+en_US.UTF-8/Compose fo_FO.UTF-8
+en_US.UTF-8/Compose fr_BE.UTF-8
+en_US.UTF-8/Compose fr_CA.UTF-8
+en_US.UTF-8/Compose fr_CH.UTF-8
+en_US.UTF-8/Compose fr_FR.UTF-8
+en_US.UTF-8/Compose fr_LU.UTF-8
+en_US.UTF-8/Compose ga_IE.UTF-8
+en_US.UTF-8/Compose gd_GB.UTF-8
+en_US.UTF-8/Compose gl_ES.UTF-8
+en_US.UTF-8/Compose gu_IN.UTF-8
+en_US.UTF-8/Compose gv_GB.UTF-8
+en_US.UTF-8/Compose he_IL.UTF-8
+en_US.UTF-8/Compose hi_IN.UTF-8
+en_US.UTF-8/Compose hne_IN.UTF-8
+en_US.UTF-8/Compose hr_HR.UTF-8
+en_US.UTF-8/Compose hu_HU.UTF-8
+en_US.UTF-8/Compose hy_AM.UTF-8
+en_US.UTF-8/Compose id_ID.UTF-8
+en_US.UTF-8/Compose is_IS.UTF-8
+en_US.UTF-8/Compose it_CH.UTF-8
+en_US.UTF-8/Compose it_IT.UTF-8
+en_US.UTF-8/Compose iu_CA.UTF-8
+ja_JP.UTF-8/Compose ja_JP.UTF-8
+en_US.UTF-8/Compose ka_GE.UTF-8
+en_US.UTF-8/Compose kk_KZ.UTF-8
+en_US.UTF-8/Compose kl_GL.UTF-8
+km_KH.UTF-8/Compose km_KH.UTF-8
+en_US.UTF-8/Compose kn_IN.UTF-8
+ko_KR.UTF-8/Compose ko_KR.UTF-8
+en_US.UTF-8/Compose ks_IN.UTF-8
+en_US.UTF-8/Compose ks_IN.UTF-8@devanagari
+en_US.UTF-8/Compose ku_TR.UTF-8
+en_US.UTF-8/Compose kw_GB.UTF-8
+en_US.UTF-8/Compose ky_KG.UTF-8
+en_US.UTF-8/Compose lo_LA.UTF-8
+en_US.UTF-8/Compose lt_LT.UTF-8
+en_US.UTF-8/Compose lv_LV.UTF-8
+en_US.UTF-8/Compose mai_IN.UTF-8
+en_US.UTF-8/Compose mi_NZ.UTF-8
+en_US.UTF-8/Compose mk_MK.UTF-8
+en_US.UTF-8/Compose ml_IN.UTF-8
+en_US.UTF-8/Compose mr_IN.UTF-8
+en_US.UTF-8/Compose ms_MY.UTF-8
+en_US.UTF-8/Compose mt_MT.UTF-8
+en_US.UTF-8/Compose ne_NP.UTF-8
+en_US.UTF-8/Compose nl_BE.UTF-8
+en_US.UTF-8/Compose nl_NL.UTF-8
+en_US.UTF-8/Compose nn_NO.UTF-8
+en_US.UTF-8/Compose no_NO.UTF-8
+en_US.UTF-8/Compose nb_NO.UTF-8
+en_US.UTF-8/Compose nr_ZA.UTF-8
+en_US.UTF-8/Compose nso_ZA.UTF-8
+en_US.UTF-8/Compose ny_NO.UTF-8
+en_US.UTF-8/Compose oc_FR.UTF-8
+en_US.UTF-8/Compose or_IN.UTF-8
+en_US.UTF-8/Compose pa_IN.UTF-8
+en_US.UTF-8/Compose pa_PK.UTF-8
+en_US.UTF-8/Compose pd_DE.UTF-8
+en_US.UTF-8/Compose pd_US.UTF-8
+en_US.UTF-8/Compose ph_PH.UTF-8
+en_US.UTF-8/Compose pl_PL.UTF-8
+en_US.UTF-8/Compose pp_AN.UTF-8
+pt_BR.UTF-8/Compose pt_BR.UTF-8
+pt_PT.UTF-8/Compose pt_PT.UTF-8
+en_US.UTF-8/Compose ro_RO.UTF-8
+ru_RU.UTF-8/Compose ru_RU.UTF-8
+en_US.UTF-8/Compose ru_UA.UTF-8
+en_US.UTF-8/Compose rw_RW.UTF-8
+en_US.UTF-8/Compose sa_IN.UTF-8
+en_US.UTF-8/Compose sd_IN.UTF-8
+en_US.UTF-8/Compose sd_IN.UTF-8@devanagari
+en_US.UTF-8/Compose se_NO.UTF-8
+en_US.UTF-8/Compose sh_BA.UTF-8
+en_US.UTF-8/Compose sh_YU.UTF-8
+en_US.UTF-8/Compose si_LK.UTF-8
+en_US.UTF-8/Compose sk_SK.UTF-8
+en_US.UTF-8/Compose sl_SI.UTF-8
+en_US.UTF-8/Compose sq_AL.UTF-8
+en_US.UTF-8/Compose sr_ME.UTF-8
+en_US.UTF-8/Compose sr_RS.UTF-8
+en_US.UTF-8/Compose sr_YU.UTF-8
+en_US.UTF-8/Compose ss_ZA.UTF-8
+en_US.UTF-8/Compose st_ZA.UTF-8
+en_US.UTF-8/Compose sv_FI.UTF-8
+en_US.UTF-8/Compose sv_SE.UTF-8
+en_US.UTF-8/Compose ta_IN.UTF-8
+en_US.UTF-8/Compose te_IN.UTF-8
+en_US.UTF-8/Compose tg_TJ.UTF-8
+th_TH.UTF-8/Compose th_TH.UTF-8
+en_US.UTF-8/Compose ti_ER.UTF-8
+en_US.UTF-8/Compose ti_ET.UTF-8
+en_US.UTF-8/Compose tl_PH.UTF-8
+en_US.UTF-8/Compose tn_ZA.UTF-8
+en_US.UTF-8/Compose tr_TR.UTF-8
+en_US.UTF-8/Compose ts_ZA.UTF-8
+en_US.UTF-8/Compose tt_RU.UTF-8
+en_US.UTF-8/Compose uk_UA.UTF-8
+en_US.UTF-8/Compose ur_IN.UTF-8
+en_US.UTF-8/Compose ur_PK.UTF-8
+en_US.UTF-8/Compose uz_UZ.UTF-8
+en_US.UTF-8/Compose ve_ZA.UTF-8
+en_US.UTF-8/Compose vi_VN.UTF-8
+en_US.UTF-8/Compose wa_BE.UTF-8
+en_US.UTF-8/Compose xh_ZA.UTF-8
+en_US.UTF-8/Compose yi_US.UTF-8
+zh_CN.UTF-8/Compose zh_CN.UTF-8
+zh_HK.UTF-8/Compose zh_HK.UTF-8
+en_US.UTF-8/Compose zh_SG.UTF-8
+zh_TW.UTF-8/Compose zh_TW.UTF-8
+en_US.UTF-8/Compose zu_ZA.UTF-8
+#
+# This file contains compose table file names.
+# The first word is the compose table file name
+# and the second word is the full locale name.
+#
+#
+iso8859-1/Compose: C
+iso8859-1/Compose: af_ZA.ISO8859-1
+iso8859-6/Compose: ar_AA.ISO8859-6
+iso8859-6/Compose: ar_AE.ISO8859-6
+iso8859-6/Compose: ar_BH.ISO8859-6
+iso8859-6/Compose: ar_DZ.ISO8859-6
+iso8859-6/Compose: ar_EG.ISO8859-6
+iso8859-6/Compose: ar_IQ.ISO8859-6
+iso8859-6/Compose: ar_JO.ISO8859-6
+iso8859-6/Compose: ar_KW.ISO8859-6
+iso8859-6/Compose: ar_LB.ISO8859-6
+iso8859-6/Compose: ar_LY.ISO8859-6
+iso8859-6/Compose: ar_MA.ISO8859-6
+iso8859-6/Compose: ar_OM.ISO8859-6
+iso8859-6/Compose: ar_QA.ISO8859-6
+iso8859-6/Compose: ar_SA.ISO8859-6
+iso8859-6/Compose: ar_SD.ISO8859-6
+iso8859-6/Compose: ar_SY.ISO8859-6
+iso8859-6/Compose: ar_TN.ISO8859-6
+iso8859-6/Compose: ar_YE.ISO8859-6
+iso8859-9e/Compose: az_AZ.ISO8859-9E
+koi8-c/Compose: az_AZ.KOI8-C
+microsoft-cp1251/Compose: be_BY.CP1251
+iso8859-5/Compose: be_BY.ISO8859-5
+iso8859-5/Compose: bg_BG.ISO8859-5
+microsoft-cp1251/Compose: bg_BG.CP1251
+koi8-r/Compose: bg_BG.KOI8-R
+iso8859-1/Compose: br_FR.ISO8859-1
+iso8859-14/Compose: br_FR.ISO8859-14
+iso8859-15/Compose: br_FR.ISO8859-15
+iso8859-2/Compose: bs_BA.ISO8859-2
+iso8859-1/Compose: ca_AD.ISO8859-1
+iso8859-15/Compose: ca_AD.ISO8859-15
+iso8859-1/Compose: ca_ES.ISO8859-1
+iso8859-15/Compose: ca_ES.ISO8859-15
+iso8859-1/Compose: ca_FR.ISO8859-1
+iso8859-15/Compose: ca_FR.ISO8859-15
+iso8859-1/Compose: ca_IT.ISO8859-1
+iso8859-15/Compose: ca_IT.ISO8859-15
+iso8859-2/Compose: cs_CZ.ISO8859-2
+iso8859-1/Compose: cy_GB.ISO8859-1
+iso8859-14/Compose: cy_GB.ISO8859-14
+iso8859-15/Compose: cy_GB.ISO8859-15
+iso8859-1/Compose: da_DK.ISO8859-1
+iso8859-15/Compose: da_DK.ISO8859-15
+iso8859-1/Compose: de_AT.ISO8859-1
+iso8859-15/Compose: de_AT.ISO8859-15
+iso8859-1/Compose: de_BE.ISO8859-1
+iso8859-15/Compose: de_BE.ISO8859-15
+iso8859-1/Compose: de_CH.ISO8859-1
+iso8859-15/Compose: de_CH.ISO8859-15
+iso8859-1/Compose: de_DE.ISO8859-1
+iso8859-15/Compose: de_DE.ISO8859-15
+iso8859-1/Compose: de_LI.ISO8859-1
+iso8859-15/Compose: de_LI.ISO8859-15
+iso8859-1/Compose: de_LU.ISO8859-1
+iso8859-15/Compose: de_LU.ISO8859-15
+iso8859-4/Compose: ee_EE.ISO8859-4
+iso8859-7/Compose: el_GR.ISO8859-7
+iso8859-15/Compose: el_GR.ISO8859-15
+iso8859-1/Compose: en_AU.ISO8859-1
+iso8859-1/Compose: en_BE.ISO8859-1
+iso8859-15/Compose: en_BE.ISO8859-15
+iso8859-1/Compose: en_BW.ISO8859-1
+iso8859-1/Compose: en_BZ.ISO8859-1
+iso8859-1/Compose: en_CA.ISO8859-1
+iso8859-1/Compose: en_EN.ISO8859-1
+iso8859-1/Compose: en_GB.ISO8859-1
+iso8859-15/Compose: en_GB.ISO8859-15
+iso8859-1/Compose: en_HK.ISO8859-1
+iso8859-1/Compose: en_IE.ISO8859-1
+iso8859-15/Compose: en_IE.ISO8859-15
+iso8859-15/Compose: en_IN.ISO8859-15
+iso8859-1/Compose: en_JM.ISO8859-1
+iso8859-1/Compose: en_NZ.ISO8859-1
+iso8859-1/Compose: en_PH.ISO8859-1
+iso8859-1/Compose: en_SG.ISO8859-1
+iso8859-1/Compose: en_TT.ISO8859-1
+iso8859-1/Compose: en_UK.ISO8859-1
+iso8859-15/Compose: en_UK.ISO8859-15
+iso8859-1/Compose: en_US.ISO8859-1
+iso8859-15/Compose: en_US.ISO8859-15
+iso8859-1/Compose: en_ZA.ISO8859-1
+iso8859-15/Compose: en_ZA.ISO8859-15
+iso8859-1/Compose: en_ZW.ISO8859-1
+iso8859-3/Compose: eo_EO.ISO8859-3
+iso8859-3/Compose: eo_XX.ISO8859-3
+iso8859-1/Compose: es_AR.ISO8859-1
+iso8859-1/Compose: es_BO.ISO8859-1
+iso8859-1/Compose: es_CL.ISO8859-1
+iso8859-1/Compose: es_CO.ISO8859-1
+iso8859-1/Compose: es_CR.ISO8859-1
+iso8859-1/Compose: es_DO.ISO8859-1
+iso8859-1/Compose: es_EC.ISO8859-1
+iso8859-1/Compose: es_ES.ISO8859-1
+iso8859-15/Compose: es_ES.ISO8859-15
+iso8859-1/Compose: es_GT.ISO8859-1
+iso8859-1/Compose: es_HN.ISO8859-1
+iso8859-1/Compose: es_MX.ISO8859-1
+iso8859-1/Compose: es_NI.ISO8859-1
+iso8859-1/Compose: es_PA.ISO8859-1
+iso8859-15/Compose: es_PA.ISO8859-15
+iso8859-1/Compose: es_PE.ISO8859-1
+iso8859-15/Compose: es_PE.ISO8859-15
+iso8859-1/Compose: es_PR.ISO8859-1
+iso8859-1/Compose: es_PY.ISO8859-1
+iso8859-15/Compose: es_PY.ISO8859-15
+iso8859-1/Compose: es_SV.ISO8859-1
+iso8859-15/Compose: es_SV.ISO8859-15
+iso8859-1/Compose: es_US.ISO8859-1
+iso8859-1/Compose: es_UY.ISO8859-1
+iso8859-15/Compose: es_UY.ISO8859-15
+iso8859-1/Compose: es_VE.ISO8859-1
+iso8859-15/Compose: es_VE.ISO8859-15
+iso8859-1/Compose: et_EE.ISO8859-1
+iso8859-4/Compose: et_EE.ISO8859-4
+iso8859-13/Compose: et_EE.ISO8859-13
+iso8859-15/Compose: et_EE.ISO8859-15
+iso8859-1/Compose: eu_ES.ISO8859-1
+iso8859-15/Compose: eu_ES.ISO8859-15
+isiri-3342/Compose: fa_IR.ISIRI-3342
+iso8859-1/Compose: fi_FI.ISO8859-1
+iso8859-15/Compose: fi_FI.ISO8859-15
+iso8859-1/Compose: fo_FO.ISO8859-1
+iso8859-15/Compose: fo_FO.ISO8859-15
+iso8859-1/Compose: fr_BE.ISO8859-1
+iso8859-15/Compose: fr_BE.ISO8859-15
+iso8859-1/Compose: fr_CA.ISO8859-1
+iso8859-15/Compose: fr_CA.ISO8859-15
+iso8859-1/Compose: fr_CH.ISO8859-1
+iso8859-15/Compose: fr_CH.ISO8859-15
+iso8859-1/Compose: fr_FR.ISO8859-1
+iso8859-15/Compose: fr_FR.ISO8859-15
+iso8859-1/Compose: fr_LU.ISO8859-1
+iso8859-15/Compose: fr_LU.ISO8859-15
+iso8859-1/Compose: ga_IE.ISO8859-1
+iso8859-14/Compose: ga_IE.ISO8859-14
+iso8859-15/Compose: ga_IE.ISO8859-15
+iso8859-1/Compose: gd_GB.ISO8859-1
+iso8859-14/Compose: gd_GB.ISO8859-14
+iso8859-15/Compose: gd_GB.ISO8859-15
+iso8859-1/Compose: gl_ES.ISO8859-1
+iso8859-15/Compose: gl_ES.ISO8859-15
+iso8859-1/Compose: gv_GB.ISO8859-1
+iso8859-14/Compose: gv_GB.ISO8859-14
+iso8859-15/Compose: gv_GB.ISO8859-15
+iso8859-8/Compose: he_IL.ISO8859-8
+microsoft-cp1255/Compose: he_IL.CP1255
+iscii-dev/Compose: hi_IN.ISCII-DEV
+iso8859-2/Compose: hr_HR.ISO8859-2
+iso8859-2/Compose: hu_HU.ISO8859-2
+armscii-8/Compose: hy_AM.ARMSCII-8
+iso8859-1/Compose: id_ID.ISO8859-1
+iso8859-15/Compose: id_ID.ISO8859-15
+iso8859-1/Compose: is_IS.ISO8859-1
+iso8859-15/Compose: is_IS.ISO8859-15
+iso8859-1/Compose: it_CH.ISO8859-1
+iso8859-15/Compose: it_CH.ISO8859-15
+iso8859-1/Compose: it_IT.ISO8859-1
+iso8859-15/Compose: it_IT.ISO8859-15
+ja/Compose: ja_JP.eucJP
+ja.SJIS/Compose: ja_JP.SJIS
+ja.JIS/Compose: ja_JP.JIS7
+georgian-academy/Compose: ka_GE.GEORGIAN-ACADEMY
+georgian-ps/Compose: ka_GE.GEORGIAN-PS
+iso8859-1/Compose: kl_GL.ISO8859-1
+iso8859-15/Compose: kl_GL.ISO8859-15
+iso8859-1/Compose: kw_GB.ISO8859-1
+iso8859-14/Compose: kw_GB.ISO8859-14
+iso8859-15/Compose: kw_GB.ISO8859-15
+ko/Compose: ko_KR.eucKR
+ibm-cp1133/Compose: lo_LA.IBM-CP1133
+mulelao-1/Compose: lo_LA.MULELAO-1
+iso8859-4/Compose: lt_LT.ISO8859-4
+iso8859-13/Compose: lt_LT.ISO8859-13
+iso8859-4/Compose: lv_LV.ISO8859-4
+iso8859-13/Compose: lv_LV.ISO8859-13
+iso8859-13/Compose: mi_NZ.ISO8859-13
+iso8859-5/Compose: mk_MK.ISO8859-5
+microsoft-cp1251/Compose: mk_MK.CP1251
+iso8859-1/Compose: ms_MY.ISO8859-1
+iso8859-3/Compose: mt_MT.ISO8859-3
+iso8859-1/Compose: nl_BE.ISO8859-1
+iso8859-15/Compose: nl_BE.ISO8859-15
+iso8859-1/Compose: nl_NL.ISO8859-1
+iso8859-15/Compose: nl_NL.ISO8859-15
+iso8859-1/Compose: no_NO.ISO8859-1
+iso8859-15/Compose: no_NO.ISO8859-15
+iso8859-1/Compose: nb_NO.ISO8859-1
+iso8859-15/Compose: nb_NO.ISO8859-15
+iso8859-1/Compose: nn_NO.ISO8859-1
+iso8859-15/Compose: nn_NO.ISO8859-15
+iso8859-1/Compose: nr_ZA.ISO8859-1
+iso8859-15/Compose: nso_ZA.ISO8859-15
+iso8859-1/Compose: ny_NO.ISO8859-1
+iso8859-15/Compose: ny_NO.ISO8859-15
+iso8859-1/Compose: oc_FR.ISO8859-1
+iso8859-15/Compose: oc_FR.ISO8859-15
+iso8859-1/Compose: pd_DE.ISO8859-1
+iso8859-15/Compose: pd_DE.ISO8859-15
+iso8859-1/Compose: pd_US.ISO8859-1
+iso8859-15/Compose: pd_US.ISO8859-15
+iso8859-1/Compose: ph_PH.ISO8859-1
+iso8859-2/Compose: pl_PL.ISO8859-2
+iso8859-1/Compose: pp_AN.ISO8859-1
+iso8859-1/Compose: pt_BR.ISO8859-1
+iso8859-15/Compose: pt_BR.ISO8859-15
+iso8859-1/Compose: pt_PT.ISO8859-1
+iso8859-15/Compose: pt_PT.ISO8859-15
+iso8859-2/Compose: ro_RO.ISO8859-2
+koi8-r/Compose: ru_RU.KOI8-R
+iso8859-5/Compose: ru_RU.ISO8859-5
+microsoft-cp1251/Compose: ru_RU.CP1251
+microsoft-cp1251/Compose: ru_UA.CP1251
+koi8-u/Compose: ru_UA.KOI8-U
+iso8859-1/Compose: rw_RW.ISO8859-1
+iso8859-2/Compose: sh_YU.ISO8859-2
+iso8859-2/Compose: sk_SK.ISO8859-2
+iso8859-2/Compose: sl_SI.ISO8859-2
+iso8859-2/Compose: sq_AL.ISO8859-2
+iso8859-2/Compose: sr_YU.ISO8859-2
+microsoft-cp1251/Compose: sr_YU.CP1251
+iso8859-5/Compose: sr_YU.ISO8859-5
+iso8859-1/Compose: ss_ZA.ISO8859-1
+iso8859-1/Compose: st_ZA.ISO8859-1
+iso8859-1/Compose: sv_FI.ISO8859-1
+iso8859-15/Compose: sv_FI.ISO8859-15
+iso8859-1/Compose: sv_SE.ISO8859-1
+iso8859-15/Compose: sv_SE.ISO8859-15
+tscii-0/Compose: ta_IN.TSCII-0
+koi8-c/Compose: tg_TJ.KOI8-C
+iso8859-1/Compose: tl_PH.ISO8859-1
+iso8859-11/Compose: th_TH.ISO8859-11
+th_TH/Compose: th_TH.TIS620
+iso8859-15/Compose: tn_ZA.ISO8859-15
+iso8859-9/Compose: tr_TR.ISO8859-9
+iso8859-1/Compose: ts_ZA.ISO8859-1
+tatar-cyr/Compose: tt_RU.TATAR-CYR
+microsoft-cp1251/Compose: uk_UA.CP1251
+koi8-c/Compose: tt_RU.KOI8-C
+koi8-u/Compose: uk_UA.KOI8-U
+iso8859-5/Compose: uk_UA.ISO8859-5
+microsoft-cp1256/Compose: ur_PK.CP1256
+iso8859-1/Compose: uz_UZ.ISO8859-1
+vi_VN.viscii/Compose: vi_VN.VISCII
+vi_VN.tcvn/Compose: vi_VN.TCVN
+iso8859-1/Compose: wa_BE.ISO8859-1
+iso8859-15/Compose: wa_BE.ISO8859-15
+iso8859-1/Compose: xh_ZA.ISO8859-1
+microsoft-cp1255/Compose: yi_US.CP1255
+zh_CN/Compose: zh_CN.eucCN
+zh_CN/Compose: zh_CN.gb2312
+zh_CN.gbk/Compose: zh_CN.gbk
+zh_CN.gb18030/Compose: zh_CN.gb18030
+zh_HK.big5/Compose: zh_HK.big5
+zh_HK.big5hkscs/Compose: zh_HK.big5hkscs
+zh_TW.big5/Compose: zh_TW.big5
+zh_TW/Compose: zh_TW.eucTW
+iso8859-1/Compose: zu_ZA.ISO8859-1
+#
+#
+en_US.UTF-8/Compose: C.UTF-8
+en_US.UTF-8/Compose: af_ZA.UTF-8
+am_ET.UTF-8/Compose: am_ET.UTF-8
+en_US.UTF-8/Compose: ar_AA.UTF-8
+en_US.UTF-8/Compose: ar_AE.UTF-8
+en_US.UTF-8/Compose: ar_BH.UTF-8
+en_US.UTF-8/Compose: ar_DZ.UTF-8
+en_US.UTF-8/Compose: ar_EG.UTF-8
+en_US.UTF-8/Compose: ar_IN.UTF-8
+en_US.UTF-8/Compose: ar_IQ.UTF-8
+en_US.UTF-8/Compose: ar_JO.UTF-8
+en_US.UTF-8/Compose: ar_KW.UTF-8
+en_US.UTF-8/Compose: ar_LB.UTF-8
+en_US.UTF-8/Compose: ar_LY.UTF-8
+en_US.UTF-8/Compose: ar_MA.UTF-8
+en_US.UTF-8/Compose: ar_OM.UTF-8
+en_US.UTF-8/Compose: ar_QA.UTF-8
+en_US.UTF-8/Compose: ar_SA.UTF-8
+en_US.UTF-8/Compose: ar_SD.UTF-8
+en_US.UTF-8/Compose: ar_SY.UTF-8
+en_US.UTF-8/Compose: ar_TN.UTF-8
+en_US.UTF-8/Compose: ar_YE.UTF-8
+en_US.UTF-8/Compose: ast_ES.UTF-8
+en_US.UTF-8/Compose: as_IN.UTF-8
+en_US.UTF-8/Compose: az_AZ.UTF-8
+en_US.UTF-8/Compose: be_BY.UTF-8
+en_US.UTF-8/Compose: bg_BG.UTF-8
+en_US.UTF-8/Compose: bn_BD.UTF-8
+en_US.UTF-8/Compose: bn_IN.UTF-8
+en_US.UTF-8/Compose: bo_IN.UTF-8
+en_US.UTF-8/Compose: br_FR.UTF-8
+en_US.UTF-8/Compose: bs_BA.UTF-8
+en_US.UTF-8/Compose: ca_AD.UTF-8
+en_US.UTF-8/Compose: ca_ES.UTF-8
+en_US.UTF-8/Compose: ca_FR.UTF-8
+en_US.UTF-8/Compose: ca_IT.UTF-8
+cs_CZ.UTF-8/Compose: cs_CZ.UTF-8
+en_US.UTF-8/Compose: cy_GB.UTF-8
+en_US.UTF-8/Compose: da_DK.UTF-8
+en_US.UTF-8/Compose: de_AT.UTF-8
+en_US.UTF-8/Compose: de_BE.UTF-8
+en_US.UTF-8/Compose: de_CH.UTF-8
+en_US.UTF-8/Compose: de_DE.UTF-8
+en_US.UTF-8/Compose: de_IT.UTF-8
+en_US.UTF-8/Compose: de_LI.UTF-8
+en_US.UTF-8/Compose: de_LU.UTF-8
+el_GR.UTF-8/Compose: el_CY.UTF-8
+el_GR.UTF-8/Compose: el_GR.UTF-8
+en_US.UTF-8/Compose: en_AU.UTF-8
+en_US.UTF-8/Compose: en_BE.UTF-8
+en_US.UTF-8/Compose: en_BW.UTF-8
+en_US.UTF-8/Compose: en_BZ.UTF-8
+en_US.UTF-8/Compose: en_CA.UTF-8
+en_US.UTF-8/Compose: en_DK.UTF-8
+en_US.UTF-8/Compose: en_EN.UTF-8
+en_US.UTF-8/Compose: en_GB.UTF-8
+en_US.UTF-8/Compose: en_HK.UTF-8
+en_US.UTF-8/Compose: en_IE.UTF-8
+en_US.UTF-8/Compose: en_IN.UTF-8
+en_US.UTF-8/Compose: en_JM.UTF-8
+en_US.UTF-8/Compose: en_MT.UTF-8
+en_US.UTF-8/Compose: en_NZ.UTF-8
+en_US.UTF-8/Compose: en_PH.UTF-8
+en_US.UTF-8/Compose: en_SG.UTF-8
+en_US.UTF-8/Compose: en_TT.UTF-8
+en_US.UTF-8/Compose: en_UK.UTF-8
+en_US.UTF-8/Compose: en_US.UTF-8
+en_US.UTF-8/Compose: en_ZA.UTF-8
+en_US.UTF-8/Compose: en_ZW.UTF-8
+en_US.UTF-8/Compose: eo_EO.UTF-8
+en_US.UTF-8/Compose: eo_XX.UTF-8
+en_US.UTF-8/Compose: es_AR.UTF-8
+en_US.UTF-8/Compose: es_BO.UTF-8
+en_US.UTF-8/Compose: es_CL.UTF-8
+en_US.UTF-8/Compose: es_CO.UTF-8
+en_US.UTF-8/Compose: es_CR.UTF-8
+en_US.UTF-8/Compose: es_DO.UTF-8
+en_US.UTF-8/Compose: es_EC.UTF-8
+en_US.UTF-8/Compose: es_ES.UTF-8
+en_US.UTF-8/Compose: es_GT.UTF-8
+en_US.UTF-8/Compose: es_HN.UTF-8
+en_US.UTF-8/Compose: es_MX.UTF-8
+en_US.UTF-8/Compose: es_NI.UTF-8
+en_US.UTF-8/Compose: es_PA.UTF-8
+en_US.UTF-8/Compose: es_PE.UTF-8
+en_US.UTF-8/Compose: es_PR.UTF-8
+en_US.UTF-8/Compose: es_PY.UTF-8
+en_US.UTF-8/Compose: es_SV.UTF-8
+en_US.UTF-8/Compose: es_US.UTF-8
+en_US.UTF-8/Compose: es_UY.UTF-8
+en_US.UTF-8/Compose: es_VE.UTF-8
+en_US.UTF-8/Compose: et_EE.UTF-8
+en_US.UTF-8/Compose: eu_ES.UTF-8
+en_US.UTF-8/Compose: fa_IR.UTF-8
+fi_FI.UTF-8/Compose: fi_FI.UTF-8
+en_US.UTF-8/Compose: fo_FO.UTF-8
+en_US.UTF-8/Compose: fr_BE.UTF-8
+en_US.UTF-8/Compose: fr_CA.UTF-8
+en_US.UTF-8/Compose: fr_CH.UTF-8
+en_US.UTF-8/Compose: fr_FR.UTF-8
+en_US.UTF-8/Compose: fr_LU.UTF-8
+en_US.UTF-8/Compose: ga_IE.UTF-8
+en_US.UTF-8/Compose: gd_GB.UTF-8
+en_US.UTF-8/Compose: gl_ES.UTF-8
+en_US.UTF-8/Compose: gu_IN.UTF-8
+en_US.UTF-8/Compose: gv_GB.UTF-8
+en_US.UTF-8/Compose: he_IL.UTF-8
+en_US.UTF-8/Compose: hi_IN.UTF-8
+en_US.UTF-8/Compose: hne_IN.UTF-8
+en_US.UTF-8/Compose: hr_HR.UTF-8
+en_US.UTF-8/Compose: hu_HU.UTF-8
+en_US.UTF-8/Compose: hy_AM.UTF-8
+en_US.UTF-8/Compose: id_ID.UTF-8
+en_US.UTF-8/Compose: is_IS.UTF-8
+en_US.UTF-8/Compose: it_CH.UTF-8
+en_US.UTF-8/Compose: it_IT.UTF-8
+en_US.UTF-8/Compose: iu_CA.UTF-8
+ja_JP.UTF-8/Compose: ja_JP.UTF-8
+en_US.UTF-8/Compose: ka_GE.UTF-8
+en_US.UTF-8/Compose: kk_KZ.UTF-8
+en_US.UTF-8/Compose: kl_GL.UTF-8
+km_KH.UTF-8/Compose: km_KH.UTF-8
+en_US.UTF-8/Compose: kn_IN.UTF-8
+ko_KR.UTF-8/Compose: ko_KR.UTF-8
+en_US.UTF-8/Compose: ks_IN.UTF-8
+en_US.UTF-8/Compose: ks_IN.UTF-8@devanagari
+en_US.UTF-8/Compose: ku_TR.UTF-8
+en_US.UTF-8/Compose: kw_GB.UTF-8
+en_US.UTF-8/Compose: ky_KG.UTF-8
+en_US.UTF-8/Compose: lo_LA.UTF-8
+en_US.UTF-8/Compose: lt_LT.UTF-8
+en_US.UTF-8/Compose: lv_LV.UTF-8
+en_US.UTF-8/Compose: mai_IN.UTF-8
+en_US.UTF-8/Compose: mi_NZ.UTF-8
+en_US.UTF-8/Compose: mk_MK.UTF-8
+en_US.UTF-8/Compose: ml_IN.UTF-8
+en_US.UTF-8/Compose: mr_IN.UTF-8
+en_US.UTF-8/Compose: ms_MY.UTF-8
+en_US.UTF-8/Compose: mt_MT.UTF-8
+en_US.UTF-8/Compose: ne_NP.UTF-8
+en_US.UTF-8/Compose: nl_BE.UTF-8
+en_US.UTF-8/Compose: nl_NL.UTF-8
+en_US.UTF-8/Compose: nn_NO.UTF-8
+en_US.UTF-8/Compose: no_NO.UTF-8
+en_US.UTF-8/Compose: nb_NO.UTF-8
+en_US.UTF-8/Compose: nr_ZA.UTF-8
+en_US.UTF-8/Compose: nso_ZA.UTF-8
+en_US.UTF-8/Compose: ny_NO.UTF-8
+en_US.UTF-8/Compose: oc_FR.UTF-8
+en_US.UTF-8/Compose: or_IN.UTF-8
+en_US.UTF-8/Compose: pa_IN.UTF-8
+en_US.UTF-8/Compose: pa_PK.UTF-8
+en_US.UTF-8/Compose: pd_DE.UTF-8
+en_US.UTF-8/Compose: pd_US.UTF-8
+en_US.UTF-8/Compose: ph_PH.UTF-8
+en_US.UTF-8/Compose: pl_PL.UTF-8
+en_US.UTF-8/Compose: pp_AN.UTF-8
+pt_BR.UTF-8/Compose: pt_BR.UTF-8
+pt_PT.UTF-8/Compose: pt_PT.UTF-8
+en_US.UTF-8/Compose: ro_RO.UTF-8
+ru_RU.UTF-8/Compose: ru_RU.UTF-8
+en_US.UTF-8/Compose: ru_UA.UTF-8
+en_US.UTF-8/Compose: rw_RW.UTF-8
+en_US.UTF-8/Compose: sa_IN.UTF-8
+en_US.UTF-8/Compose: sd_IN.UTF-8
+en_US.UTF-8/Compose: sd_IN.UTF-8@devanagari
+en_US.UTF-8/Compose: se_NO.UTF-8
+en_US.UTF-8/Compose: sh_BA.UTF-8
+en_US.UTF-8/Compose: sh_YU.UTF-8
+en_US.UTF-8/Compose: si_LK.UTF-8
+en_US.UTF-8/Compose: sk_SK.UTF-8
+en_US.UTF-8/Compose: sl_SI.UTF-8
+en_US.UTF-8/Compose: sq_AL.UTF-8
+en_US.UTF-8/Compose: sr_ME.UTF-8
+en_US.UTF-8/Compose: sr_RS.UTF-8
+en_US.UTF-8/Compose: sr_YU.UTF-8
+en_US.UTF-8/Compose: ss_ZA.UTF-8
+en_US.UTF-8/Compose: st_ZA.UTF-8
+en_US.UTF-8/Compose: sv_FI.UTF-8
+en_US.UTF-8/Compose: sv_SE.UTF-8
+en_US.UTF-8/Compose: ta_IN.UTF-8
+en_US.UTF-8/Compose: te_IN.UTF-8
+en_US.UTF-8/Compose: tg_TJ.UTF-8
+th_TH.UTF-8/Compose: th_TH.UTF-8
+en_US.UTF-8/Compose: ti_ER.UTF-8
+en_US.UTF-8/Compose: ti_ET.UTF-8
+en_US.UTF-8/Compose: tl_PH.UTF-8
+en_US.UTF-8/Compose: tn_ZA.UTF-8
+en_US.UTF-8/Compose: tr_TR.UTF-8
+en_US.UTF-8/Compose: ts_ZA.UTF-8
+en_US.UTF-8/Compose: tt_RU.UTF-8
+en_US.UTF-8/Compose: uk_UA.UTF-8
+en_US.UTF-8/Compose: ur_IN.UTF-8
+en_US.UTF-8/Compose: ur_PK.UTF-8
+en_US.UTF-8/Compose: uz_UZ.UTF-8
+en_US.UTF-8/Compose: ve_ZA.UTF-8
+en_US.UTF-8/Compose: vi_VN.UTF-8
+en_US.UTF-8/Compose: wa_BE.UTF-8
+en_US.UTF-8/Compose: xh_ZA.UTF-8
+en_US.UTF-8/Compose: yi_US.UTF-8
+zh_CN.UTF-8/Compose: zh_CN.UTF-8
+zh_HK.UTF-8/Compose: zh_HK.UTF-8
+en_US.UTF-8/Compose: zh_SG.UTF-8
+zh_TW.UTF-8/Compose: zh_TW.UTF-8
+en_US.UTF-8/Compose: zu_ZA.UTF-8
diff --git a/test/data/locale/en_US.UTF-8/Compose b/test/data/locale/en_US.UTF-8/Compose
new file mode 100644
index 0000000..6f2f17a
--- /dev/null
+++ b/test/data/locale/en_US.UTF-8/Compose
@@ -0,0 +1,5973 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# UTF-8 (Unicode) compose sequence
+# David.Monniaux@ens.fr
+#
+
+# Part 1 - Manual definitions
+
+# Spacing versions of dead accents
+<dead_tilde> <space> : "~" asciitilde # TILDE
+<dead_tilde> <dead_tilde> : "~" asciitilde # TILDE
+<dead_acute> <space> : "'" apostrophe # APOSTROPHE
+<dead_acute> <dead_acute> : "´" acute # ACUTE ACCENT
+<Multi_key> <apostrophe> <apostrophe> : "´" acute # ACUTE ACCENT
+<dead_grave> <space> : "`" grave # GRAVE ACCENT
+<dead_grave> <dead_grave> : "`" grave # GRAVE ACCENT
+<dead_circumflex> <space> : "^" asciicircum # CIRCUMFLEX ACCENT
+<dead_circumflex> <dead_circumflex> : "^" asciicircum # CIRCUMFLEX ACCENT
+<dead_abovering> <space> : "°" degree # DEGREE SIGN
+<dead_abovering> <dead_abovering> : "°" degree # DEGREE SIGN
+<dead_macron> <space> : "¯" macron # MACRON
+<dead_macron> <dead_macron> : "¯" macron # MACRON
+<Multi_key> <minus> <asciicircum> : "¯" macron # MACRON
+<Multi_key> <asciicircum> <minus> : "¯" macron # MACRON
+<Multi_key> <underscore> <underscore> : "¯" macron # MACRON
+<Multi_key> <underscore> <asciicircum> : "¯" macron # MACRON
+<dead_breve> <space> : "˘" breve # BREVE
+<dead_breve> <dead_breve> : "˘" breve # BREVE
+<Multi_key> <space> <parenleft> : "˘" breve # BREVE
+<Multi_key> <parenleft> <space> : "˘" breve # BREVE
+<dead_abovedot> <space> : "˙" abovedot # DOT ABOVE
+<dead_abovedot> <dead_abovedot> : "˙" abovedot # DOT ABOVE
+<dead_diaeresis> <dead_diaeresis> : "¨" diaeresis # DIAERESIS
+<Multi_key> <quotedbl> <quotedbl> : "¨" diaeresis # DIAERESIS
+<dead_diaeresis> <space> : "\"" quotedbl # REVERSE SOLIDUS
+<dead_doubleacute> <space> : "˝" U2dd # DOUBLE ACUTE ACCENT
+<dead_doubleacute> <dead_doubleacute> : "˝" U2dd # DOUBLE ACUTE ACCENT
+<dead_caron> <space> : "ˇ" caron # CARON
+<dead_caron> <dead_caron> : "ˇ" caron # CARON
+<Multi_key> <space> <less> : "ˇ" caron # CARON
+<Multi_key> <less> <space> : "ˇ" caron # CARON
+<dead_cedilla> <space> : "¸" cedilla # CEDILLA
+<dead_cedilla> <dead_cedilla> : "¸" cedilla # CEDILLA
+<dead_ogonek> <space> : "˛" ogonek # OGONEK
+<dead_ogonek> <dead_ogonek> : "˛" ogonek # OGONEK
+<dead_iota> <space> : "ͺ" U37a # GREEK YPOGEGRAMMENI
+<dead_iota> <dead_iota> : "ͺ" U37a # GREEK YPOGEGRAMMENI
+<Multi_key> <minus> <minus> <space> : "­" U00ad # SOFT HYPHEN
+
+
+# ASCII characters that may be difficult to access
+# on some keyboards.
+<Multi_key> <plus> <plus> : "#" numbersign # NUMBER SIGN
+<Multi_key> <apostrophe> <space> : "'" apostrophe # APOSTROPHE
+<Multi_key> <space> <apostrophe> : "'" apostrophe # APOSTROPHE
+<Multi_key> <A> <T> : "@" at # COMMERCIAL AT
+<Multi_key> <parenleft> <parenleft> : "[" bracketleft # LEFT SQUARE BRACKET
+<Multi_key> <slash> <slash> : "\\" backslash # REVERSE SOLIDUS
+<Multi_key> <slash> <less> : "\\" backslash # REVERSE SOLIDUS
+<Multi_key> <less> <slash> : "\\" backslash # REVERSE SOLIDUS
+<Multi_key> <parenright> <parenright> : "]" bracketright # RIGHT SQUARE BRACKET
+
+<Multi_key> <asciicircum> <space> : "^" asciicircum # CIRCUMFLEX ACCENT
+<Multi_key> <space> <asciicircum> : "^" asciicircum # CIRCUMFLEX ACCENT
+<Multi_key> <greater> <space> : "^" asciicircum # CIRCUMFLEX ACCENT
+<Multi_key> <space> <greater> : "^" asciicircum # CIRCUMFLEX ACCENT
+
+<Multi_key> <grave> <space> : "`" grave # GRAVE ACCENT
+<Multi_key> <space> <grave> : "`" grave # GRAVE ACCENT
+
+<Multi_key> <comma> <space> : "¸" cedilla # CEDILLA
+<Multi_key> <space> <comma> : "¸" cedilla # CEDILLA
+<Multi_key> <comma> <comma> : "¸" cedilla # CEDILLA
+
+<Multi_key> <parenleft> <minus> : "{" braceleft # LEFT CURLY BRACKET
+<Multi_key> <minus> <parenleft> : "{" braceleft # LEFT CURLY BRACKET
+
+<Multi_key> <slash> <asciicircum> : "|" bar # VERTICAL LINE
+<Multi_key> <asciicircum> <slash> : "|" bar # VERTICAL LINE
+<Multi_key> <V> <L> : "|" bar # VERTICAL LINE
+<Multi_key> <L> <V> : "|" bar # VERTICAL LINE
+<Multi_key> <v> <l> : "|" bar # VERTICAL LINE
+<Multi_key> <l> <v> : "|" bar # VERTICAL LINE
+
+<Multi_key> <parenright> <minus> : "}" braceright # RIGHT CURLY BRACKET
+<Multi_key> <minus> <parenright> : "}" braceright # RIGHT CURLY BRACKET
+
+<Multi_key> <asciitilde> <space> : "~" asciitilde # TILDE
+<Multi_key> <space> <asciitilde> : "~" asciitilde # TILDE
+<Multi_key> <minus> <space> : "~" asciitilde # TILDE
+<Multi_key> <space> <minus> : "~" asciitilde # TILDE
+
+# Spaces
+<Multi_key> <space> <space> : " " nobreakspace # NO-BREAK SPACE
+<Multi_key> <space> <period> : " " U2008 # PUNCTUATION SPACE
+
+<Multi_key> <o> <c> : "©" copyright # COPYRIGHT SIGN
+<Multi_key> <o> <C> : "©" copyright # COPYRIGHT SIGN
+<Multi_key> <O> <c> : "©" copyright # COPYRIGHT SIGN
+<Multi_key> <O> <C> : "©" copyright # COPYRIGHT SIGN
+<Multi_key> <C> <o> : "©" copyright # COPYRIGHT SIGN
+<Multi_key> <C> <O> : "©" copyright # COPYRIGHT SIGN
+
+<Multi_key> <o> <r> : "®" registered # REGISTERED SIGN
+<Multi_key> <o> <R> : "®" registered # REGISTERED SIGN
+<Multi_key> <O> <r> : "®" registered # REGISTERED SIGN
+<Multi_key> <O> <R> : "®" registered # REGISTERED SIGN
+<Multi_key> <R> <O> : "®" registered # REGISTERED SIGN
+
+<Multi_key> <period> <greater> : "›" U203a # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+<Multi_key> <period> <less> : "‹" U2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+<Multi_key> <period> <period> : "…" ellipsis # HORIZONTAL ELLIPSIS
+<Multi_key> <period> <minus> : "·" periodcentered # MIDDLE DOT
+<Multi_key> <period> <asciicircum> : "·" periodcentered # MIDDLE DOT
+<Multi_key> <asciicircum> <period> : "·" periodcentered # MIDDLE DOT
+<Multi_key> <period> <equal> : "•" enfilledcircbullet # BULLET
+<Multi_key> <exclam> <asciicircum> : "¦" brokenbar # BROKEN BAR
+<Multi_key> <exclam> <exclam> : "¡" exclamdown # INVERTED EXCLAMATION MARK
+<Multi_key> <p> <exclam> : "¶" paragraph # PILCROW SIGN
+<Multi_key> <P> <exclam> : "¶" paragraph # PILCROW SIGN
+<Multi_key> <plus> <minus> : "±" plusminus # PLUS-MINUS SIGN
+<Multi_key> <minus> <plus> : "±" plusminus # PLUS-MINUS SIGN
+<Multi_key> <question> <question> : "¿" questiondown # INVERTED QUESTION MARK
+<Multi_key> <minus> <d> : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE
+<Multi_key> <minus> <D> : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE
+<Multi_key> <s> <s> : "ß" ssharp # LATIN SMALL LETTER SHARP S
+<Multi_key> <S> <S> : "ẞ" U1e9e # LATIN CAPITAL LETTER SHARP S
+
+<Multi_key> <o> <e> : "œ" oe # LATIN SMALL LIGATURE OE
+<Multi_key> <O> <E> : "Œ" OE # LATIN CAPITAL LIGATURE OE
+<Multi_key> <a> <e> : "æ" ae # LATIN SMALL LETTER AE
+<Multi_key> <A> <E> : "Æ" AE # LATIN CAPITAL LETTER AE
+<Multi_key> <f> <f> : "ff" Ufb00 # LATIN SMALL LIGATURE FF
+<Multi_key> <f> <i> : "fi" Ufb01 # LATIN SMALL LIGATURE FI
+<Multi_key> <f> <l> : "fl" Ufb02 # LATIN SMALL LIGATURE FL
+<Multi_key> <F> <i> : "ffi" Ufb03 # LATIN SMALL LIGATURE FFI
+<Multi_key> <F> <l> : "ffl" Ufb04 # LATIN SMALL LIGATURE FFL
+<Multi_key> <I> <J> : "IJ" U0132 # LATIN CAPITAL LIGATURE IJ
+<Multi_key> <I> <j> : "IJ" U0132 # LATIN CAPITAL LIGATURE IJ
+<Multi_key> <i> <j> : "ij" U0133 # LATIN SMALL LIGATURE IJ
+
+<Multi_key> <o> <o> : "°" degree # DEGREE SIGN
+<Multi_key> <asterisk> <0> : "°" degree # DEGREE SIGN
+<Multi_key> <0> <asterisk> : "°" degree # DEGREE SIGN
+
+# Quotation marks
+<Multi_key> <less> <less> : "«" guillemotleft # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+<Multi_key> <greater> <greater> : "»" guillemotright # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+<Multi_key> <less> <apostrophe> : "‘" U2018 # LEFT SINGLE QUOTATION MARK
+<Multi_key> <apostrophe> <less> : "‘" U2018 # LEFT SINGLE QUOTATION MARK
+<Multi_key> <greater> <apostrophe> : "’" U2019 # RIGHT SINGLE QUOTATION MARK
+<Multi_key> <apostrophe> <greater> : "’" U2019 # RIGHT SINGLE QUOTATION MARK
+<Multi_key> <comma> <apostrophe> : "‚" U201a # SINGLE LOW-9 QUOTATION MARK
+<Multi_key> <apostrophe> <comma> : "‚" U201a # SINGLE LOW-9 QUOTATION MARK
+<Multi_key> <less> <quotedbl> : "“" U201c # LEFT DOUBLE QUOTATION MARK
+<Multi_key> <quotedbl> <less> : "“" U201c # LEFT DOUBLE QUOTATION MARK
+<Multi_key> <greater> <quotedbl> : "”" U201d # RIGHT DOUBLE QUOTATION MARK
+<Multi_key> <quotedbl> <greater> : "”" U201d # RIGHT DOUBLE QUOTATION MARK
+<Multi_key> <comma> <quotedbl> : "„" U201e # DOUBLE LOW-9 QUOTATION MARK
+<Multi_key> <quotedbl> <comma> : "„" U201e # DOUBLE LOW-9 QUOTATION MARK
+
+# Per xxx
+<Multi_key> <percent> <o> : "‰" U2030 # PER MILLE SIGN
+
+# Currencies
+<Multi_key> <C> <E> : "₠" U20a0 # EURO-CURRENCY SIGN
+<Multi_key> <C> <slash> : "₡" U20a1 # COLON SIGN
+<Multi_key> <slash> <C> : "₡" U20a1 # COLON SIGN
+<Multi_key> <C> <r> : "₢" U20a2 # CRUZEIRO SIGN
+<Multi_key> <F> <r> : "₣" U20a3 # FRENCH FRANC SIGN
+<Multi_key> <L> <equal> : "₤" U20a4 # LIRA SIGN
+<Multi_key> <equal> <L> : "₤" U20a4 # LIRA SIGN
+<Multi_key> <m> <slash> : "₥" U20a5 # MILL SIGN
+<Multi_key> <slash> <m> : "₥" U20a5 # MILL SIGN
+<Multi_key> <N> <equal> : "₦" U20a6 # NAIRA SIGN
+<Multi_key> <equal> <N> : "₦" U20a6 # NAIRA SIGN
+<Multi_key> <P> <t> : "₧" U20a7 # PESETA SIGN
+<Multi_key> <R> <s> : "₨" U20a8 # RUPEE SIGN
+<Multi_key> <W> <equal> : "₩" U20a9 # WON SIGN
+<Multi_key> <equal> <W> : "₩" U20a9 # WON SIGN
+# "₪" U20aa NEW SHEQEL SIGN
+<Multi_key> <d> <equal> : "₫" U20ab # DONG SIGN
+<Multi_key> <equal> <d> : "₫" U20ab # DONG SIGN
+<Multi_key> <C> <equal> : "€" EuroSign # EURO SIGN
+<Multi_key> <equal> <C> : "€" EuroSign # EURO SIGN
+<Multi_key> <c> <equal> : "€" EuroSign # EURO SIGN
+<Multi_key> <equal> <c> : "€" EuroSign # EURO SIGN
+<Multi_key> <E> <equal> : "€" EuroSign # EURO SIGN
+<Multi_key> <equal> <E> : "€" EuroSign # EURO SIGN
+<Multi_key> <e> <equal> : "€" EuroSign # EURO SIGN
+<Multi_key> <equal> <e> : "€" EuroSign # EURO SIGN
+<Multi_key> <Cyrillic_ES> <equal> : "€" EuroSign # EURO SIGN
+<Multi_key> <equal> <Cyrillic_ES> : "€" EuroSign # EURO SIGN
+<Multi_key> <Cyrillic_IE> <equal> : "€" EuroSign # EURO SIGN
+<Multi_key> <equal> <Cyrillic_IE> : "€" EuroSign # EURO SIGN
+# "₭" U20ad KIP SIGN
+# "₮" U20ae TUGRIK SIGN
+# "₯" U20af DRACHMA SIGN
+# "₰" U20b0 GERMAN PENNY SIGN
+# "₱" U20b1 PESO SIGN
+# "₲" U20b2 GUARANI SIGN
+# "₳" U20b3 AUSTRAL SIGN
+# "₴" U20b4 HRYVNIA SIGN
+# "₵" U20b5 CEDI SIGN
+
+
+<Multi_key> <bar> <C> : "¢" cent # CENT SIGN
+<Multi_key> <bar> <c> : "¢" cent # CENT SIGN
+<Multi_key> <C> <bar> : "¢" cent # CENT SIGN
+<Multi_key> <c> <bar> : "¢" cent # CENT SIGN
+<Multi_key> <c> <slash> : "¢" cent # CENT SIGN
+<Multi_key> <slash> <c> : "¢" cent # CENT SIGN
+<Multi_key> <L> <minus> : "£" sterling # POUND SIGN
+<Multi_key> <l> <minus> : "£" sterling # POUND SIGN
+<Multi_key> <minus> <L> : "£" sterling # POUND SIGN
+<Multi_key> <minus> <l> : "£" sterling # POUND SIGN
+<Multi_key> <Y> <equal> : "¥" yen # YEN SIGN
+<Multi_key> <y> <equal> : "¥" yen # YEN SIGN
+<Multi_key> <equal> <Y> : "¥" yen # YEN SIGN
+<Multi_key> <equal> <y> : "¥" yen # YEN SIGN
+<Multi_key> <Y> <minus> : "¥" yen # YEN SIGN
+<Multi_key> <minus> <Y> : "¥" yen # YEN SIGN
+<Multi_key> <y> <minus> : "¥" yen # YEN SIGN
+<Multi_key> <minus> <y> : "¥" yen # YEN SIGN
+
+# Long S
+<Multi_key> <f> <s> : "ſ" U017f # LATIN SMALL LETTER LONG S
+<Multi_key> <f> <S> : "ſ" U017f # LATIN SMALL LETTER LONG S
+<dead_abovedot> <Multi_key> <f> <s> : "ẛ" U1e9b # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+<Multi_key> <dead_abovedot> <f> <s> : "ẛ" U1e9b # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+
+# Dashes
+<Multi_key> <minus> <minus> <period> : "–" U2013 # EN DASH
+<Multi_key> <minus> <minus> <minus> : "—" U2014 # EM DASH
+
+# Musical alterations
+<Multi_key> <numbersign> <q> : "♩" U2669 # QUARTER NOTE
+<Multi_key> <numbersign> <e> : "♪" U266a # EIGHTH NOTE
+<Multi_key> <numbersign> <E> : "♫" U266b # BEAMED EIGHTH NOTES
+<Multi_key> <numbersign> <S> : "♬" U266c # BEAMED SIXTEENTH NOTES
+<Multi_key> <numbersign> <b> : "♭" U266d # MUSIC FLAT SIGN
+<Multi_key> <numbersign> <f> : "♮" U266e # MUSIC NATURAL SIGN
+<Multi_key> <numbersign> <numbersign> : "♯" U266f # MUSIC SHARP SIGN
+
+# Other symbols
+<Multi_key> <s> <o> : "§" section # SECTION SIGN
+<Multi_key> <o> <s> : "§" section # SECTION SIGN
+<Multi_key> <S> <O> : "§" section # SECTION SIGN
+<Multi_key> <O> <S> : "§" section # SECTION SIGN
+<Multi_key> <s> <exclam> : "§" section # SECTION SIGN
+<Multi_key> <S> <exclam> : "§" section # SECTION SIGN
+<Multi_key> <Cyrillic_pe> <Cyrillic_a> : "§" section # SECTION SIGN
+
+<Multi_key> <o> <x> : "¤" currency # CURRENCY SIGN
+<Multi_key> <x> <o> : "¤" currency # CURRENCY SIGN
+<Multi_key> <o> <X> : "¤" currency # CURRENCY SIGN
+<Multi_key> <X> <o> : "¤" currency # CURRENCY SIGN
+<Multi_key> <O> <X> : "¤" currency # CURRENCY SIGN
+<Multi_key> <X> <O> : "¤" currency # CURRENCY SIGN
+<Multi_key> <O> <x> : "¤" currency # CURRENCY SIGN
+<Multi_key> <x> <O> : "¤" currency # CURRENCY SIGN
+
+<Multi_key> <P> <P> : "¶" paragraph # PILCROW SIGN
+
+<Multi_key> <N> <o> : "№" numerosign # NUMERO SIGN
+<Multi_key> <N> <O> : "№" numerosign # NUMERO SIGN
+<Multi_key> <Cyrillic_EN> <Cyrillic_o> : "№" numerosign # NUMERO SIGN
+<Multi_key> <Cyrillic_EN> <Cyrillic_O> : "№" numerosign # NUMERO SIGN
+
+<Multi_key> <question> <exclam> : "⸘" U2E18 # INVERTED INTERROBANG
+<Multi_key> <exclam> <question> : "‽" U203D # INTERROBANG
+
+<Multi_key> <C> <C> <C> <P> : "☭" U262D # HAMMER AND SICKLE
+<Multi_key> <O> <A> : "Ⓐ" U24B6 # CIRCLED LATIN CAPITAL LETTER A
+<Multi_key> <less> <3> : "♥" U2665 # BLACK HEART SUIT
+
+<Multi_key> <colon> <parenright> : "☺" U263A # WHITE SMILING FACE
+<Multi_key> <colon> <parenleft> : "☹" U2639 # WHITE FROWNING FACE
+
+# Part 2
+
+# Compose map for Korean Hangul(Choseongul) Conjoining Jamos automatically
+# generated from UnicodeData-2.0.14.txt at
+# ftp://ftp.unicode.org/Public/2.0-Update/UnicodeData-2.0.14.txt
+# by Jungshik Shin <jshin@jshin.net> 2002-10-17
+# There are some conflicts among sequences, but I left them alone.
+#
+# group 1: cluster jamos made of three basic jamos
+
+
+<Multi_key> <U1100> <U1100> : "ᄁ" U1101 # HANGUL CHOSEONG SSANGKIYEOK
+<Multi_key> <U1103> <U1103> : "ᄄ" U1104 # HANGUL CHOSEONG SSANGTIKEUT
+<Multi_key> <U1107> <U1107> : "ᄈ" U1108 # HANGUL CHOSEONG SSANGPIEUP
+<Multi_key> <U1109> <U1109> : "ᄊ" U110a # HANGUL CHOSEONG SSANGSIOS
+<Multi_key> <U110C> <U110C> : "ᄍ" U110d # HANGUL CHOSEONG SSANGCIEUC
+<Multi_key> <U1102> <U1100> : "ᄓ" U1113 # HANGUL CHOSEONG NIEUN-KIYEOK
+<Multi_key> <U1102> <U1102> : "ᄔ" U1114 # HANGUL CHOSEONG SSANGNIEUN
+<Multi_key> <U1102> <U1103> : "ᄕ" U1115 # HANGUL CHOSEONG NIEUN-TIKEUT
+<Multi_key> <U1102> <U1107> : "ᄖ" U1116 # HANGUL CHOSEONG NIEUN-PIEUP
+<Multi_key> <U1103> <U1100> : "ᄗ" U1117 # HANGUL CHOSEONG TIKEUT-KIYEOK
+<Multi_key> <U1105> <U1102> : "ᄘ" U1118 # HANGUL CHOSEONG RIEUL-NIEUN
+<Multi_key> <U1105> <U1105> : "ᄙ" U1119 # HANGUL CHOSEONG SSANGRIEUL
+<Multi_key> <U1105> <U1112> : "ᄚ" U111a # HANGUL CHOSEONG RIEUL-HIEUH
+<Multi_key> <U1105> <U110B> : "ᄛ" U111b # HANGUL CHOSEONG KAPYEOUNRIEUL
+<Multi_key> <U1106> <U1107> : "ᄜ" U111c # HANGUL CHOSEONG MIEUM-PIEUP
+<Multi_key> <U1106> <U110B> : "ᄝ" U111d # HANGUL CHOSEONG KAPYEOUNMIEUM
+<Multi_key> <U1107> <U1100> : "ᄞ" U111e # HANGUL CHOSEONG PIEUP-KIYEOK
+<Multi_key> <U1107> <U1102> : "ᄟ" U111f # HANGUL CHOSEONG PIEUP-NIEUN
+<Multi_key> <U1107> <U1103> : "ᄠ" U1120 # HANGUL CHOSEONG PIEUP-TIKEUT
+<Multi_key> <U1107> <U1109> : "ᄡ" U1121 # HANGUL CHOSEONG PIEUP-SIOS
+<Multi_key> <U1107> <U110C> : "ᄧ" U1127 # HANGUL CHOSEONG PIEUP-CIEUC
+<Multi_key> <U1107> <U110E> : "ᄨ" U1128 # HANGUL CHOSEONG PIEUP-CHIEUCH
+<Multi_key> <U1107> <U1110> : "ᄩ" U1129 # HANGUL CHOSEONG PIEUP-THIEUTH
+<Multi_key> <U1107> <U1111> : "ᄪ" U112a # HANGUL CHOSEONG PIEUP-PHIEUPH
+<Multi_key> <U1107> <U110B> : "ᄫ" U112b # HANGUL CHOSEONG KAPYEOUNPIEUP
+<Multi_key> <U1109> <U1100> : "ᄭ" U112d # HANGUL CHOSEONG SIOS-KIYEOK
+<Multi_key> <U1109> <U1102> : "ᄮ" U112e # HANGUL CHOSEONG SIOS-NIEUN
+<Multi_key> <U1109> <U1103> : "ᄯ" U112f # HANGUL CHOSEONG SIOS-TIKEUT
+<Multi_key> <U1109> <U1105> : "ᄰ" U1130 # HANGUL CHOSEONG SIOS-RIEUL
+<Multi_key> <U1109> <U1106> : "ᄱ" U1131 # HANGUL CHOSEONG SIOS-MIEUM
+<Multi_key> <U1109> <U1107> : "ᄲ" U1132 # HANGUL CHOSEONG SIOS-PIEUP
+<Multi_key> <U1109> <U110B> : "ᄵ" U1135 # HANGUL CHOSEONG SIOS-IEUNG
+<Multi_key> <U1109> <U110C> : "ᄶ" U1136 # HANGUL CHOSEONG SIOS-CIEUC
+<Multi_key> <U1109> <U110E> : "ᄷ" U1137 # HANGUL CHOSEONG SIOS-CHIEUCH
+<Multi_key> <U1109> <U110F> : "ᄸ" U1138 # HANGUL CHOSEONG SIOS-KHIEUKH
+<Multi_key> <U1109> <U1110> : "ᄹ" U1139 # HANGUL CHOSEONG SIOS-THIEUTH
+<Multi_key> <U1109> <U1111> : "ᄺ" U113a # HANGUL CHOSEONG SIOS-PHIEUPH
+<Multi_key> <U1109> <U1112> : "ᄻ" U113b # HANGUL CHOSEONG SIOS-HIEUH
+<Multi_key> <U113C> <U113C> : "ᄽ" U113d # HANGUL CHOSEONG CHITUEUMSSANGSIOS
+<Multi_key> <U113E> <U113E> : "ᄿ" U113f # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+<Multi_key> <U110B> <U1100> : "ᅁ" U1141 # HANGUL CHOSEONG IEUNG-KIYEOK
+<Multi_key> <U110B> <U1103> : "ᅂ" U1142 # HANGUL CHOSEONG IEUNG-TIKEUT
+<Multi_key> <U110B> <U1106> : "ᅃ" U1143 # HANGUL CHOSEONG IEUNG-MIEUM
+<Multi_key> <U110B> <U1107> : "ᅄ" U1144 # HANGUL CHOSEONG IEUNG-PIEUP
+<Multi_key> <U110B> <U1109> : "ᅅ" U1145 # HANGUL CHOSEONG IEUNG-SIOS
+<Multi_key> <U110B> <U1140> : "ᅆ" U1146 # HANGUL CHOSEONG IEUNG-PANSIOS
+<Multi_key> <U110B> <U110B> : "ᅇ" U1147 # HANGUL CHOSEONG SSANGIEUNG
+<Multi_key> <U110B> <U110C> : "ᅈ" U1148 # HANGUL CHOSEONG IEUNG-CIEUC
+<Multi_key> <U110B> <U110E> : "ᅉ" U1149 # HANGUL CHOSEONG IEUNG-CHIEUCH
+<Multi_key> <U110B> <U1110> : "ᅊ" U114a # HANGUL CHOSEONG IEUNG-THIEUTH
+<Multi_key> <U110B> <U1111> : "ᅋ" U114b # HANGUL CHOSEONG IEUNG-PHIEUPH
+<Multi_key> <U110C> <U110B> : "ᅍ" U114d # HANGUL CHOSEONG CIEUC-IEUNG
+<Multi_key> <U114E> <U114E> : "ᅏ" U114f # HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+<Multi_key> <U1150> <U1150> : "ᅑ" U1151 # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+<Multi_key> <U110E> <U110F> : "ᅒ" U1152 # HANGUL CHOSEONG CHIEUCH-KHIEUKH
+<Multi_key> <U110E> <U1112> : "ᅓ" U1153 # HANGUL CHOSEONG CHIEUCH-HIEUH
+<Multi_key> <U1111> <U1107> : "ᅖ" U1156 # HANGUL CHOSEONG PHIEUPH-PIEUP
+<Multi_key> <U1111> <U110B> : "ᅗ" U1157 # HANGUL CHOSEONG KAPYEOUNPHIEUPH
+<Multi_key> <U1112> <U1112> : "ᅘ" U1158 # HANGUL CHOSEONG SSANGHIEUH
+<Multi_key> <U1161> <U1175> : "ᅢ" U1162 # HANGUL JUNGSEONG AE
+<Multi_key> <U1163> <U1175> : "ᅤ" U1164 # HANGUL JUNGSEONG YAE
+<Multi_key> <U1165> <U1175> : "ᅦ" U1166 # HANGUL JUNGSEONG E
+<Multi_key> <U1167> <U1175> : "ᅨ" U1168 # HANGUL JUNGSEONG YE
+<Multi_key> <U1169> <U1161> : "ᅪ" U116a # HANGUL JUNGSEONG WA
+<Multi_key> <U1169> <U1175> : "ᅬ" U116c # HANGUL JUNGSEONG OE
+<Multi_key> <U116E> <U1165> : "ᅯ" U116f # HANGUL JUNGSEONG WEO
+<Multi_key> <U116E> <U1175> : "ᅱ" U1171 # HANGUL JUNGSEONG WI
+<Multi_key> <U1173> <U1175> : "ᅴ" U1174 # HANGUL JUNGSEONG YI
+<Multi_key> <U1161> <U1169> : "ᅶ" U1176 # HANGUL JUNGSEONG A-O
+<Multi_key> <U1161> <U116E> : "ᅷ" U1177 # HANGUL JUNGSEONG A-U
+<Multi_key> <U1163> <U1169> : "ᅸ" U1178 # HANGUL JUNGSEONG YA-O
+<Multi_key> <U1163> <U116D> : "ᅹ" U1179 # HANGUL JUNGSEONG YA-YO
+<Multi_key> <U1165> <U1169> : "ᅺ" U117a # HANGUL JUNGSEONG EO-O
+<Multi_key> <U1165> <U116E> : "ᅻ" U117b # HANGUL JUNGSEONG EO-U
+<Multi_key> <U1165> <U1173> : "ᅼ" U117c # HANGUL JUNGSEONG EO-EU
+<Multi_key> <U1167> <U1169> : "ᅽ" U117d # HANGUL JUNGSEONG YEO-O
+<Multi_key> <U1167> <U116E> : "ᅾ" U117e # HANGUL JUNGSEONG YEO-U
+<Multi_key> <U1169> <U1165> : "ᅿ" U117f # HANGUL JUNGSEONG O-EO
+<Multi_key> <U1169> <U1166> : "ᆀ" U1180 # HANGUL JUNGSEONG O-E
+<Multi_key> <U1169> <U1168> : "ᆁ" U1181 # HANGUL JUNGSEONG O-YE
+<Multi_key> <U1169> <U1169> : "ᆂ" U1182 # HANGUL JUNGSEONG O-O
+<Multi_key> <U1169> <U116E> : "ᆃ" U1183 # HANGUL JUNGSEONG O-U
+<Multi_key> <U116D> <U1163> : "ᆄ" U1184 # HANGUL JUNGSEONG YO-YA
+<Multi_key> <U116D> <U1164> : "ᆅ" U1185 # HANGUL JUNGSEONG YO-YAE
+<Multi_key> <U116D> <U1167> : "ᆆ" U1186 # HANGUL JUNGSEONG YO-YEO
+<Multi_key> <U116D> <U1169> : "ᆇ" U1187 # HANGUL JUNGSEONG YO-O
+<Multi_key> <U116D> <U1175> : "ᆈ" U1188 # HANGUL JUNGSEONG YO-I
+<Multi_key> <U116E> <U1161> : "ᆉ" U1189 # HANGUL JUNGSEONG U-A
+<Multi_key> <U116E> <U1162> : "ᆊ" U118a # HANGUL JUNGSEONG U-AE
+<Multi_key> <U116E> <U1168> : "ᆌ" U118c # HANGUL JUNGSEONG U-YE
+<Multi_key> <U116E> <U116E> : "ᆍ" U118d # HANGUL JUNGSEONG U-U
+<Multi_key> <U1172> <U1161> : "ᆎ" U118e # HANGUL JUNGSEONG YU-A
+<Multi_key> <U1172> <U1165> : "ᆏ" U118f # HANGUL JUNGSEONG YU-EO
+<Multi_key> <U1172> <U1166> : "ᆐ" U1190 # HANGUL JUNGSEONG YU-E
+<Multi_key> <U1172> <U1167> : "ᆑ" U1191 # HANGUL JUNGSEONG YU-YEO
+<Multi_key> <U1172> <U1168> : "ᆒ" U1192 # HANGUL JUNGSEONG YU-YE
+<Multi_key> <U1172> <U116E> : "ᆓ" U1193 # HANGUL JUNGSEONG YU-U
+<Multi_key> <U1172> <U1175> : "ᆔ" U1194 # HANGUL JUNGSEONG YU-I
+<Multi_key> <U1173> <U116E> : "ᆕ" U1195 # HANGUL JUNGSEONG EU-U
+<Multi_key> <U1173> <U1173> : "ᆖ" U1196 # HANGUL JUNGSEONG EU-EU
+<Multi_key> <U1174> <U116E> : "ᆗ" U1197 # HANGUL JUNGSEONG YI-U
+<Multi_key> <U1175> <U1161> : "ᆘ" U1198 # HANGUL JUNGSEONG I-A
+<Multi_key> <U1175> <U1163> : "ᆙ" U1199 # HANGUL JUNGSEONG I-YA
+<Multi_key> <U1175> <U1169> : "ᆚ" U119a # HANGUL JUNGSEONG I-O
+<Multi_key> <U1175> <U116E> : "ᆛ" U119b # HANGUL JUNGSEONG I-U
+<Multi_key> <U1175> <U1173> : "ᆜ" U119c # HANGUL JUNGSEONG I-EU
+<Multi_key> <U1175> <U119E> : "ᆝ" U119d # HANGUL JUNGSEONG I-ARAEA
+<Multi_key> <U119E> <U1165> : "ᆟ" U119f # HANGUL JUNGSEONG ARAEA-EO
+<Multi_key> <U119E> <U116E> : "ᆠ" U11a0 # HANGUL JUNGSEONG ARAEA-U
+<Multi_key> <U119E> <U1175> : "ᆡ" U11a1 # HANGUL JUNGSEONG ARAEA-I
+<Multi_key> <U119E> <U119E> : "ᆢ" U11a2 # HANGUL JUNGSEONG SSANGARAEA
+<Multi_key> <U11A8> <U11A8> : "ᆩ" U11a9 # HANGUL JONGSEONG SSANGKIYEOK
+<Multi_key> <U11A8> <U11BA> : "ᆪ" U11aa # HANGUL JONGSEONG KIYEOK-SIOS
+<Multi_key> <U11AB> <U11BD> : "ᆬ" U11ac # HANGUL JONGSEONG NIEUN-CIEUC
+<Multi_key> <U11AB> <U11C2> : "ᆭ" U11ad # HANGUL JONGSEONG NIEUN-HIEUH
+<Multi_key> <U11AF> <U11A8> : "ᆰ" U11b0 # HANGUL JONGSEONG RIEUL-KIYEOK
+<Multi_key> <U11AF> <U11B7> : "ᆱ" U11b1 # HANGUL JONGSEONG RIEUL-MIEUM
+<Multi_key> <U11AF> <U11B8> : "ᆲ" U11b2 # HANGUL JONGSEONG RIEUL-PIEUP
+<Multi_key> <U11AF> <U11BA> : "ᆳ" U11b3 # HANGUL JONGSEONG RIEUL-SIOS
+<Multi_key> <U11AF> <U11C0> : "ᆴ" U11b4 # HANGUL JONGSEONG RIEUL-THIEUTH
+<Multi_key> <U11AF> <U11C1> : "ᆵ" U11b5 # HANGUL JONGSEONG RIEUL-PHIEUPH
+<Multi_key> <U11AF> <U11C2> : "ᆶ" U11b6 # HANGUL JONGSEONG RIEUL-HIEUH
+<Multi_key> <U11B8> <U11BA> : "ᆹ" U11b9 # HANGUL JONGSEONG PIEUP-SIOS
+<Multi_key> <U11BA> <U11BA> : "ᆻ" U11bb # HANGUL JONGSEONG SSANGSIOS
+<Multi_key> <U11A8> <U11AF> : "ᇃ" U11c3 # HANGUL JONGSEONG KIYEOK-RIEUL
+<Multi_key> <U11AB> <U11A8> : "ᇅ" U11c5 # HANGUL JONGSEONG NIEUN-KIYEOK
+<Multi_key> <U11AB> <U11AE> : "ᇆ" U11c6 # HANGUL JONGSEONG NIEUN-TIKEUT
+<Multi_key> <U11AB> <U11BA> : "ᇇ" U11c7 # HANGUL JONGSEONG NIEUN-SIOS
+<Multi_key> <U11AB> <U11EB> : "ᇈ" U11c8 # HANGUL JONGSEONG NIEUN-PANSIOS
+<Multi_key> <U11AB> <U11C0> : "ᇉ" U11c9 # HANGUL JONGSEONG NIEUN-THIEUTH
+<Multi_key> <U11AE> <U11A8> : "ᇊ" U11ca # HANGUL JONGSEONG TIKEUT-KIYEOK
+<Multi_key> <U11AE> <U11AF> : "ᇋ" U11cb # HANGUL JONGSEONG TIKEUT-RIEUL
+<Multi_key> <U11AF> <U11AB> : "ᇍ" U11cd # HANGUL JONGSEONG RIEUL-NIEUN
+<Multi_key> <U11AF> <U11AE> : "ᇎ" U11ce # HANGUL JONGSEONG RIEUL-TIKEUT
+<Multi_key> <U11AF> <U11AF> : "ᇐ" U11d0 # HANGUL JONGSEONG SSANGRIEUL
+<Multi_key> <U11AF> <U11EB> : "ᇗ" U11d7 # HANGUL JONGSEONG RIEUL-PANSIOS
+<Multi_key> <U11AF> <U11BF> : "ᇘ" U11d8 # HANGUL JONGSEONG RIEUL-KHIEUKH
+<Multi_key> <U11AF> <U11F9> : "ᇙ" U11d9 # HANGUL JONGSEONG RIEUL-YEORINHIEUH
+<Multi_key> <U11B7> <U11A8> : "ᇚ" U11da # HANGUL JONGSEONG MIEUM-KIYEOK
+<Multi_key> <U11B7> <U11AF> : "ᇛ" U11db # HANGUL JONGSEONG MIEUM-RIEUL
+<Multi_key> <U11B7> <U11B8> : "ᇜ" U11dc # HANGUL JONGSEONG MIEUM-PIEUP
+<Multi_key> <U11B7> <U11BA> : "ᇝ" U11dd # HANGUL JONGSEONG MIEUM-SIOS
+<Multi_key> <U11B7> <U11EB> : "ᇟ" U11df # HANGUL JONGSEONG MIEUM-PANSIOS
+<Multi_key> <U11B7> <U11BE> : "ᇠ" U11e0 # HANGUL JONGSEONG MIEUM-CHIEUCH
+<Multi_key> <U11B7> <U11C2> : "ᇡ" U11e1 # HANGUL JONGSEONG MIEUM-HIEUH
+<Multi_key> <U11B7> <U11BC> : "ᇢ" U11e2 # HANGUL JONGSEONG KAPYEOUNMIEUM
+<Multi_key> <U11B8> <U11AF> : "ᇣ" U11e3 # HANGUL JONGSEONG PIEUP-RIEUL
+<Multi_key> <U11B8> <U11C1> : "ᇤ" U11e4 # HANGUL JONGSEONG PIEUP-PHIEUPH
+<Multi_key> <U11B8> <U11C2> : "ᇥ" U11e5 # HANGUL JONGSEONG PIEUP-HIEUH
+<Multi_key> <U11B8> <U11BC> : "ᇦ" U11e6 # HANGUL JONGSEONG KAPYEOUNPIEUP
+<Multi_key> <U11BA> <U11A8> : "ᇧ" U11e7 # HANGUL JONGSEONG SIOS-KIYEOK
+<Multi_key> <U11BA> <U11AE> : "ᇨ" U11e8 # HANGUL JONGSEONG SIOS-TIKEUT
+<Multi_key> <U11BA> <U11AF> : "ᇩ" U11e9 # HANGUL JONGSEONG SIOS-RIEUL
+<Multi_key> <U11BA> <U11B8> : "ᇪ" U11ea # HANGUL JONGSEONG SIOS-PIEUP
+<Multi_key> <U11BC> <U11A8> : "ᇬ" U11ec # HANGUL JONGSEONG IEUNG-KIYEOK
+<Multi_key> <U11BC> <U11BC> : "ᇮ" U11ee # HANGUL JONGSEONG SSANGIEUNG
+<Multi_key> <U11BC> <U11BF> : "ᇯ" U11ef # HANGUL JONGSEONG IEUNG-KHIEUKH
+<Multi_key> <U11F0> <U11BA> : "ᇱ" U11f1 # HANGUL JONGSEONG YESIEUNG-SIOS
+<Multi_key> <U11F0> <U11EB> : "ᇲ" U11f2 # HANGUL JONGSEONG YESIEUNG-PANSIOS
+<Multi_key> <U11C1> <U11B8> : "ᇳ" U11f3 # HANGUL JONGSEONG PHIEUPH-PIEUP
+<Multi_key> <U11C1> <U11BC> : "ᇴ" U11f4 # HANGUL JONGSEONG KAPYEOUNPHIEUPH
+<Multi_key> <U11C2> <U11AB> : "ᇵ" U11f5 # HANGUL JONGSEONG HIEUH-NIEUN
+<Multi_key> <U11C2> <U11AF> : "ᇶ" U11f6 # HANGUL JONGSEONG HIEUH-RIEUL
+<Multi_key> <U11C2> <U11B7> : "ᇷ" U11f7 # HANGUL JONGSEONG HIEUH-MIEUM
+<Multi_key> <U11C2> <U11B8> : "ᇸ" U11f8 # HANGUL JONGSEONG HIEUH-PIEUP
+<Multi_key> <U1121> <U1100> : "ᄢ" U1122 # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+<Multi_key> <U1121> <U1103> : "ᄣ" U1123 # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+<Multi_key> <U1121> <U1107> : "ᄤ" U1124 # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+<Multi_key> <U1121> <U1109> : "ᄥ" U1125 # HANGUL CHOSEONG PIEUP-SSANGSIOS
+<Multi_key> <U1121> <U110C> : "ᄦ" U1126 # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+<Multi_key> <U1108> <U110B> : "ᄬ" U112c # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+<Multi_key> <U1132> <U1100> : "ᄳ" U1133 # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+<Multi_key> <U110A> <U1109> : "ᄴ" U1134 # HANGUL CHOSEONG SIOS-SSANGSIOS
+<Multi_key> <U116A> <U1175> : "ᅫ" U116b # HANGUL JUNGSEONG WAE
+<Multi_key> <U116F> <U1175> : "ᅰ" U1170 # HANGUL JUNGSEONG WE
+<Multi_key> <U116F> <U1173> : "ᆋ" U118b # HANGUL JUNGSEONG U-EO-EU
+<Multi_key> <U11AA> <U11A8> : "ᇄ" U11c4 # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+<Multi_key> <U11B0> <U11BA> : "ᇌ" U11cc # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+<Multi_key> <U11CE> <U11C2> : "ᇏ" U11cf # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+<Multi_key> <U11B1> <U11A8> : "ᇑ" U11d1 # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+<Multi_key> <U11B1> <U11BA> : "ᇒ" U11d2 # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+<Multi_key> <U11B2> <U11BA> : "ᇓ" U11d3 # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+<Multi_key> <U11B2> <U11C2> : "ᇔ" U11d4 # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+<Multi_key> <U11B2> <U11BC> : "ᇕ" U11d5 # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+<Multi_key> <U11B3> <U11BA> : "ᇖ" U11d6 # HANGUL JONGSEONG RIEUL-SSANGSIOS
+<Multi_key> <U11DD> <U11BA> : "ᇞ" U11de # HANGUL JONGSEONG MIEUM-SSANGSIOS
+<Multi_key> <U11EC> <U11A8> : "ᇭ" U11ed # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+<Multi_key> <U1107> <U112D> : "ᄢ" U1122 # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+<Multi_key> <U1107> <U112F> : "ᄣ" U1123 # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+<Multi_key> <U1107> <U1132> : "ᄤ" U1124 # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+<Multi_key> <U1107> <U110A> : "ᄥ" U1125 # HANGUL CHOSEONG PIEUP-SSANGSIOS
+<Multi_key> <U1107> <U1136> : "ᄦ" U1126 # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+<Multi_key> <U1107> <U112B> : "ᄬ" U112c # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+<Multi_key> <U1109> <U111E> : "ᄳ" U1133 # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+<Multi_key> <U1109> <U110A> : "ᄴ" U1134 # HANGUL CHOSEONG SIOS-SSANGSIOS
+<Multi_key> <U1169> <U1162> : "ᅫ" U116b # HANGUL JUNGSEONG WAE
+<Multi_key> <U116E> <U1166> : "ᅰ" U1170 # HANGUL JUNGSEONG WE
+<Multi_key> <U116E> <U117C> : "ᆋ" U118b # HANGUL JUNGSEONG U-EO-EU
+<Multi_key> <U11A8> <U11E7> : "ᇄ" U11c4 # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+<Multi_key> <U11AF> <U11AA> : "ᇌ" U11cc # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+<Multi_key> <U11AF> <U11DA> : "ᇑ" U11d1 # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+<Multi_key> <U11AF> <U11DD> : "ᇒ" U11d2 # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+<Multi_key> <U11AF> <U11B9> : "ᇓ" U11d3 # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+<Multi_key> <U11AF> <U11E5> : "ᇔ" U11d4 # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+<Multi_key> <U11AF> <U11E6> : "ᇕ" U11d5 # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+<Multi_key> <U11AF> <U11BB> : "ᇖ" U11d6 # HANGUL JONGSEONG RIEUL-SSANGSIOS
+<Multi_key> <U11B7> <U11BB> : "ᇞ" U11de # HANGUL JONGSEONG MIEUM-SSANGSIOS
+<Multi_key> <U11BC> <U11A9> : "ᇭ" U11ed # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+
+# Part 3
+<Multi_key> <comma> <minus> : "¬" notsign # NOT SIGN
+<Multi_key> <minus> <comma> : "¬" notsign # NOT SIGN
+<dead_circumflex> <Multi_key> <underscore> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
+<Multi_key> <asciicircum> <underscore> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
+<dead_circumflex> <Multi_key> <underbar> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
+<Multi_key> <asciicircum> <underbar> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
+<dead_circumflex> <2> : "²" twosuperior # SUPERSCRIPT TWO
+<Multi_key> <asciicircum> <2> : "²" twosuperior # SUPERSCRIPT TWO
+<dead_circumflex> <KP_Space> : "²" twosuperior # SUPERSCRIPT TWO
+<Multi_key> <asciicircum> <KP_Space> : "²" twosuperior # SUPERSCRIPT TWO
+<dead_circumflex> <KP_2> : "²" twosuperior # SUPERSCRIPT TWO
+<Multi_key> <asciicircum> <KP_2> : "²" twosuperior # SUPERSCRIPT TWO
+<Multi_key> <2> <asciicircum> : "²" twosuperior # SUPERSCRIPT TWO
+<dead_circumflex> <3> : "³" threesuperior # SUPERSCRIPT THREE
+<Multi_key> <asciicircum> <3> : "³" threesuperior # SUPERSCRIPT THREE
+<dead_circumflex> <KP_3> : "³" threesuperior # SUPERSCRIPT THREE
+<Multi_key> <asciicircum> <KP_3> : "³" threesuperior # SUPERSCRIPT THREE
+<Multi_key> <3> <asciicircum> : "³" threesuperior # SUPERSCRIPT THREE
+<Multi_key> <m> <u> : "µ" mu # MICRO SIGN
+<Multi_key> <slash> <u> : "µ" mu # MICRO SIGN
+<Multi_key> <u> <slash> : "µ" mu # MICRO SIGN
+<dead_circumflex> <1> : "¹" onesuperior # SUPERSCRIPT ONE
+<Multi_key> <asciicircum> <1> : "¹" onesuperior # SUPERSCRIPT ONE
+<dead_circumflex> <KP_1> : "¹" onesuperior # SUPERSCRIPT ONE
+<Multi_key> <asciicircum> <KP_1> : "¹" onesuperior # SUPERSCRIPT ONE
+<Multi_key> <1> <asciicircum> : "¹" onesuperior # SUPERSCRIPT ONE
+<dead_circumflex> <Multi_key> <underscore> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
+<Multi_key> <asciicircum> <underscore> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
+<dead_circumflex> <Multi_key> <underbar> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
+<Multi_key> <asciicircum> <underbar> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
+<Multi_key> <1> <4> : "¼" onequarter # VULGAR FRACTION ONE QUARTER
+<Multi_key> <1> <2> : "½" onehalf # VULGAR FRACTION ONE HALF
+<Multi_key> <3> <4> : "¾" threequarters # VULGAR FRACTION THREE QUARTERS
+<dead_grave> <A> : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE
+<Multi_key> <grave> <A> : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE
+<Multi_key> <A> <grave> : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE
+<dead_acute> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
+<Multi_key> <acute> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
+<Multi_key> <apostrophe> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
+<Multi_key> <A> <apostrophe> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
+<Multi_key> <A> <acute> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
+<dead_circumflex> <A> : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <A> : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+<Multi_key> <greater> <A> : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+<Multi_key> <A> <greater> : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+<Multi_key> <A> <asciicircum> : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+<dead_tilde> <A> : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE
+<Multi_key> <asciitilde> <A> : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE
+<Multi_key> <A> <asciitilde> : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE
+<dead_diaeresis> <A> : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS
+<Multi_key> <quotedbl> <A> : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS
+<Multi_key> <A> <quotedbl> : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS
+<Multi_key> <A> <diaeresis> : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS
+<Multi_key> <diaeresis> <A> : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS
+<dead_abovering> <A> : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE
+<Multi_key> <o> <A> : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE
+<Multi_key> <asterisk> <A> : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE
+<Multi_key> <A> <asterisk> : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE
+<Multi_key> <A> <A> : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE
+<dead_cedilla> <C> : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA
+<Multi_key> <comma> <C> : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA
+<Multi_key> <C> <comma> : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA
+<Multi_key> <cedilla> <C> : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA
+<dead_grave> <E> : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE
+<Multi_key> <grave> <E> : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE
+<Multi_key> <E> <grave> : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE
+<dead_acute> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
+<Multi_key> <acute> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
+<Multi_key> <apostrophe> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
+<Multi_key> <E> <apostrophe> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
+<Multi_key> <E> <acute> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
+<dead_circumflex> <E> : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <E> : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+<Multi_key> <greater> <E> : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+<Multi_key> <E> <greater> : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+<Multi_key> <E> <asciicircum> : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+<dead_diaeresis> <E> : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS
+<Multi_key> <quotedbl> <E> : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS
+<Multi_key> <E> <quotedbl> : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS
+<Multi_key> <E> <diaeresis> : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS
+<Multi_key> <diaeresis> <E> : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS
+<dead_grave> <I> : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE
+<Multi_key> <grave> <I> : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE
+<Multi_key> <I> <grave> : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE
+<dead_acute> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
+<Multi_key> <acute> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
+<Multi_key> <I> <acute> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
+<Multi_key> <apostrophe> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
+<Multi_key> <I> <apostrophe> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
+<dead_circumflex> <I> : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <I> : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+<Multi_key> <I> <asciicircum> : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+<Multi_key> <greater> <I> : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+<Multi_key> <I> <greater> : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+<dead_diaeresis> <I> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
+<Multi_key> <quotedbl> <I> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
+<Multi_key> <I> <quotedbl> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
+<Multi_key> <diaeresis> <I> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
+<Multi_key> <I> <diaeresis> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
+<dead_acute> <J> : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <apostrophe> <J> : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <J> <apostrophe> : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <acute> <J> : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <J> <acute> : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <D> <H> : "Ð" ETH # LATIN CAPITAL LETTER ETH
+<dead_tilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
+<Multi_key> <asciitilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
+<Multi_key> <N> <asciitilde> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
+<dead_grave> <O> : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE
+<Multi_key> <grave> <O> : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE
+<Multi_key> <O> <grave> : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE
+<dead_acute> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
+<Multi_key> <acute> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
+<Multi_key> <O> <acute> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
+<Multi_key> <apostrophe> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
+<Multi_key> <O> <apostrophe> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
+<dead_circumflex> <O> : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <O> : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+<Multi_key> <O> <asciicircum> : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+<Multi_key> <greater> <O> : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+<Multi_key> <O> <greater> : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+<dead_tilde> <O> : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE
+<Multi_key> <asciitilde> <O> : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE
+<Multi_key> <O> <asciitilde> : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE
+<dead_diaeresis> <O> : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS
+<Multi_key> <quotedbl> <O> : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS
+<Multi_key> <O> <quotedbl> : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS
+<Multi_key> <diaeresis> <O> : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS
+<Multi_key> <O> <diaeresis> : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS
+<Multi_key> <x> <x> : "×" multiply # MULTIPLICATION SIGN
+<dead_stroke> <O> : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE
+<Multi_key> <slash> <O> : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE
+<Multi_key> <O> <slash> : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE
+<Multi_key> <KP_Divide> <O> : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE
+<dead_grave> <U> : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE
+<Multi_key> <grave> <U> : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE
+<Multi_key> <U> <grave> : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE
+<dead_acute> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
+<Multi_key> <acute> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
+<Multi_key> <U> <acute> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
+<Multi_key> <apostrophe> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
+<Multi_key> <U> <apostrophe> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
+<dead_circumflex> <U> : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <U> : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+<Multi_key> <U> <asciicircum> : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+<Multi_key> <greater> <U> : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+<Multi_key> <U> <greater> : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+<dead_diaeresis> <U> : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS
+<Multi_key> <quotedbl> <U> : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS
+<Multi_key> <U> <quotedbl> : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS
+<Multi_key> <diaeresis> <U> : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS
+<Multi_key> <U> <diaeresis> : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS
+<dead_acute> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
+<Multi_key> <acute> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
+<Multi_key> <Y> <acute> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
+<Multi_key> <apostrophe> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
+<Multi_key> <Y> <apostrophe> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
+<Multi_key> <T> <H> : "Þ" THORN # LATIN CAPITAL LETTER THORN
+<dead_grave> <a> : "à" agrave # LATIN SMALL LETTER A WITH GRAVE
+<Multi_key> <grave> <a> : "à" agrave # LATIN SMALL LETTER A WITH GRAVE
+<Multi_key> <a> <grave> : "à" agrave # LATIN SMALL LETTER A WITH GRAVE
+<dead_acute> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
+<Multi_key> <acute> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
+<Multi_key> <a> <acute> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
+<Multi_key> <apostrophe> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
+<Multi_key> <a> <apostrophe> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
+<dead_circumflex> <a> : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <a> : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX
+<Multi_key> <a> <asciicircum> : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX
+<Multi_key> <greater> <a> : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX
+<Multi_key> <a> <greater> : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX
+<dead_tilde> <a> : "ã" atilde # LATIN SMALL LETTER A WITH TILDE
+<Multi_key> <asciitilde> <a> : "ã" atilde # LATIN SMALL LETTER A WITH TILDE
+<Multi_key> <a> <asciitilde> : "ã" atilde # LATIN SMALL LETTER A WITH TILDE
+<dead_diaeresis> <a> : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS
+<Multi_key> <quotedbl> <a> : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS
+<Multi_key> <a> <quotedbl> : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS
+<Multi_key> <diaeresis> <a> : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS
+<Multi_key> <a> <diaeresis> : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS
+<dead_abovering> <a> : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE
+<Multi_key> <o> <a> : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE
+<Multi_key> <asterisk> <a> : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE
+<Multi_key> <a> <asterisk> : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE
+<Multi_key> <a> <a> : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE
+<dead_cedilla> <c> : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA
+<Multi_key> <comma> <c> : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA
+<Multi_key> <c> <comma> : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA
+<Multi_key> <cedilla> <c> : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA
+<dead_grave> <e> : "è" egrave # LATIN SMALL LETTER E WITH GRAVE
+<Multi_key> <grave> <e> : "è" egrave # LATIN SMALL LETTER E WITH GRAVE
+<Multi_key> <e> <grave> : "è" egrave # LATIN SMALL LETTER E WITH GRAVE
+<dead_acute> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
+<Multi_key> <acute> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
+<Multi_key> <e> <acute> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
+<Multi_key> <apostrophe> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
+<Multi_key> <e> <apostrophe> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
+<dead_circumflex> <e> : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <e> : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX
+<Multi_key> <e> <asciicircum> : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX
+<Multi_key> <greater> <e> : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX
+<Multi_key> <e> <greater> : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX
+<dead_diaeresis> <e> : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS
+<Multi_key> <quotedbl> <e> : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS
+<Multi_key> <e> <quotedbl> : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS
+<Multi_key> <diaeresis> <e> : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS
+<Multi_key> <e> <diaeresis> : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS
+<dead_grave> <i> : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE
+<Multi_key> <grave> <i> : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE
+<Multi_key> <i> <grave> : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE
+<dead_acute> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
+<Multi_key> <acute> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
+<Multi_key> <i> <acute> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
+<Multi_key> <apostrophe> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
+<Multi_key> <i> <apostrophe> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
+<dead_circumflex> <i> : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <i> : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX
+<Multi_key> <i> <asciicircum> : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX
+<Multi_key> <greater> <i> : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX
+<Multi_key> <i> <greater> : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX
+<dead_diaeresis> <i> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
+<Multi_key> <quotedbl> <i> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
+<Multi_key> <i> <quotedbl> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
+<Multi_key> <diaeresis> <i> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
+<Multi_key> <i> <diaeresis> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
+<dead_acute> <j> : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <apostrophe> <j> : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <j> <apostrophe> : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <acute> <j> : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <j> <acute> : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301
+<Multi_key> <d> <h> : "ð" eth # LATIN SMALL LETTER ETH
+<dead_tilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
+<Multi_key> <asciitilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
+<Multi_key> <n> <asciitilde> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
+<dead_grave> <o> : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE
+<Multi_key> <grave> <o> : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE
+<Multi_key> <o> <grave> : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE
+<dead_acute> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
+<Multi_key> <acute> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
+<Multi_key> <o> <acute> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
+<Multi_key> <apostrophe> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
+<Multi_key> <o> <apostrophe> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
+<dead_circumflex> <o> : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <o> : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX
+<Multi_key> <o> <asciicircum> : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX
+<Multi_key> <greater> <o> : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX
+<Multi_key> <o> <greater> : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX
+<dead_tilde> <o> : "õ" otilde # LATIN SMALL LETTER O WITH TILDE
+<Multi_key> <asciitilde> <o> : "õ" otilde # LATIN SMALL LETTER O WITH TILDE
+<Multi_key> <o> <asciitilde> : "õ" otilde # LATIN SMALL LETTER O WITH TILDE
+<dead_diaeresis> <o> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS
+<Multi_key> <o> <diaeresis> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS
+<Multi_key> <diaeresis> <o> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS
+<Multi_key> <quotedbl> <o> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS
+<Multi_key> <o> <quotedbl> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS
+<Multi_key> <colon> <minus> : "÷" division # DIVISION SIGN
+<Multi_key> <minus> <colon> : "÷" division # DIVISION SIGN
+<dead_stroke> <o> : "ø" oslash # LATIN SMALL LETTER O WITH STROKE
+<Multi_key> <slash> <o> : "ø" oslash # LATIN SMALL LETTER O WITH STROKE
+<Multi_key> <o> <slash> : "ø" oslash # LATIN SMALL LETTER O WITH STROKE
+<Multi_key> <KP_Divide> <o> : "ø" oslash # LATIN SMALL LETTER O WITH STROKE
+<dead_grave> <u> : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE
+<Multi_key> <grave> <u> : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE
+<Multi_key> <u> <grave> : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE
+<dead_acute> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
+<Multi_key> <acute> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
+<Multi_key> <u> <acute> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
+<Multi_key> <apostrophe> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
+<Multi_key> <u> <apostrophe> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
+<dead_circumflex> <u> : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <u> : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX
+<Multi_key> <u> <asciicircum> : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX
+<Multi_key> <greater> <u> : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX
+<Multi_key> <u> <greater> : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX
+<dead_diaeresis> <u> : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS
+<Multi_key> <quotedbl> <u> : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS
+<Multi_key> <u> <quotedbl> : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS
+<Multi_key> <diaeresis> <u> : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS
+<Multi_key> <u> <diaeresis> : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS
+<dead_acute> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
+<Multi_key> <acute> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
+<Multi_key> <y> <acute> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
+<Multi_key> <apostrophe> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
+<Multi_key> <y> <apostrophe> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
+<Multi_key> <t> <h> : "þ" thorn # LATIN SMALL LETTER THORN
+<dead_diaeresis> <y> : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS
+<Multi_key> <quotedbl> <y> : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS
+<Multi_key> <y> <quotedbl> : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS
+<Multi_key> <diaeresis> <y> : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS
+<Multi_key> <y> <diaeresis> : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS
+<dead_macron> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
+<Multi_key> <macron> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
+<Multi_key> <underscore> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
+<Multi_key> <A> <underscore> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
+<Multi_key> <minus> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
+<Multi_key> <A> <minus> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
+<dead_macron> <a> : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON
+<Multi_key> <macron> <a> : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON
+<Multi_key> <underscore> <a> : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON
+<Multi_key> <a> <underscore> : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON
+<Multi_key> <minus> <a> : "ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
+<Multi_key> <a> <minus> : "ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
+<dead_breve> <A> : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE
+<Multi_key> <U> <A> : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE
+<Multi_key> <b> <A> : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE
+<Multi_key> <A> <parenleft> : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE
+<dead_breve> <a> : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE
+<Multi_key> <U> <a> : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE
+<Multi_key> <b> <a> : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE
+<Multi_key> <a> <parenleft> : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE
+<dead_ogonek> <A> : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK
+<Multi_key> <semicolon> <A> : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK
+<Multi_key> <comma> <A> : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK
+<Multi_key> <A> <comma> : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK
+<dead_ogonek> <a> : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK
+<Multi_key> <semicolon> <a> : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK
+<Multi_key> <comma> <a> : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK
+<Multi_key> <a> <comma> : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK
+<dead_acute> <C> : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE
+<Multi_key> <acute> <C> : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE
+<Multi_key> <apostrophe> <C> : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE
+<Multi_key> <C> <apostrophe> : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE
+<dead_acute> <c> : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE
+<Multi_key> <acute> <c> : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE
+<Multi_key> <apostrophe> <c> : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE
+<Multi_key> <c> <apostrophe> : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE
+<dead_circumflex> <C> : "Ĉ" U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <C> : "Ĉ" U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+<dead_circumflex> <c> : "ĉ" U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <c> : "ĉ" U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
+<dead_abovedot> <C> : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
+<Multi_key> <period> <C> : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
+<Multi_key> <C> <period> : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
+<dead_abovedot> <c> : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE
+<Multi_key> <period> <c> : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE
+<Multi_key> <c> <period> : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE
+<dead_caron> <C> : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON
+<Multi_key> <c> <C> : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON
+<Multi_key> <less> <C> : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON
+<Multi_key> <C> <less> : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON
+<dead_caron> <c> : "č" U010D # LATIN SMALL LETTER C WITH CARON
+<Multi_key> <c> <c> : "č" U010D # LATIN SMALL LETTER C WITH CARON
+<Multi_key> <less> <c> : "č" U010D # LATIN SMALL LETTER C WITH CARON
+<Multi_key> <c> <less> : "č" U010D # LATIN SMALL LETTER C WITH CARON
+<dead_caron> <D> : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON
+<Multi_key> <c> <D> : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON
+<Multi_key> <less> <D> : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON
+<Multi_key> <D> <less> : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON
+<dead_caron> <d> : "ď" U010F # LATIN SMALL LETTER D WITH CARON
+<Multi_key> <c> <d> : "ď" U010F # LATIN SMALL LETTER D WITH CARON
+<Multi_key> <less> <d> : "ď" U010F # LATIN SMALL LETTER D WITH CARON
+<Multi_key> <d> <less> : "ď" U010F # LATIN SMALL LETTER D WITH CARON
+<dead_stroke> <D> : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE
+<Multi_key> <slash> <D> : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE
+<Multi_key> <KP_Divide> <D> : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE
+<Multi_key> <D> <minus> : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE
+<dead_stroke> <d> : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE
+<Multi_key> <slash> <d> : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE
+<Multi_key> <d> <minus> : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE
+<Multi_key> <KP_Divide> <d> : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE
+<dead_macron> <E> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
+<Multi_key> <macron> <E> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
+<Multi_key> <underscore> <E> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
+<Multi_key> <E> <underscore> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
+<Multi_key> <minus> <E> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
+<Multi_key> <E> <minus> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
+<dead_macron> <e> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
+<Multi_key> <macron> <e> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
+<Multi_key> <underscore> <e> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
+<Multi_key> <e> <underscore> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
+<Multi_key> <minus> <e> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
+<Multi_key> <e> <minus> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
+<dead_breve> <E> : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE
+<Multi_key> <U> <E> : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE
+<Multi_key> <b> <E> : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE
+<dead_breve> <e> : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE
+<Multi_key> <U> <e> : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE
+<Multi_key> <b> <e> : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE
+<dead_abovedot> <E> : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+<Multi_key> <period> <E> : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+<Multi_key> <E> <period> : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+<dead_abovedot> <e> : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE
+<Multi_key> <period> <e> : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE
+<Multi_key> <e> <period> : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE
+<dead_ogonek> <E> : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK
+<Multi_key> <semicolon> <E> : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK
+<Multi_key> <comma> <E> : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK
+<Multi_key> <E> <comma> : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK
+<dead_ogonek> <e> : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK
+<Multi_key> <semicolon> <e> : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK
+<Multi_key> <comma> <e> : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK
+<Multi_key> <e> <comma> : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK
+<dead_caron> <E> : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON
+<Multi_key> <c> <E> : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON
+<Multi_key> <less> <E> : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON
+<Multi_key> <E> <less> : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON
+<dead_caron> <e> : "ě" U011B # LATIN SMALL LETTER E WITH CARON
+<Multi_key> <c> <e> : "ě" U011B # LATIN SMALL LETTER E WITH CARON
+<Multi_key> <less> <e> : "ě" U011B # LATIN SMALL LETTER E WITH CARON
+<Multi_key> <e> <less> : "ě" U011B # LATIN SMALL LETTER E WITH CARON
+<dead_circumflex> <G> : "Ĝ" U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <G> : "Ĝ" U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+<dead_circumflex> <g> : "ĝ" U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <g> : "ĝ" U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
+<dead_breve> <G> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
+<Multi_key> <U> <G> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
+<Multi_key> <G> <U> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
+<Multi_key> <b> <G> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
+<Multi_key> <breve> <G> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
+<Multi_key> <G> <breve> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
+<Multi_key> <G> <parenleft> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
+<dead_breve> <g> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
+<Multi_key> <U> <g> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
+<Multi_key> <g> <U> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
+<Multi_key> <b> <g> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
+<Multi_key> <breve> <g> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
+<Multi_key> <g> <breve> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
+<Multi_key> <g> <parenleft> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
+<dead_abovedot> <G> : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+<Multi_key> <period> <G> : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+<Multi_key> <G> <period> : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+<dead_abovedot> <g> : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE
+<Multi_key> <period> <g> : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE
+<Multi_key> <g> <period> : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE
+<dead_cedilla> <G> : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA
+<Multi_key> <comma> <G> : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA
+<Multi_key> <G> <comma> : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA
+<Multi_key> <cedilla> <G> : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA
+<dead_cedilla> <g> : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA
+<Multi_key> <comma> <g> : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA
+<Multi_key> <g> <comma> : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA
+<Multi_key> <cedilla> <g> : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA
+<dead_circumflex> <H> : "Ĥ" U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <H> : "Ĥ" U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+<dead_circumflex> <h> : "ĥ" U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <h> : "ĥ" U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
+<dead_stroke> <H> : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE
+<Multi_key> <slash> <H> : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE
+<Multi_key> <KP_Divide> <H> : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE
+<dead_stroke> <h> : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE
+<Multi_key> <slash> <h> : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE
+<Multi_key> <KP_Divide> <h> : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE
+<dead_tilde> <I> : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE
+<Multi_key> <asciitilde> <I> : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE
+<Multi_key> <I> <asciitilde> : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE
+<dead_tilde> <i> : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE
+<Multi_key> <asciitilde> <i> : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE
+<Multi_key> <i> <asciitilde> : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE
+<dead_macron> <I> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
+<Multi_key> <macron> <I> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
+<Multi_key> <underscore> <I> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
+<Multi_key> <I> <underscore> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
+<Multi_key> <minus> <I> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
+<Multi_key> <I> <minus> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
+<dead_macron> <i> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
+<Multi_key> <macron> <i> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
+<Multi_key> <underscore> <i> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
+<Multi_key> <i> <underscore> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
+<Multi_key> <minus> <i> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
+<Multi_key> <i> <minus> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
+<dead_breve> <I> : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE
+<Multi_key> <U> <I> : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE
+<Multi_key> <b> <I> : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE
+<dead_breve> <i> : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE
+<Multi_key> <U> <i> : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE
+<Multi_key> <b> <i> : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE
+<dead_ogonek> <I> : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK
+<Multi_key> <semicolon> <I> : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK
+<Multi_key> <comma> <I> : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK
+<Multi_key> <I> <comma> : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK
+<dead_ogonek> <i> : "į" U012F # LATIN SMALL LETTER I WITH OGONEK
+<Multi_key> <semicolon> <i> : "į" U012F # LATIN SMALL LETTER I WITH OGONEK
+<Multi_key> <i> <semicolon> : "į" U012F # LATIN SMALL LETTER I WITH OGONEK
+<Multi_key> <comma> <i> : "į" U012F # LATIN SMALL LETTER I WITH OGONEK
+<Multi_key> <i> <comma> : "į" U012F # LATIN SMALL LETTER I WITH OGONEK
+<dead_abovedot> <I> : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+<Multi_key> <period> <I> : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+<Multi_key> <I> <period> : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+<dead_abovedot> <i> : "ı" U0131 # LATIN SMALL LETTER DOTLESS I
+<Multi_key> <i> <period> : "ı" U0131 # LATIN SMALL LETTER DOTLESS I
+<Multi_key> <period> <i> : "ı" U0131 # LATIN SMALL LETTER DOTLESS I
+<dead_circumflex> <J> : "Ĵ" U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <J> : "Ĵ" U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+<dead_circumflex> <j> : "ĵ" U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <j> : "ĵ" U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
+<dead_cedilla> <K> : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA
+<Multi_key> <comma> <K> : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA
+<Multi_key> <K> <comma> : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA
+<Multi_key> <cedilla> <K> : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA
+<dead_cedilla> <k> : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA
+<Multi_key> <comma> <k> : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA
+<Multi_key> <k> <comma> : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA
+<Multi_key> <cedilla> <k> : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA
+<Multi_key> <k> <k> : "ĸ" U0138 # LATIN SMALL LETTER KRA
+<dead_acute> <L> : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE
+<Multi_key> <acute> <L> : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE
+<Multi_key> <apostrophe> <L> : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE
+<Multi_key> <L> <apostrophe> : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE
+<dead_acute> <l> : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE
+<Multi_key> <acute> <l> : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE
+<Multi_key> <apostrophe> <l> : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE
+<Multi_key> <l> <apostrophe> : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE
+<dead_cedilla> <L> : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA
+<Multi_key> <comma> <L> : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA
+<Multi_key> <L> <comma> : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA
+<Multi_key> <cedilla> <L> : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA
+<dead_cedilla> <l> : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA
+<Multi_key> <comma> <l> : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA
+<Multi_key> <l> <comma> : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA
+<Multi_key> <cedilla> <l> : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA
+<dead_caron> <L> : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON
+<Multi_key> <c> <L> : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON
+<Multi_key> <less> <L> : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON
+<Multi_key> <L> <less> : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON
+<dead_caron> <l> : "ľ" U013E # LATIN SMALL LETTER L WITH CARON
+<Multi_key> <c> <l> : "ľ" U013E # LATIN SMALL LETTER L WITH CARON
+<Multi_key> <less> <l> : "ľ" U013E # LATIN SMALL LETTER L WITH CARON
+<Multi_key> <l> <less> : "ľ" U013E # LATIN SMALL LETTER L WITH CARON
+<dead_stroke> <L> : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE
+<Multi_key> <slash> <L> : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE
+<Multi_key> <L> <slash> : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE
+<Multi_key> <KP_Divide> <L> : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE
+<dead_stroke> <l> : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE
+<Multi_key> <slash> <l> : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE
+<Multi_key> <l> <slash> : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE
+<Multi_key> <KP_Divide> <l> : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE
+<dead_acute> <N> : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE
+<Multi_key> <acute> <N> : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE
+<Multi_key> <apostrophe> <N> : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE
+<Multi_key> <N> <apostrophe> : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE
+<dead_acute> <n> : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE
+<Multi_key> <acute> <n> : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE
+<Multi_key> <apostrophe> <n> : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE
+<Multi_key> <n> <apostrophe> : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE
+<dead_cedilla> <N> : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA
+<Multi_key> <comma> <N> : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA
+<Multi_key> <N> <comma> : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA
+<Multi_key> <cedilla> <N> : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA
+<dead_cedilla> <n> : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA
+<Multi_key> <comma> <n> : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA
+<Multi_key> <n> <comma> : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA
+<Multi_key> <cedilla> <n> : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA
+<dead_caron> <N> : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON
+<Multi_key> <c> <N> : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON
+<Multi_key> <less> <N> : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON
+<Multi_key> <N> <less> : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON
+<dead_caron> <n> : "ň" U0148 # LATIN SMALL LETTER N WITH CARON
+<Multi_key> <c> <n> : "ň" U0148 # LATIN SMALL LETTER N WITH CARON
+<Multi_key> <less> <n> : "ň" U0148 # LATIN SMALL LETTER N WITH CARON
+<Multi_key> <n> <less> : "ň" U0148 # LATIN SMALL LETTER N WITH CARON
+<Multi_key> <N> <G> : "Ŋ" U014A # LATIN CAPITAL LETTER ENG
+<Multi_key> <n> <g> : "ŋ" U014B # LATIN SMALL LETTER ENG
+<dead_macron> <O> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
+<Multi_key> <macron> <O> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
+<Multi_key> <underscore> <O> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
+<Multi_key> <O> <underscore> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
+<Multi_key> <minus> <O> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
+<Multi_key> <O> <minus> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
+<dead_macron> <o> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
+<Multi_key> <macron> <o> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
+<Multi_key> <underscore> <o> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
+<Multi_key> <o> <underscore> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
+<Multi_key> <minus> <o> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
+<Multi_key> <o> <minus> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
+<dead_breve> <O> : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE
+<Multi_key> <U> <O> : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE
+<Multi_key> <b> <O> : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE
+<dead_breve> <o> : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE
+<Multi_key> <U> <o> : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE
+<Multi_key> <b> <o> : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE
+<dead_doubleacute> <O> : "Ő" U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+<Multi_key> <equal> <O> : "Ő" U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+<dead_doubleacute> <o> : "ő" U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+<Multi_key> <equal> <o> : "ő" U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+<dead_acute> <R> : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE
+<Multi_key> <acute> <R> : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE
+<Multi_key> <apostrophe> <R> : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE
+<Multi_key> <R> <apostrophe> : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE
+<dead_acute> <r> : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE
+<Multi_key> <acute> <r> : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE
+<Multi_key> <apostrophe> <r> : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE
+<Multi_key> <r> <apostrophe> : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE
+<dead_cedilla> <R> : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA
+<Multi_key> <comma> <R> : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA
+<Multi_key> <R> <comma> : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA
+<Multi_key> <cedilla> <R> : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA
+<dead_cedilla> <r> : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA
+<Multi_key> <comma> <r> : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA
+<Multi_key> <r> <comma> : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA
+<Multi_key> <cedilla> <r> : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA
+<dead_caron> <R> : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON
+<Multi_key> <c> <R> : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON
+<Multi_key> <less> <R> : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON
+<Multi_key> <R> <less> : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON
+<dead_caron> <r> : "ř" U0159 # LATIN SMALL LETTER R WITH CARON
+<Multi_key> <c> <r> : "ř" U0159 # LATIN SMALL LETTER R WITH CARON
+<Multi_key> <less> <r> : "ř" U0159 # LATIN SMALL LETTER R WITH CARON
+<Multi_key> <r> <less> : "ř" U0159 # LATIN SMALL LETTER R WITH CARON
+<dead_acute> <S> : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE
+<Multi_key> <acute> <S> : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE
+<Multi_key> <apostrophe> <S> : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE
+<Multi_key> <S> <apostrophe> : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE
+<dead_acute> <s> : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE
+<Multi_key> <acute> <s> : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE
+<Multi_key> <apostrophe> <s> : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE
+<Multi_key> <s> <apostrophe> : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE
+<dead_circumflex> <S> : "Ŝ" U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <S> : "Ŝ" U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+<dead_circumflex> <s> : "ŝ" U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <s> : "ŝ" U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
+<dead_cedilla> <S> : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA
+<Multi_key> <comma> <S> : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA
+<Multi_key> <S> <comma> : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA
+<Multi_key> <cedilla> <S> : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA
+<dead_cedilla> <s> : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA
+<Multi_key> <comma> <s> : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA
+<Multi_key> <s> <comma> : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA
+<Multi_key> <cedilla> <s> : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA
+<Multi_key> <s> <cedilla> : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA
+<dead_caron> <S> : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON
+<Multi_key> <c> <S> : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON
+<Multi_key> <less> <S> : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON
+<Multi_key> <S> <less> : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON
+<dead_caron> <s> : "š" U0161 # LATIN SMALL LETTER S WITH CARON
+<Multi_key> <c> <s> : "š" U0161 # LATIN SMALL LETTER S WITH CARON
+<Multi_key> <less> <s> : "š" U0161 # LATIN SMALL LETTER S WITH CARON
+<Multi_key> <s> <less> : "š" U0161 # LATIN SMALL LETTER S WITH CARON
+<dead_cedilla> <T> : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA
+<Multi_key> <comma> <T> : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA
+<Multi_key> <T> <comma> : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA
+<Multi_key> <cedilla> <T> : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA
+<dead_cedilla> <t> : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA
+<Multi_key> <comma> <t> : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA
+<Multi_key> <t> <comma> : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA
+<Multi_key> <cedilla> <t> : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA
+<dead_caron> <T> : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON
+<Multi_key> <c> <T> : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON
+<Multi_key> <less> <T> : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON
+<Multi_key> <T> <less> : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON
+<dead_caron> <t> : "ť" U0165 # LATIN SMALL LETTER T WITH CARON
+<Multi_key> <c> <t> : "ť" U0165 # LATIN SMALL LETTER T WITH CARON
+<Multi_key> <less> <t> : "ť" U0165 # LATIN SMALL LETTER T WITH CARON
+<Multi_key> <t> <less> : "ť" U0165 # LATIN SMALL LETTER T WITH CARON
+<dead_stroke> <T> : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE
+<Multi_key> <slash> <T> : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE
+<Multi_key> <KP_Divide> <T> : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE
+<Multi_key> <T> <slash> : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE
+<Multi_key> <T> <minus> : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE
+<dead_stroke> <t> : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE
+<Multi_key> <slash> <t> : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE
+<Multi_key> <KP_Divide> <t> : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE
+<Multi_key> <t> <slash> : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE
+<Multi_key> <t> <minus> : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE
+<dead_tilde> <U> : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE
+<Multi_key> <asciitilde> <U> : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE
+<Multi_key> <U> <asciitilde> : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE
+<dead_tilde> <u> : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE
+<Multi_key> <asciitilde> <u> : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE
+<Multi_key> <u> <asciitilde> : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE
+<dead_macron> <U> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
+<Multi_key> <macron> <U> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
+<Multi_key> <underscore> <U> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
+<Multi_key> <U> <underscore> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
+<Multi_key> <minus> <U> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
+<Multi_key> <U> <minus> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
+<dead_macron> <u> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
+<Multi_key> <macron> <u> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
+<Multi_key> <underscore> <u> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
+<Multi_key> <u> <underscore> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
+<Multi_key> <minus> <u> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
+<Multi_key> <u> <minus> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
+<dead_breve> <U> : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE
+<Multi_key> <U> <U> : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE
+<Multi_key> <b> <U> : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE
+<dead_breve> <u> : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE
+<Multi_key> <U> <u> : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE
+<Multi_key> <u> <u> : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE
+<Multi_key> <b> <u> : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE
+<dead_abovering> <U> : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE
+<Multi_key> <o> <U> : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE
+<Multi_key> <asterisk> <U> : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE
+<Multi_key> <U> <asterisk> : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE
+<dead_abovering> <u> : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE
+<Multi_key> <o> <u> : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE
+<Multi_key> <asterisk> <u> : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE
+<Multi_key> <u> <asterisk> : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE
+<dead_doubleacute> <U> : "Ű" U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+<Multi_key> <equal> <U> : "Ű" U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+<dead_doubleacute> <u> : "ű" U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+<Multi_key> <equal> <u> : "ű" U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+<dead_ogonek> <U> : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK
+<Multi_key> <semicolon> <U> : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK
+<Multi_key> <comma> <U> : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK
+<Multi_key> <U> <comma> : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK
+<dead_ogonek> <u> : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK
+<Multi_key> <semicolon> <u> : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK
+<Multi_key> <comma> <u> : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK
+<Multi_key> <u> <comma> : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK
+<dead_circumflex> <W> : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <W> : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+<Multi_key> <W> <asciicircum> : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+<dead_circumflex> <w> : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <w> : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
+<Multi_key> <w> <asciicircum> : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
+<dead_circumflex> <Y> : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <Y> : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+<Multi_key> <Y> <asciicircum> : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+<dead_circumflex> <y> : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <y> : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+<Multi_key> <y> <asciicircum> : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+<dead_diaeresis> <Y> : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+<Multi_key> <quotedbl> <Y> : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+<Multi_key> <Y> <quotedbl> : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+<Multi_key> <diaeresis> <Y> : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+<Multi_key> <Y> <diaeresis> : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+<dead_acute> <Z> : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
+<Multi_key> <acute> <Z> : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
+<Multi_key> <apostrophe> <Z> : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
+<Multi_key> <Z> <apostrophe> : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
+<dead_acute> <z> : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE
+<Multi_key> <acute> <z> : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE
+<Multi_key> <apostrophe> <z> : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE
+<Multi_key> <z> <apostrophe> : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE
+<dead_abovedot> <Z> : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+<Multi_key> <period> <Z> : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+<Multi_key> <Z> <period> : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+<dead_abovedot> <z> : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+<Multi_key> <period> <z> : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+<Multi_key> <z> <period> : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+<dead_caron> <Z> : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON
+<Multi_key> <c> <Z> : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON
+<Multi_key> <v> <Z> : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON
+<Multi_key> <less> <Z> : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON
+<Multi_key> <Z> <less> : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON
+<dead_caron> <z> : "ž" U017E # LATIN SMALL LETTER Z WITH CARON
+<Multi_key> <c> <z> : "ž" U017E # LATIN SMALL LETTER Z WITH CARON
+<Multi_key> <v> <z> : "ž" U017E # LATIN SMALL LETTER Z WITH CARON
+<Multi_key> <less> <z> : "ž" U017E # LATIN SMALL LETTER Z WITH CARON
+<Multi_key> <z> <less> : "ž" U017E # LATIN SMALL LETTER Z WITH CARON
+<dead_stroke> <b> : "ƀ" U0180 # LATIN SMALL LETTER B WITH STROKE
+<Multi_key> <slash> <b> : "ƀ" U0180 # LATIN SMALL LETTER B WITH STROKE
+<Multi_key> <KP_Divide> <b> : "ƀ" U0180 # LATIN SMALL LETTER B WITH STROKE
+<dead_stroke> <I> : "Ɨ" U0197 # LATIN CAPITAL LETTER I WITH STROKE
+<Multi_key> <slash> <I> : "Ɨ" U0197 # LATIN CAPITAL LETTER I WITH STROKE
+<Multi_key> <KP_Divide> <I> : "Ɨ" U0197 # LATIN CAPITAL LETTER I WITH STROKE
+<dead_horn> <O> : "Ơ" U01A0 # LATIN CAPITAL LETTER O WITH HORN
+<Multi_key> <plus> <O> : "Ơ" U01A0 # LATIN CAPITAL LETTER O WITH HORN
+<dead_horn> <o> : "ơ" U01A1 # LATIN SMALL LETTER O WITH HORN
+<Multi_key> <plus> <o> : "ơ" U01A1 # LATIN SMALL LETTER O WITH HORN
+<dead_horn> <U> : "Ư" U01AF # LATIN CAPITAL LETTER U WITH HORN
+<Multi_key> <plus> <U> : "Ư" U01AF # LATIN CAPITAL LETTER U WITH HORN
+<dead_horn> <u> : "ư" U01B0 # LATIN SMALL LETTER U WITH HORN
+<Multi_key> <plus> <u> : "ư" U01B0 # LATIN SMALL LETTER U WITH HORN
+<dead_stroke> <Z> : "Ƶ" U01B5 # LATIN CAPITAL LETTER Z WITH STROKE
+<Multi_key> <slash> <Z> : "Ƶ" U01B5 # LATIN CAPITAL LETTER Z WITH STROKE
+<Multi_key> <KP_Divide> <Z> : "Ƶ" U01B5 # LATIN CAPITAL LETTER Z WITH STROKE
+<dead_stroke> <z> : "ƶ" U01B6 # LATIN SMALL LETTER Z WITH STROKE
+<Multi_key> <slash> <z> : "ƶ" U01B6 # LATIN SMALL LETTER Z WITH STROKE
+<Multi_key> <KP_Divide> <z> : "ƶ" U01B6 # LATIN SMALL LETTER Z WITH STROKE
+<dead_caron> <A> : "Ǎ" U01CD # LATIN CAPITAL LETTER A WITH CARON
+<Multi_key> <c> <A> : "Ǎ" U01CD # LATIN CAPITAL LETTER A WITH CARON
+<dead_caron> <a> : "ǎ" U01CE # LATIN SMALL LETTER A WITH CARON
+<Multi_key> <c> <a> : "ǎ" U01CE # LATIN SMALL LETTER A WITH CARON
+<dead_caron> <I> : "Ǐ" U01CF # LATIN CAPITAL LETTER I WITH CARON
+<Multi_key> <c> <I> : "Ǐ" U01CF # LATIN CAPITAL LETTER I WITH CARON
+<dead_caron> <i> : "ǐ" U01D0 # LATIN SMALL LETTER I WITH CARON
+<Multi_key> <c> <i> : "ǐ" U01D0 # LATIN SMALL LETTER I WITH CARON
+<dead_caron> <O> : "Ǒ" U01D1 # LATIN CAPITAL LETTER O WITH CARON
+<Multi_key> <c> <O> : "Ǒ" U01D1 # LATIN CAPITAL LETTER O WITH CARON
+<dead_caron> <o> : "ǒ" U01D2 # LATIN SMALL LETTER O WITH CARON
+<Multi_key> <c> <o> : "ǒ" U01D2 # LATIN SMALL LETTER O WITH CARON
+<dead_caron> <U> : "Ǔ" U01D3 # LATIN CAPITAL LETTER U WITH CARON
+<Multi_key> <c> <U> : "Ǔ" U01D3 # LATIN CAPITAL LETTER U WITH CARON
+<dead_caron> <u> : "ǔ" U01D4 # LATIN SMALL LETTER U WITH CARON
+<Multi_key> <c> <u> : "ǔ" U01D4 # LATIN SMALL LETTER U WITH CARON
+<dead_macron> <Udiaeresis> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <Udiaeresis> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <Udiaeresis> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<dead_macron> <dead_diaeresis> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<dead_macron> <Multi_key> <quotedbl> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <dead_diaeresis> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <quotedbl> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <dead_diaeresis> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <quotedbl> <U> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<dead_macron> <udiaeresis> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <udiaeresis> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <udiaeresis> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<dead_macron> <dead_diaeresis> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<dead_macron> <Multi_key> <quotedbl> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <dead_diaeresis> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <quotedbl> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <dead_diaeresis> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <quotedbl> <u> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<dead_acute> <Udiaeresis> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <Udiaeresis> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <Udiaeresis> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<dead_acute> <dead_diaeresis> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<dead_acute> <Multi_key> <quotedbl> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <dead_diaeresis> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <quotedbl> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <dead_diaeresis> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <quotedbl> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<dead_acute> <udiaeresis> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <udiaeresis> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <udiaeresis> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<dead_acute> <dead_diaeresis> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<dead_acute> <Multi_key> <quotedbl> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <dead_diaeresis> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <quotedbl> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <dead_diaeresis> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <quotedbl> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<dead_caron> <Udiaeresis> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+<Multi_key> <c> <Udiaeresis> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+<dead_caron> <dead_diaeresis> <U> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+<dead_caron> <Multi_key> <quotedbl> <U> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+<Multi_key> <c> <dead_diaeresis> <U> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+<Multi_key> <c> <quotedbl> <U> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+<dead_caron> <udiaeresis> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+<Multi_key> <c> <udiaeresis> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+<dead_caron> <dead_diaeresis> <u> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+<dead_caron> <Multi_key> <quotedbl> <u> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+<Multi_key> <c> <dead_diaeresis> <u> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+<Multi_key> <c> <quotedbl> <u> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+<dead_grave> <Udiaeresis> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+<Multi_key> <grave> <Udiaeresis> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+<dead_grave> <dead_diaeresis> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+<dead_grave> <Multi_key> <quotedbl> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+<Multi_key> <grave> <dead_diaeresis> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+<Multi_key> <grave> <quotedbl> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+<dead_grave> <udiaeresis> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+<Multi_key> <grave> <udiaeresis> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+<dead_grave> <dead_diaeresis> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+<dead_grave> <Multi_key> <quotedbl> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+<Multi_key> <grave> <dead_diaeresis> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+<Multi_key> <grave> <quotedbl> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+<dead_macron> <Adiaeresis> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <Adiaeresis> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <Adiaeresis> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <dead_diaeresis> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <Multi_key> <quotedbl> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <dead_diaeresis> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <quotedbl> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <dead_diaeresis> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <quotedbl> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <adiaeresis> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <adiaeresis> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <adiaeresis> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <dead_diaeresis> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <Multi_key> <quotedbl> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <dead_diaeresis> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <quotedbl> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <dead_diaeresis> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <quotedbl> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <U0226> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <U0226> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <U0226> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<dead_macron> <dead_abovedot> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<dead_macron> <Multi_key> <period> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <dead_abovedot> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <period> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <dead_abovedot> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <period> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<dead_macron> <U0227> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <U0227> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <U0227> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<dead_macron> <dead_abovedot> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<dead_macron> <Multi_key> <period> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <dead_abovedot> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <period> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <dead_abovedot> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <period> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<dead_macron> <AE> : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
+<Multi_key> <macron> <AE> : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
+<Multi_key> <underscore> <AE> : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
+<dead_macron> <ae> : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON
+<Multi_key> <macron> <ae> : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON
+<Multi_key> <underscore> <ae> : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON
+<dead_stroke> <G> : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE
+<Multi_key> <slash> <G> : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE
+<Multi_key> <KP_Divide> <G> : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE
+<dead_stroke> <g> : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE
+<Multi_key> <slash> <g> : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE
+<Multi_key> <KP_Divide> <g> : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE
+<dead_caron> <G> : "Ǧ" U01E6 # LATIN CAPITAL LETTER G WITH CARON
+<Multi_key> <c> <G> : "Ǧ" U01E6 # LATIN CAPITAL LETTER G WITH CARON
+<dead_caron> <g> : "ǧ" U01E7 # LATIN SMALL LETTER G WITH CARON
+<Multi_key> <c> <g> : "ǧ" U01E7 # LATIN SMALL LETTER G WITH CARON
+<dead_caron> <K> : "Ǩ" U01E8 # LATIN CAPITAL LETTER K WITH CARON
+<Multi_key> <c> <K> : "Ǩ" U01E8 # LATIN CAPITAL LETTER K WITH CARON
+<dead_caron> <k> : "ǩ" U01E9 # LATIN SMALL LETTER K WITH CARON
+<Multi_key> <c> <k> : "ǩ" U01E9 # LATIN SMALL LETTER K WITH CARON
+<dead_ogonek> <O> : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK
+<Multi_key> <semicolon> <O> : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK
+<dead_ogonek> <o> : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK
+<Multi_key> <semicolon> <o> : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK
+<dead_macron> <U01EA> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <macron> <U01EA> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <underscore> <U01EA> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<dead_macron> <dead_ogonek> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<dead_macron> <Multi_key> <semicolon> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <macron> <dead_ogonek> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <macron> <semicolon> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <underscore> <dead_ogonek> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <underscore> <semicolon> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<dead_macron> <U01EB> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <macron> <U01EB> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <underscore> <U01EB> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<dead_macron> <dead_ogonek> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<dead_macron> <Multi_key> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <macron> <dead_ogonek> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <macron> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <underscore> <dead_ogonek> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<Multi_key> <underscore> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<dead_caron> <EZH> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
+<Multi_key> <c> <EZH> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
+<dead_caron> <ezh> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
+<Multi_key> <c> <ezh> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
+<dead_caron> <j> : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON
+<Multi_key> <c> <j> : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON
+<dead_acute> <G> : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
+<Multi_key> <acute> <G> : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
+<Multi_key> <apostrophe> <G> : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
+<dead_acute> <g> : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE
+<Multi_key> <acute> <g> : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE
+<Multi_key> <apostrophe> <g> : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE
+<dead_grave> <N> : "Ǹ" U01F8 # LATIN CAPITAL LETTER N WITH GRAVE
+<Multi_key> <grave> <N> : "Ǹ" U01F8 # LATIN CAPITAL LETTER N WITH GRAVE
+<dead_grave> <n> : "ǹ" U01F9 # LATIN SMALL LETTER N WITH GRAVE
+<Multi_key> <grave> <n> : "ǹ" U01F9 # LATIN SMALL LETTER N WITH GRAVE
+<dead_acute> <Aring> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <acute> <Aring> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <apostrophe> <Aring> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <dead_abovering> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <Multi_key> <o> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <acute> <dead_abovering> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <apostrophe> <dead_abovering> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <asterisk> <apostrophe> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <aring> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <acute> <aring> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <apostrophe> <aring> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <dead_abovering> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <Multi_key> <o> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <acute> <dead_abovering> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <apostrophe> <dead_abovering> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<Multi_key> <asterisk> <apostrophe> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <AE> : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
+<Multi_key> <acute> <AE> : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
+<Multi_key> <apostrophe> <AE> : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
+<dead_acute> <ae> : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE
+<Multi_key> <acute> <ae> : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE
+<Multi_key> <apostrophe> <ae> : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE
+<dead_acute> <Ooblique> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <acute> <Ooblique> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <apostrophe> <Ooblique> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <dead_stroke> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <Multi_key> <slash> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <acute> <slash> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <apostrophe> <slash> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <Multi_key> <KP_Divide> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <acute> <KP_Divide> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <apostrophe> <KP_Divide> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<dead_stroke> <dead_acute> <O> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <oslash> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <acute> <oslash> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <apostrophe> <oslash> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <dead_stroke> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <Multi_key> <slash> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <acute> <slash> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <apostrophe> <slash> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <Multi_key> <KP_Divide> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <acute> <KP_Divide> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<Multi_key> <apostrophe> <KP_Divide> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<dead_stroke> <dead_acute> <o> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<dead_doublegrave> <A> : "Ȁ" U0200 # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+<dead_doublegrave> <a> : "ȁ" U0201 # LATIN SMALL LETTER A WITH DOUBLE GRAVE
+<dead_invertedbreve> <A> : "Ȃ" U0202 # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+<dead_invertedbreve> <a> : "ȃ" U0203 # LATIN SMALL LETTER A WITH INVERTED BREVE
+<dead_doublegrave> <E> : "Ȅ" U0204 # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+<dead_doublegrave> <e> : "ȅ" U0205 # LATIN SMALL LETTER E WITH DOUBLE GRAVE
+<dead_invertedbreve> <E> : "Ȇ" U0206 # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+<dead_invertedbreve> <e> : "ȇ" U0207 # LATIN SMALL LETTER E WITH INVERTED BREVE
+<dead_doublegrave> <I> : "Ȉ" U0208 # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+<dead_doublegrave> <i> : "ȉ" U0209 # LATIN SMALL LETTER I WITH DOUBLE GRAVE
+<dead_invertedbreve> <I> : "Ȋ" U020A # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+<dead_invertedbreve> <i> : "ȋ" U020B # LATIN SMALL LETTER I WITH INVERTED BREVE
+<dead_doublegrave> <O> : "Ȍ" U020C # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+<dead_doublegrave> <o> : "ȍ" U020D # LATIN SMALL LETTER O WITH DOUBLE GRAVE
+<dead_invertedbreve> <O> : "Ȏ" U020E # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+<dead_invertedbreve> <o> : "ȏ" U020F # LATIN SMALL LETTER O WITH INVERTED BREVE
+<dead_doublegrave> <R> : "Ȑ" U0210 # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+<dead_doublegrave> <r> : "ȑ" U0211 # LATIN SMALL LETTER R WITH DOUBLE GRAVE
+<dead_invertedbreve> <R> : "Ȓ" U0212 # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+<dead_invertedbreve> <r> : "ȓ" U0213 # LATIN SMALL LETTER R WITH INVERTED BREVE
+<dead_doublegrave> <U> : "Ȕ" U0214 # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+<dead_doublegrave> <u> : "ȕ" U0215 # LATIN SMALL LETTER U WITH DOUBLE GRAVE
+<dead_invertedbreve> <U> : "Ȗ" U0216 # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+<dead_invertedbreve> <u> : "ȗ" U0217 # LATIN SMALL LETTER U WITH INVERTED BREVE
+<dead_caron> <H> : "Ȟ" U021E # LATIN CAPITAL LETTER H WITH CARON
+<Multi_key> <c> <H> : "Ȟ" U021E # LATIN CAPITAL LETTER H WITH CARON
+<dead_caron> <h> : "ȟ" U021F # LATIN SMALL LETTER H WITH CARON
+<Multi_key> <c> <h> : "ȟ" U021F # LATIN SMALL LETTER H WITH CARON
+<dead_abovedot> <A> : "Ȧ" U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE
+<Multi_key> <period> <A> : "Ȧ" U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE
+<dead_abovedot> <a> : "ȧ" U0227 # LATIN SMALL LETTER A WITH DOT ABOVE
+<Multi_key> <period> <a> : "ȧ" U0227 # LATIN SMALL LETTER A WITH DOT ABOVE
+<dead_cedilla> <E> : "Ȩ" U0228 # LATIN CAPITAL LETTER E WITH CEDILLA
+<Multi_key> <cedilla> <E> : "Ȩ" U0228 # LATIN CAPITAL LETTER E WITH CEDILLA
+<dead_cedilla> <e> : "ȩ" U0229 # LATIN SMALL LETTER E WITH CEDILLA
+<Multi_key> <cedilla> <e> : "ȩ" U0229 # LATIN SMALL LETTER E WITH CEDILLA
+<dead_macron> <Odiaeresis> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <Odiaeresis> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <Odiaeresis> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<dead_macron> <dead_diaeresis> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<dead_macron> <Multi_key> <quotedbl> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <dead_diaeresis> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <quotedbl> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <dead_diaeresis> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <quotedbl> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<dead_macron> <odiaeresis> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <odiaeresis> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <odiaeresis> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<dead_macron> <dead_diaeresis> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<dead_macron> <Multi_key> <quotedbl> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <dead_diaeresis> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <macron> <quotedbl> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <dead_diaeresis> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<Multi_key> <underscore> <quotedbl> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<dead_macron> <Otilde> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<Multi_key> <macron> <Otilde> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<Multi_key> <underscore> <Otilde> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<dead_macron> <dead_tilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<dead_macron> <Multi_key> <asciitilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<Multi_key> <macron> <dead_tilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<Multi_key> <macron> <asciitilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<Multi_key> <underscore> <dead_tilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<Multi_key> <underscore> <asciitilde> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<dead_macron> <otilde> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<Multi_key> <macron> <otilde> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<Multi_key> <underscore> <otilde> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<dead_macron> <dead_tilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<dead_macron> <Multi_key> <asciitilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<Multi_key> <macron> <dead_tilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<Multi_key> <macron> <asciitilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<Multi_key> <underscore> <dead_tilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<Multi_key> <underscore> <asciitilde> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<dead_abovedot> <O> : "Ȯ" U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE
+<Multi_key> <period> <O> : "Ȯ" U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE
+<dead_abovedot> <o> : "ȯ" U022F # LATIN SMALL LETTER O WITH DOT ABOVE
+<Multi_key> <period> <o> : "ȯ" U022F # LATIN SMALL LETTER O WITH DOT ABOVE
+<dead_macron> <U022E> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <U022E> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <U022E> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<dead_macron> <dead_abovedot> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<dead_macron> <Multi_key> <period> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <dead_abovedot> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <period> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <dead_abovedot> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <period> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<dead_macron> <U022F> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <U022F> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <U022F> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<dead_macron> <dead_abovedot> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<dead_macron> <Multi_key> <period> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <dead_abovedot> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <macron> <period> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <dead_abovedot> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<Multi_key> <underscore> <period> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<dead_macron> <Y> : "Ȳ" U0232 # LATIN CAPITAL LETTER Y WITH MACRON
+<Multi_key> <macron> <Y> : "Ȳ" U0232 # LATIN CAPITAL LETTER Y WITH MACRON
+<Multi_key> <underscore> <Y> : "Ȳ" U0232 # LATIN CAPITAL LETTER Y WITH MACRON
+<dead_macron> <y> : "ȳ" U0233 # LATIN SMALL LETTER Y WITH MACRON
+<Multi_key> <macron> <y> : "ȳ" U0233 # LATIN SMALL LETTER Y WITH MACRON
+<Multi_key> <underscore> <y> : "ȳ" U0233 # LATIN SMALL LETTER Y WITH MACRON
+<Multi_key> <e> <e> : "ə" U0259 # LATIN SMALL LETTER SCHWA
+<dead_stroke> <i> : "ɨ" U0268 # LATIN SMALL LETTER I WITH STROKE
+<Multi_key> <slash> <i> : "ɨ" U0268 # LATIN SMALL LETTER I WITH STROKE
+<Multi_key> <KP_Divide> <i> : "ɨ" U0268 # LATIN SMALL LETTER I WITH STROKE
+<Multi_key> <slash> <U0294> : "ʡ" U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE
+<Multi_key> <KP_Divide> <U0294> : "ʡ" U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE
+<dead_circumflex> <Multi_key> <underscore> <h> : "ʰ" U02B0 # MODIFIER LETTER SMALL H
+<Multi_key> <asciicircum> <underscore> <h> : "ʰ" U02B0 # MODIFIER LETTER SMALL H
+<dead_circumflex> <Multi_key> <underbar> <h> : "ʰ" U02B0 # MODIFIER LETTER SMALL H
+<Multi_key> <asciicircum> <underbar> <h> : "ʰ" U02B0 # MODIFIER LETTER SMALL H
+<dead_circumflex> <Multi_key> <underscore> <U0266> : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK
+<Multi_key> <asciicircum> <underscore> <U0266> : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK
+<dead_circumflex> <Multi_key> <underbar> <U0266> : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK
+<Multi_key> <asciicircum> <underbar> <U0266> : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK
+<dead_circumflex> <Multi_key> <underscore> <j> : "ʲ" U02B2 # MODIFIER LETTER SMALL J
+<Multi_key> <asciicircum> <underscore> <j> : "ʲ" U02B2 # MODIFIER LETTER SMALL J
+<dead_circumflex> <Multi_key> <underbar> <j> : "ʲ" U02B2 # MODIFIER LETTER SMALL J
+<Multi_key> <asciicircum> <underbar> <j> : "ʲ" U02B2 # MODIFIER LETTER SMALL J
+<dead_circumflex> <Multi_key> <underscore> <r> : "ʳ" U02B3 # MODIFIER LETTER SMALL R
+<Multi_key> <asciicircum> <underscore> <r> : "ʳ" U02B3 # MODIFIER LETTER SMALL R
+<dead_circumflex> <Multi_key> <underbar> <r> : "ʳ" U02B3 # MODIFIER LETTER SMALL R
+<Multi_key> <asciicircum> <underbar> <r> : "ʳ" U02B3 # MODIFIER LETTER SMALL R
+<dead_circumflex> <Multi_key> <underscore> <U0279> : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R
+<Multi_key> <asciicircum> <underscore> <U0279> : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R
+<dead_circumflex> <Multi_key> <underbar> <U0279> : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R
+<Multi_key> <asciicircum> <underbar> <U0279> : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R
+<dead_circumflex> <Multi_key> <underscore> <U027B> : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
+<Multi_key> <asciicircum> <underscore> <U027B> : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
+<dead_circumflex> <Multi_key> <underbar> <U027B> : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
+<Multi_key> <asciicircum> <underbar> <U027B> : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
+<dead_circumflex> <Multi_key> <underscore> <U0281> : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
+<Multi_key> <asciicircum> <underscore> <U0281> : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
+<dead_circumflex> <Multi_key> <underbar> <U0281> : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
+<Multi_key> <asciicircum> <underbar> <U0281> : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
+<dead_circumflex> <Multi_key> <underscore> <w> : "ʷ" U02B7 # MODIFIER LETTER SMALL W
+<Multi_key> <asciicircum> <underscore> <w> : "ʷ" U02B7 # MODIFIER LETTER SMALL W
+<dead_circumflex> <Multi_key> <underbar> <w> : "ʷ" U02B7 # MODIFIER LETTER SMALL W
+<Multi_key> <asciicircum> <underbar> <w> : "ʷ" U02B7 # MODIFIER LETTER SMALL W
+<dead_circumflex> <Multi_key> <underscore> <y> : "ʸ" U02B8 # MODIFIER LETTER SMALL Y
+<Multi_key> <asciicircum> <underscore> <y> : "ʸ" U02B8 # MODIFIER LETTER SMALL Y
+<dead_circumflex> <Multi_key> <underbar> <y> : "ʸ" U02B8 # MODIFIER LETTER SMALL Y
+<Multi_key> <asciicircum> <underbar> <y> : "ʸ" U02B8 # MODIFIER LETTER SMALL Y
+<dead_circumflex> <Multi_key> <underscore> <U0263> : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA
+<Multi_key> <asciicircum> <underscore> <U0263> : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA
+<dead_circumflex> <Multi_key> <underbar> <U0263> : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA
+<Multi_key> <asciicircum> <underbar> <U0263> : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA
+<dead_circumflex> <Multi_key> <underscore> <l> : "ˡ" U02E1 # MODIFIER LETTER SMALL L
+<Multi_key> <asciicircum> <underscore> <l> : "ˡ" U02E1 # MODIFIER LETTER SMALL L
+<dead_circumflex> <Multi_key> <underbar> <l> : "ˡ" U02E1 # MODIFIER LETTER SMALL L
+<Multi_key> <asciicircum> <underbar> <l> : "ˡ" U02E1 # MODIFIER LETTER SMALL L
+<dead_circumflex> <Multi_key> <underscore> <s> : "ˢ" U02E2 # MODIFIER LETTER SMALL S
+<Multi_key> <asciicircum> <underscore> <s> : "ˢ" U02E2 # MODIFIER LETTER SMALL S
+<dead_circumflex> <Multi_key> <underbar> <s> : "ˢ" U02E2 # MODIFIER LETTER SMALL S
+<Multi_key> <asciicircum> <underbar> <s> : "ˢ" U02E2 # MODIFIER LETTER SMALL S
+<dead_circumflex> <Multi_key> <underscore> <x> : "ˣ" U02E3 # MODIFIER LETTER SMALL X
+<Multi_key> <asciicircum> <underscore> <x> : "ˣ" U02E3 # MODIFIER LETTER SMALL X
+<dead_circumflex> <Multi_key> <underbar> <x> : "ˣ" U02E3 # MODIFIER LETTER SMALL X
+<Multi_key> <asciicircum> <underbar> <x> : "ˣ" U02E3 # MODIFIER LETTER SMALL X
+<dead_circumflex> <Multi_key> <underscore> <U0295> : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+<Multi_key> <asciicircum> <underscore> <U0295> : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+<dead_circumflex> <Multi_key> <underbar> <U0295> : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+<Multi_key> <asciicircum> <underbar> <U0295> : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+<dead_diaeresis> <acute> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
+<dead_diaeresis> <apostrophe> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
+<Multi_key> <quotedbl> <dead_acute> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
+<Multi_key> <quotedbl> <acute> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
+<Multi_key> <quotedbl> <apostrophe> : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS
+<dead_acute> <dead_diaeresis> <space> : "΅" U0385 # GREEK DIALYTIKA TONOS
+<dead_diaeresis> <dead_acute> <space> : "΅" U0385 # GREEK DIALYTIKA TONOS
+<Multi_key> <diaeresis> <dead_acute> : "΅" U0385 # GREEK DIALYTIKA TONOS
+<Multi_key> <diaeresis> <acute> : "΅" U0385 # GREEK DIALYTIKA TONOS
+<Multi_key> <diaeresis> <apostrophe> : "΅" U0385 # GREEK DIALYTIKA TONOS
+<Multi_key> <apostrophe> <quotedbl> <space> : "΅" U0385 # GREEK DIALYTIKA TONOS
+<dead_acute> <Greek_ALPHA> : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
+<Multi_key> <acute> <Greek_ALPHA> : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
+<Multi_key> <apostrophe> <Greek_ALPHA> : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
+<Multi_key> <Greek_ALPHA> <apostrophe> : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
+<dead_acute> <Greek_EPSILON> : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
+<Multi_key> <acute> <Greek_EPSILON> : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
+<Multi_key> <apostrophe> <Greek_EPSILON> : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
+<Multi_key> <Greek_EPSILON> <apostrophe> : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
+<dead_acute> <Greek_ETA> : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
+<Multi_key> <acute> <Greek_ETA> : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
+<Multi_key> <apostrophe> <Greek_ETA> : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
+<Multi_key> <Greek_ETA> <apostrophe> : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
+<dead_acute> <Greek_IOTA> : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
+<Multi_key> <acute> <Greek_IOTA> : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
+<Multi_key> <apostrophe> <Greek_IOTA> : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
+<Multi_key> <Greek_IOTA> <apostrophe> : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
+<dead_acute> <Greek_OMICRON> : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
+<Multi_key> <acute> <Greek_OMICRON> : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
+<Multi_key> <apostrophe> <Greek_OMICRON> : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
+<Multi_key> <Greek_OMICRON> <apostrophe> : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
+<dead_acute> <Greek_UPSILON> : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
+<Multi_key> <acute> <Greek_UPSILON> : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
+<Multi_key> <apostrophe> <Greek_UPSILON> : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
+<Multi_key> <Greek_UPSILON> <apostrophe> : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
+<dead_acute> <Greek_OMEGA> : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
+<Multi_key> <acute> <Greek_OMEGA> : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
+<Multi_key> <apostrophe> <Greek_OMEGA> : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
+<Multi_key> <Greek_OMEGA> <apostrophe> : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
+<dead_acute> <Greek_iotadieresis> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<Multi_key> <acute> <Greek_iotadieresis> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<Multi_key> <apostrophe> <Greek_iotadieresis> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<dead_acute> <dead_diaeresis> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<dead_diaeresis> <dead_acute> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<dead_acute> <Multi_key> <quotedbl> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<Multi_key> <acute> <dead_diaeresis> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<Multi_key> <acute> <quotedbl> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<Multi_key> <apostrophe> <dead_diaeresis> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<Multi_key> <apostrophe> <quotedbl> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<Greek_accentdieresis> <Greek_iota> : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+<dead_diaeresis> <Greek_IOTA> : "Ϊ" U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+<Multi_key> <quotedbl> <Greek_IOTA> : "Ϊ" U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+<Multi_key> <Greek_IOTA> <quotedbl> : "Ϊ" U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+<dead_diaeresis> <Greek_UPSILON> : "Ϋ" U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+<Multi_key> <quotedbl> <Greek_UPSILON> : "Ϋ" U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+<Multi_key> <Greek_UPSILON> <quotedbl> : "Ϋ" U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+<dead_acute> <Greek_alpha> : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
+<Multi_key> <acute> <Greek_alpha> : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
+<Multi_key> <apostrophe> <Greek_alpha> : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
+<Multi_key> <Greek_alpha> <apostrophe> : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
+<dead_acute> <Greek_epsilon> : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
+<Multi_key> <acute> <Greek_epsilon> : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
+<Multi_key> <apostrophe> <Greek_epsilon> : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
+<Multi_key> <Greek_epsilon> <apostrophe> : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
+<dead_acute> <Greek_eta> : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS
+<Multi_key> <acute> <Greek_eta> : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS
+<Multi_key> <apostrophe> <Greek_eta> : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS
+<Multi_key> <Greek_eta> <apostrophe> : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS
+<dead_acute> <Greek_iota> : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS
+<Multi_key> <acute> <Greek_iota> : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS
+<Multi_key> <apostrophe> <Greek_iota> : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS
+<dead_acute> <Greek_upsilondieresis> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<Multi_key> <acute> <Greek_upsilondieresis> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<Multi_key> <apostrophe> <Greek_upsilondieresis> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<dead_acute> <dead_diaeresis> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<dead_acute> <Multi_key> <quotedbl> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<Multi_key> <acute> <dead_diaeresis> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<Multi_key> <acute> <quotedbl> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<Multi_key> <apostrophe> <dead_diaeresis> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<Multi_key> <apostrophe> <quotedbl> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<dead_diaeresis> <dead_acute> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<Greek_accentdieresis> <Greek_upsilon> : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+<dead_diaeresis> <Greek_iota> : "ϊ" U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+<Multi_key> <quotedbl> <Greek_iota> : "ϊ" U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+<Multi_key> <Greek_iota> <quotedbl> : "ϊ" U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+<dead_diaeresis> <Greek_upsilon> : "ϋ" U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+<Multi_key> <quotedbl> <Greek_upsilon> : "ϋ" U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+<Multi_key> <Greek_upsilon> <quotedbl> : "ϋ" U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+<dead_acute> <Greek_omicron> : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
+<Multi_key> <acute> <Greek_omicron> : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
+<Multi_key> <apostrophe> <Greek_omicron> : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
+<Multi_key> <Greek_omicron> <apostrophe> : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
+<dead_acute> <Greek_upsilon> : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
+<Multi_key> <acute> <Greek_upsilon> : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
+<Multi_key> <apostrophe> <Greek_upsilon> : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
+<Multi_key> <Greek_upsilon> <apostrophe> : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
+<dead_acute> <Greek_omega> : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
+<Multi_key> <acute> <Greek_omega> : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
+<Multi_key> <apostrophe> <Greek_omega> : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
+<Multi_key> <Greek_omega> <apostrophe> : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
+<Multi_key> <quotedbl> <U03D2> : "ϔ" U03D4 # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+<dead_grave> <Cyrillic_IE> : "Ѐ" U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+<Multi_key> <grave> <Cyrillic_IE> : "Ѐ" U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+<dead_diaeresis> <Cyrillic_IE> : "Ё" U0401 # CYRILLIC CAPITAL LETTER IO
+<Multi_key> <quotedbl> <Cyrillic_IE> : "Ё" U0401 # CYRILLIC CAPITAL LETTER IO
+<dead_acute> <Cyrillic_GHE> : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE
+<Multi_key> <acute> <Cyrillic_GHE> : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE
+<Multi_key> <apostrophe> <Cyrillic_GHE> : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE
+<dead_diaeresis> <Ukrainian_I> : "Ї" U0407 # CYRILLIC CAPITAL LETTER YI
+<Multi_key> <quotedbl> <Ukrainian_I> : "Ї" U0407 # CYRILLIC CAPITAL LETTER YI
+<dead_acute> <Cyrillic_KA> : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE
+<Multi_key> <acute> <Cyrillic_KA> : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE
+<Multi_key> <apostrophe> <Cyrillic_KA> : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE
+<dead_grave> <Cyrillic_I> : "Ѝ" U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE
+<Multi_key> <grave> <Cyrillic_I> : "Ѝ" U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE
+<dead_breve> <Cyrillic_U> : "Ў" U040E # CYRILLIC CAPITAL LETTER SHORT U
+<Multi_key> <U> <Cyrillic_U> : "Ў" U040E # CYRILLIC CAPITAL LETTER SHORT U
+<Multi_key> <b> <Cyrillic_U> : "Ў" U040E # CYRILLIC CAPITAL LETTER SHORT U
+<dead_breve> <Cyrillic_I> : "Й" U0419 # CYRILLIC CAPITAL LETTER SHORT I
+<Multi_key> <U> <Cyrillic_I> : "Й" U0419 # CYRILLIC CAPITAL LETTER SHORT I
+<Multi_key> <b> <Cyrillic_I> : "Й" U0419 # CYRILLIC CAPITAL LETTER SHORT I
+<dead_breve> <Cyrillic_i> : "й" U0439 # CYRILLIC SMALL LETTER SHORT I
+<Multi_key> <U> <Cyrillic_i> : "й" U0439 # CYRILLIC SMALL LETTER SHORT I
+<Multi_key> <b> <Cyrillic_i> : "й" U0439 # CYRILLIC SMALL LETTER SHORT I
+<dead_grave> <Cyrillic_ie> : "ѐ" U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
+<Multi_key> <grave> <Cyrillic_ie> : "ѐ" U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
+<dead_diaeresis> <Cyrillic_ie> : "ё" U0451 # CYRILLIC SMALL LETTER IO
+<Multi_key> <quotedbl> <Cyrillic_ie> : "ё" U0451 # CYRILLIC SMALL LETTER IO
+<dead_acute> <Cyrillic_ghe> : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE
+<Multi_key> <acute> <Cyrillic_ghe> : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE
+<Multi_key> <apostrophe> <Cyrillic_ghe> : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE
+<dead_diaeresis> <Ukrainian_i> : "ї" U0457 # CYRILLIC SMALL LETTER YI
+<Multi_key> <quotedbl> <Ukrainian_i> : "ї" U0457 # CYRILLIC SMALL LETTER YI
+<dead_acute> <Cyrillic_ka> : "ќ" U045C # CYRILLIC SMALL LETTER KJE
+<Multi_key> <acute> <Cyrillic_ka> : "ќ" U045C # CYRILLIC SMALL LETTER KJE
+<Multi_key> <apostrophe> <Cyrillic_ka> : "ќ" U045C # CYRILLIC SMALL LETTER KJE
+<dead_grave> <Cyrillic_i> : "ѝ" U045D # CYRILLIC SMALL LETTER I WITH GRAVE
+<Multi_key> <grave> <Cyrillic_i> : "ѝ" U045D # CYRILLIC SMALL LETTER I WITH GRAVE
+<dead_breve> <Cyrillic_u> : "ў" U045E # CYRILLIC SMALL LETTER SHORT U
+<Multi_key> <U> <Cyrillic_u> : "ў" U045E # CYRILLIC SMALL LETTER SHORT U
+<Multi_key> <b> <Cyrillic_u> : "ў" U045E # CYRILLIC SMALL LETTER SHORT U
+<dead_doublegrave> <U0474> : "Ѷ" U0476 # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+<dead_doublegrave> <U0475> : "ѷ" U0477 # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+<Multi_key> <slash> <Cyrillic_GHE> : "Ғ" U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+<Multi_key> <KP_Divide> <Cyrillic_GHE> : "Ғ" U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+<Multi_key> <slash> <Cyrillic_ghe> : "ғ" U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
+<Multi_key> <KP_Divide> <Cyrillic_ghe> : "ғ" U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
+<Multi_key> <slash> <Cyrillic_KA> : "Ҟ" U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE
+<Multi_key> <KP_Divide> <Cyrillic_KA> : "Ҟ" U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE
+<Multi_key> <slash> <Cyrillic_ka> : "ҟ" U049F # CYRILLIC SMALL LETTER KA WITH STROKE
+<Multi_key> <KP_Divide> <Cyrillic_ka> : "ҟ" U049F # CYRILLIC SMALL LETTER KA WITH STROKE
+<Multi_key> <slash> <U04AE> : "Ұ" U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+<Multi_key> <KP_Divide> <U04AE> : "Ұ" U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+<Multi_key> <slash> <U04AF> : "ұ" U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+<Multi_key> <KP_Divide> <U04AF> : "ұ" U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+<dead_breve> <Cyrillic_ZHE> : "Ӂ" U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+<Multi_key> <U> <Cyrillic_ZHE> : "Ӂ" U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+<Multi_key> <b> <Cyrillic_ZHE> : "Ӂ" U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+<dead_breve> <Cyrillic_zhe> : "ӂ" U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE
+<Multi_key> <U> <Cyrillic_zhe> : "ӂ" U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE
+<Multi_key> <b> <Cyrillic_zhe> : "ӂ" U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE
+<dead_breve> <Cyrillic_A> : "Ӑ" U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE
+<Multi_key> <U> <Cyrillic_A> : "Ӑ" U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE
+<Multi_key> <b> <Cyrillic_A> : "Ӑ" U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE
+<dead_breve> <Cyrillic_a> : "ӑ" U04D1 # CYRILLIC SMALL LETTER A WITH BREVE
+<Multi_key> <U> <Cyrillic_a> : "ӑ" U04D1 # CYRILLIC SMALL LETTER A WITH BREVE
+<Multi_key> <b> <Cyrillic_a> : "ӑ" U04D1 # CYRILLIC SMALL LETTER A WITH BREVE
+<dead_diaeresis> <Cyrillic_A> : "Ӓ" U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_A> : "Ӓ" U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_a> : "ӓ" U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_a> : "ӓ" U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS
+<dead_breve> <Cyrillic_IE> : "Ӗ" U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE
+<Multi_key> <U> <Cyrillic_IE> : "Ӗ" U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE
+<Multi_key> <b> <Cyrillic_IE> : "Ӗ" U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE
+<dead_breve> <Cyrillic_ie> : "ӗ" U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE
+<Multi_key> <U> <Cyrillic_ie> : "ӗ" U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE
+<Multi_key> <b> <Cyrillic_ie> : "ӗ" U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE
+<dead_diaeresis> <U04D8> : "Ӛ" U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+<Multi_key> <quotedbl> <U04D8> : "Ӛ" U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+<dead_diaeresis> <U04D9> : "ӛ" U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+<Multi_key> <quotedbl> <U04D9> : "ӛ" U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_ZHE> : "Ӝ" U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_ZHE> : "Ӝ" U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_zhe> : "ӝ" U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_zhe> : "ӝ" U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_ZE> : "Ӟ" U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_ZE> : "Ӟ" U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_ze> : "ӟ" U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_ze> : "ӟ" U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+<dead_macron> <Cyrillic_I> : "Ӣ" U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON
+<Multi_key> <macron> <Cyrillic_I> : "Ӣ" U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON
+<Multi_key> <underscore> <Cyrillic_I> : "Ӣ" U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON
+<dead_macron> <Cyrillic_i> : "ӣ" U04E3 # CYRILLIC SMALL LETTER I WITH MACRON
+<Multi_key> <macron> <Cyrillic_i> : "ӣ" U04E3 # CYRILLIC SMALL LETTER I WITH MACRON
+<Multi_key> <underscore> <Cyrillic_i> : "ӣ" U04E3 # CYRILLIC SMALL LETTER I WITH MACRON
+<dead_diaeresis> <Cyrillic_I> : "Ӥ" U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_I> : "Ӥ" U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_i> : "ӥ" U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_i> : "ӥ" U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_O> : "Ӧ" U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_O> : "Ӧ" U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_o> : "ӧ" U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_o> : "ӧ" U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS
+<dead_diaeresis> <U04E8> : "Ӫ" U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+<Multi_key> <quotedbl> <U04E8> : "Ӫ" U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+<dead_diaeresis> <U04E9> : "ӫ" U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+<Multi_key> <quotedbl> <U04E9> : "ӫ" U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_E> : "Ӭ" U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_E> : "Ӭ" U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_e> : "ӭ" U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_e> : "ӭ" U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS
+<dead_macron> <Cyrillic_U> : "Ӯ" U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON
+<Multi_key> <macron> <Cyrillic_U> : "Ӯ" U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON
+<Multi_key> <underscore> <Cyrillic_U> : "Ӯ" U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON
+<dead_macron> <Cyrillic_u> : "ӯ" U04EF # CYRILLIC SMALL LETTER U WITH MACRON
+<Multi_key> <macron> <Cyrillic_u> : "ӯ" U04EF # CYRILLIC SMALL LETTER U WITH MACRON
+<Multi_key> <underscore> <Cyrillic_u> : "ӯ" U04EF # CYRILLIC SMALL LETTER U WITH MACRON
+<dead_diaeresis> <Cyrillic_U> : "Ӱ" U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_U> : "Ӱ" U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_u> : "ӱ" U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_u> : "ӱ" U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS
+<dead_doubleacute> <Cyrillic_U> : "Ӳ" U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+<Multi_key> <equal> <Cyrillic_U> : "Ӳ" U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+<dead_doubleacute> <Cyrillic_u> : "ӳ" U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+<Multi_key> <equal> <Cyrillic_u> : "ӳ" U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+<dead_diaeresis> <Cyrillic_CHE> : "Ӵ" U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_CHE> : "Ӵ" U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_che> : "ӵ" U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_che> : "ӵ" U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_YERU> : "Ӹ" U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_YERU> : "Ӹ" U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+<dead_diaeresis> <Cyrillic_yeru> : "ӹ" U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+<Multi_key> <quotedbl> <Cyrillic_yeru> : "ӹ" U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+<Multi_key> <U0653> <Arabic_alef> : "آ" U0622 # ARABIC LETTER ALEF WITH MADDA ABOVE
+<Multi_key> <U0654> <Arabic_alef> : "أ" U0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE
+<Multi_key> <U0654> <Arabic_waw> : "ؤ" U0624 # ARABIC LETTER WAW WITH HAMZA ABOVE
+<Multi_key> <U0655> <Arabic_alef> : "إ" U0625 # ARABIC LETTER ALEF WITH HAMZA BELOW
+<Multi_key> <U0654> <Arabic_yeh> : "ئ" U0626 # ARABIC LETTER YEH WITH HAMZA ABOVE
+<Multi_key> <U0654> <U06D5> : "ۀ" U06C0 # ARABIC LETTER HEH WITH YEH ABOVE
+<Multi_key> <U0654> <U06C1> : "ۂ" U06C2 # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+<Multi_key> <U0654> <U06D2> : "ۓ" U06D3 # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+<Multi_key> <U093C> <U0928> : "ऩ" U0929 # DEVANAGARI LETTER NNNA
+<Multi_key> <U093C> <U0930> : "ऱ" U0931 # DEVANAGARI LETTER RRA
+<Multi_key> <U093C> <U0933> : "ऴ" U0934 # DEVANAGARI LETTER LLLA
+<Multi_key> <U093C> <U0915> : "क़" U0958 # DEVANAGARI LETTER QA
+<Multi_key> <U093C> <U0916> : "ख़" U0959 # DEVANAGARI LETTER KHHA
+<Multi_key> <U093C> <U0917> : "ग़" U095A # DEVANAGARI LETTER GHHA
+<Multi_key> <U093C> <U091C> : "ज़" U095B # DEVANAGARI LETTER ZA
+<Multi_key> <U093C> <U0921> : "ड़" U095C # DEVANAGARI LETTER DDDHA
+<Multi_key> <U093C> <U0922> : "ढ़" U095D # DEVANAGARI LETTER RHA
+<Multi_key> <U093C> <U092B> : "फ़" U095E # DEVANAGARI LETTER FA
+<Multi_key> <U093C> <U092F> : "य़" U095F # DEVANAGARI LETTER YYA
+<Multi_key> <U09C7> <U09BE> : "ো" U09CB # BENGALI VOWEL SIGN O
+<Multi_key> <U09C7> <U09D7> : "ৌ" U09CC # BENGALI VOWEL SIGN AU
+<Multi_key> <U09BC> <U09A1> : "ড়" U09DC # BENGALI LETTER RRA
+<Multi_key> <U09BC> <U09A2> : "ঢ়" U09DD # BENGALI LETTER RHA
+<Multi_key> <U09BC> <U09AF> : "য়" U09DF # BENGALI LETTER YYA
+<Multi_key> <U0A3C> <U0A32> : "ਲ਼" U0A33 # GURMUKHI LETTER LLA
+<Multi_key> <U0A3C> <U0A38> : "ਸ਼" U0A36 # GURMUKHI LETTER SHA
+<Multi_key> <U0A3C> <U0A16> : "ਖ਼" U0A59 # GURMUKHI LETTER KHHA
+<Multi_key> <U0A3C> <U0A17> : "ਗ਼" U0A5A # GURMUKHI LETTER GHHA
+<Multi_key> <U0A3C> <U0A1C> : "ਜ਼" U0A5B # GURMUKHI LETTER ZA
+<Multi_key> <U0A3C> <U0A2B> : "ਫ਼" U0A5E # GURMUKHI LETTER FA
+<Multi_key> <U0B47> <U0B56> : "ୈ" U0B48 # ORIYA VOWEL SIGN AI
+<Multi_key> <U0B47> <U0B3E> : "ୋ" U0B4B # ORIYA VOWEL SIGN O
+<Multi_key> <U0B47> <U0B57> : "ୌ" U0B4C # ORIYA VOWEL SIGN AU
+<Multi_key> <U0B3C> <U0B21> : "ଡ଼" U0B5C # ORIYA LETTER RRA
+<Multi_key> <U0B3C> <U0B22> : "ଢ଼" U0B5D # ORIYA LETTER RHA
+<Multi_key> <U0BD7> <U0B92> : "ஔ" U0B94 # TAMIL LETTER AU
+<Multi_key> <U0BC6> <U0BBE> : "ொ" U0BCA # TAMIL VOWEL SIGN O
+<Multi_key> <U0BC7> <U0BBE> : "ோ" U0BCB # TAMIL VOWEL SIGN OO
+<Multi_key> <U0BC6> <U0BD7> : "ௌ" U0BCC # TAMIL VOWEL SIGN AU
+<Multi_key> <U0C46> <U0C56> : "ై" U0C48 # TELUGU VOWEL SIGN AI
+<Multi_key> <U0CBF> <U0CD5> : "ೀ" U0CC0 # KANNADA VOWEL SIGN II
+<Multi_key> <U0CC6> <U0CD5> : "ೇ" U0CC7 # KANNADA VOWEL SIGN EE
+<Multi_key> <U0CC6> <U0CD6> : "ೈ" U0CC8 # KANNADA VOWEL SIGN AI
+<Multi_key> <U0CC6> <U0CC2> : "ೊ" U0CCA # KANNADA VOWEL SIGN O
+<Multi_key> <U0CCA> <U0CD5> : "ೋ" U0CCB # KANNADA VOWEL SIGN OO
+
+<Multi_key> <U0D46> <U0D3E> : "ൊ" U0D4A # MALAYALAM VOWEL SIGN O
+<Multi_key> <U0D47> <U0D3E> : "ോ" U0D4B # MALAYALAM VOWEL SIGN OO
+<Multi_key> <U0D46> <U0D57> : "ൌ" U0D4C # MALAYALAM VOWEL SIGN AU
+<Multi_key> <U0DD9> <U0DCA> : "ේ" U0DDA # SINHALA VOWEL SIGN DIGA KOMBUVA
+<Multi_key> <U0DD9> <U0DCF> : "ො" U0DDC # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+<Multi_key> <U0DDC> <U0DCA> : "ෝ" U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+
+<Multi_key> <U0DD9> <U0DDF> : "ෞ" U0DDE # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+<Multi_key> <U0FB7> <U0F42> : "གྷ" U0F43 # TIBETAN LETTER GHA
+<Multi_key> <U0FB7> <U0F4C> : "ཌྷ" U0F4D # TIBETAN LETTER DDHA
+<Multi_key> <U0FB7> <U0F51> : "དྷ" U0F52 # TIBETAN LETTER DHA
+<Multi_key> <U0FB7> <U0F56> : "བྷ" U0F57 # TIBETAN LETTER BHA
+<Multi_key> <U0FB7> <U0F5B> : "ཛྷ" U0F5C # TIBETAN LETTER DZHA
+<Multi_key> <U0FB5> <U0F40> : "ཀྵ" U0F69 # TIBETAN LETTER KSSA
+<Multi_key> <U0F71> <U0F72> : "ཱི" U0F73 # TIBETAN VOWEL SIGN II
+<Multi_key> <U0F71> <U0F74> : "ཱུ" U0F75 # TIBETAN VOWEL SIGN UU
+<Multi_key> <U0FB2> <U0F80> : "ྲྀ" U0F76 # TIBETAN VOWEL SIGN VOCALIC R
+<Multi_key> <U0FB3> <U0F80> : "ླྀ" U0F78 # TIBETAN VOWEL SIGN VOCALIC L
+<Multi_key> <U0F71> <U0F80> : "ཱྀ" U0F81 # TIBETAN VOWEL SIGN REVERSED II
+<Multi_key> <U0F92> <U0FB7> : "ྒྷ" U0F93 # TIBETAN SUBJOINED LETTER GHA
+<Multi_key> <U0F9C> <U0FB7> : "ྜྷ" U0F9D # TIBETAN SUBJOINED LETTER DDHA
+<Multi_key> <U0FA1> <U0FB7> : "ྡྷ" U0FA2 # TIBETAN SUBJOINED LETTER DHA
+<Multi_key> <U0FA6> <U0FB7> : "ྦྷ" U0FA7 # TIBETAN SUBJOINED LETTER BHA
+<Multi_key> <U0FAB> <U0FB7> : "ྫྷ" U0FAC # TIBETAN SUBJOINED LETTER DZHA
+<Multi_key> <U0F90> <U0FB5> : "ྐྵ" U0FB9 # TIBETAN SUBJOINED LETTER KSSA
+<Multi_key> <U102E> <U1025> : "ဦ" U1026 # MYANMAR LETTER UU
+<dead_belowring> <A> : "Ḁ" U1E00 # LATIN CAPITAL LETTER A WITH RING BELOW
+<dead_belowring> <a> : "ḁ" U1E01 # LATIN SMALL LETTER A WITH RING BELOW
+<dead_abovedot> <B> : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
+<Multi_key> <period> <B> : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
+<Multi_key> <B> <period> : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
+<dead_abovedot> <b> : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
+<Multi_key> <period> <b> : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
+<Multi_key> <b> <period> : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
+<dead_belowdot> <B> : "Ḅ" U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW
+<Multi_key> <exclam> <B> : "Ḅ" U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW
+<dead_belowdot> <b> : "ḅ" U1E05 # LATIN SMALL LETTER B WITH DOT BELOW
+<Multi_key> <exclam> <b> : "ḅ" U1E05 # LATIN SMALL LETTER B WITH DOT BELOW
+<dead_belowmacron> <B> : "Ḇ" U1E06 # LATIN CAPITAL LETTER B WITH LINE BELOW
+<dead_belowmacron> <b> : "ḇ" U1E07 # LATIN SMALL LETTER B WITH LINE BELOW
+<dead_acute> <Ccedilla> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <acute> <Ccedilla> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <apostrophe> <Ccedilla> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<dead_acute> <dead_cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<dead_acute> <Multi_key> <comma> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<dead_acute> <Multi_key> <cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <acute> <dead_cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <acute> <comma> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <acute> <cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <apostrophe> <dead_cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <apostrophe> <cedilla> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<dead_acute> <ccedilla> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <acute> <ccedilla> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <apostrophe> <ccedilla> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<dead_acute> <dead_cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<dead_acute> <Multi_key> <comma> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<dead_acute> <Multi_key> <cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <acute> <dead_cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <acute> <comma> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <acute> <cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <apostrophe> <dead_cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<Multi_key> <apostrophe> <cedilla> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<dead_abovedot> <D> : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
+<Multi_key> <period> <D> : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
+<Multi_key> <D> <period> : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
+<dead_abovedot> <d> : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
+<Multi_key> <period> <d> : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
+<Multi_key> <d> <period> : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
+<dead_belowdot> <D> : "Ḍ" U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW
+<Multi_key> <exclam> <D> : "Ḍ" U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW
+<dead_belowdot> <d> : "ḍ" U1E0D # LATIN SMALL LETTER D WITH DOT BELOW
+<Multi_key> <exclam> <d> : "ḍ" U1E0D # LATIN SMALL LETTER D WITH DOT BELOW
+<dead_belowmacron> <D> : "Ḏ" U1E0E # LATIN CAPITAL LETTER D WITH LINE BELOW
+<dead_belowmacron> <d> : "ḏ" U1E0F # LATIN SMALL LETTER D WITH LINE BELOW
+<dead_cedilla> <D> : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA
+<Multi_key> <comma> <D> : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA
+<Multi_key> <D> <comma> : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA
+<Multi_key> <cedilla> <D> : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA
+<dead_cedilla> <d> : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA
+<Multi_key> <comma> <d> : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA
+<Multi_key> <d> <comma> : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA
+<Multi_key> <cedilla> <d> : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA
+<dead_belowcircumflex> <D> : "Ḓ" U1E12 # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+<dead_belowcircumflex> <d> : "ḓ" U1E13 # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+<dead_grave> <Emacron> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<Multi_key> <grave> <Emacron> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<dead_grave> <dead_macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<dead_grave> <Multi_key> <macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<dead_grave> <Multi_key> <underscore> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<Multi_key> <grave> <dead_macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<Multi_key> <grave> <macron> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<Multi_key> <grave> <underscore> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<dead_grave> <emacron> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<Multi_key> <grave> <emacron> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<dead_grave> <dead_macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<dead_grave> <Multi_key> <macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<dead_grave> <Multi_key> <underscore> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<Multi_key> <grave> <dead_macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<Multi_key> <grave> <macron> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<Multi_key> <grave> <underscore> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<dead_acute> <Emacron> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <acute> <Emacron> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <Emacron> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<dead_acute> <dead_macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<dead_acute> <Multi_key> <macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<dead_acute> <Multi_key> <underscore> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <acute> <dead_macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <acute> <macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <acute> <underscore> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <dead_macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <macron> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <underscore> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<dead_acute> <emacron> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <acute> <emacron> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <emacron> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<dead_acute> <dead_macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<dead_acute> <Multi_key> <macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<dead_acute> <Multi_key> <underscore> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <acute> <dead_macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <acute> <macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <acute> <underscore> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <dead_macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <macron> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <underscore> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<dead_belowcircumflex> <E> : "Ḙ" U1E18 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+<dead_belowcircumflex> <e> : "ḙ" U1E19 # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+<dead_belowtilde> <E> : "Ḛ" U1E1A # LATIN CAPITAL LETTER E WITH TILDE BELOW
+<dead_belowtilde> <e> : "ḛ" U1E1B # LATIN SMALL LETTER E WITH TILDE BELOW
+<dead_breve> <U0228> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <U> <U0228> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <b> <U0228> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<dead_breve> <dead_cedilla> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<dead_breve> <Multi_key> <comma> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<dead_breve> <Multi_key> <cedilla> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <U> <dead_cedilla> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <U> <space> <comma> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <U> <cedilla> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <b> <dead_cedilla> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <b> <comma> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <b> <cedilla> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<dead_breve> <U0229> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <U> <U0229> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <b> <U0229> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<dead_breve> <dead_cedilla> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<dead_breve> <Multi_key> <comma> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<dead_breve> <Multi_key> <cedilla> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <U> <dead_cedilla> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <U> <space> <comma> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <U> <cedilla> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <b> <dead_cedilla> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <b> <comma> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<Multi_key> <b> <cedilla> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<dead_abovedot> <F> : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
+<Multi_key> <period> <F> : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
+<Multi_key> <F> <period> : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
+<dead_abovedot> <f> : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
+<Multi_key> <period> <f> : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
+<Multi_key> <f> <period> : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
+<dead_macron> <G> : "Ḡ" U1E20 # LATIN CAPITAL LETTER G WITH MACRON
+<Multi_key> <macron> <G> : "Ḡ" U1E20 # LATIN CAPITAL LETTER G WITH MACRON
+<Multi_key> <underscore> <G> : "Ḡ" U1E20 # LATIN CAPITAL LETTER G WITH MACRON
+<dead_macron> <g> : "ḡ" U1E21 # LATIN SMALL LETTER G WITH MACRON
+<Multi_key> <macron> <g> : "ḡ" U1E21 # LATIN SMALL LETTER G WITH MACRON
+<Multi_key> <underscore> <g> : "ḡ" U1E21 # LATIN SMALL LETTER G WITH MACRON
+<dead_abovedot> <H> : "Ḣ" U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE
+<Multi_key> <period> <H> : "Ḣ" U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE
+<dead_abovedot> <h> : "ḣ" U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE
+<Multi_key> <period> <h> : "ḣ" U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE
+<dead_belowdot> <H> : "Ḥ" U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW
+<Multi_key> <exclam> <H> : "Ḥ" U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW
+<dead_belowdot> <h> : "ḥ" U1E25 # LATIN SMALL LETTER H WITH DOT BELOW
+<Multi_key> <exclam> <h> : "ḥ" U1E25 # LATIN SMALL LETTER H WITH DOT BELOW
+<dead_diaeresis> <H> : "Ḧ" U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS
+<Multi_key> <quotedbl> <H> : "Ḧ" U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS
+<dead_diaeresis> <h> : "ḧ" U1E27 # LATIN SMALL LETTER H WITH DIAERESIS
+<Multi_key> <quotedbl> <h> : "ḧ" U1E27 # LATIN SMALL LETTER H WITH DIAERESIS
+<dead_cedilla> <H> : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA
+<Multi_key> <comma> <H> : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA
+<Multi_key> <H> <comma> : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA
+<Multi_key> <cedilla> <H> : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA
+<dead_cedilla> <h> : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA
+<Multi_key> <comma> <h> : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA
+<Multi_key> <h> <comma> : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA
+<Multi_key> <cedilla> <h> : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA
+<dead_belowbreve> <H> : "Ḫ" U1E2A # LATIN CAPITAL LETTER H WITH BREVE BELOW
+<dead_belowbreve> <h> : "ḫ" U1E2B # LATIN SMALL LETTER H WITH BREVE BELOW
+<dead_belowtilde> <I> : "Ḭ" U1E2C # LATIN CAPITAL LETTER I WITH TILDE BELOW
+<dead_belowtilde> <i> : "ḭ" U1E2D # LATIN SMALL LETTER I WITH TILDE BELOW
+<dead_acute> <Idiaeresis> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <Idiaeresis> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <Idiaeresis> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<dead_acute> <dead_diaeresis> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<dead_acute> <Multi_key> <quotedbl> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <dead_diaeresis> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <quotedbl> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <dead_diaeresis> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <quotedbl> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<dead_acute> <idiaeresis> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <idiaeresis> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <idiaeresis> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<dead_acute> <dead_diaeresis> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<dead_acute> <Multi_key> <quotedbl> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <dead_diaeresis> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <acute> <quotedbl> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <dead_diaeresis> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<Multi_key> <apostrophe> <quotedbl> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<dead_acute> <K> : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
+<Multi_key> <acute> <K> : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
+<Multi_key> <apostrophe> <K> : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
+<dead_acute> <k> : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE
+<Multi_key> <acute> <k> : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE
+<Multi_key> <apostrophe> <k> : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE
+<dead_belowdot> <K> : "Ḳ" U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW
+<Multi_key> <exclam> <K> : "Ḳ" U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW
+<dead_belowdot> <k> : "ḳ" U1E33 # LATIN SMALL LETTER K WITH DOT BELOW
+<Multi_key> <exclam> <k> : "ḳ" U1E33 # LATIN SMALL LETTER K WITH DOT BELOW
+<dead_belowmacron> <K> : "Ḵ" U1E34 # LATIN CAPITAL LETTER K WITH LINE BELOW
+<dead_belowmacron> <k> : "ḵ" U1E35 # LATIN SMALL LETTER K WITH LINE BELOW
+<dead_belowdot> <L> : "Ḷ" U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW
+<Multi_key> <exclam> <L> : "Ḷ" U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW
+<dead_belowdot> <l> : "ḷ" U1E37 # LATIN SMALL LETTER L WITH DOT BELOW
+<Multi_key> <exclam> <l> : "ḷ" U1E37 # LATIN SMALL LETTER L WITH DOT BELOW
+<dead_macron> <U1E36> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <U1E36> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <U1E36> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<dead_macron> <dead_belowdot> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<dead_macron> <Multi_key> <exclam> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <dead_belowdot> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <exclam> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <dead_belowdot> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <exclam> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<dead_macron> <U1E37> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <U1E37> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <U1E37> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<dead_macron> <dead_belowdot> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<dead_macron> <Multi_key> <exclam> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <dead_belowdot> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <exclam> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <dead_belowdot> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <exclam> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<dead_belowmacron> <L> : "Ḻ" U1E3A # LATIN CAPITAL LETTER L WITH LINE BELOW
+<dead_belowmacron> <l> : "ḻ" U1E3B # LATIN SMALL LETTER L WITH LINE BELOW
+<dead_belowcircumflex> <L> : "Ḽ" U1E3C # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+<dead_belowcircumflex> <l> : "ḽ" U1E3D # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+<dead_acute> <M> : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
+<Multi_key> <acute> <M> : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
+<Multi_key> <apostrophe> <M> : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
+<dead_acute> <m> : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE
+<Multi_key> <acute> <m> : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE
+<Multi_key> <apostrophe> <m> : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE
+<dead_abovedot> <M> : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
+<Multi_key> <period> <M> : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
+<Multi_key> <M> <period> : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
+<dead_abovedot> <m> : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
+<Multi_key> <period> <m> : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
+<Multi_key> <m> <period> : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
+<dead_belowdot> <M> : "Ṃ" U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW
+<Multi_key> <exclam> <M> : "Ṃ" U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW
+<dead_belowdot> <m> : "ṃ" U1E43 # LATIN SMALL LETTER M WITH DOT BELOW
+<Multi_key> <exclam> <m> : "ṃ" U1E43 # LATIN SMALL LETTER M WITH DOT BELOW
+<dead_abovedot> <N> : "Ṅ" U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE
+<Multi_key> <period> <N> : "Ṅ" U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE
+<dead_abovedot> <n> : "ṅ" U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE
+<Multi_key> <period> <n> : "ṅ" U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE
+<dead_belowdot> <N> : "Ṇ" U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW
+<Multi_key> <exclam> <N> : "Ṇ" U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW
+<dead_belowdot> <n> : "ṇ" U1E47 # LATIN SMALL LETTER N WITH DOT BELOW
+<Multi_key> <exclam> <n> : "ṇ" U1E47 # LATIN SMALL LETTER N WITH DOT BELOW
+<dead_belowmacron> <N> : "Ṉ" U1E48 # LATIN CAPITAL LETTER N WITH LINE BELOW
+<dead_belowmacron> <n> : "ṉ" U1E49 # LATIN SMALL LETTER N WITH LINE BELOW
+<dead_belowcircumflex> <N> : "Ṋ" U1E4A # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+<dead_belowcircumflex> <n> : "ṋ" U1E4B # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+<dead_acute> <Otilde> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <acute> <Otilde> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <Otilde> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<dead_acute> <dead_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<dead_acute> <Multi_key> <asciitilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <acute> <dead_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <acute> <asciitilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <dead_tilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <asciitilde> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<dead_acute> <otilde> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <acute> <otilde> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <otilde> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<dead_acute> <dead_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<dead_acute> <Multi_key> <asciitilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <acute> <dead_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <acute> <asciitilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <dead_tilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <asciitilde> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<dead_diaeresis> <Otilde> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+<Multi_key> <quotedbl> <Otilde> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+<dead_diaeresis> <dead_tilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+<dead_diaeresis> <Multi_key> <asciitilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+<Multi_key> <quotedbl> <dead_tilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+<Multi_key> <quotedbl> <asciitilde> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+<dead_diaeresis> <otilde> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+<Multi_key> <quotedbl> <otilde> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+<dead_diaeresis> <dead_tilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+<dead_diaeresis> <Multi_key> <asciitilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+<Multi_key> <quotedbl> <dead_tilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+<Multi_key> <quotedbl> <asciitilde> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+<dead_grave> <Omacron> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<Multi_key> <grave> <Omacron> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<dead_grave> <dead_macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<dead_grave> <Multi_key> <macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<dead_grave> <Multi_key> <underscore> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<Multi_key> <grave> <dead_macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<Multi_key> <grave> <macron> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<Multi_key> <grave> <underscore> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<dead_grave> <omacron> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<Multi_key> <grave> <omacron> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<dead_grave> <dead_macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<dead_grave> <Multi_key> <macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<dead_grave> <Multi_key> <underscore> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<Multi_key> <grave> <dead_macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<Multi_key> <grave> <macron> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<Multi_key> <grave> <underscore> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<dead_acute> <Omacron> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <acute> <Omacron> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <Omacron> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<dead_acute> <dead_macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<dead_acute> <Multi_key> <macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<dead_acute> <Multi_key> <underscore> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <acute> <dead_macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <acute> <macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <acute> <underscore> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <dead_macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <macron> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <underscore> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<dead_acute> <omacron> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <acute> <omacron> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <omacron> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<dead_acute> <dead_macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<dead_acute> <Multi_key> <macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<dead_acute> <Multi_key> <underscore> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <acute> <dead_macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <acute> <macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <acute> <underscore> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <dead_macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <macron> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<Multi_key> <apostrophe> <underscore> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<dead_acute> <P> : "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
+<Multi_key> <acute> <P> : "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
+<Multi_key> <apostrophe> <P> : "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
+<dead_acute> <p> : "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE
+<Multi_key> <acute> <p> : "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE
+<Multi_key> <apostrophe> <p> : "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE
+<dead_abovedot> <P> : "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
+<Multi_key> <period> <P> : "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
+<Multi_key> <P> <period> : "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
+<dead_abovedot> <p> : "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
+<Multi_key> <period> <p> : "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
+<Multi_key> <p> <period> : "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
+<dead_abovedot> <R> : "Ṙ" U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE
+<Multi_key> <period> <R> : "Ṙ" U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE
+<dead_abovedot> <r> : "ṙ" U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE
+<Multi_key> <period> <r> : "ṙ" U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE
+<dead_belowdot> <R> : "Ṛ" U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW
+<Multi_key> <exclam> <R> : "Ṛ" U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW
+<dead_belowdot> <r> : "ṛ" U1E5B # LATIN SMALL LETTER R WITH DOT BELOW
+<Multi_key> <exclam> <r> : "ṛ" U1E5B # LATIN SMALL LETTER R WITH DOT BELOW
+<dead_macron> <U1E5A> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <U1E5A> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <U1E5A> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<dead_macron> <dead_belowdot> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<dead_macron> <Multi_key> <exclam> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <dead_belowdot> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <exclam> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <dead_belowdot> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <exclam> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<dead_macron> <U1E5B> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <U1E5B> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <U1E5B> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<dead_macron> <dead_belowdot> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<dead_macron> <Multi_key> <exclam> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <dead_belowdot> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <macron> <exclam> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <dead_belowdot> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<Multi_key> <underscore> <exclam> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<dead_belowmacron> <R> : "Ṟ" U1E5E # LATIN CAPITAL LETTER R WITH LINE BELOW
+<dead_belowmacron> <r> : "ṟ" U1E5F # LATIN SMALL LETTER R WITH LINE BELOW
+<dead_abovedot> <S> : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
+<Multi_key> <period> <S> : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
+<Multi_key> <S> <period> : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
+<dead_abovedot> <s> : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
+<Multi_key> <period> <s> : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
+<Multi_key> <s> <period> : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
+<dead_belowdot> <S> : "Ṣ" U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW
+<Multi_key> <exclam> <S> : "Ṣ" U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW
+<dead_belowdot> <s> : "ṣ" U1E63 # LATIN SMALL LETTER S WITH DOT BELOW
+<Multi_key> <exclam> <s> : "ṣ" U1E63 # LATIN SMALL LETTER S WITH DOT BELOW
+<dead_abovedot> <Sacute> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<Multi_key> <period> <Sacute> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_abovedot> <dead_acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_abovedot> <Multi_key> <acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_abovedot> <Multi_key> <apostrophe> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<Multi_key> <period> <dead_acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<Multi_key> <period> <acute> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<Multi_key> <period> <apostrophe> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_abovedot> <sacute> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<Multi_key> <period> <sacute> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_abovedot> <dead_acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_abovedot> <Multi_key> <acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_abovedot> <Multi_key> <apostrophe> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<Multi_key> <period> <dead_acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<Multi_key> <period> <acute> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<Multi_key> <period> <apostrophe> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_abovedot> <Scaron> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+<Multi_key> <period> <Scaron> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+<dead_abovedot> <dead_caron> <S> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+<dead_abovedot> <Multi_key> <c> <S> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+<Multi_key> <period> <dead_caron> <S> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+<dead_abovedot> <scaron> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+<Multi_key> <period> <scaron> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+<dead_abovedot> <dead_caron> <s> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+<dead_abovedot> <Multi_key> <c> <s> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+<Multi_key> <period> <dead_caron> <s> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+<dead_abovedot> <U1E62> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+<Multi_key> <period> <U1E62> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_abovedot> <dead_belowdot> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_abovedot> <Multi_key> <exclam> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+<Multi_key> <period> <dead_belowdot> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+<Multi_key> <period> <exclam> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_abovedot> <U1E63> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+<Multi_key> <period> <U1E63> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_abovedot> <dead_belowdot> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_abovedot> <Multi_key> <exclam> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+<Multi_key> <period> <dead_belowdot> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+<Multi_key> <period> <exclam> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_abovedot> <T> : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
+<Multi_key> <period> <T> : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
+<Multi_key> <T> <period> : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
+<dead_abovedot> <t> : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
+<Multi_key> <period> <t> : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
+<Multi_key> <t> <period> : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
+<dead_belowdot> <T> : "Ṭ" U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW
+<Multi_key> <exclam> <T> : "Ṭ" U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW
+<dead_belowdot> <t> : "ṭ" U1E6D # LATIN SMALL LETTER T WITH DOT BELOW
+<Multi_key> <exclam> <t> : "ṭ" U1E6D # LATIN SMALL LETTER T WITH DOT BELOW
+<dead_belowmacron> <T> : "Ṯ" U1E6E # LATIN CAPITAL LETTER T WITH LINE BELOW
+<dead_belowmacron> <t> : "ṯ" U1E6F # LATIN SMALL LETTER T WITH LINE BELOW
+<dead_belowcircumflex> <T> : "Ṱ" U1E70 # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+<dead_belowcircumflex> <t> : "ṱ" U1E71 # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+<dead_belowdiaeresis> <U> : "Ṳ" U1E72 # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+<dead_belowdiaeresis> <u> : "ṳ" U1E73 # LATIN SMALL LETTER U WITH DIAERESIS BELOW
+<dead_belowtilde> <U> : "Ṵ" U1E74 # LATIN CAPITAL LETTER U WITH TILDE BELOW
+<dead_belowtilde> <u> : "ṵ" U1E75 # LATIN SMALL LETTER U WITH TILDE BELOW
+<dead_belowcircumflex> <U> : "Ṷ" U1E76 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+<dead_belowcircumflex> <u> : "ṷ" U1E77 # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+<dead_acute> <Utilde> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <acute> <Utilde> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <Utilde> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<dead_acute> <dead_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<dead_acute> <Multi_key> <asciitilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <acute> <dead_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <acute> <asciitilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <dead_tilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <asciitilde> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<dead_acute> <utilde> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <acute> <utilde> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <utilde> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<dead_acute> <dead_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<dead_acute> <Multi_key> <asciitilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <acute> <dead_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <acute> <asciitilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <dead_tilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<Multi_key> <apostrophe> <asciitilde> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<dead_diaeresis> <Umacron> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+<Multi_key> <quotedbl> <Umacron> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+<dead_diaeresis> <dead_macron> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+<dead_diaeresis> <Multi_key> <macron> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+<dead_diaeresis> <Multi_key> <underscore> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+<Multi_key> <quotedbl> <dead_macron> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+<Multi_key> <quotedbl> <macron> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+<Multi_key> <quotedbl> <underscore> <U> : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+<dead_diaeresis> <umacron> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+<Multi_key> <quotedbl> <umacron> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+<dead_diaeresis> <dead_macron> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+<dead_diaeresis> <Multi_key> <macron> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+<dead_diaeresis> <Multi_key> <underscore> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+<Multi_key> <quotedbl> <dead_macron> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+<Multi_key> <quotedbl> <macron> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+<Multi_key> <quotedbl> <underscore> <u> : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+<dead_tilde> <V> : "Ṽ" U1E7C # LATIN CAPITAL LETTER V WITH TILDE
+<Multi_key> <asciitilde> <V> : "Ṽ" U1E7C # LATIN CAPITAL LETTER V WITH TILDE
+<dead_tilde> <v> : "ṽ" U1E7D # LATIN SMALL LETTER V WITH TILDE
+<Multi_key> <asciitilde> <v> : "ṽ" U1E7D # LATIN SMALL LETTER V WITH TILDE
+<dead_belowdot> <V> : "Ṿ" U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW
+<Multi_key> <exclam> <V> : "Ṿ" U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW
+<dead_belowdot> <v> : "ṿ" U1E7F # LATIN SMALL LETTER V WITH DOT BELOW
+<Multi_key> <exclam> <v> : "ṿ" U1E7F # LATIN SMALL LETTER V WITH DOT BELOW
+<dead_grave> <W> : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE
+<Multi_key> <grave> <W> : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE
+<dead_grave> <w> : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE
+<Multi_key> <grave> <w> : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE
+<dead_acute> <W> : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
+<Multi_key> <acute> <W> : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
+<Multi_key> <apostrophe> <W> : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
+<dead_acute> <w> : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE
+<Multi_key> <acute> <w> : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE
+<Multi_key> <apostrophe> <w> : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE
+<dead_diaeresis> <W> : "Ẅ" U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
+<Multi_key> <quotedbl> <W> : "Ẅ" U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
+<dead_diaeresis> <w> : "ẅ" U1E85 # LATIN SMALL LETTER W WITH DIAERESIS
+<Multi_key> <quotedbl> <w> : "ẅ" U1E85 # LATIN SMALL LETTER W WITH DIAERESIS
+<dead_abovedot> <W> : "Ẇ" U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE
+<Multi_key> <period> <W> : "Ẇ" U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE
+<dead_abovedot> <w> : "ẇ" U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE
+<Multi_key> <period> <w> : "ẇ" U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE
+<dead_belowdot> <W> : "Ẉ" U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW
+<Multi_key> <exclam> <W> : "Ẉ" U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW
+<dead_belowdot> <w> : "ẉ" U1E89 # LATIN SMALL LETTER W WITH DOT BELOW
+<Multi_key> <exclam> <w> : "ẉ" U1E89 # LATIN SMALL LETTER W WITH DOT BELOW
+<dead_abovedot> <X> : "Ẋ" U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE
+<Multi_key> <period> <X> : "Ẋ" U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE
+<dead_abovedot> <x> : "ẋ" U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE
+<Multi_key> <period> <x> : "ẋ" U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE
+<dead_diaeresis> <X> : "Ẍ" U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS
+<Multi_key> <quotedbl> <X> : "Ẍ" U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS
+<dead_diaeresis> <x> : "ẍ" U1E8D # LATIN SMALL LETTER X WITH DIAERESIS
+<Multi_key> <quotedbl> <x> : "ẍ" U1E8D # LATIN SMALL LETTER X WITH DIAERESIS
+<dead_abovedot> <Y> : "Ẏ" U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+<Multi_key> <period> <Y> : "Ẏ" U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+<dead_abovedot> <y> : "ẏ" U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE
+<Multi_key> <period> <y> : "ẏ" U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE
+<dead_circumflex> <Z> : "Ẑ" U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <Z> : "Ẑ" U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+<dead_circumflex> <z> : "ẑ" U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX
+<Multi_key> <asciicircum> <z> : "ẑ" U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX
+<dead_belowdot> <Z> : "Ẓ" U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW
+<Multi_key> <exclam> <Z> : "Ẓ" U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW
+<dead_belowdot> <z> : "ẓ" U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW
+<Multi_key> <exclam> <z> : "ẓ" U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW
+<dead_belowmacron> <Z> : "Ẕ" U1E94 # LATIN CAPITAL LETTER Z WITH LINE BELOW
+<dead_belowmacron> <z> : "ẕ" U1E95 # LATIN SMALL LETTER Z WITH LINE BELOW
+<dead_belowmacron> <h> : "ẖ" U1E96 # LATIN SMALL LETTER H WITH LINE BELOW
+<dead_diaeresis> <t> : "ẗ" U1E97 # LATIN SMALL LETTER T WITH DIAERESIS
+<Multi_key> <quotedbl> <t> : "ẗ" U1E97 # LATIN SMALL LETTER T WITH DIAERESIS
+<dead_abovering> <w> : "ẘ" U1E98 # LATIN SMALL LETTER W WITH RING ABOVE
+<Multi_key> <o> <w> : "ẘ" U1E98 # LATIN SMALL LETTER W WITH RING ABOVE
+<dead_abovering> <y> : "ẙ" U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE
+<Multi_key> <o> <y> : "ẙ" U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE
+<dead_abovedot> <U017F> : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+<Multi_key> <period> <U017F> : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+<dead_belowdot> <A> : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
+<Multi_key> <exclam> <A> : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
+<dead_belowdot> <a> : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
+<Multi_key> <exclam> <a> : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
+<dead_hook> <A> : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+<Multi_key> <question> <A> : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+<dead_hook> <a> : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
+<Multi_key> <question> <a> : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
+<dead_acute> <Acircumflex> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <Acircumflex> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <Acircumflex> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <dead_circumflex> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <Multi_key> <asciicircum> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <dead_circumflex> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <asciicircum> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <dead_circumflex> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <asciicircum> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <acircumflex> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <acircumflex> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <acircumflex> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <dead_circumflex> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <Multi_key> <asciicircum> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <dead_circumflex> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <asciicircum> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <dead_circumflex> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <asciicircum> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_grave> <Acircumflex> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <Acircumflex> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <dead_circumflex> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <Multi_key> <asciicircum> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <dead_circumflex> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <asciicircum> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <acircumflex> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <acircumflex> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <dead_circumflex> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <Multi_key> <asciicircum> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <dead_circumflex> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <asciicircum> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <Acircumflex> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <Acircumflex> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <dead_circumflex> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <Multi_key> <asciicircum> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <dead_circumflex> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <asciicircum> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <acircumflex> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <acircumflex> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <dead_circumflex> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <Multi_key> <asciicircum> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <dead_circumflex> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <asciicircum> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <Acircumflex> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <Acircumflex> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <dead_circumflex> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <Multi_key> <asciicircum> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <dead_circumflex> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <asciicircum> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <acircumflex> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <acircumflex> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <dead_circumflex> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <Multi_key> <asciicircum> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <dead_circumflex> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <asciicircum> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <U1EA0> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <U1EA0> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <dead_belowdot> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <Multi_key> <exclam> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <dead_belowdot> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <exclam> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <Acircumflex> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <U1EA1> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <U1EA1> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <dead_belowdot> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <Multi_key> <exclam> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <dead_belowdot> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <exclam> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <acircumflex> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_acute> <Abreve> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <acute> <Abreve> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <apostrophe> <Abreve> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<dead_acute> <dead_breve> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<dead_acute> <Multi_key> <U> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<dead_acute> <Multi_key> <b> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <acute> <dead_breve> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <acute> <b> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <apostrophe> <dead_breve> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <apostrophe> <b> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<dead_acute> <abreve> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <acute> <abreve> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <apostrophe> <abreve> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<dead_acute> <dead_breve> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<dead_acute> <Multi_key> <U> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<dead_acute> <Multi_key> <b> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <acute> <dead_breve> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <acute> <b> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <apostrophe> <dead_breve> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<Multi_key> <apostrophe> <b> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<dead_grave> <Abreve> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<Multi_key> <grave> <Abreve> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<dead_grave> <dead_breve> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<dead_grave> <Multi_key> <U> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<dead_grave> <Multi_key> <b> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<Multi_key> <grave> <dead_breve> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<Multi_key> <grave> <b> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<dead_grave> <abreve> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<Multi_key> <grave> <abreve> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<dead_grave> <dead_breve> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<dead_grave> <Multi_key> <U> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<dead_grave> <Multi_key> <b> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<Multi_key> <grave> <dead_breve> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<Multi_key> <grave> <b> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<dead_hook> <Abreve> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<Multi_key> <question> <Abreve> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_hook> <dead_breve> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_hook> <Multi_key> <U> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_hook> <Multi_key> <b> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<Multi_key> <question> <dead_breve> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<Multi_key> <question> <b> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_hook> <abreve> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<Multi_key> <question> <abreve> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_hook> <dead_breve> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_hook> <Multi_key> <U> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_hook> <Multi_key> <b> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<Multi_key> <question> <dead_breve> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<Multi_key> <question> <b> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_tilde> <Abreve> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<Multi_key> <asciitilde> <Abreve> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<dead_tilde> <dead_breve> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<dead_tilde> <Multi_key> <U> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<dead_tilde> <Multi_key> <b> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<Multi_key> <asciitilde> <dead_breve> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<Multi_key> <asciitilde> <b> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<dead_tilde> <abreve> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<Multi_key> <asciitilde> <abreve> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<dead_tilde> <dead_breve> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<dead_tilde> <Multi_key> <U> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<dead_tilde> <Multi_key> <b> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<Multi_key> <asciitilde> <dead_breve> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<Multi_key> <asciitilde> <b> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<dead_breve> <U1EA0> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <U> <U1EA0> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <b> <U1EA0> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<dead_breve> <dead_belowdot> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<dead_breve> <Multi_key> <exclam> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <U> <dead_belowdot> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <U> <exclam> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <b> <dead_belowdot> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <b> <exclam> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<dead_belowdot> <Abreve> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<dead_breve> <U1EA1> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <U> <U1EA1> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <b> <U1EA1> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<dead_breve> <dead_belowdot> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<dead_breve> <Multi_key> <exclam> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <U> <dead_belowdot> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <U> <exclam> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <b> <dead_belowdot> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<Multi_key> <b> <exclam> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<dead_belowdot> <abreve> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<dead_belowdot> <E> : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
+<Multi_key> <exclam> <E> : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
+<dead_belowdot> <e> : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
+<Multi_key> <exclam> <e> : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
+<dead_hook> <E> : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+<Multi_key> <question> <E> : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+<dead_hook> <e> : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
+<Multi_key> <question> <e> : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
+<dead_tilde> <E> : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE
+<Multi_key> <asciitilde> <E> : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE
+<dead_tilde> <e> : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE
+<Multi_key> <asciitilde> <e> : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE
+<dead_acute> <Ecircumflex> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <Ecircumflex> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <Ecircumflex> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <dead_circumflex> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <Multi_key> <asciicircum> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <dead_circumflex> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <asciicircum> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <dead_circumflex> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <asciicircum> <E> : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <ecircumflex> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <ecircumflex> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <ecircumflex> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <dead_circumflex> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <Multi_key> <asciicircum> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <dead_circumflex> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <asciicircum> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <dead_circumflex> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <asciicircum> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_grave> <Ecircumflex> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <Ecircumflex> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <dead_circumflex> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <Multi_key> <asciicircum> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <dead_circumflex> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <asciicircum> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <ecircumflex> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <ecircumflex> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <dead_circumflex> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <Multi_key> <asciicircum> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <dead_circumflex> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <asciicircum> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <Ecircumflex> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <Ecircumflex> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <dead_circumflex> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <Multi_key> <asciicircum> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <dead_circumflex> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <asciicircum> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <ecircumflex> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <ecircumflex> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <dead_circumflex> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <Multi_key> <asciicircum> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <dead_circumflex> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <asciicircum> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <Ecircumflex> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <Ecircumflex> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <dead_circumflex> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <Multi_key> <asciicircum> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <dead_circumflex> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <asciicircum> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <ecircumflex> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <ecircumflex> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <dead_circumflex> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <Multi_key> <asciicircum> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <dead_circumflex> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <asciicircum> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <U1EB8> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <U1EB8> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <dead_belowdot> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <Multi_key> <exclam> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <dead_belowdot> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <exclam> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <Ecircumflex> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <U1EB9> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <U1EB9> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <dead_belowdot> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <Multi_key> <exclam> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <dead_belowdot> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <exclam> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <ecircumflex> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_hook> <I> : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+<Multi_key> <question> <I> : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+<dead_hook> <i> : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
+<Multi_key> <question> <i> : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
+<dead_belowdot> <I> : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
+<Multi_key> <exclam> <I> : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
+<dead_belowdot> <i> : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW
+<Multi_key> <exclam> <i> : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW
+<dead_belowdot> <O> : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
+<Multi_key> <exclam> <O> : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
+<dead_belowdot> <o> : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW
+<Multi_key> <exclam> <o> : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW
+<dead_hook> <O> : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+<Multi_key> <question> <O> : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+<dead_hook> <o> : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
+<Multi_key> <question> <o> : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
+<dead_acute> <Ocircumflex> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <Ocircumflex> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <Ocircumflex> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <dead_circumflex> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <Multi_key> <asciicircum> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <dead_circumflex> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <asciicircum> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <dead_circumflex> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <asciicircum> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <ocircumflex> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <ocircumflex> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <ocircumflex> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <dead_circumflex> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_acute> <Multi_key> <asciicircum> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <dead_circumflex> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <acute> <asciicircum> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <dead_circumflex> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<Multi_key> <apostrophe> <asciicircum> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_grave> <Ocircumflex> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <Ocircumflex> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <dead_circumflex> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <Multi_key> <asciicircum> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <dead_circumflex> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <asciicircum> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <ocircumflex> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <ocircumflex> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <dead_circumflex> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_grave> <Multi_key> <asciicircum> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <dead_circumflex> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<Multi_key> <grave> <asciicircum> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <Ocircumflex> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <Ocircumflex> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <dead_circumflex> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <Multi_key> <asciicircum> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <dead_circumflex> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <asciicircum> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <ocircumflex> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <ocircumflex> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <dead_circumflex> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_hook> <Multi_key> <asciicircum> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <dead_circumflex> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<Multi_key> <question> <asciicircum> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <Ocircumflex> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <Ocircumflex> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <dead_circumflex> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <Multi_key> <asciicircum> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <dead_circumflex> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <asciicircum> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <ocircumflex> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <ocircumflex> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <dead_circumflex> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_tilde> <Multi_key> <asciicircum> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <dead_circumflex> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<Multi_key> <asciitilde> <asciicircum> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <U1ECC> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <U1ECC> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <dead_belowdot> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <Multi_key> <exclam> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <dead_belowdot> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <exclam> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <Ocircumflex> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <U1ECD> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <U1ECD> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <dead_belowdot> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_circumflex> <Multi_key> <exclam> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <dead_belowdot> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<Multi_key> <asciicircum> <exclam> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <ocircumflex> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_acute> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<Multi_key> <acute> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<dead_acute> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<dead_acute> <Multi_key> <plus> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<Multi_key> <acute> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<Multi_key> <acute> <plus> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <plus> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<dead_acute> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<Multi_key> <acute> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<dead_acute> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<dead_acute> <Multi_key> <plus> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<Multi_key> <acute> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<Multi_key> <acute> <plus> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <plus> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<dead_grave> <Ohorn> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<Multi_key> <grave> <Ohorn> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<dead_grave> <dead_horn> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<dead_grave> <Multi_key> <plus> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<Multi_key> <grave> <dead_horn> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<Multi_key> <grave> <plus> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<dead_grave> <ohorn> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<Multi_key> <grave> <ohorn> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<dead_grave> <dead_horn> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<dead_grave> <Multi_key> <plus> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<Multi_key> <grave> <dead_horn> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<Multi_key> <grave> <plus> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<dead_hook> <Ohorn> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <Ohorn> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<dead_hook> <dead_horn> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<dead_hook> <Multi_key> <plus> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <dead_horn> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <plus> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<dead_hook> <ohorn> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <ohorn> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<dead_hook> <dead_horn> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<dead_hook> <Multi_key> <plus> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <dead_horn> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <plus> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<dead_tilde> <Ohorn> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+<Multi_key> <asciitilde> <Ohorn> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+<dead_tilde> <dead_horn> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+<dead_tilde> <Multi_key> <plus> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+<Multi_key> <asciitilde> <dead_horn> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+<Multi_key> <asciitilde> <plus> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+<dead_tilde> <ohorn> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
+<Multi_key> <asciitilde> <ohorn> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
+<dead_tilde> <dead_horn> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
+<dead_tilde> <Multi_key> <plus> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
+<Multi_key> <asciitilde> <dead_horn> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
+<Multi_key> <asciitilde> <plus> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
+<dead_belowdot> <Ohorn> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <Ohorn> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<dead_belowdot> <dead_horn> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<dead_belowdot> <Multi_key> <plus> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <dead_horn> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <plus> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<dead_belowdot> <ohorn> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <ohorn> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<dead_belowdot> <dead_horn> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<dead_belowdot> <Multi_key> <plus> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <dead_horn> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <plus> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<dead_belowdot> <U> : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
+<Multi_key> <exclam> <U> : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
+<dead_belowdot> <u> : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
+<Multi_key> <exclam> <u> : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
+<dead_hook> <U> : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+<Multi_key> <question> <U> : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+<dead_hook> <u> : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
+<Multi_key> <question> <u> : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
+<dead_acute> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<Multi_key> <acute> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<dead_acute> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<dead_acute> <Multi_key> <plus> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<Multi_key> <acute> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<Multi_key> <acute> <plus> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <plus> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<dead_acute> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<Multi_key> <acute> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<dead_acute> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<dead_acute> <Multi_key> <plus> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<Multi_key> <acute> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<Multi_key> <acute> <plus> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<Multi_key> <apostrophe> <plus> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<dead_grave> <Uhorn> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<Multi_key> <grave> <Uhorn> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<dead_grave> <dead_horn> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<dead_grave> <Multi_key> <plus> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<Multi_key> <grave> <dead_horn> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<Multi_key> <grave> <plus> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<dead_grave> <uhorn> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<Multi_key> <grave> <uhorn> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<dead_grave> <dead_horn> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<dead_grave> <Multi_key> <plus> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<Multi_key> <grave> <dead_horn> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<Multi_key> <grave> <plus> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<dead_hook> <Uhorn> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <Uhorn> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<dead_hook> <dead_horn> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<dead_hook> <Multi_key> <plus> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <dead_horn> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <plus> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<dead_hook> <uhorn> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <uhorn> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<dead_hook> <dead_horn> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<dead_hook> <Multi_key> <plus> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <dead_horn> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<Multi_key> <question> <plus> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<dead_tilde> <Uhorn> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+<Multi_key> <asciitilde> <Uhorn> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+<dead_tilde> <dead_horn> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+<dead_tilde> <Multi_key> <plus> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+<Multi_key> <asciitilde> <dead_horn> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+<Multi_key> <asciitilde> <plus> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+<dead_tilde> <uhorn> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
+<Multi_key> <asciitilde> <uhorn> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
+<dead_tilde> <dead_horn> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
+<dead_tilde> <Multi_key> <plus> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
+<Multi_key> <asciitilde> <dead_horn> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
+<Multi_key> <asciitilde> <plus> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
+<dead_belowdot> <Uhorn> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <Uhorn> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<dead_belowdot> <dead_horn> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<dead_belowdot> <Multi_key> <plus> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <dead_horn> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <plus> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<dead_belowdot> <uhorn> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <uhorn> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<dead_belowdot> <dead_horn> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<dead_belowdot> <Multi_key> <plus> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <dead_horn> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<Multi_key> <exclam> <plus> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<dead_grave> <Y> : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
+<Multi_key> <grave> <Y> : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
+<dead_grave> <y> : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE
+<Multi_key> <grave> <y> : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE
+<dead_belowdot> <Y> : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
+<Multi_key> <exclam> <Y> : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
+<dead_belowdot> <y> : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
+<Multi_key> <exclam> <y> : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
+<dead_hook> <Y> : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+<Multi_key> <question> <Y> : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+<dead_hook> <y> : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
+<Multi_key> <question> <y> : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
+<dead_tilde> <Y> : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
+<Multi_key> <asciitilde> <Y> : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
+<dead_tilde> <y> : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE
+<Multi_key> <asciitilde> <y> : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE
+<dead_psili> <Greek_alpha> : "ἀ" U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI
+<Multi_key> <parenright> <Greek_alpha> : "ἀ" U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI
+<dead_dasia> <Greek_alpha> : "ἁ" U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA
+<Multi_key> <parenleft> <Greek_alpha> : "ἁ" U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA
+<dead_grave> <U1F00> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F00> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_alpha> : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+<dead_grave> <U1F01> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F01> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_alpha> : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+<dead_acute> <U1F00> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F00> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F00> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_alpha> : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+<dead_acute> <U1F01> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F01> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F01> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_alpha> : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<dead_tilde> <U1F00> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F00> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<dead_tilde> <dead_psili> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenright> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_psili> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <parenright> <Greek_alpha> : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<dead_tilde> <U1F01> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F01> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_alpha> : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<dead_psili> <Greek_ALPHA> : "Ἀ" U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI
+<Multi_key> <parenright> <Greek_ALPHA> : "Ἀ" U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI
+<dead_dasia> <Greek_ALPHA> : "Ἁ" U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA
+<Multi_key> <parenleft> <Greek_ALPHA> : "Ἁ" U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA
+<dead_grave> <U1F08> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F08> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_ALPHA> : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+<dead_grave> <U1F09> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F09> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_ALPHA> : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+<dead_acute> <U1F08> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F08> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F08> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_ALPHA> : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+<dead_acute> <U1F09> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F09> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F09> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_ALPHA> : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<dead_tilde> <U1F08> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F08> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<dead_tilde> <dead_psili> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenright> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_psili> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <parenright> <Greek_ALPHA> : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+<dead_tilde> <U1F09> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F09> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_ALPHA> : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<dead_psili> <Greek_epsilon> : "ἐ" U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI
+<Multi_key> <parenright> <Greek_epsilon> : "ἐ" U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI
+<dead_dasia> <Greek_epsilon> : "ἑ" U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA
+<Multi_key> <parenleft> <Greek_epsilon> : "ἑ" U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA
+<dead_grave> <U1F10> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F10> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_epsilon> : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+<dead_grave> <U1F11> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F11> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_epsilon> : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+<dead_acute> <U1F10> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F10> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F10> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_epsilon> : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+<dead_acute> <U1F11> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F11> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F11> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_epsilon> : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<dead_psili> <Greek_EPSILON> : "Ἐ" U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI
+<Multi_key> <parenright> <Greek_EPSILON> : "Ἐ" U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI
+<dead_dasia> <Greek_EPSILON> : "Ἑ" U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA
+<Multi_key> <parenleft> <Greek_EPSILON> : "Ἑ" U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA
+<dead_grave> <U1F18> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F18> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_EPSILON> : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+<dead_grave> <U1F19> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F19> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_EPSILON> : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+<dead_acute> <U1F18> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F18> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F18> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_EPSILON> : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+<dead_acute> <U1F19> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F19> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F19> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_EPSILON> : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<dead_psili> <Greek_eta> : "ἠ" U1F20 # GREEK SMALL LETTER ETA WITH PSILI
+<Multi_key> <parenright> <Greek_eta> : "ἠ" U1F20 # GREEK SMALL LETTER ETA WITH PSILI
+<dead_dasia> <Greek_eta> : "ἡ" U1F21 # GREEK SMALL LETTER ETA WITH DASIA
+<Multi_key> <parenleft> <Greek_eta> : "ἡ" U1F21 # GREEK SMALL LETTER ETA WITH DASIA
+<dead_grave> <U1F20> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F20> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_eta> : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+<dead_grave> <U1F21> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F21> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_eta> : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+<dead_acute> <U1F20> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F20> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F20> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_eta> : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+<dead_acute> <U1F21> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F21> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F21> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_eta> : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<dead_tilde> <U1F20> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F20> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+<dead_tilde> <dead_psili> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenright> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_psili> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <parenright> <Greek_eta> : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+<dead_tilde> <U1F21> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F21> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_eta> : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+<dead_psili> <Greek_ETA> : "Ἠ" U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI
+<Multi_key> <parenright> <Greek_ETA> : "Ἠ" U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI
+<dead_dasia> <Greek_ETA> : "Ἡ" U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA
+<Multi_key> <parenleft> <Greek_ETA> : "Ἡ" U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA
+<dead_grave> <U1F28> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F28> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_ETA> : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+<dead_grave> <U1F29> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F29> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_ETA> : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+<dead_acute> <U1F28> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F28> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F28> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_ETA> : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+<dead_acute> <U1F29> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F29> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F29> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_ETA> : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<dead_tilde> <U1F28> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F28> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+<dead_tilde> <dead_psili> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenright> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_psili> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <parenright> <Greek_ETA> : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+<dead_tilde> <U1F29> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F29> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_ETA> : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+<dead_psili> <Greek_iota> : "ἰ" U1F30 # GREEK SMALL LETTER IOTA WITH PSILI
+<Multi_key> <parenright> <Greek_iota> : "ἰ" U1F30 # GREEK SMALL LETTER IOTA WITH PSILI
+<dead_dasia> <Greek_iota> : "ἱ" U1F31 # GREEK SMALL LETTER IOTA WITH DASIA
+<Multi_key> <parenleft> <Greek_iota> : "ἱ" U1F31 # GREEK SMALL LETTER IOTA WITH DASIA
+<dead_grave> <U1F30> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F30> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_iota> : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+<dead_grave> <U1F31> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F31> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_iota> : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+<dead_acute> <U1F30> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F30> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F30> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_iota> : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+<dead_acute> <U1F31> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F31> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F31> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_iota> : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<dead_tilde> <U1F30> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F30> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+<dead_tilde> <dead_psili> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenright> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_psili> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <parenright> <Greek_iota> : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+<dead_tilde> <U1F31> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F31> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_iota> : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+<dead_psili> <Greek_IOTA> : "Ἰ" U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI
+<Multi_key> <parenright> <Greek_IOTA> : "Ἰ" U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI
+<dead_dasia> <Greek_IOTA> : "Ἱ" U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA
+<Multi_key> <parenleft> <Greek_IOTA> : "Ἱ" U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA
+<dead_grave> <U1F38> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F38> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_IOTA> : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+<dead_grave> <U1F39> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F39> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_IOTA> : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+<dead_acute> <U1F38> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F38> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F38> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_IOTA> : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+<dead_acute> <U1F39> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F39> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F39> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_IOTA> : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<dead_tilde> <U1F38> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F38> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+<dead_tilde> <dead_psili> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenright> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_psili> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <parenright> <Greek_IOTA> : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+<dead_tilde> <U1F39> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F39> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_IOTA> : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+<dead_psili> <Greek_omicron> : "ὀ" U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI
+<Multi_key> <parenright> <Greek_omicron> : "ὀ" U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI
+<dead_dasia> <Greek_omicron> : "ὁ" U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA
+<Multi_key> <parenleft> <Greek_omicron> : "ὁ" U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA
+<dead_grave> <U1F40> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F40> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_omicron> : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+<dead_grave> <U1F41> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F41> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_omicron> : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+<dead_acute> <U1F40> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F40> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F40> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_omicron> : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+<dead_acute> <U1F41> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F41> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F41> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_omicron> : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<dead_psili> <Greek_OMICRON> : "Ὀ" U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI
+<Multi_key> <parenright> <Greek_OMICRON> : "Ὀ" U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI
+<dead_dasia> <Greek_OMICRON> : "Ὁ" U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA
+<Multi_key> <parenleft> <Greek_OMICRON> : "Ὁ" U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA
+<dead_grave> <U1F48> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F48> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_OMICRON> : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+<dead_grave> <U1F49> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F49> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_OMICRON> : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+<dead_acute> <U1F48> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F48> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F48> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_OMICRON> : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+<dead_acute> <U1F49> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F49> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F49> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_OMICRON> : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<dead_psili> <Greek_upsilon> : "ὐ" U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI
+<Multi_key> <parenright> <Greek_upsilon> : "ὐ" U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI
+<dead_dasia> <Greek_upsilon> : "ὑ" U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA
+<Multi_key> <parenleft> <Greek_upsilon> : "ὑ" U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA
+<dead_grave> <U1F50> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F50> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_upsilon> : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+<dead_grave> <U1F51> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F51> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_upsilon> : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+<dead_acute> <U1F50> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F50> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F50> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_upsilon> : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+<dead_acute> <U1F51> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F51> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F51> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_upsilon> : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<dead_tilde> <U1F50> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F50> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+<dead_tilde> <dead_psili> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenright> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_psili> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <parenright> <Greek_upsilon> : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+<dead_tilde> <U1F51> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F51> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_upsilon> : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<dead_dasia> <Greek_UPSILON> : "Ὑ" U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA
+<Multi_key> <parenleft> <Greek_UPSILON> : "Ὑ" U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA
+<dead_grave> <U1F59> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F59> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_UPSILON> : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+<dead_acute> <U1F59> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F59> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F59> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_UPSILON> : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<dead_tilde> <U1F59> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F59> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_UPSILON> : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<dead_psili> <Greek_omega> : "ὠ" U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI
+<Multi_key> <parenright> <Greek_omega> : "ὠ" U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI
+<dead_dasia> <Greek_omega> : "ὡ" U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA
+<Multi_key> <parenleft> <Greek_omega> : "ὡ" U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA
+<dead_grave> <U1F60> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F60> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_omega> : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+<dead_grave> <U1F61> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F61> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_omega> : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+<dead_acute> <U1F60> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F60> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F60> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_omega> : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+<dead_acute> <U1F61> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F61> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F61> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_omega> : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+<dead_tilde> <U1F60> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F60> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<dead_tilde> <dead_psili> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenright> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_psili> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <parenright> <Greek_omega> : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<dead_tilde> <U1F61> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F61> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_omega> : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<dead_psili> <Greek_OMEGA> : "Ὠ" U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI
+<Multi_key> <parenright> <Greek_OMEGA> : "Ὠ" U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI
+<dead_dasia> <Greek_OMEGA> : "Ὡ" U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA
+<Multi_key> <parenleft> <Greek_OMEGA> : "Ὡ" U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA
+<dead_grave> <U1F68> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+<Multi_key> <grave> <U1F68> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+<dead_grave> <dead_psili> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+<dead_grave> <Multi_key> <parenright> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+<Multi_key> <grave> <dead_psili> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+<Multi_key> <grave> <parenright> <Greek_OMEGA> : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+<dead_grave> <U1F69> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+<Multi_key> <grave> <U1F69> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+<dead_grave> <dead_dasia> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+<dead_grave> <Multi_key> <parenleft> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+<Multi_key> <grave> <dead_dasia> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+<Multi_key> <grave> <parenleft> <Greek_OMEGA> : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+<dead_acute> <U1F68> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <acute> <U1F68> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <U1F68> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+<dead_acute> <dead_psili> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+<dead_acute> <Multi_key> <parenright> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <acute> <dead_psili> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <acute> <parenright> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <dead_psili> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+<Multi_key> <apostrophe> <parenright> <Greek_OMEGA> : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+<dead_acute> <U1F69> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <acute> <U1F69> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <U1F69> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<dead_acute> <dead_dasia> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<dead_acute> <Multi_key> <parenleft> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <acute> <dead_dasia> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <acute> <parenleft> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <dead_dasia> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<Multi_key> <apostrophe> <parenleft> <Greek_OMEGA> : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<dead_tilde> <U1F68> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F68> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<dead_tilde> <dead_psili> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenright> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_psili> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<Multi_key> <asciitilde> <parenright> <Greek_OMEGA> : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+<dead_tilde> <U1F69> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <U1F69> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<dead_tilde> <dead_dasia> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<dead_tilde> <Multi_key> <parenleft> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_dasia> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<Multi_key> <asciitilde> <parenleft> <Greek_OMEGA> : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<dead_grave> <Greek_alpha> : "ὰ" U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA
+<Multi_key> <grave> <Greek_alpha> : "ὰ" U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA
+<dead_grave> <Greek_epsilon> : "ὲ" U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA
+<Multi_key> <grave> <Greek_epsilon> : "ὲ" U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA
+<dead_grave> <Greek_eta> : "ὴ" U1F74 # GREEK SMALL LETTER ETA WITH VARIA
+<Multi_key> <grave> <Greek_eta> : "ὴ" U1F74 # GREEK SMALL LETTER ETA WITH VARIA
+<dead_grave> <Greek_iota> : "ὶ" U1F76 # GREEK SMALL LETTER IOTA WITH VARIA
+<Multi_key> <grave> <Greek_iota> : "ὶ" U1F76 # GREEK SMALL LETTER IOTA WITH VARIA
+<dead_grave> <Greek_omicron> : "ὸ" U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA
+<Multi_key> <grave> <Greek_omicron> : "ὸ" U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA
+<dead_grave> <Greek_upsilon> : "ὺ" U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA
+<Multi_key> <grave> <Greek_upsilon> : "ὺ" U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA
+<dead_grave> <Greek_omega> : "ὼ" U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA
+<Multi_key> <grave> <Greek_omega> : "ὼ" U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA
+<dead_iota> <U1F00> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F00> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+<dead_iota> <dead_psili> <Greek_alpha> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <parenright> <Greek_alpha> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_psili> <Greek_alpha> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <parenright> <Greek_alpha> : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+<dead_iota> <U1F01> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F01> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+<dead_iota> <dead_dasia> <Greek_alpha> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <parenleft> <Greek_alpha> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_dasia> <Greek_alpha> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <parenleft> <Greek_alpha> : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+<dead_iota> <U1F02> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F02> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <U1F00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F00> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <dead_psili> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_psili> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_psili> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_psili> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenright> <Greek_alpha> : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <U1F03> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F03> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <U1F01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F01> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <dead_dasia> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_dasia> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_dasia> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_dasia> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_alpha> : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <U1F04> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F04> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <U1F00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F00> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <dead_psili> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_psili> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_psili> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_psili> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_psili> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_psili> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_alpha> : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <U1F05> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F05> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <U1F01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F01> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <dead_dasia> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_dasia> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_dasia> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_dasia> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_dasia> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_dasia> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_alpha> : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <U1F06> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F06> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F00> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_psili> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_psili> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_psili> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_psili> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_alpha> : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <U1F07> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F07> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F01> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_dasia> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_dasia> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_dasia> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_dasia> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_alpha> : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <U1F08> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F08> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+<dead_iota> <dead_psili> <Greek_ALPHA> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <parenright> <Greek_ALPHA> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_psili> <Greek_ALPHA> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <parenright> <Greek_ALPHA> : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+<dead_iota> <U1F09> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F09> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+<dead_iota> <dead_dasia> <Greek_ALPHA> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_dasia> <Greek_ALPHA> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <parenleft> <Greek_ALPHA> : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+<dead_iota> <U1F0A> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F0A> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <U1F08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F08> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <dead_psili> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_psili> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_psili> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_psili> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenright> <Greek_ALPHA> : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <U1F0B> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F0B> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <U1F09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F09> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <dead_dasia> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_dasia> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_dasia> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_dasia> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_ALPHA> : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <U1F0C> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F0C> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <U1F08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F08> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <dead_psili> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_psili> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_psili> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_psili> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_psili> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_psili> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_ALPHA> : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <U1F0D> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F0D> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <U1F09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F09> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <dead_dasia> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_dasia> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_dasia> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_dasia> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_dasia> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_dasia> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_ALPHA> : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <U1F0E> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F0E> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F08> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_psili> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_psili> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_psili> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_psili> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_ALPHA> : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <U1F0F> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F0F> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F09> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_dasia> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_dasia> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_dasia> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_dasia> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_ALPHA> : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <U1F20> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F20> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+<dead_iota> <dead_psili> <Greek_eta> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <parenright> <Greek_eta> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_psili> <Greek_eta> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <parenright> <Greek_eta> : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+<dead_iota> <U1F21> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F21> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+<dead_iota> <dead_dasia> <Greek_eta> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <parenleft> <Greek_eta> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_dasia> <Greek_eta> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <parenleft> <Greek_eta> : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+<dead_iota> <U1F22> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F22> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <U1F20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F20> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <dead_psili> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_psili> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_psili> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_psili> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenright> <Greek_eta> : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <U1F23> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F23> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <U1F21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F21> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <dead_dasia> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_dasia> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_dasia> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_dasia> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_eta> : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <U1F24> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F24> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <U1F20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F20> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <dead_psili> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_psili> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_psili> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_psili> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_psili> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_psili> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_eta> : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <U1F25> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F25> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <U1F21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F21> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <dead_dasia> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_dasia> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_dasia> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_dasia> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_dasia> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_dasia> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_eta> : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <U1F26> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F26> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F20> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_psili> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_psili> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_psili> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_psili> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_eta> : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <U1F27> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F27> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F21> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_dasia> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_dasia> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_dasia> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_dasia> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_eta> : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <U1F28> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F28> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+<dead_iota> <dead_psili> <Greek_ETA> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <parenright> <Greek_ETA> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_psili> <Greek_ETA> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <parenright> <Greek_ETA> : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+<dead_iota> <U1F29> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F29> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+<dead_iota> <dead_dasia> <Greek_ETA> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <parenleft> <Greek_ETA> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_dasia> <Greek_ETA> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <parenleft> <Greek_ETA> : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+<dead_iota> <U1F2A> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F2A> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <U1F28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F28> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <dead_psili> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_psili> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_psili> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_psili> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenright> <Greek_ETA> : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <U1F2B> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F2B> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <U1F29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F29> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <dead_dasia> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_dasia> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_dasia> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_dasia> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_ETA> : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <U1F2C> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F2C> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <U1F28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F28> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <dead_psili> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_psili> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_psili> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_psili> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_psili> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_psili> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_ETA> : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <U1F2D> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F2D> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <U1F29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F29> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <dead_dasia> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_dasia> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_dasia> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_dasia> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_dasia> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_dasia> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_ETA> : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <U1F2E> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F2E> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F28> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_psili> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_psili> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_psili> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_psili> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_ETA> : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <U1F2F> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F2F> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F29> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_dasia> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_dasia> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_dasia> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_dasia> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_ETA> : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <U1F60> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F60> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+<dead_iota> <dead_psili> <Greek_omega> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <parenright> <Greek_omega> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_psili> <Greek_omega> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <parenright> <Greek_omega> : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+<dead_iota> <U1F61> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F61> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+<dead_iota> <dead_dasia> <Greek_omega> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <parenleft> <Greek_omega> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_dasia> <Greek_omega> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <parenleft> <Greek_omega> : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+<dead_iota> <U1F62> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F62> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <U1F60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F60> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <dead_psili> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_psili> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_psili> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_psili> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenright> <Greek_omega> : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <U1F63> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F63> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <U1F61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F61> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <dead_dasia> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_dasia> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_dasia> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_dasia> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_omega> : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+<dead_iota> <U1F64> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F64> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <U1F60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F60> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <dead_psili> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_psili> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_psili> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_psili> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_psili> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_psili> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_omega> : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <U1F65> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F65> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <U1F61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F61> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <dead_dasia> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_dasia> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_dasia> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_dasia> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_dasia> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_dasia> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_omega> : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+<dead_iota> <U1F66> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F66> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F60> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_psili> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_psili> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_psili> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_psili> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_omega> : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <U1F67> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F67> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F61> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_dasia> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_dasia> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_dasia> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_dasia> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_omega> : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <U1F68> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F68> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+<dead_iota> <dead_psili> <Greek_OMEGA> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <parenright> <Greek_OMEGA> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_psili> <Greek_OMEGA> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <parenright> <Greek_OMEGA> : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+<dead_iota> <U1F69> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F69> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+<dead_iota> <dead_dasia> <Greek_OMEGA> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_dasia> <Greek_OMEGA> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <parenleft> <Greek_OMEGA> : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+<dead_iota> <U1F6A> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F6A> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <U1F68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F68> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <dead_psili> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_psili> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_psili> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_psili> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenright> <Greek_OMEGA> : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <U1F6B> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F6B> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <U1F69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <U1F69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <U1F69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <U1F69> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <dead_dasia> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <dead_grave> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <dead_dasia> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <dead_dasia> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <dead_dasia> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <parenleft> <Greek_OMEGA> : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+<dead_iota> <U1F6C> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F6C> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <U1F68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F68> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <dead_psili> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_psili> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_psili> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_psili> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_psili> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_psili> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenright> <Greek_OMEGA> : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <U1F6D> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F6D> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <U1F69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <U1F69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <U1F69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <U1F69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <U1F69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <U1F69> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <dead_dasia> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <dead_acute> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <dead_dasia> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <dead_dasia> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <dead_dasia> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <dead_dasia> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <dead_dasia> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <parenleft> <Greek_OMEGA> : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+<dead_iota> <U1F6E> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F6E> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F68> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_psili> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_psili> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_psili> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_psili> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenright> <Greek_OMEGA> : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <U1F6F> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F6F> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <U1F69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <U1F69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <U1F69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <U1F69> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <dead_dasia> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <dead_tilde> <Multi_key> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <dead_dasia> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <dead_dasia> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <dead_dasia> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <parenleft> <Greek_OMEGA> : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+<dead_breve> <Greek_alpha> : "ᾰ" U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY
+<Multi_key> <U> <Greek_alpha> : "ᾰ" U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY
+<Multi_key> <b> <Greek_alpha> : "ᾰ" U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY
+<dead_macron> <Greek_alpha> : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
+<Multi_key> <macron> <Greek_alpha> : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
+<Multi_key> <underscore> <Greek_alpha> : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
+<dead_iota> <U1F70> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F70> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <Greek_alpha> : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+<dead_iota> <Greek_alpha> : "ᾳ" U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <Greek_alpha> : "ᾳ" U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+<dead_iota> <Greek_alphaaccent> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <Greek_alphaaccent> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <Greek_alpha> : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+<dead_tilde> <Greek_alpha> : "ᾶ" U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+<Multi_key> <asciitilde> <Greek_alpha> : "ᾶ" U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+<dead_iota> <U1FB6> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1FB6> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <Greek_alpha> : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+<dead_breve> <Greek_ALPHA> : "Ᾰ" U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+<Multi_key> <U> <Greek_ALPHA> : "Ᾰ" U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+<Multi_key> <b> <Greek_ALPHA> : "Ᾰ" U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+<dead_macron> <Greek_ALPHA> : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
+<Multi_key> <macron> <Greek_ALPHA> : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
+<Multi_key> <underscore> <Greek_ALPHA> : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
+<dead_grave> <Greek_ALPHA> : "Ὰ" U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA
+<Multi_key> <grave> <Greek_ALPHA> : "Ὰ" U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA
+<dead_iota> <Greek_ALPHA> : "ᾼ" U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <Greek_ALPHA> : "ᾼ" U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+<Multi_key> <diaeresis> <dead_tilde> : "῁" U1FC1 # GREEK DIALYTIKA AND PERISPOMENI
+<Multi_key> <diaeresis> <asciitilde> : "῁" U1FC1 # GREEK DIALYTIKA AND PERISPOMENI
+<dead_iota> <U1F74> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F74> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <Greek_eta> : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+<dead_iota> <Greek_eta> : "ῃ" U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <Greek_eta> : "ῃ" U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+<dead_iota> <Greek_etaaccent> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <Greek_etaaccent> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <Greek_eta> : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+<dead_tilde> <Greek_eta> : "ῆ" U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI
+<Multi_key> <asciitilde> <Greek_eta> : "ῆ" U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI
+<dead_iota> <U1FC6> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1FC6> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <Greek_eta> : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+<dead_grave> <Greek_EPSILON> : "Ὲ" U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA
+<Multi_key> <grave> <Greek_EPSILON> : "Ὲ" U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA
+<dead_grave> <Greek_ETA> : "Ὴ" U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA
+<Multi_key> <grave> <Greek_ETA> : "Ὴ" U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA
+<dead_iota> <Greek_ETA> : "ῌ" U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <Greek_ETA> : "ῌ" U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+<Multi_key> <U1FBF> <dead_grave> : "῍" U1FCD # GREEK PSILI AND VARIA
+<Multi_key> <U1FBF> <grave> : "῍" U1FCD # GREEK PSILI AND VARIA
+<Multi_key> <U1FBF> <dead_acute> : "῎" U1FCE # GREEK PSILI AND OXIA
+<Multi_key> <U1FBF> <acute> : "῎" U1FCE # GREEK PSILI AND OXIA
+<Multi_key> <U1FBF> <apostrophe> : "῎" U1FCE # GREEK PSILI AND OXIA
+<Multi_key> <U1FBF> <dead_tilde> : "῏" U1FCF # GREEK PSILI AND PERISPOMENI
+<Multi_key> <U1FBF> <asciitilde> : "῏" U1FCF # GREEK PSILI AND PERISPOMENI
+<dead_breve> <Greek_iota> : "ῐ" U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY
+<Multi_key> <U> <Greek_iota> : "ῐ" U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY
+<Multi_key> <b> <Greek_iota> : "ῐ" U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY
+<dead_macron> <Greek_iota> : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
+<Multi_key> <macron> <Greek_iota> : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
+<Multi_key> <underscore> <Greek_iota> : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
+<dead_grave> <Greek_iotadieresis> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+<Multi_key> <grave> <Greek_iotadieresis> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+<dead_grave> <dead_diaeresis> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+<dead_grave> <Multi_key> <quotedbl> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+<Multi_key> <grave> <dead_diaeresis> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+<Multi_key> <grave> <quotedbl> <Greek_iota> : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+<dead_tilde> <Greek_iota> : "ῖ" U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+<Multi_key> <asciitilde> <Greek_iota> : "ῖ" U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+<dead_tilde> <Greek_iotadieresis> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+<Multi_key> <asciitilde> <Greek_iotadieresis> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+<dead_tilde> <dead_diaeresis> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+<dead_tilde> <Multi_key> <quotedbl> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_diaeresis> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+<Multi_key> <asciitilde> <quotedbl> <Greek_iota> : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+<dead_breve> <Greek_IOTA> : "Ῐ" U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY
+<Multi_key> <U> <Greek_IOTA> : "Ῐ" U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY
+<Multi_key> <b> <Greek_IOTA> : "Ῐ" U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY
+<dead_macron> <Greek_IOTA> : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
+<Multi_key> <macron> <Greek_IOTA> : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
+<Multi_key> <underscore> <Greek_IOTA> : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
+<dead_grave> <Greek_IOTA> : "Ὶ" U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA
+<Multi_key> <grave> <Greek_IOTA> : "Ὶ" U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA
+<Multi_key> <U1FFE> <dead_grave> : "῝" U1FDD # GREEK DASIA AND VARIA
+<Multi_key> <U1FFE> <grave> : "῝" U1FDD # GREEK DASIA AND VARIA
+<Multi_key> <U1FFE> <dead_acute> : "῞" U1FDE # GREEK DASIA AND OXIA
+<Multi_key> <U1FFE> <acute> : "῞" U1FDE # GREEK DASIA AND OXIA
+<Multi_key> <U1FFE> <apostrophe> : "῞" U1FDE # GREEK DASIA AND OXIA
+<Multi_key> <U1FFE> <dead_tilde> : "῟" U1FDF # GREEK DASIA AND PERISPOMENI
+<Multi_key> <U1FFE> <asciitilde> : "῟" U1FDF # GREEK DASIA AND PERISPOMENI
+<dead_breve> <Greek_upsilon> : "ῠ" U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY
+<Multi_key> <U> <Greek_upsilon> : "ῠ" U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY
+<Multi_key> <b> <Greek_upsilon> : "ῠ" U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY
+<dead_macron> <Greek_upsilon> : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
+<Multi_key> <macron> <Greek_upsilon> : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
+<Multi_key> <underscore> <Greek_upsilon> : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
+<dead_grave> <Greek_upsilondieresis> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+<Multi_key> <grave> <Greek_upsilondieresis> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+<dead_grave> <dead_diaeresis> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+<dead_grave> <Multi_key> <quotedbl> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+<Multi_key> <grave> <dead_diaeresis> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+<Multi_key> <grave> <quotedbl> <Greek_upsilon> : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+<dead_psili> <Greek_rho> : "ῤ" U1FE4 # GREEK SMALL LETTER RHO WITH PSILI
+<Multi_key> <parenright> <Greek_rho> : "ῤ" U1FE4 # GREEK SMALL LETTER RHO WITH PSILI
+<dead_dasia> <Greek_rho> : "ῥ" U1FE5 # GREEK SMALL LETTER RHO WITH DASIA
+<Multi_key> <parenleft> <Greek_rho> : "ῥ" U1FE5 # GREEK SMALL LETTER RHO WITH DASIA
+<dead_tilde> <Greek_upsilon> : "ῦ" U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+<Multi_key> <asciitilde> <Greek_upsilon> : "ῦ" U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+<dead_tilde> <Greek_upsilondieresis> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+<Multi_key> <asciitilde> <Greek_upsilondieresis> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+<dead_tilde> <dead_diaeresis> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+<dead_tilde> <Multi_key> <quotedbl> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+<Multi_key> <asciitilde> <dead_diaeresis> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+<Multi_key> <asciitilde> <quotedbl> <Greek_upsilon> : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+<dead_breve> <Greek_UPSILON> : "Ῠ" U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+<Multi_key> <U> <Greek_UPSILON> : "Ῠ" U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+<Multi_key> <b> <Greek_UPSILON> : "Ῠ" U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+<dead_macron> <Greek_UPSILON> : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
+<Multi_key> <macron> <Greek_UPSILON> : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
+<Multi_key> <underscore> <Greek_UPSILON> : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
+<dead_grave> <Greek_UPSILON> : "Ὺ" U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA
+<Multi_key> <grave> <Greek_UPSILON> : "Ὺ" U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA
+<dead_dasia> <Greek_RHO> : "Ῥ" U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA
+<Multi_key> <parenleft> <Greek_RHO> : "Ῥ" U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA
+<Multi_key> <diaeresis> <dead_grave> : "῭" U1FED # GREEK DIALYTIKA AND VARIA
+<Multi_key> <diaeresis> <grave> : "῭" U1FED # GREEK DIALYTIKA AND VARIA
+<dead_iota> <U1F7C> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1F7C> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+<dead_iota> <dead_grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <grave> <Greek_omega> : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+<dead_iota> <Greek_omega> : "ῳ" U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <Greek_omega> : "ῳ" U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+<dead_iota> <Greek_omegaaccent> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <Greek_omegaaccent> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+<dead_iota> <dead_acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <apostrophe> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <acute> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <apostrophe> <Greek_omega> : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+<dead_tilde> <Greek_omega> : "ῶ" U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+<Multi_key> <asciitilde> <Greek_omega> : "ῶ" U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+<dead_iota> <U1FF6> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <U1FF6> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <dead_tilde> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+<dead_iota> <Multi_key> <asciitilde> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <dead_tilde> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+<Multi_key> <Greek_iota> <asciitilde> <Greek_omega> : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+<dead_grave> <Greek_OMICRON> : "Ὸ" U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA
+<Multi_key> <grave> <Greek_OMICRON> : "Ὸ" U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA
+<dead_grave> <Greek_OMEGA> : "Ὼ" U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA
+<Multi_key> <grave> <Greek_OMEGA> : "Ὼ" U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA
+<dead_iota> <Greek_OMEGA> : "ῼ" U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+<Multi_key> <Greek_iota> <Greek_OMEGA> : "ῼ" U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+<dead_circumflex> <0> : "⁰" U2070 # SUPERSCRIPT ZERO
+<Multi_key> <asciicircum> <0> : "⁰" U2070 # SUPERSCRIPT ZERO
+<dead_circumflex> <KP_0> : "⁰" U2070 # SUPERSCRIPT ZERO
+<Multi_key> <asciicircum> <KP_0> : "⁰" U2070 # SUPERSCRIPT ZERO
+<dead_circumflex> <Multi_key> <underscore> <i> : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I
+<Multi_key> <asciicircum> <underscore> <i> : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I
+<dead_circumflex> <Multi_key> <underbar> <i> : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I
+<Multi_key> <asciicircum> <underbar> <i> : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I
+<dead_circumflex> <4> : "⁴" U2074 # SUPERSCRIPT FOUR
+<Multi_key> <asciicircum> <4> : "⁴" U2074 # SUPERSCRIPT FOUR
+<dead_circumflex> <KP_4> : "⁴" U2074 # SUPERSCRIPT FOUR
+<Multi_key> <asciicircum> <KP_4> : "⁴" U2074 # SUPERSCRIPT FOUR
+<dead_circumflex> <5> : "⁵" U2075 # SUPERSCRIPT FIVE
+<Multi_key> <asciicircum> <5> : "⁵" U2075 # SUPERSCRIPT FIVE
+<dead_circumflex> <KP_5> : "⁵" U2075 # SUPERSCRIPT FIVE
+<Multi_key> <asciicircum> <KP_5> : "⁵" U2075 # SUPERSCRIPT FIVE
+<dead_circumflex> <6> : "⁶" U2076 # SUPERSCRIPT SIX
+<Multi_key> <asciicircum> <6> : "⁶" U2076 # SUPERSCRIPT SIX
+<dead_circumflex> <KP_6> : "⁶" U2076 # SUPERSCRIPT SIX
+<Multi_key> <asciicircum> <KP_6> : "⁶" U2076 # SUPERSCRIPT SIX
+<dead_circumflex> <7> : "⁷" U2077 # SUPERSCRIPT SEVEN
+<Multi_key> <asciicircum> <7> : "⁷" U2077 # SUPERSCRIPT SEVEN
+<dead_circumflex> <KP_7> : "⁷" U2077 # SUPERSCRIPT SEVEN
+<Multi_key> <asciicircum> <KP_7> : "⁷" U2077 # SUPERSCRIPT SEVEN
+<dead_circumflex> <8> : "⁸" U2078 # SUPERSCRIPT EIGHT
+<Multi_key> <asciicircum> <8> : "⁸" U2078 # SUPERSCRIPT EIGHT
+<dead_circumflex> <KP_8> : "⁸" U2078 # SUPERSCRIPT EIGHT
+<Multi_key> <asciicircum> <KP_8> : "⁸" U2078 # SUPERSCRIPT EIGHT
+<dead_circumflex> <9> : "⁹" U2079 # SUPERSCRIPT NINE
+<Multi_key> <asciicircum> <9> : "⁹" U2079 # SUPERSCRIPT NINE
+<dead_circumflex> <KP_9> : "⁹" U2079 # SUPERSCRIPT NINE
+<Multi_key> <asciicircum> <KP_9> : "⁹" U2079 # SUPERSCRIPT NINE
+<dead_circumflex> <plus> : "⁺" U207A # SUPERSCRIPT PLUS SIGN
+<Multi_key> <asciicircum> <plus> : "⁺" U207A # SUPERSCRIPT PLUS SIGN
+<dead_circumflex> <KP_Add> : "⁺" U207A # SUPERSCRIPT PLUS SIGN
+<Multi_key> <asciicircum> <KP_Add> : "⁺" U207A # SUPERSCRIPT PLUS SIGN
+<dead_circumflex> <U2212> : "⁻" U207B # SUPERSCRIPT MINUS
+<Multi_key> <asciicircum> <U2212> : "⁻" U207B # SUPERSCRIPT MINUS
+<dead_circumflex> <equal> : "⁼" U207C # SUPERSCRIPT EQUALS SIGN
+<Multi_key> <asciicircum> <equal> : "⁼" U207C # SUPERSCRIPT EQUALS SIGN
+<dead_circumflex> <KP_Equal> : "⁼" U207C # SUPERSCRIPT EQUALS SIGN
+<Multi_key> <asciicircum> <KP_Equal> : "⁼" U207C # SUPERSCRIPT EQUALS SIGN
+<dead_circumflex> <parenleft> : "⁽" U207D # SUPERSCRIPT LEFT PARENTHESIS
+<Multi_key> <asciicircum> <parenleft> : "⁽" U207D # SUPERSCRIPT LEFT PARENTHESIS
+<dead_circumflex> <parenright> : "⁾" U207E # SUPERSCRIPT RIGHT PARENTHESIS
+<Multi_key> <asciicircum> <parenright> : "⁾" U207E # SUPERSCRIPT RIGHT PARENTHESIS
+<dead_circumflex> <Multi_key> <underscore> <n> : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N
+<Multi_key> <asciicircum> <underscore> <n> : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N
+<dead_circumflex> <Multi_key> <underbar> <n> : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N
+<Multi_key> <asciicircum> <underbar> <n> : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N
+<Multi_key> <underscore> <0> : "₀" U2080 # SUBSCRIPT ZERO
+<Multi_key> <underscore> <KP_0> : "₀" U2080 # SUBSCRIPT ZERO
+<Multi_key> <underbar> <0> : "₀" U2080 # SUBSCRIPT ZERO
+<Multi_key> <underbar> <KP_0> : "₀" U2080 # SUBSCRIPT ZERO
+<Multi_key> <underscore> <1> : "₁" U2081 # SUBSCRIPT ONE
+<Multi_key> <underscore> <KP_1> : "₁" U2081 # SUBSCRIPT ONE
+<Multi_key> <underbar> <1> : "₁" U2081 # SUBSCRIPT ONE
+<Multi_key> <underbar> <KP_1> : "₁" U2081 # SUBSCRIPT ONE
+<Multi_key> <underscore> <2> : "₂" U2082 # SUBSCRIPT TWO
+<Multi_key> <underscore> <KP_Space> : "₂" U2082 # SUBSCRIPT TWO
+<Multi_key> <underscore> <KP_2> : "₂" U2082 # SUBSCRIPT TWO
+<Multi_key> <underbar> <2> : "₂" U2082 # SUBSCRIPT TWO
+<Multi_key> <underbar> <KP_Space> : "₂" U2082 # SUBSCRIPT TWO
+<Multi_key> <underbar> <KP_2> : "₂" U2082 # SUBSCRIPT TWO
+<Multi_key> <underscore> <3> : "₃" U2083 # SUBSCRIPT THREE
+<Multi_key> <underscore> <KP_3> : "₃" U2083 # SUBSCRIPT THREE
+<Multi_key> <underbar> <3> : "₃" U2083 # SUBSCRIPT THREE
+<Multi_key> <underbar> <KP_3> : "₃" U2083 # SUBSCRIPT THREE
+<Multi_key> <underscore> <4> : "₄" U2084 # SUBSCRIPT FOUR
+<Multi_key> <underscore> <KP_4> : "₄" U2084 # SUBSCRIPT FOUR
+<Multi_key> <underbar> <4> : "₄" U2084 # SUBSCRIPT FOUR
+<Multi_key> <underbar> <KP_4> : "₄" U2084 # SUBSCRIPT FOUR
+<Multi_key> <underscore> <5> : "₅" U2085 # SUBSCRIPT FIVE
+<Multi_key> <underscore> <KP_5> : "₅" U2085 # SUBSCRIPT FIVE
+<Multi_key> <underbar> <5> : "₅" U2085 # SUBSCRIPT FIVE
+<Multi_key> <underbar> <KP_5> : "₅" U2085 # SUBSCRIPT FIVE
+<Multi_key> <underscore> <6> : "₆" U2086 # SUBSCRIPT SIX
+<Multi_key> <underscore> <KP_6> : "₆" U2086 # SUBSCRIPT SIX
+<Multi_key> <underbar> <6> : "₆" U2086 # SUBSCRIPT SIX
+<Multi_key> <underbar> <KP_6> : "₆" U2086 # SUBSCRIPT SIX
+<Multi_key> <underscore> <7> : "₇" U2087 # SUBSCRIPT SEVEN
+<Multi_key> <underscore> <KP_7> : "₇" U2087 # SUBSCRIPT SEVEN
+<Multi_key> <underbar> <7> : "₇" U2087 # SUBSCRIPT SEVEN
+<Multi_key> <underbar> <KP_7> : "₇" U2087 # SUBSCRIPT SEVEN
+<Multi_key> <underscore> <8> : "₈" U2088 # SUBSCRIPT EIGHT
+<Multi_key> <underscore> <KP_8> : "₈" U2088 # SUBSCRIPT EIGHT
+<Multi_key> <underbar> <8> : "₈" U2088 # SUBSCRIPT EIGHT
+<Multi_key> <underbar> <KP_8> : "₈" U2088 # SUBSCRIPT EIGHT
+<Multi_key> <underscore> <9> : "₉" U2089 # SUBSCRIPT NINE
+<Multi_key> <underscore> <KP_9> : "₉" U2089 # SUBSCRIPT NINE
+<Multi_key> <underbar> <9> : "₉" U2089 # SUBSCRIPT NINE
+<Multi_key> <underbar> <KP_9> : "₉" U2089 # SUBSCRIPT NINE
+<Multi_key> <underscore> <plus> : "₊" U208A # SUBSCRIPT PLUS SIGN
+<Multi_key> <underscore> <KP_Add> : "₊" U208A # SUBSCRIPT PLUS SIGN
+<Multi_key> <underbar> <plus> : "₊" U208A # SUBSCRIPT PLUS SIGN
+<Multi_key> <underbar> <KP_Add> : "₊" U208A # SUBSCRIPT PLUS SIGN
+<Multi_key> <underscore> <U2212> : "₋" U208B # SUBSCRIPT MINUS
+<Multi_key> <underbar> <U2212> : "₋" U208B # SUBSCRIPT MINUS
+<Multi_key> <underscore> <equal> : "₌" U208C # SUBSCRIPT EQUALS SIGN
+<Multi_key> <underscore> <KP_Equal> : "₌" U208C # SUBSCRIPT EQUALS SIGN
+<Multi_key> <underbar> <equal> : "₌" U208C # SUBSCRIPT EQUALS SIGN
+<Multi_key> <underbar> <KP_Equal> : "₌" U208C # SUBSCRIPT EQUALS SIGN
+<Multi_key> <underscore> <parenleft> : "₍" U208D # SUBSCRIPT LEFT PARENTHESIS
+<Multi_key> <underbar> <parenleft> : "₍" U208D # SUBSCRIPT LEFT PARENTHESIS
+<Multi_key> <underscore> <parenright> : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS
+<Multi_key> <underbar> <parenright> : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS
+<dead_circumflex> <Multi_key> <S> <M> : "℠" U2120 # SERVICE MARK
+<Multi_key> <S> <M> : "℠" U2120 # SERVICE MARK
+<dead_circumflex> <Multi_key> <s> <M> : "℠" U2120 # SERVICE MARK
+<Multi_key> <s> <M> : "℠" U2120 # SERVICE MARK
+<dead_circumflex> <Multi_key> <S> <m> : "℠" U2120 # SERVICE MARK
+<Multi_key> <S> <m> : "℠" U2120 # SERVICE MARK
+<dead_circumflex> <Multi_key> <s> <m> : "℠" U2120 # SERVICE MARK
+<Multi_key> <s> <m> : "℠" U2120 # SERVICE MARK
+<dead_circumflex> <Multi_key> <T> <M> : "™" U2122 # TRADE MARK SIGN
+<Multi_key> <T> <M> : "™" U2122 # TRADE MARK SIGN
+<dead_circumflex> <Multi_key> <t> <M> : "™" U2122 # TRADE MARK SIGN
+<Multi_key> <t> <M> : "™" U2122 # TRADE MARK SIGN
+<dead_circumflex> <Multi_key> <T> <m> : "™" U2122 # TRADE MARK SIGN
+<Multi_key> <T> <m> : "™" U2122 # TRADE MARK SIGN
+<dead_circumflex> <Multi_key> <t> <m> : "™" U2122 # TRADE MARK SIGN
+<Multi_key> <t> <m> : "™" U2122 # TRADE MARK SIGN
+<Multi_key> <1> <7> : "⅐" U2150 # VULGAR FRACTION ONE SEVENTH
+<Multi_key> <1> <9> : "⅑" U2151 # VULGAR FRACTION ONE NINTH
+<Multi_key> <1> <1> <0> : "⅒" U2152 # VULGAR FRACTION ONE TENTH
+<Multi_key> <1> <3> : "⅓" U2153 # VULGAR FRACTION ONE THIRD
+<Multi_key> <2> <3> : "⅔" U2154 # VULGAR FRACTION TWO THIRDS
+<Multi_key> <1> <5> : "⅕" U2155 # VULGAR FRACTION ONE FIFTH
+<Multi_key> <2> <5> : "⅖" U2156 # VULGAR FRACTION TWO FIFTHS
+<Multi_key> <3> <5> : "⅗" U2157 # VULGAR FRACTION THREE FIFTHS
+<Multi_key> <4> <5> : "⅘" U2158 # VULGAR FRACTION FOUR FIFTHS
+<Multi_key> <1> <6> : "⅙" U2159 # VULGAR FRACTION ONE SIXTH
+<Multi_key> <5> <6> : "⅚" U215A # VULGAR FRACTION FIVE SIXTHS
+<Multi_key> <1> <8> : "⅛" U215B # VULGAR FRACTION ONE EIGHTH
+<Multi_key> <3> <8> : "⅜" U215C # VULGAR FRACTION THREE EIGHTHS
+<Multi_key> <5> <8> : "⅝" U215D # VULGAR FRACTION FIVE EIGHTHS
+<Multi_key> <7> <8> : "⅞" U215E # VULGAR FRACTION SEVEN EIGHTHS
+<Multi_key> <0> <3> : "↉" U2189 # VULGAR FRACTION ZERO THIRDS
+<Multi_key> <slash> <leftarrow> : "↚" U219A # LEFTWARDS ARROW WITH STROKE
+<Multi_key> <KP_Divide> <leftarrow> : "↚" U219A # LEFTWARDS ARROW WITH STROKE
+<Multi_key> <slash> <rightarrow> : "↛" U219B # RIGHTWARDS ARROW WITH STROKE
+<Multi_key> <KP_Divide> <rightarrow> : "↛" U219B # RIGHTWARDS ARROW WITH STROKE
+<Multi_key> <slash> <U2194> : "↮" U21AE # LEFT RIGHT ARROW WITH STROKE
+<Multi_key> <KP_Divide> <U2194> : "↮" U21AE # LEFT RIGHT ARROW WITH STROKE
+<Multi_key> <less> <minus> : "←" U2190 # LEFTWARDS ARROW
+<Multi_key> <minus> <greater> : "→" U2192 # RIGHTWARDS ARROW
+<Multi_key> <U2203> <U0338> : "∄" U2204 # THERE DOES NOT EXIST
+<Multi_key> <braceleft> <braceright> : "∅" U2205 # EMPTY SET
+<Multi_key> <U2208> <U0338> : "∉" U2209 # NOT AN ELEMENT OF
+<Multi_key> <U220B> <U0338> : "∌" U220C # DOES NOT CONTAIN AS MEMBER
+<Multi_key> <U2223> <U0338> : "∤" U2224 # DOES NOT DIVIDE
+<Multi_key> <U2225> <U0338> : "∦" U2226 # NOT PARALLEL TO
+<Multi_key> <U223C> <U0338> : "≁" U2241 # NOT TILDE
+<Multi_key> <U2243> <U0338> : "≄" U2244 # NOT ASYMPTOTICALLY EQUAL TO
+<Multi_key> <approximate> <U0338> : "≇" U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+<Multi_key> <U2248> <U0338> : "≉" U2249 # NOT ALMOST EQUAL TO
+<Multi_key> <slash> <equal> : "≠" U2260 # NOT EQUAL TO
+<Multi_key> <equal> <slash> : "≠" U2260 # NOT EQUAL TO
+<Multi_key> <equal> <U0338> : "≠" U2260 # NOT EQUAL TO
+<Multi_key> <KP_Equal> <U0338> : "≠" U2260 # NOT EQUAL TO
+<Multi_key> <identical> <U0338> : "≢" U2262 # NOT IDENTICAL TO
+<Multi_key> <less> <equal> : "≤" U2264 # LESS-THAN OR EQUAL TO
+<Multi_key> <greater> <equal> : "≥" U2265 # GREATER-THAN OR EQUAL TO
+<Multi_key> <U224D> <U0338> : "≭" U226D # NOT EQUIVALENT TO
+<Multi_key> <less> <U0338> : "≮" U226E # NOT LESS-THAN
+<Multi_key> <leftcaret> <U0338> : "≮" U226E # NOT LESS-THAN
+<Multi_key> <greater> <U0338> : "≯" U226F # NOT GREATER-THAN
+<Multi_key> <rightcaret> <U0338> : "≯" U226F # NOT GREATER-THAN
+<Multi_key> <lessthanequal> <U0338> : "≰" U2270 # NEITHER LESS-THAN NOR EQUAL TO
+<Multi_key> <greaterthanequal> <U0338> : "≱" U2271 # NEITHER GREATER-THAN NOR EQUAL TO
+<Multi_key> <U2272> <U0338> : "≴" U2274 # NEITHER LESS-THAN NOR EQUIVALENT TO
+<Multi_key> <U2273> <U0338> : "≵" U2275 # NEITHER GREATER-THAN NOR EQUIVALENT TO
+<Multi_key> <U2276> <U0338> : "≸" U2278 # NEITHER LESS-THAN NOR GREATER-THAN
+<Multi_key> <U2277> <U0338> : "≹" U2279 # NEITHER GREATER-THAN NOR LESS-THAN
+<Multi_key> <U227A> <U0338> : "⊀" U2280 # DOES NOT PRECEDE
+<Multi_key> <U227B> <U0338> : "⊁" U2281 # DOES NOT SUCCEED
+<Multi_key> <includedin> <U0338> : "⊄" U2284 # NOT A SUBSET OF
+<Multi_key> <leftshoe> <U0338> : "⊄" U2284 # NOT A SUBSET OF
+<Multi_key> <includes> <U0338> : "⊅" U2285 # NOT A SUPERSET OF
+<Multi_key> <rightshoe> <U0338> : "⊅" U2285 # NOT A SUPERSET OF
+<Multi_key> <U2286> <U0338> : "⊈" U2288 # NEITHER A SUBSET OF NOR EQUAL TO
+<Multi_key> <U2287> <U0338> : "⊉" U2289 # NEITHER A SUPERSET OF NOR EQUAL TO
+<Multi_key> <righttack> <U0338> : "⊬" U22AC # DOES NOT PROVE
+<Multi_key> <U22A8> <U0338> : "⊭" U22AD # NOT TRUE
+<Multi_key> <U22A9> <U0338> : "⊮" U22AE # DOES NOT FORCE
+<Multi_key> <U22AB> <U0338> : "⊯" U22AF # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+<Multi_key> <U227C> <U0338> : "⋠" U22E0 # DOES NOT PRECEDE OR EQUAL
+<Multi_key> <U227D> <U0338> : "⋡" U22E1 # DOES NOT SUCCEED OR EQUAL
+<Multi_key> <U2291> <U0338> : "⋢" U22E2 # NOT SQUARE IMAGE OF OR EQUAL TO
+<Multi_key> <U2292> <U0338> : "⋣" U22E3 # NOT SQUARE ORIGINAL OF OR EQUAL TO
+<Multi_key> <U22B2> <U0338> : "⋪" U22EA # NOT NORMAL SUBGROUP OF
+<Multi_key> <U22B3> <U0338> : "⋫" U22EB # DOES NOT CONTAIN AS NORMAL SUBGROUP
+<Multi_key> <U22B4> <U0338> : "⋬" U22EC # NOT NORMAL SUBGROUP OF OR EQUAL TO
+<Multi_key> <U22B5> <U0338> : "⋭" U22ED # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+<Multi_key> <d> <i> : "⌀" U2300 # DIAMETER SIGN
+<Multi_key> <parenleft> <1> <parenright> : "①" U2460 # CIRCLED DIGIT ONE
+<Multi_key> <parenleft> <KP_1> <parenright> : "①" U2460 # CIRCLED DIGIT ONE
+<Multi_key> <parenleft> <2> <parenright> : "②" U2461 # CIRCLED DIGIT TWO
+<Multi_key> <parenleft> <KP_Space> <parenright> : "②" U2461 # CIRCLED DIGIT TWO
+<Multi_key> <parenleft> <KP_2> <parenright> : "②" U2461 # CIRCLED DIGIT TWO
+<Multi_key> <parenleft> <3> <parenright> : "③" U2462 # CIRCLED DIGIT THREE
+<Multi_key> <parenleft> <KP_3> <parenright> : "③" U2462 # CIRCLED DIGIT THREE
+<Multi_key> <parenleft> <4> <parenright> : "④" U2463 # CIRCLED DIGIT FOUR
+<Multi_key> <parenleft> <KP_4> <parenright> : "④" U2463 # CIRCLED DIGIT FOUR
+<Multi_key> <parenleft> <5> <parenright> : "⑤" U2464 # CIRCLED DIGIT FIVE
+<Multi_key> <parenleft> <KP_5> <parenright> : "⑤" U2464 # CIRCLED DIGIT FIVE
+<Multi_key> <parenleft> <6> <parenright> : "⑥" U2465 # CIRCLED DIGIT SIX
+<Multi_key> <parenleft> <KP_6> <parenright> : "⑥" U2465 # CIRCLED DIGIT SIX
+<Multi_key> <parenleft> <7> <parenright> : "⑦" U2466 # CIRCLED DIGIT SEVEN
+<Multi_key> <parenleft> <KP_7> <parenright> : "⑦" U2466 # CIRCLED DIGIT SEVEN
+<Multi_key> <parenleft> <8> <parenright> : "⑧" U2467 # CIRCLED DIGIT EIGHT
+<Multi_key> <parenleft> <KP_8> <parenright> : "⑧" U2467 # CIRCLED DIGIT EIGHT
+<Multi_key> <parenleft> <9> <parenright> : "⑨" U2468 # CIRCLED DIGIT NINE
+<Multi_key> <parenleft> <KP_9> <parenright> : "⑨" U2468 # CIRCLED DIGIT NINE
+<Multi_key> <parenleft> <1> <0> <parenright> : "⑩" U2469 # CIRCLED NUMBER TEN
+<Multi_key> <parenleft> <1> <KP_0> <parenright> : "⑩" U2469 # CIRCLED NUMBER TEN
+<Multi_key> <parenleft> <KP_1> <0> <parenright> : "⑩" U2469 # CIRCLED NUMBER TEN
+<Multi_key> <parenleft> <KP_1> <KP_0> <parenright> : "⑩" U2469 # CIRCLED NUMBER TEN
+<Multi_key> <parenleft> <1> <1> <parenright> : "⑪" U246A # CIRCLED NUMBER ELEVEN
+<Multi_key> <parenleft> <1> <KP_1> <parenright> : "⑪" U246A # CIRCLED NUMBER ELEVEN
+<Multi_key> <parenleft> <KP_1> <1> <parenright> : "⑪" U246A # CIRCLED NUMBER ELEVEN
+<Multi_key> <parenleft> <KP_1> <KP_1> <parenright> : "⑪" U246A # CIRCLED NUMBER ELEVEN
+<Multi_key> <parenleft> <1> <2> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
+<Multi_key> <parenleft> <1> <KP_Space> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
+<Multi_key> <parenleft> <1> <KP_2> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
+<Multi_key> <parenleft> <KP_1> <2> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
+<Multi_key> <parenleft> <KP_1> <KP_Space> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
+<Multi_key> <parenleft> <KP_1> <KP_2> <parenright> : "⑫" U246B # CIRCLED NUMBER TWELVE
+<Multi_key> <parenleft> <1> <3> <parenright> : "⑬" U246C # CIRCLED NUMBER THIRTEEN
+<Multi_key> <parenleft> <1> <KP_3> <parenright> : "⑬" U246C # CIRCLED NUMBER THIRTEEN
+<Multi_key> <parenleft> <KP_1> <3> <parenright> : "⑬" U246C # CIRCLED NUMBER THIRTEEN
+<Multi_key> <parenleft> <KP_1> <KP_3> <parenright> : "⑬" U246C # CIRCLED NUMBER THIRTEEN
+<Multi_key> <parenleft> <1> <4> <parenright> : "⑭" U246D # CIRCLED NUMBER FOURTEEN
+<Multi_key> <parenleft> <1> <KP_4> <parenright> : "⑭" U246D # CIRCLED NUMBER FOURTEEN
+<Multi_key> <parenleft> <KP_1> <4> <parenright> : "⑭" U246D # CIRCLED NUMBER FOURTEEN
+<Multi_key> <parenleft> <KP_1> <KP_4> <parenright> : "⑭" U246D # CIRCLED NUMBER FOURTEEN
+<Multi_key> <parenleft> <1> <5> <parenright> : "⑮" U246E # CIRCLED NUMBER FIFTEEN
+<Multi_key> <parenleft> <1> <KP_5> <parenright> : "⑮" U246E # CIRCLED NUMBER FIFTEEN
+<Multi_key> <parenleft> <KP_1> <5> <parenright> : "⑮" U246E # CIRCLED NUMBER FIFTEEN
+<Multi_key> <parenleft> <KP_1> <KP_5> <parenright> : "⑮" U246E # CIRCLED NUMBER FIFTEEN
+<Multi_key> <parenleft> <1> <6> <parenright> : "⑯" U246F # CIRCLED NUMBER SIXTEEN
+<Multi_key> <parenleft> <1> <KP_6> <parenright> : "⑯" U246F # CIRCLED NUMBER SIXTEEN
+<Multi_key> <parenleft> <KP_1> <6> <parenright> : "⑯" U246F # CIRCLED NUMBER SIXTEEN
+<Multi_key> <parenleft> <KP_1> <KP_6> <parenright> : "⑯" U246F # CIRCLED NUMBER SIXTEEN
+<Multi_key> <parenleft> <1> <7> <parenright> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN
+<Multi_key> <parenleft> <1> <KP_7> <parenright> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN
+<Multi_key> <parenleft> <KP_1> <7> <parenright> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN
+<Multi_key> <parenleft> <KP_1> <KP_7> <parenright> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN
+<Multi_key> <parenleft> <1> <8> <parenright> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN
+<Multi_key> <parenleft> <1> <KP_8> <parenright> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN
+<Multi_key> <parenleft> <KP_1> <8> <parenright> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN
+<Multi_key> <parenleft> <KP_1> <KP_8> <parenright> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN
+<Multi_key> <parenleft> <1> <9> <parenright> : "⑲" U2472 # CIRCLED NUMBER NINETEEN
+<Multi_key> <parenleft> <1> <KP_9> <parenright> : "⑲" U2472 # CIRCLED NUMBER NINETEEN
+<Multi_key> <parenleft> <KP_1> <9> <parenright> : "⑲" U2472 # CIRCLED NUMBER NINETEEN
+<Multi_key> <parenleft> <KP_1> <KP_9> <parenright> : "⑲" U2472 # CIRCLED NUMBER NINETEEN
+<Multi_key> <parenleft> <2> <0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
+<Multi_key> <parenleft> <2> <KP_0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
+<Multi_key> <parenleft> <KP_Space> <0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
+<Multi_key> <parenleft> <KP_Space> <KP_0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
+<Multi_key> <parenleft> <KP_2> <0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
+<Multi_key> <parenleft> <KP_2> <KP_0> <parenright> : "⑳" U2473 # CIRCLED NUMBER TWENTY
+<Multi_key> <parenleft> <A> <parenright> : "Ⓐ" U24B6 # CIRCLED LATIN CAPITAL LETTER A
+<Multi_key> <parenleft> <B> <parenright> : "Ⓑ" U24B7 # CIRCLED LATIN CAPITAL LETTER B
+<Multi_key> <parenleft> <C> <parenright> : "Ⓒ" U24B8 # CIRCLED LATIN CAPITAL LETTER C
+<Multi_key> <parenleft> <D> <parenright> : "Ⓓ" U24B9 # CIRCLED LATIN CAPITAL LETTER D
+<Multi_key> <parenleft> <E> <parenright> : "Ⓔ" U24BA # CIRCLED LATIN CAPITAL LETTER E
+<Multi_key> <parenleft> <F> <parenright> : "Ⓕ" U24BB # CIRCLED LATIN CAPITAL LETTER F
+<Multi_key> <parenleft> <G> <parenright> : "Ⓖ" U24BC # CIRCLED LATIN CAPITAL LETTER G
+<Multi_key> <parenleft> <H> <parenright> : "Ⓗ" U24BD # CIRCLED LATIN CAPITAL LETTER H
+<Multi_key> <parenleft> <I> <parenright> : "Ⓘ" U24BE # CIRCLED LATIN CAPITAL LETTER I
+<Multi_key> <parenleft> <J> <parenright> : "Ⓙ" U24BF # CIRCLED LATIN CAPITAL LETTER J
+<Multi_key> <parenleft> <K> <parenright> : "Ⓚ" U24C0 # CIRCLED LATIN CAPITAL LETTER K
+<Multi_key> <parenleft> <L> <parenright> : "Ⓛ" U24C1 # CIRCLED LATIN CAPITAL LETTER L
+<Multi_key> <parenleft> <M> <parenright> : "Ⓜ" U24C2 # CIRCLED LATIN CAPITAL LETTER M
+<Multi_key> <parenleft> <N> <parenright> : "Ⓝ" U24C3 # CIRCLED LATIN CAPITAL LETTER N
+<Multi_key> <parenleft> <O> <parenright> : "Ⓞ" U24C4 # CIRCLED LATIN CAPITAL LETTER O
+<Multi_key> <parenleft> <P> <parenright> : "Ⓟ" U24C5 # CIRCLED LATIN CAPITAL LETTER P
+<Multi_key> <parenleft> <Q> <parenright> : "Ⓠ" U24C6 # CIRCLED LATIN CAPITAL LETTER Q
+<Multi_key> <parenleft> <R> <parenright> : "Ⓡ" U24C7 # CIRCLED LATIN CAPITAL LETTER R
+<Multi_key> <parenleft> <S> <parenright> : "Ⓢ" U24C8 # CIRCLED LATIN CAPITAL LETTER S
+<Multi_key> <parenleft> <T> <parenright> : "Ⓣ" U24C9 # CIRCLED LATIN CAPITAL LETTER T
+<Multi_key> <parenleft> <U> <parenright> : "Ⓤ" U24CA # CIRCLED LATIN CAPITAL LETTER U
+<Multi_key> <parenleft> <V> <parenright> : "Ⓥ" U24CB # CIRCLED LATIN CAPITAL LETTER V
+<Multi_key> <parenleft> <W> <parenright> : "Ⓦ" U24CC # CIRCLED LATIN CAPITAL LETTER W
+<Multi_key> <parenleft> <X> <parenright> : "Ⓧ" U24CD # CIRCLED LATIN CAPITAL LETTER X
+<Multi_key> <parenleft> <Y> <parenright> : "Ⓨ" U24CE # CIRCLED LATIN CAPITAL LETTER Y
+<Multi_key> <parenleft> <Z> <parenright> : "Ⓩ" U24CF # CIRCLED LATIN CAPITAL LETTER Z
+<Multi_key> <parenleft> <a> <parenright> : "ⓐ" U24D0 # CIRCLED LATIN SMALL LETTER A
+<Multi_key> <parenleft> <b> <parenright> : "ⓑ" U24D1 # CIRCLED LATIN SMALL LETTER B
+<Multi_key> <parenleft> <c> <parenright> : "ⓒ" U24D2 # CIRCLED LATIN SMALL LETTER C
+<Multi_key> <parenleft> <d> <parenright> : "ⓓ" U24D3 # CIRCLED LATIN SMALL LETTER D
+<Multi_key> <parenleft> <e> <parenright> : "ⓔ" U24D4 # CIRCLED LATIN SMALL LETTER E
+<Multi_key> <parenleft> <f> <parenright> : "ⓕ" U24D5 # CIRCLED LATIN SMALL LETTER F
+<Multi_key> <parenleft> <g> <parenright> : "ⓖ" U24D6 # CIRCLED LATIN SMALL LETTER G
+<Multi_key> <parenleft> <h> <parenright> : "ⓗ" U24D7 # CIRCLED LATIN SMALL LETTER H
+<Multi_key> <parenleft> <i> <parenright> : "ⓘ" U24D8 # CIRCLED LATIN SMALL LETTER I
+<Multi_key> <parenleft> <j> <parenright> : "ⓙ" U24D9 # CIRCLED LATIN SMALL LETTER J
+<Multi_key> <parenleft> <k> <parenright> : "ⓚ" U24DA # CIRCLED LATIN SMALL LETTER K
+<Multi_key> <parenleft> <l> <parenright> : "ⓛ" U24DB # CIRCLED LATIN SMALL LETTER L
+<Multi_key> <parenleft> <m> <parenright> : "ⓜ" U24DC # CIRCLED LATIN SMALL LETTER M
+<Multi_key> <parenleft> <n> <parenright> : "ⓝ" U24DD # CIRCLED LATIN SMALL LETTER N
+<Multi_key> <parenleft> <o> <parenright> : "ⓞ" U24DE # CIRCLED LATIN SMALL LETTER O
+<Multi_key> <parenleft> <p> <parenright> : "ⓟ" U24DF # CIRCLED LATIN SMALL LETTER P
+<Multi_key> <parenleft> <q> <parenright> : "ⓠ" U24E0 # CIRCLED LATIN SMALL LETTER Q
+<Multi_key> <parenleft> <r> <parenright> : "ⓡ" U24E1 # CIRCLED LATIN SMALL LETTER R
+<Multi_key> <parenleft> <s> <parenright> : "ⓢ" U24E2 # CIRCLED LATIN SMALL LETTER S
+<Multi_key> <parenleft> <t> <parenright> : "ⓣ" U24E3 # CIRCLED LATIN SMALL LETTER T
+<Multi_key> <parenleft> <u> <parenright> : "ⓤ" U24E4 # CIRCLED LATIN SMALL LETTER U
+<Multi_key> <parenleft> <v> <parenright> : "ⓥ" U24E5 # CIRCLED LATIN SMALL LETTER V
+<Multi_key> <parenleft> <w> <parenright> : "ⓦ" U24E6 # CIRCLED LATIN SMALL LETTER W
+<Multi_key> <parenleft> <x> <parenright> : "ⓧ" U24E7 # CIRCLED LATIN SMALL LETTER X
+<Multi_key> <parenleft> <y> <parenright> : "ⓨ" U24E8 # CIRCLED LATIN SMALL LETTER Y
+<Multi_key> <parenleft> <z> <parenright> : "ⓩ" U24E9 # CIRCLED LATIN SMALL LETTER Z
+<Multi_key> <parenleft> <0> <parenright> : "⓪" U24EA # CIRCLED DIGIT ZERO
+<Multi_key> <parenleft> <KP_0> <parenright> : "⓪" U24EA # CIRCLED DIGIT ZERO
+<dead_belowdot> <plus> : "⨥" U2A25 # PLUS SIGN WITH DOT BELOW
+<dead_belowtilde> <plus> : "⨦" U2A26 # PLUS SIGN WITH TILDE BELOW
+<dead_belowdot> <minus> : "⨪" U2A2A # MINUS SIGN WITH DOT BELOW
+<dead_belowdot> <equal> : "⩦" U2A66 # EQUALS SIGN WITH DOT BELOW
+<dead_diaeresis> <dead_belowdiaeresis> <equal> : "⩷" U2A77 # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+<dead_belowdiaeresis> <dead_diaeresis> <equal> : "⩷" U2A77 # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+<Multi_key> <U2ADD> <U0338> : "⫝̸" U2ADC # FORKING
+<dead_belowring> <bar> : "⫰" U2AF0 # VERTICAL LINE WITH CIRCLE BELOW
+<dead_voiced_sound> <U304B> : "が" U304C # HIRAGANA LETTER GA
+<dead_voiced_sound> <U304D> : "ぎ" U304E # HIRAGANA LETTER GI
+<dead_voiced_sound> <U304F> : "ぐ" U3050 # HIRAGANA LETTER GU
+<dead_voiced_sound> <U3051> : "げ" U3052 # HIRAGANA LETTER GE
+<dead_voiced_sound> <U3053> : "ご" U3054 # HIRAGANA LETTER GO
+<dead_voiced_sound> <U3055> : "ざ" U3056 # HIRAGANA LETTER ZA
+<dead_voiced_sound> <U3057> : "じ" U3058 # HIRAGANA LETTER ZI
+<dead_voiced_sound> <U3059> : "ず" U305A # HIRAGANA LETTER ZU
+<dead_voiced_sound> <U305B> : "ぜ" U305C # HIRAGANA LETTER ZE
+<dead_voiced_sound> <U305D> : "ぞ" U305E # HIRAGANA LETTER ZO
+<dead_voiced_sound> <U305F> : "だ" U3060 # HIRAGANA LETTER DA
+<dead_voiced_sound> <U3061> : "ぢ" U3062 # HIRAGANA LETTER DI
+<dead_voiced_sound> <U3064> : "づ" U3065 # HIRAGANA LETTER DU
+<dead_voiced_sound> <U3066> : "で" U3067 # HIRAGANA LETTER DE
+<dead_voiced_sound> <U3068> : "ど" U3069 # HIRAGANA LETTER DO
+<dead_voiced_sound> <U306F> : "ば" U3070 # HIRAGANA LETTER BA
+<dead_semivoiced_sound> <U306F> : "ぱ" U3071 # HIRAGANA LETTER PA
+<dead_voiced_sound> <U3072> : "び" U3073 # HIRAGANA LETTER BI
+<dead_semivoiced_sound> <U3072> : "ぴ" U3074 # HIRAGANA LETTER PI
+<dead_voiced_sound> <U3075> : "ぶ" U3076 # HIRAGANA LETTER BU
+<dead_semivoiced_sound> <U3075> : "ぷ" U3077 # HIRAGANA LETTER PU
+<dead_voiced_sound> <U3078> : "べ" U3079 # HIRAGANA LETTER BE
+<dead_semivoiced_sound> <U3078> : "ぺ" U307A # HIRAGANA LETTER PE
+<dead_voiced_sound> <U307B> : "ぼ" U307C # HIRAGANA LETTER BO
+<dead_semivoiced_sound> <U307B> : "ぽ" U307D # HIRAGANA LETTER PO
+<dead_voiced_sound> <U3046> : "ゔ" U3094 # HIRAGANA LETTER VU
+<dead_voiced_sound> <U309D> : "ゞ" U309E # HIRAGANA VOICED ITERATION MARK
+<dead_voiced_sound> <kana_KA> : "ガ" U30AC # KATAKANA LETTER GA
+<dead_voiced_sound> <kana_KI> : "ギ" U30AE # KATAKANA LETTER GI
+<dead_voiced_sound> <kana_KU> : "グ" U30B0 # KATAKANA LETTER GU
+<dead_voiced_sound> <kana_KE> : "ゲ" U30B2 # KATAKANA LETTER GE
+<dead_voiced_sound> <kana_KO> : "ゴ" U30B4 # KATAKANA LETTER GO
+<dead_voiced_sound> <kana_SA> : "ザ" U30B6 # KATAKANA LETTER ZA
+<dead_voiced_sound> <kana_SHI> : "ジ" U30B8 # KATAKANA LETTER ZI
+<dead_voiced_sound> <kana_SU> : "ズ" U30BA # KATAKANA LETTER ZU
+<dead_voiced_sound> <kana_SE> : "ゼ" U30BC # KATAKANA LETTER ZE
+<dead_voiced_sound> <kana_SO> : "ゾ" U30BE # KATAKANA LETTER ZO
+<dead_voiced_sound> <kana_TA> : "ダ" U30C0 # KATAKANA LETTER DA
+<dead_voiced_sound> <kana_CHI> : "ヂ" U30C2 # KATAKANA LETTER DI
+<dead_voiced_sound> <kana_TSU> : "ヅ" U30C5 # KATAKANA LETTER DU
+<dead_voiced_sound> <kana_TE> : "デ" U30C7 # KATAKANA LETTER DE
+<dead_voiced_sound> <kana_TO> : "ド" U30C9 # KATAKANA LETTER DO
+<dead_voiced_sound> <kana_HA> : "バ" U30D0 # KATAKANA LETTER BA
+<dead_semivoiced_sound> <kana_HA> : "パ" U30D1 # KATAKANA LETTER PA
+<dead_voiced_sound> <kana_HI> : "ビ" U30D3 # KATAKANA LETTER BI
+<dead_semivoiced_sound> <kana_HI> : "ピ" U30D4 # KATAKANA LETTER PI
+<dead_voiced_sound> <kana_FU> : "ブ" U30D6 # KATAKANA LETTER BU
+<dead_semivoiced_sound> <kana_FU> : "プ" U30D7 # KATAKANA LETTER PU
+<dead_voiced_sound> <kana_HE> : "ベ" U30D9 # KATAKANA LETTER BE
+<dead_semivoiced_sound> <kana_HE> : "ペ" U30DA # KATAKANA LETTER PE
+<dead_voiced_sound> <kana_HO> : "ボ" U30DC # KATAKANA LETTER BO
+<dead_semivoiced_sound> <kana_HO> : "ポ" U30DD # KATAKANA LETTER PO
+<dead_voiced_sound> <kana_U> : "ヴ" U30F4 # KATAKANA LETTER VU
+<dead_voiced_sound> <kana_WA> : "ヷ" U30F7 # KATAKANA LETTER VA
+<dead_voiced_sound> <U30F0> : "ヸ" U30F8 # KATAKANA LETTER VI
+<dead_voiced_sound> <U30F1> : "ヹ" U30F9 # KATAKANA LETTER VE
+<dead_voiced_sound> <kana_WO> : "ヺ" U30FA # KATAKANA LETTER VO
+<dead_voiced_sound> <U30FD> : "ヾ" U30FE # KATAKANA VOICED ITERATION MARK
+<dead_circumflex> <U4E00> : "㆒" U3192 # IDEOGRAPHIC ANNOTATION ONE MARK
+<Multi_key> <asciicircum> <U4E00> : "㆒" U3192 # IDEOGRAPHIC ANNOTATION ONE MARK
+<dead_circumflex> <U4E8C> : "㆓" U3193 # IDEOGRAPHIC ANNOTATION TWO MARK
+<Multi_key> <asciicircum> <U4E8C> : "㆓" U3193 # IDEOGRAPHIC ANNOTATION TWO MARK
+<dead_circumflex> <U4E09> : "㆔" U3194 # IDEOGRAPHIC ANNOTATION THREE MARK
+<Multi_key> <asciicircum> <U4E09> : "㆔" U3194 # IDEOGRAPHIC ANNOTATION THREE MARK
+<dead_circumflex> <U56DB> : "㆕" U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK
+<Multi_key> <asciicircum> <U56DB> : "㆕" U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK
+<dead_circumflex> <U4E0A> : "㆖" U3196 # IDEOGRAPHIC ANNOTATION TOP MARK
+<Multi_key> <asciicircum> <U4E0A> : "㆖" U3196 # IDEOGRAPHIC ANNOTATION TOP MARK
+<dead_circumflex> <U4E2D> : "㆗" U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK
+<Multi_key> <asciicircum> <U4E2D> : "㆗" U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK
+<dead_circumflex> <U4E0B> : "㆘" U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK
+<Multi_key> <asciicircum> <U4E0B> : "㆘" U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK
+<dead_circumflex> <U7532> : "㆙" U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK
+<Multi_key> <asciicircum> <U7532> : "㆙" U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK
+<dead_circumflex> <U4E59> : "㆚" U319A # IDEOGRAPHIC ANNOTATION SECOND MARK
+<Multi_key> <asciicircum> <U4E59> : "㆚" U319A # IDEOGRAPHIC ANNOTATION SECOND MARK
+<dead_circumflex> <U4E19> : "㆛" U319B # IDEOGRAPHIC ANNOTATION THIRD MARK
+<Multi_key> <asciicircum> <U4E19> : "㆛" U319B # IDEOGRAPHIC ANNOTATION THIRD MARK
+<dead_circumflex> <U4E01> : "㆜" U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK
+<Multi_key> <asciicircum> <U4E01> : "㆜" U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK
+<dead_circumflex> <U5929> : "㆝" U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK
+<Multi_key> <asciicircum> <U5929> : "㆝" U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK
+<dead_circumflex> <U5730> : "㆞" U319E # IDEOGRAPHIC ANNOTATION EARTH MARK
+<Multi_key> <asciicircum> <U5730> : "㆞" U319E # IDEOGRAPHIC ANNOTATION EARTH MARK
+<dead_circumflex> <U4EBA> : "㆟" U319F # IDEOGRAPHIC ANNOTATION MAN MARK
+<Multi_key> <asciicircum> <U4EBA> : "㆟" U319F # IDEOGRAPHIC ANNOTATION MAN MARK
+<Multi_key> <parenleft> <2> <1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
+<Multi_key> <parenleft> <2> <KP_1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
+<Multi_key> <parenleft> <KP_Space> <1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
+<Multi_key> <parenleft> <KP_Space> <KP_1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
+<Multi_key> <parenleft> <KP_2> <1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
+<Multi_key> <parenleft> <KP_2> <KP_1> <parenright> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE
+<Multi_key> <parenleft> <2> <2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
+<Multi_key> <parenleft> <2> <KP_Space> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
+<Multi_key> <parenleft> <2> <KP_2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
+<Multi_key> <parenleft> <KP_Space> <2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
+<Multi_key> <parenleft> <KP_Space> <KP_Space> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
+<Multi_key> <parenleft> <KP_Space> <KP_2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
+<Multi_key> <parenleft> <KP_2> <2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
+<Multi_key> <parenleft> <KP_2> <KP_Space> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
+<Multi_key> <parenleft> <KP_2> <KP_2> <parenright> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO
+<Multi_key> <parenleft> <2> <3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
+<Multi_key> <parenleft> <2> <KP_3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
+<Multi_key> <parenleft> <KP_Space> <3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
+<Multi_key> <parenleft> <KP_Space> <KP_3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
+<Multi_key> <parenleft> <KP_2> <3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
+<Multi_key> <parenleft> <KP_2> <KP_3> <parenright> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE
+<Multi_key> <parenleft> <2> <4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
+<Multi_key> <parenleft> <2> <KP_4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
+<Multi_key> <parenleft> <KP_Space> <4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
+<Multi_key> <parenleft> <KP_Space> <KP_4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
+<Multi_key> <parenleft> <KP_2> <4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
+<Multi_key> <parenleft> <KP_2> <KP_4> <parenright> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR
+<Multi_key> <parenleft> <2> <5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
+<Multi_key> <parenleft> <2> <KP_5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
+<Multi_key> <parenleft> <KP_Space> <5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
+<Multi_key> <parenleft> <KP_Space> <KP_5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
+<Multi_key> <parenleft> <KP_2> <5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
+<Multi_key> <parenleft> <KP_2> <KP_5> <parenright> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE
+<Multi_key> <parenleft> <2> <6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
+<Multi_key> <parenleft> <2> <KP_6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
+<Multi_key> <parenleft> <KP_Space> <6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
+<Multi_key> <parenleft> <KP_Space> <KP_6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
+<Multi_key> <parenleft> <KP_2> <6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
+<Multi_key> <parenleft> <KP_2> <KP_6> <parenright> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX
+<Multi_key> <parenleft> <2> <7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
+<Multi_key> <parenleft> <2> <KP_7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
+<Multi_key> <parenleft> <KP_Space> <7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
+<Multi_key> <parenleft> <KP_Space> <KP_7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
+<Multi_key> <parenleft> <KP_2> <7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
+<Multi_key> <parenleft> <KP_2> <KP_7> <parenright> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN
+<Multi_key> <parenleft> <2> <8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
+<Multi_key> <parenleft> <2> <KP_8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
+<Multi_key> <parenleft> <KP_Space> <8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
+<Multi_key> <parenleft> <KP_Space> <KP_8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
+<Multi_key> <parenleft> <KP_2> <8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
+<Multi_key> <parenleft> <KP_2> <KP_8> <parenright> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT
+<Multi_key> <parenleft> <2> <9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
+<Multi_key> <parenleft> <2> <KP_9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
+<Multi_key> <parenleft> <KP_Space> <9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
+<Multi_key> <parenleft> <KP_Space> <KP_9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
+<Multi_key> <parenleft> <KP_2> <9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
+<Multi_key> <parenleft> <KP_2> <KP_9> <parenright> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE
+<Multi_key> <parenleft> <3> <0> <parenright> : "㉚" U325A # CIRCLED NUMBER THIRTY
+<Multi_key> <parenleft> <3> <KP_0> <parenright> : "㉚" U325A # CIRCLED NUMBER THIRTY
+<Multi_key> <parenleft> <KP_3> <0> <parenright> : "㉚" U325A # CIRCLED NUMBER THIRTY
+<Multi_key> <parenleft> <KP_3> <KP_0> <parenright> : "㉚" U325A # CIRCLED NUMBER THIRTY
+<Multi_key> <parenleft> <3> <1> <parenright> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE
+<Multi_key> <parenleft> <3> <KP_1> <parenright> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE
+<Multi_key> <parenleft> <KP_3> <1> <parenright> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE
+<Multi_key> <parenleft> <KP_3> <KP_1> <parenright> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE
+<Multi_key> <parenleft> <3> <2> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
+<Multi_key> <parenleft> <3> <KP_Space> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
+<Multi_key> <parenleft> <3> <KP_2> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
+<Multi_key> <parenleft> <KP_3> <2> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
+<Multi_key> <parenleft> <KP_3> <KP_Space> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
+<Multi_key> <parenleft> <KP_3> <KP_2> <parenright> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO
+<Multi_key> <parenleft> <3> <3> <parenright> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE
+<Multi_key> <parenleft> <3> <KP_3> <parenright> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE
+<Multi_key> <parenleft> <KP_3> <3> <parenright> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE
+<Multi_key> <parenleft> <KP_3> <KP_3> <parenright> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE
+<Multi_key> <parenleft> <3> <4> <parenright> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR
+<Multi_key> <parenleft> <3> <KP_4> <parenright> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR
+<Multi_key> <parenleft> <KP_3> <4> <parenright> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR
+<Multi_key> <parenleft> <KP_3> <KP_4> <parenright> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR
+<Multi_key> <parenleft> <3> <5> <parenright> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE
+<Multi_key> <parenleft> <3> <KP_5> <parenright> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE
+<Multi_key> <parenleft> <KP_3> <5> <parenright> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE
+<Multi_key> <parenleft> <KP_3> <KP_5> <parenright> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE
+<Multi_key> <parenleft> <U1100> <parenright> : "㉠" U3260 # CIRCLED HANGUL KIYEOK
+<Multi_key> <parenleft> <U1102> <parenright> : "㉡" U3261 # CIRCLED HANGUL NIEUN
+<Multi_key> <parenleft> <U1103> <parenright> : "㉢" U3262 # CIRCLED HANGUL TIKEUT
+<Multi_key> <parenleft> <U1105> <parenright> : "㉣" U3263 # CIRCLED HANGUL RIEUL
+<Multi_key> <parenleft> <U1106> <parenright> : "㉤" U3264 # CIRCLED HANGUL MIEUM
+<Multi_key> <parenleft> <U1107> <parenright> : "㉥" U3265 # CIRCLED HANGUL PIEUP
+<Multi_key> <parenleft> <U1109> <parenright> : "㉦" U3266 # CIRCLED HANGUL SIOS
+<Multi_key> <parenleft> <U110B> <parenright> : "㉧" U3267 # CIRCLED HANGUL IEUNG
+<Multi_key> <parenleft> <U110C> <parenright> : "㉨" U3268 # CIRCLED HANGUL CIEUC
+<Multi_key> <parenleft> <U110E> <parenright> : "㉩" U3269 # CIRCLED HANGUL CHIEUCH
+<Multi_key> <parenleft> <U110F> <parenright> : "㉪" U326A # CIRCLED HANGUL KHIEUKH
+<Multi_key> <parenleft> <U1110> <parenright> : "㉫" U326B # CIRCLED HANGUL THIEUTH
+<Multi_key> <parenleft> <U1111> <parenright> : "㉬" U326C # CIRCLED HANGUL PHIEUPH
+<Multi_key> <parenleft> <U1112> <parenright> : "㉭" U326D # CIRCLED HANGUL HIEUH
+<Multi_key> <parenleft> <U1100> <U1161> <parenright> : "㉮" U326E # CIRCLED HANGUL KIYEOK A
+<Multi_key> <parenleft> <U1102> <U1161> <parenright> : "㉯" U326F # CIRCLED HANGUL NIEUN A
+<Multi_key> <parenleft> <U1103> <U1161> <parenright> : "㉰" U3270 # CIRCLED HANGUL TIKEUT A
+<Multi_key> <parenleft> <U1105> <U1161> <parenright> : "㉱" U3271 # CIRCLED HANGUL RIEUL A
+<Multi_key> <parenleft> <U1106> <U1161> <parenright> : "㉲" U3272 # CIRCLED HANGUL MIEUM A
+<Multi_key> <parenleft> <U1107> <U1161> <parenright> : "㉳" U3273 # CIRCLED HANGUL PIEUP A
+<Multi_key> <parenleft> <U1109> <U1161> <parenright> : "㉴" U3274 # CIRCLED HANGUL SIOS A
+<Multi_key> <parenleft> <U110B> <U1161> <parenright> : "㉵" U3275 # CIRCLED HANGUL IEUNG A
+<Multi_key> <parenleft> <U110C> <U1161> <parenright> : "㉶" U3276 # CIRCLED HANGUL CIEUC A
+<Multi_key> <parenleft> <U110E> <U1161> <parenright> : "㉷" U3277 # CIRCLED HANGUL CHIEUCH A
+<Multi_key> <parenleft> <U110F> <U1161> <parenright> : "㉸" U3278 # CIRCLED HANGUL KHIEUKH A
+<Multi_key> <parenleft> <U1110> <U1161> <parenright> : "㉹" U3279 # CIRCLED HANGUL THIEUTH A
+<Multi_key> <parenleft> <U1111> <U1161> <parenright> : "㉺" U327A # CIRCLED HANGUL PHIEUPH A
+<Multi_key> <parenleft> <U1112> <U1161> <parenright> : "㉻" U327B # CIRCLED HANGUL HIEUH A
+<Multi_key> <parenleft> <U4E00> <parenright> : "㊀" U3280 # CIRCLED IDEOGRAPH ONE
+<Multi_key> <parenleft> <U4E8C> <parenright> : "㊁" U3281 # CIRCLED IDEOGRAPH TWO
+<Multi_key> <parenleft> <U4E09> <parenright> : "㊂" U3282 # CIRCLED IDEOGRAPH THREE
+<Multi_key> <parenleft> <U56DB> <parenright> : "㊃" U3283 # CIRCLED IDEOGRAPH FOUR
+<Multi_key> <parenleft> <U4E94> <parenright> : "㊄" U3284 # CIRCLED IDEOGRAPH FIVE
+<Multi_key> <parenleft> <U516D> <parenright> : "㊅" U3285 # CIRCLED IDEOGRAPH SIX
+<Multi_key> <parenleft> <U4E03> <parenright> : "㊆" U3286 # CIRCLED IDEOGRAPH SEVEN
+<Multi_key> <parenleft> <U516B> <parenright> : "㊇" U3287 # CIRCLED IDEOGRAPH EIGHT
+<Multi_key> <parenleft> <U4E5D> <parenright> : "㊈" U3288 # CIRCLED IDEOGRAPH NINE
+<Multi_key> <parenleft> <U5341> <parenright> : "㊉" U3289 # CIRCLED IDEOGRAPH TEN
+<Multi_key> <parenleft> <U6708> <parenright> : "㊊" U328A # CIRCLED IDEOGRAPH MOON
+<Multi_key> <parenleft> <U706B> <parenright> : "㊋" U328B # CIRCLED IDEOGRAPH FIRE
+<Multi_key> <parenleft> <U6C34> <parenright> : "㊌" U328C # CIRCLED IDEOGRAPH WATER
+<Multi_key> <parenleft> <U6728> <parenright> : "㊍" U328D # CIRCLED IDEOGRAPH WOOD
+<Multi_key> <parenleft> <U91D1> <parenright> : "㊎" U328E # CIRCLED IDEOGRAPH METAL
+<Multi_key> <parenleft> <U571F> <parenright> : "㊏" U328F # CIRCLED IDEOGRAPH EARTH
+<Multi_key> <parenleft> <U65E5> <parenright> : "㊐" U3290 # CIRCLED IDEOGRAPH SUN
+<Multi_key> <parenleft> <U682A> <parenright> : "㊑" U3291 # CIRCLED IDEOGRAPH STOCK
+<Multi_key> <parenleft> <U6709> <parenright> : "㊒" U3292 # CIRCLED IDEOGRAPH HAVE
+<Multi_key> <parenleft> <U793E> <parenright> : "㊓" U3293 # CIRCLED IDEOGRAPH SOCIETY
+<Multi_key> <parenleft> <U540D> <parenright> : "㊔" U3294 # CIRCLED IDEOGRAPH NAME
+<Multi_key> <parenleft> <U7279> <parenright> : "㊕" U3295 # CIRCLED IDEOGRAPH SPECIAL
+<Multi_key> <parenleft> <U8CA1> <parenright> : "㊖" U3296 # CIRCLED IDEOGRAPH FINANCIAL
+<Multi_key> <parenleft> <U795D> <parenright> : "㊗" U3297 # CIRCLED IDEOGRAPH CONGRATULATION
+<Multi_key> <parenleft> <U52B4> <parenright> : "㊘" U3298 # CIRCLED IDEOGRAPH LABOR
+<Multi_key> <parenleft> <U79D8> <parenright> : "㊙" U3299 # CIRCLED IDEOGRAPH SECRET
+<Multi_key> <parenleft> <U7537> <parenright> : "㊚" U329A # CIRCLED IDEOGRAPH MALE
+<Multi_key> <parenleft> <U5973> <parenright> : "㊛" U329B # CIRCLED IDEOGRAPH FEMALE
+<Multi_key> <parenleft> <U9069> <parenright> : "㊜" U329C # CIRCLED IDEOGRAPH SUITABLE
+<Multi_key> <parenleft> <U512A> <parenright> : "㊝" U329D # CIRCLED IDEOGRAPH EXCELLENT
+<Multi_key> <parenleft> <U5370> <parenright> : "㊞" U329E # CIRCLED IDEOGRAPH PRINT
+<Multi_key> <parenleft> <U6CE8> <parenright> : "㊟" U329F # CIRCLED IDEOGRAPH ATTENTION
+<Multi_key> <parenleft> <U9805> <parenright> : "㊠" U32A0 # CIRCLED IDEOGRAPH ITEM
+<Multi_key> <parenleft> <U4F11> <parenright> : "㊡" U32A1 # CIRCLED IDEOGRAPH REST
+<Multi_key> <parenleft> <U5199> <parenright> : "㊢" U32A2 # CIRCLED IDEOGRAPH COPY
+<Multi_key> <parenleft> <U6B63> <parenright> : "㊣" U32A3 # CIRCLED IDEOGRAPH CORRECT
+<Multi_key> <parenleft> <U4E0A> <parenright> : "㊤" U32A4 # CIRCLED IDEOGRAPH HIGH
+<Multi_key> <parenleft> <U4E2D> <parenright> : "㊥" U32A5 # CIRCLED IDEOGRAPH CENTRE
+<Multi_key> <parenleft> <U4E0B> <parenright> : "㊦" U32A6 # CIRCLED IDEOGRAPH LOW
+<Multi_key> <parenleft> <U5DE6> <parenright> : "㊧" U32A7 # CIRCLED IDEOGRAPH LEFT
+<Multi_key> <parenleft> <U53F3> <parenright> : "㊨" U32A8 # CIRCLED IDEOGRAPH RIGHT
+<Multi_key> <parenleft> <U533B> <parenright> : "㊩" U32A9 # CIRCLED IDEOGRAPH MEDICINE
+<Multi_key> <parenleft> <U5B97> <parenright> : "㊪" U32AA # CIRCLED IDEOGRAPH RELIGION
+<Multi_key> <parenleft> <U5B66> <parenright> : "㊫" U32AB # CIRCLED IDEOGRAPH STUDY
+<Multi_key> <parenleft> <U76E3> <parenright> : "㊬" U32AC # CIRCLED IDEOGRAPH SUPERVISE
+<Multi_key> <parenleft> <U4F01> <parenright> : "㊭" U32AD # CIRCLED IDEOGRAPH ENTERPRISE
+<Multi_key> <parenleft> <U8CC7> <parenright> : "㊮" U32AE # CIRCLED IDEOGRAPH RESOURCE
+<Multi_key> <parenleft> <U5354> <parenright> : "㊯" U32AF # CIRCLED IDEOGRAPH ALLIANCE
+<Multi_key> <parenleft> <U591C> <parenright> : "㊰" U32B0 # CIRCLED IDEOGRAPH NIGHT
+<Multi_key> <parenleft> <3> <6> <parenright> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX
+<Multi_key> <parenleft> <3> <KP_6> <parenright> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX
+<Multi_key> <parenleft> <KP_3> <6> <parenright> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX
+<Multi_key> <parenleft> <KP_3> <KP_6> <parenright> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX
+<Multi_key> <parenleft> <3> <7> <parenright> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN
+<Multi_key> <parenleft> <3> <KP_7> <parenright> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN
+<Multi_key> <parenleft> <KP_3> <7> <parenright> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN
+<Multi_key> <parenleft> <KP_3> <KP_7> <parenright> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN
+<Multi_key> <parenleft> <3> <8> <parenright> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT
+<Multi_key> <parenleft> <3> <KP_8> <parenright> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT
+<Multi_key> <parenleft> <KP_3> <8> <parenright> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT
+<Multi_key> <parenleft> <KP_3> <KP_8> <parenright> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT
+<Multi_key> <parenleft> <3> <9> <parenright> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE
+<Multi_key> <parenleft> <3> <KP_9> <parenright> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE
+<Multi_key> <parenleft> <KP_3> <9> <parenright> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE
+<Multi_key> <parenleft> <KP_3> <KP_9> <parenright> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE
+<Multi_key> <parenleft> <4> <0> <parenright> : "㊵" U32B5 # CIRCLED NUMBER FORTY
+<Multi_key> <parenleft> <4> <KP_0> <parenright> : "㊵" U32B5 # CIRCLED NUMBER FORTY
+<Multi_key> <parenleft> <KP_4> <0> <parenright> : "㊵" U32B5 # CIRCLED NUMBER FORTY
+<Multi_key> <parenleft> <KP_4> <KP_0> <parenright> : "㊵" U32B5 # CIRCLED NUMBER FORTY
+<Multi_key> <parenleft> <4> <1> <parenright> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE
+<Multi_key> <parenleft> <4> <KP_1> <parenright> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE
+<Multi_key> <parenleft> <KP_4> <1> <parenright> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE
+<Multi_key> <parenleft> <KP_4> <KP_1> <parenright> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE
+<Multi_key> <parenleft> <4> <2> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
+<Multi_key> <parenleft> <4> <KP_Space> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
+<Multi_key> <parenleft> <4> <KP_2> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
+<Multi_key> <parenleft> <KP_4> <2> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
+<Multi_key> <parenleft> <KP_4> <KP_Space> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
+<Multi_key> <parenleft> <KP_4> <KP_2> <parenright> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO
+<Multi_key> <parenleft> <4> <3> <parenright> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE
+<Multi_key> <parenleft> <4> <KP_3> <parenright> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE
+<Multi_key> <parenleft> <KP_4> <3> <parenright> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE
+<Multi_key> <parenleft> <KP_4> <KP_3> <parenright> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE
+<Multi_key> <parenleft> <4> <4> <parenright> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR
+<Multi_key> <parenleft> <4> <KP_4> <parenright> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR
+<Multi_key> <parenleft> <KP_4> <4> <parenright> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR
+<Multi_key> <parenleft> <KP_4> <KP_4> <parenright> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR
+<Multi_key> <parenleft> <4> <5> <parenright> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE
+<Multi_key> <parenleft> <4> <KP_5> <parenright> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE
+<Multi_key> <parenleft> <KP_4> <5> <parenright> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE
+<Multi_key> <parenleft> <KP_4> <KP_5> <parenright> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE
+<Multi_key> <parenleft> <4> <6> <parenright> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX
+<Multi_key> <parenleft> <4> <KP_6> <parenright> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX
+<Multi_key> <parenleft> <KP_4> <6> <parenright> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX
+<Multi_key> <parenleft> <KP_4> <KP_6> <parenright> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX
+<Multi_key> <parenleft> <4> <7> <parenright> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN
+<Multi_key> <parenleft> <4> <KP_7> <parenright> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN
+<Multi_key> <parenleft> <KP_4> <7> <parenright> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN
+<Multi_key> <parenleft> <KP_4> <KP_7> <parenright> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN
+<Multi_key> <parenleft> <4> <8> <parenright> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT
+<Multi_key> <parenleft> <4> <KP_8> <parenright> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT
+<Multi_key> <parenleft> <KP_4> <8> <parenright> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT
+<Multi_key> <parenleft> <KP_4> <KP_8> <parenright> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT
+<Multi_key> <parenleft> <4> <9> <parenright> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE
+<Multi_key> <parenleft> <4> <KP_9> <parenright> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE
+<Multi_key> <parenleft> <KP_4> <9> <parenright> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE
+<Multi_key> <parenleft> <KP_4> <KP_9> <parenright> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE
+<Multi_key> <parenleft> <5> <0> <parenright> : "㊿" U32BF # CIRCLED NUMBER FIFTY
+<Multi_key> <parenleft> <5> <KP_0> <parenright> : "㊿" U32BF # CIRCLED NUMBER FIFTY
+<Multi_key> <parenleft> <KP_5> <0> <parenright> : "㊿" U32BF # CIRCLED NUMBER FIFTY
+<Multi_key> <parenleft> <KP_5> <KP_0> <parenright> : "㊿" U32BF # CIRCLED NUMBER FIFTY
+<Multi_key> <parenleft> <kana_A> <parenright> : "㋐" U32D0 # CIRCLED KATAKANA A
+<Multi_key> <parenleft> <kana_I> <parenright> : "㋑" U32D1 # CIRCLED KATAKANA I
+<Multi_key> <parenleft> <kana_U> <parenright> : "㋒" U32D2 # CIRCLED KATAKANA U
+<Multi_key> <parenleft> <kana_E> <parenright> : "㋓" U32D3 # CIRCLED KATAKANA E
+<Multi_key> <parenleft> <kana_O> <parenright> : "㋔" U32D4 # CIRCLED KATAKANA O
+<Multi_key> <parenleft> <kana_KA> <parenright> : "㋕" U32D5 # CIRCLED KATAKANA KA
+<Multi_key> <parenleft> <kana_KI> <parenright> : "㋖" U32D6 # CIRCLED KATAKANA KI
+<Multi_key> <parenleft> <kana_KU> <parenright> : "㋗" U32D7 # CIRCLED KATAKANA KU
+<Multi_key> <parenleft> <kana_KE> <parenright> : "㋘" U32D8 # CIRCLED KATAKANA KE
+<Multi_key> <parenleft> <kana_KO> <parenright> : "㋙" U32D9 # CIRCLED KATAKANA KO
+<Multi_key> <parenleft> <kana_SA> <parenright> : "㋚" U32DA # CIRCLED KATAKANA SA
+<Multi_key> <parenleft> <kana_SHI> <parenright> : "㋛" U32DB # CIRCLED KATAKANA SI
+<Multi_key> <parenleft> <kana_SU> <parenright> : "㋜" U32DC # CIRCLED KATAKANA SU
+<Multi_key> <parenleft> <kana_SE> <parenright> : "㋝" U32DD # CIRCLED KATAKANA SE
+<Multi_key> <parenleft> <kana_SO> <parenright> : "㋞" U32DE # CIRCLED KATAKANA SO
+<Multi_key> <parenleft> <kana_TA> <parenright> : "㋟" U32DF # CIRCLED KATAKANA TA
+<Multi_key> <parenleft> <kana_CHI> <parenright> : "㋠" U32E0 # CIRCLED KATAKANA TI
+<Multi_key> <parenleft> <kana_TSU> <parenright> : "㋡" U32E1 # CIRCLED KATAKANA TU
+<Multi_key> <parenleft> <kana_TE> <parenright> : "㋢" U32E2 # CIRCLED KATAKANA TE
+<Multi_key> <parenleft> <kana_TO> <parenright> : "㋣" U32E3 # CIRCLED KATAKANA TO
+<Multi_key> <parenleft> <kana_NA> <parenright> : "㋤" U32E4 # CIRCLED KATAKANA NA
+<Multi_key> <parenleft> <kana_NI> <parenright> : "㋥" U32E5 # CIRCLED KATAKANA NI
+<Multi_key> <parenleft> <kana_NU> <parenright> : "㋦" U32E6 # CIRCLED KATAKANA NU
+<Multi_key> <parenleft> <kana_NE> <parenright> : "㋧" U32E7 # CIRCLED KATAKANA NE
+<Multi_key> <parenleft> <kana_NO> <parenright> : "㋨" U32E8 # CIRCLED KATAKANA NO
+<Multi_key> <parenleft> <kana_HA> <parenright> : "㋩" U32E9 # CIRCLED KATAKANA HA
+<Multi_key> <parenleft> <kana_HI> <parenright> : "㋪" U32EA # CIRCLED KATAKANA HI
+<Multi_key> <parenleft> <kana_FU> <parenright> : "㋫" U32EB # CIRCLED KATAKANA HU
+<Multi_key> <parenleft> <kana_HE> <parenright> : "㋬" U32EC # CIRCLED KATAKANA HE
+<Multi_key> <parenleft> <kana_HO> <parenright> : "㋭" U32ED # CIRCLED KATAKANA HO
+<Multi_key> <parenleft> <kana_MA> <parenright> : "㋮" U32EE # CIRCLED KATAKANA MA
+<Multi_key> <parenleft> <kana_MI> <parenright> : "㋯" U32EF # CIRCLED KATAKANA MI
+<Multi_key> <parenleft> <kana_MU> <parenright> : "㋰" U32F0 # CIRCLED KATAKANA MU
+<Multi_key> <parenleft> <kana_ME> <parenright> : "㋱" U32F1 # CIRCLED KATAKANA ME
+<Multi_key> <parenleft> <kana_MO> <parenright> : "㋲" U32F2 # CIRCLED KATAKANA MO
+<Multi_key> <parenleft> <kana_YA> <parenright> : "㋳" U32F3 # CIRCLED KATAKANA YA
+<Multi_key> <parenleft> <kana_YU> <parenright> : "㋴" U32F4 # CIRCLED KATAKANA YU
+<Multi_key> <parenleft> <kana_YO> <parenright> : "㋵" U32F5 # CIRCLED KATAKANA YO
+<Multi_key> <parenleft> <kana_RA> <parenright> : "㋶" U32F6 # CIRCLED KATAKANA RA
+<Multi_key> <parenleft> <kana_RI> <parenright> : "㋷" U32F7 # CIRCLED KATAKANA RI
+<Multi_key> <parenleft> <kana_RU> <parenright> : "㋸" U32F8 # CIRCLED KATAKANA RU
+<Multi_key> <parenleft> <kana_RE> <parenright> : "㋹" U32F9 # CIRCLED KATAKANA RE
+<Multi_key> <parenleft> <kana_RO> <parenright> : "㋺" U32FA # CIRCLED KATAKANA RO
+<Multi_key> <parenleft> <kana_WA> <parenright> : "㋻" U32FB # CIRCLED KATAKANA WA
+<Multi_key> <parenleft> <U30F0> <parenright> : "㋼" U32FC # CIRCLED KATAKANA WI
+<Multi_key> <parenleft> <U30F1> <parenright> : "㋽" U32FD # CIRCLED KATAKANA WE
+<Multi_key> <parenleft> <kana_WO> <parenright> : "㋾" U32FE # CIRCLED KATAKANA WO
+<Multi_key> <U05B4> <hebrew_yod> : "יִ" UFB1D # HEBREW LETTER YOD WITH HIRIQ
+<Multi_key> <U05B7> <U05F2> : "ײַ" UFB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH
+<Multi_key> <U05C1> <hebrew_shin> : "שׁ" UFB2A # HEBREW LETTER SHIN WITH SHIN DOT
+<Multi_key> <U05C2> <hebrew_shin> : "שׂ" UFB2B # HEBREW LETTER SHIN WITH SIN DOT
+<Multi_key> <U05C1> <UFB49> : "שּׁ" UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+<Multi_key> <U05C1> <U05BC> <hebrew_shin> : "שּׁ" UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+<Multi_key> <U05C2> <UFB49> : "שּׂ" UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+<Multi_key> <U05C2> <U05BC> <hebrew_shin> : "שּׂ" UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+<Multi_key> <U05B7> <hebrew_aleph> : "אַ" UFB2E # HEBREW LETTER ALEF WITH PATAH
+<Multi_key> <U05B8> <hebrew_aleph> : "אָ" UFB2F # HEBREW LETTER ALEF WITH QAMATS
+<Multi_key> <U05BC> <hebrew_aleph> : "אּ" UFB30 # HEBREW LETTER ALEF WITH MAPIQ
+<Multi_key> <U05BC> <hebrew_bet> : "בּ" UFB31 # HEBREW LETTER BET WITH DAGESH
+<Multi_key> <U05BC> <hebrew_gimel> : "גּ" UFB32 # HEBREW LETTER GIMEL WITH DAGESH
+<Multi_key> <U05BC> <hebrew_dalet> : "דּ" UFB33 # HEBREW LETTER DALET WITH DAGESH
+<Multi_key> <U05BC> <hebrew_he> : "הּ" UFB34 # HEBREW LETTER HE WITH MAPIQ
+<Multi_key> <U05BC> <hebrew_waw> : "וּ" UFB35 # HEBREW LETTER VAV WITH DAGESH
+<Multi_key> <U05BC> <hebrew_zain> : "זּ" UFB36 # HEBREW LETTER ZAYIN WITH DAGESH
+<Multi_key> <U05BC> <hebrew_tet> : "טּ" UFB38 # HEBREW LETTER TET WITH DAGESH
+<Multi_key> <U05BC> <hebrew_yod> : "יּ" UFB39 # HEBREW LETTER YOD WITH DAGESH
+<Multi_key> <U05BC> <hebrew_finalkaph> : "ךּ" UFB3A # HEBREW LETTER FINAL KAF WITH DAGESH
+<Multi_key> <U05BC> <hebrew_kaph> : "כּ" UFB3B # HEBREW LETTER KAF WITH DAGESH
+<Multi_key> <U05BC> <hebrew_lamed> : "לּ" UFB3C # HEBREW LETTER LAMED WITH DAGESH
+<Multi_key> <U05BC> <hebrew_mem> : "מּ" UFB3E # HEBREW LETTER MEM WITH DAGESH
+<Multi_key> <U05BC> <hebrew_nun> : "נּ" UFB40 # HEBREW LETTER NUN WITH DAGESH
+<Multi_key> <U05BC> <hebrew_samech> : "סּ" UFB41 # HEBREW LETTER SAMEKH WITH DAGESH
+<Multi_key> <U05BC> <hebrew_finalpe> : "ףּ" UFB43 # HEBREW LETTER FINAL PE WITH DAGESH
+<Multi_key> <U05BC> <hebrew_pe> : "פּ" UFB44 # HEBREW LETTER PE WITH DAGESH
+<Multi_key> <U05BC> <hebrew_zade> : "צּ" UFB46 # HEBREW LETTER TSADI WITH DAGESH
+<Multi_key> <U05BC> <hebrew_qoph> : "קּ" UFB47 # HEBREW LETTER QOF WITH DAGESH
+<Multi_key> <U05BC> <hebrew_resh> : "רּ" UFB48 # HEBREW LETTER RESH WITH DAGESH
+<Multi_key> <U05BC> <hebrew_shin> : "שּ" UFB49 # HEBREW LETTER SHIN WITH DAGESH
+<Multi_key> <U05BC> <hebrew_taw> : "תּ" UFB4A # HEBREW LETTER TAV WITH DAGESH
+<Multi_key> <U05B9> <hebrew_waw> : "וֹ" UFB4B # HEBREW LETTER VAV WITH HOLAM
+<Multi_key> <U05BF> <hebrew_bet> : "בֿ" UFB4C # HEBREW LETTER BET WITH RAFE
+<Multi_key> <U05BF> <hebrew_kaph> : "כֿ" UFB4D # HEBREW LETTER KAF WITH RAFE
+<Multi_key> <U05BF> <hebrew_pe> : "פֿ" UFB4E # HEBREW LETTER PE WITH RAFE
+<Multi_key> <U1D157> <U1D165> : "𝅗𝅥" U1D15E # MUSICAL SYMBOL HALF NOTE
+<Multi_key> <U1D158> <U1D165> : "𝅘𝅥" U1D15F # MUSICAL SYMBOL QUARTER NOTE
+<Multi_key> <U1D15F> <U1D16E> : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
+
+<Multi_key> <U1D15F> <U1D16F> : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
+
+<Multi_key> <U1D15F> <U1D170> : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
+
+<Multi_key> <U1D15F> <U1D171> : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
+
+<Multi_key> <U1D15F> <U1D172> : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+
+<Multi_key> <U1D1B9> <U1D165> : "𝆹𝅥" U1D1BB # MUSICAL SYMBOL MINIMA
+<Multi_key> <U1D1BA> <U1D165> : "𝆺𝅥" U1D1BC # MUSICAL SYMBOL MINIMA BLACK
+<Multi_key> <U1D1BB> <U1D16E> : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
+
+<Multi_key> <U1D1BC> <U1D16E> : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
+
+<Multi_key> <U1D1BB> <U1D16F> : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE
+
+<Multi_key> <U1D1BC> <U1D16F> : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK
+
+
+#
+# Khmer digraphs
+#
+
+<U17ff> : "ាំ"
+<U17fe> : "ោះ"
+<U17fd> : "េះ"
+<U17fc> : "ុំ"
+<U17fb> : "ុះ"
+
+#
+# Arabic Lam-Alef ligatures
+#
+
+<UFEFB> : "لا" # ARABIC LIGATURE LAM WITH ALEF
+<UFEF7> : "لأ" # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE
+<UFEF9> : "لإ" # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW
+<UFEF5> : "لآ" # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE
+
+#
+# French-Dvorak Bépo compositions
+#
+
+<dead_abovedot> <Amacron> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<dead_abovedot> <amacron> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<dead_abovedot> <j> : "ȷ" U0237 # LATIN SMALL LETTER DOTLESS J
+<dead_abovedot> <L> : "Ŀ" U013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+<dead_abovedot> <l> : "ŀ" U0140 # LATIN SMALL LETTER L WITH MIDDLE DOT
+<dead_abovedot> <Omacron> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<dead_abovedot> <omacron> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<dead_abovedot> <nobreakspace> : "̇" U0307 # COMBINING DOT ABOVE
+<dead_acute> <Sabovedot> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_acute> <sabovedot> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_acute> <V> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<dead_acute> <v> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<dead_acute> <nobreakspace> : "́" U0301 # COMBINING ACUTE ACCENT
+<dead_belowdot> <Sabovedot> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_belowdot> <sabovedot> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_belowdot> <dead_belowdot> : "̣" U0323 # COMBINING DOT BELOW
+<dead_belowdot> <nobreakspace> : "̣" U0323 # COMBINING DOT BELOW
+<dead_belowdot> <space> : "̣" U0323 # COMBINING DOT BELOW
+<dead_breve> <Aacute> : "Ắ" Abreveacute # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<dead_breve> <Agrave> : "Ằ" Abrevegrave # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<dead_breve> <Ahook> : "Ẳ" Abrevehook # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_breve> <Atilde> : "Ẵ" Abrevetilde # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<dead_breve> <aacute> : "ắ" abreveacute # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<dead_breve> <agrave> : "ằ" abrevegrave # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<dead_breve> <ahook> : "ẳ" abrevehook # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_breve> <atilde> : "ẵ" abrevetilde # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<dead_breve> <nobreakspace> : "̆" U0306 # COMBINING BREVE
+<dead_caron> <parenleft> : "₍" U208D # SUBSCRIPT LEFT PARENTHESIS
+<dead_caron> <parenright> : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS
+<dead_caron> <plus> : "₊" U208A # SUBSCRIPT PLUS SIGN
+<dead_caron> <minus> : "₋" U208B # SUBSCRIPT MINUS
+<dead_caron> <0> : "₀" zerosubscript # SUBSCRIPT ZERO
+<dead_caron> <1> : "₁" onesubscript # SUBSCRIPT ONE
+<dead_caron> <2> : "₂" twosubscript # SUBSCRIPT TWO
+<dead_caron> <3> : "₃" threesubscript # SUBSCRIPT THREE
+<dead_caron> <4> : "₄" foursubscript # SUBSCRIPT FOUR
+<dead_caron> <5> : "₅" fivesubscript # SUBSCRIPT FIVE
+<dead_caron> <6> : "₆" sixsubscript # SUBSCRIPT SIX
+<dead_caron> <7> : "₇" sevensubscript # SUBSCRIPT SEVEN
+<dead_caron> <8> : "₈" eightsubscript # SUBSCRIPT EIGHT
+<dead_caron> <9> : "₉" ninesubscript # SUBSCRIPT NINE
+<dead_caron> <equal> : "₌" U208C # SUBSCRIPT EQUALS SIGN
+<dead_caron> <U01F2> : "Dž" U01C5 # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+<dead_caron> <Sabovedot> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+<dead_caron> <sabovedot> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+<dead_caron> <V> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+<dead_caron> <v> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+<dead_caron> <nobreakspace> : "̌" U030C # COMBINING CARON
+<dead_cedilla> <Cacute> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<dead_cedilla> <ColonSign> : "₵" U20B5 # CEDI SIGN
+<dead_cedilla> <cacute> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<dead_cedilla> <cent> : "₵" U20B5 # CEDI SIGN
+<dead_cedilla> <U0114> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<dead_cedilla> <U0115> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<dead_cedilla> <nobreakspace> : "̧" U0327 # COMBINING CEDILLA
+<dead_circumflex> <minus> : "⁻" U207B # SUPERSCRIPT MINUS
+<dead_circumflex> <Aacute> : "Ấ" Acircumflexacute # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <Agrave> : "Ầ" Acircumflexgrave # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <Ahook> : "Ẩ" Acircumflexhook # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <Atilde> : "Ẫ" Acircumflextilde # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <aacute> : "ấ" acircumflexacute # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <agrave> : "ầ" acircumflexgrave # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <ahook> : "ẩ" acircumflexhook # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <atilde> : "ẫ" acircumflextilde # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <Eacute> : "Ế" Ecircumflexacute # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <Egrave> : "Ề" Ecircumflexgrave # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <Ehook> : "Ể" Ecircumflexhook # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <Etilde> : "Ễ" Ecircumflextilde # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <eacute> : "ế" ecircumflexacute # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <egrave> : "ề" ecircumflexgrave # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <ehook> : "ể" ecircumflexhook # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <etilde> : "ễ" ecircumflextilde # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <Oacute> : "Ố" Ocircumflexacute # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <Ograve> : "Ồ" Ocircumflexgrave # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <Ohook> : "Ổ" Ocircumflexhook # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <Otilde> : "Ỗ" Ocircumflextilde # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <oacute> : "ố" ocircumflexacute # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <ograve> : "ồ" ocircumflexgrave # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <ohook> : "ổ" ocircumflexhook # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <otilde> : "ỗ" ocircumflextilde # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <nobreakspace> : "̂" U0302 # COMBINING CIRCUMFLEX ACCENT
+<dead_belowcomma> <S> : "Ș" U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW
+<dead_belowcomma> <s> : "ș" U0219 # LATIN SMALL LETTER S WITH COMMA BELOW
+<dead_belowcomma> <T> : "Ț" U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW
+<dead_belowcomma> <t> : "ț" U021B # LATIN SMALL LETTER T WITH COMMA BELOW
+<dead_belowcomma> <dead_belowcomma> : "," comma # COMMA
+<dead_belowcomma> <nobreakspace> : "̦" U0326 # COMBINING COMMA BELOW
+<dead_belowcomma> <space> : "," comma # COMMA
+<dead_currency> <A> : "₳" U20B3 # AUSTRAL SIGN
+<dead_currency> <a> : "؋" U060B # AFGHANI SIGN
+<dead_currency> <B> : "₱" U20B1 # PESO SIGN
+<dead_currency> <b> : "฿" Thai_baht # THAI CURRENCY SYMBOL BAHT
+<dead_currency> <Ccedilla> : "₵" U20B5 # CEDI SIGN
+<dead_currency> <C> : "₡" ColonSign # COLON SIGN
+<dead_currency> <ccedilla> : "₵" U20B5 # CEDI SIGN
+<dead_currency> <c> : "¢" cent # CENT SIGN
+<dead_currency> <D> : "₯" U20AF # DRACHMA SIGN
+<dead_currency> <d> : "₫" DongSign # DONG SIGN
+<dead_currency> <E> : "₠" EcuSign # EURO-CURRENCY SIGN
+<dead_currency> <e> : "€" EuroSign # EURO SIGN
+<dead_currency> <F> : "₣" FFrancSign # FRENCH FRANC SIGN
+<dead_currency> <f> : "ƒ" function # LATIN SMALL LETTER F WITH HOOK
+<dead_currency> <G> : "₲" U20B2 # GUARANI SIGN
+<dead_currency> <g> : "₲" U20B2 # GUARANI SIGN
+<dead_currency> <H> : "₴" U20B4 # HRYVNIA SIGN
+<dead_currency> <h> : "₴" U20B4 # HRYVNIA SIGN
+<dead_currency> <I> : "៛" U17DB # KHMER CURRENCY SYMBOL RIEL
+<dead_currency> <i> : "﷼" UFDFC # RIAL SIGN
+<dead_currency> <K> : "₭" U20AD # KIP SIGN
+<dead_currency> <k> : "₭" U20AD # KIP SIGN
+<dead_currency> <L> : "₤" LiraSign # LIRA SIGN
+<dead_currency> <l> : "£" sterling # POUND SIGN
+<dead_currency> <M> : "ℳ" U2133 # SCRIPT CAPITAL M
+<dead_currency> <m> : "₥" MillSign # MILL SIGN
+<dead_currency> <N> : "₦" NairaSign # NAIRA SIGN
+<dead_currency> <n> : "₦" NairaSign # NAIRA SIGN
+<dead_currency> <O> : "૱" U0AF1 # GUJARATI RUPEE SIGN
+<dead_currency> <o> : "௹" U0BF9 # TAMIL RUPEE SIGN
+<dead_currency> <P> : "₧" PesetaSign # PESETA SIGN
+<dead_currency> <p> : "₰" U20B0 # GERMAN PENNY SIGN
+<dead_currency> <r> : "₢" CruzeiroSign # CRUZEIRO SIGN
+<dead_currency> <R> : "₨" RupeeSign # RUPEE SIGN
+<dead_currency> <S> : "$" dollar # DOLLAR SIGN
+<dead_currency> <s> : "₪" NewSheqelSign # NEW SHEQEL SIGN
+<dead_currency> <T> : "₮" U20AE # TUGRIK SIGN
+<dead_currency> <t> : "৳" U09F3 # BENGALI RUPEE SIGN
+<dead_currency> <THORN> : "৲" U09F2 # BENGALI RUPEE MARK
+<dead_currency> <thorn> : "৲" U09F2 # BENGALI RUPEE MARK
+<dead_currency> <U> : "圓" U5713 # YUAN / WEN
+<dead_currency> <u> : "元" U5143 # YUAN / WEN
+<dead_currency> <W> : "₩" WonSign # WON SIGN
+<dead_currency> <w> : "₩" WonSign # WON SIGN
+<dead_currency> <Y> : "円" U5186 # YEN
+<dead_currency> <y> : "¥" yen # YEN SIGN
+<dead_currency> <dead_currency> : "¤" currency # CURRENCY SIGN
+<dead_currency> <nobreakspace> : "¤" currency # CURRENCY SIGN
+<dead_currency> <space> : "¤" currency # CURRENCY SIGN
+<dead_diaeresis> <Amacron> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<dead_diaeresis> <amacron> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<dead_diaeresis> <Iacute> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<dead_diaeresis> <iacute> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<dead_diaeresis> <Omacron> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<dead_diaeresis> <omacron> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<dead_diaeresis> <Uacute> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<dead_diaeresis> <U01D3> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+<dead_diaeresis> <Ugrave> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+<dead_diaeresis> <uacute> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<dead_diaeresis> <U01D4> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+<dead_diaeresis> <ugrave> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+<dead_diaeresis> <nobreakspace> : "̈" U0308 # COMBINING DIAERESIS
+<dead_doubleacute> <nobreakspace> : "̋" U030B # COMBINING DOUBLE ACUTE ACCENT
+<dead_grave> <V> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+<dead_grave> <v> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+<dead_grave> <nobreakspace> : "̀" U0300 # COMBINING GRAVE ACCENT
+<dead_greek> <A> : "Α" U0391 # GREEK CAPITAL LETTER ALPHA
+<dead_greek> <a> : "α" U03B1 # GREEK SMALL LETTER ALPHA
+<dead_greek> <B> : "Β" U0392 # GREEK CAPITAL LETTER BETA
+<dead_greek> <b> : "β" U03B2 # GREEK SMALL LETTER BETA
+<dead_greek> <D> : "Δ" U0394 # GREEK CAPITAL LETTER DELTA
+<dead_greek> <d> : "δ" U03B4 # GREEK SMALL LETTER DELTA
+<dead_greek> <E> : "Ε" U0395 # GREEK CAPITAL LETTER EPSILON
+<dead_greek> <e> : "ε" U03B5 # GREEK SMALL LETTER EPSILON
+<dead_greek> <F> : "Φ" U03A6 # GREEK CAPITAL LETTER PHI
+<dead_greek> <f> : "φ" U03C6 # GREEK SMALL LETTER PHI
+<dead_greek> <G> : "Γ" U0393 # GREEK CAPITAL LETTER GAMMA
+<dead_greek> <g> : "γ" U03B3 # GREEK SMALL LETTER GAMMA
+<dead_greek> <H> : "Η" U0397 # GREEK CAPITAL LETTER ETA
+<dead_greek> <h> : "η" U03B7 # GREEK SMALL LETTER ETA
+<dead_greek> <I> : "Ι" U0399 # GREEK CAPITAL LETTER IOTA
+<dead_greek> <i> : "ι" U03B9 # GREEK SMALL LETTER IOTA
+<dead_greek> <J> : "Θ" U0398 # GREEK CAPITAL LETTER THETA
+<dead_greek> <j> : "θ" U03B8 # GREEK SMALL LETTER THETA
+<dead_greek> <K> : "Κ" U039A # GREEK CAPITAL LETTER KAPPA
+<dead_greek> <k> : "κ" U03BA # GREEK SMALL LETTER KAPPA
+<dead_greek> <L> : "Λ" U039B # GREEK CAPITAL LETTER LAMDA
+<dead_greek> <l> : "λ" U03BB # GREEK SMALL LETTER LAMDA
+<dead_greek> <M> : "Μ" U039C # GREEK CAPITAL LETTER MU
+<dead_greek> <m> : "μ" U03BC # GREEK SMALL LETTER MU
+<dead_greek> <N> : "Ν" U039D # GREEK CAPITAL LETTER NU
+<dead_greek> <n> : "ν" U03BD # GREEK SMALL LETTER NU
+<dead_greek> <O> : "Ο" U039F # GREEK CAPITAL LETTER OMICRON
+<dead_greek> <o> : "ο" U03BF # GREEK SMALL LETTER OMICRON
+<dead_greek> <P> : "Π" U03A0 # GREEK CAPITAL LETTER PI
+<dead_greek> <p> : "π" U03C0 # GREEK SMALL LETTER PI
+<dead_greek> <Q> : "Χ" U03A7 # GREEK CAPITAL LETTER CHI
+<dead_greek> <q> : "χ" U03C7 # GREEK SMALL LETTER CHI
+<dead_greek> <R> : "Ρ" U03A1 # GREEK CAPITAL LETTER RHO
+<dead_greek> <r> : "ρ" U03C1 # GREEK SMALL LETTER RHO
+<dead_greek> <S> : "Σ" U03A3 # GREEK CAPITAL LETTER SIGMA
+<dead_greek> <s> : "σ" U03C3 # GREEK SMALL LETTER SIGMA
+<dead_greek> <T> : "Τ" U03A4 # GREEK CAPITAL LETTER TAU
+<dead_greek> <t> : "τ" U03C4 # GREEK SMALL LETTER TAU
+<dead_greek> <U> : "Υ" U03A5 # GREEK CAPITAL LETTER UPSILON
+<dead_greek> <u> : "υ" U03C5 # GREEK SMALL LETTER UPSILON
+<dead_greek> <W> : "Ω" U03A9 # GREEK CAPITAL LETTER OMEGA
+<dead_greek> <w> : "ω" U03C9 # GREEK SMALL LETTER OMEGA
+<dead_greek> <X> : "Ξ" U039E # GREEK CAPITAL LETTER XI
+<dead_greek> <x> : "ξ" U03BE # GREEK SMALL LETTER XI
+<dead_greek> <Y> : "Ψ" U03A8 # GREEK CAPITAL LETTER PSI
+<dead_greek> <y> : "ψ" U03C8 # GREEK SMALL LETTER PSI
+<dead_greek> <Z> : "Ζ" U0396 # GREEK CAPITAL LETTER ZETA
+<dead_greek> <z> : "ζ" U03B6 # GREEK SMALL LETTER ZETA
+<dead_greek> <dead_greek> : "µ" U00B5 # MICRO SIGN
+<dead_greek> <nobreakspace> : "µ" U00B5 # MICRO SIGN
+<dead_greek> <space> : "µ" U00B5 # MICRO SIGN
+<dead_hook> <B> : "Ɓ" U0181 # LATIN CAPITAL LETTER B WITH HOOK
+<dead_hook> <b> : "ɓ" U0253 # LATIN SMALL LETTER B WITH HOOK
+<dead_hook> <C> : "Ƈ" U0187 # LATIN CAPITAL LETTER C WITH HOOK
+<dead_hook> <c> : "ƈ" U0188 # LATIN SMALL LETTER C WITH HOOK
+<dead_hook> <D> : "Ɗ" U018A # LATIN CAPITAL LETTER D WITH HOOK
+<dead_hook> <d> : "ɗ" U0257 # LATIN SMALL LETTER D WITH HOOK
+<dead_hook> <U0256> : "ᶑ" U1D91 # LATIN SMALL LETTER D WITH HOOK AND TAIL
+<dead_hook> <F> : "Ƒ" U0191 # LATIN CAPITAL LETTER F WITH HOOK
+<dead_hook> <f> : "ƒ" function # LATIN SMALL LETTER F WITH HOOK
+<dead_hook> <G> : "Ɠ" U0193 # LATIN CAPITAL LETTER G WITH HOOK
+<dead_hook> <g> : "ɠ" U0260 # LATIN SMALL LETTER G WITH HOOK
+<dead_hook> <h> : "ɦ" U0266 # LATIN SMALL LETTER H WITH HOOK
+<dead_hook> <U025F> : "ʄ" U0284 # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+<dead_hook> <K> : "Ƙ" U0198 # LATIN CAPITAL LETTER K WITH HOOK
+<dead_hook> <k> : "ƙ" U0199 # LATIN SMALL LETTER K WITH HOOK
+<dead_hook> <M> : "Ɱ" U2C6E # LATIN CAPITAL LETTER M WITH HOOK
+<dead_hook> <m> : "ɱ" U0271 # LATIN SMALL LETTER M WITH HOOK
+<dead_hook> <N> : "Ɲ" U019D # LATIN CAPITAL LETTER N WITH LEFT HOOK
+<dead_hook> <n> : "ɲ" U0272 # LATIN SMALL LETTER N WITH LEFT HOOK
+<dead_hook> <P> : "Ƥ" U01A4 # LATIN CAPITAL LETTER P WITH HOOK
+<dead_hook> <p> : "ƥ" U01A5 # LATIN SMALL LETTER P WITH HOOK
+<dead_hook> <q> : "ʠ" U02A0 # LATIN SMALL LETTER Q WITH HOOK
+<dead_hook> <U025C> : "ɝ" U025D # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+<dead_hook> <r> : "ɼ" U027C # LATIN SMALL LETTER R WITH LONG LEG
+<dead_hook> <s> : "ʂ" U0282 # LATIN SMALL LETTER S WITH HOOK
+<dead_hook> <schwa> : "ɚ" U025A # LATIN SMALL LETTER SCHWA WITH HOOK
+<dead_hook> <T> : "Ƭ" U01AC # LATIN CAPITAL LETTER T WITH HOOK
+<dead_hook> <t> : "ƭ" U01AD # LATIN SMALL LETTER T WITH HOOK
+<dead_hook> <U0279> : "ɻ" U027B # LATIN SMALL LETTER TURNED R WITH HOOK
+<dead_hook> <V> : "Ʋ" U01B2 # LATIN CAPITAL LETTER V WITH HOOK
+<dead_hook> <v> : "ʋ" U028B # LATIN SMALL LETTER V WITH HOOK
+<dead_hook> <W> : "Ⱳ" U2C72 # LATIN CAPITAL LETTER W WITH HOOK
+<dead_hook> <w> : "ⱳ" U2C73 # LATIN SMALL LETTER W WITH HOOK
+<dead_hook> <Z> : "Ȥ" U0224 # LATIN CAPITAL LETTER Z WITH HOOK
+<dead_hook> <z> : "ȥ" U0225 # LATIN SMALL LETTER Z WITH HOOK
+<dead_hook> <dead_hook> : "̉" U0309 # COMBINING HOOK ABOVE
+<dead_hook> <nobreakspace> : "̉" U0309 # COMBINING HOOK ABOVE
+<dead_hook> <space> : "̉" U0309 # COMBINING HOOK ABOVE
+<dead_horn> <Oacute> : "Ớ" Ohornacute # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<dead_horn> <Obelowdot> : "Ợ" Ohornbelowdot # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<dead_horn> <Ograve> : "Ờ" Ohorngrave # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<dead_horn> <Ohook> : "Ở" Ohornhook # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<dead_horn> <Otilde> : "Ỡ" Ohorntilde # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+<dead_horn> <oacute> : "ớ" ohornacute # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<dead_horn> <obelowdot> : "ợ" ohornbelowdot # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<dead_horn> <ograve> : "ờ" ohorngrave # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<dead_horn> <ohook> : "ở" ohornhook # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<dead_horn> <otilde> : "ỡ" ohorntilde # LATIN SMALL LETTER O WITH HORN AND TILDE
+<dead_horn> <Uacute> : "Ứ" Uhornacute # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<dead_horn> <Ubelowdot> : "Ự" Uhornbelowdot # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<dead_horn> <Ugrave> : "Ừ" Uhorngrave # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<dead_horn> <Uhook> : "Ử" Uhornhook # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<dead_horn> <Utilde> : "Ữ" Uhorntilde # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+<dead_horn> <uacute> : "ứ" uhornacute # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<dead_horn> <ubelowdot> : "ự" uhornbelowdot # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<dead_horn> <ugrave> : "ừ" uhorngrave # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<dead_horn> <uhook> : "ử" uhornhook # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<dead_horn> <utilde> : "ữ" uhorntilde # LATIN SMALL LETTER U WITH HORN AND TILDE
+<dead_horn> <dead_horn> : "̛" U031B # COMBINING HORN
+<dead_horn> <nobreakspace> : "̛" U031B # COMBINING HORN
+<dead_horn> <space> : "̛" U031B # COMBINING HORN
+<dead_macron> <Eacute> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<dead_macron> <Egrave> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<dead_macron> <eacute> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<dead_macron> <egrave> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<dead_macron> <Oacute> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<dead_macron> <Ograve> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<dead_macron> <oacute> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<dead_macron> <ograve> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<dead_macron> <V> : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+<dead_macron> <v> : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+<dead_macron> <nobreakspace> : "̄" U0304 # COMBINING MACRON
+<dead_ogonek> <Omacron> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<dead_ogonek> <omacron> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<dead_ogonek> <nobreakspace> : "̨" U0328 # COMBINING OGONEK
+<dead_abovering> <Aacute> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<dead_abovering> <aacute> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<dead_abovering> <nobreakspace> : "̊" U030A # COMBINING RING ABOVE
+<dead_stroke> <2> : "ƻ" U01BB # LATIN LETTER TWO WITH STROKE
+<dead_stroke> <equal> : "≠" notequal # NOT EQUAL TO
+<dead_stroke> <A> : "Ⱥ" U023A # LATIN CAPITAL LETTER A WITH STROKE
+<dead_stroke> <a> : "ⱥ" U2C65 # LATIN SMALL LETTER A WITH STROKE
+<dead_stroke> <B> : "Ƀ" U0243 # LATIN CAPITAL LETTER B WITH STROKE
+<dead_stroke> <C> : "Ȼ" U023B # LATIN CAPITAL LETTER C WITH STROKE
+<dead_stroke> <c> : "ȼ" U023C # LATIN SMALL LETTER C WITH STROKE
+<dead_stroke> <E> : "Ɇ" U0246 # LATIN CAPITAL LETTER E WITH STROKE
+<dead_stroke> <e> : "ɇ" U0247 # LATIN SMALL LETTER E WITH STROKE
+<dead_stroke> <greater> : "≯" U226F # NOT GREATER-THAN
+<dead_stroke> <greaterthanequal> : "≱" U2271 # NEITHER GREATER-THAN NOR EQUAL TO
+<dead_stroke> <J> : "Ɉ" U0248 # LATIN CAPITAL LETTER J WITH STROKE
+<dead_stroke> <j> : "ɉ" U0249 # LATIN SMALL LETTER J WITH STROKE
+<dead_stroke> <U0269> : "ᵼ" U1D7C # LATIN SMALL LETTER IOTA WITH STROKE
+<dead_stroke> <U0237> : "ɟ" U025F # LATIN SMALL LETTER DOTLESS J WITH STROKE
+<dead_stroke> <less> : "≮" U226E # NOT LESS-THAN
+<dead_stroke> <lessthanequal> : "≰" U2270 # NEITHER LESS-THAN NOR EQUAL TO
+<dead_stroke> <Oacute> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<dead_stroke> <oacute> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<dead_stroke> <P> : "Ᵽ" U2C63 # LATIN CAPITAL LETTER P WITH STROKE
+<dead_stroke> <p> : "ᵽ" U1D7D # LATIN SMALL LETTER P WITH STROKE
+<dead_stroke> <R> : "Ɍ" U024C # LATIN CAPITAL LETTER R WITH STROKE
+<dead_stroke> <r> : "ɍ" U024D # LATIN SMALL LETTER R WITH STROKE
+<dead_stroke> <U> : "Ʉ" U0244 # LATIN CAPITAL LETTER U BAR
+<dead_stroke> <u> : "ʉ" U0289 # LATIN SMALL LETTER U BAR
+<dead_stroke> <Y> : "Ɏ" U024E # LATIN CAPITAL LETTER Y WITH STROKE
+<dead_stroke> <y> : "ɏ" U024F # LATIN SMALL LETTER Y WITH STROKE
+<dead_stroke> <dead_stroke> : "/" slash # SOLIDUS
+<dead_stroke> <nobreakspace> : "̸" U0338 # COMBINING LONG SOLIDUS OVERLAY
+<dead_stroke> <space> : "/" slash # SOLIDUS
+<dead_tilde> <Oacute> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<dead_tilde> <Odiaeresis> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+<dead_tilde> <Omacron> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<dead_tilde> <oacute> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<dead_tilde> <odiaeresis> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+<dead_tilde> <omacron> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<dead_tilde> <Uacute> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<dead_tilde> <uacute> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<dead_tilde> <equal> : "≃" similarequal # ASYMPTOTICALLY EQUAL TO
+<dead_tilde> <less> : "≲" U2272 # LESS-THAN OR EQUIVALENT TO
+<dead_tilde> <greater> : "≳" U2273 # GREATER-THAN OR EQUIVALENT TO
+<dead_tilde> <nobreakspace> : "̃" U0303 # COMBINING TILDE
+<dead_acute> <dead_abovedot> <S> : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_acute> <dead_abovedot> <s> : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+<dead_belowdot> <dead_abovedot> <S> : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_belowdot> <dead_abovedot> <s> : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+<dead_caron> <dead_abovedot> <S> : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+<dead_caron> <dead_abovedot> <s> : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+<dead_abovedot> <dead_macron> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+<dead_abovedot> <dead_macron> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+<dead_abovedot> <dead_macron> <O> : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+<dead_abovedot> <dead_macron> <o> : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+<dead_abovedot> <dead_stroke> <j> : "ɟ" U025F # LATIN SMALL LETTER DOTLESS J WITH STROKE
+<dead_stroke> <dead_abovedot> <j> : "ɟ" U025F # LATIN SMALL LETTER DOTLESS J WITH STROKE
+<dead_breve> <dead_acute> <A> : "Ắ" Abreveacute # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<dead_breve> <dead_acute> <a> : "ắ" abreveacute # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<dead_cedilla> <dead_acute> <C> : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+<dead_cedilla> <dead_acute> <c> : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+<dead_circumflex> <dead_acute> <A> : "Ấ" Acircumflexacute # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <dead_acute> <a> : "ấ" acircumflexacute # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <dead_acute> <E> : "Ế" Ecircumflexacute # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <dead_acute> <e> : "ế" ecircumflexacute # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <dead_acute> <O> : "Ố" Ocircumflexacute # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_circumflex> <dead_acute> <o> : "ố" ocircumflexacute # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_diaeresis> <dead_acute> <I> : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+<dead_diaeresis> <dead_acute> <i> : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+<dead_diaeresis> <dead_acute> <U> : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+<dead_diaeresis> <dead_acute> <u> : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+<dead_horn> <dead_acute> <O> : "Ớ" Ohornacute # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<dead_horn> <dead_acute> <o> : "ớ" ohornacute # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<dead_horn> <dead_acute> <U> : "Ứ" Uhornacute # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<dead_horn> <dead_acute> <u> : "ứ" uhornacute # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<dead_macron> <dead_acute> <E> : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+<dead_macron> <dead_acute> <e> : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+<dead_macron> <dead_acute> <O> : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+<dead_macron> <dead_acute> <o> : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+<dead_abovering> <dead_acute> <A> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<dead_abovering> <dead_acute> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<dead_tilde> <dead_acute> <O> : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+<dead_tilde> <dead_acute> <o> : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+<dead_tilde> <dead_acute> <U> : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+<dead_tilde> <dead_acute> <u> : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+<dead_belowdot> <dead_breve> <A> : "Ặ" Abrevebelowdot # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<dead_belowdot> <dead_breve> <a> : "ặ" abrevebelowdot # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<dead_belowdot> <dead_circumflex> <A> : "Ậ" Acircumflexbelowdot # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <dead_circumflex> <a> : "ậ" acircumflexbelowdot # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <dead_circumflex> <E> : "Ệ" Ecircumflexbelowdot # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <dead_circumflex> <e> : "ệ" ecircumflexbelowdot # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <dead_circumflex> <O> : "Ộ" Ocircumflexbelowdot # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_belowdot> <dead_circumflex> <o> : "ộ" ocircumflexbelowdot # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_horn> <dead_belowdot> <O> : "Ợ" Ohornbelowdot # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<dead_horn> <dead_belowdot> <o> : "ợ" ohornbelowdot # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<dead_horn> <dead_belowdot> <U> : "Ự" Uhornbelowdot # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<dead_horn> <dead_belowdot> <u> : "ự" uhornbelowdot # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<dead_belowdot> <dead_macron> <L> : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+<dead_belowdot> <dead_macron> <l> : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+<dead_belowdot> <dead_macron> <R> : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+<dead_belowdot> <dead_macron> <r> : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+<dead_cedilla> <dead_breve> <E> : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+<dead_cedilla> <dead_breve> <e> : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+<dead_breve> <dead_grave> <A> : "Ằ" Abrevegrave # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<dead_breve> <dead_grave> <a> : "ằ" abrevegrave # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<dead_breve> <dead_hook> <A> : "Ẳ" Abrevehook # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_breve> <dead_hook> <a> : "ẳ" abrevehook # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_breve> <dead_tilde> <A> : "Ẵ" Abrevetilde # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<dead_breve> <dead_tilde> <a> : "ẵ" abrevetilde # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<dead_diaeresis> <dead_caron> <U> : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+<dead_diaeresis> <dead_caron> <u> : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+<dead_cedilla> <dead_currency> <C> : "₵" U20B5 # CEDI SIGN
+<dead_currency> <dead_cedilla> <C> : "₵" U20B5 # CEDI SIGN
+<dead_cedilla> <dead_currency> <c> : "₵" U20B5 # CEDI SIGN
+<dead_currency> <dead_cedilla> <c> : "₵" U20B5 # CEDI SIGN
+<dead_circumflex> <dead_grave> <A> : "Ầ" Acircumflexgrave # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <dead_grave> <a> : "ầ" acircumflexgrave # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <dead_grave> <E> : "Ề" Ecircumflexgrave # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <dead_grave> <e> : "ề" ecircumflexgrave # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <dead_grave> <O> : "Ồ" Ocircumflexgrave # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <dead_grave> <o> : "ồ" ocircumflexgrave # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_circumflex> <dead_hook> <A> : "Ẩ" Acircumflexhook # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <dead_hook> <a> : "ẩ" acircumflexhook # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <dead_hook> <E> : "Ể" Ecircumflexhook # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <dead_hook> <e> : "ể" ecircumflexhook # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <dead_hook> <O> : "Ổ" Ocircumflexhook # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <dead_hook> <o> : "ổ" ocircumflexhook # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_circumflex> <dead_tilde> <A> : "Ẫ" Acircumflextilde # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <dead_tilde> <a> : "ẫ" acircumflextilde # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <dead_tilde> <E> : "Ễ" Ecircumflextilde # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <dead_tilde> <e> : "ễ" ecircumflextilde # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <dead_tilde> <O> : "Ỗ" Ocircumflextilde # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_circumflex> <dead_tilde> <o> : "ỗ" ocircumflextilde # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_diaeresis> <dead_grave> <U> : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+<dead_diaeresis> <dead_grave> <u> : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+<dead_diaeresis> <dead_macron> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<dead_diaeresis> <dead_macron> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<dead_diaeresis> <dead_macron> <O> : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+<dead_diaeresis> <dead_macron> <o> : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+<dead_tilde> <dead_diaeresis> <O> : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+<dead_tilde> <dead_diaeresis> <o> : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+<dead_horn> <dead_grave> <O> : "Ờ" Ohorngrave # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<dead_horn> <dead_grave> <o> : "ờ" ohorngrave # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<dead_horn> <dead_grave> <U> : "Ừ" Uhorngrave # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<dead_horn> <dead_grave> <u> : "ừ" uhorngrave # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<dead_macron> <dead_grave> <E> : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+<dead_macron> <dead_grave> <e> : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+<dead_macron> <dead_grave> <O> : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+<dead_macron> <dead_grave> <o> : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+<dead_horn> <dead_hook> <O> : "Ở" Ohornhook # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<dead_horn> <dead_hook> <o> : "ở" ohornhook # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<dead_horn> <dead_hook> <U> : "Ử" Uhornhook # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<dead_horn> <dead_hook> <u> : "ử" uhornhook # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<dead_horn> <dead_tilde> <O> : "Ỡ" Ohorntilde # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+<dead_horn> <dead_tilde> <o> : "ỡ" ohorntilde # LATIN SMALL LETTER O WITH HORN AND TILDE
+<dead_horn> <dead_tilde> <U> : "Ữ" Uhorntilde # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+<dead_horn> <dead_tilde> <u> : "ữ" uhorntilde # LATIN SMALL LETTER U WITH HORN AND TILDE
+<dead_ogonek> <dead_macron> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<dead_ogonek> <dead_macron> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<dead_tilde> <dead_macron> <O> : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+<dead_tilde> <dead_macron> <o> : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
+<dead_greek> <dead_hook> <U> : "ϒ" U03D2 # GREEK UPSILON WITH HOOK SYMBOL
+<dead_hook> <dead_greek> <U> : "ϒ" U03D2 # GREEK UPSILON WITH HOOK SYMBOL
+<dead_greek> <dead_macron> <A> : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
+<dead_macron> <dead_greek> <A> : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
+<dead_greek> <dead_macron> <a> : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
+<dead_macron> <dead_greek> <a> : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
+<dead_greek> <dead_macron> <I> : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
+<dead_macron> <dead_greek> <I> : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
+<dead_greek> <dead_macron> <i> : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
+<dead_macron> <dead_greek> <i> : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
+<dead_greek> <dead_macron> <U> : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
+<dead_macron> <dead_greek> <U> : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
+<dead_greek> <dead_macron> <u> : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
+<dead_macron> <dead_greek> <u> : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
+<dead_greek> <dead_stroke> <r> : "ϼ" U03FC # GREEK RHO WITH STROKE SYMBOL
+<dead_stroke> <dead_greek> <r> : "ϼ" U03FC # GREEK RHO WITH STROKE SYMBOL
+
+#
+# Cyrillic NFDs
+#
+
+<dead_doublegrave> <Cyrillic_a> : "а̏" # CYRILLIC SMALL LETTER A WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_a> : "а̏" # CYRILLIC SMALL LETTER A WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_a> : "а̑" # CYRILLIC SMALL LETTER A WITH COMBINING INVERTED BREVE
+
+<dead_grave> <Cyrillic_a> : "а̀" # CYRILLIC SMALL LETTER A WITH COMBINING GRAVE ACCENT
+<Multi_key> <grave> <Cyrillic_a> : "а̀" # CYRILLIC SMALL LETTER A WITH COMBINING GRAVE ACCENT
+
+<dead_acute> <Cyrillic_a> : "а́" # CYRILLIC SMALL LETTER A WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_a> : "а́" # CYRILLIC SMALL LETTER A WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_a> : "а́" # CYRILLIC SMALL LETTER A WITH COMBINING ACUTE ACCENT
+
+<dead_macron> <Cyrillic_a> : "а̄" # CYRILLIC SMALL LETTER A WITH COMBINING MACRON
+<Multi_key> <macron> <Cyrillic_a> : "а̄" # CYRILLIC SMALL LETTER A WITH COMBINING MACRON
+<Multi_key> <underscore> <Cyrillic_a> : "а̄" # CYRILLIC SMALL LETTER A WITH COMBINING MACRON
+
+<dead_circumflex> <Cyrillic_a> : "а̂" # CYRILLIC SMALL LETTER A WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_a> : "а̂" # CYRILLIC SMALL LETTER A WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_A> : "А̏" # CYRILLIC CAPITAL LETTER A WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_A> : "А̏" # CYRILLIC CAPITAL LETTER A WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_A> : "А̑" # CYRILLIC CAPITAL LETTER A WITH COMBINING INVERTED BREVE
+
+<dead_grave> <Cyrillic_A> : "А̀" # CYRILLIC CAPITAL LETTER A WITH COMBINING GRAVE ACCENT
+<Multi_key> <grave> <Cyrillic_A> : "А̀" # CYRILLIC CAPITAL LETTER A WITH COMBINING GRAVE ACCENT
+
+<dead_acute> <Cyrillic_A> : "А́" # CYRILLIC CAPITAL LETTER A WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_A> : "А́" # CYRILLIC CAPITAL LETTER A WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_A> : "А́" # CYRILLIC CAPITAL LETTER A WITH COMBINING ACUTE ACCENT
+
+<dead_macron> <Cyrillic_A> : "А̄" # CYRILLIC CAPITAL LETTER A WITH COMBINING MACRON
+<Multi_key> <macron> <Cyrillic_A> : "А̄" # CYRILLIC CAPITAL LETTER A WITH COMBINING MACRON
+<Multi_key> <underscore> <Cyrillic_A> : "А̄" # CYRILLIC CAPITAL LETTER A WITH COMBINING MACRON
+
+<dead_circumflex> <Cyrillic_A> : "А̂" # CYRILLIC CAPITAL LETTER A WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_A> : "А̂" # CYRILLIC CAPITAL LETTER A WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_ie> : "е̏" # CYRILLIC SMALL LETTER IE WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_ie> : "е̏" # CYRILLIC SMALL LETTER IE WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_ie> : "е̑" # CYRILLIC SMALL LETTER IE WITH COMBINING INVERTED BREVE
+
+<dead_acute> <Cyrillic_ie> : "е́" # CYRILLIC SMALL LETTER IE WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_ie> : "е́" # CYRILLIC SMALL LETTER IE WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_ie> : "е́" # CYRILLIC SMALL LETTER IE WITH COMBINING ACUTE ACCENT
+
+<dead_macron> <Cyrillic_ie> : "е̄" # CYRILLIC SMALL LETTER IE WITH COMBINING MACRON
+<Multi_key> <macron> <Cyrillic_ie> : "е̄" # CYRILLIC SMALL LETTER IE WITH COMBINING MACRON
+<Multi_key> <underscore> <Cyrillic_ie> : "е̄" # CYRILLIC SMALL LETTER IE WITH COMBINING MACRON
+
+<dead_circumflex> <Cyrillic_ie> : "е̂" # CYRILLIC SMALL LETTER IE WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_ie> : "е̂" # CYRILLIC SMALL LETTER IE WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_IE> : "Е̏" # CYRILLIC CAPITAL LETTER IE WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_IE> : "Е̏" # CYRILLIC CAPITAL LETTER IE WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_IE> : "Е̑" # CYRILLIC CAPITAL LETTER IE WITH COMBINING INVERTED BREVE
+
+<dead_acute> <Cyrillic_IE> : "Е́" # CYRILLIC CAPITAL LETTER IE WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_IE> : "Е́" # CYRILLIC CAPITAL LETTER IE WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_IE> : "Е́" # CYRILLIC CAPITAL LETTER IE WITH COMBINING ACUTE ACCENT
+
+<dead_macron> <Cyrillic_IE> : "Е̄" # CYRILLIC CAPITAL LETTER IE WITH COMBINING MACRON
+<Multi_key> <macron> <Cyrillic_IE> : "Е̄" # CYRILLIC CAPITAL LETTER IE WITH COMBINING MACRON
+<Multi_key> <underscore> <Cyrillic_IE> : "Е̄" # CYRILLIC CAPITAL LETTER IE WITH COMBINING MACRON
+
+<dead_circumflex> <Cyrillic_IE> : "Е̂" # CYRILLIC CAPITAL LETTER IE WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_IE> : "Е̂" # CYRILLIC CAPITAL LETTER IE WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_i> : "и̏" # CYRILLIC SMALL LETTER I WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_i> : "и̏" # CYRILLIC SMALL LETTER I WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_i> : "и̑" # CYRILLIC SMALL LETTER I WITH COMBINING INVERTED BREVE
+
+<dead_acute> <Cyrillic_i> : "и́" # CYRILLIC SMALL LETTER I WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_i> : "и́" # CYRILLIC SMALL LETTER I WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_i> : "и́" # CYRILLIC SMALL LETTER I WITH COMBINING ACUTE ACCENT
+
+<dead_circumflex> <Cyrillic_i> : "и̂" # CYRILLIC SMALL LETTER I WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_i> : "и̂" # CYRILLIC SMALL LETTER I WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_I> : "И̏" # CYRILLIC CAPITAL LETTER I WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_I> : "И̏" # CYRILLIC CAPITAL LETTER I WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_I> : "И̑" # CYRILLIC CAPITAL LETTER I WITH COMBINING INVERTED BREVE
+
+<dead_acute> <Cyrillic_I> : "И́" # CYRILLIC CAPITAL LETTER I WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_I> : "И́" # CYRILLIC CAPITAL LETTER I WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_I> : "И́" # CYRILLIC CAPITAL LETTER I WITH COMBINING ACUTE ACCENT
+
+<dead_circumflex> <Cyrillic_I> : "И̂" # CYRILLIC CAPITAL LETTER I WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_I> : "И̂" # CYRILLIC CAPITAL LETTER I WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_o> : "о̏" # CYRILLIC SMALL LETTER O WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_o> : "о̏" # CYRILLIC SMALL LETTER O WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_o> : "о̑" # CYRILLIC SMALL LETTER O WITH COMBINING INVERTED BREVE
+
+<dead_grave> <Cyrillic_o> : "о̀" # CYRILLIC SMALL LETTER O WITH COMBINING GRAVE ACCENT
+<Multi_key> <grave> <Cyrillic_o> : "о̀" # CYRILLIC SMALL LETTER O WITH COMBINING GRAVE ACCENT
+
+<dead_acute> <Cyrillic_o> : "о́" # CYRILLIC SMALL LETTER O WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_o> : "о́" # CYRILLIC SMALL LETTER O WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_o> : "о́" # CYRILLIC SMALL LETTER O WITH COMBINING ACUTE ACCENT
+
+<dead_macron> <Cyrillic_o> : "о̄" # CYRILLIC SMALL LETTER O WITH COMBINING MACRON
+<Multi_key> <macron> <Cyrillic_o> : "о̄" # CYRILLIC SMALL LETTER O WITH COMBINING MACRON
+<Multi_key> <underscore> <Cyrillic_o> : "о̄" # CYRILLIC SMALL LETTER O WITH COMBINING MACRON
+
+<dead_circumflex> <Cyrillic_o> : "о̂" # CYRILLIC SMALL LETTER O WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_o> : "о̂" # CYRILLIC SMALL LETTER O WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_O> : "О̏" # CYRILLIC CAPITAL LETTER O WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_O> : "О̏" # CYRILLIC CAPITAL LETTER O WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_O> : "О̑" # CYRILLIC CAPITAL LETTER O WITH COMBINING INVERTED BREVE
+
+<dead_grave> <Cyrillic_O> : "О̀" # CYRILLIC CAPITAL LETTER O WITH COMBINING GRAVE ACCENT
+<Multi_key> <grave> <Cyrillic_O> : "О̀" # CYRILLIC CAPITAL LETTER O WITH COMBINING GRAVE ACCENT
+
+<dead_acute> <Cyrillic_O> : "О́" # CYRILLIC CAPITAL LETTER O WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_O> : "О́" # CYRILLIC CAPITAL LETTER O WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_O> : "О́" # CYRILLIC CAPITAL LETTER O WITH COMBINING ACUTE ACCENT
+
+<dead_macron> <Cyrillic_O> : "О̄" # CYRILLIC CAPITAL LETTER O WITH COMBINING MACRON
+<Multi_key> <macron> <Cyrillic_O> : "О̄" # CYRILLIC CAPITAL LETTER O WITH COMBINING MACRON
+<Multi_key> <underscore> <Cyrillic_O> : "О̄" # CYRILLIC CAPITAL LETTER O WITH COMBINING MACRON
+
+<dead_circumflex> <Cyrillic_O> : "О̂" # CYRILLIC CAPITAL LETTER O WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_O> : "О̂" # CYRILLIC CAPITAL LETTER O WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_u> : "у̏" # CYRILLIC SMALL LETTER U WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_u> : "у̏" # CYRILLIC SMALL LETTER U WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_u> : "у̑" # CYRILLIC SMALL LETTER U WITH COMBINING INVERTED BREVE
+
+<dead_grave> <Cyrillic_u> : "у̀" # CYRILLIC SMALL LETTER U WITH COMBINING GRAVE ACCENT
+<Multi_key> <grave> <Cyrillic_u> : "у̀" # CYRILLIC SMALL LETTER U WITH COMBINING GRAVE ACCENT
+
+<dead_acute> <Cyrillic_u> : "у́" # CYRILLIC SMALL LETTER U WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_u> : "у́" # CYRILLIC SMALL LETTER U WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_u> : "у́" # CYRILLIC SMALL LETTER U WITH COMBINING ACUTE ACCENT
+
+<dead_circumflex> <Cyrillic_u> : "у̂" # CYRILLIC SMALL LETTER U WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_u> : "у̂" # CYRILLIC SMALL LETTER U WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_U> : "У̏" # CYRILLIC CAPITAL LETTER U WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_U> : "У̏" # CYRILLIC CAPITAL LETTER U WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_U> : "У̑" # CYRILLIC CAPITAL LETTER U WITH COMBINING INVERTED BREVE
+
+<dead_grave> <Cyrillic_U> : "У̀" # CYRILLIC CAPITAL LETTER U WITH COMBINING GRAVE ACCENT
+<Multi_key> <grave> <Cyrillic_U> : "У̀" # CYRILLIC CAPITAL LETTER U WITH COMBINING GRAVE ACCENT
+
+<dead_acute> <Cyrillic_U> : "У́" # CYRILLIC CAPITAL LETTER U WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_U> : "У́" # CYRILLIC CAPITAL LETTER U WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_U> : "У́" # CYRILLIC CAPITAL LETTER U WITH COMBINING ACUTE ACCENT
+
+<dead_circumflex> <Cyrillic_U> : "У̂" # CYRILLIC CAPITAL LETTER U WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_U> : "У̂" # CYRILLIC CAPITAL LETTER U WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_er> : "р̏" # CYRILLIC SMALL LETTER ER WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_er> : "р̏" # CYRILLIC SMALL LETTER ER WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_er> : "р̑" # CYRILLIC SMALL LETTER ER WITH COMBINING INVERTED BREVE
+
+<dead_grave> <Cyrillic_er> : "р̀" # CYRILLIC SMALL LETTER ER WITH COMBINING GRAVE ACCENT
+<Multi_key> <grave> <Cyrillic_er> : "р̀" # CYRILLIC SMALL LETTER ER WITH COMBINING GRAVE ACCENT
+
+<dead_acute> <Cyrillic_er> : "р́" # CYRILLIC SMALL LETTER ER WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_er> : "р́" # CYRILLIC SMALL LETTER ER WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_er> : "р́" # CYRILLIC SMALL LETTER ER WITH COMBINING ACUTE ACCENT
+
+<dead_macron> <Cyrillic_er> : "р̄" # CYRILLIC SMALL LETTER ER WITH COMBINING MACRON
+<Multi_key> <macron> <Cyrillic_er> : "р̄" # CYRILLIC SMALL LETTER ER WITH COMBINING MACRON
+<Multi_key> <underscore> <Cyrillic_er> : "р̄" # CYRILLIC SMALL LETTER ER WITH COMBINING MACRON
+
+<dead_circumflex> <Cyrillic_er> : "р̂" # CYRILLIC SMALL LETTER ER WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_er> : "р̂" # CYRILLIC SMALL LETTER ER WITH COMBINING CIRCUMFLEX ACCENT
+
+<dead_doublegrave> <Cyrillic_ER> : "Р̏" # CYRILLIC CAPITAL LETTER ER WITH COMBINING DOUBLE GRAVE ACCENT
+<Multi_key> <grave> <grave> <Cyrillic_ER> : "Р̏" # CYRILLIC CAPITAL LETTER ER WITH COMBINING DOUBLE GRAVE ACCENT
+
+<dead_invertedbreve> <Cyrillic_ER> : "Р̑" # CYRILLIC CAPITAL LETTER ER WITH COMBINING INVERTED BREVE
+
+<dead_grave> <Cyrillic_ER> : "Р̀" # CYRILLIC CAPITAL LETTER ER WITH COMBINING GRAVE ACCENT
+<Multi_key> <grave> <Cyrillic_ER> : "Р̀" # CYRILLIC CAPITAL LETTER ER WITH COMBINING GRAVE ACCENT
+
+<dead_acute> <Cyrillic_ER> : "Р́" # CYRILLIC CAPITAL LETTER ER WITH COMBINING ACUTE ACCENT
+<Multi_key> <acute> <Cyrillic_ER> : "Р́" # CYRILLIC CAPITAL LETTER ER WITH COMBINING ACUTE ACCENT
+<Multi_key> <apostrophe> <Cyrillic_ER> : "Р́" # CYRILLIC CAPITAL LETTER ER WITH COMBINING ACUTE ACCENT
+
+<dead_macron> <Cyrillic_ER> : "Р̄" # CYRILLIC CAPITAL LETTER ER WITH COMBINING MACRON
+<Multi_key> <macron> <Cyrillic_ER> : "Р̄" # CYRILLIC CAPITAL LETTER ER WITH COMBINING MACRON
+<Multi_key> <underscore> <Cyrillic_ER> : "Р̄" # CYRILLIC CAPITAL LETTER ER WITH COMBINING MACRON
+
+<dead_circumflex> <Cyrillic_ER> : "Р̂" # CYRILLIC CAPITAL LETTER ER WITH COMBINING CIRCUMFLEX ACCENT
+<Multi_key> <asciicircum> <Cyrillic_ER> : "Р̂" # CYRILLIC CAPITAL LETTER ER WITH COMBINING CIRCUMFLEX ACCENT
+
+<Multi_key> <backslash> <o> <slash> : "🙌" # PERSON RAISING BOTH HANDS IN CELEBRATION
+
+# APL support Geoff Streeter 2012-01-04
+
+# APL was initially an overstruck language. The original APL terminal was an IBM golfball
+# with a specially designed golfball. This meant that characters could be overstruck to
+# produce other characters. This gave APL a richness of primitives which is still powerful
+# today. Overstrikes were always independent of order.
+
+# APLs have extended this into a number of dialects. Let us try to support lots of them.
+# Together with some that have not been used yet. Some traditional ones are not included.
+
+# Characters from "Mathematical Operators"
+
+<Multi_key> <v> <slash> : "√" U221a # v / SQUARE ROOT
+<Multi_key> <slash> <v> : "√" U221a # / v SQUARE ROOT
+<Multi_key> <8> <8> : "∞" U221e # 8 8 INFINITY
+<Multi_key> <equal> <underscore> : "≡" U2261 # = _ IDENTICAL TO
+<Multi_key> <underscore> <U2260> : "≢" U2262 # _ ≠ NOT IDENTICAL TO
+<Multi_key> <U2260> <underscore> : "≢" U2262 # ≠ _ NOT IDENTICAL TO
+<Multi_key> <less> <underscore> : "≤" U2264 # < _ LESS-THAN OR EQUAL TO
+<Multi_key> <underscore> <less> : "≤" U2264 # _ < LESS-THAN OR EQUAL TO
+<Multi_key> <greater> <underscore> : "≥" U2265 # > _ GREATER-THAN OR EQUAL TO
+<Multi_key> <underscore> <greater> : "≥" U2265 # _ > GREATER-THAN OR EQUAL TO
+<Multi_key> <underscore> <U2282> : "⊆" U2286 # _ ⊂ SUBSET OF OR EQUAL TO
+<Multi_key> <U2282> <underscore> : "⊆" U2286 # ⊂ _ SUBSET OF OR EQUAL TO
+<Multi_key> <underscore> <U2283> : "⊇" U2287 # _ ⊃ SUPERSET OF OR EQUAL TO
+<Multi_key> <U2283> <underscore> : "⊇" U2287 # ⊃ _ SUPERSET OF OR EQUAL TO
+<Multi_key> <U25cb> <minus> : "⊖" U2296 # ○ - CIRCLED MINUS
+<Multi_key> <minus> <U25cb> : "⊖" U2296 # - ○ CIRCLED MINUS
+<Multi_key> <U25cb> <period> : "⊙" U2299 # ○ - CIRCLED DOT
+<Multi_key> <period> <U25cb> : "⊙" U2299 # - ○ CIRCLED DOT
+<Multi_key> <less> <greater> : "⋄" U22c4 # < > DIAMOND OPERATOR
+<Multi_key> <greater> <less> : "⋄" U22c4 # > < DIAMOND OPERATOR
+<Multi_key> <U2227> <U2228> : "⋄" U22c4 # ∧ ∨ DIAMOND OPERATOR
+<Multi_key> <U2228> <U2227> : "⋄" U22c4 # ∨ ∧ DIAMOND OPERATOR
+<Multi_key> <colon> <period> : "∴" therefore # THEREFORE
+<Multi_key> <period> <colon> : "∵" because # BECAUSE
+
+# Characters from "Miscellaneous Technical"
+
+<Multi_key> <U22a5> <U22a4> : "⌶" U2336 # ⊥ ⊤ APL FUNCTIONAL SYMBOL I-BEAM
+<Multi_key> <U22a4> <U22a5> : "⌶" U2336 # ⊥ ⊤ APL FUNCTIONAL SYMBOL I-BEAM
+<Multi_key> <bracketleft> <bracketright> : "⌷" U2337 # [ ] APL FUNCTIONAL SYMBOL SQUISH QUAD
+<Multi_key> <bracketright> <bracketleft> : "⌷" U2337 # ] [ APL FUNCTIONAL SYMBOL SQUISH QUAD
+<Multi_key> <U2395> <equal> : "⌸" U2338 # ⎕ = APL FUNCTIONAL SYMBOL QUAD EQUAL
+<Multi_key> <equal> <U2395> : "⌸" U2338 # = ⎕ APL FUNCTIONAL SYMBOL QUAD EQUAL
+<Multi_key> <U2395> <division> : "⌹" U2339 # ⎕ ÷ APL FUNCTIONAL SYMBOL QUAD DIVIDE
+<Multi_key> <division> <U2395> : "⌹" U2339 # ÷ ⎕ APL FUNCTIONAL SYMBOL QUAD DIVIDE
+<Multi_key> <U2395> <U22c4> : "⌺" U233a # ⎕ ⋄ APL FUNCTIONAL SYMBOL QUAD DIAMOND
+<Multi_key> <U22c4> <U2395> : "⌺" U233a # ⋄ ⎕ APL FUNCTIONAL SYMBOL QUAD DIAMOND
+<Multi_key> <U2395> <U2218> : "⌻" U233b # ⎕ ∘ APL FUNCTIONAL SYMBOL QUAD JOT
+<Multi_key> <U2218> <U2395> : "⌻" U233b # ∘ ⎕ APL FUNCTIONAL SYMBOL QUAD JOT
+<Multi_key> <U2395> <U25cb> : "⌼" U233c # ⎕ ○ APL FUNCTIONAL SYMBOL QUAD CIRCLE
+<Multi_key> <U25cb> <U2395> : "⌼" U233c # ○ ⎕ APL FUNCTIONAL SYMBOL QUAD CIRCLE
+<Multi_key> <U25cb> <bar> : "⌽" U233d # ○ | APL FUNCTIONAL SYMBOL CIRCLE STILE
+<Multi_key> <bar> <U25cb> : "⌽" U233d # | ○ APL FUNCTIONAL SYMBOL CIRCLE STILE
+<Multi_key> <U25cb> <U2218> : "⌾" U233e # ○ ∘ APL FUNCTIONAL SYMBOL CIRCLE JOT
+<Multi_key> <U2218> <U25cb> : "⌾" U233e # ∘ ○ APL FUNCTIONAL SYMBOL CIRCLE JOT
+<Multi_key> <slash> <minus> : "⌿" U233f # / - APL FUNCTIONAL SYMBOL SLASH BAR
+<Multi_key> <minus> <slash> : "⌿" U233f # - / APL FUNCTIONAL SYMBOL SLASH BAR
+<Multi_key> <backslash> <minus> : "⍀" U2340 # \ - APL FUNCTIONAL SYMBOL BACKSLASH BAR
+<Multi_key> <minus> <backslash> : "⍀" U2340 # - \ APL FUNCTIONAL SYMBOL BACKSLASH BAR
+<Multi_key> <slash> <U2395> : "⍁" U2341 # / ⎕ APL FUNCTIONAL SYMBOL QUAD SLASH
+<Multi_key> <U2395> <slash> : "⍁" U2341 # ⎕ / APL FUNCTIONAL SYMBOL QUAD SLASH
+<Multi_key> <backslash> <U2395> : "⍂" U2342 # \ ⎕ APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+<Multi_key> <U2395> <backslash> : "⍂" U2342 # ⎕ \ APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+<Multi_key> <less> <U2395> : "⍃" U2343 # < ⎕ APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+<Multi_key> <U2395> <less> : "⍃" U2343 # ⎕ < APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+<Multi_key> <greater> <U2395> : "⍄" U2344 # > ⎕ APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+<Multi_key> <U2395> <greater> : "⍄" U2344 # ⎕ > APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+<Multi_key> <U2190> <bar> : "⍅" U2345 # ← | APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+<Multi_key> <bar> <U2190> : "⍅" U2345 # | ← APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+<Multi_key> <U2192> <bar> : "⍆" U2346 # → | APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+<Multi_key> <bar> <U2192> : "⍆" U2346 # | → APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+<Multi_key> <U2190> <U2395> : "⍇" U2347 # ← ⎕ APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+<Multi_key> <U2395> <U2190> : "⍇" U2347 # ⎕ ← APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+<Multi_key> <U2192> <U2395> : "⍈" U2348 # → ⎕ APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+<Multi_key> <U2395> <U2192> : "⍈" U2348 # ⎕ → APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+<Multi_key> <U25cb> <backslash> : "⍉" U2349 # ○ \ APL FUNCTIONAL SYMBOL CIRCLE SLOPE
+<Multi_key> <backslash> <U25cb> : "⍉" U2349 # \ ○ APL FUNCTIONAL SYMBOL CIRCLE SLOPE
+<Multi_key> <underscore> <U22a5> : "⍊" U234a # _ ⊥ APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+<Multi_key> <U22a5> <underscore> : "⍊" U234a # ⊥ _ APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+<Multi_key> <U2206> <bar> : "⍋" U234b # ∆ | APL FUNCTIONAL SYMBOL DELTA STILE
+<Multi_key> <bar> <U2206> : "⍋" U234b # | ∆ APL FUNCTIONAL SYMBOL DELTA STILE
+<Multi_key> <U2228> <U2395> : "⍌" U234c # ∨ ⎕ APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+<Multi_key> <U2395> <U2228> : "⍌" U234c # ⎕ ∨ APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+<Multi_key> <U2206> <U2395> : "⍍" U234d # ∆ ⎕ APL FUNCTIONAL SYMBOL QUAD DELTA
+<Multi_key> <U2395> <U2206> : "⍍" U234d # ⎕ ∆ APL FUNCTIONAL SYMBOL QUAD DELTA
+<Multi_key> <U2218> <U22a5> : "⍎" U234e # ∘ ⊥ APL FUNCTIONAL SYMBOL DOWN TACK JOT
+<Multi_key> <U22a5> <U2218> : "⍎" U234e # ⊥ ∘ APL FUNCTIONAL SYMBOL DOWN TACK JOT
+<Multi_key> <U2191> <minus> : "⍏" U234f # ↑ - APL FUNCTIONAL SYMBOL UPWARDS VANE
+<Multi_key> <minus> <U2191> : "⍏" U234f # - ↑ APL FUNCTIONAL SYMBOL UPWARDS VANE
+<Multi_key> <U2191> <U2395> : "⍐" U2350 # ↑ ⎕ APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+<Multi_key> <U2395> <U2191> : "⍐" U2350 # ⎕ ↑ APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+# I cannot get anything to work with <macron>. Given that no extant APLs use ⍑ I will just leave the lines
+# in place.
+<Multi_key> <macron> <U22a4> : "⍑" U2351 # ¯ ⊤ APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+<Multi_key> <U22a4> <macron> : "⍑" U2351 # ⊤ ¯ APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+<Multi_key> <U2207> <bar> : "⍒" U2352 # ∇ | APL FUNCTIONAL SYMBOL DEL STILE
+<Multi_key> <bar> <U2207> : "⍒" U2352 # | ∇ APL FUNCTIONAL SYMBOL DEL STILE
+<Multi_key> <U2227> <U2395> : "⍓" U2353 # ∧ ⎕ APL FUNCTIONAL SYMBOL QUAD UP CARET
+<Multi_key> <U2395> <U2227> : "⍓" U2353 # ⎕ ∧ APL FUNCTIONAL SYMBOL QUAD UP CARET
+<Multi_key> <U2207> <U2395> : "⍔" U2354 # ∇ ⎕ APL FUNCTIONAL SYMBOL QUAD DEL
+<Multi_key> <U2395> <U2207> : "⍔" U2354 # ⎕ ∇ APL FUNCTIONAL SYMBOL QUAD DEL
+<Multi_key> <U2218> <U22a4> : "⍕" U2355 # ∘ ⊤ APL FUNCTIONAL SYMBOL UP TACK JOT
+<Multi_key> <U22a4> <U2218> : "⍕" U2355 # ⊤ ∘ APL FUNCTIONAL SYMBOL UP TACK JOT
+<Multi_key> <U2193> <minus> : "⍖" U2356 # ↓ - APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+<Multi_key> <minus> <U2193> : "⍖" U2356 # - ↓ APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+<Multi_key> <U2193> <U2395> : "⍗" U2357 # ↓ ⎕ APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+<Multi_key> <U2395> <U2193> : "⍗" U2357 # ⎕ ↓ APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+# This line clashes with the <apostrophe> <underscore> <E> (and similar) that appear to be there to provide
+# a work around for the problems with <macron>. Or to cope with keyboards that do not have <macron> (more likely).
+# All APL keyboards have <macron>, it is used as the -ve sign for numbers.
+# I do not know of an extant APL using ⍘
+<Multi_key> <underscore> <apostrophe> : "⍘" U2358 # _ ' APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+<Multi_key> <U2206> <underscore> : "⍙" U2359 # ∆ _ APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+<Multi_key> <underscore> <U2206> : "⍙" U2359 # _ ∆ APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+<Multi_key> <U22c4> <underscore> : "⍚" U235a # ⋄ _ APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+<Multi_key> <underscore> <U22c4> : "⍚" U235a # _ ⋄ APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+<Multi_key> <U2218> <underscore> : "⍛" U235b # ∘ _ APL FUNCTIONAL SYMBOL JOT UNDERBAR
+<Multi_key> <underscore> <U2218> : "⍛" U235b # _ ∘ APL FUNCTIONAL SYMBOL JOT UNDERBAR
+<Multi_key> <U25cb> <underscore> : "⍜" U235c # ○ _ APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+<Multi_key> <underscore> <U25cb> : "⍜" U235c # _ ○ APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+<Multi_key> <U2218> <U2229> : "⍝" U235d # ∘ ∩ APL FUNCTIONAL SYMBOL UP SHOE JOT
+<Multi_key> <U2229> <U2218> : "⍝" U235d # ∩ ∘ APL FUNCTIONAL SYMBOL UP SHOE JOT
+<Multi_key> <U2395> <apostrophe> : "⍞" U235e # * ¨ APL FUNCTIONAL SYMBOL QUOTE QUAD
+<Multi_key> <apostrophe> <U2395> : "⍞" U235e # ¨ * APL FUNCTIONAL SYMBOL QUOTE QUAD
+<Multi_key> <U25cb> <asterisk> : "⍟" U235f # ○ * APL FUNCTIONAL SYMBOL CIRCLE STAR
+<Multi_key> <asterisk> <U25cb> : "⍟" U235f # * ○ APL FUNCTIONAL SYMBOL CIRCLE STAR
+<Multi_key> <colon> <U2395> : "⍠" U2360 # : ⎕ APL FUNCTIONAL SYMBOL QUAD COLON
+<Multi_key> <U2395> <colon> : "⍠" U2360 # ⎕ : APL FUNCTIONAL SYMBOL QUAD COLON
+<Multi_key> <diaeresis> <U22a4> : "⍡" U2361 # ¨ ⊤ APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+<Multi_key> <U22a4> <diaeresis> : "⍡" U2361 # ⊤ ¨ APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+<Multi_key> <diaeresis> <U2207> : "⍢" U2362 # ¨ ∇ APL FUNCTIONAL SYMBOL DEL DIAERESIS
+<Multi_key> <U2207> <diaeresis> : "⍢" U2362 # ∇ ¨ APL FUNCTIONAL SYMBOL DEL DIAERESIS
+<Multi_key> <asterisk> <diaeresis> : "⍣" U2363 # * ¨ APL FUNCTIONAL SYMBOL STAR DIAERESIS
+<Multi_key> <diaeresis> <asterisk> : "⍣" U2363 # ¨ * APL FUNCTIONAL SYMBOL STAR DIAERESIS
+<Multi_key> <U2218> <diaeresis> : "⍤" U2364 # ∘ ¨ APL FUNCTIONAL SYMBOL JOT DIAERESIS
+<Multi_key> <diaeresis> <U2218> : "⍤" U2364 # ¨ ∘ APL FUNCTIONAL SYMBOL JOT DIAERESIS
+<Multi_key> <U25cb> <diaeresis> : "⍥" U2365 # ○ ¨ APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+<Multi_key> <diaeresis> <U25cb> : "⍥" U2365 # ¨ ○ APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+<Multi_key> <U222a> <bar> : "⍦" U2366 # ∪ | APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+<Multi_key> <bar> <U222a> : "⍦" U2366 # | ∪ APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+<Multi_key> <U2282> <bar> : "⍧" U2367 # ⊂ | APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+<Multi_key> <bar> <U2282> : "⍧" U2367 # | ⊂ APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+<Multi_key> <asciitilde> <diaeresis> : "⍨" U2368 # ~ ¨ APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+<Multi_key> <diaeresis> <greater> : "⍩" U2369 # ¨ > APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+<Multi_key> <greater> <diaeresis> : "⍩" U2369 # > ¨ APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+<Multi_key> <U2207> <asciitilde> : "⍫" U236b # ∇ ~ APL FUNCTIONAL SYMBOL DEL TILDE
+<Multi_key> <asciitilde> <U2207> : "⍫" U236b # ~ ∇ APL FUNCTIONAL SYMBOL DEL TILDE
+<Multi_key> <0> <asciitilde> : "⍬" U236c # 0 ~ APL FUNCTIONAL SYMBOL ZILDE
+<Multi_key> <asciitilde> <0> : "⍬" U236c # ~ 0 APL FUNCTIONAL SYMBOL ZILDE
+<Multi_key> <bar> <asciitilde> : "⍭" U236d # | ~ APL FUNCTIONAL SYMBOL STILE TILDE
+<Multi_key> <asciitilde> <bar> : "⍭" U236d # ~ | APL FUNCTIONAL SYMBOL STILE TILDE
+# This line does not work. It clashes with
+# <underscore> <semicolon> <O> for Ǭ and
+# <underscore> <semicolon> <o> for ǭ.
+# Given that no extant APLs use ⍮ I will just leave the line in place.
+<Multi_key> <semicolon> <underscore> : "⍮" U236e # ; _ APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+<Multi_key> <U2260> <U2395> : "⍯" U236f # ≠ ⎕ APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+<Multi_key> <U2395> <U2260> : "⍯" U236f # ⎕ ≠ APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+<Multi_key> <question> <U2395> : "⍰" U2370 # ? ⎕ APL FUNCTIONAL SYMBOL QUAD QUESTION
+<Multi_key> <U2395> <question> : "⍰" U2370 # ⎕ ? APL FUNCTIONAL SYMBOL QUAD QUESTION
+<Multi_key> <U2228> <asciitilde> : "⍱" U2371 # ∨ ~ APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+<Multi_key> <asciitilde> <U2228> : "⍱" U2371 # ~ ∨ APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+<Multi_key> <U2227> <asciitilde> : "⍲" U2372 # ∧ ~ APL FUNCTIONAL SYMBOL UP CARET TILDE
+<Multi_key> <asciitilde> <U2227> : "⍲" U2372 # ~ ∧ APL FUNCTIONAL SYMBOL UP CARET TILDE
+<Multi_key> <U237a> <underscore> : "⍶" U2376 # ⍺ _ APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+<Multi_key> <underscore> <U237a> : "⍶" U2376 # _ ⍺ APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+<Multi_key> <U220a> <underscore> : "⍷" U2377 # ∊ _ APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+<Multi_key> <underscore> <U220a> : "⍷" U2377 # _ ∊ APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+<Multi_key> <U2373> <underscore> : "⍸" U2378 # ⍳ _ APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+<Multi_key> <underscore> <U2373> : "⍸" U2378 # _ ⍳ APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+<Multi_key> <U2375> <underscore> : "⍹" U2379 # ⍵ _ APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+<Multi_key> <underscore> <U2375> : "⍹" U2379 # _ ⍵ APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
diff --git a/test/data/locale/locale.alias b/test/data/locale/locale.alias
new file mode 100644
index 0000000..03cd99c
--- /dev/null
+++ b/test/data/locale/locale.alias
@@ -0,0 +1,2482 @@
+#
+# This file contains alias names of locales.
+# Each alias name is described within one line.
+# The first word is the alias name (simplified locale name),
+# the second word is the full locale name.
+#
+#
+POSIX C
+POSIX-UTF2 C
+C_C.C C
+C.en C
+C.ASCII C
+C.iso88591 en_US.ISO8859-1
+Cextend en_US.ISO8859-1
+Cextend.en en_US.ISO8859-1
+English_United-States.437 C
+C.UTF-8 en_US.UTF-8
+# a3 is not an ISO 639 language code, but in Cyrillic, "Z" looks like "3".
+a3 az_AZ.KOI8-C
+a3_AZ az_AZ.KOI8-C
+a3_AZ.koi8c az_AZ.KOI8-C
+a3_AZ.KOI-C az_AZ.KOI8-C
+a3_AZ.UTF-8 az_AZ.UTF-8
+af af_ZA.ISO8859-1
+af_ZA af_ZA.ISO8859-1
+af_ZA.iso88591 af_ZA.ISO8859-1
+af_ZA.ISO-8859-1 af_ZA.ISO8859-1
+af_ZA.utf8 af_ZA.UTF-8
+am am_ET.UTF-8
+am_ET am_ET.UTF-8
+ar ar_AA.ISO8859-6
+ar_AA ar_AA.ISO8859-6
+AR_AA ar_AA.ISO8859-6
+Ar_AA ar_AA.ISO8859-6
+AR_AA.UTF-8 ar_AA.UTF-8
+ar_AA.iso88596 ar_AA.ISO8859-6
+ar_AA.ISO-8859-6 ar_AA.ISO8859-6
+ar_AE ar_AE.ISO8859-6
+ar_AE.iso88596 ar_AE.ISO8859-6
+ar_AE.ISO-8859-6 ar_AE.ISO8859-6
+ar_AE.utf8 ar_AE.UTF-8
+ar_BH ar_BH.ISO8859-6
+ar_BH.iso88596 ar_BH.ISO8859-6
+ar_BH.ISO-8859-6 ar_BH.ISO8859-6
+ar_BH.utf8 ar_BH.UTF-8
+ar_DZ ar_DZ.ISO8859-6
+ar_DZ.iso88596 ar_DZ.ISO8859-6
+ar_DZ.ISO-8859-6 ar_DZ.ISO8859-6
+ar_DZ.utf8 ar_DZ.UTF-8
+ar_EG ar_EG.ISO8859-6
+ar_EG.iso88596 ar_EG.ISO8859-6
+ar_EG.ISO-8859-6 ar_EG.ISO8859-6
+ar_EG.utf8 ar_EG.UTF-8
+ar_IN ar_IN.UTF-8
+ar_IN.utf8 ar_IN.UTF-8
+ar_IQ ar_IQ.ISO8859-6
+ar_IQ.iso88596 ar_IQ.ISO8859-6
+ar_IQ.ISO-8859-6 ar_IQ.ISO8859-6
+ar_IQ.utf8 ar_IQ.UTF-8
+ar_JO ar_JO.ISO8859-6
+ar_JO.iso88596 ar_JO.ISO8859-6
+ar_JO.ISO-8859-6 ar_JO.ISO8859-6
+ar_JO.utf8 ar_JO.UTF-8
+ar_KW ar_KW.ISO8859-6
+ar_KW.iso88596 ar_KW.ISO8859-6
+ar_KW.ISO-8859-6 ar_KW.ISO8859-6
+ar_KW.utf8 ar_KW.UTF-8
+ar_LB ar_LB.ISO8859-6
+ar_LB.iso88596 ar_LB.ISO8859-6
+ar_LB.ISO-8859-6 ar_LB.ISO8859-6
+ar_LB.utf8 ar_LB.UTF-8
+ar_LY ar_LY.ISO8859-6
+ar_LY.iso88596 ar_LY.ISO8859-6
+ar_LY.ISO-8859-6 ar_LY.ISO8859-6
+ar_LY.utf8 ar_LY.UTF-8
+ar_MA ar_MA.ISO8859-6
+ar_MA.iso88596 ar_MA.ISO8859-6
+ar_MA.ISO-8859-6 ar_MA.ISO8859-6
+ar_MA.utf8 ar_MA.UTF-8
+ar_OM ar_OM.ISO8859-6
+ar_OM.iso88596 ar_OM.ISO8859-6
+ar_OM.ISO-8859-6 ar_OM.ISO8859-6
+ar_OM.utf8 ar_OM.UTF-8
+ar_QA ar_QA.ISO8859-6
+ar_QA.iso88596 ar_QA.ISO8859-6
+ar_QA.ISO-8859-6 ar_QA.ISO8859-6
+ar_QA.utf8 ar_QA.UTF-8
+ar_SA ar_SA.ISO8859-6
+ar_SA.iso88596 ar_SA.ISO8859-6
+ar_SA.ISO-8859-6 ar_SA.ISO8859-6
+ar_SA.utf8 ar_SA.UTF-8
+ar_SD ar_SD.ISO8859-6
+ar_SD.iso88596 ar_SD.ISO8859-6
+ar_SD.ISO-8859-6 ar_SD.ISO8859-6
+ar_SD.utf8 ar_SD.UTF-8
+ar_SY ar_SY.ISO8859-6
+ar_SY.iso88596 ar_SY.ISO8859-6
+ar_SY.ISO-8859-6 ar_SY.ISO8859-6
+ar_SY.utf8 ar_SY.UTF-8
+ar_TN ar_TN.ISO8859-6
+ar_TN.iso88596 ar_TN.ISO8859-6
+ar_TN.ISO-8859-6 ar_TN.ISO8859-6
+ar_TN.utf8 ar_TN.UTF-8
+as as_IN.UTF-8
+as_IN as_IN.UTF-8
+as_IN.utf8 as_IN.UTF-8
+ar_YE ar_YE.ISO8859-6
+ar_YE.iso88596 ar_YE.ISO8859-6
+ar_YE.ISO-8859-6 ar_YE.ISO8859-6
+ar_YE.utf8 ar_YE.UTF-8
+az az_AZ.ISO8859-9E
+az_AZ az_AZ.ISO8859-9E
+az_AZ.iso88599e az_AZ.ISO8859-9E
+be be_BY.CP1251
+be@latin be_BY.UTF-8@latin
+be_BY be_BY.CP1251
+be_BY@latin be_BY.UTF-8@latin
+be_BY.cp1251 be_BY.CP1251
+be_BY.microsoftcp1251 be_BY.CP1251
+be_BY.microsoft-cp1251 be_BY.CP1251
+be_BY.MICROSOFT-CP1251 be_BY.CP1251
+be_BY.utf8 be_BY.UTF-8
+be_BY.utf8@latin be_BY.UTF-8@latin
+bg bg_BG.CP1251
+bg_BG bg_BG.CP1251
+bg_BG.cp1251 bg_BG.CP1251
+bg_BG.microsoftcp1251 bg_BG.CP1251
+bg_BG.microsoft-cp1251 bg_BG.CP1251
+bg_BG.MICROSOFT-CP1251 bg_BG.CP1251
+bg_BG.iso88595 bg_BG.ISO8859-5
+bg_BG.ISO-8859-5 bg_BG.ISO8859-5
+bg_BG.koi8r bg_BG.KOI8-R
+be_BG.utf8 bg_BG.UTF-8
+bn_IN bn_IN.UTF-8
+bn_IN.utf8 bn_IN.UTF-8
+bo_IN bo_IN.UTF-8
+bo_IN.utf8 bo_IN.UTF-8
+br br_FR.ISO8859-1
+br_FR br_FR.ISO8859-1
+br_FR.iso88591 br_FR.ISO8859-1
+br_FR.ISO-8859-1 br_FR.ISO8859-1
+br_FR.iso885914 br_FR.ISO8859-14
+br_FR.ISO-8859-14 br_FR.ISO8859-14
+br_FR.iso885915 br_FR.ISO8859-15
+br_FR.ISO-8859-15 br_FR.ISO8859-15
+br_FR.ISO-8859-15@euro br_FR.ISO8859-15
+br_FR@euro br_FR.ISO8859-15
+br_FR.UTF-8@euro br_FR.UTF-8
+bs bs_BA.ISO8859-2
+bs_BA bs_BA.ISO8859-2
+bs_BA.iso88592 bs_BA.ISO8859-2
+bs_BA.ISO-8859-2 bs_BA.ISO8859-2
+bs_BA.ISO_8859-2 bs_BA.ISO8859-2
+ca ca_ES.ISO8859-1
+ca_AD ca_AD.ISO8859-1
+ca_AD@euro ca_AD.ISO8859-15
+ca_AD.iso88591 ca_AD.ISO8859-1
+ca_AD.ISO-8859-1 ca_AD.ISO8859-1
+ca_AD.iso885915 ca_AD.ISO8859-15
+ca_AD.utf8 ca_AD.UTF-8
+ca_AD.ISO-8859-15 ca_AD.ISO8859-15
+ca_AD.ISO-8859-15@euro ca_AD.ISO8859-15
+ca_AD.UTF-8@euro ca_AD.UTF-8
+ca_ES ca_ES.ISO8859-1
+ca_ES@euro ca_ES.ISO8859-15
+ca_ES.iso88591 ca_ES.ISO8859-1
+ca_ES.ISO-8859-1 ca_ES.ISO8859-1
+ca_ES.iso885915 ca_ES.ISO8859-15
+ca_ES.utf8 ca_ES.UTF-8
+ca_ES.ISO-8859-15 ca_ES.ISO8859-15
+ca_ES.ISO-8859-15@euro ca_ES.ISO8859-15
+ca_ES.UTF-8@euro ca_ES.UTF-8
+ca_FR ca_FR.ISO8859-1
+ca_FR@euro ca_FR.ISO8859-15
+ca_FR.iso88591 ca_FR.ISO8859-1
+ca_FR.ISO-8859-1 ca_FR.ISO8859-1
+ca_FR.iso885915 ca_FR.ISO8859-15
+ca_FR.utf8 ca_FR.UTF-8
+ca_FR.ISO-8859-15 ca_FR.ISO8859-15
+ca_FR.ISO-8859-15@euro ca_FR.ISO8859-15
+ca_FR.UTF-8@euro ca_FR.UTF-8
+ca_IT ca_IT.ISO8859-1
+ca_IT@euro ca_IT.ISO8859-15
+ca_IT.iso88591 ca_IT.ISO8859-1
+ca_IT.ISO-8859-1 ca_IT.ISO8859-1
+ca_IT.iso885915 ca_IT.ISO8859-15
+ca_IT.utf8 ca_IT.UTF-8
+ca_IT.ISO-8859-15 ca_IT.ISO8859-15
+ca_IT.ISO-8859-15@euro ca_IT.ISO8859-15
+ca_IT.UTF-8@euro ca_IT.UTF-8
+cs cs_CZ.ISO8859-2
+cs_CS cs_CZ.ISO8859-2
+cs_CS.ISO8859-2 cs_CZ.ISO8859-2
+cs_CZ cs_CZ.ISO8859-2
+cs_CZ.iso88592 cs_CZ.ISO8859-2
+cs_CS.iso8859-2 cs_CZ.ISO8859-2
+cs_CZ.ISO-8859-2 cs_CZ.ISO8859-2
+cs_CZ.ISO_8859-2 cs_CZ.ISO8859-2
+cs_CZ.utf8 cs_CZ.UTF-8
+cy cy_GB.ISO8859-1
+cy_GB cy_GB.ISO8859-1
+cy_GB.iso88591 cy_GB.ISO8859-1
+cy_GB.ISO-8859-1 cy_GB.ISO8859-1
+cy_GB.iso885914 cy_GB.ISO8859-14
+cy_GB.ISO-8859-14 cy_GB.ISO8859-14
+cy_GB.iso885915 cy_GB.ISO8859-15
+cy_GB.ISO-8859-15 cy_GB.ISO8859-15
+da da_DK.ISO8859-1
+da.ISO8859-15 da_DK.ISO8859-15
+da_DK da_DK.ISO8859-1
+DA_DK da_DK.ISO8859-1
+da_DK.88591 da_DK.ISO8859-1
+da_DK.88591.en da_DK.ISO8859-1
+da_DK.iso88591 da_DK.ISO8859-1
+da_DK.ISO-8859-1 da_DK.ISO8859-1
+da_DK.ISO_8859-1 da_DK.ISO8859-1
+da_DK.iso885915 da_DK.ISO8859-15
+da_DK.ISO-8859-15 da_DK.ISO8859-15
+da_DK.8859-15 da_DK.ISO8859-15
+da_DK.utf8 da_DK.UTF-8
+DA_DK.UTF-8 da_DK.UTF-8
+de de_DE.ISO8859-1
+de.ISO8859-15 de_DE.ISO8859-15
+de_AT de_AT.ISO8859-1
+de_AT@euro de_AT.ISO8859-15
+de_AT.iso88591 de_AT.ISO8859-1
+de_AT.ISO-8859-1 de_AT.ISO8859-1
+de_AT.ISO_8859-1 de_AT.ISO8859-1
+de_AT.iso885915 de_AT.ISO8859-15
+de_AT.ISO-8859-15 de_AT.ISO8859-15
+de_AT.ISO-8859-15@euro de_AT.ISO8859-15
+de_AT.UTF-8@euro de_AT.UTF-8
+de_AT.utf8 de_AT.UTF-8
+de_BE de_BE.ISO8859-1
+de_BE@euro de_BE.ISO8859-15
+de_BE.iso88591 de_BE.ISO8859-1
+de_BE.ISO_8859-1 de_BE.ISO8859-1
+de_BE.ISO-8859-1 de_BE.ISO8859-1
+de_BE.iso885915 de_BE.ISO8859-15
+de_BE.ISO_8859-15 de_BE.ISO8859-15
+de_BE.ISO-8859-15 de_BE.ISO8859-15
+de_BE.ISO-8859-15@euro de_BE.ISO8859-15
+de_BE.UTF-8@euro de_BE.UTF-8
+de_CH de_CH.ISO8859-1
+de_CH.iso88591 de_CH.ISO8859-1
+de_CH.ISO_8859-1 de_CH.ISO8859-1
+de_CH.ISO-8859-1 de_CH.ISO8859-1
+de_CH.iso885915 de_CH.ISO8859-15
+de_CH.ISO_8859-15 de_CH.ISO8859-15
+de_CH.ISO-8859-15 de_CH.ISO8859-15
+de_CH.utf8 de_CH.UTF-8
+de_DE de_DE.ISO8859-1
+de_DE@euro de_DE.ISO8859-15
+de_DE.88591 de_DE.ISO8859-1
+de_DE.88591.en de_DE.ISO8859-1
+de_DE.iso88591 de_DE.ISO8859-1
+de_DE.ISO-8859-1 de_DE.ISO8859-1
+de_DE.ISO_8859-1 de_DE.ISO8859-1
+de_DE.iso885915 de_DE.ISO8859-15
+de_DE.ISO-8859-15 de_DE.ISO8859-15
+de_DE.ISO_8859-15 de_DE.ISO8859-15
+de_DE.8859-15 de_DE.ISO8859-15
+de_DE.8859-15@euro de_DE.ISO8859-15
+de_DE.ISO-8859-15@euro de_DE.ISO8859-15
+de_DE.UTF-8@euro de_DE.UTF-8
+de_DE.utf8 de_DE.UTF-8
+de_IT de_IT.UTF-8
+de_IT.utf8 de_IT.UTF-8
+de_LI de_LI.ISO8859-1
+de_LI.iso88591 de_LI.ISO8859-1
+de_LI.ISO_8859-1 de_LI.ISO8859-1
+de_LI.ISO-8859-1 de_LI.ISO8859-1
+de_LI.iso885915 de_LI.ISO8859-15
+de_LI.ISO_8859-15 de_LI.ISO8859-15
+de_LI.ISO-8859-15 de_LI.ISO8859-15
+de_LI.utf8 de_LI.UTF-8
+de_LU de_LU.ISO8859-1
+de_LU@euro de_LU.ISO8859-15
+de_LU.iso88591 de_LU.ISO8859-1
+de_LU.ISO_8859-1 de_LU.ISO8859-1
+de_LU.ISO-8859-1 de_LU.ISO8859-1
+de_LU.iso885915 de_LU.ISO8859-15
+de_LU.ISO_8859-15 de_LU.ISO8859-15
+de_LU.ISO-8859-15 de_LU.ISO8859-15
+de_LU.ISO-8859-15@euro de_LU.ISO8859-15
+de_LU.UTF-8@euro de_LU.UTF-8
+de_LU.utf8 de_LU.UTF-8
+GER_DE.8859 de_DE.ISO8859-1
+GER_DE.8859.in de_DE.ISO8859-1
+ee ee_EE.ISO8859-4
+ee_EE ee_EE.ISO8859-4
+ee_EE.iso88594 ee_EE.ISO8859-4
+el el_GR.ISO8859-7
+el_GR el_GR.ISO8859-7
+el_GR.iso88597 el_GR.ISO8859-7
+el_GR.ISO-8859-7 el_GR.ISO8859-7
+el_GR@euro el_GR.ISO8859-15
+el_GR.utf8 el_GR.UTF-8
+en en_US.ISO8859-1
+en.ISO-8859-1 en_US.ISO8859-1
+en_AU en_AU.ISO8859-1
+en_AU.iso88591 en_AU.ISO8859-1
+en_AU.ISO-8859-1 en_AU.ISO8859-1
+en_AU.ISO_8859-1 en_AU.ISO8859-1
+en_AU.utf8 en_AU.UTF-8
+en_BE en_BE.ISO8859-1
+en_BE@euro en_BE.ISO8859-15
+en_BE.utf8 en_BE.UTF-8
+en_BW en_BW.ISO8859-1
+en_BW.utf8 en_BW.UTF-8
+en_BW.iso88591 en_BW.ISO8859-1
+en_BW.ISO-8859-1 en_BW.ISO8859-1
+en_CA en_CA.ISO8859-1
+en_CA.iso88591 en_CA.ISO8859-1
+en_CA.ISO-8859-1 en_CA.ISO8859-1
+en_CA.ISO_8859-1 en_CA.ISO8859-1
+en_CA.utf8 en_CA.UTF-8
+en_DL.utf8 en_DL.UTF-8
+en_GB en_GB.ISO8859-1
+en_GB.88591 en_GB.ISO8859-1
+en_GB.88591.en en_GB.ISO8859-1
+en_GB.iso88591 en_GB.ISO8859-1
+en_GB.ISO-8859-1 en_GB.ISO8859-1
+en_GB.ISO_8859-1 en_GB.ISO8859-1
+en_GB.iso885915 en_GB.ISO8859-15
+en_GB.ISO-8859-15 en_GB.ISO8859-15
+en_GB.utf8 en_GB.UTF-8
+en_UK en_GB.ISO8859-1
+ENG_GB.8859 en_GB.ISO8859-1
+ENG_GB.8859.in en_GB.ISO8859-1
+en_HK en_HK.ISO8859-1
+en_HK.iso88591 en_HK.ISO8859-1
+en_HK.ISO-8859-1 en_HK.ISO8859-1
+en_HK.utf8 en_HK.UTF-8
+en_IE en_IE.ISO8859-1
+en_IE.iso88591 en_IE.ISO8859-1
+en_IE.ISO-8859-1 en_IE.ISO8859-1
+en_IE.iso885915 en_IE.ISO8859-15
+en_IE.ISO-8859-15 en_IE.ISO8859-15
+en_IE.ISO-8859-15@euro en_IE.ISO8859-15
+en_IE@euro en_IE.ISO8859-15
+en_IE.UTF-8@euro en_IE.UTF-8
+en_IE.utf8 en_IE.UTF-8
+en_IN.utf8 en_IN.UTF-8
+en_IN en_IN.ISO8859-1
+en_NZ en_NZ.ISO8859-1
+en_NZ.iso88591 en_NZ.ISO8859-1
+en_NZ.ISO-8859-1 en_NZ.ISO8859-1
+en_NZ.utf8 en_NZ.UTF-8
+en_PH en_PH.ISO8859-1
+en_PH.utf8 en_PH.UTF-8
+en_PH.iso88591 en_PH.ISO8859-1
+en_PH.ISO-8859-1 en_PH.ISO8859-1
+en_SG en_SG.ISO8859-1
+en_SG.utf8 en_SG.UTF-8
+en_SG.iso88591 en_SG.ISO8859-1
+en_SG.ISO-8859-1 en_SG.ISO8859-1
+en_US en_US.ISO8859-1
+EN_US en_US.ISO8859-1
+en_US.88591 en_US.ISO8859-1
+en_US.88591.en en_US.ISO8859-1
+en_US.iso88591 en_US.ISO8859-1
+en_US.ISO-8859-1 en_US.ISO8859-1
+en_US.ISO_8859-1 en_US.ISO8859-1
+en_US.iso885915 en_US.ISO8859-15
+en_US.ISO-8859-15 en_US.ISO8859-15
+en_US.8859-15 en_US.ISO8859-15
+en_US.ISO8859-15@euro en_US.ISO8859-15
+en_US.utf8 en_US.UTF-8
+EN_US.UTF-8 en_US.UTF-8
+en_ZA en_ZA.ISO8859-1
+en_ZA.88591 en_ZA.ISO8859-1
+en_ZA.88591.en en_ZA.ISO8859-1
+en_ZA.iso88591 en_ZA.ISO8859-1
+en_ZA.ISO-8859-1 en_ZA.ISO8859-1
+en_ZA.ISO_8859-1 en_ZA.ISO8859-1
+en_ZA.iso885915 en_ZA.ISO8859-15
+en_ZA.ISO-8859-15 en_ZA.ISO8859-15
+en_ZA.utf8 en_ZA.UTF-8
+en_ZW en_ZW.ISO8859-1
+en_ZW.utf8 en_ZS.UTF-8
+en_ZW.iso88591 en_ZW.ISO8859-1
+en_ZW.ISO-8859-1 en_ZW.ISO8859-1
+eo eo_XX.ISO8859-3
+eo_EO eo_EO.ISO8859-3
+eo_XX eo_XX.ISO8859-3
+es es_ES.ISO8859-1
+es.UTF-8 es_ES.UTF-8
+es_AR es_AR.ISO8859-1
+es_AR.iso88591 es_AR.ISO8859-1
+es_AR.ISO-8859-1 es_AR.ISO8859-1
+es_AR.utf8 es_AR.UTF-8
+es_BO es_BO.ISO8859-1
+es_BO.iso88591 es_BO.ISO8859-1
+es_BO.ISO-8859-1 es_BO.ISO8859-1
+es_BO.utf8 es_BO.UTF-8
+es_CL es_CL.ISO8859-1
+es_CL.iso88591 es_CL.ISO8859-1
+es_CL.ISO-8859-1 es_CL.ISO8859-1
+es_CL.utf8 es_CL.UTF-8
+es_CO es_CO.ISO8859-1
+es_CO.iso88591 es_CO.ISO8859-1
+es_CO.ISO-8859-1 es_CO.ISO8859-1
+es_CO.utf8 es_CO.UTF-8
+es_CR es_CR.ISO8859-1
+es_CR.iso88591 es_CR.ISO8859-1
+es_CR.ISO-8859-1 es_CR.ISO8859-1
+es_CR.utf8 es_CR.UTF-8
+es_DO es_DO.ISO8859-1
+es_DO.iso88591 es_DO.ISO8859-1
+es_DO.ISO-8859-1 es_DO.ISO8859-1
+es_DO.utf8 es_DO.UTF-8
+es_EC es_EC.ISO8859-1
+es_EC.iso88591 es_EC.ISO8859-1
+es_EC.ISO-8859-1 es_EC.ISO8859-1
+es_EC.utf8 es_EC.UTF-8
+es_ES es_ES.ISO8859-1
+es_ES.88591 es_ES.ISO8859-1
+es_ES.88591.en es_ES.ISO8859-1
+es_ES.iso88591 es_ES.ISO8859-1
+es_ES.ISO-8859-1 es_ES.ISO8859-1
+es_ES.ISO_8859-1 es_ES.ISO8859-1
+es_ES.iso885915 es_ES.ISO8859-15
+es_ES.ISO-8859-15 es_ES.ISO8859-15
+es_ES.ISO-8859-15@euro es_ES.ISO8859-15
+es_ES@euro es_ES.ISO8859-15
+es_ES.UTF-8@euro es_ES.UTF-8
+es_ES.utf8 es_ES.UTF-8
+es_GT es_GT.ISO8859-1
+es_GT.iso88591 es_GT.ISO8859-1
+es_GT.ISO-8859-1 es_GT.ISO8859-1
+es_GT.utf8 es_GT.UTF-8
+es_HN es_HN.ISO8859-1
+es_HN.iso88591 es_HN.ISO8859-1
+es_HN.ISO-8859-1 es_HN.ISO8859-1
+es_HN.utf8 es_HN.UTF-8
+es_MX es_MX.ISO8859-1
+es_MX.iso88591 es_MX.ISO8859-1
+es_MX.ISO-8859-1 es_MX.ISO8859-1
+es_MX.utf8 es_MX.UTF-8
+es_NI es_NI.ISO8859-1
+es_NI.iso88591 es_NI.ISO8859-1
+es_NI.ISO-8859-1 es_NI.ISO8859-1
+es_NI.utf8 es_NI.UTF-8
+es_PA es_PA.ISO8859-1
+es_PA.iso88591 es_PA.ISO8859-1
+es_PA.ISO-8859-1 es_PA.ISO8859-1
+es_PA.iso885915 es_PA.ISO8859-15
+es_PA.utf8 es_PA.UTF-8
+es_PE es_PE.ISO8859-1
+es_PE.iso88591 es_PE.ISO8859-1
+es_PE.ISO-8859-1 es_PE.ISO8859-1
+es_PE.iso885915 es_PE.ISO8859-15
+es_PE.utf8 es_PE.UTF-8
+es_PR es_PR.ISO8859-1
+es_PR.iso88591 es_PR.ISO8859-1
+es_PR.ISO-8859-1 es_PR.ISO8859-1
+es_PR.utf8 es_PR.UTF-8
+es_PY es_PY.ISO8859-1
+es_PY.iso88591 es_PY.ISO8859-1
+es_PY.ISO-8859-1 es_PY.ISO8859-1
+es_PY.iso885915 es_PY.ISO8859-15
+es_PY.utf8 es_PY.UTF-8
+es_SV es_SV.ISO8859-1
+es_SV.iso88591 es_SV.ISO8859-1
+es_SV.ISO-8859-1 es_SV.ISO8859-1
+es_SV.iso885915 es_SV.ISO8859-15
+es_SV.utf8 es_SV.UTF-8
+es_US es_US.ISO8859-1
+es_US.iso88591 es_US.ISO8859-1
+es_US.ISO-8859-1 es_US.ISO8859-1
+es_UY es_UY.ISO8859-1
+es_UY.iso88591 es_UY.ISO8859-1
+es_UY.ISO-8859-1 es_UY.ISO8859-1
+es_UY.iso885915 es_UY.ISO8859-15
+es_UY.utf8 es_UY.UTF-8
+es_VE es_VE.ISO8859-1
+es_VE.iso88591 es_VE.ISO8859-1
+es_VE.ISO-8859-1 es_VE.ISO8859-1
+es_VE.iso885915 es_VE.ISO8859-15
+es_VE.utf8 es_VE.UTF-8
+# According to Estonian local standards, ISO8859-4 is not a recommended
+# charset. EVS8:2000 specifies ISO8859-15 as the base charset.
+et et_EE.ISO8859-15
+et_EE et_EE.ISO8859-15
+et_EE.iso88591 et_EE.ISO8859-1
+et_EE.ISO-8859-1 et_EE.ISO8859-1
+et_EE.iso88594 et_EE.ISO8859-4
+et_EE.ISO-8859-4 et_EE.ISO8859-4
+et_EE.iso885913 et_EE.ISO8859-13
+et_EE.ISO-8859-13 et_EE.ISO8859-13
+et_EE.iso885915 et_EE.ISO8859-15
+et_EE.ISO-8859-15 et_EE.ISO8859-15
+et_EE.utf8 et_EE.UTF-8
+eu eu_ES.ISO8859-1
+eu_ES eu_ES.ISO8859-1
+eu_ES.iso88591 eu_ES.ISO8859-1
+eu_ES.ISO-8859-1 eu_ES.ISO8859-1
+eu_ES.iso885915 eu_ES.ISO8859-15
+eu_ES.ISO-8859-15 eu_ES.ISO8859-15
+eu_ES.ISO-8859-15@euro eu_ES.ISO8859-15
+eu_ES@euro eu_ES.ISO8859-15
+eu_ES.UTF-8@euro eu_ES.UTF-8
+fa fa_IR.UTF-8
+fa_IR fa_IR.UTF-8
+fa_IR.isiri3342 fa_IR.ISIRI-3342
+fa_IR.utf8 fa_IR.UTF-8
+fi fi_FI.ISO8859-15
+fi.ISO8859-15 fi_FI.ISO8859-15
+fi_FI fi_FI.ISO8859-15
+fi_FI.88591 fi_FI.ISO8859-1
+fi_FI.88591.en fi_FI.ISO8859-1
+fi_FI.iso88591 fi_FI.ISO8859-1
+fi_FI.ISO-8859-1 fi_FI.ISO8859-1
+fi_FI.ISO_8859-1 fi_FI.ISO8859-1
+fi_FI.iso885915 fi_FI.ISO8859-15
+fi_FI.ISO-8859-15 fi_FI.ISO8859-15
+fi_FI.ISO-8859-15@euro fi_FI.ISO8859-15
+fi_FI@euro fi_FI.ISO8859-15
+fi_FI.utf8 fi_FI.UTF-8
+fi_FI.UTF-8@euro fi_FI.UTF-8
+fo fo_FO.ISO8859-1
+fo_FO fo_FO.ISO8859-1
+fo_FO.iso88591 fo_FO.ISO8859-1
+fo_FO.ISO-8859-1 fo_FO.ISO8859-1
+fo_FO.iso885915 fo_FO.ISO8859-15
+fo_FO.ISO-8859-15 fo_FO.ISO8859-15
+fo_FO.utf8 fo_FO.UTF-8
+fr fr_FR.ISO8859-1
+fr.ISO8859-15 fr_FR.ISO8859-15
+fr.UTF-8 fr_FR.UTF-8
+fr_BE fr_BE.ISO8859-1
+fr_BE.88591 fr_BE.ISO8859-1
+fr_BE.88591.en fr_BE.ISO8859-1
+fr_BE.ISO-8859-1 fr_BE.ISO8859-1
+fr_BE.ISO_8859-1 fr_BE.ISO8859-1
+fr_BE.iso885915 fr_BE.ISO8859-15
+fr_BE.ISO-8859-15 fr_BE.ISO8859-15
+fr_BE.ISO-8859-15@euro fr_BE.ISO8859-15
+fr_BE@euro fr_BE.ISO8859-15
+fr_BE.utf8 fr_BE.UTF-8
+fr_BE.UTF-8@euro fr_BE.UTF-8
+fr_CA fr_CA.ISO8859-1
+fr_CA.88591 fr_CA.ISO8859-1
+fr_CA.88591.en fr_CA.ISO8859-1
+fr_CA.iso88591 fr_CA.ISO8859-1
+fr_CA.ISO-8859-1 fr_CA.ISO8859-1
+fr_CA.ISO_8859-1 fr_CA.ISO8859-1
+fr_CA.iso885915 fr_CA.ISO8859-15
+fr_CA.ISO-8859-15 fr_CA.ISO8859-15
+fr_CA.utf8 fr_CA.UTF-8
+fr_CH fr_CH.ISO8859-1
+fr_CH.88591 fr_CH.ISO8859-1
+fr_CH.88591.en fr_CH.ISO8859-1
+fr_CH.ISO-8859-1 fr_CH.ISO8859-1
+fr_CH.ISO_8859-1 fr_CH.ISO8859-1
+fr_CH.iso885915 fr_CH.ISO8859-15
+fr_CH.ISO-8859-15 fr_CH.ISO8859-15
+fr_CH.utf8 fr_CH.UTF-8
+fr_FR fr_FR.ISO8859-1
+fr_FR.88591 fr_FR.ISO8859-1
+fr_FR.88591.en fr_FR.ISO8859-1
+fr_FR.iso88591 fr_FR.ISO8859-1
+fr_FR.ISO-8859-1 fr_FR.ISO8859-1
+fr_FR.ISO_8859-1 fr_FR.ISO8859-1
+fr_FR.iso885915 fr_FR.ISO8859-15
+fr_FR.ISO-8859-15 fr_FR.ISO8859-15
+fr_FR.ISO-8859-15@euro fr_FR.ISO8859-15
+fr_FR@euro fr_FR.ISO8859-15
+fr_FR.UTF-8@euro fr_FR.UTF-8
+fr_FR.utf8 fr_FR.UTF-8
+fr_LU fr_LU.ISO8859-1
+fr_LU.88591 fr_LU.ISO8859-1
+fr_LU.88591.en fr_LU.ISO8859-1
+fr_LU.iso88591 fr_LU.ISO8859-1
+fr_LU.ISO-8859-1 fr_LU.ISO8859-1
+fr_LU.ISO_8859-1 fr_LU.ISO8859-1
+fr_LU.iso885915 fr_LU.ISO8859-15
+fr_LU.ISO-8859-15 fr_LU.ISO8859-15
+fr_LU.ISO-8859-15@euro fr_LU.ISO8859-15
+fr_LU@euro fr_LU.ISO8859-15
+fr_LU.UTF-8@euro fr_LU.UTF-8
+fr_LU.utf8 fr_LU.UTF-8
+FRE_FR.8859 fr_FR.ISO8859-1
+FRE_FR.8859.in fr_FR.ISO8859-1
+ga ga_IE.ISO8859-1
+ga_IE ga_IE.ISO8859-1
+ga_IE.iso88591 ga_IE.ISO8859-1
+ga_IE.ISO-8859-1 ga_IE.ISO8859-1
+ga_IE.iso885914 ga_IE.ISO8859-14
+ga_IE.ISO-8859-14 ga_IE.ISO8859-14
+ga_IE.iso885915 ga_IE.ISO8859-15
+ga_IE.ISO-8859-15 ga_IE.ISO8859-15
+ga_IE.ISO-8859-15@euro ga_IE.ISO8859-15
+ga_IE@euro ga_IE.ISO8859-15
+ga_IE.UTF-8@euro ga_IE.UTF-8
+ga_IE.utf8 ga_IE.UTF-8
+gd gd_GB.ISO8859-1
+gd_GB gd_GB.ISO8859-1
+gd_GB.iso88591 gd_GB.ISO8859-1
+gd_GB.ISO-8859-1 gd_GB.ISO8859-1
+gd_GB.iso885914 gd_GB.ISO8859-14
+gd_GB.ISO-8859-14 gd_GB.ISO8859-14
+gd_GB.iso885915 gd_GB.ISO8859-15
+gd_GB.ISO-8859-15 gd_GB.ISO8859-15
+gl gl_ES.ISO8859-1
+gl_ES gl_ES.ISO8859-1
+gl_ES.iso88591 gl_ES.ISO8859-1
+gl_ES.ISO-8859-1 gl_ES.ISO8859-1
+gl_ES.iso885915 gl_ES.ISO8859-15
+gl_ES.ISO-8859-15 gl_ES.ISO8859-15
+gl_ES.ISO-8859-15@euro gl_ES.ISO8859-15
+gl_ES@euro gl_ES.ISO8859-15
+gl_ES.UTF-8@euro gl_ES.UTF-8
+gl_ES.utf8 gl_ES.UTF-8
+gu_IN gu_IN.UTF-8
+gu_IN.utf8 gu_IN.UTF-8
+gv gv_GB.ISO8859-1
+gv_GB gv_GB.ISO8859-1
+gv_GB.iso88591 gv_GB.ISO8859-1
+gv_GB.ISO-8859-1 gv_GB.ISO8859-1
+gv_GB.iso885914 gv_GB.ISO8859-14
+gv_GB.ISO-8859-14 gv_GB.ISO8859-14
+gv_GB.iso885915 gv_GB.ISO8859-15
+gv_GB.ISO-8859-15 gv_GB.ISO8859-15
+he he_IL.ISO8859-8
+he_IL he_IL.ISO8859-8
+HE_IL he_IL.ISO8859-8
+he_IL.iso88598 he_IL.ISO8859-8
+he_IL.ISO-8859-8 he_IL.ISO8859-8
+he_IL.cp1255 he_IL.CP1255
+he_IL.microsoftcp1255 he_IL.CP1255
+he_IL.microsoft-cp1255 he_IL.CP1255
+he_IL.MICROSOFT-CP1255 he_IL.CP1255
+he_IL.utf8 he_IL.UTF-8
+HE_IL.UTF-8 he_IL.UTF-8
+hi hi_IN.ISCII-DEV
+hi_IN hi_IN.ISCII-DEV
+HI_IN hi_IN.ISCII-DEV
+hi_IN.isciidev hi_IN.ISCII-DEV
+hi_IN.utf8 hi_IN.UTF-8
+HI_IN.UTF-8 hi_IN.UTF-8
+hne hne_IN.UTF-8
+hne_IN hne_IN.UTF-8
+hne_IN.utf8 hne_IN.UTF-8
+hr hr_HR.ISO8859-2
+hr_HR hr_HR.ISO8859-2
+hr_HR.iso88592 hr_HR.ISO8859-2
+hr_HR.ISO-8859-2 hr_HR.ISO8859-2
+hr_HR.ISO_8859-2 hr_HR.ISO8859-2
+hr_HR.utf8 hr_HR.UTF-8
+hu hu_HU.ISO8859-2
+hu_HU hu_HU.ISO8859-2
+hu_HU.iso88592 hu_HU.ISO8859-2
+hu_HU.ISO-8859-2 hu_HU.ISO8859-2
+hu_HU.utf8 hu_HU.UTF-8
+ia ia.UTF-8
+ia.utf8 ia.UTF-8
+ie ie.UTF-8
+ie.utf8 ie.UTF-8
+is is_IS.ISO8859-1
+is_IS is_IS.ISO8859-1
+is_IS.iso88591 is_IS.ISO8859-1
+is_IS.ISO-8859-1 is_IS.ISO8859-1
+is_IS.ISO_8859-1 is_IS.ISO8859-1
+is_IS.iso885915 is_IS.ISO8859-15
+is_IS.ISO-8859-15 is_IS.ISO8859-15
+is_IS.utf8 is_IS.UTF-8
+it it_IT.ISO8859-1
+it.ISO8859-15 it_IT.ISO8859-15
+it.UTF-8 it_IT.UTF-8
+it_CH it_CH.ISO8859-1
+it_CH.iso88591 it_CH.ISO8859-1
+it_CH.ISO_8859-1 it_CH.ISO8859-1
+it_CH.ISO-8859-1 it_CH.ISO8859-1
+it_CH.iso885915 it_CH.ISO8859-15
+it_CH.utf8 it_CH.UTF-8
+it_IT it_IT.ISO8859-1
+it_IT.88591 it_IT.ISO8859-1
+it_IT.88591.en it_IT.ISO8859-1
+it_IT.iso88591 it_IT.ISO8859-1
+it_IT.ISO-8859-1 it_IT.ISO8859-1
+it_IT.ISO_8859-1 it_IT.ISO8859-1
+it_IT.iso885915 it_IT.ISO8859-15
+it_IT.ISO-8859-15 it_IT.ISO8859-15
+it_IT.ISO-8859-15@euro it_IT.ISO8859-15
+it_IT@euro it_IT.ISO8859-15
+it_IT.utf8 it_IT.UTF-8
+it_IT.UTF-8@euro it_IT.UTF-8
+# NUNACOM is an encoding for the Inuktitut syllabics
+# we have little else on this encoding.
+iu iu_CA.NUNACOM-8
+iu_CA iu_CA.NUNACOM-8
+iu_CA.nunacom8 iu_CA.NUNACOM-8
+ja_JP ja_JP.eucJP
+ja ja_JP.eucJP
+ja.JIS ja_JP.JIS7
+ja.SJIS ja_JP.SJIS
+ja_JP.ujis ja_JP.eucJP
+Jp_JP ja_JP.eucJP
+ja_JP.AJEC ja_JP.eucJP
+ja_JP.EUC ja_JP.eucJP
+ja_JP.EUC-JP ja_JP.eucJP
+ja_JP.EUC_JP ja_JP.eucJP
+ja_JP.eucjp ja_JP.eucJP
+ja_JP.ISO-2022-JP ja_JP.JIS7
+ja_JP.JIS ja_JP.JIS7
+ja_JP.jis7 ja_JP.JIS7
+ja_JP.mscode ja_JP.SJIS
+ja_JP.PCK ja_JP.SJIS
+ja_JP.sjis ja_JP.SJIS
+ja_JP.utf8 ja_JP.UTF-8
+JA_JP.utf8 ja_JP.UTF-8
+ka ka_GE.GEORGIAN-ACADEMY
+ka_GE ka_GE.GEORGIAN-ACADEMY
+ka_GE.georgianacademy ka_GE.GEORGIAN-ACADEMY
+ka_GE.georgianrs ka_GE.GEORGIAN-ACADEMY
+ka_GE.georgianps ka_GE.GEORGIAN-PS
+kl kl_GL.ISO8859-1
+kl_GL kl_GL.ISO8859-1
+kl_GL.iso88591 kl_GL.ISO8859-1
+kl_GL.ISO-8859-1 kl_GL.ISO8859-1
+kl_GL.iso885915 kl_GL.ISO8859-15
+kl_GL.utf8 kl_GL.UTF-8
+km_KH km_KH.UTF-8
+km_KH.utf8 km_KH.UTF-8
+kn kn_IN.UTF-8
+kn_IN kn_IN.UTF-8
+kn_IN.utf8 kn_IN.UTF-8
+ko ko_KR.eucKR
+ko.UTF-8 ko_KR.UTF-8
+ko_KR ko_KR.eucKR
+KO_KR ko_KR.eucKR
+ko_KR.EUC ko_KR.eucKR
+ko_KR.EUC-KR ko_KR.eucKR
+ko_KR.euc ko_KR.eucKR
+ko_KR.euckr ko_KR.eucKR
+ko_KR.utf8 ko_KR.UTF-8
+KO_KR.UTF-8 ko_KR.UTF-8
+ks ks_IN.UTF-8
+ks_IN ks_IN.UTF-8
+ks_IN.utf8 ks_IN.UTF-8
+ks_IN@devanagari ks_IN.UTF-8@devanagari
+ks_IN.utf8@devanagari ks_IN.UTF-8@devanagari
+kw kw_GB.ISO8859-1
+kw_GB kw_GB.ISO8859-1
+kw_GB.iso88591 kw_GB.ISO8859-1
+kw_GB.ISO-8859-1 kw_GB.ISO8859-1
+kw_GB.iso885914 kw_GB.ISO8859-14
+kw_GB.ISO-8859-14 kw_GB.ISO8859-14
+kw_GB.iso885915 kw_GB.ISO8859-15
+kw_GB.ISO-8859-15 kw_GB.ISO8859-15
+ky ky_KG.UTF-8
+ky_KG ky_KG.UTF-8
+ky_KG.utf8 ky_KG.UTF-8
+lo lo_LA.MULELAO-1
+lo_LA lo_LA.MULELAO-1
+lo_LA.cp1133 lo_LA.IBM-CP1133
+lo_LA.ibmcp1133 lo_LA.IBM-CP1133
+lo_LA.mulelao1 lo_LA.MULELAO-1
+lt lt_LT.ISO8859-13
+lt_LT lt_LT.ISO8859-13
+lt_LT.iso88594 lt_LT.ISO8859-4
+lt_LT.ISO-8859-4 lt_LT.ISO8859-4
+lt_LT.ISO_8859-4 lt_LT.ISO8859-4
+lt_LT.iso885913 lt_LT.ISO8859-13
+lt_LT.ISO-8859-13 lt_LT.ISO8859-13
+lt_LT.ISO_8859-13 lt_LT.ISO8859-13
+lt_LT.utf8 lt_LT.UTF-8
+lv lv_LV.ISO8859-13
+lv_LV lv_LV.ISO8859-13
+lv_LV.iso88594 lv_LV.ISO8859-4
+lv_LV.ISO-8859-4 lv_LV.ISO8859-4
+lv_LV.iso885913 lv_LV.ISO8859-13
+lv_LV.ISO-8859-13 lv_LV.ISO8859-13
+lv_LV.ISO_8859-13 lv_LV.ISO8859-13
+lv_LV.utf8 lv_LV.UTF-8
+mai mai_IN.UTF-8
+mai_IN mai_IN.UTF-8
+mai_IN.utf8 mai_IN.UTF-8
+mi mi_NZ.ISO8859-1
+mi_NZ mi_NZ.ISO8859-1
+mi_NZ.iso88591 mi_NZ.ISO8859-1
+mk mk_MK.ISO8859-5
+mk_MK mk_MK.ISO8859-5
+mk_MK.iso88595 mk_MK.ISO8859-5
+mk_MK.ISO-8859-5 mk_MK.ISO8859-5
+mk_MK.cp1251 mk_MK.CP1251
+mk_MK.microsoftcp1251 mk_MK.CP1251
+mk_MK.microsoft-cp1251 mk_MK.CP1251
+mk_MK.MICROSOFT-CP1251 mk_MK.CP1251
+mk_MK.utf8 mk_MK.UTF-8
+ml ml_IN.UTF-8
+ml_IN ml_IN.UTF-8
+ml_IN.utf8 ml_IN.UTF-8
+mr mr_IN.UTF-8
+mr_IN mr_IN.UTF-8
+mr_IN.utf8 mr_IN.UTF-8
+ms ms_MY.ISO8859-1
+ms_MY ms_MY.ISO8859-1
+ms_MY.iso88591 ms_MY.ISO8859-1
+ms_MY.ISO-8859-1 ms_MY.ISO8859-1
+mt mt_MT.ISO8859-3
+mt_MT mt_MT.ISO8859-3
+mt_MT.ISO-8859-3 mt_MT.ISO8859-3
+nb nb_NO.ISO8859-1
+nb_NO nb_NO.ISO8859-1
+nb_NO.88591 nb_NO.ISO8859-1
+nb_NO.iso88591 nb_NO.ISO8859-1
+nb_NO.ISO-8859-1 nb_NO.ISO8859-1
+nb_NO.iso885915 nb_NO.ISO8859-15
+nb_NO.ISO-8859-15 nb_NO.ISO8859-15
+nb_NO.utf8 nb_NO.UTF-8
+ne_NP ne_NP.UTF-8
+ne_NP.utf8 ne_NP.UTF-8
+nl nl_NL.ISO8859-1
+nl.ISO8859-15 nl_NL.ISO8859-15
+nl_BE nl_BE.ISO8859-1
+nl_BE.88591 nl_BE.ISO8859-1
+nl_BE.88591.en nl_BE.ISO8859-1
+nl_BE.iso88591 nl_BE.ISO8859-1
+nl_BE.ISO-8859-1 nl_BE.ISO8859-1
+nl_BE.ISO_8859-1 nl_BE.ISO8859-1
+nl_BE.iso885915 nl_BE.ISO8859-15
+nl_BE.ISO-8859-15 nl_BE.ISO8859-15
+nl_BE.ISO-8859-15@euro nl_BE.ISO8859-15
+nl_BE@euro nl_BE.ISO8859-15
+nl_BE.utf8 nl_BE.UTF-8
+nl_BE.UTF-8@euro nl_BE.UTF-8
+nl_NL nl_NL.ISO8859-1
+nl_NL.88591 nl_NL.ISO8859-1
+nl_NL.88591.en nl_NL.ISO8859-1
+nl_NL.iso88591 nl_NL.ISO8859-1
+nl_NL.ISO-8859-1 nl_NL.ISO8859-1
+nl_NL.ISO_8859-1 nl_NL.ISO8859-1
+nl_NL.iso885915 nl_NL.ISO8859-15
+nl_NL.ISO-8859-15 nl_NL.ISO8859-15
+nl_NL.ISO-8859-15@euro nl_NL.ISO8859-15
+nl_NL@euro nl_NL.ISO8859-15
+nl_NL.utf8 nl_NL.UTF-8
+nl_NL.UTF-8@euro nl_NL.UTF-8
+nn nn_NO.ISO8859-1
+nn_NO nn_NO.ISO8859-1
+nn_NO.88591 nn_NO.ISO8859-1
+nn_NO.ISO-8859-1 nn_NO.ISO8859-1
+nn_NO.ISO_8859-1 nn_NO.ISO8859-1
+nn_NO.iso885915 nn_NO.ISO8859-15
+nn_NO.ISO-8859-15 nn_NO.ISO8859-15
+nn_NO.utf8 nn_NO.UTF-8
+no no_NO.ISO8859-1
+no_NO no_NO.ISO8859-1
+no_NO.88591 no_NO.ISO8859-1
+no_NO.88591.en no_NO.ISO8859-1
+no_NO.iso88591 no_NO.ISO8859-1
+no_NO.ISO-8859-1 no_NO.ISO8859-1
+no_NO.ISO8859-1@bokmal no_NO.ISO8859-1
+no_NO.ISO8859-1@nynorsk no_NO.ISO8859-1
+no_NO.iso885915 no_NO.ISO8859-15
+no_NO.ISO-8859-15 no_NO.ISO8859-15
+no_NO.utf8 no_NO.UTF-8
+nr nr_ZA.ISO8859-1
+nr_ZA nr_ZA.ISO8859-1
+nr_ZA.iso88591 nr_ZA.ISO8859-1
+nr_ZA.utf8 nr_ZA.UTF-8
+nso nso_ZA.ISO8859-15
+nso_ZA nso_ZA.ISO8859-15
+nso_ZA.iso885915 nso_ZA.ISO8859-15
+nso_ZA.utf8 nso_ZA.UTF-8
+ny ny_NO.ISO8859-1
+ny_NO ny_NO.ISO8859-1
+ny_NO.88591 ny_NO.ISO8859-1
+ny_NO.ISO_8859-1 ny_NO.ISO8859-1
+ny_NO.iso885915 ny_NO.ISO8859-15
+no@nynorsk ny_NO.ISO8859-1
+nynorsk nn_NO.ISO8859-1
+oc oc_FR.ISO8859-1
+oc_FR oc_FR.ISO8859-1
+oc_FR.iso88591 oc_FR.ISO8859-1
+oc_FR.ISO-8859-1 oc_FR.ISO8859-1
+oc_FR.iso885915 oc_FR.ISO8859-15
+oc_FR.ISO-8859-15 oc_FR.ISO8859-15
+oc_FR@euro oc_FR.ISO8859-15
+or or_IN.UTF-8
+or_IN or_IN.UTF-8
+or_IN.utf8 or_IN.UTF-8
+pa pa_IN.UTF-8
+pa_IN pa_IN.UTF-8
+pa_IN.utf8 pa_IN.UTF-8
+pa_PK.utf8 pa_PK.UTF-8
+pd pd_US.ISO8859-1
+pd_DE pd_DE.ISO8859-1
+pd_US pd_US.ISO8859-1
+pd_DE.iso88591 pd_DE.ISO8859-1
+pd_US.iso88591 pd_US.ISO8859-1
+pd_DE.iso885915 pd_DE.ISO8859-15
+pd_US.iso885915 pd_US.ISO8859-15
+ph ph_PH.ISO8859-1
+ph_PH ph_PH.ISO8859-1
+ph_PH.iso88591 ph_PH.ISO8859-1
+pl pl_PL.ISO8859-2
+pl.UTF-8 pl_PL.UTF-8
+pl_PL pl_PL.ISO8859-2
+pl_PL.iso88592 pl_PL.ISO8859-2
+pl_PL.ISO-8859-2 pl_PL.ISO8859-2
+pl_PL.utf8 pl_PL.UTF-8
+pp pp_AN.ISO8859-1
+pp_AN pp_AN.ISO8859-1
+pp_AN.iso88591 pp_AN.ISO8859-1
+pt pt_PT.ISO8859-1
+pt.ISO8859-15 pt_PT.ISO8859-15
+pt_BR pt_BR.ISO8859-1
+pt_BR.88591 pt_BR.ISO8859-1
+pt_BR.88591.en pt_BR.ISO8859-1
+pt_BR.iso88591 pt_BR.ISO8859-1
+pt_BR.ISO-8859-1 pt_BR.ISO8859-1
+pt_BR.ISO_8859-1 pt_BR.ISO8859-1
+pt_BR.iso885915 pt_BR.ISO8859-15
+pt_BR.utf8 pt_BR.UTF-8
+pt_PT pt_PT.ISO8859-1
+pt_PT.88591 pt_PT.ISO8859-1
+pt_PT.88591.en pt_PT.ISO8859-1
+pt_PT.iso88591 pt_PT.ISO8859-1
+pt_PT.ISO-8859-1 pt_PT.ISO8859-1
+pt_PT.ISO_8859-1 pt_PT.ISO8859-1
+pt_PT.iso885915 pt_PT.ISO8859-15
+pt_PT.ISO-8859-15 pt_PT.ISO8859-15
+pt_PT.ISO-8859-15@euro pt_PT.ISO8859-15
+pt_PT@euro pt_PT.ISO8859-15
+pt_PT.utf8 pt_PT.UTF-8
+pt_PT.UTF-8@euro pt_PT.UTF-8
+ro ro_RO.ISO8859-2
+ro_RO ro_RO.ISO8859-2
+ro_RO.iso88592 ro_RO.ISO8859-2
+ro_RO.ISO-8859-2 ro_RO.ISO8859-2
+ro_RO.utf8 ro_RO.UTF-8
+ru ru_RU.UTF-8
+ru.koi8-r ru_RU.KOI8-R
+ru.UTF-8 ru_RU.UTF-8
+ru_RU ru_RU.UTF-8
+ru_RU.utf8 ru_RU.UTF-8
+ru_RU.iso88595 ru_RU.ISO8859-5
+ru_RU.ISO-8859-5 ru_RU.ISO8859-5
+ru_RU.koi8r ru_RU.KOI8-R
+ru_RU.cp1251 ru_RU.CP1251
+ru_RU.microsoftcp1251 ru_RU.CP1251
+ru_RU.microsoft-cp1251 ru_RU.CP1251
+ru_RU.MICROSOFT-CP1251 ru_RU.CP1251
+ru_UA ru_UA.KOI8-U
+ru_UA.koi8u ru_UA.KOI8-U
+ru_UA.cp1251 ru_UA.CP1251
+ru_UA.microsoftcp1251 ru_UA.CP1251
+ru_UA.microsoft-cp1251 ru_UA.CP1251
+ru_UA.MICROSOFT-CP1251 ru_UA.CP1251
+rw rw_RW.ISO8859-1
+rw_RW rw_RW.ISO8859-1
+rw_RW.iso8859-1 rw_RW.ISO8859-1
+rw_RW.ISO-8859-1 rw_RW.ISO8859-1
+rw_RW.utf8 rw_RW.UTF-8
+sd sd_IN.UTF-8
+sd_IN.utf8 sd_IN.UTF-8
+sd@devanagari sd_IN.UTF-8@devanagari
+sd_IN@devanagari sd_IN.UTF-8@devanagari
+sd_IN.utf8@devanagari sd_IN.UTF-8@devanagari
+se_NO se_NO.UTF-8
+se_NO.utf8 se_NO.UTF-8
+si si_LK.UTF-8
+si_LK si_LK.UTF-8
+sk sk_SK.ISO8859-2
+sk_SK sk_SK.ISO8859-2
+sk_SK.iso88592 sk_SK.ISO8859-2
+sk_SK.ISO-8859-2 sk_SK.ISO8859-2
+sk_SK.utf8 sk_SK.UTF-8
+sl sl_SI.ISO8859-2
+sl_SI sl_SI.ISO8859-2
+sl_SI.iso88592 sl_SI.ISO8859-2
+sl_SI.ISO-8859-2 sl_SI.ISO8859-2
+sl_SI.utf8 sl_SI.UTF-8
+sq sq_AL.ISO8859-2
+sq_AL sq_AL.ISO8859-2
+sq_AL.iso88592 sq_AL.ISO8859-2
+sq_AL.ISO-8859-2 sq_AL.ISO8859-2
+sq_AL.utf8 sq_AL.UTF-8
+sr sr_RS.UTF-8
+sr@cyrillic sr_RS.UTF-8
+sr@latin sr_RS.UTF-8@latin
+sr@Latn sr_RS.UTF-8@latin
+sr_RS sr_RS.UTF-8
+sr_RS@latin sr_RS.UTF-8@latin
+sr_RS@Latn sr_RS.UTF-8@latin
+sr_RS.UTF-8@Latn sr_RS.UTF-8@latin
+sr_RS.utf8 sr_RS.UTF-8
+sr_ME sr_ME.UTF-8
+sr_ME.utf8 sr_ME.UTF-8
+ss ss_ZA.ISO8859-1
+ss_ZA ss_ZA.ISO8859-1
+ss_ZA.iso88591 ss_ZA.ISO8859-1
+ss_ZA.utf8 ss_ZA.UTF-8
+st st_ZA.ISO8859-1
+st_ZA st_ZA.ISO8859-1
+st_ZA.iso88591 st_ZA.ISO8859-1
+st_ZA.utf8 st_ZA.UTF-8
+sv sv_SE.ISO8859-1
+sv.ISO8859-15 sv_SE.ISO8859-15
+sv.UTF-8 sv_SE.UTF-8
+sv_FI sv_FI.ISO8859-1
+sv_FI.iso88591 sv_FI.ISO8859-1
+sv_FI.ISO-8859-1 sv_FI.ISO8859-1
+sv_FI.iso885915 sv_FI.ISO8859-15
+sv_FI.ISO-8859-15 sv_FI.ISO8859-15
+sv_FI.ISO-8859-15@euro sv_FI.ISO8859-15
+sv_FI@euro sv_FI.ISO8859-15
+sv_FI.UTF-8@euro sv_FI.UTF-8
+sv_FI.utf8 sv_FI.UTF-8
+sv_SE sv_SE.ISO8859-1
+sv_SE.88591 sv_SE.ISO8859-1
+sv_SE.88591.en sv_SE.ISO8859-1
+sv_SE.iso88591 sv_SE.ISO8859-1
+sv_SE.ISO-8859-1 sv_SE.ISO8859-1
+sv_SE.ISO_8859-1 sv_SE.ISO8859-1
+sv_SE.iso885915 sv_SE.ISO8859-15
+sv_SE.ISO-8859-15 sv_SE.ISO8859-15
+sv_SE@euro sv_SE.ISO8859-15
+sv_SE.utf8 sv_SE.UTF-8
+ta ta_IN.TSCII-0
+ta_IN ta_IN.TSCII-0
+ta_IN.tscii ta_IN.TSCII-0
+ta_IN.tscii0 ta_IN.TSCII-0
+te te_IN.UTF-8
+te.UTF-8 te_IN.UTF-8
+te_IN.utf8 te_IN.UTF-8
+tg tg_TJ.KOI8-C
+tg_TJ tg_TJ.KOI8-C
+tg_TJ.koi8c tg_TJ.KOI8-C
+th th_TH.ISO8859-11
+th_TH th_TH.ISO8859-11
+th_TH.ISO-8859-11 th_TH.ISO8859-11
+th_TH.tis620 th_TH.TIS620
+th_TH.TIS-620 th_TH.TIS620
+th_TH.TACTIS th_TH.TIS620
+th_TH.utf8 th_TH.UTF-8
+tl tl_PH.ISO8859-1
+tl_PH tl_PH.ISO8859-1
+tl_PH.iso88591 tl_PH.ISO8859-1
+tl_PH.ISO-8859-1 tl_PH.ISO8859-1
+tn tn_ZA.ISO8859-15
+tn_ZA tn_ZA.ISO8859-15
+tn_ZA.iso8859-15 tn_ZA.ISO8859-15
+tn_ZA.utf8 tn_ZA.UTF-8
+tr tr_TR.ISO8859-9
+tr_TR tr_TR.ISO8859-9
+TR_TR tr_TR.ISO8859-9
+tr_TR.iso88599 tr_TR.ISO8859-9
+tr_TR.ISO-8859-9 tr_TR.ISO8859-9
+tr_TR.utf8 tr_TR.UTF-8
+TR_TR.utf8 tr_TR.UTF-8
+ts ts_ZA.ISO8859-1
+ts_ZA ts_ZA.ISO8859-1
+ts_ZA.iso88591 ts_ZA.ISO8859-1
+ts_ZA.utf8 ts_ZA.UTF-8
+tt tt_RU.TATAR-CYR
+tt_RU tt_RU.TATAR-CYR
+tt_RU.tatarcyr tt_RU.TATAR-CYR
+tt_RU.koi8c tt_RU.KOI8-C
+uk uk_UA.KOI8-U
+uk_UA uk_UA.KOI8-U
+uk_UA.iso88595 uk_UA.ISO8859-5
+uk_UA.koi8u uk_UA.KOI8-U
+uk_UA.cp1251 uk_UA.CP1251
+uk_UA.microsoftcp1251 uk_UA.CP1251
+uk_UA.microsoft-cp1251 uk_UA.CP1251
+uk_UA.MICROSOFT-CP1251 uk_UA.CP1251
+uk_UA.utf8 uk_UA.UTF-8
+ur ur_IN.UTF-8
+ur_IN ur_IN.UTF-8
+ur_IN.utf8 ur_IN.UTF-8
+ur ur_PK.CP1256
+ur_PK ur_PK.CP1256
+ur_PK.cp1256 ur_PK.CP1256
+ur_PK.microsoftcp1256 ur_PK.CP1256
+ur_PK.microsoft-cp1256 ur_PK.CP1256
+ur_PK.MICROSOFT-CP1256 ur_PK.CP1256
+uz uz_UZ.UTF-8
+uz_UZ uz_UZ.UTF-8
+uz_UZ.ISO-8859-1 uz_UZ.ISO8859-1
+uz_UZ@cyrillic uz_UZ.UTF-8
+uz_UZ.UTF-8@cyrillic uz_UZ.UTF-8
+ve ve_ZA.UTF-8
+ve_ZA ve_ZA.UTF-8
+ve_ZA.utf8 ve_ZA.UTF-8
+vi vi_VN.TCVN
+vi_VN vi_VN.TCVN
+Vi_VN vi_VN.TCVN
+VI_VN vi_VN.TCVN
+vi_VN.tcvn vi_VN.TCVN
+vi_VN.tcvn5712 vi_VN.TCVN
+vi_VN.viscii vi_VN.VISCII
+vi_VN.viscii111 vi_VN.VISCII
+vi_VN.utf8 vi_VN.UTF-8
+VI_VN.UTF-8 vi_VN.UTF-8
+wa wa_BE.ISO8859-1
+wa_BE wa_BE.ISO8859-1
+wa_BE.iso88591 wa_BE.ISO8859-1
+wa_BE.ISO-8859-1 wa_BE.ISO8859-1
+wa_BE.iso885915 wa_BE.ISO8859-15
+wa_BE.ISO-8859-15 wa_BE.ISO8859-15
+wa_BE.ISO-8859-15@euro wa_BE.ISO8859-15
+wa_BE@euro wa_BE.ISO8859-15
+xh xh_ZA.ISO8859-1
+xh_ZA xh_ZA.ISO8859-1
+xh_ZA.iso88591 xh_ZA.ISO8859-1
+xh_ZA.utf8 xh_ZA.UTF-8
+yi yi_US.CP1255
+yi_US yi_US.CP1255
+yi_US.cp1255 yi_US.CP1255
+yi_US.microsoftcp1255 yi_US.CP1255
+yi_US.microsoft-cp1255 yi_US.CP1255
+yi_US.MICROSOFT-CP1255 yi_US.CP1255
+zh_CN zh_CN.gb2312
+zh_CN.Big5 zh_TW.big5
+zh_CN.EUC zh_CN.eucCN
+zh_CN.GB2312 zh_CN.gb2312
+zh_CN.GBK zh_CN.gbk
+zh_CN.GB18030 zh_CN.gb18030
+zh_CN.big5 zh_TW.big5
+zh_CN.euc zh_CN.eucCN
+zh_CN.utf8 zh_CN.UTF-8
+ZH_CN.UTF-8 zh_CN.UTF-8
+zh_HK zh_HK.big5hkscs
+zh_HK.BIG5HK zh_HK.big5hkscs
+zh_HK.Big5hkscs zh_HK.big5hkscs
+zh_HK.Big5-hkscs zh_HK.big5hkscs
+zh_HK.Big5_hkscs zh_HK.big5hkscs
+zh_HK.Big5HKSCS zh_HK.big5hkscs
+zh_HK.BIG5-HKSCS zh_HK.big5hkscs
+zh_HK.BIG5_HKSCS zh_HK.big5hkscs
+zh_HK.Big5-HKSCS zh_HK.big5hkscs
+zh_HK.big5-hkscs zh_HK.big5hkscs
+zh_HK.Big5-HKSCS zh_HK.big5hkscs
+zh_HK.Big5HKSCS zh_HK.big5hkscs
+zh_HK.Big5 zh_HK.big5
+zh_HK.utf8 zh_HK.UTF-8
+ZH_HK.UTF-8 zh_HK.UTF-8
+ZH_SG.UTF-8 zh_SG.UTF-8
+zh_TW zh_TW.big5
+zh_TW.Big5 zh_TW.big5
+zh_TW.BIG5 zh_TW.big5
+Zh_TW.big5 zh_TW.big5
+zh_TW.EUC zh_TW.eucTW
+zh_TW.EUC-TW zh_TW.eucTW
+zh_TW.utf8 zh_TW.UTF-8
+ZH_TW.UTF-8 zh_TW.UTF-8
+zu zu_ZA.ISO8859-1
+zu_ZA zu_ZA.ISO8859-1
+zu_ZA.iso88591 zu_ZA.ISO8859-1
+zu_ZA.utf8 zu_ZA.UTF-8
+# The following locale names are used in SCO 3.0
+english_uk.8859 en_GB.ISO8859-1
+english_us.8859 en_US.ISO8859-1
+english_us.ascii en_US.ISO8859-1
+french_france.8859 fr_FR.ISO8859-1
+german_germany.8859 de_DE.ISO8859-1
+portuguese_brazil.8859 pt_BR.ISO8859-1
+spanish_spain.8859 es_ES.ISO8859-1
+# The following locale names are used in HPUX 9.x
+american.iso88591 en_US.ISO8859-1
+arabic.iso88596 ar_AA.ISO8859-6
+bokmal nb_NO.ISO8859-1
+bokml nb_NO.ISO8859-1
+bulgarian bg_BG.CP1251
+c-french.iso88591 fr_CA.ISO8859-1
+catalan ca_ES.ISO8859-1
+chinese-s zh_CN.eucCN
+chinese-t zh_TW.eucTW
+croatian hr_HR.ISO8859-2
+czech cs_CZ.ISO8859-2
+danish da_DK.ISO8859-1
+dansk da_DK.ISO8859-1
+danish.iso88591 da_DK.ISO8859-1
+deutsch de_DE.ISO8859-1
+dutch nl_NL.ISO8859-1
+dutch.iso88591 nl_BE.ISO8859-1
+eesti et_EE.ISO8859-1
+english.iso88591 en_EN.ISO8859-1
+estonian et_EE.ISO8859-1
+finnish fi_FI.ISO8859-1
+finnish.iso88591 fi_FI.ISO8859-1
+franais fr_FR.ISO8859-1
+french fr_FR.ISO8859-1
+french.iso88591 fr_CH.ISO8859-1
+galego gl_ES.ISO8859-1
+galician gl_ES.ISO8859-1
+german de_DE.ISO8859-1
+german.iso88591 de_CH.ISO8859-1
+greek el_GR.ISO8859-7
+greek.iso88597 el_GR.ISO8859-7
+hebrew he_IL.ISO8859-8
+hebrew.iso88598 he_IL.ISO8859-8
+hrvatski hr_HR.ISO8859-2
+hungarian hu_HU.ISO8859-2
+icelandic.iso88591 is_IS.ISO8859-1
+icelandic is_IS.ISO8859-1
+italian it_IT.ISO8859-1
+italian.iso88591 it_IT.ISO8859-1
+japanese ja_JP.eucJP
+japanese.euc ja_JP.eucJP
+japanese.sjis ja_JP.SJIS
+korean ko_KR.eucKR
+korean.euc ko_KR.eucKR
+lithuanian lt_LT.ISO8859-13
+norwegian no_NO.ISO8859-1
+norwegian.iso88591 no_NO.ISO8859-1
+polish pl_PL.ISO8859-2
+portuguese pt_PT.ISO8859-1
+portuguese.iso88591 pt_PT.ISO8859-1
+romanian ro_RO.ISO8859-2
+rumanian ro_RO.ISO8859-2
+russian ru_RU.ISO8859-5
+serbocroatian sr_RS.UTF-8@latin
+sinhala si_LK.UTF-8
+slovak sk_SK.ISO8859-2
+slovene sl_SI.ISO8859-2
+slovenian sl_SI.ISO8859-2
+spanish es_ES.ISO8859-1
+spanish.iso88591 es_ES.ISO8859-1
+swedish sv_SE.ISO8859-1
+swedish.iso88591 sv_SE.ISO8859-1
+turkish tr_TR.ISO8859-9
+turkish.iso88599 tr_TR.ISO8859-9
+thai th_TH.ISO8859-11
+univ.utf8 en_US.UTF-8
+# Digital Unix utf
+universal.utf8@ucs4 en_US.UTF-8
+# Solaris and SunOS have iso_8859_1 and iso_8859_15 LC_CTYPES
+# to augment LANG=C
+iso_8859_1 en_US.ISO8859-1
+iso_8859_15 en_US.ISO8859-15
+# Other miscellaneous locale names
+ISO8859-1 en_US.ISO8859-1
+ISO-8859-1 en_US.ISO8859-1
+japan ja_JP.eucJP
+Japanese-EUC ja_JP.eucJP
+#
+# This file contains alias names of locales.
+# Each alias name is described within one line.
+# The first word is the alias name (simplified locale name),
+# the second word is the full locale name.
+#
+#
+POSIX: C
+POSIX-UTF2: C
+C_C.C: C
+C.en: C
+C.ASCII: C
+C.iso88591: en_US.ISO8859-1
+Cextend: en_US.ISO8859-1
+Cextend.en: en_US.ISO8859-1
+English_United-States.437: C
+C.UTF-8: en_US.UTF-8
+# a3 is not an ISO 639 language code, but in Cyrillic, "Z" looks like "3".
+a3: az_AZ.KOI8-C
+a3_AZ: az_AZ.KOI8-C
+a3_AZ.koi8c: az_AZ.KOI8-C
+a3_AZ.KOI-C: az_AZ.KOI8-C
+a3_AZ.UTF-8: az_AZ.UTF-8
+af: af_ZA.ISO8859-1
+af_ZA: af_ZA.ISO8859-1
+af_ZA.iso88591: af_ZA.ISO8859-1
+af_ZA.ISO-8859-1: af_ZA.ISO8859-1
+af_ZA.utf8: af_ZA.UTF-8
+am: am_ET.UTF-8
+am_ET: am_ET.UTF-8
+ar: ar_AA.ISO8859-6
+ar_AA: ar_AA.ISO8859-6
+AR_AA: ar_AA.ISO8859-6
+Ar_AA: ar_AA.ISO8859-6
+AR_AA.UTF-8: ar_AA.UTF-8
+ar_AA.iso88596: ar_AA.ISO8859-6
+ar_AA.ISO-8859-6: ar_AA.ISO8859-6
+ar_AE: ar_AE.ISO8859-6
+ar_AE.iso88596: ar_AE.ISO8859-6
+ar_AE.ISO-8859-6: ar_AE.ISO8859-6
+ar_AE.utf8: ar_AE.UTF-8
+ar_BH: ar_BH.ISO8859-6
+ar_BH.iso88596: ar_BH.ISO8859-6
+ar_BH.ISO-8859-6: ar_BH.ISO8859-6
+ar_BH.utf8: ar_BH.UTF-8
+ar_DZ: ar_DZ.ISO8859-6
+ar_DZ.iso88596: ar_DZ.ISO8859-6
+ar_DZ.ISO-8859-6: ar_DZ.ISO8859-6
+ar_DZ.utf8: ar_DZ.UTF-8
+ar_EG: ar_EG.ISO8859-6
+ar_EG.iso88596: ar_EG.ISO8859-6
+ar_EG.ISO-8859-6: ar_EG.ISO8859-6
+ar_EG.utf8: ar_EG.UTF-8
+ar_IN: ar_IN.UTF-8
+ar_IN.utf8: ar_IN.UTF-8
+ar_IQ: ar_IQ.ISO8859-6
+ar_IQ.iso88596: ar_IQ.ISO8859-6
+ar_IQ.ISO-8859-6: ar_IQ.ISO8859-6
+ar_IQ.utf8: ar_IQ.UTF-8
+ar_JO: ar_JO.ISO8859-6
+ar_JO.iso88596: ar_JO.ISO8859-6
+ar_JO.ISO-8859-6: ar_JO.ISO8859-6
+ar_JO.utf8: ar_JO.UTF-8
+ar_KW: ar_KW.ISO8859-6
+ar_KW.iso88596: ar_KW.ISO8859-6
+ar_KW.ISO-8859-6: ar_KW.ISO8859-6
+ar_KW.utf8: ar_KW.UTF-8
+ar_LB: ar_LB.ISO8859-6
+ar_LB.iso88596: ar_LB.ISO8859-6
+ar_LB.ISO-8859-6: ar_LB.ISO8859-6
+ar_LB.utf8: ar_LB.UTF-8
+ar_LY: ar_LY.ISO8859-6
+ar_LY.iso88596: ar_LY.ISO8859-6
+ar_LY.ISO-8859-6: ar_LY.ISO8859-6
+ar_LY.utf8: ar_LY.UTF-8
+ar_MA: ar_MA.ISO8859-6
+ar_MA.iso88596: ar_MA.ISO8859-6
+ar_MA.ISO-8859-6: ar_MA.ISO8859-6
+ar_MA.utf8: ar_MA.UTF-8
+ar_OM: ar_OM.ISO8859-6
+ar_OM.iso88596: ar_OM.ISO8859-6
+ar_OM.ISO-8859-6: ar_OM.ISO8859-6
+ar_OM.utf8: ar_OM.UTF-8
+ar_QA: ar_QA.ISO8859-6
+ar_QA.iso88596: ar_QA.ISO8859-6
+ar_QA.ISO-8859-6: ar_QA.ISO8859-6
+ar_QA.utf8: ar_QA.UTF-8
+ar_SA: ar_SA.ISO8859-6
+ar_SA.iso88596: ar_SA.ISO8859-6
+ar_SA.ISO-8859-6: ar_SA.ISO8859-6
+ar_SA.utf8: ar_SA.UTF-8
+ar_SD: ar_SD.ISO8859-6
+ar_SD.iso88596: ar_SD.ISO8859-6
+ar_SD.ISO-8859-6: ar_SD.ISO8859-6
+ar_SD.utf8: ar_SD.UTF-8
+ar_SY: ar_SY.ISO8859-6
+ar_SY.iso88596: ar_SY.ISO8859-6
+ar_SY.ISO-8859-6: ar_SY.ISO8859-6
+ar_SY.utf8: ar_SY.UTF-8
+ar_TN: ar_TN.ISO8859-6
+ar_TN.iso88596: ar_TN.ISO8859-6
+ar_TN.ISO-8859-6: ar_TN.ISO8859-6
+ar_TN.utf8: ar_TN.UTF-8
+as: as_IN.UTF-8
+as_IN: as_IN.UTF-8
+as_IN.utf8: as_IN.UTF-8
+ar_YE: ar_YE.ISO8859-6
+ar_YE.iso88596: ar_YE.ISO8859-6
+ar_YE.ISO-8859-6: ar_YE.ISO8859-6
+ar_YE.utf8: ar_YE.UTF-8
+az: az_AZ.ISO8859-9E
+az_AZ: az_AZ.ISO8859-9E
+az_AZ.iso88599e: az_AZ.ISO8859-9E
+be: be_BY.CP1251
+be@latin: be_BY.UTF-8@latin
+be_BY: be_BY.CP1251
+be_BY@latin: be_BY.UTF-8@latin
+be_BY.cp1251: be_BY.CP1251
+be_BY.microsoftcp1251: be_BY.CP1251
+be_BY.microsoft-cp1251: be_BY.CP1251
+be_BY.MICROSOFT-CP1251: be_BY.CP1251
+be_BY.utf8: be_BY.UTF-8
+be_BY.utf8@latin: be_BY.UTF-8@latin
+bg: bg_BG.CP1251
+bg_BG: bg_BG.CP1251
+bg_BG.cp1251: bg_BG.CP1251
+bg_BG.microsoftcp1251: bg_BG.CP1251
+bg_BG.microsoft-cp1251: bg_BG.CP1251
+bg_BG.MICROSOFT-CP1251: bg_BG.CP1251
+bg_BG.iso88595: bg_BG.ISO8859-5
+bg_BG.ISO-8859-5: bg_BG.ISO8859-5
+bg_BG.koi8r: bg_BG.KOI8-R
+be_BG.utf8: bg_BG.UTF-8
+bn_IN: bn_IN.UTF-8
+bn_IN.utf8: bn_IN.UTF-8
+bo_IN: bo_IN.UTF-8
+bo_IN.utf8: bo_IN.UTF-8
+br: br_FR.ISO8859-1
+br_FR: br_FR.ISO8859-1
+br_FR.iso88591: br_FR.ISO8859-1
+br_FR.ISO-8859-1: br_FR.ISO8859-1
+br_FR.iso885914: br_FR.ISO8859-14
+br_FR.ISO-8859-14: br_FR.ISO8859-14
+br_FR.iso885915: br_FR.ISO8859-15
+br_FR.ISO-8859-15: br_FR.ISO8859-15
+br_FR.ISO-8859-15@euro: br_FR.ISO8859-15
+br_FR@euro: br_FR.ISO8859-15
+br_FR.UTF-8@euro: br_FR.UTF-8
+bs: bs_BA.ISO8859-2
+bs_BA: bs_BA.ISO8859-2
+bs_BA.iso88592: bs_BA.ISO8859-2
+bs_BA.ISO-8859-2: bs_BA.ISO8859-2
+bs_BA.ISO_8859-2: bs_BA.ISO8859-2
+ca: ca_ES.ISO8859-1
+ca_AD: ca_AD.ISO8859-1
+ca_AD@euro: ca_AD.ISO8859-15
+ca_AD.iso88591: ca_AD.ISO8859-1
+ca_AD.ISO-8859-1: ca_AD.ISO8859-1
+ca_AD.iso885915: ca_AD.ISO8859-15
+ca_AD.utf8: ca_AD.UTF-8
+ca_AD.ISO-8859-15: ca_AD.ISO8859-15
+ca_AD.ISO-8859-15@euro: ca_AD.ISO8859-15
+ca_AD.UTF-8@euro: ca_AD.UTF-8
+ca_ES: ca_ES.ISO8859-1
+ca_ES@euro: ca_ES.ISO8859-15
+ca_ES.iso88591: ca_ES.ISO8859-1
+ca_ES.ISO-8859-1: ca_ES.ISO8859-1
+ca_ES.iso885915: ca_ES.ISO8859-15
+ca_ES.utf8: ca_ES.UTF-8
+ca_ES.ISO-8859-15: ca_ES.ISO8859-15
+ca_ES.ISO-8859-15@euro: ca_ES.ISO8859-15
+ca_ES.UTF-8@euro: ca_ES.UTF-8
+ca_FR: ca_FR.ISO8859-1
+ca_FR@euro: ca_FR.ISO8859-15
+ca_FR.iso88591: ca_FR.ISO8859-1
+ca_FR.ISO-8859-1: ca_FR.ISO8859-1
+ca_FR.iso885915: ca_FR.ISO8859-15
+ca_FR.utf8: ca_FR.UTF-8
+ca_FR.ISO-8859-15: ca_FR.ISO8859-15
+ca_FR.ISO-8859-15@euro: ca_FR.ISO8859-15
+ca_FR.UTF-8@euro: ca_FR.UTF-8
+ca_IT: ca_IT.ISO8859-1
+ca_IT@euro: ca_IT.ISO8859-15
+ca_IT.iso88591: ca_IT.ISO8859-1
+ca_IT.ISO-8859-1: ca_IT.ISO8859-1
+ca_IT.iso885915: ca_IT.ISO8859-15
+ca_IT.utf8: ca_IT.UTF-8
+ca_IT.ISO-8859-15: ca_IT.ISO8859-15
+ca_IT.ISO-8859-15@euro: ca_IT.ISO8859-15
+ca_IT.UTF-8@euro: ca_IT.UTF-8
+cs: cs_CZ.ISO8859-2
+cs_CS: cs_CZ.ISO8859-2
+cs_CS.ISO8859-2: cs_CZ.ISO8859-2
+cs_CZ: cs_CZ.ISO8859-2
+cs_CZ.iso88592: cs_CZ.ISO8859-2
+cs_CS.iso8859-2: cs_CZ.ISO8859-2
+cs_CZ.ISO-8859-2: cs_CZ.ISO8859-2
+cs_CZ.ISO_8859-2: cs_CZ.ISO8859-2
+cs_CZ.utf8: cs_CZ.UTF-8
+cy: cy_GB.ISO8859-1
+cy_GB: cy_GB.ISO8859-1
+cy_GB.iso88591: cy_GB.ISO8859-1
+cy_GB.ISO-8859-1: cy_GB.ISO8859-1
+cy_GB.iso885914: cy_GB.ISO8859-14
+cy_GB.ISO-8859-14: cy_GB.ISO8859-14
+cy_GB.iso885915: cy_GB.ISO8859-15
+cy_GB.ISO-8859-15: cy_GB.ISO8859-15
+da: da_DK.ISO8859-1
+da.ISO8859-15: da_DK.ISO8859-15
+da_DK: da_DK.ISO8859-1
+DA_DK: da_DK.ISO8859-1
+da_DK.88591: da_DK.ISO8859-1
+da_DK.88591.en: da_DK.ISO8859-1
+da_DK.iso88591: da_DK.ISO8859-1
+da_DK.ISO-8859-1: da_DK.ISO8859-1
+da_DK.ISO_8859-1: da_DK.ISO8859-1
+da_DK.iso885915: da_DK.ISO8859-15
+da_DK.ISO-8859-15: da_DK.ISO8859-15
+da_DK.8859-15: da_DK.ISO8859-15
+da_DK.utf8: da_DK.UTF-8
+DA_DK.UTF-8: da_DK.UTF-8
+de: de_DE.ISO8859-1
+de.ISO8859-15: de_DE.ISO8859-15
+de_AT: de_AT.ISO8859-1
+de_AT@euro: de_AT.ISO8859-15
+de_AT.iso88591: de_AT.ISO8859-1
+de_AT.ISO-8859-1: de_AT.ISO8859-1
+de_AT.ISO_8859-1: de_AT.ISO8859-1
+de_AT.iso885915: de_AT.ISO8859-15
+de_AT.ISO-8859-15: de_AT.ISO8859-15
+de_AT.ISO-8859-15@euro: de_AT.ISO8859-15
+de_AT.UTF-8@euro: de_AT.UTF-8
+de_AT.utf8: de_AT.UTF-8
+de_BE: de_BE.ISO8859-1
+de_BE@euro: de_BE.ISO8859-15
+de_BE.iso88591: de_BE.ISO8859-1
+de_BE.ISO_8859-1: de_BE.ISO8859-1
+de_BE.ISO-8859-1: de_BE.ISO8859-1
+de_BE.iso885915: de_BE.ISO8859-15
+de_BE.ISO_8859-15: de_BE.ISO8859-15
+de_BE.ISO-8859-15: de_BE.ISO8859-15
+de_BE.ISO-8859-15@euro: de_BE.ISO8859-15
+de_BE.UTF-8@euro: de_BE.UTF-8
+de_CH: de_CH.ISO8859-1
+de_CH.iso88591: de_CH.ISO8859-1
+de_CH.ISO_8859-1: de_CH.ISO8859-1
+de_CH.ISO-8859-1: de_CH.ISO8859-1
+de_CH.iso885915: de_CH.ISO8859-15
+de_CH.ISO_8859-15: de_CH.ISO8859-15
+de_CH.ISO-8859-15: de_CH.ISO8859-15
+de_CH.utf8: de_CH.UTF-8
+de_DE: de_DE.ISO8859-1
+de_DE@euro: de_DE.ISO8859-15
+de_DE.88591: de_DE.ISO8859-1
+de_DE.88591.en: de_DE.ISO8859-1
+de_DE.iso88591: de_DE.ISO8859-1
+de_DE.ISO-8859-1: de_DE.ISO8859-1
+de_DE.ISO_8859-1: de_DE.ISO8859-1
+de_DE.iso885915: de_DE.ISO8859-15
+de_DE.ISO-8859-15: de_DE.ISO8859-15
+de_DE.ISO_8859-15: de_DE.ISO8859-15
+de_DE.8859-15: de_DE.ISO8859-15
+de_DE.8859-15@euro: de_DE.ISO8859-15
+de_DE.ISO-8859-15@euro: de_DE.ISO8859-15
+de_DE.UTF-8@euro: de_DE.UTF-8
+de_DE.utf8: de_DE.UTF-8
+de_IT: de_IT.UTF-8
+de_IT.utf8: de_IT.UTF-8
+de_LI: de_LI.ISO8859-1
+de_LI.iso88591: de_LI.ISO8859-1
+de_LI.ISO_8859-1: de_LI.ISO8859-1
+de_LI.ISO-8859-1: de_LI.ISO8859-1
+de_LI.iso885915: de_LI.ISO8859-15
+de_LI.ISO_8859-15: de_LI.ISO8859-15
+de_LI.ISO-8859-15: de_LI.ISO8859-15
+de_LI.utf8: de_LI.UTF-8
+de_LU: de_LU.ISO8859-1
+de_LU@euro: de_LU.ISO8859-15
+de_LU.iso88591: de_LU.ISO8859-1
+de_LU.ISO_8859-1: de_LU.ISO8859-1
+de_LU.ISO-8859-1: de_LU.ISO8859-1
+de_LU.iso885915: de_LU.ISO8859-15
+de_LU.ISO_8859-15: de_LU.ISO8859-15
+de_LU.ISO-8859-15: de_LU.ISO8859-15
+de_LU.ISO-8859-15@euro: de_LU.ISO8859-15
+de_LU.UTF-8@euro: de_LU.UTF-8
+de_LU.utf8: de_LU.UTF-8
+GER_DE.8859: de_DE.ISO8859-1
+GER_DE.8859.in: de_DE.ISO8859-1
+ee: ee_EE.ISO8859-4
+ee_EE: ee_EE.ISO8859-4
+ee_EE.iso88594: ee_EE.ISO8859-4
+el: el_GR.ISO8859-7
+el_GR: el_GR.ISO8859-7
+el_GR.iso88597: el_GR.ISO8859-7
+el_GR.ISO-8859-7: el_GR.ISO8859-7
+el_GR@euro: el_GR.ISO8859-15
+el_GR.utf8: el_GR.UTF-8
+en: en_US.ISO8859-1
+en.ISO-8859-1: en_US.ISO8859-1
+en_AU: en_AU.ISO8859-1
+en_AU.iso88591: en_AU.ISO8859-1
+en_AU.ISO-8859-1: en_AU.ISO8859-1
+en_AU.ISO_8859-1: en_AU.ISO8859-1
+en_AU.utf8: en_AU.UTF-8
+en_BE: en_BE.ISO8859-1
+en_BE@euro: en_BE.ISO8859-15
+en_BE.utf8: en_BE.UTF-8
+en_BW: en_BW.ISO8859-1
+en_BW.utf8: en_BW.UTF-8
+en_BW.iso88591: en_BW.ISO8859-1
+en_BW.ISO-8859-1: en_BW.ISO8859-1
+en_CA: en_CA.ISO8859-1
+en_CA.iso88591: en_CA.ISO8859-1
+en_CA.ISO-8859-1: en_CA.ISO8859-1
+en_CA.ISO_8859-1: en_CA.ISO8859-1
+en_CA.utf8: en_CA.UTF-8
+en_DL.utf8: en_DL.UTF-8
+en_GB: en_GB.ISO8859-1
+en_GB.88591: en_GB.ISO8859-1
+en_GB.88591.en: en_GB.ISO8859-1
+en_GB.iso88591: en_GB.ISO8859-1
+en_GB.ISO-8859-1: en_GB.ISO8859-1
+en_GB.ISO_8859-1: en_GB.ISO8859-1
+en_GB.iso885915: en_GB.ISO8859-15
+en_GB.ISO-8859-15: en_GB.ISO8859-15
+en_GB.utf8: en_GB.UTF-8
+en_UK: en_GB.ISO8859-1
+ENG_GB.8859: en_GB.ISO8859-1
+ENG_GB.8859.in: en_GB.ISO8859-1
+en_HK: en_HK.ISO8859-1
+en_HK.iso88591: en_HK.ISO8859-1
+en_HK.ISO-8859-1: en_HK.ISO8859-1
+en_HK.utf8: en_HK.UTF-8
+en_IE: en_IE.ISO8859-1
+en_IE.iso88591: en_IE.ISO8859-1
+en_IE.ISO-8859-1: en_IE.ISO8859-1
+en_IE.iso885915: en_IE.ISO8859-15
+en_IE.ISO-8859-15: en_IE.ISO8859-15
+en_IE.ISO-8859-15@euro: en_IE.ISO8859-15
+en_IE@euro: en_IE.ISO8859-15
+en_IE.UTF-8@euro: en_IE.UTF-8
+en_IE.utf8: en_IE.UTF-8
+en_IN.utf8: en_IN.UTF-8
+en_IN: en_IN.ISO8859-1
+en_NZ: en_NZ.ISO8859-1
+en_NZ.iso88591: en_NZ.ISO8859-1
+en_NZ.ISO-8859-1: en_NZ.ISO8859-1
+en_NZ.utf8: en_NZ.UTF-8
+en_PH: en_PH.ISO8859-1
+en_PH.utf8: en_PH.UTF-8
+en_PH.iso88591: en_PH.ISO8859-1
+en_PH.ISO-8859-1: en_PH.ISO8859-1
+en_SG: en_SG.ISO8859-1
+en_SG.utf8: en_SG.UTF-8
+en_SG.iso88591: en_SG.ISO8859-1
+en_SG.ISO-8859-1: en_SG.ISO8859-1
+en_US: en_US.ISO8859-1
+EN_US: en_US.ISO8859-1
+en_US.88591: en_US.ISO8859-1
+en_US.88591.en: en_US.ISO8859-1
+en_US.iso88591: en_US.ISO8859-1
+en_US.ISO-8859-1: en_US.ISO8859-1
+en_US.ISO_8859-1: en_US.ISO8859-1
+en_US.iso885915: en_US.ISO8859-15
+en_US.ISO-8859-15: en_US.ISO8859-15
+en_US.8859-15: en_US.ISO8859-15
+en_US.ISO8859-15@euro: en_US.ISO8859-15
+en_US.utf8: en_US.UTF-8
+EN_US.UTF-8: en_US.UTF-8
+en_ZA: en_ZA.ISO8859-1
+en_ZA.88591: en_ZA.ISO8859-1
+en_ZA.88591.en: en_ZA.ISO8859-1
+en_ZA.iso88591: en_ZA.ISO8859-1
+en_ZA.ISO-8859-1: en_ZA.ISO8859-1
+en_ZA.ISO_8859-1: en_ZA.ISO8859-1
+en_ZA.iso885915: en_ZA.ISO8859-15
+en_ZA.ISO-8859-15: en_ZA.ISO8859-15
+en_ZA.utf8: en_ZA.UTF-8
+en_ZW: en_ZW.ISO8859-1
+en_ZW.utf8: en_ZS.UTF-8
+en_ZW.iso88591: en_ZW.ISO8859-1
+en_ZW.ISO-8859-1: en_ZW.ISO8859-1
+eo: eo_XX.ISO8859-3
+eo_EO: eo_EO.ISO8859-3
+eo_XX: eo_XX.ISO8859-3
+es: es_ES.ISO8859-1
+es.UTF-8: es_ES.UTF-8
+es_AR: es_AR.ISO8859-1
+es_AR.iso88591: es_AR.ISO8859-1
+es_AR.ISO-8859-1: es_AR.ISO8859-1
+es_AR.utf8: es_AR.UTF-8
+es_BO: es_BO.ISO8859-1
+es_BO.iso88591: es_BO.ISO8859-1
+es_BO.ISO-8859-1: es_BO.ISO8859-1
+es_BO.utf8: es_BO.UTF-8
+es_CL: es_CL.ISO8859-1
+es_CL.iso88591: es_CL.ISO8859-1
+es_CL.ISO-8859-1: es_CL.ISO8859-1
+es_CL.utf8: es_CL.UTF-8
+es_CO: es_CO.ISO8859-1
+es_CO.iso88591: es_CO.ISO8859-1
+es_CO.ISO-8859-1: es_CO.ISO8859-1
+es_CO.utf8: es_CO.UTF-8
+es_CR: es_CR.ISO8859-1
+es_CR.iso88591: es_CR.ISO8859-1
+es_CR.ISO-8859-1: es_CR.ISO8859-1
+es_CR.utf8: es_CR.UTF-8
+es_DO: es_DO.ISO8859-1
+es_DO.iso88591: es_DO.ISO8859-1
+es_DO.ISO-8859-1: es_DO.ISO8859-1
+es_DO.utf8: es_DO.UTF-8
+es_EC: es_EC.ISO8859-1
+es_EC.iso88591: es_EC.ISO8859-1
+es_EC.ISO-8859-1: es_EC.ISO8859-1
+es_EC.utf8: es_EC.UTF-8
+es_ES: es_ES.ISO8859-1
+es_ES.88591: es_ES.ISO8859-1
+es_ES.88591.en: es_ES.ISO8859-1
+es_ES.iso88591: es_ES.ISO8859-1
+es_ES.ISO-8859-1: es_ES.ISO8859-1
+es_ES.ISO_8859-1: es_ES.ISO8859-1
+es_ES.iso885915: es_ES.ISO8859-15
+es_ES.ISO-8859-15: es_ES.ISO8859-15
+es_ES.ISO-8859-15@euro: es_ES.ISO8859-15
+es_ES@euro: es_ES.ISO8859-15
+es_ES.UTF-8@euro: es_ES.UTF-8
+es_ES.utf8: es_ES.UTF-8
+es_GT: es_GT.ISO8859-1
+es_GT.iso88591: es_GT.ISO8859-1
+es_GT.ISO-8859-1: es_GT.ISO8859-1
+es_GT.utf8: es_GT.UTF-8
+es_HN: es_HN.ISO8859-1
+es_HN.iso88591: es_HN.ISO8859-1
+es_HN.ISO-8859-1: es_HN.ISO8859-1
+es_HN.utf8: es_HN.UTF-8
+es_MX: es_MX.ISO8859-1
+es_MX.iso88591: es_MX.ISO8859-1
+es_MX.ISO-8859-1: es_MX.ISO8859-1
+es_MX.utf8: es_MX.UTF-8
+es_NI: es_NI.ISO8859-1
+es_NI.iso88591: es_NI.ISO8859-1
+es_NI.ISO-8859-1: es_NI.ISO8859-1
+es_NI.utf8: es_NI.UTF-8
+es_PA: es_PA.ISO8859-1
+es_PA.iso88591: es_PA.ISO8859-1
+es_PA.ISO-8859-1: es_PA.ISO8859-1
+es_PA.iso885915: es_PA.ISO8859-15
+es_PA.utf8: es_PA.UTF-8
+es_PE: es_PE.ISO8859-1
+es_PE.iso88591: es_PE.ISO8859-1
+es_PE.ISO-8859-1: es_PE.ISO8859-1
+es_PE.iso885915: es_PE.ISO8859-15
+es_PE.utf8: es_PE.UTF-8
+es_PR: es_PR.ISO8859-1
+es_PR.iso88591: es_PR.ISO8859-1
+es_PR.ISO-8859-1: es_PR.ISO8859-1
+es_PR.utf8: es_PR.UTF-8
+es_PY: es_PY.ISO8859-1
+es_PY.iso88591: es_PY.ISO8859-1
+es_PY.ISO-8859-1: es_PY.ISO8859-1
+es_PY.iso885915: es_PY.ISO8859-15
+es_PY.utf8: es_PY.UTF-8
+es_SV: es_SV.ISO8859-1
+es_SV.iso88591: es_SV.ISO8859-1
+es_SV.ISO-8859-1: es_SV.ISO8859-1
+es_SV.iso885915: es_SV.ISO8859-15
+es_SV.utf8: es_SV.UTF-8
+es_US: es_US.ISO8859-1
+es_US.iso88591: es_US.ISO8859-1
+es_US.ISO-8859-1: es_US.ISO8859-1
+es_UY: es_UY.ISO8859-1
+es_UY.iso88591: es_UY.ISO8859-1
+es_UY.ISO-8859-1: es_UY.ISO8859-1
+es_UY.iso885915: es_UY.ISO8859-15
+es_UY.utf8: es_UY.UTF-8
+es_VE: es_VE.ISO8859-1
+es_VE.iso88591: es_VE.ISO8859-1
+es_VE.ISO-8859-1: es_VE.ISO8859-1
+es_VE.iso885915: es_VE.ISO8859-15
+es_VE.utf8: es_VE.UTF-8
+# According to Estonian local standards, ISO8859-4 is not a recommended
+# charset. EVS8:2000 specifies ISO8859-15 as the base charset.
+et: et_EE.ISO8859-15
+et_EE: et_EE.ISO8859-15
+et_EE.iso88591: et_EE.ISO8859-1
+et_EE.ISO-8859-1: et_EE.ISO8859-1
+et_EE.iso88594: et_EE.ISO8859-4
+et_EE.ISO-8859-4: et_EE.ISO8859-4
+et_EE.iso885913: et_EE.ISO8859-13
+et_EE.ISO-8859-13: et_EE.ISO8859-13
+et_EE.iso885915: et_EE.ISO8859-15
+et_EE.ISO-8859-15: et_EE.ISO8859-15
+et_EE.utf8: et_EE.UTF-8
+eu: eu_ES.ISO8859-1
+eu_ES: eu_ES.ISO8859-1
+eu_ES.iso88591: eu_ES.ISO8859-1
+eu_ES.ISO-8859-1: eu_ES.ISO8859-1
+eu_ES.iso885915: eu_ES.ISO8859-15
+eu_ES.ISO-8859-15: eu_ES.ISO8859-15
+eu_ES.ISO-8859-15@euro: eu_ES.ISO8859-15
+eu_ES@euro: eu_ES.ISO8859-15
+eu_ES.UTF-8@euro: eu_ES.UTF-8
+fa: fa_IR.UTF-8
+fa_IR: fa_IR.UTF-8
+fa_IR.isiri3342: fa_IR.ISIRI-3342
+fa_IR.utf8: fa_IR.UTF-8
+fi: fi_FI.ISO8859-15
+fi.ISO8859-15: fi_FI.ISO8859-15
+fi_FI: fi_FI.ISO8859-15
+fi_FI.88591: fi_FI.ISO8859-1
+fi_FI.88591.en: fi_FI.ISO8859-1
+fi_FI.iso88591: fi_FI.ISO8859-1
+fi_FI.ISO-8859-1: fi_FI.ISO8859-1
+fi_FI.ISO_8859-1: fi_FI.ISO8859-1
+fi_FI.iso885915: fi_FI.ISO8859-15
+fi_FI.ISO-8859-15: fi_FI.ISO8859-15
+fi_FI.ISO-8859-15@euro: fi_FI.ISO8859-15
+fi_FI@euro: fi_FI.ISO8859-15
+fi_FI.utf8: fi_FI.UTF-8
+fi_FI.UTF-8@euro: fi_FI.UTF-8
+fo: fo_FO.ISO8859-1
+fo_FO: fo_FO.ISO8859-1
+fo_FO.iso88591: fo_FO.ISO8859-1
+fo_FO.ISO-8859-1: fo_FO.ISO8859-1
+fo_FO.iso885915: fo_FO.ISO8859-15
+fo_FO.ISO-8859-15: fo_FO.ISO8859-15
+fo_FO.utf8: fo_FO.UTF-8
+fr: fr_FR.ISO8859-1
+fr.ISO8859-15: fr_FR.ISO8859-15
+fr.UTF-8: fr_FR.UTF-8
+fr_BE: fr_BE.ISO8859-1
+fr_BE.88591: fr_BE.ISO8859-1
+fr_BE.88591.en: fr_BE.ISO8859-1
+fr_BE.ISO-8859-1: fr_BE.ISO8859-1
+fr_BE.ISO_8859-1: fr_BE.ISO8859-1
+fr_BE.iso885915: fr_BE.ISO8859-15
+fr_BE.ISO-8859-15: fr_BE.ISO8859-15
+fr_BE.ISO-8859-15@euro: fr_BE.ISO8859-15
+fr_BE@euro: fr_BE.ISO8859-15
+fr_BE.utf8: fr_BE.UTF-8
+fr_BE.UTF-8@euro: fr_BE.UTF-8
+fr_CA: fr_CA.ISO8859-1
+fr_CA.88591: fr_CA.ISO8859-1
+fr_CA.88591.en: fr_CA.ISO8859-1
+fr_CA.iso88591: fr_CA.ISO8859-1
+fr_CA.ISO-8859-1: fr_CA.ISO8859-1
+fr_CA.ISO_8859-1: fr_CA.ISO8859-1
+fr_CA.iso885915: fr_CA.ISO8859-15
+fr_CA.ISO-8859-15: fr_CA.ISO8859-15
+fr_CA.utf8: fr_CA.UTF-8
+fr_CH: fr_CH.ISO8859-1
+fr_CH.88591: fr_CH.ISO8859-1
+fr_CH.88591.en: fr_CH.ISO8859-1
+fr_CH.ISO-8859-1: fr_CH.ISO8859-1
+fr_CH.ISO_8859-1: fr_CH.ISO8859-1
+fr_CH.iso885915: fr_CH.ISO8859-15
+fr_CH.ISO-8859-15: fr_CH.ISO8859-15
+fr_CH.utf8: fr_CH.UTF-8
+fr_FR: fr_FR.ISO8859-1
+fr_FR.88591: fr_FR.ISO8859-1
+fr_FR.88591.en: fr_FR.ISO8859-1
+fr_FR.iso88591: fr_FR.ISO8859-1
+fr_FR.ISO-8859-1: fr_FR.ISO8859-1
+fr_FR.ISO_8859-1: fr_FR.ISO8859-1
+fr_FR.iso885915: fr_FR.ISO8859-15
+fr_FR.ISO-8859-15: fr_FR.ISO8859-15
+fr_FR.ISO-8859-15@euro: fr_FR.ISO8859-15
+fr_FR@euro: fr_FR.ISO8859-15
+fr_FR.UTF-8@euro: fr_FR.UTF-8
+fr_FR.utf8: fr_FR.UTF-8
+fr_LU: fr_LU.ISO8859-1
+fr_LU.88591: fr_LU.ISO8859-1
+fr_LU.88591.en: fr_LU.ISO8859-1
+fr_LU.iso88591: fr_LU.ISO8859-1
+fr_LU.ISO-8859-1: fr_LU.ISO8859-1
+fr_LU.ISO_8859-1: fr_LU.ISO8859-1
+fr_LU.iso885915: fr_LU.ISO8859-15
+fr_LU.ISO-8859-15: fr_LU.ISO8859-15
+fr_LU.ISO-8859-15@euro: fr_LU.ISO8859-15
+fr_LU@euro: fr_LU.ISO8859-15
+fr_LU.UTF-8@euro: fr_LU.UTF-8
+fr_LU.utf8: fr_LU.UTF-8
+FRE_FR.8859: fr_FR.ISO8859-1
+FRE_FR.8859.in: fr_FR.ISO8859-1
+ga: ga_IE.ISO8859-1
+ga_IE: ga_IE.ISO8859-1
+ga_IE.iso88591: ga_IE.ISO8859-1
+ga_IE.ISO-8859-1: ga_IE.ISO8859-1
+ga_IE.iso885914: ga_IE.ISO8859-14
+ga_IE.ISO-8859-14: ga_IE.ISO8859-14
+ga_IE.iso885915: ga_IE.ISO8859-15
+ga_IE.ISO-8859-15: ga_IE.ISO8859-15
+ga_IE.ISO-8859-15@euro: ga_IE.ISO8859-15
+ga_IE@euro: ga_IE.ISO8859-15
+ga_IE.UTF-8@euro: ga_IE.UTF-8
+ga_IE.utf8: ga_IE.UTF-8
+gd: gd_GB.ISO8859-1
+gd_GB: gd_GB.ISO8859-1
+gd_GB.iso88591: gd_GB.ISO8859-1
+gd_GB.ISO-8859-1: gd_GB.ISO8859-1
+gd_GB.iso885914: gd_GB.ISO8859-14
+gd_GB.ISO-8859-14: gd_GB.ISO8859-14
+gd_GB.iso885915: gd_GB.ISO8859-15
+gd_GB.ISO-8859-15: gd_GB.ISO8859-15
+gl: gl_ES.ISO8859-1
+gl_ES: gl_ES.ISO8859-1
+gl_ES.iso88591: gl_ES.ISO8859-1
+gl_ES.ISO-8859-1: gl_ES.ISO8859-1
+gl_ES.iso885915: gl_ES.ISO8859-15
+gl_ES.ISO-8859-15: gl_ES.ISO8859-15
+gl_ES.ISO-8859-15@euro: gl_ES.ISO8859-15
+gl_ES@euro: gl_ES.ISO8859-15
+gl_ES.UTF-8@euro: gl_ES.UTF-8
+gl_ES.utf8: gl_ES.UTF-8
+gu_IN: gu_IN.UTF-8
+gu_IN.utf8: gu_IN.UTF-8
+gv: gv_GB.ISO8859-1
+gv_GB: gv_GB.ISO8859-1
+gv_GB.iso88591: gv_GB.ISO8859-1
+gv_GB.ISO-8859-1: gv_GB.ISO8859-1
+gv_GB.iso885914: gv_GB.ISO8859-14
+gv_GB.ISO-8859-14: gv_GB.ISO8859-14
+gv_GB.iso885915: gv_GB.ISO8859-15
+gv_GB.ISO-8859-15: gv_GB.ISO8859-15
+he: he_IL.ISO8859-8
+he_IL: he_IL.ISO8859-8
+HE_IL: he_IL.ISO8859-8
+he_IL.iso88598: he_IL.ISO8859-8
+he_IL.ISO-8859-8: he_IL.ISO8859-8
+he_IL.cp1255: he_IL.CP1255
+he_IL.microsoftcp1255: he_IL.CP1255
+he_IL.microsoft-cp1255: he_IL.CP1255
+he_IL.MICROSOFT-CP1255: he_IL.CP1255
+he_IL.utf8: he_IL.UTF-8
+HE_IL.UTF-8: he_IL.UTF-8
+hi: hi_IN.ISCII-DEV
+hi_IN: hi_IN.ISCII-DEV
+HI_IN: hi_IN.ISCII-DEV
+hi_IN.isciidev: hi_IN.ISCII-DEV
+hi_IN.utf8: hi_IN.UTF-8
+HI_IN.UTF-8: hi_IN.UTF-8
+hne: hne_IN.UTF-8
+hne_IN: hne_IN.UTF-8
+hne_IN.utf8: hne_IN.UTF-8
+hr: hr_HR.ISO8859-2
+hr_HR: hr_HR.ISO8859-2
+hr_HR.iso88592: hr_HR.ISO8859-2
+hr_HR.ISO-8859-2: hr_HR.ISO8859-2
+hr_HR.ISO_8859-2: hr_HR.ISO8859-2
+hr_HR.utf8: hr_HR.UTF-8
+hu: hu_HU.ISO8859-2
+hu_HU: hu_HU.ISO8859-2
+hu_HU.iso88592: hu_HU.ISO8859-2
+hu_HU.ISO-8859-2: hu_HU.ISO8859-2
+hu_HU.utf8: hu_HU.UTF-8
+ia: ia.UTF-8
+ia.utf8: ia.UTF-8
+ie: ie.UTF-8
+ie.utf8: ie.UTF-8
+is: is_IS.ISO8859-1
+is_IS: is_IS.ISO8859-1
+is_IS.iso88591: is_IS.ISO8859-1
+is_IS.ISO-8859-1: is_IS.ISO8859-1
+is_IS.ISO_8859-1: is_IS.ISO8859-1
+is_IS.iso885915: is_IS.ISO8859-15
+is_IS.ISO-8859-15: is_IS.ISO8859-15
+is_IS.utf8: is_IS.UTF-8
+it: it_IT.ISO8859-1
+it.ISO8859-15: it_IT.ISO8859-15
+it.UTF-8: it_IT.UTF-8
+it_CH: it_CH.ISO8859-1
+it_CH.iso88591: it_CH.ISO8859-1
+it_CH.ISO_8859-1: it_CH.ISO8859-1
+it_CH.ISO-8859-1: it_CH.ISO8859-1
+it_CH.iso885915: it_CH.ISO8859-15
+it_CH.utf8: it_CH.UTF-8
+it_IT: it_IT.ISO8859-1
+it_IT.88591: it_IT.ISO8859-1
+it_IT.88591.en: it_IT.ISO8859-1
+it_IT.iso88591: it_IT.ISO8859-1
+it_IT.ISO-8859-1: it_IT.ISO8859-1
+it_IT.ISO_8859-1: it_IT.ISO8859-1
+it_IT.iso885915: it_IT.ISO8859-15
+it_IT.ISO-8859-15: it_IT.ISO8859-15
+it_IT.ISO-8859-15@euro: it_IT.ISO8859-15
+it_IT@euro: it_IT.ISO8859-15
+it_IT.utf8: it_IT.UTF-8
+it_IT.UTF-8@euro: it_IT.UTF-8
+# NUNACOM is an encoding for the Inuktitut syllabics
+# we have little else on this encoding.
+iu: iu_CA.NUNACOM-8
+iu_CA: iu_CA.NUNACOM-8
+iu_CA.nunacom8: iu_CA.NUNACOM-8
+ja_JP: ja_JP.eucJP
+ja: ja_JP.eucJP
+ja.JIS: ja_JP.JIS7
+ja.SJIS: ja_JP.SJIS
+ja_JP.ujis: ja_JP.eucJP
+Jp_JP: ja_JP.eucJP
+ja_JP.AJEC: ja_JP.eucJP
+ja_JP.EUC: ja_JP.eucJP
+ja_JP.EUC-JP: ja_JP.eucJP
+ja_JP.EUC_JP: ja_JP.eucJP
+ja_JP.eucjp: ja_JP.eucJP
+ja_JP.ISO-2022-JP: ja_JP.JIS7
+ja_JP.JIS: ja_JP.JIS7
+ja_JP.jis7: ja_JP.JIS7
+ja_JP.mscode: ja_JP.SJIS
+ja_JP.PCK: ja_JP.SJIS
+ja_JP.sjis: ja_JP.SJIS
+ja_JP.utf8: ja_JP.UTF-8
+JA_JP.utf8: ja_JP.UTF-8
+ka: ka_GE.GEORGIAN-ACADEMY
+ka_GE: ka_GE.GEORGIAN-ACADEMY
+ka_GE.georgianacademy: ka_GE.GEORGIAN-ACADEMY
+ka_GE.georgianrs: ka_GE.GEORGIAN-ACADEMY
+ka_GE.georgianps: ka_GE.GEORGIAN-PS
+kl: kl_GL.ISO8859-1
+kl_GL: kl_GL.ISO8859-1
+kl_GL.iso88591: kl_GL.ISO8859-1
+kl_GL.ISO-8859-1: kl_GL.ISO8859-1
+kl_GL.iso885915: kl_GL.ISO8859-15
+kl_GL.utf8: kl_GL.UTF-8
+km_KH: km_KH.UTF-8
+km_KH.utf8: km_KH.UTF-8
+kn: kn_IN.UTF-8
+kn_IN: kn_IN.UTF-8
+kn_IN.utf8: kn_IN.UTF-8
+ko: ko_KR.eucKR
+ko.UTF-8: ko_KR.UTF-8
+ko_KR: ko_KR.eucKR
+KO_KR: ko_KR.eucKR
+ko_KR.EUC: ko_KR.eucKR
+ko_KR.EUC-KR: ko_KR.eucKR
+ko_KR.euc: ko_KR.eucKR
+ko_KR.euckr: ko_KR.eucKR
+ko_KR.utf8: ko_KR.UTF-8
+KO_KR.UTF-8: ko_KR.UTF-8
+ks: ks_IN.UTF-8
+ks_IN: ks_IN.UTF-8
+ks_IN.utf8: ks_IN.UTF-8
+ks_IN@devanagari: ks_IN.UTF-8@devanagari
+ks_IN.utf8@devanagari: ks_IN.UTF-8@devanagari
+kw: kw_GB.ISO8859-1
+kw_GB: kw_GB.ISO8859-1
+kw_GB.iso88591: kw_GB.ISO8859-1
+kw_GB.ISO-8859-1: kw_GB.ISO8859-1
+kw_GB.iso885914: kw_GB.ISO8859-14
+kw_GB.ISO-8859-14: kw_GB.ISO8859-14
+kw_GB.iso885915: kw_GB.ISO8859-15
+kw_GB.ISO-8859-15: kw_GB.ISO8859-15
+ky: ky_KG.UTF-8
+ky_KG: ky_KG.UTF-8
+ky_KG.utf8: ky_KG.UTF-8
+lo: lo_LA.MULELAO-1
+lo_LA: lo_LA.MULELAO-1
+lo_LA.cp1133: lo_LA.IBM-CP1133
+lo_LA.ibmcp1133: lo_LA.IBM-CP1133
+lo_LA.mulelao1: lo_LA.MULELAO-1
+lt: lt_LT.ISO8859-13
+lt_LT: lt_LT.ISO8859-13
+lt_LT.iso88594: lt_LT.ISO8859-4
+lt_LT.ISO-8859-4: lt_LT.ISO8859-4
+lt_LT.ISO_8859-4: lt_LT.ISO8859-4
+lt_LT.iso885913: lt_LT.ISO8859-13
+lt_LT.ISO-8859-13: lt_LT.ISO8859-13
+lt_LT.ISO_8859-13: lt_LT.ISO8859-13
+lt_LT.utf8: lt_LT.UTF-8
+lv: lv_LV.ISO8859-13
+lv_LV: lv_LV.ISO8859-13
+lv_LV.iso88594: lv_LV.ISO8859-4
+lv_LV.ISO-8859-4: lv_LV.ISO8859-4
+lv_LV.iso885913: lv_LV.ISO8859-13
+lv_LV.ISO-8859-13: lv_LV.ISO8859-13
+lv_LV.ISO_8859-13: lv_LV.ISO8859-13
+lv_LV.utf8: lv_LV.UTF-8
+mai: mai_IN.UTF-8
+mai_IN: mai_IN.UTF-8
+mai_IN.utf8: mai_IN.UTF-8
+mi: mi_NZ.ISO8859-1
+mi_NZ: mi_NZ.ISO8859-1
+mi_NZ.iso88591: mi_NZ.ISO8859-1
+mk: mk_MK.ISO8859-5
+mk_MK: mk_MK.ISO8859-5
+mk_MK.iso88595: mk_MK.ISO8859-5
+mk_MK.ISO-8859-5: mk_MK.ISO8859-5
+mk_MK.cp1251: mk_MK.CP1251
+mk_MK.microsoftcp1251: mk_MK.CP1251
+mk_MK.microsoft-cp1251: mk_MK.CP1251
+mk_MK.MICROSOFT-CP1251: mk_MK.CP1251
+mk_MK.utf8: mk_MK.UTF-8
+ml: ml_IN.UTF-8
+ml_IN: ml_IN.UTF-8
+ml_IN.utf8: ml_IN.UTF-8
+mr: mr_IN.UTF-8
+mr_IN: mr_IN.UTF-8
+mr_IN.utf8: mr_IN.UTF-8
+ms: ms_MY.ISO8859-1
+ms_MY: ms_MY.ISO8859-1
+ms_MY.iso88591: ms_MY.ISO8859-1
+ms_MY.ISO-8859-1: ms_MY.ISO8859-1
+mt: mt_MT.ISO8859-3
+mt_MT: mt_MT.ISO8859-3
+mt_MT.ISO-8859-3: mt_MT.ISO8859-3
+nb: nb_NO.ISO8859-1
+nb_NO: nb_NO.ISO8859-1
+nb_NO.88591: nb_NO.ISO8859-1
+nb_NO.iso88591: nb_NO.ISO8859-1
+nb_NO.ISO-8859-1: nb_NO.ISO8859-1
+nb_NO.iso885915: nb_NO.ISO8859-15
+nb_NO.ISO-8859-15: nb_NO.ISO8859-15
+nb_NO.utf8: nb_NO.UTF-8
+ne_NP: ne_NP.UTF-8
+ne_NP.utf8: ne_NP.UTF-8
+nl: nl_NL.ISO8859-1
+nl.ISO8859-15: nl_NL.ISO8859-15
+nl_BE: nl_BE.ISO8859-1
+nl_BE.88591: nl_BE.ISO8859-1
+nl_BE.88591.en: nl_BE.ISO8859-1
+nl_BE.iso88591: nl_BE.ISO8859-1
+nl_BE.ISO-8859-1: nl_BE.ISO8859-1
+nl_BE.ISO_8859-1: nl_BE.ISO8859-1
+nl_BE.iso885915: nl_BE.ISO8859-15
+nl_BE.ISO-8859-15: nl_BE.ISO8859-15
+nl_BE.ISO-8859-15@euro: nl_BE.ISO8859-15
+nl_BE@euro: nl_BE.ISO8859-15
+nl_BE.utf8: nl_BE.UTF-8
+nl_BE.UTF-8@euro: nl_BE.UTF-8
+nl_NL: nl_NL.ISO8859-1
+nl_NL.88591: nl_NL.ISO8859-1
+nl_NL.88591.en: nl_NL.ISO8859-1
+nl_NL.iso88591: nl_NL.ISO8859-1
+nl_NL.ISO-8859-1: nl_NL.ISO8859-1
+nl_NL.ISO_8859-1: nl_NL.ISO8859-1
+nl_NL.iso885915: nl_NL.ISO8859-15
+nl_NL.ISO-8859-15: nl_NL.ISO8859-15
+nl_NL.ISO-8859-15@euro: nl_NL.ISO8859-15
+nl_NL@euro: nl_NL.ISO8859-15
+nl_NL.utf8: nl_NL.UTF-8
+nl_NL.UTF-8@euro: nl_NL.UTF-8
+nn: nn_NO.ISO8859-1
+nn_NO: nn_NO.ISO8859-1
+nn_NO.88591: nn_NO.ISO8859-1
+nn_NO.ISO-8859-1: nn_NO.ISO8859-1
+nn_NO.ISO_8859-1: nn_NO.ISO8859-1
+nn_NO.iso885915: nn_NO.ISO8859-15
+nn_NO.ISO-8859-15: nn_NO.ISO8859-15
+nn_NO.utf8: nn_NO.UTF-8
+no: no_NO.ISO8859-1
+no_NO: no_NO.ISO8859-1
+no_NO.88591: no_NO.ISO8859-1
+no_NO.88591.en: no_NO.ISO8859-1
+no_NO.iso88591: no_NO.ISO8859-1
+no_NO.ISO-8859-1: no_NO.ISO8859-1
+no_NO.ISO8859-1@bokmal: no_NO.ISO8859-1
+no_NO.ISO8859-1@nynorsk: no_NO.ISO8859-1
+no_NO.iso885915: no_NO.ISO8859-15
+no_NO.ISO-8859-15: no_NO.ISO8859-15
+no_NO.utf8: no_NO.UTF-8
+nr: nr_ZA.ISO8859-1
+nr_ZA: nr_ZA.ISO8859-1
+nr_ZA.iso88591: nr_ZA.ISO8859-1
+nr_ZA.utf8: nr_ZA.UTF-8
+nso: nso_ZA.ISO8859-15
+nso_ZA: nso_ZA.ISO8859-15
+nso_ZA.iso885915: nso_ZA.ISO8859-15
+nso_ZA.utf8: nso_ZA.UTF-8
+ny: ny_NO.ISO8859-1
+ny_NO: ny_NO.ISO8859-1
+ny_NO.88591: ny_NO.ISO8859-1
+ny_NO.ISO_8859-1: ny_NO.ISO8859-1
+ny_NO.iso885915: ny_NO.ISO8859-15
+no@nynorsk: ny_NO.ISO8859-1
+nynorsk: nn_NO.ISO8859-1
+oc: oc_FR.ISO8859-1
+oc_FR: oc_FR.ISO8859-1
+oc_FR.iso88591: oc_FR.ISO8859-1
+oc_FR.ISO-8859-1: oc_FR.ISO8859-1
+oc_FR.iso885915: oc_FR.ISO8859-15
+oc_FR.ISO-8859-15: oc_FR.ISO8859-15
+oc_FR@euro: oc_FR.ISO8859-15
+or: or_IN.UTF-8
+or_IN: or_IN.UTF-8
+or_IN.utf8: or_IN.UTF-8
+pa: pa_IN.UTF-8
+pa_IN: pa_IN.UTF-8
+pa_IN.utf8: pa_IN.UTF-8
+pa_PK.utf8: pa_PK.UTF-8
+pd: pd_US.ISO8859-1
+pd_DE: pd_DE.ISO8859-1
+pd_US: pd_US.ISO8859-1
+pd_DE.iso88591: pd_DE.ISO8859-1
+pd_US.iso88591: pd_US.ISO8859-1
+pd_DE.iso885915: pd_DE.ISO8859-15
+pd_US.iso885915: pd_US.ISO8859-15
+ph: ph_PH.ISO8859-1
+ph_PH: ph_PH.ISO8859-1
+ph_PH.iso88591: ph_PH.ISO8859-1
+pl: pl_PL.ISO8859-2
+pl.UTF-8: pl_PL.UTF-8
+pl_PL: pl_PL.ISO8859-2
+pl_PL.iso88592: pl_PL.ISO8859-2
+pl_PL.ISO-8859-2: pl_PL.ISO8859-2
+pl_PL.utf8: pl_PL.UTF-8
+pp: pp_AN.ISO8859-1
+pp_AN: pp_AN.ISO8859-1
+pp_AN.iso88591: pp_AN.ISO8859-1
+pt: pt_PT.ISO8859-1
+pt.ISO8859-15: pt_PT.ISO8859-15
+pt_BR: pt_BR.ISO8859-1
+pt_BR.88591: pt_BR.ISO8859-1
+pt_BR.88591.en: pt_BR.ISO8859-1
+pt_BR.iso88591: pt_BR.ISO8859-1
+pt_BR.ISO-8859-1: pt_BR.ISO8859-1
+pt_BR.ISO_8859-1: pt_BR.ISO8859-1
+pt_BR.iso885915: pt_BR.ISO8859-15
+pt_BR.utf8: pt_BR.UTF-8
+pt_PT: pt_PT.ISO8859-1
+pt_PT.88591: pt_PT.ISO8859-1
+pt_PT.88591.en: pt_PT.ISO8859-1
+pt_PT.iso88591: pt_PT.ISO8859-1
+pt_PT.ISO-8859-1: pt_PT.ISO8859-1
+pt_PT.ISO_8859-1: pt_PT.ISO8859-1
+pt_PT.iso885915: pt_PT.ISO8859-15
+pt_PT.ISO-8859-15: pt_PT.ISO8859-15
+pt_PT.ISO-8859-15@euro: pt_PT.ISO8859-15
+pt_PT@euro: pt_PT.ISO8859-15
+pt_PT.utf8: pt_PT.UTF-8
+pt_PT.UTF-8@euro: pt_PT.UTF-8
+ro: ro_RO.ISO8859-2
+ro_RO: ro_RO.ISO8859-2
+ro_RO.iso88592: ro_RO.ISO8859-2
+ro_RO.ISO-8859-2: ro_RO.ISO8859-2
+ro_RO.utf8: ro_RO.UTF-8
+ru: ru_RU.UTF-8
+ru.koi8-r: ru_RU.KOI8-R
+ru.UTF-8: ru_RU.UTF-8
+ru_RU: ru_RU.UTF-8
+ru_RU.utf8: ru_RU.UTF-8
+ru_RU.iso88595: ru_RU.ISO8859-5
+ru_RU.ISO-8859-5: ru_RU.ISO8859-5
+ru_RU.koi8r: ru_RU.KOI8-R
+ru_RU.cp1251: ru_RU.CP1251
+ru_RU.microsoftcp1251: ru_RU.CP1251
+ru_RU.microsoft-cp1251: ru_RU.CP1251
+ru_RU.MICROSOFT-CP1251: ru_RU.CP1251
+ru_UA: ru_UA.KOI8-U
+ru_UA.koi8u: ru_UA.KOI8-U
+ru_UA.cp1251: ru_UA.CP1251
+ru_UA.microsoftcp1251: ru_UA.CP1251
+ru_UA.microsoft-cp1251: ru_UA.CP1251
+ru_UA.MICROSOFT-CP1251: ru_UA.CP1251
+rw: rw_RW.ISO8859-1
+rw_RW: rw_RW.ISO8859-1
+rw_RW.iso8859-1: rw_RW.ISO8859-1
+rw_RW.ISO-8859-1: rw_RW.ISO8859-1
+rw_RW.utf8: rw_RW.UTF-8
+sd: sd_IN.UTF-8
+sd_IN.utf8: sd_IN.UTF-8
+sd@devanagari: sd_IN.UTF-8@devanagari
+sd_IN@devanagari: sd_IN.UTF-8@devanagari
+sd_IN.utf8@devanagari: sd_IN.UTF-8@devanagari
+se_NO: se_NO.UTF-8
+se_NO.utf8: se_NO.UTF-8
+si: si_LK.UTF-8
+si_LK: si_LK.UTF-8
+sk: sk_SK.ISO8859-2
+sk_SK: sk_SK.ISO8859-2
+sk_SK.iso88592: sk_SK.ISO8859-2
+sk_SK.ISO-8859-2: sk_SK.ISO8859-2
+sk_SK.utf8: sk_SK.UTF-8
+sl: sl_SI.ISO8859-2
+sl_SI: sl_SI.ISO8859-2
+sl_SI.iso88592: sl_SI.ISO8859-2
+sl_SI.ISO-8859-2: sl_SI.ISO8859-2
+sl_SI.utf8: sl_SI.UTF-8
+sq: sq_AL.ISO8859-2
+sq_AL: sq_AL.ISO8859-2
+sq_AL.iso88592: sq_AL.ISO8859-2
+sq_AL.ISO-8859-2: sq_AL.ISO8859-2
+sq_AL.utf8: sq_AL.UTF-8
+sr: sr_RS.UTF-8
+sr@cyrillic: sr_RS.UTF-8
+sr@latin: sr_RS.UTF-8@latin
+sr@Latn: sr_RS.UTF-8@latin
+sr_RS: sr_RS.UTF-8
+sr_RS@latin: sr_RS.UTF-8@latin
+sr_RS@Latn: sr_RS.UTF-8@latin
+sr_RS.UTF-8@Latn: sr_RS.UTF-8@latin
+sr_RS.utf8: sr_RS.UTF-8
+sr_ME: sr_ME.UTF-8
+sr_ME.utf8: sr_ME.UTF-8
+ss: ss_ZA.ISO8859-1
+ss_ZA: ss_ZA.ISO8859-1
+ss_ZA.iso88591: ss_ZA.ISO8859-1
+ss_ZA.utf8: ss_ZA.UTF-8
+st: st_ZA.ISO8859-1
+st_ZA: st_ZA.ISO8859-1
+st_ZA.iso88591: st_ZA.ISO8859-1
+st_ZA.utf8: st_ZA.UTF-8
+sv: sv_SE.ISO8859-1
+sv.ISO8859-15: sv_SE.ISO8859-15
+sv.UTF-8: sv_SE.UTF-8
+sv_FI: sv_FI.ISO8859-1
+sv_FI.iso88591: sv_FI.ISO8859-1
+sv_FI.ISO-8859-1: sv_FI.ISO8859-1
+sv_FI.iso885915: sv_FI.ISO8859-15
+sv_FI.ISO-8859-15: sv_FI.ISO8859-15
+sv_FI.ISO-8859-15@euro: sv_FI.ISO8859-15
+sv_FI@euro: sv_FI.ISO8859-15
+sv_FI.UTF-8@euro: sv_FI.UTF-8
+sv_FI.utf8: sv_FI.UTF-8
+sv_SE: sv_SE.ISO8859-1
+sv_SE.88591: sv_SE.ISO8859-1
+sv_SE.88591.en: sv_SE.ISO8859-1
+sv_SE.iso88591: sv_SE.ISO8859-1
+sv_SE.ISO-8859-1: sv_SE.ISO8859-1
+sv_SE.ISO_8859-1: sv_SE.ISO8859-1
+sv_SE.iso885915: sv_SE.ISO8859-15
+sv_SE.ISO-8859-15: sv_SE.ISO8859-15
+sv_SE@euro: sv_SE.ISO8859-15
+sv_SE.utf8: sv_SE.UTF-8
+ta: ta_IN.TSCII-0
+ta_IN: ta_IN.TSCII-0
+ta_IN.tscii: ta_IN.TSCII-0
+ta_IN.tscii0: ta_IN.TSCII-0
+te: te_IN.UTF-8
+te.UTF-8: te_IN.UTF-8
+te_IN.utf8: te_IN.UTF-8
+tg: tg_TJ.KOI8-C
+tg_TJ: tg_TJ.KOI8-C
+tg_TJ.koi8c: tg_TJ.KOI8-C
+th: th_TH.ISO8859-11
+th_TH: th_TH.ISO8859-11
+th_TH.ISO-8859-11: th_TH.ISO8859-11
+th_TH.tis620: th_TH.TIS620
+th_TH.TIS-620: th_TH.TIS620
+th_TH.TACTIS: th_TH.TIS620
+th_TH.utf8: th_TH.UTF-8
+tl: tl_PH.ISO8859-1
+tl_PH: tl_PH.ISO8859-1
+tl_PH.iso88591: tl_PH.ISO8859-1
+tl_PH.ISO-8859-1: tl_PH.ISO8859-1
+tn: tn_ZA.ISO8859-15
+tn_ZA: tn_ZA.ISO8859-15
+tn_ZA.iso8859-15: tn_ZA.ISO8859-15
+tn_ZA.utf8: tn_ZA.UTF-8
+tr: tr_TR.ISO8859-9
+tr_TR: tr_TR.ISO8859-9
+TR_TR: tr_TR.ISO8859-9
+tr_TR.iso88599: tr_TR.ISO8859-9
+tr_TR.ISO-8859-9: tr_TR.ISO8859-9
+tr_TR.utf8: tr_TR.UTF-8
+TR_TR.utf8: tr_TR.UTF-8
+ts: ts_ZA.ISO8859-1
+ts_ZA: ts_ZA.ISO8859-1
+ts_ZA.iso88591: ts_ZA.ISO8859-1
+ts_ZA.utf8: ts_ZA.UTF-8
+tt: tt_RU.TATAR-CYR
+tt_RU: tt_RU.TATAR-CYR
+tt_RU.tatarcyr: tt_RU.TATAR-CYR
+tt_RU.koi8c: tt_RU.KOI8-C
+uk: uk_UA.KOI8-U
+uk_UA: uk_UA.KOI8-U
+uk_UA.iso88595: uk_UA.ISO8859-5
+uk_UA.koi8u: uk_UA.KOI8-U
+uk_UA.cp1251: uk_UA.CP1251
+uk_UA.microsoftcp1251: uk_UA.CP1251
+uk_UA.microsoft-cp1251: uk_UA.CP1251
+uk_UA.MICROSOFT-CP1251: uk_UA.CP1251
+uk_UA.utf8: uk_UA.UTF-8
+ur: ur_IN.UTF-8
+ur_IN: ur_IN.UTF-8
+ur_IN.utf8: ur_IN.UTF-8
+ur: ur_PK.CP1256
+ur_PK: ur_PK.CP1256
+ur_PK.cp1256: ur_PK.CP1256
+ur_PK.microsoftcp1256: ur_PK.CP1256
+ur_PK.microsoft-cp1256: ur_PK.CP1256
+ur_PK.MICROSOFT-CP1256: ur_PK.CP1256
+uz: uz_UZ.UTF-8
+uz_UZ: uz_UZ.UTF-8
+uz_UZ.ISO-8859-1: uz_UZ.ISO8859-1
+uz_UZ@cyrillic: uz_UZ.UTF-8
+uz_UZ.UTF-8@cyrillic: uz_UZ.UTF-8
+ve: ve_ZA.UTF-8
+ve_ZA: ve_ZA.UTF-8
+ve_ZA.utf8: ve_ZA.UTF-8
+vi: vi_VN.TCVN
+vi_VN: vi_VN.TCVN
+Vi_VN: vi_VN.TCVN
+VI_VN: vi_VN.TCVN
+vi_VN.tcvn: vi_VN.TCVN
+vi_VN.tcvn5712: vi_VN.TCVN
+vi_VN.viscii: vi_VN.VISCII
+vi_VN.viscii111: vi_VN.VISCII
+vi_VN.utf8: vi_VN.UTF-8
+VI_VN.UTF-8: vi_VN.UTF-8
+wa: wa_BE.ISO8859-1
+wa_BE: wa_BE.ISO8859-1
+wa_BE.iso88591: wa_BE.ISO8859-1
+wa_BE.ISO-8859-1: wa_BE.ISO8859-1
+wa_BE.iso885915: wa_BE.ISO8859-15
+wa_BE.ISO-8859-15: wa_BE.ISO8859-15
+wa_BE.ISO-8859-15@euro: wa_BE.ISO8859-15
+wa_BE@euro: wa_BE.ISO8859-15
+xh: xh_ZA.ISO8859-1
+xh_ZA: xh_ZA.ISO8859-1
+xh_ZA.iso88591: xh_ZA.ISO8859-1
+xh_ZA.utf8: xh_ZA.UTF-8
+yi: yi_US.CP1255
+yi_US: yi_US.CP1255
+yi_US.cp1255: yi_US.CP1255
+yi_US.microsoftcp1255: yi_US.CP1255
+yi_US.microsoft-cp1255: yi_US.CP1255
+yi_US.MICROSOFT-CP1255: yi_US.CP1255
+zh_CN: zh_CN.gb2312
+zh_CN.Big5: zh_TW.big5
+zh_CN.EUC: zh_CN.eucCN
+zh_CN.GB2312: zh_CN.gb2312
+zh_CN.GBK: zh_CN.gbk
+zh_CN.GB18030: zh_CN.gb18030
+zh_CN.big5: zh_TW.big5
+zh_CN.euc: zh_CN.eucCN
+zh_CN.utf8: zh_CN.UTF-8
+ZH_CN.UTF-8: zh_CN.UTF-8
+zh_HK: zh_HK.big5hkscs
+zh_HK.BIG5HK: zh_HK.big5hkscs
+zh_HK.Big5hkscs: zh_HK.big5hkscs
+zh_HK.Big5-hkscs: zh_HK.big5hkscs
+zh_HK.Big5_hkscs: zh_HK.big5hkscs
+zh_HK.Big5HKSCS: zh_HK.big5hkscs
+zh_HK.BIG5-HKSCS: zh_HK.big5hkscs
+zh_HK.BIG5_HKSCS: zh_HK.big5hkscs
+zh_HK.Big5-HKSCS: zh_HK.big5hkscs
+zh_HK.big5-hkscs: zh_HK.big5hkscs
+zh_HK.Big5-HKSCS: zh_HK.big5hkscs
+zh_HK.Big5HKSCS: zh_HK.big5hkscs
+zh_HK.Big5: zh_HK.big5
+zh_HK.utf8: zh_HK.UTF-8
+ZH_HK.UTF-8: zh_HK.UTF-8
+ZH_SG.UTF-8: zh_SG.UTF-8
+zh_TW: zh_TW.big5
+zh_TW.Big5: zh_TW.big5
+zh_TW.BIG5: zh_TW.big5
+Zh_TW.big5: zh_TW.big5
+zh_TW.EUC: zh_TW.eucTW
+zh_TW.EUC-TW: zh_TW.eucTW
+zh_TW.utf8: zh_TW.UTF-8
+ZH_TW.UTF-8: zh_TW.UTF-8
+zu: zu_ZA.ISO8859-1
+zu_ZA: zu_ZA.ISO8859-1
+zu_ZA.iso88591: zu_ZA.ISO8859-1
+zu_ZA.utf8: zu_ZA.UTF-8
+# The following locale names are used in SCO 3.0
+english_uk.8859: en_GB.ISO8859-1
+english_us.8859: en_US.ISO8859-1
+english_us.ascii: en_US.ISO8859-1
+french_france.8859: fr_FR.ISO8859-1
+german_germany.8859: de_DE.ISO8859-1
+portuguese_brazil.8859: pt_BR.ISO8859-1
+spanish_spain.8859: es_ES.ISO8859-1
+# The following locale names are used in HPUX 9.x
+american.iso88591: en_US.ISO8859-1
+arabic.iso88596: ar_AA.ISO8859-6
+bokmal: nb_NO.ISO8859-1
+bokml: nb_NO.ISO8859-1
+bulgarian: bg_BG.CP1251
+c-french.iso88591: fr_CA.ISO8859-1
+catalan: ca_ES.ISO8859-1
+chinese-s: zh_CN.eucCN
+chinese-t: zh_TW.eucTW
+croatian: hr_HR.ISO8859-2
+czech: cs_CZ.ISO8859-2
+danish: da_DK.ISO8859-1
+dansk: da_DK.ISO8859-1
+danish.iso88591: da_DK.ISO8859-1
+deutsch: de_DE.ISO8859-1
+dutch: nl_NL.ISO8859-1
+dutch.iso88591: nl_BE.ISO8859-1
+eesti: et_EE.ISO8859-1
+english.iso88591: en_EN.ISO8859-1
+estonian: et_EE.ISO8859-1
+finnish: fi_FI.ISO8859-1
+finnish.iso88591: fi_FI.ISO8859-1
+franais: fr_FR.ISO8859-1
+french: fr_FR.ISO8859-1
+french.iso88591: fr_CH.ISO8859-1
+galego: gl_ES.ISO8859-1
+galician: gl_ES.ISO8859-1
+german: de_DE.ISO8859-1
+german.iso88591: de_CH.ISO8859-1
+greek: el_GR.ISO8859-7
+greek.iso88597: el_GR.ISO8859-7
+hebrew: he_IL.ISO8859-8
+hebrew.iso88598: he_IL.ISO8859-8
+hrvatski: hr_HR.ISO8859-2
+hungarian: hu_HU.ISO8859-2
+icelandic.iso88591: is_IS.ISO8859-1
+icelandic: is_IS.ISO8859-1
+italian: it_IT.ISO8859-1
+italian.iso88591: it_IT.ISO8859-1
+japanese: ja_JP.eucJP
+japanese.euc: ja_JP.eucJP
+japanese.sjis: ja_JP.SJIS
+korean: ko_KR.eucKR
+korean.euc: ko_KR.eucKR
+lithuanian: lt_LT.ISO8859-13
+norwegian: no_NO.ISO8859-1
+norwegian.iso88591: no_NO.ISO8859-1
+polish: pl_PL.ISO8859-2
+portuguese: pt_PT.ISO8859-1
+portuguese.iso88591: pt_PT.ISO8859-1
+romanian: ro_RO.ISO8859-2
+rumanian: ro_RO.ISO8859-2
+russian: ru_RU.ISO8859-5
+serbocroatian: sr_RS.UTF-8@latin
+sinhala: si_LK.UTF-8
+slovak: sk_SK.ISO8859-2
+slovene: sl_SI.ISO8859-2
+slovenian: sl_SI.ISO8859-2
+spanish: es_ES.ISO8859-1
+spanish.iso88591: es_ES.ISO8859-1
+swedish: sv_SE.ISO8859-1
+swedish.iso88591: sv_SE.ISO8859-1
+turkish: tr_TR.ISO8859-9
+turkish.iso88599: tr_TR.ISO8859-9
+thai: th_TH.ISO8859-11
+univ.utf8: en_US.UTF-8
+# Digital Unix utf
+universal.utf8@ucs4: en_US.UTF-8
+# Solaris and SunOS have iso_8859_1 and iso_8859_15 LC_CTYPES
+# to augment LANG=C
+iso_8859_1: en_US.ISO8859-1
+iso_8859_15: en_US.ISO8859-15
+# Other miscellaneous locale names
+ISO8859-1: en_US.ISO8859-1
+ISO-8859-1: en_US.ISO8859-1
+japan: ja_JP.eucJP
+Japanese-EUC: ja_JP.eucJP
diff --git a/test/data/locale/locale.dir b/test/data/locale/locale.dir
new file mode 100644
index 0000000..8bdaf5f
--- /dev/null
+++ b/test/data/locale/locale.dir
@@ -0,0 +1,948 @@
+#
+# This file contains locale database file names
+# The first word is the locale database file name and
+# the second word is the full locale name.
+#
+#
+C/XLC_LOCALE C
+iso8859-1/XLC_LOCALE af_ZA.ISO8859-1
+iso8859-6/XLC_LOCALE ar_AA.ISO8859-6
+iso8859-6/XLC_LOCALE ar_BH.ISO8859-6
+iso8859-6/XLC_LOCALE ar_DZ.ISO8859-6
+iso8859-6/XLC_LOCALE ar_EG.ISO8859-6
+iso8859-6/XLC_LOCALE ar_IQ.ISO8859-6
+iso8859-6/XLC_LOCALE ar_JO.ISO8859-6
+iso8859-6/XLC_LOCALE ar_KW.ISO8859-6
+iso8859-6/XLC_LOCALE ar_LB.ISO8859-6
+iso8859-6/XLC_LOCALE ar_LY.ISO8859-6
+iso8859-6/XLC_LOCALE ar_MA.ISO8859-6
+iso8859-6/XLC_LOCALE ar_OM.ISO8859-6
+iso8859-6/XLC_LOCALE ar_QA.ISO8859-6
+iso8859-6/XLC_LOCALE ar_SA.ISO8859-6
+iso8859-6/XLC_LOCALE ar_SD.ISO8859-6
+iso8859-6/XLC_LOCALE ar_SY.ISO8859-6
+iso8859-6/XLC_LOCALE ar_TN.ISO8859-6
+iso8859-6/XLC_LOCALE ar_YE.ISO8859-6
+iso8859-6/XLC_LOCALE ar_AE.ISO8859-6
+iso8859-9e/XLC_LOCALE az_AZ.ISO8859-9E
+koi8-c/XLC_LOCALE az_AZ.KOI8-C
+iso8859-5/XLC_LOCALE be_BY.ISO8859-5
+microsoft-cp1251/XLC_LOCALE be_BY.CP1251
+iso8859-5/XLC_LOCALE bg_BG.ISO8859-5
+microsoft-cp1251/XLC_LOCALE bg_BG.CP1251
+koi8-r/XLC_LOCALE bg_BG.KOI8-R
+iso8859-2/XLC_LOCALE bs_BA.ISO8859-2
+iso8859-1/XLC_LOCALE br_FR.ISO8859-1
+iso8859-14/XLC_LOCALE br_FR.ISO8859-14
+iso8859-15/XLC_LOCALE br_FR.ISO8859-15
+iso8859-1/XLC_LOCALE ca_AD.ISO8859-1
+iso8859-15/XLC_LOCALE ca_AD.ISO8859-15
+iso8859-1/XLC_LOCALE ca_ES.ISO8859-1
+iso8859-15/XLC_LOCALE ca_ES.ISO8859-15
+iso8859-1/XLC_LOCALE ca_FR.ISO8859-1
+iso8859-15/XLC_LOCALE ca_FR.ISO8859-15
+iso8859-1/XLC_LOCALE ca_IT.ISO8859-1
+iso8859-15/XLC_LOCALE ca_IT.ISO8859-15
+iso8859-2/XLC_LOCALE cs_CZ.ISO8859-2
+iso8859-1/XLC_LOCALE cy_GB.ISO8859-1
+iso8859-14/XLC_LOCALE cy_GB.ISO8859-14
+iso8859-15/XLC_LOCALE cy_GB.ISO8859-15
+iso8859-1/XLC_LOCALE da_DK.ISO8859-1
+iso8859-15/XLC_LOCALE da_DK.ISO8859-15
+iso8859-1/XLC_LOCALE de_AT.ISO8859-1
+iso8859-15/XLC_LOCALE de_AT.ISO8859-15
+iso8859-1/XLC_LOCALE de_BE.ISO8859-1
+iso8859-15/XLC_LOCALE de_BE.ISO8859-15
+iso8859-1/XLC_LOCALE de_CH.ISO8859-1
+iso8859-15/XLC_LOCALE de_CH.ISO8859-15
+iso8859-1/XLC_LOCALE de_DE.ISO8859-1
+iso8859-15/XLC_LOCALE de_DE.ISO8859-15
+iso8859-1/XLC_LOCALE de_LI.ISO8859-1
+iso8859-15/XLC_LOCALE de_LI.ISO8859-15
+iso8859-1/XLC_LOCALE de_LU.ISO8859-1
+iso8859-15/XLC_LOCALE de_LU.ISO8859-15
+iso8859-7/XLC_LOCALE el_GR.ISO8859-7
+iso8859-4/XLC_LOCALE ee_EE.ISO8859-4
+iso8859-15/XLC_LOCALE el_GR.ISO8859-15
+iso8859-1/XLC_LOCALE en_AU.ISO8859-1
+iso8859-1/XLC_LOCALE en_BE.ISO8859-1
+iso8859-15/XLC_LOCALE en_BE.ISO8859-15
+iso8859-1/XLC_LOCALE en_BZ.ISO8859-1
+iso8859-1/XLC_LOCALE en_BW.ISO8859-1
+iso8859-1/XLC_LOCALE en_CA.ISO8859-1
+iso8859-1/XLC_LOCALE en_EN.ISO8859-1
+iso8859-1/XLC_LOCALE en_GB.ISO8859-1
+iso8859-15/XLC_LOCALE en_GB.ISO8859-15
+iso8859-1/XLC_LOCALE en_HK.ISO8859-1
+iso8859-1/XLC_LOCALE en_IE.ISO8859-1
+iso8859-15/XLC_LOCALE en_IE.ISO8859-15
+iso8859-15/XLC_LOCALE en_IN.ISO8859-15
+iso8859-1/XLC_LOCALE en_JM.ISO8859-1
+iso8859-1/XLC_LOCALE en_NZ.ISO8859-1
+iso8859-1/XLC_LOCALE en_PH.ISO8859-1
+iso8859-1/XLC_LOCALE en_SG.ISO8859-1
+iso8859-1/XLC_LOCALE en_TT.ISO8859-1
+iso8859-1/XLC_LOCALE en_UK.ISO8859-1
+iso8859-15/XLC_LOCALE en_UK.ISO8859-15
+iso8859-1/XLC_LOCALE en_US.ISO8859-1
+iso8859-15/XLC_LOCALE en_US.ISO8859-15
+iso8859-1/XLC_LOCALE en_ZA.ISO8859-1
+iso8859-15/XLC_LOCALE en_ZA.ISO8859-15
+iso8859-1/XLC_LOCALE en_ZW.ISO8859-1
+iso8859-3/XLC_LOCALE eo_EO.ISO8859-3
+iso8859-3/XLC_LOCALE eo_XX.ISO8859-3
+iso8859-1/XLC_LOCALE es_AR.ISO8859-1
+iso8859-1/XLC_LOCALE es_BO.ISO8859-1
+iso8859-1/XLC_LOCALE es_CL.ISO8859-1
+iso8859-1/XLC_LOCALE es_CO.ISO8859-1
+iso8859-1/XLC_LOCALE es_CR.ISO8859-1
+iso8859-1/XLC_LOCALE es_DO.ISO8859-1
+iso8859-1/XLC_LOCALE es_EC.ISO8859-1
+iso8859-1/XLC_LOCALE es_ES.ISO8859-1
+iso8859-15/XLC_LOCALE es_ES.ISO8859-15
+iso8859-1/XLC_LOCALE es_GT.ISO8859-1
+iso8859-1/XLC_LOCALE es_HN.ISO8859-1
+iso8859-1/XLC_LOCALE es_MX.ISO8859-1
+iso8859-1/XLC_LOCALE es_NI.ISO8859-1
+iso8859-1/XLC_LOCALE es_PA.ISO8859-1
+iso8859-15/XLC_LOCALE es_PA.ISO8859-15
+iso8859-1/XLC_LOCALE es_PE.ISO8859-1
+iso8859-15/XLC_LOCALE es_PE.ISO8859-15
+iso8859-1/XLC_LOCALE es_PR.ISO8859-1
+iso8859-1/XLC_LOCALE es_PY.ISO8859-1
+iso8859-15/XLC_LOCALE es_PY.ISO8859-15
+iso8859-1/XLC_LOCALE es_SV.ISO8859-1
+iso8859-15/XLC_LOCALE es_SV.ISO8859-15
+iso8859-1/XLC_LOCALE es_US.ISO8859-1
+iso8859-1/XLC_LOCALE es_UY.ISO8859-1
+iso8859-15/XLC_LOCALE es_UY.ISO8859-15
+iso8859-1/XLC_LOCALE es_VE.ISO8859-1
+iso8859-15/XLC_LOCALE es_VE.ISO8859-15
+iso8859-1/XLC_LOCALE et_EE.ISO8859-1
+iso8859-4/XLC_LOCALE et_EE.ISO8859-4
+iso8859-13/XLC_LOCALE et_EE.ISO8859-13
+iso8859-15/XLC_LOCALE et_EE.ISO8859-15
+iso8859-1/XLC_LOCALE eu_ES.ISO8859-1
+iso8859-15/XLC_LOCALE eu_ES.ISO8859-15
+isiri-3342/XLC_LOCALE fa_IR.ISIRI-3342
+iso8859-1/XLC_LOCALE fi_FI.ISO8859-1
+iso8859-15/XLC_LOCALE fi_FI.ISO8859-15
+iso8859-1/XLC_LOCALE fo_FO.ISO8859-1
+iso8859-15/XLC_LOCALE fo_FO.ISO8859-15
+iso8859-1/XLC_LOCALE fr_BE.ISO8859-1
+iso8859-15/XLC_LOCALE fr_BE.ISO8859-15
+iso8859-1/XLC_LOCALE fr_CA.ISO8859-1
+iso8859-15/XLC_LOCALE fr_CA.ISO8859-15
+iso8859-1/XLC_LOCALE fr_CH.ISO8859-1
+iso8859-15/XLC_LOCALE fr_CH.ISO8859-15
+iso8859-1/XLC_LOCALE fr_FR.ISO8859-1
+iso8859-15/XLC_LOCALE fr_FR.ISO8859-15
+iso8859-1/XLC_LOCALE fr_LU.ISO8859-1
+iso8859-15/XLC_LOCALE fr_LU.ISO8859-15
+iso8859-1/XLC_LOCALE ga_IE.ISO8859-1
+iso8859-14/XLC_LOCALE ga_IE.ISO8859-14
+iso8859-15/XLC_LOCALE ga_IE.ISO8859-15
+iso8859-1/XLC_LOCALE gd_GB.ISO8859-1
+iso8859-14/XLC_LOCALE gd_GB.ISO8859-14
+iso8859-15/XLC_LOCALE gd_GB.ISO8859-15
+iso8859-1/XLC_LOCALE gl_ES.ISO8859-1
+iso8859-15/XLC_LOCALE gl_ES.ISO8859-15
+iso8859-1/XLC_LOCALE gv_GB.ISO8859-1
+iso8859-14/XLC_LOCALE gv_GB.ISO8859-14
+iso8859-15/XLC_LOCALE gv_GB.ISO8859-15
+iso8859-8/XLC_LOCALE he_IL.ISO8859-8
+microsoft-cp1255/XLC_LOCALE he_IL.CP1255
+iscii-dev/XLC_LOCALE hi_IN.ISCII-DEV
+iso8859-2/XLC_LOCALE hr_HR.ISO8859-2
+iso8859-2/XLC_LOCALE hu_HU.ISO8859-2
+armscii-8/XLC_LOCALE hy_AM.ARMSCII-8
+iso8859-1/XLC_LOCALE id_ID.ISO8859-1
+iso8859-1/XLC_LOCALE id_ID.ISO8859-15
+iso8859-1/XLC_LOCALE is_IS.ISO8859-1
+iso8859-15/XLC_LOCALE is_IS.ISO8859-15
+iso8859-1/XLC_LOCALE it_CH.ISO8859-1
+iso8859-15/XLC_LOCALE it_CH.ISO8859-15
+iso8859-1/XLC_LOCALE it_IT.ISO8859-1
+iso8859-15/XLC_LOCALE it_IT.ISO8859-15
+ja/XLC_LOCALE ja_JP.eucJP
+ja.SJIS/XLC_LOCALE ja_JP.SJIS
+ja.JIS/XLC_LOCALE ja_JP.JIS7
+georgian-academy/XLC_LOCALE ka_GE.GEORGIAN-ACADEMY
+georgian-ps/XLC_LOCALE ka_GE.GEORGIAN-PS
+iso8859-1/XLC_LOCALE kl_GL.ISO8859-1
+iso8859-15/XLC_LOCALE kl_GL.ISO8859-15
+ko/XLC_LOCALE ko_KR.eucKR
+iso8859-1/XLC_LOCALE kw_GB.ISO8859-1
+iso8859-14/XLC_LOCALE kw_GB.ISO8859-14
+iso8859-15/XLC_LOCALE kw_GB.ISO8859-15
+ibm-cp1133/XLC_LOCALE lo_LA.IBM-CP1133
+mulelao-1/XLC_LOCALE lo_LA.MULELAO-1
+iso8859-4/XLC_LOCALE lt_LT.ISO8859-4
+iso8859-13/XLC_LOCALE lt_LT.ISO8859-13
+iso8859-4/XLC_LOCALE lv_LV.ISO8859-4
+iso8859-13/XLC_LOCALE lv_LV.ISO8859-13
+iso8859-13/XLC_LOCALE mi_NZ.ISO8859-13
+iso8859-5/XLC_LOCALE mk_MK.ISO8859-5
+microsoft-cp1251/XLC_LOCALE mk_MK.CP1251
+iso8859-1/XLC_LOCALE ms_MY.ISO8859-1
+iso8859-3/XLC_LOCALE mt_MT.ISO8859-3
+iso8859-1/XLC_LOCALE nb_NO.ISO8859-1
+iso8859-1/XLC_LOCALE nb_NO.ISO8859-15
+iso8859-1/XLC_LOCALE nl_BE.ISO8859-1
+iso8859-15/XLC_LOCALE nl_BE.ISO8859-15
+iso8859-1/XLC_LOCALE nl_NL.ISO8859-1
+iso8859-15/XLC_LOCALE nl_NL.ISO8859-15
+iso8859-1/XLC_LOCALE nn_NO.ISO8859-1
+iso8859-1/XLC_LOCALE nn_NO.ISO8859-15
+iso8859-1/XLC_LOCALE no_NO.ISO8859-1
+iso8859-1/XLC_LOCALE no_NO.ISO8859-15
+iso8859-1/XLC_LOCALE nr_ZA.ISO8859-1
+iso8859-15/XLC_LOCALE nso_ZA.ISO8859-15
+iso8859-1/XLC_LOCALE ny_NO.ISO8859-1
+iso8859-1/XLC_LOCALE ny_NO.ISO8859-15
+iso8859-1/XLC_LOCALE oc_FR.ISO8859-1
+iso8859-15/XLC_LOCALE oc_FR.ISO8859-15
+iso8859-1/XLC_LOCALE pd_DE.ISO8859-1
+iso8859-15/XLC_LOCALE pd_DE.ISO8859-15
+iso8859-1/XLC_LOCALE pd_US.ISO8859-1
+iso8859-15/XLC_LOCALE pd_US.ISO8859-15
+iso8859-1/XLC_LOCALE ph_PH.ISO8859-1
+iso8859-2/XLC_LOCALE pl_PL.ISO8859-2
+iso8859-1/XLC_LOCALE pp_AN.ISO8859-1
+iso8859-1/XLC_LOCALE pt_BR.ISO8859-1
+iso8859-15/XLC_LOCALE pt_BR.ISO8859-15
+iso8859-1/XLC_LOCALE pt_PT.ISO8859-1
+iso8859-15/XLC_LOCALE pt_PT.ISO8859-15
+iso8859-2/XLC_LOCALE ro_RO.ISO8859-2
+iso8859-5/XLC_LOCALE ru_RU.ISO8859-5
+microsoft-cp1251/XLC_LOCALE ru_RU.CP1251
+koi8-r/XLC_LOCALE ru_RU.KOI8-R
+microsoft-cp1251/XLC_LOCALE ru_UA.CP1251
+koi8-u/XLC_LOCALE ru_UA.KOI8-U
+iso8859-1/XLC_LOCALE rw_RW.ISO8859-1
+iso8859-2/XLC_LOCALE sh_YU.ISO8859-2
+iso8859-2/XLC_LOCALE sk_SK.ISO8859-2
+iso8859-2/XLC_LOCALE sl_SI.ISO8859-2
+iso8859-2/XLC_LOCALE sq_AL.ISO8859-2
+iso8859-2/XLC_LOCALE sr_YU.ISO8859-2
+iso8859-5/XLC_LOCALE sr_YU.ISO8859-5
+microsoft-cp1251/XLC_LOCALE sr_YU.CP1251
+iso8859-1/XLC_LOCALE ss_ZA.ISO8859-1
+iso8859-1/XLC_LOCALE st_ZA.ISO8859-1
+iso8859-1/XLC_LOCALE sv_FI.ISO8859-1
+iso8859-15/XLC_LOCALE sv_FI.ISO8859-15
+iso8859-1/XLC_LOCALE sv_SE.ISO8859-1
+iso8859-15/XLC_LOCALE sv_SE.ISO8859-15
+tscii-0/XLC_LOCALE ta_IN.TSCII-0
+koi8-c/XLC_LOCALE tg_TJ.KOI8-C
+th_TH/XLC_LOCALE th_TH.TIS620
+iso8859-11/XLC_LOCALE th_TH.ISO8859-11
+iso8859-1/XLC_LOCALE tl_PH.ISO8859-1
+iso8859-15/XLC_LOCALE tn_ZA.ISO8859-15
+iso8859-9/XLC_LOCALE tr_TR.ISO8859-9
+iso8859-1/XLC_LOCALE ts_ZA.ISO8859-1
+tatar-cyr/XLC_LOCALE tt_RU.TATAR-CYR
+koi8-c/XLC_LOCALE tt_RU.KOI8-C
+iso8859-5/XLC_LOCALE uk_UA.ISO8859-5
+microsoft-cp1251/XLC_LOCALE uk_UA.CP1251
+koi8-u/XLC_LOCALE uk_UA.KOI8-U
+microsoft-cp1256/XLC_LOCALE ur_PK.CP1256
+iso8859-1/XLC_LOCALE uz_UZ.ISO8859-1
+vi_VN.tcvn/XLC_LOCALE vi_VN.TCVN
+vi_VN.viscii/XLC_LOCALE vi_VN.VISCII
+iso8859-1/XLC_LOCALE wa_BE.ISO8859-1
+iso8859-15/XLC_LOCALE wa_BE.ISO8859-15
+iso8859-1/XLC_LOCALE xh_ZA.ISO8859-1
+microsoft-cp1255/XLC_LOCALE yi_US.CP1255
+zh_CN/XLC_LOCALE zh_CN.eucCN
+zh_CN/XLC_LOCALE zh_CN.gb2312
+zh_CN.gbk/XLC_LOCALE zh_CN.gbk
+zh_CN.gb18030/XLC_LOCALE zh_CN.gb18030
+zh_HK.big5/XLC_LOCALE zh_HK.big5
+zh_HK.big5hkscs/XLC_LOCALE zh_HK.big5hkscs
+zh_TW.big5/XLC_LOCALE zh_TW.big5
+zh_TW/XLC_LOCALE zh_TW.eucTW
+iso8859-1/XLC_LOCALE zu_ZA.ISO8859-1
+# Note: The UTF-8 locales don't work correctly yet. Work in progress.
+en_US.UTF-8/XLC_LOCALE af_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE am_ET.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_AA.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_AE.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_BH.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_DZ.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_EG.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_IQ.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_JO.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_KW.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_LB.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_LY.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_MA.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_OM.UTF-8
+en_US.UTF-8/XLC_LOCALE bs_BA.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_QA.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_SA.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_SD.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_SY.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_TN.UTF-8
+en_US.UTF-8/XLC_LOCALE ar_YE.UTF-8
+en_US.UTF-8/XLC_LOCALE as_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE ast_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE az_AZ.UTF-8
+en_US.UTF-8/XLC_LOCALE be_BY.UTF-8
+en_US.UTF-8/XLC_LOCALE be_BY.UTF-8@latin
+en_US.UTF-8/XLC_LOCALE bg_BG.UTF-8
+en_US.UTF-8/XLC_LOCALE bn_BD.UTF-8
+en_US.UTF-8/XLC_LOCALE bn_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE bo_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE br_FR.UTF-8
+en_US.UTF-8/XLC_LOCALE ca_AD.UTF-8
+en_US.UTF-8/XLC_LOCALE ca_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE ca_FR.UTF-8
+en_US.UTF-8/XLC_LOCALE ca_IT.UTF-8
+en_US.UTF-8/XLC_LOCALE cs_CZ.UTF-8
+en_US.UTF-8/XLC_LOCALE cy_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE da_DK.UTF-8
+en_US.UTF-8/XLC_LOCALE de_AT.UTF-8
+en_US.UTF-8/XLC_LOCALE de_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE de_CH.UTF-8
+en_US.UTF-8/XLC_LOCALE de_DE.UTF-8
+en_US.UTF-8/XLC_LOCALE de_IT.UTF-8
+en_US.UTF-8/XLC_LOCALE de_LI.UTF-8
+en_US.UTF-8/XLC_LOCALE de_LU.UTF-8
+en_US.UTF-8/XLC_LOCALE el_CY.UTF-8
+en_US.UTF-8/XLC_LOCALE el_GR.UTF-8
+en_US.UTF-8/XLC_LOCALE en_AU.UTF-8
+en_US.UTF-8/XLC_LOCALE en_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE en_BW.UTF-8
+en_US.UTF-8/XLC_LOCALE en_BZ.UTF-8
+en_US.UTF-8/XLC_LOCALE en_CA.UTF-8
+en_US.UTF-8/XLC_LOCALE en_DK.UTF-8
+en_US.UTF-8/XLC_LOCALE en_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE en_EN.UTF-8
+en_US.UTF-8/XLC_LOCALE en_HK.UTF-8
+en_US.UTF-8/XLC_LOCALE en_IE.UTF-8
+en_US.UTF-8/XLC_LOCALE en_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE en_JM.UTF-8
+en_US.UTF-8/XLC_LOCALE en_MT.UTF-8
+en_US.UTF-8/XLC_LOCALE en_NZ.UTF-8
+en_US.UTF-8/XLC_LOCALE en_PH.UTF-8
+en_US.UTF-8/XLC_LOCALE en_SG.UTF-8
+en_US.UTF-8/XLC_LOCALE en_TT.UTF-8
+en_US.UTF-8/XLC_LOCALE en_UK.UTF-8
+en_US.UTF-8/XLC_LOCALE en_US.UTF-8
+en_US.UTF-8/XLC_LOCALE en_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE en_ZW.UTF-8
+en_US.UTF-8/XLC_LOCALE eo_EO.UTF-8
+en_US.UTF-8/XLC_LOCALE eo_XX.UTF-8
+en_US.UTF-8/XLC_LOCALE es_AR.UTF-8
+en_US.UTF-8/XLC_LOCALE es_BO.UTF-8
+en_US.UTF-8/XLC_LOCALE es_CL.UTF-8
+en_US.UTF-8/XLC_LOCALE es_CO.UTF-8
+en_US.UTF-8/XLC_LOCALE es_CR.UTF-8
+en_US.UTF-8/XLC_LOCALE es_DO.UTF-8
+en_US.UTF-8/XLC_LOCALE es_EC.UTF-8
+en_US.UTF-8/XLC_LOCALE es_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE es_GT.UTF-8
+en_US.UTF-8/XLC_LOCALE es_HN.UTF-8
+en_US.UTF-8/XLC_LOCALE es_MX.UTF-8
+en_US.UTF-8/XLC_LOCALE es_NI.UTF-8
+en_US.UTF-8/XLC_LOCALE es_PA.UTF-8
+en_US.UTF-8/XLC_LOCALE es_PE.UTF-8
+en_US.UTF-8/XLC_LOCALE es_PR.UTF-8
+en_US.UTF-8/XLC_LOCALE es_PY.UTF-8
+en_US.UTF-8/XLC_LOCALE es_SV.UTF-8
+en_US.UTF-8/XLC_LOCALE es_US.UTF-8
+en_US.UTF-8/XLC_LOCALE es_UY.UTF-8
+en_US.UTF-8/XLC_LOCALE es_VE.UTF-8
+en_US.UTF-8/XLC_LOCALE et_EE.UTF-8
+en_US.UTF-8/XLC_LOCALE eu_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE fa_IR.UTF-8
+en_US.UTF-8/XLC_LOCALE fi_FI.UTF-8
+en_US.UTF-8/XLC_LOCALE fo_FO.UTF-8
+en_US.UTF-8/XLC_LOCALE fr_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE fr_CA.UTF-8
+en_US.UTF-8/XLC_LOCALE fr_CH.UTF-8
+en_US.UTF-8/XLC_LOCALE fr_FR.UTF-8
+en_US.UTF-8/XLC_LOCALE fr_LU.UTF-8
+en_US.UTF-8/XLC_LOCALE ga_IE.UTF-8
+en_US.UTF-8/XLC_LOCALE gd_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE gl_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE gu_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE gv_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE he_IL.UTF-8
+en_US.UTF-8/XLC_LOCALE hi_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE hne_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE hr_HR.UTF-8
+en_US.UTF-8/XLC_LOCALE hu_HU.UTF-8
+en_US.UTF-8/XLC_LOCALE hy_AM.UTF-8
+en_US.UTF-8/XLC_LOCALE ia.UTF-8
+en_US.UTF-8/XLC_LOCALE id_ID.UTF-8
+en_US.UTF-8/XLC_LOCALE ie.UTF-8
+en_US.UTF-8/XLC_LOCALE is_IS.UTF-8
+en_US.UTF-8/XLC_LOCALE it_CH.UTF-8
+en_US.UTF-8/XLC_LOCALE it_IT.UTF-8
+en_US.UTF-8/XLC_LOCALE iu_CA.UTF-8
+ja_JP.UTF-8/XLC_LOCALE ja_JP.UTF-8
+en_US.UTF-8/XLC_LOCALE ka_GE.UTF-8
+en_US.UTF-8/XLC_LOCALE kk_KZ.UTF-8
+en_US.UTF-8/XLC_LOCALE kl_GL.UTF-8
+en_US.UTF-8/XLC_LOCALE km_KH.UTF-8
+en_US.UTF-8/XLC_LOCALE kn_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE ks_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE ks_IN.UTF-8@devanagari
+ko_KR.UTF-8/XLC_LOCALE ko_KR.UTF-8
+en_US.UTF-8/XLC_LOCALE ku_TR.UTF-8
+en_US.UTF-8/XLC_LOCALE kw_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE ky_KG.UTF-8
+en_US.UTF-8/XLC_LOCALE lo_LA.UTF-8
+en_US.UTF-8/XLC_LOCALE lt_LT.UTF-8
+en_US.UTF-8/XLC_LOCALE lv_LV.UTF-8
+en_US.UTF-8/XLC_LOCALE mai_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE mi_NZ.UTF-8
+en_US.UTF-8/XLC_LOCALE mk_MK.UTF-8
+en_US.UTF-8/XLC_LOCALE ml_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE mr_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE ms_MY.UTF-8
+en_US.UTF-8/XLC_LOCALE mt_MT.UTF-8
+en_US.UTF-8/XLC_LOCALE nl_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE nl_NL.UTF-8
+en_US.UTF-8/XLC_LOCALE nb_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE nn_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE no_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE nr_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE nso_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE ny_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE oc_FR.UTF-8
+en_US.UTF-8/XLC_LOCALE or_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE pa_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE pa_PK.UTF-8
+en_US.UTF-8/XLC_LOCALE pd_DE.UTF-8
+en_US.UTF-8/XLC_LOCALE pd_US.UTF-8
+en_US.UTF-8/XLC_LOCALE ph_PH.UTF-8
+en_US.UTF-8/XLC_LOCALE pl_PL.UTF-8
+en_US.UTF-8/XLC_LOCALE pp_AN.UTF-8
+pt_BR.UTF-8/XLC_LOCALE pt_BR.UTF-8
+pt_PT.UTF-8/XLC_LOCALE pt_PT.UTF-8
+en_US.UTF-8/XLC_LOCALE ro_RO.UTF-8
+ru_RU.UTF-8/XLC_LOCALE ru_RU.UTF-8
+en_US.UTF-8/XLC_LOCALE ru_UA.UTF-8
+en_US.UTF-8/XLC_LOCALE rw_RW.UTF-8
+en_US.UTF-8/XLC_LOCALE sa_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE sd_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE sd_IN.UTF-8@devanagari
+en_US.UTF-8/XLC_LOCALE se_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE sh_BA.UTF-8
+en_US.UTF-8/XLC_LOCALE sh_YU.UTF-8
+en_US.UTF-8/XLC_LOCALE si_LK.UTF-8
+en_US.UTF-8/XLC_LOCALE sk_SK.UTF-8
+en_US.UTF-8/XLC_LOCALE sl_SI.UTF-8
+en_US.UTF-8/XLC_LOCALE sq_AL.UTF-8
+en_US.UTF-8/XLC_LOCALE sr_ME.UTF-8
+en_US.UTF-8/XLC_LOCALE sr_RS.UTF-8
+en_US.UTF-8/XLC_LOCALE sr_RS.UTF-8@latin
+en_US.UTF-8/XLC_LOCALE sr_YU.UTF-8
+en_US.UTF-8/XLC_LOCALE ss_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE st_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE sv_FI.UTF-8
+en_US.UTF-8/XLC_LOCALE sv_SE.UTF-8
+en_US.UTF-8/XLC_LOCALE ta_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE te_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE tg_TJ.UTF-8
+th_TH.UTF-8/XLC_LOCALE th_TH.UTF-8
+en_US.UTF-8/XLC_LOCALE ti_ER.UTF-8
+en_US.UTF-8/XLC_LOCALE ti_ET.UTF-8
+en_US.UTF-8/XLC_LOCALE tl_PH.UTF-8
+en_US.UTF-8/XLC_LOCALE tn_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE tr_TR.UTF-8
+en_US.UTF-8/XLC_LOCALE ts_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE tt_RU.UTF-8
+en_US.UTF-8/XLC_LOCALE uk_UA.UTF-8
+en_US.UTF-8/XLC_LOCALE ur_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE ur_PK.UTF-8
+en_US.UTF-8/XLC_LOCALE uz_UZ.UTF-8
+en_US.UTF-8/XLC_LOCALE ve_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE vi_VN.UTF-8
+en_US.UTF-8/XLC_LOCALE wa_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE xh_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE yi_US.UTF-8
+en_US.UTF-8/XLC_LOCALE ne_NP.UTF-8
+zh_CN.UTF-8/XLC_LOCALE zh_CN.UTF-8
+zh_HK.UTF-8/XLC_LOCALE zh_HK.UTF-8
+zh_CN.UTF-8/XLC_LOCALE zh_SG.UTF-8
+zh_TW.UTF-8/XLC_LOCALE zh_TW.UTF-8
+en_US.UTF-8/XLC_LOCALE zu_ZA.UTF-8
+#
+# This file contains locale database file names
+# The first word is the locale database file name and
+# the second word is the full locale name.
+#
+#
+C/XLC_LOCALE: C
+iso8859-1/XLC_LOCALE: af_ZA.ISO8859-1
+iso8859-6/XLC_LOCALE: ar_AA.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_BH.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_DZ.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_EG.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_IQ.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_JO.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_KW.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_LB.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_LY.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_MA.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_OM.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_QA.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_SA.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_SD.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_SY.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_TN.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_YE.ISO8859-6
+iso8859-6/XLC_LOCALE: ar_AE.ISO8859-6
+iso8859-9e/XLC_LOCALE: az_AZ.ISO8859-9E
+koi8-c/XLC_LOCALE: az_AZ.KOI8-C
+iso8859-5/XLC_LOCALE: be_BY.ISO8859-5
+microsoft-cp1251/XLC_LOCALE: be_BY.CP1251
+iso8859-5/XLC_LOCALE: bg_BG.ISO8859-5
+microsoft-cp1251/XLC_LOCALE: bg_BG.CP1251
+koi8-r/XLC_LOCALE: bg_BG.KOI8-R
+iso8859-2/XLC_LOCALE: bs_BA.ISO8859-2
+iso8859-1/XLC_LOCALE: br_FR.ISO8859-1
+iso8859-14/XLC_LOCALE: br_FR.ISO8859-14
+iso8859-15/XLC_LOCALE: br_FR.ISO8859-15
+iso8859-1/XLC_LOCALE: ca_AD.ISO8859-1
+iso8859-15/XLC_LOCALE: ca_AD.ISO8859-15
+iso8859-1/XLC_LOCALE: ca_ES.ISO8859-1
+iso8859-15/XLC_LOCALE: ca_ES.ISO8859-15
+iso8859-1/XLC_LOCALE: ca_FR.ISO8859-1
+iso8859-15/XLC_LOCALE: ca_FR.ISO8859-15
+iso8859-1/XLC_LOCALE: ca_IT.ISO8859-1
+iso8859-15/XLC_LOCALE: ca_IT.ISO8859-15
+iso8859-2/XLC_LOCALE: cs_CZ.ISO8859-2
+iso8859-1/XLC_LOCALE: cy_GB.ISO8859-1
+iso8859-14/XLC_LOCALE: cy_GB.ISO8859-14
+iso8859-15/XLC_LOCALE: cy_GB.ISO8859-15
+iso8859-1/XLC_LOCALE: da_DK.ISO8859-1
+iso8859-15/XLC_LOCALE: da_DK.ISO8859-15
+iso8859-1/XLC_LOCALE: de_AT.ISO8859-1
+iso8859-15/XLC_LOCALE: de_AT.ISO8859-15
+iso8859-1/XLC_LOCALE: de_BE.ISO8859-1
+iso8859-15/XLC_LOCALE: de_BE.ISO8859-15
+iso8859-1/XLC_LOCALE: de_CH.ISO8859-1
+iso8859-15/XLC_LOCALE: de_CH.ISO8859-15
+iso8859-1/XLC_LOCALE: de_DE.ISO8859-1
+iso8859-15/XLC_LOCALE: de_DE.ISO8859-15
+iso8859-1/XLC_LOCALE: de_LI.ISO8859-1
+iso8859-15/XLC_LOCALE: de_LI.ISO8859-15
+iso8859-1/XLC_LOCALE: de_LU.ISO8859-1
+iso8859-15/XLC_LOCALE: de_LU.ISO8859-15
+iso8859-7/XLC_LOCALE: el_GR.ISO8859-7
+iso8859-4/XLC_LOCALE: ee_EE.ISO8859-4
+iso8859-15/XLC_LOCALE: el_GR.ISO8859-15
+iso8859-1/XLC_LOCALE: en_AU.ISO8859-1
+iso8859-1/XLC_LOCALE: en_BE.ISO8859-1
+iso8859-15/XLC_LOCALE: en_BE.ISO8859-15
+iso8859-1/XLC_LOCALE: en_BZ.ISO8859-1
+iso8859-1/XLC_LOCALE: en_BW.ISO8859-1
+iso8859-1/XLC_LOCALE: en_CA.ISO8859-1
+iso8859-1/XLC_LOCALE: en_EN.ISO8859-1
+iso8859-1/XLC_LOCALE: en_GB.ISO8859-1
+iso8859-15/XLC_LOCALE: en_GB.ISO8859-15
+iso8859-1/XLC_LOCALE: en_HK.ISO8859-1
+iso8859-1/XLC_LOCALE: en_IE.ISO8859-1
+iso8859-15/XLC_LOCALE: en_IE.ISO8859-15
+iso8859-15/XLC_LOCALE: en_IN.ISO8859-15
+iso8859-1/XLC_LOCALE: en_JM.ISO8859-1
+iso8859-1/XLC_LOCALE: en_NZ.ISO8859-1
+iso8859-1/XLC_LOCALE: en_PH.ISO8859-1
+iso8859-1/XLC_LOCALE: en_SG.ISO8859-1
+iso8859-1/XLC_LOCALE: en_TT.ISO8859-1
+iso8859-1/XLC_LOCALE: en_UK.ISO8859-1
+iso8859-15/XLC_LOCALE: en_UK.ISO8859-15
+iso8859-1/XLC_LOCALE: en_US.ISO8859-1
+iso8859-15/XLC_LOCALE: en_US.ISO8859-15
+iso8859-1/XLC_LOCALE: en_ZA.ISO8859-1
+iso8859-15/XLC_LOCALE: en_ZA.ISO8859-15
+iso8859-1/XLC_LOCALE: en_ZW.ISO8859-1
+iso8859-3/XLC_LOCALE: eo_EO.ISO8859-3
+iso8859-3/XLC_LOCALE: eo_XX.ISO8859-3
+iso8859-1/XLC_LOCALE: es_AR.ISO8859-1
+iso8859-1/XLC_LOCALE: es_BO.ISO8859-1
+iso8859-1/XLC_LOCALE: es_CL.ISO8859-1
+iso8859-1/XLC_LOCALE: es_CO.ISO8859-1
+iso8859-1/XLC_LOCALE: es_CR.ISO8859-1
+iso8859-1/XLC_LOCALE: es_DO.ISO8859-1
+iso8859-1/XLC_LOCALE: es_EC.ISO8859-1
+iso8859-1/XLC_LOCALE: es_ES.ISO8859-1
+iso8859-15/XLC_LOCALE: es_ES.ISO8859-15
+iso8859-1/XLC_LOCALE: es_GT.ISO8859-1
+iso8859-1/XLC_LOCALE: es_HN.ISO8859-1
+iso8859-1/XLC_LOCALE: es_MX.ISO8859-1
+iso8859-1/XLC_LOCALE: es_NI.ISO8859-1
+iso8859-1/XLC_LOCALE: es_PA.ISO8859-1
+iso8859-15/XLC_LOCALE: es_PA.ISO8859-15
+iso8859-1/XLC_LOCALE: es_PE.ISO8859-1
+iso8859-15/XLC_LOCALE: es_PE.ISO8859-15
+iso8859-1/XLC_LOCALE: es_PR.ISO8859-1
+iso8859-1/XLC_LOCALE: es_PY.ISO8859-1
+iso8859-15/XLC_LOCALE: es_PY.ISO8859-15
+iso8859-1/XLC_LOCALE: es_SV.ISO8859-1
+iso8859-15/XLC_LOCALE: es_SV.ISO8859-15
+iso8859-1/XLC_LOCALE: es_US.ISO8859-1
+iso8859-1/XLC_LOCALE: es_UY.ISO8859-1
+iso8859-15/XLC_LOCALE: es_UY.ISO8859-15
+iso8859-1/XLC_LOCALE: es_VE.ISO8859-1
+iso8859-15/XLC_LOCALE: es_VE.ISO8859-15
+iso8859-1/XLC_LOCALE: et_EE.ISO8859-1
+iso8859-4/XLC_LOCALE: et_EE.ISO8859-4
+iso8859-13/XLC_LOCALE: et_EE.ISO8859-13
+iso8859-15/XLC_LOCALE: et_EE.ISO8859-15
+iso8859-1/XLC_LOCALE: eu_ES.ISO8859-1
+iso8859-15/XLC_LOCALE: eu_ES.ISO8859-15
+isiri-3342/XLC_LOCALE: fa_IR.ISIRI-3342
+iso8859-1/XLC_LOCALE: fi_FI.ISO8859-1
+iso8859-15/XLC_LOCALE: fi_FI.ISO8859-15
+iso8859-1/XLC_LOCALE: fo_FO.ISO8859-1
+iso8859-15/XLC_LOCALE: fo_FO.ISO8859-15
+iso8859-1/XLC_LOCALE: fr_BE.ISO8859-1
+iso8859-15/XLC_LOCALE: fr_BE.ISO8859-15
+iso8859-1/XLC_LOCALE: fr_CA.ISO8859-1
+iso8859-15/XLC_LOCALE: fr_CA.ISO8859-15
+iso8859-1/XLC_LOCALE: fr_CH.ISO8859-1
+iso8859-15/XLC_LOCALE: fr_CH.ISO8859-15
+iso8859-1/XLC_LOCALE: fr_FR.ISO8859-1
+iso8859-15/XLC_LOCALE: fr_FR.ISO8859-15
+iso8859-1/XLC_LOCALE: fr_LU.ISO8859-1
+iso8859-15/XLC_LOCALE: fr_LU.ISO8859-15
+iso8859-1/XLC_LOCALE: ga_IE.ISO8859-1
+iso8859-14/XLC_LOCALE: ga_IE.ISO8859-14
+iso8859-15/XLC_LOCALE: ga_IE.ISO8859-15
+iso8859-1/XLC_LOCALE: gd_GB.ISO8859-1
+iso8859-14/XLC_LOCALE: gd_GB.ISO8859-14
+iso8859-15/XLC_LOCALE: gd_GB.ISO8859-15
+iso8859-1/XLC_LOCALE: gl_ES.ISO8859-1
+iso8859-15/XLC_LOCALE: gl_ES.ISO8859-15
+iso8859-1/XLC_LOCALE: gv_GB.ISO8859-1
+iso8859-14/XLC_LOCALE: gv_GB.ISO8859-14
+iso8859-15/XLC_LOCALE: gv_GB.ISO8859-15
+iso8859-8/XLC_LOCALE: he_IL.ISO8859-8
+microsoft-cp1255/XLC_LOCALE: he_IL.CP1255
+iscii-dev/XLC_LOCALE: hi_IN.ISCII-DEV
+iso8859-2/XLC_LOCALE: hr_HR.ISO8859-2
+iso8859-2/XLC_LOCALE: hu_HU.ISO8859-2
+armscii-8/XLC_LOCALE: hy_AM.ARMSCII-8
+iso8859-1/XLC_LOCALE: id_ID.ISO8859-1
+iso8859-1/XLC_LOCALE: id_ID.ISO8859-15
+iso8859-1/XLC_LOCALE: is_IS.ISO8859-1
+iso8859-15/XLC_LOCALE: is_IS.ISO8859-15
+iso8859-1/XLC_LOCALE: it_CH.ISO8859-1
+iso8859-15/XLC_LOCALE: it_CH.ISO8859-15
+iso8859-1/XLC_LOCALE: it_IT.ISO8859-1
+iso8859-15/XLC_LOCALE: it_IT.ISO8859-15
+ja/XLC_LOCALE: ja_JP.eucJP
+ja.SJIS/XLC_LOCALE: ja_JP.SJIS
+ja.JIS/XLC_LOCALE: ja_JP.JIS7
+georgian-academy/XLC_LOCALE: ka_GE.GEORGIAN-ACADEMY
+georgian-ps/XLC_LOCALE: ka_GE.GEORGIAN-PS
+iso8859-1/XLC_LOCALE: kl_GL.ISO8859-1
+iso8859-15/XLC_LOCALE: kl_GL.ISO8859-15
+ko/XLC_LOCALE: ko_KR.eucKR
+iso8859-1/XLC_LOCALE: kw_GB.ISO8859-1
+iso8859-14/XLC_LOCALE: kw_GB.ISO8859-14
+iso8859-15/XLC_LOCALE: kw_GB.ISO8859-15
+ibm-cp1133/XLC_LOCALE: lo_LA.IBM-CP1133
+mulelao-1/XLC_LOCALE: lo_LA.MULELAO-1
+iso8859-4/XLC_LOCALE: lt_LT.ISO8859-4
+iso8859-13/XLC_LOCALE: lt_LT.ISO8859-13
+iso8859-4/XLC_LOCALE: lv_LV.ISO8859-4
+iso8859-13/XLC_LOCALE: lv_LV.ISO8859-13
+iso8859-13/XLC_LOCALE: mi_NZ.ISO8859-13
+iso8859-5/XLC_LOCALE: mk_MK.ISO8859-5
+microsoft-cp1251/XLC_LOCALE: mk_MK.CP1251
+iso8859-1/XLC_LOCALE: ms_MY.ISO8859-1
+iso8859-3/XLC_LOCALE: mt_MT.ISO8859-3
+iso8859-1/XLC_LOCALE: nb_NO.ISO8859-1
+iso8859-1/XLC_LOCALE: nb_NO.ISO8859-15
+iso8859-1/XLC_LOCALE: nl_BE.ISO8859-1
+iso8859-15/XLC_LOCALE: nl_BE.ISO8859-15
+iso8859-1/XLC_LOCALE: nl_NL.ISO8859-1
+iso8859-15/XLC_LOCALE: nl_NL.ISO8859-15
+iso8859-1/XLC_LOCALE: nn_NO.ISO8859-1
+iso8859-1/XLC_LOCALE: nn_NO.ISO8859-15
+iso8859-1/XLC_LOCALE: no_NO.ISO8859-1
+iso8859-1/XLC_LOCALE: no_NO.ISO8859-15
+iso8859-1/XLC_LOCALE: nr_ZA.ISO8859-1
+iso8859-15/XLC_LOCALE: nso_ZA.ISO8859-15
+iso8859-1/XLC_LOCALE: ny_NO.ISO8859-1
+iso8859-1/XLC_LOCALE: ny_NO.ISO8859-15
+iso8859-1/XLC_LOCALE: oc_FR.ISO8859-1
+iso8859-15/XLC_LOCALE: oc_FR.ISO8859-15
+iso8859-1/XLC_LOCALE: pd_DE.ISO8859-1
+iso8859-15/XLC_LOCALE: pd_DE.ISO8859-15
+iso8859-1/XLC_LOCALE: pd_US.ISO8859-1
+iso8859-15/XLC_LOCALE: pd_US.ISO8859-15
+iso8859-1/XLC_LOCALE: ph_PH.ISO8859-1
+iso8859-2/XLC_LOCALE: pl_PL.ISO8859-2
+iso8859-1/XLC_LOCALE: pp_AN.ISO8859-1
+iso8859-1/XLC_LOCALE: pt_BR.ISO8859-1
+iso8859-15/XLC_LOCALE: pt_BR.ISO8859-15
+iso8859-1/XLC_LOCALE: pt_PT.ISO8859-1
+iso8859-15/XLC_LOCALE: pt_PT.ISO8859-15
+iso8859-2/XLC_LOCALE: ro_RO.ISO8859-2
+iso8859-5/XLC_LOCALE: ru_RU.ISO8859-5
+microsoft-cp1251/XLC_LOCALE: ru_RU.CP1251
+koi8-r/XLC_LOCALE: ru_RU.KOI8-R
+microsoft-cp1251/XLC_LOCALE: ru_UA.CP1251
+koi8-u/XLC_LOCALE: ru_UA.KOI8-U
+iso8859-1/XLC_LOCALE: rw_RW.ISO8859-1
+iso8859-2/XLC_LOCALE: sh_YU.ISO8859-2
+iso8859-2/XLC_LOCALE: sk_SK.ISO8859-2
+iso8859-2/XLC_LOCALE: sl_SI.ISO8859-2
+iso8859-2/XLC_LOCALE: sq_AL.ISO8859-2
+iso8859-2/XLC_LOCALE: sr_YU.ISO8859-2
+iso8859-5/XLC_LOCALE: sr_YU.ISO8859-5
+microsoft-cp1251/XLC_LOCALE: sr_YU.CP1251
+iso8859-1/XLC_LOCALE: ss_ZA.ISO8859-1
+iso8859-1/XLC_LOCALE: st_ZA.ISO8859-1
+iso8859-1/XLC_LOCALE: sv_FI.ISO8859-1
+iso8859-15/XLC_LOCALE: sv_FI.ISO8859-15
+iso8859-1/XLC_LOCALE: sv_SE.ISO8859-1
+iso8859-15/XLC_LOCALE: sv_SE.ISO8859-15
+tscii-0/XLC_LOCALE: ta_IN.TSCII-0
+koi8-c/XLC_LOCALE: tg_TJ.KOI8-C
+th_TH/XLC_LOCALE: th_TH.TIS620
+iso8859-11/XLC_LOCALE: th_TH.ISO8859-11
+iso8859-1/XLC_LOCALE: tl_PH.ISO8859-1
+iso8859-15/XLC_LOCALE: tn_ZA.ISO8859-15
+iso8859-9/XLC_LOCALE: tr_TR.ISO8859-9
+iso8859-1/XLC_LOCALE: ts_ZA.ISO8859-1
+tatar-cyr/XLC_LOCALE: tt_RU.TATAR-CYR
+koi8-c/XLC_LOCALE: tt_RU.KOI8-C
+iso8859-5/XLC_LOCALE: uk_UA.ISO8859-5
+microsoft-cp1251/XLC_LOCALE: uk_UA.CP1251
+koi8-u/XLC_LOCALE: uk_UA.KOI8-U
+microsoft-cp1256/XLC_LOCALE: ur_PK.CP1256
+iso8859-1/XLC_LOCALE: uz_UZ.ISO8859-1
+vi_VN.tcvn/XLC_LOCALE: vi_VN.TCVN
+vi_VN.viscii/XLC_LOCALE: vi_VN.VISCII
+iso8859-1/XLC_LOCALE: wa_BE.ISO8859-1
+iso8859-15/XLC_LOCALE: wa_BE.ISO8859-15
+iso8859-1/XLC_LOCALE: xh_ZA.ISO8859-1
+microsoft-cp1255/XLC_LOCALE: yi_US.CP1255
+zh_CN/XLC_LOCALE: zh_CN.eucCN
+zh_CN/XLC_LOCALE: zh_CN.gb2312
+zh_CN.gbk/XLC_LOCALE: zh_CN.gbk
+zh_CN.gb18030/XLC_LOCALE: zh_CN.gb18030
+zh_HK.big5/XLC_LOCALE: zh_HK.big5
+zh_HK.big5hkscs/XLC_LOCALE: zh_HK.big5hkscs
+zh_TW.big5/XLC_LOCALE: zh_TW.big5
+zh_TW/XLC_LOCALE: zh_TW.eucTW
+iso8859-1/XLC_LOCALE: zu_ZA.ISO8859-1
+# Note: The UTF-8 locales don't work correctly yet. Work in progress.
+en_US.UTF-8/XLC_LOCALE: af_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: am_ET.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_AA.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_AE.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_BH.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_DZ.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_EG.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_IQ.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_JO.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_KW.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_LB.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_LY.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_MA.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_OM.UTF-8
+en_US.UTF-8/XLC_LOCALE: bs_BA.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_QA.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_SA.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_SD.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_SY.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_TN.UTF-8
+en_US.UTF-8/XLC_LOCALE: ar_YE.UTF-8
+en_US.UTF-8/XLC_LOCALE: as_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: ast_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE: az_AZ.UTF-8
+en_US.UTF-8/XLC_LOCALE: be_BY.UTF-8
+en_US.UTF-8/XLC_LOCALE: be_BY.UTF-8@latin
+en_US.UTF-8/XLC_LOCALE: bg_BG.UTF-8
+en_US.UTF-8/XLC_LOCALE: bn_BD.UTF-8
+en_US.UTF-8/XLC_LOCALE: bn_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: bo_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: br_FR.UTF-8
+en_US.UTF-8/XLC_LOCALE: ca_AD.UTF-8
+en_US.UTF-8/XLC_LOCALE: ca_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE: ca_FR.UTF-8
+en_US.UTF-8/XLC_LOCALE: ca_IT.UTF-8
+en_US.UTF-8/XLC_LOCALE: cs_CZ.UTF-8
+en_US.UTF-8/XLC_LOCALE: cy_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE: da_DK.UTF-8
+en_US.UTF-8/XLC_LOCALE: de_AT.UTF-8
+en_US.UTF-8/XLC_LOCALE: de_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE: de_CH.UTF-8
+en_US.UTF-8/XLC_LOCALE: de_DE.UTF-8
+en_US.UTF-8/XLC_LOCALE: de_IT.UTF-8
+en_US.UTF-8/XLC_LOCALE: de_LI.UTF-8
+en_US.UTF-8/XLC_LOCALE: de_LU.UTF-8
+en_US.UTF-8/XLC_LOCALE: el_CY.UTF-8
+en_US.UTF-8/XLC_LOCALE: el_GR.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_AU.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_BW.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_BZ.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_CA.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_DK.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_EN.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_HK.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_IE.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_JM.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_MT.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_NZ.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_PH.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_SG.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_TT.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_UK.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_US.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: en_ZW.UTF-8
+en_US.UTF-8/XLC_LOCALE: eo_EO.UTF-8
+en_US.UTF-8/XLC_LOCALE: eo_XX.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_AR.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_BO.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_CL.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_CO.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_CR.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_DO.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_EC.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_GT.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_HN.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_MX.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_NI.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_PA.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_PE.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_PR.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_PY.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_SV.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_US.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_UY.UTF-8
+en_US.UTF-8/XLC_LOCALE: es_VE.UTF-8
+en_US.UTF-8/XLC_LOCALE: et_EE.UTF-8
+en_US.UTF-8/XLC_LOCALE: eu_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE: fa_IR.UTF-8
+en_US.UTF-8/XLC_LOCALE: fi_FI.UTF-8
+en_US.UTF-8/XLC_LOCALE: fo_FO.UTF-8
+en_US.UTF-8/XLC_LOCALE: fr_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE: fr_CA.UTF-8
+en_US.UTF-8/XLC_LOCALE: fr_CH.UTF-8
+en_US.UTF-8/XLC_LOCALE: fr_FR.UTF-8
+en_US.UTF-8/XLC_LOCALE: fr_LU.UTF-8
+en_US.UTF-8/XLC_LOCALE: ga_IE.UTF-8
+en_US.UTF-8/XLC_LOCALE: gd_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE: gl_ES.UTF-8
+en_US.UTF-8/XLC_LOCALE: gu_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: gv_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE: he_IL.UTF-8
+en_US.UTF-8/XLC_LOCALE: hi_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: hne_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: hr_HR.UTF-8
+en_US.UTF-8/XLC_LOCALE: hu_HU.UTF-8
+en_US.UTF-8/XLC_LOCALE: hy_AM.UTF-8
+en_US.UTF-8/XLC_LOCALE: ia.UTF-8
+en_US.UTF-8/XLC_LOCALE: id_ID.UTF-8
+en_US.UTF-8/XLC_LOCALE: ie.UTF-8
+en_US.UTF-8/XLC_LOCALE: is_IS.UTF-8
+en_US.UTF-8/XLC_LOCALE: it_CH.UTF-8
+en_US.UTF-8/XLC_LOCALE: it_IT.UTF-8
+en_US.UTF-8/XLC_LOCALE: iu_CA.UTF-8
+ja_JP.UTF-8/XLC_LOCALE: ja_JP.UTF-8
+en_US.UTF-8/XLC_LOCALE: ka_GE.UTF-8
+en_US.UTF-8/XLC_LOCALE: kk_KZ.UTF-8
+en_US.UTF-8/XLC_LOCALE: kl_GL.UTF-8
+en_US.UTF-8/XLC_LOCALE: km_KH.UTF-8
+en_US.UTF-8/XLC_LOCALE: kn_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: ks_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: ks_IN.UTF-8@devanagari
+ko_KR.UTF-8/XLC_LOCALE: ko_KR.UTF-8
+en_US.UTF-8/XLC_LOCALE: ku_TR.UTF-8
+en_US.UTF-8/XLC_LOCALE: kw_GB.UTF-8
+en_US.UTF-8/XLC_LOCALE: ky_KG.UTF-8
+en_US.UTF-8/XLC_LOCALE: lo_LA.UTF-8
+en_US.UTF-8/XLC_LOCALE: lt_LT.UTF-8
+en_US.UTF-8/XLC_LOCALE: lv_LV.UTF-8
+en_US.UTF-8/XLC_LOCALE: mai_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: mi_NZ.UTF-8
+en_US.UTF-8/XLC_LOCALE: mk_MK.UTF-8
+en_US.UTF-8/XLC_LOCALE: ml_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: mr_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: ms_MY.UTF-8
+en_US.UTF-8/XLC_LOCALE: mt_MT.UTF-8
+en_US.UTF-8/XLC_LOCALE: nl_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE: nl_NL.UTF-8
+en_US.UTF-8/XLC_LOCALE: nb_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE: nn_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE: no_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE: nr_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: nso_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: ny_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE: oc_FR.UTF-8
+en_US.UTF-8/XLC_LOCALE: or_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: pa_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: pa_PK.UTF-8
+en_US.UTF-8/XLC_LOCALE: pd_DE.UTF-8
+en_US.UTF-8/XLC_LOCALE: pd_US.UTF-8
+en_US.UTF-8/XLC_LOCALE: ph_PH.UTF-8
+en_US.UTF-8/XLC_LOCALE: pl_PL.UTF-8
+en_US.UTF-8/XLC_LOCALE: pp_AN.UTF-8
+pt_BR.UTF-8/XLC_LOCALE: pt_BR.UTF-8
+pt_PT.UTF-8/XLC_LOCALE: pt_PT.UTF-8
+en_US.UTF-8/XLC_LOCALE: ro_RO.UTF-8
+ru_RU.UTF-8/XLC_LOCALE: ru_RU.UTF-8
+en_US.UTF-8/XLC_LOCALE: ru_UA.UTF-8
+en_US.UTF-8/XLC_LOCALE: rw_RW.UTF-8
+en_US.UTF-8/XLC_LOCALE: sa_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: sd_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: sd_IN.UTF-8@devanagari
+en_US.UTF-8/XLC_LOCALE: se_NO.UTF-8
+en_US.UTF-8/XLC_LOCALE: sh_BA.UTF-8
+en_US.UTF-8/XLC_LOCALE: sh_YU.UTF-8
+en_US.UTF-8/XLC_LOCALE: si_LK.UTF-8
+en_US.UTF-8/XLC_LOCALE: sk_SK.UTF-8
+en_US.UTF-8/XLC_LOCALE: sl_SI.UTF-8
+en_US.UTF-8/XLC_LOCALE: sq_AL.UTF-8
+en_US.UTF-8/XLC_LOCALE: sr_ME.UTF-8
+en_US.UTF-8/XLC_LOCALE: sr_RS.UTF-8
+en_US.UTF-8/XLC_LOCALE: sr_RS.UTF-8@latin
+en_US.UTF-8/XLC_LOCALE: sr_YU.UTF-8
+en_US.UTF-8/XLC_LOCALE: ss_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: st_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: sv_FI.UTF-8
+en_US.UTF-8/XLC_LOCALE: sv_SE.UTF-8
+en_US.UTF-8/XLC_LOCALE: ta_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: te_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: tg_TJ.UTF-8
+th_TH.UTF-8/XLC_LOCALE: th_TH.UTF-8
+en_US.UTF-8/XLC_LOCALE: ti_ER.UTF-8
+en_US.UTF-8/XLC_LOCALE: ti_ET.UTF-8
+en_US.UTF-8/XLC_LOCALE: tl_PH.UTF-8
+en_US.UTF-8/XLC_LOCALE: tn_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: tr_TR.UTF-8
+en_US.UTF-8/XLC_LOCALE: ts_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: tt_RU.UTF-8
+en_US.UTF-8/XLC_LOCALE: uk_UA.UTF-8
+en_US.UTF-8/XLC_LOCALE: ur_IN.UTF-8
+en_US.UTF-8/XLC_LOCALE: ur_PK.UTF-8
+en_US.UTF-8/XLC_LOCALE: uz_UZ.UTF-8
+en_US.UTF-8/XLC_LOCALE: ve_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: vi_VN.UTF-8
+en_US.UTF-8/XLC_LOCALE: wa_BE.UTF-8
+en_US.UTF-8/XLC_LOCALE: xh_ZA.UTF-8
+en_US.UTF-8/XLC_LOCALE: yi_US.UTF-8
+en_US.UTF-8/XLC_LOCALE: ne_NP.UTF-8
+zh_CN.UTF-8/XLC_LOCALE: zh_CN.UTF-8
+zh_HK.UTF-8/XLC_LOCALE: zh_HK.UTF-8
+zh_CN.UTF-8/XLC_LOCALE: zh_SG.UTF-8
+zh_TW.UTF-8/XLC_LOCALE: zh_TW.UTF-8
+en_US.UTF-8/XLC_LOCALE: zu_ZA.UTF-8
diff --git a/test/data/symbols/compose b/test/data/symbols/compose
new file mode 100644
index 0000000..08446bf
--- /dev/null
+++ b/test/data/symbols/compose
@@ -0,0 +1,89 @@
+partial modifier_keys
+xkb_symbols "ralt" {
+ key <RALT> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lwin" {
+ key <LWIN> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lwin-altgr" {
+ key <LWIN> { type[Group1]="FOUR_LEVEL", [ Super_L, Super_L, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rwin" {
+ key <RWIN> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rwin-altgr" {
+ key <RWIN> { type[Group1]="FOUR_LEVEL", [ Super_R, Super_R, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "menu" {
+ key <MENU> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "menu-altgr" {
+ key <MENU> { type[Group1]="FOUR_LEVEL", [ Menu, Menu, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rctrl" {
+ key <RCTL> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rctrl-altgr" {
+ key <RCTL> { type[Group1]="FOUR_LEVEL", [ Control_R, Control_R, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lctrl" {
+ key <LCTL> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lctrl-altgr" {
+ key <LCTL> { type[Group1]="FOUR_LEVEL", [ Control_L, Control_L, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "caps" {
+ key <CAPS> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "caps-altgr" {
+ key <CAPS> { type[Group1]="FOUR_LEVEL", [ Caps_Lock, Caps_Lock, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "102" {
+ key <LSGT> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "102-altgr" {
+ key <LSGT> { type[Group1]="FOUR_LEVEL", [ less, greater, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "paus" {
+ key <PAUS> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "prsc" {
+ key <PRSC> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "sclk" {
+ key <SCLK> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
diff --git a/test/data/sync.sh b/test/data/sync.sh
index 10001bc..2cbcc0a 100755
--- a/test/data/sync.sh
+++ b/test/data/sync.sh
@@ -1,6 +1,8 @@
#/bin/sh
+set -euo pipefail
XKBCONFIGROOT='/usr/share/X11/xkb'
+XLOCALEDIR='/usr/share/X11/locale'
if [ ! -d test/data ]; then
echo "Run this from the top source dir"
@@ -67,3 +69,12 @@ for file in \
; do
cp "$XKBCONFIGROOT/$file" "test/data/$file"
done
+
+for file in \
+ compose.dir \
+ locale.alias \
+ locale.dir \
+ en_US.UTF-8/Compose \
+; do
+ cp "$XLOCALEDIR/$file" "test/data/locale/$file"
+done
diff --git a/test/keysym.c b/test/keysym.c
index bb2ec28..2c98c24 100644
--- a/test/keysym.c
+++ b/test/keysym.c
@@ -76,12 +76,13 @@ test_utf8(xkb_keysym_t keysym, const char *expected)
if (ret <= 0)
return ret;
+ assert(expected != NULL);
+
fprintf(stderr, "Expected keysym %#x -> %s (%u bytes)\n", keysym, expected,
(unsigned) strlen(expected));
fprintf(stderr, "Received keysym %#x -> %s (%u bytes)\n\n", keysym, s,
(unsigned) strlen(s));
- assert(expected != NULL);
return streq(s, expected);
}
@@ -135,7 +136,18 @@ main(void)
assert(test_string("XF86_Switch_VT_5", 0x1008FE05));
assert(test_string("VoidSymbol", 0xFFFFFF));
assert(test_string("U4567", 0x1004567));
+ assert(test_string("U+4567", XKB_KEY_NoSymbol));
+ assert(test_string("U+4567ffff", XKB_KEY_NoSymbol));
+ assert(test_string("U+4567ffffff", XKB_KEY_NoSymbol));
+ assert(test_string("U 4567", XKB_KEY_NoSymbol));
+ assert(test_string("U +4567", XKB_KEY_NoSymbol));
assert(test_string("0x10203040", 0x10203040));
+ assert(test_string("0x102030400", XKB_KEY_NoSymbol));
+ assert(test_string("0x010203040", XKB_KEY_NoSymbol));
+ assert(test_string("0x+10203040", XKB_KEY_NoSymbol));
+ assert(test_string("0x 10203040", XKB_KEY_NoSymbol));
+ assert(test_string("0x +10203040", XKB_KEY_NoSymbol));
+ assert(test_string("0x-10203040", XKB_KEY_NoSymbol));
assert(test_string("a", 0x61));
assert(test_string("A", 0x41));
assert(test_string("ch", 0xfea0));
@@ -144,6 +156,10 @@ main(void)
assert(test_string("THORN", 0x00de));
assert(test_string("Thorn", 0x00de));
assert(test_string("thorn", 0x00fe));
+ /* Max keysym. */
+ assert(test_string("0xffffffff", 0xffffffff));
+ /* Outside range. */
+ assert(test_string("0x100000000", XKB_KEY_NoSymbol));
assert(test_keysym(0x1008FF56, "XF86Close"));
assert(test_keysym(0x0, "NoSymbol"));
@@ -173,6 +189,9 @@ main(void)
assert(test_casestring("Thorn", 0x00fe));
assert(test_casestring("thorn", 0x00fe));
+ assert(test_string("", XKB_KEY_NoSymbol));
+ assert(test_casestring("", XKB_KEY_NoSymbol));
+
assert(test_utf8(XKB_KEY_y, "y"));
assert(test_utf8(XKB_KEY_u, "u"));
assert(test_utf8(XKB_KEY_m, "m"));
diff --git a/test/registry.c b/test/registry.c
index fab3b69..71a480f 100644
--- a/test/registry.c
+++ b/test/registry.c
@@ -56,6 +56,8 @@ struct test_layout {
const char *variant;
const char *brief;
const char *description;
+ const char *iso639[3]; /* language list (iso639 three letter codes), 3 is enough for our test */
+ const char *iso3166[3]; /* country list (iso3166 two letter codes), 3 is enough for our tests */
};
struct test_option {
@@ -76,7 +78,9 @@ fprint_config_item(FILE *fp,
const char *name,
const char *vendor,
const char *brief,
- const char *description)
+ const char *description,
+ const char * const iso639[3],
+ const char * const iso3166[3])
{
fprintf(fp, " <configItem>\n"
" <name>%s</name>\n", name);
@@ -86,6 +90,27 @@ fprint_config_item(FILE *fp,
fprintf(fp, " <description>%s</description>\n", description);
if (vendor)
fprintf(fp, " <vendor>%s</vendor>\n", vendor);
+ if (iso3166 && iso3166[0]) {
+ fprintf(fp, " <countryList>\n");
+ for (int i = 0; i < 3; i++) {
+ const char *iso = iso3166[i];
+ if (!iso)
+ break;
+ fprintf(fp, " <iso3166Id>%s</iso3166Id>\n", iso);
+ }
+ fprintf(fp, " </countryList>\n");
+ }
+ if (iso639 && iso639[0]) {
+ fprintf(fp, " <languageList>\n");
+ for (int i = 0; i < 3; i++) {
+ const char *iso = iso639[i];
+ if (!iso)
+ break;
+ fprintf(fp, " <iso639Id>%s</iso639Id>\n", iso);
+ }
+ fprintf(fp, " </languageList>\n");
+ }
+
fprintf(fp, " </configItem>\n");
}
@@ -131,7 +156,7 @@ test_create_rules(const char *ruleset,
for (const struct test_model *m = test_models; m->name; m++) {
fprintf(fp, "<model>\n");
- fprint_config_item(fp, m->name, m->vendor, NULL, m->description);
+ fprint_config_item(fp, m->name, m->vendor, NULL, m->description, NULL, NULL);
fprintf(fp, "</model>\n");
}
fprintf(fp, "</modelList>\n");
@@ -149,14 +174,13 @@ test_create_rules(const char *ruleset,
while (l->name) {
fprintf(fp, "<layout>\n");
- fprint_config_item(fp, l->name, NULL, l->brief, l->description);
+ fprint_config_item(fp, l->name, NULL, l->brief, l->description, l->iso639, l->iso3166);
if (next->name && streq(next->name, l->name)) {
fprintf(fp, "<variantList>\n");
do {
fprintf(fp, "<variant>\n");
- fprint_config_item(fp, next->variant, NULL, next->brief,
- next->description);
+ fprint_config_item(fp, next->variant, NULL, next->brief, next->description, next->iso639, next->iso3166);
fprintf(fp, "</variant>\n");
l = next;
next++;
@@ -175,10 +199,10 @@ test_create_rules(const char *ruleset,
for (const struct test_option_group *g = test_groups; g->name; g++) {
fprintf(fp, "<group allowMultipleSelection=\"%s\">\n",
g->allow_multiple_selection ? "true" : "false");
- fprint_config_item(fp, g->name, NULL, NULL, g->description);
+ fprint_config_item(fp, g->name, NULL, NULL, g->description, NULL, NULL);
for (const struct test_option *o = g->options; o->name; o++) {
fprintf(fp, " <option>\n");
- fprint_config_item(fp, o->name, NULL, NULL, o->description);
+ fprint_config_item(fp, o->name, NULL, NULL, o->description, NULL, NULL);
fprintf(fp, "</option>\n");
}
fprintf(fp, "</group>\n");
@@ -282,18 +306,21 @@ find_models(struct rxkb_context *ctx, ...)
va_list args;
const char *name;
int idx = 0;
+ bool rc = false;
va_start(args, ctx);
name = va_arg(args, const char *);
while(name) {
assert(++idx < 20); /* safety guard */
if (!find_model(ctx, name))
- return false;
+ goto out;
name = va_arg(args, const char *);
};
+ rc = true;
+out:
va_end(args);
- return true;
+ return rc;
}
static struct rxkb_layout *
@@ -326,6 +353,7 @@ find_layouts(struct rxkb_context *ctx, ...)
va_list args;
const char *name, *variant;
int idx = 0;
+ bool rc = false;
va_start(args, ctx);
name = va_arg(args, const char *);
@@ -333,14 +361,16 @@ find_layouts(struct rxkb_context *ctx, ...)
while(name) {
assert(++idx < 20); /* safety guard */
if (!find_layout(ctx, name, variant))
- return false;
+ goto out;
name = va_arg(args, const char *);
if (name)
variant = va_arg(args, const char *);
};
+ rc = true;
+out:
va_end(args);
- return true;
+ return rc;
}
static struct rxkb_option_group *
@@ -396,6 +426,7 @@ find_options(struct rxkb_context *ctx, ...)
va_list args;
const char *grp, *opt;
int idx = 0;
+ bool rc = false;
va_start(args, ctx);
grp = va_arg(args, const char *);
@@ -403,14 +434,16 @@ find_options(struct rxkb_context *ctx, ...)
while(grp) {
assert(++idx < 20); /* safety guard */
if (!find_option(ctx, grp, opt))
- return false;
+ goto out;
grp = va_arg(args, const char *);
if (grp)
opt = va_arg(args, const char *);
};
+ rc = true;
+out:
va_end(args);
- return true;
+ return rc;
}
static bool
@@ -434,6 +467,9 @@ cmp_models(struct test_model *tm, struct rxkb_model *m)
static bool
cmp_layouts(struct test_layout *tl, struct rxkb_layout *l)
{
+ struct rxkb_iso3166_code *iso3166 = NULL;
+ struct rxkb_iso639_code *iso639 = NULL;
+
if (!tl || !l)
return false;
@@ -449,6 +485,36 @@ cmp_layouts(struct test_layout *tl, struct rxkb_layout *l)
if (!streq_null(tl->description, rxkb_layout_get_description(l)))
return false;
+ iso3166 = rxkb_layout_get_iso3166_first(l);
+ for (size_t i = 0; i < sizeof(tl->iso3166); i++) {
+ const char *iso = tl->iso3166[i];
+ if (iso == NULL && iso3166 == NULL)
+ break;
+
+ if (!streq_null(iso, rxkb_iso3166_code_get_code(iso3166)))
+ return false;
+
+ iso3166 = rxkb_iso3166_code_next(iso3166);
+ }
+
+ if (iso3166 != NULL)
+ return false;
+
+ iso639 = rxkb_layout_get_iso639_first(l);
+ for (size_t i = 0; i < sizeof(tl->iso639); i++) {
+ const char *iso = tl->iso639[i];
+ if (iso == NULL && iso639 == NULL)
+ break;
+
+ if (!streq_null(iso, rxkb_iso639_code_get_code(iso639)))
+ return false;
+
+ iso639 = rxkb_iso639_code_next(iso639);
+ }
+
+ if (iso639 != NULL)
+ return false;
+
return true;
}
@@ -554,6 +620,7 @@ test_load_full(void)
struct test_layout system_layouts[] = {
{"l1", NO_VARIANT, "lbrief1", "ldesc1"},
{"l1", "v1", "vbrief1", "vdesc1"},
+ {"l1", "v2", NULL, "vdesc2"},
{NULL},
};
struct test_option_group system_groups[] = {
@@ -588,6 +655,11 @@ test_load_full(void)
assert(cmp_layouts(&system_layouts[1], l));
rxkb_layout_unref(l);
+ l = fetch_layout(ctx, "l1", "v2");
+ struct test_layout expected = {"l1", "v2", "lbrief1", "vdesc2"};
+ assert(cmp_layouts(&expected, l));
+ rxkb_layout_unref(l);
+
g = fetch_option_group(ctx, "grp1");
assert(cmp_option_groups(&system_groups[0], g, CMP_EXACT));
rxkb_option_group_unref(g);
@@ -600,6 +672,107 @@ test_load_full(void)
}
static void
+test_load_languages(void)
+{
+ struct test_model system_models[] = {
+ {"m1", "vendor1", "desc1"},
+ {NULL},
+ };
+ struct test_layout system_layouts[] = {
+ {"l1", NO_VARIANT, "lbrief1", "ldesc1",
+ .iso639 = { "abc", "def" },
+ .iso3166 = { "uv", "wx" }},
+ {"l1", "v1", "vbrief1", "vdesc1",
+ .iso639 = {"efg"},
+ .iso3166 = {"yz"}},
+ {"l2", NO_VARIANT, "lbrief1", "ldesc1",
+ .iso639 = { "hij", "klm" },
+ .iso3166 = { "op", "qr" }},
+ {"l2", "v2", "lbrief1", "ldesc1",
+ .iso639 = { NULL }, /* inherit from parent */
+ .iso3166 = { NULL }}, /* inherit from parent */
+ {NULL},
+ };
+ struct test_option_group system_groups[] = {
+ {"grp1", "gdesc1", true,
+ { {"grp1:1", "odesc11"}, {"grp1:2", "odesc12"} } },
+ { NULL },
+ };
+ struct rxkb_context *ctx;
+ struct rxkb_layout *l;
+ struct rxkb_iso3166_code *iso3166;
+ struct rxkb_iso639_code *iso639;
+
+ ctx = test_setup_context(system_models, NULL,
+ system_layouts, NULL,
+ system_groups, NULL);
+
+ l = fetch_layout(ctx, "l1", NO_VARIANT);
+ assert(cmp_layouts(&system_layouts[0], l));
+ rxkb_layout_unref(l);
+
+ l = fetch_layout(ctx, "l1", "v1");
+ assert(cmp_layouts(&system_layouts[1], l));
+ rxkb_layout_unref(l);
+
+ l = fetch_layout(ctx, "l2", "v2");
+ iso3166 = rxkb_layout_get_iso3166_first(l);
+ assert(streq(rxkb_iso3166_code_get_code(iso3166), "op"));
+ iso3166 = rxkb_iso3166_code_next(iso3166);
+ assert(streq(rxkb_iso3166_code_get_code(iso3166), "qr"));
+
+ iso639 = rxkb_layout_get_iso639_first(l);
+ assert(streq(rxkb_iso639_code_get_code(iso639), "hij"));
+ iso639 = rxkb_iso639_code_next(iso639);
+ assert(streq(rxkb_iso639_code_get_code(iso639), "klm"));
+
+ rxkb_layout_unref(l);
+ rxkb_context_unref(ctx);
+}
+
+static void
+test_load_invalid_languages(void)
+{
+ struct test_model system_models[] = {
+ {"m1", "vendor1", "desc1"},
+ {NULL},
+ };
+ struct test_layout system_layouts[] = {
+ {"l1", NO_VARIANT, "lbrief1", "ldesc1",
+ .iso639 = { "ab", "def" },
+ .iso3166 = { "uvw", "xz" }},
+ {NULL},
+ };
+ struct test_option_group system_groups[] = {
+ {"grp1", "gdesc1", true,
+ { {"grp1:1", "odesc11"}, {"grp1:2", "odesc12"} } },
+ { NULL },
+ };
+ struct rxkb_context *ctx;
+ struct rxkb_layout *l;
+ struct rxkb_iso3166_code *iso3166;
+ struct rxkb_iso639_code *iso639;
+
+ ctx = test_setup_context(system_models, NULL,
+ system_layouts, NULL,
+ system_groups, NULL);
+
+ l = fetch_layout(ctx, "l1", NO_VARIANT);
+ /* uvw is invalid, we expect 2 letters, verify it was ignored */
+ iso3166 = rxkb_layout_get_iso3166_first(l);
+ assert(streq(rxkb_iso3166_code_get_code(iso3166), "xz"));
+ assert(rxkb_iso3166_code_next(iso3166) == NULL);
+
+ /* ab is invalid, we expect 3 letters, verify it was ignored */
+ iso639 = rxkb_layout_get_iso639_first(l);
+ assert(streq(rxkb_iso639_code_get_code(iso639), "def"));
+ assert(rxkb_iso639_code_next(iso639) == NULL);
+ rxkb_layout_unref(l);
+
+ rxkb_context_unref(ctx);
+}
+
+static void
test_popularity(void)
{
struct test_layout system_layouts[] = {
@@ -840,6 +1013,8 @@ main(void)
test_load_full();
test_load_merge();
test_load_merge_no_overwrite();
+ test_load_languages();
+ test_load_invalid_languages();
test_popularity();
return 0;
diff --git a/test/test-keysym.py b/test/test-keysym.py
new file mode 100755
index 0000000..d237f31
--- /dev/null
+++ b/test/test-keysym.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python3
+#
+# This script creates a custom layout, overriding the TDLE key with the first
+# argument given.
+
+import argparse
+import tempfile
+from pathlib import Path
+import subprocess
+import os
+import re
+import sys
+
+# Template to force our key to TLDE
+template = """
+default
+xkb_symbols "basic" {{
+ include "us(basic)"
+ replace key <TLDE> {{ [ {} ] }};
+}};
+"""
+
+parser = argparse.ArgumentParser(
+ description='Tool to verify whether a keysym is resolved'
+)
+parser.add_argument('keysym', type=str, help='XKB keysym')
+parser.add_argument('--tool', type=str, nargs=1,
+ default=['xkbcli', 'compile-keymap'],
+ help='Full path to the xkbcli-compile-keymap tool')
+args = parser.parse_args()
+
+with tempfile.TemporaryDirectory() as tmpdir:
+ symfile = Path(tmpdir) / "symbols" / "keytest"
+ symfile.parent.mkdir()
+ with symfile.open(mode='w') as f:
+ f.write(template.format(args.keysym))
+
+ try:
+ cmd = [
+ *args.tool,
+ '--layout', 'keytest',
+ ]
+
+ env = os.environ.copy()
+ env['XKB_CONFIG_EXTRA_PATH'] = tmpdir
+
+ result = subprocess.run(cmd, env=env, capture_output=True,
+ universal_newlines=True)
+ if result.returncode != 0:
+ print('ERROR: Failed to compile:')
+ print(result.stderr)
+ sys.exit(1)
+
+ # grep for TLDE actually being remapped
+ for l in result.stdout.split('\n'):
+ match = re.match(r'\s+key \<TLDE\>\s+{\s+\[\s+(?P<keysym>\w+)\s+\]\s+}', l)
+ if match:
+ if args.keysym == match.group('keysym'):
+ sys.exit(0)
+ elif match.group('keysym') == 'NoSymbol':
+ print('ERROR: key {} not resolved:'.format(args.keysym), l)
+ else:
+ print('ERROR: key {} mapped to wrong key:'.format(args.keysym), l)
+ sys.exit(1)
+
+ print(result.stdout)
+ print('ERROR: above keymap is missing key mapping for {}'.format(args.keysym))
+ sys.exit(1)
+ except FileNotFoundError as err:
+ print('ERROR: invalid or missing tool: {}'.format(err))
+ sys.exit(1)
diff --git a/test/tool-option-parsing.py b/test/tool-option-parsing.py
index a2072b3..6692d58 100755
--- a/test/tool-option-parsing.py
+++ b/test/tool-option-parsing.py
@@ -31,8 +31,19 @@ import tempfile
import unittest
-top_builddir = os.environ['top_builddir']
-top_srcdir = os.environ['top_srcdir']
+try:
+ top_builddir = os.environ['top_builddir']
+ top_srcdir = os.environ['top_srcdir']
+except KeyError:
+ print('Required environment variables not found: top_srcdir/top_builddir', file=sys.stderr)
+ from pathlib import Path
+ top_srcdir = '.'
+ try:
+ top_builddir = next(Path('.').glob('**/meson-logs/')).parent
+ except StopIteration:
+ sys.exit(1)
+ print('Using srcdir "{}", builddir "{}"'.format(top_srcdir, top_builddir), file=sys.stderr)
+
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('test')
@@ -65,10 +76,11 @@ class XkbcliTool:
xkbcli_tool = 'xkbcli'
subtool = None
- def __init__(self, subtool=None, skipIf=()):
+ def __init__(self, subtool=None, skipIf=(), skipError=()):
self.tool_path = top_builddir
self.subtool = subtool
self.skipIf = skipIf
+ self.skipError = skipError
def run_command(self, args):
for condition, reason in self.skipIf:
@@ -84,7 +96,11 @@ class XkbcliTool:
def run_command_success(self, args):
rc, stdout, stderr = self.run_command(args)
- assert rc == 0, (stdout, stderr)
+ if rc != 0:
+ for testfunc, reason in self.skipError:
+ if testfunc(rc, stdout, stderr):
+ raise unittest.SkipTest(reason)
+ assert rc == 0, (rc, stdout, stderr)
return stdout, stderr
def run_command_invalid(self, args):
@@ -121,7 +137,11 @@ class TestXkbcli(unittest.TestCase):
(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'),
- ))
+ ), skipError=(
+ (lambda rc, stdout, stderr: 'Couldn\'t find any keyboards' in stderr,
+ 'No keyboards available'),
+ ),
+ )
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'),
@@ -250,7 +270,7 @@ class TestXkbcli(unittest.TestCase):
def test_interactive_evdev_rmlvo(self):
for rmlvo in rmlvos:
with self.subTest(rmlvo=rmlvo):
- self.xkbcli_interactive_evdev.run_command_success(rmlvos)
+ self.xkbcli_interactive_evdev.run_command_success(rmlvo)
def test_interactive_evdev(self):
# Note: --enable-compose fails if $prefix doesn't have the compose tables
@@ -278,6 +298,10 @@ if __name__ == '__main__':
with tempfile.TemporaryDirectory() as tmpdir:
# Use our own test xkeyboard-config copy.
os.environ['XKB_CONFIG_ROOT'] = top_srcdir + '/test/data'
+ # Use our own X11 locale copy.
+ os.environ['XLOCALEDIR'] = top_srcdir + '/test/data/locale'
+ # Use our own locale.
+ os.environ['LC_CTYPE'] = 'en_US.UTF-8'
# 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.
diff --git a/test/xkeyboard-config-test.py.in b/test/xkeyboard-config-test.py.in
index 001f1b6..66deca4 100755
--- a/test/xkeyboard-config-test.py.in
+++ b/test/xkeyboard-config-test.py.in
@@ -1,14 +1,14 @@
#!/usr/bin/env python3
import argparse
+import multiprocessing
import sys
import subprocess
import os
-import io
import xml.etree.ElementTree as ET
-from multiprocessing import Pool
+from pathlib import Path
-verbose = True
+verbose = False
DEFAULT_RULES_XML = '@XKB_CONFIG_ROOT@/rules/evdev.xml'
@@ -17,29 +17,103 @@ EXTRA_PATH = '@MESON_BUILD_ROOT@'
os.environ['PATH'] = ':'.join([EXTRA_PATH, os.getenv('PATH')])
-def noop_progress_bar(x, total):
- return x
+def escape(s):
+ return s.replace('"', '\\"')
# The function generating the progress bar (if any).
-progress_bar = noop_progress_bar
-if os.isatty(sys.stdout.fileno()):
- try:
- from tqdm import tqdm
- progress_bar = tqdm
+def create_progress_bar(verbose):
+ def noop_progress_bar(x, total, file=None):
+ return x
- verbose = False
- except ImportError:
- pass
+ progress_bar = noop_progress_bar
+ if not verbose and os.isatty(sys.stdout.fileno()):
+ try:
+ from tqdm import tqdm
+ progress_bar = tqdm
+ except ImportError:
+ pass
+
+ return progress_bar
+
+
+class Invocation:
+ def __init__(self, r, m, l, v, o):
+ self.command = ""
+ self.rules = r
+ self.model = m
+ self.layout = l
+ self.variant = v
+ self.option = o
+ self.exitstatus = 77 # default to skipped
+ self.error = None
+ self.keymap = None # The fully compiled keymap
+
+ @property
+ def rmlvo(self):
+ return self.rules, self.model, self.layout, self.variant, self.option
+
+ def __str__(self):
+ s = []
+ rmlvo = [x or "" for x in self.rmlvo]
+ rmlvo = ', '.join([f'"{x}"' for x in rmlvo])
+ s.append(f'- rmlvo: [{rmlvo}]')
+ s.append(f' cmd: "{escape(self.command)}"')
+ s.append(f' status: {self.exitstatus}')
+ if self.error:
+ s.append(f' error: "{escape(self.error.strip())}"')
+ return '\n'.join(s)
+
+ def run(self):
+ raise NotImplementedError
+
+
+class XkbCompInvocation(Invocation):
+ def run(self):
+ r, m, l, v, o = self.rmlvo
+ args = ['setxkbmap', '-print']
+ if r is not None:
+ args.append('-rules')
+ args.append('{}'.format(r))
+ if m is not None:
+ args.append('-model')
+ args.append('{}'.format(m))
+ if l is not None:
+ args.append('-layout')
+ args.append('{}'.format(l))
+ if v is not None:
+ args.append('-variant')
+ args.append('{}'.format(v))
+ if o is not None:
+ args.append('-option')
+ args.append('{}'.format(o))
+ xkbcomp_args = ['xkbcomp', '-xkb', '-', '-']
-def xkbcommontool(rmlvo):
- try:
- r = rmlvo.get('r', 'evdev')
- m = rmlvo.get('m', 'pc105')
- l = rmlvo.get('l', 'us')
- v = rmlvo.get('v', None)
- o = rmlvo.get('o', None)
+ self.command = " ".join(args + ["|"] + xkbcomp_args)
+
+ setxkbmap = subprocess.Popen(args, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE, universal_newlines=True)
+ stdout, stderr = setxkbmap.communicate()
+ if "Cannot open display" in stderr:
+ self.error = stderr
+ self.exitstatus = 90
+ else:
+ xkbcomp = subprocess.Popen(xkbcomp_args, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ universal_newlines=True)
+ stdout, stderr = xkbcomp.communicate(stdout)
+ if xkbcomp.returncode != 0:
+ self.error = "failed to compile keymap"
+ self.exitstatus = xkbcomp.returncode
+ else:
+ self.keymap = stdout
+ self.exitstatus = 0
+
+
+class XkbcommonInvocation(Invocation):
+ def run(self):
+ r, m, l, v, o = self.rmlvo
args = [
'xkbcli-compile-keymap', # this is run in the builddir
'--verbose',
@@ -52,28 +126,33 @@ def xkbcommontool(rmlvo):
if o is not None:
args += ['--options', o]
- success = True
- out = io.StringIO()
- if verbose:
- print(':: {}'.format(' '.join(args)), file=out)
-
+ self.command = " ".join(args)
try:
output = subprocess.check_output(args, stderr=subprocess.STDOUT,
universal_newlines=True)
- if verbose:
- print(output, file=out)
-
if "unrecognized keysym" in output:
for line in output.split('\n'):
if "unrecognized keysym" in line:
- print('ERROR: {}'.format(line))
- success = False
+ self.error = line
+ self.exitstatus = 99 # tool doesn't generate this one
+ else:
+ self.exitstatus = 0
+ self.keymap = output
except subprocess.CalledProcessError as err:
- print('ERROR: Failed to compile: {}'.format(' '.join(args)), file=out)
- print(err.output, file=out)
- success = False
+ self.error = "failed to compile keymap"
+ self.exitstatus = err.returncode
- return success, out.getvalue()
+
+def xkbcommontool(rmlvo):
+ try:
+ r = rmlvo.get('r', 'evdev')
+ m = rmlvo.get('m', 'pc105')
+ l = rmlvo.get('l', 'us')
+ v = rmlvo.get('v', None)
+ o = rmlvo.get('o', None)
+ tool = XkbcommonInvocation(r, m, l, v, o)
+ tool.run()
+ return tool
except KeyboardInterrupt:
pass
@@ -85,51 +164,9 @@ def xkbcomp(rmlvo):
l = rmlvo.get('l', 'us')
v = rmlvo.get('v', None)
o = rmlvo.get('o', None)
- args = ['setxkbmap', '-print']
- if r is not None:
- args.append('-rules')
- args.append('{}'.format(r))
- if m is not None:
- args.append('-model')
- args.append('{}'.format(m))
- if l is not None:
- args.append('-layout')
- args.append('{}'.format(l))
- if v is not None:
- args.append('-variant')
- args.append('{}'.format(v))
- if o is not None:
- args.append('-option')
- args.append('{}'.format(o))
-
- success = True
- out = io.StringIO()
- if verbose:
- print(':: {}'.format(' '.join(args)), file=out)
-
- try:
- xkbcomp_args = ['xkbcomp', '-xkb', '-', '-']
-
- setxkbmap = subprocess.Popen(args, stdout=subprocess.PIPE)
- xkbcomp = subprocess.Popen(xkbcomp_args, stdin=setxkbmap.stdout,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE,
- universal_newlines=True)
- setxkbmap.stdout.close()
- stdout, stderr = xkbcomp.communicate()
- if xkbcomp.returncode != 0:
- print('ERROR: Failed to compile: {}'.format(' '.join(args)), file=out)
- success = False
- if xkbcomp.returncode != 0 or verbose:
- print(stdout, file=out)
- print(stderr, file=out)
-
- # This catches setxkbmap errors.
- except subprocess.CalledProcessError as err:
- print('ERROR: Failed to compile: {}'.format(' '.join(args)), file=out)
- print(err.output, file=out)
- success = False
-
- return success, out.getvalue()
+ tool = XkbCompInvocation(r, m, l, v, o)
+ tool.run()
+ return tool
except KeyboardInterrupt:
pass
@@ -159,26 +196,68 @@ def parse(path):
return combos
-def run(combos, tool, njobs):
+def run(combos, tool, njobs, keymap_output_dir):
+ if keymap_output_dir:
+ keymap_output_dir = Path(keymap_output_dir)
+ try:
+ keymap_output_dir.mkdir()
+ except FileExistsError as e:
+ print(e, file=sys.stderr)
+ return False
+
+ keymap_file = None
+ keymap_file_fd = None
+
failed = False
- with Pool(njobs) as p:
+ with multiprocessing.Pool(njobs) as p:
results = p.imap_unordered(tool, combos)
- for success, output in progress_bar(results, total=len(combos)):
- if not success:
+ for invocation in progress_bar(results, total=len(combos), file=sys.stdout):
+ if invocation.exitstatus != 0:
failed = True
- if output:
- print(output, file=sys.stdout if success else sys.stderr)
+ target = sys.stderr
+ else:
+ target = sys.stdout if verbose else None
+
+ if target:
+ print(invocation, file=target)
+
+ if keymap_output_dir:
+ # we're running through the layouts in a somewhat sorted manner,
+ # so let's keep the fd open until we switch layouts
+ layout = invocation.layout
+ if invocation.variant:
+ layout += f"({invocation.variant})"
+ fname = keymap_output_dir / layout
+ if fname != keymap_file:
+ keymap_file = fname
+ if keymap_file_fd:
+ keymap_file_fd.close()
+ keymap_file_fd = open(keymap_file, 'a')
+
+ rmlvo = ', '.join([x or '' for x in invocation.rmlvo])
+ print(f"// {rmlvo}", file=keymap_file_fd)
+ print(invocation.keymap, file=keymap_file_fd)
+ keymap_file_fd.flush()
+
return failed
def main(args):
+ global progress_bar
+ global verbose
+
tools = {
'libxkbcommon': xkbcommontool,
'xkbcomp': xkbcomp,
}
parser = argparse.ArgumentParser(
- description='Tool to test all layout/variant/option combinations.'
+ description='''
+ This tool compiles a keymap for each layout, variant and
+ options combination in the given rules XML file. The output
+ of this tool is YAML, use your favorite YAML parser to
+ extract error messages. Errors are printed to stderr.
+ '''
)
parser.add_argument('path', metavar='/path/to/evdev.xml',
nargs='?', type=str,
@@ -190,12 +269,33 @@ def main(args):
parser.add_argument('--jobs', '-j', type=int,
default=os.cpu_count() * 4,
help='number of processes to use')
+ parser.add_argument('--verbose', '-v', default=False, action="store_true")
+ parser.add_argument('--keymap-output-dir', default=None, type=str,
+ help='Directory to print compiled keymaps to')
+ parser.add_argument('--layout', default=None, type=str,
+ help='Only test the given layout')
+ parser.add_argument('--variant', default=None, type=str,
+ help='Only test the given variant')
+ parser.add_argument('--option', default=None, type=str,
+ help='Only test the given option')
+
args = parser.parse_args()
+ verbose = args.verbose
+ keymapdir = args.keymap_output_dir
+ progress_bar = create_progress_bar(verbose)
+
tool = tools[args.tool]
- combos = parse(args.path)
- failed = run(combos, tool, args.jobs)
+ if any([args.layout, args.variant, args.option]):
+ combos = [{
+ 'l': args.layout,
+ 'v': args.variant,
+ 'o': args.option,
+ }]
+ else:
+ combos = parse(args.path)
+ failed = run(combos, tool, args.jobs, keymapdir)
sys.exit(failed)
@@ -203,4 +303,4 @@ if __name__ == '__main__':
try:
main(sys.argv)
except KeyboardInterrupt:
- print('Exiting after Ctrl+C')
+ print('# Exiting after Ctrl+C')
diff --git a/tools/compose.c b/tools/compose.c
new file mode 100644
index 0000000..2b3ba64
--- /dev/null
+++ b/tools/compose.c
@@ -0,0 +1,126 @@
+/*
+ * Copyright © 2021 Ran Benita <ran@unusedvar.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "config.h"
+
+#include <getopt.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "xkbcommon/xkbcommon.h"
+#include "xkbcommon/xkbcommon-compose.h"
+
+static void
+usage(FILE *fp, char *progname)
+{
+ fprintf(fp,
+ "Usage: %s [--locale LOCALE | --locale-from-env | --locale-from-setlocale]\n",
+ progname);
+ fprintf(fp,
+ " --locale - specify the locale directly\n"
+ " --locale-from-env - get the locale from the LC_ALL/LC_CTYPE/LANG environment variables (falling back to C)\n"
+ " --locale-from-setlocale - get the locale using setlocale(3)\n"
+ );
+}
+
+int
+main(int argc, char *argv[])
+{
+ int ret = EXIT_FAILURE;
+ struct xkb_context *ctx = NULL;
+ struct xkb_compose_table *compose_table = NULL;
+ const char *locale = NULL;
+ enum options {
+ OPT_LOCALE,
+ OPT_LOCALE_FROM_ENV,
+ OPT_LOCALE_FROM_SETLOCALE,
+ };
+ static struct option opts[] = {
+ {"locale", required_argument, 0, OPT_LOCALE},
+ {"locale-from-env", no_argument, 0, OPT_LOCALE_FROM_ENV},
+ {"locale-from-setlocale", no_argument, 0, OPT_LOCALE_FROM_SETLOCALE},
+ {0, 0, 0, 0},
+ };
+
+ setlocale(LC_ALL, "");
+
+ while (1) {
+ int opt;
+ int option_index = 0;
+
+ opt = getopt_long(argc, argv, "h", opts, &option_index);
+ if (opt == -1)
+ break;
+
+ switch (opt) {
+ case OPT_LOCALE:
+ locale = optarg;
+ break;
+ case OPT_LOCALE_FROM_ENV:
+ locale = getenv("LC_ALL");
+ if (!locale)
+ locale = getenv("LC_CTYPE");
+ if (!locale)
+ locale = getenv("LANG");
+ if (!locale)
+ locale = "C";
+ break;
+ case OPT_LOCALE_FROM_SETLOCALE:
+ locale = setlocale(LC_CTYPE, NULL);
+ break;
+ case 'h':
+ usage(stdout, argv[0]);
+ return EXIT_SUCCESS;
+ case '?':
+ usage(stderr, argv[0]);
+ return EXIT_INVALID_USAGE;
+ }
+ }
+ if (locale == NULL) {
+ usage(stderr, argv[0]);
+ return EXIT_INVALID_USAGE;
+ }
+
+ ctx = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
+ if (!ctx) {
+ fprintf(stderr, "Couldn't create xkb context\n");
+ goto out;
+ }
+
+ compose_table =
+ xkb_compose_table_new_from_locale(ctx, locale,
+ XKB_COMPOSE_COMPILE_NO_FLAGS);
+ if (!compose_table) {
+ fprintf(stderr, "Couldn't create compose from locale\n");
+ goto out;
+ }
+
+ printf("Compiled successfully from locale %s\n", locale);
+
+out:
+ xkb_compose_table_unref(compose_table);
+ xkb_context_unref(ctx);
+
+ return ret;
+}
diff --git a/tools/how-to-type.c b/tools/how-to-type.c
index 0a6f79e..91ebd00 100644
--- a/tools/how-to-type.c
+++ b/tools/how-to-type.c
@@ -24,6 +24,7 @@
#include "config.h"
#include <getopt.h>
+#include <stdbool.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
@@ -35,9 +36,9 @@
static void
usage(const char *argv0, FILE *fp)
{
- fprintf(fp, "Usage: %s [--rules <rules>] [--model <model>] "
+ fprintf(fp, "Usage: %s [--keysym] [--rules <rules>] [--model <model>] "
"[--layout <layout>] [--variant <variant>] [--options <options>]"
- " <unicode codepoint>\n", argv0);
+ " <unicode codepoint/keysym>\n", argv0);
}
int
@@ -48,6 +49,7 @@ main(int argc, char *argv[])
const char *layout_ = NULL;
const char *variant = NULL;
const char *options = NULL;
+ bool keysym_mode = false;
int err = EXIT_FAILURE;
struct xkb_context *ctx = NULL;
char *endp;
@@ -60,6 +62,7 @@ main(int argc, char *argv[])
xkb_keycode_t min_keycode, max_keycode;
xkb_mod_index_t num_mods;
enum options {
+ OPT_KEYSYM,
OPT_RULES,
OPT_MODEL,
OPT_LAYOUT,
@@ -68,6 +71,7 @@ main(int argc, char *argv[])
};
static struct option opts[] = {
{"help", no_argument, 0, 'h'},
+ {"keysym", no_argument, 0, OPT_KEYSYM},
{"rules", required_argument, 0, OPT_RULES},
{"model", required_argument, 0, OPT_MODEL},
{"layout", required_argument, 0, OPT_LAYOUT},
@@ -85,6 +89,9 @@ main(int argc, char *argv[])
break;
switch (opt) {
+ case OPT_KEYSYM:
+ keysym_mode = true;
+ break;
case OPT_RULES:
rules = optarg;
break;
@@ -113,18 +120,26 @@ main(int argc, char *argv[])
exit(EXIT_INVALID_USAGE);
}
- errno = 0;
- val = strtol(argv[optind], &endp, 0);
- if (errno != 0 || endp == argv[optind] || val < 0 || val > 0x10FFFF) {
- usage(argv[0], stderr);
- exit(EXIT_INVALID_USAGE);
- }
- codepoint = (uint32_t) val;
+ if (keysym_mode) {
+ keysym = xkb_keysym_from_name(argv[optind], XKB_KEYSYM_NO_FLAGS);
+ if (keysym == XKB_KEY_NoSymbol) {
+ fprintf(stderr, "Failed to convert argument to keysym\n");
+ goto err;
+ }
+ } else {
+ errno = 0;
+ val = strtol(argv[optind], &endp, 0);
+ if (errno != 0 || endp == argv[optind] || val < 0 || val > 0x10FFFF) {
+ usage(argv[0], stderr);
+ exit(EXIT_INVALID_USAGE);
+ }
+ codepoint = (uint32_t) val;
- keysym = xkb_utf32_to_keysym(codepoint);
- if (keysym == XKB_KEY_NoSymbol) {
- fprintf(stderr, "Failed to convert codepoint to keysym\n");
- goto err;
+ keysym = xkb_utf32_to_keysym(codepoint);
+ if (keysym == XKB_KEY_NoSymbol) {
+ fprintf(stderr, "Failed to convert codepoint to keysym\n");
+ goto err;
+ }
}
ret = xkb_keysym_get_name(keysym, name, sizeof(name));
diff --git a/tools/interactive-evdev.c b/tools/interactive-evdev.c
index 9c8c94e..8b0bce0 100644
--- a/tools/interactive-evdev.c
+++ b/tools/interactive-evdev.c
@@ -31,6 +31,7 @@
#include <getopt.h>
#include <limits.h>
#include <locale.h>
+#include <poll.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
@@ -38,7 +39,6 @@
#include <string.h>
#include <unistd.h>
-#include <sys/epoll.h>
#include <linux/input.h>
#include "xkbcommon/xkbcommon.h"
@@ -313,33 +313,25 @@ read_keyboard(struct keyboard *kbd)
static int
loop(struct keyboard *kbds)
{
- int i, ret = 1;
- int epfd = -1;
+ int ret = -1;
struct keyboard *kbd;
- struct epoll_event ev;
- struct epoll_event evs[16];
+ nfds_t nfds, i;
+ struct pollfd *fds = NULL;
- epfd = epoll_create1(0);
- if (epfd < 0) {
- fprintf(stderr, "Couldn't create epoll instance: %s\n",
- strerror(errno));
+ for (kbd = kbds, nfds = 0; kbd; kbd = kbd->next, nfds++) {}
+ fds = calloc(nfds, sizeof(*fds));
+ if (fds == NULL) {
+ fprintf(stderr, "Out of memory");
goto out;
}
- for (kbd = kbds; kbd; kbd = kbd->next) {
- memset(&ev, 0, sizeof(ev));
- ev.events = EPOLLIN;
- ev.data.ptr = kbd;
- ret = epoll_ctl(epfd, EPOLL_CTL_ADD, kbd->fd, &ev);
- if (ret) {
- fprintf(stderr, "Couldn't add %s to epoll: %s\n",
- kbd->path, strerror(errno));
- goto out;
- }
+ for (i = 0, kbd = kbds; kbd; kbd = kbd->next, i++) {
+ fds[i].fd = kbd->fd;
+ fds[i].events = POLLIN;
}
while (!terminate) {
- ret = epoll_wait(epfd, evs, 16, -1);
+ ret = poll(fds, nfds, -1);
if (ret < 0) {
if (errno == EINTR)
continue;
@@ -348,18 +340,19 @@ loop(struct keyboard *kbds)
goto out;
}
- for (i = 0; i < ret; i++) {
- kbd = evs[i].data.ptr;
- ret = read_keyboard(kbd);
- if (ret) {
- goto out;
+ for (i = 0, kbd = kbds; kbd; kbd = kbd->next, i++) {
+ if (fds[i].revents != 0) {
+ ret = read_keyboard(kbd);
+ if (ret) {
+ goto out;
+ }
}
}
}
ret = 0;
out:
- close(epfd);
+ free(fds);
return ret;
}
diff --git a/tools/interactive-wayland.c b/tools/interactive-wayland.c
index 3ac7ad7..d23432d 100644
--- a/tools/interactive-wayland.c
+++ b/tools/interactive-wayland.c
@@ -130,6 +130,27 @@ create_tmpfile_cloexec(char *tmpname)
}
#endif
+static int
+os_resize_anonymous_file(int fd, off_t size)
+{
+ int ret;
+#ifdef HAVE_POSIX_FALLOCATE
+ ret = posix_fallocate(fd, 0, size);
+ if (ret == 0)
+ return 0;
+ /*
+ * Filesystems that do support fallocate will return EINVAL
+ * or EOPNOTSUPP, fallback to ftruncate() then.
+ */
+ if (ret != EINVAL && ret != EOPNOTSUPP)
+ return ret;
+#endif
+ ret = ftruncate(fd, size);
+ if (ret != 0)
+ return errno;
+ return 0;
+}
+
/*
* Create a new, unique, anonymous file of the given size, and
* return the file descriptor for it. The file descriptor is set
@@ -148,8 +169,8 @@ create_tmpfile_cloexec(char *tmpname)
* If the C library implements posix_fallocate(), it is used to
* guarantee that disk space is available for the file at the
* given size. If disk space is insufficent, errno is set to ENOSPC.
- * If posix_fallocate() is not supported, program may receive
- * SIGBUS on accessing mmap()'ed file contents instead.
+ * If posix_fallocate() is not supported, program will fallback
+ * to ftruncate() instead.
*/
static int
os_create_anonymous_file(off_t size)
@@ -180,20 +201,12 @@ os_create_anonymous_file(off_t size)
if (fd < 0)
return -1;
-#ifdef HAVE_POSIX_FALLOCATE
- ret = posix_fallocate(fd, 0, size);
+ ret = os_resize_anonymous_file(fd, size);
if (ret != 0) {
close(fd);
errno = ret;
return -1;
}
-#else
- ret = ftruncate(fd, size);
- if (ret < 0) {
- close(fd);
- return -1;
- }
-#endif
return fd;
}
diff --git a/tools/interactive-x11.c b/tools/interactive-x11.c
index c7ca9aa..eea22fa 100644
--- a/tools/interactive-x11.c
+++ b/tools/interactive-x11.c
@@ -246,7 +246,7 @@ process_event(xcb_generic_event_t *gevent, struct keyboard *kbd)
XKB_CONSUMED_MODE_XKB);
/* Exit on ESC. */
- if (keycode == 9)
+ if (xkb_state_key_get_one_sym(kbd->state, keycode) == XKB_KEY_Escape)
terminate = true;
break;
}
diff --git a/tools/registry-list.c b/tools/registry-list.c
index 0dc71d1..c360da7 100644
--- a/tools/registry-list.c
+++ b/tools/registry-list.c
@@ -136,19 +136,22 @@ main(int argc, char **argv)
goto err;
}
- printf("Models:\n");
+ printf("models:\n");
m = rxkb_model_first(ctx);
assert(m); /* Empty model list is usually a bug or a bad xml file */
while (m) {
- printf("- %s:%s:%s\n",
+ const char *vendor = rxkb_model_get_vendor(m);
+ printf("- name: %s\n"
+ " vendor: %s\n"
+ " description: %s\n",
rxkb_model_get_name(m),
- rxkb_model_get_vendor(m),
+ vendor ? vendor : "''",
rxkb_model_get_description(m));
m = rxkb_model_next(m);
}
printf("\n");
- printf("Layouts:\n");
+ printf("layouts:\n");
l = rxkb_layout_first(ctx);
assert(l); /* Empty layout list is usually a bug or a bad xml file */
while (l) {
@@ -156,56 +159,63 @@ main(int argc, char **argv)
struct rxkb_iso3166_code *iso3166;
const char *variant = rxkb_layout_get_variant(l);
const char *brief = rxkb_layout_get_brief(l);
- bool first;
- printf("- %s%s%s%s:%s:%s",
+ printf("- layout: '%s'\n"
+ " variant: '%s'\n"
+ " brief: '%s'\n"
+ " description: %s\n",
rxkb_layout_get_name(l),
- variant ? "(" : "",
variant ? variant : "",
- variant ? ")" : "",
- brief ? brief : "",
+ brief ? brief : "''",
rxkb_layout_get_description(l));
+ printf(" iso639: [");
iso639 = rxkb_layout_get_iso639_first(l);
- if (iso639)
- printf(":iso639-");
- first = true;
- while (iso639) {
- printf("%s%s", first ? "" : ",", rxkb_iso639_code_get_code(iso639));
- iso639 = rxkb_iso639_code_next(iso639);
- first = false;
+ if (iso639) {
+ const char *sep = "";
+ while (iso639) {
+ printf("%s'%s'", sep, rxkb_iso639_code_get_code(iso639));
+ iso639 = rxkb_iso639_code_next(iso639);
+ sep = ", ";
+ }
}
+ printf("]\n");
+ printf(" iso3166: [");
iso3166 = rxkb_layout_get_iso3166_first(l);
- if (iso3166)
- printf(":iso3166-");
- first = true;
- while (iso3166) {
- printf("%s%s", first ? "" : ",", rxkb_iso3166_code_get_code(iso3166));
- iso3166 = rxkb_iso3166_code_next(iso3166);
- first = false;
+ if (iso3166) {
+ const char *sep = "";
+ while (iso3166) {
+ printf("%s'%s'", sep, rxkb_iso3166_code_get_code(iso3166));
+ iso3166 = rxkb_iso3166_code_next(iso3166);
+ sep = ", ";
+ }
}
-
- printf("\n");
+ printf("]\n");
l = rxkb_layout_next(l);
}
printf("\n");
- printf("Options:\n");
+ printf("option_groups:\n");
g = rxkb_option_group_first(ctx);
assert(g); /* Empty option goups list is usually a bug or a bad xml file */
while (g) {
struct rxkb_option *o;
- printf("- %s:%s (%s)\n",
+ printf("- name: '%s'\n"
+ " description: %s\n"
+ " allows_multiple: %s\n"
+ " options:\n",
rxkb_option_group_get_name(g),
rxkb_option_group_get_description(g),
- rxkb_option_group_allows_multiple(g) ? "multiple" : "single");
+ rxkb_option_group_allows_multiple(g) ? "true" : "false");
o = rxkb_option_first(g);
assert(o); /* Empty option list is usually a bug or a bad xml file */
while (o) {
const char *brief = rxkb_option_get_brief(o);
- printf(" - %s:%s:%s\n",
+ printf(" - name: '%s'\n"
+ " brief: '%s'\n"
+ " description: '%s'\n",
rxkb_option_get_name(o),
brief ? brief : "",
rxkb_option_get_description(o));
diff --git a/tools/xkbcli-how-to-type.1 b/tools/xkbcli-how-to-type.1
index 5211d0f..d5002ae 100644
--- a/tools/xkbcli-how-to-type.1
+++ b/tools/xkbcli-how-to-type.1
@@ -9,7 +9,7 @@
.Sh SYNOPSIS
.Nm
.Op options
-.Ar codepoint
+.Ar codepoint/keysym
.
.Sh DESCRIPTION
.Nm
@@ -17,6 +17,9 @@ prints the key combinations (keycode + modifiers) in the keymap's layouts which
would produce the given Unicode codepoint.
.
.Bl -tag -width Ds
+.It Fl \-keysym
+Treat the argument as a keysym, not a Unicode codepoint
+.
.It Fl \-rules Ar rules
The XKB ruleset
.
diff --git a/tools/xkbcli-interactive-evdev.1 b/tools/xkbcli-interactive-evdev.1
index be1b70f..58be555 100644
--- a/tools/xkbcli-interactive-evdev.1
+++ b/tools/xkbcli-interactive-evdev.1
@@ -14,7 +14,7 @@
.Nm
is a commandline tool to interactively debug XKB keymaps by listening to
.Pa /dev/input/eventX
-evdev devices (Linux).
+evdev devices.
.
.Pp
.Nm
diff --git a/tools/xkbcli-list.1 b/tools/xkbcli-list.1
index a72477b..66ea09b 100644
--- a/tools/xkbcli-list.1
+++ b/tools/xkbcli-list.1
@@ -1,4 +1,4 @@
-.Dd July 27, 2020
+.Dd November 1, 2021
.Dt XKBCLI\-LIST 1
.Os
.
@@ -11,11 +11,11 @@
.Op Pa /path/to/xkbbase Oo Pa /path/to/xkbbase Oc ...
.
.Sh DESCRIPTION
-.Nm
-is a commandline tool to list available model, layout, variant and option (MLVO) values from the XKB registry.
+List available model, layout, variant and option (MLVO) values from the XKB registry.
+The output is in YAML 1.2 format.
.
.Pp
-Positional arguments provided on the commandline are treated as XKB base directory installations.
+Positional arguments are treated as XKB base directory installations.
.
.Bl -tag -width Ds
.It Fl \-help
diff --git a/tools/xkbcli.1 b/tools/xkbcli.1
index 9ea0416..18f7732 100644
--- a/tools/xkbcli.1
+++ b/tools/xkbcli.1
@@ -27,6 +27,10 @@ Print the version and exit
.
.Ss COMMANDS
.Bl -tag -width Ds
+.It Ic compile\-keymap
+Compile an XKB keymap, see
+.Xr xkbcli\-compile\-keymap 1
+
.It Ic how\-to\-type
Show how to type a given Unicode codepoint, see
.Xr xkbcli\-how\-to\-type 1
@@ -40,7 +44,7 @@ Interactive debugger for XKB keymaps for Wayland, see
.Xr xkbcli\-interactive\-wayland 1
.
.It Ic interactive\-evdev
-Interactive debugger for XKB keymaps for evdev (Linux), see
+Interactive debugger for XKB keymaps for evdev, see
.Xr xkbcli\-interactive\-evdev 1
.
.It Ic list
diff --git a/tools/xkbcli.c b/tools/xkbcli.c
index 1f3ed3f..75f72fe 100644
--- a/tools/xkbcli.c
+++ b/tools/xkbcli.c
@@ -55,7 +55,7 @@ usage(void)
#endif
#if HAVE_XKBCLI_INTERACTIVE_EVDEV
" interactive-evdev\n"
- " Interactive debugger for XKB keymaps for evdev (Linux)\n"
+ " Interactive debugger for XKB keymaps for evdev\n"
"\n"
#endif
#if HAVE_XKBCLI_COMPILE_KEYMAP