aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/xterm/unicode
diff options
context:
space:
mode:
authorReinhard Tartler <siretart@tauware.de>2011-10-10 17:43:39 +0200
committerReinhard Tartler <siretart@tauware.de>2011-10-10 17:43:39 +0200
commitf4092abdf94af6a99aff944d6264bc1284e8bdd4 (patch)
tree2ac1c9cc16ceb93edb2c4382c088dac5aeafdf0f /nx-X11/programs/xterm/unicode
parenta840692edc9c6d19cd7c057f68e39c7d95eb767d (diff)
downloadnx-libs-f4092abdf94af6a99aff944d6264bc1284e8bdd4.tar.gz
nx-libs-f4092abdf94af6a99aff944d6264bc1284e8bdd4.tar.bz2
nx-libs-f4092abdf94af6a99aff944d6264bc1284e8bdd4.zip
Imported nx-X11-3.1.0-1.tar.gznx-X11/3.1.0-1
Summary: Imported nx-X11-3.1.0-1.tar.gz Keywords: Imported nx-X11-3.1.0-1.tar.gz into Git repository
Diffstat (limited to 'nx-X11/programs/xterm/unicode')
-rw-r--r--nx-X11/programs/xterm/unicode/README24
-rw-r--r--nx-X11/programs/xterm/unicode/convmap.pl177
-rw-r--r--nx-X11/programs/xterm/unicode/keysym.map1062
-rw-r--r--nx-X11/programs/xterm/unicode/make-precompose.sh8
-rw-r--r--nx-X11/programs/xterm/unicode/precompose.c.head16
-rw-r--r--nx-X11/programs/xterm/unicode/precompose.c.tail23
6 files changed, 1310 insertions, 0 deletions
diff --git a/nx-X11/programs/xterm/unicode/README b/nx-X11/programs/xterm/unicode/README
new file mode 100644
index 000000000..a6b4fb1db
--- /dev/null
+++ b/nx-X11/programs/xterm/unicode/README
@@ -0,0 +1,24 @@
+-- $XTermId: README,v 1.10 2004/12/01 01:27:49 tom Exp $
+-- $XFree86: xc/programs/xterm/unicode/README,v 1.5 2004/12/01 01:27:49 dickey Exp $
+-- Thomas E. Dickey
+
+These are some scripts and datafiles used for generating tables used in the
+experimental UTF-8 implementation in xterm.
+
+To run the convmap.pl script, you will need a copy of UnicodeData-Latest.txt
+which is currently available as
+
+ ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
+
+It is a large file (~877kb), so it is not included in this distribution.
+
+convmap.pl is used to generate ../keysym2ucs.c, e.g.,
+
+ ./convmap.pl >../keysym2ucs.c
+
+keysym.map is input data for convmap.pl
+
+
+The make-precompose.sh script makes the precompose.c file, which is used to
+handle canonical composition. This also needs UnicodeData-Latest.txt. It uses
+precompose.c.head and precompose.c.tail as templates.
diff --git a/nx-X11/programs/xterm/unicode/convmap.pl b/nx-X11/programs/xterm/unicode/convmap.pl
new file mode 100644
index 000000000..aa85b6fb7
--- /dev/null
+++ b/nx-X11/programs/xterm/unicode/convmap.pl
@@ -0,0 +1,177 @@
+#!/usr/bin/perl
+# Generate keysym2ucs.c file
+#
+# $XFree86: xc/programs/xterm/unicode/convmap.pl,v 1.5 2000/01/24 22:22:05 dawes Exp $
+
+sub utf8 ($) {
+ my $c = shift(@_);
+
+ if ($c < 0x80) {
+ return sprintf("%c", $c);
+ } elsif ($c < 0x800) {
+ return sprintf("%c%c", 0xc0 | ($c >> 6), 0x80 | ($c & 0x3f));
+ } elsif ($c < 0x10000) {
+ return sprintf("%c%c%c",
+ 0xe0 | ($c >> 12),
+ 0x80 | (($c >> 6) & 0x3f),
+ 0x80 | ( $c & 0x3f));
+ } elsif ($c < 0x200000) {
+ return sprintf("%c%c%c%c",
+ 0xf0 | ($c >> 18),
+ 0x80 | (($c >> 12) & 0x3f),
+ 0x80 | (($c >> 6) & 0x3f),
+ 0x80 | ( $c & 0x3f));
+ } elsif ($c < 0x4000000) {
+ return sprintf("%c%c%c%c%c",
+ 0xf8 | ($c >> 24),
+ 0x80 | (($c >> 18) & 0x3f),
+ 0x80 | (($c >> 12) & 0x3f),
+ 0x80 | (($c >> 6) & 0x3f),
+ 0x80 | ( $c & 0x3f));
+
+ } elsif ($c < 0x80000000) {
+ return sprintf("%c%c%c%c%c%c",
+ 0xfe | ($c >> 30),
+ 0x80 | (($c >> 24) & 0x3f),
+ 0x80 | (($c >> 18) & 0x3f),
+ 0x80 | (($c >> 12) & 0x3f),
+ 0x80 | (($c >> 6) & 0x3f),
+ 0x80 | ( $c & 0x3f));
+ } else {
+ return utf8(0xfffd);
+ }
+}
+
+$unicodedata = "UnicodeData-Latest.txt";
+
+# read list of all Unicode names
+if (!open(UDATA, $unicodedata) && !open(UDATA, "$unicodedata")) {
+ die ("Can't open Unicode database '$unicodedata':\n$!\n\n" .
+ "Please make sure that you have downloaded the file\n" .
+ "ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData-Latest.txt\n");
+}
+while (<UDATA>) {
+ if (/^([0-9,A-F]{4});([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*)$/) {
+ $name{hex($1)} = $2;
+ } else {
+ die("Syntax error in line '$_' in file '$unicodedata'");
+ }
+}
+close(UDATA);
+
+# read mapping (from http://wsinwp07.win.tue.nl:1234/unicode/keysym.map)
+open(LIST, "<keysym.map") || die ("Can't open map file:\n$!\n");
+while (<LIST>) {
+ if (/^0x([0-9a-f]{4})\s+U([0-9a-f]{4})\s*(\#.*)?$/){
+ $keysym = hex($1);
+ $ucs = hex($2);
+ $keysym_to_ucs{$keysym} = $ucs;
+ } elsif (/^\s*\#/ || /^\s*$/) {
+ } else {
+ die("Syntax error in 'list' in line\n$_\n");
+ }
+}
+close(LIST);
+
+# read entries in keysymdef.h
+open(LIST, "</usr/include/X11/keysymdef.h") || die ("Can't open keysymdef.h:\n$!\n");
+while (<LIST>) {
+ if (/^\#define\s+XK_([A-Za-z_0-9]+)\s+0x([0-9a-fA-F]+)\s*(\/.*)?$/) {
+ next if /\/\* deprecated \*\//;
+ $keysymname = $1;
+ $keysym = hex($2);
+ $keysym_to_keysymname{$keysym} = $keysymname;
+ }
+}
+close(LIST);
+
+print <<EOT;
+/* \$XFree86\$
+ * This module converts keysym values into the corresponding ISO 10646-1
+ * (UCS, Unicode) values.
+ *
+ * The array keysymtab[] contains pairs of X11 keysym values for graphical
+ * characters and the corresponding Unicode value. The function
+ * keysym2ucs() maps a keysym onto a Unicode value using a binary search,
+ * therefore keysymtab[] must remain SORTED by keysym value.
+ *
+ * The keysym -> UTF-8 conversion will hopefully one day be provided
+ * by Xlib via XmbLookupString() and should ideally not have to be
+ * done in X applications. But we are not there yet.
+ *
+ * We allow to represent any UCS character in the range U+00000000 to
+ * U+00FFFFFF by a keysym value in the range 0x01000000 to 0x01ffffff.
+ * This admittedly does not cover the entire 31-bit space of UCS, but
+ * it does cover all of the characters up to U+10FFFF, which can be
+ * represented by UTF-16, and more, and it is very unlikely that higher
+ * UCS codes will ever be assigned by ISO. So to get Unicode character
+ * U+ABCD you can directly use keysym 0x1000abcd.
+ *
+ * NOTE: The comments in the table below contain the actual character
+ * encoded in UTF-8, so for viewing and editing best use an editor in
+ * UTF-8 mode.
+ *
+ * Author: Markus G. Kuhn <mkuhn\@acm.org>, University of Cambridge, June 1999
+ *
+ * Special thanks to Richard Verhoeven <river\@win.tue.nl> for preparing
+ * an initial draft of the mapping table.
+ *
+ * This software is in the public domain. Share and enjoy!
+ */
+
+#include <keysym2ucs.h>
+
+struct codepair {
+ unsigned short keysym;
+ unsigned short ucs;
+} keysymtab[] = {
+EOT
+
+for $keysym (sort {$a <=> $b} keys(%keysym_to_keysymname)) {
+ $ucs = $keysym_to_ucs{$keysym};
+ next if $keysym >= 0xf000 || $keysym < 0x100;
+ if ($ucs) {
+ printf(" { 0x%04x, 0x%04x }, /*%28s %s %s */\n",
+ $keysym, $ucs, $keysym_to_keysymname{$keysym}, utf8($ucs),
+ defined($name{$ucs}) ? $name{$ucs} : "???" );
+ } else {
+ printf("/* 0x%04x %39s ? ??? */\n",
+ $keysym, $keysym_to_keysymname{$keysym});
+ }
+}
+
+print <<EOT;
+};
+
+long keysym2ucs(KeySym keysym)
+{
+ int min = 0;
+ int max = sizeof(keysymtab) / sizeof(struct codepair) - 1;
+ int mid;
+
+ /* first check for Latin-1 characters (1:1 mapping) */
+ if ((keysym >= 0x0020 && keysym <= 0x007e) ||
+ (keysym >= 0x00a0 && keysym <= 0x00ff))
+ return keysym;
+
+ /* also check for directly encoded 24-bit UCS characters */
+ if ((keysym & 0xff000000) == 0x01000000)
+ return keysym & 0x00ffffff;
+
+ /* binary search in table */
+ while (max >= min) {
+ mid = (min + max) / 2;
+ if (keysymtab[mid].keysym < keysym)
+ min = mid + 1;
+ else if (keysymtab[mid].keysym > keysym)
+ max = mid - 1;
+ else {
+ /* found it */
+ return keysymtab[mid].ucs;
+ }
+ }
+
+ /* no matching Unicode value found */
+ return -1;
+}
+EOT
diff --git a/nx-X11/programs/xterm/unicode/keysym.map b/nx-X11/programs/xterm/unicode/keysym.map
new file mode 100644
index 000000000..6e587bdc0
--- /dev/null
+++ b/nx-X11/programs/xterm/unicode/keysym.map
@@ -0,0 +1,1062 @@
+# This list can be used to convert X11 Keysyms to Unicode 2.1 character.
+# The list is not checked for correctness by Unicode officials. Use it
+# at your own risk and the creator is not responsable for any damage that
+# occured due to using this list.
+#
+# The list is created by looking at the Keysym names and the Unicode data
+# file. Other mapping tables were used as a reference where needed.
+# Due to a lack of knowledge of the Hebrew, Thai and Hangul symbols,
+# expect errors in these sections. The mapping of the keypad keys
+# might also require some adjustments.
+#
+# The following fields are used:
+# 1 The X11 keysym numbers from the include file keysymdef.h
+# 2 The Unicode (2.1) position (U0000 means unknown Unicode position)
+# #
+# 3 the name of the X11 keysym (without XK_)
+#
+# Authors: Richard Verhoeven, TUE, <river@win.tue.nl>
+# Markus Kuhn, University of Cambridge, <mkuhn@acm.org>
+#
+# You are free to use and modify this table. If you introduce errors
+# in the table, please remove the copyright line. If you remove errors,
+# please let me know, so I can update my version.
+#
+# $XFree86: xc/programs/xterm/unicode/keysym.map,v 1.1 1999/06/12 15:37:24 dawes Exp $
+#
+0x0020 U0020 # space
+0x0021 U0021 # exclam
+0x0022 U0022 # quotedbl
+0x0023 U0023 # numbersign
+0x0024 U0024 # dollar
+0x0025 U0025 # percent
+0x0026 U0026 # ampersand
+0x0027 U0027 # apostrophe
+0x0027 U0027 # quoteright /* deprecated */
+0x0028 U0028 # parenleft
+0x0029 U0029 # parenright
+0x002a U002a # asterisk
+0x002b U002b # plus
+0x002c U002c # comma
+0x002d U002d # minus
+0x002e U002e # period
+0x002f U002f # slash
+0x0030 U0030 # 0
+0x0031 U0031 # 1
+0x0032 U0032 # 2
+0x0033 U0033 # 3
+0x0034 U0034 # 4
+0x0035 U0035 # 5
+0x0036 U0036 # 6
+0x0037 U0037 # 7
+0x0038 U0038 # 8
+0x0039 U0039 # 9
+0x003a U003a # colon
+0x003b U003b # semicolon
+0x003c U003c # less
+0x003d U003d # equal
+0x003e U003e # greater
+0x003f U003f # question
+0x0040 U0040 # at
+0x0041 U0041 # A
+0x0042 U0042 # B
+0x0043 U0043 # C
+0x0044 U0044 # D
+0x0045 U0045 # E
+0x0046 U0046 # F
+0x0047 U0047 # G
+0x0048 U0048 # H
+0x0049 U0049 # I
+0x004a U004a # J
+0x004b U004b # K
+0x004c U004c # L
+0x004d U004d # M
+0x004e U004e # N
+0x004f U004f # O
+0x0050 U0050 # P
+0x0051 U0051 # Q
+0x0052 U0052 # R
+0x0053 U0053 # S
+0x0054 U0054 # T
+0x0055 U0055 # U
+0x0056 U0056 # V
+0x0057 U0057 # W
+0x0058 U0058 # X
+0x0059 U0059 # Y
+0x005a U005a # Z
+0x005b U005b # bracketleft
+0x005c U005c # backslash
+0x005d U005d # bracketright
+0x005e U005e # asciicircum
+0x005f U005f # underscore
+0x0060 U0060 # grave
+0x0060 U0060 # quoteleft /* deprecated */
+0x0061 U0061 # a
+0x0062 U0062 # b
+0x0063 U0063 # c
+0x0064 U0064 # d
+0x0065 U0065 # e
+0x0066 U0066 # f
+0x0067 U0067 # g
+0x0068 U0068 # h
+0x0069 U0069 # i
+0x006a U006a # j
+0x006b U006b # k
+0x006c U006c # l
+0x006d U006d # m
+0x006e U006e # n
+0x006f U006f # o
+0x0070 U0070 # p
+0x0071 U0071 # q
+0x0072 U0072 # r
+0x0073 U0073 # s
+0x0074 U0074 # t
+0x0075 U0075 # u
+0x0076 U0076 # v
+0x0077 U0077 # w
+0x0078 U0078 # x
+0x0079 U0079 # y
+0x007a U007a # z
+0x007b U007b # braceleft
+0x007c U007c # bar
+0x007d U007d # braceright
+0x007e U007e # asciitilde
+0x00a0 U00a0 # nobreakspace
+0x00a1 U00a1 # exclamdown
+0x00a2 U00a2 # cent
+0x00a3 U00a3 # sterling
+0x00a4 U00a4 # currency
+0x00a5 U00a5 # yen
+0x00a6 U00a6 # brokenbar
+0x00a7 U00a7 # section
+0x00a8 U00a8 # diaeresis
+0x00a9 U00a9 # copyright
+0x00aa U00aa # ordfeminine
+0x00ab U00ab # guillemotleft /* left angle quotation mark */
+0x00ac U00ac # notsign
+0x00ad U00ad # hyphen
+0x00ae U00ae # registered
+0x00af U00af # macron
+0x00b0 U00b0 # degree
+0x00b1 U00b1 # plusminus
+0x00b2 U00b2 # twosuperior
+0x00b3 U00b3 # threesuperior
+0x00b4 U00b4 # acute
+0x00b5 U00b5 # mu
+0x00b6 U00b6 # paragraph
+0x00b7 U00b7 # periodcentered
+0x00b8 U00b8 # cedilla
+0x00b9 U00b9 # onesuperior
+0x00ba U00ba # masculine
+0x00bb U00bb # guillemotright /* right angle quotation mark */
+0x00bc U00bc # onequarter
+0x00bd U00bd # onehalf
+0x00be U00be # threequarters
+0x00bf U00bf # questiondown
+0x00c0 U00c0 # Agrave
+0x00c1 U00c1 # Aacute
+0x00c2 U00c2 # Acircumflex
+0x00c3 U00c3 # Atilde
+0x00c4 U00c4 # Adiaeresis
+0x00c5 U00c5 # Aring
+0x00c6 U00c6 # AE
+0x00c7 U00c7 # Ccedilla
+0x00c8 U00c8 # Egrave
+0x00c9 U00c9 # Eacute
+0x00ca U00ca # Ecircumflex
+0x00cb U00cb # Ediaeresis
+0x00cc U00cc # Igrave
+0x00cd U00cd # Iacute
+0x00ce U00ce # Icircumflex
+0x00cf U00cf # Idiaeresis
+0x00d0 U00d0 # ETH
+0x00d0 U00d0 # Eth /* deprecated */
+0x00d1 U00d1 # Ntilde
+0x00d2 U00d2 # Ograve
+0x00d3 U00d3 # Oacute
+0x00d4 U00d4 # Ocircumflex
+0x00d5 U00d5 # Otilde
+0x00d6 U00d6 # Odiaeresis
+0x00d7 U00d7 # multiply
+0x00d8 U00d8 # Ooblique
+0x00d9 U00d9 # Ugrave
+0x00da U00da # Uacute
+0x00db U00db # Ucircumflex
+0x00dc U00dc # Udiaeresis
+0x00dd U00dd # Yacute
+0x00de U00de # THORN
+0x00de U00de # Thorn /* deprecated */
+0x00df U00df # ssharp
+0x00e0 U00e0 # agrave
+0x00e1 U00e1 # aacute
+0x00e2 U00e2 # acircumflex
+0x00e3 U00e3 # atilde
+0x00e4 U00e4 # adiaeresis
+0x00e5 U00e5 # aring
+0x00e6 U00e6 # ae
+0x00e7 U00e7 # ccedilla
+0x00e8 U00e8 # egrave
+0x00e9 U00e9 # eacute
+0x00ea U00ea # ecircumflex
+0x00eb U00eb # ediaeresis
+0x00ec U00ec # igrave
+0x00ed U00ed # iacute
+0x00ee U00ee # icircumflex
+0x00ef U00ef # idiaeresis
+0x00f0 U00f0 # eth
+0x00f1 U00f1 # ntilde
+0x00f2 U00f2 # ograve
+0x00f3 U00f3 # oacute
+0x00f4 U00f4 # ocircumflex
+0x00f5 U00f5 # otilde
+0x00f6 U00f6 # odiaeresis
+0x00f7 U00f7 # division
+0x00f8 U00f8 # oslash
+0x00f9 U00f9 # ugrave
+0x00fa U00fa # uacute
+0x00fb U00fb # ucircumflex
+0x00fc U00fc # udiaeresis
+0x00fd U00fd # yacute
+0x00fe U00fe # thorn
+0x00ff U00ff # ydiaeresis
+0x01a1 U0104 # Aogonek
+0x01a2 U02d8 # breve
+0x01a3 U0141 # Lstroke
+0x01a5 U013d # Lcaron
+0x01a6 U015a # Sacute
+0x01a9 U0160 # Scaron
+0x01aa U015e # Scedilla
+0x01ab U0164 # Tcaron
+0x01ac U0179 # Zacute
+0x01ae U017d # Zcaron
+0x01af U017b # Zabovedot
+0x01b1 U0105 # aogonek
+0x01b2 U02db # ogonek
+0x01b3 U0142 # lstroke
+0x01b5 U013e # lcaron
+0x01b6 U015b # sacute
+0x01b7 U02c7 # caron
+0x01b9 U0161 # scaron
+0x01ba U015f # scedilla
+0x01bb U0165 # tcaron
+0x01bc U017a # zacute
+0x01bd U02dd # doubleacute
+0x01be U017e # zcaron
+0x01bf U017c # zabovedot
+0x01c0 U0154 # Racute
+0x01c3 U0102 # Abreve
+0x01c5 U0139 # Lacute
+0x01c6 U0106 # Cacute
+0x01c8 U010c # Ccaron
+0x01ca U0118 # Eogonek
+0x01cc U011a # Ecaron
+0x01cf U010e # Dcaron
+0x01d0 U0110 # Dstroke
+0x01d1 U0143 # Nacute
+0x01d2 U0147 # Ncaron
+0x01d5 U0150 # Odoubleacute
+0x01d8 U0158 # Rcaron
+0x01d9 U016e # Uring
+0x01db U0170 # Udoubleacute
+0x01de U0162 # Tcedilla
+0x01e0 U0155 # racute
+0x01e3 U0103 # abreve
+0x01e5 U013a # lacute
+0x01e6 U0107 # cacute
+0x01e8 U010d # ccaron
+0x01ea U0119 # eogonek
+0x01ec U011b # ecaron
+0x01ef U010f # dcaron
+0x01f0 U0111 # dstroke
+0x01f1 U0144 # nacute
+0x01f2 U0148 # ncaron
+0x01f5 U0151 # odoubleacute
+0x01f8 U0159 # rcaron
+0x01f9 U016f # uring
+0x01fb U0171 # udoubleacute
+0x01fe U0163 # tcedilla
+0x01ff U02d9 # abovedot
+0x02a1 U0126 # Hstroke
+0x02a6 U0124 # Hcircumflex
+0x02a9 U0130 # Iabovedot
+0x02ab U011e # Gbreve
+0x02ac U0134 # Jcircumflex
+0x02b1 U0127 # hstroke
+0x02b6 U0125 # hcircumflex
+0x02b9 U0131 # idotless
+0x02bb U011f # gbreve
+0x02bc U0135 # jcircumflex
+0x02c5 U010a # Cabovedot
+0x02c6 U0108 # Ccircumflex
+0x02d5 U0120 # Gabovedot
+0x02d8 U011c # Gcircumflex
+0x02dd U016c # Ubreve
+0x02de U015c # Scircumflex
+0x02e5 U010b # cabovedot
+0x02e6 U0109 # ccircumflex
+0x02f5 U0121 # gabovedot
+0x02f8 U011d # gcircumflex
+0x02fd U016d # ubreve
+0x02fe U015d # scircumflex
+0x03a2 U0138 # kra
+0x03a3 U0156 # Rcedilla
+0x03a5 U0128 # Itilde
+0x03a6 U013b # Lcedilla
+0x03aa U0112 # Emacron
+0x03ab U0122 # Gcedilla
+0x03ac U0166 # Tslash
+0x03b3 U0157 # rcedilla
+0x03b5 U0129 # itilde
+0x03b6 U013c # lcedilla
+0x03ba U0113 # emacron
+0x03bb U0123 # gcedilla
+0x03bc U0167 # tslash
+0x03bd U014a # ENG
+0x03bf U014b # eng
+0x03c0 U0100 # Amacron
+0x03c7 U012e # Iogonek
+0x03cc U0116 # Eabovedot
+0x03cf U012a # Imacron
+0x03d1 U0145 # Ncedilla
+0x03d2 U014c # Omacron
+0x03d3 U0136 # Kcedilla
+0x03d9 U0172 # Uogonek
+0x03dd U0168 # Utilde
+0x03de U016a # Umacron
+0x03e0 U0101 # amacron
+0x03e7 U012f # iogonek
+0x03ec U0117 # eabovedot
+0x03ef U012b # imacron
+0x03f1 U0146 # ncedilla
+0x03f2 U014d # omacron
+0x03f3 U0137 # kcedilla
+0x03f9 U0173 # uogonek
+0x03fd U0169 # utilde
+0x03fe U016b # umacron
+0x13bc U0152 # OE
+0x13bd U0153 # oe
+0x13be U0178 # Ydiaeresis
+0x047e U203e # overline
+0x04a1 U3002 # kana_fullstop
+0x04a2 U300c # kana_openingbracket
+0x04a3 U300d # kana_closingbracket
+0x04a4 U3001 # kana_comma
+0x04a5 U30fb # kana_conjunctive
+0x04a6 U30f2 # kana_WO
+0x04a7 U30a1 # kana_a
+0x04a8 U30a3 # kana_i
+0x04a9 U30a5 # kana_u
+0x04aa U30a7 # kana_e
+0x04ab U30a9 # kana_o
+0x04ac U30e3 # kana_ya
+0x04ad U30e5 # kana_yu
+0x04ae U30e7 # kana_yo
+0x04af U30c3 # kana_tsu
+0x04b0 U30fc # prolongedsound
+0x04b1 U30a2 # kana_A
+0x04b2 U30a4 # kana_I
+0x04b3 U30a6 # kana_U
+0x04b4 U30a8 # kana_E
+0x04b5 U30aa # kana_O
+0x04b6 U30ab # kana_KA
+0x04b7 U30ad # kana_KI
+0x04b8 U30af # kana_KU
+0x04b9 U30b1 # kana_KE
+0x04ba U30b3 # kana_KO
+0x04bb U30b5 # kana_SA
+0x04bc U30b7 # kana_SHI
+0x04bd U30b9 # kana_SU
+0x04be U30bb # kana_SE
+0x04bf U30bd # kana_SO
+0x04c0 U30bf # kana_TA
+0x04c1 U30c1 # kana_CHI
+0x04c2 U30c4 # kana_TSU
+0x04c3 U30c6 # kana_TE
+0x04c4 U30c8 # kana_TO
+0x04c5 U30ca # kana_NA
+0x04c6 U30cb # kana_NI
+0x04c7 U30cc # kana_NU
+0x04c8 U30cd # kana_NE
+0x04c9 U30ce # kana_NO
+0x04ca U30cf # kana_HA
+0x04cb U30d2 # kana_HI
+0x04cc U30d5 # kana_FU
+0x04cd U30d8 # kana_HE
+0x04ce U30db # kana_HO
+0x04cf U30de # kana_MA
+0x04d0 U30df # kana_MI
+0x04d1 U30e0 # kana_MU
+0x04d2 U30e1 # kana_ME
+0x04d3 U30e2 # kana_MO
+0x04d4 U30e4 # kana_YA
+0x04d5 U30e6 # kana_YU
+0x04d6 U30e8 # kana_YO
+0x04d7 U30e9 # kana_RA
+0x04d8 U30ea # kana_RI
+0x04d9 U30eb # kana_RU
+0x04da U30ec # kana_RE
+0x04db U30ed # kana_RO
+0x04dc U30ef # kana_WA
+0x04dd U30f3 # kana_N
+0x04de U309b # voicedsound
+0x04df U309c # semivoicedsound
+0x05ac U060c # Arabic_comma
+0x05bb U061b # Arabic_semicolon
+0x05bf U061f # Arabic_question_mark
+0x05c1 U0621 # Arabic_hamza
+0x05c2 U0622 # Arabic_maddaonalef
+0x05c3 U0623 # Arabic_hamzaonalef
+0x05c4 U0624 # Arabic_hamzaonwaw
+0x05c5 U0625 # Arabic_hamzaunderalef
+0x05c6 U0626 # Arabic_hamzaonyeh
+0x05c7 U0627 # Arabic_alef
+0x05c8 U0628 # Arabic_beh
+0x05c9 U0629 # Arabic_tehmarbuta
+0x05ca U062a # Arabic_teh
+0x05cb U062b # Arabic_theh
+0x05cc U062c # Arabic_jeem
+0x05cd U062d # Arabic_hah
+0x05ce U062e # Arabic_khah
+0x05cf U062f # Arabic_dal
+0x05d0 U0630 # Arabic_thal
+0x05d1 U0631 # Arabic_ra
+0x05d2 U0632 # Arabic_zain
+0x05d3 U0633 # Arabic_seen
+0x05d4 U0634 # Arabic_sheen
+0x05d5 U0635 # Arabic_sad
+0x05d6 U0636 # Arabic_dad
+0x05d7 U0637 # Arabic_tah
+0x05d8 U0638 # Arabic_zah
+0x05d9 U0639 # Arabic_ain
+0x05da U063a # Arabic_ghain
+0x05e0 U0640 # Arabic_tatweel
+0x05e1 U0641 # Arabic_feh
+0x05e2 U0642 # Arabic_qaf
+0x05e3 U0643 # Arabic_kaf
+0x05e4 U0644 # Arabic_lam
+0x05e5 U0645 # Arabic_meem
+0x05e6 U0646 # Arabic_noon
+0x05e7 U0647 # Arabic_ha
+0x05e8 U0648 # Arabic_waw
+0x05e9 U0649 # Arabic_alefmaksura
+0x05ea U064a # Arabic_yeh
+0x05eb U064b # Arabic_fathatan
+0x05ec U064c # Arabic_dammatan
+0x05ed U064d # Arabic_kasratan
+0x05ee U064e # Arabic_fatha
+0x05ef U064f # Arabic_damma
+0x05f0 U0650 # Arabic_kasra
+0x05f1 U0651 # Arabic_shadda
+0x05f2 U0652 # Arabic_sukun
+0x06a1 U0452 # Serbian_dje
+0x06a2 U0453 # Macedonia_gje
+0x06a3 U0451 # Cyrillic_io
+0x06a4 U0454 # Ukrainian_ie
+0x06a5 U0455 # Macedonia_dse
+0x06a6 U0456 # Ukrainian_i
+0x06a7 U0457 # Ukrainian_yi
+0x06a8 U0458 # Cyrillic_je
+0x06a9 U0459 # Cyrillic_lje
+0x06aa U045a # Cyrillic_nje
+0x06ab U045b # Serbian_tshe
+0x06ac U045c # Macedonia_kje
+0x06ae U045e # Byelorussian_shortu
+0x06af U045f # Cyrillic_dzhe
+0x06b0 U2116 # numerosign
+0x06b1 U0402 # Serbian_DJE
+0x06b2 U0403 # Macedonia_GJE
+0x06b3 U0401 # Cyrillic_IO
+0x06b4 U0404 # Ukrainian_IE
+0x06b5 U0405 # Macedonia_DSE
+0x06b6 U0406 # Ukrainian_I
+0x06b7 U0407 # Ukrainian_YI
+0x06b8 U0408 # Cyrillic_JE
+0x06b9 U0409 # Cyrillic_LJE
+0x06ba U040a # Cyrillic_NJE
+0x06bb U040b # Serbian_TSHE
+0x06bc U040c # Macedonia_KJE
+0x06be U040e # Byelorussian_SHORTU
+0x06bf U040f # Cyrillic_DZHE
+0x06c0 U044e # Cyrillic_yu
+0x06c1 U0430 # Cyrillic_a
+0x06c2 U0431 # Cyrillic_be
+0x06c3 U0446 # Cyrillic_tse
+0x06c4 U0434 # Cyrillic_de
+0x06c5 U0435 # Cyrillic_ie
+0x06c6 U0444 # Cyrillic_ef
+0x06c7 U0433 # Cyrillic_ghe
+0x06c8 U0445 # Cyrillic_ha
+0x06c9 U0438 # Cyrillic_i
+0x06ca U0439 # Cyrillic_shorti
+0x06cb U043a # Cyrillic_ka
+0x06cc U043b # Cyrillic_el
+0x06cd U043c # Cyrillic_em
+0x06ce U043d # Cyrillic_en
+0x06cf U043e # Cyrillic_o
+0x06d0 U043f # Cyrillic_pe
+0x06d1 U044f # Cyrillic_ya
+0x06d2 U0440 # Cyrillic_er
+0x06d3 U0441 # Cyrillic_es
+0x06d4 U0442 # Cyrillic_te
+0x06d5 U0443 # Cyrillic_u
+0x06d6 U0436 # Cyrillic_zhe
+0x06d7 U0432 # Cyrillic_ve
+0x06d8 U044c # Cyrillic_softsign
+0x06d9 U044b # Cyrillic_yeru
+0x06da U0437 # Cyrillic_ze
+0x06db U0448 # Cyrillic_sha
+0x06dc U044d # Cyrillic_e
+0x06dd U0449 # Cyrillic_shcha
+0x06de U0447 # Cyrillic_che
+0x06df U044a # Cyrillic_hardsign
+0x06e0 U042e # Cyrillic_YU
+0x06e1 U0410 # Cyrillic_A
+0x06e2 U0411 # Cyrillic_BE
+0x06e3 U0426 # Cyrillic_TSE
+0x06e4 U0414 # Cyrillic_DE
+0x06e5 U0415 # Cyrillic_IE
+0x06e6 U0424 # Cyrillic_EF
+0x06e7 U0413 # Cyrillic_GHE
+0x06e8 U0425 # Cyrillic_HA
+0x06e9 U0418 # Cyrillic_I
+0x06ea U0419 # Cyrillic_SHORTI
+0x06eb U041a # Cyrillic_KA
+0x06ec U041b # Cyrillic_EL
+0x06ed U041c # Cyrillic_EM
+0x06ee U041d # Cyrillic_EN
+0x06ef U041e # Cyrillic_O
+0x06f0 U041f # Cyrillic_PE
+0x06f1 U042f # Cyrillic_YA
+0x06f2 U0420 # Cyrillic_ER
+0x06f3 U0421 # Cyrillic_ES
+0x06f4 U0422 # Cyrillic_TE
+0x06f5 U0423 # Cyrillic_U
+0x06f6 U0416 # Cyrillic_ZHE
+0x06f7 U0412 # Cyrillic_VE
+0x06f8 U042c # Cyrillic_SOFTSIGN
+0x06f9 U042b # Cyrillic_YERU
+0x06fa U0417 # Cyrillic_ZE
+0x06fb U0428 # Cyrillic_SHA
+0x06fc U042d # Cyrillic_E
+0x06fd U0429 # Cyrillic_SHCHA
+0x06fe U0427 # Cyrillic_CHE
+0x06ff U042a # Cyrillic_HARDSIGN
+0x07a1 U0386 # Greek_ALPHAaccent
+0x07a2 U0388 # Greek_EPSILONaccent
+0x07a3 U0389 # Greek_ETAaccent
+0x07a4 U038a # Greek_IOTAaccent
+0x07a5 U03aa # Greek_IOTAdiaeresis
+0x07a7 U038c # Greek_OMICRONaccent
+0x07a8 U038e # Greek_UPSILONaccent
+0x07a9 U03ab # Greek_UPSILONdieresis
+0x07ab U038f # Greek_OMEGAaccent
+0x07ae U0385 # Greek_accentdieresis
+0x07af U2015 # Greek_horizbar
+0x07b1 U03ac # Greek_alphaaccent
+0x07b2 U03ad # Greek_epsilonaccent
+0x07b3 U03ae # Greek_etaaccent
+0x07b4 U03af # Greek_iotaaccent
+0x07b5 U03ca # Greek_iotadieresis
+0x07b6 U0390 # Greek_iotaaccentdieresis
+0x07b7 U03cc # Greek_omicronaccent
+0x07b8 U03cd # Greek_upsilonaccent
+0x07b9 U03cb # Greek_upsilondieresis
+0x07ba U03b0 # Greek_upsilonaccentdieresis
+0x07bb U03ce # Greek_omegaaccent
+0x07c1 U0391 # Greek_ALPHA
+0x07c2 U0392 # Greek_BETA
+0x07c3 U0393 # Greek_GAMMA
+0x07c4 U0394 # Greek_DELTA
+0x07c5 U0395 # Greek_EPSILON
+0x07c6 U0396 # Greek_ZETA
+0x07c7 U0397 # Greek_ETA
+0x07c8 U0398 # Greek_THETA
+0x07c9 U0399 # Greek_IOTA
+0x07ca U039a # Greek_KAPPA
+0x07cb U039b # Greek_LAMBDA
+0x07cb U039b # Greek_LAMDA
+0x07cc U039c # Greek_MU
+0x07cd U039d # Greek_NU
+0x07ce U039e # Greek_XI
+0x07cf U039f # Greek_OMICRON
+0x07d0 U03a0 # Greek_PI
+0x07d1 U03a1 # Greek_RHO
+0x07d2 U03a3 # Greek_SIGMA
+0x07d4 U03a4 # Greek_TAU
+0x07d5 U03a5 # Greek_UPSILON
+0x07d6 U03a6 # Greek_PHI
+0x07d7 U03a7 # Greek_CHI
+0x07d8 U03a8 # Greek_PSI
+0x07d9 U03a9 # Greek_OMEGA
+0x07e1 U03b1 # Greek_alpha
+0x07e2 U03b2 # Greek_beta
+0x07e3 U03b3 # Greek_gamma
+0x07e4 U03b4 # Greek_delta
+0x07e5 U03b5 # Greek_epsilon
+0x07e6 U03b6 # Greek_zeta
+0x07e7 U03b7 # Greek_eta
+0x07e8 U03b8 # Greek_theta
+0x07e9 U03b9 # Greek_iota
+0x07ea U03ba # Greek_kappa
+0x07eb U03bb # Greek_lambda
+0x07ec U03bc # Greek_mu
+0x07ed U03bd # Greek_nu
+0x07ee U03be # Greek_xi
+0x07ef U03bf # Greek_omicron
+0x07f0 U03c0 # Greek_pi
+0x07f1 U03c1 # Greek_rho
+0x07f2 U03c3 # Greek_sigma
+0x07f3 U03c2 # Greek_finalsmallsigma
+0x07f4 U03c4 # Greek_tau
+0x07f5 U03c5 # Greek_upsilon
+0x07f6 U03c6 # Greek_phi
+0x07f7 U03c7 # Greek_chi
+0x07f8 U03c8 # Greek_psi
+0x07f9 U03c9 # Greek_omega
+0x08a1 U0000 # leftradical
+0x08a2 U0000 # topleftradical
+0x08a3 U0000 # horizconnector
+0x08a4 U2320 # topintegral
+0x08a5 U2321 # botintegral
+0x08a6 U2502 # vertconnector
+0x08a7 U0000 # topleftsqbracket
+0x08a8 U0000 # botleftsqbracket
+0x08a9 U0000 # toprightsqbracket
+0x08aa U0000 # botrightsqbracket
+0x08ab U0000 # topleftparens
+0x08ac U0000 # botleftparens
+0x08ad U0000 # toprightparens
+0x08ae U0000 # botrightparens
+0x08af U0000 # leftmiddlecurlybrace
+0x08b0 U0000 # rightmiddlecurlybrace
+0x08b1 U0000 # topleftsummation
+0x08b2 U0000 # botleftsummation
+0x08b3 U0000 # topvertsummationconnector
+0x08b4 U0000 # botvertsummationconnector
+0x08b5 U0000 # toprightsummation
+0x08b6 U0000 # botrightsummation
+0x08b7 U0000 # rightmiddlesummation
+0x08bc U2264 # lessthanequal
+0x08bd U2260 # notequal
+0x08be U2265 # greaterthanequal
+0x08bf U222b # integral
+0x08c0 U2234 # therefore
+0x08c1 U221d # variation
+0x08c2 U221e # infinity
+0x08c5 U2207 # nabla
+0x08c8 U2245 # approximate
+0x08c9 U0000 # similarequal
+0x08cd U21d4 # ifonlyif
+0x08ce U21d2 # implies
+0x08cf U2261 # identical
+0x08d6 U221a # radical
+0x08da U2282 # includedin
+0x08db U2283 # includes
+0x08dc U2229 # intersection
+0x08dd U222a # union
+0x08de U2227 # logicaland
+0x08df U2228 # logicalor
+0x08ef U2202 # partialderivative
+0x08f6 U0192 # function
+0x08fb U2190 # leftarrow
+0x08fc U2191 # uparrow
+0x08fd U2192 # rightarrow
+0x08fe U2193 # downarrow
+0x09df U2422 # blank
+0x09e0 U25c6 # soliddiamond
+0x09e1 U2592 # checkerboard
+0x09e2 U2409 # ht
+0x09e3 U240c # ff
+0x09e4 U240d # cr
+0x09e5 U240a # lf
+0x09e8 U2424 # nl
+0x09e9 U240b # vt
+0x09ea U2518 # lowrightcorner
+0x09eb U2510 # uprightcorner
+0x09ec U250c # upleftcorner
+0x09ed U2514 # lowleftcorner
+0x09ee U253c # crossinglines
+0x09ef U0000 # horizlinescan1
+0x09f0 U0000 # horizlinescan3
+0x09f1 U2500 # horizlinescan5
+0x09f2 U0000 # horizlinescan7
+0x09f3 U0000 # horizlinescan9
+0x09f4 U251c # leftt
+0x09f5 U2524 # rightt
+0x09f6 U2534 # bott
+0x09f7 U252c # topt
+0x09f8 U2502 # vertbar
+0xfe50 U0300 # dead_grave
+0xfe51 U0301 # dead_acute
+0xfe52 U0302 # dead_circumflex
+0xfe53 U0303 # dead_tilde
+0xfe54 U0304 # dead_macron
+0xfe55 U0306 # dead_breve
+0xfe56 U0307 # dead_abovedot
+0xfe57 U0308 # dead_diaeresis
+0xfe58 U030a # dead_abovering
+0xfe59 U030b # dead_doubleacute
+0xfe5a U030c # dead_caron
+0xfe5b U0327 # dead_cedilla
+0xfe5c U0328 # dead_ogonek
+0xfe5d U0345 # dead_iota
+0xfe5e U3099 # dead_voiced_sound
+0xfe5f U309a # dead_semivoiced_sound
+0xff08 U0008 # BackSpace /* back space, back char */
+0xff09 U0009 # Tab
+0xff0a U000a # Linefeed /* Linefeed, LF */
+0xff0b U000b # Clear
+0xff0d U000d # Return /* Return, enter */
+0xff13 U0013 # Pause /* Pause, hold */
+0xff14 U0014 # Scroll_Lock
+0xff15 U0015 # Sys_Req
+0xff1b U001b # Escape
+0xff80 U0032 # KP_Space /* space */
+0xff89 U0009 # KP_Tab
+0xff8d U000d # KP_Enter /* enter */
+0xffaa U002a # KP_Multiply
+0xffab U002b # KP_Add
+0xffac U002c # KP_Separator /* separator, often comma */
+0xffad U002d # KP_Subtract
+0xffae U002e # KP_Decimal
+0xffaf U002f # KP_Divide
+0xffb0 U0030 # KP_0
+0xffb1 U0031 # KP_1
+0xffb2 U0032 # KP_2
+0xffb3 U0033 # KP_3
+0xffb4 U0034 # KP_4
+0xffb5 U0035 # KP_5
+0xffb6 U0036 # KP_6
+0xffb7 U0037 # KP_7
+0xffb8 U0038 # KP_8
+0xffb9 U0039 # KP_9
+0xffbd U003d # KP_Equal /* equals */
+0x0aa1 U2003 # emspace
+0x0aa2 U2002 # enspace
+0x0aa3 U2004 # em3space
+0x0aa4 U2005 # em4space
+0x0aa5 U2007 # digitspace
+0x0aa6 U2008 # punctspace
+0x0aa7 U2009 # thinspace
+0x0aa8 U200a # hairspace
+0x0aa9 U2014 # emdash
+0x0aaa U2013 # endash
+0x0aac U0000 # signifblank
+0x0aae U2026 # ellipsis
+0x0aaf U0000 # doubbaselinedot
+0x0ab0 U2153 # onethird
+0x0ab1 U2154 # twothirds
+0x0ab2 U2155 # onefifth
+0x0ab3 U2156 # twofifths
+0x0ab4 U2157 # threefifths
+0x0ab5 U2158 # fourfifths
+0x0ab6 U2159 # onesixth
+0x0ab7 U215a # fivesixths
+0x0ab8 U2105 # careof
+0x0abb U2012 # figdash
+0x0abc U2329 # leftanglebracket
+0x0abd U002e # decimalpoint
+0x0abe U232a # rightanglebracket
+0x0abf U0000 # marker
+0x0ac3 U215b # oneeighth
+0x0ac4 U215c # threeeighths
+0x0ac5 U215d # fiveeighths
+0x0ac6 U215e # seveneighths
+0x0ac9 U2122 # trademark
+0x0aca U2613 # signaturemark
+0x0acb U0000 # trademarkincircle
+0x0acc U25c1 # leftopentriangle
+0x0acd U25b7 # rightopentriangle
+0x0ace U25cb # emopencircle
+0x0acf U25a1 # emopenrectangle
+0x0ad0 U2018 # leftsinglequotemark
+0x0ad1 U2019 # rightsinglequotemark
+0x0ad2 U201c # leftdoublequotemark
+0x0ad3 U201d # rightdoublequotemark
+0x0ad4 U211e # prescription
+0x0ad6 U2032 # minutes
+0x0ad7 U2033 # seconds
+0x0ad9 U271d # latincross
+0x0ada U0000 # hexagram
+0x0adb U25ac # filledrectbullet
+0x0adc U25c0 # filledlefttribullet
+0x0add U25b6 # filledrighttribullet
+0x0ade U25cf # emfilledcircle
+0x0adf U25a0 # emfilledrect
+0x0ae0 U25e6 # enopencircbullet
+0x0ae1 U25ab # enopensquarebullet
+0x0ae2 U25ad # openrectbullet
+0x0ae3 U25b3 # opentribulletup
+0x0ae4 U25bd # opentribulletdown
+0x0ae5 U2606 # openstar
+0x0ae6 U2022 # enfilledcircbullet
+0x0ae7 U25aa # enfilledsqbullet
+0x0ae8 U25b2 # filledtribulletup
+0x0ae9 U25bc # filledtribulletdown
+0x0aea U261c # leftpointer
+0x0aeb U261e # rightpointer
+0x0aec U2663 # club
+0x0aed U2666 # diamond
+0x0aee U2665 # heart
+0x0af0 U2720 # maltesecross
+0x0af1 U2020 # dagger
+0x0af2 U2021 # doubledagger
+0x0af3 U2713 # checkmark
+0x0af4 U2717 # ballotcross
+0x0af5 U266f # musicalsharp
+0x0af6 U266d # musicalflat
+0x0af7 U2642 # malesymbol
+0x0af8 U2640 # femalesymbol
+0x0af9 U260e # telephone
+0x0afa U2315 # telephonerecorder
+0x0afb U2117 # phonographcopyright
+0x0afc U2038 # caret
+0x0afd U201a # singlelowquotemark
+0x0afe U201e # doublelowquotemark
+0x0aff U0000 # cursor
+0x0ba3 U003c # leftcaret
+0x0ba6 U003e # rightcaret
+0x0ba8 U2228 # downcaret
+0x0ba9 U2227 # upcaret
+0x0bc0 U00af # overbar
+0x0bc2 U22a4 # downtack
+0x0bc3 U2229 # upshoe
+0x0bc4 U230a # downstile
+0x0bc6 U005f # underbar
+0x0bca U2218 # jot
+0x0bcc U2395 # quad
+0x0bce U22a5 # uptack
+0x0bcf U25cb # circle
+0x0bd3 U2308 # upstile
+0x0bd6 U222a # downshoe
+0x0bd8 U2283 # rightshoe
+0x0bda U2282 # leftshoe
+0x0bdc U22a3 # lefttack
+0x0bfc U22a2 # righttack
+0x0cdf U2017 # hebrew_doublelowline
+0x0ce0 U05d0 # hebrew_aleph
+0x0ce1 U05d1 # hebrew_bet
+0x0ce1 U05d1 # hebrew_beth /* deprecated */
+0x0ce2 U05d2 # hebrew_gimel
+0x0ce2 U05d2 # hebrew_gimmel /* deprecated */
+0x0ce3 U05d3 # hebrew_dalet
+0x0ce3 U05d3 # hebrew_daleth /* deprecated */
+0x0ce4 U05d4 # hebrew_he
+0x0ce5 U05d5 # hebrew_waw
+0x0ce6 U05d6 # hebrew_zain
+0x0ce6 U05d6 # hebrew_zayin /* deprecated */
+0x0ce7 U05d7 # hebrew_chet
+0x0ce7 U05d7 # hebrew_het /* deprecated */
+0x0ce8 U05d8 # hebrew_tet
+0x0ce8 U05d8 # hebrew_teth /* deprecated */
+0x0ce9 U05d9 # hebrew_yod
+0x0cea U05da # hebrew_finalkaph
+0x0ceb U05db # hebrew_kaph
+0x0cec U05dc # hebrew_lamed
+0x0ced U05dd # hebrew_finalmem
+0x0cee U05de # hebrew_mem
+0x0cef U05df # hebrew_finalnun
+0x0cf0 U05e0 # hebrew_nun
+0x0cf1 U05e1 # hebrew_samech
+0x0cf1 U05e1 # hebrew_samekh /* deprecated */
+0x0cf2 U05e2 # hebrew_ayin
+0x0cf3 U05e3 # hebrew_finalpe
+0x0cf4 U05e4 # hebrew_pe
+0x0cf5 U05e5 # hebrew_finalzade
+0x0cf5 U05e5 # hebrew_finalzadi /* deprecated */
+0x0cf6 U05e6 # hebrew_zade
+0x0cf6 U05e6 # hebrew_zadi /* deprecated */
+0x0cf7 U05e7 # hebrew_kuf /* deprecated */
+0x0cf7 U05e7 # hebrew_qoph
+0x0cf8 U05e8 # hebrew_resh
+0x0cf9 U05e9 # hebrew_shin
+0x0cfa U05ea # hebrew_taf /* deprecated */
+0x0cfa U05ea # hebrew_taw
+0x0da1 U0e01 # Thai_kokai
+0x0da2 U0e02 # Thai_khokhai
+0x0da3 U0e03 # Thai_khokhuat
+0x0da4 U0e04 # Thai_khokhwai
+0x0da5 U0e05 # Thai_khokhon
+0x0da6 U0e06 # Thai_khorakhang
+0x0da7 U0e07 # Thai_ngongu
+0x0da8 U0e08 # Thai_chochan
+0x0da9 U0e09 # Thai_choching
+0x0daa U0e0a # Thai_chochang
+0x0dab U0e0b # Thai_soso
+0x0dac U0e0c # Thai_chochoe
+0x0dad U0e0d # Thai_yoying
+0x0dae U0e0e # Thai_dochada
+0x0daf U0e0f # Thai_topatak
+0x0db0 U0e10 # Thai_thothan
+0x0db1 U0e11 # Thai_thonangmontho
+0x0db2 U0e12 # Thai_thophuthao
+0x0db3 U0e13 # Thai_nonen
+0x0db4 U0e14 # Thai_dodek
+0x0db5 U0e15 # Thai_totao
+0x0db6 U0e16 # Thai_thothung
+0x0db7 U0e17 # Thai_thothahan
+0x0db8 U0e18 # Thai_thothong
+0x0db9 U0e19 # Thai_nonu
+0x0dba U0e1a # Thai_bobaimai
+0x0dbb U0e1b # Thai_popla
+0x0dbc U0e1c # Thai_phophung
+0x0dbd U0e1d # Thai_fofa
+0x0dbe U0e1e # Thai_phophan
+0x0dbf U0e1f # Thai_fofan
+0x0dc0 U0e20 # Thai_phosamphao
+0x0dc1 U0e21 # Thai_moma
+0x0dc2 U0e22 # Thai_yoyak
+0x0dc3 U0e23 # Thai_rorua
+0x0dc4 U0e24 # Thai_ru
+0x0dc5 U0e25 # Thai_loling
+0x0dc6 U0e26 # Thai_lu
+0x0dc7 U0e27 # Thai_wowaen
+0x0dc8 U0e28 # Thai_sosala
+0x0dc9 U0e29 # Thai_sorusi
+0x0dca U0e2a # Thai_sosua
+0x0dcb U0e2b # Thai_hohip
+0x0dcc U0e2c # Thai_lochula
+0x0dcd U0e2d # Thai_oang
+0x0dce U0e2e # Thai_honokhuk
+0x0dcf U0e2f # Thai_paiyannoi
+0x0dd0 U0e30 # Thai_saraa
+0x0dd1 U0e31 # Thai_maihanakat
+0x0dd2 U0e32 # Thai_saraaa
+0x0dd3 U0e33 # Thai_saraam
+0x0dd4 U0e34 # Thai_sarai
+0x0dd5 U0e35 # Thai_saraii
+0x0dd6 U0e36 # Thai_saraue
+0x0dd7 U0e37 # Thai_sarauee
+0x0dd8 U0e38 # Thai_sarau
+0x0dd9 U0e39 # Thai_sarauu
+0x0dda U0e3a # Thai_phinthu
+0x0dde U0e3e # Thai_maihanakat_maitho
+0x0ddf U0e3f # Thai_baht
+0x0de0 U0e40 # Thai_sarae
+0x0de1 U0e41 # Thai_saraae
+0x0de2 U0e42 # Thai_sarao
+0x0de3 U0e43 # Thai_saraaimaimuan
+0x0de4 U0e44 # Thai_saraaimaimalai
+0x0de5 U0e45 # Thai_lakkhangyao
+0x0de6 U0e46 # Thai_maiyamok
+0x0de7 U0e47 # Thai_maitaikhu
+0x0de8 U0e48 # Thai_maiek
+0x0de9 U0e49 # Thai_maitho
+0x0dea U0e4a # Thai_maitri
+0x0deb U0e4b # Thai_maichattawa
+0x0dec U0e4c # Thai_thanthakhat
+0x0ded U0e4d # Thai_nikhahit
+0x0df0 U0e50 # Thai_leksun
+0x0df1 U0e51 # Thai_leknung
+0x0df2 U0e52 # Thai_leksong
+0x0df3 U0e53 # Thai_leksam
+0x0df4 U0e54 # Thai_leksi
+0x0df5 U0e55 # Thai_lekha
+0x0df6 U0e56 # Thai_lekhok
+0x0df7 U0e57 # Thai_lekchet
+0x0df8 U0e58 # Thai_lekpaet
+0x0df9 U0e59 # Thai_lekkao
+0x0ea1 U3131 # Hangul_Kiyeog
+0x0ea2 U3132 # Hangul_SsangKiyeog
+0x0ea3 U3133 # Hangul_KiyeogSios
+0x0ea4 U3134 # Hangul_Nieun
+0x0ea5 U3135 # Hangul_NieunJieuj
+0x0ea6 U3136 # Hangul_NieunHieuh
+0x0ea7 U3137 # Hangul_Dikeud
+0x0ea8 U3138 # Hangul_SsangDikeud
+0x0ea9 U3139 # Hangul_Rieul
+0x0eaa U313a # Hangul_RieulKiyeog
+0x0eab U313b # Hangul_RieulMieum
+0x0eac U313c # Hangul_RieulPieub
+0x0ead U313d # Hangul_RieulSios
+0x0eae U313e # Hangul_RieulTieut
+0x0eaf U313f # Hangul_RieulPhieuf
+0x0eb0 U3140 # Hangul_RieulHieuh
+0x0eb1 U3141 # Hangul_Mieum
+0x0eb2 U3142 # Hangul_Pieub
+0x0eb3 U3143 # Hangul_SsangPieub
+0x0eb4 U3144 # Hangul_PieubSios
+0x0eb5 U3145 # Hangul_Sios
+0x0eb6 U3146 # Hangul_SsangSios
+0x0eb7 U3147 # Hangul_Ieung
+0x0eb8 U3148 # Hangul_Jieuj
+0x0eb9 U3149 # Hangul_SsangJieuj
+0x0eba U314a # Hangul_Cieuc
+0x0ebb U314b # Hangul_Khieuq
+0x0ebc U314c # Hangul_Tieut
+0x0ebd U314d # Hangul_Phieuf
+0x0ebe U314e # Hangul_Hieuh
+0x0ebf U314f # Hangul_A
+0x0ec0 U3150 # Hangul_AE
+0x0ec1 U3151 # Hangul_YA
+0x0ec2 U3152 # Hangul_YAE
+0x0ec3 U3153 # Hangul_EO
+0x0ec4 U3154 # Hangul_E
+0x0ec5 U3155 # Hangul_YEO
+0x0ec6 U3156 # Hangul_YE
+0x0ec7 U3157 # Hangul_O
+0x0ec8 U3158 # Hangul_WA
+0x0ec9 U3159 # Hangul_WAE
+0x0eca U315a # Hangul_OE
+0x0ecb U315b # Hangul_YO
+0x0ecc U315c # Hangul_U
+0x0ecd U315d # Hangul_WEO
+0x0ece U315e # Hangul_WE
+0x0ecf U315f # Hangul_WI
+0x0ed0 U3160 # Hangul_YU
+0x0ed1 U3161 # Hangul_EU
+0x0ed2 U3162 # Hangul_YI
+0x0ed3 U3163 # Hangul_I
+0x0ed4 U11a8 # Hangul_J_Kiyeog
+0x0ed5 U11a9 # Hangul_J_SsangKiyeog
+0x0ed6 U11aa # Hangul_J_KiyeogSios
+0x0ed7 U11ab # Hangul_J_Nieun
+0x0ed8 U11ac # Hangul_J_NieunJieuj
+0x0ed9 U11ad # Hangul_J_NieunHieuh
+0x0eda U11ae # Hangul_J_Dikeud
+0x0edb U11af # Hangul_J_Rieul
+0x0edc U11b0 # Hangul_J_RieulKiyeog
+0x0edd U11b1 # Hangul_J_RieulMieum
+0x0ede U11b2 # Hangul_J_RieulPieub
+0x0edf U11b3 # Hangul_J_RieulSios
+0x0ee0 U11b4 # Hangul_J_RieulTieut
+0x0ee1 U11b5 # Hangul_J_RieulPhieuf
+0x0ee2 U11b6 # Hangul_J_RieulHieuh
+0x0ee3 U11b7 # Hangul_J_Mieum
+0x0ee4 U11b8 # Hangul_J_Pieub
+0x0ee5 U11b9 # Hangul_J_PieubSios
+0x0ee6 U11ba # Hangul_J_Sios
+0x0ee7 U11bb # Hangul_J_SsangSios
+0x0ee8 U11bc # Hangul_J_Ieung
+0x0ee9 U11bd # Hangul_J_Jieuj
+0x0eea U11be # Hangul_J_Cieuc
+0x0eeb U11bf # Hangul_J_Khieuq
+0x0eec U11c0 # Hangul_J_Tieut
+0x0eed U11c1 # Hangul_J_Phieuf
+0x0eee U11c2 # Hangul_J_Hieuh
+0x0eef U316d # Hangul_RieulYeorinHieuh
+0x0ef0 U3171 # Hangul_SunkyeongeumMieum
+0x0ef1 U3178 # Hangul_SunkyeongeumPieub
+0x0ef2 U317f # Hangul_PanSios
+0x0ef3 U0000 # Hangul_KkogjiDalrinIeung
+0x0ef4 U3184 # Hangul_SunkyeongeumPhieuf
+0x0ef5 U3186 # Hangul_YeorinHieuh
+0x0ef6 U318d # Hangul_AraeA
+0x0ef7 U318e # Hangul_AraeAE
+0x0ef8 U11eb # Hangul_J_PanSios
+0x0ef9 U0000 # Hangul_J_KkogjiDalrinIeung
+0x0efa U11f9 # Hangul_J_YeorinHieuh
+0x0eff U20a9 # Korean_Won
+0x20a0 U20a0 # EcuSign
+0x20a1 U20a1 # ColonSign
+0x20a2 U20a2 # CruzeiroSign
+0x20a3 U20a3 # FFrancSign
+0x20a4 U20a4 # LiraSign
+0x20a5 U20a5 # MillSign
+0x20a6 U20a6 # NairaSign
+0x20a7 U20a7 # PesetaSign
+0x20a8 U20a8 # RupeeSign
+0x20a9 U20a9 # WonSign
+0x20aa U20aa # NewSheqelSign
+0x20ab U20ab # DongSign
+0x20ac U20ac # EuroSign
diff --git a/nx-X11/programs/xterm/unicode/make-precompose.sh b/nx-X11/programs/xterm/unicode/make-precompose.sh
new file mode 100644
index 000000000..747866c4d
--- /dev/null
+++ b/nx-X11/programs/xterm/unicode/make-precompose.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+# $XTermId: make-precompose.sh,v 1.5 2005/04/03 16:58:30 tom Exp $
+# $XFree86: xc/programs/xterm/unicode/make-precompose.sh,v 1.4 2005/03/29 04:00:32 tsi Exp $
+cat precompose.c.head | sed -e's/@/$/g'
+cut UnicodeData.txt -d ";" -f 1,6 | \
+ grep ";[0-9,A-F]" | grep " " | \
+ sed -e "s/ /, 0x/;s/^/{ 0x/;s/;/, 0x/;s/$/},/" | (sort -k 3 || sort +2)
+cat precompose.c.tail
diff --git a/nx-X11/programs/xterm/unicode/precompose.c.head b/nx-X11/programs/xterm/unicode/precompose.c.head
new file mode 100644
index 000000000..c51f752d7
--- /dev/null
+++ b/nx-X11/programs/xterm/unicode/precompose.c.head
@@ -0,0 +1,16 @@
+/*
+ * Canonical Compositions
+ *
+ * DO NOT EDIT BY HAND! This is generated by the script
+ * unicode/make-precompose.sh
+ */
+/* @XTermId@ */
+/* @XFree86@ */
+
+#include <precompose.h>
+
+static struct {
+ int replacement;
+ int base;
+ int comb;
+} precompositions[] = {
diff --git a/nx-X11/programs/xterm/unicode/precompose.c.tail b/nx-X11/programs/xterm/unicode/precompose.c.tail
new file mode 100644
index 000000000..0ceca9b6c
--- /dev/null
+++ b/nx-X11/programs/xterm/unicode/precompose.c.tail
@@ -0,0 +1,23 @@
+};
+
+int do_precomposition(int base, int comb) {
+ int min = 0;
+ int max = sizeof(precompositions) / sizeof(precompositions[0]) - 1;
+ int mid;
+ unsigned int sought = ((unsigned)base << 16) | (unsigned)comb, that;
+
+ /* binary search */
+ while (max >= min) {
+ mid = (min + max) / 2;
+ that = ((unsigned)precompositions[mid].base << 16) | ((unsigned)precompositions[mid].comb);
+ if (that < sought) {
+ min = mid + 1;
+ } else if (that > sought) {
+ max = mid - 1;
+ } else {
+ return precompositions[mid].replacement;
+ }
+ }
+ /* no match */
+ return -1;
+}