From 7f3ff8c0e45f8b8ecc06d546a0f0b98f60b4552c Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 29 Oct 2013 09:39:30 +0100 Subject: [PATCH] use kvm keymap files --- Makefile | 11 +- genkeysym.pl | 62 ++ input.c | 273 +++++-- keysyms.h | 2104 ++++++++++++++++++++++++++++++++++++++++++++++++++ spiceterm.c | 7 +- spiceterm.h | 1 + 6 files changed, 2406 insertions(+), 52 deletions(-) create mode 100755 genkeysym.pl create mode 100644 keysyms.h diff --git a/Makefile b/Makefile index 128a8c5..47d39a5 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ PROGRAMS=spiceterm -HEADERS=translations.h event_loop.h glyphs.h spiceterm.h +HEADERS=translations.h event_loop.h glyphs.h spiceterm.h keysyms.h SOURCES=screen.c event_loop.c input.c spiceterm.c auth-pve.c #export G_MESSAGES_DEBUG=all @@ -10,12 +10,15 @@ SOURCES=screen.c event_loop.c input.c spiceterm.c auth-pve.c all: ${PROGRAMS} spiceterm: ${SOURCES} ${HEADERS} spiceterm.c - gcc -Werror -Wall -Wtype-limits ${SOURCES} -g -O2 -o $@ -lutil $(shell pkg-config --cflags gdk-3.0) $(shell pkg-config --cflags --libs gthread-2.0,spice-protocol,spice-server) + gcc -Werror -Wall -Wtype-limits ${SOURCES} -g -O2 -o $@ -lutil $(shell pkg-config --cflags gdk-3.0) $(shell pkg-config --cflags --libs gthread-2.0,spice-protocol,spice-server,gdk-3.0) + +keysyms.h: genkeysym.pl + ./genkeysym.pl >$@ .PHONY: test test: spiceterm - #./spiceterm & remote-viewer spice://localhost:5900 - G_MESSAGES_DEBUG=all SPICE_DEBUG=1 SPICE_TICKET=test ./spiceterm & G_MESSAGES_DEBUG=all SPICE_DEBUG=1 remote-viewer --debug 'spice://localhost?tls-port=5900' --spice-ca-file /etc/pve/pve-root-ca.pem --spice-secure-channels=all + ./spiceterm --noauth --keymap de & remote-viewer spice://localhost?tls-port=5900 + #G_MESSAGES_DEBUG=all SPICE_DEBUG=1 SPICE_TICKET=test ./spiceterm & G_MESSAGES_DEBUG=all SPICE_DEBUG=1 remote-viewer --debug 'spice://localhost?tls-port=5900' --spice-ca-file /etc/pve/pve-root-ca.pem --spice-secure-channels=all .PHONY: distclean distclean: clean diff --git a/genkeysym.pl b/genkeysym.pl new file mode 100755 index 0000000..cdccf3c --- /dev/null +++ b/genkeysym.pl @@ -0,0 +1,62 @@ +#!/usr/bin/perl + +use strict; +use warnings; + + +my $header = "/usr/include/X11/keysymdef.h"; + +print <<__EOD; +typedef struct { + const char* name; + int keysym; + int unicode; +} name2keysym_t; + +static const name2keysym_t name2keysym[] = { +__EOD + +open(TMP, "<$header"); +while (defined(my $line = )) { + next if $line !~ m/\#define /; + my @ea = split(/\s+/, $line, 4); + + next if $ea[1] !~ m/^XK_(\S+)$/; + my $name = $1; + + next if $ea[2] !~ m/^0x([A-Za-z0-9]+)$/; + my $keysym = hex($ea[2]); + + my $unicode = 0; + if ($ea[3] && $ea[3] =~ m/\/\* U\+([0-9A-Fa-f]{4,6}) /) { + $unicode = hex($1); + } + + if (!$unicode) { + # Latin-1 characters (1:1 mapping) + if (($keysym >= 0x0020 && $keysym <= 0x007e) || + ($keysym >= 0x00a0 && $keysym <= 0x00ff)) { + $unicode = $keysym; + } elsif (($keysym & 0xff000000) == 0x01000000) { + # directly encoded 24-bit UCS characters */ + $unicode = $keysym & 0x00ffffff; + } elsif ($keysym >= 0x0ff08 && $keysym <= 0x0ff1b) { + # tty BS, LF, RETURN, Delete + $unicode = $keysym - 0x0ff00; + } elsif ($keysym >= 0x0ffaa && $keysym <= 0x0ffaf) { + # keypad +*-/ + $unicode = $keysym - 0x0ff80; + } elsif ($keysym >= 0x0ffb0 && $keysym <= 0x0ffb9) { + # keypad 01234... + $unicode = $keysym - 0x0ff80; + } + } + + printf(" { \"%s\", 0x%03x, 0x%04x },\n", $name, $keysym, $unicode); +} + +printf(" { NULL, 0x%03x, 0x%04x },\n", 0, 0); + +print <<__EOD; +}; +__EOD diff --git a/input.c b/input.c index fdd6cfe..48f2576 100644 --- a/input.c +++ b/input.c @@ -28,8 +28,10 @@ #include #include #include +#include #include "spiceterm.h" +#include "keysyms.h" #include #include @@ -53,13 +55,42 @@ my_kbd_get_leds(SpiceKbdInstance *sin) return 0; } +#define MOD_MASK_SHIFT (1<<0) +#define MOD_MASK_ALTGR (1<<1) +#define MOD_MASK_NUMLOCK (1<<2) + + +typedef struct keymap_entry { + gint hkey; //(mask << 8 || keycode) + guint8 mask; // MOD_MASK_* + guint8 keycode; + guint keysym; + guint unicode; +} keymap_entry; + +static GHashTable *keymap = NULL; + #define KBD_MOD_CONTROL_L_FLAG (1<<0) #define KBD_MOD_CONTROL_R_FLAG (1<<1) #define KBD_MOD_SHIFT_L_FLAG (1<<2) #define KBD_MOD_SHIFT_R_FLAG (1<<3) +#define KBD_MOD_ALTGR_FLAG (1<<4) +#define KBD_MOD_NUMLOCK (1<<5) +#define KBD_MOD_SHIFTLOCK (1<<6) static int kbd_flags = 0; +static const name2keysym_t * +lookup_keysym(const char *name) +{ + const name2keysym_t *p; + for(p = name2keysym; p->name != NULL; p++) { + if (!strcmp(p->name, name)) + return p; + } + return NULL; +} + static void my_kbd_push_key(SpiceKbdInstance *sin, uint8_t frag) { @@ -70,7 +101,7 @@ my_kbd_push_key(SpiceKbdInstance *sin, uint8_t frag) static int e0_mode = 0; DPRINTF(1, "enter frag=%02x flags=%08x", frag, kbd_flags); - + if (e0_mode) { e0_mode = 0; switch (frag) { @@ -80,6 +111,12 @@ my_kbd_push_key(SpiceKbdInstance *sin, uint8_t frag) case 0x9d: // release Control_R kbd_flags &= ~KBD_MOD_CONTROL_R_FLAG; break; + case 0x38: // press ALTGR + kbd_flags |= KBD_MOD_ALTGR_FLAG; + break; + case 0xb8: // release ALTGR + kbd_flags &= ~KBD_MOD_ALTGR_FLAG; + break; case 0x47: // press Home esc = "OH"; break; @@ -101,6 +138,9 @@ my_kbd_push_key(SpiceKbdInstance *sin, uint8_t frag) case 0x52: // press INSERT esc = "[2~"; break; + case 0x53: // press Delete + esc = "[3~"; + break; case 0x49: // press PAGE_UP if (kbd_flags & (KBD_MOD_SHIFT_L_FLAG|KBD_MOD_SHIFT_R_FLAG)) { spiceterm_virtual_scroll(vt, -vt->height/2); @@ -136,28 +176,50 @@ my_kbd_push_key(SpiceKbdInstance *sin, uint8_t frag) kbd_flags &= ~KBD_MOD_SHIFT_R_FLAG; break; case 0x52: // press KP_INSERT - esc = "[2~"; + if (!(kbd_flags & KBD_MOD_NUMLOCK)) + esc = "[2~"; break; case 0x53: // press KP_Delete - esc = "[3~"; + if (!(kbd_flags & KBD_MOD_NUMLOCK)) + esc = "[3~"; + break; + case 0x45: // press Numlock + if (kbd_flags & KBD_MOD_NUMLOCK) { + kbd_flags &= ~KBD_MOD_NUMLOCK; + } else { + kbd_flags |= KBD_MOD_NUMLOCK; + } break; - case 0x47: // press KP_Home - esc = "OH"; + case 0x3a: // press Shiftlock + if (kbd_flags & KBD_MOD_SHIFTLOCK) { + kbd_flags &= ~KBD_MOD_SHIFTLOCK; + } else { + kbd_flags |= KBD_MOD_SHIFTLOCK; + } + break; + case 0x47: // press KP_Home + if (!(kbd_flags & KBD_MOD_NUMLOCK)) + esc = "OH"; break; case 0x4f: // press KP_END - esc = "OF"; + if (!(kbd_flags & KBD_MOD_NUMLOCK)) + esc = "OF"; break; case 0x48: // press KP_UP - esc = "OA"; + if (!(kbd_flags & KBD_MOD_NUMLOCK)) + esc = "OA"; break; case 0x50: // press KP_DOWN - esc = "OB"; + if (!(kbd_flags & KBD_MOD_NUMLOCK)) + esc = "OB"; break; case 0x4b: // press KP_LEFT - esc = "OD"; + if (!(kbd_flags & KBD_MOD_NUMLOCK)) + esc = "OD"; break; case 0x4d: // press KP_RIGHT - esc = "OC"; + if (!(kbd_flags & KBD_MOD_NUMLOCK)) + esc = "OC"; break; case 0x3b: // press F1 esc = "OP"; @@ -208,45 +270,59 @@ my_kbd_push_key(SpiceKbdInstance *sin, uint8_t frag) } spiceterm_update_watch_mask(vt, TRUE); - } - - DPRINTF(1, "leave frag=%02x flags=%08x", frag, kbd_flags); - return; -} + } else if (frag < 128) { + + guint mask = 0; + if (kbd_flags & (KBD_MOD_SHIFT_L_FLAG|KBD_MOD_SHIFT_R_FLAG)) { + mask |= MOD_MASK_SHIFT; + } + if (kbd_flags & KBD_MOD_SHIFTLOCK) { + if (mask & MOD_MASK_SHIFT) { + mask &= ~MOD_MASK_SHIFT; + } else { + mask |= MOD_MASK_SHIFT; + } + } + if (kbd_flags & KBD_MOD_ALTGR_FLAG) { + mask |= MOD_MASK_ALTGR; + } + if (kbd_flags & KBD_MOD_NUMLOCK) { + mask |= MOD_MASK_NUMLOCK; + } -static void -my_kbd_push_utf8(SpiceKbdInstance *sin, uint32_t size, uint8_t *data) -{ - spiceTerm *vt = SPICE_CONTAINEROF(sin, spiceTerm, keyboard_sin); - DPRINTF(1, " size=%d data[0]=%02x", size, data[0]); - - if (kbd_flags & (KBD_MOD_CONTROL_L_FLAG|KBD_MOD_CONTROL_R_FLAG)) { - if (size != 1) return; - if (data[0] >= 'a' && data[0] <= 'z') { - uint8_t buf[1] = { data[0] - 'a' + 1 }; - spiceterm_respond_data(vt, 1, buf); - - } else if (data[0] >= 'A' && data[0] <= 'Z') { - uint8_t buf[1] = { data[0] - 'A' + 1 }; - spiceterm_respond_data(vt, 1, buf); - } - } else { - if (size == 1 && data[0] == 0x7f) { - /* use an escape sequence for DELETE, else it behaves like BACKSPACE */ - spiceterm_respond_esc(vt, "[3~"); - } else { - spiceterm_respond_data(vt, size, data); + gint hkey = mask << 8 | (frag & 127); + keymap_entry *e = (keymap_entry *)g_hash_table_lookup(keymap, &hkey); + if (!e && (kbd_flags & KBD_MOD_NUMLOCK)) { + mask &= ~ MOD_MASK_NUMLOCK; + hkey = mask << 8 | (frag & 127); + e = (keymap_entry *)g_hash_table_lookup(keymap, &hkey); } - } - - if (vt->y_displ != vt->y_base) { - vt->y_displ = vt->y_base; - spiceterm_refresh(vt); - } - spiceterm_update_watch_mask(vt, TRUE); + if (e && e->unicode) { + guint32 uc = e->unicode; + gchar buf[32]; + guint8 len; + if (uc && ((len = g_unichar_to_utf8(uc, buf)) > 0)) { + if (kbd_flags & (KBD_MOD_CONTROL_L_FLAG|KBD_MOD_CONTROL_R_FLAG)) { + if (buf[0] >= 'a' && buf[0] <= 'z') { + uint8_t ctrl[1] = { buf[0] - 'a' + 1 }; + spiceterm_respond_data(vt, 1, ctrl); + spiceterm_update_watch_mask(vt, TRUE); + } else if (buf[0] >= 'A' && buf[0] <= 'Z') { + uint8_t ctrl[1] = { buf[0] - 'A' + 1 }; + spiceterm_respond_data(vt, 1, ctrl); + spiceterm_update_watch_mask(vt, TRUE); + } + } else { + spiceterm_respond_data(vt, len, (uint8_t *)buf); + spiceterm_update_watch_mask(vt, TRUE); + } + } + } + } + DPRINTF(1, "leave frag=%02x flags=%08x", frag, kbd_flags); return; } @@ -257,7 +333,6 @@ static SpiceKbdInterface my_keyboard_sif = { .base.minor_version = SPICE_INTERFACE_KEYBOARD_MINOR, .push_scan_freg = my_kbd_push_key, .get_leds = my_kbd_get_leds, - .push_utf8 = my_kbd_push_utf8, }; @@ -619,14 +694,118 @@ static SpiceCharDeviceInterface my_vdagent_sif = { .read = vmc_read, }; +static void +add_keymap_entry(guint8 mask, guint8 keycode, guint keysym, guint unicode) +{ + keymap_entry *e = g_new0(keymap_entry, 1); + e->mask = mask; + e->keysym = keysym; + e->unicode = unicode; + e->keycode = keycode; + e->hkey = mask << 8 | (keycode & 255); + + // only insert first mapping (other are most likely dead keys) + if (!g_hash_table_lookup(keymap, &e->hkey)) { + g_hash_table_insert(keymap, &e->hkey, e); + } +} + +static void +parse_keymap(const char *language) +{ + char line[1024]; + int len; + + printf("parse keymap %s\n", language); + + char *filename = g_strdup_printf("/usr/share/kvm/keymaps/%s", language); + FILE *f = fopen(filename, "r"); + g_free(filename); + if (!f) { + fprintf(stderr, "Could not read keymap file: '%s'\n", language); + return; + } + + for(;;) { + if (fgets(line, 1024, f) == NULL) + break; + len = strlen(line); + if (len > 0 && line[len - 1] == '\n') + line[len - 1] = '\0'; + if (line[0] == '#' || line[0] == '\0') + continue; + if (!strncmp(line, "map ", 4)) + continue; + if (!strncmp(line, "include ", 8)) { + parse_keymap(line + 8); + } else { + printf("LINE: %s\n", line); + char *tok = strtok(line, " "); + if (!tok) { + fprintf(stderr, "Warning: unknown keysym\n"); + g_assert_not_reached(); + } + const name2keysym_t *map = lookup_keysym(tok); + if (!map) { + fprintf(stderr, "Warning: unknown keysym '%s'\n", tok); + g_assert_not_reached(); + } + + guint8 mask = 0; + guint keycode = 0; + gboolean addupper = FALSE; + + while ((tok = strtok(NULL, " "))) { + if (!strcmp(tok, "shift")) { + mask |= MOD_MASK_SHIFT; + } else if (!strcmp(tok, "numlock")) { + mask |= MOD_MASK_NUMLOCK; + } else if (!strcmp(tok, "altgr")) { + mask |= MOD_MASK_ALTGR; + } else if (!strcmp(tok, "addupper")) { + addupper = TRUE; + } else if (!strcmp(tok, "inhibit")) { + // fixme + } else if (!strcmp(tok, "localstate")) { + //skip + } else { + char *endptr; + errno = 0; + keycode = strtol(tok, &endptr, 0); + if (errno != 0 || *endptr != '\0' || keycode >= 255) { + printf("got unknown modifier '%s' %d\n", tok, keycode); + g_assert_not_reached(); + } + + } + } + + printf("got keycode %u ==> %02x:%d\n", map->keysym, mask, keycode); + + add_keymap_entry(mask, keycode, map->keysym, map->unicode); + if (addupper) { + gchar uc = g_ascii_toupper(line[0]); + if (uc != line[0]) { + char ucname[] = { uc, '\0' }; + if ((map = lookup_keysym(ucname))) { + add_keymap_entry(mask|MOD_MASK_SHIFT, keycode, + map->keysym, map->unicode); + } + } + } + } + } +} + spiceTerm * spiceterm_create(uint32_t width, uint32_t height, SpiceTermOptions *opts) { SpiceCoreInterface *core = basic_event_loop_init(); SpiceScreen *spice_screen = spice_screen_new(core, width, height, opts); - //spice_server_set_image_compression(server, SPICE_IMAGE_COMPRESS_OFF); - + keymap = g_hash_table_new(g_int_hash, g_int_equal); + parse_keymap(opts->keymap ? opts->keymap : "en-us"); + spice_screen->image_cache = g_hash_table_new(g_int_hash, g_int_equal); spiceTerm *vt = (spiceTerm *)calloc (sizeof(spiceTerm), 1); diff --git a/keysyms.h b/keysyms.h new file mode 100644 index 0000000..aaa143b --- /dev/null +++ b/keysyms.h @@ -0,0 +1,2104 @@ +typedef struct { + const char* name; + int keysym; + int unicode; +} name2keysym_t; + +static const name2keysym_t name2keysym[] = { + { "VoidSymbol", 0xffffff, 0x0000 }, + { "BackSpace", 0xff08, 0x0008 }, + { "Tab", 0xff09, 0x0009 }, + { "Linefeed", 0xff0a, 0x000a }, + { "Clear", 0xff0b, 0x000b }, + { "Return", 0xff0d, 0x000d }, + { "Pause", 0xff13, 0x0013 }, + { "Scroll_Lock", 0xff14, 0x0014 }, + { "Sys_Req", 0xff15, 0x0015 }, + { "Escape", 0xff1b, 0x001b }, + { "Delete", 0xffff, 0x0000 }, + { "Multi_key", 0xff20, 0x0000 }, + { "Codeinput", 0xff37, 0x0000 }, + { "SingleCandidate", 0xff3c, 0x0000 }, + { "MultipleCandidate", 0xff3d, 0x0000 }, + { "PreviousCandidate", 0xff3e, 0x0000 }, + { "Kanji", 0xff21, 0x0000 }, + { "Muhenkan", 0xff22, 0x0000 }, + { "Henkan_Mode", 0xff23, 0x0000 }, + { "Henkan", 0xff23, 0x0000 }, + { "Romaji", 0xff24, 0x0000 }, + { "Hiragana", 0xff25, 0x0000 }, + { "Katakana", 0xff26, 0x0000 }, + { "Hiragana_Katakana", 0xff27, 0x0000 }, + { "Zenkaku", 0xff28, 0x0000 }, + { "Hankaku", 0xff29, 0x0000 }, + { "Zenkaku_Hankaku", 0xff2a, 0x0000 }, + { "Touroku", 0xff2b, 0x0000 }, + { "Massyo", 0xff2c, 0x0000 }, + { "Kana_Lock", 0xff2d, 0x0000 }, + { "Kana_Shift", 0xff2e, 0x0000 }, + { "Eisu_Shift", 0xff2f, 0x0000 }, + { "Eisu_toggle", 0xff30, 0x0000 }, + { "Kanji_Bangou", 0xff37, 0x0000 }, + { "Zen_Koho", 0xff3d, 0x0000 }, + { "Mae_Koho", 0xff3e, 0x0000 }, + { "Home", 0xff50, 0x0000 }, + { "Left", 0xff51, 0x0000 }, + { "Up", 0xff52, 0x0000 }, + { "Right", 0xff53, 0x0000 }, + { "Down", 0xff54, 0x0000 }, + { "Prior", 0xff55, 0x0000 }, + { "Page_Up", 0xff55, 0x0000 }, + { "Next", 0xff56, 0x0000 }, + { "Page_Down", 0xff56, 0x0000 }, + { "End", 0xff57, 0x0000 }, + { "Begin", 0xff58, 0x0000 }, + { "Select", 0xff60, 0x0000 }, + { "Print", 0xff61, 0x0000 }, + { "Execute", 0xff62, 0x0000 }, + { "Insert", 0xff63, 0x0000 }, + { "Undo", 0xff65, 0x0000 }, + { "Redo", 0xff66, 0x0000 }, + { "Menu", 0xff67, 0x0000 }, + { "Find", 0xff68, 0x0000 }, + { "Cancel", 0xff69, 0x0000 }, + { "Help", 0xff6a, 0x0000 }, + { "Break", 0xff6b, 0x0000 }, + { "Mode_switch", 0xff7e, 0x0000 }, + { "script_switch", 0xff7e, 0x0000 }, + { "Num_Lock", 0xff7f, 0x0000 }, + { "KP_Space", 0xff80, 0x0000 }, + { "KP_Tab", 0xff89, 0x0000 }, + { "KP_Enter", 0xff8d, 0x0000 }, + { "KP_F1", 0xff91, 0x0000 }, + { "KP_F2", 0xff92, 0x0000 }, + { "KP_F3", 0xff93, 0x0000 }, + { "KP_F4", 0xff94, 0x0000 }, + { "KP_Home", 0xff95, 0x0000 }, + { "KP_Left", 0xff96, 0x0000 }, + { "KP_Up", 0xff97, 0x0000 }, + { "KP_Right", 0xff98, 0x0000 }, + { "KP_Down", 0xff99, 0x0000 }, + { "KP_Prior", 0xff9a, 0x0000 }, + { "KP_Page_Up", 0xff9a, 0x0000 }, + { "KP_Next", 0xff9b, 0x0000 }, + { "KP_Page_Down", 0xff9b, 0x0000 }, + { "KP_End", 0xff9c, 0x0000 }, + { "KP_Begin", 0xff9d, 0x0000 }, + { "KP_Insert", 0xff9e, 0x0000 }, + { "KP_Delete", 0xff9f, 0x0000 }, + { "KP_Equal", 0xffbd, 0x0000 }, + { "KP_Multiply", 0xffaa, 0x002a }, + { "KP_Add", 0xffab, 0x002b }, + { "KP_Separator", 0xffac, 0x002c }, + { "KP_Subtract", 0xffad, 0x002d }, + { "KP_Decimal", 0xffae, 0x002e }, + { "KP_Divide", 0xffaf, 0x002f }, + { "KP_0", 0xffb0, 0x0030 }, + { "KP_1", 0xffb1, 0x0031 }, + { "KP_2", 0xffb2, 0x0032 }, + { "KP_3", 0xffb3, 0x0033 }, + { "KP_4", 0xffb4, 0x0034 }, + { "KP_5", 0xffb5, 0x0035 }, + { "KP_6", 0xffb6, 0x0036 }, + { "KP_7", 0xffb7, 0x0037 }, + { "KP_8", 0xffb8, 0x0038 }, + { "KP_9", 0xffb9, 0x0039 }, + { "F1", 0xffbe, 0x0000 }, + { "F2", 0xffbf, 0x0000 }, + { "F3", 0xffc0, 0x0000 }, + { "F4", 0xffc1, 0x0000 }, + { "F5", 0xffc2, 0x0000 }, + { "F6", 0xffc3, 0x0000 }, + { "F7", 0xffc4, 0x0000 }, + { "F8", 0xffc5, 0x0000 }, + { "F9", 0xffc6, 0x0000 }, + { "F10", 0xffc7, 0x0000 }, + { "F11", 0xffc8, 0x0000 }, + { "L1", 0xffc8, 0x0000 }, + { "F12", 0xffc9, 0x0000 }, + { "L2", 0xffc9, 0x0000 }, + { "F13", 0xffca, 0x0000 }, + { "L3", 0xffca, 0x0000 }, + { "F14", 0xffcb, 0x0000 }, + { "L4", 0xffcb, 0x0000 }, + { "F15", 0xffcc, 0x0000 }, + { "L5", 0xffcc, 0x0000 }, + { "F16", 0xffcd, 0x0000 }, + { "L6", 0xffcd, 0x0000 }, + { "F17", 0xffce, 0x0000 }, + { "L7", 0xffce, 0x0000 }, + { "F18", 0xffcf, 0x0000 }, + { "L8", 0xffcf, 0x0000 }, + { "F19", 0xffd0, 0x0000 }, + { "L9", 0xffd0, 0x0000 }, + { "F20", 0xffd1, 0x0000 }, + { "L10", 0xffd1, 0x0000 }, + { "F21", 0xffd2, 0x0000 }, + { "R1", 0xffd2, 0x0000 }, + { "F22", 0xffd3, 0x0000 }, + { "R2", 0xffd3, 0x0000 }, + { "F23", 0xffd4, 0x0000 }, + { "R3", 0xffd4, 0x0000 }, + { "F24", 0xffd5, 0x0000 }, + { "R4", 0xffd5, 0x0000 }, + { "F25", 0xffd6, 0x0000 }, + { "R5", 0xffd6, 0x0000 }, + { "F26", 0xffd7, 0x0000 }, + { "R6", 0xffd7, 0x0000 }, + { "F27", 0xffd8, 0x0000 }, + { "R7", 0xffd8, 0x0000 }, + { "F28", 0xffd9, 0x0000 }, + { "R8", 0xffd9, 0x0000 }, + { "F29", 0xffda, 0x0000 }, + { "R9", 0xffda, 0x0000 }, + { "F30", 0xffdb, 0x0000 }, + { "R10", 0xffdb, 0x0000 }, + { "F31", 0xffdc, 0x0000 }, + { "R11", 0xffdc, 0x0000 }, + { "F32", 0xffdd, 0x0000 }, + { "R12", 0xffdd, 0x0000 }, + { "F33", 0xffde, 0x0000 }, + { "R13", 0xffde, 0x0000 }, + { "F34", 0xffdf, 0x0000 }, + { "R14", 0xffdf, 0x0000 }, + { "F35", 0xffe0, 0x0000 }, + { "R15", 0xffe0, 0x0000 }, + { "Shift_L", 0xffe1, 0x0000 }, + { "Shift_R", 0xffe2, 0x0000 }, + { "Control_L", 0xffe3, 0x0000 }, + { "Control_R", 0xffe4, 0x0000 }, + { "Caps_Lock", 0xffe5, 0x0000 }, + { "Shift_Lock", 0xffe6, 0x0000 }, + { "Meta_L", 0xffe7, 0x0000 }, + { "Meta_R", 0xffe8, 0x0000 }, + { "Alt_L", 0xffe9, 0x0000 }, + { "Alt_R", 0xffea, 0x0000 }, + { "Super_L", 0xffeb, 0x0000 }, + { "Super_R", 0xffec, 0x0000 }, + { "Hyper_L", 0xffed, 0x0000 }, + { "Hyper_R", 0xffee, 0x0000 }, + { "ISO_Lock", 0xfe01, 0x0000 }, + { "ISO_Level2_Latch", 0xfe02, 0x0000 }, + { "ISO_Level3_Shift", 0xfe03, 0x0000 }, + { "ISO_Level3_Latch", 0xfe04, 0x0000 }, + { "ISO_Level3_Lock", 0xfe05, 0x0000 }, + { "ISO_Level5_Shift", 0xfe11, 0x0000 }, + { "ISO_Level5_Latch", 0xfe12, 0x0000 }, + { "ISO_Level5_Lock", 0xfe13, 0x0000 }, + { "ISO_Group_Shift", 0xff7e, 0x0000 }, + { "ISO_Group_Latch", 0xfe06, 0x0000 }, + { "ISO_Group_Lock", 0xfe07, 0x0000 }, + { "ISO_Next_Group", 0xfe08, 0x0000 }, + { "ISO_Next_Group_Lock", 0xfe09, 0x0000 }, + { "ISO_Prev_Group", 0xfe0a, 0x0000 }, + { "ISO_Prev_Group_Lock", 0xfe0b, 0x0000 }, + { "ISO_First_Group", 0xfe0c, 0x0000 }, + { "ISO_First_Group_Lock", 0xfe0d, 0x0000 }, + { "ISO_Last_Group", 0xfe0e, 0x0000 }, + { "ISO_Last_Group_Lock", 0xfe0f, 0x0000 }, + { "ISO_Left_Tab", 0xfe20, 0x0000 }, + { "ISO_Move_Line_Up", 0xfe21, 0x0000 }, + { "ISO_Move_Line_Down", 0xfe22, 0x0000 }, + { "ISO_Partial_Line_Up", 0xfe23, 0x0000 }, + { "ISO_Partial_Line_Down", 0xfe24, 0x0000 }, + { "ISO_Partial_Space_Left", 0xfe25, 0x0000 }, + { "ISO_Partial_Space_Right", 0xfe26, 0x0000 }, + { "ISO_Set_Margin_Left", 0xfe27, 0x0000 }, + { "ISO_Set_Margin_Right", 0xfe28, 0x0000 }, + { "ISO_Release_Margin_Left", 0xfe29, 0x0000 }, + { "ISO_Release_Margin_Right", 0xfe2a, 0x0000 }, + { "ISO_Release_Both_Margins", 0xfe2b, 0x0000 }, + { "ISO_Fast_Cursor_Left", 0xfe2c, 0x0000 }, + { "ISO_Fast_Cursor_Right", 0xfe2d, 0x0000 }, + { "ISO_Fast_Cursor_Up", 0xfe2e, 0x0000 }, + { "ISO_Fast_Cursor_Down", 0xfe2f, 0x0000 }, + { "ISO_Continuous_Underline", 0xfe30, 0x0000 }, + { "ISO_Discontinuous_Underline", 0xfe31, 0x0000 }, + { "ISO_Emphasize", 0xfe32, 0x0000 }, + { "ISO_Center_Object", 0xfe33, 0x0000 }, + { "ISO_Enter", 0xfe34, 0x0000 }, + { "dead_grave", 0xfe50, 0x0000 }, + { "dead_acute", 0xfe51, 0x0000 }, + { "dead_circumflex", 0xfe52, 0x0000 }, + { "dead_tilde", 0xfe53, 0x0000 }, + { "dead_perispomeni", 0xfe53, 0x0000 }, + { "dead_macron", 0xfe54, 0x0000 }, + { "dead_breve", 0xfe55, 0x0000 }, + { "dead_abovedot", 0xfe56, 0x0000 }, + { "dead_diaeresis", 0xfe57, 0x0000 }, + { "dead_abovering", 0xfe58, 0x0000 }, + { "dead_doubleacute", 0xfe59, 0x0000 }, + { "dead_caron", 0xfe5a, 0x0000 }, + { "dead_cedilla", 0xfe5b, 0x0000 }, + { "dead_ogonek", 0xfe5c, 0x0000 }, + { "dead_iota", 0xfe5d, 0x0000 }, + { "dead_voiced_sound", 0xfe5e, 0x0000 }, + { "dead_semivoiced_sound", 0xfe5f, 0x0000 }, + { "dead_belowdot", 0xfe60, 0x0000 }, + { "dead_hook", 0xfe61, 0x0000 }, + { "dead_horn", 0xfe62, 0x0000 }, + { "dead_stroke", 0xfe63, 0x0000 }, + { "dead_abovecomma", 0xfe64, 0x0000 }, + { "dead_psili", 0xfe64, 0x0000 }, + { "dead_abovereversedcomma", 0xfe65, 0x0000 }, + { "dead_dasia", 0xfe65, 0x0000 }, + { "dead_doublegrave", 0xfe66, 0x0000 }, + { "dead_belowring", 0xfe67, 0x0000 }, + { "dead_belowmacron", 0xfe68, 0x0000 }, + { "dead_belowcircumflex", 0xfe69, 0x0000 }, + { "dead_belowtilde", 0xfe6a, 0x0000 }, + { "dead_belowbreve", 0xfe6b, 0x0000 }, + { "dead_belowdiaeresis", 0xfe6c, 0x0000 }, + { "dead_invertedbreve", 0xfe6d, 0x0000 }, + { "dead_belowcomma", 0xfe6e, 0x0000 }, + { "dead_currency", 0xfe6f, 0x0000 }, + { "dead_a", 0xfe80, 0x0000 }, + { "dead_A", 0xfe81, 0x0000 }, + { "dead_e", 0xfe82, 0x0000 }, + { "dead_E", 0xfe83, 0x0000 }, + { "dead_i", 0xfe84, 0x0000 }, + { "dead_I", 0xfe85, 0x0000 }, + { "dead_o", 0xfe86, 0x0000 }, + { "dead_O", 0xfe87, 0x0000 }, + { "dead_u", 0xfe88, 0x0000 }, + { "dead_U", 0xfe89, 0x0000 }, + { "dead_small_schwa", 0xfe8a, 0x0000 }, + { "dead_capital_schwa", 0xfe8b, 0x0000 }, + { "dead_greek", 0xfe8c, 0x0000 }, + { "First_Virtual_Screen", 0xfed0, 0x0000 }, + { "Prev_Virtual_Screen", 0xfed1, 0x0000 }, + { "Next_Virtual_Screen", 0xfed2, 0x0000 }, + { "Last_Virtual_Screen", 0xfed4, 0x0000 }, + { "Terminate_Server", 0xfed5, 0x0000 }, + { "AccessX_Enable", 0xfe70, 0x0000 }, + { "AccessX_Feedback_Enable", 0xfe71, 0x0000 }, + { "RepeatKeys_Enable", 0xfe72, 0x0000 }, + { "SlowKeys_Enable", 0xfe73, 0x0000 }, + { "BounceKeys_Enable", 0xfe74, 0x0000 }, + { "StickyKeys_Enable", 0xfe75, 0x0000 }, + { "MouseKeys_Enable", 0xfe76, 0x0000 }, + { "MouseKeys_Accel_Enable", 0xfe77, 0x0000 }, + { "Overlay1_Enable", 0xfe78, 0x0000 }, + { "Overlay2_Enable", 0xfe79, 0x0000 }, + { "AudibleBell_Enable", 0xfe7a, 0x0000 }, + { "Pointer_Left", 0xfee0, 0x0000 }, + { "Pointer_Right", 0xfee1, 0x0000 }, + { "Pointer_Up", 0xfee2, 0x0000 }, + { "Pointer_Down", 0xfee3, 0x0000 }, + { "Pointer_UpLeft", 0xfee4, 0x0000 }, + { "Pointer_UpRight", 0xfee5, 0x0000 }, + { "Pointer_DownLeft", 0xfee6, 0x0000 }, + { "Pointer_DownRight", 0xfee7, 0x0000 }, + { "Pointer_Button_Dflt", 0xfee8, 0x0000 }, + { "Pointer_Button1", 0xfee9, 0x0000 }, + { "Pointer_Button2", 0xfeea, 0x0000 }, + { "Pointer_Button3", 0xfeeb, 0x0000 }, + { "Pointer_Button4", 0xfeec, 0x0000 }, + { "Pointer_Button5", 0xfeed, 0x0000 }, + { "Pointer_DblClick_Dflt", 0xfeee, 0x0000 }, + { "Pointer_DblClick1", 0xfeef, 0x0000 }, + { "Pointer_DblClick2", 0xfef0, 0x0000 }, + { "Pointer_DblClick3", 0xfef1, 0x0000 }, + { "Pointer_DblClick4", 0xfef2, 0x0000 }, + { "Pointer_DblClick5", 0xfef3, 0x0000 }, + { "Pointer_Drag_Dflt", 0xfef4, 0x0000 }, + { "Pointer_Drag1", 0xfef5, 0x0000 }, + { "Pointer_Drag2", 0xfef6, 0x0000 }, + { "Pointer_Drag3", 0xfef7, 0x0000 }, + { "Pointer_Drag4", 0xfef8, 0x0000 }, + { "Pointer_Drag5", 0xfefd, 0x0000 }, + { "Pointer_EnableKeys", 0xfef9, 0x0000 }, + { "Pointer_Accelerate", 0xfefa, 0x0000 }, + { "Pointer_DfltBtnNext", 0xfefb, 0x0000 }, + { "Pointer_DfltBtnPrev", 0xfefc, 0x0000 }, + { "ch", 0xfea0, 0x0000 }, + { "Ch", 0xfea1, 0x0000 }, + { "CH", 0xfea2, 0x0000 }, + { "c_h", 0xfea3, 0x0000 }, + { "C_h", 0xfea4, 0x0000 }, + { "C_H", 0xfea5, 0x0000 }, + { "3270_Duplicate", 0xfd01, 0x0000 }, + { "3270_FieldMark", 0xfd02, 0x0000 }, + { "3270_Right2", 0xfd03, 0x0000 }, + { "3270_Left2", 0xfd04, 0x0000 }, + { "3270_BackTab", 0xfd05, 0x0000 }, + { "3270_EraseEOF", 0xfd06, 0x0000 }, + { "3270_EraseInput", 0xfd07, 0x0000 }, + { "3270_Reset", 0xfd08, 0x0000 }, + { "3270_Quit", 0xfd09, 0x0000 }, + { "3270_PA1", 0xfd0a, 0x0000 }, + { "3270_PA2", 0xfd0b, 0x0000 }, + { "3270_PA3", 0xfd0c, 0x0000 }, + { "3270_Test", 0xfd0d, 0x0000 }, + { "3270_Attn", 0xfd0e, 0x0000 }, + { "3270_CursorBlink", 0xfd0f, 0x0000 }, + { "3270_AltCursor", 0xfd10, 0x0000 }, + { "3270_KeyClick", 0xfd11, 0x0000 }, + { "3270_Jump", 0xfd12, 0x0000 }, + { "3270_Ident", 0xfd13, 0x0000 }, + { "3270_Rule", 0xfd14, 0x0000 }, + { "3270_Copy", 0xfd15, 0x0000 }, + { "3270_Play", 0xfd16, 0x0000 }, + { "3270_Setup", 0xfd17, 0x0000 }, + { "3270_Record", 0xfd18, 0x0000 }, + { "3270_ChangeScreen", 0xfd19, 0x0000 }, + { "3270_DeleteWord", 0xfd1a, 0x0000 }, + { "3270_ExSelect", 0xfd1b, 0x0000 }, + { "3270_CursorSelect", 0xfd1c, 0x0000 }, + { "3270_PrintScreen", 0xfd1d, 0x0000 }, + { "3270_Enter", 0xfd1e, 0x0000 }, + { "space", 0x020, 0x0020 }, + { "exclam", 0x021, 0x0021 }, + { "quotedbl", 0x022, 0x0022 }, + { "numbersign", 0x023, 0x0023 }, + { "dollar", 0x024, 0x0024 }, + { "percent", 0x025, 0x0025 }, + { "ampersand", 0x026, 0x0026 }, + { "apostrophe", 0x027, 0x0027 }, + { "quoteright", 0x027, 0x0027 }, + { "parenleft", 0x028, 0x0028 }, + { "parenright", 0x029, 0x0029 }, + { "asterisk", 0x02a, 0x002a }, + { "plus", 0x02b, 0x002b }, + { "comma", 0x02c, 0x002c }, + { "minus", 0x02d, 0x002d }, + { "period", 0x02e, 0x002e }, + { "slash", 0x02f, 0x002f }, + { "0", 0x030, 0x0030 }, + { "1", 0x031, 0x0031 }, + { "2", 0x032, 0x0032 }, + { "3", 0x033, 0x0033 }, + { "4", 0x034, 0x0034 }, + { "5", 0x035, 0x0035 }, + { "6", 0x036, 0x0036 }, + { "7", 0x037, 0x0037 }, + { "8", 0x038, 0x0038 }, + { "9", 0x039, 0x0039 }, + { "colon", 0x03a, 0x003a }, + { "semicolon", 0x03b, 0x003b }, + { "less", 0x03c, 0x003c }, + { "equal", 0x03d, 0x003d }, + { "greater", 0x03e, 0x003e }, + { "question", 0x03f, 0x003f }, + { "at", 0x040, 0x0040 }, + { "A", 0x041, 0x0041 }, + { "B", 0x042, 0x0042 }, + { "C", 0x043, 0x0043 }, + { "D", 0x044, 0x0044 }, + { "E", 0x045, 0x0045 }, + { "F", 0x046, 0x0046 }, + { "G", 0x047, 0x0047 }, + { "H", 0x048, 0x0048 }, + { "I", 0x049, 0x0049 }, + { "J", 0x04a, 0x004a }, + { "K", 0x04b, 0x004b }, + { "L", 0x04c, 0x004c }, + { "M", 0x04d, 0x004d }, + { "N", 0x04e, 0x004e }, + { "O", 0x04f, 0x004f }, + { "P", 0x050, 0x0050 }, + { "Q", 0x051, 0x0051 }, + { "R", 0x052, 0x0052 }, + { "S", 0x053, 0x0053 }, + { "T", 0x054, 0x0054 }, + { "U", 0x055, 0x0055 }, + { "V", 0x056, 0x0056 }, + { "W", 0x057, 0x0057 }, + { "X", 0x058, 0x0058 }, + { "Y", 0x059, 0x0059 }, + { "Z", 0x05a, 0x005a }, + { "bracketleft", 0x05b, 0x005b }, + { "backslash", 0x05c, 0x005c }, + { "bracketright", 0x05d, 0x005d }, + { "asciicircum", 0x05e, 0x005e }, + { "underscore", 0x05f, 0x005f }, + { "grave", 0x060, 0x0060 }, + { "quoteleft", 0x060, 0x0060 }, + { "a", 0x061, 0x0061 }, + { "b", 0x062, 0x0062 }, + { "c", 0x063, 0x0063 }, + { "d", 0x064, 0x0064 }, + { "e", 0x065, 0x0065 }, + { "f", 0x066, 0x0066 }, + { "g", 0x067, 0x0067 }, + { "h", 0x068, 0x0068 }, + { "i", 0x069, 0x0069 }, + { "j", 0x06a, 0x006a }, + { "k", 0x06b, 0x006b }, + { "l", 0x06c, 0x006c }, + { "m", 0x06d, 0x006d }, + { "n", 0x06e, 0x006e }, + { "o", 0x06f, 0x006f }, + { "p", 0x070, 0x0070 }, + { "q", 0x071, 0x0071 }, + { "r", 0x072, 0x0072 }, + { "s", 0x073, 0x0073 }, + { "t", 0x074, 0x0074 }, + { "u", 0x075, 0x0075 }, + { "v", 0x076, 0x0076 }, + { "w", 0x077, 0x0077 }, + { "x", 0x078, 0x0078 }, + { "y", 0x079, 0x0079 }, + { "z", 0x07a, 0x007a }, + { "braceleft", 0x07b, 0x007b }, + { "bar", 0x07c, 0x007c }, + { "braceright", 0x07d, 0x007d }, + { "asciitilde", 0x07e, 0x007e }, + { "nobreakspace", 0x0a0, 0x00a0 }, + { "exclamdown", 0x0a1, 0x00a1 }, + { "cent", 0x0a2, 0x00a2 }, + { "sterling", 0x0a3, 0x00a3 }, + { "currency", 0x0a4, 0x00a4 }, + { "yen", 0x0a5, 0x00a5 }, + { "brokenbar", 0x0a6, 0x00a6 }, + { "section", 0x0a7, 0x00a7 }, + { "diaeresis", 0x0a8, 0x00a8 }, + { "copyright", 0x0a9, 0x00a9 }, + { "ordfeminine", 0x0aa, 0x00aa }, + { "guillemotleft", 0x0ab, 0x00ab }, + { "notsign", 0x0ac, 0x00ac }, + { "hyphen", 0x0ad, 0x00ad }, + { "registered", 0x0ae, 0x00ae }, + { "macron", 0x0af, 0x00af }, + { "degree", 0x0b0, 0x00b0 }, + { "plusminus", 0x0b1, 0x00b1 }, + { "twosuperior", 0x0b2, 0x00b2 }, + { "threesuperior", 0x0b3, 0x00b3 }, + { "acute", 0x0b4, 0x00b4 }, + { "mu", 0x0b5, 0x00b5 }, + { "paragraph", 0x0b6, 0x00b6 }, + { "periodcentered", 0x0b7, 0x00b7 }, + { "cedilla", 0x0b8, 0x00b8 }, + { "onesuperior", 0x0b9, 0x00b9 }, + { "masculine", 0x0ba, 0x00ba }, + { "guillemotright", 0x0bb, 0x00bb }, + { "onequarter", 0x0bc, 0x00bc }, + { "onehalf", 0x0bd, 0x00bd }, + { "threequarters", 0x0be, 0x00be }, + { "questiondown", 0x0bf, 0x00bf }, + { "Agrave", 0x0c0, 0x00c0 }, + { "Aacute", 0x0c1, 0x00c1 }, + { "Acircumflex", 0x0c2, 0x00c2 }, + { "Atilde", 0x0c3, 0x00c3 }, + { "Adiaeresis", 0x0c4, 0x00c4 }, + { "Aring", 0x0c5, 0x00c5 }, + { "AE", 0x0c6, 0x00c6 }, + { "Ccedilla", 0x0c7, 0x00c7 }, + { "Egrave", 0x0c8, 0x00c8 }, + { "Eacute", 0x0c9, 0x00c9 }, + { "Ecircumflex", 0x0ca, 0x00ca }, + { "Ediaeresis", 0x0cb, 0x00cb }, + { "Igrave", 0x0cc, 0x00cc }, + { "Iacute", 0x0cd, 0x00cd }, + { "Icircumflex", 0x0ce, 0x00ce }, + { "Idiaeresis", 0x0cf, 0x00cf }, + { "ETH", 0x0d0, 0x00d0 }, + { "Eth", 0x0d0, 0x00d0 }, + { "Ntilde", 0x0d1, 0x00d1 }, + { "Ograve", 0x0d2, 0x00d2 }, + { "Oacute", 0x0d3, 0x00d3 }, + { "Ocircumflex", 0x0d4, 0x00d4 }, + { "Otilde", 0x0d5, 0x00d5 }, + { "Odiaeresis", 0x0d6, 0x00d6 }, + { "multiply", 0x0d7, 0x00d7 }, + { "Oslash", 0x0d8, 0x00d8 }, + { "Ooblique", 0x0d8, 0x00d8 }, + { "Ugrave", 0x0d9, 0x00d9 }, + { "Uacute", 0x0da, 0x00da }, + { "Ucircumflex", 0x0db, 0x00db }, + { "Udiaeresis", 0x0dc, 0x00dc }, + { "Yacute", 0x0dd, 0x00dd }, + { "THORN", 0x0de, 0x00de }, + { "Thorn", 0x0de, 0x00de }, + { "ssharp", 0x0df, 0x00df }, + { "agrave", 0x0e0, 0x00e0 }, + { "aacute", 0x0e1, 0x00e1 }, + { "acircumflex", 0x0e2, 0x00e2 }, + { "atilde", 0x0e3, 0x00e3 }, + { "adiaeresis", 0x0e4, 0x00e4 }, + { "aring", 0x0e5, 0x00e5 }, + { "ae", 0x0e6, 0x00e6 }, + { "ccedilla", 0x0e7, 0x00e7 }, + { "egrave", 0x0e8, 0x00e8 }, + { "eacute", 0x0e9, 0x00e9 }, + { "ecircumflex", 0x0ea, 0x00ea }, + { "ediaeresis", 0x0eb, 0x00eb }, + { "igrave", 0x0ec, 0x00ec }, + { "iacute", 0x0ed, 0x00ed }, + { "icircumflex", 0x0ee, 0x00ee }, + { "idiaeresis", 0x0ef, 0x00ef }, + { "eth", 0x0f0, 0x00f0 }, + { "ntilde", 0x0f1, 0x00f1 }, + { "ograve", 0x0f2, 0x00f2 }, + { "oacute", 0x0f3, 0x00f3 }, + { "ocircumflex", 0x0f4, 0x00f4 }, + { "otilde", 0x0f5, 0x00f5 }, + { "odiaeresis", 0x0f6, 0x00f6 }, + { "division", 0x0f7, 0x00f7 }, + { "oslash", 0x0f8, 0x00f8 }, + { "ooblique", 0x0f8, 0x00f8 }, + { "ugrave", 0x0f9, 0x00f9 }, + { "uacute", 0x0fa, 0x00fa }, + { "ucircumflex", 0x0fb, 0x00fb }, + { "udiaeresis", 0x0fc, 0x00fc }, + { "yacute", 0x0fd, 0x00fd }, + { "thorn", 0x0fe, 0x00fe }, + { "ydiaeresis", 0x0ff, 0x00ff }, + { "Aogonek", 0x1a1, 0x0104 }, + { "breve", 0x1a2, 0x02d8 }, + { "Lstroke", 0x1a3, 0x0141 }, + { "Lcaron", 0x1a5, 0x013d }, + { "Sacute", 0x1a6, 0x015a }, + { "Scaron", 0x1a9, 0x0160 }, + { "Scedilla", 0x1aa, 0x015e }, + { "Tcaron", 0x1ab, 0x0164 }, + { "Zacute", 0x1ac, 0x0179 }, + { "Zcaron", 0x1ae, 0x017d }, + { "Zabovedot", 0x1af, 0x017b }, + { "aogonek", 0x1b1, 0x0105 }, + { "ogonek", 0x1b2, 0x02db }, + { "lstroke", 0x1b3, 0x0142 }, + { "lcaron", 0x1b5, 0x013e }, + { "sacute", 0x1b6, 0x015b }, + { "caron", 0x1b7, 0x02c7 }, + { "scaron", 0x1b9, 0x0161 }, + { "scedilla", 0x1ba, 0x015f }, + { "tcaron", 0x1bb, 0x0165 }, + { "zacute", 0x1bc, 0x017a }, + { "doubleacute", 0x1bd, 0x02dd }, + { "zcaron", 0x1be, 0x017e }, + { "zabovedot", 0x1bf, 0x017c }, + { "Racute", 0x1c0, 0x0154 }, + { "Abreve", 0x1c3, 0x0102 }, + { "Lacute", 0x1c5, 0x0139 }, + { "Cacute", 0x1c6, 0x0106 }, + { "Ccaron", 0x1c8, 0x010c }, + { "Eogonek", 0x1ca, 0x0118 }, + { "Ecaron", 0x1cc, 0x011a }, + { "Dcaron", 0x1cf, 0x010e }, + { "Dstroke", 0x1d0, 0x0110 }, + { "Nacute", 0x1d1, 0x0143 }, + { "Ncaron", 0x1d2, 0x0147 }, + { "Odoubleacute", 0x1d5, 0x0150 }, + { "Rcaron", 0x1d8, 0x0158 }, + { "Uring", 0x1d9, 0x016e }, + { "Udoubleacute", 0x1db, 0x0170 }, + { "Tcedilla", 0x1de, 0x0162 }, + { "racute", 0x1e0, 0x0155 }, + { "abreve", 0x1e3, 0x0103 }, + { "lacute", 0x1e5, 0x013a }, + { "cacute", 0x1e6, 0x0107 }, + { "ccaron", 0x1e8, 0x010d }, + { "eogonek", 0x1ea, 0x0119 }, + { "ecaron", 0x1ec, 0x011b }, + { "dcaron", 0x1ef, 0x010f }, + { "dstroke", 0x1f0, 0x0111 }, + { "nacute", 0x1f1, 0x0144 }, + { "ncaron", 0x1f2, 0x0148 }, + { "odoubleacute", 0x1f5, 0x0151 }, + { "rcaron", 0x1f8, 0x0159 }, + { "uring", 0x1f9, 0x016f }, + { "udoubleacute", 0x1fb, 0x0171 }, + { "tcedilla", 0x1fe, 0x0163 }, + { "abovedot", 0x1ff, 0x02d9 }, + { "Hstroke", 0x2a1, 0x0126 }, + { "Hcircumflex", 0x2a6, 0x0124 }, + { "Iabovedot", 0x2a9, 0x0130 }, + { "Gbreve", 0x2ab, 0x011e }, + { "Jcircumflex", 0x2ac, 0x0134 }, + { "hstroke", 0x2b1, 0x0127 }, + { "hcircumflex", 0x2b6, 0x0125 }, + { "idotless", 0x2b9, 0x0131 }, + { "gbreve", 0x2bb, 0x011f }, + { "jcircumflex", 0x2bc, 0x0135 }, + { "Cabovedot", 0x2c5, 0x010a }, + { "Ccircumflex", 0x2c6, 0x0108 }, + { "Gabovedot", 0x2d5, 0x0120 }, + { "Gcircumflex", 0x2d8, 0x011c }, + { "Ubreve", 0x2dd, 0x016c }, + { "Scircumflex", 0x2de, 0x015c }, + { "cabovedot", 0x2e5, 0x010b }, + { "ccircumflex", 0x2e6, 0x0109 }, + { "gabovedot", 0x2f5, 0x0121 }, + { "gcircumflex", 0x2f8, 0x011d }, + { "ubreve", 0x2fd, 0x016d }, + { "scircumflex", 0x2fe, 0x015d }, + { "kra", 0x3a2, 0x0138 }, + { "kappa", 0x3a2, 0x0000 }, + { "Rcedilla", 0x3a3, 0x0156 }, + { "Itilde", 0x3a5, 0x0128 }, + { "Lcedilla", 0x3a6, 0x013b }, + { "Emacron", 0x3aa, 0x0112 }, + { "Gcedilla", 0x3ab, 0x0122 }, + { "Tslash", 0x3ac, 0x0166 }, + { "rcedilla", 0x3b3, 0x0157 }, + { "itilde", 0x3b5, 0x0129 }, + { "lcedilla", 0x3b6, 0x013c }, + { "emacron", 0x3ba, 0x0113 }, + { "gcedilla", 0x3bb, 0x0123 }, + { "tslash", 0x3bc, 0x0167 }, + { "ENG", 0x3bd, 0x014a }, + { "eng", 0x3bf, 0x014b }, + { "Amacron", 0x3c0, 0x0100 }, + { "Iogonek", 0x3c7, 0x012e }, + { "Eabovedot", 0x3cc, 0x0116 }, + { "Imacron", 0x3cf, 0x012a }, + { "Ncedilla", 0x3d1, 0x0145 }, + { "Omacron", 0x3d2, 0x014c }, + { "Kcedilla", 0x3d3, 0x0136 }, + { "Uogonek", 0x3d9, 0x0172 }, + { "Utilde", 0x3dd, 0x0168 }, + { "Umacron", 0x3de, 0x016a }, + { "amacron", 0x3e0, 0x0101 }, + { "iogonek", 0x3e7, 0x012f }, + { "eabovedot", 0x3ec, 0x0117 }, + { "imacron", 0x3ef, 0x012b }, + { "ncedilla", 0x3f1, 0x0146 }, + { "omacron", 0x3f2, 0x014d }, + { "kcedilla", 0x3f3, 0x0137 }, + { "uogonek", 0x3f9, 0x0173 }, + { "utilde", 0x3fd, 0x0169 }, + { "umacron", 0x3fe, 0x016b }, + { "Wcircumflex", 0x1000174, 0x0174 }, + { "wcircumflex", 0x1000175, 0x0175 }, + { "Ycircumflex", 0x1000176, 0x0176 }, + { "ycircumflex", 0x1000177, 0x0177 }, + { "Babovedot", 0x1001e02, 0x1e02 }, + { "babovedot", 0x1001e03, 0x1e03 }, + { "Dabovedot", 0x1001e0a, 0x1e0a }, + { "dabovedot", 0x1001e0b, 0x1e0b }, + { "Fabovedot", 0x1001e1e, 0x1e1e }, + { "fabovedot", 0x1001e1f, 0x1e1f }, + { "Mabovedot", 0x1001e40, 0x1e40 }, + { "mabovedot", 0x1001e41, 0x1e41 }, + { "Pabovedot", 0x1001e56, 0x1e56 }, + { "pabovedot", 0x1001e57, 0x1e57 }, + { "Sabovedot", 0x1001e60, 0x1e60 }, + { "sabovedot", 0x1001e61, 0x1e61 }, + { "Tabovedot", 0x1001e6a, 0x1e6a }, + { "tabovedot", 0x1001e6b, 0x1e6b }, + { "Wgrave", 0x1001e80, 0x1e80 }, + { "wgrave", 0x1001e81, 0x1e81 }, + { "Wacute", 0x1001e82, 0x1e82 }, + { "wacute", 0x1001e83, 0x1e83 }, + { "Wdiaeresis", 0x1001e84, 0x1e84 }, + { "wdiaeresis", 0x1001e85, 0x1e85 }, + { "Ygrave", 0x1001ef2, 0x1ef2 }, + { "ygrave", 0x1001ef3, 0x1ef3 }, + { "OE", 0x13bc, 0x0152 }, + { "oe", 0x13bd, 0x0153 }, + { "Ydiaeresis", 0x13be, 0x0178 }, + { "overline", 0x47e, 0x203e }, + { "kana_fullstop", 0x4a1, 0x3002 }, + { "kana_openingbracket", 0x4a2, 0x300c }, + { "kana_closingbracket", 0x4a3, 0x300d }, + { "kana_comma", 0x4a4, 0x3001 }, + { "kana_conjunctive", 0x4a5, 0x30fb }, + { "kana_middledot", 0x4a5, 0x0000 }, + { "kana_WO", 0x4a6, 0x30f2 }, + { "kana_a", 0x4a7, 0x30a1 }, + { "kana_i", 0x4a8, 0x30a3 }, + { "kana_u", 0x4a9, 0x30a5 }, + { "kana_e", 0x4aa, 0x30a7 }, + { "kana_o", 0x4ab, 0x30a9 }, + { "kana_ya", 0x4ac, 0x30e3 }, + { "kana_yu", 0x4ad, 0x30e5 }, + { "kana_yo", 0x4ae, 0x30e7 }, + { "kana_tsu", 0x4af, 0x30c3 }, + { "kana_tu", 0x4af, 0x0000 }, + { "prolongedsound", 0x4b0, 0x30fc }, + { "kana_A", 0x4b1, 0x30a2 }, + { "kana_I", 0x4b2, 0x30a4 }, + { "kana_U", 0x4b3, 0x30a6 }, + { "kana_E", 0x4b4, 0x30a8 }, + { "kana_O", 0x4b5, 0x30aa }, + { "kana_KA", 0x4b6, 0x30ab }, + { "kana_KI", 0x4b7, 0x30ad }, + { "kana_KU", 0x4b8, 0x30af }, + { "kana_KE", 0x4b9, 0x30b1 }, + { "kana_KO", 0x4ba, 0x30b3 }, + { "kana_SA", 0x4bb, 0x30b5 }, + { "kana_SHI", 0x4bc, 0x30b7 }, + { "kana_SU", 0x4bd, 0x30b9 }, + { "kana_SE", 0x4be, 0x30bb }, + { "kana_SO", 0x4bf, 0x30bd }, + { "kana_TA", 0x4c0, 0x30bf }, + { "kana_CHI", 0x4c1, 0x30c1 }, + { "kana_TI", 0x4c1, 0x0000 }, + { "kana_TSU", 0x4c2, 0x30c4 }, + { "kana_TU", 0x4c2, 0x0000 }, + { "kana_TE", 0x4c3, 0x30c6 }, + { "kana_TO", 0x4c4, 0x30c8 }, + { "kana_NA", 0x4c5, 0x30ca }, + { "kana_NI", 0x4c6, 0x30cb }, + { "kana_NU", 0x4c7, 0x30cc }, + { "kana_NE", 0x4c8, 0x30cd }, + { "kana_NO", 0x4c9, 0x30ce }, + { "kana_HA", 0x4ca, 0x30cf }, + { "kana_HI", 0x4cb, 0x30d2 }, + { "kana_FU", 0x4cc, 0x30d5 }, + { "kana_HU", 0x4cc, 0x0000 }, + { "kana_HE", 0x4cd, 0x30d8 }, + { "kana_HO", 0x4ce, 0x30db }, + { "kana_MA", 0x4cf, 0x30de }, + { "kana_MI", 0x4d0, 0x30df }, + { "kana_MU", 0x4d1, 0x30e0 }, + { "kana_ME", 0x4d2, 0x30e1 }, + { "kana_MO", 0x4d3, 0x30e2 }, + { "kana_YA", 0x4d4, 0x30e4 }, + { "kana_YU", 0x4d5, 0x30e6 }, + { "kana_YO", 0x4d6, 0x30e8 }, + { "kana_RA", 0x4d7, 0x30e9 }, + { "kana_RI", 0x4d8, 0x30ea }, + { "kana_RU", 0x4d9, 0x30eb }, + { "kana_RE", 0x4da, 0x30ec }, + { "kana_RO", 0x4db, 0x30ed }, + { "kana_WA", 0x4dc, 0x30ef }, + { "kana_N", 0x4dd, 0x30f3 }, + { "voicedsound", 0x4de, 0x309b }, + { "semivoicedsound", 0x4df, 0x309c }, + { "kana_switch", 0xff7e, 0x0000 }, + { "Farsi_0", 0x10006f0, 0x06f0 }, + { "Farsi_1", 0x10006f1, 0x06f1 }, + { "Farsi_2", 0x10006f2, 0x06f2 }, + { "Farsi_3", 0x10006f3, 0x06f3 }, + { "Farsi_4", 0x10006f4, 0x06f4 }, + { "Farsi_5", 0x10006f5, 0x06f5 }, + { "Farsi_6", 0x10006f6, 0x06f6 }, + { "Farsi_7", 0x10006f7, 0x06f7 }, + { "Farsi_8", 0x10006f8, 0x06f8 }, + { "Farsi_9", 0x10006f9, 0x06f9 }, + { "Arabic_percent", 0x100066a, 0x066a }, + { "Arabic_superscript_alef", 0x1000670, 0x0670 }, + { "Arabic_tteh", 0x1000679, 0x0679 }, + { "Arabic_peh", 0x100067e, 0x067e }, + { "Arabic_tcheh", 0x1000686, 0x0686 }, + { "Arabic_ddal", 0x1000688, 0x0688 }, + { "Arabic_rreh", 0x1000691, 0x0691 }, + { "Arabic_comma", 0x5ac, 0x060c }, + { "Arabic_fullstop", 0x10006d4, 0x06d4 }, + { "Arabic_0", 0x1000660, 0x0660 }, + { "Arabic_1", 0x1000661, 0x0661 }, + { "Arabic_2", 0x1000662, 0x0662 }, + { "Arabic_3", 0x1000663, 0x0663 }, + { "Arabic_4", 0x1000664, 0x0664 }, + { "Arabic_5", 0x1000665, 0x0665 }, + { "Arabic_6", 0x1000666, 0x0666 }, + { "Arabic_7", 0x1000667, 0x0667 }, + { "Arabic_8", 0x1000668, 0x0668 }, + { "Arabic_9", 0x1000669, 0x0669 }, + { "Arabic_semicolon", 0x5bb, 0x061b }, + { "Arabic_question_mark", 0x5bf, 0x061f }, + { "Arabic_hamza", 0x5c1, 0x0621 }, + { "Arabic_maddaonalef", 0x5c2, 0x0622 }, + { "Arabic_hamzaonalef", 0x5c3, 0x0623 }, + { "Arabic_hamzaonwaw", 0x5c4, 0x0624 }, + { "Arabic_hamzaunderalef", 0x5c5, 0x0625 }, + { "Arabic_hamzaonyeh", 0x5c6, 0x0626 }, + { "Arabic_alef", 0x5c7, 0x0627 }, + { "Arabic_beh", 0x5c8, 0x0628 }, + { "Arabic_tehmarbuta", 0x5c9, 0x0629 }, + { "Arabic_teh", 0x5ca, 0x062a }, + { "Arabic_theh", 0x5cb, 0x062b }, + { "Arabic_jeem", 0x5cc, 0x062c }, + { "Arabic_hah", 0x5cd, 0x062d }, + { "Arabic_khah", 0x5ce, 0x062e }, + { "Arabic_dal", 0x5cf, 0x062f }, + { "Arabic_thal", 0x5d0, 0x0630 }, + { "Arabic_ra", 0x5d1, 0x0631 }, + { "Arabic_zain", 0x5d2, 0x0632 }, + { "Arabic_seen", 0x5d3, 0x0633 }, + { "Arabic_sheen", 0x5d4, 0x0634 }, + { "Arabic_sad", 0x5d5, 0x0635 }, + { "Arabic_dad", 0x5d6, 0x0636 }, + { "Arabic_tah", 0x5d7, 0x0637 }, + { "Arabic_zah", 0x5d8, 0x0638 }, + { "Arabic_ain", 0x5d9, 0x0639 }, + { "Arabic_ghain", 0x5da, 0x063a }, + { "Arabic_tatweel", 0x5e0, 0x0640 }, + { "Arabic_feh", 0x5e1, 0x0641 }, + { "Arabic_qaf", 0x5e2, 0x0642 }, + { "Arabic_kaf", 0x5e3, 0x0643 }, + { "Arabic_lam", 0x5e4, 0x0644 }, + { "Arabic_meem", 0x5e5, 0x0645 }, + { "Arabic_noon", 0x5e6, 0x0646 }, + { "Arabic_ha", 0x5e7, 0x0647 }, + { "Arabic_heh", 0x5e7, 0x0000 }, + { "Arabic_waw", 0x5e8, 0x0648 }, + { "Arabic_alefmaksura", 0x5e9, 0x0649 }, + { "Arabic_yeh", 0x5ea, 0x064a }, + { "Arabic_fathatan", 0x5eb, 0x064b }, + { "Arabic_dammatan", 0x5ec, 0x064c }, + { "Arabic_kasratan", 0x5ed, 0x064d }, + { "Arabic_fatha", 0x5ee, 0x064e }, + { "Arabic_damma", 0x5ef, 0x064f }, + { "Arabic_kasra", 0x5f0, 0x0650 }, + { "Arabic_shadda", 0x5f1, 0x0651 }, + { "Arabic_sukun", 0x5f2, 0x0652 }, + { "Arabic_madda_above", 0x1000653, 0x0653 }, + { "Arabic_hamza_above", 0x1000654, 0x0654 }, + { "Arabic_hamza_below", 0x1000655, 0x0655 }, + { "Arabic_jeh", 0x1000698, 0x0698 }, + { "Arabic_veh", 0x10006a4, 0x06a4 }, + { "Arabic_keheh", 0x10006a9, 0x06a9 }, + { "Arabic_gaf", 0x10006af, 0x06af }, + { "Arabic_noon_ghunna", 0x10006ba, 0x06ba }, + { "Arabic_heh_doachashmee", 0x10006be, 0x06be }, + { "Farsi_yeh", 0x10006cc, 0x06cc }, + { "Arabic_farsi_yeh", 0x10006cc, 0x06cc }, + { "Arabic_yeh_baree", 0x10006d2, 0x06d2 }, + { "Arabic_heh_goal", 0x10006c1, 0x06c1 }, + { "Arabic_switch", 0xff7e, 0x0000 }, + { "Cyrillic_GHE_bar", 0x1000492, 0x0492 }, + { "Cyrillic_ghe_bar", 0x1000493, 0x0493 }, + { "Cyrillic_ZHE_descender", 0x1000496, 0x0496 }, + { "Cyrillic_zhe_descender", 0x1000497, 0x0497 }, + { "Cyrillic_KA_descender", 0x100049a, 0x049a }, + { "Cyrillic_ka_descender", 0x100049b, 0x049b }, + { "Cyrillic_KA_vertstroke", 0x100049c, 0x049c }, + { "Cyrillic_ka_vertstroke", 0x100049d, 0x049d }, + { "Cyrillic_EN_descender", 0x10004a2, 0x04a2 }, + { "Cyrillic_en_descender", 0x10004a3, 0x04a3 }, + { "Cyrillic_U_straight", 0x10004ae, 0x04ae }, + { "Cyrillic_u_straight", 0x10004af, 0x04af }, + { "Cyrillic_U_straight_bar", 0x10004b0, 0x04b0 }, + { "Cyrillic_u_straight_bar", 0x10004b1, 0x04b1 }, + { "Cyrillic_HA_descender", 0x10004b2, 0x04b2 }, + { "Cyrillic_ha_descender", 0x10004b3, 0x04b3 }, + { "Cyrillic_CHE_descender", 0x10004b6, 0x04b6 }, + { "Cyrillic_che_descender", 0x10004b7, 0x04b7 }, + { "Cyrillic_CHE_vertstroke", 0x10004b8, 0x04b8 }, + { "Cyrillic_che_vertstroke", 0x10004b9, 0x04b9 }, + { "Cyrillic_SHHA", 0x10004ba, 0x04ba }, + { "Cyrillic_shha", 0x10004bb, 0x04bb }, + { "Cyrillic_SCHWA", 0x10004d8, 0x04d8 }, + { "Cyrillic_schwa", 0x10004d9, 0x04d9 }, + { "Cyrillic_I_macron", 0x10004e2, 0x04e2 }, + { "Cyrillic_i_macron", 0x10004e3, 0x04e3 }, + { "Cyrillic_O_bar", 0x10004e8, 0x04e8 }, + { "Cyrillic_o_bar", 0x10004e9, 0x04e9 }, + { "Cyrillic_U_macron", 0x10004ee, 0x04ee }, + { "Cyrillic_u_macron", 0x10004ef, 0x04ef }, + { "Serbian_dje", 0x6a1, 0x0452 }, + { "Macedonia_gje", 0x6a2, 0x0453 }, + { "Cyrillic_io", 0x6a3, 0x0451 }, + { "Ukrainian_ie", 0x6a4, 0x0454 }, + { "Ukranian_je", 0x6a4, 0x0000 }, + { "Macedonia_dse", 0x6a5, 0x0455 }, + { "Ukrainian_i", 0x6a6, 0x0456 }, + { "Ukranian_i", 0x6a6, 0x0000 }, + { "Ukrainian_yi", 0x6a7, 0x0457 }, + { "Ukranian_yi", 0x6a7, 0x0000 }, + { "Cyrillic_je", 0x6a8, 0x0458 }, + { "Serbian_je", 0x6a8, 0x0000 }, + { "Cyrillic_lje", 0x6a9, 0x0459 }, + { "Serbian_lje", 0x6a9, 0x0000 }, + { "Cyrillic_nje", 0x6aa, 0x045a }, + { "Serbian_nje", 0x6aa, 0x0000 }, + { "Serbian_tshe", 0x6ab, 0x045b }, + { "Macedonia_kje", 0x6ac, 0x045c }, + { "Ukrainian_ghe_with_upturn", 0x6ad, 0x0491 }, + { "Byelorussian_shortu", 0x6ae, 0x045e }, + { "Cyrillic_dzhe", 0x6af, 0x045f }, + { "Serbian_dze", 0x6af, 0x0000 }, + { "numerosign", 0x6b0, 0x2116 }, + { "Serbian_DJE", 0x6b1, 0x0402 }, + { "Macedonia_GJE", 0x6b2, 0x0403 }, + { "Cyrillic_IO", 0x6b3, 0x0401 }, + { "Ukrainian_IE", 0x6b4, 0x0404 }, + { "Ukranian_JE", 0x6b4, 0x0000 }, + { "Macedonia_DSE", 0x6b5, 0x0405 }, + { "Ukrainian_I", 0x6b6, 0x0406 }, + { "Ukranian_I", 0x6b6, 0x0000 }, + { "Ukrainian_YI", 0x6b7, 0x0407 }, + { "Ukranian_YI", 0x6b7, 0x0000 }, + { "Cyrillic_JE", 0x6b8, 0x0408 }, + { "Serbian_JE", 0x6b8, 0x0000 }, + { "Cyrillic_LJE", 0x6b9, 0x0409 }, + { "Serbian_LJE", 0x6b9, 0x0000 }, + { "Cyrillic_NJE", 0x6ba, 0x040a }, + { "Serbian_NJE", 0x6ba, 0x0000 }, + { "Serbian_TSHE", 0x6bb, 0x040b }, + { "Macedonia_KJE", 0x6bc, 0x040c }, + { "Ukrainian_GHE_WITH_UPTURN", 0x6bd, 0x0490 }, + { "Byelorussian_SHORTU", 0x6be, 0x040e }, + { "Cyrillic_DZHE", 0x6bf, 0x040f }, + { "Serbian_DZE", 0x6bf, 0x0000 }, + { "Cyrillic_yu", 0x6c0, 0x044e }, + { "Cyrillic_a", 0x6c1, 0x0430 }, + { "Cyrillic_be", 0x6c2, 0x0431 }, + { "Cyrillic_tse", 0x6c3, 0x0446 }, + { "Cyrillic_de", 0x6c4, 0x0434 }, + { "Cyrillic_ie", 0x6c5, 0x0435 }, + { "Cyrillic_ef", 0x6c6, 0x0444 }, + { "Cyrillic_ghe", 0x6c7, 0x0433 }, + { "Cyrillic_ha", 0x6c8, 0x0445 }, + { "Cyrillic_i", 0x6c9, 0x0438 }, + { "Cyrillic_shorti", 0x6ca, 0x0439 }, + { "Cyrillic_ka", 0x6cb, 0x043a }, + { "Cyrillic_el", 0x6cc, 0x043b }, + { "Cyrillic_em", 0x6cd, 0x043c }, + { "Cyrillic_en", 0x6ce, 0x043d }, + { "Cyrillic_o", 0x6cf, 0x043e }, + { "Cyrillic_pe", 0x6d0, 0x043f }, + { "Cyrillic_ya", 0x6d1, 0x044f }, + { "Cyrillic_er", 0x6d2, 0x0440 }, + { "Cyrillic_es", 0x6d3, 0x0441 }, + { "Cyrillic_te", 0x6d4, 0x0442 }, + { "Cyrillic_u", 0x6d5, 0x0443 }, + { "Cyrillic_zhe", 0x6d6, 0x0436 }, + { "Cyrillic_ve", 0x6d7, 0x0432 }, + { "Cyrillic_softsign", 0x6d8, 0x044c }, + { "Cyrillic_yeru", 0x6d9, 0x044b }, + { "Cyrillic_ze", 0x6da, 0x0437 }, + { "Cyrillic_sha", 0x6db, 0x0448 }, + { "Cyrillic_e", 0x6dc, 0x044d }, + { "Cyrillic_shcha", 0x6dd, 0x0449 }, + { "Cyrillic_che", 0x6de, 0x0447 }, + { "Cyrillic_hardsign", 0x6df, 0x044a }, + { "Cyrillic_YU", 0x6e0, 0x042e }, + { "Cyrillic_A", 0x6e1, 0x0410 }, + { "Cyrillic_BE", 0x6e2, 0x0411 }, + { "Cyrillic_TSE", 0x6e3, 0x0426 }, + { "Cyrillic_DE", 0x6e4, 0x0414 }, + { "Cyrillic_IE", 0x6e5, 0x0415 }, + { "Cyrillic_EF", 0x6e6, 0x0424 }, + { "Cyrillic_GHE", 0x6e7, 0x0413 }, + { "Cyrillic_HA", 0x6e8, 0x0425 }, + { "Cyrillic_I", 0x6e9, 0x0418 }, + { "Cyrillic_SHORTI", 0x6ea, 0x0419 }, + { "Cyrillic_KA", 0x6eb, 0x041a }, + { "Cyrillic_EL", 0x6ec, 0x041b }, + { "Cyrillic_EM", 0x6ed, 0x041c }, + { "Cyrillic_EN", 0x6ee, 0x041d }, + { "Cyrillic_O", 0x6ef, 0x041e }, + { "Cyrillic_PE", 0x6f0, 0x041f }, + { "Cyrillic_YA", 0x6f1, 0x042f }, + { "Cyrillic_ER", 0x6f2, 0x0420 }, + { "Cyrillic_ES", 0x6f3, 0x0421 }, + { "Cyrillic_TE", 0x6f4, 0x0422 }, + { "Cyrillic_U", 0x6f5, 0x0423 }, + { "Cyrillic_ZHE", 0x6f6, 0x0416 }, + { "Cyrillic_VE", 0x6f7, 0x0412 }, + { "Cyrillic_SOFTSIGN", 0x6f8, 0x042c }, + { "Cyrillic_YERU", 0x6f9, 0x042b }, + { "Cyrillic_ZE", 0x6fa, 0x0417 }, + { "Cyrillic_SHA", 0x6fb, 0x0428 }, + { "Cyrillic_E", 0x6fc, 0x042d }, + { "Cyrillic_SHCHA", 0x6fd, 0x0429 }, + { "Cyrillic_CHE", 0x6fe, 0x0427 }, + { "Cyrillic_HARDSIGN", 0x6ff, 0x042a }, + { "Greek_ALPHAaccent", 0x7a1, 0x0386 }, + { "Greek_EPSILONaccent", 0x7a2, 0x0388 }, + { "Greek_ETAaccent", 0x7a3, 0x0389 }, + { "Greek_IOTAaccent", 0x7a4, 0x038a }, + { "Greek_IOTAdieresis", 0x7a5, 0x03aa }, + { "Greek_IOTAdiaeresis", 0x7a5, 0x0000 }, + { "Greek_OMICRONaccent", 0x7a7, 0x038c }, + { "Greek_UPSILONaccent", 0x7a8, 0x038e }, + { "Greek_UPSILONdieresis", 0x7a9, 0x03ab }, + { "Greek_OMEGAaccent", 0x7ab, 0x038f }, + { "Greek_accentdieresis", 0x7ae, 0x0385 }, + { "Greek_horizbar", 0x7af, 0x2015 }, + { "Greek_alphaaccent", 0x7b1, 0x03ac }, + { "Greek_epsilonaccent", 0x7b2, 0x03ad }, + { "Greek_etaaccent", 0x7b3, 0x03ae }, + { "Greek_iotaaccent", 0x7b4, 0x03af }, + { "Greek_iotadieresis", 0x7b5, 0x03ca }, + { "Greek_iotaaccentdieresis", 0x7b6, 0x0390 }, + { "Greek_omicronaccent", 0x7b7, 0x03cc }, + { "Greek_upsilonaccent", 0x7b8, 0x03cd }, + { "Greek_upsilondieresis", 0x7b9, 0x03cb }, + { "Greek_upsilonaccentdieresis", 0x7ba, 0x03b0 }, + { "Greek_omegaaccent", 0x7bb, 0x03ce }, + { "Greek_ALPHA", 0x7c1, 0x0391 }, + { "Greek_BETA", 0x7c2, 0x0392 }, + { "Greek_GAMMA", 0x7c3, 0x0393 }, + { "Greek_DELTA", 0x7c4, 0x0394 }, + { "Greek_EPSILON", 0x7c5, 0x0395 }, + { "Greek_ZETA", 0x7c6, 0x0396 }, + { "Greek_ETA", 0x7c7, 0x0397 }, + { "Greek_THETA", 0x7c8, 0x0398 }, + { "Greek_IOTA", 0x7c9, 0x0399 }, + { "Greek_KAPPA", 0x7ca, 0x039a }, + { "Greek_LAMDA", 0x7cb, 0x039b }, + { "Greek_LAMBDA", 0x7cb, 0x039b }, + { "Greek_MU", 0x7cc, 0x039c }, + { "Greek_NU", 0x7cd, 0x039d }, + { "Greek_XI", 0x7ce, 0x039e }, + { "Greek_OMICRON", 0x7cf, 0x039f }, + { "Greek_PI", 0x7d0, 0x03a0 }, + { "Greek_RHO", 0x7d1, 0x03a1 }, + { "Greek_SIGMA", 0x7d2, 0x03a3 }, + { "Greek_TAU", 0x7d4, 0x03a4 }, + { "Greek_UPSILON", 0x7d5, 0x03a5 }, + { "Greek_PHI", 0x7d6, 0x03a6 }, + { "Greek_CHI", 0x7d7, 0x03a7 }, + { "Greek_PSI", 0x7d8, 0x03a8 }, + { "Greek_OMEGA", 0x7d9, 0x03a9 }, + { "Greek_alpha", 0x7e1, 0x03b1 }, + { "Greek_beta", 0x7e2, 0x03b2 }, + { "Greek_gamma", 0x7e3, 0x03b3 }, + { "Greek_delta", 0x7e4, 0x03b4 }, + { "Greek_epsilon", 0x7e5, 0x03b5 }, + { "Greek_zeta", 0x7e6, 0x03b6 }, + { "Greek_eta", 0x7e7, 0x03b7 }, + { "Greek_theta", 0x7e8, 0x03b8 }, + { "Greek_iota", 0x7e9, 0x03b9 }, + { "Greek_kappa", 0x7ea, 0x03ba }, + { "Greek_lamda", 0x7eb, 0x03bb }, + { "Greek_lambda", 0x7eb, 0x03bb }, + { "Greek_mu", 0x7ec, 0x03bc }, + { "Greek_nu", 0x7ed, 0x03bd }, + { "Greek_xi", 0x7ee, 0x03be }, + { "Greek_omicron", 0x7ef, 0x03bf }, + { "Greek_pi", 0x7f0, 0x03c0 }, + { "Greek_rho", 0x7f1, 0x03c1 }, + { "Greek_sigma", 0x7f2, 0x03c3 }, + { "Greek_finalsmallsigma", 0x7f3, 0x03c2 }, + { "Greek_tau", 0x7f4, 0x03c4 }, + { "Greek_upsilon", 0x7f5, 0x03c5 }, + { "Greek_phi", 0x7f6, 0x03c6 }, + { "Greek_chi", 0x7f7, 0x03c7 }, + { "Greek_psi", 0x7f8, 0x03c8 }, + { "Greek_omega", 0x7f9, 0x03c9 }, + { "Greek_switch", 0xff7e, 0x0000 }, + { "leftradical", 0x8a1, 0x23b7 }, + { "topleftradical", 0x8a2, 0x0000 }, + { "horizconnector", 0x8a3, 0x0000 }, + { "topintegral", 0x8a4, 0x2320 }, + { "botintegral", 0x8a5, 0x2321 }, + { "vertconnector", 0x8a6, 0x0000 }, + { "topleftsqbracket", 0x8a7, 0x23a1 }, + { "botleftsqbracket", 0x8a8, 0x23a3 }, + { "toprightsqbracket", 0x8a9, 0x23a4 }, + { "botrightsqbracket", 0x8aa, 0x23a6 }, + { "topleftparens", 0x8ab, 0x239b }, + { "botleftparens", 0x8ac, 0x239d }, + { "toprightparens", 0x8ad, 0x239e }, + { "botrightparens", 0x8ae, 0x23a0 }, + { "leftmiddlecurlybrace", 0x8af, 0x23a8 }, + { "rightmiddlecurlybrace", 0x8b0, 0x23ac }, + { "topleftsummation", 0x8b1, 0x0000 }, + { "botleftsummation", 0x8b2, 0x0000 }, + { "topvertsummationconnector", 0x8b3, 0x0000 }, + { "botvertsummationconnector", 0x8b4, 0x0000 }, + { "toprightsummation", 0x8b5, 0x0000 }, + { "botrightsummation", 0x8b6, 0x0000 }, + { "rightmiddlesummation", 0x8b7, 0x0000 }, + { "lessthanequal", 0x8bc, 0x2264 }, + { "notequal", 0x8bd, 0x2260 }, + { "greaterthanequal", 0x8be, 0x2265 }, + { "integral", 0x8bf, 0x222b }, + { "therefore", 0x8c0, 0x2234 }, + { "variation", 0x8c1, 0x221d }, + { "infinity", 0x8c2, 0x221e }, + { "nabla", 0x8c5, 0x2207 }, + { "approximate", 0x8c8, 0x223c }, + { "similarequal", 0x8c9, 0x2243 }, + { "ifonlyif", 0x8cd, 0x21d4 }, + { "implies", 0x8ce, 0x21d2 }, + { "identical", 0x8cf, 0x2261 }, + { "radical", 0x8d6, 0x221a }, + { "includedin", 0x8da, 0x2282 }, + { "includes", 0x8db, 0x2283 }, + { "intersection", 0x8dc, 0x2229 }, + { "union", 0x8dd, 0x222a }, + { "logicaland", 0x8de, 0x2227 }, + { "logicalor", 0x8df, 0x2228 }, + { "partialderivative", 0x8ef, 0x2202 }, + { "function", 0x8f6, 0x0192 }, + { "leftarrow", 0x8fb, 0x2190 }, + { "uparrow", 0x8fc, 0x2191 }, + { "rightarrow", 0x8fd, 0x2192 }, + { "downarrow", 0x8fe, 0x2193 }, + { "blank", 0x9df, 0x0000 }, + { "soliddiamond", 0x9e0, 0x25c6 }, + { "checkerboard", 0x9e1, 0x2592 }, + { "ht", 0x9e2, 0x2409 }, + { "ff", 0x9e3, 0x240c }, + { "cr", 0x9e4, 0x240d }, + { "lf", 0x9e5, 0x240a }, + { "nl", 0x9e8, 0x2424 }, + { "vt", 0x9e9, 0x240b }, + { "lowrightcorner", 0x9ea, 0x2518 }, + { "uprightcorner", 0x9eb, 0x2510 }, + { "upleftcorner", 0x9ec, 0x250c }, + { "lowleftcorner", 0x9ed, 0x2514 }, + { "crossinglines", 0x9ee, 0x253c }, + { "horizlinescan1", 0x9ef, 0x23ba }, + { "horizlinescan3", 0x9f0, 0x23bb }, + { "horizlinescan5", 0x9f1, 0x2500 }, + { "horizlinescan7", 0x9f2, 0x23bc }, + { "horizlinescan9", 0x9f3, 0x23bd }, + { "leftt", 0x9f4, 0x251c }, + { "rightt", 0x9f5, 0x2524 }, + { "bott", 0x9f6, 0x2534 }, + { "topt", 0x9f7, 0x252c }, + { "vertbar", 0x9f8, 0x2502 }, + { "emspace", 0xaa1, 0x2003 }, + { "enspace", 0xaa2, 0x2002 }, + { "em3space", 0xaa3, 0x2004 }, + { "em4space", 0xaa4, 0x2005 }, + { "digitspace", 0xaa5, 0x2007 }, + { "punctspace", 0xaa6, 0x2008 }, + { "thinspace", 0xaa7, 0x2009 }, + { "hairspace", 0xaa8, 0x200a }, + { "emdash", 0xaa9, 0x2014 }, + { "endash", 0xaaa, 0x2013 }, + { "signifblank", 0xaac, 0x0000 }, + { "ellipsis", 0xaae, 0x2026 }, + { "doubbaselinedot", 0xaaf, 0x2025 }, + { "onethird", 0xab0, 0x2153 }, + { "twothirds", 0xab1, 0x2154 }, + { "onefifth", 0xab2, 0x2155 }, + { "twofifths", 0xab3, 0x2156 }, + { "threefifths", 0xab4, 0x2157 }, + { "fourfifths", 0xab5, 0x2158 }, + { "onesixth", 0xab6, 0x2159 }, + { "fivesixths", 0xab7, 0x215a }, + { "careof", 0xab8, 0x2105 }, + { "figdash", 0xabb, 0x2012 }, + { "leftanglebracket", 0xabc, 0x0000 }, + { "decimalpoint", 0xabd, 0x0000 }, + { "rightanglebracket", 0xabe, 0x0000 }, + { "marker", 0xabf, 0x0000 }, + { "oneeighth", 0xac3, 0x215b }, + { "threeeighths", 0xac4, 0x215c }, + { "fiveeighths", 0xac5, 0x215d }, + { "seveneighths", 0xac6, 0x215e }, + { "trademark", 0xac9, 0x2122 }, + { "signaturemark", 0xaca, 0x0000 }, + { "trademarkincircle", 0xacb, 0x0000 }, + { "leftopentriangle", 0xacc, 0x0000 }, + { "rightopentriangle", 0xacd, 0x0000 }, + { "emopencircle", 0xace, 0x0000 }, + { "emopenrectangle", 0xacf, 0x0000 }, + { "leftsinglequotemark", 0xad0, 0x2018 }, + { "rightsinglequotemark", 0xad1, 0x2019 }, + { "leftdoublequotemark", 0xad2, 0x201c }, + { "rightdoublequotemark", 0xad3, 0x201d }, + { "prescription", 0xad4, 0x211e }, + { "permille", 0xad5, 0x2030 }, + { "minutes", 0xad6, 0x2032 }, + { "seconds", 0xad7, 0x2033 }, + { "latincross", 0xad9, 0x271d }, + { "hexagram", 0xada, 0x0000 }, + { "filledrectbullet", 0xadb, 0x0000 }, + { "filledlefttribullet", 0xadc, 0x0000 }, + { "filledrighttribullet", 0xadd, 0x0000 }, + { "emfilledcircle", 0xade, 0x0000 }, + { "emfilledrect", 0xadf, 0x0000 }, + { "enopencircbullet", 0xae0, 0x0000 }, + { "enopensquarebullet", 0xae1, 0x0000 }, + { "openrectbullet", 0xae2, 0x0000 }, + { "opentribulletup", 0xae3, 0x0000 }, + { "opentribulletdown", 0xae4, 0x0000 }, + { "openstar", 0xae5, 0x0000 }, + { "enfilledcircbullet", 0xae6, 0x0000 }, + { "enfilledsqbullet", 0xae7, 0x0000 }, + { "filledtribulletup", 0xae8, 0x0000 }, + { "filledtribulletdown", 0xae9, 0x0000 }, + { "leftpointer", 0xaea, 0x0000 }, + { "rightpointer", 0xaeb, 0x0000 }, + { "club", 0xaec, 0x2663 }, + { "diamond", 0xaed, 0x2666 }, + { "heart", 0xaee, 0x2665 }, + { "maltesecross", 0xaf0, 0x2720 }, + { "dagger", 0xaf1, 0x2020 }, + { "doubledagger", 0xaf2, 0x2021 }, + { "checkmark", 0xaf3, 0x2713 }, + { "ballotcross", 0xaf4, 0x2717 }, + { "musicalsharp", 0xaf5, 0x266f }, + { "musicalflat", 0xaf6, 0x266d }, + { "malesymbol", 0xaf7, 0x2642 }, + { "femalesymbol", 0xaf8, 0x2640 }, + { "telephone", 0xaf9, 0x260e }, + { "telephonerecorder", 0xafa, 0x2315 }, + { "phonographcopyright", 0xafb, 0x2117 }, + { "caret", 0xafc, 0x2038 }, + { "singlelowquotemark", 0xafd, 0x201a }, + { "doublelowquotemark", 0xafe, 0x201e }, + { "cursor", 0xaff, 0x0000 }, + { "leftcaret", 0xba3, 0x0000 }, + { "rightcaret", 0xba6, 0x0000 }, + { "downcaret", 0xba8, 0x0000 }, + { "upcaret", 0xba9, 0x0000 }, + { "overbar", 0xbc0, 0x0000 }, + { "downtack", 0xbc2, 0x22a4 }, + { "upshoe", 0xbc3, 0x0000 }, + { "downstile", 0xbc4, 0x230a }, + { "underbar", 0xbc6, 0x0000 }, + { "jot", 0xbca, 0x2218 }, + { "quad", 0xbcc, 0x2395 }, + { "uptack", 0xbce, 0x22a5 }, + { "circle", 0xbcf, 0x25cb }, + { "upstile", 0xbd3, 0x2308 }, + { "downshoe", 0xbd6, 0x0000 }, + { "rightshoe", 0xbd8, 0x0000 }, + { "leftshoe", 0xbda, 0x0000 }, + { "lefttack", 0xbdc, 0x22a3 }, + { "righttack", 0xbfc, 0x22a2 }, + { "hebrew_doublelowline", 0xcdf, 0x2017 }, + { "hebrew_aleph", 0xce0, 0x05d0 }, + { "hebrew_bet", 0xce1, 0x05d1 }, + { "hebrew_beth", 0xce1, 0x0000 }, + { "hebrew_gimel", 0xce2, 0x05d2 }, + { "hebrew_gimmel", 0xce2, 0x0000 }, + { "hebrew_dalet", 0xce3, 0x05d3 }, + { "hebrew_daleth", 0xce3, 0x0000 }, + { "hebrew_he", 0xce4, 0x05d4 }, + { "hebrew_waw", 0xce5, 0x05d5 }, + { "hebrew_zain", 0xce6, 0x05d6 }, + { "hebrew_zayin", 0xce6, 0x0000 }, + { "hebrew_chet", 0xce7, 0x05d7 }, + { "hebrew_het", 0xce7, 0x0000 }, + { "hebrew_tet", 0xce8, 0x05d8 }, + { "hebrew_teth", 0xce8, 0x0000 }, + { "hebrew_yod", 0xce9, 0x05d9 }, + { "hebrew_finalkaph", 0xcea, 0x05da }, + { "hebrew_kaph", 0xceb, 0x05db }, + { "hebrew_lamed", 0xcec, 0x05dc }, + { "hebrew_finalmem", 0xced, 0x05dd }, + { "hebrew_mem", 0xcee, 0x05de }, + { "hebrew_finalnun", 0xcef, 0x05df }, + { "hebrew_nun", 0xcf0, 0x05e0 }, + { "hebrew_samech", 0xcf1, 0x05e1 }, + { "hebrew_samekh", 0xcf1, 0x0000 }, + { "hebrew_ayin", 0xcf2, 0x05e2 }, + { "hebrew_finalpe", 0xcf3, 0x05e3 }, + { "hebrew_pe", 0xcf4, 0x05e4 }, + { "hebrew_finalzade", 0xcf5, 0x05e5 }, + { "hebrew_finalzadi", 0xcf5, 0x0000 }, + { "hebrew_zade", 0xcf6, 0x05e6 }, + { "hebrew_zadi", 0xcf6, 0x0000 }, + { "hebrew_qoph", 0xcf7, 0x05e7 }, + { "hebrew_kuf", 0xcf7, 0x0000 }, + { "hebrew_resh", 0xcf8, 0x05e8 }, + { "hebrew_shin", 0xcf9, 0x05e9 }, + { "hebrew_taw", 0xcfa, 0x05ea }, + { "hebrew_taf", 0xcfa, 0x0000 }, + { "Hebrew_switch", 0xff7e, 0x0000 }, + { "Thai_kokai", 0xda1, 0x0e01 }, + { "Thai_khokhai", 0xda2, 0x0e02 }, + { "Thai_khokhuat", 0xda3, 0x0e03 }, + { "Thai_khokhwai", 0xda4, 0x0e04 }, + { "Thai_khokhon", 0xda5, 0x0e05 }, + { "Thai_khorakhang", 0xda6, 0x0e06 }, + { "Thai_ngongu", 0xda7, 0x0e07 }, + { "Thai_chochan", 0xda8, 0x0e08 }, + { "Thai_choching", 0xda9, 0x0e09 }, + { "Thai_chochang", 0xdaa, 0x0e0a }, + { "Thai_soso", 0xdab, 0x0e0b }, + { "Thai_chochoe", 0xdac, 0x0e0c }, + { "Thai_yoying", 0xdad, 0x0e0d }, + { "Thai_dochada", 0xdae, 0x0e0e }, + { "Thai_topatak", 0xdaf, 0x0e0f }, + { "Thai_thothan", 0xdb0, 0x0e10 }, + { "Thai_thonangmontho", 0xdb1, 0x0e11 }, + { "Thai_thophuthao", 0xdb2, 0x0e12 }, + { "Thai_nonen", 0xdb3, 0x0e13 }, + { "Thai_dodek", 0xdb4, 0x0e14 }, + { "Thai_totao", 0xdb5, 0x0e15 }, + { "Thai_thothung", 0xdb6, 0x0e16 }, + { "Thai_thothahan", 0xdb7, 0x0e17 }, + { "Thai_thothong", 0xdb8, 0x0e18 }, + { "Thai_nonu", 0xdb9, 0x0e19 }, + { "Thai_bobaimai", 0xdba, 0x0e1a }, + { "Thai_popla", 0xdbb, 0x0e1b }, + { "Thai_phophung", 0xdbc, 0x0e1c }, + { "Thai_fofa", 0xdbd, 0x0e1d }, + { "Thai_phophan", 0xdbe, 0x0e1e }, + { "Thai_fofan", 0xdbf, 0x0e1f }, + { "Thai_phosamphao", 0xdc0, 0x0e20 }, + { "Thai_moma", 0xdc1, 0x0e21 }, + { "Thai_yoyak", 0xdc2, 0x0e22 }, + { "Thai_rorua", 0xdc3, 0x0e23 }, + { "Thai_ru", 0xdc4, 0x0e24 }, + { "Thai_loling", 0xdc5, 0x0e25 }, + { "Thai_lu", 0xdc6, 0x0e26 }, + { "Thai_wowaen", 0xdc7, 0x0e27 }, + { "Thai_sosala", 0xdc8, 0x0e28 }, + { "Thai_sorusi", 0xdc9, 0x0e29 }, + { "Thai_sosua", 0xdca, 0x0e2a }, + { "Thai_hohip", 0xdcb, 0x0e2b }, + { "Thai_lochula", 0xdcc, 0x0e2c }, + { "Thai_oang", 0xdcd, 0x0e2d }, + { "Thai_honokhuk", 0xdce, 0x0e2e }, + { "Thai_paiyannoi", 0xdcf, 0x0e2f }, + { "Thai_saraa", 0xdd0, 0x0e30 }, + { "Thai_maihanakat", 0xdd1, 0x0e31 }, + { "Thai_saraaa", 0xdd2, 0x0e32 }, + { "Thai_saraam", 0xdd3, 0x0e33 }, + { "Thai_sarai", 0xdd4, 0x0e34 }, + { "Thai_saraii", 0xdd5, 0x0e35 }, + { "Thai_saraue", 0xdd6, 0x0e36 }, + { "Thai_sarauee", 0xdd7, 0x0e37 }, + { "Thai_sarau", 0xdd8, 0x0e38 }, + { "Thai_sarauu", 0xdd9, 0x0e39 }, + { "Thai_phinthu", 0xdda, 0x0e3a }, + { "Thai_maihanakat_maitho", 0xdde, 0x0000 }, + { "Thai_baht", 0xddf, 0x0e3f }, + { "Thai_sarae", 0xde0, 0x0e40 }, + { "Thai_saraae", 0xde1, 0x0e41 }, + { "Thai_sarao", 0xde2, 0x0e42 }, + { "Thai_saraaimaimuan", 0xde3, 0x0e43 }, + { "Thai_saraaimaimalai", 0xde4, 0x0e44 }, + { "Thai_lakkhangyao", 0xde5, 0x0e45 }, + { "Thai_maiyamok", 0xde6, 0x0e46 }, + { "Thai_maitaikhu", 0xde7, 0x0e47 }, + { "Thai_maiek", 0xde8, 0x0e48 }, + { "Thai_maitho", 0xde9, 0x0e49 }, + { "Thai_maitri", 0xdea, 0x0e4a }, + { "Thai_maichattawa", 0xdeb, 0x0e4b }, + { "Thai_thanthakhat", 0xdec, 0x0e4c }, + { "Thai_nikhahit", 0xded, 0x0e4d }, + { "Thai_leksun", 0xdf0, 0x0e50 }, + { "Thai_leknung", 0xdf1, 0x0e51 }, + { "Thai_leksong", 0xdf2, 0x0e52 }, + { "Thai_leksam", 0xdf3, 0x0e53 }, + { "Thai_leksi", 0xdf4, 0x0e54 }, + { "Thai_lekha", 0xdf5, 0x0e55 }, + { "Thai_lekhok", 0xdf6, 0x0e56 }, + { "Thai_lekchet", 0xdf7, 0x0e57 }, + { "Thai_lekpaet", 0xdf8, 0x0e58 }, + { "Thai_lekkao", 0xdf9, 0x0e59 }, + { "Hangul", 0xff31, 0x0000 }, + { "Hangul_Start", 0xff32, 0x0000 }, + { "Hangul_End", 0xff33, 0x0000 }, + { "Hangul_Hanja", 0xff34, 0x0000 }, + { "Hangul_Jamo", 0xff35, 0x0000 }, + { "Hangul_Romaja", 0xff36, 0x0000 }, + { "Hangul_Codeinput", 0xff37, 0x0000 }, + { "Hangul_Jeonja", 0xff38, 0x0000 }, + { "Hangul_Banja", 0xff39, 0x0000 }, + { "Hangul_PreHanja", 0xff3a, 0x0000 }, + { "Hangul_PostHanja", 0xff3b, 0x0000 }, + { "Hangul_SingleCandidate", 0xff3c, 0x0000 }, + { "Hangul_MultipleCandidate", 0xff3d, 0x0000 }, + { "Hangul_PreviousCandidate", 0xff3e, 0x0000 }, + { "Hangul_Special", 0xff3f, 0x0000 }, + { "Hangul_switch", 0xff7e, 0x0000 }, + { "Hangul_Kiyeog", 0xea1, 0x0000 }, + { "Hangul_SsangKiyeog", 0xea2, 0x0000 }, + { "Hangul_KiyeogSios", 0xea3, 0x0000 }, + { "Hangul_Nieun", 0xea4, 0x0000 }, + { "Hangul_NieunJieuj", 0xea5, 0x0000 }, + { "Hangul_NieunHieuh", 0xea6, 0x0000 }, + { "Hangul_Dikeud", 0xea7, 0x0000 }, + { "Hangul_SsangDikeud", 0xea8, 0x0000 }, + { "Hangul_Rieul", 0xea9, 0x0000 }, + { "Hangul_RieulKiyeog", 0xeaa, 0x0000 }, + { "Hangul_RieulMieum", 0xeab, 0x0000 }, + { "Hangul_RieulPieub", 0xeac, 0x0000 }, + { "Hangul_RieulSios", 0xead, 0x0000 }, + { "Hangul_RieulTieut", 0xeae, 0x0000 }, + { "Hangul_RieulPhieuf", 0xeaf, 0x0000 }, + { "Hangul_RieulHieuh", 0xeb0, 0x0000 }, + { "Hangul_Mieum", 0xeb1, 0x0000 }, + { "Hangul_Pieub", 0xeb2, 0x0000 }, + { "Hangul_SsangPieub", 0xeb3, 0x0000 }, + { "Hangul_PieubSios", 0xeb4, 0x0000 }, + { "Hangul_Sios", 0xeb5, 0x0000 }, + { "Hangul_SsangSios", 0xeb6, 0x0000 }, + { "Hangul_Ieung", 0xeb7, 0x0000 }, + { "Hangul_Jieuj", 0xeb8, 0x0000 }, + { "Hangul_SsangJieuj", 0xeb9, 0x0000 }, + { "Hangul_Cieuc", 0xeba, 0x0000 }, + { "Hangul_Khieuq", 0xebb, 0x0000 }, + { "Hangul_Tieut", 0xebc, 0x0000 }, + { "Hangul_Phieuf", 0xebd, 0x0000 }, + { "Hangul_Hieuh", 0xebe, 0x0000 }, + { "Hangul_A", 0xebf, 0x0000 }, + { "Hangul_AE", 0xec0, 0x0000 }, + { "Hangul_YA", 0xec1, 0x0000 }, + { "Hangul_YAE", 0xec2, 0x0000 }, + { "Hangul_EO", 0xec3, 0x0000 }, + { "Hangul_E", 0xec4, 0x0000 }, + { "Hangul_YEO", 0xec5, 0x0000 }, + { "Hangul_YE", 0xec6, 0x0000 }, + { "Hangul_O", 0xec7, 0x0000 }, + { "Hangul_WA", 0xec8, 0x0000 }, + { "Hangul_WAE", 0xec9, 0x0000 }, + { "Hangul_OE", 0xeca, 0x0000 }, + { "Hangul_YO", 0xecb, 0x0000 }, + { "Hangul_U", 0xecc, 0x0000 }, + { "Hangul_WEO", 0xecd, 0x0000 }, + { "Hangul_WE", 0xece, 0x0000 }, + { "Hangul_WI", 0xecf, 0x0000 }, + { "Hangul_YU", 0xed0, 0x0000 }, + { "Hangul_EU", 0xed1, 0x0000 }, + { "Hangul_YI", 0xed2, 0x0000 }, + { "Hangul_I", 0xed3, 0x0000 }, + { "Hangul_J_Kiyeog", 0xed4, 0x0000 }, + { "Hangul_J_SsangKiyeog", 0xed5, 0x0000 }, + { "Hangul_J_KiyeogSios", 0xed6, 0x0000 }, + { "Hangul_J_Nieun", 0xed7, 0x0000 }, + { "Hangul_J_NieunJieuj", 0xed8, 0x0000 }, + { "Hangul_J_NieunHieuh", 0xed9, 0x0000 }, + { "Hangul_J_Dikeud", 0xeda, 0x0000 }, + { "Hangul_J_Rieul", 0xedb, 0x0000 }, + { "Hangul_J_RieulKiyeog", 0xedc, 0x0000 }, + { "Hangul_J_RieulMieum", 0xedd, 0x0000 }, + { "Hangul_J_RieulPieub", 0xede, 0x0000 }, + { "Hangul_J_RieulSios", 0xedf, 0x0000 }, + { "Hangul_J_RieulTieut", 0xee0, 0x0000 }, + { "Hangul_J_RieulPhieuf", 0xee1, 0x0000 }, + { "Hangul_J_RieulHieuh", 0xee2, 0x0000 }, + { "Hangul_J_Mieum", 0xee3, 0x0000 }, + { "Hangul_J_Pieub", 0xee4, 0x0000 }, + { "Hangul_J_PieubSios", 0xee5, 0x0000 }, + { "Hangul_J_Sios", 0xee6, 0x0000 }, + { "Hangul_J_SsangSios", 0xee7, 0x0000 }, + { "Hangul_J_Ieung", 0xee8, 0x0000 }, + { "Hangul_J_Jieuj", 0xee9, 0x0000 }, + { "Hangul_J_Cieuc", 0xeea, 0x0000 }, + { "Hangul_J_Khieuq", 0xeeb, 0x0000 }, + { "Hangul_J_Tieut", 0xeec, 0x0000 }, + { "Hangul_J_Phieuf", 0xeed, 0x0000 }, + { "Hangul_J_Hieuh", 0xeee, 0x0000 }, + { "Hangul_RieulYeorinHieuh", 0xeef, 0x0000 }, + { "Hangul_SunkyeongeumMieum", 0xef0, 0x0000 }, + { "Hangul_SunkyeongeumPieub", 0xef1, 0x0000 }, + { "Hangul_PanSios", 0xef2, 0x0000 }, + { "Hangul_KkogjiDalrinIeung", 0xef3, 0x0000 }, + { "Hangul_SunkyeongeumPhieuf", 0xef4, 0x0000 }, + { "Hangul_YeorinHieuh", 0xef5, 0x0000 }, + { "Hangul_AraeA", 0xef6, 0x0000 }, + { "Hangul_AraeAE", 0xef7, 0x0000 }, + { "Hangul_J_PanSios", 0xef8, 0x0000 }, + { "Hangul_J_KkogjiDalrinIeung", 0xef9, 0x0000 }, + { "Hangul_J_YeorinHieuh", 0xefa, 0x0000 }, + { "Korean_Won", 0xeff, 0x0000 }, + { "Armenian_ligature_ew", 0x1000587, 0x0587 }, + { "Armenian_full_stop", 0x1000589, 0x0589 }, + { "Armenian_verjaket", 0x1000589, 0x0589 }, + { "Armenian_separation_mark", 0x100055d, 0x055d }, + { "Armenian_but", 0x100055d, 0x055d }, + { "Armenian_hyphen", 0x100058a, 0x058a }, + { "Armenian_yentamna", 0x100058a, 0x058a }, + { "Armenian_exclam", 0x100055c, 0x055c }, + { "Armenian_amanak", 0x100055c, 0x055c }, + { "Armenian_accent", 0x100055b, 0x055b }, + { "Armenian_shesht", 0x100055b, 0x055b }, + { "Armenian_question", 0x100055e, 0x055e }, + { "Armenian_paruyk", 0x100055e, 0x055e }, + { "Armenian_AYB", 0x1000531, 0x0531 }, + { "Armenian_ayb", 0x1000561, 0x0561 }, + { "Armenian_BEN", 0x1000532, 0x0532 }, + { "Armenian_ben", 0x1000562, 0x0562 }, + { "Armenian_GIM", 0x1000533, 0x0533 }, + { "Armenian_gim", 0x1000563, 0x0563 }, + { "Armenian_DA", 0x1000534, 0x0534 }, + { "Armenian_da", 0x1000564, 0x0564 }, + { "Armenian_YECH", 0x1000535, 0x0535 }, + { "Armenian_yech", 0x1000565, 0x0565 }, + { "Armenian_ZA", 0x1000536, 0x0536 }, + { "Armenian_za", 0x1000566, 0x0566 }, + { "Armenian_E", 0x1000537, 0x0537 }, + { "Armenian_e", 0x1000567, 0x0567 }, + { "Armenian_AT", 0x1000538, 0x0538 }, + { "Armenian_at", 0x1000568, 0x0568 }, + { "Armenian_TO", 0x1000539, 0x0539 }, + { "Armenian_to", 0x1000569, 0x0569 }, + { "Armenian_ZHE", 0x100053a, 0x053a }, + { "Armenian_zhe", 0x100056a, 0x056a }, + { "Armenian_INI", 0x100053b, 0x053b }, + { "Armenian_ini", 0x100056b, 0x056b }, + { "Armenian_LYUN", 0x100053c, 0x053c }, + { "Armenian_lyun", 0x100056c, 0x056c }, + { "Armenian_KHE", 0x100053d, 0x053d }, + { "Armenian_khe", 0x100056d, 0x056d }, + { "Armenian_TSA", 0x100053e, 0x053e }, + { "Armenian_tsa", 0x100056e, 0x056e }, + { "Armenian_KEN", 0x100053f, 0x053f }, + { "Armenian_ken", 0x100056f, 0x056f }, + { "Armenian_HO", 0x1000540, 0x0540 }, + { "Armenian_ho", 0x1000570, 0x0570 }, + { "Armenian_DZA", 0x1000541, 0x0541 }, + { "Armenian_dza", 0x1000571, 0x0571 }, + { "Armenian_GHAT", 0x1000542, 0x0542 }, + { "Armenian_ghat", 0x1000572, 0x0572 }, + { "Armenian_TCHE", 0x1000543, 0x0543 }, + { "Armenian_tche", 0x1000573, 0x0573 }, + { "Armenian_MEN", 0x1000544, 0x0544 }, + { "Armenian_men", 0x1000574, 0x0574 }, + { "Armenian_HI", 0x1000545, 0x0545 }, + { "Armenian_hi", 0x1000575, 0x0575 }, + { "Armenian_NU", 0x1000546, 0x0546 }, + { "Armenian_nu", 0x1000576, 0x0576 }, + { "Armenian_SHA", 0x1000547, 0x0547 }, + { "Armenian_sha", 0x1000577, 0x0577 }, + { "Armenian_VO", 0x1000548, 0x0548 }, + { "Armenian_vo", 0x1000578, 0x0578 }, + { "Armenian_CHA", 0x1000549, 0x0549 }, + { "Armenian_cha", 0x1000579, 0x0579 }, + { "Armenian_PE", 0x100054a, 0x054a }, + { "Armenian_pe", 0x100057a, 0x057a }, + { "Armenian_JE", 0x100054b, 0x054b }, + { "Armenian_je", 0x100057b, 0x057b }, + { "Armenian_RA", 0x100054c, 0x054c }, + { "Armenian_ra", 0x100057c, 0x057c }, + { "Armenian_SE", 0x100054d, 0x054d }, + { "Armenian_se", 0x100057d, 0x057d }, + { "Armenian_VEV", 0x100054e, 0x054e }, + { "Armenian_vev", 0x100057e, 0x057e }, + { "Armenian_TYUN", 0x100054f, 0x054f }, + { "Armenian_tyun", 0x100057f, 0x057f }, + { "Armenian_RE", 0x1000550, 0x0550 }, + { "Armenian_re", 0x1000580, 0x0580 }, + { "Armenian_TSO", 0x1000551, 0x0551 }, + { "Armenian_tso", 0x1000581, 0x0581 }, + { "Armenian_VYUN", 0x1000552, 0x0552 }, + { "Armenian_vyun", 0x1000582, 0x0582 }, + { "Armenian_PYUR", 0x1000553, 0x0553 }, + { "Armenian_pyur", 0x1000583, 0x0583 }, + { "Armenian_KE", 0x1000554, 0x0554 }, + { "Armenian_ke", 0x1000584, 0x0584 }, + { "Armenian_O", 0x1000555, 0x0555 }, + { "Armenian_o", 0x1000585, 0x0585 }, + { "Armenian_FE", 0x1000556, 0x0556 }, + { "Armenian_fe", 0x1000586, 0x0586 }, + { "Armenian_apostrophe", 0x100055a, 0x055a }, + { "Georgian_an", 0x10010d0, 0x10d0 }, + { "Georgian_ban", 0x10010d1, 0x10d1 }, + { "Georgian_gan", 0x10010d2, 0x10d2 }, + { "Georgian_don", 0x10010d3, 0x10d3 }, + { "Georgian_en", 0x10010d4, 0x10d4 }, + { "Georgian_vin", 0x10010d5, 0x10d5 }, + { "Georgian_zen", 0x10010d6, 0x10d6 }, + { "Georgian_tan", 0x10010d7, 0x10d7 }, + { "Georgian_in", 0x10010d8, 0x10d8 }, + { "Georgian_kan", 0x10010d9, 0x10d9 }, + { "Georgian_las", 0x10010da, 0x10da }, + { "Georgian_man", 0x10010db, 0x10db }, + { "Georgian_nar", 0x10010dc, 0x10dc }, + { "Georgian_on", 0x10010dd, 0x10dd }, + { "Georgian_par", 0x10010de, 0x10de }, + { "Georgian_zhar", 0x10010df, 0x10df }, + { "Georgian_rae", 0x10010e0, 0x10e0 }, + { "Georgian_san", 0x10010e1, 0x10e1 }, + { "Georgian_tar", 0x10010e2, 0x10e2 }, + { "Georgian_un", 0x10010e3, 0x10e3 }, + { "Georgian_phar", 0x10010e4, 0x10e4 }, + { "Georgian_khar", 0x10010e5, 0x10e5 }, + { "Georgian_ghan", 0x10010e6, 0x10e6 }, + { "Georgian_qar", 0x10010e7, 0x10e7 }, + { "Georgian_shin", 0x10010e8, 0x10e8 }, + { "Georgian_chin", 0x10010e9, 0x10e9 }, + { "Georgian_can", 0x10010ea, 0x10ea }, + { "Georgian_jil", 0x10010eb, 0x10eb }, + { "Georgian_cil", 0x10010ec, 0x10ec }, + { "Georgian_char", 0x10010ed, 0x10ed }, + { "Georgian_xan", 0x10010ee, 0x10ee }, + { "Georgian_jhan", 0x10010ef, 0x10ef }, + { "Georgian_hae", 0x10010f0, 0x10f0 }, + { "Georgian_he", 0x10010f1, 0x10f1 }, + { "Georgian_hie", 0x10010f2, 0x10f2 }, + { "Georgian_we", 0x10010f3, 0x10f3 }, + { "Georgian_har", 0x10010f4, 0x10f4 }, + { "Georgian_hoe", 0x10010f5, 0x10f5 }, + { "Georgian_fi", 0x10010f6, 0x10f6 }, + { "Xabovedot", 0x1001e8a, 0x1e8a }, + { "Ibreve", 0x100012c, 0x012c }, + { "Zstroke", 0x10001b5, 0x01b5 }, + { "Gcaron", 0x10001e6, 0x01e6 }, + { "Ocaron", 0x10001d1, 0x01d2 }, + { "Obarred", 0x100019f, 0x019f }, + { "xabovedot", 0x1001e8b, 0x1e8b }, + { "ibreve", 0x100012d, 0x012d }, + { "zstroke", 0x10001b6, 0x01b6 }, + { "gcaron", 0x10001e7, 0x01e7 }, + { "ocaron", 0x10001d2, 0x01d2 }, + { "obarred", 0x1000275, 0x0275 }, + { "SCHWA", 0x100018f, 0x018f }, + { "schwa", 0x1000259, 0x0259 }, + { "EZH", 0x10001b7, 0x01b7 }, + { "ezh", 0x1000292, 0x0292 }, + { "Lbelowdot", 0x1001e36, 0x1e36 }, + { "lbelowdot", 0x1001e37, 0x1e37 }, + { "Abelowdot", 0x1001ea0, 0x1ea0 }, + { "abelowdot", 0x1001ea1, 0x1ea1 }, + { "Ahook", 0x1001ea2, 0x1ea2 }, + { "ahook", 0x1001ea3, 0x1ea3 }, + { "Acircumflexacute", 0x1001ea4, 0x1ea4 }, + { "acircumflexacute", 0x1001ea5, 0x1ea5 }, + { "Acircumflexgrave", 0x1001ea6, 0x1ea6 }, + { "acircumflexgrave", 0x1001ea7, 0x1ea7 }, + { "Acircumflexhook", 0x1001ea8, 0x1ea8 }, + { "acircumflexhook", 0x1001ea9, 0x1ea9 }, + { "Acircumflextilde", 0x1001eaa, 0x1eaa }, + { "acircumflextilde", 0x1001eab, 0x1eab }, + { "Acircumflexbelowdot", 0x1001eac, 0x1eac }, + { "acircumflexbelowdot", 0x1001ead, 0x1ead }, + { "Abreveacute", 0x1001eae, 0x1eae }, + { "abreveacute", 0x1001eaf, 0x1eaf }, + { "Abrevegrave", 0x1001eb0, 0x1eb0 }, + { "abrevegrave", 0x1001eb1, 0x1eb1 }, + { "Abrevehook", 0x1001eb2, 0x1eb2 }, + { "abrevehook", 0x1001eb3, 0x1eb3 }, + { "Abrevetilde", 0x1001eb4, 0x1eb4 }, + { "abrevetilde", 0x1001eb5, 0x1eb5 }, + { "Abrevebelowdot", 0x1001eb6, 0x1eb6 }, + { "abrevebelowdot", 0x1001eb7, 0x1eb7 }, + { "Ebelowdot", 0x1001eb8, 0x1eb8 }, + { "ebelowdot", 0x1001eb9, 0x1eb9 }, + { "Ehook", 0x1001eba, 0x1eba }, + { "ehook", 0x1001ebb, 0x1ebb }, + { "Etilde", 0x1001ebc, 0x1ebc }, + { "etilde", 0x1001ebd, 0x1ebd }, + { "Ecircumflexacute", 0x1001ebe, 0x1ebe }, + { "ecircumflexacute", 0x1001ebf, 0x1ebf }, + { "Ecircumflexgrave", 0x1001ec0, 0x1ec0 }, + { "ecircumflexgrave", 0x1001ec1, 0x1ec1 }, + { "Ecircumflexhook", 0x1001ec2, 0x1ec2 }, + { "ecircumflexhook", 0x1001ec3, 0x1ec3 }, + { "Ecircumflextilde", 0x1001ec4, 0x1ec4 }, + { "ecircumflextilde", 0x1001ec5, 0x1ec5 }, + { "Ecircumflexbelowdot", 0x1001ec6, 0x1ec6 }, + { "ecircumflexbelowdot", 0x1001ec7, 0x1ec7 }, + { "Ihook", 0x1001ec8, 0x1ec8 }, + { "ihook", 0x1001ec9, 0x1ec9 }, + { "Ibelowdot", 0x1001eca, 0x1eca }, + { "ibelowdot", 0x1001ecb, 0x1ecb }, + { "Obelowdot", 0x1001ecc, 0x1ecc }, + { "obelowdot", 0x1001ecd, 0x1ecd }, + { "Ohook", 0x1001ece, 0x1ece }, + { "ohook", 0x1001ecf, 0x1ecf }, + { "Ocircumflexacute", 0x1001ed0, 0x1ed0 }, + { "ocircumflexacute", 0x1001ed1, 0x1ed1 }, + { "Ocircumflexgrave", 0x1001ed2, 0x1ed2 }, + { "ocircumflexgrave", 0x1001ed3, 0x1ed3 }, + { "Ocircumflexhook", 0x1001ed4, 0x1ed4 }, + { "ocircumflexhook", 0x1001ed5, 0x1ed5 }, + { "Ocircumflextilde", 0x1001ed6, 0x1ed6 }, + { "ocircumflextilde", 0x1001ed7, 0x1ed7 }, + { "Ocircumflexbelowdot", 0x1001ed8, 0x1ed8 }, + { "ocircumflexbelowdot", 0x1001ed9, 0x1ed9 }, + { "Ohornacute", 0x1001eda, 0x1eda }, + { "ohornacute", 0x1001edb, 0x1edb }, + { "Ohorngrave", 0x1001edc, 0x1edc }, + { "ohorngrave", 0x1001edd, 0x1edd }, + { "Ohornhook", 0x1001ede, 0x1ede }, + { "ohornhook", 0x1001edf, 0x1edf }, + { "Ohorntilde", 0x1001ee0, 0x1ee0 }, + { "ohorntilde", 0x1001ee1, 0x1ee1 }, + { "Ohornbelowdot", 0x1001ee2, 0x1ee2 }, + { "ohornbelowdot", 0x1001ee3, 0x1ee3 }, + { "Ubelowdot", 0x1001ee4, 0x1ee4 }, + { "ubelowdot", 0x1001ee5, 0x1ee5 }, + { "Uhook", 0x1001ee6, 0x1ee6 }, + { "uhook", 0x1001ee7, 0x1ee7 }, + { "Uhornacute", 0x1001ee8, 0x1ee8 }, + { "uhornacute", 0x1001ee9, 0x1ee9 }, + { "Uhorngrave", 0x1001eea, 0x1eea }, + { "uhorngrave", 0x1001eeb, 0x1eeb }, + { "Uhornhook", 0x1001eec, 0x1eec }, + { "uhornhook", 0x1001eed, 0x1eed }, + { "Uhorntilde", 0x1001eee, 0x1eee }, + { "uhorntilde", 0x1001eef, 0x1eef }, + { "Uhornbelowdot", 0x1001ef0, 0x1ef0 }, + { "uhornbelowdot", 0x1001ef1, 0x1ef1 }, + { "Ybelowdot", 0x1001ef4, 0x1ef4 }, + { "ybelowdot", 0x1001ef5, 0x1ef5 }, + { "Yhook", 0x1001ef6, 0x1ef6 }, + { "yhook", 0x1001ef7, 0x1ef7 }, + { "Ytilde", 0x1001ef8, 0x1ef8 }, + { "ytilde", 0x1001ef9, 0x1ef9 }, + { "Ohorn", 0x10001a0, 0x01a0 }, + { "ohorn", 0x10001a1, 0x01a1 }, + { "Uhorn", 0x10001af, 0x01af }, + { "uhorn", 0x10001b0, 0x01b0 }, + { "EcuSign", 0x10020a0, 0x20a0 }, + { "ColonSign", 0x10020a1, 0x20a1 }, + { "CruzeiroSign", 0x10020a2, 0x20a2 }, + { "FFrancSign", 0x10020a3, 0x20a3 }, + { "LiraSign", 0x10020a4, 0x20a4 }, + { "MillSign", 0x10020a5, 0x20a5 }, + { "NairaSign", 0x10020a6, 0x20a6 }, + { "PesetaSign", 0x10020a7, 0x20a7 }, + { "RupeeSign", 0x10020a8, 0x20a8 }, + { "WonSign", 0x10020a9, 0x20a9 }, + { "NewSheqelSign", 0x10020aa, 0x20aa }, + { "DongSign", 0x10020ab, 0x20ab }, + { "EuroSign", 0x20ac, 0x20ac }, + { "zerosuperior", 0x1002070, 0x2070 }, + { "foursuperior", 0x1002074, 0x2074 }, + { "fivesuperior", 0x1002075, 0x2075 }, + { "sixsuperior", 0x1002076, 0x2076 }, + { "sevensuperior", 0x1002077, 0x2077 }, + { "eightsuperior", 0x1002078, 0x2078 }, + { "ninesuperior", 0x1002079, 0x2079 }, + { "zerosubscript", 0x1002080, 0x2080 }, + { "onesubscript", 0x1002081, 0x2081 }, + { "twosubscript", 0x1002082, 0x2082 }, + { "threesubscript", 0x1002083, 0x2083 }, + { "foursubscript", 0x1002084, 0x2084 }, + { "fivesubscript", 0x1002085, 0x2085 }, + { "sixsubscript", 0x1002086, 0x2086 }, + { "sevensubscript", 0x1002087, 0x2087 }, + { "eightsubscript", 0x1002088, 0x2088 }, + { "ninesubscript", 0x1002089, 0x2089 }, + { "partdifferential", 0x1002202, 0x2202 }, + { "emptyset", 0x1002205, 0x2205 }, + { "elementof", 0x1002208, 0x2208 }, + { "notelementof", 0x1002209, 0x2209 }, + { "containsas", 0x100220b, 0x220b }, + { "squareroot", 0x100221a, 0x221a }, + { "cuberoot", 0x100221b, 0x221b }, + { "fourthroot", 0x100221c, 0x221c }, + { "dintegral", 0x100222c, 0x222c }, + { "tintegral", 0x100222d, 0x222d }, + { "because", 0x1002235, 0x2235 }, + { "approxeq", 0x1002248, 0x2245 }, + { "notapproxeq", 0x1002247, 0x2247 }, + { "notidentical", 0x1002262, 0x2262 }, + { "stricteq", 0x1002263, 0x2263 }, + { "braille_dot_1", 0xfff1, 0x0000 }, + { "braille_dot_2", 0xfff2, 0x0000 }, + { "braille_dot_3", 0xfff3, 0x0000 }, + { "braille_dot_4", 0xfff4, 0x0000 }, + { "braille_dot_5", 0xfff5, 0x0000 }, + { "braille_dot_6", 0xfff6, 0x0000 }, + { "braille_dot_7", 0xfff7, 0x0000 }, + { "braille_dot_8", 0xfff8, 0x0000 }, + { "braille_dot_9", 0xfff9, 0x0000 }, + { "braille_dot_10", 0xfffa, 0x0000 }, + { "braille_blank", 0x1002800, 0x2800 }, + { "braille_dots_1", 0x1002801, 0x2801 }, + { "braille_dots_2", 0x1002802, 0x2802 }, + { "braille_dots_12", 0x1002803, 0x2803 }, + { "braille_dots_3", 0x1002804, 0x2804 }, + { "braille_dots_13", 0x1002805, 0x2805 }, + { "braille_dots_23", 0x1002806, 0x2806 }, + { "braille_dots_123", 0x1002807, 0x2807 }, + { "braille_dots_4", 0x1002808, 0x2808 }, + { "braille_dots_14", 0x1002809, 0x2809 }, + { "braille_dots_24", 0x100280a, 0x280a }, + { "braille_dots_124", 0x100280b, 0x280b }, + { "braille_dots_34", 0x100280c, 0x280c }, + { "braille_dots_134", 0x100280d, 0x280d }, + { "braille_dots_234", 0x100280e, 0x280e }, + { "braille_dots_1234", 0x100280f, 0x280f }, + { "braille_dots_5", 0x1002810, 0x2810 }, + { "braille_dots_15", 0x1002811, 0x2811 }, + { "braille_dots_25", 0x1002812, 0x2812 }, + { "braille_dots_125", 0x1002813, 0x2813 }, + { "braille_dots_35", 0x1002814, 0x2814 }, + { "braille_dots_135", 0x1002815, 0x2815 }, + { "braille_dots_235", 0x1002816, 0x2816 }, + { "braille_dots_1235", 0x1002817, 0x2817 }, + { "braille_dots_45", 0x1002818, 0x2818 }, + { "braille_dots_145", 0x1002819, 0x2819 }, + { "braille_dots_245", 0x100281a, 0x281a }, + { "braille_dots_1245", 0x100281b, 0x281b }, + { "braille_dots_345", 0x100281c, 0x281c }, + { "braille_dots_1345", 0x100281d, 0x281d }, + { "braille_dots_2345", 0x100281e, 0x281e }, + { "braille_dots_12345", 0x100281f, 0x281f }, + { "braille_dots_6", 0x1002820, 0x2820 }, + { "braille_dots_16", 0x1002821, 0x2821 }, + { "braille_dots_26", 0x1002822, 0x2822 }, + { "braille_dots_126", 0x1002823, 0x2823 }, + { "braille_dots_36", 0x1002824, 0x2824 }, + { "braille_dots_136", 0x1002825, 0x2825 }, + { "braille_dots_236", 0x1002826, 0x2826 }, + { "braille_dots_1236", 0x1002827, 0x2827 }, + { "braille_dots_46", 0x1002828, 0x2828 }, + { "braille_dots_146", 0x1002829, 0x2829 }, + { "braille_dots_246", 0x100282a, 0x282a }, + { "braille_dots_1246", 0x100282b, 0x282b }, + { "braille_dots_346", 0x100282c, 0x282c }, + { "braille_dots_1346", 0x100282d, 0x282d }, + { "braille_dots_2346", 0x100282e, 0x282e }, + { "braille_dots_12346", 0x100282f, 0x282f }, + { "braille_dots_56", 0x1002830, 0x2830 }, + { "braille_dots_156", 0x1002831, 0x2831 }, + { "braille_dots_256", 0x1002832, 0x2832 }, + { "braille_dots_1256", 0x1002833, 0x2833 }, + { "braille_dots_356", 0x1002834, 0x2834 }, + { "braille_dots_1356", 0x1002835, 0x2835 }, + { "braille_dots_2356", 0x1002836, 0x2836 }, + { "braille_dots_12356", 0x1002837, 0x2837 }, + { "braille_dots_456", 0x1002838, 0x2838 }, + { "braille_dots_1456", 0x1002839, 0x2839 }, + { "braille_dots_2456", 0x100283a, 0x283a }, + { "braille_dots_12456", 0x100283b, 0x283b }, + { "braille_dots_3456", 0x100283c, 0x283c }, + { "braille_dots_13456", 0x100283d, 0x283d }, + { "braille_dots_23456", 0x100283e, 0x283e }, + { "braille_dots_123456", 0x100283f, 0x283f }, + { "braille_dots_7", 0x1002840, 0x2840 }, + { "braille_dots_17", 0x1002841, 0x2841 }, + { "braille_dots_27", 0x1002842, 0x2842 }, + { "braille_dots_127", 0x1002843, 0x2843 }, + { "braille_dots_37", 0x1002844, 0x2844 }, + { "braille_dots_137", 0x1002845, 0x2845 }, + { "braille_dots_237", 0x1002846, 0x2846 }, + { "braille_dots_1237", 0x1002847, 0x2847 }, + { "braille_dots_47", 0x1002848, 0x2848 }, + { "braille_dots_147", 0x1002849, 0x2849 }, + { "braille_dots_247", 0x100284a, 0x284a }, + { "braille_dots_1247", 0x100284b, 0x284b }, + { "braille_dots_347", 0x100284c, 0x284c }, + { "braille_dots_1347", 0x100284d, 0x284d }, + { "braille_dots_2347", 0x100284e, 0x284e }, + { "braille_dots_12347", 0x100284f, 0x284f }, + { "braille_dots_57", 0x1002850, 0x2850 }, + { "braille_dots_157", 0x1002851, 0x2851 }, + { "braille_dots_257", 0x1002852, 0x2852 }, + { "braille_dots_1257", 0x1002853, 0x2853 }, + { "braille_dots_357", 0x1002854, 0x2854 }, + { "braille_dots_1357", 0x1002855, 0x2855 }, + { "braille_dots_2357", 0x1002856, 0x2856 }, + { "braille_dots_12357", 0x1002857, 0x2857 }, + { "braille_dots_457", 0x1002858, 0x2858 }, + { "braille_dots_1457", 0x1002859, 0x2859 }, + { "braille_dots_2457", 0x100285a, 0x285a }, + { "braille_dots_12457", 0x100285b, 0x285b }, + { "braille_dots_3457", 0x100285c, 0x285c }, + { "braille_dots_13457", 0x100285d, 0x285d }, + { "braille_dots_23457", 0x100285e, 0x285e }, + { "braille_dots_123457", 0x100285f, 0x285f }, + { "braille_dots_67", 0x1002860, 0x2860 }, + { "braille_dots_167", 0x1002861, 0x2861 }, + { "braille_dots_267", 0x1002862, 0x2862 }, + { "braille_dots_1267", 0x1002863, 0x2863 }, + { "braille_dots_367", 0x1002864, 0x2864 }, + { "braille_dots_1367", 0x1002865, 0x2865 }, + { "braille_dots_2367", 0x1002866, 0x2866 }, + { "braille_dots_12367", 0x1002867, 0x2867 }, + { "braille_dots_467", 0x1002868, 0x2868 }, + { "braille_dots_1467", 0x1002869, 0x2869 }, + { "braille_dots_2467", 0x100286a, 0x286a }, + { "braille_dots_12467", 0x100286b, 0x286b }, + { "braille_dots_3467", 0x100286c, 0x286c }, + { "braille_dots_13467", 0x100286d, 0x286d }, + { "braille_dots_23467", 0x100286e, 0x286e }, + { "braille_dots_123467", 0x100286f, 0x286f }, + { "braille_dots_567", 0x1002870, 0x2870 }, + { "braille_dots_1567", 0x1002871, 0x2871 }, + { "braille_dots_2567", 0x1002872, 0x2872 }, + { "braille_dots_12567", 0x1002873, 0x2873 }, + { "braille_dots_3567", 0x1002874, 0x2874 }, + { "braille_dots_13567", 0x1002875, 0x2875 }, + { "braille_dots_23567", 0x1002876, 0x2876 }, + { "braille_dots_123567", 0x1002877, 0x2877 }, + { "braille_dots_4567", 0x1002878, 0x2878 }, + { "braille_dots_14567", 0x1002879, 0x2879 }, + { "braille_dots_24567", 0x100287a, 0x287a }, + { "braille_dots_124567", 0x100287b, 0x287b }, + { "braille_dots_34567", 0x100287c, 0x287c }, + { "braille_dots_134567", 0x100287d, 0x287d }, + { "braille_dots_234567", 0x100287e, 0x287e }, + { "braille_dots_1234567", 0x100287f, 0x287f }, + { "braille_dots_8", 0x1002880, 0x2880 }, + { "braille_dots_18", 0x1002881, 0x2881 }, + { "braille_dots_28", 0x1002882, 0x2882 }, + { "braille_dots_128", 0x1002883, 0x2883 }, + { "braille_dots_38", 0x1002884, 0x2884 }, + { "braille_dots_138", 0x1002885, 0x2885 }, + { "braille_dots_238", 0x1002886, 0x2886 }, + { "braille_dots_1238", 0x1002887, 0x2887 }, + { "braille_dots_48", 0x1002888, 0x2888 }, + { "braille_dots_148", 0x1002889, 0x2889 }, + { "braille_dots_248", 0x100288a, 0x288a }, + { "braille_dots_1248", 0x100288b, 0x288b }, + { "braille_dots_348", 0x100288c, 0x288c }, + { "braille_dots_1348", 0x100288d, 0x288d }, + { "braille_dots_2348", 0x100288e, 0x288e }, + { "braille_dots_12348", 0x100288f, 0x288f }, + { "braille_dots_58", 0x1002890, 0x2890 }, + { "braille_dots_158", 0x1002891, 0x2891 }, + { "braille_dots_258", 0x1002892, 0x2892 }, + { "braille_dots_1258", 0x1002893, 0x2893 }, + { "braille_dots_358", 0x1002894, 0x2894 }, + { "braille_dots_1358", 0x1002895, 0x2895 }, + { "braille_dots_2358", 0x1002896, 0x2896 }, + { "braille_dots_12358", 0x1002897, 0x2897 }, + { "braille_dots_458", 0x1002898, 0x2898 }, + { "braille_dots_1458", 0x1002899, 0x2899 }, + { "braille_dots_2458", 0x100289a, 0x289a }, + { "braille_dots_12458", 0x100289b, 0x289b }, + { "braille_dots_3458", 0x100289c, 0x289c }, + { "braille_dots_13458", 0x100289d, 0x289d }, + { "braille_dots_23458", 0x100289e, 0x289e }, + { "braille_dots_123458", 0x100289f, 0x289f }, + { "braille_dots_68", 0x10028a0, 0x28a0 }, + { "braille_dots_168", 0x10028a1, 0x28a1 }, + { "braille_dots_268", 0x10028a2, 0x28a2 }, + { "braille_dots_1268", 0x10028a3, 0x28a3 }, + { "braille_dots_368", 0x10028a4, 0x28a4 }, + { "braille_dots_1368", 0x10028a5, 0x28a5 }, + { "braille_dots_2368", 0x10028a6, 0x28a6 }, + { "braille_dots_12368", 0x10028a7, 0x28a7 }, + { "braille_dots_468", 0x10028a8, 0x28a8 }, + { "braille_dots_1468", 0x10028a9, 0x28a9 }, + { "braille_dots_2468", 0x10028aa, 0x28aa }, + { "braille_dots_12468", 0x10028ab, 0x28ab }, + { "braille_dots_3468", 0x10028ac, 0x28ac }, + { "braille_dots_13468", 0x10028ad, 0x28ad }, + { "braille_dots_23468", 0x10028ae, 0x28ae }, + { "braille_dots_123468", 0x10028af, 0x28af }, + { "braille_dots_568", 0x10028b0, 0x28b0 }, + { "braille_dots_1568", 0x10028b1, 0x28b1 }, + { "braille_dots_2568", 0x10028b2, 0x28b2 }, + { "braille_dots_12568", 0x10028b3, 0x28b3 }, + { "braille_dots_3568", 0x10028b4, 0x28b4 }, + { "braille_dots_13568", 0x10028b5, 0x28b5 }, + { "braille_dots_23568", 0x10028b6, 0x28b6 }, + { "braille_dots_123568", 0x10028b7, 0x28b7 }, + { "braille_dots_4568", 0x10028b8, 0x28b8 }, + { "braille_dots_14568", 0x10028b9, 0x28b9 }, + { "braille_dots_24568", 0x10028ba, 0x28ba }, + { "braille_dots_124568", 0x10028bb, 0x28bb }, + { "braille_dots_34568", 0x10028bc, 0x28bc }, + { "braille_dots_134568", 0x10028bd, 0x28bd }, + { "braille_dots_234568", 0x10028be, 0x28be }, + { "braille_dots_1234568", 0x10028bf, 0x28bf }, + { "braille_dots_78", 0x10028c0, 0x28c0 }, + { "braille_dots_178", 0x10028c1, 0x28c1 }, + { "braille_dots_278", 0x10028c2, 0x28c2 }, + { "braille_dots_1278", 0x10028c3, 0x28c3 }, + { "braille_dots_378", 0x10028c4, 0x28c4 }, + { "braille_dots_1378", 0x10028c5, 0x28c5 }, + { "braille_dots_2378", 0x10028c6, 0x28c6 }, + { "braille_dots_12378", 0x10028c7, 0x28c7 }, + { "braille_dots_478", 0x10028c8, 0x28c8 }, + { "braille_dots_1478", 0x10028c9, 0x28c9 }, + { "braille_dots_2478", 0x10028ca, 0x28ca }, + { "braille_dots_12478", 0x10028cb, 0x28cb }, + { "braille_dots_3478", 0x10028cc, 0x28cc }, + { "braille_dots_13478", 0x10028cd, 0x28cd }, + { "braille_dots_23478", 0x10028ce, 0x28ce }, + { "braille_dots_123478", 0x10028cf, 0x28cf }, + { "braille_dots_578", 0x10028d0, 0x28d0 }, + { "braille_dots_1578", 0x10028d1, 0x28d1 }, + { "braille_dots_2578", 0x10028d2, 0x28d2 }, + { "braille_dots_12578", 0x10028d3, 0x28d3 }, + { "braille_dots_3578", 0x10028d4, 0x28d4 }, + { "braille_dots_13578", 0x10028d5, 0x28d5 }, + { "braille_dots_23578", 0x10028d6, 0x28d6 }, + { "braille_dots_123578", 0x10028d7, 0x28d7 }, + { "braille_dots_4578", 0x10028d8, 0x28d8 }, + { "braille_dots_14578", 0x10028d9, 0x28d9 }, + { "braille_dots_24578", 0x10028da, 0x28da }, + { "braille_dots_124578", 0x10028db, 0x28db }, + { "braille_dots_34578", 0x10028dc, 0x28dc }, + { "braille_dots_134578", 0x10028dd, 0x28dd }, + { "braille_dots_234578", 0x10028de, 0x28de }, + { "braille_dots_1234578", 0x10028df, 0x28df }, + { "braille_dots_678", 0x10028e0, 0x28e0 }, + { "braille_dots_1678", 0x10028e1, 0x28e1 }, + { "braille_dots_2678", 0x10028e2, 0x28e2 }, + { "braille_dots_12678", 0x10028e3, 0x28e3 }, + { "braille_dots_3678", 0x10028e4, 0x28e4 }, + { "braille_dots_13678", 0x10028e5, 0x28e5 }, + { "braille_dots_23678", 0x10028e6, 0x28e6 }, + { "braille_dots_123678", 0x10028e7, 0x28e7 }, + { "braille_dots_4678", 0x10028e8, 0x28e8 }, + { "braille_dots_14678", 0x10028e9, 0x28e9 }, + { "braille_dots_24678", 0x10028ea, 0x28ea }, + { "braille_dots_124678", 0x10028eb, 0x28eb }, + { "braille_dots_34678", 0x10028ec, 0x28ec }, + { "braille_dots_134678", 0x10028ed, 0x28ed }, + { "braille_dots_234678", 0x10028ee, 0x28ee }, + { "braille_dots_1234678", 0x10028ef, 0x28ef }, + { "braille_dots_5678", 0x10028f0, 0x28f0 }, + { "braille_dots_15678", 0x10028f1, 0x28f1 }, + { "braille_dots_25678", 0x10028f2, 0x28f2 }, + { "braille_dots_125678", 0x10028f3, 0x28f3 }, + { "braille_dots_35678", 0x10028f4, 0x28f4 }, + { "braille_dots_135678", 0x10028f5, 0x28f5 }, + { "braille_dots_235678", 0x10028f6, 0x28f6 }, + { "braille_dots_1235678", 0x10028f7, 0x28f7 }, + { "braille_dots_45678", 0x10028f8, 0x28f8 }, + { "braille_dots_145678", 0x10028f9, 0x28f9 }, + { "braille_dots_245678", 0x10028fa, 0x28fa }, + { "braille_dots_1245678", 0x10028fb, 0x28fb }, + { "braille_dots_345678", 0x10028fc, 0x28fc }, + { "braille_dots_1345678", 0x10028fd, 0x28fd }, + { "braille_dots_2345678", 0x10028fe, 0x28fe }, + { "braille_dots_12345678", 0x10028ff, 0x28ff }, + { "Sinh_ng", 0x1000d82, 0x0d82 }, + { "Sinh_h2", 0x1000d83, 0x0d83 }, + { "Sinh_a", 0x1000d85, 0x0d85 }, + { "Sinh_aa", 0x1000d86, 0x0d86 }, + { "Sinh_ae", 0x1000d87, 0x0d87 }, + { "Sinh_aee", 0x1000d88, 0x0d88 }, + { "Sinh_i", 0x1000d89, 0x0d89 }, + { "Sinh_ii", 0x1000d8a, 0x0d8a }, + { "Sinh_u", 0x1000d8b, 0x0d8b }, + { "Sinh_uu", 0x1000d8c, 0x0d8c }, + { "Sinh_ri", 0x1000d8d, 0x0d8d }, + { "Sinh_rii", 0x1000d8e, 0x0d8e }, + { "Sinh_lu", 0x1000d8f, 0x0d8f }, + { "Sinh_luu", 0x1000d90, 0x0d90 }, + { "Sinh_e", 0x1000d91, 0x0d91 }, + { "Sinh_ee", 0x1000d92, 0x0d92 }, + { "Sinh_ai", 0x1000d93, 0x0d93 }, + { "Sinh_o", 0x1000d94, 0x0d94 }, + { "Sinh_oo", 0x1000d95, 0x0d95 }, + { "Sinh_au", 0x1000d96, 0x0d96 }, + { "Sinh_ka", 0x1000d9a, 0x0d9a }, + { "Sinh_kha", 0x1000d9b, 0x0d9b }, + { "Sinh_ga", 0x1000d9c, 0x0d9c }, + { "Sinh_gha", 0x1000d9d, 0x0d9d }, + { "Sinh_ng2", 0x1000d9e, 0x0d9e }, + { "Sinh_nga", 0x1000d9f, 0x0d9f }, + { "Sinh_ca", 0x1000da0, 0x0da0 }, + { "Sinh_cha", 0x1000da1, 0x0da1 }, + { "Sinh_ja", 0x1000da2, 0x0da2 }, + { "Sinh_jha", 0x1000da3, 0x0da3 }, + { "Sinh_nya", 0x1000da4, 0x0da4 }, + { "Sinh_jnya", 0x1000da5, 0x0da5 }, + { "Sinh_nja", 0x1000da6, 0x0da6 }, + { "Sinh_tta", 0x1000da7, 0x0da7 }, + { "Sinh_ttha", 0x1000da8, 0x0da8 }, + { "Sinh_dda", 0x1000da9, 0x0da9 }, + { "Sinh_ddha", 0x1000daa, 0x0daa }, + { "Sinh_nna", 0x1000dab, 0x0dab }, + { "Sinh_ndda", 0x1000dac, 0x0dac }, + { "Sinh_tha", 0x1000dad, 0x0dad }, + { "Sinh_thha", 0x1000dae, 0x0dae }, + { "Sinh_dha", 0x1000daf, 0x0daf }, + { "Sinh_dhha", 0x1000db0, 0x0db0 }, + { "Sinh_na", 0x1000db1, 0x0db1 }, + { "Sinh_ndha", 0x1000db3, 0x0db3 }, + { "Sinh_pa", 0x1000db4, 0x0db4 }, + { "Sinh_pha", 0x1000db5, 0x0db5 }, + { "Sinh_ba", 0x1000db6, 0x0db6 }, + { "Sinh_bha", 0x1000db7, 0x0db7 }, + { "Sinh_ma", 0x1000db8, 0x0db8 }, + { "Sinh_mba", 0x1000db9, 0x0db9 }, + { "Sinh_ya", 0x1000dba, 0x0dba }, + { "Sinh_ra", 0x1000dbb, 0x0dbb }, + { "Sinh_la", 0x1000dbd, 0x0dbd }, + { "Sinh_va", 0x1000dc0, 0x0dc0 }, + { "Sinh_sha", 0x1000dc1, 0x0dc1 }, + { "Sinh_ssha", 0x1000dc2, 0x0dc2 }, + { "Sinh_sa", 0x1000dc3, 0x0dc3 }, + { "Sinh_ha", 0x1000dc4, 0x0dc4 }, + { "Sinh_lla", 0x1000dc5, 0x0dc5 }, + { "Sinh_fa", 0x1000dc6, 0x0dc6 }, + { "Sinh_al", 0x1000dca, 0x0dca }, + { "Sinh_aa2", 0x1000dcf, 0x0dcf }, + { "Sinh_ae2", 0x1000dd0, 0x0dd0 }, + { "Sinh_aee2", 0x1000dd1, 0x0dd1 }, + { "Sinh_i2", 0x1000dd2, 0x0dd2 }, + { "Sinh_ii2", 0x1000dd3, 0x0dd3 }, + { "Sinh_u2", 0x1000dd4, 0x0dd4 }, + { "Sinh_uu2", 0x1000dd6, 0x0dd6 }, + { "Sinh_ru2", 0x1000dd8, 0x0dd8 }, + { "Sinh_e2", 0x1000dd9, 0x0dd9 }, + { "Sinh_ee2", 0x1000dda, 0x0dda }, + { "Sinh_ai2", 0x1000ddb, 0x0ddb }, + { "Sinh_o2", 0x1000ddc, 0x0ddc }, + { "Sinh_oo2", 0x1000ddd, 0x0ddd }, + { "Sinh_au2", 0x1000dde, 0x0dde }, + { "Sinh_lu2", 0x1000ddf, 0x0ddf }, + { "Sinh_ruu2", 0x1000df2, 0x0df2 }, + { "Sinh_luu2", 0x1000df3, 0x0df3 }, + { "Sinh_kunddaliya", 0x1000df4, 0x0df4 }, + { NULL, 0x000, 0x0000 }, +}; diff --git a/spiceterm.c b/spiceterm.c index 5149bbf..b27f3b2 100644 --- a/spiceterm.c +++ b/spiceterm.c @@ -1613,6 +1613,7 @@ spiceterm_print_usage(const char *msg) fprintf(stderr, " --addr Bind to address \n"); fprintf(stderr, " --sasl Enable SASL based authentication\n"); fprintf(stderr, " --noauth Disable authentication\n"); + fprintf(stderr, " --keymap Spefify keymap (uses kvm keymap files)\n"); } int @@ -1641,12 +1642,13 @@ main (int argc, char** argv) { "permissions", required_argument, 0, 'P' }, { "port", required_argument, 0, 'p' }, { "addr", required_argument, 0, 'a' }, + { "keymap", required_argument, 0, 'k' }, { "noauth", no_argument, 0, 'n' }, { "sasl", no_argument, 0, 's' }, { NULL, 0, 0, 0 }, }; - while ((c = getopt_long(argc, argv, "nst:a:p:P:", long_options, NULL)) != -1) { + while ((c = getopt_long(argc, argv, "nkst:a:p:P:", long_options, NULL)) != -1) { switch (c) { case 'n': @@ -1655,6 +1657,9 @@ main (int argc, char** argv) case 's': opts.sasl = TRUE; break; + case 'k': + opts.keymap = optarg; + break; case 'A': pve_auth_set_path(optarg); break; diff --git a/spiceterm.h b/spiceterm.h index 3df2ef8..678fa05 100644 --- a/spiceterm.h +++ b/spiceterm.h @@ -28,6 +28,7 @@ typedef struct SpiceTermOptions { guint timeout; int port; char *addr; + char *keymap; gboolean noauth; gboolean sasl; } SpiceTermOptions; -- 2.39.2