summaryrefslogtreecommitdiff
path: root/support/utf2any
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/utf2any
Initial commit
Diffstat (limited to 'support/utf2any')
-rw-r--r--support/utf2any/Changes16
-rw-r--r--support/utf2any/Makefile27
-rw-r--r--support/utf2any/README109
-rw-r--r--support/utf2any/extra/README5
-rw-r--r--support/utf2any/extra/utf7.l261
-rw-r--r--support/utf2any/extra/utf8.l297
-rw-r--r--support/utf2any/maps/html-extended.map154
-rw-r--r--support/utf2any/maps/html-extra.map104
-rw-r--r--support/utf2any/maps/html.map77
-rw-r--r--support/utf2any/maps/iso-8859-1.map104
-rw-r--r--support/utf2any/maps/iso-8859-15.map19
-rw-r--r--support/utf2any/maps/iso-8859-mixed.map2
-rw-r--r--support/utf2any/maps/latex-controls.map11
-rw-r--r--support/utf2any/maps/latex.map536
-rw-r--r--support/utf2any/maps/rfc-1345-16-obsolete.map1643
-rw-r--r--support/utf2any/maps/rfc-1345-16.map1744
-rw-r--r--support/utf2any/maps/rfc-1345-7.map50
-rw-r--r--support/utf2any/maps/rfc-1345-8.map131
-rwxr-xr-xsupport/utf2any/test/maketest70
-rw-r--r--support/utf2any/test/tst-latex.utf72074
-rw-r--r--support/utf2any/test/tst-latex.utf82074
-rw-r--r--support/utf2any/test/tst.utf71185
-rw-r--r--support/utf2any/test/tst.utf8bin0 -> 15484 bytes
-rw-r--r--support/utf2any/utf2any.c2557
-rw-r--r--support/utf2any/utf2any.l1005
-rw-r--r--support/utf2any/utfcode.c305
26 files changed, 14560 insertions, 0 deletions
diff --git a/support/utf2any/Changes b/support/utf2any/Changes
new file mode 100644
index 0000000000..dfadfeb5ab
--- /dev/null
+++ b/support/utf2any/Changes
@@ -0,0 +1,16 @@
+CHANGES
+
+2000/06/21:
+
+ Makefile: simplified because of errors with some versions of Make.
+ Makefile: corrected filename: utf -> utfcode.
+ utf2any: added cast (unsigned char) in calls to isspace().
+ utf2any, README: added option [-w] to usage-message.
+ utf2any, utfcode: added version number 1.0 in usage-message.
+ utf2any, utfcode: observe U+7FFFFFFF as upper limit for UTF-8.
+ maps/html.map, maps/latex.map: upper boundary for default range set to
+ U+7FFFFFFF.
+
+2000/03/02:
+
+ Added maps for rfc-1345.
diff --git a/support/utf2any/Makefile b/support/utf2any/Makefile
new file mode 100644
index 0000000000..a7267fa418
--- /dev/null
+++ b/support/utf2any/Makefile
@@ -0,0 +1,27 @@
+
+.SUFFIXES:
+
+# MAPDIR defines the place were utf2any will search for symbol maps
+# This should be a directory, within double quotes, ending with a slash
+# Or it can be NULL
+
+MAPDIR = \"/usr/local/lib/utf/\"
+#MAPDIR = NULL
+
+mapdir:
+ @echo
+ @echo Edit Makefile to specify were utf2any should look for symbol maps
+ @echo Current value is: ${MAPDIR}
+ @echo When done, run: make all
+ @echo
+ @exit 1
+
+all: utf2any utfcode
+
+utf2any: utf2any.l
+ flex -B -8 utf2any.l
+ gcc -s -Wall -DMAPDIR=${MAPDIR} -o utf2any lex.yy.c -lfl
+ rm lex.yy.c
+
+utfcode: utfcode.c
+ gcc -s -Wall -o utfcode utfcode.c
diff --git a/support/utf2any/README b/support/utf2any/README
new file mode 100644
index 0000000000..d8b700227d
--- /dev/null
+++ b/support/utf2any/README
@@ -0,0 +1,109 @@
+
++===========+
+| utf2any |
++===========+
+
+utf2any translates a file encoded in UTF-7 or UTF-8 (Unicode) into any
+7- or 8-bit text format. Currently, mapping tables are supplied for
+LaTeX, HTML, iso-8859-1, iso-8859-15 and rfc-1345. These tables don't
+provide a complete mapping, but they can be easily extended to personal
+needs.
+
+Usage: utf2any -7|-8 [-f mapfile] [-v] [-w] [infile]
+
+ -7 : Input is UTF-7
+ -8 : Input is UTF-8
+ -f : File with definitions of the symbol mappings
+ -v : Verbose
+ -w : Warning messages
+
+If multiple -f options are given, the files are processed in turn.
+If name of mapfile has no path, it will be search for in:
+ 1. current directory
+ 2. compiled-in default directory
+If no -f option is given, a default mapping will be used.
+
+If no infile is given, the program will read from stdin.
+
+
+Syntax of symbol map file:
+--------------------------
+
+Empty lines, and lines starting with a hash (#) are ignored.
+
+
+Another mapfile can be included:
+
+ I filename
+
+If filename does not contain a path, it will be searched for in the
+following directories:
+ 1. current directory
+ 2. the same directory as the file this map was included from
+
+
+A default mapping for a range of characters can be defined as follows:
+
+ D first last size format
+ D first last action
+
+first: Unicode number of first symbol in default range
+last: Unicode number of last symbol in default range
+size: this should be one of: uchar unsigned ulong
+format: a format given to the C printf function to display the symbol.
+ The format receives one argument: the code number. This number will be
+ cast to one of:
+ (unsigned char) if size equals uchar
+ (unsigned) if size equals unsigned
+ (long unsigned) if size equals ulong
+action: one of:
+ #ECHO# : print the character as is, only possible for codes up to 255
+ #SKIP# : don't print anything
+ #SPACE# : print a space
+
+Numbers can be given as:
+
+ Unicode type number: hexadecimal number with prefix U+
+ decimal
+ octal: number with prefix 0
+ hexadecimal: number with prefix 0x
+
+
+Default ranges take lower precedence than explicit codes (see below),
+accept in the range 0 to 255, where they overwrite explicit definitions.
+To be safe, define all default mappings before explicit mappings.
+
+
+Explicit mapping, a number followed by a string:
+
+ number action
+ number string
+
+number: a Unicode number, in the same format as with default ranges
+action: the same as with default ranges
+string: a literal string
+
+
++===========+
+| utfcode |
++===========+
+
+utfcode translates one or more Unicode numbers into UTF-7 and/or UTF-8.
+
+Usage: utfcode [-7|-8] [number...]
+
+ -7 : utf-7 only
+ -8 : utf-8 only
+
+Numbers can be given in the same format as in the mapfiles for utf2any.
+
+
+====================================
+
+(c) Peter Kleiweg 2000
+http://www.let.rug.nl/~kleiweg/
+
+This is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
diff --git a/support/utf2any/extra/README b/support/utf2any/extra/README
new file mode 100644
index 0000000000..15ef8045ec
--- /dev/null
+++ b/support/utf2any/extra/README
@@ -0,0 +1,5 @@
+
+Here are just two predecessors to utf2any. These programs are very
+simple and can be used by hackers who wish to write their own UTF
+application.
+
diff --git a/support/utf2any/extra/utf7.l b/support/utf2any/extra/utf7.l
new file mode 100644
index 0000000000..204d8afc70
--- /dev/null
+++ b/support/utf2any/extra/utf7.l
@@ -0,0 +1,261 @@
+/* file: utf7.l */
+
+%{
+
+#ifdef __MSDOS__
+# include <dir.h>
+# include <fcntl.h>
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+int
+ printcode = 0;
+
+unsigned int
+ outcode [2],
+ instep,
+ outstep;
+
+char
+ *programname;
+
+void
+ get_programname (char const *argv0),
+ syntax (void),
+ errit (char const *format, ...),
+ utf (void),
+ nextout (void),
+ outchar (long unsigned);
+
+#ifdef __MSDOS__
+#define strcasecmp(s1, s2) (stricmp(s1, s2))
+#endif
+
+#define YY_NO_UNPUT
+#define YY_SKIP_YYWRAP
+#ifdef yywrap
+# undef yywrap
+#endif
+int yywrap()
+{
+ return 1;
+}
+
+%}
+
+%Start _utf
+
+%%
+
+<INITIAL>"+-" { fputc ('+', stdout); }
+<INITIAL>"+" { instep = outstep = 0;
+ BEGIN _utf; }
+
+<_utf>[A-Za-z0-9+/] { utf (); }
+<_utf>"-" { BEGIN INITIAL; }
+<_utf>.|\n { fputc (yytext [0], stdout);
+ BEGIN INITIAL; }
+
+%%
+
+void utf ()
+{
+ unsigned
+ i,
+ c;
+
+ i = yytext [0];
+ if (i >= 'A' && i <= 'Z')
+ c = i - 'A';
+ else if (i >= 'a' && i <= 'z')
+ c = i + 26 - 'a';
+ else if (i >= '0' && i <= '9')
+ c = i + 52 - '0';
+ else if (i == '+')
+ c = 62;
+ else if (i == '/')
+ c = 63;
+
+ switch (instep) {
+ case 0:
+ outcode [outstep] = (c << 2);
+ break;
+ case 1:
+ outcode [outstep] |= (c >> 4);
+ nextout ();
+ outcode [outstep] = (c << 4);
+ break;
+ case 2:
+ outcode [outstep] |= (c >> 2);
+ nextout ();
+ outcode [outstep] = (c << 6);
+ break;
+ case 3:
+ outcode [outstep] |= c;
+ nextout ();
+ break;
+ }
+ if (++instep == 4)
+ instep = 0;
+}
+
+void nextout ()
+{
+ unsigned
+ c;
+
+ if (outstep == 0) {
+ outstep = 1;
+ } else {
+ outstep = 0;
+ c = ((outcode [0] & 0xFF) << 8) | (outcode [1] & 0xFF);
+ outchar (c);
+ }
+}
+
+void outchar (long unsigned c)
+{
+ int
+ i;
+ char
+ *s;
+
+ /*
+ * iso-8859-1
+ */
+ if (c < 256) {
+ fputc (c, stdout);
+ return;
+ }
+
+ /*
+ * iso-8859-15
+ */
+ i = 0;
+ switch (c) {
+ case 0x20Ac: i = 0xA4; break; /* euro */
+ case 0x0160: i = 0xA6; break; /* S caron */
+ case 0x0161: i = 0xA8; break; /* s caron */
+ case 0x017D: i = 0xB4; break; /* Z caron */
+ case 0x017E: i = 0xB8; break; /* z caron */
+ case 0x0152: i = 0xBC; break; /* OE ligature */
+ case 0x0153: i = 0xBD; break; /* oe ligature */
+ case 0x0178: i = 0xBE; break; /* Y diaeresis */
+ }
+ if (i) {
+ fputc (i, stdout);
+ return;
+ }
+
+ /*
+ * substitutions
+ */
+ s = NULL;
+ switch (c) {
+ case 0x0132: s = "IJ"; break;
+ case 0x0133: s = "ij"; break;
+ }
+ if (s) {
+ fputs (s, stdout);
+ return;
+ }
+
+ if (printcode) {
+ if (c < 0x10000)
+ printf ("U+%04X", (unsigned) c);
+ else
+ printf ("U+%08lX", c);
+ } else
+ fputc (191, stdout);
+}
+
+int main (int argc, char *argv [])
+{
+ get_programname (argv [0]);
+
+ while (argc > 1)
+ if (! strcmp (argv [1], "-c")) {
+ printcode = 1;
+ argv++;
+ argc--;
+ } else
+ break;
+
+ switch (argc) {
+ case 1:
+ if (isatty (fileno (stdin)))
+ syntax ();
+ yyin = stdin;
+ break;
+ case 2:
+ yyin = fopen (argv [1], "r");
+ if (! yyin)
+ errit ("Opening file \"%s\": %s", argv [1], strerror (errno));
+ break;
+ default:
+ syntax ();
+ }
+
+ yylex ();
+
+ if (yyin != stdin)
+ fclose (yyin);
+
+ return 0;
+}
+
+void get_programname (char const *argv0)
+{
+#ifdef __MSDOS__
+ char
+ name [MAXFILE];
+ fnsplit (argv0, NULL, NULL, name, NULL);
+ programname = strdup (name);
+#else /* unix */
+ char
+ *p;
+ p = strrchr (argv0, '/');
+ if (p)
+ programname = strdup (p + 1);
+ else
+ programname = strdup (argv0);
+#endif
+}
+
+void errit (char const *format, ...)
+{
+ va_list
+ list;
+
+ fprintf (stderr, "\nError %s: ", programname);
+
+ va_start (list, format);
+ vfprintf (stderr, format, list);
+
+ fprintf (stderr, "\n\n");
+
+ exit (1);
+}
+
+void syntax ()
+{
+ fprintf (
+ stderr,
+ "\n"
+ "Syntax: %s [-c] [utf-7 encoded file]\n"
+ "\n"
+ "The file will be translated to iso-8859-1 *and* iso-8859-15\n"
+ "\n"
+ " -c : print U+code for characters not in iso-8859-1/15\n"
+ "\n",
+ programname
+ );
+
+ exit (1);
+}
diff --git a/support/utf2any/extra/utf8.l b/support/utf2any/extra/utf8.l
new file mode 100644
index 0000000000..49134feab4
--- /dev/null
+++ b/support/utf2any/extra/utf8.l
@@ -0,0 +1,297 @@
+/*
+ * file: utf8.l
+ *
+ * required flex option:
+ *
+ * -8 (generate 8bit scanner)
+ */
+
+%{
+
+#ifdef __MSDOS__
+# include <dir.h>
+# include <fcntl.h>
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+int
+ printcode = 0;
+
+char
+ *programname;
+
+void
+ get_programname (char const *argv0),
+ syntax (void),
+ errit (char const *format, ...),
+ bytes2 (void),
+ bytes3 (void),
+ bytes4 (void),
+ bytes5 (void),
+ bytes6 (void),
+ outchar (long unsigned);
+
+#define YY_NO_UNPUT
+#define YY_SKIP_YYWRAP
+#ifdef yywrap
+# undef yywrap
+#endif
+int yywrap()
+{
+ return 1;
+}
+
+%}
+
+%%
+
+[\300-\337]. { bytes2 (); }
+[\340-\357].. { bytes3 (); }
+[\360-\367]... { bytes4 (); }
+[\370-\373].... { bytes5 (); }
+[\374-\375]..... { bytes6 (); }
+
+%%
+
+void bytes2 ()
+{
+ unsigned
+ u [2],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 2; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [1] & 0x3F)
+ | ((u [0] & 0x1F) << 6);
+
+ outchar (c);
+}
+
+
+void bytes3 ()
+{
+ unsigned
+ u [3],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 3; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [2] & 0x3F)
+ | ((u [1] & 0x3F) << 6)
+ | ((u [0] & 0x0F) << 12);
+
+ outchar (c);
+}
+
+void bytes4 ()
+{
+ long unsigned
+ u [4],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 4; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [3] & 0x3F)
+ | ((u [2] & 0x3F) << 6)
+ | ((u [1] & 0x3F) << 12)
+ | ((u [0] & 0x07) << 18);
+
+ outchar (c);
+}
+
+void bytes5 ()
+{
+ long unsigned
+ u [5],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 5; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [4] & 0x3F)
+ | ((u [3] & 0x3F) << 6)
+ | ((u [2] & 0x3F) << 12)
+ | ((u [1] & 0x3F) << 18)
+ | ((u [0] & 0x03) << 24);
+
+ outchar (c);
+}
+
+void bytes6 ()
+{
+ long unsigned
+ u [6],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 6; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [5] & 0x3F)
+ | ((u [4] & 0x3F) << 6)
+ | ((u [3] & 0x3F) << 12)
+ | ((u [2] & 0x3F) << 18)
+ | ((u [1] & 0x3F) << 24)
+ | ((u [0] & 0x01) << 30);
+
+ outchar (c);
+}
+
+void outchar (long unsigned c)
+{
+ int
+ i;
+ char
+ *s;
+
+ /*
+ * iso-8859-1
+ */
+ if (c < 256) {
+ fputc (c, stdout);
+ return;
+ }
+
+ /*
+ * iso-8859-15
+ */
+ i = 0;
+ switch (c) {
+ case 0x20Ac: i = 0xA4; break; /* euro */
+ case 0x0160: i = 0xA6; break; /* S caron */
+ case 0x0161: i = 0xA8; break; /* s caron */
+ case 0x017D: i = 0xB4; break; /* Z caron */
+ case 0x017E: i = 0xB8; break; /* z caron */
+ case 0x0152: i = 0xBC; break; /* OE ligature */
+ case 0x0153: i = 0xBD; break; /* oe ligature */
+ case 0x0178: i = 0xBE; break; /* Y diaeresis */
+ }
+ if (i) {
+ fputc (i, stdout);
+ return;
+ }
+
+ /*
+ * substitutions
+ */
+ s = NULL;
+ switch (c) {
+ case 0x0132: s = "IJ"; break;
+ case 0x0133: s = "ij"; break;
+ }
+ if (s) {
+ fputs (s, stdout);
+ return;
+ }
+
+ if (printcode) {
+ if (c < 0x10000)
+ printf ("U+%04X", (unsigned) c);
+ else
+ printf ("U+%08lX", c);
+ } else
+ fputc (191, stdout);
+}
+
+int main (int argc, char *argv [])
+{
+ get_programname (argv [0]);
+
+ while (argc > 1)
+ if (! strcmp (argv [1], "-c")) {
+ printcode = 1;
+ argv++;
+ argc--;
+ } else
+ break;
+
+ switch (argc) {
+ case 1:
+ if (isatty (fileno (stdin)))
+ syntax ();
+ yyin = stdin;
+ break;
+ case 2:
+ yyin = fopen (argv [1], "r");
+ if (! yyin)
+ errit ("Opening file \"%s\": %s", argv [1], strerror (errno));
+ break;
+ default:
+ syntax ();
+ }
+
+ yylex ();
+
+ if (yyin != stdin)
+ fclose (yyin);
+
+ return 0;
+}
+
+void get_programname (char const *argv0)
+{
+#ifdef __MSDOS__
+ char
+ name [MAXFILE];
+ fnsplit (argv0, NULL, NULL, name, NULL);
+ programname = strdup (name);
+#else /* unix */
+ char
+ *p;
+ p = strrchr (argv0, '/');
+ if (p)
+ programname = strdup (p + 1);
+ else
+ programname = strdup (argv0);
+#endif
+}
+
+void errit (char const *format, ...)
+{
+ va_list
+ list;
+
+ fprintf (stderr, "\nError %s: ", programname);
+
+ va_start (list, format);
+ vfprintf (stderr, format, list);
+
+ fprintf (stderr, "\n\n");
+
+ exit (1);
+}
+
+void syntax ()
+{
+ fprintf (
+ stderr,
+ "\n"
+ "Syntax: %s [-c] [utf-8 encoded file]\n"
+ "\n"
+ "The file will be translated to iso-8859-1 *and* iso-8859-15\n"
+ "\n"
+ " -c : print U+code for characters not in iso-8859-1/15\n"
+ "\n",
+ programname
+ );
+
+ exit (1);
+}
diff --git a/support/utf2any/maps/html-extended.map b/support/utf2any/maps/html-extended.map
new file mode 100644
index 0000000000..52aaf55e89
--- /dev/null
+++ b/support/utf2any/maps/html-extended.map
@@ -0,0 +1,154 @@
+I html.map
+
+U+0152 &OElig;
+U+0153 &oelig;
+U+0160 &Scaron;
+U+0161 &scaron;
+U+0178 &Yuml;
+U+02C6 &circ;
+U+02DC &tilde;
+U+2002 &ensp;
+U+2003 &emsp;
+U+2009 &thinsp;
+U+200C &zwnj;
+U+200D &zwj;
+U+200E &lrm;
+U+200F &rlm;
+U+2013 &ndash;
+U+2014 &mdash;
+U+2018 &lsquo;
+U+2019 &rsquo;
+U+201A &sbquo;
+U+201C &ldquo;
+U+201D &rdquo;
+U+201E &bdquo;
+U+2020 &dagger;
+U+2021 &Dagger;
+U+2030 &permil;
+U+2039 &lsaquo;
+U+203A &rsaquo;
+U+20AC &euro;
+
+U+0192 &fnof;
+U+0391 &Alpha;
+U+0392 &Beta;
+U+0393 &Gamma;
+U+0394 &Delta;
+U+0395 &Epsilon;
+U+0396 &Zeta;
+U+0397 &Eta;
+U+0398 &Theta;
+U+0399 &Iota;
+U+039A &Kappa;
+U+039B &Lambda;
+U+039C &Mu;
+U+039D &Nu;
+U+039E &Xi;
+U+039F &Omicron;
+U+03A0 &Pi;
+U+03A1 &Rho;
+U+03A3 &Sigma;
+U+03A4 &Tau;
+U+03A5 &Upsilon;
+U+03A6 &Phi;
+U+03A7 &Chi;
+U+03A8 &Psi;
+U+03A9 &Omega;
+U+03B2 &beta;
+U+03B3 &gamma;
+U+03B4 &delta;
+U+03B5 &epsilon;
+U+03B6 &zeta;
+U+03B7 &eta;
+U+03B8 &theta;
+U+03B9 &iota;
+U+03BA &kappa;
+U+03BB &lambda;
+U+03BC &mu;
+U+03BD &nu;
+U+03BE &xi;
+U+03BF &omicron;
+U+03C0 &pi;
+U+03C1 &rho;
+U+03C2 &sigmaf;
+U+03C3 &sigma;
+U+03C4 &tau;
+U+03C5 &upsilon;
+U+03C6 &phi;
+U+03C7 &chi;
+U+03C8 &psi;
+U+03C9 &omega;
+U+03D1 &thetasym;
+U+03D2 &upsih;
+U+03D6 &piv;
+U+2022 &bull;
+U+2026 &hellip;
+U+2032 &prime;
+U+2033 &Prime;
+U+203E &oline;
+U+2044 &frasl;
+U+2118 &weierp;
+U+2111 &image;
+U+211C &real;
+U+2122 &trade;
+U+2135 &alefsym;
+U+2190 &larr;
+U+2191 &uarr;
+U+2192 &rarr;
+U+2193 &darr;
+U+2194 &harr;
+U+21B5 &crarr;
+U+21D0 &lArr;
+U+21D1 &uArr;
+U+21D2 &rArr;
+U+21D3 &dArr;
+U+21D4 &hArr;
+U+2200 &forall;
+U+2202 &part;
+U+2203 &exist;
+U+2205 &empty;
+U+2207 &nabla;
+U+2208 &isin;
+U+2209 &notin;
+U+220B &ni;
+U+220F &prod;
+U+2211 &sum;
+U+2212 &minus;
+U+2217 &lowast;
+U+221A &radic;
+U+221D &prop;
+U+221E &infin;
+U+2220 &ang;
+U+2227 &and;
+U+2228 &or;
+U+2229 &cap;
+U+222A &cup;
+U+222B &int;
+U+2234 &there4;
+U+223C &sim;
+U+2245 &cong;
+U+2248 &asymp;
+U+2260 &ne;
+U+2261 &equiv;
+U+2264 &le;
+U+2265 &ge;
+U+2282 &sub;
+U+2283 &sup;
+U+2284 &nsub;
+U+2286 &sube;
+U+2287 &supe;
+U+2295 &oplus;
+U+2297 &otimes;
+U+22A5 &perp;
+U+22C5 &sdot;
+U+2308 &lceil;
+U+2309 &rceil;
+U+230A &lfloor;
+U+230B &rfloor;
+U+2329 &lang;
+U+232A &rang;
+U+25CA &loz;
+U+2660 &spades;
+U+2663 &clubs;
+U+2665 &hearts;
+U+2666 &diams;
diff --git a/support/utf2any/maps/html-extra.map b/support/utf2any/maps/html-extra.map
new file mode 100644
index 0000000000..ab6cee08bd
--- /dev/null
+++ b/support/utf2any/maps/html-extra.map
@@ -0,0 +1,104 @@
+U+0132 IJ
+U+0133 ij
+U+0152 OE
+U+0153 oe
+
+# Dutch florin
+U+0192 <i>f</i>
+
+U+01C7 LJ
+U+01C8 Lj
+U+01C9 lj
+U+01CA NJ
+U+01CB Nj
+U+01CC nj
+U+01F1 DZ
+U+01F2 Dz
+U+01F3 dz
+
+U+2010 -
+U+2011 -
+U+2012 -
+U+2013 -
+U+2014 --
+U+2018 `
+U+2019 '
+U+201A ,
+U+201B `
+U+201C ``
+U+201D ''
+U+201E ,,
+U+201F ``
+U+2024 .
+U+2025 ..
+U+2026 ...
+U+2027 ·
+U+2032 '
+U+2033 ''
+U+2034 '''
+U+2035 `
+U+2036 ``
+U+2037 ```
+U+2039 <
+U+203A >
+
+U+2100 a/c
+U+2101 a/s
+U+2105 c/o
+U+2106 c/u
+U+2116 Nš
+U+2120 [SM]
+U+2121 [TEL]
+U+2122 [TM]
+
+U+2153 1/3
+U+2154 2/3
+U+2155 1/5
+U+2156 2/5
+U+2157 3/5
+U+2158 4/5
+U+2159 1/6
+U+215A 5/6
+U+215B 1/8
+U+215C 3/8
+U+215D 5/8
+U+215E 7/8
+U+215F 1/
+U+2160 I
+U+2161 II
+U+2162 III
+U+2163 IV
+U+2164 V
+U+2165 VI
+U+2166 VII
+U+2167 VIII
+U+2168 IX
+U+2169 X
+U+216A XI
+U+216B XII
+U+216C L
+U+216D C
+U+216E D
+U+216F M
+U+2170 i
+U+2171 ii
+U+2172 iii
+U+2173 iv
+U+2174 v
+U+2175 vi
+U+2176 vii
+U+2177 viii
+U+2178 ix
+U+2179 x
+U+217A xi
+U+217B xii
+U+217C l
+U+217D c
+U+217E d
+U+217F m
+
+U+FB00 ff
+U+FB01 fi
+U+FB02 fl
+U+FB03 ffi
+U+FB04 ffl
diff --git a/support/utf2any/maps/html.map b/support/utf2any/maps/html.map
new file mode 100644
index 0000000000..b17cc0d947
--- /dev/null
+++ b/support/utf2any/maps/html.map
@@ -0,0 +1,77 @@
+D 127 191 unsigned &#%u;
+D U+0100 U+FFFF unsigned &#%u;
+D U+00010000 U+7FFFFFFF ulong &#%lu;
+
+U+0022 &quot;
+U+0026 &amp;
+U+003C &lt;
+U+003E &gt;
+
+U+00A0 &nbsp;
+U+00A9 &copy;
+U+00AE &reg;
+
+U+00C0 &Agrave;
+U+00C1 &Aacute;
+U+00C2 &Acirc;
+U+00C3 &Atilde;
+U+00C4 &Auml;
+U+00C5 &Aring;
+U+00C6 &AElig;
+U+00C7 &Ccedil;
+U+00C8 &Egrave;
+U+00C9 &Eacute;
+U+00CA &Ecirc;
+U+00CB &Euml;
+U+00CC &Igrave;
+U+00CD &Iacute;
+U+00CE &Icirc;
+U+00CF &Iuml;
+U+00D0 &ETH;
+U+00D1 &Ntilde;
+U+00D2 &Ograve;
+U+00D3 &Oacute;
+U+00D4 &Ocirc;
+U+00D5 &Otilde;
+U+00D6 &Ouml;
+U+00D7 &#215;
+U+00D8 &Oslash;
+U+00D9 &Ugrave;
+U+00DA &Uacute;
+U+00DB &Ucirc;
+U+00DC &Uuml;
+U+00DD &Yacute;
+U+00DE &THORN;
+U+00DF &szlig;
+U+00E0 &agrave;
+U+00E1 &aacute;
+U+00E2 &acirc;
+U+00E3 &atilde;
+U+00E4 &auml;
+U+00E5 &aring;
+U+00E6 &aelig;
+U+00E7 &ccedil;
+U+00E8 &egrave;
+U+00E9 &eacute;
+U+00EA &ecirc;
+U+00EB &euml;
+U+00EC &igrave;
+U+00ED &iacute;
+U+00EE &icirc;
+U+00EF &iuml;
+U+00F0 &eth;
+U+00F1 &ntilde;
+U+00F2 &ograve;
+U+00F3 &oacute;
+U+00F4 &ocirc;
+U+00F5 &otilde;
+U+00F6 &ouml;
+U+00F7 &#247;
+U+00F8 &oslash;
+U+00F9 &ugrave;
+U+00FA &uacute;
+U+00FB &ucirc;
+U+00FC &uuml;
+U+00FD &yacute;
+U+00FE &thorn;
+U+00FF &yuml;
diff --git a/support/utf2any/maps/iso-8859-1.map b/support/utf2any/maps/iso-8859-1.map
new file mode 100644
index 0000000000..1abc9bfbee
--- /dev/null
+++ b/support/utf2any/maps/iso-8859-1.map
@@ -0,0 +1,104 @@
+U+0132 IJ
+U+0133 ij
+U+0152 OE
+U+0153 oe
+
+# Dutch florin
+U+0192 fl
+
+U+01C7 LJ
+U+01C8 Lj
+U+01C9 lj
+U+01CA NJ
+U+01CB Nj
+U+01CC nj
+U+01F1 DZ
+U+01F2 Dz
+U+01F3 dz
+
+U+2010 -
+U+2011 -
+U+2012 -
+U+2013 -
+U+2014 --
+U+2018 `
+U+2019 '
+U+201A ,
+U+201B `
+U+201C ``
+U+201D ''
+U+201E ,,
+U+201F ``
+U+2024 .
+U+2025 ..
+U+2026 ...
+U+2027 ·
+U+2032 '
+U+2033 ''
+U+2034 '''
+U+2035 `
+U+2036 ``
+U+2037 ```
+U+2039 <
+U+203A >
+
+U+2100 a/c
+U+2101 a/s
+U+2105 c/o
+U+2106 c/u
+U+2116 Nš
+U+2120 [SM]
+U+2121 [TEL]
+U+2122 [TM]
+
+U+2153 1/3
+U+2154 2/3
+U+2155 1/5
+U+2156 2/5
+U+2157 3/5
+U+2158 4/5
+U+2159 1/6
+U+215A 5/6
+U+215B 1/8
+U+215C 3/8
+U+215D 5/8
+U+215E 7/8
+U+215F 1/
+U+2160 I
+U+2161 II
+U+2162 III
+U+2163 IV
+U+2164 V
+U+2165 VI
+U+2166 VII
+U+2167 VIII
+U+2168 IX
+U+2169 X
+U+216A XI
+U+216B XII
+U+216C L
+U+216D C
+U+216E D
+U+216F M
+U+2170 i
+U+2171 ii
+U+2172 iii
+U+2173 iv
+U+2174 v
+U+2175 vi
+U+2176 vii
+U+2177 viii
+U+2178 ix
+U+2179 x
+U+217A xi
+U+217B xii
+U+217C l
+U+217D c
+U+217E d
+U+217F m
+
+U+FB00 ff
+U+FB01 fi
+U+FB02 fl
+U+FB03 ffi
+U+FB04 ffl
diff --git a/support/utf2any/maps/iso-8859-15.map b/support/utf2any/maps/iso-8859-15.map
new file mode 100644
index 0000000000..9d61fab2c6
--- /dev/null
+++ b/support/utf2any/maps/iso-8859-15.map
@@ -0,0 +1,19 @@
+I iso-8859-1.map
+
+U+00A4 [U+00A4]
+U+00A6 [U+00A6]
+U+00A8 [U+00A8]
+U+00B4 [U+00B4]
+U+00B8 [U+00B8]
+U+00BC [U+00BC]
+U+00BD [U+00BD]
+U+00BE [U+00BE]
+
+U+20AC Ī
+U+0160 Ķ
+U+0161 Ļ
+U+017D ī
+U+017E ļ
+U+0152 ž
+U+0153 ―
+U+0178 ū
diff --git a/support/utf2any/maps/iso-8859-mixed.map b/support/utf2any/maps/iso-8859-mixed.map
new file mode 100644
index 0000000000..4135b6b520
--- /dev/null
+++ b/support/utf2any/maps/iso-8859-mixed.map
@@ -0,0 +1,2 @@
+I iso-8859-15.map
+D 160 191 #ECHO#
diff --git a/support/utf2any/maps/latex-controls.map b/support/utf2any/maps/latex-controls.map
new file mode 100644
index 0000000000..c8a51e1939
--- /dev/null
+++ b/support/utf2any/maps/latex-controls.map
@@ -0,0 +1,11 @@
+U+000C \newpage{}
+U+0023 \#
+U+0024 \$
+U+0025 \%
+U+0026 \&
+U+005C \verb!\!
+U+005E \^{ }
+U+005F \_
+U+007B \{
+U+007D \}
+U+007E \~{ }
diff --git a/support/utf2any/maps/latex.map b/support/utf2any/maps/latex.map
new file mode 100644
index 0000000000..04d03ab9a4
--- /dev/null
+++ b/support/utf2any/maps/latex.map
@@ -0,0 +1,536 @@
+# Currently, to be able to use all codes defined here, the following
+# packages need to be included:
+#
+# \usepackage{textcomp}
+# \usepackage{eurofont}
+# \usepackage[T1,tone,safe]{tipa}
+#
+# If you don't use phonetic symbols, the last package can be replaced by:
+#
+# \usepackage[T1]{fontenc}
+
+D U+0080 U+FFFF unsigned \emph{[U+%04X]}
+D U+00010000 U+7FFFFFFF ulong \emph{[U+%08lX]}
+
+U+00A0 ~
+U+00A1 !`
+U+00A2 \textcent{}
+U+00A3 \pounds{}
+U+00A4 \textcurrency{}
+U+00A5 \textyen{}
+U+00A6 \textbrokenbar{}
+U+00A7 \S{}
+U+00A8 \textasciidieresis{}
+U+00A9 \copyright{}
+U+00AA \textordfeminine{}
+U+00AB \guillemotleft{}
+U+00AC \textlnot{}
+U+00AD -
+U+00AE \textregistered{}
+U+00AF \textmacron{}
+U+00B0 \textdegree{}
+U+00B1 \textpm{}
+U+00B2 \texttwosuperior{}
+U+00B3 \textthreesuperior{}
+U+00B4 \textasciiacute{}
+U+00B5 \textmu{}
+U+00B6 \P{}
+U+00B7 \textperiodcentered{}
+U+00B8 \c{ }
+U+00B9 \textonesuperior{}
+U+00BA \textordmasculine{}
+U+00BB \guillemotright{}
+U+00BC \ensuremath{{}^1\!/\!_4}
+U+00BD \ensuremath{{}^1\!/\!_2}
+U+00BE \ensuremath{{}^3\!/\!_4}
+U+00BF ?`
+U+00C0 \`A
+U+00C1 \'A
+U+00C2 \^A
+U+00C3 \~A
+U+00C4 \"A
+U+00C5 \AA{}
+U+00C6 \AE{}
+U+00C7 \c{C}
+U+00C8 \`E
+U+00C9 \'E
+U+00CA \^E
+U+00CB \"E
+U+00CC \`I
+U+00CD \'I
+U+00CE \^I
+U+00CF \"I
+U+00D0 \DH{}
+U+00D1 \~N
+U+00D2 \`O
+U+00D3 \'O
+U+00D4 \^O
+U+00D5 \~O
+U+00D6 \"O
+U+00D7 \texttimes{}
+U+00D8 \O{}
+U+00D9 \`U
+U+00DA \'U
+U+00DB \^U
+U+00DC \"U
+U+00DD \'Y
+U+00DE \TH{}
+U+00DF \ss{}
+U+00E0 \`a
+U+00E1 \'a
+U+00E2 \^a
+U+00E3 \~a
+U+00E4 \"a
+U+00E5 \aa{}
+U+00E6 \ae{}
+U+00E7 \c{c}
+U+00E8 \`e
+U+00E9 \'e
+U+00EA \^e
+U+00EB \"e
+U+00EC \`{\i}
+U+00ED \'{\i}
+U+00EE \^{\i}
+U+00EF \"{\i}
+U+00F0 \dh{}
+U+00F1 \~n
+U+00F2 \`o
+U+00F3 \'o
+U+00F4 \^o
+U+00F5 \~o
+U+00F6 \"o
+U+00F7 \textdiv{}
+U+00F8 \o{}
+U+00F9 \`u
+U+00FA \'u
+U+00FB \^u
+U+00FC \"u
+U+00FD \'y
+U+00FE \th{}
+U+00FF \"y
+
+U+0100 \=A
+U+0101 \=a
+U+0102 \u{A}
+U+0103 \u{a}
+U+0104 \textpolhook{A}
+U+0105 \textpolhook{a}
+U+0106 \'C
+U+0107 \'c
+U+0108 \^C
+U+0109 \^c
+U+010A \.C
+U+010B \.c
+U+010C \v{C}
+U+010D \v{c}
+U+010E \v{D}
+U+010F \v{d}
+U+0110 \DJ{}
+U+0111 \dj{}
+U+0112 \=E
+U+0113 \=e
+U+0114 \u{E}
+U+0115 \u{e}
+U+0116 \.E
+U+0117 \.e
+U+0118 \textpolhook{E}
+U+0119 \textpolhook{e}
+U+011A \v{E}
+U+011B \v{e}
+U+011C \^G
+U+011D \^g
+U+011E \u{G}
+U+011F \u{g}
+U+0120 \.G
+U+0121 \.g
+U+0122 \c{G}
+U+0123 \c{g}
+U+0124 \^H
+U+0125 \^h
+# U+0126
+U+0127 \textcrh{}
+U+0128 \~I
+U+0129 \~{\i}
+U+012A \=I
+U+012B \={\i}
+U+012C \u{I}
+U+012D \u{\i}
+U+012E \textpolhook{I}
+U+012F \textpolhook{\i}
+U+0130 \.I
+U+0131 \i{}
+U+0132 IJ
+U+0133 ij
+U+0134 \^J
+U+0135 \^{\j}
+U+0136 \c{K}
+U+0137 \c{k}
+# U+0138
+U+0139 \'L
+U+013A \'l
+U+013B \c{L}
+U+013C \c{l}
+U+013D \v{L}
+U+013E \v{l}
+U+013F L\ensuremath{\cdot}
+U+0140 l\ensuremath{\cdot}
+U+0141 \L{}
+U+0142 \l{}
+U+0143 \'N
+U+0144 \'n
+U+0145 \c{N}
+U+0146 \c{n}
+U+0147 \v{N}
+U+0148 \v{n}
+U+0149 'n
+U+014A \NG{}
+U+014B \ng{}
+U+014C \=O
+U+014D \=o
+U+014E \u{O}
+U+014F \u{o}
+U+0150 \H{O}
+U+0151 \H{o}
+U+0152 \OE{}
+U+0153 \oe{}
+U+0154 \'R
+U+0155 \'r
+U+0156 \c{R}
+U+0157 \c{r}
+U+0158 \v{R}
+U+0159 \v{r}
+U+015A \'S
+U+015B \'s
+U+015C \^S
+U+015D \^s
+U+015E \c{S}
+U+015F \c{s}
+U+0160 \v{S}
+U+0161 \v{s}
+U+0162 \c{T}
+U+0163 \c{t}
+U+0164 \v{T}
+U+0165 \v{t}
+# U+0166
+# U+0167
+U+0168 \~U
+U+0169 \~u
+U+016A \=U
+U+016B \=u
+U+016C \u{U}
+U+016D \u{u}
+U+016E \r{U}
+U+016F \r{u}
+U+0170 \H{U}
+U+0171 \H{u}
+U+0172 \textpolhook{U}
+U+0173 \textpolhook{u}
+U+0174 \^W
+U+0175 \^w
+U+0176 \^Y
+U+0177 \^y
+U+0178 \"Y
+U+0179 \'Z
+U+017A \'z
+U+017B \.Z
+U+017C \.z
+U+017D \v{Z}
+U+017E \v{z}
+# U+017F
+
+U+0180 \textcrb{}
+U+0192 \textit{f}
+U+0194 \textgamma{}
+U+0195 \texthvlig{}
+U+0197 \ipabar{I}{.6ex}{1.1}{}{}
+U+019A \textbarl{}
+U+019B \textcrlambda{}
+U+01B5 \ipabar{Z}{.7ex}{1.1}{}{}
+U+01B6 \ipabar{z}{.5ex}{1.1}{}{}
+U+01B9 \textrevyogh{}
+U+01BE \textcrinvglotstop{}
+U+01C0 \textpipe{}
+U+01C1 \textdoublepipe{}
+U+01C2 \textdoublebarpipe{}
+U+01C3 !
+U+01C4 D\v{Z}
+U+01C5 D\v{z}
+U+01C6 d\v{z}
+U+01C7 LJ
+U+01C8 Lj
+U+01C9 lj
+U+01CA NJ
+U+01CB Nj
+U+01CC nj
+U+01CD \v{A}
+U+01CE \v{a}
+U+01CF \v{I}
+U+01D0 \v{\i}
+U+01D1 \v{O}
+U+01D2 \v{o}
+U+01D3 \v{U}
+U+01D4 \v{u}
+U+01D5 \={\"U}
+U+01D6 \={\"u}
+U+01D7 \'{\"U}
+U+01D8 \'{\"u}
+U+01D9 \v{\"U}
+U+01DA \v{\"u}
+U+01DB \`{\"U}
+U+01DC \`{\"u}
+U+01DD \textschwa{}
+U+01DE \={\"A}
+U+01DF \={\"a}
+U+01E0 \={\.A}
+U+01E1 \={\.a}
+U+01E2 \={\AE}
+U+01E3 \={\ae}
+U+01E6 \v{G}
+U+01E7 \v{g}
+U+01E8 \v{K}
+U+01E9 \v{k}
+U+01EA \textpolhook{O}
+U+01EB \textpolhook{o}
+U+01EC \={\textpolhook{O}}
+U+01ED \={\textpolhook{o}}
+U+01EF \v{\textyogh}
+U+01F0 \v{\j}
+U+01F1 DZ
+U+01F2 Dz
+U+01F3 dz
+U+01F4 \'G
+U+01F5 \'g
+U+01FA \'{\AA}
+U+01FB \'{\aa}
+U+01FC \'{\AE}
+U+01FD \'{\ae}
+U+01FE \'{\O}
+U+01FF \'{\o}
+
+U+0200 \textdoublegrave{A}
+U+0201 \textdoublegrave{a}
+U+0202 \textroundcap{A}
+U+0203 \textroundcap{a}
+U+0204 \textdoublegrave{E}
+U+0205 \textdoublegrave{e}
+U+0206 \textroundcap{E}
+U+0207 \textroundcap{e}
+U+0208 \textdoublegrave{I}
+U+0209 \textdoublegrave{\i}
+U+020A \textroundcap{I}
+U+020B \textroundcap{\i}
+U+020C \textdoublegrave{O}
+U+020D \textdoublegrave{o}
+U+020E \textroundcap{O}
+U+020F \textroundcap{o}
+U+0210 \textdoublegrave{R}
+U+0211 \textdoublegrave{r}
+U+0212 \textroundcap{R}
+U+0213 \textroundcap{r}
+U+0214 \textdoublegrave{U}
+U+0215 \textdoublegrave{u}
+U+0216 \textroundcap{U}
+U+0217 \textroundcap{u}
+
+U+0250 \textturna{}
+U+0251 \textscripta{}
+U+0252 \textturnscripta{}
+U+0253 \texthtb{}
+U+0254 \textopeno{}
+U+0255 \textctc{}
+U+0256 \textrtaild{}
+U+0257 \texthtd{}
+U+0258 \textreve{}
+U+0259 \textschwa{}
+U+025A \textrhookschwa{}
+U+025B \textepsilon{}
+U+025C \textrevepsilon{}
+U+025D \textrhookrevepsilon{}
+U+025E \textcloserevepsilon{}
+U+025F \textObardotlessj{}
+U+0260 \texthtg{}
+U+0261 \textipa{g}
+U+0262 \textscg{}
+U+0263 \textgamma{}
+U+0264 \textbabygamma{}
+U+0265 \textturnh{}
+U+0266 \texthth{}
+U+0267 \texththeng{}
+U+0268 \textbari{}
+U+0269 \textiota{}
+U+026A \textsci{}
+U+026B \textltilde{}
+U+026C \textbeltl{}
+U+026D \textrtaill{}
+# U+026E
+U+026F \textturnm{}
+U+0270 \textturnmrleg{}
+U+0271 \textltailm{}
+U+0272 \textltailn{}
+U+0273 \textrtailn{}
+U+0274 \textscn{}
+U+0275 \textbaro{}
+U+0276 \textscoelig{}
+U+0277 \textcloseomega{}
+U+0278 \textphi{}
+U+0279 \textturnr{}
+U+027A \textturnlonglegr{}
+U+027B \textturnrrtail{}
+U+027C \textlonglegr{}
+U+027D \textrtailr{}
+U+027E \textfishhookr{}
+# U+027F
+U+0280 \textscr{}
+U+0281 \textinvscr{}
+U+0282 \textrtails{}
+U+0283 \textesh{}
+U+0284 \textdoublebaresh{}
+# U+0285
+U+0286 \textctesh{}
+U+0287 \textturnt{}
+U+0288 \textrtailt{}
+U+0289 \textbaru{}
+U+028A \textupsilon{}
+U+028B \textscriptv{}
+U+028C \textturnv{}
+U+028D \textturnw{}
+U+028E \textturny{}
+U+028F \textscy{}
+U+0290 \textrtailz{}
+U+0291 \textctz{}
+U+0292 \textyogh{}
+U+0293 \textctyogh{}
+U+0294 \textglotstop{}
+U+0295 \textrevglotstop{}
+U+0296 \textinvglotstop{}
+U+0297 \textstretchc{}
+U+0298 \textbullseye{}
+U+0299 \textscb{}
+U+029A \textcloseepsilon{}
+U+029B \texthtscg{}
+U+029C \textsch{}
+U+029D \textctj{}
+U+029E \textturnk{}
+U+029F \textscl{}
+U+02A0 \texthtq{}
+U+02A1 \textbarglotstop{}
+U+02A2 \textbarrevglotstop{}
+U+02A3 \textdzlig{}
+U+02A4 \textdyoghlig{}
+U+02A5 \textdctzlig{}
+U+02A6 \texttslig{}
+U+02A7 \textteshlig{}
+U+02A8 \texttctclig{}
+
+U+02B0 \textsuperscript{h}
+U+02B1 \textsuperscript{\texthth}
+U+02B2 \textsuperscript{j}
+U+02B3 \textsuperscript{r}
+U+02B4 \textsuperscript{\textturnr}
+U+02B5 \textsuperscript{\textturnrrtail}
+U+02B6 \textsuperscript{\textinvscr}
+U+02B7 \textsuperscript{w}
+U+02B8 \textsuperscript{y}
+U+02B9 \textceltpal{}
+U+02BA \textceltpal\textceltpal{}
+U+02E5 \tone{55}
+U+02E6 \tone{44}
+U+02E7 \tone{33}
+U+02E8 \tone{22}
+U+02E9 \tone{11}
+
+U+2010 -
+U+2011 -
+U+2012 --
+U+2013 --
+U+2014 ---
+U+2018 `
+U+2019 '
+U+201A \quotesinglbase{}
+U+201C ``
+U+201D ''
+U+201E \quotedblbase{}
+U+2020 \dag{}
+U+2021 \ddag{}
+U+2022 \textbullet{}
+U+2024 .
+U+2025 ..
+U+2026 \ldots{}
+U+2027 \textperiodcentered{}
+U+2030 \textperthousand{}
+U+2031 \textpertenthousand{}
+U+2032 \ensuremath{\prime}
+U+2033 \ensuremath{\prime\prime}
+U+2034 \ensuremath{\prime\prime\prime}
+U+2039 \guilsinglleft{}
+U+203A \guilsinglright{}
+U+203B \textreferencemark{}
+U+203C !!
+U+203D \textinterrobang{}
+U+203E \textmacron{}
+U+2045 \textlquill{}
+U+2046 \textrquill{}
+
+U+20AC \euro{}
+
+U+2100 \ensuremath{{}^a\!/\!_c}
+U+2101 \ensuremath{{}^a\!/\!_s}
+U+2105 \ensuremath{{}^c\!/\!_o}
+U+2106 \ensuremath{{}^c\!/\!_u}
+U+2116 N\textordmasculine{}
+U+2120 \textservicemark{}
+U+2121 \ensuremath{{}^\mathrm{TEL}}
+U+2122 \texttrademark{}
+U+2135 \ensuremath{\aleph}
+
+U+2153 \ensuremath{{}^1\!/\!_3}
+U+2154 \ensuremath{{}^2\!/\!_3}
+U+2155 \ensuremath{{}^1\!/\!_5}
+U+2156 \ensuremath{{}^2\!/\!_5}
+U+2157 \ensuremath{{}^3\!/\!_5}
+U+2158 \ensuremath{{}^4\!/\!_5}
+U+2159 \ensuremath{{}^1\!/\!_6}
+U+215A \ensuremath{{}^5\!/\!_6}
+U+215B \ensuremath{{}^1\!/\!_8}
+U+215C \ensuremath{{}^3\!/\!_8}
+U+215D \ensuremath{{}^5\!/\!_8}
+U+215E \ensuremath{{}^7\!/\!_8}
+U+215F \ensuremath{{}^1\!/}
+U+2160 I
+U+2161 II
+U+2162 III
+U+2163 IV
+U+2164 V
+U+2165 VI
+U+2166 VII
+U+2167 VIII
+U+2168 IX
+U+2169 X
+U+216A XI
+U+216B XII
+U+216C L
+U+216D C
+U+216E D
+U+216F M
+U+2170 i
+U+2171 ii
+U+2172 iii
+U+2173 iv
+U+2174 v
+U+2175 vi
+U+2176 vii
+U+2177 viii
+U+2178 ix
+U+2179 x
+U+217A xi
+U+217B xii
+U+217C l
+U+217D c
+U+217E d
+U+217F m
+
+U+FB00 ff
+U+FB01 fi
+U+FB02 fl
+U+FB03 ffi
+U+FB04 ffl
diff --git a/support/utf2any/maps/rfc-1345-16-obsolete.map b/support/utf2any/maps/rfc-1345-16-obsolete.map
new file mode 100644
index 0000000000..623a582d9a
--- /dev/null
+++ b/support/utf2any/maps/rfc-1345-16-obsolete.map
@@ -0,0 +1,1643 @@
+# RFC-1345
+# range: U+0100 - U+FFFF
+#
+# RFC-1345 seems to contain quite a lot of errors.
+# You should probably use the file rfc-1345-16.map instead.
+
+U+0100 &A-
+U+0101 &a-
+U+0102 &A(
+U+0103 &a(
+U+0104 &A;
+U+0105 &a;
+U+0106 &C'
+U+0107 &c'
+U+0108 &C>
+U+0109 &c>
+U+010A &C.
+U+010B &c.
+U+010C &C<
+U+010D &c<
+U+010E &D<
+U+010F &d<
+U+0110 &D/
+U+0111 &d/
+U+0112 &E-
+U+0113 &e-
+U+0114 &E(
+U+0115 &e(
+U+0116 &E.
+U+0117 &e.
+U+0118 &E;
+U+0119 &e;
+U+011A &E<
+U+011B &e<
+U+011C &G>
+U+011D &g>
+U+011E &G(
+U+011F &g(
+U+0120 &G.
+U+0121 &g.
+U+0122 &G,
+U+0123 &g,
+U+0124 &H>
+U+0125 &h>
+U+0126 &H/
+U+0127 &h/
+U+0128 &I?
+U+0129 &i?
+U+012A &I-
+U+012B &i-
+U+012C &I(
+U+012D &i(
+U+012E &I;
+U+012F &i;
+U+0130 &I.
+U+0131 &i.
+U+0132 &IJ
+U+0133 &ij
+U+0134 &J>
+U+0135 &j>
+U+0136 &K,
+U+0137 &k,
+U+0138 &kk
+U+0139 &L'
+U+013A &l'
+U+013B &L,
+U+013C &l,
+U+013D &L<
+U+013E &l<
+U+013F &L.
+U+0140 &l.
+U+0141 &L/
+U+0142 &l/
+U+0143 &N'
+U+0144 &n'
+U+0145 &N,
+U+0146 &n,
+U+0147 &N<
+U+0148 &n<
+U+0149 &'n
+U+014A &NG
+U+014B &ng
+U+014C &O-
+U+014D &o-
+U+014E &O(
+U+014F &o(
+U+0150 &O"
+U+0151 &o"
+U+0152 &OE
+U+0153 &oe
+U+0154 &R'
+U+0155 &r'
+U+0156 &R,
+U+0157 &r,
+U+0158 &R<
+U+0159 &r<
+U+015A &S'
+U+015B &s'
+U+015C &S>
+U+015D &s>
+U+015E &S,
+U+015F &s,
+U+0160 &S<
+U+0161 &s<
+U+0162 &T,
+U+0163 &t,
+U+0164 &T<
+U+0165 &t<
+U+0166 &T/
+U+0167 &t/
+U+0168 &U?
+U+0169 &u?
+U+016A &U-
+U+016B &u-
+U+016C &U(
+U+016D &u(
+U+016E &U0
+U+016F &u0
+U+0170 &U"
+U+0171 &u"
+U+0172 &U;
+U+0173 &u;
+U+0174 &W>
+U+0175 &w>
+U+0176 &Y>
+U+0177 &y>
+U+0178 &Y:
+U+0179 &Z'
+U+017A &z'
+U+017B &Z.
+U+017C &z.
+U+017D &Z<
+U+017E &z<
+U+01A0 &O9
+U+01A1 &o9
+U+01A2 &OI
+U+01A3 &oi
+U+01A6 &yr
+U+01AF &U9
+U+01B0 &u9
+U+01B5 &Z/
+U+01B6 &z/
+U+01B7 &ED
+U+01CD &A<
+U+01CE &a<
+U+01CF &I<
+U+01D0 &i<
+U+01D1 &O<
+U+01D2 &o<
+U+01D3 &U<
+U+01D4 &u<
+U+01D5 &_U:-_
+U+01D6 &_u:-_
+U+01D7 &_U:'_
+U+01D8 &_u:'_
+U+01D9 &_U:<_
+U+01DA &_u:<_
+U+01DB &_U:!_
+U+01DC &_u:!_
+U+01DE &A1
+U+01DF &a1
+U+01E0 &A7
+U+01E1 &a7
+U+01E2 &A3
+U+01E3 &a3
+U+01E4 &G/
+U+01E5 &g/
+U+01E6 &G<
+U+01E7 &g<
+U+01E8 &K<
+U+01E9 &k<
+U+01EA &O;
+U+01EB &o;
+U+01EC &O1
+U+01ED &o1
+U+01EE &EZ
+U+01EF &ez
+U+01F0 &j<
+U+01F4 &G'
+U+01F5 &g'
+U+01FA &_AA'_
+U+01FB &_aa'_
+U+01FC &_AE'_
+U+01FD &_ae'_
+U+01FE &_O/'_
+U+01FF &_o/'_
+U+02BF &;S
+U+02C7 &'<
+U+02D8 &'(
+U+02D9 &'.
+U+02DA &'0
+U+02DB &';
+U+02DD &'"
+U+0386 &A%
+U+0388 &E%
+U+0389 &Y%
+U+038A &I%
+U+038C &O%
+U+038E &U%
+U+038F &W%
+U+0390 &i3
+U+0391 &A*
+U+0392 &B*
+U+0393 &G*
+U+0394 &D*
+U+0395 &E*
+U+0396 &Z*
+U+0397 &Y*
+U+0398 &H*
+U+0399 &I*
+U+039A &K*
+U+039B &L*
+U+039C &M*
+U+039D &N*
+U+039E &C*
+U+039F &O*
+U+03A0 &P*
+U+03A1 &R*
+U+03A3 &S*
+U+03A4 &T*
+U+03A5 &U*
+U+03A6 &F*
+U+03A7 &X*
+U+03A8 &Q*
+U+03A9 &W*
+U+03AA &J*
+U+03AB &V*
+U+03AC &a%
+U+03AD &e%
+U+03AE &y%
+U+03AF &i%
+U+03B0 &u3
+U+03B1 &a*
+U+03B2 &b*
+U+03B3 &g*
+U+03B4 &d*
+U+03B5 &e*
+U+03B6 &z*
+U+03B7 &y*
+U+03B8 &h*
+U+03B9 &i*
+U+03BA &k*
+U+03BB &l*
+U+03BC &m*
+U+03BD &n*
+U+03BE &c*
+U+03BF &o*
+U+03C0 &p*
+U+03C1 &r*
+U+03C2 &*s
+U+03C3 &s*
+U+03C4 &t*
+U+03C5 &u*
+U+03C6 &f*
+U+03C7 &x*
+U+03C8 &q*
+U+03C9 &w*
+U+03CA &j*
+U+03CB &v*
+U+03CC &o%
+U+03CD &u%
+U+03CE &w%
+U+03D8 &'G
+U+03D9 &,G
+U+03DA &T3
+U+03DB &t3
+U+03DC &M3
+U+03DD &m3
+U+03DE &K3
+U+03DF &k3
+U+03E0 &P3
+U+03E1 &p3
+U+03F4 &'%
+U+03F5 &j3
+U+0401 &IO
+U+0402 &D%
+U+0403 &G%
+U+0404 &IE
+U+0405 &DS
+U+0406 &II
+U+0407 &YI
+U+0408 &J%
+U+0409 &LJ
+U+040A &NJ
+U+040B &Ts
+U+040C &KJ
+U+040E &V%
+U+040F &DZ
+U+0410 &A=
+U+0411 &B=
+U+0412 &V=
+U+0413 &G=
+U+0414 &D=
+U+0415 &E=
+U+0416 &Z%
+U+0417 &Z=
+U+0418 &I=
+U+0419 &J=
+U+041A &K=
+U+041B &L=
+U+041C &M=
+U+041D &N=
+U+041E &O=
+U+041F &P=
+U+0420 &R=
+U+0421 &S=
+U+0422 &T=
+U+0423 &U=
+U+0424 &F=
+U+0425 &H=
+U+0426 &C=
+U+0427 &C%
+U+0428 &S%
+U+0429 &Sc
+U+042A &="
+U+042B &Y=
+U+042C &%"
+U+042D &JE
+U+042E &JU
+U+042F &JA
+U+0430 &a=
+U+0431 &b=
+U+0432 &v=
+U+0433 &g=
+U+0434 &d=
+U+0435 &e=
+U+0436 &z%
+U+0437 &z=
+U+0438 &i=
+U+0439 &j=
+U+043A &k=
+U+043B &l=
+U+043C &m=
+U+043D &n=
+U+043E &o=
+U+043F &p=
+U+0440 &r=
+U+0441 &s=
+U+0442 &t=
+U+0443 &u=
+U+0444 &f=
+U+0445 &h=
+U+0446 &c=
+U+0447 &c%
+U+0448 &s%
+U+0449 &sc
+U+044A &='
+U+044B &y=
+U+044C &%'
+U+044D &je
+U+044E &ju
+U+044F &ja
+U+0451 &io
+U+0452 &d%
+U+0453 &g%
+U+0454 &ie
+U+0455 &ds
+U+0456 &ii
+U+0457 &yi
+U+0458 &j%
+U+0459 &lj
+U+045A &nj
+U+045B &ts
+U+045C &kj
+U+045E &v%
+U+045F &dz
+U+0462 &Y3
+U+0463 &y3
+U+046A &O3
+U+046B &o3
+U+0472 &F3
+U+0473 &f3
+U+0474 &V3
+U+0475 &v3
+U+0480 &C3
+U+0481 &c3
+U+0490 &G3
+U+0491 &g3
+U+05D0 &A+
+U+05D1 &B+
+U+05D2 &G+
+U+05D3 &D+
+U+05D4 &H+
+U+05D5 &W+
+U+05D6 &Z+
+U+05D7 &X+
+U+05D8 &Tj
+U+05D9 &J+
+U+05DA &K%
+U+05DB &K+
+U+05DC &L+
+U+05DD &M%
+U+05DE &M+
+U+05DF &N%
+U+05E0 &N+
+U+05E1 &S+
+U+05E2 &E+
+U+05E3 &P%
+U+05E4 &P+
+U+05E5 &Zj
+U+05E6 &ZJ
+U+05E7 &Q+
+U+05E8 &R+
+U+05E9 &Sh
+U+05EA &T+
+U+060C &,+
+U+061B &;+
+U+061F &?+
+U+0621 &H'
+U+0622 &aM
+U+0623 &aH
+U+0624 &wH
+U+0625 &ah
+U+0626 &yH
+U+0627 &a+
+U+0628 &b+
+U+0629 &tm
+U+062A &t+
+U+062B &tk
+U+062C &g+
+U+062D &hk
+U+062E &x+
+U+062F &d+
+U+0630 &dk
+U+0631 &r+
+U+0632 &z+
+U+0633 &s+
+U+0634 &sn
+U+0635 &c+
+U+0636 &dd
+U+0637 &tj
+U+0638 &zH
+U+0639 &e+
+U+063A &i+
+U+0640 &++
+U+0641 &f+
+U+0642 &q+
+U+0643 &k+
+U+0644 &l+
+U+0645 &m+
+U+0646 &n+
+U+0647 &h+
+U+0648 &w+
+U+0649 &j+
+U+064A &y+
+U+064B &:+
+U+064C &"+
+U+064D &=+
+U+064E &/+
+U+064F &'+
+U+0650 &1+
+U+0651 &3+
+U+0652 &0+
+U+0670 &aS
+U+067E &p+
+U+06A4 &v+
+U+06AF &gf
+U+06F0 &0a
+U+06F1 &1a
+U+06F2 &2a
+U+06F3 &3a
+U+06F4 &4a
+U+06F5 &5a
+U+06F6 &6a
+U+06F7 &7a
+U+06F8 &8a
+U+06F9 &9a
+U+1E00 &_A-0_
+U+1E01 &_a-0_
+U+1E02 &B.
+U+1E03 &b.
+U+1E04 &_B-._
+U+1E05 &_b-._
+U+1E06 &B_
+U+1E07 &b_
+U+1E08 &_C,'_
+U+1E09 &_c,'_
+U+1E0A &D.
+U+1E0B &d.
+U+1E0C &_D-._
+U+1E0D &_d-._
+U+1E0E &D_
+U+1E0F &d_
+U+1E10 &D,
+U+1E11 &d,
+U+1E12 &_D->_
+U+1E13 &_d->_
+U+1E14 &_E-!_
+U+1E15 &_e-!_
+U+1E16 &_E-'_
+U+1E17 &_e-'_
+U+1E18 &_E->_
+U+1E19 &_e->_
+U+1E1A &_E-?_
+U+1E1B &_e-?_
+U+1E1C &_E,(_
+U+1E1D &_e,(_
+U+1E1E &F.
+U+1E1F &f.
+U+1E20 &G-
+U+1E21 &g-
+U+1E22 &H.
+U+1E23 &h.
+U+1E24 &_H-._
+U+1E25 &_h-._
+U+1E26 &H:
+U+1E27 &h:
+U+1E28 &H,
+U+1E29 &h,
+U+1E2A &_H-(_
+U+1E2B &_h-(_
+U+1E2C &_I-?_
+U+1E2D &_i-?_
+U+1E2E &_I:'_
+U+1E2F &_i:'_
+U+1E30 &K'
+U+1E31 &k'
+U+1E32 &_K-._
+U+1E33 &_k-._
+U+1E34 &K_
+U+1E35 &k_
+U+1E36 &_L-._
+U+1E37 &_l-._
+U+1E38 &_L--._
+U+1E39 &_l--._
+U+1E3A &L_
+U+1E3B &l_
+U+1E3C &_L->_
+U+1E3D &_l->_
+U+1E3E &M'
+U+1E3F &m'
+U+1E40 &M.
+U+1E41 &m.
+U+1E42 &_M-._
+U+1E43 &_m-._
+U+1E44 &N.
+U+1E45 &n.
+U+1E46 &_N-._
+U+1E47 &_n-._
+U+1E48 &N_
+U+1E49 &n_
+U+1E4A &_N->_
+U+1E4B &_N->_
+U+1E4C &_O?'_
+U+1E4D &_o?'_
+U+1E4E &_O?:_
+U+1E4F &_o?:_
+U+1E50 &_O-!_
+U+1E51 &_o-!_
+U+1E52 &_O-'_
+U+1E53 &_o-'_
+U+1E54 &P'
+U+1E55 &p'
+U+1E56 &P.
+U+1E57 &p.
+U+1E58 &R.
+U+1E59 &r.
+U+1E5A &_R-._
+U+1E5B &_r-._
+U+1E5C &_R--._
+U+1E5D &_r--._
+U+1E5E &R_
+U+1E5F &r_
+U+1E60 &S.
+U+1E61 &s.
+U+1E62 &_S-._
+U+1E63 &_s-._
+U+1E64 &_S'._
+U+1E65 &_s'._
+U+1E66 &_S<._
+U+1E67 &_s<._
+U+1E68 &_S.-._
+U+1E69 &_S.-._
+U+1E6A &T.
+U+1E6B &t.
+U+1E6C &_T-._
+U+1E6D &_t-._
+U+1E6E &T_
+U+1E6F &t_
+U+1E70 &_T->_
+U+1E71 &_t->_
+U+1E72 &_U--:_
+U+1E73 &_u--:_
+U+1E74 &_U-?_
+U+1E75 &_u-?_
+U+1E76 &_U->_
+U+1E77 &_u->_
+U+1E78 &_U?'_
+U+1E79 &_u?'_
+U+1E7A &_U-:_
+U+1E7B &_u-:_
+U+1E7C &V?
+U+1E7D &v?
+U+1E7E &_V-._
+U+1E7F &_v-._
+U+1E80 &W!
+U+1E81 &w!
+U+1E82 &W'
+U+1E83 &w'
+U+1E84 &W:
+U+1E85 &w:
+U+1E86 &W.
+U+1E87 &w.
+U+1E88 &_W-._
+U+1E89 &_w-._
+U+1E8A &X.
+U+1E8B &x.
+U+1E8C &X:
+U+1E8D &x:
+U+1E8E &Y.
+U+1E8F &y.
+U+1E90 &Z>
+U+1E91 &z>
+U+1E92 &_Z-._
+U+1E93 &_z-._
+U+1E94 &Z_
+U+1E95 &z_
+U+1E96 &h_
+U+1E97 &t:
+U+1E98 &w0
+U+1E99 &y0
+U+1EA0 &_A-._
+U+1EA1 &_a-._
+U+1EA2 &A2
+U+1EA3 &a2
+U+1EA4 &_A>'_
+U+1EA5 &_a>'_
+U+1EA6 &_A>!_
+U+1EA7 &_a>!_
+U+1EA8 &_A>2_
+U+1EA9 &_a>2_
+U+1EAA &_A>?_
+U+1EAB &_a>?_
+U+1EAC &_A>-._
+U+1EAD &_a>-._
+U+1EAE &_A('_
+U+1EAF &_a('_
+U+1EB0 &_A(!_
+U+1EB1 &_a(!_
+U+1EB2 &_A(2_
+U+1EB3 &_a(2_
+U+1EB4 &_A(?_
+U+1EB5 &_a(?_
+U+1EB6 &_A(-._
+U+1EB7 &_a(-._
+U+1EB8 &_E-._
+U+1EB9 &_e-._
+U+1EBA &E2
+U+1EBB &e2
+U+1EBC &E?
+U+1EBD &e?
+U+1EBE &_E>'_
+U+1EBF &_e>'_
+U+1EC0 &_E>!_
+U+1EC1 &_e>!_
+U+1EC2 &_E>2_
+U+1EC3 &_e>2_
+U+1EC4 &_E>?_
+U+1EC5 &_e>?_
+U+1EC6 &_E>-._
+U+1EC7 &_e>-._
+U+1EC8 &I2
+U+1EC9 &i2
+U+1ECA &_I-._
+U+1ECB &_i-._
+U+1ECC &_O-._
+U+1ECD &_o-._
+U+1ECE &O2
+U+1ECF &o2
+U+1ED0 &_O>'_
+U+1ED1 &_o>'_
+U+1ED2 &_O>!_
+U+1ED3 &_o>!_
+U+1ED4 &_O>2_
+U+1ED5 &_o>2_
+U+1ED6 &_O>?_
+U+1ED7 &_o>?_
+U+1ED8 &_O>-._
+U+1ED9 &_o>-._
+U+1EDA &_O9'_
+U+1EDB &_o9'_
+U+1EDC &_O9!_
+U+1EDD &_o9!_
+U+1EDE &_O92_
+U+1EDF &_o92_
+U+1EE0 &_O9?_
+U+1EE1 &_o9?_
+U+1EE2 &_O9-._
+U+1EE3 &_o9-._
+U+1EE4 &_U-._
+U+1EE5 &_u-._
+U+1EE6 &U2
+U+1EE7 &u2
+U+1EE8 &_U9'_
+U+1EE9 &_u9'_
+U+1EEA &_U9!_
+U+1EEB &_u9!_
+U+1EEC &_U92_
+U+1EED &_u92_
+U+1EEE &_U9?_
+U+1EEF &_u9?_
+U+1EF0 &_U9-._
+U+1EF1 &_u9-._
+U+1EF2 &Y!
+U+1EF3 &y!
+U+1EF4 &_Y-._
+U+1EF5 &_y-._
+U+1EF6 &Y2
+U+1EF7 &y2
+U+1EF8 &Y?
+U+1EF9 &y?
+U+1F00 &;'
+U+1F01 &,'
+U+1F02 &;!
+U+1F03 &,!
+U+1F04 &?;
+U+1F05 &?,
+U+1F06 &!:
+U+1F07 &?:
+U+2002 &1N
+U+2003 &1M
+U+2004 &3M
+U+2005 &4M
+U+2006 &6M
+U+2009 &1T
+U+200A &1H
+U+2010 &-1
+U+2013 &-N
+U+2014 &-M
+U+2015 &-3
+U+2016 &!2
+U+2017 &=2
+U+2018 &'6
+U+2019 &'9
+U+201A &.9
+U+201B &9'
+U+201C &"6
+U+201D &"9
+U+201E &:9
+U+201F &9"
+U+2020 &/-
+U+2021 &/=
+U+2025 &..
+U+2030 &%0
+U+2032 &1'
+U+2033 &2'
+U+2034 &3'
+U+2035 &1"
+U+2036 &2"
+U+2037 &3"
+U+2038 &Ca
+U+2039 &<1
+U+203A &>1
+U+203B &:X
+U+203C &_!*2_
+U+203E &'-
+U+2044 &/f
+U+2070 &0S
+U+2074 &4S
+U+2075 &5S
+U+2076 &6S
+U+2077 &7S
+U+2078 &8S
+U+2079 &9S
+U+207A &+S
+U+207B &-S
+U+207C &=S
+U+207D &(S
+U+207E &)S
+U+207F &nS
+U+2080 &0s
+U+2081 &1s
+U+2082 &2s
+U+2083 &3s
+U+2084 &4s
+U+2085 &5s
+U+2086 &6s
+U+2087 &7s
+U+2088 &8s
+U+2089 &9s
+U+208A &+s
+U+208B &-s
+U+208C &=s
+U+208D &(s
+U+208E &)s
+U+20A4 &Li
+U+20A7 &Pt
+U+20A9 &W=
+U+2103 &oC
+U+2105 &co
+U+2109 &oF
+U+2116 &N0
+U+2117 &PO
+U+211E &Rx
+U+2120 &SM
+U+2122 &TM
+U+2126 &Om
+U+212B &AO
+U+2153 &13
+U+2154 &23
+U+2155 &15
+U+2156 &25
+U+2157 &35
+U+2158 &45
+U+2159 &16
+U+215A &56
+U+215B &18
+U+215C &38
+U+215D &58
+U+215E &78
+U+2160 &1R
+U+2161 &2R
+U+2162 &3R
+U+2163 &4R
+U+2164 &5R
+U+2165 &6R
+U+2166 &7R
+U+2167 &8R
+U+2168 &9R
+U+2169 &aR
+U+216A &bR
+U+216B &cR
+U+216C &_50R_
+U+216D &_100R_
+U+216E &_500R_
+U+216F &_1000R_
+U+2170 &1r
+U+2171 &2r
+U+2172 &3r
+U+2173 &4r
+U+2174 &5r
+U+2175 &6r
+U+2176 &7r
+U+2177 &8r
+U+2178 &9r
+U+2179 &ar
+U+217A &br
+U+217B &cr
+U+217C &_50r_
+U+217D &_100r_
+U+217E &_500r_
+U+217F &_1000r_
+U+2180 &_1000RCD_
+U+2181 &_5000R_
+U+2182 &_10000R_
+U+2190 &<-
+U+2191 &-!
+U+2192 &->
+U+2193 &-v
+U+2194 &<>
+U+2195 &UD
+U+2196 &_<!!_
+U+2197 &_//>_
+U+2198 &_!!>_
+U+2199 &_<//_
+U+21D0 &<=
+U+21D2 &=>
+U+21D4 &==
+U+2200 &FA
+U+2202 &dP
+U+2203 &TE
+U+2205 &/0
+U+2206 &DE
+U+2207 &NB
+U+2208 &(-
+U+220B &-)
+U+220F &*P
+U+2211 &+Z
+U+2212 &-2
+U+2213 &-+
+U+2217 &*-
+U+2218 &Ob
+U+2219 &Sb
+U+221A &RT
+U+221D &0(
+U+221E &00
+U+221F &-L
+U+2220 &-V
+U+2225 &PP
+U+2227 &AN
+U+2228 &OR
+U+2229 &(U
+U+222A &)U
+U+222B &In
+U+222C &DI
+U+222E &Io
+U+2234 &.:
+U+2235 &:.
+U+2236 &:R
+U+2237 &::
+U+223C &?1
+U+223E &CG
+U+2243 &?-
+U+2245 &?=
+U+2248 &?2
+U+224C &=?
+U+2253 &HI
+U+2260 &!=
+U+2261 &=3
+U+2264 &=<
+U+2265 &>=
+U+226A &<*
+U+226B &*>
+U+226E &!<
+U+226F &!>
+U+2282 &(C
+U+2283 &)C
+U+2286 &(_
+U+2287 &)_
+U+2299 &0.
+U+229A &02
+U+22A5 &-T
+U+22C5 &.P
+U+22EE &:3
+U+22EF &.3
+U+2302 &Eh
+U+2308 &<7
+U+2309 &>7
+U+230A &7<
+U+230B &7>
+U+2310 &NI
+U+2312 &(A
+U+2315 &TR
+U+2320 &Iu
+U+2321 &Il
+U+2329 &</
+U+232A &/>
+U+2423 &Vs
+U+2440 &1h
+U+2441 &3h
+U+2442 &2h
+U+2443 &4h
+U+2446 &1j
+U+2447 &2j
+U+2448 &3j
+U+2449 &4j
+U+2460 &_1-o_
+U+2461 &_2-o_
+U+2462 &_3-o_
+U+2463 &_4-o_
+U+2464 &_5-o_
+U+2465 &_6-o_
+U+2466 &_7-o_
+U+2467 &_8-o_
+U+2468 &_9-o_
+U+2469 &_10-o_
+U+246A &_11-o_
+U+246B &_12-o_
+U+246C &_13-o_
+U+246D &_14-o_
+U+246E &_15-o_
+U+246F &_16-o_
+U+2470 &_17-o_
+U+2471 &_18-o_
+U+2472 &_19-o_
+U+2473 &_20-o_
+U+2474 &_(1)_
+U+2475 &_(2)_
+U+2476 &_(3)_
+U+2477 &_(4)_
+U+2478 &_(5)_
+U+2479 &_(6)_
+U+247A &_(7)_
+U+247B &_(8)_
+U+247C &_(9)_
+U+247D &_(10)_
+U+247E &_(11)_
+U+247F &_(12)_
+U+2480 &_(13)_
+U+2481 &_(14)_
+U+2482 &_(15)_
+U+2483 &_(16)_
+U+2484 &_(17)_
+U+2485 &_(18)_
+U+2486 &_(19)_
+U+2487 &_(20)_
+U+2488 &1.
+U+2489 &2.
+U+248A &3.
+U+248B &4.
+U+248C &5.
+U+248D &6.
+U+248E &7.
+U+248F &8.
+U+2490 &9.
+U+2491 &_10._
+U+2492 &_11._
+U+2493 &_12._
+U+2494 &_13._
+U+2495 &_14._
+U+2496 &_15._
+U+2497 &_16._
+U+2498 &_17._
+U+2499 &_18._
+U+249A &_19._
+U+249B &_20._
+U+249C &_(a)_
+U+249D &_(b)_
+U+249E &_(c)_
+U+249F &_(d)_
+U+24A0 &_(e)_
+U+24A1 &_(f)_
+U+24A2 &_(g)_
+U+24A3 &_(h)_
+U+24A4 &_(i)_
+U+24A5 &_(j)_
+U+24A6 &_(k)_
+U+24A7 &_(l)_
+U+24A8 &_(m)_
+U+24A9 &_(n)_
+U+24AA &_(o)_
+U+24AB &_(p)_
+U+24AC &_(q)_
+U+24AD &_(r)_
+U+24AE &_(s)_
+U+24AF &_(t)_
+U+24B0 &_(u)_
+U+24B1 &_(v)_
+U+24B2 &_(w)_
+U+24B3 &_(x)_
+U+24B4 &_(y)_
+U+24B5 &_(z)_
+U+24B6 &_A-o_
+U+24B7 &_B-o_
+U+24B8 &_C-o_
+U+24B9 &_D-o_
+U+24BA &_E-o_
+U+24BB &_F-o_
+U+24BC &_G-o_
+U+24BD &_H-o_
+U+24BE &_I-o_
+U+24BF &_J-o_
+U+24C0 &_K-o_
+U+24C1 &_L-o_
+U+24C2 &_M-o_
+U+24C3 &_N-o_
+U+24C4 &_O-o_
+U+24C5 &_P-o_
+U+24C6 &_Q-o_
+U+24C7 &_R-o_
+U+24C8 &_S-o_
+U+24C9 &_T-o_
+U+24CA &_U-o_
+U+24CB &_V-o_
+U+24CC &_W-o_
+U+24CD &_X-o_
+U+24CE &_Y-o_
+U+24CF &_Z-o_
+U+24D0 &_a-o_
+U+24D1 &_b-o_
+U+24D2 &_c-o_
+U+24D3 &_d-o_
+U+24D4 &_e-o_
+U+24D5 &_f-o_
+U+24D6 &_g-o_
+U+24D7 &_h-o_
+U+24D8 &_i-o_
+U+24D9 &_j-o_
+U+24DA &_k-o_
+U+24DB &_l-o_
+U+24DC &_m-o_
+U+24DD &_n-o_
+U+24DE &_o-o_
+U+24DF &_p-o_
+U+24E0 &_q-o_
+U+24E1 &_r-o_
+U+24E2 &_s-o_
+U+24E3 &_t-o_
+U+24E4 &_u-o_
+U+24E5 &_v-o_
+U+24E6 &_w-o_
+U+24E7 &_x-o_
+U+24E8 &_y-o_
+U+24E9 &_z-o_
+U+24EA &_0-o_
+U+2500 &hh
+U+2501 &HH
+U+2502 &vv
+U+2503 &VV
+U+2504 &3-
+U+2505 &3_
+U+2506 &3!
+U+2507 &3/
+U+2508 &4-
+U+2509 &4_
+U+250A &4!
+U+250B &4/
+U+250C &dr
+U+250D &dR
+U+250E &Dr
+U+250F &DR
+U+2510 &dl
+U+2511 &dL
+U+2512 &Dl
+U+2513 &LD
+U+2514 &ur
+U+2515 &uR
+U+2516 &Ur
+U+2517 &UR
+U+2518 &ul
+U+2519 &uL
+U+251A &Ul
+U+251B &UL
+U+251C &vr
+U+251D &vR
+U+251E &_Udr_
+U+251F &_uDr_
+U+2520 &Vr
+U+2521 &_UdR_
+U+2522 &_uDR_
+U+2523 &VR
+U+2524 &vl
+U+2525 &vL
+U+2526 &_Udl_
+U+2527 &_uDl_
+U+2528 &Vl
+U+2529 &_UdL_
+U+252A &_uDL_
+U+252B &VL
+U+252C &dh
+U+252D &_dLr_
+U+252E &_dlR_
+U+252F &dH
+U+2530 &Dh
+U+2531 &_DLr_
+U+2532 &_DlR_
+U+2533 &DH
+U+2534 &uh
+U+2535 &_uLr_
+U+2536 &_ulR_
+U+2537 &uH
+U+2538 &Uh
+U+2539 &_ULr_
+U+253A &_UlR_
+U+253B &UH
+U+253C &vh
+U+253D &_vLr_
+U+253E &_vlR_
+U+253F &vH
+U+2540 &_Udh_
+U+2541 &_uDh_
+U+2542 &Vh
+U+2543 &_UdLr_
+U+2544 &_UdlR_
+U+2545 &_uDLr_
+U+2546 &_uDlR_
+U+2547 &_UdH_
+U+2548 &_uDH_
+U+2549 &_VLr_
+U+254A &_VlR_
+U+254B &VH
+U+2571 &FD
+U+2572 &BD
+U+2580 &TB
+U+2584 &LB
+U+2588 &FB
+U+258C &lB
+U+2590 &RB
+U+2591 &.S
+U+2592 &:S
+U+2593 &?S
+U+25A0 &fS
+U+25A1 &OS
+U+25A2 &RO
+U+25A3 &Rr
+U+25A4 &RF
+U+25A5 &RY
+U+25A6 &RH
+U+25A7 &RZ
+U+25A8 &RK
+U+25A9 &RX
+U+25AA &sB
+U+25AC &SR
+U+25AD &Or
+U+25B2 &UT
+U+25B3 &uT
+U+25B6 &PR
+U+25B7 &Tr
+U+25BC &Dt
+U+25BD &dT
+U+25C0 &PL
+U+25C1 &Tl
+U+25C6 &Db
+U+25C7 &Dw
+U+25CA &LZ
+U+25CB &0m
+U+25CE &0o
+U+25CF &0M
+U+25D0 &0L
+U+25D1 &0R
+U+25D8 &Sn
+U+25D9 &Ic
+U+25E2 &Fd
+U+25E3 &Bd
+U+2605 &*2
+U+2606 &*1
+U+260E &_TEL_
+U+260F &_tel_
+U+261C &<H
+U+261E &>H
+U+263A &0u
+U+263B &0U
+U+263C &SU
+U+2640 &Fm
+U+2642 &Ml
+U+2660 &cS
+U+2661 &cH
+U+2662 &cD
+U+2663 &cC
+U+2664 &_cS-_
+U+2665 &_cH-_
+U+2666 &_cD-_
+U+2667 &_cC-_
+U+2669 &Md
+U+266A &M8
+U+266B &M2
+U+266C &_M16_
+U+266D &Mb
+U+266E &Mx
+U+266F &MX
+U+2713 &OK
+U+2717 &XX
+U+2720 &-X
+U+3000 &IS
+U+3001 &,_
+U+3002 &._
+U+3003 &+"
+U+3004 &+_
+U+3005 &*_
+U+3006 &;_
+U+3007 &0_
+U+300A &<+
+U+300B &>+
+U+300C &<'
+U+300D &>'
+U+300E &<"
+U+300F &>"
+U+3010 &("
+U+3011 &)"
+U+3012 &=T
+U+3013 &=_
+U+3014 &('
+U+3015 &)'
+U+3016 &(I
+U+3017 &)I
+U+301C &-?
+U+3020 &_=T:)_
+U+3041 &A5
+U+3042 &a5
+U+3043 &I5
+U+3044 &i5
+U+3045 &U5
+U+3046 &u5
+U+3047 &E5
+U+3048 &e5
+U+3049 &O5
+U+304A &o5
+U+304B &ka
+U+304C &ga
+U+304D &ki
+U+304E &gi
+U+304F &ku
+U+3050 &gu
+U+3051 &ke
+U+3052 &ge
+U+3053 &ko
+U+3054 &go
+U+3055 &sa
+U+3056 &za
+U+3057 &si
+U+3058 &zi
+U+3059 &su
+U+305A &zu
+U+305B &se
+U+305C &ze
+U+305D &so
+U+305E &zo
+U+305F &ta
+U+3060 &da
+U+3061 &ti
+U+3062 &di
+U+3063 &tU
+U+3064 &tu
+U+3065 &du
+U+3066 &te
+U+3067 &de
+U+3068 &to
+U+3069 &do
+U+306A &na
+U+306B &ni
+U+306C &nu
+U+306D &ne
+U+306E &no
+U+306F &ha
+U+3070 &ba
+U+3071 &pa
+U+3072 &hi
+U+3073 &bi
+U+3074 &pi
+U+3075 &hu
+U+3076 &bu
+U+3077 &pu
+U+3078 &he
+U+3079 &be
+U+307A &pe
+U+307B &ho
+U+307C &bo
+U+307D &po
+U+307E &ma
+U+307F &mi
+U+3080 &mu
+U+3081 &me
+U+3082 &mo
+U+3083 &yA
+U+3084 &ya
+U+3085 &yU
+U+3086 &yu
+U+3087 &yO
+U+3088 &yo
+U+3089 &ra
+U+308A &ri
+U+308B &ru
+U+308C &re
+U+308D &ro
+U+308E &wA
+U+308F &wa
+U+3090 &wi
+U+3091 &we
+U+3092 &wo
+U+3093 &n5
+U+3094 &vu
+U+309B &"5
+U+309C &05
+U+309D &*5
+U+309E &+5
+U+30A1 &a6
+U+30A2 &A6
+U+30A3 &i6
+U+30A4 &I6
+U+30A5 &u6
+U+30A6 &U6
+U+30A7 &e6
+U+30A8 &E6
+U+30A9 &o6
+U+30AA &O6
+U+30AB &Ka
+U+30AC &Ga
+U+30AD &Ki
+U+30AE &Gi
+U+30AF &Ku
+U+30B0 &Gu
+U+30B1 &Ke
+U+30B2 &Ge
+U+30B3 &Ko
+U+30B4 &Go
+U+30B5 &Sa
+U+30B6 &Za
+U+30B7 &Si
+U+30B8 &Zi
+U+30B9 &Su
+U+30BA &Zu
+U+30BB &Se
+U+30BC &Ze
+U+30BD &So
+U+30BE &Zo
+U+30BF &Ta
+U+30C0 &Da
+U+30C1 &Ti
+U+30C2 &Di
+U+30C3 &TU
+U+30C4 &Tu
+U+30C5 &Du
+U+30C6 &Te
+U+30C7 &De
+U+30C8 &To
+U+30C9 &Do
+U+30CA &Na
+U+30CB &Ni
+U+30CC &Nu
+U+30CD &Ne
+U+30CE &No
+U+30CF &Ha
+U+30D0 &Ba
+U+30D1 &Pa
+U+30D2 &Hi
+U+30D3 &Bi
+U+30D4 &Pi
+U+30D5 &Hu
+U+30D6 &Bu
+U+30D7 &Pu
+U+30D8 &He
+U+30D9 &Be
+U+30DA &Pe
+U+30DB &Ho
+U+30DC &Bo
+U+30DD &Po
+U+30DE &Ma
+U+30DF &Mi
+U+30E0 &Mu
+U+30E1 &Me
+U+30E2 &Mo
+U+30E3 &YA
+U+30E4 &Ya
+U+30E5 &YU
+U+30E6 &Yu
+U+30E7 &YO
+U+30E8 &Yo
+U+30E9 &Ra
+U+30EA &Ri
+U+30EB &Ru
+U+30EC &Re
+U+30ED &Ro
+U+30EE &WA
+U+30EF &Wa
+U+30F0 &Wi
+U+30F1 &We
+U+30F2 &Wo
+U+30F3 &N6
+U+30F4 &Vu
+U+30F5 &KA
+U+30F6 &KE
+U+30F7 &Va
+U+30F8 &Vi
+U+30F9 &Ve
+U+30FA &Vo
+U+30FB &.6
+U+30FC &-6
+U+30FD &*6
+U+30FE &+6
+U+3105 &b4
+U+3106 &p4
+U+3107 &m4
+U+3108 &f4
+U+3109 &d4
+U+310A &t4
+U+310B &n4
+U+310C &l4
+U+310D &g4
+U+310E &k4
+U+310F &h4
+U+3110 &j4
+U+3111 &q4
+U+3112 &x4
+U+3113 &zh
+U+3114 &ch
+U+3115 &sh
+U+3116 &r4
+U+3117 &z4
+U+3118 &c4
+U+3119 &s4
+U+311A &a4
+U+311B &o4
+U+311C &e4
+U+311D &_eh4_
+U+311E &ai
+U+311F &ei
+U+3120 &au
+U+3121 &ou
+U+3122 &an
+U+3123 &en
+U+3124 &aN
+U+3125 &eN
+U+3126 &er
+U+3127 &i4
+U+3128 &u4
+U+3129 &iu
+U+312A &v4
+U+312B &nG
+U+312C &gn
+U+321C &_(JU)_
+U+3220 &1c
+U+3221 &2c
+U+3222 &3c
+U+3223 &4c
+U+3224 &5c
+U+3225 &6c
+U+3226 &7c
+U+3227 &8c
+U+3228 &9c
+U+3229 &_10c_
+U+327F &_KSC_
+U+E001 &/c
+U+E002 &UA
+U+E003 &UB
+U+E004 &"3
+U+E005 &"1
+U+E006 &"!
+U+E007 &"'
+U+E008 &">
+U+E009 &"?
+U+E00A &"-
+U+E00B &"(
+U+E00C &".
+U+E00D &":
+U+E00E &"0
+U+E00F &""
+U+E010 &"<
+U+E011 &",
+U+E012 &";
+U+E013 &"_
+U+E014 &"=
+U+E015 &"/
+U+E016 &"i
+U+E017 &"d
+U+E018 &"p
+U+E019 &;;
+U+E01A &,,
+U+E01B &b3
+U+E01C &Ci
+U+E01D &f(
+U+E01E &ed
+U+E01F &am
+U+E020 &pm
+U+E021 &_Tel_
+U+E022 &_a+:_
+U+E023 &Fl
+U+E024 &GF
+U+E025 &>V
+U+E026 &!*
+U+E027 &?*
+U+E028 &J<
+U+FB00 &ff
+U+FB01 &fi
+U+FB02 &fl
+U+FB03 &_ffi_
+U+FB04 &_ffl_
+U+FB05 &ft
+U+FB06 &st
+U+FE7D &_3+;_
+U+FE82 &_aM._
+U+FE84 &_aH._
+U+FE8D &_a+-_
+U+FE8E &_a+._
+U+FE8F &_b+-_
+U+FE90 &_b+,_
+U+FE91 &_b+;_
+U+FE92 &_b+._
+U+FE93 &_tm-_
+U+FE94 &_tm._
+U+FE95 &_t+-_
+U+FE96 &_t+,_
+U+FE97 &_t+;_
+U+FE98 &_t+._
+U+FE99 &_tk-_
+U+FE9A &_tk,_
+U+FE9B &_tk;_
+U+FE9C &_tk._
+U+FE9D &_g+-_
+U+FE9E &_g+,_
+U+FE9F &_g+;_
+U+FEA0 &_g+._
+U+FEA1 &_hk-_
+U+FEA2 &_hk,_
+U+FEA3 &_hk;_
+U+FEA4 &_hk._
+U+FEA5 &_x+-_
+U+FEA6 &_x+,_
+U+FEA7 &_x+;_
+U+FEA8 &_x+._
+U+FEA9 &_d+-_
+U+FEAA &_d+._
+U+FEAB &_dk-_
+U+FEAC &_dk._
+U+FEAD &_r+-_
+U+FEAE &_r+._
+U+FEAF &_z+-_
+U+FEB0 &_z+._
+U+FEB1 &_s+-_
+U+FEB2 &_s+,_
+U+FEB3 &_s+;_
+U+FEB4 &_s+._
+U+FEB5 &_sn-_
+U+FEB6 &_sn,_
+U+FEB7 &_sn;_
+U+FEB8 &_sn._
+U+FEB9 &_c+-_
+U+FEBA &_c+,_
+U+FEBB &_c+;_
+U+FEBC &_c+._
+U+FEBD &_dd-_
+U+FEBE &_dd,_
+U+FEBF &_dd;_
+U+FEC0 &_dd._
+U+FEC1 &_tj-_
+U+FEC2 &_tj,_
+U+FEC3 &_tj;_
+U+FEC4 &_tj._
+U+FEC5 &_zH-_
+U+FEC6 &_zH,_
+U+FEC7 &_zH;_
+U+FEC8 &_zH._
+U+FEC9 &_e+-_
+U+FECA &_e+,_
+U+FECB &_e+;_
+U+FECC &_e+._
+U+FECD &_i+-_
+U+FECE &_i+,_
+U+FECF &_i+;_
+U+FED0 &_i+._
+U+FED1 &_f+-_
+U+FED2 &_f+,_
+U+FED3 &_f+;_
+U+FED4 &_f+._
+U+FED5 &_q+-_
+U+FED6 &_q+,_
+U+FED7 &_q+;_
+U+FED8 &_q+._
+U+FED9 &_k+-_
+U+FEDA &_k+,_
+U+FEDB &_k+;_
+U+FEDC &_k+._
+U+FEDD &_l+-_
+U+FEDE &_l+,_
+U+FEDF &_l+;_
+U+FEE0 &_l+._
+U+FEE1 &_m+-_
+U+FEE2 &_m+,_
+U+FEE3 &_m+;_
+U+FEE4 &_m+._
+U+FEE5 &_n+-_
+U+FEE6 &_n+,_
+U+FEE7 &_n+;_
+U+FEE8 &_n+._
+U+FEE9 &_h+-_
+U+FEEA &_h+,_
+U+FEEB &_h+;_
+U+FEEC &_h+._
+U+FEED &_w+-_
+U+FEEE &_w+._
+U+FEEF &_j+-_
+U+FEF0 &_j+._
+U+FEF1 &_y+-_
+U+FEF2 &_y+,_
+U+FEF3 &_y+;_
+U+FEF4 &_y+._
+U+FEF5 &_lM-_
+U+FEF6 &_lM._
+U+FEF7 &_lH-_
+U+FEF8 &_lH._
+U+FEF9 &_lh-_
+U+FEFA &_lh._
+U+FEFB &_la-_
+U+FEFC &_la._
diff --git a/support/utf2any/maps/rfc-1345-16.map b/support/utf2any/maps/rfc-1345-16.map
new file mode 100644
index 0000000000..611fdf579a
--- /dev/null
+++ b/support/utf2any/maps/rfc-1345-16.map
@@ -0,0 +1,1744 @@
+# RFC-1345
+# range: U+0100 - U+FFFF
+#
+# RFC-1345 seems to contain quite a lot of errors.
+# This isn't the exact RFC-1345, but a modified version (hopefully
+# without the errors) based on a file from recode, version 3.5:
+# http://www.iro.umontreal.ca/contrib/recode/charsets/ucs/iso10646.cm
+# The uncorrected version is in rfc-1345-16-obsolete.map
+
+U+0100 &A-
+U+0101 &a-
+U+0102 &A(
+U+0103 &a(
+U+0104 &A;
+U+0105 &a;
+U+0106 &C'
+U+0107 &c'
+U+0108 &C>
+U+0109 &c>
+U+010A &C.
+U+010B &c.
+U+010C &C<
+U+010D &c<
+U+010E &D<
+U+010F &d<
+U+0110 &D/
+U+0111 &d/
+U+0112 &E-
+U+0113 &e-
+U+0114 &E(
+U+0115 &e(
+U+0116 &E.
+U+0117 &e.
+U+0118 &E;
+U+0119 &e;
+U+011A &E<
+U+011B &e<
+U+011C &G>
+U+011D &g>
+U+011E &G(
+U+011F &g(
+U+0120 &G.
+U+0121 &g.
+U+0122 &G,
+U+0123 &g,
+U+0124 &H>
+U+0125 &h>
+U+0126 &H/
+U+0127 &h/
+U+0128 &I?
+U+0129 &i?
+U+012A &I-
+U+012B &i-
+U+012C &I(
+U+012D &i(
+U+012E &I;
+U+012F &i;
+U+0130 &I.
+U+0131 &i.
+U+0132 &IJ
+U+0133 &ij
+U+0134 &J>
+U+0135 &j>
+U+0136 &K,
+U+0137 &k,
+U+0138 &kk
+U+0139 &L'
+U+013A &l'
+U+013B &L,
+U+013C &l,
+U+013D &L<
+U+013E &l<
+U+013F &L.
+U+0140 &l.
+U+0141 &L/
+U+0142 &l/
+U+0143 &N'
+U+0144 &n'
+U+0145 &N,
+U+0146 &n,
+U+0147 &N<
+U+0148 &n<
+U+0149 &'n
+U+014A &NG
+U+014B &ng
+U+014C &O-
+U+014D &o-
+U+014E &O(
+U+014F &o(
+U+0150 &O"
+U+0151 &o"
+U+0152 &OE
+U+0153 &oe
+U+0154 &R'
+U+0155 &r'
+U+0156 &R,
+U+0157 &r,
+U+0158 &R<
+U+0159 &r<
+U+015A &S'
+U+015B &s'
+U+015C &S>
+U+015D &s>
+U+015E &S,
+U+015F &s,
+U+0160 &S<
+U+0161 &s<
+U+0162 &T,
+U+0163 &t,
+U+0164 &T<
+U+0165 &t<
+U+0166 &T/
+U+0167 &t/
+U+0168 &U?
+U+0169 &u?
+U+016A &U-
+U+016B &u-
+U+016C &U(
+U+016D &u(
+U+016E &U0
+U+016F &u0
+U+0170 &U"
+U+0171 &u"
+U+0172 &U;
+U+0173 &u;
+U+0174 &W>
+U+0175 &w>
+U+0176 &Y>
+U+0177 &y>
+U+0178 &Y:
+U+0179 &Z'
+U+017A &z'
+U+017B &Z.
+U+017C &z.
+U+017D &Z<
+U+017E &z<
+U+017F &s1
+U+0187 &C2
+U+0188 &c2
+U+0191 &F2
+U+0192 &f2
+U+0198 &K2
+U+0199 &k2
+U+01A0 &O9
+U+01A1 &o9
+U+01A2 &OI
+U+01A3 &oi
+U+01A6 &yr
+U+01AF &U9
+U+01B0 &u9
+U+01B5 &Z/
+U+01B6 &z/
+U+01B7 &ED
+U+01CD &A<
+U+01CE &a<
+U+01CF &I<
+U+01D0 &i<
+U+01D1 &O<
+U+01D2 &o<
+U+01D3 &U<
+U+01D4 &u<
+U+01D5 &_U:-_
+U+01D6 &_u:-_
+U+01D7 &_U:'_
+U+01D8 &_u:'_
+U+01D9 &_U:<_
+U+01DA &_u:<_
+U+01DB &_U:!_
+U+01DC &_u:!_
+U+01DE &A1
+U+01DF &a1
+U+01E0 &A7
+U+01E1 &a7
+U+01E2 &A3
+U+01E3 &a3
+U+01E4 &G/
+U+01E5 &g/
+U+01E6 &G<
+U+01E7 &g<
+U+01E8 &K<
+U+01E9 &k<
+U+01EA &O;
+U+01EB &o;
+U+01EC &O1
+U+01ED &o1
+U+01EE &EZ
+U+01EF &ez
+U+01F4 &G'
+U+01F5 &g'
+U+01FA &_AA'_
+U+01FB &_aa'_
+U+01FC &_AE'_
+U+01FD &_ae'_
+U+01FE &_O/'_
+U+01FF &_o/'_
+U+0200 &_A!!_
+U+0201 &_a!!_
+U+0202 &A)
+U+0203 &a)
+U+0204 &_E!!_
+U+0205 &_e!!_
+U+0206 &E)
+U+0207 &e)
+U+0208 &_I!!_
+U+0209 &_i!!_
+U+020A &I)
+U+020B &i)
+U+020C &_O!!_
+U+020D &_o!!_
+U+020E &O)
+U+020F &o)
+U+0210 &_R!!_
+U+0211 &_r!!_
+U+0212 &R)
+U+0213 &r)
+U+0214 &_U!!_
+U+0215 &_u!!_
+U+0216 &U)
+U+0217 &u)
+U+0292 &ed
+U+02BB &;S
+U+02C6 &1>
+U+02C7 &'<
+U+02C9 &1-
+U+02CB &1!
+U+02D8 &'(
+U+02D9 &'.
+U+02DA &'0
+U+02DB &';
+U+02DC &1?
+U+02DD &'"
+U+0374 &'G
+U+0375 &,G
+U+037A &j3
+U+037E &?%
+U+0384 &'*
+U+0385 &'%
+U+0386 &A%
+U+0387 &.*
+U+0388 &E%
+U+0389 &Y%
+U+038A &I%
+U+038C &O%
+U+038E &U%
+U+038F &W%
+U+0390 &i3
+U+0391 &A*
+U+0392 &B*
+U+0393 &G*
+U+0394 &D*
+U+0395 &E*
+U+0396 &Z*
+U+0397 &Y*
+U+0398 &H*
+U+0399 &I*
+U+039A &K*
+U+039B &L*
+U+039C &M*
+U+039D &N*
+U+039E &C*
+U+039F &O*
+U+03A0 &P*
+U+03A1 &R*
+U+03A3 &S*
+U+03A4 &T*
+U+03A5 &U*
+U+03A6 &F*
+U+03A7 &X*
+U+03A8 &Q*
+U+03A9 &W*
+U+03AA &J*
+U+03AB &V*
+U+03AC &a%
+U+03AD &e%
+U+03AE &y%
+U+03AF &i%
+U+03B0 &u3
+U+03B1 &a*
+U+03B2 &b*
+U+03B3 &g*
+U+03B4 &d*
+U+03B5 &e*
+U+03B6 &z*
+U+03B7 &y*
+U+03B8 &h*
+U+03B9 &i*
+U+03BA &k*
+U+03BB &l*
+U+03BC &m*
+U+03BD &n*
+U+03BE &c*
+U+03BF &o*
+U+03C0 &p*
+U+03C1 &r*
+U+03C2 &*s
+U+03C3 &s*
+U+03C4 &t*
+U+03C5 &u*
+U+03C6 &f*
+U+03C7 &x*
+U+03C8 &q*
+U+03C9 &w*
+U+03CA &j*
+U+03CB &v*
+U+03CC &o%
+U+03CD &u%
+U+03CE &w%
+U+03D0 &b3
+U+03DA &T3
+U+03DC &M3
+U+03DE &K3
+U+03E0 &P3
+U+0401 &IO
+U+0402 &D%
+U+0403 &G%
+U+0404 &IE
+U+0405 &DS
+U+0406 &II
+U+0407 &YI
+U+0408 &J%
+U+0409 &LJ
+U+040A &NJ
+U+040B &Ts
+U+040C &KJ
+U+040E &V%
+U+040F &DZ
+U+0410 &A=
+U+0411 &B=
+U+0412 &V=
+U+0413 &G=
+U+0414 &D=
+U+0415 &E=
+U+0416 &Z%
+U+0417 &Z=
+U+0418 &I=
+U+0419 &J=
+U+041A &K=
+U+041B &L=
+U+041C &M=
+U+041D &N=
+U+041E &O=
+U+041F &P=
+U+0420 &R=
+U+0421 &S=
+U+0422 &T=
+U+0423 &U=
+U+0424 &F=
+U+0425 &H=
+U+0426 &C=
+U+0427 &C%
+U+0428 &S%
+U+0429 &Sc
+U+042A &="
+U+042B &Y=
+U+042C &%"
+U+042D &JE
+U+042E &JU
+U+042F &JA
+U+0430 &a=
+U+0431 &b=
+U+0432 &v=
+U+0433 &g=
+U+0434 &d=
+U+0435 &e=
+U+0436 &z%
+U+0437 &z=
+U+0438 &i=
+U+0439 &j=
+U+043A &k=
+U+043B &l=
+U+043C &m=
+U+043D &n=
+U+043E &o=
+U+043F &p=
+U+0440 &r=
+U+0441 &s=
+U+0442 &t=
+U+0443 &u=
+U+0444 &f=
+U+0445 &h=
+U+0446 &c=
+U+0447 &c%
+U+0448 &s%
+U+0449 &sc
+U+044A &='
+U+044B &y=
+U+044C &%'
+U+044D &je
+U+044E &ju
+U+044F &ja
+U+0451 &io
+U+0452 &d%
+U+0453 &g%
+U+0454 &ie
+U+0455 &ds
+U+0456 &ii
+U+0457 &yi
+U+0458 &j%
+U+0459 &lj
+U+045A &nj
+U+045B &ts
+U+045C &kj
+U+045E &v%
+U+045F &dz
+U+0462 &Y3
+U+0463 &y3
+U+046A &O3
+U+046B &o3
+U+0472 &F3
+U+0473 &f3
+U+0474 &V3
+U+0475 &v3
+U+0480 &C3
+U+0481 &c3
+U+0490 &G3
+U+0491 &g3
+U+05D0 &A+
+U+05D1 &B+
+U+05D2 &G+
+U+05D3 &D+
+U+05D4 &H+
+U+05D5 &W+
+U+05D6 &Z+
+U+05D7 &X+
+U+05D8 &Tj
+U+05D9 &J+
+U+05DA &K%
+U+05DB &K+
+U+05DC &L+
+U+05DD &M%
+U+05DE &M+
+U+05DF &N%
+U+05E0 &N+
+U+05E1 &S+
+U+05E2 &E+
+U+05E3 &P%
+U+05E4 &P+
+U+05E5 &Zj
+U+05E6 &ZJ
+U+05E7 &Q+
+U+05E8 &R+
+U+05E9 &Sh
+U+05EA &T+
+U+060C &,+
+U+061B &;+
+U+061F &?+
+U+0621 &H'
+U+0622 &aM
+U+0623 &aH
+U+0624 &wH
+U+0625 &ah
+U+0626 &yH
+U+0627 &a+
+U+0628 &b+
+U+0629 &tm
+U+062A &t+
+U+062B &tk
+U+062C &g+
+U+062D &hk
+U+062E &x+
+U+062F &d+
+U+0630 &dk
+U+0631 &r+
+U+0632 &z+
+U+0633 &s+
+U+0634 &sn
+U+0635 &c+
+U+0636 &dd
+U+0637 &tj
+U+0638 &zH
+U+0639 &e+
+U+063A &i+
+U+0640 &++
+U+0641 &f+
+U+0642 &q+
+U+0643 &k+
+U+0644 &l+
+U+0645 &m+
+U+0646 &n+
+U+0647 &h+
+U+0648 &w+
+U+0649 &j+
+U+064A &y+
+U+064B &:+
+U+064C &"+
+U+064D &=+
+U+064E &/+
+U+064F &'+
+U+0650 &1+
+U+0651 &3+
+U+0652 &0+
+U+0660 &0a
+U+0661 &1a
+U+0662 &2a
+U+0663 &3a
+U+0664 &4a
+U+0665 &5a
+U+0666 &6a
+U+0667 &7a
+U+0668 &8a
+U+0669 &9a
+U+0670 &aS
+U+067E &p+
+U+0681 &hH
+U+0686 &tc
+U+0698 &zj
+U+06A4 &v+
+U+06AF &gf
+U+1E00 &_A-0_
+U+1E01 &_a-0_
+U+1E02 &B.
+U+1E03 &b.
+U+1E04 &_B-._
+U+1E05 &_b-._
+U+1E06 &B_
+U+1E07 &b_
+U+1E08 &_C,'_
+U+1E09 &_c,'_
+U+1E0A &D.
+U+1E0B &d.
+U+1E0C &_D-._
+U+1E0D &_d-._
+U+1E0E &D_
+U+1E0F &d_
+U+1E10 &D,
+U+1E11 &d,
+U+1E12 &_D->_
+U+1E13 &_d->_
+U+1E14 &_E-!_
+U+1E15 &_e-!_
+U+1E16 &_E-'_
+U+1E17 &_e-'_
+U+1E18 &_E->_
+U+1E19 &_e->_
+U+1E1A &_E-?_
+U+1E1B &_e-?_
+U+1E1C &_E,(_
+U+1E1D &_e,(_
+U+1E1E &F.
+U+1E1F &f.
+U+1E20 &G-
+U+1E21 &g-
+U+1E22 &H.
+U+1E23 &h.
+U+1E24 &_H-._
+U+1E25 &_h-._
+U+1E26 &H:
+U+1E27 &h:
+U+1E28 &H,
+U+1E29 &h,
+U+1E2A &_H-(_
+U+1E2B &_h-(_
+U+1E2C &_I-?_
+U+1E2D &_i-?_
+U+1E2E &_I:'_
+U+1E2F &_i:'_
+U+1E30 &K'
+U+1E31 &k'
+U+1E32 &_K-._
+U+1E33 &_k-._
+U+1E34 &K_
+U+1E35 &k_
+U+1E36 &_L-._
+U+1E37 &_l-._
+U+1E38 &_L--._
+U+1E39 &_l--._
+U+1E3A &L_
+U+1E3B &l_
+U+1E3C &_L->_
+U+1E3D &_l->_
+U+1E3E &M'
+U+1E3F &m'
+U+1E40 &M.
+U+1E41 &m.
+U+1E42 &_M-._
+U+1E43 &_m-._
+U+1E44 &N.
+U+1E45 &n.
+U+1E46 &_N-._
+U+1E47 &_n-._
+U+1E48 &N_
+U+1E49 &n_
+U+1E4A &_N->_
+U+1E4B &_n->_
+U+1E4C &_O?'_
+U+1E4D &_o?'_
+U+1E4E &_O?:_
+U+1E4F &_o?:_
+U+1E50 &_O-!_
+U+1E51 &_o-!_
+U+1E52 &_O-'_
+U+1E53 &_o-'_
+U+1E54 &P'
+U+1E55 &p'
+U+1E56 &P.
+U+1E57 &p.
+U+1E58 &R.
+U+1E59 &r.
+U+1E5A &_R-._
+U+1E5B &_r-._
+U+1E5C &_R--._
+U+1E5D &_r--._
+U+1E5E &R_
+U+1E5F &r_
+U+1E60 &S.
+U+1E61 &s.
+U+1E62 &_S-._
+U+1E63 &_s-._
+U+1E64 &_S'._
+U+1E65 &_s'._
+U+1E66 &_S<._
+U+1E67 &_s<._
+U+1E68 &_S.-._
+U+1E69 &_s.-._
+U+1E6A &T.
+U+1E6B &t.
+U+1E6C &_T-._
+U+1E6D &_t-._
+U+1E6E &T_
+U+1E6F &t_
+U+1E70 &_T->_
+U+1E71 &_t->_
+U+1E72 &_U--:_
+U+1E73 &_u--:_
+U+1E74 &_U-?_
+U+1E75 &_u-?_
+U+1E76 &_U->_
+U+1E77 &_u->_
+U+1E78 &_U?'_
+U+1E79 &_u?'_
+U+1E7A &_U-:_
+U+1E7B &_u-:_
+U+1E7C &V?
+U+1E7D &v?
+U+1E7E &_V-._
+U+1E7F &_v-._
+U+1E80 &W!
+U+1E81 &w!
+U+1E82 &W'
+U+1E83 &w'
+U+1E84 &W:
+U+1E85 &w:
+U+1E86 &W.
+U+1E87 &w.
+U+1E88 &_W-._
+U+1E89 &_w-._
+U+1E8A &X.
+U+1E8B &x.
+U+1E8C &X:
+U+1E8D &x:
+U+1E8E &Y.
+U+1E8F &y.
+U+1E90 &Z>
+U+1E91 &z>
+U+1E92 &_Z-._
+U+1E93 &_z-._
+U+1E94 &Z_
+U+1E95 &z_
+U+1EA0 &_A-._
+U+1EA1 &_a-._
+U+1EA2 &A2
+U+1EA3 &a2
+U+1EA4 &_A>'_
+U+1EA5 &_a>'_
+U+1EA6 &_A>!_
+U+1EA7 &_a>!_
+U+1EA8 &_A>2_
+U+1EA9 &_a>2_
+U+1EAA &_A>?_
+U+1EAB &_a>?_
+U+1EAC &_A>-._
+U+1EAD &_a>-._
+U+1EAE &_A('_
+U+1EAF &_a('_
+U+1EB0 &_A(!_
+U+1EB1 &_a(!_
+U+1EB2 &_A(2_
+U+1EB3 &_a(2_
+U+1EB4 &_A(?_
+U+1EB5 &_a(?_
+U+1EB6 &_A(-._
+U+1EB7 &_a(-._
+U+1EB8 &_E-._
+U+1EB9 &_e-._
+U+1EBA &E2
+U+1EBB &e2
+U+1EBC &E?
+U+1EBD &e?
+U+1EBE &_E>'_
+U+1EBF &_e>'_
+U+1EC0 &_E>!_
+U+1EC1 &_e>!_
+U+1EC2 &_E>2_
+U+1EC3 &_e>2_
+U+1EC4 &_E>?_
+U+1EC5 &_e>?_
+U+1EC6 &_E>-._
+U+1EC7 &_e>-._
+U+1EC8 &I2
+U+1EC9 &i2
+U+1ECA &_I-._
+U+1ECB &_i-._
+U+1ECC &_O-._
+U+1ECD &_o-._
+U+1ECE &O2
+U+1ECF &o2
+U+1ED0 &_O>'_
+U+1ED1 &_o>'_
+U+1ED2 &_O>!_
+U+1ED3 &_o>!_
+U+1ED4 &_O>2_
+U+1ED5 &_o>2_
+U+1ED6 &_O>?_
+U+1ED7 &_o>?_
+U+1ED8 &_O>-._
+U+1ED9 &_o>-._
+U+1EDA &_O9'_
+U+1EDB &_o9'_
+U+1EDC &_O9!_
+U+1EDD &_o9!_
+U+1EDE &_O92_
+U+1EDF &_o92_
+U+1EE0 &_O9?_
+U+1EE1 &_o9?_
+U+1EE2 &_O9-._
+U+1EE3 &_o9-._
+U+1EE4 &_U-._
+U+1EE5 &_u-._
+U+1EE6 &U2
+U+1EE7 &u2
+U+1EE8 &_U9'_
+U+1EE9 &_u9'_
+U+1EEA &_U9!_
+U+1EEB &_u9!_
+U+1EEC &_U92_
+U+1EED &_u92_
+U+1EEE &_U9?_
+U+1EEF &_u9?_
+U+1EF0 &_U9-._
+U+1EF1 &_u9-._
+U+1EF2 &Y!
+U+1EF3 &y!
+U+1EF4 &_Y-._
+U+1EF5 &_y-._
+U+1EF6 &Y2
+U+1EF7 &y2
+U+1EF8 &Y?
+U+1EF9 &y?
+U+1FBF &,,
+U+1FC0 &?*
+U+1FC1 &?:
+U+1FCD &,!
+U+1FCE &,'
+U+1FCF &?,
+U+1FDD &;!
+U+1FDE &;'
+U+1FDF &?;
+U+1FED &!:
+U+1FEF &!*
+U+1FFE &;;
+U+2002 &1N
+U+2003 &1M
+U+2004 &3M
+U+2005 &4M
+U+2006 &6M
+U+2009 &1T
+U+200A &1H
+U+200E &LR
+U+200F &RL
+U+2010 &-1
+U+2013 &-N
+U+2014 &-M
+U+2015 &-3
+U+2016 &!2
+U+2017 &=2
+U+2018 &'6
+U+2019 &'9
+U+201A &.9
+U+201B &9'
+U+201C &"6
+U+201D &"9
+U+201E &:9
+U+201F &9"
+U+2020 &/-
+U+2021 &/=
+U+2022 &Sb
+U+2025 &..
+U+2026 &.3
+U+2030 &%0
+U+2032 &1'
+U+2033 &2'
+U+2034 &3'
+U+2035 &1"
+U+2036 &2"
+U+2037 &3"
+U+2038 &Ca
+U+2039 &<1
+U+203A &>1
+U+203B &:X
+U+203C &_!*2_
+U+203E &'-
+U+2070 &0S
+U+2074 &4S
+U+2075 &5S
+U+2076 &6S
+U+2077 &7S
+U+2078 &8S
+U+2079 &9S
+U+207A &+S
+U+207B &-S
+U+207C &=S
+U+207D &(S
+U+207E &)S
+U+207F &nS
+U+2080 &0s
+U+2081 &1s
+U+2082 &2s
+U+2083 &3s
+U+2084 &4s
+U+2085 &5s
+U+2086 &6s
+U+2087 &7s
+U+2088 &8s
+U+2089 &9s
+U+208A &+s
+U+208B &-s
+U+208C &=s
+U+208D &(s
+U+208E &)s
+U+20A3 &Ff
+U+20A4 &Li
+U+20A7 &Pt
+U+20A9 &W=
+U+2103 &oC
+U+2105 &co
+U+2109 &oF
+U+2116 &N0
+U+2117 &PO
+U+211E &Rx
+U+2120 &SM
+U+2122 &TM
+U+2126 &Om
+U+212B &AO
+U+2153 &13
+U+2154 &23
+U+2155 &15
+U+2156 &25
+U+2157 &35
+U+2158 &45
+U+2159 &16
+U+215A &56
+U+215B &18
+U+215C &38
+U+215D &58
+U+215E &78
+U+2160 &1R
+U+2161 &2R
+U+2162 &3R
+U+2163 &4R
+U+2164 &5R
+U+2165 &6R
+U+2166 &7R
+U+2167 &8R
+U+2168 &9R
+U+2169 &aR
+U+216A &bR
+U+216B &cR
+U+216C &_50R_
+U+216D &_100R_
+U+216E &_500R_
+U+216F &_1000R_
+U+2170 &1r
+U+2171 &2r
+U+2172 &3r
+U+2173 &4r
+U+2174 &5r
+U+2175 &6r
+U+2176 &7r
+U+2177 &8r
+U+2178 &9r
+U+2179 &ar
+U+217A &br
+U+217B &cr
+U+217C &_50r_
+U+217D &_100r_
+U+217E &_500r_
+U+217F &_1000r_
+U+2180 &_1000RCD_
+U+2181 &_5000R_
+U+2182 &_10000R_
+U+2190 &<-
+U+2191 &-!
+U+2192 &->
+U+2193 &-v
+U+2194 &<>
+U+2195 &UD
+U+2196 &_<!!_
+U+2197 &_//>_
+U+2198 &_!!>_
+U+2199 &_<//_
+U+21A8 &_UD-_
+U+21C0 &>V
+U+21D0 &<=
+U+21D2 &=>
+U+21D4 &==
+U+2200 &FA
+U+2202 &dP
+U+2203 &TE
+U+2205 &/0
+U+2206 &DE
+U+2207 &NB
+U+2208 &(-
+U+220B &-)
+U+220F &*P
+U+2211 &+Z
+U+2212 &-2
+U+2213 &-+
+U+2214 &.+
+U+2215 &/f
+U+2217 &*-
+U+2218 &Ob
+U+2219 &sb
+U+221A &RT
+U+221D &0(
+U+221E &00
+U+221F &-L
+U+2220 &-V
+U+2225 &PP
+U+2227 &AN
+U+2228 &OR
+U+2229 &(U
+U+222A &)U
+U+222B &In
+U+222C &DI
+U+222E &Io
+U+2234 &.:
+U+2235 &:.
+U+2236 &:R
+U+2237 &::
+U+223C &?1
+U+223E &CG
+U+2243 &?-
+U+2245 &?=
+U+2248 &?2
+U+224C &=?
+U+2253 &HI
+U+2260 &!=
+U+2261 &=3
+U+2264 &=<
+U+2265 &>=
+U+226A &<*
+U+226B &*>
+U+226E &!<
+U+226F &!>
+U+2282 &(C
+U+2283 &)C
+U+2286 &(_
+U+2287 &)_
+U+2299 &0.
+U+229A &02
+U+22A5 &-T
+U+22C5 &.P
+U+22EE &:3
+U+2302 &Eh
+U+2308 &<7
+U+2309 &>7
+U+230A &7<
+U+230B &7>
+U+2310 &NI
+U+2312 &(A
+U+2315 &TR
+U+2318 &88
+U+2320 &Iu
+U+2321 &Il
+U+2329 &</
+U+232A &/>
+U+2423 &Vs
+U+2440 &1h
+U+2441 &3h
+U+2442 &2h
+U+2443 &4h
+U+2446 &1j
+U+2447 &2j
+U+2448 &3j
+U+2449 &4j
+U+2460 &_1-o_
+U+2461 &_2-o_
+U+2462 &_3-o_
+U+2463 &_4-o_
+U+2464 &_5-o_
+U+2465 &_6-o_
+U+2466 &_7-o_
+U+2467 &_8-o_
+U+2468 &_9-o_
+U+2469 &_10-o_
+U+246A &_11-o_
+U+246B &_12-o_
+U+246C &_13-o_
+U+246D &_14-o_
+U+246E &_15-o_
+U+246F &_16-o_
+U+2470 &_17-o_
+U+2471 &_18-o_
+U+2472 &_19-o_
+U+2473 &_20-o_
+U+2474 &_(1)_
+U+2475 &_(2)_
+U+2476 &_(3)_
+U+2477 &_(4)_
+U+2478 &_(5)_
+U+2479 &_(6)_
+U+247A &_(7)_
+U+247B &_(8)_
+U+247C &_(9)_
+U+247D &_(10)_
+U+247E &_(11)_
+U+247F &_(12)_
+U+2480 &_(13)_
+U+2481 &_(14)_
+U+2482 &_(15)_
+U+2483 &_(16)_
+U+2484 &_(17)_
+U+2485 &_(18)_
+U+2486 &_(19)_
+U+2487 &_(20)_
+U+2488 &1.
+U+2489 &2.
+U+248A &3.
+U+248B &4.
+U+248C &5.
+U+248D &6.
+U+248E &7.
+U+248F &8.
+U+2490 &9.
+U+2491 &_10._
+U+2492 &_11._
+U+2493 &_12._
+U+2494 &_13._
+U+2495 &_14._
+U+2496 &_15._
+U+2497 &_16._
+U+2498 &_17._
+U+2499 &_18._
+U+249A &_19._
+U+249B &_20._
+U+249C &_(a)_
+U+249D &_(b)_
+U+249E &_(c)_
+U+249F &_(d)_
+U+24A0 &_(e)_
+U+24A1 &_(f)_
+U+24A2 &_(g)_
+U+24A3 &_(h)_
+U+24A4 &_(i)_
+U+24A5 &_(j)_
+U+24A6 &_(k)_
+U+24A7 &_(l)_
+U+24A8 &_(m)_
+U+24A9 &_(n)_
+U+24AA &_(o)_
+U+24AB &_(p)_
+U+24AC &_(q)_
+U+24AD &_(r)_
+U+24AE &_(s)_
+U+24AF &_(t)_
+U+24B0 &_(u)_
+U+24B1 &_(v)_
+U+24B2 &_(w)_
+U+24B3 &_(x)_
+U+24B4 &_(y)_
+U+24B5 &_(z)_
+U+24B6 &_A-o_
+U+24B7 &_B-o_
+U+24B8 &_C-o_
+U+24B9 &_D-o_
+U+24BA &_E-o_
+U+24BB &_F-o_
+U+24BC &_G-o_
+U+24BD &_H-o_
+U+24BE &_I-o_
+U+24BF &_J-o_
+U+24C0 &_K-o_
+U+24C1 &_L-o_
+U+24C2 &_M-o_
+U+24C3 &_N-o_
+U+24C4 &_O-o_
+U+24C5 &_P-o_
+U+24C6 &_Q-o_
+U+24C7 &_R-o_
+U+24C8 &_S-o_
+U+24C9 &_T-o_
+U+24CA &_U-o_
+U+24CB &_V-o_
+U+24CC &_W-o_
+U+24CD &_X-o_
+U+24CE &_Y-o_
+U+24CF &_Z-o_
+U+24D0 &_a-o_
+U+24D1 &_b-o_
+U+24D2 &_c-o_
+U+24D3 &_d-o_
+U+24D4 &_e-o_
+U+24D5 &_f-o_
+U+24D6 &_g-o_
+U+24D7 &_h-o_
+U+24D8 &_i-o_
+U+24D9 &_j-o_
+U+24DA &_k-o_
+U+24DB &_l-o_
+U+24DC &_m-o_
+U+24DD &_n-o_
+U+24DE &_o-o_
+U+24DF &_p-o_
+U+24E0 &_q-o_
+U+24E1 &_r-o_
+U+24E2 &_s-o_
+U+24E3 &_t-o_
+U+24E4 &_u-o_
+U+24E5 &_v-o_
+U+24E6 &_w-o_
+U+24E7 &_x-o_
+U+24E8 &_y-o_
+U+24E9 &_z-o_
+U+24EA &_0-o_
+U+2500 &hh
+U+2501 &_HH-_
+U+2502 &vv
+U+2503 &_VV-_
+U+2504 &3-
+U+2505 &3_
+U+2506 &3!
+U+2507 &3/
+U+2508 &4-
+U+2509 &4_
+U+250A &4!
+U+250B &4/
+U+250C &dr
+U+250D &_dR-_
+U+250E &_Dr-_
+U+250F &_DR-_
+U+2510 &dl
+U+2511 &_dL-_
+U+2512 &_Dl-_
+U+2513 &_LD-_
+U+2514 &ur
+U+2515 &_uR-_
+U+2516 &_Ur-_
+U+2517 &_UR-_
+U+2518 &ul
+U+2519 &_uL-_
+U+251A &_Ul-_
+U+251B &_UL-_
+U+251C &vr
+U+251D &_vR-_
+U+251E &_Udr_
+U+251F &_uDr_
+U+2520 &_Vr-_
+U+2521 &_UdR_
+U+2522 &_uDR_
+U+2523 &_VR-_
+U+2524 &vl
+U+2525 &_vL-_
+U+2526 &_Udl_
+U+2527 &_uDl_
+U+2528 &_Vl-_
+U+2529 &_UdL_
+U+252A &_uDL_
+U+252B &_VL-_
+U+252C &dh
+U+252D &_dLr_
+U+252E &_dlR_
+U+252F &_dH-_
+U+2530 &_Dh-_
+U+2531 &_DLr_
+U+2532 &_DlR_
+U+2533 &_DH-_
+U+2534 &uh
+U+2535 &_uLr_
+U+2536 &_ulR_
+U+2537 &_uH-_
+U+2538 &_Uh-_
+U+2539 &_ULr_
+U+253A &_UlR_
+U+253B &_UH-_
+U+253C &vh
+U+253D &_vLr_
+U+253E &_vlR_
+U+253F &_vH-_
+U+2540 &_Udh_
+U+2541 &_uDh_
+U+2542 &_Vh-_
+U+2543 &_UdLr_
+U+2544 &_UdlR_
+U+2545 &_uDLr_
+U+2546 &_uDlR_
+U+2547 &_UdH_
+U+2548 &_uDH_
+U+2549 &_VLr_
+U+254A &_VlR_
+U+254B &_VH-_
+U+2550 &HH
+U+2551 &VV
+U+2552 &dR
+U+2553 &Dr
+U+2554 &DR
+U+2555 &dL
+U+2556 &Dl
+U+2557 &LD
+U+2558 &uR
+U+2559 &Ur
+U+255A &UR
+U+255B &uL
+U+255C &Ul
+U+255D &UL
+U+255E &vR
+U+255F &Vr
+U+2560 &VR
+U+2561 &vL
+U+2562 &Vl
+U+2563 &VL
+U+2564 &dH
+U+2565 &Dh
+U+2566 &DH
+U+2567 &uH
+U+2568 &Uh
+U+2569 &UH
+U+256A &vH
+U+256B &Vh
+U+256C &VH
+U+2571 &FD
+U+2572 &BD
+U+2580 &TB
+U+2584 &LB
+U+2588 &FB
+U+258C &lB
+U+2590 &RB
+U+2591 &.S
+U+2592 &:S
+U+2593 &?S
+U+25A0 &fS
+U+25A1 &OS
+U+25A2 &RO
+U+25A3 &Rr
+U+25A4 &RF
+U+25A5 &RY
+U+25A6 &RH
+U+25A7 &RZ
+U+25A8 &RK
+U+25A9 &RX
+U+25AA &sB
+U+25AC &SR
+U+25AD &Or
+U+25B2 &UT
+U+25B3 &uT
+U+25B7 &Tr
+U+25BA &PR
+U+25BC &Dt
+U+25BD &dT
+U+25C1 &Tl
+U+25C4 &PL
+U+25C6 &Db
+U+25C7 &Dw
+U+25CA &LZ
+U+25CB &0m
+U+25CE &0o
+U+25CF &0M
+U+25D0 &0L
+U+25D1 &0R
+U+25D8 &Sn
+U+25D9 &Ic
+U+25E2 &Fd
+U+25E3 &Bd
+U+25EF &Ci
+U+2605 &*2
+U+2606 &*1
+U+260E &_TEL_
+U+260F &_tel_
+U+261C &<H
+U+261E &>H
+U+263A &0u
+U+263B &0U
+U+263C &SU
+U+2640 &Fm
+U+2642 &Ml
+U+2660 &cS
+U+2661 &cH
+U+2662 &cD
+U+2663 &cC
+U+2664 &_cS-_
+U+2665 &_cH-_
+U+2666 &_cD-_
+U+2667 &_cC-_
+U+2669 &Md
+U+266A &M8
+U+266B &M2
+U+266C &_M16_
+U+266D &Mb
+U+266E &Mx
+U+266F &MX
+U+2713 &OK
+U+2717 &XX
+U+2720 &-X
+U+3000 &IS
+U+3001 &,_
+U+3002 &._
+U+3003 &+"
+U+3004 &_JIS_
+U+3005 &*_
+U+3006 &;_
+U+3007 &0_
+U+300A &<+
+U+300B &>+
+U+300C &<'
+U+300D &>'
+U+300E &<"
+U+300F &>"
+U+3010 &("
+U+3011 &)"
+U+3012 &=T
+U+3013 &=_
+U+3014 &('
+U+3015 &)'
+U+3016 &(I
+U+3017 &)I
+U+301C &-?
+U+3020 &_=T:)_
+U+3041 &A5
+U+3042 &a5
+U+3043 &I5
+U+3044 &i5
+U+3045 &U5
+U+3046 &u5
+U+3047 &E5
+U+3048 &e5
+U+3049 &O5
+U+304A &o5
+U+304B &ka
+U+304C &ga
+U+304D &ki
+U+304E &gi
+U+304F &ku
+U+3050 &gu
+U+3051 &ke
+U+3052 &ge
+U+3053 &ko
+U+3054 &go
+U+3055 &sa
+U+3056 &za
+U+3057 &si
+U+3058 &zi
+U+3059 &su
+U+305A &zu
+U+305B &se
+U+305C &ze
+U+305D &so
+U+305E &zo
+U+305F &ta
+U+3060 &da
+U+3061 &ti
+U+3062 &di
+U+3063 &tU
+U+3064 &tu
+U+3065 &du
+U+3066 &te
+U+3067 &de
+U+3068 &to
+U+3069 &do
+U+306A &na
+U+306B &ni
+U+306C &nu
+U+306D &ne
+U+306E &no
+U+306F &ha
+U+3070 &ba
+U+3071 &pa
+U+3072 &hi
+U+3073 &bi
+U+3074 &pi
+U+3075 &hu
+U+3076 &bu
+U+3077 &pu
+U+3078 &he
+U+3079 &be
+U+307A &pe
+U+307B &ho
+U+307C &bo
+U+307D &po
+U+307E &ma
+U+307F &mi
+U+3080 &mu
+U+3081 &me
+U+3082 &mo
+U+3083 &yA
+U+3084 &ya
+U+3085 &yU
+U+3086 &yu
+U+3087 &yO
+U+3088 &yo
+U+3089 &ra
+U+308A &ri
+U+308B &ru
+U+308C &re
+U+308D &ro
+U+308E &wA
+U+308F &wa
+U+3090 &wi
+U+3091 &we
+U+3092 &wo
+U+3093 &n5
+U+3094 &vu
+U+309B &"5
+U+309C &05
+U+309D &*5
+U+309E &+5
+U+30A1 &a6
+U+30A2 &A6
+U+30A3 &i6
+U+30A4 &I6
+U+30A5 &u6
+U+30A6 &U6
+U+30A7 &e6
+U+30A8 &E6
+U+30A9 &o6
+U+30AA &O6
+U+30AB &Ka
+U+30AC &Ga
+U+30AD &Ki
+U+30AE &Gi
+U+30AF &Ku
+U+30B0 &Gu
+U+30B1 &Ke
+U+30B2 &Ge
+U+30B3 &Ko
+U+30B4 &Go
+U+30B5 &Sa
+U+30B6 &Za
+U+30B7 &Si
+U+30B8 &Zi
+U+30B9 &Su
+U+30BA &Zu
+U+30BB &Se
+U+30BC &Ze
+U+30BD &So
+U+30BE &Zo
+U+30BF &Ta
+U+30C0 &Da
+U+30C1 &Ti
+U+30C2 &Di
+U+30C3 &TU
+U+30C4 &Tu
+U+30C5 &Du
+U+30C6 &Te
+U+30C7 &De
+U+30C8 &To
+U+30C9 &Do
+U+30CA &Na
+U+30CB &Ni
+U+30CC &Nu
+U+30CD &Ne
+U+30CE &No
+U+30CF &Ha
+U+30D0 &Ba
+U+30D1 &Pa
+U+30D2 &Hi
+U+30D3 &Bi
+U+30D4 &Pi
+U+30D5 &Hu
+U+30D6 &Bu
+U+30D7 &Pu
+U+30D8 &He
+U+30D9 &Be
+U+30DA &Pe
+U+30DB &Ho
+U+30DC &Bo
+U+30DD &Po
+U+30DE &Ma
+U+30DF &Mi
+U+30E0 &Mu
+U+30E1 &Me
+U+30E2 &Mo
+U+30E3 &YA
+U+30E4 &Ya
+U+30E5 &YU
+U+30E6 &Yu
+U+30E7 &YO
+U+30E8 &Yo
+U+30E9 &Ra
+U+30EA &Ri
+U+30EB &Ru
+U+30EC &Re
+U+30ED &Ro
+U+30EE &WA
+U+30EF &Wa
+U+30F0 &Wi
+U+30F1 &We
+U+30F2 &Wo
+U+30F3 &N6
+U+30F4 &Vu
+U+30F5 &KA
+U+30F6 &KE
+U+30F7 &Va
+U+30F8 &Vi
+U+30F9 &Ve
+U+30FA &Vo
+U+30FB &.6
+U+30FC &-6
+U+30FD &*6
+U+30FE &+6
+U+3105 &b4
+U+3106 &p4
+U+3107 &m4
+U+3108 &f4
+U+3109 &d4
+U+310A &t4
+U+310B &n4
+U+310C &l4
+U+310D &g4
+U+310E &k4
+U+310F &h4
+U+3110 &j4
+U+3111 &q4
+U+3112 &x4
+U+3113 &zh
+U+3114 &ch
+U+3115 &sh
+U+3116 &r4
+U+3117 &z4
+U+3118 &c4
+U+3119 &s4
+U+311A &a4
+U+311B &o4
+U+311C &e4
+U+311D &_eh4_
+U+311E &ai
+U+311F &ei
+U+3120 &au
+U+3121 &ou
+U+3122 &an
+U+3123 &en
+U+3124 &aN
+U+3125 &eN
+U+3126 &er
+U+3127 &i4
+U+3128 &u4
+U+3129 &iu
+U+312A &v4
+U+312B &nG
+U+312C &gn
+U+321C &_(JU)_
+U+3220 &1c
+U+3221 &2c
+U+3222 &3c
+U+3223 &4c
+U+3224 &5c
+U+3225 &6c
+U+3226 &7c
+U+3227 &8c
+U+3228 &9c
+U+3229 &_10c_
+U+327F &_KSC_
+U+33C2 &am
+U+33D8 &pm
+U+E000 &"3
+U+E001 &"1
+U+E002 &"!
+U+E003 &"'
+U+E004 &">
+U+E005 &"?
+U+E006 &"-
+U+E007 &"(
+U+E008 &".
+U+E009 &":
+U+E00A &"0
+U+E00B &",
+U+E00C &"_
+U+E00D &""
+U+E00E &";
+U+E00F &"<
+U+E010 &"=
+U+E011 &"/
+U+E012 &"p
+U+E013 &"d
+U+E014 &"i
+U+E015 &+_
+U+E016 &_a+:_
+U+E017 &_Tel_
+U+E018 &UA
+U+E019 &UB
+U+E01A &t3
+U+E01B &m3
+U+E01C &k3
+U+E01D &p3
+U+E01E &Mc
+U+E01F &a8
+U+E020 &b8
+U+E021 &c8
+U+E022 &d8
+U+E023 &e8
+U+E024 &f8
+U+E025 &g8
+U+E026 &h8
+U+E027 &i8
+U+E028 &j8
+U+E029 &k8
+U+E02A &l8
+U+E02B &m8
+U+E02C &n8
+U+E02D &o8
+U+E02E &p8
+U+E02F &q8
+U+E030 &r8
+U+E031 &s8
+U+E032 &t8
+U+E033 &u8
+U+E034 &v8
+U+E035 &w8
+U+E036 &x8
+U+E037 &y8
+U+E038 &z8
+U+E039 &__
+U+E03A &/c
+U+FB00 &ff
+U+FB01 &fi
+U+FB02 &fl
+U+FB03 &_ffi_
+U+FB04 &_ffl_
+U+FB05 &ft
+U+FB06 &st
+U+FE7D &_3+;_
+U+FE82 &_aM._
+U+FE84 &_aH._
+U+FE88 &_ah._
+U+FE8D &_a+-_
+U+FE8E &_a+._
+U+FE8F &_b+-_
+U+FE90 &_b+._
+U+FE91 &_b+,_
+U+FE92 &_b+;_
+U+FE93 &_tm-_
+U+FE94 &_tm._
+U+FE95 &_t+-_
+U+FE96 &_t+._
+U+FE97 &_t+,_
+U+FE98 &_t+;_
+U+FE99 &_tk-_
+U+FE9A &_tk._
+U+FE9B &_tk,_
+U+FE9C &_tk;_
+U+FE9D &_g+-_
+U+FE9E &_g+._
+U+FE9F &_g+,_
+U+FEA0 &_g+;_
+U+FEA1 &_hk-_
+U+FEA2 &_hk._
+U+FEA3 &_hk,_
+U+FEA4 &_hk;_
+U+FEA5 &_x+-_
+U+FEA6 &_x+._
+U+FEA7 &_x+,_
+U+FEA8 &_x+;_
+U+FEA9 &_d+-_
+U+FEAA &_d+._
+U+FEAB &_dk-_
+U+FEAC &_dk._
+U+FEAD &_r+-_
+U+FEAE &_r+._
+U+FEAF &_z+-_
+U+FEB0 &_z+._
+U+FEB1 &_s+-_
+U+FEB2 &_s+._
+U+FEB3 &_s+,_
+U+FEB4 &_s+;_
+U+FEB5 &_sn-_
+U+FEB6 &_sn._
+U+FEB7 &_sn,_
+U+FEB8 &_sn;_
+U+FEB9 &_c+-_
+U+FEBA &_c+._
+U+FEBB &_c+,_
+U+FEBC &_c+;_
+U+FEBD &_dd-_
+U+FEBE &_dd._
+U+FEBF &_dd,_
+U+FEC0 &_dd;_
+U+FEC1 &_tj-_
+U+FEC2 &_tj._
+U+FEC3 &_tj,_
+U+FEC4 &_tj;_
+U+FEC5 &_zH-_
+U+FEC6 &_zH._
+U+FEC7 &_zH,_
+U+FEC8 &_zH;_
+U+FEC9 &_e+-_
+U+FECA &_e+._
+U+FECB &_e+,_
+U+FECC &_e+;_
+U+FECD &_i+-_
+U+FECE &_i+._
+U+FECF &_i+,_
+U+FED0 &_i+;_
+U+FED1 &_f+-_
+U+FED2 &_f+._
+U+FED3 &_f+,_
+U+FED4 &_f+;_
+U+FED5 &_q+-_
+U+FED6 &_q+._
+U+FED7 &_q+,_
+U+FED8 &_q+;_
+U+FED9 &_k+-_
+U+FEDA &_k+._
+U+FEDB &_k+,_
+U+FEDC &_k+;_
+U+FEDD &_l+-_
+U+FEDE &_l+._
+U+FEDF &_l+,_
+U+FEE0 &_l+;_
+U+FEE1 &_m+-_
+U+FEE2 &_m+._
+U+FEE3 &_m+,_
+U+FEE4 &_m+;_
+U+FEE5 &_n+-_
+U+FEE6 &_n+._
+U+FEE7 &_n+,_
+U+FEE8 &_n+;_
+U+FEE9 &_h+-_
+U+FEEA &_h+._
+U+FEEB &_h+,_
+U+FEEC &_h+;_
+U+FEED &_w+-_
+U+FEEE &_w+._
+U+FEEF &_j+-_
+U+FEF0 &_j+._
+U+FEF1 &_y+-_
+U+FEF2 &_y+._
+U+FEF3 &_y+,_
+U+FEF4 &_y+;_
+U+FEF5 &_lM-_
+U+FEF6 &_lM._
+U+FEF7 &_lH-_
+U+FEF8 &_lH._
+U+FEF9 &_lh-_
+U+FEFA &_lh._
+U+FEFB &_la-_
+U+FEFC &_la._
diff --git a/support/utf2any/maps/rfc-1345-7.map b/support/utf2any/maps/rfc-1345-7.map
new file mode 100644
index 0000000000..006355b46d
--- /dev/null
+++ b/support/utf2any/maps/rfc-1345-7.map
@@ -0,0 +1,50 @@
+# RFC-1345
+# range: U+0000 - U+007F
+
+# U+0009 &HT
+# U+000A &LF
+# U+000C &FF
+# U+000D &CR
+# U+0020 &SP
+U+0000 &NU
+U+0001 &SH
+U+0002 &SX
+U+0003 &EX
+U+0004 &ET
+U+0005 &EQ
+U+0006 &AK
+U+0007 &BL
+U+0008 &BS
+U+000B &VT
+U+000E &SO
+U+000F &SI
+U+0010 &DL
+U+0011 &D1
+U+0012 &D2
+U+0013 &D3
+U+0014 &D4
+U+0015 &NK
+U+0016 &SY
+U+0017 &EB
+U+0018 &CN
+U+0019 &EM
+U+001A &SB
+U+001B &EC
+U+001C &FS
+U+001D &GS
+U+001E &RS
+U+001F &US
+U+0023 &Nb
+U+0024 &DO
+U+0026 &&
+U+0040 &At
+U+005B &<(
+U+005C &//
+U+005D &)>
+U+005E &'>
+U+0060 &'!
+U+007B &(!
+U+007C &!!
+U+007D &!)
+U+007E &'?
+U+007F &DT
diff --git a/support/utf2any/maps/rfc-1345-8.map b/support/utf2any/maps/rfc-1345-8.map
new file mode 100644
index 0000000000..3479d6536f
--- /dev/null
+++ b/support/utf2any/maps/rfc-1345-8.map
@@ -0,0 +1,131 @@
+# RFC-1345
+# range: U+0080 - U+00FF
+
+U+0080 &PA
+U+0081 &HO
+U+0082 &BH
+U+0083 &NH
+U+0084 &IN
+U+0085 &NL
+U+0086 &SA
+U+0087 &ES
+U+0088 &HS
+U+0089 &HJ
+U+008A &VS
+U+008B &PD
+U+008C &PU
+U+008D &RI
+U+008E &S2
+U+008F &S3
+U+0090 &DC
+U+0091 &P1
+U+0092 &P2
+U+0093 &TS
+U+0094 &CC
+U+0095 &MW
+U+0096 &SG
+U+0097 &EG
+U+0098 &SS
+U+0099 &GC
+U+009A &SC
+U+009B &CI
+U+009C &ST
+U+009D &OC
+U+009E &PM
+U+009F &AC
+U+00A0 &NS
+U+00A1 &!I
+U+00A2 &Ct
+U+00A3 &Pd
+U+00A4 &Cu
+U+00A5 &Ye
+U+00A6 &BB
+U+00A7 &SE
+U+00A8 &':
+U+00A9 &Co
+U+00AA &-a
+U+00AB &<<
+U+00AC &NO
+U+00AD &--
+U+00AE &Rg
+U+00AF &'m
+U+00B0 &DG
+U+00B1 &+-
+U+00B2 &2S
+U+00B3 &3S
+U+00B4 &''
+U+00B5 &My
+U+00B6 &PI
+U+00B7 &.M
+U+00B8 &',
+U+00B9 &1S
+U+00BA &-o
+U+00BB &>>
+U+00BC &14
+U+00BD &12
+U+00BE &34
+U+00BF &?I
+U+00C0 &A!
+U+00C1 &A'
+U+00C2 &A>
+U+00C3 &A?
+U+00C4 &A:
+U+00C5 &AA
+U+00C6 &AE
+U+00C7 &C,
+U+00C8 &E!
+U+00C9 &E'
+U+00CA &E>
+U+00CB &E:
+U+00CC &I!
+U+00CD &I'
+U+00CE &I>
+U+00CF &I:
+U+00D0 &D-
+U+00D1 &N?
+U+00D2 &O!
+U+00D3 &O'
+U+00D4 &O>
+U+00D5 &O?
+U+00D6 &O:
+U+00D7 &*X
+U+00D8 &O/
+U+00D9 &U!
+U+00DA &U'
+U+00DB &U>
+U+00DC &U:
+U+00DD &Y'
+U+00DE &TH
+U+00DF &ss
+U+00E0 &a!
+U+00E1 &a'
+U+00E2 &a>
+U+00E3 &a?
+U+00E4 &a:
+U+00E5 &aa
+U+00E6 &ae
+U+00E7 &c,
+U+00E8 &e!
+U+00E9 &e'
+U+00EA &e>
+U+00EB &e:
+U+00EC &i!
+U+00ED &i'
+U+00EE &i>
+U+00EF &i:
+U+00F0 &d-
+U+00F1 &n?
+U+00F2 &o!
+U+00F3 &o'
+U+00F4 &o>
+U+00F5 &o?
+U+00F6 &o:
+U+00F7 &-:
+U+00F8 &o/
+U+00F9 &u!
+U+00FA &u'
+U+00FB &u>
+U+00FC &u:
+U+00FD &y'
+U+00FE &th
+U+00FF &y:
diff --git a/support/utf2any/test/maketest b/support/utf2any/test/maketest
new file mode 100755
index 0000000000..5e9434184a
--- /dev/null
+++ b/support/utf2any/test/maketest
@@ -0,0 +1,70 @@
+#!/usr/local/bin/perl
+
+use vars qw($opt_7 $opt_8 $opt_L);
+use Getopt::Std;
+
+@range = (
+# [ 0, 127, 'Controls and Basic Latin' ],
+ [ 128, 255, 'Controls and Latin-1 Supplement' ],
+ [ 0x100, 0x17F, 'Latin Extended-A' ],
+ [ 0x180, 0x24F, 'Latin Extended-B' ],
+ [ 0x250, 0x2AF, 'IPA Extensions' ],
+ [ 0x2B0, 0x2FF, 'Spacing Modifier Letters' ],
+ [ 0x2000, 0x206F, 'General Punctuation' ],
+ [ 0x20A0, 0x20CF, 'Currency Symbols' ],
+ [ 0x2100, 0x214F, 'Letterlike Symbols' ],
+ [ 0x2150, 0x218F, 'Number Forms' ],
+ [ 0xFB00, 0xFB4F, 'Alphabetic Presentation Forms' ],
+);
+
+$progname = $0;
+$progname =~ s!.*/!!;
+
+getopts('78L');
+
+$enc = '-7' if ($opt_7);
+$enc = '-8' if ($opt_8);
+
+if ($enc eq '') {
+ die <<"EOT";
+
+Usage: $progname -7|-8 [-L]
+
+ -7 : Use UTF-7 encoding
+ -8 : Use UTF-8 encoding
+ -L : Generate LaTeX file
+
+EOT
+}
+
+if ($opt_L) {
+ $format = "\\noindent U+%04X: %s\n";
+} else {
+ $format = "U+%04X: %s";
+}
+$format =~ s/\+/+-/ if ($opt_7);
+
+if ($opt_L) {
+ print <<'EOT';
+\documentclass[a4paper,12pt,twocolumn]{article}
+\usepackage{textcomp}
+\usepackage{eurofont}
+\usepackage[T1,tone,safe]{tipa}
+\begin{document}
+EOT
+}
+
+for $ref (@range) {
+ $from = $ref->[0];
+ $to = $ref->[1];
+ $txt = $ref->[2];
+ $txt =~ s/\+/+-/g if ($opt_7);
+ print ($opt_L ? "\\subsubsection*{$txt}\n\n" : "$txt\n\n");
+ for ($i = $from; $i <= $to; $i++) {
+ $utf = `utfcode $enc 120 $i 120`;
+ printf ($format, $i, $utf);
+ }
+ print "\n" unless ($opt_L);
+}
+
+print "\\end{document}\n" if ($opt_L);
diff --git a/support/utf2any/test/tst-latex.utf7 b/support/utf2any/test/tst-latex.utf7
new file mode 100644
index 0000000000..bb0b1fef73
--- /dev/null
+++ b/support/utf2any/test/tst-latex.utf7
@@ -0,0 +1,2074 @@
+\documentclass[a4paper,12pt,twocolumn]{article}
+\usepackage{textcomp}
+\usepackage{eurofont}
+\usepackage[T1,tone,safe]{tipa}
+\begin{document}
+\subsubsection*{Controls and Latin-1 Supplement}
+
+\noindent U+-0080: +AHgAgAB4-
+
+\noindent U+-0081: +AHgAgQB4-
+
+\noindent U+-0082: +AHgAggB4-
+
+\noindent U+-0083: +AHgAgwB4-
+
+\noindent U+-0084: +AHgAhAB4-
+
+\noindent U+-0085: +AHgAhQB4-
+
+\noindent U+-0086: +AHgAhgB4-
+
+\noindent U+-0087: +AHgAhwB4-
+
+\noindent U+-0088: +AHgAiAB4-
+
+\noindent U+-0089: +AHgAiQB4-
+
+\noindent U+-008A: +AHgAigB4-
+
+\noindent U+-008B: +AHgAiwB4-
+
+\noindent U+-008C: +AHgAjAB4-
+
+\noindent U+-008D: +AHgAjQB4-
+
+\noindent U+-008E: +AHgAjgB4-
+
+\noindent U+-008F: +AHgAjwB4-
+
+\noindent U+-0090: +AHgAkAB4-
+
+\noindent U+-0091: +AHgAkQB4-
+
+\noindent U+-0092: +AHgAkgB4-
+
+\noindent U+-0093: +AHgAkwB4-
+
+\noindent U+-0094: +AHgAlAB4-
+
+\noindent U+-0095: +AHgAlQB4-
+
+\noindent U+-0096: +AHgAlgB4-
+
+\noindent U+-0097: +AHgAlwB4-
+
+\noindent U+-0098: +AHgAmAB4-
+
+\noindent U+-0099: +AHgAmQB4-
+
+\noindent U+-009A: +AHgAmgB4-
+
+\noindent U+-009B: +AHgAmwB4-
+
+\noindent U+-009C: +AHgAnAB4-
+
+\noindent U+-009D: +AHgAnQB4-
+
+\noindent U+-009E: +AHgAngB4-
+
+\noindent U+-009F: +AHgAnwB4-
+
+\noindent U+-00A0: +AHgAoAB4-
+
+\noindent U+-00A1: +AHgAoQB4-
+
+\noindent U+-00A2: +AHgAogB4-
+
+\noindent U+-00A3: +AHgAowB4-
+
+\noindent U+-00A4: +AHgApAB4-
+
+\noindent U+-00A5: +AHgApQB4-
+
+\noindent U+-00A6: +AHgApgB4-
+
+\noindent U+-00A7: +AHgApwB4-
+
+\noindent U+-00A8: +AHgAqAB4-
+
+\noindent U+-00A9: +AHgAqQB4-
+
+\noindent U+-00AA: +AHgAqgB4-
+
+\noindent U+-00AB: +AHgAqwB4-
+
+\noindent U+-00AC: +AHgArAB4-
+
+\noindent U+-00AD: +AHgArQB4-
+
+\noindent U+-00AE: +AHgArgB4-
+
+\noindent U+-00AF: +AHgArwB4-
+
+\noindent U+-00B0: +AHgAsAB4-
+
+\noindent U+-00B1: +AHgAsQB4-
+
+\noindent U+-00B2: +AHgAsgB4-
+
+\noindent U+-00B3: +AHgAswB4-
+
+\noindent U+-00B4: +AHgAtAB4-
+
+\noindent U+-00B5: +AHgAtQB4-
+
+\noindent U+-00B6: +AHgAtgB4-
+
+\noindent U+-00B7: +AHgAtwB4-
+
+\noindent U+-00B8: +AHgAuAB4-
+
+\noindent U+-00B9: +AHgAuQB4-
+
+\noindent U+-00BA: +AHgAugB4-
+
+\noindent U+-00BB: +AHgAuwB4-
+
+\noindent U+-00BC: +AHgAvAB4-
+
+\noindent U+-00BD: +AHgAvQB4-
+
+\noindent U+-00BE: +AHgAvgB4-
+
+\noindent U+-00BF: +AHgAvwB4-
+
+\noindent U+-00C0: +AHgAwAB4-
+
+\noindent U+-00C1: +AHgAwQB4-
+
+\noindent U+-00C2: +AHgAwgB4-
+
+\noindent U+-00C3: +AHgAwwB4-
+
+\noindent U+-00C4: +AHgAxAB4-
+
+\noindent U+-00C5: +AHgAxQB4-
+
+\noindent U+-00C6: +AHgAxgB4-
+
+\noindent U+-00C7: +AHgAxwB4-
+
+\noindent U+-00C8: +AHgAyAB4-
+
+\noindent U+-00C9: +AHgAyQB4-
+
+\noindent U+-00CA: +AHgAygB4-
+
+\noindent U+-00CB: +AHgAywB4-
+
+\noindent U+-00CC: +AHgAzAB4-
+
+\noindent U+-00CD: +AHgAzQB4-
+
+\noindent U+-00CE: +AHgAzgB4-
+
+\noindent U+-00CF: +AHgAzwB4-
+
+\noindent U+-00D0: +AHgA0AB4-
+
+\noindent U+-00D1: +AHgA0QB4-
+
+\noindent U+-00D2: +AHgA0gB4-
+
+\noindent U+-00D3: +AHgA0wB4-
+
+\noindent U+-00D4: +AHgA1AB4-
+
+\noindent U+-00D5: +AHgA1QB4-
+
+\noindent U+-00D6: +AHgA1gB4-
+
+\noindent U+-00D7: +AHgA1wB4-
+
+\noindent U+-00D8: +AHgA2AB4-
+
+\noindent U+-00D9: +AHgA2QB4-
+
+\noindent U+-00DA: +AHgA2gB4-
+
+\noindent U+-00DB: +AHgA2wB4-
+
+\noindent U+-00DC: +AHgA3AB4-
+
+\noindent U+-00DD: +AHgA3QB4-
+
+\noindent U+-00DE: +AHgA3gB4-
+
+\noindent U+-00DF: +AHgA3wB4-
+
+\noindent U+-00E0: +AHgA4AB4-
+
+\noindent U+-00E1: +AHgA4QB4-
+
+\noindent U+-00E2: +AHgA4gB4-
+
+\noindent U+-00E3: +AHgA4wB4-
+
+\noindent U+-00E4: +AHgA5AB4-
+
+\noindent U+-00E5: +AHgA5QB4-
+
+\noindent U+-00E6: +AHgA5gB4-
+
+\noindent U+-00E7: +AHgA5wB4-
+
+\noindent U+-00E8: +AHgA6AB4-
+
+\noindent U+-00E9: +AHgA6QB4-
+
+\noindent U+-00EA: +AHgA6gB4-
+
+\noindent U+-00EB: +AHgA6wB4-
+
+\noindent U+-00EC: +AHgA7AB4-
+
+\noindent U+-00ED: +AHgA7QB4-
+
+\noindent U+-00EE: +AHgA7gB4-
+
+\noindent U+-00EF: +AHgA7wB4-
+
+\noindent U+-00F0: +AHgA8AB4-
+
+\noindent U+-00F1: +AHgA8QB4-
+
+\noindent U+-00F2: +AHgA8gB4-
+
+\noindent U+-00F3: +AHgA8wB4-
+
+\noindent U+-00F4: +AHgA9AB4-
+
+\noindent U+-00F5: +AHgA9QB4-
+
+\noindent U+-00F6: +AHgA9gB4-
+
+\noindent U+-00F7: +AHgA9wB4-
+
+\noindent U+-00F8: +AHgA+AB4-
+
+\noindent U+-00F9: +AHgA+QB4-
+
+\noindent U+-00FA: +AHgA+gB4-
+
+\noindent U+-00FB: +AHgA+wB4-
+
+\noindent U+-00FC: +AHgA/AB4-
+
+\noindent U+-00FD: +AHgA/QB4-
+
+\noindent U+-00FE: +AHgA/gB4-
+
+\noindent U+-00FF: +AHgA/wB4-
+
+\subsubsection*{Latin Extended-A}
+
+\noindent U+-0100: +AHgBAAB4-
+
+\noindent U+-0101: +AHgBAQB4-
+
+\noindent U+-0102: +AHgBAgB4-
+
+\noindent U+-0103: +AHgBAwB4-
+
+\noindent U+-0104: +AHgBBAB4-
+
+\noindent U+-0105: +AHgBBQB4-
+
+\noindent U+-0106: +AHgBBgB4-
+
+\noindent U+-0107: +AHgBBwB4-
+
+\noindent U+-0108: +AHgBCAB4-
+
+\noindent U+-0109: +AHgBCQB4-
+
+\noindent U+-010A: +AHgBCgB4-
+
+\noindent U+-010B: +AHgBCwB4-
+
+\noindent U+-010C: +AHgBDAB4-
+
+\noindent U+-010D: +AHgBDQB4-
+
+\noindent U+-010E: +AHgBDgB4-
+
+\noindent U+-010F: +AHgBDwB4-
+
+\noindent U+-0110: +AHgBEAB4-
+
+\noindent U+-0111: +AHgBEQB4-
+
+\noindent U+-0112: +AHgBEgB4-
+
+\noindent U+-0113: +AHgBEwB4-
+
+\noindent U+-0114: +AHgBFAB4-
+
+\noindent U+-0115: +AHgBFQB4-
+
+\noindent U+-0116: +AHgBFgB4-
+
+\noindent U+-0117: +AHgBFwB4-
+
+\noindent U+-0118: +AHgBGAB4-
+
+\noindent U+-0119: +AHgBGQB4-
+
+\noindent U+-011A: +AHgBGgB4-
+
+\noindent U+-011B: +AHgBGwB4-
+
+\noindent U+-011C: +AHgBHAB4-
+
+\noindent U+-011D: +AHgBHQB4-
+
+\noindent U+-011E: +AHgBHgB4-
+
+\noindent U+-011F: +AHgBHwB4-
+
+\noindent U+-0120: +AHgBIAB4-
+
+\noindent U+-0121: +AHgBIQB4-
+
+\noindent U+-0122: +AHgBIgB4-
+
+\noindent U+-0123: +AHgBIwB4-
+
+\noindent U+-0124: +AHgBJAB4-
+
+\noindent U+-0125: +AHgBJQB4-
+
+\noindent U+-0126: +AHgBJgB4-
+
+\noindent U+-0127: +AHgBJwB4-
+
+\noindent U+-0128: +AHgBKAB4-
+
+\noindent U+-0129: +AHgBKQB4-
+
+\noindent U+-012A: +AHgBKgB4-
+
+\noindent U+-012B: +AHgBKwB4-
+
+\noindent U+-012C: +AHgBLAB4-
+
+\noindent U+-012D: +AHgBLQB4-
+
+\noindent U+-012E: +AHgBLgB4-
+
+\noindent U+-012F: +AHgBLwB4-
+
+\noindent U+-0130: +AHgBMAB4-
+
+\noindent U+-0131: +AHgBMQB4-
+
+\noindent U+-0132: +AHgBMgB4-
+
+\noindent U+-0133: +AHgBMwB4-
+
+\noindent U+-0134: +AHgBNAB4-
+
+\noindent U+-0135: +AHgBNQB4-
+
+\noindent U+-0136: +AHgBNgB4-
+
+\noindent U+-0137: +AHgBNwB4-
+
+\noindent U+-0138: +AHgBOAB4-
+
+\noindent U+-0139: +AHgBOQB4-
+
+\noindent U+-013A: +AHgBOgB4-
+
+\noindent U+-013B: +AHgBOwB4-
+
+\noindent U+-013C: +AHgBPAB4-
+
+\noindent U+-013D: +AHgBPQB4-
+
+\noindent U+-013E: +AHgBPgB4-
+
+\noindent U+-013F: +AHgBPwB4-
+
+\noindent U+-0140: +AHgBQAB4-
+
+\noindent U+-0141: +AHgBQQB4-
+
+\noindent U+-0142: +AHgBQgB4-
+
+\noindent U+-0143: +AHgBQwB4-
+
+\noindent U+-0144: +AHgBRAB4-
+
+\noindent U+-0145: +AHgBRQB4-
+
+\noindent U+-0146: +AHgBRgB4-
+
+\noindent U+-0147: +AHgBRwB4-
+
+\noindent U+-0148: +AHgBSAB4-
+
+\noindent U+-0149: +AHgBSQB4-
+
+\noindent U+-014A: +AHgBSgB4-
+
+\noindent U+-014B: +AHgBSwB4-
+
+\noindent U+-014C: +AHgBTAB4-
+
+\noindent U+-014D: +AHgBTQB4-
+
+\noindent U+-014E: +AHgBTgB4-
+
+\noindent U+-014F: +AHgBTwB4-
+
+\noindent U+-0150: +AHgBUAB4-
+
+\noindent U+-0151: +AHgBUQB4-
+
+\noindent U+-0152: +AHgBUgB4-
+
+\noindent U+-0153: +AHgBUwB4-
+
+\noindent U+-0154: +AHgBVAB4-
+
+\noindent U+-0155: +AHgBVQB4-
+
+\noindent U+-0156: +AHgBVgB4-
+
+\noindent U+-0157: +AHgBVwB4-
+
+\noindent U+-0158: +AHgBWAB4-
+
+\noindent U+-0159: +AHgBWQB4-
+
+\noindent U+-015A: +AHgBWgB4-
+
+\noindent U+-015B: +AHgBWwB4-
+
+\noindent U+-015C: +AHgBXAB4-
+
+\noindent U+-015D: +AHgBXQB4-
+
+\noindent U+-015E: +AHgBXgB4-
+
+\noindent U+-015F: +AHgBXwB4-
+
+\noindent U+-0160: +AHgBYAB4-
+
+\noindent U+-0161: +AHgBYQB4-
+
+\noindent U+-0162: +AHgBYgB4-
+
+\noindent U+-0163: +AHgBYwB4-
+
+\noindent U+-0164: +AHgBZAB4-
+
+\noindent U+-0165: +AHgBZQB4-
+
+\noindent U+-0166: +AHgBZgB4-
+
+\noindent U+-0167: +AHgBZwB4-
+
+\noindent U+-0168: +AHgBaAB4-
+
+\noindent U+-0169: +AHgBaQB4-
+
+\noindent U+-016A: +AHgBagB4-
+
+\noindent U+-016B: +AHgBawB4-
+
+\noindent U+-016C: +AHgBbAB4-
+
+\noindent U+-016D: +AHgBbQB4-
+
+\noindent U+-016E: +AHgBbgB4-
+
+\noindent U+-016F: +AHgBbwB4-
+
+\noindent U+-0170: +AHgBcAB4-
+
+\noindent U+-0171: +AHgBcQB4-
+
+\noindent U+-0172: +AHgBcgB4-
+
+\noindent U+-0173: +AHgBcwB4-
+
+\noindent U+-0174: +AHgBdAB4-
+
+\noindent U+-0175: +AHgBdQB4-
+
+\noindent U+-0176: +AHgBdgB4-
+
+\noindent U+-0177: +AHgBdwB4-
+
+\noindent U+-0178: +AHgBeAB4-
+
+\noindent U+-0179: +AHgBeQB4-
+
+\noindent U+-017A: +AHgBegB4-
+
+\noindent U+-017B: +AHgBewB4-
+
+\noindent U+-017C: +AHgBfAB4-
+
+\noindent U+-017D: +AHgBfQB4-
+
+\noindent U+-017E: +AHgBfgB4-
+
+\noindent U+-017F: +AHgBfwB4-
+
+\subsubsection*{Latin Extended-B}
+
+\noindent U+-0180: +AHgBgAB4-
+
+\noindent U+-0181: +AHgBgQB4-
+
+\noindent U+-0182: +AHgBggB4-
+
+\noindent U+-0183: +AHgBgwB4-
+
+\noindent U+-0184: +AHgBhAB4-
+
+\noindent U+-0185: +AHgBhQB4-
+
+\noindent U+-0186: +AHgBhgB4-
+
+\noindent U+-0187: +AHgBhwB4-
+
+\noindent U+-0188: +AHgBiAB4-
+
+\noindent U+-0189: +AHgBiQB4-
+
+\noindent U+-018A: +AHgBigB4-
+
+\noindent U+-018B: +AHgBiwB4-
+
+\noindent U+-018C: +AHgBjAB4-
+
+\noindent U+-018D: +AHgBjQB4-
+
+\noindent U+-018E: +AHgBjgB4-
+
+\noindent U+-018F: +AHgBjwB4-
+
+\noindent U+-0190: +AHgBkAB4-
+
+\noindent U+-0191: +AHgBkQB4-
+
+\noindent U+-0192: +AHgBkgB4-
+
+\noindent U+-0193: +AHgBkwB4-
+
+\noindent U+-0194: +AHgBlAB4-
+
+\noindent U+-0195: +AHgBlQB4-
+
+\noindent U+-0196: +AHgBlgB4-
+
+\noindent U+-0197: +AHgBlwB4-
+
+\noindent U+-0198: +AHgBmAB4-
+
+\noindent U+-0199: +AHgBmQB4-
+
+\noindent U+-019A: +AHgBmgB4-
+
+\noindent U+-019B: +AHgBmwB4-
+
+\noindent U+-019C: +AHgBnAB4-
+
+\noindent U+-019D: +AHgBnQB4-
+
+\noindent U+-019E: +AHgBngB4-
+
+\noindent U+-019F: +AHgBnwB4-
+
+\noindent U+-01A0: +AHgBoAB4-
+
+\noindent U+-01A1: +AHgBoQB4-
+
+\noindent U+-01A2: +AHgBogB4-
+
+\noindent U+-01A3: +AHgBowB4-
+
+\noindent U+-01A4: +AHgBpAB4-
+
+\noindent U+-01A5: +AHgBpQB4-
+
+\noindent U+-01A6: +AHgBpgB4-
+
+\noindent U+-01A7: +AHgBpwB4-
+
+\noindent U+-01A8: +AHgBqAB4-
+
+\noindent U+-01A9: +AHgBqQB4-
+
+\noindent U+-01AA: +AHgBqgB4-
+
+\noindent U+-01AB: +AHgBqwB4-
+
+\noindent U+-01AC: +AHgBrAB4-
+
+\noindent U+-01AD: +AHgBrQB4-
+
+\noindent U+-01AE: +AHgBrgB4-
+
+\noindent U+-01AF: +AHgBrwB4-
+
+\noindent U+-01B0: +AHgBsAB4-
+
+\noindent U+-01B1: +AHgBsQB4-
+
+\noindent U+-01B2: +AHgBsgB4-
+
+\noindent U+-01B3: +AHgBswB4-
+
+\noindent U+-01B4: +AHgBtAB4-
+
+\noindent U+-01B5: +AHgBtQB4-
+
+\noindent U+-01B6: +AHgBtgB4-
+
+\noindent U+-01B7: +AHgBtwB4-
+
+\noindent U+-01B8: +AHgBuAB4-
+
+\noindent U+-01B9: +AHgBuQB4-
+
+\noindent U+-01BA: +AHgBugB4-
+
+\noindent U+-01BB: +AHgBuwB4-
+
+\noindent U+-01BC: +AHgBvAB4-
+
+\noindent U+-01BD: +AHgBvQB4-
+
+\noindent U+-01BE: +AHgBvgB4-
+
+\noindent U+-01BF: +AHgBvwB4-
+
+\noindent U+-01C0: +AHgBwAB4-
+
+\noindent U+-01C1: +AHgBwQB4-
+
+\noindent U+-01C2: +AHgBwgB4-
+
+\noindent U+-01C3: +AHgBwwB4-
+
+\noindent U+-01C4: +AHgBxAB4-
+
+\noindent U+-01C5: +AHgBxQB4-
+
+\noindent U+-01C6: +AHgBxgB4-
+
+\noindent U+-01C7: +AHgBxwB4-
+
+\noindent U+-01C8: +AHgByAB4-
+
+\noindent U+-01C9: +AHgByQB4-
+
+\noindent U+-01CA: +AHgBygB4-
+
+\noindent U+-01CB: +AHgBywB4-
+
+\noindent U+-01CC: +AHgBzAB4-
+
+\noindent U+-01CD: +AHgBzQB4-
+
+\noindent U+-01CE: +AHgBzgB4-
+
+\noindent U+-01CF: +AHgBzwB4-
+
+\noindent U+-01D0: +AHgB0AB4-
+
+\noindent U+-01D1: +AHgB0QB4-
+
+\noindent U+-01D2: +AHgB0gB4-
+
+\noindent U+-01D3: +AHgB0wB4-
+
+\noindent U+-01D4: +AHgB1AB4-
+
+\noindent U+-01D5: +AHgB1QB4-
+
+\noindent U+-01D6: +AHgB1gB4-
+
+\noindent U+-01D7: +AHgB1wB4-
+
+\noindent U+-01D8: +AHgB2AB4-
+
+\noindent U+-01D9: +AHgB2QB4-
+
+\noindent U+-01DA: +AHgB2gB4-
+
+\noindent U+-01DB: +AHgB2wB4-
+
+\noindent U+-01DC: +AHgB3AB4-
+
+\noindent U+-01DD: +AHgB3QB4-
+
+\noindent U+-01DE: +AHgB3gB4-
+
+\noindent U+-01DF: +AHgB3wB4-
+
+\noindent U+-01E0: +AHgB4AB4-
+
+\noindent U+-01E1: +AHgB4QB4-
+
+\noindent U+-01E2: +AHgB4gB4-
+
+\noindent U+-01E3: +AHgB4wB4-
+
+\noindent U+-01E4: +AHgB5AB4-
+
+\noindent U+-01E5: +AHgB5QB4-
+
+\noindent U+-01E6: +AHgB5gB4-
+
+\noindent U+-01E7: +AHgB5wB4-
+
+\noindent U+-01E8: +AHgB6AB4-
+
+\noindent U+-01E9: +AHgB6QB4-
+
+\noindent U+-01EA: +AHgB6gB4-
+
+\noindent U+-01EB: +AHgB6wB4-
+
+\noindent U+-01EC: +AHgB7AB4-
+
+\noindent U+-01ED: +AHgB7QB4-
+
+\noindent U+-01EE: +AHgB7gB4-
+
+\noindent U+-01EF: +AHgB7wB4-
+
+\noindent U+-01F0: +AHgB8AB4-
+
+\noindent U+-01F1: +AHgB8QB4-
+
+\noindent U+-01F2: +AHgB8gB4-
+
+\noindent U+-01F3: +AHgB8wB4-
+
+\noindent U+-01F4: +AHgB9AB4-
+
+\noindent U+-01F5: +AHgB9QB4-
+
+\noindent U+-01F6: +AHgB9gB4-
+
+\noindent U+-01F7: +AHgB9wB4-
+
+\noindent U+-01F8: +AHgB+AB4-
+
+\noindent U+-01F9: +AHgB+QB4-
+
+\noindent U+-01FA: +AHgB+gB4-
+
+\noindent U+-01FB: +AHgB+wB4-
+
+\noindent U+-01FC: +AHgB/AB4-
+
+\noindent U+-01FD: +AHgB/QB4-
+
+\noindent U+-01FE: +AHgB/gB4-
+
+\noindent U+-01FF: +AHgB/wB4-
+
+\noindent U+-0200: +AHgCAAB4-
+
+\noindent U+-0201: +AHgCAQB4-
+
+\noindent U+-0202: +AHgCAgB4-
+
+\noindent U+-0203: +AHgCAwB4-
+
+\noindent U+-0204: +AHgCBAB4-
+
+\noindent U+-0205: +AHgCBQB4-
+
+\noindent U+-0206: +AHgCBgB4-
+
+\noindent U+-0207: +AHgCBwB4-
+
+\noindent U+-0208: +AHgCCAB4-
+
+\noindent U+-0209: +AHgCCQB4-
+
+\noindent U+-020A: +AHgCCgB4-
+
+\noindent U+-020B: +AHgCCwB4-
+
+\noindent U+-020C: +AHgCDAB4-
+
+\noindent U+-020D: +AHgCDQB4-
+
+\noindent U+-020E: +AHgCDgB4-
+
+\noindent U+-020F: +AHgCDwB4-
+
+\noindent U+-0210: +AHgCEAB4-
+
+\noindent U+-0211: +AHgCEQB4-
+
+\noindent U+-0212: +AHgCEgB4-
+
+\noindent U+-0213: +AHgCEwB4-
+
+\noindent U+-0214: +AHgCFAB4-
+
+\noindent U+-0215: +AHgCFQB4-
+
+\noindent U+-0216: +AHgCFgB4-
+
+\noindent U+-0217: +AHgCFwB4-
+
+\noindent U+-0218: +AHgCGAB4-
+
+\noindent U+-0219: +AHgCGQB4-
+
+\noindent U+-021A: +AHgCGgB4-
+
+\noindent U+-021B: +AHgCGwB4-
+
+\noindent U+-021C: +AHgCHAB4-
+
+\noindent U+-021D: +AHgCHQB4-
+
+\noindent U+-021E: +AHgCHgB4-
+
+\noindent U+-021F: +AHgCHwB4-
+
+\noindent U+-0220: +AHgCIAB4-
+
+\noindent U+-0221: +AHgCIQB4-
+
+\noindent U+-0222: +AHgCIgB4-
+
+\noindent U+-0223: +AHgCIwB4-
+
+\noindent U+-0224: +AHgCJAB4-
+
+\noindent U+-0225: +AHgCJQB4-
+
+\noindent U+-0226: +AHgCJgB4-
+
+\noindent U+-0227: +AHgCJwB4-
+
+\noindent U+-0228: +AHgCKAB4-
+
+\noindent U+-0229: +AHgCKQB4-
+
+\noindent U+-022A: +AHgCKgB4-
+
+\noindent U+-022B: +AHgCKwB4-
+
+\noindent U+-022C: +AHgCLAB4-
+
+\noindent U+-022D: +AHgCLQB4-
+
+\noindent U+-022E: +AHgCLgB4-
+
+\noindent U+-022F: +AHgCLwB4-
+
+\noindent U+-0230: +AHgCMAB4-
+
+\noindent U+-0231: +AHgCMQB4-
+
+\noindent U+-0232: +AHgCMgB4-
+
+\noindent U+-0233: +AHgCMwB4-
+
+\noindent U+-0234: +AHgCNAB4-
+
+\noindent U+-0235: +AHgCNQB4-
+
+\noindent U+-0236: +AHgCNgB4-
+
+\noindent U+-0237: +AHgCNwB4-
+
+\noindent U+-0238: +AHgCOAB4-
+
+\noindent U+-0239: +AHgCOQB4-
+
+\noindent U+-023A: +AHgCOgB4-
+
+\noindent U+-023B: +AHgCOwB4-
+
+\noindent U+-023C: +AHgCPAB4-
+
+\noindent U+-023D: +AHgCPQB4-
+
+\noindent U+-023E: +AHgCPgB4-
+
+\noindent U+-023F: +AHgCPwB4-
+
+\noindent U+-0240: +AHgCQAB4-
+
+\noindent U+-0241: +AHgCQQB4-
+
+\noindent U+-0242: +AHgCQgB4-
+
+\noindent U+-0243: +AHgCQwB4-
+
+\noindent U+-0244: +AHgCRAB4-
+
+\noindent U+-0245: +AHgCRQB4-
+
+\noindent U+-0246: +AHgCRgB4-
+
+\noindent U+-0247: +AHgCRwB4-
+
+\noindent U+-0248: +AHgCSAB4-
+
+\noindent U+-0249: +AHgCSQB4-
+
+\noindent U+-024A: +AHgCSgB4-
+
+\noindent U+-024B: +AHgCSwB4-
+
+\noindent U+-024C: +AHgCTAB4-
+
+\noindent U+-024D: +AHgCTQB4-
+
+\noindent U+-024E: +AHgCTgB4-
+
+\noindent U+-024F: +AHgCTwB4-
+
+\subsubsection*{IPA Extensions}
+
+\noindent U+-0250: +AHgCUAB4-
+
+\noindent U+-0251: +AHgCUQB4-
+
+\noindent U+-0252: +AHgCUgB4-
+
+\noindent U+-0253: +AHgCUwB4-
+
+\noindent U+-0254: +AHgCVAB4-
+
+\noindent U+-0255: +AHgCVQB4-
+
+\noindent U+-0256: +AHgCVgB4-
+
+\noindent U+-0257: +AHgCVwB4-
+
+\noindent U+-0258: +AHgCWAB4-
+
+\noindent U+-0259: +AHgCWQB4-
+
+\noindent U+-025A: +AHgCWgB4-
+
+\noindent U+-025B: +AHgCWwB4-
+
+\noindent U+-025C: +AHgCXAB4-
+
+\noindent U+-025D: +AHgCXQB4-
+
+\noindent U+-025E: +AHgCXgB4-
+
+\noindent U+-025F: +AHgCXwB4-
+
+\noindent U+-0260: +AHgCYAB4-
+
+\noindent U+-0261: +AHgCYQB4-
+
+\noindent U+-0262: +AHgCYgB4-
+
+\noindent U+-0263: +AHgCYwB4-
+
+\noindent U+-0264: +AHgCZAB4-
+
+\noindent U+-0265: +AHgCZQB4-
+
+\noindent U+-0266: +AHgCZgB4-
+
+\noindent U+-0267: +AHgCZwB4-
+
+\noindent U+-0268: +AHgCaAB4-
+
+\noindent U+-0269: +AHgCaQB4-
+
+\noindent U+-026A: +AHgCagB4-
+
+\noindent U+-026B: +AHgCawB4-
+
+\noindent U+-026C: +AHgCbAB4-
+
+\noindent U+-026D: +AHgCbQB4-
+
+\noindent U+-026E: +AHgCbgB4-
+
+\noindent U+-026F: +AHgCbwB4-
+
+\noindent U+-0270: +AHgCcAB4-
+
+\noindent U+-0271: +AHgCcQB4-
+
+\noindent U+-0272: +AHgCcgB4-
+
+\noindent U+-0273: +AHgCcwB4-
+
+\noindent U+-0274: +AHgCdAB4-
+
+\noindent U+-0275: +AHgCdQB4-
+
+\noindent U+-0276: +AHgCdgB4-
+
+\noindent U+-0277: +AHgCdwB4-
+
+\noindent U+-0278: +AHgCeAB4-
+
+\noindent U+-0279: +AHgCeQB4-
+
+\noindent U+-027A: +AHgCegB4-
+
+\noindent U+-027B: +AHgCewB4-
+
+\noindent U+-027C: +AHgCfAB4-
+
+\noindent U+-027D: +AHgCfQB4-
+
+\noindent U+-027E: +AHgCfgB4-
+
+\noindent U+-027F: +AHgCfwB4-
+
+\noindent U+-0280: +AHgCgAB4-
+
+\noindent U+-0281: +AHgCgQB4-
+
+\noindent U+-0282: +AHgCggB4-
+
+\noindent U+-0283: +AHgCgwB4-
+
+\noindent U+-0284: +AHgChAB4-
+
+\noindent U+-0285: +AHgChQB4-
+
+\noindent U+-0286: +AHgChgB4-
+
+\noindent U+-0287: +AHgChwB4-
+
+\noindent U+-0288: +AHgCiAB4-
+
+\noindent U+-0289: +AHgCiQB4-
+
+\noindent U+-028A: +AHgCigB4-
+
+\noindent U+-028B: +AHgCiwB4-
+
+\noindent U+-028C: +AHgCjAB4-
+
+\noindent U+-028D: +AHgCjQB4-
+
+\noindent U+-028E: +AHgCjgB4-
+
+\noindent U+-028F: +AHgCjwB4-
+
+\noindent U+-0290: +AHgCkAB4-
+
+\noindent U+-0291: +AHgCkQB4-
+
+\noindent U+-0292: +AHgCkgB4-
+
+\noindent U+-0293: +AHgCkwB4-
+
+\noindent U+-0294: +AHgClAB4-
+
+\noindent U+-0295: +AHgClQB4-
+
+\noindent U+-0296: +AHgClgB4-
+
+\noindent U+-0297: +AHgClwB4-
+
+\noindent U+-0298: +AHgCmAB4-
+
+\noindent U+-0299: +AHgCmQB4-
+
+\noindent U+-029A: +AHgCmgB4-
+
+\noindent U+-029B: +AHgCmwB4-
+
+\noindent U+-029C: +AHgCnAB4-
+
+\noindent U+-029D: +AHgCnQB4-
+
+\noindent U+-029E: +AHgCngB4-
+
+\noindent U+-029F: +AHgCnwB4-
+
+\noindent U+-02A0: +AHgCoAB4-
+
+\noindent U+-02A1: +AHgCoQB4-
+
+\noindent U+-02A2: +AHgCogB4-
+
+\noindent U+-02A3: +AHgCowB4-
+
+\noindent U+-02A4: +AHgCpAB4-
+
+\noindent U+-02A5: +AHgCpQB4-
+
+\noindent U+-02A6: +AHgCpgB4-
+
+\noindent U+-02A7: +AHgCpwB4-
+
+\noindent U+-02A8: +AHgCqAB4-
+
+\noindent U+-02A9: +AHgCqQB4-
+
+\noindent U+-02AA: +AHgCqgB4-
+
+\noindent U+-02AB: +AHgCqwB4-
+
+\noindent U+-02AC: +AHgCrAB4-
+
+\noindent U+-02AD: +AHgCrQB4-
+
+\noindent U+-02AE: +AHgCrgB4-
+
+\noindent U+-02AF: +AHgCrwB4-
+
+\subsubsection*{Spacing Modifier Letters}
+
+\noindent U+-02B0: +AHgCsAB4-
+
+\noindent U+-02B1: +AHgCsQB4-
+
+\noindent U+-02B2: +AHgCsgB4-
+
+\noindent U+-02B3: +AHgCswB4-
+
+\noindent U+-02B4: +AHgCtAB4-
+
+\noindent U+-02B5: +AHgCtQB4-
+
+\noindent U+-02B6: +AHgCtgB4-
+
+\noindent U+-02B7: +AHgCtwB4-
+
+\noindent U+-02B8: +AHgCuAB4-
+
+\noindent U+-02B9: +AHgCuQB4-
+
+\noindent U+-02BA: +AHgCugB4-
+
+\noindent U+-02BB: +AHgCuwB4-
+
+\noindent U+-02BC: +AHgCvAB4-
+
+\noindent U+-02BD: +AHgCvQB4-
+
+\noindent U+-02BE: +AHgCvgB4-
+
+\noindent U+-02BF: +AHgCvwB4-
+
+\noindent U+-02C0: +AHgCwAB4-
+
+\noindent U+-02C1: +AHgCwQB4-
+
+\noindent U+-02C2: +AHgCwgB4-
+
+\noindent U+-02C3: +AHgCwwB4-
+
+\noindent U+-02C4: +AHgCxAB4-
+
+\noindent U+-02C5: +AHgCxQB4-
+
+\noindent U+-02C6: +AHgCxgB4-
+
+\noindent U+-02C7: +AHgCxwB4-
+
+\noindent U+-02C8: +AHgCyAB4-
+
+\noindent U+-02C9: +AHgCyQB4-
+
+\noindent U+-02CA: +AHgCygB4-
+
+\noindent U+-02CB: +AHgCywB4-
+
+\noindent U+-02CC: +AHgCzAB4-
+
+\noindent U+-02CD: +AHgCzQB4-
+
+\noindent U+-02CE: +AHgCzgB4-
+
+\noindent U+-02CF: +AHgCzwB4-
+
+\noindent U+-02D0: +AHgC0AB4-
+
+\noindent U+-02D1: +AHgC0QB4-
+
+\noindent U+-02D2: +AHgC0gB4-
+
+\noindent U+-02D3: +AHgC0wB4-
+
+\noindent U+-02D4: +AHgC1AB4-
+
+\noindent U+-02D5: +AHgC1QB4-
+
+\noindent U+-02D6: +AHgC1gB4-
+
+\noindent U+-02D7: +AHgC1wB4-
+
+\noindent U+-02D8: +AHgC2AB4-
+
+\noindent U+-02D9: +AHgC2QB4-
+
+\noindent U+-02DA: +AHgC2gB4-
+
+\noindent U+-02DB: +AHgC2wB4-
+
+\noindent U+-02DC: +AHgC3AB4-
+
+\noindent U+-02DD: +AHgC3QB4-
+
+\noindent U+-02DE: +AHgC3gB4-
+
+\noindent U+-02DF: +AHgC3wB4-
+
+\noindent U+-02E0: +AHgC4AB4-
+
+\noindent U+-02E1: +AHgC4QB4-
+
+\noindent U+-02E2: +AHgC4gB4-
+
+\noindent U+-02E3: +AHgC4wB4-
+
+\noindent U+-02E4: +AHgC5AB4-
+
+\noindent U+-02E5: +AHgC5QB4-
+
+\noindent U+-02E6: +AHgC5gB4-
+
+\noindent U+-02E7: +AHgC5wB4-
+
+\noindent U+-02E8: +AHgC6AB4-
+
+\noindent U+-02E9: +AHgC6QB4-
+
+\noindent U+-02EA: +AHgC6gB4-
+
+\noindent U+-02EB: +AHgC6wB4-
+
+\noindent U+-02EC: +AHgC7AB4-
+
+\noindent U+-02ED: +AHgC7QB4-
+
+\noindent U+-02EE: +AHgC7gB4-
+
+\noindent U+-02EF: +AHgC7wB4-
+
+\noindent U+-02F0: +AHgC8AB4-
+
+\noindent U+-02F1: +AHgC8QB4-
+
+\noindent U+-02F2: +AHgC8gB4-
+
+\noindent U+-02F3: +AHgC8wB4-
+
+\noindent U+-02F4: +AHgC9AB4-
+
+\noindent U+-02F5: +AHgC9QB4-
+
+\noindent U+-02F6: +AHgC9gB4-
+
+\noindent U+-02F7: +AHgC9wB4-
+
+\noindent U+-02F8: +AHgC+AB4-
+
+\noindent U+-02F9: +AHgC+QB4-
+
+\noindent U+-02FA: +AHgC+gB4-
+
+\noindent U+-02FB: +AHgC+wB4-
+
+\noindent U+-02FC: +AHgC/AB4-
+
+\noindent U+-02FD: +AHgC/QB4-
+
+\noindent U+-02FE: +AHgC/gB4-
+
+\noindent U+-02FF: +AHgC/wB4-
+
+\subsubsection*{General Punctuation}
+
+\noindent U+-2000: +AHggAAB4-
+
+\noindent U+-2001: +AHggAQB4-
+
+\noindent U+-2002: +AHggAgB4-
+
+\noindent U+-2003: +AHggAwB4-
+
+\noindent U+-2004: +AHggBAB4-
+
+\noindent U+-2005: +AHggBQB4-
+
+\noindent U+-2006: +AHggBgB4-
+
+\noindent U+-2007: +AHggBwB4-
+
+\noindent U+-2008: +AHggCAB4-
+
+\noindent U+-2009: +AHggCQB4-
+
+\noindent U+-200A: +AHggCgB4-
+
+\noindent U+-200B: +AHggCwB4-
+
+\noindent U+-200C: +AHggDAB4-
+
+\noindent U+-200D: +AHggDQB4-
+
+\noindent U+-200E: +AHggDgB4-
+
+\noindent U+-200F: +AHggDwB4-
+
+\noindent U+-2010: +AHggEAB4-
+
+\noindent U+-2011: +AHggEQB4-
+
+\noindent U+-2012: +AHggEgB4-
+
+\noindent U+-2013: +AHggEwB4-
+
+\noindent U+-2014: +AHggFAB4-
+
+\noindent U+-2015: +AHggFQB4-
+
+\noindent U+-2016: +AHggFgB4-
+
+\noindent U+-2017: +AHggFwB4-
+
+\noindent U+-2018: +AHggGAB4-
+
+\noindent U+-2019: +AHggGQB4-
+
+\noindent U+-201A: +AHggGgB4-
+
+\noindent U+-201B: +AHggGwB4-
+
+\noindent U+-201C: +AHggHAB4-
+
+\noindent U+-201D: +AHggHQB4-
+
+\noindent U+-201E: +AHggHgB4-
+
+\noindent U+-201F: +AHggHwB4-
+
+\noindent U+-2020: +AHggIAB4-
+
+\noindent U+-2021: +AHggIQB4-
+
+\noindent U+-2022: +AHggIgB4-
+
+\noindent U+-2023: +AHggIwB4-
+
+\noindent U+-2024: +AHggJAB4-
+
+\noindent U+-2025: +AHggJQB4-
+
+\noindent U+-2026: +AHggJgB4-
+
+\noindent U+-2027: +AHggJwB4-
+
+\noindent U+-2028: +AHggKAB4-
+
+\noindent U+-2029: +AHggKQB4-
+
+\noindent U+-202A: +AHggKgB4-
+
+\noindent U+-202B: +AHggKwB4-
+
+\noindent U+-202C: +AHggLAB4-
+
+\noindent U+-202D: +AHggLQB4-
+
+\noindent U+-202E: +AHggLgB4-
+
+\noindent U+-202F: +AHggLwB4-
+
+\noindent U+-2030: +AHggMAB4-
+
+\noindent U+-2031: +AHggMQB4-
+
+\noindent U+-2032: +AHggMgB4-
+
+\noindent U+-2033: +AHggMwB4-
+
+\noindent U+-2034: +AHggNAB4-
+
+\noindent U+-2035: +AHggNQB4-
+
+\noindent U+-2036: +AHggNgB4-
+
+\noindent U+-2037: +AHggNwB4-
+
+\noindent U+-2038: +AHggOAB4-
+
+\noindent U+-2039: +AHggOQB4-
+
+\noindent U+-203A: +AHggOgB4-
+
+\noindent U+-203B: +AHggOwB4-
+
+\noindent U+-203C: +AHggPAB4-
+
+\noindent U+-203D: +AHggPQB4-
+
+\noindent U+-203E: +AHggPgB4-
+
+\noindent U+-203F: +AHggPwB4-
+
+\noindent U+-2040: +AHggQAB4-
+
+\noindent U+-2041: +AHggQQB4-
+
+\noindent U+-2042: +AHggQgB4-
+
+\noindent U+-2043: +AHggQwB4-
+
+\noindent U+-2044: +AHggRAB4-
+
+\noindent U+-2045: +AHggRQB4-
+
+\noindent U+-2046: +AHggRgB4-
+
+\noindent U+-2047: +AHggRwB4-
+
+\noindent U+-2048: +AHggSAB4-
+
+\noindent U+-2049: +AHggSQB4-
+
+\noindent U+-204A: +AHggSgB4-
+
+\noindent U+-204B: +AHggSwB4-
+
+\noindent U+-204C: +AHggTAB4-
+
+\noindent U+-204D: +AHggTQB4-
+
+\noindent U+-204E: +AHggTgB4-
+
+\noindent U+-204F: +AHggTwB4-
+
+\noindent U+-2050: +AHggUAB4-
+
+\noindent U+-2051: +AHggUQB4-
+
+\noindent U+-2052: +AHggUgB4-
+
+\noindent U+-2053: +AHggUwB4-
+
+\noindent U+-2054: +AHggVAB4-
+
+\noindent U+-2055: +AHggVQB4-
+
+\noindent U+-2056: +AHggVgB4-
+
+\noindent U+-2057: +AHggVwB4-
+
+\noindent U+-2058: +AHggWAB4-
+
+\noindent U+-2059: +AHggWQB4-
+
+\noindent U+-205A: +AHggWgB4-
+
+\noindent U+-205B: +AHggWwB4-
+
+\noindent U+-205C: +AHggXAB4-
+
+\noindent U+-205D: +AHggXQB4-
+
+\noindent U+-205E: +AHggXgB4-
+
+\noindent U+-205F: +AHggXwB4-
+
+\noindent U+-2060: +AHggYAB4-
+
+\noindent U+-2061: +AHggYQB4-
+
+\noindent U+-2062: +AHggYgB4-
+
+\noindent U+-2063: +AHggYwB4-
+
+\noindent U+-2064: +AHggZAB4-
+
+\noindent U+-2065: +AHggZQB4-
+
+\noindent U+-2066: +AHggZgB4-
+
+\noindent U+-2067: +AHggZwB4-
+
+\noindent U+-2068: +AHggaAB4-
+
+\noindent U+-2069: +AHggaQB4-
+
+\noindent U+-206A: +AHggagB4-
+
+\noindent U+-206B: +AHggawB4-
+
+\noindent U+-206C: +AHggbAB4-
+
+\noindent U+-206D: +AHggbQB4-
+
+\noindent U+-206E: +AHggbgB4-
+
+\noindent U+-206F: +AHggbwB4-
+
+\subsubsection*{Currency Symbols}
+
+\noindent U+-20A0: +AHggoAB4-
+
+\noindent U+-20A1: +AHggoQB4-
+
+\noindent U+-20A2: +AHggogB4-
+
+\noindent U+-20A3: +AHggowB4-
+
+\noindent U+-20A4: +AHggpAB4-
+
+\noindent U+-20A5: +AHggpQB4-
+
+\noindent U+-20A6: +AHggpgB4-
+
+\noindent U+-20A7: +AHggpwB4-
+
+\noindent U+-20A8: +AHggqAB4-
+
+\noindent U+-20A9: +AHggqQB4-
+
+\noindent U+-20AA: +AHggqgB4-
+
+\noindent U+-20AB: +AHggqwB4-
+
+\noindent U+-20AC: +AHggrAB4-
+
+\noindent U+-20AD: +AHggrQB4-
+
+\noindent U+-20AE: +AHggrgB4-
+
+\noindent U+-20AF: +AHggrwB4-
+
+\noindent U+-20B0: +AHggsAB4-
+
+\noindent U+-20B1: +AHggsQB4-
+
+\noindent U+-20B2: +AHggsgB4-
+
+\noindent U+-20B3: +AHggswB4-
+
+\noindent U+-20B4: +AHggtAB4-
+
+\noindent U+-20B5: +AHggtQB4-
+
+\noindent U+-20B6: +AHggtgB4-
+
+\noindent U+-20B7: +AHggtwB4-
+
+\noindent U+-20B8: +AHgguAB4-
+
+\noindent U+-20B9: +AHgguQB4-
+
+\noindent U+-20BA: +AHggugB4-
+
+\noindent U+-20BB: +AHgguwB4-
+
+\noindent U+-20BC: +AHggvAB4-
+
+\noindent U+-20BD: +AHggvQB4-
+
+\noindent U+-20BE: +AHggvgB4-
+
+\noindent U+-20BF: +AHggvwB4-
+
+\noindent U+-20C0: +AHggwAB4-
+
+\noindent U+-20C1: +AHggwQB4-
+
+\noindent U+-20C2: +AHggwgB4-
+
+\noindent U+-20C3: +AHggwwB4-
+
+\noindent U+-20C4: +AHggxAB4-
+
+\noindent U+-20C5: +AHggxQB4-
+
+\noindent U+-20C6: +AHggxgB4-
+
+\noindent U+-20C7: +AHggxwB4-
+
+\noindent U+-20C8: +AHggyAB4-
+
+\noindent U+-20C9: +AHggyQB4-
+
+\noindent U+-20CA: +AHggygB4-
+
+\noindent U+-20CB: +AHggywB4-
+
+\noindent U+-20CC: +AHggzAB4-
+
+\noindent U+-20CD: +AHggzQB4-
+
+\noindent U+-20CE: +AHggzgB4-
+
+\noindent U+-20CF: +AHggzwB4-
+
+\subsubsection*{Letterlike Symbols}
+
+\noindent U+-2100: +AHghAAB4-
+
+\noindent U+-2101: +AHghAQB4-
+
+\noindent U+-2102: +AHghAgB4-
+
+\noindent U+-2103: +AHghAwB4-
+
+\noindent U+-2104: +AHghBAB4-
+
+\noindent U+-2105: +AHghBQB4-
+
+\noindent U+-2106: +AHghBgB4-
+
+\noindent U+-2107: +AHghBwB4-
+
+\noindent U+-2108: +AHghCAB4-
+
+\noindent U+-2109: +AHghCQB4-
+
+\noindent U+-210A: +AHghCgB4-
+
+\noindent U+-210B: +AHghCwB4-
+
+\noindent U+-210C: +AHghDAB4-
+
+\noindent U+-210D: +AHghDQB4-
+
+\noindent U+-210E: +AHghDgB4-
+
+\noindent U+-210F: +AHghDwB4-
+
+\noindent U+-2110: +AHghEAB4-
+
+\noindent U+-2111: +AHghEQB4-
+
+\noindent U+-2112: +AHghEgB4-
+
+\noindent U+-2113: +AHghEwB4-
+
+\noindent U+-2114: +AHghFAB4-
+
+\noindent U+-2115: +AHghFQB4-
+
+\noindent U+-2116: +AHghFgB4-
+
+\noindent U+-2117: +AHghFwB4-
+
+\noindent U+-2118: +AHghGAB4-
+
+\noindent U+-2119: +AHghGQB4-
+
+\noindent U+-211A: +AHghGgB4-
+
+\noindent U+-211B: +AHghGwB4-
+
+\noindent U+-211C: +AHghHAB4-
+
+\noindent U+-211D: +AHghHQB4-
+
+\noindent U+-211E: +AHghHgB4-
+
+\noindent U+-211F: +AHghHwB4-
+
+\noindent U+-2120: +AHghIAB4-
+
+\noindent U+-2121: +AHghIQB4-
+
+\noindent U+-2122: +AHghIgB4-
+
+\noindent U+-2123: +AHghIwB4-
+
+\noindent U+-2124: +AHghJAB4-
+
+\noindent U+-2125: +AHghJQB4-
+
+\noindent U+-2126: +AHghJgB4-
+
+\noindent U+-2127: +AHghJwB4-
+
+\noindent U+-2128: +AHghKAB4-
+
+\noindent U+-2129: +AHghKQB4-
+
+\noindent U+-212A: +AHghKgB4-
+
+\noindent U+-212B: +AHghKwB4-
+
+\noindent U+-212C: +AHghLAB4-
+
+\noindent U+-212D: +AHghLQB4-
+
+\noindent U+-212E: +AHghLgB4-
+
+\noindent U+-212F: +AHghLwB4-
+
+\noindent U+-2130: +AHghMAB4-
+
+\noindent U+-2131: +AHghMQB4-
+
+\noindent U+-2132: +AHghMgB4-
+
+\noindent U+-2133: +AHghMwB4-
+
+\noindent U+-2134: +AHghNAB4-
+
+\noindent U+-2135: +AHghNQB4-
+
+\noindent U+-2136: +AHghNgB4-
+
+\noindent U+-2137: +AHghNwB4-
+
+\noindent U+-2138: +AHghOAB4-
+
+\noindent U+-2139: +AHghOQB4-
+
+\noindent U+-213A: +AHghOgB4-
+
+\noindent U+-213B: +AHghOwB4-
+
+\noindent U+-213C: +AHghPAB4-
+
+\noindent U+-213D: +AHghPQB4-
+
+\noindent U+-213E: +AHghPgB4-
+
+\noindent U+-213F: +AHghPwB4-
+
+\noindent U+-2140: +AHghQAB4-
+
+\noindent U+-2141: +AHghQQB4-
+
+\noindent U+-2142: +AHghQgB4-
+
+\noindent U+-2143: +AHghQwB4-
+
+\noindent U+-2144: +AHghRAB4-
+
+\noindent U+-2145: +AHghRQB4-
+
+\noindent U+-2146: +AHghRgB4-
+
+\noindent U+-2147: +AHghRwB4-
+
+\noindent U+-2148: +AHghSAB4-
+
+\noindent U+-2149: +AHghSQB4-
+
+\noindent U+-214A: +AHghSgB4-
+
+\noindent U+-214B: +AHghSwB4-
+
+\noindent U+-214C: +AHghTAB4-
+
+\noindent U+-214D: +AHghTQB4-
+
+\noindent U+-214E: +AHghTgB4-
+
+\noindent U+-214F: +AHghTwB4-
+
+\subsubsection*{Number Forms}
+
+\noindent U+-2150: +AHghUAB4-
+
+\noindent U+-2151: +AHghUQB4-
+
+\noindent U+-2152: +AHghUgB4-
+
+\noindent U+-2153: +AHghUwB4-
+
+\noindent U+-2154: +AHghVAB4-
+
+\noindent U+-2155: +AHghVQB4-
+
+\noindent U+-2156: +AHghVgB4-
+
+\noindent U+-2157: +AHghVwB4-
+
+\noindent U+-2158: +AHghWAB4-
+
+\noindent U+-2159: +AHghWQB4-
+
+\noindent U+-215A: +AHghWgB4-
+
+\noindent U+-215B: +AHghWwB4-
+
+\noindent U+-215C: +AHghXAB4-
+
+\noindent U+-215D: +AHghXQB4-
+
+\noindent U+-215E: +AHghXgB4-
+
+\noindent U+-215F: +AHghXwB4-
+
+\noindent U+-2160: +AHghYAB4-
+
+\noindent U+-2161: +AHghYQB4-
+
+\noindent U+-2162: +AHghYgB4-
+
+\noindent U+-2163: +AHghYwB4-
+
+\noindent U+-2164: +AHghZAB4-
+
+\noindent U+-2165: +AHghZQB4-
+
+\noindent U+-2166: +AHghZgB4-
+
+\noindent U+-2167: +AHghZwB4-
+
+\noindent U+-2168: +AHghaAB4-
+
+\noindent U+-2169: +AHghaQB4-
+
+\noindent U+-216A: +AHghagB4-
+
+\noindent U+-216B: +AHghawB4-
+
+\noindent U+-216C: +AHghbAB4-
+
+\noindent U+-216D: +AHghbQB4-
+
+\noindent U+-216E: +AHghbgB4-
+
+\noindent U+-216F: +AHghbwB4-
+
+\noindent U+-2170: +AHghcAB4-
+
+\noindent U+-2171: +AHghcQB4-
+
+\noindent U+-2172: +AHghcgB4-
+
+\noindent U+-2173: +AHghcwB4-
+
+\noindent U+-2174: +AHghdAB4-
+
+\noindent U+-2175: +AHghdQB4-
+
+\noindent U+-2176: +AHghdgB4-
+
+\noindent U+-2177: +AHghdwB4-
+
+\noindent U+-2178: +AHgheAB4-
+
+\noindent U+-2179: +AHgheQB4-
+
+\noindent U+-217A: +AHghegB4-
+
+\noindent U+-217B: +AHghewB4-
+
+\noindent U+-217C: +AHghfAB4-
+
+\noindent U+-217D: +AHghfQB4-
+
+\noindent U+-217E: +AHghfgB4-
+
+\noindent U+-217F: +AHghfwB4-
+
+\noindent U+-2180: +AHghgAB4-
+
+\noindent U+-2181: +AHghgQB4-
+
+\noindent U+-2182: +AHghggB4-
+
+\noindent U+-2183: +AHghgwB4-
+
+\noindent U+-2184: +AHghhAB4-
+
+\noindent U+-2185: +AHghhQB4-
+
+\noindent U+-2186: +AHghhgB4-
+
+\noindent U+-2187: +AHghhwB4-
+
+\noindent U+-2188: +AHghiAB4-
+
+\noindent U+-2189: +AHghiQB4-
+
+\noindent U+-218A: +AHghigB4-
+
+\noindent U+-218B: +AHghiwB4-
+
+\noindent U+-218C: +AHghjAB4-
+
+\noindent U+-218D: +AHghjQB4-
+
+\noindent U+-218E: +AHghjgB4-
+
+\noindent U+-218F: +AHghjwB4-
+
+\subsubsection*{Alphabetic Presentation Forms}
+
+\noindent U+-FB00: +AHj7AAB4-
+
+\noindent U+-FB01: +AHj7AQB4-
+
+\noindent U+-FB02: +AHj7AgB4-
+
+\noindent U+-FB03: +AHj7AwB4-
+
+\noindent U+-FB04: +AHj7BAB4-
+
+\noindent U+-FB05: +AHj7BQB4-
+
+\noindent U+-FB06: +AHj7BgB4-
+
+\noindent U+-FB07: +AHj7BwB4-
+
+\noindent U+-FB08: +AHj7CAB4-
+
+\noindent U+-FB09: +AHj7CQB4-
+
+\noindent U+-FB0A: +AHj7CgB4-
+
+\noindent U+-FB0B: +AHj7CwB4-
+
+\noindent U+-FB0C: +AHj7DAB4-
+
+\noindent U+-FB0D: +AHj7DQB4-
+
+\noindent U+-FB0E: +AHj7DgB4-
+
+\noindent U+-FB0F: +AHj7DwB4-
+
+\noindent U+-FB10: +AHj7EAB4-
+
+\noindent U+-FB11: +AHj7EQB4-
+
+\noindent U+-FB12: +AHj7EgB4-
+
+\noindent U+-FB13: +AHj7EwB4-
+
+\noindent U+-FB14: +AHj7FAB4-
+
+\noindent U+-FB15: +AHj7FQB4-
+
+\noindent U+-FB16: +AHj7FgB4-
+
+\noindent U+-FB17: +AHj7FwB4-
+
+\noindent U+-FB18: +AHj7GAB4-
+
+\noindent U+-FB19: +AHj7GQB4-
+
+\noindent U+-FB1A: +AHj7GgB4-
+
+\noindent U+-FB1B: +AHj7GwB4-
+
+\noindent U+-FB1C: +AHj7HAB4-
+
+\noindent U+-FB1D: +AHj7HQB4-
+
+\noindent U+-FB1E: +AHj7HgB4-
+
+\noindent U+-FB1F: +AHj7HwB4-
+
+\noindent U+-FB20: +AHj7IAB4-
+
+\noindent U+-FB21: +AHj7IQB4-
+
+\noindent U+-FB22: +AHj7IgB4-
+
+\noindent U+-FB23: +AHj7IwB4-
+
+\noindent U+-FB24: +AHj7JAB4-
+
+\noindent U+-FB25: +AHj7JQB4-
+
+\noindent U+-FB26: +AHj7JgB4-
+
+\noindent U+-FB27: +AHj7JwB4-
+
+\noindent U+-FB28: +AHj7KAB4-
+
+\noindent U+-FB29: +AHj7KQB4-
+
+\noindent U+-FB2A: +AHj7KgB4-
+
+\noindent U+-FB2B: +AHj7KwB4-
+
+\noindent U+-FB2C: +AHj7LAB4-
+
+\noindent U+-FB2D: +AHj7LQB4-
+
+\noindent U+-FB2E: +AHj7LgB4-
+
+\noindent U+-FB2F: +AHj7LwB4-
+
+\noindent U+-FB30: +AHj7MAB4-
+
+\noindent U+-FB31: +AHj7MQB4-
+
+\noindent U+-FB32: +AHj7MgB4-
+
+\noindent U+-FB33: +AHj7MwB4-
+
+\noindent U+-FB34: +AHj7NAB4-
+
+\noindent U+-FB35: +AHj7NQB4-
+
+\noindent U+-FB36: +AHj7NgB4-
+
+\noindent U+-FB37: +AHj7NwB4-
+
+\noindent U+-FB38: +AHj7OAB4-
+
+\noindent U+-FB39: +AHj7OQB4-
+
+\noindent U+-FB3A: +AHj7OgB4-
+
+\noindent U+-FB3B: +AHj7OwB4-
+
+\noindent U+-FB3C: +AHj7PAB4-
+
+\noindent U+-FB3D: +AHj7PQB4-
+
+\noindent U+-FB3E: +AHj7PgB4-
+
+\noindent U+-FB3F: +AHj7PwB4-
+
+\noindent U+-FB40: +AHj7QAB4-
+
+\noindent U+-FB41: +AHj7QQB4-
+
+\noindent U+-FB42: +AHj7QgB4-
+
+\noindent U+-FB43: +AHj7QwB4-
+
+\noindent U+-FB44: +AHj7RAB4-
+
+\noindent U+-FB45: +AHj7RQB4-
+
+\noindent U+-FB46: +AHj7RgB4-
+
+\noindent U+-FB47: +AHj7RwB4-
+
+\noindent U+-FB48: +AHj7SAB4-
+
+\noindent U+-FB49: +AHj7SQB4-
+
+\noindent U+-FB4A: +AHj7SgB4-
+
+\noindent U+-FB4B: +AHj7SwB4-
+
+\noindent U+-FB4C: +AHj7TAB4-
+
+\noindent U+-FB4D: +AHj7TQB4-
+
+\noindent U+-FB4E: +AHj7TgB4-
+
+\noindent U+-FB4F: +AHj7TwB4-
+
+\end{document}
diff --git a/support/utf2any/test/tst-latex.utf8 b/support/utf2any/test/tst-latex.utf8
new file mode 100644
index 0000000000..e37d649c08
--- /dev/null
+++ b/support/utf2any/test/tst-latex.utf8
@@ -0,0 +1,2074 @@
+\documentclass[a4paper,12pt,twocolumn]{article}
+\usepackage{textcomp}
+\usepackage{eurofont}
+\usepackage[T1,tone,safe]{tipa}
+\begin{document}
+\subsubsection*{Controls and Latin-1 Supplement}
+
+\noindent U+0080: x€x
+
+\noindent U+0081: xx
+
+\noindent U+0082: x‚x
+
+\noindent U+0083: xƒx
+
+\noindent U+0084: x„x
+
+\noindent U+0085: x…x
+
+\noindent U+0086: x†x
+
+\noindent U+0087: x‡x
+
+\noindent U+0088: xˆx
+
+\noindent U+0089: x‰x
+
+\noindent U+008A: xŠx
+
+\noindent U+008B: x‹x
+
+\noindent U+008C: xŒx
+
+\noindent U+008D: xx
+
+\noindent U+008E: xŽx
+
+\noindent U+008F: xx
+
+\noindent U+0090: xx
+
+\noindent U+0091: x‘x
+
+\noindent U+0092: x’x
+
+\noindent U+0093: x“x
+
+\noindent U+0094: x”x
+
+\noindent U+0095: x•x
+
+\noindent U+0096: x–x
+
+\noindent U+0097: x—x
+
+\noindent U+0098: x˜x
+
+\noindent U+0099: x™x
+
+\noindent U+009A: xšx
+
+\noindent U+009B: x›x
+
+\noindent U+009C: xœx
+
+\noindent U+009D: xx
+
+\noindent U+009E: xžx
+
+\noindent U+009F: xŸx
+
+\noindent U+00A0: x x
+
+\noindent U+00A1: xÂĄx
+
+\noindent U+00A2: xÂĒx
+
+\noindent U+00A3: xÂĢx
+
+\noindent U+00A4: xÂĪx
+
+\noindent U+00A5: xÂĨx
+
+\noindent U+00A6: xÂĶx
+
+\noindent U+00A7: x§x
+
+\noindent U+00A8: xÂĻx
+
+\noindent U+00A9: xÂĐx
+
+\noindent U+00AA: xŠx
+
+\noindent U+00AB: xÂŦx
+
+\noindent U+00AC: xÂŽx
+
+\noindent U+00AD: x­x
+
+\noindent U+00AE: xÂŪx
+
+\noindent U+00AF: xÂŊx
+
+\noindent U+00B0: x°x
+
+\noindent U+00B1: xÂąx
+
+\noindent U+00B2: xÂēx
+
+\noindent U+00B3: xÂģx
+
+\noindent U+00B4: xÂīx
+
+\noindent U+00B5: xÂĩx
+
+\noindent U+00B6: xÂķx
+
+\noindent U+00B7: x·x
+
+\noindent U+00B8: xÂļx
+
+\noindent U+00B9: xÂđx
+
+\noindent U+00BA: xšx
+
+\noindent U+00BB: xÂŧx
+
+\noindent U+00BC: xžx
+
+\noindent U+00BD: xÂ―x
+
+\noindent U+00BE: xÂūx
+
+\noindent U+00BF: xÂŋx
+
+\noindent U+00C0: xÀx
+
+\noindent U+00C1: xÁx
+
+\noindent U+00C2: xÂx
+
+\noindent U+00C3: xÃx
+
+\noindent U+00C4: xÄx
+
+\noindent U+00C5: xÅx
+
+\noindent U+00C6: xÆx
+
+\noindent U+00C7: xÇx
+
+\noindent U+00C8: xÈx
+
+\noindent U+00C9: xÉx
+
+\noindent U+00CA: xÊx
+
+\noindent U+00CB: xËx
+
+\noindent U+00CC: xÌx
+
+\noindent U+00CD: xÍx
+
+\noindent U+00CE: xÎx
+
+\noindent U+00CF: xÏx
+
+\noindent U+00D0: xÐx
+
+\noindent U+00D1: xÑx
+
+\noindent U+00D2: xÒx
+
+\noindent U+00D3: xÓx
+
+\noindent U+00D4: xÔx
+
+\noindent U+00D5: xÕx
+
+\noindent U+00D6: xÖx
+
+\noindent U+00D7: x×x
+
+\noindent U+00D8: xØx
+
+\noindent U+00D9: xÙx
+
+\noindent U+00DA: xÚx
+
+\noindent U+00DB: xÛx
+
+\noindent U+00DC: xÜx
+
+\noindent U+00DD: xÝx
+
+\noindent U+00DE: xÞx
+
+\noindent U+00DF: xßx
+
+\noindent U+00E0: xàx
+
+\noindent U+00E1: xÃĄx
+
+\noindent U+00E2: xÃĒx
+
+\noindent U+00E3: xÃĢx
+
+\noindent U+00E4: xÃĪx
+
+\noindent U+00E5: xÃĨx
+
+\noindent U+00E6: xÃĶx
+
+\noindent U+00E7: xçx
+
+\noindent U+00E8: xÃĻx
+
+\noindent U+00E9: xÃĐx
+
+\noindent U+00EA: xÊx
+
+\noindent U+00EB: xÃŦx
+
+\noindent U+00EC: xÃŽx
+
+\noindent U+00ED: xíx
+
+\noindent U+00EE: xÃŪx
+
+\noindent U+00EF: xÃŊx
+
+\noindent U+00F0: xðx
+
+\noindent U+00F1: xÃąx
+
+\noindent U+00F2: xÃēx
+
+\noindent U+00F3: xÃģx
+
+\noindent U+00F4: xÃīx
+
+\noindent U+00F5: xÃĩx
+
+\noindent U+00F6: xÃķx
+
+\noindent U+00F7: x÷x
+
+\noindent U+00F8: xÃļx
+
+\noindent U+00F9: xÃđx
+
+\noindent U+00FA: xÚx
+
+\noindent U+00FB: xÃŧx
+
+\noindent U+00FC: xÞx
+
+\noindent U+00FD: xÃ―x
+
+\noindent U+00FE: xÃūx
+
+\noindent U+00FF: xÃŋx
+
+\subsubsection*{Latin Extended-A}
+
+\noindent U+0100: xĀx
+
+\noindent U+0101: xāx
+
+\noindent U+0102: xĂx
+
+\noindent U+0103: xăx
+
+\noindent U+0104: xĄx
+
+\noindent U+0105: xąx
+
+\noindent U+0106: xĆx
+
+\noindent U+0107: xćx
+
+\noindent U+0108: xĈx
+
+\noindent U+0109: xĉx
+
+\noindent U+010A: xĊx
+
+\noindent U+010B: xċx
+
+\noindent U+010C: xČx
+
+\noindent U+010D: xčx
+
+\noindent U+010E: xĎx
+
+\noindent U+010F: xďx
+
+\noindent U+0110: xĐx
+
+\noindent U+0111: xđx
+
+\noindent U+0112: xĒx
+
+\noindent U+0113: xēx
+
+\noindent U+0114: xĔx
+
+\noindent U+0115: xĕx
+
+\noindent U+0116: xĖx
+
+\noindent U+0117: xėx
+
+\noindent U+0118: xĘx
+
+\noindent U+0119: xęx
+
+\noindent U+011A: xĚx
+
+\noindent U+011B: xěx
+
+\noindent U+011C: xĜx
+
+\noindent U+011D: xĝx
+
+\noindent U+011E: xĞx
+
+\noindent U+011F: xğx
+
+\noindent U+0120: xÄ x
+
+\noindent U+0121: xÄĄx
+
+\noindent U+0122: xÄĒx
+
+\noindent U+0123: xÄĢx
+
+\noindent U+0124: xÄĪx
+
+\noindent U+0125: xÄĨx
+
+\noindent U+0126: xÄĶx
+
+\noindent U+0127: xħx
+
+\noindent U+0128: xÄĻx
+
+\noindent U+0129: xÄĐx
+
+\noindent U+012A: xÄŠx
+
+\noindent U+012B: xÄŦx
+
+\noindent U+012C: xÄŽx
+
+\noindent U+012D: xÄ­x
+
+\noindent U+012E: xÄŪx
+
+\noindent U+012F: xÄŊx
+
+\noindent U+0130: xÄ°x
+
+\noindent U+0131: xÄąx
+
+\noindent U+0132: xÄēx
+
+\noindent U+0133: xÄģx
+
+\noindent U+0134: xÄīx
+
+\noindent U+0135: xÄĩx
+
+\noindent U+0136: xÄķx
+
+\noindent U+0137: xÄ·x
+
+\noindent U+0138: xÄļx
+
+\noindent U+0139: xÄđx
+
+\noindent U+013A: xÄšx
+
+\noindent U+013B: xÄŧx
+
+\noindent U+013C: xÄžx
+
+\noindent U+013D: xÄ―x
+
+\noindent U+013E: xÄūx
+
+\noindent U+013F: xÄŋx
+
+\noindent U+0140: xŀx
+
+\noindent U+0141: xŁx
+
+\noindent U+0142: xłx
+
+\noindent U+0143: xŃx
+
+\noindent U+0144: xńx
+
+\noindent U+0145: xŅx
+
+\noindent U+0146: xņx
+
+\noindent U+0147: xŇx
+
+\noindent U+0148: xňx
+
+\noindent U+0149: xʼnx
+
+\noindent U+014A: xŊx
+
+\noindent U+014B: xŋx
+
+\noindent U+014C: xŌx
+
+\noindent U+014D: xōx
+
+\noindent U+014E: xŎx
+
+\noindent U+014F: xŏx
+
+\noindent U+0150: xŐx
+
+\noindent U+0151: xőx
+
+\noindent U+0152: xŒx
+
+\noindent U+0153: xœx
+
+\noindent U+0154: xŔx
+
+\noindent U+0155: xŕx
+
+\noindent U+0156: xŖx
+
+\noindent U+0157: xŗx
+
+\noindent U+0158: xŘx
+
+\noindent U+0159: xřx
+
+\noindent U+015A: xŚx
+
+\noindent U+015B: xśx
+
+\noindent U+015C: xŜx
+
+\noindent U+015D: xŝx
+
+\noindent U+015E: xŞx
+
+\noindent U+015F: xşx
+
+\noindent U+0160: xÅ x
+
+\noindent U+0161: xÅĄx
+
+\noindent U+0162: xÅĒx
+
+\noindent U+0163: xÅĢx
+
+\noindent U+0164: xÅĪx
+
+\noindent U+0165: xÅĨx
+
+\noindent U+0166: xÅĶx
+
+\noindent U+0167: xŧx
+
+\noindent U+0168: xÅĻx
+
+\noindent U+0169: xÅĐx
+
+\noindent U+016A: xÅŠx
+
+\noindent U+016B: xÅŦx
+
+\noindent U+016C: xÅŽx
+
+\noindent U+016D: xÅ­x
+
+\noindent U+016E: xÅŪx
+
+\noindent U+016F: xÅŊx
+
+\noindent U+0170: xÅ°x
+
+\noindent U+0171: xÅąx
+
+\noindent U+0172: xÅēx
+
+\noindent U+0173: xÅģx
+
+\noindent U+0174: xÅīx
+
+\noindent U+0175: xÅĩx
+
+\noindent U+0176: xÅķx
+
+\noindent U+0177: xÅ·x
+
+\noindent U+0178: xÅļx
+
+\noindent U+0179: xÅđx
+
+\noindent U+017A: xÅšx
+
+\noindent U+017B: xÅŧx
+
+\noindent U+017C: xÅžx
+
+\noindent U+017D: xÅ―x
+
+\noindent U+017E: xÅūx
+
+\noindent U+017F: xÅŋx
+
+\subsubsection*{Latin Extended-B}
+
+\noindent U+0180: xƀx
+
+\noindent U+0181: xƁx
+
+\noindent U+0182: xƂx
+
+\noindent U+0183: xƃx
+
+\noindent U+0184: xƄx
+
+\noindent U+0185: xƅx
+
+\noindent U+0186: xƆx
+
+\noindent U+0187: xƇx
+
+\noindent U+0188: xƈx
+
+\noindent U+0189: xƉx
+
+\noindent U+018A: xƊx
+
+\noindent U+018B: xƋx
+
+\noindent U+018C: xƌx
+
+\noindent U+018D: xƍx
+
+\noindent U+018E: xƎx
+
+\noindent U+018F: xƏx
+
+\noindent U+0190: xƐx
+
+\noindent U+0191: xƑx
+
+\noindent U+0192: xƒx
+
+\noindent U+0193: xƓx
+
+\noindent U+0194: xƔx
+
+\noindent U+0195: xƕx
+
+\noindent U+0196: xƖx
+
+\noindent U+0197: xƗx
+
+\noindent U+0198: xƘx
+
+\noindent U+0199: xƙx
+
+\noindent U+019A: xƚx
+
+\noindent U+019B: xƛx
+
+\noindent U+019C: xƜx
+
+\noindent U+019D: xƝx
+
+\noindent U+019E: xƞx
+
+\noindent U+019F: xƟx
+
+\noindent U+01A0: xÆ x
+
+\noindent U+01A1: xÆĄx
+
+\noindent U+01A2: xÆĒx
+
+\noindent U+01A3: xÆĢx
+
+\noindent U+01A4: xÆĪx
+
+\noindent U+01A5: xÆĨx
+
+\noindent U+01A6: xÆĶx
+
+\noindent U+01A7: xƧx
+
+\noindent U+01A8: xÆĻx
+
+\noindent U+01A9: xÆĐx
+
+\noindent U+01AA: xÆŠx
+
+\noindent U+01AB: xÆŦx
+
+\noindent U+01AC: xÆŽx
+
+\noindent U+01AD: xÆ­x
+
+\noindent U+01AE: xÆŪx
+
+\noindent U+01AF: xÆŊx
+
+\noindent U+01B0: xÆ°x
+
+\noindent U+01B1: xÆąx
+
+\noindent U+01B2: xÆēx
+
+\noindent U+01B3: xÆģx
+
+\noindent U+01B4: xÆīx
+
+\noindent U+01B5: xÆĩx
+
+\noindent U+01B6: xÆķx
+
+\noindent U+01B7: xÆ·x
+
+\noindent U+01B8: xÆļx
+
+\noindent U+01B9: xÆđx
+
+\noindent U+01BA: xÆšx
+
+\noindent U+01BB: xÆŧx
+
+\noindent U+01BC: xÆžx
+
+\noindent U+01BD: xÆ―x
+
+\noindent U+01BE: xÆūx
+
+\noindent U+01BF: xÆŋx
+
+\noindent U+01C0: xĮ€x
+
+\noindent U+01C1: xĮx
+
+\noindent U+01C2: xĮ‚x
+
+\noindent U+01C3: xĮƒx
+
+\noindent U+01C4: xĮ„x
+
+\noindent U+01C5: xĮ…x
+
+\noindent U+01C6: xĮ†x
+
+\noindent U+01C7: xĮ‡x
+
+\noindent U+01C8: xĮˆx
+
+\noindent U+01C9: xĮ‰x
+
+\noindent U+01CA: xĮŠx
+
+\noindent U+01CB: xĮ‹x
+
+\noindent U+01CC: xĮŒx
+
+\noindent U+01CD: xĮx
+
+\noindent U+01CE: xĮŽx
+
+\noindent U+01CF: xĮx
+
+\noindent U+01D0: xĮx
+
+\noindent U+01D1: xĮ‘x
+
+\noindent U+01D2: xĮ’x
+
+\noindent U+01D3: xĮ“x
+
+\noindent U+01D4: xĮ”x
+
+\noindent U+01D5: xĮ•x
+
+\noindent U+01D6: xĮ–x
+
+\noindent U+01D7: xĮ—x
+
+\noindent U+01D8: xĮ˜x
+
+\noindent U+01D9: xĮ™x
+
+\noindent U+01DA: xĮšx
+
+\noindent U+01DB: xĮ›x
+
+\noindent U+01DC: xĮœx
+
+\noindent U+01DD: xĮx
+
+\noindent U+01DE: xĮžx
+
+\noindent U+01DF: xĮŸx
+
+\noindent U+01E0: xĮ x
+
+\noindent U+01E1: xĮĄx
+
+\noindent U+01E2: xĮĒx
+
+\noindent U+01E3: xĮĢx
+
+\noindent U+01E4: xĮĪx
+
+\noindent U+01E5: xĮĨx
+
+\noindent U+01E6: xĮĶx
+
+\noindent U+01E7: xĮ§x
+
+\noindent U+01E8: xĮĻx
+
+\noindent U+01E9: xĮĐx
+
+\noindent U+01EA: xĮŠx
+
+\noindent U+01EB: xĮŦx
+
+\noindent U+01EC: xĮŽx
+
+\noindent U+01ED: xĮ­x
+
+\noindent U+01EE: xĮŪx
+
+\noindent U+01EF: xĮŊx
+
+\noindent U+01F0: xĮ°x
+
+\noindent U+01F1: xĮąx
+
+\noindent U+01F2: xĮēx
+
+\noindent U+01F3: xĮģx
+
+\noindent U+01F4: xĮīx
+
+\noindent U+01F5: xĮĩx
+
+\noindent U+01F6: xĮķx
+
+\noindent U+01F7: xĮ·x
+
+\noindent U+01F8: xĮļx
+
+\noindent U+01F9: xĮđx
+
+\noindent U+01FA: xĮšx
+
+\noindent U+01FB: xĮŧx
+
+\noindent U+01FC: xĮžx
+
+\noindent U+01FD: xĮ―x
+
+\noindent U+01FE: xĮūx
+
+\noindent U+01FF: xĮŋx
+
+\noindent U+0200: xȀx
+
+\noindent U+0201: xȁx
+
+\noindent U+0202: xȂx
+
+\noindent U+0203: xȃx
+
+\noindent U+0204: xȄx
+
+\noindent U+0205: xȅx
+
+\noindent U+0206: xȆx
+
+\noindent U+0207: xȇx
+
+\noindent U+0208: xȈx
+
+\noindent U+0209: xȉx
+
+\noindent U+020A: xȊx
+
+\noindent U+020B: xȋx
+
+\noindent U+020C: xȌx
+
+\noindent U+020D: xȍx
+
+\noindent U+020E: xȎx
+
+\noindent U+020F: xȏx
+
+\noindent U+0210: xȐx
+
+\noindent U+0211: xȑx
+
+\noindent U+0212: xȒx
+
+\noindent U+0213: xȓx
+
+\noindent U+0214: xȔx
+
+\noindent U+0215: xȕx
+
+\noindent U+0216: xȖx
+
+\noindent U+0217: xȗx
+
+\noindent U+0218: xȘx
+
+\noindent U+0219: xșx
+
+\noindent U+021A: xȚx
+
+\noindent U+021B: xțx
+
+\noindent U+021C: xȜx
+
+\noindent U+021D: xȝx
+
+\noindent U+021E: xȞx
+
+\noindent U+021F: xȟx
+
+\noindent U+0220: xČ x
+
+\noindent U+0221: xČĄx
+
+\noindent U+0222: xČĒx
+
+\noindent U+0223: xČĢx
+
+\noindent U+0224: xČĪx
+
+\noindent U+0225: xČĨx
+
+\noindent U+0226: xČĶx
+
+\noindent U+0227: xȧx
+
+\noindent U+0228: xČĻx
+
+\noindent U+0229: xČĐx
+
+\noindent U+022A: xČŠx
+
+\noindent U+022B: xČŦx
+
+\noindent U+022C: xČŽx
+
+\noindent U+022D: xČ­x
+
+\noindent U+022E: xČŪx
+
+\noindent U+022F: xČŊx
+
+\noindent U+0230: xČ°x
+
+\noindent U+0231: xČąx
+
+\noindent U+0232: xČēx
+
+\noindent U+0233: xČģx
+
+\noindent U+0234: xČīx
+
+\noindent U+0235: xČĩx
+
+\noindent U+0236: xČķx
+
+\noindent U+0237: xČ·x
+
+\noindent U+0238: xČļx
+
+\noindent U+0239: xČđx
+
+\noindent U+023A: xČšx
+
+\noindent U+023B: xČŧx
+
+\noindent U+023C: xČžx
+
+\noindent U+023D: xČ―x
+
+\noindent U+023E: xČūx
+
+\noindent U+023F: xČŋx
+
+\noindent U+0240: xɀx
+
+\noindent U+0241: xɁx
+
+\noindent U+0242: xɂx
+
+\noindent U+0243: xɃx
+
+\noindent U+0244: xɄx
+
+\noindent U+0245: xɅx
+
+\noindent U+0246: xɆx
+
+\noindent U+0247: xɇx
+
+\noindent U+0248: xɈx
+
+\noindent U+0249: xɉx
+
+\noindent U+024A: xɊx
+
+\noindent U+024B: xɋx
+
+\noindent U+024C: xɌx
+
+\noindent U+024D: xɍx
+
+\noindent U+024E: xɎx
+
+\noindent U+024F: xɏx
+
+\subsubsection*{IPA Extensions}
+
+\noindent U+0250: xɐx
+
+\noindent U+0251: xɑx
+
+\noindent U+0252: xɒx
+
+\noindent U+0253: xɓx
+
+\noindent U+0254: xɔx
+
+\noindent U+0255: xɕx
+
+\noindent U+0256: xɖx
+
+\noindent U+0257: xɗx
+
+\noindent U+0258: xɘx
+
+\noindent U+0259: xəx
+
+\noindent U+025A: xɚx
+
+\noindent U+025B: xɛx
+
+\noindent U+025C: xɜx
+
+\noindent U+025D: xɝx
+
+\noindent U+025E: xɞx
+
+\noindent U+025F: xɟx
+
+\noindent U+0260: xÉ x
+
+\noindent U+0261: xÉĄx
+
+\noindent U+0262: xÉĒx
+
+\noindent U+0263: xÉĢx
+
+\noindent U+0264: xÉĪx
+
+\noindent U+0265: xÉĨx
+
+\noindent U+0266: xÉĶx
+
+\noindent U+0267: xɧx
+
+\noindent U+0268: xÉĻx
+
+\noindent U+0269: xÉĐx
+
+\noindent U+026A: xÉŠx
+
+\noindent U+026B: xÉŦx
+
+\noindent U+026C: xÉŽx
+
+\noindent U+026D: xÉ­x
+
+\noindent U+026E: xÉŪx
+
+\noindent U+026F: xÉŊx
+
+\noindent U+0270: xÉ°x
+
+\noindent U+0271: xÉąx
+
+\noindent U+0272: xÉēx
+
+\noindent U+0273: xÉģx
+
+\noindent U+0274: xÉīx
+
+\noindent U+0275: xÉĩx
+
+\noindent U+0276: xÉķx
+
+\noindent U+0277: xÉ·x
+
+\noindent U+0278: xÉļx
+
+\noindent U+0279: xÉđx
+
+\noindent U+027A: xÉšx
+
+\noindent U+027B: xÉŧx
+
+\noindent U+027C: xÉžx
+
+\noindent U+027D: xÉ―x
+
+\noindent U+027E: xÉūx
+
+\noindent U+027F: xÉŋx
+
+\noindent U+0280: xʀx
+
+\noindent U+0281: xʁx
+
+\noindent U+0282: xʂx
+
+\noindent U+0283: xʃx
+
+\noindent U+0284: xʄx
+
+\noindent U+0285: xʅx
+
+\noindent U+0286: xʆx
+
+\noindent U+0287: xʇx
+
+\noindent U+0288: xʈx
+
+\noindent U+0289: xʉx
+
+\noindent U+028A: xʊx
+
+\noindent U+028B: xʋx
+
+\noindent U+028C: xʌx
+
+\noindent U+028D: xʍx
+
+\noindent U+028E: xʎx
+
+\noindent U+028F: xʏx
+
+\noindent U+0290: xʐx
+
+\noindent U+0291: xʑx
+
+\noindent U+0292: xʒx
+
+\noindent U+0293: xʓx
+
+\noindent U+0294: xʔx
+
+\noindent U+0295: xʕx
+
+\noindent U+0296: xʖx
+
+\noindent U+0297: xʗx
+
+\noindent U+0298: xʘx
+
+\noindent U+0299: xʙx
+
+\noindent U+029A: xʚx
+
+\noindent U+029B: xʛx
+
+\noindent U+029C: xʜx
+
+\noindent U+029D: xʝx
+
+\noindent U+029E: xʞx
+
+\noindent U+029F: xʟx
+
+\noindent U+02A0: xĘ x
+
+\noindent U+02A1: xĘĄx
+
+\noindent U+02A2: xĘĒx
+
+\noindent U+02A3: xĘĢx
+
+\noindent U+02A4: xĘĪx
+
+\noindent U+02A5: xĘĨx
+
+\noindent U+02A6: xĘĶx
+
+\noindent U+02A7: xʧx
+
+\noindent U+02A8: xĘĻx
+
+\noindent U+02A9: xĘĐx
+
+\noindent U+02AA: xĘŠx
+
+\noindent U+02AB: xĘŦx
+
+\noindent U+02AC: xĘŽx
+
+\noindent U+02AD: xĘ­x
+
+\noindent U+02AE: xĘŪx
+
+\noindent U+02AF: xĘŊx
+
+\subsubsection*{Spacing Modifier Letters}
+
+\noindent U+02B0: xĘ°x
+
+\noindent U+02B1: xĘąx
+
+\noindent U+02B2: xĘēx
+
+\noindent U+02B3: xĘģx
+
+\noindent U+02B4: xĘīx
+
+\noindent U+02B5: xĘĩx
+
+\noindent U+02B6: xĘķx
+
+\noindent U+02B7: xĘ·x
+
+\noindent U+02B8: xĘļx
+
+\noindent U+02B9: xĘđx
+
+\noindent U+02BA: xĘšx
+
+\noindent U+02BB: xĘŧx
+
+\noindent U+02BC: xĘžx
+
+\noindent U+02BD: xĘ―x
+
+\noindent U+02BE: xĘūx
+
+\noindent U+02BF: xĘŋx
+
+\noindent U+02C0: xˀx
+
+\noindent U+02C1: xˁx
+
+\noindent U+02C2: x˂x
+
+\noindent U+02C3: x˃x
+
+\noindent U+02C4: x˄x
+
+\noindent U+02C5: x˅x
+
+\noindent U+02C6: xˆx
+
+\noindent U+02C7: xˇx
+
+\noindent U+02C8: xˈx
+
+\noindent U+02C9: xˉx
+
+\noindent U+02CA: xˊx
+
+\noindent U+02CB: xˋx
+
+\noindent U+02CC: xˌx
+
+\noindent U+02CD: xˍx
+
+\noindent U+02CE: xˎx
+
+\noindent U+02CF: xˏx
+
+\noindent U+02D0: xːx
+
+\noindent U+02D1: xˑx
+
+\noindent U+02D2: x˒x
+
+\noindent U+02D3: x˓x
+
+\noindent U+02D4: x˔x
+
+\noindent U+02D5: x˕x
+
+\noindent U+02D6: x˖x
+
+\noindent U+02D7: x˗x
+
+\noindent U+02D8: x˘x
+
+\noindent U+02D9: x˙x
+
+\noindent U+02DA: x˚x
+
+\noindent U+02DB: x˛x
+
+\noindent U+02DC: x˜x
+
+\noindent U+02DD: x˝x
+
+\noindent U+02DE: x˞x
+
+\noindent U+02DF: x˟x
+
+\noindent U+02E0: xË x
+
+\noindent U+02E1: xËĄx
+
+\noindent U+02E2: xËĒx
+
+\noindent U+02E3: xËĢx
+
+\noindent U+02E4: xËĪx
+
+\noindent U+02E5: xËĨx
+
+\noindent U+02E6: xËĶx
+
+\noindent U+02E7: x˧x
+
+\noindent U+02E8: xËĻx
+
+\noindent U+02E9: xËĐx
+
+\noindent U+02EA: xËŠx
+
+\noindent U+02EB: xËŦx
+
+\noindent U+02EC: xËŽx
+
+\noindent U+02ED: xË­x
+
+\noindent U+02EE: xËŪx
+
+\noindent U+02EF: xËŊx
+
+\noindent U+02F0: xË°x
+
+\noindent U+02F1: xËąx
+
+\noindent U+02F2: xËēx
+
+\noindent U+02F3: xËģx
+
+\noindent U+02F4: xËīx
+
+\noindent U+02F5: xËĩx
+
+\noindent U+02F6: xËķx
+
+\noindent U+02F7: xË·x
+
+\noindent U+02F8: xËļx
+
+\noindent U+02F9: xËđx
+
+\noindent U+02FA: xËšx
+
+\noindent U+02FB: xËŧx
+
+\noindent U+02FC: xËžx
+
+\noindent U+02FD: xË―x
+
+\noindent U+02FE: xËūx
+
+\noindent U+02FF: xËŋx
+
+\subsubsection*{General Punctuation}
+
+\noindent U+2000: x x
+
+\noindent U+2001: x x
+
+\noindent U+2002: x x
+
+\noindent U+2003: x x
+
+\noindent U+2004: x x
+
+\noindent U+2005: x x
+
+\noindent U+2006: x x
+
+\noindent U+2007: x x
+
+\noindent U+2008: x x
+
+\noindent U+2009: x x
+
+\noindent U+200A: x x
+
+\noindent U+200B: x​x
+
+\noindent U+200C: x‌x
+
+\noindent U+200D: x‍x
+
+\noindent U+200E: x‎x
+
+\noindent U+200F: x‏x
+
+\noindent U+2010: x‐x
+
+\noindent U+2011: x‑x
+
+\noindent U+2012: x‒x
+
+\noindent U+2013: x–x
+
+\noindent U+2014: x—x
+
+\noindent U+2015: x―x
+
+\noindent U+2016: x‖x
+
+\noindent U+2017: x‗x
+
+\noindent U+2018: x‘x
+
+\noindent U+2019: x’x
+
+\noindent U+201A: x‚x
+
+\noindent U+201B: x‛x
+
+\noindent U+201C: x“x
+
+\noindent U+201D: x”x
+
+\noindent U+201E: x„x
+
+\noindent U+201F: x‟x
+
+\noindent U+2020: x†x
+
+\noindent U+2021: x‡x
+
+\noindent U+2022: xâ€Ēx
+
+\noindent U+2023: xâ€Ģx
+
+\noindent U+2024: xâ€Īx
+
+\noindent U+2025: xâ€Ĩx
+
+\noindent U+2026: xâ€Ķx
+
+\noindent U+2027: x‧x
+
+\noindent U+2028: xâ€Ļx
+
+\noindent U+2029: xâ€Đx
+
+\noindent U+202A: x
x
+
+\noindent U+202B: xâ€Ŧx
+
+\noindent U+202C: x‮x
+
+\noindent U+202D: x‭x
+
+\noindent U+202E: xâ€Ūx
+
+\noindent U+202F: xâ€Ŋx
+
+\noindent U+2030: x‰x
+
+\noindent U+2031: x‱x
+
+\noindent U+2032: xâ€ēx
+
+\noindent U+2033: xâ€ģx
+
+\noindent U+2034: xâ€īx
+
+\noindent U+2035: xâ€ĩx
+
+\noindent U+2036: xâ€ķx
+
+\noindent U+2037: x‷x
+
+\noindent U+2038: xâ€ļx
+
+\noindent U+2039: xâ€đx
+
+\noindent U+203A: x‹x
+
+\noindent U+203B: xâ€ŧx
+
+\noindent U+203C: x‾x
+
+\noindent U+203D: xâ€―x
+
+\noindent U+203E: xâ€ūx
+
+\noindent U+203F: xâ€ŋx
+
+\noindent U+2040: x⁀x
+
+\noindent U+2041: x⁁x
+
+\noindent U+2042: x⁂x
+
+\noindent U+2043: x⁃x
+
+\noindent U+2044: x⁄x
+
+\noindent U+2045: x⁅x
+
+\noindent U+2046: x⁆x
+
+\noindent U+2047: x⁇x
+
+\noindent U+2048: x⁈x
+
+\noindent U+2049: x⁉x
+
+\noindent U+204A: x⁊x
+
+\noindent U+204B: x⁋x
+
+\noindent U+204C: x⁌x
+
+\noindent U+204D: x⁍x
+
+\noindent U+204E: x⁎x
+
+\noindent U+204F: x⁏x
+
+\noindent U+2050: x⁐x
+
+\noindent U+2051: x⁑x
+
+\noindent U+2052: x⁒x
+
+\noindent U+2053: x⁓x
+
+\noindent U+2054: x⁔x
+
+\noindent U+2055: x⁕x
+
+\noindent U+2056: x⁖x
+
+\noindent U+2057: x⁗x
+
+\noindent U+2058: x⁘x
+
+\noindent U+2059: x⁙x
+
+\noindent U+205A: x⁚x
+
+\noindent U+205B: x⁛x
+
+\noindent U+205C: x⁜x
+
+\noindent U+205D: x⁝x
+
+\noindent U+205E: x⁞x
+
+\noindent U+205F: x x
+
+\noindent U+2060: x⁠x
+
+\noindent U+2061: x⁥x
+
+\noindent U+2062: xâĒx
+
+\noindent U+2063: xâĢx
+
+\noindent U+2064: xâĪx
+
+\noindent U+2065: xâĨx
+
+\noindent U+2066: xâĶx
+
+\noindent U+2067: x⁧x
+
+\noindent U+2068: xâĻx
+
+\noindent U+2069: xâĐx
+
+\noindent U+206A: x⁊x
+
+\noindent U+206B: xâŦx
+
+\noindent U+206C: x⁎x
+
+\noindent U+206D: xx
+
+\noindent U+206E: xâŪx
+
+\noindent U+206F: xâŊx
+
+\subsubsection*{Currency Symbols}
+
+\noindent U+20A0: x₠x
+
+\noindent U+20A1: x₡x
+
+\noindent U+20A2: xâ‚Ēx
+
+\noindent U+20A3: xâ‚Ģx
+
+\noindent U+20A4: xâ‚Īx
+
+\noindent U+20A5: xâ‚Ĩx
+
+\noindent U+20A6: xâ‚Ķx
+
+\noindent U+20A7: x₧x
+
+\noindent U+20A8: xâ‚Ļx
+
+\noindent U+20A9: xâ‚Đx
+
+\noindent U+20AA: x₩x
+
+\noindent U+20AB: xâ‚Ŧx
+
+\noindent U+20AC: x₮x
+
+\noindent U+20AD: x₭x
+
+\noindent U+20AE: xâ‚Ūx
+
+\noindent U+20AF: xâ‚Ŋx
+
+\noindent U+20B0: x₰x
+
+\noindent U+20B1: x₱x
+
+\noindent U+20B2: xâ‚ēx
+
+\noindent U+20B3: xâ‚ģx
+
+\noindent U+20B4: xâ‚īx
+
+\noindent U+20B5: xâ‚ĩx
+
+\noindent U+20B6: xâ‚ķx
+
+\noindent U+20B7: x₷x
+
+\noindent U+20B8: xâ‚ļx
+
+\noindent U+20B9: xâ‚đx
+
+\noindent U+20BA: x₹x
+
+\noindent U+20BB: xâ‚ŧx
+
+\noindent U+20BC: x₾x
+
+\noindent U+20BD: xâ‚―x
+
+\noindent U+20BE: xâ‚ūx
+
+\noindent U+20BF: xâ‚ŋx
+
+\noindent U+20C0: x⃀x
+
+\noindent U+20C1: x⃁x
+
+\noindent U+20C2: x⃂x
+
+\noindent U+20C3: x⃃x
+
+\noindent U+20C4: x⃄x
+
+\noindent U+20C5: x⃅x
+
+\noindent U+20C6: x⃆x
+
+\noindent U+20C7: x⃇x
+
+\noindent U+20C8: x⃈x
+
+\noindent U+20C9: x⃉x
+
+\noindent U+20CA: x⃊x
+
+\noindent U+20CB: x⃋x
+
+\noindent U+20CC: x⃌x
+
+\noindent U+20CD: x⃍x
+
+\noindent U+20CE: x⃎x
+
+\noindent U+20CF: x⃏x
+
+\subsubsection*{Letterlike Symbols}
+
+\noindent U+2100: x℀x
+
+\noindent U+2101: x℁x
+
+\noindent U+2102: xℂx
+
+\noindent U+2103: x℃x
+
+\noindent U+2104: x℄x
+
+\noindent U+2105: x℅x
+
+\noindent U+2106: x℆x
+
+\noindent U+2107: xℇx
+
+\noindent U+2108: x℈x
+
+\noindent U+2109: x℉x
+
+\noindent U+210A: xℊx
+
+\noindent U+210B: xℋx
+
+\noindent U+210C: xℌx
+
+\noindent U+210D: xℍx
+
+\noindent U+210E: xℎx
+
+\noindent U+210F: xℏx
+
+\noindent U+2110: xℐx
+
+\noindent U+2111: xℑx
+
+\noindent U+2112: xℒx
+
+\noindent U+2113: xℓx
+
+\noindent U+2114: x℔x
+
+\noindent U+2115: xℕx
+
+\noindent U+2116: x№x
+
+\noindent U+2117: x℗x
+
+\noindent U+2118: x℘x
+
+\noindent U+2119: xℙx
+
+\noindent U+211A: xℚx
+
+\noindent U+211B: xℛx
+
+\noindent U+211C: xℜx
+
+\noindent U+211D: xℝx
+
+\noindent U+211E: x℞x
+
+\noindent U+211F: x℟x
+
+\noindent U+2120: x℠x
+
+\noindent U+2121: x℡x
+
+\noindent U+2122: xâ„Ēx
+
+\noindent U+2123: xâ„Ģx
+
+\noindent U+2124: xâ„Īx
+
+\noindent U+2125: xâ„Ĩx
+
+\noindent U+2126: xâ„Ķx
+
+\noindent U+2127: x℧x
+
+\noindent U+2128: xâ„Ļx
+
+\noindent U+2129: xâ„Đx
+
+\noindent U+212A: x℩x
+
+\noindent U+212B: xâ„Ŧx
+
+\noindent U+212C: x℮x
+
+\noindent U+212D: xℭx
+
+\noindent U+212E: xâ„Ūx
+
+\noindent U+212F: xâ„Ŋx
+
+\noindent U+2130: xℰx
+
+\noindent U+2131: xℱx
+
+\noindent U+2132: xâ„ēx
+
+\noindent U+2133: xâ„ģx
+
+\noindent U+2134: xâ„īx
+
+\noindent U+2135: xâ„ĩx
+
+\noindent U+2136: xâ„ķx
+
+\noindent U+2137: xℷx
+
+\noindent U+2138: xâ„ļx
+
+\noindent U+2139: xâ„đx
+
+\noindent U+213A: xℹx
+
+\noindent U+213B: xâ„ŧx
+
+\noindent U+213C: xℾx
+
+\noindent U+213D: xâ„―x
+
+\noindent U+213E: xâ„ūx
+
+\noindent U+213F: xâ„ŋx
+
+\noindent U+2140: x⅀x
+
+\noindent U+2141: x⅁x
+
+\noindent U+2142: x⅂x
+
+\noindent U+2143: x⅃x
+
+\noindent U+2144: x⅄x
+
+\noindent U+2145: xⅅx
+
+\noindent U+2146: xⅆx
+
+\noindent U+2147: xⅇx
+
+\noindent U+2148: xⅈx
+
+\noindent U+2149: xⅉx
+
+\noindent U+214A: x⅊x
+
+\noindent U+214B: x⅋x
+
+\noindent U+214C: x⅌x
+
+\noindent U+214D: x⅍x
+
+\noindent U+214E: xⅎx
+
+\noindent U+214F: x⅏x
+
+\subsubsection*{Number Forms}
+
+\noindent U+2150: x⅐x
+
+\noindent U+2151: x⅑x
+
+\noindent U+2152: x⅒x
+
+\noindent U+2153: x⅓x
+
+\noindent U+2154: x⅔x
+
+\noindent U+2155: x⅕x
+
+\noindent U+2156: x⅖x
+
+\noindent U+2157: x⅗x
+
+\noindent U+2158: x⅘x
+
+\noindent U+2159: x⅙x
+
+\noindent U+215A: x⅚x
+
+\noindent U+215B: x⅛x
+
+\noindent U+215C: x⅜x
+
+\noindent U+215D: x⅝x
+
+\noindent U+215E: x⅞x
+
+\noindent U+215F: x⅟x
+
+\noindent U+2160: xⅠx
+
+\noindent U+2161: xⅡx
+
+\noindent U+2162: xâ…Ēx
+
+\noindent U+2163: xâ…Ģx
+
+\noindent U+2164: xâ…Īx
+
+\noindent U+2165: xâ…Ĩx
+
+\noindent U+2166: xâ…Ķx
+
+\noindent U+2167: xⅧx
+
+\noindent U+2168: xâ…Ļx
+
+\noindent U+2169: xâ…Đx
+
+\noindent U+216A: xⅩx
+
+\noindent U+216B: xâ…Ŧx
+
+\noindent U+216C: xⅮx
+
+\noindent U+216D: xⅭx
+
+\noindent U+216E: xâ…Ūx
+
+\noindent U+216F: xâ…Ŋx
+
+\noindent U+2170: xⅰx
+
+\noindent U+2171: xⅱx
+
+\noindent U+2172: xâ…ēx
+
+\noindent U+2173: xâ…ģx
+
+\noindent U+2174: xâ…īx
+
+\noindent U+2175: xâ…ĩx
+
+\noindent U+2176: xâ…ķx
+
+\noindent U+2177: xⅷx
+
+\noindent U+2178: xâ…ļx
+
+\noindent U+2179: xâ…đx
+
+\noindent U+217A: xⅹx
+
+\noindent U+217B: xâ…ŧx
+
+\noindent U+217C: xⅾx
+
+\noindent U+217D: xâ…―x
+
+\noindent U+217E: xâ…ūx
+
+\noindent U+217F: xâ…ŋx
+
+\noindent U+2180: xↀx
+
+\noindent U+2181: xↁx
+
+\noindent U+2182: xↂx
+
+\noindent U+2183: xↃx
+
+\noindent U+2184: xↄx
+
+\noindent U+2185: xↅx
+
+\noindent U+2186: xↆx
+
+\noindent U+2187: xↇx
+
+\noindent U+2188: xↈx
+
+\noindent U+2189: x↉x
+
+\noindent U+218A: x↊x
+
+\noindent U+218B: x↋x
+
+\noindent U+218C: x↌x
+
+\noindent U+218D: x↍x
+
+\noindent U+218E: x↎x
+
+\noindent U+218F: x↏x
+
+\subsubsection*{Alphabetic Presentation Forms}
+
+\noindent U+FB00: xx
+
+\noindent U+FB01: xx
+
+\noindent U+FB02: xx
+
+\noindent U+FB03: xx
+
+\noindent U+FB04: xx
+
+\noindent U+FB05: xx
+
+\noindent U+FB06: xx
+
+\noindent U+FB07: xx
+
+\noindent U+FB08: xx
+
+\noindent U+FB09: xx
+
+\noindent U+FB0A: xx
+
+\noindent U+FB0B: xx
+
+\noindent U+FB0C: xx
+
+\noindent U+FB0D: xx
+
+\noindent U+FB0E: xx
+
+\noindent U+FB0F: xx
+
+\noindent U+FB10: xx
+
+\noindent U+FB11: xx
+
+\noindent U+FB12: xx
+
+\noindent U+FB13: xx
+
+\noindent U+FB14: xx
+
+\noindent U+FB15: xx
+
+\noindent U+FB16: xx
+
+\noindent U+FB17: xx
+
+\noindent U+FB18: xx
+
+\noindent U+FB19: xx
+
+\noindent U+FB1A: xx
+
+\noindent U+FB1B: xx
+
+\noindent U+FB1C: xx
+
+\noindent U+FB1D: xx
+
+\noindent U+FB1E: xx
+
+\noindent U+FB1F: xx
+
+\noindent U+FB20: xx
+
+\noindent U+FB21: xïŽĄx
+
+\noindent U+FB22: xïŽĒx
+
+\noindent U+FB23: xïŽĢx
+
+\noindent U+FB24: xïŽĪx
+
+\noindent U+FB25: xïŽĨx
+
+\noindent U+FB26: xïŽĶx
+
+\noindent U+FB27: xx
+
+\noindent U+FB28: xïŽĻx
+
+\noindent U+FB29: xïŽĐx
+
+\noindent U+FB2A: xx
+
+\noindent U+FB2B: xïŽŦx
+
+\noindent U+FB2C: xx
+
+\noindent U+FB2D: xx
+
+\noindent U+FB2E: xïŽŪx
+
+\noindent U+FB2F: xïŽŊx
+
+\noindent U+FB30: xx
+
+\noindent U+FB31: xïŽąx
+
+\noindent U+FB32: xïŽēx
+
+\noindent U+FB33: xïŽģx
+
+\noindent U+FB34: xïŽīx
+
+\noindent U+FB35: xïŽĩx
+
+\noindent U+FB36: xïŽķx
+
+\noindent U+FB37: xx
+
+\noindent U+FB38: xïŽļx
+
+\noindent U+FB39: xïŽđx
+
+\noindent U+FB3A: xx
+
+\noindent U+FB3B: xïŽŧx
+
+\noindent U+FB3C: xx
+
+\noindent U+FB3D: xïŽ―x
+
+\noindent U+FB3E: xïŽūx
+
+\noindent U+FB3F: xïŽŋx
+
+\noindent U+FB40: xנּx
+
+\noindent U+FB41: xסּx
+
+\noindent U+FB42: x﭂x
+
+\noindent U+FB43: xףּx
+
+\noindent U+FB44: xפּx
+
+\noindent U+FB45: x﭅x
+
+\noindent U+FB46: xצּx
+
+\noindent U+FB47: xקּx
+
+\noindent U+FB48: xרּx
+
+\noindent U+FB49: xשּx
+
+\noindent U+FB4A: xתּx
+
+\noindent U+FB4B: xוֹx
+
+\noindent U+FB4C: xבֿx
+
+\noindent U+FB4D: xכֿx
+
+\noindent U+FB4E: xפֿx
+
+\noindent U+FB4F: xﭏx
+
+\end{document}
diff --git a/support/utf2any/test/tst.utf7 b/support/utf2any/test/tst.utf7
new file mode 100644
index 0000000000..f18b9eecea
--- /dev/null
+++ b/support/utf2any/test/tst.utf7
@@ -0,0 +1,1185 @@
+Controls and Basic Latin
+
+U+-0000: +AHgAAAB4-
+U+-0001: +AHgAAQB4-
+U+-0002: +AHgAAgB4-
+U+-0003: +AHgAAwB4-
+U+-0004: +AHgABAB4-
+U+-0005: +AHgABQB4-
+U+-0006: +AHgABgB4-
+U+-0007: +AHgABwB4-
+U+-0008: +AHgACAB4-
+U+-0009: +AHgACQB4-
+U+-000A: +AHgACgB4-
+U+-000B: +AHgACwB4-
+U+-000C: +AHgADAB4-
+U+-000D: +AHgADQB4-
+U+-000E: +AHgADgB4-
+U+-000F: +AHgADwB4-
+U+-0010: +AHgAEAB4-
+U+-0011: +AHgAEQB4-
+U+-0012: +AHgAEgB4-
+U+-0013: +AHgAEwB4-
+U+-0014: +AHgAFAB4-
+U+-0015: +AHgAFQB4-
+U+-0016: +AHgAFgB4-
+U+-0017: +AHgAFwB4-
+U+-0018: +AHgAGAB4-
+U+-0019: +AHgAGQB4-
+U+-001A: +AHgAGgB4-
+U+-001B: +AHgAGwB4-
+U+-001C: +AHgAHAB4-
+U+-001D: +AHgAHQB4-
+U+-001E: +AHgAHgB4-
+U+-001F: +AHgAHwB4-
+U+-0020: +AHgAIAB4-
+U+-0021: +AHgAIQB4-
+U+-0022: +AHgAIgB4-
+U+-0023: +AHgAIwB4-
+U+-0024: +AHgAJAB4-
+U+-0025: +AHgAJQB4-
+U+-0026: +AHgAJgB4-
+U+-0027: +AHgAJwB4-
+U+-0028: +AHgAKAB4-
+U+-0029: +AHgAKQB4-
+U+-002A: +AHgAKgB4-
+U+-002B: +AHgAKwB4-
+U+-002C: +AHgALAB4-
+U+-002D: +AHgALQB4-
+U+-002E: +AHgALgB4-
+U+-002F: +AHgALwB4-
+U+-0030: +AHgAMAB4-
+U+-0031: +AHgAMQB4-
+U+-0032: +AHgAMgB4-
+U+-0033: +AHgAMwB4-
+U+-0034: +AHgANAB4-
+U+-0035: +AHgANQB4-
+U+-0036: +AHgANgB4-
+U+-0037: +AHgANwB4-
+U+-0038: +AHgAOAB4-
+U+-0039: +AHgAOQB4-
+U+-003A: +AHgAOgB4-
+U+-003B: +AHgAOwB4-
+U+-003C: +AHgAPAB4-
+U+-003D: +AHgAPQB4-
+U+-003E: +AHgAPgB4-
+U+-003F: +AHgAPwB4-
+U+-0040: +AHgAQAB4-
+U+-0041: +AHgAQQB4-
+U+-0042: +AHgAQgB4-
+U+-0043: +AHgAQwB4-
+U+-0044: +AHgARAB4-
+U+-0045: +AHgARQB4-
+U+-0046: +AHgARgB4-
+U+-0047: +AHgARwB4-
+U+-0048: +AHgASAB4-
+U+-0049: +AHgASQB4-
+U+-004A: +AHgASgB4-
+U+-004B: +AHgASwB4-
+U+-004C: +AHgATAB4-
+U+-004D: +AHgATQB4-
+U+-004E: +AHgATgB4-
+U+-004F: +AHgATwB4-
+U+-0050: +AHgAUAB4-
+U+-0051: +AHgAUQB4-
+U+-0052: +AHgAUgB4-
+U+-0053: +AHgAUwB4-
+U+-0054: +AHgAVAB4-
+U+-0055: +AHgAVQB4-
+U+-0056: +AHgAVgB4-
+U+-0057: +AHgAVwB4-
+U+-0058: +AHgAWAB4-
+U+-0059: +AHgAWQB4-
+U+-005A: +AHgAWgB4-
+U+-005B: +AHgAWwB4-
+U+-005C: +AHgAXAB4-
+U+-005D: +AHgAXQB4-
+U+-005E: +AHgAXgB4-
+U+-005F: +AHgAXwB4-
+U+-0060: +AHgAYAB4-
+U+-0061: +AHgAYQB4-
+U+-0062: +AHgAYgB4-
+U+-0063: +AHgAYwB4-
+U+-0064: +AHgAZAB4-
+U+-0065: +AHgAZQB4-
+U+-0066: +AHgAZgB4-
+U+-0067: +AHgAZwB4-
+U+-0068: +AHgAaAB4-
+U+-0069: +AHgAaQB4-
+U+-006A: +AHgAagB4-
+U+-006B: +AHgAawB4-
+U+-006C: +AHgAbAB4-
+U+-006D: +AHgAbQB4-
+U+-006E: +AHgAbgB4-
+U+-006F: +AHgAbwB4-
+U+-0070: +AHgAcAB4-
+U+-0071: +AHgAcQB4-
+U+-0072: +AHgAcgB4-
+U+-0073: +AHgAcwB4-
+U+-0074: +AHgAdAB4-
+U+-0075: +AHgAdQB4-
+U+-0076: +AHgAdgB4-
+U+-0077: +AHgAdwB4-
+U+-0078: +AHgAeAB4-
+U+-0079: +AHgAeQB4-
+U+-007A: +AHgAegB4-
+U+-007B: +AHgAewB4-
+U+-007C: +AHgAfAB4-
+U+-007D: +AHgAfQB4-
+U+-007E: +AHgAfgB4-
+U+-007F: +AHgAfwB4-
+
+Controls and Latin-1 Supplement
+
+U+-0080: +AHgAgAB4-
+U+-0081: +AHgAgQB4-
+U+-0082: +AHgAggB4-
+U+-0083: +AHgAgwB4-
+U+-0084: +AHgAhAB4-
+U+-0085: +AHgAhQB4-
+U+-0086: +AHgAhgB4-
+U+-0087: +AHgAhwB4-
+U+-0088: +AHgAiAB4-
+U+-0089: +AHgAiQB4-
+U+-008A: +AHgAigB4-
+U+-008B: +AHgAiwB4-
+U+-008C: +AHgAjAB4-
+U+-008D: +AHgAjQB4-
+U+-008E: +AHgAjgB4-
+U+-008F: +AHgAjwB4-
+U+-0090: +AHgAkAB4-
+U+-0091: +AHgAkQB4-
+U+-0092: +AHgAkgB4-
+U+-0093: +AHgAkwB4-
+U+-0094: +AHgAlAB4-
+U+-0095: +AHgAlQB4-
+U+-0096: +AHgAlgB4-
+U+-0097: +AHgAlwB4-
+U+-0098: +AHgAmAB4-
+U+-0099: +AHgAmQB4-
+U+-009A: +AHgAmgB4-
+U+-009B: +AHgAmwB4-
+U+-009C: +AHgAnAB4-
+U+-009D: +AHgAnQB4-
+U+-009E: +AHgAngB4-
+U+-009F: +AHgAnwB4-
+U+-00A0: +AHgAoAB4-
+U+-00A1: +AHgAoQB4-
+U+-00A2: +AHgAogB4-
+U+-00A3: +AHgAowB4-
+U+-00A4: +AHgApAB4-
+U+-00A5: +AHgApQB4-
+U+-00A6: +AHgApgB4-
+U+-00A7: +AHgApwB4-
+U+-00A8: +AHgAqAB4-
+U+-00A9: +AHgAqQB4-
+U+-00AA: +AHgAqgB4-
+U+-00AB: +AHgAqwB4-
+U+-00AC: +AHgArAB4-
+U+-00AD: +AHgArQB4-
+U+-00AE: +AHgArgB4-
+U+-00AF: +AHgArwB4-
+U+-00B0: +AHgAsAB4-
+U+-00B1: +AHgAsQB4-
+U+-00B2: +AHgAsgB4-
+U+-00B3: +AHgAswB4-
+U+-00B4: +AHgAtAB4-
+U+-00B5: +AHgAtQB4-
+U+-00B6: +AHgAtgB4-
+U+-00B7: +AHgAtwB4-
+U+-00B8: +AHgAuAB4-
+U+-00B9: +AHgAuQB4-
+U+-00BA: +AHgAugB4-
+U+-00BB: +AHgAuwB4-
+U+-00BC: +AHgAvAB4-
+U+-00BD: +AHgAvQB4-
+U+-00BE: +AHgAvgB4-
+U+-00BF: +AHgAvwB4-
+U+-00C0: +AHgAwAB4-
+U+-00C1: +AHgAwQB4-
+U+-00C2: +AHgAwgB4-
+U+-00C3: +AHgAwwB4-
+U+-00C4: +AHgAxAB4-
+U+-00C5: +AHgAxQB4-
+U+-00C6: +AHgAxgB4-
+U+-00C7: +AHgAxwB4-
+U+-00C8: +AHgAyAB4-
+U+-00C9: +AHgAyQB4-
+U+-00CA: +AHgAygB4-
+U+-00CB: +AHgAywB4-
+U+-00CC: +AHgAzAB4-
+U+-00CD: +AHgAzQB4-
+U+-00CE: +AHgAzgB4-
+U+-00CF: +AHgAzwB4-
+U+-00D0: +AHgA0AB4-
+U+-00D1: +AHgA0QB4-
+U+-00D2: +AHgA0gB4-
+U+-00D3: +AHgA0wB4-
+U+-00D4: +AHgA1AB4-
+U+-00D5: +AHgA1QB4-
+U+-00D6: +AHgA1gB4-
+U+-00D7: +AHgA1wB4-
+U+-00D8: +AHgA2AB4-
+U+-00D9: +AHgA2QB4-
+U+-00DA: +AHgA2gB4-
+U+-00DB: +AHgA2wB4-
+U+-00DC: +AHgA3AB4-
+U+-00DD: +AHgA3QB4-
+U+-00DE: +AHgA3gB4-
+U+-00DF: +AHgA3wB4-
+U+-00E0: +AHgA4AB4-
+U+-00E1: +AHgA4QB4-
+U+-00E2: +AHgA4gB4-
+U+-00E3: +AHgA4wB4-
+U+-00E4: +AHgA5AB4-
+U+-00E5: +AHgA5QB4-
+U+-00E6: +AHgA5gB4-
+U+-00E7: +AHgA5wB4-
+U+-00E8: +AHgA6AB4-
+U+-00E9: +AHgA6QB4-
+U+-00EA: +AHgA6gB4-
+U+-00EB: +AHgA6wB4-
+U+-00EC: +AHgA7AB4-
+U+-00ED: +AHgA7QB4-
+U+-00EE: +AHgA7gB4-
+U+-00EF: +AHgA7wB4-
+U+-00F0: +AHgA8AB4-
+U+-00F1: +AHgA8QB4-
+U+-00F2: +AHgA8gB4-
+U+-00F3: +AHgA8wB4-
+U+-00F4: +AHgA9AB4-
+U+-00F5: +AHgA9QB4-
+U+-00F6: +AHgA9gB4-
+U+-00F7: +AHgA9wB4-
+U+-00F8: +AHgA+AB4-
+U+-00F9: +AHgA+QB4-
+U+-00FA: +AHgA+gB4-
+U+-00FB: +AHgA+wB4-
+U+-00FC: +AHgA/AB4-
+U+-00FD: +AHgA/QB4-
+U+-00FE: +AHgA/gB4-
+U+-00FF: +AHgA/wB4-
+
+Latin Extended-A
+
+U+-0100: +AHgBAAB4-
+U+-0101: +AHgBAQB4-
+U+-0102: +AHgBAgB4-
+U+-0103: +AHgBAwB4-
+U+-0104: +AHgBBAB4-
+U+-0105: +AHgBBQB4-
+U+-0106: +AHgBBgB4-
+U+-0107: +AHgBBwB4-
+U+-0108: +AHgBCAB4-
+U+-0109: +AHgBCQB4-
+U+-010A: +AHgBCgB4-
+U+-010B: +AHgBCwB4-
+U+-010C: +AHgBDAB4-
+U+-010D: +AHgBDQB4-
+U+-010E: +AHgBDgB4-
+U+-010F: +AHgBDwB4-
+U+-0110: +AHgBEAB4-
+U+-0111: +AHgBEQB4-
+U+-0112: +AHgBEgB4-
+U+-0113: +AHgBEwB4-
+U+-0114: +AHgBFAB4-
+U+-0115: +AHgBFQB4-
+U+-0116: +AHgBFgB4-
+U+-0117: +AHgBFwB4-
+U+-0118: +AHgBGAB4-
+U+-0119: +AHgBGQB4-
+U+-011A: +AHgBGgB4-
+U+-011B: +AHgBGwB4-
+U+-011C: +AHgBHAB4-
+U+-011D: +AHgBHQB4-
+U+-011E: +AHgBHgB4-
+U+-011F: +AHgBHwB4-
+U+-0120: +AHgBIAB4-
+U+-0121: +AHgBIQB4-
+U+-0122: +AHgBIgB4-
+U+-0123: +AHgBIwB4-
+U+-0124: +AHgBJAB4-
+U+-0125: +AHgBJQB4-
+U+-0126: +AHgBJgB4-
+U+-0127: +AHgBJwB4-
+U+-0128: +AHgBKAB4-
+U+-0129: +AHgBKQB4-
+U+-012A: +AHgBKgB4-
+U+-012B: +AHgBKwB4-
+U+-012C: +AHgBLAB4-
+U+-012D: +AHgBLQB4-
+U+-012E: +AHgBLgB4-
+U+-012F: +AHgBLwB4-
+U+-0130: +AHgBMAB4-
+U+-0131: +AHgBMQB4-
+U+-0132: +AHgBMgB4-
+U+-0133: +AHgBMwB4-
+U+-0134: +AHgBNAB4-
+U+-0135: +AHgBNQB4-
+U+-0136: +AHgBNgB4-
+U+-0137: +AHgBNwB4-
+U+-0138: +AHgBOAB4-
+U+-0139: +AHgBOQB4-
+U+-013A: +AHgBOgB4-
+U+-013B: +AHgBOwB4-
+U+-013C: +AHgBPAB4-
+U+-013D: +AHgBPQB4-
+U+-013E: +AHgBPgB4-
+U+-013F: +AHgBPwB4-
+U+-0140: +AHgBQAB4-
+U+-0141: +AHgBQQB4-
+U+-0142: +AHgBQgB4-
+U+-0143: +AHgBQwB4-
+U+-0144: +AHgBRAB4-
+U+-0145: +AHgBRQB4-
+U+-0146: +AHgBRgB4-
+U+-0147: +AHgBRwB4-
+U+-0148: +AHgBSAB4-
+U+-0149: +AHgBSQB4-
+U+-014A: +AHgBSgB4-
+U+-014B: +AHgBSwB4-
+U+-014C: +AHgBTAB4-
+U+-014D: +AHgBTQB4-
+U+-014E: +AHgBTgB4-
+U+-014F: +AHgBTwB4-
+U+-0150: +AHgBUAB4-
+U+-0151: +AHgBUQB4-
+U+-0152: +AHgBUgB4-
+U+-0153: +AHgBUwB4-
+U+-0154: +AHgBVAB4-
+U+-0155: +AHgBVQB4-
+U+-0156: +AHgBVgB4-
+U+-0157: +AHgBVwB4-
+U+-0158: +AHgBWAB4-
+U+-0159: +AHgBWQB4-
+U+-015A: +AHgBWgB4-
+U+-015B: +AHgBWwB4-
+U+-015C: +AHgBXAB4-
+U+-015D: +AHgBXQB4-
+U+-015E: +AHgBXgB4-
+U+-015F: +AHgBXwB4-
+U+-0160: +AHgBYAB4-
+U+-0161: +AHgBYQB4-
+U+-0162: +AHgBYgB4-
+U+-0163: +AHgBYwB4-
+U+-0164: +AHgBZAB4-
+U+-0165: +AHgBZQB4-
+U+-0166: +AHgBZgB4-
+U+-0167: +AHgBZwB4-
+U+-0168: +AHgBaAB4-
+U+-0169: +AHgBaQB4-
+U+-016A: +AHgBagB4-
+U+-016B: +AHgBawB4-
+U+-016C: +AHgBbAB4-
+U+-016D: +AHgBbQB4-
+U+-016E: +AHgBbgB4-
+U+-016F: +AHgBbwB4-
+U+-0170: +AHgBcAB4-
+U+-0171: +AHgBcQB4-
+U+-0172: +AHgBcgB4-
+U+-0173: +AHgBcwB4-
+U+-0174: +AHgBdAB4-
+U+-0175: +AHgBdQB4-
+U+-0176: +AHgBdgB4-
+U+-0177: +AHgBdwB4-
+U+-0178: +AHgBeAB4-
+U+-0179: +AHgBeQB4-
+U+-017A: +AHgBegB4-
+U+-017B: +AHgBewB4-
+U+-017C: +AHgBfAB4-
+U+-017D: +AHgBfQB4-
+U+-017E: +AHgBfgB4-
+U+-017F: +AHgBfwB4-
+
+Latin Extended-B
+
+U+-0180: +AHgBgAB4-
+U+-0181: +AHgBgQB4-
+U+-0182: +AHgBggB4-
+U+-0183: +AHgBgwB4-
+U+-0184: +AHgBhAB4-
+U+-0185: +AHgBhQB4-
+U+-0186: +AHgBhgB4-
+U+-0187: +AHgBhwB4-
+U+-0188: +AHgBiAB4-
+U+-0189: +AHgBiQB4-
+U+-018A: +AHgBigB4-
+U+-018B: +AHgBiwB4-
+U+-018C: +AHgBjAB4-
+U+-018D: +AHgBjQB4-
+U+-018E: +AHgBjgB4-
+U+-018F: +AHgBjwB4-
+U+-0190: +AHgBkAB4-
+U+-0191: +AHgBkQB4-
+U+-0192: +AHgBkgB4-
+U+-0193: +AHgBkwB4-
+U+-0194: +AHgBlAB4-
+U+-0195: +AHgBlQB4-
+U+-0196: +AHgBlgB4-
+U+-0197: +AHgBlwB4-
+U+-0198: +AHgBmAB4-
+U+-0199: +AHgBmQB4-
+U+-019A: +AHgBmgB4-
+U+-019B: +AHgBmwB4-
+U+-019C: +AHgBnAB4-
+U+-019D: +AHgBnQB4-
+U+-019E: +AHgBngB4-
+U+-019F: +AHgBnwB4-
+U+-01A0: +AHgBoAB4-
+U+-01A1: +AHgBoQB4-
+U+-01A2: +AHgBogB4-
+U+-01A3: +AHgBowB4-
+U+-01A4: +AHgBpAB4-
+U+-01A5: +AHgBpQB4-
+U+-01A6: +AHgBpgB4-
+U+-01A7: +AHgBpwB4-
+U+-01A8: +AHgBqAB4-
+U+-01A9: +AHgBqQB4-
+U+-01AA: +AHgBqgB4-
+U+-01AB: +AHgBqwB4-
+U+-01AC: +AHgBrAB4-
+U+-01AD: +AHgBrQB4-
+U+-01AE: +AHgBrgB4-
+U+-01AF: +AHgBrwB4-
+U+-01B0: +AHgBsAB4-
+U+-01B1: +AHgBsQB4-
+U+-01B2: +AHgBsgB4-
+U+-01B3: +AHgBswB4-
+U+-01B4: +AHgBtAB4-
+U+-01B5: +AHgBtQB4-
+U+-01B6: +AHgBtgB4-
+U+-01B7: +AHgBtwB4-
+U+-01B8: +AHgBuAB4-
+U+-01B9: +AHgBuQB4-
+U+-01BA: +AHgBugB4-
+U+-01BB: +AHgBuwB4-
+U+-01BC: +AHgBvAB4-
+U+-01BD: +AHgBvQB4-
+U+-01BE: +AHgBvgB4-
+U+-01BF: +AHgBvwB4-
+U+-01C0: +AHgBwAB4-
+U+-01C1: +AHgBwQB4-
+U+-01C2: +AHgBwgB4-
+U+-01C3: +AHgBwwB4-
+U+-01C4: +AHgBxAB4-
+U+-01C5: +AHgBxQB4-
+U+-01C6: +AHgBxgB4-
+U+-01C7: +AHgBxwB4-
+U+-01C8: +AHgByAB4-
+U+-01C9: +AHgByQB4-
+U+-01CA: +AHgBygB4-
+U+-01CB: +AHgBywB4-
+U+-01CC: +AHgBzAB4-
+U+-01CD: +AHgBzQB4-
+U+-01CE: +AHgBzgB4-
+U+-01CF: +AHgBzwB4-
+U+-01D0: +AHgB0AB4-
+U+-01D1: +AHgB0QB4-
+U+-01D2: +AHgB0gB4-
+U+-01D3: +AHgB0wB4-
+U+-01D4: +AHgB1AB4-
+U+-01D5: +AHgB1QB4-
+U+-01D6: +AHgB1gB4-
+U+-01D7: +AHgB1wB4-
+U+-01D8: +AHgB2AB4-
+U+-01D9: +AHgB2QB4-
+U+-01DA: +AHgB2gB4-
+U+-01DB: +AHgB2wB4-
+U+-01DC: +AHgB3AB4-
+U+-01DD: +AHgB3QB4-
+U+-01DE: +AHgB3gB4-
+U+-01DF: +AHgB3wB4-
+U+-01E0: +AHgB4AB4-
+U+-01E1: +AHgB4QB4-
+U+-01E2: +AHgB4gB4-
+U+-01E3: +AHgB4wB4-
+U+-01E4: +AHgB5AB4-
+U+-01E5: +AHgB5QB4-
+U+-01E6: +AHgB5gB4-
+U+-01E7: +AHgB5wB4-
+U+-01E8: +AHgB6AB4-
+U+-01E9: +AHgB6QB4-
+U+-01EA: +AHgB6gB4-
+U+-01EB: +AHgB6wB4-
+U+-01EC: +AHgB7AB4-
+U+-01ED: +AHgB7QB4-
+U+-01EE: +AHgB7gB4-
+U+-01EF: +AHgB7wB4-
+U+-01F0: +AHgB8AB4-
+U+-01F1: +AHgB8QB4-
+U+-01F2: +AHgB8gB4-
+U+-01F3: +AHgB8wB4-
+U+-01F4: +AHgB9AB4-
+U+-01F5: +AHgB9QB4-
+U+-01F6: +AHgB9gB4-
+U+-01F7: +AHgB9wB4-
+U+-01F8: +AHgB+AB4-
+U+-01F9: +AHgB+QB4-
+U+-01FA: +AHgB+gB4-
+U+-01FB: +AHgB+wB4-
+U+-01FC: +AHgB/AB4-
+U+-01FD: +AHgB/QB4-
+U+-01FE: +AHgB/gB4-
+U+-01FF: +AHgB/wB4-
+U+-0200: +AHgCAAB4-
+U+-0201: +AHgCAQB4-
+U+-0202: +AHgCAgB4-
+U+-0203: +AHgCAwB4-
+U+-0204: +AHgCBAB4-
+U+-0205: +AHgCBQB4-
+U+-0206: +AHgCBgB4-
+U+-0207: +AHgCBwB4-
+U+-0208: +AHgCCAB4-
+U+-0209: +AHgCCQB4-
+U+-020A: +AHgCCgB4-
+U+-020B: +AHgCCwB4-
+U+-020C: +AHgCDAB4-
+U+-020D: +AHgCDQB4-
+U+-020E: +AHgCDgB4-
+U+-020F: +AHgCDwB4-
+U+-0210: +AHgCEAB4-
+U+-0211: +AHgCEQB4-
+U+-0212: +AHgCEgB4-
+U+-0213: +AHgCEwB4-
+U+-0214: +AHgCFAB4-
+U+-0215: +AHgCFQB4-
+U+-0216: +AHgCFgB4-
+U+-0217: +AHgCFwB4-
+U+-0218: +AHgCGAB4-
+U+-0219: +AHgCGQB4-
+U+-021A: +AHgCGgB4-
+U+-021B: +AHgCGwB4-
+U+-021C: +AHgCHAB4-
+U+-021D: +AHgCHQB4-
+U+-021E: +AHgCHgB4-
+U+-021F: +AHgCHwB4-
+U+-0220: +AHgCIAB4-
+U+-0221: +AHgCIQB4-
+U+-0222: +AHgCIgB4-
+U+-0223: +AHgCIwB4-
+U+-0224: +AHgCJAB4-
+U+-0225: +AHgCJQB4-
+U+-0226: +AHgCJgB4-
+U+-0227: +AHgCJwB4-
+U+-0228: +AHgCKAB4-
+U+-0229: +AHgCKQB4-
+U+-022A: +AHgCKgB4-
+U+-022B: +AHgCKwB4-
+U+-022C: +AHgCLAB4-
+U+-022D: +AHgCLQB4-
+U+-022E: +AHgCLgB4-
+U+-022F: +AHgCLwB4-
+U+-0230: +AHgCMAB4-
+U+-0231: +AHgCMQB4-
+U+-0232: +AHgCMgB4-
+U+-0233: +AHgCMwB4-
+U+-0234: +AHgCNAB4-
+U+-0235: +AHgCNQB4-
+U+-0236: +AHgCNgB4-
+U+-0237: +AHgCNwB4-
+U+-0238: +AHgCOAB4-
+U+-0239: +AHgCOQB4-
+U+-023A: +AHgCOgB4-
+U+-023B: +AHgCOwB4-
+U+-023C: +AHgCPAB4-
+U+-023D: +AHgCPQB4-
+U+-023E: +AHgCPgB4-
+U+-023F: +AHgCPwB4-
+U+-0240: +AHgCQAB4-
+U+-0241: +AHgCQQB4-
+U+-0242: +AHgCQgB4-
+U+-0243: +AHgCQwB4-
+U+-0244: +AHgCRAB4-
+U+-0245: +AHgCRQB4-
+U+-0246: +AHgCRgB4-
+U+-0247: +AHgCRwB4-
+U+-0248: +AHgCSAB4-
+U+-0249: +AHgCSQB4-
+U+-024A: +AHgCSgB4-
+U+-024B: +AHgCSwB4-
+U+-024C: +AHgCTAB4-
+U+-024D: +AHgCTQB4-
+U+-024E: +AHgCTgB4-
+U+-024F: +AHgCTwB4-
+
+IPA Extensions
+
+U+-0250: +AHgCUAB4-
+U+-0251: +AHgCUQB4-
+U+-0252: +AHgCUgB4-
+U+-0253: +AHgCUwB4-
+U+-0254: +AHgCVAB4-
+U+-0255: +AHgCVQB4-
+U+-0256: +AHgCVgB4-
+U+-0257: +AHgCVwB4-
+U+-0258: +AHgCWAB4-
+U+-0259: +AHgCWQB4-
+U+-025A: +AHgCWgB4-
+U+-025B: +AHgCWwB4-
+U+-025C: +AHgCXAB4-
+U+-025D: +AHgCXQB4-
+U+-025E: +AHgCXgB4-
+U+-025F: +AHgCXwB4-
+U+-0260: +AHgCYAB4-
+U+-0261: +AHgCYQB4-
+U+-0262: +AHgCYgB4-
+U+-0263: +AHgCYwB4-
+U+-0264: +AHgCZAB4-
+U+-0265: +AHgCZQB4-
+U+-0266: +AHgCZgB4-
+U+-0267: +AHgCZwB4-
+U+-0268: +AHgCaAB4-
+U+-0269: +AHgCaQB4-
+U+-026A: +AHgCagB4-
+U+-026B: +AHgCawB4-
+U+-026C: +AHgCbAB4-
+U+-026D: +AHgCbQB4-
+U+-026E: +AHgCbgB4-
+U+-026F: +AHgCbwB4-
+U+-0270: +AHgCcAB4-
+U+-0271: +AHgCcQB4-
+U+-0272: +AHgCcgB4-
+U+-0273: +AHgCcwB4-
+U+-0274: +AHgCdAB4-
+U+-0275: +AHgCdQB4-
+U+-0276: +AHgCdgB4-
+U+-0277: +AHgCdwB4-
+U+-0278: +AHgCeAB4-
+U+-0279: +AHgCeQB4-
+U+-027A: +AHgCegB4-
+U+-027B: +AHgCewB4-
+U+-027C: +AHgCfAB4-
+U+-027D: +AHgCfQB4-
+U+-027E: +AHgCfgB4-
+U+-027F: +AHgCfwB4-
+U+-0280: +AHgCgAB4-
+U+-0281: +AHgCgQB4-
+U+-0282: +AHgCggB4-
+U+-0283: +AHgCgwB4-
+U+-0284: +AHgChAB4-
+U+-0285: +AHgChQB4-
+U+-0286: +AHgChgB4-
+U+-0287: +AHgChwB4-
+U+-0288: +AHgCiAB4-
+U+-0289: +AHgCiQB4-
+U+-028A: +AHgCigB4-
+U+-028B: +AHgCiwB4-
+U+-028C: +AHgCjAB4-
+U+-028D: +AHgCjQB4-
+U+-028E: +AHgCjgB4-
+U+-028F: +AHgCjwB4-
+U+-0290: +AHgCkAB4-
+U+-0291: +AHgCkQB4-
+U+-0292: +AHgCkgB4-
+U+-0293: +AHgCkwB4-
+U+-0294: +AHgClAB4-
+U+-0295: +AHgClQB4-
+U+-0296: +AHgClgB4-
+U+-0297: +AHgClwB4-
+U+-0298: +AHgCmAB4-
+U+-0299: +AHgCmQB4-
+U+-029A: +AHgCmgB4-
+U+-029B: +AHgCmwB4-
+U+-029C: +AHgCnAB4-
+U+-029D: +AHgCnQB4-
+U+-029E: +AHgCngB4-
+U+-029F: +AHgCnwB4-
+U+-02A0: +AHgCoAB4-
+U+-02A1: +AHgCoQB4-
+U+-02A2: +AHgCogB4-
+U+-02A3: +AHgCowB4-
+U+-02A4: +AHgCpAB4-
+U+-02A5: +AHgCpQB4-
+U+-02A6: +AHgCpgB4-
+U+-02A7: +AHgCpwB4-
+U+-02A8: +AHgCqAB4-
+U+-02A9: +AHgCqQB4-
+U+-02AA: +AHgCqgB4-
+U+-02AB: +AHgCqwB4-
+U+-02AC: +AHgCrAB4-
+U+-02AD: +AHgCrQB4-
+U+-02AE: +AHgCrgB4-
+U+-02AF: +AHgCrwB4-
+
+Spacing Modifier Letters
+
+U+-02B0: +AHgCsAB4-
+U+-02B1: +AHgCsQB4-
+U+-02B2: +AHgCsgB4-
+U+-02B3: +AHgCswB4-
+U+-02B4: +AHgCtAB4-
+U+-02B5: +AHgCtQB4-
+U+-02B6: +AHgCtgB4-
+U+-02B7: +AHgCtwB4-
+U+-02B8: +AHgCuAB4-
+U+-02B9: +AHgCuQB4-
+U+-02BA: +AHgCugB4-
+U+-02BB: +AHgCuwB4-
+U+-02BC: +AHgCvAB4-
+U+-02BD: +AHgCvQB4-
+U+-02BE: +AHgCvgB4-
+U+-02BF: +AHgCvwB4-
+U+-02C0: +AHgCwAB4-
+U+-02C1: +AHgCwQB4-
+U+-02C2: +AHgCwgB4-
+U+-02C3: +AHgCwwB4-
+U+-02C4: +AHgCxAB4-
+U+-02C5: +AHgCxQB4-
+U+-02C6: +AHgCxgB4-
+U+-02C7: +AHgCxwB4-
+U+-02C8: +AHgCyAB4-
+U+-02C9: +AHgCyQB4-
+U+-02CA: +AHgCygB4-
+U+-02CB: +AHgCywB4-
+U+-02CC: +AHgCzAB4-
+U+-02CD: +AHgCzQB4-
+U+-02CE: +AHgCzgB4-
+U+-02CF: +AHgCzwB4-
+U+-02D0: +AHgC0AB4-
+U+-02D1: +AHgC0QB4-
+U+-02D2: +AHgC0gB4-
+U+-02D3: +AHgC0wB4-
+U+-02D4: +AHgC1AB4-
+U+-02D5: +AHgC1QB4-
+U+-02D6: +AHgC1gB4-
+U+-02D7: +AHgC1wB4-
+U+-02D8: +AHgC2AB4-
+U+-02D9: +AHgC2QB4-
+U+-02DA: +AHgC2gB4-
+U+-02DB: +AHgC2wB4-
+U+-02DC: +AHgC3AB4-
+U+-02DD: +AHgC3QB4-
+U+-02DE: +AHgC3gB4-
+U+-02DF: +AHgC3wB4-
+U+-02E0: +AHgC4AB4-
+U+-02E1: +AHgC4QB4-
+U+-02E2: +AHgC4gB4-
+U+-02E3: +AHgC4wB4-
+U+-02E4: +AHgC5AB4-
+U+-02E5: +AHgC5QB4-
+U+-02E6: +AHgC5gB4-
+U+-02E7: +AHgC5wB4-
+U+-02E8: +AHgC6AB4-
+U+-02E9: +AHgC6QB4-
+U+-02EA: +AHgC6gB4-
+U+-02EB: +AHgC6wB4-
+U+-02EC: +AHgC7AB4-
+U+-02ED: +AHgC7QB4-
+U+-02EE: +AHgC7gB4-
+U+-02EF: +AHgC7wB4-
+U+-02F0: +AHgC8AB4-
+U+-02F1: +AHgC8QB4-
+U+-02F2: +AHgC8gB4-
+U+-02F3: +AHgC8wB4-
+U+-02F4: +AHgC9AB4-
+U+-02F5: +AHgC9QB4-
+U+-02F6: +AHgC9gB4-
+U+-02F7: +AHgC9wB4-
+U+-02F8: +AHgC+AB4-
+U+-02F9: +AHgC+QB4-
+U+-02FA: +AHgC+gB4-
+U+-02FB: +AHgC+wB4-
+U+-02FC: +AHgC/AB4-
+U+-02FD: +AHgC/QB4-
+U+-02FE: +AHgC/gB4-
+U+-02FF: +AHgC/wB4-
+
+General Punctuation
+
+U+-2000: +AHggAAB4-
+U+-2001: +AHggAQB4-
+U+-2002: +AHggAgB4-
+U+-2003: +AHggAwB4-
+U+-2004: +AHggBAB4-
+U+-2005: +AHggBQB4-
+U+-2006: +AHggBgB4-
+U+-2007: +AHggBwB4-
+U+-2008: +AHggCAB4-
+U+-2009: +AHggCQB4-
+U+-200A: +AHggCgB4-
+U+-200B: +AHggCwB4-
+U+-200C: +AHggDAB4-
+U+-200D: +AHggDQB4-
+U+-200E: +AHggDgB4-
+U+-200F: +AHggDwB4-
+U+-2010: +AHggEAB4-
+U+-2011: +AHggEQB4-
+U+-2012: +AHggEgB4-
+U+-2013: +AHggEwB4-
+U+-2014: +AHggFAB4-
+U+-2015: +AHggFQB4-
+U+-2016: +AHggFgB4-
+U+-2017: +AHggFwB4-
+U+-2018: +AHggGAB4-
+U+-2019: +AHggGQB4-
+U+-201A: +AHggGgB4-
+U+-201B: +AHggGwB4-
+U+-201C: +AHggHAB4-
+U+-201D: +AHggHQB4-
+U+-201E: +AHggHgB4-
+U+-201F: +AHggHwB4-
+U+-2020: +AHggIAB4-
+U+-2021: +AHggIQB4-
+U+-2022: +AHggIgB4-
+U+-2023: +AHggIwB4-
+U+-2024: +AHggJAB4-
+U+-2025: +AHggJQB4-
+U+-2026: +AHggJgB4-
+U+-2027: +AHggJwB4-
+U+-2028: +AHggKAB4-
+U+-2029: +AHggKQB4-
+U+-202A: +AHggKgB4-
+U+-202B: +AHggKwB4-
+U+-202C: +AHggLAB4-
+U+-202D: +AHggLQB4-
+U+-202E: +AHggLgB4-
+U+-202F: +AHggLwB4-
+U+-2030: +AHggMAB4-
+U+-2031: +AHggMQB4-
+U+-2032: +AHggMgB4-
+U+-2033: +AHggMwB4-
+U+-2034: +AHggNAB4-
+U+-2035: +AHggNQB4-
+U+-2036: +AHggNgB4-
+U+-2037: +AHggNwB4-
+U+-2038: +AHggOAB4-
+U+-2039: +AHggOQB4-
+U+-203A: +AHggOgB4-
+U+-203B: +AHggOwB4-
+U+-203C: +AHggPAB4-
+U+-203D: +AHggPQB4-
+U+-203E: +AHggPgB4-
+U+-203F: +AHggPwB4-
+U+-2040: +AHggQAB4-
+U+-2041: +AHggQQB4-
+U+-2042: +AHggQgB4-
+U+-2043: +AHggQwB4-
+U+-2044: +AHggRAB4-
+U+-2045: +AHggRQB4-
+U+-2046: +AHggRgB4-
+U+-2047: +AHggRwB4-
+U+-2048: +AHggSAB4-
+U+-2049: +AHggSQB4-
+U+-204A: +AHggSgB4-
+U+-204B: +AHggSwB4-
+U+-204C: +AHggTAB4-
+U+-204D: +AHggTQB4-
+U+-204E: +AHggTgB4-
+U+-204F: +AHggTwB4-
+U+-2050: +AHggUAB4-
+U+-2051: +AHggUQB4-
+U+-2052: +AHggUgB4-
+U+-2053: +AHggUwB4-
+U+-2054: +AHggVAB4-
+U+-2055: +AHggVQB4-
+U+-2056: +AHggVgB4-
+U+-2057: +AHggVwB4-
+U+-2058: +AHggWAB4-
+U+-2059: +AHggWQB4-
+U+-205A: +AHggWgB4-
+U+-205B: +AHggWwB4-
+U+-205C: +AHggXAB4-
+U+-205D: +AHggXQB4-
+U+-205E: +AHggXgB4-
+U+-205F: +AHggXwB4-
+U+-2060: +AHggYAB4-
+U+-2061: +AHggYQB4-
+U+-2062: +AHggYgB4-
+U+-2063: +AHggYwB4-
+U+-2064: +AHggZAB4-
+U+-2065: +AHggZQB4-
+U+-2066: +AHggZgB4-
+U+-2067: +AHggZwB4-
+U+-2068: +AHggaAB4-
+U+-2069: +AHggaQB4-
+U+-206A: +AHggagB4-
+U+-206B: +AHggawB4-
+U+-206C: +AHggbAB4-
+U+-206D: +AHggbQB4-
+U+-206E: +AHggbgB4-
+U+-206F: +AHggbwB4-
+
+Currency Symbols
+
+U+-20A0: +AHggoAB4-
+U+-20A1: +AHggoQB4-
+U+-20A2: +AHggogB4-
+U+-20A3: +AHggowB4-
+U+-20A4: +AHggpAB4-
+U+-20A5: +AHggpQB4-
+U+-20A6: +AHggpgB4-
+U+-20A7: +AHggpwB4-
+U+-20A8: +AHggqAB4-
+U+-20A9: +AHggqQB4-
+U+-20AA: +AHggqgB4-
+U+-20AB: +AHggqwB4-
+U+-20AC: +AHggrAB4-
+U+-20AD: +AHggrQB4-
+U+-20AE: +AHggrgB4-
+U+-20AF: +AHggrwB4-
+U+-20B0: +AHggsAB4-
+U+-20B1: +AHggsQB4-
+U+-20B2: +AHggsgB4-
+U+-20B3: +AHggswB4-
+U+-20B4: +AHggtAB4-
+U+-20B5: +AHggtQB4-
+U+-20B6: +AHggtgB4-
+U+-20B7: +AHggtwB4-
+U+-20B8: +AHgguAB4-
+U+-20B9: +AHgguQB4-
+U+-20BA: +AHggugB4-
+U+-20BB: +AHgguwB4-
+U+-20BC: +AHggvAB4-
+U+-20BD: +AHggvQB4-
+U+-20BE: +AHggvgB4-
+U+-20BF: +AHggvwB4-
+U+-20C0: +AHggwAB4-
+U+-20C1: +AHggwQB4-
+U+-20C2: +AHggwgB4-
+U+-20C3: +AHggwwB4-
+U+-20C4: +AHggxAB4-
+U+-20C5: +AHggxQB4-
+U+-20C6: +AHggxgB4-
+U+-20C7: +AHggxwB4-
+U+-20C8: +AHggyAB4-
+U+-20C9: +AHggyQB4-
+U+-20CA: +AHggygB4-
+U+-20CB: +AHggywB4-
+U+-20CC: +AHggzAB4-
+U+-20CD: +AHggzQB4-
+U+-20CE: +AHggzgB4-
+U+-20CF: +AHggzwB4-
+
+Letterlike Symbols
+
+U+-2100: +AHghAAB4-
+U+-2101: +AHghAQB4-
+U+-2102: +AHghAgB4-
+U+-2103: +AHghAwB4-
+U+-2104: +AHghBAB4-
+U+-2105: +AHghBQB4-
+U+-2106: +AHghBgB4-
+U+-2107: +AHghBwB4-
+U+-2108: +AHghCAB4-
+U+-2109: +AHghCQB4-
+U+-210A: +AHghCgB4-
+U+-210B: +AHghCwB4-
+U+-210C: +AHghDAB4-
+U+-210D: +AHghDQB4-
+U+-210E: +AHghDgB4-
+U+-210F: +AHghDwB4-
+U+-2110: +AHghEAB4-
+U+-2111: +AHghEQB4-
+U+-2112: +AHghEgB4-
+U+-2113: +AHghEwB4-
+U+-2114: +AHghFAB4-
+U+-2115: +AHghFQB4-
+U+-2116: +AHghFgB4-
+U+-2117: +AHghFwB4-
+U+-2118: +AHghGAB4-
+U+-2119: +AHghGQB4-
+U+-211A: +AHghGgB4-
+U+-211B: +AHghGwB4-
+U+-211C: +AHghHAB4-
+U+-211D: +AHghHQB4-
+U+-211E: +AHghHgB4-
+U+-211F: +AHghHwB4-
+U+-2120: +AHghIAB4-
+U+-2121: +AHghIQB4-
+U+-2122: +AHghIgB4-
+U+-2123: +AHghIwB4-
+U+-2124: +AHghJAB4-
+U+-2125: +AHghJQB4-
+U+-2126: +AHghJgB4-
+U+-2127: +AHghJwB4-
+U+-2128: +AHghKAB4-
+U+-2129: +AHghKQB4-
+U+-212A: +AHghKgB4-
+U+-212B: +AHghKwB4-
+U+-212C: +AHghLAB4-
+U+-212D: +AHghLQB4-
+U+-212E: +AHghLgB4-
+U+-212F: +AHghLwB4-
+U+-2130: +AHghMAB4-
+U+-2131: +AHghMQB4-
+U+-2132: +AHghMgB4-
+U+-2133: +AHghMwB4-
+U+-2134: +AHghNAB4-
+U+-2135: +AHghNQB4-
+U+-2136: +AHghNgB4-
+U+-2137: +AHghNwB4-
+U+-2138: +AHghOAB4-
+U+-2139: +AHghOQB4-
+U+-213A: +AHghOgB4-
+U+-213B: +AHghOwB4-
+U+-213C: +AHghPAB4-
+U+-213D: +AHghPQB4-
+U+-213E: +AHghPgB4-
+U+-213F: +AHghPwB4-
+U+-2140: +AHghQAB4-
+U+-2141: +AHghQQB4-
+U+-2142: +AHghQgB4-
+U+-2143: +AHghQwB4-
+U+-2144: +AHghRAB4-
+U+-2145: +AHghRQB4-
+U+-2146: +AHghRgB4-
+U+-2147: +AHghRwB4-
+U+-2148: +AHghSAB4-
+U+-2149: +AHghSQB4-
+U+-214A: +AHghSgB4-
+U+-214B: +AHghSwB4-
+U+-214C: +AHghTAB4-
+U+-214D: +AHghTQB4-
+U+-214E: +AHghTgB4-
+U+-214F: +AHghTwB4-
+
+Number Forms
+
+U+-2150: +AHghUAB4-
+U+-2151: +AHghUQB4-
+U+-2152: +AHghUgB4-
+U+-2153: +AHghUwB4-
+U+-2154: +AHghVAB4-
+U+-2155: +AHghVQB4-
+U+-2156: +AHghVgB4-
+U+-2157: +AHghVwB4-
+U+-2158: +AHghWAB4-
+U+-2159: +AHghWQB4-
+U+-215A: +AHghWgB4-
+U+-215B: +AHghWwB4-
+U+-215C: +AHghXAB4-
+U+-215D: +AHghXQB4-
+U+-215E: +AHghXgB4-
+U+-215F: +AHghXwB4-
+U+-2160: +AHghYAB4-
+U+-2161: +AHghYQB4-
+U+-2162: +AHghYgB4-
+U+-2163: +AHghYwB4-
+U+-2164: +AHghZAB4-
+U+-2165: +AHghZQB4-
+U+-2166: +AHghZgB4-
+U+-2167: +AHghZwB4-
+U+-2168: +AHghaAB4-
+U+-2169: +AHghaQB4-
+U+-216A: +AHghagB4-
+U+-216B: +AHghawB4-
+U+-216C: +AHghbAB4-
+U+-216D: +AHghbQB4-
+U+-216E: +AHghbgB4-
+U+-216F: +AHghbwB4-
+U+-2170: +AHghcAB4-
+U+-2171: +AHghcQB4-
+U+-2172: +AHghcgB4-
+U+-2173: +AHghcwB4-
+U+-2174: +AHghdAB4-
+U+-2175: +AHghdQB4-
+U+-2176: +AHghdgB4-
+U+-2177: +AHghdwB4-
+U+-2178: +AHgheAB4-
+U+-2179: +AHgheQB4-
+U+-217A: +AHghegB4-
+U+-217B: +AHghewB4-
+U+-217C: +AHghfAB4-
+U+-217D: +AHghfQB4-
+U+-217E: +AHghfgB4-
+U+-217F: +AHghfwB4-
+U+-2180: +AHghgAB4-
+U+-2181: +AHghgQB4-
+U+-2182: +AHghggB4-
+U+-2183: +AHghgwB4-
+U+-2184: +AHghhAB4-
+U+-2185: +AHghhQB4-
+U+-2186: +AHghhgB4-
+U+-2187: +AHghhwB4-
+U+-2188: +AHghiAB4-
+U+-2189: +AHghiQB4-
+U+-218A: +AHghigB4-
+U+-218B: +AHghiwB4-
+U+-218C: +AHghjAB4-
+U+-218D: +AHghjQB4-
+U+-218E: +AHghjgB4-
+U+-218F: +AHghjwB4-
+
+Alphabetic Presentation Forms
+
+U+-FB00: +AHj7AAB4-
+U+-FB01: +AHj7AQB4-
+U+-FB02: +AHj7AgB4-
+U+-FB03: +AHj7AwB4-
+U+-FB04: +AHj7BAB4-
+U+-FB05: +AHj7BQB4-
+U+-FB06: +AHj7BgB4-
+U+-FB07: +AHj7BwB4-
+U+-FB08: +AHj7CAB4-
+U+-FB09: +AHj7CQB4-
+U+-FB0A: +AHj7CgB4-
+U+-FB0B: +AHj7CwB4-
+U+-FB0C: +AHj7DAB4-
+U+-FB0D: +AHj7DQB4-
+U+-FB0E: +AHj7DgB4-
+U+-FB0F: +AHj7DwB4-
+U+-FB10: +AHj7EAB4-
+U+-FB11: +AHj7EQB4-
+U+-FB12: +AHj7EgB4-
+U+-FB13: +AHj7EwB4-
+U+-FB14: +AHj7FAB4-
+U+-FB15: +AHj7FQB4-
+U+-FB16: +AHj7FgB4-
+U+-FB17: +AHj7FwB4-
+U+-FB18: +AHj7GAB4-
+U+-FB19: +AHj7GQB4-
+U+-FB1A: +AHj7GgB4-
+U+-FB1B: +AHj7GwB4-
+U+-FB1C: +AHj7HAB4-
+U+-FB1D: +AHj7HQB4-
+U+-FB1E: +AHj7HgB4-
+U+-FB1F: +AHj7HwB4-
+U+-FB20: +AHj7IAB4-
+U+-FB21: +AHj7IQB4-
+U+-FB22: +AHj7IgB4-
+U+-FB23: +AHj7IwB4-
+U+-FB24: +AHj7JAB4-
+U+-FB25: +AHj7JQB4-
+U+-FB26: +AHj7JgB4-
+U+-FB27: +AHj7JwB4-
+U+-FB28: +AHj7KAB4-
+U+-FB29: +AHj7KQB4-
+U+-FB2A: +AHj7KgB4-
+U+-FB2B: +AHj7KwB4-
+U+-FB2C: +AHj7LAB4-
+U+-FB2D: +AHj7LQB4-
+U+-FB2E: +AHj7LgB4-
+U+-FB2F: +AHj7LwB4-
+U+-FB30: +AHj7MAB4-
+U+-FB31: +AHj7MQB4-
+U+-FB32: +AHj7MgB4-
+U+-FB33: +AHj7MwB4-
+U+-FB34: +AHj7NAB4-
+U+-FB35: +AHj7NQB4-
+U+-FB36: +AHj7NgB4-
+U+-FB37: +AHj7NwB4-
+U+-FB38: +AHj7OAB4-
+U+-FB39: +AHj7OQB4-
+U+-FB3A: +AHj7OgB4-
+U+-FB3B: +AHj7OwB4-
+U+-FB3C: +AHj7PAB4-
+U+-FB3D: +AHj7PQB4-
+U+-FB3E: +AHj7PgB4-
+U+-FB3F: +AHj7PwB4-
+U+-FB40: +AHj7QAB4-
+U+-FB41: +AHj7QQB4-
+U+-FB42: +AHj7QgB4-
+U+-FB43: +AHj7QwB4-
+U+-FB44: +AHj7RAB4-
+U+-FB45: +AHj7RQB4-
+U+-FB46: +AHj7RgB4-
+U+-FB47: +AHj7RwB4-
+U+-FB48: +AHj7SAB4-
+U+-FB49: +AHj7SQB4-
+U+-FB4A: +AHj7SgB4-
+U+-FB4B: +AHj7SwB4-
+U+-FB4C: +AHj7TAB4-
+U+-FB4D: +AHj7TQB4-
+U+-FB4E: +AHj7TgB4-
+U+-FB4F: +AHj7TwB4-
+
diff --git a/support/utf2any/test/tst.utf8 b/support/utf2any/test/tst.utf8
new file mode 100644
index 0000000000..970470127b
--- /dev/null
+++ b/support/utf2any/test/tst.utf8
Binary files differ
diff --git a/support/utf2any/utf2any.c b/support/utf2any/utf2any.c
new file mode 100644
index 0000000000..f00892dbad
--- /dev/null
+++ b/support/utf2any/utf2any.c
@@ -0,0 +1,2557 @@
+#line 2 "utf2any.c"
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif /* __STDC__ */
+#endif /* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator). This
+ * avoids problems with code like:
+ *
+ * if ( condition_holds )
+ * yyless( 5 );
+ * else
+ * do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ *yy_cp = yy_hold_char; \
+ YY_RESTORE_YY_MORE_OFFSET \
+ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+ };
+
+static YY_BUFFER_STATE yy_current_buffer = 0;
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars; /* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ yytext_ptr = yy_bp; \
+ yyleng = (int) (yy_cp - yy_bp); \
+ yy_hold_char = *yy_cp; \
+ *yy_cp = '\0'; \
+ yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 13
+#define YY_END_OF_BUFFER 14
+static yyconst short int yy_accept[38] =
+ { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 14, 1,
+ 12, 3, 6, 4, 5, 12, 12, 12, 12, 12,
+ 2, 7, 0, 0, 0, 0, 8, 0, 0, 0,
+ 9, 0, 0, 10, 0, 11, 0
+ } ;
+
+static yyconst int yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 3, 1, 4, 1, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 1, 1, 1,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5,
+
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 8,
+ 8, 8, 8, 8, 8, 8, 8, 9, 9, 9,
+ 9, 10, 10, 1, 1
+ } ;
+
+static yyconst int yy_meta[11] =
+ { 0,
+ 1, 2, 1, 1, 1, 1, 1, 1, 1, 1
+ } ;
+
+static yyconst short int yy_base[56] =
+ { 0,
+ 0, 0, 33, 32, 0, 3, 3, 0, 34, 37,
+ 37, 29, 37, 37, 37, 0, 0, 0, 0, 0,
+ 37, 37, 0, 0, 0, 0, 37, 0, 0, 0,
+ 37, 0, 0, 37, 0, 37, 37, 13, 15, 17,
+ 31, 30, 29, 28, 27, 26, 25, 24, 23, 22,
+ 21, 20, 19, 1, 0
+ } ;
+
+static yyconst short int yy_def[56] =
+ { 0,
+ 38, 38, 39, 39, 40, 40, 39, 7, 37, 37,
+ 37, 37, 37, 37, 37, 41, 42, 43, 44, 45,
+ 37, 37, 46, 47, 48, 49, 37, 50, 51, 52,
+ 37, 53, 54, 37, 55, 37, 0, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37
+ } ;
+
+static yyconst short int yy_nxt[48] =
+ { 0,
+ 36, 35, 14, 15, 14, 14, 15, 14, 16, 17,
+ 18, 19, 20, 10, 10, 11, 11, 13, 13, 34,
+ 33, 32, 31, 30, 29, 28, 27, 26, 25, 24,
+ 23, 22, 21, 37, 12, 12, 9, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37
+ } ;
+
+static yyconst short int yy_chk[48] =
+ { 0,
+ 55, 54, 5, 5, 5, 6, 6, 6, 7, 7,
+ 7, 7, 7, 38, 38, 39, 39, 40, 40, 53,
+ 52, 51, 50, 49, 48, 47, 46, 45, 44, 43,
+ 42, 41, 12, 9, 4, 3, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "utf2any.l"
+#define INITIAL 0
+/*
+ * File: utf2any.l
+ *
+ * (c) Peter Kleiweg 2000
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * Compile:
+ * flex -B -8 utf2any.l
+ * gcc -s -Wall -o utf2any lex.yy.c -lfl
+ * rm lex.yy.c
+ *
+ */
+#line 19 "utf2any.l"
+
+#define UTFanyVERSION "1.0"
+
+/*
+ * MAPDIR is the directory were symbol maps are searched.
+ * This should be a path, ending with a slash, surrounded by double quotes,
+ * or it should be NULL.
+ */
+
+#ifndef MAPDIR
+# ifdef __MSDOS__
+# define MAPDIR "c:\\utf\\"
+# else
+# define MAPDIR "/usr/local/lib/utf/"
+# endif
+#endif
+
+#ifdef __MSDOS__
+# ifndef __COMPACT__
+# error Memory model COMPACT required
+# endif
+# include <dir.h>
+# include <fcntl.h>
+#else
+# include <unistd.h>
+#endif
+#include <ctype.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __MSDOS__
+#define strcasecmp(A, B) (stricmp((A), (B)))
+#endif
+
+#define BUFSIZE 2048
+
+typedef enum { FALSE = 0, TRUE } BOOL_;
+
+typedef enum { uUNDEF = 0, uUTF7, uUTF8 } UTF_;
+
+typedef enum { aECHO, aSPACE, aSKIP, aFORMAT } ACTION_;
+
+typedef enum { cUCHAR, cUNSIGNED, cULONG, cNONE } CAST_;
+
+typedef struct {
+ unsigned long
+ ul,
+ order;
+ char
+ *s;
+} TRANS_;
+
+typedef struct {
+ long unsigned
+ from,
+ to;
+ ACTION_
+ action;
+ CAST_
+ cast;
+ char
+ *format;
+} RANGE_;
+
+BOOL_
+ verbose = FALSE,
+ warnings = FALSE;
+
+UTF_
+ utf_type = uUNDEF;
+
+TRANS_
+ *trans = NULL;
+
+RANGE_
+ *range = NULL;
+
+char
+ buf2 [BUFSIZE + 1],
+ buffer [BUFSIZE + 1],
+ bufword [BUFSIZE + 1],
+ f_unsigned [] = "[U+%04X]",
+ f_ulong [] = "[U+%08lX]",
+ *infile,
+ *lower [256],
+ *no_mem_buffer,
+ out_of_memory [] = "Out of memory",
+ *programname,
+ s_echo [] = "#ECHO#",
+ s_skip [] = "#SKIP#",
+ s_space [] = "#SPACE#";
+
+int
+ bufp,
+ max_range = 0,
+ max_trans = 0,
+ n_range = 0,
+ n_trans = 0,
+ wtable [256];
+
+unsigned int
+ instep,
+ outcode [2],
+ outstep;
+
+unsigned long
+ order = 0,
+ incount = 1;
+
+void
+ addchar (char *filename, int lineno, unsigned long ul, char *s),
+ addaction (
+ char *filename,
+ int lineno,
+ long unsigned from,
+ long unsigned to,
+ ACTION_ action,
+ CAST_ cast,
+ char *format
+ ),
+ bytes2 (void),
+ bytes3 (void),
+ bytes4 (void),
+ bytes5 (void),
+ bytes6 (void),
+ codewarn (unsigned long ul),
+ errit (char const *format, ...),
+ ferrit (char *filename, int lineno, char const *format, ...),
+ get_programname (char const *argv0),
+ nextout (void),
+ outchar (unsigned char i),
+ outsymbol (unsigned long ul),
+ readtrans (char *file, char *dir, int level),
+ *s_malloc (size_t size),
+ *s_realloc (void *block, size_t size),
+ syntax (void),
+ utf7 (void);
+
+char
+ *getbasename (char *s),
+ *getdirname (char *s),
+ *getword (char *filename, int lineno),
+ *s_strdup (char const *s);
+
+int
+ getline (FILE *fp, int *lineno),
+ nlcount (void),
+ searchcmp (const void *p1, const void *p2),
+ srtcmp (const void *p1, const void *p2);
+
+long unsigned
+ getvalue (char *filename, int lineno);
+
+#define YY_NO_UNPUT
+#define YY_SKIP_YYWRAP
+#ifdef yywrap
+# undef yywrap
+#endif
+int yywrap()
+{
+ return 1;
+}
+
+#define _utf7 1
+#define _utf7b 2
+#define _utf8 3
+
+#line 572 "utf2any.c"
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines. This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( yy_current_buffer->yy_is_interactive ) \
+ { \
+ int c = '*', n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+ && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" );
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+YY_DECL
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 189 "utf2any.l"
+
+
+#line 726 "utf2any.c"
+
+ if ( yy_init )
+ {
+ yy_init = 0;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! yy_start )
+ yy_start = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! yy_current_buffer )
+ yy_current_buffer =
+ yy_create_buffer( yyin, YY_BUF_SIZE );
+
+ yy_load_buffer_state();
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = yy_c_buf_p;
+
+ /* Support of yytext. */
+ *yy_cp = yy_hold_char;
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = yy_start;
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ yy_last_accepting_state = yy_current_state;
+ yy_last_accepting_cpos = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 38 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_current_state != 37 );
+ yy_cp = yy_last_accepting_cpos;
+ yy_current_state = yy_last_accepting_state;
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+
+ YY_DO_BEFORE_ACTION;
+
+
+do_action: /* This label is used only to access EOF actions. */
+
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = yy_hold_char;
+ yy_cp = yy_last_accepting_cpos;
+ yy_current_state = yy_last_accepting_state;
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 191 "utf2any.l"
+{ yyless (0);
+ BEGIN ((utf_type == uUTF7) ? _utf7 : _utf8);
+ }
+ YY_BREAK
+
+case 2:
+YY_RULE_SETUP
+#line 196 "utf2any.l"
+{ outchar ('+'); }
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 197 "utf2any.l"
+{ instep = outstep = 0;
+ BEGIN _utf7b; }
+ YY_BREAK
+
+
+case 4:
+YY_RULE_SETUP
+#line 202 "utf2any.l"
+{ utf7 (); }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 203 "utf2any.l"
+{ BEGIN _utf7; }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 204 "utf2any.l"
+{ if (yytext [0] == '\n')
+ incount++;
+ outchar (yytext [0]);
+ BEGIN _utf7; }
+ YY_BREAK
+
+
+case 7:
+YY_RULE_SETUP
+#line 211 "utf2any.l"
+{ incount += nlcount (); bytes2 (); }
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 212 "utf2any.l"
+{ incount += nlcount (); bytes3 (); }
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 213 "utf2any.l"
+{ incount += nlcount (); bytes4 (); }
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 214 "utf2any.l"
+{ incount += nlcount (); bytes5 (); }
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 215 "utf2any.l"
+{ incount += nlcount (); bytes6 (); }
+ YY_BREAK
+
+case 12:
+YY_RULE_SETUP
+#line 218 "utf2any.l"
+{ if (yytext [0] == '\n')
+ incount++;
+ outchar (yytext [0]);
+ }
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 223 "utf2any.l"
+ECHO;
+ YY_BREAK
+#line 885 "utf2any.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(_utf7):
+case YY_STATE_EOF(_utf7b):
+case YY_STATE_EOF(_utf8):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = yy_hold_char;
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between yy_current_buffer and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ yy_n_chars = yy_current_buffer->yy_n_chars;
+ yy_current_buffer->yy_input_file = yyin;
+ yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state();
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++yy_c_buf_p;
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = yy_last_accepting_cpos;
+ yy_current_state = yy_last_accepting_state;
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer() )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ yy_did_buffer_switch_on_eof = 0;
+
+ if ( yywrap() )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yy_c_buf_p =
+ yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state();
+
+ yy_cp = yy_c_buf_p;
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ yy_c_buf_p =
+ &yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+ yy_current_state = yy_get_previous_state();
+
+ yy_cp = yy_c_buf_p;
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+ } /* end of yylex */
+
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+
+static int yy_get_next_buffer()
+ {
+ register char *dest = yy_current_buffer->yy_ch_buf;
+ register char *source = yytext_ptr;
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( yy_current_buffer->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+ else
+ {
+ int num_to_read =
+ yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+ YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = yy_current_buffer;
+
+ int yy_c_buf_p_offset =
+ (int) (yy_c_buf_p - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ int new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yy_flex_realloc( (void *) b->yy_ch_buf,
+ b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = yy_current_buffer->yy_buf_size -
+ number_to_move - 1;
+#endif
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+ yy_n_chars, num_to_read );
+
+ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ if ( yy_n_chars == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart( yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ yy_current_buffer->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ yy_n_chars += number_to_move;
+ yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+ yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+ yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+ return ret_val;
+ }
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+static yy_state_type yy_get_previous_state()
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = yy_start;
+
+ for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ yy_last_accepting_state = yy_current_state;
+ yy_last_accepting_cpos = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 38 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+ }
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+ {
+ register int yy_is_jam;
+ register char *yy_cp = yy_c_buf_p;
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ yy_last_accepting_state = yy_current_state;
+ yy_last_accepting_cpos = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 38 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 37);
+
+ return yy_is_jam ? 0 : yy_current_state;
+ }
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+ {
+ register char *yy_cp = yy_c_buf_p;
+
+ /* undo effects of setting up yytext */
+ *yy_cp = yy_hold_char;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register int number_to_move = yy_n_chars + 2;
+ register char *dest = &yy_current_buffer->yy_ch_buf[
+ yy_current_buffer->yy_buf_size + 2];
+ register char *source =
+ &yy_current_buffer->yy_ch_buf[number_to_move];
+
+ while ( source > yy_current_buffer->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ yy_current_buffer->yy_n_chars =
+ yy_n_chars = yy_current_buffer->yy_buf_size;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+
+ yytext_ptr = yy_bp;
+ yy_hold_char = *yy_cp;
+ yy_c_buf_p = yy_cp;
+ }
+#endif /* ifndef YY_NO_UNPUT */
+
+
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+ {
+ int c;
+
+ *yy_c_buf_p = yy_hold_char;
+
+ if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ /* This was really a NUL. */
+ *yy_c_buf_p = '\0';
+
+ else
+ { /* need more input */
+ int offset = yy_c_buf_p - yytext_ptr;
+ ++yy_c_buf_p;
+
+ switch ( yy_get_next_buffer() )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart( yyin );
+
+ /* fall through */
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap() )
+ return EOF;
+
+ if ( ! yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yy_c_buf_p = yytext_ptr + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
+ *yy_c_buf_p = '\0'; /* preserve yytext */
+ yy_hold_char = *++yy_c_buf_p;
+
+
+ return c;
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+ {
+ if ( ! yy_current_buffer )
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+ yy_init_buffer( yy_current_buffer, input_file );
+ yy_load_buffer_state();
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+ {
+ if ( yy_current_buffer == new_buffer )
+ return;
+
+ if ( yy_current_buffer )
+ {
+ /* Flush out information for old buffer. */
+ *yy_c_buf_p = yy_hold_char;
+ yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ yy_current_buffer = new_buffer;
+ yy_load_buffer_state();
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ yy_did_buffer_switch_on_eof = 1;
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+ {
+ yy_n_chars = yy_current_buffer->yy_n_chars;
+ yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+ yyin = yy_current_buffer->yy_input_file;
+ yy_hold_char = *yy_c_buf_p;
+ }
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+ {
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer( b, file );
+
+ return b;
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+ {
+ if ( ! b )
+ return;
+
+ if ( b == yy_current_buffer )
+ yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yy_flex_free( (void *) b->yy_ch_buf );
+
+ yy_flex_free( (void *) b );
+ }
+
+
+#ifndef YY_ALWAYS_INTERACTIVE
+#ifndef YY_NEVER_INTERACTIVE
+extern int isatty YY_PROTO(( int ));
+#endif
+#endif
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+ {
+ yy_flush_buffer( b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+#if YY_ALWAYS_INTERACTIVE
+ b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+ b->yy_is_interactive = 0;
+#else
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+ {
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == yy_current_buffer )
+ yy_load_buffer_state();
+ }
+
+
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+ {
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer( b );
+
+ return b;
+ }
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+ {
+ int len;
+ for ( len = 0; yy_str[len]; ++len )
+ ;
+
+ return yy_scan_bytes( yy_str, len );
+ }
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+ {
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = len + 2;
+ buf = (char *) yy_flex_alloc( n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < len; ++i )
+ buf[i] = bytes[i];
+
+ buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer( buf, n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+ }
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+ {
+ if ( yy_start_stack_ptr >= yy_start_stack_depth )
+ {
+ yy_size_t new_size;
+
+ yy_start_stack_depth += YY_START_STACK_INCR;
+ new_size = yy_start_stack_depth * sizeof( int );
+
+ if ( ! yy_start_stack )
+ yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+ else
+ yy_start_stack = (int *) yy_flex_realloc(
+ (void *) yy_start_stack, new_size );
+
+ if ( ! yy_start_stack )
+ YY_FATAL_ERROR(
+ "out of memory expanding start-condition stack" );
+ }
+
+ yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+ BEGIN(new_state);
+ }
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+ {
+ if ( --yy_start_stack_ptr < 0 )
+ YY_FATAL_ERROR( "start-condition stack underflow" );
+
+ BEGIN(yy_start_stack[yy_start_stack_ptr]);
+ }
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+ {
+ return yy_start_stack[yy_start_stack_ptr - 1];
+ }
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+ {
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+ }
+
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ yytext[yyleng] = yy_hold_char; \
+ yy_c_buf_p = yytext + n; \
+ yy_hold_char = *yy_c_buf_p; \
+ *yy_c_buf_p = '\0'; \
+ yyleng = n; \
+ } \
+ while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+ {
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+ }
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+ {
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+ }
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+ {
+ return (void *) malloc( size );
+ }
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+ {
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+ }
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+ {
+ free( ptr );
+ }
+
+#if YY_MAIN
+int main()
+ {
+ yylex();
+ return 0;
+ }
+#endif
+#line 223 "utf2any.l"
+
+
+/*
+ * Helper functions for UTF-7 parser
+ */
+
+void utf7 ()
+{
+ unsigned
+ i,
+ c;
+
+ i = yytext [0];
+ if (i >= 'A' && i <= 'Z')
+ c = i - 'A';
+ else if (i >= 'a' && i <= 'z')
+ c = i + 26 - 'a';
+ else if (i >= '0' && i <= '9')
+ c = i + 52 - '0';
+ else if (i == '+')
+ c = 62;
+ else if (i == '/')
+ c = 63;
+
+ switch (instep) {
+ case 0:
+ outcode [outstep] = (c << 2);
+ break;
+ case 1:
+ outcode [outstep] |= (c >> 4);
+ nextout ();
+ outcode [outstep] = (c << 4);
+ break;
+ case 2:
+ outcode [outstep] |= (c >> 2);
+ nextout ();
+ outcode [outstep] = (c << 6);
+ break;
+ case 3:
+ outcode [outstep] |= c;
+ nextout ();
+ break;
+ }
+ if (++instep == 4)
+ instep = 0;
+}
+
+void nextout ()
+{
+ unsigned
+ c;
+
+ if (outstep == 0) {
+ outstep = 1;
+ } else {
+ outstep = 0;
+ c = ((outcode [0] & 0xFF) << 8) | (outcode [1] & 0xFF);
+ outsymbol (c);
+ }
+}
+
+/*
+ * Helper functions for UTF-8 parser
+ */
+
+void bytes2 ()
+{
+ unsigned
+ u [2],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 2; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [1] & 0x3F)
+ | ((u [0] & 0x1F) << 6);
+
+ outsymbol (c);
+}
+
+
+void bytes3 ()
+{
+ unsigned
+ u [3],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 3; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [2] & 0x3F)
+ | ((u [1] & 0x3F) << 6)
+ | ((u [0] & 0x0F) << 12);
+
+ outsymbol (c);
+}
+
+void bytes4 ()
+{
+ long unsigned
+ u [4],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 4; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [3] & 0x3F)
+ | ((u [2] & 0x3F) << 6)
+ | ((u [1] & 0x3F) << 12)
+ | ((u [0] & 0x07) << 18);
+
+ outsymbol (c);
+}
+
+void bytes5 ()
+{
+ long unsigned
+ u [5],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 5; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [4] & 0x3F)
+ | ((u [3] & 0x3F) << 6)
+ | ((u [2] & 0x3F) << 12)
+ | ((u [1] & 0x3F) << 18)
+ | ((u [0] & 0x03) << 24);
+
+ outsymbol (c);
+}
+
+void bytes6 ()
+{
+ long unsigned
+ u [6],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 6; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [5] & 0x3F)
+ | ((u [4] & 0x3F) << 6)
+ | ((u [3] & 0x3F) << 12)
+ | ((u [2] & 0x3F) << 18)
+ | ((u [1] & 0x3F) << 24)
+ | ((u [0] & 0x01) << 30);
+
+ outsymbol (c);
+}
+
+/*
+ * General helper functions for parser
+ */
+
+void outchar (unsigned char c)
+{
+ if (wtable [c])
+ codewarn (c);
+
+ if (! lower [c])
+ fputc (c, yyout);
+ else
+ fputs (lower [c], yyout);
+}
+
+void outsymbol (unsigned long ul)
+{
+ int
+ i;
+ TRANS_
+ *p;
+
+ if (ul < 256) {
+ if (wtable [ul])
+ codewarn (ul);
+ if (! lower [ul])
+ fputc ((unsigned int) ul, yyout);
+ else
+ fputs (lower [ul], yyout);
+ return;
+ }
+
+ p = (TRANS_ *) bsearch (&ul, trans, n_trans, sizeof (TRANS_), searchcmp);
+ if (p) {
+ fputs (p->s, yyout);
+ return;
+ }
+
+ codewarn (ul);
+
+ for (i = n_range - 1; i >= 0; i--)
+ if (ul >= range [i].from && ul <= range [i].to)
+ break;
+ switch (range [i].action) {
+ case aSPACE:
+ fputc (' ', yyout);
+ break;
+ case aFORMAT:
+ if (range [i].cast == cUCHAR)
+ fprintf (yyout, range [i].format, (unsigned char) ul);
+ else if (range [i].cast == cUNSIGNED)
+ fprintf (yyout, range [i].format, (unsigned) ul);
+ else
+ fprintf (yyout, range [i].format, (unsigned long) ul);
+ break;
+ case aECHO:
+ /* won't happen beyond 255 */
+ case aSKIP:
+ break;
+ }
+}
+
+void codewarn (unsigned long ul)
+{
+ if (! warnings)
+ return;
+
+ if (ul < 0x10000)
+ fprintf (stderr, "%s:%lu: U+%04X %5u\n", infile, incount, (unsigned) ul, (unsigned) ul);
+ else
+ fprintf (stderr, "%s:%lu: U+%08lX %10lu\n", infile, incount, ul, ul);
+}
+
+int nlcount ()
+{
+ int
+ i,
+ sum;
+
+ sum = 0;
+ for (i = 0; yytext [i]; i++)
+ if (yytext [i] == '\n')
+ sum++;
+ return sum;
+}
+
+
+int main (int argc, char *argv [])
+{
+ int
+ i;
+
+ no_mem_buffer = (char *) malloc (1024);
+
+ get_programname (argv [0]);
+
+ /* pre-defined actions */
+ for (i = 0; i < 256; i++) {
+ lower [i] = NULL;
+ wtable [i] = 0;
+ }
+ addaction (NULL, 0, 0x10000, 0x7FFFFFFF, aFORMAT, cULONG, f_ulong);
+ addaction (NULL, 0, 0x100, 0xFFFF, aFORMAT, cUNSIGNED, f_unsigned);
+ addaction (NULL, 0, 0x7F, 0x9F, aFORMAT, cUNSIGNED, f_unsigned);
+ addaction (NULL, 0, 0, 0x1F, aFORMAT, cUNSIGNED, f_unsigned);
+ addchar (NULL, 0, '\t', s_echo);
+ addchar (NULL, 0, '\n', s_echo);
+ addchar (NULL, 0, '\r', s_echo);
+ addchar (NULL, 0, '\f', s_echo);
+
+ while (argc > 1 && argv [1][0] == '-') {
+ if (! strcmp (argv [1], "-7"))
+ utf_type = uUTF7;
+ else if (! strcmp (argv [1], "-8"))
+ utf_type = uUTF8;
+ else if (argv [1][1] == 'f') {
+ if (argv [1][2])
+ readtrans (argv [1] + 2, MAPDIR, 0);
+ else {
+ if (argc == 2)
+ errit ("Missing argument for option '-f'");
+ argv++;
+ argc--;
+ readtrans (argv [1], MAPDIR, 0);
+ }
+ } else if (! strcmp (argv [1], "-v"))
+ verbose = TRUE;
+ else if (! strcmp (argv [1], "-w"))
+ warnings = TRUE;
+ else
+ syntax ();
+ argv++;
+ argc--;
+ }
+
+ if (n_trans) {
+ qsort (trans, n_trans, sizeof (TRANS_), srtcmp);
+ i = 0;
+ while (i < n_trans - 1)
+ if (trans [i].ul == trans [i + 1].ul) {
+ memmove (trans + i, trans + i + 1, (n_trans - i - 1) * sizeof (TRANS_));
+ n_trans--;
+ } else
+ i++;
+ }
+
+ switch (argc) {
+ case 1:
+ if (isatty (fileno (stdin)))
+ syntax ();
+ yyin = stdin;
+ infile = "(stdin)";
+ break;
+ case 2:
+ yyin = fopen (argv [1], "r");
+ if (! yyin)
+ errit ("Opening file \"%s\": %s", argv [1], strerror (errno));
+ infile = argv [1];
+ break;
+ default:
+ syntax ();
+ }
+
+ if (! utf_type)
+ errit ("Missing option '-7' or '-8'");
+
+ yyout = stdout;
+
+#ifdef __MSDOS__
+ setmode (fileno (yyin ), O_BINARY);
+ setmode (fileno (yyout), O_BINARY);
+#endif
+
+ yylex ();
+
+ if (yyin != stdin)
+ fclose (yyin);
+ if (yyout != stdout)
+ fclose (yyin);
+
+ return 0;
+}
+
+int srtcmp (const void *p1, const void *p2)
+{
+ unsigned long
+ ul1,
+ ul2;
+
+
+ ul1 = ((TRANS_ *)p1)->ul;
+ ul2 = ((TRANS_ *)p2)->ul;
+ if (ul1 < ul2)
+ return -1;
+ else if (ul1 > ul2)
+ return 1;
+
+ ul1 = ((TRANS_ *)p1)->order;
+ ul2 = ((TRANS_ *)p2)->order;
+ if (ul1 < ul2)
+ return -1;
+ else
+ return 1;
+}
+
+int searchcmp (const void *p1, const void *p2)
+{
+ unsigned long
+ ul1,
+ ul2;
+
+ ul1 = *((unsigned long *)p1);
+ ul2 = ((TRANS_ *)p2)->ul;
+
+ if (ul1 < ul2)
+ return -1;
+ else if (ul1 > ul2)
+ return 1;
+ else
+ return 0;
+}
+
+void readtrans (char *file, char *dir, int level)
+{
+ int
+ lineno;
+ long unsigned
+ from,
+ to,
+ ul;
+ char
+ *s,
+ *filename,
+ *basename,
+ *dirname;
+ FILE
+ *fp;
+ CAST_
+ cast;
+
+ if (level > 10)
+ errit ("File \"%s\": nesting too deep", file);
+
+ /*
+ * Try opening file
+ * If failure and filename has no directory part, then try in dir
+ */
+ filename = file;
+ fp = fopen (filename, "r");
+ if ((! fp) && dir) {
+ basename = getbasename (filename);
+ if (! strcmp (basename, filename)) {
+ filename = (char *) s_malloc (
+ (strlen (basename) + strlen (dir) + 1) * sizeof (char)
+ );
+ strcpy (filename, dir);
+ strcat (filename, basename);
+ fp = fopen (filename, "r");
+ }
+ }
+ if (! fp)
+ errit ("Opening file \"%s\": %s", filename, strerror (errno));
+ if (verbose)
+ fprintf (stderr, "Begin %s\n", filename);
+
+ dirname = getdirname (filename);
+ if (! dirname)
+ dirname = dir;
+
+ lineno = 0;
+ while (getline (fp, &lineno)) {
+ switch (buffer [bufp]) {
+ /* translation for range of characters */
+ case 'd':
+ case 'D':
+ bufp++;
+ from = getvalue (filename, lineno);
+ to = getvalue (filename, lineno);
+ s = getword (filename, lineno);
+ if (! strcasecmp (s, s_skip))
+ addaction (filename, lineno, from, to, aSKIP, cNONE, NULL);
+ else if (! strcasecmp (s, s_echo))
+ addaction (filename, lineno, from, to, aECHO, cNONE, NULL);
+ else if (! strcasecmp (s, s_space))
+ addaction (filename, lineno, from, to, aSPACE, cNONE, NULL);
+ else {
+ if (! strcmp (s, "uchar"))
+ cast = cUCHAR;
+ else if (! strcmp (s, "unsigned"))
+ cast = cUNSIGNED;
+ else if (! strcmp (s, "ulong"))
+ cast = cULONG;
+ else
+ ferrit (filename, lineno, "Illegal action \"%s\"", s);
+ addaction (filename, lineno, from, to, aFORMAT, cast, buffer + bufp);
+ }
+ break;
+ /* include file */
+ case 'i':
+ case 'I':
+ bufp++;
+ readtrans (s_strdup (getword (filename, lineno)), dirname, level + 1);
+ break;
+ /* single character translation */
+ default:
+ ul = getvalue (filename, lineno);
+ addchar (filename, lineno, ul, buffer + bufp);
+ }
+ }
+ fclose (fp);
+ if (verbose)
+ fprintf (stderr, "End %s\n", filename);
+}
+
+void addchar (char *filename, int lineno, unsigned long ul, char *s)
+{
+ BOOL_
+ echo;
+
+ if (ul > 0x7fffffff)
+ ferrit (filename, lineno, "%s out of range: 0x%lX", s, ul);
+
+ echo = FALSE;
+
+ if (! strcasecmp (s, s_skip))
+ s = "";
+ else if (! strcasecmp (s, s_space))
+ s = " ";
+ else if (! strcasecmp (s, s_echo))
+ echo = TRUE;
+
+ if (ul < 256) {
+ lower [ul] = echo ? NULL : s_strdup (s);
+ wtable [ul] = 0;
+ } else {
+ if (echo)
+ ferrit (filename, lineno, "%s out of range: 0x%lX", s_echo, ul);
+ if (n_trans == max_trans) {
+ max_trans += 1024;
+ trans = (TRANS_ *) s_realloc (trans, max_trans * sizeof (TRANS_));
+ }
+ trans [n_trans].ul = ul;
+ trans [n_trans].order = order++;
+ trans [n_trans++].s = s_strdup (s);
+ }
+}
+
+void addaction (char *filename,
+ int lineno,
+ long unsigned from,
+ long unsigned to,
+ ACTION_ action,
+ CAST_ cast,
+ char *format)
+{
+ long unsigned
+ u;
+
+ if (from > to)
+ ferrit (filename, lineno, "Illegal range");
+
+ if (from > 0x7fffffff)
+ ferrit (filename, lineno, "Begin of range to large: 0x%lX", from);
+
+ if (to > 0x7fffffff)
+ ferrit (filename, lineno, "End of range to large: 0x%lX", to);
+
+ for (u = from; u <= to && u < 256; u++) {
+ wtable [u] = 1;
+ if (action == aSKIP)
+ lower [u] = "";
+ else if (action == aSPACE)
+ lower [u] = " ";
+ else if (action == aECHO)
+ lower [u] = NULL;
+ else {
+ if (cast == cUCHAR)
+ sprintf (buf2, format, (unsigned char) u);
+ else if (cast == cUNSIGNED)
+ sprintf (buf2, format, (unsigned) u);
+ else
+ sprintf (buf2, format, (long unsigned) u);
+ lower [u] = s_strdup (buf2);
+ }
+ }
+
+ if (from < 256)
+ from = 256;
+ if (from > to)
+ return;
+
+ if (action == aECHO)
+ ferrit (filename, lineno, "Out of range for %s", s_echo);
+
+ if (n_range == max_range) {
+ max_range += 256;
+ range = (RANGE_ *) s_realloc (range, max_range * sizeof (RANGE_));
+ }
+ range [n_range].from = from;
+ range [n_range].to = to;
+ range [n_range].action = action;
+ if (action == aFORMAT) {
+ range [n_range].cast = cast;
+ range [n_range].format = s_strdup (format);
+ }
+ n_range++;
+}
+
+long unsigned getvalue (char *filename, int lineno)
+{
+ long unsigned
+ ulong;
+ int
+ n;
+ char
+ *format;
+
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ if (((buffer [bufp] == 'u' || buffer [bufp] == 'U') && buffer [bufp + 1] == '+') ||
+ (buffer [bufp] == '0' && (buffer [bufp + 1] == 'x' || buffer [bufp + 1] == 'X'))) {
+ bufp += 2;
+ format = "%lx%n";
+ } else if (buffer [bufp] == '0')
+ format = "%lo%n";
+ else
+ format = "%lu%n";
+ if (sscanf (buffer + bufp, format, &ulong, &n) != 1)
+ errit ("Missing value in \"%s\", line %i", filename, lineno);
+ bufp += n;
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ return ulong;
+}
+
+char *getword (char *filename, int lineno)
+{
+ int
+ n;
+
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ if (sscanf (buffer + bufp, "%s%n", bufword, &n) != 1)
+ errit ("Missing word in \"%s\", line %i", filename, lineno);
+ bufp += n;
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ return bufword;
+}
+
+char *getbasename (char *filename)
+{
+ char
+ *p;
+
+#ifdef __MSDOS__
+ p = strrchr (filename, '\\');
+#else /* unix */
+ p = strrchr (filename, '/');
+#endif
+ if (p)
+ return p + 1;
+ else
+ return filename;
+}
+
+char *getdirname (char *filename)
+{
+ char
+ c,
+ *p,
+ *dir;
+
+#ifdef __MSDOS__
+ p = strrchr (filename, '\\');
+#else /* unix */
+ p = strrchr (filename, '/');
+#endif
+ if (p) {
+ c = p [1];
+ p [1] = '\0';
+ dir = s_strdup (filename);
+ p [1] = c;
+ return dir;
+ } else
+ return NULL;
+}
+
+int getline (FILE *fp, int *lineno)
+{
+ int
+ i;
+
+ for (;;) {
+ if (fgets (buffer, BUFSIZE, fp) == NULL)
+ return 0;
+ (*lineno)++;
+ i = strlen (buffer);
+ while (i)
+ if (isspace ((unsigned char) buffer [i - 1]))
+ buffer [--i] = '\0';
+ else
+ break;
+ bufp = 0;
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ if (buffer [bufp] == '#')
+ continue;
+ if (buffer [bufp])
+ return 1;
+ }
+}
+
+void ferrit (char *filename, int lineno, char const *format, ...)
+{
+ va_list
+ list;
+
+ fprintf (stderr, "\nError %s: in file \"%s\", line %i: ", programname, filename, lineno);
+
+ va_start (list, format);
+ vfprintf (stderr, format, list);
+
+ fprintf (stderr, "\n\n");
+
+ exit (1);
+}
+
+void errit (char const *format, ...)
+{
+ va_list
+ list;
+
+ fprintf (stderr, "\nError %s: ", programname);
+
+ va_start (list, format);
+ vfprintf (stderr, format, list);
+
+ fprintf (stderr, "\n\n");
+
+ exit (1);
+}
+
+void get_programname (char const *argv0)
+{
+#ifdef __MSDOS__
+ char
+ name [MAXFILE];
+ fnsplit (argv0, NULL, NULL, name, NULL);
+ programname = strdup (name);
+#else /* unix */
+ char
+ *p;
+ p = strrchr (argv0, '/');
+ if (p)
+ programname = strdup (p + 1);
+ else
+ programname = strdup (argv0);
+#endif
+}
+
+void *s_malloc (size_t size)
+{
+ void
+ *p;
+
+ p = malloc (size);
+ if (! p) {
+ free (no_mem_buffer);
+ errit (out_of_memory);
+ }
+ return p;
+}
+
+void *s_realloc (void *block, size_t size)
+{
+ void
+ *p;
+
+ p = realloc (block, size);
+ if (! p) {
+ free (no_mem_buffer);
+ errit (out_of_memory);
+ }
+ return p;
+}
+
+char *s_strdup (char const *s)
+{
+ char
+ *s1;
+
+ if (s) {
+ s1 = (char *) s_malloc (strlen (s) + 1);
+ strcpy (s1, s);
+ } else {
+ s1 = (char *) s_malloc (1);
+ s1 [0] = '\0';
+ }
+ return s1;
+}
+
+void syntax ()
+{
+ fprintf (
+ stderr,
+ "\n"
+ "This is utf2any, version " UTFanyVERSION "\n"
+ "\n"
+ "Usage: %s -7|-8 [-f mapfile] [-v] [-w] [infile]\n"
+ "\n"
+ " -7 : Input is UTF-7\n"
+ " -8 : Input is UTF-8\n"
+ " -f : File with definitions of the symbol mappings\n"
+ " If multiple -f options are given, the files are processed in turn\n"
+ " -v : Verbose\n"
+ " -w : Warning messages\n"
+ "\n",
+ programname
+ );
+ exit (1);
+}
diff --git a/support/utf2any/utf2any.l b/support/utf2any/utf2any.l
new file mode 100644
index 0000000000..b7396ca3f7
--- /dev/null
+++ b/support/utf2any/utf2any.l
@@ -0,0 +1,1005 @@
+/*
+ * File: utf2any.l
+ *
+ * (c) Peter Kleiweg 2000
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * Compile:
+ * flex -B -8 utf2any.l
+ * gcc -s -Wall -o utf2any lex.yy.c -lfl
+ * rm lex.yy.c
+ *
+ */
+
+%{
+
+#define UTFanyVERSION "1.0"
+
+/*
+ * MAPDIR is the directory were symbol maps are searched.
+ * This should be a path, ending with a slash, surrounded by double quotes,
+ * or it should be NULL.
+ */
+
+#ifndef MAPDIR
+# ifdef __MSDOS__
+# define MAPDIR "c:\\utf\\"
+# else
+# define MAPDIR "/usr/local/lib/utf/"
+# endif
+#endif
+
+#ifdef __MSDOS__
+# ifndef __COMPACT__
+# error Memory model COMPACT required
+# endif
+# include <dir.h>
+# include <fcntl.h>
+#else
+# include <unistd.h>
+#endif
+#include <ctype.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __MSDOS__
+#define strcasecmp(A, B) (stricmp((A), (B)))
+#endif
+
+#define BUFSIZE 2048
+
+typedef enum { FALSE = 0, TRUE } BOOL_;
+
+typedef enum { uUNDEF = 0, uUTF7, uUTF8 } UTF_;
+
+typedef enum { aECHO, aSPACE, aSKIP, aFORMAT } ACTION_;
+
+typedef enum { cUCHAR, cUNSIGNED, cULONG, cNONE } CAST_;
+
+typedef struct {
+ unsigned long
+ ul,
+ order;
+ char
+ *s;
+} TRANS_;
+
+typedef struct {
+ long unsigned
+ from,
+ to;
+ ACTION_
+ action;
+ CAST_
+ cast;
+ char
+ *format;
+} RANGE_;
+
+BOOL_
+ verbose = FALSE,
+ warnings = FALSE;
+
+UTF_
+ utf_type = uUNDEF;
+
+TRANS_
+ *trans = NULL;
+
+RANGE_
+ *range = NULL;
+
+char
+ buf2 [BUFSIZE + 1],
+ buffer [BUFSIZE + 1],
+ bufword [BUFSIZE + 1],
+ f_unsigned [] = "[U+%04X]",
+ f_ulong [] = "[U+%08lX]",
+ *infile,
+ *lower [256],
+ *no_mem_buffer,
+ out_of_memory [] = "Out of memory",
+ *programname,
+ s_echo [] = "#ECHO#",
+ s_skip [] = "#SKIP#",
+ s_space [] = "#SPACE#";
+
+int
+ bufp,
+ max_range = 0,
+ max_trans = 0,
+ n_range = 0,
+ n_trans = 0,
+ wtable [256];
+
+unsigned int
+ instep,
+ outcode [2],
+ outstep;
+
+unsigned long
+ order = 0,
+ incount = 1;
+
+void
+ addchar (char *filename, int lineno, unsigned long ul, char *s),
+ addaction (
+ char *filename,
+ int lineno,
+ long unsigned from,
+ long unsigned to,
+ ACTION_ action,
+ CAST_ cast,
+ char *format
+ ),
+ bytes2 (void),
+ bytes3 (void),
+ bytes4 (void),
+ bytes5 (void),
+ bytes6 (void),
+ codewarn (unsigned long ul),
+ errit (char const *format, ...),
+ ferrit (char *filename, int lineno, char const *format, ...),
+ get_programname (char const *argv0),
+ nextout (void),
+ outchar (unsigned char i),
+ outsymbol (unsigned long ul),
+ readtrans (char *file, char *dir, int level),
+ *s_malloc (size_t size),
+ *s_realloc (void *block, size_t size),
+ syntax (void),
+ utf7 (void);
+
+char
+ *getbasename (char *s),
+ *getdirname (char *s),
+ *getword (char *filename, int lineno),
+ *s_strdup (char const *s);
+
+int
+ getline (FILE *fp, int *lineno),
+ nlcount (void),
+ searchcmp (const void *p1, const void *p2),
+ srtcmp (const void *p1, const void *p2);
+
+long unsigned
+ getvalue (char *filename, int lineno);
+
+#define YY_NO_UNPUT
+#define YY_SKIP_YYWRAP
+#ifdef yywrap
+# undef yywrap
+#endif
+int yywrap()
+{
+ return 1;
+}
+
+%}
+
+%Start _utf7 _utf7b _utf8
+
+%%
+
+<INITIAL>.|\n { yyless (0);
+ BEGIN ((utf_type == uUTF7) ? _utf7 : _utf8);
+ }
+
+<_utf7>{
+"+-" { outchar ('+'); }
+"+" { instep = outstep = 0;
+ BEGIN _utf7b; }
+}
+
+<_utf7b>{
+[A-Za-z0-9+/] { utf7 (); }
+"-" { BEGIN _utf7; }
+.|\n { if (yytext [0] == '\n')
+ incount++;
+ outchar (yytext [0]);
+ BEGIN _utf7; }
+}
+
+<_utf8>{
+[\300-\337]. { incount += nlcount (); bytes2 (); }
+[\340-\357].. { incount += nlcount (); bytes3 (); }
+[\360-\367]... { incount += nlcount (); bytes4 (); }
+[\370-\373].... { incount += nlcount (); bytes5 (); }
+[\374-\375]..... { incount += nlcount (); bytes6 (); }
+}
+
+<_utf7,_utf8>.|\n { if (yytext [0] == '\n')
+ incount++;
+ outchar (yytext [0]);
+ }
+
+%%
+
+/*
+ * Helper functions for UTF-7 parser
+ */
+
+void utf7 ()
+{
+ unsigned
+ i,
+ c;
+
+ i = yytext [0];
+ if (i >= 'A' && i <= 'Z')
+ c = i - 'A';
+ else if (i >= 'a' && i <= 'z')
+ c = i + 26 - 'a';
+ else if (i >= '0' && i <= '9')
+ c = i + 52 - '0';
+ else if (i == '+')
+ c = 62;
+ else if (i == '/')
+ c = 63;
+
+ switch (instep) {
+ case 0:
+ outcode [outstep] = (c << 2);
+ break;
+ case 1:
+ outcode [outstep] |= (c >> 4);
+ nextout ();
+ outcode [outstep] = (c << 4);
+ break;
+ case 2:
+ outcode [outstep] |= (c >> 2);
+ nextout ();
+ outcode [outstep] = (c << 6);
+ break;
+ case 3:
+ outcode [outstep] |= c;
+ nextout ();
+ break;
+ }
+ if (++instep == 4)
+ instep = 0;
+}
+
+void nextout ()
+{
+ unsigned
+ c;
+
+ if (outstep == 0) {
+ outstep = 1;
+ } else {
+ outstep = 0;
+ c = ((outcode [0] & 0xFF) << 8) | (outcode [1] & 0xFF);
+ outsymbol (c);
+ }
+}
+
+/*
+ * Helper functions for UTF-8 parser
+ */
+
+void bytes2 ()
+{
+ unsigned
+ u [2],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 2; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [1] & 0x3F)
+ | ((u [0] & 0x1F) << 6);
+
+ outsymbol (c);
+}
+
+
+void bytes3 ()
+{
+ unsigned
+ u [3],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 3; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [2] & 0x3F)
+ | ((u [1] & 0x3F) << 6)
+ | ((u [0] & 0x0F) << 12);
+
+ outsymbol (c);
+}
+
+void bytes4 ()
+{
+ long unsigned
+ u [4],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 4; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [3] & 0x3F)
+ | ((u [2] & 0x3F) << 6)
+ | ((u [1] & 0x3F) << 12)
+ | ((u [0] & 0x07) << 18);
+
+ outsymbol (c);
+}
+
+void bytes5 ()
+{
+ long unsigned
+ u [5],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 5; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [4] & 0x3F)
+ | ((u [3] & 0x3F) << 6)
+ | ((u [2] & 0x3F) << 12)
+ | ((u [1] & 0x3F) << 18)
+ | ((u [0] & 0x03) << 24);
+
+ outsymbol (c);
+}
+
+void bytes6 ()
+{
+ long unsigned
+ u [6],
+ c;
+ int
+ i;
+
+ for (i = 0; i < 6; i++)
+ u [i] = (unsigned char) yytext [i];
+
+ c = ( u [5] & 0x3F)
+ | ((u [4] & 0x3F) << 6)
+ | ((u [3] & 0x3F) << 12)
+ | ((u [2] & 0x3F) << 18)
+ | ((u [1] & 0x3F) << 24)
+ | ((u [0] & 0x01) << 30);
+
+ outsymbol (c);
+}
+
+/*
+ * General helper functions for parser
+ */
+
+void outchar (unsigned char c)
+{
+ if (wtable [c])
+ codewarn (c);
+
+ if (! lower [c])
+ fputc (c, yyout);
+ else
+ fputs (lower [c], yyout);
+}
+
+void outsymbol (unsigned long ul)
+{
+ int
+ i;
+ TRANS_
+ *p;
+
+ if (ul < 256) {
+ if (wtable [ul])
+ codewarn (ul);
+ if (! lower [ul])
+ fputc ((unsigned int) ul, yyout);
+ else
+ fputs (lower [ul], yyout);
+ return;
+ }
+
+ p = (TRANS_ *) bsearch (&ul, trans, n_trans, sizeof (TRANS_), searchcmp);
+ if (p) {
+ fputs (p->s, yyout);
+ return;
+ }
+
+ codewarn (ul);
+
+ for (i = n_range - 1; i >= 0; i--)
+ if (ul >= range [i].from && ul <= range [i].to)
+ break;
+ switch (range [i].action) {
+ case aSPACE:
+ fputc (' ', yyout);
+ break;
+ case aFORMAT:
+ if (range [i].cast == cUCHAR)
+ fprintf (yyout, range [i].format, (unsigned char) ul);
+ else if (range [i].cast == cUNSIGNED)
+ fprintf (yyout, range [i].format, (unsigned) ul);
+ else
+ fprintf (yyout, range [i].format, (unsigned long) ul);
+ break;
+ case aECHO:
+ /* won't happen beyond 255 */
+ case aSKIP:
+ break;
+ }
+}
+
+void codewarn (unsigned long ul)
+{
+ if (! warnings)
+ return;
+
+ if (ul < 0x10000)
+ fprintf (stderr, "%s:%lu: U+%04X %5u\n", infile, incount, (unsigned) ul, (unsigned) ul);
+ else
+ fprintf (stderr, "%s:%lu: U+%08lX %10lu\n", infile, incount, ul, ul);
+}
+
+int nlcount ()
+{
+ int
+ i,
+ sum;
+
+ sum = 0;
+ for (i = 0; yytext [i]; i++)
+ if (yytext [i] == '\n')
+ sum++;
+ return sum;
+}
+
+
+int main (int argc, char *argv [])
+{
+ int
+ i;
+
+ no_mem_buffer = (char *) malloc (1024);
+
+ get_programname (argv [0]);
+
+ /* pre-defined actions */
+ for (i = 0; i < 256; i++) {
+ lower [i] = NULL;
+ wtable [i] = 0;
+ }
+ addaction (NULL, 0, 0x10000, 0x7FFFFFFF, aFORMAT, cULONG, f_ulong);
+ addaction (NULL, 0, 0x100, 0xFFFF, aFORMAT, cUNSIGNED, f_unsigned);
+ addaction (NULL, 0, 0x7F, 0x9F, aFORMAT, cUNSIGNED, f_unsigned);
+ addaction (NULL, 0, 0, 0x1F, aFORMAT, cUNSIGNED, f_unsigned);
+ addchar (NULL, 0, '\t', s_echo);
+ addchar (NULL, 0, '\n', s_echo);
+ addchar (NULL, 0, '\r', s_echo);
+ addchar (NULL, 0, '\f', s_echo);
+
+ while (argc > 1 && argv [1][0] == '-') {
+ if (! strcmp (argv [1], "-7"))
+ utf_type = uUTF7;
+ else if (! strcmp (argv [1], "-8"))
+ utf_type = uUTF8;
+ else if (argv [1][1] == 'f') {
+ if (argv [1][2])
+ readtrans (argv [1] + 2, MAPDIR, 0);
+ else {
+ if (argc == 2)
+ errit ("Missing argument for option '-f'");
+ argv++;
+ argc--;
+ readtrans (argv [1], MAPDIR, 0);
+ }
+ } else if (! strcmp (argv [1], "-v"))
+ verbose = TRUE;
+ else if (! strcmp (argv [1], "-w"))
+ warnings = TRUE;
+ else
+ syntax ();
+ argv++;
+ argc--;
+ }
+
+ if (n_trans) {
+ qsort (trans, n_trans, sizeof (TRANS_), srtcmp);
+ i = 0;
+ while (i < n_trans - 1)
+ if (trans [i].ul == trans [i + 1].ul) {
+ memmove (trans + i, trans + i + 1, (n_trans - i - 1) * sizeof (TRANS_));
+ n_trans--;
+ } else
+ i++;
+ }
+
+ switch (argc) {
+ case 1:
+ if (isatty (fileno (stdin)))
+ syntax ();
+ yyin = stdin;
+ infile = "(stdin)";
+ break;
+ case 2:
+ yyin = fopen (argv [1], "r");
+ if (! yyin)
+ errit ("Opening file \"%s\": %s", argv [1], strerror (errno));
+ infile = argv [1];
+ break;
+ default:
+ syntax ();
+ }
+
+ if (! utf_type)
+ errit ("Missing option '-7' or '-8'");
+
+ yyout = stdout;
+
+#ifdef __MSDOS__
+ setmode (fileno (yyin ), O_BINARY);
+ setmode (fileno (yyout), O_BINARY);
+#endif
+
+ yylex ();
+
+ if (yyin != stdin)
+ fclose (yyin);
+ if (yyout != stdout)
+ fclose (yyin);
+
+ return 0;
+}
+
+int srtcmp (const void *p1, const void *p2)
+{
+ unsigned long
+ ul1,
+ ul2;
+
+
+ ul1 = ((TRANS_ *)p1)->ul;
+ ul2 = ((TRANS_ *)p2)->ul;
+ if (ul1 < ul2)
+ return -1;
+ else if (ul1 > ul2)
+ return 1;
+
+ ul1 = ((TRANS_ *)p1)->order;
+ ul2 = ((TRANS_ *)p2)->order;
+ if (ul1 < ul2)
+ return -1;
+ else
+ return 1;
+}
+
+int searchcmp (const void *p1, const void *p2)
+{
+ unsigned long
+ ul1,
+ ul2;
+
+ ul1 = *((unsigned long *)p1);
+ ul2 = ((TRANS_ *)p2)->ul;
+
+ if (ul1 < ul2)
+ return -1;
+ else if (ul1 > ul2)
+ return 1;
+ else
+ return 0;
+}
+
+void readtrans (char *file, char *dir, int level)
+{
+ int
+ lineno;
+ long unsigned
+ from,
+ to,
+ ul;
+ char
+ *s,
+ *filename,
+ *basename,
+ *dirname;
+ FILE
+ *fp;
+ CAST_
+ cast;
+
+ if (level > 10)
+ errit ("File \"%s\": nesting too deep", file);
+
+ /*
+ * Try opening file
+ * If failure and filename has no directory part, then try in dir
+ */
+ filename = file;
+ fp = fopen (filename, "r");
+ if ((! fp) && dir) {
+ basename = getbasename (filename);
+ if (! strcmp (basename, filename)) {
+ filename = (char *) s_malloc (
+ (strlen (basename) + strlen (dir) + 1) * sizeof (char)
+ );
+ strcpy (filename, dir);
+ strcat (filename, basename);
+ fp = fopen (filename, "r");
+ }
+ }
+ if (! fp)
+ errit ("Opening file \"%s\": %s", filename, strerror (errno));
+ if (verbose)
+ fprintf (stderr, "Begin %s\n", filename);
+
+ dirname = getdirname (filename);
+ if (! dirname)
+ dirname = dir;
+
+ lineno = 0;
+ while (getline (fp, &lineno)) {
+ switch (buffer [bufp]) {
+ /* translation for range of characters */
+ case 'd':
+ case 'D':
+ bufp++;
+ from = getvalue (filename, lineno);
+ to = getvalue (filename, lineno);
+ s = getword (filename, lineno);
+ if (! strcasecmp (s, s_skip))
+ addaction (filename, lineno, from, to, aSKIP, cNONE, NULL);
+ else if (! strcasecmp (s, s_echo))
+ addaction (filename, lineno, from, to, aECHO, cNONE, NULL);
+ else if (! strcasecmp (s, s_space))
+ addaction (filename, lineno, from, to, aSPACE, cNONE, NULL);
+ else {
+ if (! strcmp (s, "uchar"))
+ cast = cUCHAR;
+ else if (! strcmp (s, "unsigned"))
+ cast = cUNSIGNED;
+ else if (! strcmp (s, "ulong"))
+ cast = cULONG;
+ else
+ ferrit (filename, lineno, "Illegal action \"%s\"", s);
+ addaction (filename, lineno, from, to, aFORMAT, cast, buffer + bufp);
+ }
+ break;
+ /* include file */
+ case 'i':
+ case 'I':
+ bufp++;
+ readtrans (s_strdup (getword (filename, lineno)), dirname, level + 1);
+ break;
+ /* single character translation */
+ default:
+ ul = getvalue (filename, lineno);
+ addchar (filename, lineno, ul, buffer + bufp);
+ }
+ }
+ fclose (fp);
+ if (verbose)
+ fprintf (stderr, "End %s\n", filename);
+}
+
+void addchar (char *filename, int lineno, unsigned long ul, char *s)
+{
+ BOOL_
+ echo;
+
+ if (ul > 0x7fffffff)
+ ferrit (filename, lineno, "%s out of range: 0x%lX", s, ul);
+
+ echo = FALSE;
+
+ if (! strcasecmp (s, s_skip))
+ s = "";
+ else if (! strcasecmp (s, s_space))
+ s = " ";
+ else if (! strcasecmp (s, s_echo))
+ echo = TRUE;
+
+ if (ul < 256) {
+ lower [ul] = echo ? NULL : s_strdup (s);
+ wtable [ul] = 0;
+ } else {
+ if (echo)
+ ferrit (filename, lineno, "%s out of range: 0x%lX", s_echo, ul);
+ if (n_trans == max_trans) {
+ max_trans += 1024;
+ trans = (TRANS_ *) s_realloc (trans, max_trans * sizeof (TRANS_));
+ }
+ trans [n_trans].ul = ul;
+ trans [n_trans].order = order++;
+ trans [n_trans++].s = s_strdup (s);
+ }
+}
+
+void addaction (char *filename,
+ int lineno,
+ long unsigned from,
+ long unsigned to,
+ ACTION_ action,
+ CAST_ cast,
+ char *format)
+{
+ long unsigned
+ u;
+
+ if (from > to)
+ ferrit (filename, lineno, "Illegal range");
+
+ if (from > 0x7fffffff)
+ ferrit (filename, lineno, "Begin of range to large: 0x%lX", from);
+
+ if (to > 0x7fffffff)
+ ferrit (filename, lineno, "End of range to large: 0x%lX", to);
+
+ for (u = from; u <= to && u < 256; u++) {
+ wtable [u] = 1;
+ if (action == aSKIP)
+ lower [u] = "";
+ else if (action == aSPACE)
+ lower [u] = " ";
+ else if (action == aECHO)
+ lower [u] = NULL;
+ else {
+ if (cast == cUCHAR)
+ sprintf (buf2, format, (unsigned char) u);
+ else if (cast == cUNSIGNED)
+ sprintf (buf2, format, (unsigned) u);
+ else
+ sprintf (buf2, format, (long unsigned) u);
+ lower [u] = s_strdup (buf2);
+ }
+ }
+
+ if (from < 256)
+ from = 256;
+ if (from > to)
+ return;
+
+ if (action == aECHO)
+ ferrit (filename, lineno, "Out of range for %s", s_echo);
+
+ if (n_range == max_range) {
+ max_range += 256;
+ range = (RANGE_ *) s_realloc (range, max_range * sizeof (RANGE_));
+ }
+ range [n_range].from = from;
+ range [n_range].to = to;
+ range [n_range].action = action;
+ if (action == aFORMAT) {
+ range [n_range].cast = cast;
+ range [n_range].format = s_strdup (format);
+ }
+ n_range++;
+}
+
+long unsigned getvalue (char *filename, int lineno)
+{
+ long unsigned
+ ulong;
+ int
+ n;
+ char
+ *format;
+
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ if (((buffer [bufp] == 'u' || buffer [bufp] == 'U') && buffer [bufp + 1] == '+') ||
+ (buffer [bufp] == '0' && (buffer [bufp + 1] == 'x' || buffer [bufp + 1] == 'X'))) {
+ bufp += 2;
+ format = "%lx%n";
+ } else if (buffer [bufp] == '0')
+ format = "%lo%n";
+ else
+ format = "%lu%n";
+ if (sscanf (buffer + bufp, format, &ulong, &n) != 1)
+ errit ("Missing value in \"%s\", line %i", filename, lineno);
+ bufp += n;
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ return ulong;
+}
+
+char *getword (char *filename, int lineno)
+{
+ int
+ n;
+
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ if (sscanf (buffer + bufp, "%s%n", bufword, &n) != 1)
+ errit ("Missing word in \"%s\", line %i", filename, lineno);
+ bufp += n;
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ return bufword;
+}
+
+char *getbasename (char *filename)
+{
+ char
+ *p;
+
+#ifdef __MSDOS__
+ p = strrchr (filename, '\\');
+#else /* unix */
+ p = strrchr (filename, '/');
+#endif
+ if (p)
+ return p + 1;
+ else
+ return filename;
+}
+
+char *getdirname (char *filename)
+{
+ char
+ c,
+ *p,
+ *dir;
+
+#ifdef __MSDOS__
+ p = strrchr (filename, '\\');
+#else /* unix */
+ p = strrchr (filename, '/');
+#endif
+ if (p) {
+ c = p [1];
+ p [1] = '\0';
+ dir = s_strdup (filename);
+ p [1] = c;
+ return dir;
+ } else
+ return NULL;
+}
+
+int getline (FILE *fp, int *lineno)
+{
+ int
+ i;
+
+ for (;;) {
+ if (fgets (buffer, BUFSIZE, fp) == NULL)
+ return 0;
+ (*lineno)++;
+ i = strlen (buffer);
+ while (i)
+ if (isspace ((unsigned char) buffer [i - 1]))
+ buffer [--i] = '\0';
+ else
+ break;
+ bufp = 0;
+ while (buffer [bufp] && isspace ((unsigned char) buffer [bufp]))
+ bufp++;
+ if (buffer [bufp] == '#')
+ continue;
+ if (buffer [bufp])
+ return 1;
+ }
+}
+
+void ferrit (char *filename, int lineno, char const *format, ...)
+{
+ va_list
+ list;
+
+ fprintf (stderr, "\nError %s: in file \"%s\", line %i: ", programname, filename, lineno);
+
+ va_start (list, format);
+ vfprintf (stderr, format, list);
+
+ fprintf (stderr, "\n\n");
+
+ exit (1);
+}
+
+void errit (char const *format, ...)
+{
+ va_list
+ list;
+
+ fprintf (stderr, "\nError %s: ", programname);
+
+ va_start (list, format);
+ vfprintf (stderr, format, list);
+
+ fprintf (stderr, "\n\n");
+
+ exit (1);
+}
+
+void get_programname (char const *argv0)
+{
+#ifdef __MSDOS__
+ char
+ name [MAXFILE];
+ fnsplit (argv0, NULL, NULL, name, NULL);
+ programname = strdup (name);
+#else /* unix */
+ char
+ *p;
+ p = strrchr (argv0, '/');
+ if (p)
+ programname = strdup (p + 1);
+ else
+ programname = strdup (argv0);
+#endif
+}
+
+void *s_malloc (size_t size)
+{
+ void
+ *p;
+
+ p = malloc (size);
+ if (! p) {
+ free (no_mem_buffer);
+ errit (out_of_memory);
+ }
+ return p;
+}
+
+void *s_realloc (void *block, size_t size)
+{
+ void
+ *p;
+
+ p = realloc (block, size);
+ if (! p) {
+ free (no_mem_buffer);
+ errit (out_of_memory);
+ }
+ return p;
+}
+
+char *s_strdup (char const *s)
+{
+ char
+ *s1;
+
+ if (s) {
+ s1 = (char *) s_malloc (strlen (s) + 1);
+ strcpy (s1, s);
+ } else {
+ s1 = (char *) s_malloc (1);
+ s1 [0] = '\0';
+ }
+ return s1;
+}
+
+void syntax ()
+{
+ fprintf (
+ stderr,
+ "\n"
+ "This is utf2any, version " UTFanyVERSION "\n"
+ "\n"
+ "Usage: %s -7|-8 [-f mapfile] [-v] [-w] [infile]\n"
+ "\n"
+ " -7 : Input is UTF-7\n"
+ " -8 : Input is UTF-8\n"
+ " -f : File with definitions of the symbol mappings\n"
+ " If multiple -f options are given, the files are processed in turn\n"
+ " -v : Verbose\n"
+ " -w : Warning messages\n"
+ "\n",
+ programname
+ );
+ exit (1);
+}
diff --git a/support/utf2any/utfcode.c b/support/utf2any/utfcode.c
new file mode 100644
index 0000000000..62c68a3b31
--- /dev/null
+++ b/support/utf2any/utfcode.c
@@ -0,0 +1,305 @@
+/*
+ * file: utfcode.c
+ *
+ * (c) Peter Kleiweg 2000
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ */
+
+#define UTFcodeVERSION "1.0"
+
+#ifdef __MSDOS__
+#ifndef __COMPACT__
+#error Memory model COMPACT required
+#endif /* __COMPACT__ */
+#include <dir.h>
+#endif /* __MSDOS__ */
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+ obits = 0,
+ utf7 = 1,
+ utf8 = 1,
+ nr;
+
+unsigned
+ octal;
+
+long unsigned
+ *lu;
+
+char
+ *programname,
+ *no_mem_buffer,
+ out_of_memory [] = "Out of memory";
+
+void
+ utf_7 (void),
+ utf_8 (void),
+ outbyte (unsigned i),
+ outoct (void),
+ get_programname (char const *argv0),
+ errit (char const *format, ...),
+ syntax (void),
+ *s_malloc (size_t size),
+ *s_realloc (void *block, size_t size);
+char
+ *s_strdup (char const *s);
+
+int main (int argc, char *argv [])
+{
+ int
+ i;
+
+ no_mem_buffer = (char *) malloc (1024);
+
+ get_programname (argv [0]);
+
+ while (argc > 1) {
+ if (! strcmp (argv [1], "-7")) {
+ utf7 = 1;
+ utf8 = 0;
+ } else if (! strcmp (argv [1], "-8")) {
+ utf7 = 0;
+ utf8 = 1;
+ } else
+ break;
+ argv++;
+ argc--;
+ }
+
+ if (argc == 1)
+ syntax ();
+
+ nr = argc - 1;
+
+ lu = (long unsigned *) s_malloc (nr * sizeof (long unsigned));
+ for (i = 0; i < nr; i++) {
+ if ((argv [i + 1][0] == 'U' || argv [i + 1][0] == 'u') && argv [i + 1][1] == '+') {
+ argv [i + 1][0] = '0';
+ argv [i + 1][1] = 'x';
+ }
+ lu [i] = strtoul (argv [i + 1], NULL, 0);
+ }
+
+ if (utf7)
+ utf_7 ();
+
+ if (utf8)
+ utf_8 ();
+
+ return 0;
+}
+
+void utf_7 ()
+{
+ int
+ i;
+
+ fputc ('+', stdout);
+ for (i = 0; i < nr; i++)
+ if (lu [i] < 0x10000) {
+ outbyte (lu [i] >> 8);
+ outbyte (lu [i] & 0xFF);
+ } else
+ errit ("Too large for UTF-7: 0x%lX", lu [i]);
+
+ if (obits)
+ outoct ();
+
+ fputs ("-\n", stdout);
+}
+
+void outbyte (unsigned u)
+{
+ switch (obits) {
+ case 0:
+ octal = (u >> 2);
+ outoct ();
+ octal = ((u & 0x03) << 4);
+ obits = 2;
+ break;
+ case 2:
+ octal |= (u >> 4);
+ outoct ();
+ octal = ((u & 0x0F) << 2);
+ obits = 4;
+ break;
+ case 4:
+ octal |= (u >> 6);
+ outoct ();
+ octal = (u & 0x3F);
+ outoct ();
+ obits = 0;
+ break;
+ }
+}
+
+void outoct ()
+{
+ char
+ c;
+
+ if (octal < 26)
+ c = octal + 'A';
+ else if (octal < 52)
+ c = octal - 26 + 'a';
+ else if (octal < 62)
+ c = octal - 52 + '0';
+ else if (octal == 62)
+ c = '+';
+ else
+ c = '/';
+ fputc (c, stdout);
+}
+
+void utf_8 ()
+{
+ int
+ i;
+
+ for (i = 0; i < nr; i++) {
+ /* 1 byte */
+ if (lu [i] < 0x80)
+ fputc (lu [i], stdout);
+
+ /* 2 bytes */
+ else if (lu [i] < 0x800) {
+ fputc (0xC0 | (lu [i] >> 6), stdout);
+ fputc (0x80 | (lu [i] & 0x3F), stdout);
+ }
+
+ /* 3 bytes */
+ else if (lu [i] < 0x10000) {
+ fputc (0xE0 | (lu [i] >> 12), stdout);
+ fputc (0x80 | ((lu [i] >> 6) & 0x3F), stdout);
+ fputc (0x80 | (lu [i] & 0x3F), stdout);
+ }
+
+ /* 4 bytes */
+ else if (lu [i] < 0x200000) {
+ fputc (0xF0 | (lu [i] >> 18), stdout);
+ fputc (0x80 | ((lu [i] >> 12) & 0x3F), stdout);
+ fputc (0x80 | ((lu [i] >> 6) & 0x3F), stdout);
+ fputc (0x80 | (lu [i] & 0x3F), stdout);
+ }
+
+ /* 5 bytes */
+ else if (lu [i] < 0x4000000) {
+ fputc (0xF8 | (lu [i] >> 24), stdout);
+ fputc (0x80 | ((lu [i] >> 18) & 0x3F), stdout);
+ fputc (0x80 | ((lu [i] >> 12) & 0x3F), stdout);
+ fputc (0x80 | ((lu [i] >> 6) & 0x3F), stdout);
+ fputc (0x80 | (lu [i] & 0x3F), stdout);
+ }
+
+ /* 6 bytes */
+ else if (lu [i] < 0x80000000) {
+ fputc (0xFC | (lu [i] >> 30), stdout);
+ fputc (0x80 | ((lu [i] >> 24) & 0x3F), stdout);
+ fputc (0x80 | ((lu [i] >> 18) & 0x3F), stdout);
+ fputc (0x80 | ((lu [i] >> 12) & 0x3F), stdout);
+ fputc (0x80 | ((lu [i] >> 6) & 0x3F), stdout);
+ fputc (0x80 | (lu [i] & 0x3F), stdout);
+ } else
+ errit ("Too large for UTF-8: 0x%lX", lu [i]);
+ }
+ fputc ('\n', stdout);
+}
+
+void errit (char const *format, ...)
+{
+ va_list
+ list;
+
+ fprintf (stderr, "\nError %s: ", programname);
+
+ va_start (list, format);
+ vfprintf (stderr, format, list);
+
+ fprintf (stderr, "\n\n");
+
+ exit (1);
+}
+
+void get_programname (char const *argv0)
+{
+#ifdef __MSDOS__
+ char
+ name [MAXFILE];
+ fnsplit (argv0, NULL, NULL, name, NULL);
+ programname = strdup (name);
+#else /* unix */
+ char
+ *p;
+ p = strrchr (argv0, '/');
+ if (p)
+ programname = strdup (p + 1);
+ else
+ programname = strdup (argv0);
+#endif
+}
+
+void *s_malloc (size_t size)
+{
+ void
+ *p;
+
+ p = malloc (size);
+ if (! p) {
+ free (no_mem_buffer);
+ errit (out_of_memory);
+ }
+ return p;
+}
+
+void *s_realloc (void *block, size_t size)
+{
+ void
+ *p;
+
+ p = realloc (block, size);
+ if (! p) {
+ free (no_mem_buffer);
+ errit (out_of_memory);
+ }
+ return p;
+}
+
+char *s_strdup (char const *s)
+{
+ char
+ *s1;
+
+ if (s) {
+ s1 = (char *) s_malloc (strlen (s) + 1);
+ strcpy (s1, s);
+ } else {
+ s1 = (char *) s_malloc (1);
+ s1 [0] = '\0';
+ }
+ return s1;
+}
+
+void syntax ()
+{
+ fprintf (
+ stderr,
+ "\n"
+ "This is utfcode, version " UTFcodeVERSION "\n"
+ "\n"
+ "Usage: %s [-7|-8] [number...]\n"
+ "\n"
+ " -7: utf-7 only\n"
+ " -8: utf-8 only\n"
+ "\n",
+ programname
+ );
+ exit (1);
+}