texlive[72599] Build/source/texk/ptexenc: ptexenc: Add functions of

commits+takuji at tug.org commits+takuji at tug.org
Sun Oct 20 08:53:15 CEST 2024


Revision: 72599
          https://tug.org/svn/texlive?view=revision&revision=72599
Author:   takuji
Date:     2024-10-20 08:53:14 +0200 (Sun, 20 Oct 2024)
Log Message:
-----------
ptexenc: Add functions of encoding conversion, Bump to 1.5.1

Modified Paths:
--------------
    trunk/Build/source/texk/ptexenc/ChangeLog
    trunk/Build/source/texk/ptexenc/c-auto.in
    trunk/Build/source/texk/ptexenc/configure
    trunk/Build/source/texk/ptexenc/ptexenc/unicode.h
    trunk/Build/source/texk/ptexenc/unicode.c
    trunk/Build/source/texk/ptexenc/version.ac

Added Paths:
-----------
    trunk/Build/source/texk/ptexenc/tex8benc.h

Modified: trunk/Build/source/texk/ptexenc/ChangeLog
===================================================================
--- trunk/Build/source/texk/ptexenc/ChangeLog	2024-10-19 23:45:43 UTC (rev 72598)
+++ trunk/Build/source/texk/ptexenc/ChangeLog	2024-10-20 06:53:14 UTC (rev 72599)
@@ -1,3 +1,12 @@
+2024-10-20  TANAKA Takuji  <ttk at t-lab.opal.ne.jp>
+
+	* unicode.c, ptexenc/unicode.h, tex8benc.h:
+	Add new functions of encoding conversion between
+	TeX 8bit encoding and Unicode to support
+	Unicode for Latin characters in upTeX ver2.00.
+	* version.ac: Bump to 1.5.1/dev.
+	https://github.com/texjporg/tex-jp-build/issues/170
+
 2024-05-11  TANAKA Takuji  <ttk at t-lab.opal.ne.jp>
 
 	* unicode.c, ptexenc.c:

Modified: trunk/Build/source/texk/ptexenc/c-auto.in
===================================================================
--- trunk/Build/source/texk/ptexenc/c-auto.in	2024-10-19 23:45:43 UTC (rev 72598)
+++ trunk/Build/source/texk/ptexenc/c-auto.in	2024-10-20 06:53:14 UTC (rev 72599)
@@ -6,7 +6,7 @@
 #define PTEXENC_C_AUTO_H
 
 /* ptexenc: the version string. */
-#define PTEXENCVERSION "ptexenc version 1.5.0/dev"
+#define PTEXENCVERSION "ptexenc version 1.5.1/dev"
 
 /* Define to 1 if the 'closedir' function returns void instead of int. */
 #undef CLOSEDIR_VOID

Modified: trunk/Build/source/texk/ptexenc/configure
===================================================================
--- trunk/Build/source/texk/ptexenc/configure	2024-10-19 23:45:43 UTC (rev 72598)
+++ trunk/Build/source/texk/ptexenc/configure	2024-10-20 06:53:14 UTC (rev 72599)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for ptexenc 1.5.0/dev.
+# Generated by GNU Autoconf 2.72 for ptexenc 1.5.1/dev.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -614,8 +614,8 @@
 # Identity of this package.
 PACKAGE_NAME='ptexenc'
 PACKAGE_TARNAME='ptexenc'
-PACKAGE_VERSION='1.5.0/dev'
-PACKAGE_STRING='ptexenc 1.5.0/dev'
+PACKAGE_VERSION='1.5.1/dev'
+PACKAGE_STRING='ptexenc 1.5.1/dev'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1365,7 +1365,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-'configure' configures ptexenc 1.5.0/dev to adapt to many kinds of systems.
+'configure' configures ptexenc 1.5.1/dev to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1436,7 +1436,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ptexenc 1.5.0/dev:";;
+     short | recursive ) echo "Configuration of ptexenc 1.5.1/dev:";;
    esac
   cat <<\_ACEOF
 
@@ -1557,7 +1557,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ptexenc configure 1.5.0/dev
+ptexenc configure 1.5.1/dev
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2099,7 +2099,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ptexenc $as_me 1.5.0/dev, which was
+It was created by ptexenc $as_me 1.5.1/dev, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -2879,10 +2879,10 @@
 
 
 
-PTEXENCVERSION=1.5.0/dev
+PTEXENCVERSION=1.5.1/dev
 
 
-PTEXENC_LT_VERSINFO=6:0:5
+PTEXENC_LT_VERSINFO=6:1:5
 
 
 am__api_version='1.17'
@@ -8999,7 +8999,7 @@
 
 # Define the identity of the package.
  PACKAGE='ptexenc'
- VERSION='1.5.0/dev'
+ VERSION='1.5.1/dev'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -15315,7 +15315,7 @@
 Report bugs to <bug-libtool at gnu.org>."
 
 lt_cl_version="\
-ptexenc config.lt 1.5.0/dev
+ptexenc config.lt 1.5.1/dev
 configured by $0, generated by GNU Autoconf 2.72.
 
 Copyright (C) 2011 Free Software Foundation, Inc.
@@ -17099,7 +17099,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ptexenc $as_me 1.5.0/dev, which was
+This file was extended by ptexenc $as_me 1.5.1/dev, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -17167,7 +17167,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-ptexenc config.status 1.5.0/dev
+ptexenc config.status 1.5.1/dev
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/texk/ptexenc/ptexenc/unicode.h
===================================================================
--- trunk/Build/source/texk/ptexenc/ptexenc/unicode.h	2024-10-19 23:45:43 UTC (rev 72598)
+++ trunk/Build/source/texk/ptexenc/ptexenc/unicode.h	2024-10-20 06:53:14 UTC (rev 72599)
@@ -26,6 +26,9 @@
 extern long UVS_combine_code(long ucv, long uvs);
 extern long UVS_divide_code(long code, long* uvs);
 
+extern long ptenc_ucs_to_8bit_code(short enc, long uch);
+extern long ptenc_8bit_code_to_ucs(short enc, long ech);
+
 #define LONG(a,b,c,d) ( ((long)(a)<<24) | ((long)(b)<<16) | ((c)<<8) | (d) )
 #define BYTE1(x) (((x)>>24) & 0xff)
 #define BYTE2(x) (((x)>>16) & 0xff)

Added: trunk/Build/source/texk/ptexenc/tex8benc.h
===================================================================
--- trunk/Build/source/texk/ptexenc/tex8benc.h	                        (rev 0)
+++ trunk/Build/source/texk/ptexenc/tex8benc.h	2024-10-20 06:53:14 UTC (rev 72599)
@@ -0,0 +1,1454 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef TEX8BENC_H
+#define TEX8BENC_H
+
+/* UCS -> T1 mapping table */
+static unsigned short UCStoT1enc[] = {
+    /* from,  to */
+    0xA1,    0xBD,
+    0xA3,    0xBB,
+    0xA7,    0x9F,
+    0xA8,    0x04,
+    0xAB,    0x13,
+    0xAF,    0x09,
+    0xB4,    0x01,
+    0xB8,    0x0B,
+    0xBB,    0x14,
+    0xBF,    0xBE,
+    0xC0,    0xC0,  // LATIN CAPITAL LETTER A WITH GRAVE
+    0xC1,    0xC1,  // LATIN CAPITAL LETTER A WITH ACUTE
+    0xC2,    0xC2,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0xC3,    0xC3,  // LATIN CAPITAL LETTER A WITH TILDE
+    0xC4,    0xC4,  // LATIN CAPITAL LETTER A WITH DIAERESIS
+    0xC5,    0xC5,  // LATIN CAPITAL LETTER A WITH RING ABOVE
+    0xC6,    0xC6,  // LATIN CAPITAL LETTER AE
+    0xC7,    0xC7,  // LATIN CAPITAL LETTER C WITH CEDILLA
+    0xC8,    0xC8,  // LATIN CAPITAL LETTER E WITH GRAVE
+    0xC9,    0xC9,  // LATIN CAPITAL LETTER E WITH ACUTE
+    0xCA,    0xCA,  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0xCB,    0xCB,  // LATIN CAPITAL LETTER E WITH DIAERESIS
+    0xCC,    0xCC,  // LATIN CAPITAL LETTER I WITH GRAVE
+    0xCD,    0xCD,  // LATIN CAPITAL LETTER I WITH ACUTE
+    0xCE,    0xCE,  // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0xCF,    0xCF,  // LATIN CAPITAL LETTER I WITH DIAERESIS
+    0xD0,    0xD0,  // LATIN CAPITAL LETTER ETH
+    0xD1,    0xD1,  // LATIN CAPITAL LETTER N WITH TILDE
+    0xD2,    0xD2,  // LATIN CAPITAL LETTER O WITH GRAVE
+    0xD3,    0xD3,  // LATIN CAPITAL LETTER O WITH ACUTE
+    0xD4,    0xD4,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0xD5,    0xD5,  // LATIN CAPITAL LETTER O WITH TILDE
+    0xD6,    0xD6,  // LATIN CAPITAL LETTER O WITH DIAERESIS
+    0xD8,    0xD8,  // LATIN CAPITAL LETTER O WITH STROKE
+    0xD9,    0xD9,  // LATIN CAPITAL LETTER U WITH GRAVE
+    0xDA,    0xDA,  // LATIN CAPITAL LETTER U WITH ACUTE
+    0xDB,    0xDB,  // LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0xDC,    0xDC,  // LATIN CAPITAL LETTER U WITH DIAERESIS
+    0xDD,    0xDD,  // LATIN CAPITAL LETTER Y WITH ACUTE
+    0xDE,    0xDE,  // LATIN CAPITAL LETTER THORN
+    0xDF,    0xFF,  // LATIN SMALL LETTER SHARP S
+    0xE0,    0xE0,  // LATIN SMALL LETTER A WITH GRAVE
+    0xE1,    0xE1,  // LATIN SMALL LETTER A WITH ACUTE
+    0xE2,    0xE2,  // LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0xE3,    0xE3,  // LATIN SMALL LETTER A WITH TILDE
+    0xE4,    0xE4,  // LATIN SMALL LETTER A WITH DIAERESIS
+    0xE5,    0xE5,  // LATIN SMALL LETTER A WITH RING ABOVE
+    0xE6,    0xE6,  // LATIN SMALL LETTER AE
+    0xE7,    0xE7,  // LATIN SMALL LETTER C WITH CEDILLA
+    0xE8,    0xE8,  // LATIN SMALL LETTER E WITH GRAVE
+    0xE9,    0xE9,  // LATIN SMALL LETTER E WITH ACUTE
+    0xEA,    0xEA,  // LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0xEB,    0xEB,  // LATIN SMALL LETTER E WITH DIAERESIS
+    0xEC,    0xEC,  // LATIN SMALL LETTER I WITH GRAVE
+    0xED,    0xED,  // LATIN SMALL LETTER I WITH ACUTE
+    0xEE,    0xEE,  // LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0xEF,    0xEF,  // LATIN SMALL LETTER I WITH DIAERESIS
+    0xF0,    0xF0,  // LATIN SMALL LETTER ETH
+    0xF1,    0xF1,  // LATIN SMALL LETTER N WITH TILDE
+    0xF2,    0xF2,  // LATIN SMALL LETTER O WITH GRAVE
+    0xF3,    0xF3,  // LATIN SMALL LETTER O WITH ACUTE
+    0xF4,    0xF4,  // LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0xF5,    0xF5,  // LATIN SMALL LETTER O WITH TILDE
+    0xF6,    0xF6,  // LATIN SMALL LETTER O WITH DIAERESIS
+    0xF8,    0xF8,  // LATIN SMALL LETTER O WITH STROKE
+    0xF9,    0xF9,  // LATIN SMALL LETTER U WITH GRAVE
+    0xFA,    0xFA,  // LATIN SMALL LETTER U WITH ACUTE
+    0xFB,    0xFB,  // LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0xFC,    0xFC,  // LATIN SMALL LETTER U WITH DIAERESIS
+    0xFD,    0xFD,  // LATIN SMALL LETTER Y WITH ACUTE
+    0xFE,    0xFE,  // LATIN SMALL LETTER THORN
+    0xFF,    0xB8,  // LATIN SMALL LETTER Y WITH DIAERESIS
+   0x102,    0x80,  // LATIN CAPITAL LETTER A WITH BREVE
+   0x103,    0xA0,  // LATIN SMALL LETTER A WITH BREVE
+   0x104,    0x81,  // LATIN CAPITAL LETTER A WITH OGONEK
+   0x105,    0xA1,  // LATIN SMALL LETTER A WITH OGONEK
+   0x106,    0x82,  // LATIN CAPITAL LETTER C WITH ACUTE
+   0x107,    0xA2,  // LATIN SMALL LETTER C WITH ACUTE
+   0x10C,    0x83,  // LATIN CAPITAL LETTER C WITH CARON
+   0x10D,    0xA3,  // LATIN SMALL LETTER C WITH CARON
+   0x10E,    0x84,  // LATIN CAPITAL LETTER D WITH CARON
+   0x10F,    0xA4,  // LATIN SMALL LETTER D WITH CARON
+   0x110,    0xD0,  // LATIN CAPITAL LETTER D WITH STROKE
+   0x111,    0x9E,  // LATIN SMALL LETTER D WITH STROKE
+   0x118,    0x86,  // LATIN CAPITAL LETTER E WITH OGONEK
+   0x119,    0xA6,  // LATIN SMALL LETTER E WITH OGONEK
+   0x11A,    0x85,  // LATIN CAPITAL LETTER E WITH CARON
+   0x11B,    0xA5,  // LATIN SMALL LETTER E WITH CARON
+   0x11E,    0x87,  // LATIN CAPITAL LETTER G WITH BREVE
+   0x11F,    0xA7,  // LATIN SMALL LETTER G WITH BREVE
+   0x130,    0x9D,  // LATIN CAPITAL LETTER I WITH DOT ABOVE
+   0x131,    0x19,  // LATIN SMALL LETTER DOTLESS I
+   0x132,    0x9C,  // LATIN CAPITAL LIGATURE IJ
+   0x133,    0xBC,  // LATIN SMALL LIGATURE IJ
+   0x139,    0x88,  // LATIN CAPITAL LETTER L WITH ACUTE
+   0x13A,    0xA8,  // LATIN SMALL LETTER L WITH ACUTE
+   0x13D,    0x89,  // LATIN CAPITAL LETTER L WITH CARON
+   0x13E,    0xA9,  // LATIN SMALL LETTER L WITH CARON
+   0x141,    0x8A,  // LATIN CAPITAL LETTER L WITH STROKE
+   0x142,    0xAA,  // LATIN SMALL LETTER L WITH STROKE
+   0x143,    0x8B,  // LATIN CAPITAL LETTER N WITH ACUTE
+   0x144,    0xAB,  // LATIN SMALL LETTER N WITH ACUTE
+   0x147,    0x8C,  // LATIN CAPITAL LETTER N WITH CARON
+   0x148,    0xAC,  // LATIN SMALL LETTER N WITH CARON
+   0x14A,    0x8D,  // LATIN CAPITAL LETTER ENG
+   0x14B,    0xAD,  // LATIN SMALL LETTER ENG
+   0x150,    0x8E,  // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+   0x151,    0xAE,  // LATIN SMALL LETTER O WITH DOUBLE ACUTE
+   0x152,    0xD7,  // LATIN CAPITAL LIGATURE OE
+   0x153,    0xF7,  // LATIN SMALL LIGATURE OE
+   0x154,    0x8F,  // LATIN CAPITAL LETTER R WITH ACUTE
+   0x155,    0xAF,  // LATIN SMALL LETTER R WITH ACUTE
+   0x158,    0x90,  // LATIN CAPITAL LETTER R WITH CARON
+   0x159,    0xB0,  // LATIN SMALL LETTER R WITH CARON
+   0x15A,    0x91,  // LATIN CAPITAL LETTER S WITH ACUTE
+   0x15B,    0xB1,  // LATIN SMALL LETTER S WITH ACUTE
+   0x15E,    0x93,  // LATIN CAPITAL LETTER S WITH CEDILLA
+   0x15F,    0xB3,  // LATIN SMALL LETTER S WITH CEDILLA
+   0x160,    0x92,  // LATIN CAPITAL LETTER S WITH CARON
+   0x161,    0xB2,  // LATIN SMALL LETTER S WITH CARON
+   0x162,    0x95,  // LATIN CAPITAL LETTER T WITH CEDILLA
+   0x163,    0xB5,  // LATIN SMALL LETTER T WITH CEDILLA
+   0x164,    0x94,  // LATIN CAPITAL LETTER T WITH CARON
+   0x165,    0xB4,  // LATIN SMALL LETTER T WITH CARON
+   0x16E,    0x97,  // LATIN CAPITAL LETTER U WITH RING ABOVE
+   0x16F,    0xB7,  // LATIN SMALL LETTER U WITH RING ABOVE
+   0x170,    0x96,  // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+   0x171,    0xB6,  // LATIN SMALL LETTER U WITH DOUBLE ACUTE
+   0x178,    0x98,  // LATIN CAPITAL LETTER Y WITH DIAERESIS
+   0x179,    0x99,  // LATIN CAPITAL LETTER Z WITH ACUTE
+   0x17A,    0xB9,  // LATIN SMALL LETTER Z WITH ACUTE
+   0x17B,    0x9B,  // LATIN CAPITAL LETTER Z WITH DOT ABOVE
+   0x17C,    0xBB,  // LATIN SMALL LETTER Z WITH DOT ABOVE
+   0x17D,    0x9A,  // LATIN CAPITAL LETTER Z WITH CARON
+   0x17E,    0xBA,  // LATIN SMALL LETTER Z WITH CARON
+   0x237,    0x1A,  // LATIN SMALL LETTER DOTLESS J
+   0x2C6,    0x02,
+   0x2C7,    0x07,
+   0x2D8,    0x08,
+   0x2D9,    0x0A,
+   0x2DA,    0x06,
+   0x2DB,    0x0C,
+   0x2DC,    0x03,
+   0x2DD,    0x05,
+  0x1E9E,    0xDF,
+  0x200C,    0x17,
+  0x2010,    0x7F,
+  0x2013,    0x15,
+  0x2014,    0x16,
+  0x2018,    0x60,
+  0x2019,    0x27,
+  0x201A,    0x0D,
+  0x201C,    0x10,
+  0x201D,    0x11,
+  0x201E,    0x12,
+  0x2039,    0x0E,
+  0x203A,    0x0F,
+  0x2423,    0x20,
+};
+
+/* UCS -> TS1 mapping table */
+static unsigned short UCStoTS1enc[] = {
+    /* from,  to */
+    0xA2,    0xA2,
+    0xA3,    0xA3,
+    0xA4,    0xA4,
+    0xA5,    0xA5,
+    0xA6,    0xA6,
+    0xA7,    0xA7,
+    0xA8,    0xA8,
+    0xA9,    0xA9,
+    0xAA,    0xAA,
+    0xAC,    0xAC,
+    0xAE,    0xAE,
+    0xAF,    0xAF,
+    0xB0,    0xB0,
+    0xB1,    0xB1,
+    0xB2,    0xB2,
+    0xB3,    0xB3,
+    0xB4,    0xB4,
+    0xB5,    0xB5,
+    0xB6,    0xB6,
+    0xB7,    0xB7,
+    0xB8,    0x0B,
+    0xB9,    0xB9,
+    0xBA,    0xBA,
+    0xBC,    0xBC,
+    0xBD,    0xBD,
+    0xBE,    0xBE,
+    0xD7,    0xD6,
+    0xF7,    0xF6,
+   0x17F,    0x73,  // LATIN SMALL LETTER LONG S
+   0x192,    0x8C,  // LATIN SMALL LETTER F WITH HOOK
+   0x2C7,    0x81,
+   0x2D8,    0x80,
+   0x2DB,    0x0C,
+   0x2DD,    0x82,
+   0x2F7,    0x7E,
+   0xE3F,    0x9A,
+  0x2016,    0x86,
+  0x2020,    0x84,
+  0x2021,    0x85,
+  0x2022,    0x88,
+  0x2030,    0x87,
+  0x2031,    0x98,
+  0x203B,    0xB8,
+  0x203D,    0x94,
+  0x2044,    0x2F,
+  0x2045,    0xA0,
+  0x2046,    0xA1,
+  0x204E,    0x2A,
+  0x2052,    0x9C,
+  0x20A1,    0x8D,
+  0x20A4,    0x92,
+  0x20A6,    0x8F,
+  0x20A9,    0x8E,
+  0x20AB,    0x96,
+  0x20AC,    0xBF,
+  0x20B1,    0x91,
+  0x20B2,    0x90,
+  0x2103,    0x89,
+  0x2116,    0x9B,
+  0x2117,    0xAD,
+  0x211E,    0x93,
+  0x2120,    0x9F,
+  0x2122,    0x97,
+  0x2126,    0x57,
+  0x2127,    0x4D,
+  0x212E,    0x9E,
+  0x2190,    0x18,
+  0x2191,    0x5E,
+  0x2192,    0x19,
+  0x2193,    0x5F,
+  0x2212,    0x3D,
+  0x221A,    0xBB,
+  0x2329,    0x3C,
+  0x232A,    0x3E,
+  0x2422,    0x20,
+  0x25E6,    0x9E,
+  0x25EF,    0x4F,
+  0x2605,    0x62,
+  0x266A,    0x6E,
+  0x26AD,    0x6D,
+  0x26AE,    0x63,
+  0x271D,    0x64,
+  0x27E6,    0x5B,
+  0x27E7,    0x5D,
+  0x2E17,    0x2D,
+  //  0x2E17,    0x7F,
+  0x2E18,    0x95,
+};
+
+/* UCS -> LY1 mapping table */
+static unsigned short UCStoLY1enc[] = {
+    /* from,  to */
+    0xA0,    0xA0,
+    0xA1,    0xA1,
+    0xA2,    0xA2,
+    0xA3,    0xA3,
+    0xA4,    0xA4,
+    0xA5,    0xA5,
+    0xA6,    0xA6,
+    0xA7,    0xA7,
+    0xA8,    0x7F,
+//    0xA8,    0xA8,
+    0xA9,    0xA9,
+    0xAA,    0xAA,
+    0xAB,    0xAB,
+    0xAC,    0xAC,
+    0xAD,    0xAD,
+    0xAE,    0xAE,
+    0xAF,    0x16,
+//    0xAF,    0xAF,
+    0xB0,    0xB0,
+    0xB1,    0xB1,
+    0xB2,    0xB2,
+    0xB3,    0xB3,
+    0xB4,    0x13,
+//    0xB4,    0xB4,
+    0xB5,    0xB5,
+    0xB6,    0xB6,
+    0xB7,    0xB7,
+    0xB8,    0x18,
+//    0xB8,    0xB8,
+    0xB9,    0xB9,
+    0xBA,    0xBA,
+    0xBB,    0xBB,
+    0xBC,    0xBC,
+    0xBD,    0xBD,
+    0xBE,    0xBE,
+    0xBF,    0xBF,
+    0xC0,    0xC0,  // LATIN CAPITAL LETTER A WITH GRAVE
+    0xC1,    0xC1,  // LATIN CAPITAL LETTER A WITH ACUTE
+    0xC2,    0xC2,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0xC3,    0xC3,  // LATIN CAPITAL LETTER A WITH TILDE
+    0xC4,    0xC4,  // LATIN CAPITAL LETTER A WITH DIAERESIS
+    0xC5,    0xC5,  // LATIN CAPITAL LETTER A WITH RING ABOVE
+    0xC6,    0x1D,  // LATIN CAPITAL LETTER AE
+//    0xC6,    0xC6,
+    0xC7,    0xC7,  // LATIN CAPITAL LETTER C WITH CEDILLA
+    0xC8,    0xC8,  // LATIN CAPITAL LETTER E WITH GRAVE
+    0xC9,    0xC9,  // LATIN CAPITAL LETTER E WITH ACUTE
+    0xCA,    0xCA,  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0xCB,    0xCB,  // LATIN CAPITAL LETTER E WITH DIAERESIS
+    0xCC,    0xCC,  // LATIN CAPITAL LETTER I WITH GRAVE
+    0xCD,    0xCD,  // LATIN CAPITAL LETTER I WITH ACUTE
+    0xCE,    0xCE,  // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0xCF,    0xCF,  // LATIN CAPITAL LETTER I WITH DIAERESIS
+    0xD0,    0xD0,  // LATIN CAPITAL LETTER ETH
+    0xD1,    0xD1,  // LATIN CAPITAL LETTER N WITH TILDE
+    0xD2,    0xD2,  // LATIN CAPITAL LETTER O WITH GRAVE
+    0xD3,    0xD3,  // LATIN CAPITAL LETTER O WITH ACUTE
+    0xD4,    0xD4,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0xD5,    0xD5,  // LATIN CAPITAL LETTER O WITH TILDE
+    0xD6,    0xD6,  // LATIN CAPITAL LETTER O WITH DIAERESIS
+    0xD7,    0xD7,
+    0xD8,    0x1F,  // LATIN CAPITAL LETTER O WITH STROKE
+//    0xD8,    0xD8,
+    0xD9,    0xD9,  // LATIN CAPITAL LETTER U WITH GRAVE
+    0xDA,    0xDA,  // LATIN CAPITAL LETTER U WITH ACUTE
+    0xDB,    0xDB,  // LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0xDC,    0xDC,  // LATIN CAPITAL LETTER U WITH DIAERESIS
+    0xDD,    0xDD,  // LATIN CAPITAL LETTER Y WITH ACUTE
+    0xDE,    0xDE,  // LATIN CAPITAL LETTER THORN
+    0xDF,    0x19,  // LATIN SMALL LETTER SHARP S
+//    0xDF,    0xDF,
+    0xE0,    0xE0,  // LATIN SMALL LETTER A WITH GRAVE
+    0xE1,    0xE1,  // LATIN SMALL LETTER A WITH ACUTE
+    0xE2,    0xE2,  // LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0xE3,    0xE3,  // LATIN SMALL LETTER A WITH TILDE
+    0xE4,    0xE4,  // LATIN SMALL LETTER A WITH DIAERESIS
+    0xE5,    0xE5,  // LATIN SMALL LETTER A WITH RING ABOVE
+    0xE6,    0x1A,  // LATIN SMALL LETTER AE
+//    0xE6,    0xE6,
+    0xE7,    0xE7,  // LATIN SMALL LETTER C WITH CEDILLA
+    0xE8,    0xE8,  // LATIN SMALL LETTER E WITH GRAVE
+    0xE9,    0xE9,  // LATIN SMALL LETTER E WITH ACUTE
+    0xEA,    0xEA,  // LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0xEB,    0xEB,  // LATIN SMALL LETTER E WITH DIAERESIS
+    0xEC,    0xEC,  // LATIN SMALL LETTER I WITH GRAVE
+    0xED,    0xED,  // LATIN SMALL LETTER I WITH ACUTE
+    0xEE,    0xEE,  // LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0xEF,    0xEF,  // LATIN SMALL LETTER I WITH DIAERESIS
+    0xF0,    0xF0,  // LATIN SMALL LETTER ETH
+    0xF1,    0xF1,  // LATIN SMALL LETTER N WITH TILDE
+    0xF2,    0xF2,  // LATIN SMALL LETTER O WITH GRAVE
+    0xF3,    0xF3,  // LATIN SMALL LETTER O WITH ACUTE
+    0xF4,    0xF4,  // LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0xF5,    0xF5,  // LATIN SMALL LETTER O WITH TILDE
+    0xF6,    0xF6,  // LATIN SMALL LETTER O WITH DIAERESIS
+    0xF7,    0xF7,
+    0xF8,    0x1C,  // LATIN SMALL LETTER O WITH STROKE
+//    0xF8,    0xF8,
+    0xF9,    0xF9,  // LATIN SMALL LETTER U WITH GRAVE
+    0xFA,    0xFA,  // LATIN SMALL LETTER U WITH ACUTE
+    0xFB,    0xFB,  // LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0xFC,    0xFC,  // LATIN SMALL LETTER U WITH DIAERESIS
+    0xFD,    0xFD,  // LATIN SMALL LETTER Y WITH ACUTE
+    0xFE,    0xFE,  // LATIN SMALL LETTER THORN
+    0xFF,    0xFF,  // LATIN SMALL LETTER Y WITH DIAERESIS
+   0x131,    0x10,  // LATIN SMALL LETTER DOTLESS I
+   0x141,    0x80,  // LATIN CAPITAL LETTER L WITH STROKE
+   0x142,    0x90,  // LATIN SMALL LETTER L WITH STROKE
+   0x152,    0x1E,  // LATIN CAPITAL LIGATURE OE
+//   0x152,    0x8C,
+   0x153,    0x1B,  // LATIN SMALL LIGATURE OE
+//   0x153,    0x9C,
+   0x160,    0x8A,  // LATIN CAPITAL LETTER S WITH CARON
+   0x161,    0x9A,  // LATIN SMALL LETTER S WITH CARON
+   0x178,    0x9F,  // LATIN CAPITAL LETTER Y WITH DIAERESIS
+   0x17D,    0x8D,  // LATIN CAPITAL LETTER Z WITH CARON
+   0x17E,    0x9D,  // LATIN SMALL LETTER Z WITH CARON
+   0x192,    0x83,  // LATIN SMALL LETTER F WITH HOOK
+   0x237,    0x11,  // LATIN SMALL LETTER DOTLESS J
+   0x2C6,    0x5E,
+//   0x2C6,    0x88,
+   0x2C7,    0x14,
+   0x2D8,    0x15,
+   0x2D9,    0x05,
+   0x2DA,    0x17,
+   0x2DB,    0x07,
+   0x2DC,    0x7E,
+//   0x2DC,    0x98,
+   0x2DD,    0x06,
+  0x200C,    0x0A,
+  0x2013,    0x96,
+  0x2014,    0x97,
+  0x2018,    0x60,
+//  0x2018,    0x91,
+  0x2019,    0x27,
+//  0x2019,    0x92,
+  0x201A,    0x82,
+  0x201C,    0x93,
+  0x201D,    0x94,
+  0x201E,    0x84,
+  0x2020,    0x86,
+  0x2021,    0x87,
+  0x2022,    0x95,
+  0x2026,    0x85,
+  0x2030,    0x89,
+  0x2039,    0x8B,
+  0x203A,    0x9B,
+  0x2044,    0x04,
+  0x20AC,    0x01,
+  0x2122,    0x99,
+  0x2212,    0x8F,
+};
+
+/* UCS -> T5 mapping table */
+static unsigned short UCStoT5enc[] = {
+    /* from,  to */
+    0xA8,    0x04,
+    0xAB,    0x13,
+    0xAF,    0x09,
+    0xB4,    0x01,
+    0xB8,    0x0B,
+    0xBB,    0x14,
+    0xC0,    0x80,  // LATIN CAPITAL LETTER A WITH GRAVE
+    0xC1,    0x81,  // LATIN CAPITAL LETTER A WITH ACUTE
+    0xC2,    0x85,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0xC3,    0x82,  // LATIN CAPITAL LETTER A WITH TILDE
+    0xC8,    0x91,  // LATIN CAPITAL LETTER E WITH GRAVE
+    0xC9,    0x92,  // LATIN CAPITAL LETTER E WITH ACUTE
+    0xCA,    0x96,  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0xCC,    0x9C,  // LATIN CAPITAL LETTER I WITH GRAVE
+    0xCD,    0x9D,  // LATIN CAPITAL LETTER I WITH ACUTE
+    0xD2,    0xC1,  // LATIN CAPITAL LETTER O WITH GRAVE
+    0xD3,    0xC2,  // LATIN CAPITAL LETTER O WITH ACUTE
+    0xD4,    0xC6,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0xD5,    0xC3,  // LATIN CAPITAL LETTER O WITH TILDE
+    0xD9,    0xD2,  // LATIN CAPITAL LETTER U WITH GRAVE
+    0xDA,    0xD3,  // LATIN CAPITAL LETTER U WITH ACUTE
+    0xDD,    0xDE,  // LATIN CAPITAL LETTER Y WITH ACUTE
+    0xE0,    0xA0,  // LATIN SMALL LETTER A WITH GRAVE
+    0xE1,    0xA1,  // LATIN SMALL LETTER A WITH ACUTE
+    0xE2,    0xA5,  // LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0xE3,    0xA2,  // LATIN SMALL LETTER A WITH TILDE
+    0xE8,    0xB1,  // LATIN SMALL LETTER E WITH GRAVE
+    0xE9,    0xB2,  // LATIN SMALL LETTER E WITH ACUTE
+    0xEA,    0xB6,  // LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0xEC,    0xBC,  // LATIN SMALL LETTER I WITH GRAVE
+    0xED,    0xBD,  // LATIN SMALL LETTER I WITH ACUTE
+    0xF2,    0xE1,  // LATIN SMALL LETTER O WITH GRAVE
+    0xF3,    0xE2,  // LATIN SMALL LETTER O WITH ACUTE
+    0xF4,    0xE6,  // LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0xF5,    0xE3,  // LATIN SMALL LETTER O WITH TILDE
+    0xF9,    0xF2,  // LATIN SMALL LETTER U WITH GRAVE
+    0xFA,    0xF3,  // LATIN SMALL LETTER U WITH ACUTE
+    0xFD,    0xFE,  // LATIN SMALL LETTER Y WITH ACUTE
+   0x102,    0x8B,  // LATIN CAPITAL LETTER A WITH BREVE
+   0x103,    0xAB,  // LATIN SMALL LETTER A WITH BREVE
+   0x110,    0x1E,  // LATIN CAPITAL LETTER D WITH STROKE
+   0x111,    0x1F,  // LATIN SMALL LETTER D WITH STROKE
+   0x128,    0x9E,  // LATIN CAPITAL LETTER I WITH TILDE
+   0x129,    0xBE,  // LATIN SMALL LETTER I WITH TILDE
+   0x131,    0x19,  // LATIN SMALL LETTER DOTLESS I
+   0x168,    0xD4,  // LATIN CAPITAL LETTER U WITH TILDE
+   0x169,    0xF4,  // LATIN SMALL LETTER U WITH TILDE
+   0x1A0,    0xCC,  // LATIN CAPITAL LETTER O WITH HORN
+   0x1A1,    0xEC,  // LATIN SMALL LETTER O WITH HORN
+   0x1AF,    0xD7,  // LATIN CAPITAL LETTER U WITH HORN
+   0x1B0,    0xF7,  // LATIN SMALL LETTER U WITH HORN
+   0x2C6,    0x02,
+   0x2C7,    0x07,
+   0x2D8,    0x08,
+   0x2D9,    0x0A,
+   0x2DA,    0x06,
+   0x2DC,    0x03,
+   0x309,    0x0C,
+   0x323,    0x05,
+  0x1EA0,    0x84,  // LATIN CAPITAL LETTER A WITH DOT BELOW
+  0x1EA1,    0xA4,  // LATIN SMALL LETTER A WITH DOT BELOW
+  0x1EA2,    0x83,  // LATIN CAPITAL LETTER A WITH HOOK ABOVE
+  0x1EA3,    0xA3,  // LATIN SMALL LETTER A WITH HOOK ABOVE
+  0x1EA4,    0x87,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+  0x1EA5,    0xA7,  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+  0x1EA6,    0x86,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+  0x1EA7,    0xA6,  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+  0x1EA8,    0x89,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+  0x1EA9,    0xA9,  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+  0x1EAA,    0x88,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+  0x1EAB,    0xA8,  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+  0x1EAC,    0x8A,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+  0x1EAD,    0xAA,  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+  0x1EAE,    0x8D,  // LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+  0x1EAF,    0xAD,  // LATIN SMALL LETTER A WITH BREVE AND ACUTE
+  0x1EB0,    0x8C,  // LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+  0x1EB1,    0xAC,  // LATIN SMALL LETTER A WITH BREVE AND GRAVE
+  0x1EB2,    0x8F,  // LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+  0x1EB3,    0xAF,  // LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+  0x1EB4,    0x8E,  // LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+  0x1EB5,    0xAE,  // LATIN SMALL LETTER A WITH BREVE AND TILDE
+  0x1EB6,    0x90,  // LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+  0x1EB7,    0xB0,  // LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+  0x1EB8,    0x95,  // LATIN CAPITAL LETTER E WITH DOT BELOW
+  0x1EB9,    0xB5,  // LATIN SMALL LETTER E WITH DOT BELOW
+  0x1EBA,    0x94,  // LATIN CAPITAL LETTER E WITH HOOK ABOVE
+  0x1EBB,    0xB4,  // LATIN SMALL LETTER E WITH HOOK ABOVE
+  0x1EBC,    0x93,  // LATIN CAPITAL LETTER E WITH TILDE
+  0x1EBD,    0xB3,  // LATIN SMALL LETTER E WITH TILDE
+  0x1EBE,    0x98,  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+  0x1EBF,    0xB8,  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+  0x1EC0,    0x97,  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+  0x1EC1,    0xB7,  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+  0x1EC2,    0x9A,  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+  0x1EC3,    0xBA,  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+  0x1EC4,    0x99,  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+  0x1EC5,    0xB9,  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+  0x1EC6,    0x9B,  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+  0x1EC7,    0xBB,  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+  0x1EC8,    0x9F,  // LATIN CAPITAL LETTER I WITH HOOK ABOVE
+  0x1EC9,    0xBF,  // LATIN SMALL LETTER I WITH HOOK ABOVE
+  0x1ECA,    0xC0,  // LATIN CAPITAL LETTER I WITH DOT BELOW
+  0x1ECB,    0xE0,  // LATIN SMALL LETTER I WITH DOT BELOW
+  0x1ECC,    0xC5,  // LATIN CAPITAL LETTER O WITH DOT BELOW
+  0x1ECD,    0xE5,  // LATIN SMALL LETTER O WITH DOT BELOW
+  0x1ECE,    0xC4,  // LATIN CAPITAL LETTER O WITH HOOK ABOVE
+  0x1ECF,    0xE4,  // LATIN SMALL LETTER O WITH HOOK ABOVE
+  0x1ED0,    0xC8,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+  0x1ED1,    0xE8,  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+  0x1ED2,    0xC7,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+  0x1ED3,    0xE7,  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+  0x1ED4,    0xCA,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+  0x1ED5,    0xEA,  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+  0x1ED6,    0xC9,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+  0x1ED7,    0xE9,  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+  0x1ED8,    0xCB,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+  0x1ED9,    0xEB,  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+  0x1EDA,    0xCE,  // LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+  0x1EDB,    0xEE,  // LATIN SMALL LETTER O WITH HORN AND ACUTE
+  0x1EDC,    0xCD,  // LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+  0x1EDD,    0xED,  // LATIN SMALL LETTER O WITH HORN AND GRAVE
+  0x1EDE,    0xD0,  // LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+  0x1EDF,    0xF0,  // LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+  0x1EE0,    0xCF,  // LATIN CAPITAL LETTER O WITH HORN AND TILDE
+  0x1EE1,    0xEF,  // LATIN SMALL LETTER O WITH HORN AND TILDE
+  0x1EE2,    0xD1,  // LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+  0x1EE3,    0xF1,  // LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+  0x1EE4,    0xD6,  // LATIN CAPITAL LETTER U WITH DOT BELOW
+  0x1EE5,    0xF6,  // LATIN SMALL LETTER U WITH DOT BELOW
+  0x1EE6,    0xD5,  // LATIN CAPITAL LETTER U WITH HOOK ABOVE
+  0x1EE7,    0xF5,  // LATIN SMALL LETTER U WITH HOOK ABOVE
+  0x1EE8,    0xD9,  // LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+  0x1EE9,    0xF9,  // LATIN SMALL LETTER U WITH HORN AND ACUTE
+  0x1EEA,    0xD8,  // LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+  0x1EEB,    0xF8,  // LATIN SMALL LETTER U WITH HORN AND GRAVE
+  0x1EEC,    0xDB,  // LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+  0x1EED,    0xFB,  // LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+  0x1EEE,    0xDA,  // LATIN CAPITAL LETTER U WITH HORN AND TILDE
+  0x1EEF,    0xFA,  // LATIN SMALL LETTER U WITH HORN AND TILDE
+  0x1EF0,    0xDC,  // LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+  0x1EF1,    0xFC,  // LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+  0x1EF2,    0xDD,  // LATIN CAPITAL LETTER Y WITH GRAVE
+  0x1EF3,    0xFD,  // LATIN SMALL LETTER Y WITH GRAVE
+  0x1EF4,    0x1C,  // LATIN CAPITAL LETTER Y WITH DOT BELOW
+  0x1EF5,    0x1D,  // LATIN SMALL LETTER Y WITH DOT BELOW
+  0x1EF6,    0x1A,  // LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+  0x1EF7,    0x1B,  // LATIN SMALL LETTER Y WITH HOOK ABOVE
+  0x1EF8,    0xDF,  // LATIN CAPITAL LETTER Y WITH TILDE
+  0x1EF9,    0xFF,  // LATIN SMALL LETTER Y WITH TILDE
+  0x200C,    0x17,
+  0x2010,    0x7F,
+  0x2013,    0x15,
+  0x2014,    0x16,
+  0x2018,    0x60,
+  0x2019,    0x27,
+  0x201A,    0x0D,
+  0x201C,    0x10,
+  0x201D,    0x11,
+  0x201E,    0x12,
+  0x2039,    0x0E,
+  0x203A,    0x0F,
+  0x2423,    0x20,
+};
+
+
+/* UCS -> L7X mapping table */
+static unsigned short UCStoL7Xenc[] = {
+    /* from,  to */
+    0xA0,    0xA0,
+    0xA2,    0xA2,
+    0xA3,    0xA3,
+    0xA4,    0xA4,
+    0xA6,    0xA6,
+    0xA7,    0xA7,
+    0xA8,    0x04,
+    0xA9,    0xA9,
+    0xAB,    0x13,
+    0xAC,    0xAC,
+    0xAE,    0xAE,
+    0xAF,    0x09,
+    0xB0,    0xB0,
+    0xB1,    0xB1,
+    0xB2,    0xB2,
+    0xB3,    0xB3,
+    0xB4,    0x01,
+    0xB5,    0xB5,
+    0xB6,    0xB6,
+    0xB7,    0xB7,
+    0xB8,    0x0B,
+    0xB9,    0xB9,
+    0xBB,    0x14,
+    0xBC,    0xBC,
+    0xBD,    0xBD,
+    0xBE,    0xBE,
+    0xC4,    0xC4,  // LATIN CAPITAL LETTER A WITH DIAERESIS
+    0xC5,    0xC5,  // LATIN CAPITAL LETTER A WITH RING ABOVE
+    0xC6,    0xAF,  // LATIN CAPITAL LETTER AE
+    0xC9,    0xC9,  // LATIN CAPITAL LETTER E WITH ACUTE
+    0xD3,    0xD3,  // LATIN CAPITAL LETTER O WITH ACUTE
+    0xD5,    0xD5,  // LATIN CAPITAL LETTER O WITH TILDE
+    0xD6,    0xD6,  // LATIN CAPITAL LETTER O WITH DIAERESIS
+    0xD7,    0xD7,  // MULTIPLICATION SIGN
+    0xD8,    0xA8,  // LATIN CAPITAL LETTER O WITH STROKE
+    0xDC,    0xDC,  // LATIN CAPITAL LETTER U WITH DIAERESIS
+    0xDF,    0xDF,  // LATIN SMALL LETTER SHARP S
+    0xE4,    0xE4,  // LATIN SMALL LETTER A WITH DIAERESIS
+    0xE5,    0xE5,  // LATIN SMALL LETTER A WITH RING ABOVE
+    0xE6,    0xBF,  // LATIN SMALL LETTER AE
+    0xE9,    0xE9,  // LATIN SMALL LETTER E WITH ACUTE
+    0xF3,    0xF3,  // LATIN SMALL LETTER O WITH ACUTE
+    0xF5,    0xF5,  // LATIN SMALL LETTER O WITH TILDE
+    0xF6,    0xF6,  // LATIN SMALL LETTER O WITH DIAERESIS
+    0xF7,    0xF7,  // DIVISION SIGN
+    0xF8,    0xB8,  // LATIN SMALL LETTER O WITH STROKE
+    0xFC,    0xFC,  // LATIN SMALL LETTER U WITH DIAERESIS
+   0x100,    0xC2,  // LATIN CAPITAL LETTER A WITH MACRON
+   0x101,    0xE2,  // LATIN SMALL LETTER A WITH MACRON
+   0x104,    0xC0,  // LATIN CAPITAL LETTER A WITH OGONEK
+   0x105,    0xE0,  // LATIN SMALL LETTER A WITH OGONEK
+   0x106,    0xC3,  // LATIN CAPITAL LETTER C WITH ACUTE
+   0x107,    0xE3,  // LATIN SMALL LETTER C WITH ACUTE
+   0x10C,    0xC8,  // LATIN CAPITAL LETTER C WITH CARON
+   0x10D,    0xE8,  // LATIN SMALL LETTER C WITH CARON
+   0x112,    0xC7,  // LATIN CAPITAL LETTER E WITH MACRON
+   0x113,    0xE7,  // LATIN SMALL LETTER E WITH MACRON
+   0x116,    0xCB,  // LATIN CAPITAL LETTER E WITH DOT ABOVE
+   0x117,    0xEB,  // LATIN SMALL LETTER E WITH DOT ABOVE
+   0x118,    0xC6,  // LATIN CAPITAL LETTER E WITH OGONEK
+   0x119,    0xE6,  // LATIN SMALL LETTER E WITH OGONEK
+   0x122,    0xCC,  // LATIN CAPITAL LETTER G WITH CEDILLA
+   0x123,    0xEC,  // LATIN SMALL LETTER G WITH CEDILLA
+   0x12A,    0xCE,  // LATIN CAPITAL LETTER I WITH MACRON
+   0x12B,    0xEE,  // LATIN SMALL LETTER I WITH MACRON
+   0x12E,    0xC1,  // LATIN CAPITAL LETTER I WITH OGONEK
+   0x12F,    0xE1,  // LATIN SMALL LETTER I WITH OGONEK
+   0x131,    0x19,  // LATIN SMALL LETTER DOTLESS I
+   0x136,    0xCD,  // LATIN CAPITAL LETTER K WITH CEDILLA
+   0x137,    0xED,  // LATIN SMALL LETTER K WITH CEDILLA
+   0x13B,    0xCF,  // LATIN CAPITAL LETTER L WITH CEDILLA
+   0x13C,    0xEF,  // LATIN SMALL LETTER L WITH CEDILLA
+   0x141,    0xD9,  // LATIN CAPITAL LETTER L WITH STROKE
+   0x142,    0xF9,  // LATIN SMALL LETTER L WITH STROKE
+   0x143,    0xD1,  // LATIN CAPITAL LETTER N WITH ACUTE
+   0x144,    0xF1,  // LATIN SMALL LETTER N WITH ACUTE
+   0x145,    0xD2,  // LATIN CAPITAL LETTER N WITH CEDILLA
+   0x146,    0xF2,  // LATIN SMALL LETTER N WITH CEDILLA
+   0x14C,    0xD4,  // LATIN CAPITAL LETTER O WITH MACRON
+   0x14D,    0xF4,  // LATIN SMALL LETTER O WITH MACRON
+   0x152,    0x8C,  // LATIN CAPITAL LIGATURE OE
+   0x153,    0x9C,  // LATIN SMALL LIGATURE OE
+   0x156,    0xAA,  // LATIN CAPITAL LETTER R WITH CEDILLA
+   0x157,    0xBA,  // LATIN SMALL LETTER R WITH CEDILLA
+   0x15A,    0xDA,  // LATIN CAPITAL LETTER S WITH ACUTE
+   0x15B,    0xFA,  // LATIN SMALL LETTER S WITH ACUTE
+   0x160,    0xD0,  // LATIN CAPITAL LETTER S WITH CARON
+   0x161,    0xF0,  // LATIN SMALL LETTER S WITH CARON
+   0x16A,    0xDB,  // LATIN CAPITAL LETTER U WITH MACRON
+   0x16B,    0xFB,  // LATIN SMALL LETTER U WITH MACRON
+   0x172,    0xD8,  // LATIN CAPITAL LETTER U WITH OGONEK
+   0x173,    0xF8,  // LATIN SMALL LETTER U WITH OGONEK
+   0x179,    0xCA,  // LATIN CAPITAL LETTER Z WITH ACUTE
+   0x17A,    0xEA,  // LATIN SMALL LETTER Z WITH ACUTE
+   0x17B,    0xDD,  // LATIN CAPITAL LETTER Z WITH DOT ABOVE
+   0x17C,    0xFD,  // LATIN SMALL LETTER Z WITH DOT ABOVE
+   0x17D,    0xDE,  // LATIN CAPITAL LETTER Z WITH CARON
+   0x17E,    0xFE,  // LATIN SMALL LETTER Z WITH CARON
+   0x192,    0x83,  // LATIN SMALL LETTER F WITH HOOK
+   0x237,    0x1A,  // LATIN SMALL LETTER DOTLESS J
+   0x2C6,    0x02,
+   0x2C7,    0x07,
+   0x2D8,    0x08,
+   0x2D9,    0x0A,
+   0x2DA,    0x06,
+   0x2DB,    0x0C,
+   0x2DC,    0x03,
+   0x2DD,    0x05,
+  0x200C,    0x17,
+  0x2010,    0xAD,
+  0x2013,    0x15,
+  0x2014,    0x16,
+  0x2018,    0x60,
+  0x2019,    0x27,
+  0x201A,    0x0D,
+  0x201C,    0x10,
+  0x201D,    0x11,
+  0x201E,    0x12,
+  0x2020,    0x86,
+  0x2021,    0x87,
+  0x2022,    0x95,
+  0x2026,    0x85,
+  0x2030,    0x89,
+  0x2039,    0x0E,
+  0x203A,    0x0F,
+  0x20AC,    0x80,
+  0x2122,    0x99,
+};
+
+/* UCS -> T2A mapping table */
+static unsigned short UCStoT2Aenc[] = {
+    /* from,  to */
+    0x49,    0x49,  // Latin Capital Letter I; glyph for \CYRII, U+0406 І
+    0x4A,    0x4A,  // Latin Capital Letter J; glyph for \CYRJE, U+0408 Ј
+    0x69,    0x69,  // Latin Small Letter I;   glyph for \cyrii, U+0456 і
+    0x6A,    0x6A,  // Latin Small Letter J;   glyph for \cyrje, U+0458 ј
+    0xA4,    0x9E,
+    0xA7,    0x9F,
+    0xA8,    0x04,
+    0xAB,    0xBE,
+    0xAF,    0x09,
+    0xB4,    0x01,
+    0xB8,    0x0B,
+    0xBB,    0xBF,
+   0x131,    0x19,  // LATIN SMALL LETTER DOTLESS I
+   0x237,    0x1A,  // LATIN SMALL LETTER DOTLESS J
+   0x2C6,    0x02,
+   0x2C7,    0x07,
+   0x2D8,    0x08,
+   0x2D9,    0x0A,
+   0x2DA,    0x06,
+   0x2DB,    0x0C,
+   0x2DC,    0x03,
+   0x2DD,    0x05,
+   0x401,    0x9C,  // CYRILLIC CAPITAL LETTER IO
+   0x402,    0x82,  // CYRILLIC CAPITAL LETTER DJE
+   0x404,    0x99,  // CYRILLIC CAPITAL LETTER UKRAINIAN IE
+   0x405,    0x8F,  // CYRILLIC CAPITAL LETTER DZE
+   0x406,    0x49,  // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I; \CYRII
+   0x407,    0x88,  // CYRILLIC CAPITAL LETTER YI
+   0x408,    0x4A,  // CYRILLIC CAPITAL LETTER JE                      ; \CYRJE
+   0x409,    0x87,  // CYRILLIC CAPITAL LETTER LJE
+   0x40A,    0x9B,  // CYRILLIC CAPITAL LETTER NJE
+   0x40B,    0x83,  // CYRILLIC CAPITAL LETTER TSHE
+   0x40E,    0x92,  // CYRILLIC CAPITAL LETTER SHORT U
+   0x40F,    0x96,  // CYRILLIC CAPITAL LETTER DZHE
+   0x410,    0xC0,  // CYRILLIC CAPITAL LETTER A
+   0x411,    0xC1,  // CYRILLIC CAPITAL LETTER BE
+   0x412,    0xC2,  // CYRILLIC CAPITAL LETTER VE
+   0x413,    0xC3,  // CYRILLIC CAPITAL LETTER GHE
+   0x414,    0xC4,  // CYRILLIC CAPITAL LETTER DE
+   0x415,    0xC5,  // CYRILLIC CAPITAL LETTER IE
+   0x416,    0xC6,  // CYRILLIC CAPITAL LETTER ZHE
+   0x417,    0xC7,  // CYRILLIC CAPITAL LETTER ZE
+   0x418,    0xC8,  // CYRILLIC CAPITAL LETTER I
+   0x419,    0xC9,  // CYRILLIC CAPITAL LETTER SHORT I
+   0x41A,    0xCA,  // CYRILLIC CAPITAL LETTER KA
+   0x41B,    0xCB,  // CYRILLIC CAPITAL LETTER EL
+   0x41C,    0xCC,  // CYRILLIC CAPITAL LETTER EM
+   0x41D,    0xCD,  // CYRILLIC CAPITAL LETTER EN
+   0x41E,    0xCE,  // CYRILLIC CAPITAL LETTER O
+   0x41F,    0xCF,  // CYRILLIC CAPITAL LETTER PE
+   0x420,    0xD0,  // CYRILLIC CAPITAL LETTER ER
+   0x421,    0xD1,  // CYRILLIC CAPITAL LETTER ES
+   0x422,    0xD2,  // CYRILLIC CAPITAL LETTER TE
+   0x423,    0xD3,  // CYRILLIC CAPITAL LETTER U
+   0x424,    0xD4,  // CYRILLIC CAPITAL LETTER EF
+   0x425,    0xD5,  // CYRILLIC CAPITAL LETTER HA
+   0x426,    0xD6,  // CYRILLIC CAPITAL LETTER TSE
+   0x427,    0xD7,  // CYRILLIC CAPITAL LETTER CHE
+   0x428,    0xD8,  // CYRILLIC CAPITAL LETTER SHA
+   0x429,    0xD9,  // CYRILLIC CAPITAL LETTER SHCHA
+   0x42A,    0xDA,  // CYRILLIC CAPITAL LETTER HARD SIGN
+   0x42B,    0xDB,  // CYRILLIC CAPITAL LETTER YERU
+   0x42C,    0xDC,  // CYRILLIC CAPITAL LETTER SOFT SIGN
+   0x42D,    0xDD,  // CYRILLIC CAPITAL LETTER E
+   0x42E,    0xDE,  // CYRILLIC CAPITAL LETTER YU
+   0x42F,    0xDF,  // CYRILLIC CAPITAL LETTER YA
+   0x430,    0xE0,  // CYRILLIC SMALL LETTER A
+   0x431,    0xE1,  // CYRILLIC SMALL LETTER BE
+   0x432,    0xE2,  // CYRILLIC SMALL LETTER VE
+   0x433,    0xE3,  // CYRILLIC SMALL LETTER GHE
+   0x434,    0xE4,  // CYRILLIC SMALL LETTER DE
+   0x435,    0xE5,  // CYRILLIC SMALL LETTER IE
+   0x436,    0xE6,  // CYRILLIC SMALL LETTER ZHE
+   0x437,    0xE7,  // CYRILLIC SMALL LETTER ZE
+   0x438,    0xE8,  // CYRILLIC SMALL LETTER I
+   0x439,    0xE9,  // CYRILLIC SMALL LETTER SHORT I
+   0x43A,    0xEA,  // CYRILLIC SMALL LETTER KA
+   0x43B,    0xEB,  // CYRILLIC SMALL LETTER EL
+   0x43C,    0xEC,  // CYRILLIC SMALL LETTER EM
+   0x43D,    0xED,  // CYRILLIC SMALL LETTER EN
+   0x43E,    0xEE,  // CYRILLIC SMALL LETTER O
+   0x43F,    0xEF,  // CYRILLIC SMALL LETTER PE
+   0x440,    0xF0,  // CYRILLIC SMALL LETTER ER
+   0x441,    0xF1,  // CYRILLIC SMALL LETTER ES
+   0x442,    0xF2,  // CYRILLIC SMALL LETTER TE
+   0x443,    0xF3,  // CYRILLIC SMALL LETTER U
+   0x444,    0xF4,  // CYRILLIC SMALL LETTER EF
+   0x445,    0xF5,  // CYRILLIC SMALL LETTER HA
+   0x446,    0xF6,  // CYRILLIC SMALL LETTER TSE
+   0x447,    0xF7,  // CYRILLIC SMALL LETTER CHE
+   0x448,    0xF8,  // CYRILLIC SMALL LETTER SHA
+   0x449,    0xF9,  // CYRILLIC SMALL LETTER SHCHA
+   0x44A,    0xFA,  // CYRILLIC SMALL LETTER HARD SIGN
+   0x44B,    0xFB,  // CYRILLIC SMALL LETTER YERU
+   0x44C,    0xFC,  // CYRILLIC SMALL LETTER SOFT SIGN
+   0x44D,    0xFD,  // CYRILLIC SMALL LETTER E
+   0x44E,    0xFE,  // CYRILLIC SMALL LETTER YU
+   0x44F,    0xFF,  // CYRILLIC SMALL LETTER YA
+   0x451,    0xBC,  // CYRILLIC SMALL LETTER IO
+   0x452,    0xA2,  // CYRILLIC SMALL LETTER DJE
+   0x454,    0xB9,  // CYRILLIC SMALL LETTER UKRAINIAN IE
+   0x455,    0xAF,  // CYRILLIC SMALL LETTER DZE
+   0x456,    0x69,  // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;   \cyrii
+   0x457,    0xA8,  // CYRILLIC SMALL LETTER YI
+   0x458,    0x6A,  // CYRILLIC SMALL LETTER JE;                         \cyrje
+   0x459,    0xA7,  // CYRILLIC SMALL LETTER LJE
+   0x45A,    0xBB,  // CYRILLIC SMALL LETTER NJE
+   0x45B,    0xA3,  // CYRILLIC SMALL LETTER TSHE
+   0x45E,    0xB2,  // CYRILLIC SMALL LETTER SHORT U
+   0x45F,    0xB6,  // CYRILLIC SMALL LETTER DZHE
+   0x490,    0x80,  // CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+   0x491,    0xA0,  // CYRILLIC SMALL LETTER GHE WITH UPTURN
+   0x492,    0x81,  // CYRILLIC CAPITAL LETTER GHE WITH STROKE
+   0x493,    0xA1,  // CYRILLIC SMALL LETTER GHE WITH STROKE
+   0x496,    0x85,  // CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+   0x497,    0xA5,  // CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+   0x498,    0x86,  // CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+   0x499,    0xA6,  // CYRILLIC SMALL LETTER ZE WITH DESCENDER
+   0x49A,    0x89,  // CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+   0x49B,    0xA9,  // CYRILLIC SMALL LETTER KA WITH DESCENDER
+   0x49C,    0x8B,  // CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+   0x49D,    0xAB,  // CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+   0x4A0,    0x8A,  // CYRILLIC CAPITAL LETTER BASHKIR KA
+   0x4A1,    0xAA,  // CYRILLIC SMALL LETTER BASHKIR KA
+   0x4A2,    0x8D,  // CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+   0x4A3,    0xAD,  // CYRILLIC SMALL LETTER EN WITH DESCENDER
+   0x4A4,    0x8E,  // CYRILLIC CAPITAL LIGATURE EN GHE
+   0x4A5,    0xAE,  // CYRILLIC SMALL LIGATURE EN GHE
+   0x4AA,    0x91,  // CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+   0x4AB,    0xB1,  // CYRILLIC SMALL LETTER ES WITH DESCENDER
+   0x4AE,    0x93,  // CYRILLIC CAPITAL LETTER STRAIGHT U
+   0x4AF,    0xB3,  // CYRILLIC SMALL LETTER STRAIGHT U
+   0x4B0,    0x94,  // CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+   0x4B1,    0xB4,  // CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+   0x4B2,    0x95,  // CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+   0x4B3,    0xB5,  // CYRILLIC SMALL LETTER HA WITH DESCENDER
+   0x4B6,    0x98,  // CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+   0x4B7,    0xB8,  // CYRILLIC SMALL LETTER CHE WITH DESCENDER
+   0x4B8,    0x97,  // CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+   0x4B9,    0xB7,  // CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+   0x4BA,    0x84,  // CYRILLIC CAPITAL LETTER SHHA
+   0x4BB,    0xA4,  // CYRILLIC SMALL LETTER SHHA
+   0x4C0,    0x0D,  // CYRILLIC LETTER PALOCHKA
+   0x4D4,    0x8C,  // CYRILLIC CAPITAL LIGATURE A IE
+   0x4D5,    0xAC,  // CYRILLIC SMALL LIGATURE A IE
+   0x4D8,    0x9A,  // CYRILLIC CAPITAL LETTER SCHWA
+   0x4D9,    0xBA,  // CYRILLIC SMALL LETTER SCHWA
+   0x4E8,    0x90,  // CYRILLIC CAPITAL LETTER BARRED O
+   0x4E9,    0xB0,  // CYRILLIC SMALL LETTER BARRED O
+  0x200C,    0x17,
+  0x2010,    0x7F,
+  0x2013,    0x15,
+  0x2014,    0x16,
+  0x2018,    0x60,
+  0x2019,    0x27,
+  0x201C,    0x10,
+  0x201D,    0x11,
+  0x201E,    0xBD,
+  0x2116,    0x9D,
+  0x2329,    0x0E,
+  0x232A,    0x0F,
+  0x2423,    0x20,
+};
+
+/* UCS -> T2B mapping table */
+static unsigned short UCStoT2Benc[] = {
+    /* from,  to */
+    0x49,    0x49,  // Latin Capital Letter I; glyph for \CYRII, U+0406 І
+    0x4A,    0x4A,  // Latin Capital Letter J; glyph for \CYRJE, U+0408 Ј
+    0x69,    0x69,  // Latin Small Letter I;   glyph for \cyrii, U+0456 і
+    0x6A,    0x6A,  // Latin Small Letter J;   glyph for \cyrje, U+0458 ј
+    0xA4,    0x9E,
+    0xA7,    0x9F,
+    0xA8,    0x04,
+    0xAB,    0xBE,
+    0xAF,    0x09,
+    0xB4,    0x01,
+    0xB8,    0x0B,
+    0xBB,    0xBF,
+   0x131,    0x19,  // LATIN SMALL LETTER DOTLESS I
+   0x237,    0x1A,  // LATIN SMALL LETTER DOTLESS J
+   0x2C6,    0x02,
+   0x2C7,    0x07,
+   0x2D8,    0x08,
+   0x2D9,    0x0A,
+   0x2DA,    0x06,
+   0x2DB,    0x0C,
+   0x2DC,    0x03,
+   0x2DD,    0x05,
+   0x401,    0x9C,  // CYRILLIC CAPITAL LETTER IO
+   0x406,    0x49,  // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I; \CYRII
+   0x408,    0x4A,  // CYRILLIC CAPITAL LETTER JE                      ; \CYRJE
+   0x409,    0x88,  // CYRILLIC CAPITAL LETTER LJE
+   0x40A,    0x99,  // CYRILLIC CAPITAL LETTER NJE
+   0x40E,    0x92,  // CYRILLIC CAPITAL LETTER SHORT U
+   0x410,    0xC0,  // CYRILLIC CAPITAL LETTER A
+   0x411,    0xC1,  // CYRILLIC CAPITAL LETTER BE
+   0x412,    0xC2,  // CYRILLIC CAPITAL LETTER VE
+   0x413,    0xC3,  // CYRILLIC CAPITAL LETTER GHE
+   0x414,    0xC4,  // CYRILLIC CAPITAL LETTER DE
+   0x415,    0xC5,  // CYRILLIC CAPITAL LETTER IE
+   0x416,    0xC6,  // CYRILLIC CAPITAL LETTER ZHE
+   0x417,    0xC7,  // CYRILLIC CAPITAL LETTER ZE
+   0x418,    0xC8,  // CYRILLIC CAPITAL LETTER I
+   0x419,    0xC9,  // CYRILLIC CAPITAL LETTER SHORT I
+   0x41A,    0xCA,  // CYRILLIC CAPITAL LETTER KA
+   0x41B,    0xCB,  // CYRILLIC CAPITAL LETTER EL
+   0x41C,    0xCC,  // CYRILLIC CAPITAL LETTER EM
+   0x41D,    0xCD,  // CYRILLIC CAPITAL LETTER EN
+   0x41E,    0xCE,  // CYRILLIC CAPITAL LETTER O
+   0x41F,    0xCF,  // CYRILLIC CAPITAL LETTER PE
+   0x420,    0xD0,  // CYRILLIC CAPITAL LETTER ER
+   0x421,    0xD1,  // CYRILLIC CAPITAL LETTER ES
+   0x422,    0xD2,  // CYRILLIC CAPITAL LETTER TE
+   0x423,    0xD3,  // CYRILLIC CAPITAL LETTER U
+   0x424,    0xD4,  // CYRILLIC CAPITAL LETTER EF
+   0x425,    0xD5,  // CYRILLIC CAPITAL LETTER HA
+   0x426,    0xD6,  // CYRILLIC CAPITAL LETTER TSE
+   0x427,    0xD7,  // CYRILLIC CAPITAL LETTER CHE
+   0x428,    0xD8,  // CYRILLIC CAPITAL LETTER SHA
+   0x429,    0xD9,  // CYRILLIC CAPITAL LETTER SHCHA
+   0x42A,    0xDA,  // CYRILLIC CAPITAL LETTER HARD SIGN
+   0x42B,    0xDB,  // CYRILLIC CAPITAL LETTER YERU
+   0x42C,    0xDC,  // CYRILLIC CAPITAL LETTER SOFT SIGN
+   0x42D,    0xDD,  // CYRILLIC CAPITAL LETTER E
+   0x42E,    0xDE,  // CYRILLIC CAPITAL LETTER YU
+   0x42F,    0xDF,  // CYRILLIC CAPITAL LETTER YA
+   0x430,    0xE0,  // CYRILLIC SMALL LETTER A
+   0x431,    0xE1,  // CYRILLIC SMALL LETTER BE
+   0x432,    0xE2,  // CYRILLIC SMALL LETTER VE
+   0x433,    0xE3,  // CYRILLIC SMALL LETTER GHE
+   0x434,    0xE4,  // CYRILLIC SMALL LETTER DE
+   0x435,    0xE5,  // CYRILLIC SMALL LETTER IE
+   0x436,    0xE6,  // CYRILLIC SMALL LETTER ZHE
+   0x437,    0xE7,  // CYRILLIC SMALL LETTER ZE
+   0x438,    0xE8,  // CYRILLIC SMALL LETTER I
+   0x439,    0xE9,  // CYRILLIC SMALL LETTER SHORT I
+   0x43A,    0xEA,  // CYRILLIC SMALL LETTER KA
+   0x43B,    0xEB,  // CYRILLIC SMALL LETTER EL
+   0x43C,    0xEC,  // CYRILLIC SMALL LETTER EM
+   0x43D,    0xED,  // CYRILLIC SMALL LETTER EN
+   0x43E,    0xEE,  // CYRILLIC SMALL LETTER O
+   0x43F,    0xEF,  // CYRILLIC SMALL LETTER PE
+   0x440,    0xF0,  // CYRILLIC SMALL LETTER ER
+   0x441,    0xF1,  // CYRILLIC SMALL LETTER ES
+   0x442,    0xF2,  // CYRILLIC SMALL LETTER TE
+   0x443,    0xF3,  // CYRILLIC SMALL LETTER U
+   0x444,    0xF4,  // CYRILLIC SMALL LETTER EF
+   0x445,    0xF5,  // CYRILLIC SMALL LETTER HA
+   0x446,    0xF6,  // CYRILLIC SMALL LETTER TSE
+   0x447,    0xF7,  // CYRILLIC SMALL LETTER CHE
+   0x448,    0xF8,  // CYRILLIC SMALL LETTER SHA
+   0x449,    0xF9,  // CYRILLIC SMALL LETTER SHCHA
+   0x44A,    0xFA,  // CYRILLIC SMALL LETTER HARD SIGN
+   0x44B,    0xFB,  // CYRILLIC SMALL LETTER YERU
+   0x44C,    0xFC,  // CYRILLIC SMALL LETTER SOFT SIGN
+   0x44D,    0xFD,  // CYRILLIC SMALL LETTER E
+   0x44E,    0xFE,  // CYRILLIC SMALL LETTER YU
+   0x44F,    0xFF,  // CYRILLIC SMALL LETTER YA
+   0x451,    0xBC,  // CYRILLIC SMALL LETTER IO
+   0x456,    0x69,  // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;   \cyrii
+   0x458,    0x6A,  // CYRILLIC SMALL LETTER JE;                         \cyrje
+   0x459,    0xA8,  // CYRILLIC SMALL LETTER LJE
+   0x45A,    0xB9,  // CYRILLIC SMALL LETTER NJE
+   0x45E,    0xB2,  // CYRILLIC SMALL LETTER SHORT U
+   0x492,    0x81,  // CYRILLIC CAPITAL LETTER GHE WITH STROKE
+   0x493,    0xA1,  // CYRILLIC SMALL LETTER GHE WITH STROKE
+   0x494,    0x83,  // CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+   0x495,    0xA3,  // CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+   0x496,    0x85,  // CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+   0x497,    0xA5,  // CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+   0x49A,    0x89,  // CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+   0x49B,    0xA9,  // CYRILLIC SMALL LETTER KA WITH DESCENDER
+   0x4A2,    0x8D,  // CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+   0x4A3,    0xAD,  // CYRILLIC SMALL LETTER EN WITH DESCENDER
+   0x4A4,    0x8E,  // CYRILLIC CAPITAL LIGATURE EN GHE
+   0x4A5,    0xAE,  // CYRILLIC SMALL LIGATURE EN GHE
+   0x4AE,    0x93,  // CYRILLIC CAPITAL LETTER STRAIGHT U
+   0x4AF,    0xB3,  // CYRILLIC SMALL LETTER STRAIGHT U
+   0x4B2,    0x95,  // CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+   0x4B3,    0xB5,  // CYRILLIC SMALL LETTER HA WITH DESCENDER
+   0x4B6,    0x98,  // CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+   0x4B7,    0xB8,  // CYRILLIC SMALL LETTER CHE WITH DESCENDER
+   0x4BA,    0x84,  // CYRILLIC CAPITAL LETTER SHHA
+   0x4BB,    0xA4,  // CYRILLIC SMALL LETTER SHHA
+   0x4C0,    0x0D,  // CYRILLIC LETTER PALOCHKA
+   0x4C3,    0x8B,  // CYRILLIC CAPITAL LETTER KA WITH HOOK
+   0x4C4,    0xAB,  // CYRILLIC SMALL LETTER KA WITH HOOK
+   0x4C5,    0x8A,  // CYRILLIC CAPITAL LETTER EL WITH TAIL
+   0x4C6,    0xAA,  // CYRILLIC SMALL LETTER EL WITH TAIL
+   0x4C7,    0x8F,  // CYRILLIC CAPITAL LETTER EN WITH HOOK
+   0x4C8,    0xAF,  // CYRILLIC SMALL LETTER EN WITH HOOK
+   0x4CB,    0x97,  // CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+   0x4CC,    0xB7,  // CYRILLIC SMALL LETTER KHAKASSIAN CHE
+   0x4D8,    0x9A,  // CYRILLIC CAPITAL LETTER SCHWA
+   0x4D9,    0xBA,  // CYRILLIC SMALL LETTER SCHWA
+   0x4E0,    0x87,  // CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+   0x4E1,    0xA7,  // CYRILLIC SMALL LETTER ABKHASIAN DZE
+   0x4E8,    0x90,  // CYRILLIC CAPITAL LETTER BARRED O
+   0x4E9,    0xB0,  // CYRILLIC SMALL LETTER BARRED O
+   0x4F6,    0x82,  // CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+   0x4F7,    0xA2,  // CYRILLIC SMALL LETTER GHE WITH DESCENDER
+   0x4FA,    0x80,  // CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+   0x4FB,    0xA0,  // CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+   0x4FC,    0x96,  // CYRILLIC CAPITAL LETTER HA WITH HOOK
+   0x4FD,    0xB6,  // CYRILLIC SMALL LETTER HA WITH HOOK
+   0x4FE,    0x94,  // CYRILLIC CAPITAL LETTER HA WITH STROKE
+   0x4FF,    0xB4,  // CYRILLIC SMALL LETTER HA WITH STROKE
+   0x510,    0x9B,  // CYRILLIC CAPITAL LETTER REVERSED ZE
+   0x511,    0xBB,  // CYRILLIC SMALL LETTER REVERSED ZE
+   0x512,    0x8C,  // CYRILLIC CAPITAL LETTER EL WITH HOOK
+   0x513,    0xAC,  // CYRILLIC SMALL LETTER EL WITH HOOK
+  0x200C,    0x17,
+  0x2010,    0x7F,
+  0x2013,    0x15,
+  0x2014,    0x16,
+  0x2018,    0x60,
+  0x2019,    0x27,
+  0x201C,    0x10,
+  0x201D,    0x11,
+  0x201E,    0xBD,
+  0x2116,    0x9D,
+  0x2329,    0x0E,
+  0x232A,    0x0F,
+  0x2423,    0x20,
+};
+
+/* UCS -> T2C mapping table */
+static unsigned short UCStoT2Cenc[] = {
+    /* from,  to */
+    0x49,    0x49,  // Latin Capital Letter I; glyph for \CYRII, U+0406 І
+    0x4A,    0x4A,  // Latin Capital Letter J; glyph for \CYRJE, U+0408 Ј
+    0x69,    0x69,  // Latin Small Letter I;   glyph for \cyrii, U+0456 і
+    0x6A,    0x6A,  // Latin Small Letter J;   glyph for \cyrje, U+0458 ј
+    0xA4,    0x9E,
+    0xA7,    0x9F,
+    0xA8,    0x04,
+    0xAB,    0xBE,
+    0xAF,    0x09,
+    0xB4,    0x01,
+    0xB8,    0x0B,
+    0xBB,    0xBF,
+   0x131,    0x19,  // LATIN SMALL LETTER DOTLESS I
+   0x237,    0x1A,  // LATIN SMALL LETTER DOTLESS J
+   0x2C6,    0x02,
+   0x2C7,    0x07,
+   0x2D8,    0x08,
+   0x2D9,    0x0A,
+   0x2DA,    0x06,
+   0x2DB,    0x0C,
+   0x2DC,    0x03,
+   0x2DD,    0x05,
+   0x401,    0x9C,  // CYRILLIC CAPITAL LETTER IO
+   0x406,    0x49,  // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I; \CYRII
+   0x408,    0x4A,  // CYRILLIC CAPITAL LETTER JE                      ; \CYRJE
+   0x40F,    0x96,  // CYRILLIC CAPITAL LETTER DZHE
+   0x410,    0xC0,  // CYRILLIC CAPITAL LETTER A
+   0x411,    0xC1,  // CYRILLIC CAPITAL LETTER BE
+   0x412,    0xC2,  // CYRILLIC CAPITAL LETTER VE
+   0x413,    0xC3,  // CYRILLIC CAPITAL LETTER GHE
+   0x414,    0xC4,  // CYRILLIC CAPITAL LETTER DE
+   0x415,    0xC5,  // CYRILLIC CAPITAL LETTER IE
+   0x416,    0xC6,  // CYRILLIC CAPITAL LETTER ZHE
+   0x417,    0xC7,  // CYRILLIC CAPITAL LETTER ZE
+   0x418,    0xC8,  // CYRILLIC CAPITAL LETTER I
+   0x419,    0xC9,  // CYRILLIC CAPITAL LETTER SHORT I
+   0x41A,    0xCA,  // CYRILLIC CAPITAL LETTER KA
+   0x41B,    0xCB,  // CYRILLIC CAPITAL LETTER EL
+   0x41C,    0xCC,  // CYRILLIC CAPITAL LETTER EM
+   0x41D,    0xCD,  // CYRILLIC CAPITAL LETTER EN
+   0x41E,    0xCE,  // CYRILLIC CAPITAL LETTER O
+   0x41F,    0xCF,  // CYRILLIC CAPITAL LETTER PE
+   0x420,    0xD0,  // CYRILLIC CAPITAL LETTER ER
+   0x421,    0xD1,  // CYRILLIC CAPITAL LETTER ES
+   0x422,    0xD2,  // CYRILLIC CAPITAL LETTER TE
+   0x423,    0xD3,  // CYRILLIC CAPITAL LETTER U
+   0x424,    0xD4,  // CYRILLIC CAPITAL LETTER EF
+   0x425,    0xD5,  // CYRILLIC CAPITAL LETTER HA
+   0x426,    0xD6,  // CYRILLIC CAPITAL LETTER TSE
+   0x427,    0xD7,  // CYRILLIC CAPITAL LETTER CHE
+   0x428,    0xD8,  // CYRILLIC CAPITAL LETTER SHA
+   0x429,    0xD9,  // CYRILLIC CAPITAL LETTER SHCHA
+   0x42A,    0xDA,  // CYRILLIC CAPITAL LETTER HARD SIGN
+   0x42B,    0xDB,  // CYRILLIC CAPITAL LETTER YERU
+   0x42C,    0xDC,  // CYRILLIC CAPITAL LETTER SOFT SIGN
+   0x42D,    0xDD,  // CYRILLIC CAPITAL LETTER E
+   0x42E,    0xDE,  // CYRILLIC CAPITAL LETTER YU
+   0x42F,    0xDF,  // CYRILLIC CAPITAL LETTER YA
+   0x430,    0xE0,  // CYRILLIC SMALL LETTER A
+   0x431,    0xE1,  // CYRILLIC SMALL LETTER BE
+   0x432,    0xE2,  // CYRILLIC SMALL LETTER VE
+   0x433,    0xE3,  // CYRILLIC SMALL LETTER GHE
+   0x434,    0xE4,  // CYRILLIC SMALL LETTER DE
+   0x435,    0xE5,  // CYRILLIC SMALL LETTER IE
+   0x436,    0xE6,  // CYRILLIC SMALL LETTER ZHE
+   0x437,    0xE7,  // CYRILLIC SMALL LETTER ZE
+   0x438,    0xE8,  // CYRILLIC SMALL LETTER I
+   0x439,    0xE9,  // CYRILLIC SMALL LETTER SHORT I
+   0x43A,    0xEA,  // CYRILLIC SMALL LETTER KA
+   0x43B,    0xEB,  // CYRILLIC SMALL LETTER EL
+   0x43C,    0xEC,  // CYRILLIC SMALL LETTER EM
+   0x43D,    0xED,  // CYRILLIC SMALL LETTER EN
+   0x43E,    0xEE,  // CYRILLIC SMALL LETTER O
+   0x43F,    0xEF,  // CYRILLIC SMALL LETTER PE
+   0x440,    0xF0,  // CYRILLIC SMALL LETTER ER
+   0x441,    0xF1,  // CYRILLIC SMALL LETTER ES
+   0x442,    0xF2,  // CYRILLIC SMALL LETTER TE
+   0x443,    0xF3,  // CYRILLIC SMALL LETTER U
+   0x444,    0xF4,  // CYRILLIC SMALL LETTER EF
+   0x445,    0xF5,  // CYRILLIC SMALL LETTER HA
+   0x446,    0xF6,  // CYRILLIC SMALL LETTER TSE
+   0x447,    0xF7,  // CYRILLIC SMALL LETTER CHE
+   0x448,    0xF8,  // CYRILLIC SMALL LETTER SHA
+   0x449,    0xF9,  // CYRILLIC SMALL LETTER SHCHA
+   0x44A,    0xFA,  // CYRILLIC SMALL LETTER HARD SIGN
+   0x44B,    0xFB,  // CYRILLIC SMALL LETTER YERU
+   0x44C,    0xFC,  // CYRILLIC SMALL LETTER SOFT SIGN
+   0x44D,    0xFD,  // CYRILLIC SMALL LETTER E
+   0x44E,    0xFE,  // CYRILLIC SMALL LETTER YU
+   0x44F,    0xFF,  // CYRILLIC SMALL LETTER YA
+   0x451,    0xBC,  // CYRILLIC SMALL LETTER IO
+   0x456,    0x69,  // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;   \cyrii
+   0x458,    0x6A,  // CYRILLIC SMALL LETTER JE;                         \cyrje
+   0x45F,    0xB6,  // CYRILLIC SMALL LETTER DZHE
+   0x48A,    0x94,  // CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+   0x48B,    0xB4,  // CYRILLIC SMALL LETTER SHORT I WITH TAIL
+   0x48C,    0x93,  // CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+   0x48D,    0xB3,  // CYRILLIC SMALL LETTER SEMISOFT SIGN
+   0x48E,    0x86,  // CYRILLIC CAPITAL LETTER ER WITH TICK
+   0x48F,    0xA6,  // CYRILLIC SMALL LETTER ER WITH TICK
+   0x494,    0x83,  // CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+   0x495,    0xA3,  // CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+   0x49A,    0x89,  // CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+   0x49B,    0xA9,  // CYRILLIC SMALL LETTER KA WITH DESCENDER
+   0x49E,    0x8B,  // CYRILLIC CAPITAL LETTER KA WITH STROKE
+   0x49F,    0xAB,  // CYRILLIC SMALL LETTER KA WITH STROKE
+   0x4A2,    0x8D,  // CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+   0x4A3,    0xAD,  // CYRILLIC SMALL LETTER EN WITH DESCENDER
+   0x4A6,    0x80,  // CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+   0x4A7,    0xA0,  // CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+   0x4A8,    0x97,  // CYRILLIC CAPITAL LETTER ABKHASIAN HA
+   0x4A9,    0xB7,  // CYRILLIC SMALL LETTER ABKHASIAN HA
+   0x4AC,    0x82,  // CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+   0x4AD,    0xA2,  // CYRILLIC SMALL LETTER TE WITH DESCENDER
+   0x4B2,    0x95,  // CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+   0x4B3,    0xB5,  // CYRILLIC SMALL LETTER HA WITH DESCENDER
+   0x4B4,    0x81,  // CYRILLIC CAPITAL LIGATURE TE TSE
+   0x4B5,    0xA1,  // CYRILLIC SMALL LIGATURE TE TSE
+   0x4B6,    0x98,  // CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+   0x4B7,    0xB8,  // CYRILLIC SMALL LETTER CHE WITH DESCENDER
+   0x4BA,    0x84,  // CYRILLIC CAPITAL LETTER SHHA
+   0x4BB,    0xA4,  // CYRILLIC SMALL LETTER SHHA
+   0x4BC,    0x91,  // CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+   0x4BD,    0xB1,  // CYRILLIC SMALL LETTER ABKHASIAN CHE
+   0x4BE,    0x92,  // CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+   0x4BF,    0xB2,  // CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+   0x4C0,    0x0D,  // CYRILLIC LETTER PALOCHKA
+   0x4C5,    0x8A,  // CYRILLIC CAPITAL LETTER EL WITH TAIL
+   0x4C6,    0xAA,  // CYRILLIC SMALL LETTER EL WITH TAIL
+   0x4C7,    0x8F,  // CYRILLIC CAPITAL LETTER EN WITH HOOK
+   0x4C8,    0xAF,  // CYRILLIC SMALL LETTER EN WITH HOOK
+   0x4CD,    0x88,  // CYRILLIC CAPITAL LETTER EM WITH TAIL
+   0x4CE,    0xA8,  // CYRILLIC SMALL LETTER EM WITH TAIL
+   0x4D8,    0x9A,  // CYRILLIC CAPITAL LETTER SCHWA
+   0x4D9,    0xBA,  // CYRILLIC SMALL LETTER SCHWA
+   0x4E0,    0x87,  // CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+   0x4E1,    0xA7,  // CYRILLIC SMALL LETTER ABKHASIAN DZE
+   0x4E8,    0x90,  // CYRILLIC CAPITAL LETTER BARRED O
+   0x4E9,    0xB0,  // CYRILLIC SMALL LETTER BARRED O
+   0x512,    0x8C,  // CYRILLIC CAPITAL LETTER EL WITH HOOK
+   0x513,    0xAC,  // CYRILLIC SMALL LETTER EL WITH HOOK
+   0x528,    0x99,  // CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+   0x529,    0xB9,  // CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+  0x200C,    0x17,
+  0x2010,    0x7F,
+  0x2013,    0x15,
+  0x2014,    0x16,
+  0x2018,    0x60,
+  0x2019,    0x27,
+  0x201C,    0x10,
+  0x201D,    0x11,
+  0x201E,    0xBD,
+  0x2116,    0x9D,
+  0x2329,    0x0E,
+  0x232A,    0x0F,
+  0x2423,    0x20,
+};
+
+/* UCS -> LGR mapping table */
+static unsigned short UCStoLGRenc[] = {
+    /* from,  to */
+    0xAB,    0x7B,
+    0xBB,    0x7D,
+   0x259,    0x1A,  // Latin Small Letter Schwa
+   0x374,    0xFE,  // Greek Numeral Sign
+   0x375,    0xFF,  // Greek Lower Numeral Sign
+   0x37A,    0x7C,  // Greek Ypogegrammeni
+   0x37E,    0x3F,  // Greek Question Mark
+   0x384,    0x27,  // Greek Tonos
+   0x386,    0xFD,  // Greek Capital Letter Alpha with Tonos
+   0x387,    0x26,  // Greek Ano Teleia
+   0x388,    0xC7,  // Greek Capital Letter Epsilon with Tonos
+   0x389,    0x9F,  // Greek Capital Letter Eta with Tonos
+   0x38A,    0x9B,  // Greek Capital Letter Iota with Tonos
+   0x38C,    0x97,  // Greek Capital Letter Omicron with Tonos
+   0x390,    0xF2,  // Greek Small Letter Iota with Dialytika and Tonos
+
+   0x391,    0x0C,  // Greek Capital Letter Alpha
+//   0x391,    0x41,  // Greek Capital Letter Alpha
+   0x392,    0x42,  // Greek Capital Letter Beta
+   0x393,    0x47,  // Greek Capital Letter Gamma
+   0x394,    0x44,  // Greek Capital Letter Delta
+   0x395,    0x45,  // Greek Capital Letter Epsilon
+   0x396,    0x5A,  // Greek Capital Letter Zeta
+   0x397,    0x48,  // Greek Capital Letter Eta
+   0x398,    0x4A,  // Greek Capital Letter Theta
+   0x399,    0x49,  // Greek Capital Letter Iota
+   0x39A,    0x4B,  // Greek Capital Letter Kappa
+   0x39B,    0x4C,  // Greek Capital Letter Lamda
+   0x39C,    0x4D,  // Greek Capital Letter Mu
+   0x39D,    0x4E,  // Greek Capital Letter Nu
+   0x39E,    0x58,  // Greek Capital Letter Xi
+   0x39F,    0x4F,  // Greek Capital Letter Omicron
+   0x3A0,    0x50,  // Greek Capital Letter Pi
+   0x3A1,    0x52,  // Greek Capital Letter Rho
+   0x3A3,    0x53,  // Greek Capital Letter Sigma
+   0x3A4,    0x54,  // Greek Capital Letter Tau
+   0x3A5,    0x55,  // Greek Capital Letter Upsilon
+   0x3A6,    0x46,  // Greek Capital Letter Phi
+   0x3A7,    0x51,  // Greek Capital Letter Chi
+   0x3A8,    0x59,  // Greek Capital Letter Psi
+   0x3A9,    0x57,  // Greek Capital Letter Omega
+
+   0x3AA,    0xDB,  // Greek Capital Letter Iota with Dialytika
+//   0x3AB,    0x13,  // Greek Capital Letter Upsilon with Dialytika
+   0x3AB,    0xDF,  // Greek Capital Letter Upsilon with Dialytika
+   0x3AC,    0x88,  // Greek Small Letter Alpha with Tonos
+   0x3AD,    0xE8,  // Greek Small Letter Epsilon with Tonos
+   0x3AE,    0xA0,  // Greek Small Letter Eta with Tonos
+   0x3AF,    0xD0,  // Greek Small Letter Iota with Tonos
+   0x3B0,    0xF6,  // Greek Small Letter Upsilon with Dialytika and Tonos
+
+   0x3B1,    0x0E,  // Greek Small Letter Alpha
+//   0x3B1,    0x61,  // Greek Small Letter Alpha
+   0x3B2,    0x62,  // Greek Small Letter Beta
+   0x3B3,    0x67,  // Greek Small Letter Gamma
+   0x3B4,    0x64,  // Greek Small Letter Delta
+   0x3B5,    0x65,  // Greek Small Letter Epsilon
+   0x3B6,    0x7A,  // Greek Small Letter Zeta
+   0x3B7,    0x68,  // Greek Small Letter Eta
+   0x3B8,    0x6A,  // Greek Small Letter Theta
+   0x3B9,    0x69,  // Greek Small Letter Iota
+   0x3BA,    0x6B,  // Greek Small Letter Kappa
+   0x3BB,    0x6C,  // Greek Small Letter Lamda
+   0x3BC,    0x6D,  // Greek Small Letter Mu
+   0x3BD,    0x6E,  // Greek Small Letter Nu
+   0x3BE,    0x78,  // Greek Small Letter Xi
+   0x3BF,    0x6F,  // Greek Small Letter Omicron
+   0x3C0,    0x70,  // Greek Small Letter Pi
+   0x3C1,    0x72,  // Greek Small Letter Rho
+   0x3C2,    0x63,  // Greek Small Letter Final Sigma
+   0x3C3,    0x73,  // Greek Small Letter Sigma
+   0x3C4,    0x74,  // Greek Small Letter Tau
+   0x3C5,    0x75,  // Greek Small Letter Upsilon
+   0x3C6,    0x66,  // Greek Small Letter Phi
+   0x3C7,    0x71,  // Greek Small Letter Chi
+   0x3C8,    0x79,  // Greek Small Letter Psi
+   0x3C9,    0x77,  // Greek Small Letter Omega
+
+   0x3CA,    0xF0,  // Greek Small Letter Iota with Dialytika
+//   0x3CB,    0x0F,  // Greek Small Letter Upsilon with Dialytika
+   0x3CB,    0xF4,  // Greek Small Letter Upsilon with Dialytika
+   0x3CC,    0xEC,  // Greek Small Letter Omicron with Tonos
+   0x3CD,    0xD4,  // Greek Small Letter Upsilon with Tonos
+   0x3CE,    0xB8,  // Greek Small Letter Omega with Tonos
+   0x3D8,    0x15,  // Greek Letter Archaic Koppa
+   0x3D9,    0x13,  // Greek Small Letter Archaic Koppa
+   0x3DA,    0x16,  // Greek Letter Stigma
+   0x3DB,    0x06,  // Greek Small Letter Stigma
+   0x3DD,    0x93,  // Greek Small Letter Digamma
+   0x3DF,    0x12,  // Greek Small Letter Koppa
+   0x3E0,    0x17,  // Greek Letter Sampi
+   0x3E1,    0x1B,  // Greek Small Letter Sampi
+
+  0x1F00,    0x82,  // Greek Small Letter Alpha with Psili
+  0x1F01,    0x81,  // Greek Small Letter Alpha with Dasia
+  0x1F02,    0x8B,  // Greek Small Letter Alpha with Psili and Varia
+  0x1F03,    0x83,  // Greek Small Letter Alpha with Dasia and Varia
+  0x1F04,    0x8A,  // Greek Small Letter Alpha with Psili and Oxia
+  0x1F05,    0x89,  // Greek Small Letter Alpha with Dasia and Oxia
+  0x1F06,    0x92,  // Greek Small Letter Alpha with Psili and Perispomeni
+  0x1F07,    0x91,  // Greek Small Letter Alpha with Dasia and Perispomeni
+  0x1F10,    0xE2,  // Greek Small Letter Epsilon with Psili
+  0x1F11,    0xE1,  // Greek Small Letter Epsilon with Dasia
+  0x1F12,    0xEB,  // Greek Small Letter Epsilon with Psili and Varia
+  0x1F13,    0xE3,  // Greek Small Letter Epsilon with Dasia and Varia
+  0x1F14,    0xEA,  // Greek Small Letter Epsilon with Psili and Oxia
+  0x1F15,    0xE9,  // Greek Small Letter Epsilon with Dasia and Oxia
+  0x1F20,    0x9A,  // Greek Small Letter Eta with Psili
+  0x1F21,    0x99,  // Greek Small Letter Eta with Dasia
+  0x1F22,    0xAB,  // Greek Small Letter Eta with Psili and Varia
+  0x1F23,    0xA3,  // Greek Small Letter Eta with Dasia and Varia
+  0x1F24,    0xA2,  // Greek Small Letter Eta with Psili and Oxia
+  0x1F25,    0xA1,  // Greek Small Letter Eta with Dasia and Oxia
+  0x1F26,    0xAA,  // Greek Small Letter Eta with Psili and Perispomeni
+  0x1F27,    0xA9,  // Greek Small Letter Eta with Dasia and Perispomeni
+  0x1F30,    0xCA,  // Greek Small Letter Iota with Psili
+  0x1F31,    0xC9,  // Greek Small Letter Iota with Dasia
+  0x1F32,    0xD3,  // Greek Small Letter Iota with Psili and Varia
+  0x1F33,    0xCB,  // Greek Small Letter Iota with Dasia and Varia
+  0x1F34,    0xD2,  // Greek Small Letter Iota with Psili and Oxia
+  0x1F35,    0xD1,  // Greek Small Letter Iota with Dasia and Oxia
+  0x1F36,    0xDA,  // Greek Small Letter Iota with Psili and Perispomeni
+  0x1F37,    0xD9,  // Greek Small Letter Iota with Dasia and Perispomeni
+  0x1F40,    0xE6,  // Greek Small Letter Omicron with Psili
+  0x1F41,    0xE5,  // Greek Small Letter Omicron with Dasia
+  0x1F42,    0xEF,  // Greek Small Letter Omicron with Psili and Varia
+  0x1F43,    0xE7,  // Greek Small Letter Omicron with Dasia and Varia
+  0x1F44,    0xEE,  // Greek Small Letter Omicron with Psili and Oxia
+  0x1F45,    0xED,  // Greek Small Letter Omicron with Dasia and Oxia
+  0x1F50,    0xCE,  // Greek Small Letter Upsilon with Psili
+  0x1F51,    0xCD,  // Greek Small Letter Upsilon with Dasia
+  0x1F52,    0xD7,  // Greek Small Letter Upsilon with Psili and Varia
+  0x1F53,    0xCF,  // Greek Small Letter Upsilon with Dasia and Varia
+  0x1F54,    0xD6,  // Greek Small Letter Upsilon with Psili and Oxia
+  0x1F55,    0xD5,  // Greek Small Letter Upsilon with Dasia and Oxia
+  0x1F56,    0xDE,  // Greek Small Letter Upsilon with Psili and Perispomeni
+  0x1F57,    0xDD,  // Greek Small Letter Upsilon with Dasia and Perispomeni
+  0x1F60,    0xB2,  // Greek Small Letter Omega with Psili
+  0x1F61,    0xB1,  // Greek Small Letter Omega with Dasia
+  0x1F62,    0xBB,  // Greek Small Letter Omega with Psili and Varia
+  0x1F63,    0xB3,  // Greek Small Letter Omega with Dasia and Varia
+  0x1F64,    0xBA,  // Greek Small Letter Omega with Psili and Oxia
+  0x1F65,    0xB9,  // Greek Small Letter Omega with Dasia and Oxia
+  0x1F66,    0xC2,  // Greek Small Letter Omega with Psili and Perispomeni
+  0x1F67,    0xC1,  // Greek Small Letter Omega with Dasia and Perispomeni
+  0x1F70,    0x80,  // Greek Small Letter Alpha with Varia
+  0x1F71,    0x88,  // Greek Small Letter Alpha with Oxia
+  0x1F72,    0xE0,  // Greek Small Letter Epsilon with Varia
+  0x1F73,    0xE8,  // Greek Small Letter Epsilon with Oxia
+  0x1F74,    0x98,  // Greek Small Letter Eta with Varia
+  0x1F75,    0xA0,  // Greek Small Letter Eta with Oxia
+  0x1F76,    0xC8,  // Greek Small Letter Iota with Varia
+  0x1F77,    0xD0,  // Greek Small Letter Iota with Oxia
+  0x1F78,    0xE4,  // Greek Small Letter Omicron with Varia
+  0x1F79,    0xEC,  // Greek Small Letter Omicron with Oxia
+  0x1F7A,    0xCC,  // Greek Small Letter Upsilon with Varia
+  0x1F7B,    0xD4,  // Greek Small Letter Upsilon with Oxia
+  0x1F7C,    0xB0,  // Greek Small Letter Omega with Varia
+  0x1F7D,    0xB8,  // Greek Small Letter Omega with Oxia
+  0x1F80,    0x86,  // Greek Small Letter Alpha with Psili and Ypogegrammeni
+  0x1F81,    0x85,  // Greek Small Letter Alpha with Dasia and Ypogegrammeni
+  0x1F82,    0x8F,  // Greek Small Letter Alpha with Psili and Varia and Ypogegrammeni
+  0x1F83,    0x87,  // Greek Small Letter Alpha with Dasia and Varia and Ypogegrammeni
+  0x1F84,    0x8E,  // Greek Small Letter Alpha with Psili and Oxia and Ypogegrammeni
+  0x1F85,    0x8D,  // Greek Small Letter Alpha with Dasia and Oxia and Ypogegrammeni
+  0x1F86,    0x96,  // Greek Small Letter Alpha with Psili and Perispomeni and Ypogegrammeni
+  0x1F87,    0x95,  // Greek Small Letter Alpha with Dasia and Perispomeni and Ypogegrammeni
+  0x1F90,    0x9E,  // Greek Small Letter Eta with Psili and Ypogegrammeni
+  0x1F91,    0x9D,  // Greek Small Letter Eta with Dasia and Ypogegrammeni
+  0x1F92,    0xAF,  // Greek Small Letter Eta with Psili and Varia and Ypogegrammeni
+  0x1F93,    0xA7,  // Greek Small Letter Eta with Dasia and Varia and Ypogegrammeni
+  0x1F94,    0xA6,  // Greek Small Letter Eta with Psili and Oxia and Ypogegrammeni
+  0x1F95,    0xA5,  // Greek Small Letter Eta with Dasia and Oxia and Ypogegrammeni
+  0x1F96,    0xAE,  // Greek Small Letter Eta with Psili and Perispomeni and Ypogegrammeni
+  0x1F97,    0xAD,  // Greek Small Letter Eta with Dasia and Perispomeni and Ypogegrammeni
+  0x1FA0,    0xB6,  // Greek Small Letter Omega with Psili and Ypogegrammeni
+  0x1FA1,    0xB5,  // Greek Small Letter Omega with Dasia and Ypogegrammeni
+  0x1FA2,    0xBF,  // Greek Small Letter Omega with Psili and Varia and Ypogegrammeni
+  0x1FA3,    0xB7,  // Greek Small Letter Omega with Dasia and Varia and Ypogegrammeni
+  0x1FA4,    0xBE,  // Greek Small Letter Omega with Psili and Oxia and Ypogegrammeni
+  0x1FA5,    0xBD,  // Greek Small Letter Omega with Dasia and Oxia and Ypogegrammeni
+  0x1FA6,    0xC6,  // Greek Small Letter Omega with Psili and Perispomeni and Ypogegrammeni
+  0x1FA7,    0xC5,  // Greek Small Letter Omega with Dasia and Perispomeni and Ypogegrammeni
+  0x1FB2,    0x84,  // Greek Small Letter Alpha with Varia and Ypogegrammeni
+  0x1FB3,    0xF8,  // Greek Small Letter Alpha with Ypogegrammeni
+  0x1FB4,    0x8C,  // Greek Small Letter Alpha with Oxia and Ypogegrammeni
+  0x1FB6,    0x90,  // Greek Small Letter Alpha with Perispomeni
+  0x1FB7,    0x94,  // Greek Small Letter Alpha with Perispomeni and Ypogegrammeni
+  0x1FBC,    0x09,  // Greek Capital Letter Alpha with Prosgegrammeni
+  0x1FBD,    0x3E,  // Greek Koronis
+  0x1FBE,    0x08,  // Greek Prosgegrammeni
+  0x1FBF,    0x3E,  // Greek Psili
+  0x1FC0,    0x7E,  // Greek Perispomeni
+  0x1FC1,    0x20,  // Greek Dialytika and Perispomeni
+  0x1FC2,    0x9C,  // Greek Small Letter Eta with Varia and Ypogegrammeni
+  0x1FC3,    0xF9,  // Greek Small Letter Eta with Ypogegrammeni
+  0x1FC4,    0xA4,  // Greek Small Letter Eta with Oxia and Ypogegrammeni
+  0x1FC6,    0xA8,  // Greek Small Letter Eta with Perispomeni
+  0x1FC7,    0xAC,  // Greek Small Letter Eta with Perispomeni and Ypogegrammeni
+  0x1FCC,    0x0A,  // Greek Capital Letter Eta with Prosgegrammeni
+  0x1FCD,    0x5F,  // Greek Psili and Varia
+  0x1FCE,    0x5E,  // Greek Psili and Oxia
+  0x1FCF,    0x5C,  // Greek Psili and Perispomeni
+  0x1FD2,    0xF1,  // Greek Small Letter Iota with Dialytika and Varia
+  0x1FD3,    0xF2,  // Greek Small Letter Iota with Dialytika and Oxia
+  0x1FD6,    0xD8,  // Greek Small Letter Iota with Perispomeni
+  0x1FD7,    0xF3,  // Greek Small Letter Iota with Dialytika and Perispomeni
+  0x1FDD,    0x43,  // Greek Dasia and Varia
+  0x1FDE,    0x56,  // Greek Dasia and Oxia
+  0x1FDF,    0x40,  // Greek Dasia and Perispomeni
+  0x1FE2,    0xF5,  // Greek Small Letter Upsilon with Dialytika and Varia
+  0x1FE3,    0xF6,  // Greek Small Letter Upsilon with Dialytika and Oxia
+  0x1FE4,    0xFC,  // Greek Small Letter Rho with Psili
+  0x1FE5,    0xFB,  // Greek Small Letter Rho with Dasia
+  0x1FE6,    0xDC,  // Greek Small Letter Upsilon with Perispomeni
+  0x1FE7,    0xF7,  // Greek Small Letter Upsilon with Dialytika and Perispomeni
+  0x1FED,    0x23,  // Greek Dialytika and Varia
+  0x1FEE,    0x24,  // Greek Dialytika and Oxia
+  0x1FEF,    0x60,  // Greek Varia
+  0x1FF2,    0xB4,  // Greek Small Letter Omega with Varia and Ypogegrammeni
+  0x1FF3,    0xFA,  // Greek Small Letter Omega with Ypogegrammeni
+  0x1FF4,    0xBC,  // Greek Small Letter Omega with Oxia and Ypogegrammeni
+  0x1FF6,    0xC0,  // Greek Small Letter Omega with Perispomeni
+  0x1FF7,    0xC4,  // Greek Small Letter Omega with Perispomeni and Ypogegrammeni
+  0x1FFC,    0x0B,  // Greek Capital Letter Omega with Prosgegrammeni
+  0x1FFD,    0x27,  // Greek Oxia
+  0x1FFE,    0x3C,  // Greek Dasia
+  0x2013,    0x00,
+  0x2014,    0x7F,
+  0x2018,    0x1C,
+  0x2019,    0x1D,
+  0x2030,    0x19,
+  0x20AC,    0x18,
+  0x2126,    0x57,
+};
+
+#endif /* TEX8BENC_H */
+
+#ifdef __cplusplus
+}
+#endif
+

Modified: trunk/Build/source/texk/ptexenc/unicode.c
===================================================================
--- trunk/Build/source/texk/ptexenc/unicode.c	2024-10-19 23:45:43 UTC (rev 72598)
+++ trunk/Build/source/texk/ptexenc/unicode.c	2024-10-20 06:53:14 UTC (rev 72599)
@@ -6,6 +6,7 @@
 #include <ptexenc/c-auto.h>
 #include <ptexenc/unicode.h>
 #include <ptexenc/kanjicnv.h>
+#include <tex8benc.h>
 
 #include <stdio.h>  /* for fprintf() */
 
@@ -335,3 +336,85 @@
     if (uvs) *uvs = 0;
     return 0;
 }
+
+long
+ptenc_ucs_to_8bit_code(short enc, long uch)
+{
+    unsigned short *UCSto_enc, uch0;
+    int mid, left, right, size;
+
+    if (enc<0x80 || uch<0x80) return uch; /* no conversion */
+
+    switch (enc) {
+    case 0x80: UCSto_enc = UCStoT1enc;  size = sizeof(UCStoT1enc);
+      break;
+    case 0x81: UCSto_enc = UCStoTS1enc; size = sizeof(UCStoTS1enc);
+      break;
+    case 0x82: UCSto_enc = UCStoLY1enc; size = sizeof(UCStoLY1enc);
+      break;
+    case 0x83: UCSto_enc = UCStoT5enc;  size = sizeof(UCStoT5enc);
+      break;
+    case 0x84: UCSto_enc = UCStoL7Xenc; size = sizeof(UCStoL7Xenc);
+      break;
+    case 0x90: UCSto_enc = UCStoT2Aenc; size = sizeof(UCStoT2Aenc);
+      break;
+    case 0x91: UCSto_enc = UCStoT2Benc; size = sizeof(UCStoT2Benc);
+      break;
+    case 0x92: UCSto_enc = UCStoT2Cenc; size = sizeof(UCStoT2Cenc);
+      break;
+    case 0xA0: UCSto_enc = UCStoLGRenc; size = sizeof(UCStoLGRenc);
+      break;
+    default:
+      return 256; /* not supported yet */
+    }
+
+    left  = 0;
+    right = size/(sizeof(unsigned short)*2);
+    while (left < right) {
+        mid = (left + right) / 2;
+        uch0 = UCSto_enc[mid*2];
+        if ( uch0 == uch ) return (long)UCSto_enc[mid*2+1];
+        if ( uch0  < uch ) left = mid + 1;
+        else              right = mid;
+    }
+    return 256;
+}
+
+long
+ptenc_8bit_code_to_ucs(short enc, long ech)
+{
+    unsigned short *UCSto_enc;
+    int ii, size;
+
+    if (enc<0x80) return ech;    /* no conversion */
+    if (ech>0xFF) return 0xFFFD; /* illegal */
+
+    switch (enc) {
+    case 0x80: UCSto_enc = UCStoT1enc;  size = sizeof(UCStoT1enc);
+      break;
+    case 0x81: UCSto_enc = UCStoTS1enc; size = sizeof(UCStoTS1enc);
+      break;
+    case 0x82: UCSto_enc = UCStoLY1enc; size = sizeof(UCStoLY1enc);
+      break;
+    case 0x83: UCSto_enc = UCStoT5enc;  size = sizeof(UCStoT5enc);
+      break;
+    case 0x84: UCSto_enc = UCStoL7Xenc; size = sizeof(UCStoL7Xenc);
+      break;
+    case 0x90: UCSto_enc = UCStoT2Aenc; size = sizeof(UCStoT2Aenc);
+      break;
+    case 0x91: UCSto_enc = UCStoT2Benc; size = sizeof(UCStoT2Benc);
+      break;
+    case 0x92: UCSto_enc = UCStoT2Cenc; size = sizeof(UCStoT2Cenc);
+      break;
+    case 0xA0: UCSto_enc = UCStoLGRenc; size = sizeof(UCStoLGRenc);
+      break;
+    default:
+      return 0xFFFD; /* not supported yet */
+    }
+
+    size = size/(sizeof(unsigned short)*2);
+    for (ii=0; ii<size; ii++) {
+        if ( UCSto_enc[ii*2+1] == ech ) return (long)UCSto_enc[ii*2];
+    }
+    return ech; /* no conversion */
+}

Modified: trunk/Build/source/texk/ptexenc/version.ac
===================================================================
--- trunk/Build/source/texk/ptexenc/version.ac	2024-10-19 23:45:43 UTC (rev 72598)
+++ trunk/Build/source/texk/ptexenc/version.ac	2024-10-20 06:53:14 UTC (rev 72599)
@@ -11,4 +11,4 @@
 dnl see kpathsea/version.ac.
 dnl
 dnl This file is m4-included from configure.ac.
-m4_define([ptexenc_version], [1.5.0/dev])
+m4_define([ptexenc_version], [1.5.1/dev])



More information about the tex-live-commits mailing list.