]> granicus.if.org Git - docbook-dsssl/commitdiff
Added initial backend support for more complete and robust
authorMichael Smith <xmldoc@users.sourceforge.net>
Thu, 9 Jun 2005 14:45:05 +0000 (14:45 +0000)
committerMichael Smith <xmldoc@users.sourceforge.net>
Thu, 9 Jun 2005 14:45:05 +0000 (14:45 +0000)
translation of Unicode special characters/symbols into
corresponding roff escape sequences.

xsl/manpages/roff.charmap.xml [new file with mode: 0755]
xsl/manpages/unicodetrans.xsl [new file with mode: 0755]

diff --git a/xsl/manpages/roff.charmap.xml b/xsl/manpages/roff.charmap.xml
new file mode 100755 (executable)
index 0000000..d6bed7d
--- /dev/null
@@ -0,0 +1,5018 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<xsl:character-map xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                  xmlns:unichar="http://docbook.sourceforge.net/xmlns/unichar/1.0">
+
+<!-- ********************************************************************
+     $Id$
+     ********************************************************************
+
+     This file is part of the XSL DocBook Stylesheet distribution.
+     See ../README or http://docbook.sf.net/release/xsl/current/ for
+     copyright and other information.
+
+     ******************************************************************** -->
+
+<!-- * *************************************************************** -->
+<!-- *    Commentary -->
+<!-- * *************************************************************** -->
+<!-- * This file maps a small subset of Unicode characters (around 800 -->
+<!-- * or so) to corresponding roff escape sequences. Use it when you -->
+<!-- * need to convert Unicode (UTF-8 or UTF-16) encoded XML content -->
+<!-- * to roff (e.g., to generate "portable" man-page output). -->
+<!-- * -->
+<!-- * Although the format follows the "character map" format -->
+<!-- * specified in the XSLT 2.0 working draft[1], it can be used with -->
+<!-- * an appropriate XSLT 1.0 stylesheet and any XSLT 1.0 processor. -->
+<!-- * -->
+<!-- *   [1] http://www.w3.org/TR/xslt20/#character-maps -->
+<!-- * -->
+<!-- * In order to make the character map more readable, it uses the -->
+<!-- * following "extension attributes" (in the "unichar" namespace): -->
+<!-- * -->
+<!-- * - unichar:name = ISO character name (e.g., "YEN SIGN") -->
+<!-- * - unichar:entity = ISO entity name (e.g., "yen") -->
+<!-- * -->
+<!-- * Use of such extension attributes is permitted by the XSLT 2.0 -->
+<!-- * spec; see the "Extension Attributes" section[2]. -->
+<!-- * -->
+<!-- *   [2] http://www.w3.org/TR/xslt20/#extension-attributes -->
+<!-- * -->
+<!-- * The initial version of this file (before the "string" mappings -->
+<!-- * were added) was generated by taking the "unichars.el" file from -->
+<!-- * Norm Walsh's "xmlunicode.el"[3] elisp distro, and running a -->
+<!-- * script on it to convert it to XML. -->
+<!-- * -->
+<!-- * Note: In place of the literal backlash "\" character used in roff -->
+<!-- * to indicate the start of an escape sequence, this file uses -->
+<!-- * "@esc@". So an additional string-substition step needs to be done -->
+<!-- * on any output generated using the data from this file, before -->
+<!-- * final roff output, to replace the "@esc@" instances with the -->
+<!-- * literal backslash characters that roff expects. -->
+
+<!-- * *************************************************************** -->
+<!-- *    Acknowledgements -->
+<!-- * *************************************************************** -->
+<!-- * References used in selecting roff mappings: -->
+<!-- * -->
+<!-- *   - groff_char(7) man page[3] -->
+<!-- *   - groff info file[4]; in particular, the "Page Motions" node[5] -->
+<!-- *   - tables in "Character Sets" chapter of "XML In a Nutshell"[6] -->
+<!-- * -->
+<!-- *   [3] http://www.linux.se/showMan.php?TITLE=groff_char&SECTION=7 -->
+<!-- *   [4] http://www.fifi.org/cgi-bin/info2www?(groff) -->
+<!-- *   [5] http://www.fifi.org/cgi-bin/info2www?(groff)Page+Motions -->
+<!-- *   [6] http://www.ibiblio.org/xml/books/xian2/ -->
+<!-- * -->
+<!-- * The idea for doing this in XML/XSLT came from working with -->
+<!-- * Steve Cheng's docbook2x package[7] - in particular, the -->
+<!-- * "utf8trans" utility and character-map system in that package. -->
+<!-- * -->
+<!-- *   [7] http://docbook2x.sourceforge.net/ -->
+<!-- * -->
+<!-- * ################################################################# -->
+
+<!-- * ***************************************************************** -->
+<!-- * Begin: Latin-1/ISO-8859-1 -->
+<!-- * x00a0 to x00ff -->
+<!-- * ***************************************************************** -->
+
+<!-- * A no-break space can be written two ways in roff; the difference, -->
+<!-- * according to the "Page Motions" node in the groff info page, is: -->
+<!-- * -->
+<!-- *   "\ " = -->
+<!-- *   An unbreakable and unpaddable (i.e. not expanded during filling) -->
+<!-- *   space. -->
+<!-- * -->
+<!-- *   "\~" = -->
+<!-- *   An unbreakable space that stretches like a normal -->
+<!-- *   inter-word space when a line is adjusted."  -->
+<!-- * -->
+<!-- * Unfortunately, roff seems to do some weird things with long -->
+<!-- * lines that only have words separated by "\~" spaces, so it's -->
+<!-- * safer just to stick with the "\ " space -->
+  <xsl:output-character
+   char="&#x00a0;"
+   unichar:name="NO-BREAK SPACE"
+   unichar:entity="nbsp"
+   string="@esc@ "
+   />
+  <xsl:output-character
+   char="&#x00a1;"
+   unichar:name="INVERTED EXCLAMATION MARK"
+   unichar:entity="iexcl"
+   string="@esc@(r!"
+   />
+  <xsl:output-character
+   char="&#x00a2;"
+   unichar:name="CENT SIGN"
+   unichar:entity="cent"
+   string="@esc@(ct"
+   />
+  <xsl:output-character
+   char="&#x00a3;"
+   unichar:name="POUND SIGN"
+   unichar:entity="pound"
+   string="@esc@(Po"
+   />
+  <xsl:output-character
+   char="&#x00a4;"
+   unichar:name="CURRENCY SIGN"
+   unichar:entity="curren"
+   string="@esc@(Cs"
+   />
+  <xsl:output-character
+   char="&#x00a5;"
+   unichar:name="YEN SIGN"
+   unichar:entity="yen"
+   string="@esc@(Ye"
+   />
+  <xsl:output-character
+   char="&#x00a6;"
+   unichar:name="BROKEN BAR"
+   unichar:entity="brvbar"
+   string="@esc@(bb"
+   />
+  <xsl:output-character
+   char="&#x00a7;"
+   unichar:name="SECTION SIGN"
+   unichar:entity="sect"
+   string="@esc@(sc"
+   />
+  <xsl:output-character
+   char="&#x00a8;"
+   unichar:name="DIAERESIS"
+   unichar:entity="Dot"
+   string="@esc@(ad"
+   />
+  <xsl:output-character
+   char="&#x00a9;"
+   unichar:name="COPYRIGHT SIGN"
+   unichar:entity="copy"
+   string="@esc@(co"
+   />
+  <xsl:output-character
+   char="&#x00aa;"
+   unichar:name="FEMININE ORDINAL INDICATOR"
+   unichar:entity="ordf"
+   string="@esc@(Of"
+   />
+  <xsl:output-character
+   char="&#x00ab;"
+   unichar:name="LEFT-POINTING DOUBLE ANGLE QUOTATION MARK"
+   unichar:entity="laquo"
+   string="@esc@(Fo"
+   />
+  <xsl:output-character
+   char="&#x00ac;"
+   unichar:name="NOT SIGN"
+   unichar:entity="not"
+   string="@esc@(no"
+   />
+  <!-- * groff_char(7) man page says: "the soft hyphen control character -->
+  <!-- * (prints as itself).  groff never use this character for output -->
+  <!-- * (thus it is omitted in the table below); the input character 173 -->
+  <!-- * is onto \%." -->
+  <xsl:output-character
+   char="&#x00ad;"
+   unichar:name="SOFT HYPHEN"
+   unichar:entity="shy"
+   string="@esc@%"
+   />
+  <xsl:output-character
+   char="&#x00ae;"
+   unichar:name="REGISTERED SIGN"
+   unichar:entity="reg"
+   string="@esc@(rg"
+   />
+  <xsl:output-character
+   char="&#x00af;"
+   unichar:name="MACRON"
+   unichar:entity="macr"
+   string="@esc@(a-"
+   />
+  <xsl:output-character
+   char="&#x00b0;"
+   unichar:name="DEGREE SIGN"
+   unichar:entity="deg"
+   string="@esc@(de"
+   />
+  <xsl:output-character
+   char="&#x00b1;"
+   unichar:name="PLUS-MINUS SIGN"
+   unichar:entity="plusmn"
+   string="@esc@(+-"
+   />
+  <xsl:output-character
+   char="&#x00b2;"
+   unichar:name="SUPERSCRIPT TWO"
+   unichar:entity="sup2"
+   string="@esc@(S2"
+   />
+  <xsl:output-character
+   char="&#x00b3;"
+   unichar:name="SUPERSCRIPT THREE"
+   unichar:entity="sup3"
+   string="@esc@(S3"
+   />
+  <xsl:output-character
+   char="&#x00b4;"
+   unichar:name="ACUTE ACCENT"
+   unichar:entity="acute"
+   string="@esc@(aa"
+   />
+  <xsl:output-character
+   char="&#x00b5;"
+   unichar:name="MICRO SIGN"
+   unichar:entity="micro"
+   string="@esc@(mc"
+   />
+  <xsl:output-character
+   char="&#x00b6;"
+   unichar:name="PILCROW SIGN"
+   unichar:entity="para"
+   string="@esc@(ps"
+   />
+  <!-- * according to groff_char(7), I think the escape string \(pc -->
+  <!-- * "periodcentered" could also be used for middot; not sure which -->
+  <!-- * is better, but "md" mnemonic is a better fit :-) -->
+  <xsl:output-character
+   char="&#x00b7;"
+   unichar:name="MIDDLE DOT"
+   unichar:entity="middot"
+   string="@esc@(md"
+   />
+  <xsl:output-character
+   char="&#x00b8;"
+   unichar:name="CEDILLA"
+   unichar:entity="cedil"
+   string="@esc@(ac"
+   />
+  <xsl:output-character
+   char="&#x00b9;"
+   unichar:name="SUPERSCRIPT ONE"
+   unichar:entity="sup1"
+   string="@esc@(S1"
+   />
+  <xsl:output-character
+   char="&#x00ba;"
+   unichar:name="MASCULINE ORDINAL INDICATOR"
+   unichar:entity="ordm"
+   string="@esc@(Om"
+   />
+  <xsl:output-character
+   char="&#x00bb;"
+   unichar:name="RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK"
+   unichar:entity="raquo"
+   string="@esc@(Fc"
+   />
+  <xsl:output-character
+   char="&#x00bc;"
+   unichar:name="VULGAR FRACTION ONE QUARTER"
+   unichar:entity="frac14"
+   string="@esc@(14"
+   />
+  <xsl:output-character
+   char="&#x00bd;"
+   unichar:name="VULGAR FRACTION ONE HALF"
+   unichar:entity="frac12"
+   string="@esc@(12"
+   />
+  <xsl:output-character
+   char="&#x00be;"
+   unichar:name="VULGAR FRACTION THREE QUARTERS"
+   unichar:entity="frac34"
+   string="@esc@(34"
+   />
+  <xsl:output-character
+   char="&#x00bf;"
+   unichar:name="INVERTED QUESTION MARK"
+   unichar:entity="iquest"
+   string="@esc@(r?"
+   />
+  <xsl:output-character
+   char="&#x00c0;"
+   unichar:name="LATIN CAPITAL LETTER A WITH GRAVE"
+   unichar:entity="Agrave"
+   string="@esc@(`A"
+   />
+  <xsl:output-character
+   char="&#x00c1;"
+   unichar:name="LATIN CAPITAL LETTER A WITH ACUTE"
+   unichar:entity="Aacute"
+   string="@esc@('A"
+   />
+  <xsl:output-character
+   char="&#x00c2;"
+   unichar:name="LATIN CAPITAL LETTER A WITH CIRCUMFLEX"
+   unichar:entity="Acirc"
+   string="@esc@(^A"
+   />
+  <xsl:output-character
+   char="&#x00c3;"
+   unichar:name="LATIN CAPITAL LETTER A WITH TILDE"
+   unichar:entity="Atilde"
+   string="@esc@(~A"
+   />
+  <xsl:output-character
+   char="&#x00c4;"
+   unichar:name="LATIN CAPITAL LETTER A WITH DIAERESIS"
+   unichar:entity="Auml"
+   string="@esc@(:A"
+   />
+  <xsl:output-character
+   char="&#x00c5;"
+   unichar:name="LATIN CAPITAL LETTER A WITH RING ABOVE"
+   unichar:entity="Aring"
+   string="@esc@(oA"
+   />
+  <xsl:output-character
+   char="&#x00c6;"
+   unichar:name="LATIN CAPITAL LETTER AE"
+   unichar:entity="AElig"
+   string="@esc@(AE"
+   />
+  <xsl:output-character
+   char="&#x00c7;"
+   unichar:name="LATIN CAPITAL LETTER C WITH CEDILLA"
+   unichar:entity="Ccedil"
+   string="@esc@(,C"
+   />
+  <xsl:output-character
+   char="&#x00c8;"
+   unichar:name="LATIN CAPITAL LETTER E WITH GRAVE"
+   unichar:entity="Egrave"
+   string="@esc@(`E"
+   />
+  <xsl:output-character
+   char="&#x00c9;"
+   unichar:name="LATIN CAPITAL LETTER E WITH ACUTE"
+   unichar:entity="Eacute"
+   string="@esc@('E"
+   />
+  <xsl:output-character
+   char="&#x00ca;"
+   unichar:name="LATIN CAPITAL LETTER E WITH CIRCUMFLEX"
+   unichar:entity="Ecirc"
+   string="@esc@(^E"
+   />
+  <xsl:output-character
+   char="&#x00cb;"
+   unichar:name="LATIN CAPITAL LETTER E WITH DIAERESIS"
+   unichar:entity="Euml"
+   string="@esc@(:E"
+   />
+  <xsl:output-character
+   char="&#x00cc;"
+   unichar:name="LATIN CAPITAL LETTER I WITH GRAVE"
+   unichar:entity="Igrave"
+   string="@esc@(`I"
+   />
+  <xsl:output-character
+   char="&#x00cd;"
+   unichar:name="LATIN CAPITAL LETTER I WITH ACUTE"
+   unichar:entity="Iacute"
+   string="@esc@('I"
+   />
+  <xsl:output-character
+   char="&#x00ce;"
+   unichar:name="LATIN CAPITAL LETTER I WITH CIRCUMFLEX"
+   unichar:entity="Icirc"
+   string="@esc@(^I"
+   />
+  <xsl:output-character
+   char="&#x00cf;"
+   unichar:name="LATIN CAPITAL LETTER I WITH DIAERESIS"
+   unichar:entity="Iuml"
+   string="@esc@(:I"
+   />
+  <xsl:output-character
+   char="&#x00d0;"
+   unichar:name="LATIN CAPITAL LETTER ETH"
+   unichar:entity="ETH"
+   string="@esc@(-D"
+   />
+  <xsl:output-character
+   char="&#x00d1;"
+   unichar:name="LATIN CAPITAL LETTER N WITH TILDE"
+   unichar:entity="Ntilde"
+   string="@esc@(~N"
+   />
+  <xsl:output-character
+   char="&#x00d2;"
+   unichar:name="LATIN CAPITAL LETTER O WITH GRAVE"
+   unichar:entity="Ograve"
+   string="@esc@(`O"
+   />
+  <xsl:output-character
+   char="&#x00d3;"
+   unichar:name="LATIN CAPITAL LETTER O WITH ACUTE"
+   unichar:entity="Oacute"
+   string="@esc@('O"
+   />
+  <xsl:output-character
+   char="&#x00d4;"
+   unichar:name="LATIN CAPITAL LETTER O WITH CIRCUMFLEX"
+   unichar:entity="Ocirc"
+   string="@esc@(^O"
+   />
+  <xsl:output-character
+   char="&#x00d5;"
+   unichar:name="LATIN CAPITAL LETTER O WITH TILDE"
+   unichar:entity="Otilde"
+   string="@esc@(~O"
+   />
+  <xsl:output-character
+   char="&#x00d6;"
+   unichar:name="LATIN CAPITAL LETTER O WITH DIAERESIS"
+   unichar:entity="Ouml"
+   string="@esc@(:O"
+   />
+  <xsl:output-character
+   char="&#x00d7;"
+   unichar:name="MULTIPLICATION SIGN"
+   unichar:entity="times"
+   string="@esc@(mu"
+   />
+  <xsl:output-character
+   char="&#x00d8;"
+   unichar:name="LATIN CAPITAL LETTER O WITH STROKE"
+   unichar:entity="Oslash"
+   string="@esc@(/O"
+   />
+  <xsl:output-character
+   char="&#x00d9;"
+   unichar:name="LATIN CAPITAL LETTER U WITH GRAVE"
+   unichar:entity="Ugrave"
+   string="@esc@(`U"
+   />
+  <xsl:output-character
+   char="&#x00da;"
+   unichar:name="LATIN CAPITAL LETTER U WITH ACUTE"
+   unichar:entity="Uacute"
+   string="@esc@('U"
+   />
+  <xsl:output-character
+   char="&#x00db;"
+   unichar:name="LATIN CAPITAL LETTER U WITH CIRCUMFLEX"
+   unichar:entity="Ucirc"
+   string="@esc@(^U"
+   />
+  <xsl:output-character
+   char="&#x00dc;"
+   unichar:name="LATIN CAPITAL LETTER U WITH DIAERESIS"
+   unichar:entity="Uuml"
+   string="@esc@(:U"
+   />
+  <xsl:output-character
+   char="&#x00dd;"
+   unichar:name="LATIN CAPITAL LETTER Y WITH ACUTE"
+   unichar:entity="Yacute"
+   string="@esc@('Y"
+   />
+  <xsl:output-character
+   char="&#x00de;"
+   unichar:name="LATIN CAPITAL LETTER THORN"
+   unichar:entity="THORN"
+   string="@esc@(TP"
+   />
+  <xsl:output-character
+   char="&#x00df;"
+   unichar:name="LATIN SMALL LETTER SHARP S"
+   unichar:entity="szlig"
+   string="@esc@(ss"
+   />
+  <xsl:output-character
+   char="&#x00e0;"
+   unichar:name="LATIN SMALL LETTER A WITH GRAVE"
+   unichar:entity="agrave"
+   string="@esc@(`a"
+   />
+  <xsl:output-character
+   char="&#x00e1;"
+   unichar:name="LATIN SMALL LETTER A WITH ACUTE"
+   unichar:entity="aacute"
+   string="@esc@('a"
+   />
+  <xsl:output-character
+   char="&#x00e2;"
+   unichar:name="LATIN SMALL LETTER A WITH CIRCUMFLEX"
+   unichar:entity="acirc"
+   string="@esc@(^a"
+   />
+  <xsl:output-character
+   char="&#x00e3;"
+   unichar:name="LATIN SMALL LETTER A WITH TILDE"
+   unichar:entity="atilde"
+   string="@esc@(~a"
+   />
+  <xsl:output-character
+   char="&#x00e4;"
+   unichar:name="LATIN SMALL LETTER A WITH DIAERESIS"
+   unichar:entity="auml"
+   string="@esc@(:a"
+   />
+  <xsl:output-character
+   char="&#x00e5;"
+   unichar:name="LATIN SMALL LETTER A WITH RING ABOVE"
+   unichar:entity="aring"
+   string="@esc@(oa"
+   />
+  <xsl:output-character
+   char="&#x00e6;"
+   unichar:name="LATIN SMALL LETTER AE"
+   unichar:entity="aelig"
+   string="@esc@(ae"
+   />
+  <xsl:output-character
+   char="&#x00e7;"
+   unichar:name="LATIN SMALL LETTER C WITH CEDILLA"
+   unichar:entity="ccedil"
+   string="@esc@(,c"
+   />
+  <xsl:output-character
+   char="&#x00e8;"
+   unichar:name="LATIN SMALL LETTER E WITH GRAVE"
+   unichar:entity="egrave"
+   string="@esc@(`e"
+   />
+  <xsl:output-character
+   char="&#x00e9;"
+   unichar:name="LATIN SMALL LETTER E WITH ACUTE"
+   unichar:entity="eacute"
+   string="@esc@('e"
+   />
+  <xsl:output-character
+   char="&#x00ea;"
+   unichar:name="LATIN SMALL LETTER E WITH CIRCUMFLEX"
+   unichar:entity="ecirc"
+   string="@esc@(^e"
+   />
+  <xsl:output-character
+   char="&#x00eb;"
+   unichar:name="LATIN SMALL LETTER E WITH DIAERESIS"
+   unichar:entity="euml"
+   string="@esc@(:e"
+   />
+  <xsl:output-character
+   char="&#x00ec;"
+   unichar:name="LATIN SMALL LETTER I WITH GRAVE"
+   unichar:entity="igrave"
+   string="@esc@(`i"
+   />
+  <xsl:output-character
+   char="&#x00ed;"
+   unichar:name="LATIN SMALL LETTER I WITH ACUTE"
+   unichar:entity="iacute"
+   string="@esc@('i"
+   />
+  <xsl:output-character
+   char="&#x00ee;"
+   unichar:name="LATIN SMALL LETTER I WITH CIRCUMFLEX"
+   unichar:entity="icirc"
+   string="@esc@(^i"
+   />
+  <xsl:output-character
+   char="&#x00ef;"
+   unichar:name="LATIN SMALL LETTER I WITH DIAERESIS"
+   unichar:entity="iuml"
+   string="@esc@(:i"
+   />
+  <xsl:output-character
+   char="&#x00f0;"
+   unichar:name="LATIN SMALL LETTER ETH"
+   unichar:entity="eth"
+   string="@esc@(Sd"
+   />
+  <xsl:output-character
+   char="&#x00f1;"
+   unichar:name="LATIN SMALL LETTER N WITH TILDE"
+   unichar:entity="ntilde"
+   string="@esc@(~n"
+   />
+  <xsl:output-character
+   char="&#x00f2;"
+   unichar:name="LATIN SMALL LETTER O WITH GRAVE"
+   unichar:entity="ograve"
+   string="@esc@(`o"
+   />
+  <xsl:output-character
+   char="&#x00f3;"
+   unichar:name="LATIN SMALL LETTER O WITH ACUTE"
+   unichar:entity="oacute"
+   string="@esc@('o"
+   />
+  <xsl:output-character
+   char="&#x00f4;"
+   unichar:name="LATIN SMALL LETTER O WITH CIRCUMFLEX"
+   unichar:entity="ocirc"
+   string="@esc@(^o"
+   />
+  <xsl:output-character
+   char="&#x00f5;"
+   unichar:name="LATIN SMALL LETTER O WITH TILDE"
+   unichar:entity="otilde"
+   string="@esc@(~o"
+   />
+  <xsl:output-character
+   char="&#x00f6;"
+   unichar:name="LATIN SMALL LETTER O WITH DIAERESIS"
+   unichar:entity="ouml"
+   string="@esc@(:o"
+   />
+  <xsl:output-character
+   char="&#x00f7;"
+   unichar:name="DIVISION SIGN"
+   unichar:entity="divide"
+   string="@esc@(di"
+   />
+  <xsl:output-character
+   char="&#x00f8;"
+   unichar:name="LATIN SMALL LETTER O WITH STROKE"
+   unichar:entity="oslash"
+   string="@esc@(/o"
+   />
+  <xsl:output-character
+   char="&#x00f9;"
+   unichar:name="LATIN SMALL LETTER U WITH GRAVE"
+   unichar:entity="ugrave"
+   string="@esc@(`u"
+   />
+  <xsl:output-character
+   char="&#x00fa;"
+   unichar:name="LATIN SMALL LETTER U WITH ACUTE"
+   unichar:entity="uacute"
+   string="@esc@('u"
+   />
+  <xsl:output-character
+   char="&#x00fb;"
+   unichar:name="LATIN SMALL LETTER U WITH CIRCUMFLEX"
+   unichar:entity="ucirc"
+   string="@esc@(^u"
+   />
+  <xsl:output-character
+   char="&#x00fc;"
+   unichar:name="LATIN SMALL LETTER U WITH DIAERESIS"
+   unichar:entity="uuml"
+   string="@esc@(:u"
+   />
+  <xsl:output-character
+   char="&#x00fd;"
+   unichar:name="LATIN SMALL LETTER Y WITH ACUTE"
+   unichar:entity="yacute"
+   string="@esc@('y"
+   />
+  <xsl:output-character
+   char="&#x00fe;"
+   unichar:name="LATIN SMALL LETTER THORN"
+   unichar:entity="thorn"
+   string="@esc@(Tp"
+   />
+  <xsl:output-character
+   char="&#x00ff;"
+   unichar:name="LATIN SMALL LETTER Y WITH DIAERESIS"
+   unichar:entity="yuml"
+   string="@esc@(:y"
+   />
+  <!-- * **************************************************************** -->
+  <!-- *   End: Latin-1/ISO-8859-1 -->
+  <!-- * **************************************************************** -->
+  
+  <!-- * **************************************************************** -->
+  <!-- *   Begin: -->
+  <!-- * -->
+  <!-- *     - x0100 to x017f (Latin Extended-A) -->
+  <!-- *     - x0180 to x023f (Latin Extended-B) -->
+  <!-- *     - x0250 to x02ad (IPA Extensions) -->
+  <!-- *     - x02b0 to x02ee (Spacing Modifier Letters) -->
+  <!-- *     - x0300 to x036f (Combining Diacritical Marks) -->
+  <!-- * -->
+  <!-- *   Other than the following exceptions, characters in these -->
+  <!-- *   blocks don't have any roff equivalents -->
+  <!-- * **************************************************************** -->
+
+  <xsl:output-character
+   char="&#x0131;"
+   unichar:name="LATIN SMALL LETTER DOTLESS I"
+   unichar:entity="inodot"
+   string="@esc@(.i"
+   />
+  <xsl:output-character
+   char="&#x0132;"
+   unichar:name="LATIN CAPITAL LIGATURE IJ"
+   unichar:entity="IJlig"
+   string="@esc@(IJ"
+   />
+  <xsl:output-character
+   char="&#x0133;"
+   unichar:name="LATIN SMALL LIGATURE IJ"
+   unichar:entity="ijlig"
+   string="@esc@(ij"
+   />
+  <xsl:output-character
+   char="&#x0141;"
+   unichar:name="LATIN CAPITAL LETTER L WITH STROKE"
+   unichar:entity="Lstrok"
+   string="@esc@(/L"
+   />
+  <xsl:output-character
+   char="&#x0142;"
+   unichar:name="LATIN SMALL LETTER L WITH STROKE"
+   unichar:entity="lstrok"
+   string="@esc@(/l"
+   />
+  <xsl:output-character
+   char="&#x0152;"
+   unichar:name="LATIN CAPITAL LIGATURE OE"
+   unichar:entity="OElig"
+   string="@esc@(OE"
+   />
+  <xsl:output-character
+   char="&#x0153;"
+   unichar:name="LATIN SMALL LIGATURE OE"
+   unichar:entity="oelig"
+   string="@esc@(oe"
+   />
+  <xsl:output-character
+   char="&#x0192;"
+   unichar:name="LATIN SMALL LETTER F WITH HOOK"
+   unichar:entity="fnof"
+   string="@esc@(Fn"
+   />
+  <xsl:output-character
+   char="&#x02c6;"
+   unichar:name="MODIFIER LETTER CIRCUMFLEX ACCENT"
+   unichar:entity="circ"
+   string="@esc@(a^"
+   />
+  <xsl:output-character
+   char="&#x02c7;"
+   unichar:name="CARON"
+   unichar:entity="caron"
+   string="@esc@(ac"
+   />
+  <xsl:output-character
+   char="&#x02c9;"
+   unichar:name="MODIFIER LETTER MACRON"
+   string="@esc@(a-"
+   />
+  <xsl:output-character
+   char="&#x02d8;"
+   unichar:name="BREVE"
+   unichar:entity="breve"
+   string="@esc@(ab"
+   />
+<!-- * there does not seem to by any roff equivalent for "dot above" -->
+<!-- * <xsl:output-character -->
+<!-- *  char="&#x02d9;" -->
+<!-- *  unichar:name="DOT ABOVE" -->
+<!-- *  unichar:entity="dot" -->
+<!-- *  /> -->
+  <xsl:output-character
+   char="&#x02da;"
+   unichar:name="RING ABOVE"
+   unichar:entity="ring"
+   string="@esc@(ao"
+   />
+  <xsl:output-character
+   char="&#x02db;"
+   unichar:name="OGONEK"
+   unichar:entity="ogon"
+   string="@esc@(ho"
+   />
+  <!-- groff_char(7) calls Unicode x02dd a "Hungarian umlaut"  -->
+  <xsl:output-character
+   char="&#x02dd;"
+   unichar:name="DOUBLE ACUTE ACCENT"
+   unichar:entity="dblac"
+   string='@esc@(a"'
+   />
+
+  <!-- * **************************************************************** -->
+  <!-- *   End: -->
+  <!-- *     - Latin Extended-A -->
+  <!-- *     - Latin Extended-B -->
+  <!-- *     - IPA Extensions -->
+  <!-- *     - Spacing Modifier Letters -->
+  <!-- *     - Combining Diacritical Marks -->
+  <!-- * **************************************************************** -->
+  
+  <!-- * **************************************************************** -->
+  <!-- *   Begin: Greek and Coptic -->
+  <!-- *     x0370 to x03ff -->
+  <!-- * **************************************************************** -->
+  
+  <xsl:output-character
+   char="&#x0391;"
+   unichar:name="GREEK CAPITAL LETTER ALPHA"
+   unichar:entity="Agr"
+   string="@esc@(*A)"
+   />
+  <xsl:output-character
+   char="&#x0392;"
+   unichar:name="GREEK CAPITAL LETTER BETA"
+   unichar:entity="Bgr"
+   string="@esc@(*B"
+   />
+  <xsl:output-character
+   char="&#x0393;"
+   unichar:name="GREEK CAPITAL LETTER GAMMA"
+   unichar:entity="Gamma"
+   string="@esc@(*G"
+   />
+  <xsl:output-character
+   char="&#x0394;"
+   unichar:name="GREEK CAPITAL LETTER DELTA"
+   unichar:entity="Delta"
+   string="@esc@(*D"
+   />
+  <xsl:output-character
+   char="&#x0395;"
+   unichar:name="GREEK CAPITAL LETTER EPSILON"
+   unichar:entity="Egr"
+   string="@esc@(*E"
+   />
+  <xsl:output-character
+   char="&#x0396;"
+   unichar:name="GREEK CAPITAL LETTER ZETA"
+   unichar:entity="Zgr"
+   string="@esc@(*Z"
+   />
+  <xsl:output-character
+   char="&#x0397;"
+   unichar:name="GREEK CAPITAL LETTER ETA"
+   unichar:entity="EEgr"
+   string="@esc@(*Y"
+   />
+  <xsl:output-character
+   char="&#x0398;"
+   unichar:name="GREEK CAPITAL LETTER THETA"
+   unichar:entity="THgr"
+   string="@esc@(*H"
+   />
+  <xsl:output-character
+   char="&#x0399;"
+   unichar:name="GREEK CAPITAL LETTER IOTA"
+   unichar:entity="Igr"
+   string="@esc@(*I"
+   />
+  <xsl:output-character
+   char="&#x039a;"
+   unichar:name="GREEK CAPITAL LETTER KAPPA"
+   unichar:entity="Kgr"
+   string="@esc@(*K"
+   />
+  <xsl:output-character
+   char="&#x039b;"
+   unichar:name="GREEK CAPITAL LETTER LAMDA"
+   unichar:entity="Lambda"
+   string="@esc@(*L"
+   />
+  <xsl:output-character
+   char="&#x039c;"
+   unichar:name="GREEK CAPITAL LETTER MU"
+   unichar:entity="Mgr"
+   string="@esc@(*M"
+   />
+  <xsl:output-character
+   char="&#x039d;"
+   unichar:name="GREEK CAPITAL LETTER NU"
+   unichar:entity="Ngr"
+   string="@esc@(*N"
+   />
+  <xsl:output-character
+   char="&#x039e;"
+   unichar:name="GREEK CAPITAL LETTER XI"
+   unichar:entity="Xgr"
+   string="@esc@(*C"
+   />
+  <xsl:output-character
+   char="&#x039f;"
+   unichar:name="GREEK CAPITAL LETTER OMICRON"
+   unichar:entity="Ogr"
+   string="@esc@(*O"
+   />
+  <xsl:output-character
+   char="&#x03a0;"
+   unichar:name="GREEK CAPITAL LETTER PI"
+   unichar:entity="Pgr"
+   string="@esc@(*P"
+   />
+  <xsl:output-character
+   char="&#x03a1;"
+   unichar:name="GREEK CAPITAL LETTER RHO"
+   unichar:entity="Rgr"
+   string="@esc@(*R"
+   />
+  <xsl:output-character
+   char="&#x03a3;"
+   unichar:name="GREEK CAPITAL LETTER SIGMA"
+   unichar:entity="Sgr"
+   string="@esc@(*S"
+   />
+  <xsl:output-character
+   char="&#x03a4;"
+   unichar:name="GREEK CAPITAL LETTER TAU"
+   unichar:entity="Tgr"
+   string="@esc@(*T"
+   />
+  <xsl:output-character
+   char="&#x03a5;"
+   unichar:name="GREEK CAPITAL LETTER UPSILON"
+   unichar:entity="Ugr"
+   string="@esc@(*U"
+   />
+  <xsl:output-character
+   char="&#x03a6;"
+   unichar:name="GREEK CAPITAL LETTER PHI"
+   unichar:entity="PHgr"
+   string="@esc@(*F"
+   />
+  <xsl:output-character
+   char="&#x03a7;"
+   unichar:name="GREEK CAPITAL LETTER CHI"
+   unichar:entity="KHgr"
+   string="@esc@(*X"
+   />
+  <xsl:output-character
+   char="&#x03a8;"
+   unichar:name="GREEK CAPITAL LETTER PSI"
+   unichar:entity="PSgr"
+   string="@esc@(*Q"
+   />
+  <xsl:output-character
+   char="&#x03a9;"
+   unichar:name="GREEK CAPITAL LETTER OMEGA"
+   unichar:entity="OHgr"
+   string="@esc@(*W"
+   />
+  <xsl:output-character
+   char="&#x03aa;"
+   unichar:name="GREEK CAPITAL LETTER IOTA WITH DIALYTIKA"
+   unichar:entity="Idigr"
+   string="@esc@(*I"
+   />
+  <xsl:output-character
+   char="&#x03ab;"
+   unichar:name="GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA"
+   unichar:entity="Udigr"
+   string="@esc@(*U"
+   />
+  <xsl:output-character
+   char="&#x03ac;"
+   unichar:name="GREEK SMALL LETTER ALPHA WITH TONOS"
+   unichar:entity="aacgr"
+   string="@esc@(*a"
+   />
+  <xsl:output-character
+   char="&#x03ad;"
+   unichar:name="GREEK SMALL LETTER EPSILON WITH TONOS"
+   unichar:entity="eacgr"
+   string="@esc@(*e"
+   />
+  <xsl:output-character
+   char="&#x03ae;"
+   unichar:name="GREEK SMALL LETTER ETA WITH TONOS"
+   unichar:entity="eeacgr"
+   string="@esc@(*y"
+   />
+  <xsl:output-character
+   char="&#x03af;"
+   unichar:name="GREEK SMALL LETTER IOTA WITH TONOS"
+   unichar:entity="iacgr"
+   string="@esc@(*i"
+   />
+  <xsl:output-character
+   char="&#x03b0;"
+   unichar:name="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS"
+   unichar:entity="udiagr"
+   string="@esc@(*u"
+   />
+  <xsl:output-character
+   char="&#x03b1;"
+   unichar:name="GREEK SMALL LETTER ALPHA"
+   unichar:entity="agr"
+   string="@esc@(*a"
+   />
+  <xsl:output-character
+   char="&#x03b2;"
+   unichar:name="GREEK SMALL LETTER BETA"
+   unichar:entity="beta"
+   string="@esc@(*b"
+   />
+  <xsl:output-character
+   char="&#x03b3;"
+   unichar:name="GREEK SMALL LETTER GAMMA"
+   unichar:entity="gamma"
+   string="@esc@(*g"
+   />
+  <xsl:output-character
+   char="&#x03b4;"
+   unichar:name="GREEK SMALL LETTER DELTA"
+   unichar:entity="delta"
+   string="@esc@(*d"
+   />
+  <xsl:output-character
+   char="&#x03b5;"
+   unichar:name="GREEK SMALL LETTER EPSILON"
+   unichar:entity="epsi"
+   string="@esc@(*e"
+   />
+  <xsl:output-character
+   char="&#x03b6;"
+   unichar:name="GREEK SMALL LETTER ZETA"
+   unichar:entity="zeta"
+   string="@esc@(*z"
+   />
+  <xsl:output-character
+   char="&#x03b7;"
+   unichar:name="GREEK SMALL LETTER ETA"
+   unichar:entity="eegr"
+   string="@esc@(*y"
+   />
+  <xsl:output-character
+   char="&#x03b8;"
+   unichar:name="GREEK SMALL LETTER THETA"
+   unichar:entity="thetas"
+   string="@esc@(*h"
+   />
+  <xsl:output-character
+   char="&#x03b9;"
+   unichar:name="GREEK SMALL LETTER IOTA"
+   unichar:entity="igr"
+   string="@esc@(*i"
+   />
+  <xsl:output-character
+   char="&#x03ba;"
+   unichar:name="GREEK SMALL LETTER KAPPA"
+   unichar:entity="kappa"
+   string="@esc@(*k"
+   />
+  <xsl:output-character
+   char="&#x03bb;"
+   unichar:name="GREEK SMALL LETTER LAMDA"
+   unichar:entity="lambda"
+   string="@esc@(*l"
+   />
+  <xsl:output-character
+   char="&#x03bc;"
+   unichar:name="GREEK SMALL LETTER MU"
+   unichar:entity="mgr"
+   string="@esc@(*m"
+   />
+  <xsl:output-character
+   char="&#x03bd;"
+   unichar:name="GREEK SMALL LETTER NU"
+   unichar:entity="ngr"
+   string="@esc@(*n"
+   />
+  <xsl:output-character
+   char="&#x03be;"
+   unichar:name="GREEK SMALL LETTER XI"
+   unichar:entity="xgr"
+   string="@esc@(*c"
+   />
+  <xsl:output-character
+   char="&#x03bf;"
+   unichar:name="GREEK SMALL LETTER OMICRON"
+   unichar:entity="ogr"
+   string="@esc@(*o"
+   />
+  <xsl:output-character
+   char="&#x03c0;"
+   unichar:name="GREEK SMALL LETTER PI"
+   unichar:entity="pgr"
+   string="@esc@(*p"
+   />
+  <xsl:output-character
+   char="&#x03c1;"
+   unichar:name="GREEK SMALL LETTER RHO"
+   unichar:entity="rgr"
+   string="@esc@(*r"
+   />
+  <xsl:output-character
+   char="&#x03c2;"
+   unichar:name="GREEK SMALL LETTER FINAL SIGMA"
+   unichar:entity="sfgr"
+   string="@esc@(ts"
+   />
+  <xsl:output-character
+   char="&#x03c3;"
+   unichar:name="GREEK SMALL LETTER SIGMA"
+   unichar:entity="sgr"
+   string="@esc@(*s"
+   />
+  <xsl:output-character
+   char="&#x03c4;"
+   unichar:name="GREEK SMALL LETTER TAU"
+   unichar:entity="tau"
+   string="@esc@(*t"
+   />
+  <xsl:output-character
+   char="&#x03c5;"
+   unichar:name="GREEK SMALL LETTER UPSILON"
+   unichar:entity="ugr"
+   string="@esc@(*u"
+   />
+  <xsl:output-character
+   char="&#x03c6;"
+   unichar:name="GREEK SMALL LETTER PHI"
+   unichar:entity="phgr"
+   string="@esc@(*f"
+   />
+  <xsl:output-character
+   char="&#x03c7;"
+   unichar:name="GREEK SMALL LETTER CHI"
+   unichar:entity="chi"
+   string="@esc@(*x"
+   />
+  <xsl:output-character
+   char="&#x03c8;"
+   unichar:name="GREEK SMALL LETTER PSI"
+   unichar:entity="psgr"
+   string="@esc@(*q"
+   />
+  <xsl:output-character
+   char="&#x03c9;"
+   unichar:name="GREEK SMALL LETTER OMEGA"
+   unichar:entity="ohgr"
+   string="@esc@(*w"
+   />
+  <xsl:output-character
+   char="&#x03ca;"
+   unichar:name="GREEK SMALL LETTER IOTA WITH DIALYTIKA"
+   unichar:entity="idigr"
+   string="@esc@(*i"
+   />
+  <xsl:output-character
+   char="&#x03cb;"
+   unichar:name="GREEK SMALL LETTER UPSILON WITH DIALYTIKA"
+   unichar:entity="udigr"
+   string="@esc@(*u"
+   />
+  <xsl:output-character
+   char="&#x03cc;"
+   unichar:name="GREEK SMALL LETTER OMICRON WITH TONOS"
+   unichar:entity="oacgr"
+   string="@esc@(*o"
+   />
+  <xsl:output-character
+   char="&#x03cd;"
+   unichar:name="GREEK SMALL LETTER UPSILON WITH TONOS"
+   unichar:entity="uacgr"
+   string="@esc@(*u"
+   />
+  <xsl:output-character
+   char="&#x03ce;"
+   unichar:name="GREEK SMALL LETTER OMEGA WITH TONOS"
+   unichar:entity="ohacgr"
+   string="@esc@(*w"
+   />
+  <xsl:output-character
+   char="&#x03d0;"
+   unichar:name="GREEK BETA SYMBOL"
+   string="@esc@(*B"
+   />
+  <xsl:output-character
+   char="&#x03d1;"
+   unichar:name="GREEK THETA SYMBOL"
+   unichar:entity="thetav"
+   string="@esc@(+h"
+   />
+  <xsl:output-character
+   char="&#x03d2;"
+   unichar:name="GREEK UPSILON WITH HOOK SYMBOL"
+   unichar:entity="Upsi"
+   string="@esc@(*U"
+   />
+  <xsl:output-character
+   char="&#x03d3;"
+   unichar:name="GREEK UPSILON WITH ACUTE AND HOOK SYMBOL"
+   string="@esc@(*U"
+   />
+  <xsl:output-character
+   char="&#x03d4;"
+   unichar:name="GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL"
+   string="@esc@(*U"
+   />
+  <xsl:output-character
+   char="&#x03d5;"
+   unichar:name="GREEK PHI SYMBOL"
+   unichar:entity="phis"
+   string="@esc@(+f"
+   />
+  <xsl:output-character
+   char="&#x03d6;"
+   unichar:name="GREEK PI SYMBOL"
+   unichar:entity="piv"
+   string="@esc@(+p"
+   />
+  <!-- no mappings for remaining chars x03d7 to x03ef -->
+  <xsl:output-character
+   char="&#x03f0;"
+   unichar:name="GREEK KAPPA SYMBOL"
+   unichar:entity="kappav"
+   string="(*k"
+   />
+  <xsl:output-character
+   char="&#x03f1;"
+   unichar:name="GREEK RHO SYMBOL"
+   unichar:entity="rhov"
+   string="@esc@(*r"
+   />
+  <xsl:output-character
+   char="&#x03f2;"
+   unichar:name="GREEK LUNATE SIGMA SYMBOL"
+   string="@esc@(*s"
+   />
+  <xsl:output-character
+   char="&#x03f4;"
+   unichar:name="GREEK CAPITAL THETA SYMBOL"
+   string="@esc@(*H"
+   />
+  <xsl:output-character
+   char="&#x03f5;"
+   unichar:name="GREEK LUNATE EPSILON SYMBOL"
+   string="@esc@(*e"
+   />
+  <xsl:output-character
+   char="&#x03f6;"
+   unichar:name="GREEK REVERSED LUNATE EPSILON SYMBOL"
+   unichar:entity="bepsi"
+   string="@esc@(*e"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Greek and Coptic -->
+  <!-- * ***************************************************************** -->
+  
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+  <!-- *   Cyrillic -->
+  <!-- *   x0400 to x04ff -->
+  <!-- *   - do nothing - -->
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+  
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: General Punctuation -->
+  <!-- *   x2000 to x206f -->
+  <!-- * ***************************************************************** -->
+  
+  <!-- * first, spaces of various widths -->
+
+  <!-- * Note: There does not seem to be either a real em space or en space -->
+  <!-- * in roff; to approximate them, this character map assumes that in -->
+  <!-- * most fonts, an en space is about the same as the width of a digit -->
+  <!-- * (in roff, "\0"), so an em space (which by definition is -->
+  <!-- * equal to the width of two en spaces) is about the same as the width -->
+  <!-- * of two digits (thus, in roff, "\0\0") -->
+
+  <xsl:output-character
+   char="&#x2000;"
+   unichar:name="EN QUAD"
+   string="@esc@0"
+   />
+  <xsl:output-character
+   char="&#x2001;"
+   unichar:name="EM QUAD"
+   string="@esc@0@esc@0"
+   />
+  <xsl:output-character
+   char="&#x2002;"
+   unichar:name="EN SPACE"
+   unichar:entity="ensp"
+   string="@esc@0"
+   />
+  <xsl:output-character
+   char="&#x2003;"
+   unichar:name="EM SPACE"
+   unichar:entity="emsp"
+   string="@esc@0@esc@0"
+   />
+  <!-- * roughly same width as a normal space -->
+  <xsl:output-character
+   char="&#x2004;"
+   unichar:name="THREE-PER-EM SPACE"
+   unichar:entity="emsp13"
+   string=" "
+   />
+  <!-- * roughly same width as a normal space -->
+  <xsl:output-character
+   char="&#x2005;"
+   unichar:name="FOUR-PER-EM SPACE"
+   unichar:entity="emsp14"
+   string=" "
+   />
+  <!-- * roughly same width as a normal space -->
+  <xsl:output-character
+   char="&#x2006;"
+   unichar:name="SIX-PER-EM SPACE"
+   string=" "
+   />
+  <!-- * same as roff "digit" space -->
+  <xsl:output-character
+   char="&#x2007;"
+   unichar:name="FIGURE SPACE"
+   unichar:entity="numsp"
+   string="@esc@0"
+   />
+  <!-- * punctuation space in most fonts is actually closer to a normal -->
+  <!-- * space than it is to a thin space -->
+  <xsl:output-character
+   char="&#x2008;"
+   unichar:name="PUNCTUATION SPACE"
+   unichar:entity="puncsp"
+   string=" "
+   />
+  <!-- * Note: Not sure how best to deal with thin space, because the roff -->
+  <!-- * thin space, "\^", prints as a zero-width space in TTY -->
+  <!-- * output. However, it seems that, unlike a hair space, a thin space, -->
+  <!-- * at 1/12 of an em, is still recognizable to most people as a space, -->
+  <!-- * so treating it as zero-width seems wrong. So, for the sake of making -->
+  <!-- * TTY output look OK, just substitute with a normal space; but real -->
+  <!-- * roff escape is "\(\^" -->
+  <xsl:output-character
+   char="&#x2009;"
+   unichar:name="THIN SPACE"
+   unichar:entity="thinsp"
+   string=" "
+   />
+  <!-- * I don't think there's a standard definition of what a hair -->
+  <!-- * space is; some guides just say it's "less than 1/5 of an em" or -->
+  <!-- * that it's "narrower than a thin space"; seems like in practice, -->
+  <!-- * it's *a lot* narrower than a thin space, to the point where -->
+  <!-- * it's close to being a non-space, so here it's substituted with -->
+  <!-- * roff equivalent of a zero-width no-break space -->
+  <xsl:output-character
+   char="&#x200a;"
+   unichar:name="HAIR SPACE"
+   unichar:entity="hairsp"
+   string="@esc@&amp;"
+   />
+  <!-- * map to roff "zero-width break point"  -->
+  <xsl:output-character
+   char="&#x200b;"
+   unichar:name="ZERO WIDTH SPACE"
+   string="@esc@:"
+   />
+
+  <!-- *   x200c and x200d have special purposes in some Indic languages (I -->
+  <!-- *   think); for the "correct" zero-width space, according to Unicode docs, -->
+  <!-- *   use x2060, not x200c or x200d -->
+  <!-- *     <xsl:output-character -->
+  <!-- *      char="&#x200c;" -->
+  <!-- *      unichar:name="ZERO WIDTH NON-JOINER" -->
+  <!-- *      string="@esc@:" -->
+  <!-- *      /> -->
+  <!-- *     <xsl:output-character -->
+  <!-- *      char="&#x200d;" -->
+  <!-- *      unichar:name="ZERO WIDTH JOINER" -->
+  <!-- *      string="@esc@&amp;" -->
+  <!-- *      /> -->
+  <!-- * non-visible  -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x200e;" -->
+  <!-- *      unichar:name="LEFT-TO-RIGHT MARK" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x200f;" -->
+  <!-- *      unichar:name="RIGHT-TO-LEFT MARK" -->
+  <!-- *      /> -->
+
+  <!-- * .................................................... -->
+  <!-- * next, hyphens and various dashes, bars, underscores  -->
+  <xsl:output-character
+   char="&#x2010;"
+   unichar:name="HYPHEN"
+   unichar:entity="hyphen"
+   string="@esc@(hy"
+   />
+  <xsl:output-character
+   char="&#x2011;"
+   unichar:name="NON-BREAKING HYPHEN"
+   string="@esc@&amp;-@esc@&amp;"
+   />
+  <!-- * roughly same width as en dash -->
+  <xsl:output-character
+   char="&#x2012;"
+   unichar:name="FIGURE DASH"
+   string="@esc@(en"
+   />
+  <xsl:output-character
+   char="&#x2013;"
+   unichar:name="EN DASH"
+   unichar:entity="ndash"
+   string="@esc@(en"
+   />
+  <xsl:output-character
+   char="&#x2014;"
+   unichar:name="EM DASH"
+   unichar:entity="mdash"
+   string="@esc@(em"
+   />
+  <!-- * seems roughly same width as em dash -->
+  <xsl:output-character
+   char="&#x2015;"
+   unichar:name="HORIZONTAL BAR"
+   unichar:entity="horbar"
+   string="@esc@(em"
+   />
+  <xsl:output-character
+   char="&#x2016;"
+   unichar:name="DOUBLE VERTICAL LINE"
+   unichar:entity="Verbar"
+   string="@esc@(bv@esc@(bv"
+   />
+  <!-- * no double-underscore in roff; so just make it a single -->
+  <!-- * underscore -->
+  <xsl:output-character
+   char="&#x2017;"
+   unichar:name="DOUBLE LOW LINE"
+   string="_"
+   />
+
+  <!-- * .................................................... -->
+  <!-- * various quotation marks -->
+  <xsl:output-character
+   char="&#x2018;"
+   unichar:name="LEFT SINGLE QUOTATION MARK"
+   unichar:entity="lsquo"
+   string="@esc@(oq"
+   />
+  <xsl:output-character
+   char="&#x2019;"
+   unichar:name="RIGHT SINGLE QUOTATION MARK"
+   unichar:entity="rsquo"
+   string="@esc@(cq"
+   />
+  <xsl:output-character
+   char="&#x201a;"
+   unichar:name="SINGLE LOW-9 QUOTATION MARK"
+   unichar:entity="lsquor"
+   string="@esc@(bq"
+   />
+  <!-- * no roff equiv; treat same as lsquo -->
+  <xsl:output-character
+   char="&#x201b;"
+   unichar:name="SINGLE HIGH-REVERSED-9 QUOTATION MARK"
+   string="@esc@(oq"
+   />
+  <xsl:output-character
+   char="&#x201c;"
+   unichar:name="LEFT DOUBLE QUOTATION MARK"
+   unichar:entity="ldquo"
+   string="@esc@(lq"
+   />
+  <xsl:output-character
+   char="&#x201d;"
+   unichar:name="RIGHT DOUBLE QUOTATION MARK"
+   unichar:entity="rdquo"
+   string="@esc@(rq"
+   />
+  <xsl:output-character
+   char="&#x201e;"
+   unichar:name="DOUBLE LOW-9 QUOTATION MARK"
+   unichar:entity="ldquor"
+   string="@esc@(Bq"
+   />
+  <!-- * no roff equiv; treat same as rdquo -->
+  <xsl:output-character
+   char="&#x201f;"
+   unichar:name="DOUBLE HIGH-REVERSED-9 QUOTATION MARK"
+   string="@esc@(rq"
+   />
+
+  <!-- * .................................................... -->
+  <!-- * various symbols -->
+  <xsl:output-character
+   char="&#x2020;"
+   unichar:name="DAGGER"
+   unichar:entity="dagger"
+   string="@esc@(dg"
+   />
+  <xsl:output-character
+   char="&#x2021;"
+   unichar:name="DOUBLE DAGGER"
+   unichar:entity="Dagger"
+   string="@esc@(dd"
+   />
+  <xsl:output-character
+   char="&#x2022;"
+   unichar:name="BULLET"
+   unichar:entity="bull"
+   string="@esc@(bu"
+   />
+  <!-- * no roff equiv -->
+  <xsl:output-character
+   char="&#x2023;"
+   unichar:name="TRIANGULAR BULLET"
+   string=">@esc@&amp;"
+   />
+  <!-- * no roff equiv -->
+  <xsl:output-character
+   char="&#x2024;"
+   unichar:name="ONE DOT LEADER"
+   string="@esc@&amp;."
+   />
+  <!-- * no roff equiv -->
+  <xsl:output-character
+   char="&#x2025;"
+   unichar:name="TWO DOT LEADER"
+   unichar:entity="nldr"
+   string="@esc@&amp;.."
+   />
+  <!-- * no roff equiv -->
+  <xsl:output-character
+   char="&#x2026;"
+   unichar:name="HORIZONTAL ELLIPSIS"
+   unichar:entity="hellip"
+   string="@esc@&amp;..."
+   />
+  <xsl:output-character
+   char="&#x2027;"
+   unichar:name="HYPHENATION POINT"
+   string="@esc@%"
+   />
+  <!-- * Begin x2028 to x202e - no idea what to do with these -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2028;" -->
+  <!-- *      unichar:name="LINE SEPARATOR" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2029;" -->
+  <!-- *      unichar:name="PARAGRAPH SEPARATOR" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x202a;" -->
+  <!-- *      unichar:name="LEFT-TO-RIGHT EMBEDDING" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x202b;" -->
+  <!-- *      unichar:name="RIGHT-TO-LEFT EMBEDDING" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x202c;" -->
+  <!-- *      unichar:name="POP DIRECTIONAL FORMATTING" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x202d;" -->
+  <!-- *      unichar:name="LEFT-TO-RIGHT OVERRIDE" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x202e;" -->
+  <!-- *      unichar:name="RIGHT-TO-LEFT OVERRIDE" -->
+  <!-- *      /> -->
+  <!-- *      End x2028 to x202e - no idea what to do with these -->
+
+  <!-- * seems like "narrow" nbsp is basically the same as a no-break -->
+  <!-- * space -->
+  <xsl:output-character
+   char="&#x202f;"
+   unichar:name="NARROW NO-BREAK SPACE"
+   string="@esc@ "
+   />
+  <xsl:output-character
+   char="&#x2030;"
+   unichar:name="PER MILLE SIGN"
+   unichar:entity="permil"
+   string="@esc@(%0"
+   />
+  <!-- * no roff equiv; no idea what to do with it -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2031;" -->
+  <!-- *      unichar:name="PER TEN THOUSAND SIGN" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2032;"
+   unichar:name="PRIME"
+   unichar:entity="prime"
+   string="@esc@(fm"
+   />
+  <xsl:output-character
+   char="&#x2033;"
+   unichar:name="DOUBLE PRIME"
+   unichar:entity="Prime"
+   string="@esc@(sd"
+   />
+  <xsl:output-character
+   char="&#x2034;"
+   unichar:name="TRIPLE PRIME"
+   unichar:entity="tprime"
+   string="@esc@(sd@esc@(fm"
+   />
+  <!-- * no idea for these  -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2035;" -->
+  <!-- *      unichar:name="REVERSED PRIME" -->
+  <!-- *      unichar:entity="bprime" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2036;" -->
+  <!-- *      unichar:name="REVERSED DOUBLE PRIME" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2037;" -->
+  <!-- *      unichar:name="REVERSED TRIPLE PRIME" -->
+  <!-- *      /> -->
+
+  <!-- * there is no low caret in roff -->
+  <xsl:output-character
+   char="&#x2038;"
+   unichar:name="CARET"
+   string="^"
+   />
+  <xsl:output-character
+   char="&#x2039;"
+   unichar:name="SINGLE LEFT-POINTING ANGLE QUOTATION MARK"
+   string="@esc@(fo"
+   />
+  <xsl:output-character
+   char="&#x203a;"
+   unichar:name="SINGLE RIGHT-POINTING ANGLE QUOTATION MARK"
+   string="@esc@(fc"
+   />
+  <!-- * not in roff -->
+  <xsl:output-character
+   char="&#x203b;"
+   unichar:name="REFERENCE MARK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x203c;"
+   unichar:name="DOUBLE EXCLAMATION MARK"
+   string="!!"
+   />
+  <xsl:output-character
+   char="&#x203d;"
+   unichar:name="INTERROBANG"
+   string="?!"
+   />
+  <xsl:output-character
+   char="&#x203e;"
+   unichar:name="OVERLINE"
+   string="@esc@(rn"
+   />
+  <xsl:output-character
+   char="&#x203f;"
+   unichar:name="UNDERTIE"
+   string="@esc@(ul"
+   />
+  <!-- * not in roff -->
+  <xsl:output-character
+   char="&#x2040;"
+   unichar:name="CHARACTER TIE"
+   string="@esc@(rn"
+   />
+  <!-- * not in roff -->
+  <xsl:output-character
+   char="&#x2041;"
+   unichar:name="CARET INSERTION POINT"
+   unichar:entity="caret"
+   string="^"
+   />
+  <!-- * not in roff -->
+  <xsl:output-character
+   char="&#x2042;"
+   unichar:name="ASTERISM"
+   string="*"
+   />
+  <!-- * not in roff; just make bold hyphen -->
+  <xsl:output-character
+   char="&#x2043;"
+   unichar:name="HYPHEN BULLET"
+   unichar:entity="hybull"
+   string="@esc@fB-@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2044;"
+   unichar:name="FRACTION SLASH"
+   string="@esc@(sl"
+   />
+  <!-- * not in roff -->
+  <xsl:output-character
+   char="&#x2045;"
+   unichar:name="LEFT SQUARE BRACKET WITH QUILL"
+   string="["
+   />
+  <!-- * not in roff -->
+  <xsl:output-character
+   char="&#x2046;"
+   unichar:name="RIGHT SQUARE BRACKET WITH QUILL"
+   string="]"
+   />
+  <xsl:output-character
+   char="&#x2047;"
+   unichar:name="DOUBLE QUESTION MARK"
+   string="??"
+   />
+  <xsl:output-character
+   char="&#x2048;"
+   unichar:name="QUESTION EXCLAMATION MARK"
+   string="?!"
+   />
+  <xsl:output-character
+   char="&#x2049;"
+   unichar:name="EXCLAMATION QUESTION MARK"
+   string="!?"
+   />
+  <!-- * not in roff -->
+  <xsl:output-character
+   char="&#x204a;"
+   unichar:name="TIRONIAN SIGN ET"
+   string="7"
+   />
+  <!-- * not in roff; just replace with un-reversed pilcrow -->
+  <xsl:output-character
+   char="&#x204b;"
+   unichar:name="REVERSED PILCROW SIGN"
+   string="@esc@(ps"
+   />
+  <!-- * not in roff; just make regular bullet -->
+  <xsl:output-character
+   char="&#x204c;"
+   unichar:name="BLACK LEFTWARDS BULLET"
+   string="@esc@(bu"
+   />
+  <!-- * not in roff; just make regular bullet -->
+  <xsl:output-character
+   char="&#x204d;"
+   unichar:name="BLACK RIGHTWARDS BULLET"
+   string="@esc@(bu"
+   />
+  <xsl:output-character
+   char="&#x204e;"
+   unichar:name="LOW ASTERISK"
+   string="*"
+   />
+
+  <!-- * ............................................................... -->
+  <!-- *   Remaining General Punctuation -->
+  <!-- *   from x2050 to x206f -->
+  <!-- *   only map a couple of these -->
+  <!-- * ............................................................... -->
+
+  <!-- * basically same as a normal space -->
+  <xsl:output-character
+   char="&#x205f;"
+   unichar:name="MEDIUM MATHEMATICAL SPACE"
+   string=" "
+   />
+  <!-- * Regarding x2060 vs. xFEFF, the document "Unicode Standard Annex #14, -->
+  <!-- * Line Breaking Properties"[1] says: -->
+  <!-- * -->
+  <!-- *   The word joiner character [x2060 a.k.a "WJ"] is the preferred -->
+  <!-- *   choice for an invisible character to keep other characters -->
+  <!-- *   together that would otherwise be split across the line at a direct -->
+  <!-- *   break. The character FEFF has the same effect, but because it is -->
+  <!-- *   also used in an unrelated way as a byte order mark, the use of the -->
+  <!-- *   WJ as the preferred interword glue simplifies the handling of FEFF. -->
+  <!-- * -->
+  <!-- * [1] http://www.unicode.org/reports/tr14/ -->
+  <!-- * -->
+  <!-- * The groff docs seem ambiguous about whether \& is a joiner and -->
+  <!-- * prevents breaks, but, based on testing, seems like it does -->
+  <xsl:output-character
+   char="&#x2060;"
+   unichar:name="WORD JOINER"
+   string="@esc@&amp;"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: General Punctuation -->
+  <!-- * ***************************************************************** -->
+  
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Superscripts and Subscripts -->
+  <!-- *    x2070 to x209f -->
+  <!-- *    For superscripts, just do a^n thing -->
+  <!-- *    For subscripts, just do a_n -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x2070;"
+   unichar:name="SUPERSCRIPT ZERO"
+   string="^0"
+   />
+  <xsl:output-character
+   char="&#x2071;"
+   unichar:name="SUPERSCRIPT LATIN SMALL LETTER I"
+   string="^i"
+   />
+  <xsl:output-character
+   char="&#x2074;"
+   unichar:name="SUPERSCRIPT FOUR"
+   string="^4"
+   />
+  <xsl:output-character
+   char="&#x2075;"
+   unichar:name="SUPERSCRIPT FIVE"
+   string="^5"
+   />
+  <xsl:output-character
+   char="&#x2076;"
+   unichar:name="SUPERSCRIPT SIX"
+   string="^6"
+   />
+  <xsl:output-character
+   char="&#x2077;"
+   unichar:name="SUPERSCRIPT SEVEN"
+   string="^7"
+   />
+  <xsl:output-character
+   char="&#x2078;"
+   unichar:name="SUPERSCRIPT EIGHT"
+   string="^8"
+   />
+  <xsl:output-character
+   char="&#x2079;"
+   unichar:name="SUPERSCRIPT NINE"
+   string="^9"
+   />
+  <xsl:output-character
+   char="&#x207a;"
+   unichar:name="SUPERSCRIPT PLUS SIGN"
+   string="^+"
+   />
+  <xsl:output-character
+   char="&#x207b;"
+   unichar:name="SUPERSCRIPT MINUS"
+   string="^-"
+   />
+  <xsl:output-character
+   char="&#x207c;"
+   unichar:name="SUPERSCRIPT EQUALS SIGN"
+   string="^="
+   />
+  <xsl:output-character
+   char="&#x207d;"
+   unichar:name="SUPERSCRIPT LEFT PARENTHESIS"
+   string="^("
+   />
+  <xsl:output-character
+   char="&#x207e;"
+   unichar:name="SUPERSCRIPT RIGHT PARENTHESIS"
+   string="^)"
+   />
+  <xsl:output-character
+   char="&#x207f;"
+   unichar:name="SUPERSCRIPT LATIN SMALL LETTER N"
+   string="^n"
+   />
+  <xsl:output-character
+   char="&#x2080;"
+   unichar:name="SUBSCRIPT ZERO"
+   string="_0"
+   />
+  <xsl:output-character
+   char="&#x2081;"
+   unichar:name="SUBSCRIPT ONE"
+   string="_1"
+   />
+  <xsl:output-character
+   char="&#x2082;"
+   unichar:name="SUBSCRIPT TWO"
+   string="_2"
+   />
+  <xsl:output-character
+   char="&#x2083;"
+   unichar:name="SUBSCRIPT THREE"
+   string="_3"
+   />
+  <xsl:output-character
+   char="&#x2084;"
+   unichar:name="SUBSCRIPT FOUR"
+   string="_4"
+   />
+  <xsl:output-character
+   char="&#x2085;"
+   unichar:name="SUBSCRIPT FIVE"
+   string="_5"
+   />
+  <xsl:output-character
+   char="&#x2086;"
+   unichar:name="SUBSCRIPT SIX"
+   string="_6"
+   />
+  <xsl:output-character
+   char="&#x2087;"
+   unichar:name="SUBSCRIPT SEVEN"
+   string="_7"
+   />
+  <xsl:output-character
+   char="&#x2088;"
+   unichar:name="SUBSCRIPT EIGHT"
+   string="_8"
+   />
+  <xsl:output-character
+   char="&#x2089;"
+   unichar:name="SUBSCRIPT NINE"
+   string="_9"
+   />
+  <xsl:output-character
+   char="&#x208a;"
+   unichar:name="SUBSCRIPT PLUS SIGN"
+   string="_+"
+   />
+  <xsl:output-character
+   char="&#x208b;"
+   unichar:name="SUBSCRIPT MINUS"
+   string="_-"
+   />
+  <xsl:output-character
+   char="&#x208c;"
+   unichar:name="SUBSCRIPT EQUALS SIGN"
+   string="_="
+   />
+  <xsl:output-character
+   char="&#x208d;"
+   unichar:name="SUBSCRIPT LEFT PARENTHESIS"
+   string="_("
+   />
+  <xsl:output-character
+   char="&#x208e;"
+   unichar:name="SUBSCRIPT RIGHT PARENTHESIS"
+   string="_)"
+   />
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Superscripts and Subscripts -->
+  <!-- *     x2070 to x209f -->
+  <!-- * ***************************************************************** -->
+
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Currency Symbols -->
+  <!-- *     x20a0 to x20b1 -->
+  <!-- *     No mappings for any of these; just spell out -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x20a0;"
+   unichar:name="EURO-CURRENCY SIGN"
+   string="EUR"
+   />
+  <xsl:output-character
+   char="&#x20a1;"
+   unichar:name="COLON SIGN"
+   string="COLON"
+   />
+  <xsl:output-character
+   char="&#x20a2;"
+   unichar:name="CRUZEIRO SIGN"
+   string="CRUZEIRO"
+   />
+  <xsl:output-character
+   char="&#x20a3;"
+   unichar:name="FRENCH FRANC SIGN"
+   string="FRANC"
+   />
+  <xsl:output-character
+   char="&#x20a4;"
+   unichar:name="LIRA SIGN"
+   string="LIRA"
+   />
+  <xsl:output-character
+   char="&#x20a5;"
+   unichar:name="MILL SIGN"
+   string="MILL"
+   />
+  <xsl:output-character
+   char="&#x20a6;"
+   unichar:name="NAIRA SIGN"
+   string="NAIRA"
+   />
+  <xsl:output-character
+   char="&#x20a7;"
+   unichar:name="PESETA SIGN"
+   string="PESETA"
+   />
+  <xsl:output-character
+   char="&#x20a8;"
+   unichar:name="RUPEE SIGN"
+   string="RUPEE"
+   />
+  <xsl:output-character
+   char="&#x20a9;"
+   unichar:name="WON SIGN"
+   string="WON"
+   />
+  <xsl:output-character
+   char="&#x20aa;"
+   unichar:name="NEW SHEQEL SIGN"
+   string="SHEQEL"
+   />
+  <xsl:output-character
+   char="&#x20ab;"
+   unichar:name="DONG SIGN"
+   string="DONG"
+   />
+  <xsl:output-character
+   char="&#x20ac;"
+   unichar:name="EURO SIGN"
+   string="EUR"
+   />
+  <xsl:output-character
+   char="&#x20ad;"
+   unichar:name="KIP SIGN"
+   string="KIP"
+   />
+  <xsl:output-character
+   char="&#x20ae;"
+   unichar:name="TUGRIK SIGN"
+   string="TUGRIK"
+   />
+  <xsl:output-character
+   char="&#x20af;"
+   unichar:name="DRACHMA SIGN"
+   string="DRACHMA"
+   />
+  <xsl:output-character
+   char="&#x20b0;"
+   unichar:name="GERMAN PENNY SIGN"
+   string="?"
+   />
+  <xsl:output-character
+   char="&#x20b1;"
+   unichar:name="PESO SIGN"
+   string="PESO"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Currency Symbols -->
+  <!-- *   x20a0 to x20b1 -->
+  <!-- * ***************************************************************** -->
+
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+  <!-- *   Combining Diacritical Marks for Symbols -->
+  <!-- *     x20do to x20ff -->
+  <!-- *     - do nothing - -->
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Letterlike Symbols -->
+  <!-- *     x2100 to x214b -->
+  <!-- * -->
+  <!-- *     No mappings for any of these, and nothing appropriate for -->
+  <!-- *     most of them; so, just spell out the ones that we can -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x2103;"
+   unichar:name="DEGREE CELSIUS"
+   string="@esc@(deC"
+   />
+  <xsl:output-character
+   char="&#x2105;"
+   unichar:name="CARE OF"
+   unichar:entity="incare"
+   string="c/o"
+   />
+  <xsl:output-character
+   char="&#x2109;"
+   unichar:name="DEGREE FAHRENHEIT"
+   string="@esc@(deF"
+   />
+  <!-- roff Ifraktur -->
+  <xsl:output-character
+   char="&#x2111;"
+   unichar:name="BLACK-LETTER CAPITAL I"
+   string="@esc@(Im"
+   />
+  <xsl:output-character
+   char="&#x2113;"
+   unichar:name="SCRIPT SMALL L"
+   unichar:entity="ell"
+   string="l"
+   />
+  <xsl:output-character
+   char="&#x2116;"
+   unichar:name="NUMERO SIGN"
+   unichar:entity="numero"
+   string="No."
+   />
+  <xsl:output-character
+   char="&#x2118;"
+   unichar:name="SCRIPT CAPITAL P"
+   unichar:entity="weierp"
+   string="@esc@(wp"
+   />
+  <xsl:output-character
+   char="&#x211c;"
+   unichar:name="BLACK-LETTER CAPITAL R"
+   unichar:entity="real"
+   string="@esc@(Re"
+   />
+  <xsl:output-character
+   char="&#x211e;"
+   unichar:name="PRESCRIPTION TAKE"
+   unichar:entity="rx"
+   string="Rx"
+   />
+  <xsl:output-character
+   char="&#x2120;"
+   unichar:name="SERVICE MARK"
+   string="sm"
+   />
+  <xsl:output-character
+   char="&#x2122;"
+   unichar:name="TRADE MARK SIGN"
+   unichar:entity="trade"
+   string="@esc@(tm"
+   />
+  <xsl:output-character
+   char="&#x2126;"
+   unichar:name="OHM SIGN"
+   unichar:entity="ohm"
+   string="@esc@(*W"
+   />
+  <xsl:output-character
+   char="&#x212a;"
+   unichar:name="KELVIN SIGN"
+   string="K"
+   />
+  <xsl:output-character
+   char="&#x212b;"
+   unichar:name="ANGSTROM SIGN"
+   unichar:entity="angst"
+   string="@esc@(oA"
+   />
+  <xsl:output-character
+   char="&#x2135;"
+   unichar:name="ALEF SYMBOL"
+   unichar:entity="aleph"
+   string="@esc@(Ah"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Letterlike Symbols -->
+  <!-- *     x2100 to x214b -->
+  <!-- * ***************************************************************** -->
+  
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Number Forms -->
+  <!-- *     x2150 to x218f -->
+  <!-- * -->
+  <!-- *   No mappings for any of these, and nothing appropriate for most -->
+  <!-- *   of them; so, just spell out the ones that we can -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x2153;"
+   unichar:name="VULGAR FRACTION ONE THIRD"
+   unichar:entity="frac13"
+   string="1/3"
+   />
+  <xsl:output-character
+   char="&#x2154;"
+   unichar:name="VULGAR FRACTION TWO THIRDS"
+   unichar:entity="frac23"
+   string="2/3"
+   />
+  <xsl:output-character
+   char="&#x2155;"
+   unichar:name="VULGAR FRACTION ONE FIFTH"
+   unichar:entity="frac15"
+   string="1/5"
+   />
+  <xsl:output-character
+   char="&#x2156;"
+   unichar:name="VULGAR FRACTION TWO FIFTHS"
+   unichar:entity="frac25"
+   string="2/5"
+   />
+  <xsl:output-character
+   char="&#x2157;"
+   unichar:name="VULGAR FRACTION THREE FIFTHS"
+   unichar:entity="frac35"
+   string="3/5"
+   />
+  <xsl:output-character
+   char="&#x2158;"
+   unichar:name="VULGAR FRACTION FOUR FIFTHS"
+   unichar:entity="frac45"
+   string="4/5"
+   />
+  <xsl:output-character
+   char="&#x2159;"
+   unichar:name="VULGAR FRACTION ONE SIXTH"
+   unichar:entity="frac16"
+   string="1/6"
+   />
+  <xsl:output-character
+   char="&#x215a;"
+   unichar:name="VULGAR FRACTION FIVE SIXTHS"
+   unichar:entity="frac56"
+   string="5/6"
+   />
+  <xsl:output-character
+   char="&#x215b;"
+   unichar:name="VULGAR FRACTION ONE EIGHTH"
+   unichar:entity="frac18"
+   string="1/8"
+   />
+  <xsl:output-character
+   char="&#x215c;"
+   unichar:name="VULGAR FRACTION THREE EIGHTHS"
+   unichar:entity="frac38"
+   string="3/8"
+   />
+  <xsl:output-character
+   char="&#x215d;"
+   unichar:name="VULGAR FRACTION FIVE EIGHTHS"
+   unichar:entity="frac58"
+   string="5/8"
+   />
+  <xsl:output-character
+   char="&#x215e;"
+   unichar:name="VULGAR FRACTION SEVEN EIGHTHS"
+   unichar:entity="frac78"
+   string="7/8"
+   />
+  <xsl:output-character
+   char="&#x215f;"
+   unichar:name="FRACTION NUMERATOR ONE"
+   string="1/"
+   />
+  <xsl:output-character
+   char="&#x2160;"
+   unichar:name="ROMAN NUMERAL ONE"
+   string="I"
+   />
+  <xsl:output-character
+   char="&#x2161;"
+   unichar:name="ROMAN NUMERAL TWO"
+   string="II"
+   />
+  <xsl:output-character
+   char="&#x2162;"
+   unichar:name="ROMAN NUMERAL THREE"
+   string="III"
+   />
+  <xsl:output-character
+   char="&#x2163;"
+   unichar:name="ROMAN NUMERAL FOUR"
+   string="IV"
+   />
+  <xsl:output-character
+   char="&#x2164;"
+   unichar:name="ROMAN NUMERAL FIVE"
+   string="V"
+   />
+  <xsl:output-character
+   char="&#x2165;"
+   unichar:name="ROMAN NUMERAL SIX"
+   string="VI"
+   />
+  <xsl:output-character
+   char="&#x2166;"
+   unichar:name="ROMAN NUMERAL SEVEN"
+   string="VII"
+   />
+  <xsl:output-character
+   char="&#x2167;"
+   unichar:name="ROMAN NUMERAL EIGHT"
+   string="VIII"
+   />
+  <xsl:output-character
+   char="&#x2168;"
+   unichar:name="ROMAN NUMERAL NINE"
+   string="IX"
+   />
+  <xsl:output-character
+   char="&#x2169;"
+   unichar:name="ROMAN NUMERAL TEN"
+   string="X"
+   />
+  <xsl:output-character
+   char="&#x216a;"
+   unichar:name="ROMAN NUMERAL ELEVEN"
+   string="XI"
+   />
+  <xsl:output-character
+   char="&#x216b;"
+   unichar:name="ROMAN NUMERAL TWELVE"
+   string="XII"
+   />
+  <xsl:output-character
+   char="&#x216c;"
+   unichar:name="ROMAN NUMERAL FIFTY"
+   string="L"
+   />
+  <xsl:output-character
+   char="&#x216d;"
+   unichar:name="ROMAN NUMERAL ONE HUNDRED"
+   string="C"
+   />
+  <xsl:output-character
+   char="&#x216e;"
+   unichar:name="ROMAN NUMERAL FIVE HUNDRED"
+   string="D"
+   />
+  <xsl:output-character
+   char="&#x216f;"
+   unichar:name="ROMAN NUMERAL ONE THOUSAND"
+   string="M"
+   />
+  <xsl:output-character
+   char="&#x2170;"
+   unichar:name="SMALL ROMAN NUMERAL ONE"
+   string="i"
+   />
+  <xsl:output-character
+   char="&#x2171;"
+   unichar:name="SMALL ROMAN NUMERAL TWO"
+   string="ii"
+   />
+  <xsl:output-character
+   char="&#x2172;"
+   unichar:name="SMALL ROMAN NUMERAL THREE"
+   string="iii"
+   />
+  <xsl:output-character
+   char="&#x2173;"
+   unichar:name="SMALL ROMAN NUMERAL FOUR"
+   string="iv"
+   />
+  <xsl:output-character
+   char="&#x2174;"
+   unichar:name="SMALL ROMAN NUMERAL FIVE"
+   string="v"
+   />
+  <xsl:output-character
+   char="&#x2175;"
+   unichar:name="SMALL ROMAN NUMERAL SIX"
+   string="vi"
+   />
+  <xsl:output-character
+   char="&#x2176;"
+   unichar:name="SMALL ROMAN NUMERAL SEVEN"
+   string="vii"
+   />
+  <xsl:output-character
+   char="&#x2177;"
+   unichar:name="SMALL ROMAN NUMERAL EIGHT"
+   string="viii"
+   />
+  <xsl:output-character
+   char="&#x2178;"
+   unichar:name="SMALL ROMAN NUMERAL NINE"
+   string="ix"
+   />
+  <xsl:output-character
+   char="&#x2179;"
+   unichar:name="SMALL ROMAN NUMERAL TEN"
+   string="x"
+   />
+  <xsl:output-character
+   char="&#x217a;"
+   unichar:name="SMALL ROMAN NUMERAL ELEVEN"
+   string="xi"
+   />
+  <xsl:output-character
+   char="&#x217b;"
+   unichar:name="SMALL ROMAN NUMERAL TWELVE"
+   string="xii"
+   />
+  <xsl:output-character
+   char="&#x217c;"
+   unichar:name="SMALL ROMAN NUMERAL FIFTY"
+   string="l"
+   />
+  <xsl:output-character
+   char="&#x217d;"
+   unichar:name="SMALL ROMAN NUMERAL ONE HUNDRED"
+   string="c"
+   />
+  <xsl:output-character
+   char="&#x217e;"
+   unichar:name="SMALL ROMAN NUMERAL FIVE HUNDRED"
+   string="d"
+   />
+  <xsl:output-character
+   char="&#x217f;"
+   unichar:name="SMALL ROMAN NUMERAL ONE THOUSAND"
+   string="m"
+   />
+  <xsl:output-character
+   char="&#x2180;"
+   unichar:name="ROMAN NUMERAL ONE THOUSAND C D"
+   string="CD"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Number Forms -->
+  <!-- *     x2150 to x218f -->
+  <!-- * ***************************************************************** -->
+
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Arrows -->
+  <!-- *   x2190 to x21ff -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x2190;"
+   unichar:name="LEFTWARDS ARROW"
+   unichar:entity="larr"
+   string="@esc@(&lt;-"
+   />
+  <xsl:output-character
+   char="&#x2191;"
+   unichar:name="UPWARDS ARROW"
+   unichar:entity="uarr"
+   string="@esc@(ua"
+   />
+  <xsl:output-character
+   char="&#x2192;"
+   unichar:name="RIGHTWARDS ARROW"
+   unichar:entity="rarr"
+   string="@esc@(->"
+   />
+  <xsl:output-character
+   char="&#x2193;"
+   unichar:name="DOWNWARDS ARROW"
+   unichar:entity="darr"
+   string="@esc@(da"
+   />
+  <xsl:output-character
+   char="&#x2194;"
+   unichar:name="LEFT RIGHT ARROW"
+   unichar:entity="harr"
+   string="@esc@(&lt;>"
+   />
+  <xsl:output-character
+   char="&#x2195;"
+   unichar:name="UP DOWN ARROW"
+   unichar:entity="varr"
+   string="@esc@(va"
+   />
+  <xsl:output-character
+   char="&#x21b5;"
+   unichar:name="DOWNWARDS ARROW WITH CORNER LEFTWARDS"
+   unichar:entity="crarr"
+   string="@esc@(CR"
+   />
+  <xsl:output-character
+   char="&#x21d0;"
+   unichar:name="LEFTWARDS DOUBLE ARROW"
+   unichar:entity="lArr"
+   string="@esc@(la"
+   />
+  <xsl:output-character
+   char="&#x21d1;"
+   unichar:name="UPWARDS DOUBLE ARROW"
+   unichar:entity="uArr"
+   string="@esc@(uA"
+   />
+  <xsl:output-character
+   char="&#x21d2;"
+   unichar:name="RIGHTWARDS DOUBLE ARROW"
+   unichar:entity="rArr"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x21d3;"
+   unichar:name="DOWNWARDS DOUBLE ARROW"
+   unichar:entity="dArr"
+   string="@esc@(dA"
+   />
+  <xsl:output-character
+   char="&#x21d4;"
+   unichar:name="LEFT RIGHT DOUBLE ARROW"
+   unichar:entity="hArr"
+   string="@esc@(hA"
+   />
+  <!-- no roff equiv; render same as single arrow -->
+  <xsl:output-character
+   char="&#x21d5;"
+   unichar:name="UP DOWN DOUBLE ARROW"
+   unichar:entity="vArr"
+   string="@esc@(va"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Mathematical Operators -->
+  <!-- *     x2200 to x22ff -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x2200;"
+   unichar:name="FOR ALL"
+   unichar:entity="forall"
+   string="@esc@(fa"
+   />
+  <xsl:output-character
+   char="&#x2201;"
+   unichar:name="COMPLEMENT"
+   unichar:entity="comp"
+   string="C"
+   />
+  <xsl:output-character
+   char="&#x2202;"
+   unichar:name="PARTIAL DIFFERENTIAL"
+   unichar:entity="part"
+   string="@esc@(pd"
+   />
+  <xsl:output-character
+   char="&#x2203;"
+   unichar:name="THERE EXISTS"
+   unichar:entity="exist"
+   string="@esc@(te"
+   />
+  <!-- * no roff equiv  -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2204;" -->
+  <!-- *      unichar:name="THERE DOES NOT EXIST" -->
+  <!-- *      unichar:entity="nexist" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2205;"
+   unichar:name="EMPTY SET"
+   unichar:entity="empty"
+   string="@esc@(es"
+   />
+  <xsl:output-character
+   char="&#x2206;"
+   unichar:name="INCREMENT"
+   string="@esc@(*D"
+   />
+  <xsl:output-character
+   char="&#x2207;"
+   unichar:name="NABLA"
+   unichar:entity="nabla"
+   string="@esc@(gr"
+   />
+  <xsl:output-character
+   char="&#x2208;"
+   unichar:name="ELEMENT OF"
+   unichar:entity="isin"
+   string="@esc@(mo"
+   />
+  <xsl:output-character
+   char="&#x2209;"
+   unichar:name="NOT AN ELEMENT OF"
+   unichar:entity="notin"
+   string="@esc@(nm"
+   />
+  <xsl:output-character
+   char="&#x220a;"
+   unichar:name="SMALL ELEMENT OF"
+   string="@esc@(mo"
+   />
+
+  <xsl:output-character
+   char="&#x220b;"
+   unichar:name="CONTAINS AS MEMBER"
+   unichar:entity="ni"
+   string="@esc@(st"
+   />
+  <!-- * not in roff  -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x220c;" -->
+  <!-- *      unichar:name="DOES NOT CONTAIN AS MEMBER" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x220d;"
+   unichar:name="SMALL CONTAINS AS MEMBER"
+   string="@esc@(st"
+   />
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x220e;" -->
+  <!-- *      unichar:name="END OF PROOF" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x220f;"
+   unichar:name="N-ARY PRODUCT"
+   unichar:entity="prod"
+   string="@esc@(product"
+   />
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2210;" -->
+  <!-- *      unichar:name="N-ARY COPRODUCT" -->
+  <!-- *      unichar:entity="coprod" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2211;"
+   unichar:name="N-ARY SUMMATION"
+   unichar:entity="sum"
+   string="@esc@(sum"
+   />
+  <xsl:output-character
+   char="&#x2212;"
+   unichar:name="MINUS SIGN"
+   unichar:entity="minus"
+   string="@esc@-"
+   />
+  <xsl:output-character
+   char="&#x2213;"
+   unichar:name="MINUS-OR-PLUS SIGN"
+   unichar:entity="mnplus"
+   string="@esc@(+-"
+   />
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2214;" -->
+  <!-- *      unichar:name="DOT PLUS" -->
+  <!-- *      unichar:entity="plusdo" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2215;"
+   unichar:name="DIVISION SLASH"
+   string="@esc@(f/"
+   />
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2216;" -->
+  <!-- *      unichar:name="SET MINUS" -->
+  <!-- *      unichar:entity="setmn" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2217;"
+   unichar:name="ASTERISK OPERATOR"
+   unichar:entity="lowast"
+   string="@esc@(**"
+   />
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2218;" -->
+  <!-- *      unichar:name="RING OPERATOR" -->
+  <!-- *      unichar:entity="compfn" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2219;"
+   unichar:name="BULLET OPERATOR"
+   string="@esc@(bu"
+   />
+  <xsl:output-character
+   char="&#x221a;"
+   unichar:name="SQUARE ROOT"
+   unichar:entity="radic"
+   string="@esc@(sr"
+   />
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x221b;" -->
+  <!-- *      unichar:name="CUBE ROOT" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x221c;" -->
+  <!-- *      unichar:name="FOURTH ROOT" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x221d;"
+   unichar:name="PROPORTIONAL TO"
+   unichar:entity="prop"
+   string="@esc@(pt"
+   />
+  <xsl:output-character
+   char="&#x221e;"
+   unichar:name="INFINITY"
+   unichar:entity="infin"
+   string="@esc@(if"
+   />
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x221f;" -->
+  <!-- *      unichar:name="RIGHT ANGLE" -->
+  <!-- *      unichar:entity="ang90" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2220;"
+   unichar:name="ANGLE"
+   unichar:entity="ang"
+   string="@esc@(/_"
+   />
+
+  <!-- * 0x2221 to 0x2226 not in roff; -->
+  <!-- * but fake a parallel sign with vert bars -->
+
+  <xsl:output-character
+   char="&#x2225;"
+   unichar:name="PARALLEL TO"
+   unichar:entity="par"
+   string="@esc@(bv@esc@(bv"
+   />
+
+  <xsl:output-character
+   char="&#x2227;"
+   unichar:name="LOGICAL AND"
+   unichar:entity="and"
+   string="@esc@(AN"
+   />
+  <xsl:output-character
+   char="&#x2228;"
+   unichar:name="LOGICAL OR"
+   unichar:entity="or"
+   string="@esc@(OR"
+   />
+  <xsl:output-character
+   char="&#x2229;"
+   unichar:name="INTERSECTION"
+   unichar:entity="cap"
+   string="@esc@(ca"
+   />
+  <xsl:output-character
+   char="&#x222a;"
+   unichar:name="UNION"
+   unichar:entity="cup"
+   string="@esc@(cu"
+   />
+  <xsl:output-character
+   char="&#x222b;"
+   unichar:name="INTEGRAL"
+   unichar:entity="int"
+   string="@esc@(is"
+   />
+  <xsl:output-character
+   char="&#x222c;"
+   unichar:name="DOUBLE INTEGRAL"
+   string="@esc@(is@esc@(is"
+   />
+  <xsl:output-character
+   char="&#x222d;"
+   unichar:name="TRIPLE INTEGRAL"
+   string="@esc@(is@esc@(is@esc@(is"
+   />
+
+  <!-- * 0x222e to 0x2233 not in roff -->
+
+  <xsl:output-character
+   char="&#x2234;"
+   unichar:name="THEREFORE"
+   unichar:entity="there4"
+   string="@esc@(tf"
+   />
+
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2235;" -->
+  <!-- *      unichar:name="BECAUSE" -->
+  <!-- *      unichar:entity="becaus" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2236;"
+   unichar:name="RATIO"
+   string=":"
+   />
+  <xsl:output-character
+   char="&#x2237;"
+   unichar:name="PROPORTION"
+   string="::"
+   />
+
+  <!-- * 0x2238 to 0x223b not in roff -->
+
+  <xsl:output-character
+   char="&#x223c;"
+   unichar:name="TILDE OPERATOR"
+   unichar:entity="sim"
+   string="@esc@(ti"
+   />
+
+  <!-- * 0x223d to 0x224b not in roff -->
+
+  <xsl:output-character
+   char="&#x2245;"
+   unichar:name="APPROXIMATELY EQUAL TO"
+   unichar:entity="cong"
+   string="@esc@(=~"
+   />
+
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2246;" -->
+  <!-- *      unichar:name="APPROXIMATELY BUT NOT ACTUALLY EQUAL TO" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2247;" -->
+  <!-- *      unichar:name="NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO" -->
+  <!-- *      unichar:entity="ncong" -->
+  <!-- *      /> -->
+
+  <xsl:output-character
+   char="&#x2248;"
+   unichar:name="ALMOST EQUAL TO"
+   unichar:entity="asymp"
+   string="@esc@(~~"
+   />
+
+  <!-- * x2249 to x2253 not in roff -->
+
+  <xsl:output-character
+   char="&#x2254;"
+   unichar:name="COLON EQUALS"
+   unichar:entity="colone"
+   string=":="
+   />
+  <xsl:output-character
+   char="&#x2255;"
+   unichar:name="EQUALS COLON"
+   unichar:entity="ecolon"
+   string="=:"
+   />
+
+  <!-- * x2256 to x2255 not in roff -->
+
+  <xsl:output-character
+   char="&#x225f;"
+   unichar:name="QUESTIONED EQUAL TO"
+   string="?="
+   />
+  <xsl:output-character
+   char="&#x2260;"
+   unichar:name="NOT EQUAL TO"
+   unichar:entity="ne"
+   string="@esc@(!="
+   />
+  <xsl:output-character
+   char="&#x2261;"
+   unichar:name="IDENTICAL TO"
+   unichar:entity="equiv"
+   string="@esc@(=="
+   />
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2262;" -->
+  <!-- *      unichar:name="NOT IDENTICAL TO" -->
+  <!-- *      unichar:entity="nequiv" -->
+  <!-- *      /> -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2263;" -->
+  <!-- *      unichar:name="STRICTLY EQUIVALENT TO" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2264;"
+   unichar:name="LESS-THAN OR EQUAL TO"
+   unichar:entity="le"
+   string="@esc@(&lt;="
+   />
+  <xsl:output-character
+   char="&#x2265;"
+   unichar:name="GREATER-THAN OR EQUAL TO"
+   unichar:entity="ge"
+   string="@esc@(>="
+   />
+  <!-- * x2266 to x2269 not in roff -->
+
+  <xsl:output-character
+   char="&#x226a;"
+   unichar:name="MUCH LESS-THAN"
+   unichar:entity="Lt"
+   string="&lt;&lt;"
+   />
+  <xsl:output-character
+   char="&#x226b;"
+   unichar:name="MUCH GREATER-THAN"
+   unichar:entity="Gt"
+   string=">>"
+   />
+  <!-- * x226c to x2281 not in roff -->
+
+  <xsl:output-character
+   char="&#x2282;"
+   unichar:name="SUBSET OF"
+   unichar:entity="sub"
+   string="@esc@(sb"
+   />
+  <xsl:output-character
+   char="&#x2283;"
+   unichar:name="SUPERSET OF"
+   unichar:entity="sup"
+   string="@esc@(sp"
+   />
+  <xsl:output-character
+   char="&#x2284;"
+   unichar:name="NOT A SUBSET OF"
+   unichar:entity="nsub"
+   string="@esc@(nb"
+   />
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x2285;" -->
+  <!-- *      unichar:name="NOT A SUPERSET OF" -->
+  <!-- *      unichar:entity="nsup" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x2286;"
+   unichar:name="SUBSET OF OR EQUAL TO"
+   unichar:entity="sube"
+   string="@esc@(ib"
+   />
+  <xsl:output-character
+   char="&#x2287;"
+   unichar:name="SUPERSET OF OR EQUAL TO"
+   unichar:entity="supe"
+   string="@esc@(ip"
+   />
+  <!-- * x2288 to x2294 not in roff -->
+
+  <xsl:output-character
+   char="&#x2295;"
+   unichar:name="CIRCLED PLUS"
+   unichar:entity="oplus"
+   string="@esc@(c+"
+   />
+  <xsl:output-character
+   char="&#x2296;"
+   unichar:name="CIRCLED MINUS"
+   unichar:entity="ominus"
+   string="@esc@(c*"
+   />
+  <xsl:output-character
+   char="&#x2297;"
+   unichar:name="CIRCLED TIMES"
+   unichar:entity="otimes"
+   string="@esc@(c*"
+   />
+
+  <!-- * x2298 to x22a4 not in roff -->
+
+  <xsl:output-character
+   char="&#x22a5;"
+   unichar:name="UP TACK"
+   unichar:entity="bottom"
+   string="@esc@(pp"
+   />
+
+  <!-- * x22a6 to x22bf not in roff -->
+
+  <xsl:output-character
+   char="&#x22c0;"
+   unichar:name="N-ARY LOGICAL AND"
+   string="@esc@(AN"
+   />
+  <xsl:output-character
+   char="&#x22c1;"
+   unichar:name="N-ARY LOGICAL OR"
+   string="@esc@(OR"
+   />
+  <xsl:output-character
+   char="&#x22c2;"
+   unichar:name="N-ARY INTERSECTION"
+   string="@esc@(ca"
+   />
+  <xsl:output-character
+   char="&#x22c3;"
+   unichar:name="N-ARY UNION"
+   string="@esc@(cu"
+   />
+
+  <!-- * not in roff -->
+  <!-- *      <xsl:output-character -->
+  <!-- *      char="&#x22c4;" -->
+  <!-- *      unichar:name="DIAMOND OPERATOR" -->
+  <!-- *      unichar:entity="diam" -->
+  <!-- *      /> -->
+  <xsl:output-character
+   char="&#x22c5;"
+   unichar:name="DOT OPERATOR"
+   unichar:entity="sdot"
+   string="@esc@(md"
+   />
+  <xsl:output-character
+   char="&#x22c6;"
+   unichar:name="STAR OPERATOR"
+   unichar:entity="sstarf"
+   string="@esc@(**"
+   />
+  <!-- * x22c7 to x22cd not in roff -->
+
+  <xsl:output-character
+   char="&#x22ce;"
+   unichar:name="CURLY LOGICAL OR"
+   unichar:entity="cuvee"
+   string="@esc@(OR"
+   />
+  <xsl:output-character
+   char="&#x22cf;"
+   unichar:name="CURLY LOGICAL AND"
+   unichar:entity="cuwed"
+   string="@esc@(AN"
+   />
+
+  <!-- * x22d0 to x22d7 not in roff -->
+
+  <xsl:output-character
+   char="&#x22d8;"
+   unichar:name="VERY MUCH LESS-THAN"
+   unichar:entity="Ll"
+   string="&lt;&lt;&lt;"
+   />
+  <xsl:output-character
+   char="&#x22d9;"
+   unichar:name="VERY MUCH GREATER-THAN"
+   unichar:entity="Gg"
+   string=">>>"
+   />
+
+  <!-- * x22da to x22ee not in roff -->
+
+  <xsl:output-character
+   char="&#x22ef;"
+   unichar:name="MIDLINE HORIZONTAL ELLIPSIS"
+   string="@esc@&amp;..."
+   />
+
+  <!-- * x22fo to x22ff not in roff -->
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Mathematical Operators -->
+  <!-- * ***************************************************************** -->
+  
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+  <!-- *   Miscellaneous Technical -->
+  <!-- *     x2300 to x23ff -->
+  <!-- *     - do nothing except for angle brackets - -->
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+
+  <xsl:output-character
+   char="&#x2329;"
+   unichar:name="LEFT-POINTING ANGLE BRACKET"
+   unichar:entity="lang"
+   string="@esc@(la"
+   />
+  <xsl:output-character
+   char="&#x232a;"
+   unichar:name="RIGHT-POINTING ANGLE BRACKET"
+   unichar:entity="rang"
+   string="@esc@(ra"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Control Pictures -->
+  <!-- *     x2400 to x243f -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x2400;"
+   unichar:name="SYMBOL FOR NULL"
+   string="NUL"
+   />
+  <xsl:output-character
+   char="&#x2401;"
+   unichar:name="SYMBOL FOR START OF HEADING"
+   string="SOH"
+   />
+  <xsl:output-character
+   char="&#x2402;"
+   unichar:name="SYMBOL FOR START OF TEXT"
+   string="STX"
+   />
+  <xsl:output-character
+   char="&#x2403;"
+   unichar:name="SYMBOL FOR END OF TEXT"
+   string="ETX"
+   />
+  <xsl:output-character
+   char="&#x2404;"
+   unichar:name="SYMBOL FOR END OF TRANSMISSION"
+   string="EOT"
+   />
+  <xsl:output-character
+   char="&#x2405;"
+   unichar:name="SYMBOL FOR ENQUIRY"
+   string="ENQ"
+   />
+  <xsl:output-character
+   char="&#x2406;"
+   unichar:name="SYMBOL FOR ACKNOWLEDGE"
+   string="ACK"
+   />
+  <xsl:output-character
+   char="&#x2407;"
+   unichar:name="SYMBOL FOR BELL"
+   string="BEL"
+   />
+  <xsl:output-character
+   char="&#x2408;"
+   unichar:name="SYMBOL FOR BACKSPACE"
+   string="BS"
+   />
+  <xsl:output-character
+   char="&#x2409;"
+   unichar:name="SYMBOL FOR HORIZONTAL TABULATION"
+   string="HT"
+   />
+  <xsl:output-character
+   char="&#x240a;"
+   unichar:name="SYMBOL FOR LINE FEED"
+   string="LF"
+   />
+  <xsl:output-character
+   char="&#x240b;"
+   unichar:name="SYMBOL FOR VERTICAL TABULATION"
+   string="VT"
+   />
+  <xsl:output-character
+   char="&#x240c;"
+   unichar:name="SYMBOL FOR FORM FEED"
+   string="FF"
+   />
+  <xsl:output-character
+   char="&#x240d;"
+   unichar:name="SYMBOL FOR CARRIAGE RETURN"
+   string="CR"
+   />
+  <xsl:output-character
+   char="&#x240e;"
+   unichar:name="SYMBOL FOR SHIFT OUT"
+   string="SO"
+   />
+  <xsl:output-character
+   char="&#x240f;"
+   unichar:name="SYMBOL FOR SHIFT IN"
+   string="SI"
+   />
+  <xsl:output-character
+   char="&#x2410;"
+   unichar:name="SYMBOL FOR DATA LINK ESCAPE"
+   string="DLE"
+   />
+  <xsl:output-character
+   char="&#x2411;"
+   unichar:name="SYMBOL FOR DEVICE CONTROL ONE"
+   string="DC1"
+   />
+  <xsl:output-character
+   char="&#x2412;"
+   unichar:name="SYMBOL FOR DEVICE CONTROL TWO"
+   string="DC2"
+   />
+  <xsl:output-character
+   char="&#x2413;"
+   unichar:name="SYMBOL FOR DEVICE CONTROL THREE"
+   string="DC3"
+   />
+  <xsl:output-character
+   char="&#x2414;"
+   unichar:name="SYMBOL FOR DEVICE CONTROL FOUR"
+   string="DC4"
+   />
+  <xsl:output-character
+   char="&#x2415;"
+   unichar:name="SYMBOL FOR NEGATIVE ACKNOWLEDGE"
+   string="NAK"
+   />
+  <xsl:output-character
+   char="&#x2416;"
+   unichar:name="SYMBOL FOR SYNCHRONOUS IDLE"
+   string="SYN"
+   />
+  <xsl:output-character
+   char="&#x2417;"
+   unichar:name="SYMBOL FOR END OF TRANSMISSION BLOCK"
+   string="ETB"
+   />
+  <xsl:output-character
+   char="&#x2418;"
+   unichar:name="SYMBOL FOR CANCEL"
+   string="CAN"
+   />
+  <xsl:output-character
+   char="&#x2419;"
+   unichar:name="SYMBOL FOR END OF MEDIUM"
+   string="EM"
+   />
+  <xsl:output-character
+   char="&#x241a;"
+   unichar:name="SYMBOL FOR SUBSTITUTE"
+   string="SUB"
+   />
+  <xsl:output-character
+   char="&#x241b;"
+   unichar:name="SYMBOL FOR ESCAPE"
+   string="ESC"
+   />
+  <xsl:output-character
+   char="&#x241c;"
+   unichar:name="SYMBOL FOR FILE SEPARATOR"
+   string="FS"
+   />
+  <xsl:output-character
+   char="&#x241d;"
+   unichar:name="SYMBOL FOR GROUP SEPARATOR"
+   string="GS"
+   />
+  <xsl:output-character
+   char="&#x241e;"
+   unichar:name="SYMBOL FOR RECORD SEPARATOR"
+   string="RS"
+   />
+  <xsl:output-character
+   char="&#x241f;"
+   unichar:name="SYMBOL FOR UNIT SEPARATOR"
+   string="US"
+   />
+  <xsl:output-character
+   char="&#x2420;"
+   unichar:name="SYMBOL FOR SPACE"
+   string="SP"
+   />
+  <xsl:output-character
+   char="&#x2421;"
+   unichar:name="SYMBOL FOR DELETE"
+   string="DEL"
+   />
+  <!-- * no roff equiv; just use real space -->
+  <xsl:output-character
+   char="&#x2422;"
+   unichar:name="BLANK SYMBOL"
+   string=" "
+   />
+  <!-- * no roff equiv; just use real space -->
+  <xsl:output-character
+   char="&#x2423;"
+   unichar:name="OPEN BOX"
+   unichar:entity="blank"
+   string=" "
+   />
+  <xsl:output-character
+   char="&#x2424;"
+   unichar:name="SYMBOL FOR NEWLINE"
+   string="NL"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Control Pictures -->
+  <!-- * ***************************************************************** -->
+
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+  <!-- *   Optical Character Recognition -->
+  <!-- *     x2440 to x24ff -->
+  <!-- *     - do nothing - -->
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Enclosed Alphanumerics -->
+  <!-- *     x2460 to x24ff -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x2460;"
+   unichar:name="CIRCLED DIGIT ONE"
+   string="1"
+   />
+  <xsl:output-character
+   char="&#x2461;"
+   unichar:name="CIRCLED DIGIT TWO"
+   string="2"
+   />
+  <xsl:output-character
+   char="&#x2462;"
+   unichar:name="CIRCLED DIGIT THREE"
+   string="3"
+   />
+  <xsl:output-character
+   char="&#x2463;"
+   unichar:name="CIRCLED DIGIT FOUR"
+   string="4"
+   />
+  <xsl:output-character
+   char="&#x2464;"
+   unichar:name="CIRCLED DIGIT FIVE"
+   string="5"
+   />
+  <xsl:output-character
+   char="&#x2465;"
+   unichar:name="CIRCLED DIGIT SIX"
+   string="6"
+   />
+  <xsl:output-character
+   char="&#x2466;"
+   unichar:name="CIRCLED DIGIT SEVEN"
+   string="7"
+   />
+  <xsl:output-character
+   char="&#x2467;"
+   unichar:name="CIRCLED DIGIT EIGHT"
+   string="8"
+   />
+  <xsl:output-character
+   char="&#x2468;"
+   unichar:name="CIRCLED DIGIT NINE"
+   string="9"
+   />
+  <xsl:output-character
+   char="&#x2469;"
+   unichar:name="CIRCLED NUMBER TEN"
+   string="10"
+   />
+  <xsl:output-character
+   char="&#x246a;"
+   unichar:name="CIRCLED NUMBER ELEVEN"
+   string="11"
+   />
+  <xsl:output-character
+   char="&#x246b;"
+   unichar:name="CIRCLED NUMBER TWELVE"
+   string="12"
+   />
+  <xsl:output-character
+   char="&#x246c;"
+   unichar:name="CIRCLED NUMBER THIRTEEN"
+   string="13"
+   />
+  <xsl:output-character
+   char="&#x246d;"
+   unichar:name="CIRCLED NUMBER FOURTEEN"
+   string="14"
+   />
+  <xsl:output-character
+   char="&#x246e;"
+   unichar:name="CIRCLED NUMBER FIFTEEN" 
+   string="15"
+  />
+  <xsl:output-character
+   char="&#x246f;"
+   unichar:name="CIRCLED NUMBER SIXTEEN"
+   string="16"
+   />
+  <xsl:output-character
+   char="&#x2470;"
+   unichar:name="CIRCLED NUMBER SEVENTEEN"
+   string="17"
+   />
+  <xsl:output-character
+   char="&#x2471;"
+   unichar:name="CIRCLED NUMBER EIGHTEEN"
+   string="18"
+   />
+  <xsl:output-character
+   char="&#x2472;"
+   unichar:name="CIRCLED NUMBER NINETEEN"
+   string="19"
+   />
+  <xsl:output-character
+   char="&#x2473;"
+   unichar:name="CIRCLED NUMBER TWENTY"
+   string="20"
+   />
+  <xsl:output-character
+   char="&#x2474;"
+   unichar:name="PARENTHESIZED DIGIT ONE"
+   string="(1)"
+   />
+  <xsl:output-character
+   char="&#x2475;"
+   unichar:name="PARENTHESIZED DIGIT TWO"
+   string="(2)"
+   />
+  <xsl:output-character
+   char="&#x2476;"
+   unichar:name="PARENTHESIZED DIGIT THREE"
+   string="(3)"
+   />
+  <xsl:output-character
+   char="&#x2477;"
+   unichar:name="PARENTHESIZED DIGIT FOUR"
+   string="(4)"
+   />
+  <xsl:output-character
+   char="&#x2478;"
+   unichar:name="PARENTHESIZED DIGIT FIVE"
+   string="(5)"
+   />
+  <xsl:output-character
+   char="&#x2479;"
+   unichar:name="PARENTHESIZED DIGIT SIX"
+   string="(6)"
+   />
+  <xsl:output-character
+   char="&#x247a;"
+   unichar:name="PARENTHESIZED DIGIT SEVEN"
+   string="(7)"
+   />
+  <xsl:output-character
+   char="&#x247b;"
+   unichar:name="PARENTHESIZED DIGIT EIGHT"
+   string="(8)"
+   />
+  <xsl:output-character
+   char="&#x247c;"
+   unichar:name="PARENTHESIZED DIGIT NINE"
+   string="(9)"
+   />
+  <xsl:output-character
+   char="&#x247d;"
+   unichar:name="PARENTHESIZED NUMBER TEN"
+   string="(10)"
+   />
+  <xsl:output-character
+   char="&#x247e;"
+   unichar:name="PARENTHESIZED NUMBER ELEVEN"
+   string="(11)"
+   />
+  <xsl:output-character
+   char="&#x247f;"
+   unichar:name="PARENTHESIZED NUMBER TWELVE"
+   string="(12)"
+   />
+  <xsl:output-character
+   char="&#x2480;"
+   unichar:name="PARENTHESIZED NUMBER THIRTEEN"
+   string="(13)"
+   />
+  <xsl:output-character
+   char="&#x2481;"
+   unichar:name="PARENTHESIZED NUMBER FOURTEEN"
+   string="(14)"
+   />
+  <xsl:output-character
+   char="&#x2482;"
+   unichar:name="PARENTHESIZED NUMBER FIFTEEN"
+   string="(15)"
+   />
+  <xsl:output-character
+   char="&#x2483;"
+   unichar:name="PARENTHESIZED NUMBER SIXTEEN"
+   string="(16)"
+   />
+  <xsl:output-character
+   char="&#x2484;"
+   unichar:name="PARENTHESIZED NUMBER SEVENTEEN"
+   string="(17)"
+   />
+  <xsl:output-character
+   char="&#x2485;"
+   unichar:name="PARENTHESIZED NUMBER EIGHTEEN"
+   string="(18)"
+   />
+  <xsl:output-character
+   char="&#x2486;"
+   unichar:name="PARENTHESIZED NUMBER NINETEEN"
+   string="(19)"
+   />
+  <xsl:output-character
+   char="&#x2487;"
+   unichar:name="PARENTHESIZED NUMBER TWENTY"
+   string="(20)"
+   />
+  <xsl:output-character
+   char="&#x2488;"
+   unichar:name="DIGIT ONE FULL STOP"
+   string="1."
+   />
+  <xsl:output-character
+   char="&#x2489;"
+   unichar:name="DIGIT TWO FULL STOP"
+   string="2."
+   />
+  <xsl:output-character
+   char="&#x248a;"
+   unichar:name="DIGIT THREE FULL STOP"
+   string="3."
+   />
+  <xsl:output-character
+   char="&#x248b;"
+   unichar:name="DIGIT FOUR FULL STOP"
+   string="4."
+   />
+  <xsl:output-character
+   char="&#x248c;"
+   unichar:name="DIGIT FIVE FULL STOP"
+   string="5."
+   />
+  <xsl:output-character
+   char="&#x248d;"
+   unichar:name="DIGIT SIX FULL STOP"
+   string="6."
+   />
+  <xsl:output-character
+   char="&#x248e;"
+   unichar:name="DIGIT SEVEN FULL STOP"
+   string="7."
+   />
+  <xsl:output-character
+   char="&#x248f;"
+   unichar:name="DIGIT EIGHT FULL STOP"
+   string="8."
+   />
+  <xsl:output-character
+   char="&#x2490;"
+   unichar:name="DIGIT NINE FULL STOP"
+   string="9."
+   />
+  <xsl:output-character
+   char="&#x2491;"
+   unichar:name="NUMBER TEN FULL STOP"
+   string="10."
+   />
+  <xsl:output-character
+   char="&#x2492;"
+   unichar:name="NUMBER ELEVEN FULL STOP"
+   string="11."
+   />
+  <xsl:output-character
+   char="&#x2493;"
+   unichar:name="NUMBER TWELVE FULL STOP"
+   string="12."
+   />
+  <xsl:output-character
+   char="&#x2494;"
+   unichar:name="NUMBER THIRTEEN FULL STOP"
+   string="13."
+   />
+  <xsl:output-character
+   char="&#x2495;"
+   unichar:name="NUMBER FOURTEEN FULL STOP"
+   string="14."
+   />
+  <xsl:output-character
+   char="&#x2496;"
+   unichar:name="NUMBER FIFTEEN FULL STOP"
+   string="15."
+   />
+  <xsl:output-character
+   char="&#x2497;"
+   unichar:name="NUMBER SIXTEEN FULL STOP"
+   string="16."
+   />
+  <xsl:output-character
+   char="&#x2498;"
+   unichar:name="NUMBER SEVENTEEN FULL STOP"
+   string="17."
+   />
+  <xsl:output-character
+   char="&#x2499;"
+   unichar:name="NUMBER EIGHTEEN FULL STOP"
+   string="18."
+   />
+  <xsl:output-character
+   char="&#x249a;"
+   unichar:name="NUMBER NINETEEN FULL STOP"
+   string="19."
+   />
+  <xsl:output-character
+   char="&#x249b;"
+   unichar:name="NUMBER TWENTY FULL STOP"
+   string="20."
+   />
+  <xsl:output-character
+   char="&#x249c;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER A"
+   string="(a)"
+   />
+  <xsl:output-character
+   char="&#x249d;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER B"
+   string="(b)"
+   />
+  <xsl:output-character
+   char="&#x249e;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER C"
+   string="(c)"
+   />
+  <xsl:output-character
+   char="&#x249f;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER D"
+   string="(d)"
+   />
+  <xsl:output-character
+   char="&#x24a0;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER E"
+   string="(e)"
+   />
+  <xsl:output-character
+   char="&#x24a1;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER F"
+   string="(f)"
+   />
+  <xsl:output-character
+   char="&#x24a2;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER G"
+   string="(g)"
+   />
+  <xsl:output-character
+   char="&#x24a3;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER H"
+   string="(h)"
+   />
+  <xsl:output-character
+   char="&#x24a4;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER I"
+   string="(i)"
+   />
+  <xsl:output-character
+   char="&#x24a5;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER J"
+   string="(j)"
+   />
+  <xsl:output-character
+   char="&#x24a6;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER K"
+   string="(k)"
+   />
+  <xsl:output-character
+   char="&#x24a7;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER L"
+   string="(l)"
+   />
+  <xsl:output-character
+   char="&#x24a8;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER M"
+   string="(m)"
+   />
+  <xsl:output-character
+   char="&#x24a9;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER N"
+   string="(n)"
+   />
+  <xsl:output-character
+   char="&#x24aa;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER O"
+   string="(o)"
+   />
+  <xsl:output-character
+   char="&#x24ab;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER P"
+   string="(p)"
+   />
+  <xsl:output-character
+   char="&#x24ac;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER Q"
+   string="(q)"
+   />
+  <xsl:output-character
+   char="&#x24ad;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER R"
+   string="(r)"
+   />
+  <xsl:output-character
+   char="&#x24ae;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER S"
+   string="(s)"
+   />
+  <xsl:output-character
+   char="&#x24af;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER T"
+   string="(t)"
+   />
+  <xsl:output-character
+   char="&#x24b0;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER U"
+   string="(u)"
+   />
+  <xsl:output-character
+   char="&#x24b1;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER V"
+   string="(v)"
+   />
+  <xsl:output-character
+   char="&#x24b2;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER W"
+   string="(w)"
+   />
+  <xsl:output-character
+   char="&#x24b3;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER X"
+   string="(x)"
+   />
+  <xsl:output-character
+   char="&#x24b4;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER Y"
+   string="(y)"
+   />
+  <xsl:output-character
+   char="&#x24b5;"
+   unichar:name="PARENTHESIZED LATIN SMALL LETTER Z"
+   string="(z)"
+   />
+  <xsl:output-character
+   char="&#x24b6;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER A"
+   string="A"
+   />
+  <xsl:output-character
+   char="&#x24b7;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER B"
+   string="B"
+   />
+  <xsl:output-character
+   char="&#x24b8;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER C"
+   string="C"
+   />
+  <xsl:output-character
+   char="&#x24b9;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER D"
+   string="D"
+   />
+  <xsl:output-character
+   char="&#x24ba;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER E"
+   string="E"
+   />
+  <xsl:output-character
+   char="&#x24bb;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER F"
+   string="F"
+   />
+  <xsl:output-character
+   char="&#x24bc;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER G"
+   string="G"
+   />
+  <xsl:output-character
+   char="&#x24bd;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER H"
+   string="H"
+   />
+  <xsl:output-character
+   char="&#x24be;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER I"
+   string="I"
+   />
+  <xsl:output-character
+   char="&#x24bf;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER J"
+   string="J"
+   />
+  <xsl:output-character
+   char="&#x24c0;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER K"
+   string="K"
+   />
+  <xsl:output-character
+   char="&#x24c1;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER L"
+   string="L"
+   />
+  <xsl:output-character
+   char="&#x24c2;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER M"
+   string="M"
+   />
+  <xsl:output-character
+   char="&#x24c3;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER N"
+   string="N"
+   />
+  <xsl:output-character
+   char="&#x24c4;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER O"
+   string="O"
+   />
+  <xsl:output-character
+   char="&#x24c5;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER P"
+   string="P"
+   />
+  <xsl:output-character
+   char="&#x24c6;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER Q"
+   string="Q"
+   />
+  <xsl:output-character
+   char="&#x24c7;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER R"
+   string="R"
+   />
+  <xsl:output-character
+   char="&#x24c8;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER S"
+   unichar:entity="oS"
+   string="S"
+   />
+  <xsl:output-character
+   char="&#x24c9;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER T"
+   string="T"
+   />
+  <xsl:output-character
+   char="&#x24ca;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER U"
+   string="U"
+   />
+  <xsl:output-character
+   char="&#x24cb;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER V"
+   string="V"
+   />
+  <xsl:output-character
+   char="&#x24cc;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER W"
+   string="W"
+   />
+  <xsl:output-character
+   char="&#x24cd;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER X"
+   string="X"
+   />
+  <xsl:output-character
+   char="&#x24ce;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER Y"
+   string="Y"
+   />
+  <xsl:output-character
+   char="&#x24cf;"
+   unichar:name="CIRCLED LATIN CAPITAL LETTER Z"
+   string="Z"
+   />
+  <xsl:output-character
+   char="&#x24d0;"
+   unichar:name="CIRCLED LATIN SMALL LETTER A"
+   string="a"
+   />
+  <xsl:output-character
+   char="&#x24d1;"
+   unichar:name="CIRCLED LATIN SMALL LETTER B"
+   string="b"
+   />
+  <xsl:output-character
+   char="&#x24d2;"
+   unichar:name="CIRCLED LATIN SMALL LETTER C"
+   string="c"
+   />
+  <xsl:output-character
+   char="&#x24d3;"
+   unichar:name="CIRCLED LATIN SMALL LETTER D"
+   string="d"
+   />
+  <xsl:output-character
+   char="&#x24d4;"
+   unichar:name="CIRCLED LATIN SMALL LETTER E"
+   string="e"
+   />
+  <xsl:output-character
+   char="&#x24d5;"
+   unichar:name="CIRCLED LATIN SMALL LETTER F"
+   string="f"
+   />
+  <xsl:output-character
+   char="&#x24d6;"
+   unichar:name="CIRCLED LATIN SMALL LETTER G"
+   string="g"
+   />
+  <xsl:output-character
+   char="&#x24d7;"
+   unichar:name="CIRCLED LATIN SMALL LETTER H"
+   string="h"
+   />
+  <xsl:output-character
+   char="&#x24d8;"
+   unichar:name="CIRCLED LATIN SMALL LETTER I"
+   string="i"
+   />
+  <xsl:output-character
+   char="&#x24d9;"
+   unichar:name="CIRCLED LATIN SMALL LETTER J"
+   string="j"
+   />
+  <xsl:output-character
+   char="&#x24da;"
+   unichar:name="CIRCLED LATIN SMALL LETTER K"
+   string="k"
+   />
+  <xsl:output-character
+   char="&#x24db;"
+   unichar:name="CIRCLED LATIN SMALL LETTER L"
+   string="l"
+   />
+  <xsl:output-character
+   char="&#x24dc;"
+   unichar:name="CIRCLED LATIN SMALL LETTER M"
+   string="m"
+   />
+  <xsl:output-character
+   char="&#x24dd;"
+   unichar:name="CIRCLED LATIN SMALL LETTER N"
+   string="n"
+   />
+  <xsl:output-character
+   char="&#x24de;"
+   unichar:name="CIRCLED LATIN SMALL LETTER O"
+   string="o"
+   />
+  <xsl:output-character
+   char="&#x24df;"
+   unichar:name="CIRCLED LATIN SMALL LETTER P"
+   string="p"
+   />
+  <xsl:output-character
+   char="&#x24e0;"
+   unichar:name="CIRCLED LATIN SMALL LETTER Q"
+   string="q"
+   />
+  <xsl:output-character
+   char="&#x24e1;"
+   unichar:name="CIRCLED LATIN SMALL LETTER R"
+   string="r"
+   />
+  <xsl:output-character
+   char="&#x24e2;"
+   unichar:name="CIRCLED LATIN SMALL LETTER S"
+   string="s"
+   />
+  <xsl:output-character
+   char="&#x24e3;"
+   unichar:name="CIRCLED LATIN SMALL LETTER T"
+   string="t"
+   />
+  <xsl:output-character
+   char="&#x24e4;"
+   unichar:name="CIRCLED LATIN SMALL LETTER U"
+   string="u"
+   />
+  <xsl:output-character
+   char="&#x24e5;"
+   unichar:name="CIRCLED LATIN SMALL LETTER V"
+   string="b"
+   />
+  <xsl:output-character
+   char="&#x24e6;"
+   unichar:name="CIRCLED LATIN SMALL LETTER W"
+   string="w"
+   />
+  <xsl:output-character
+   char="&#x24e7;"
+   unichar:name="CIRCLED LATIN SMALL LETTER X"
+   string="x"
+   />
+  <xsl:output-character
+   char="&#x24e8;"
+   unichar:name="CIRCLED LATIN SMALL LETTER Y"
+   string="y"
+   />
+  <xsl:output-character
+   char="&#x24e9;"
+   unichar:name="CIRCLED LATIN SMALL LETTER Z"
+   string="z"
+   />
+  <xsl:output-character
+   char="&#x24ea;"
+   unichar:name="CIRCLED DIGIT ZERO"
+   string="0"
+   />
+  <xsl:output-character
+   char="&#x24eb;"
+   unichar:name="NEGATIVE CIRCLED NUMBER ELEVEN"
+   string="11"
+   />
+  <xsl:output-character
+   char="&#x24ec;"
+   unichar:name="NEGATIVE CIRCLED NUMBER TWELVE"
+   string="12"
+   />
+  <xsl:output-character
+   char="&#x24ed;"
+   unichar:name="NEGATIVE CIRCLED NUMBER THIRTEEN"
+   string="13"
+   />
+  <xsl:output-character
+   char="&#x24ee;"
+   unichar:name="NEGATIVE CIRCLED NUMBER FOURTEEN"
+   string="14"
+   />
+  <xsl:output-character
+   char="&#x24ef;"
+   unichar:name="NEGATIVE CIRCLED NUMBER FIFTEEN"
+   string="15"
+   />
+  <xsl:output-character
+   char="&#x24f0;"
+   unichar:name="NEGATIVE CIRCLED NUMBER SIXTEEN"
+   string="16"
+   />
+  <xsl:output-character
+   char="&#x24f1;"
+   unichar:name="NEGATIVE CIRCLED NUMBER SEVENTEEN"
+   string="17"
+   />
+  <xsl:output-character
+   char="&#x24f2;"
+   unichar:name="NEGATIVE CIRCLED NUMBER EIGHTEEN"
+   string="18"
+   />
+  <xsl:output-character
+   char="&#x24f3;"
+   unichar:name="NEGATIVE CIRCLED NUMBER NINETEEN"
+   string="19"
+   />
+  <xsl:output-character
+   char="&#x24f4;"
+   unichar:name="NEGATIVE CIRCLED NUMBER TWENTY"
+   string="20"
+   />
+  <xsl:output-character
+   char="&#x24f5;"
+   unichar:name="DOUBLE CIRCLED DIGIT ONE"
+   string="1"
+   />
+  <xsl:output-character
+   char="&#x24f6;"
+   unichar:name="DOUBLE CIRCLED DIGIT TWO"
+   string="2"
+   />
+  <xsl:output-character
+   char="&#x24f7;"
+   unichar:name="DOUBLE CIRCLED DIGIT THREE"
+   string="3"
+   />
+  <xsl:output-character
+   char="&#x24f8;"
+   unichar:name="DOUBLE CIRCLED DIGIT FOUR"
+   string="4"
+   />
+  <xsl:output-character
+   char="&#x24f9;"
+   unichar:name="DOUBLE CIRCLED DIGIT FIVE"
+   string="5"
+   />
+  <xsl:output-character
+   char="&#x24fa;"
+   unichar:name="DOUBLE CIRCLED DIGIT SIX"
+   string="6"
+   />
+  <xsl:output-character
+   char="&#x24fb;"
+   unichar:name="DOUBLE CIRCLED DIGIT SEVEN"
+   string="7"
+   />
+  <xsl:output-character
+   char="&#x24fc;"
+   unichar:name="DOUBLE CIRCLED DIGIT EIGHT"
+   string="8"
+   />
+  <xsl:output-character
+   char="&#x24fd;"
+   unichar:name="DOUBLE CIRCLED DIGIT NINE"
+   string="9"
+   />
+  <xsl:output-character
+   char="&#x24fe;"
+   unichar:name="DOUBLE CIRCLED NUMBER TEN"
+   string="10"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Enclosed Alphanumerics -->
+  <!-- * ***************************************************************** -->
+
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+  <!-- *   Box Drawing -->
+  <!-- *     x2500 to x257f -->
+  <!-- *   Block Elements -->
+  <!-- *     x2580 to x259f -->
+  <!-- *   - do nothing - -->
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+  
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Geometric Shapes -->
+  <!-- *     x25a0 to x25f7 -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x25a1;"
+   unichar:name="WHITE SQUARE"
+   unichar:entity="squ"
+   string="@esc@(sq"
+   />
+  <xsl:output-character
+   char="&#x25a2;"
+   unichar:name="WHITE SQUARE WITH ROUNDED CORNERS"
+   string="@esc@(sq"
+   />
+  <xsl:output-character
+   char="&#x25ab;"
+   unichar:name="WHITE SMALL SQUARE"
+   string="@esc@(sq"
+   />
+  <xsl:output-character
+   char="&#x25ba;"
+   unichar:name="BLACK RIGHT-POINTING POINTER"
+   string="@esc@fB>@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x25bb;"
+   unichar:name="WHITE RIGHT-POINTING POINTER"
+   string=">"
+   />
+  <xsl:output-character
+   char="&#x25bc;"
+   unichar:name="BLACK DOWN-POINTING TRIANGLE"
+   string="@esc@fBv@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x25bd;"
+   unichar:name="WHITE DOWN-POINTING TRIANGLE"
+   unichar:entity="xdtri"
+   string="v"
+   />
+  <xsl:output-character
+   char="&#x25c4;"
+   unichar:name="BLACK LEFT-POINTING POINTER"
+   string="@esc@fB&lt;@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x25c5;"
+   unichar:name="WHITE LEFT-POINTING POINTER"
+   string="&lt;"
+   />
+  <xsl:output-character
+   char="&#x25c6;"
+   unichar:name="BLACK DIAMOND"
+   string="@esc@(DI"
+   />
+  <xsl:output-character
+   char="&#x25c7;"
+   unichar:name="WHITE DIAMOND"
+   string="@esc@(lz"
+   />
+  <xsl:output-character
+   char="&#x25ca;"
+   unichar:name="LOZENGE"
+   unichar:entity="loz"
+   string="@esc@(lz"
+   />
+  <xsl:output-character
+   char="&#x25cb;"
+   unichar:name="WHITE CIRCLE"
+   unichar:entity="cir"
+   string="@esc@(ci"
+   />
+  <xsl:output-character
+   char="&#x25cf;"
+   unichar:name="BLACK CIRCLE"
+   string="@esc@(bu"
+   />
+  <xsl:output-character
+   char="&#x25e6;"
+   unichar:name="WHITE BULLET"
+   string="@esc@(ci"
+   />
+  <xsl:output-character
+   char="&#x25ef;"
+   unichar:name="LARGE CIRCLE"
+   unichar:entity="xcirc"
+   string="@esc@(ci"
+   />
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Geometric Shapes -->
+  <!-- *   x25a0 to x25f7 -->
+  <!-- * ***************************************************************** -->
+
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Miscellaneous Symbols -->
+  <!-- *   x2600 to x26ff -->
+  <!-- * ***************************************************************** -->
+  
+  <xsl:output-character
+   char="&#x261a;"
+   unichar:name="BLACK LEFT POINTING INDEX"
+   string="@esc@(lh"
+   />
+  <xsl:output-character
+   char="&#x261b;"
+   unichar:name="BLACK RIGHT POINTING INDEX"
+   string="@esc@(rh)"
+   />
+  <xsl:output-character
+   char="&#x261c;"
+   unichar:name="WHITE LEFT POINTING INDEX"
+   string="@esc@(lh"
+   />
+  <xsl:output-character
+   char="&#x261e;"
+   unichar:name="WHITE RIGHT POINTING INDEX"
+   string="@esc@(rh)"
+   />
+  <xsl:output-character
+   char="&#x2660;"
+   unichar:name="BLACK SPADE SUIT"
+   unichar:entity="spades"
+   string="@esc@(SP"
+   />
+  <xsl:output-character
+   char="&#x2661;"
+   unichar:name="WHITE HEART SUIT"
+   string="@esc@(HE"
+   />
+  <xsl:output-character
+   char="&#x2662;"
+   unichar:name="WHITE DIAMOND SUIT"
+   string="@esc@(DI"
+   />
+  <xsl:output-character
+   char="&#x2663;"
+   unichar:name="BLACK CLUB SUIT"
+   unichar:entity="clubs"
+   string="@esc@(CL"
+   />
+  <xsl:output-character
+   char="&#x2664;"
+   unichar:name="WHITE SPADE SUIT"
+   string="@esc@(SP"
+   />
+  <xsl:output-character
+   char="&#x2665;"
+   unichar:name="BLACK HEART SUIT"
+   unichar:entity="hearts"
+   string="@esc@(HE"
+   />
+  <xsl:output-character
+   char="&#x2666;"
+   unichar:name="BLACK DIAMOND SUIT"
+   unichar:entity="diams"
+   string="@esc@(DI"
+   />
+  <xsl:output-character
+   char="&#x2667;"
+   unichar:name="WHITE CLUB SUIT"
+   string="@esc@(CL"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Miscellaneous Symbols -->
+  <!-- * ***************************************************************** -->
+
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Dingbats -->
+  <!-- *     x2700 to x27be -->
+  <!-- *     No roff equiv for most of these; just map to something close -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#x2713;"
+   unichar:name="CHECK MARK"
+   unichar:entity="check"
+   string="@esc@(OK"
+   />
+  <xsl:output-character
+   char="&#x2714;"
+   unichar:name="HEAVY CHECK MARK"
+   string="@esc@fB@esc@(OK@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2715;"
+   unichar:name="MULTIPLICATION X"
+   string="@esc@(mu"
+   />
+  <xsl:output-character
+   char="&#x2716;"
+   unichar:name="HEAVY MULTIPLICATION X"
+   string="@esc@fB@esc@(mu@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2717;"
+   unichar:name="BALLOT X"
+   unichar:entity="cross"
+   string="@esc@(mu"
+   />
+  <xsl:output-character
+   char="&#x2718;"
+   unichar:name="HEAVY BALLOT X"
+   string="@esc@fB@esc@(mu@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2719;"
+   unichar:name="OUTLINED GREEK CROSS"
+   string="@esc@fB+@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x271a;"
+   unichar:name="HEAVY GREEK CROSS"
+   string="@esc@fB+@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x271b;"
+   unichar:name="OPEN CENTRE CROSS"
+   string="@esc@fB+@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x271c;"
+   unichar:name="HEAVY OPEN CENTRE CROSS"
+   string="@esc@fB+@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x271d;"
+   unichar:name="LATIN CROSS"
+   string="@esc@fB+@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x271e;"
+   unichar:name="SHADOWED WHITE LATIN CROSS"
+   string="@esc@fB+@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x271f;"
+   unichar:name="OUTLINED LATIN CROSS"
+   string="@esc@fB+@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2720;"
+   unichar:name="MALTESE CROSS"
+   unichar:entity="malt"
+   string="@esc@fB+@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2721;"
+   unichar:name="STAR OF DAVID"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2722;"
+   unichar:name="FOUR TEARDROP-SPOKED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2723;"
+   unichar:name="FOUR BALLOON-SPOKED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2724;"
+   unichar:name="HEAVY FOUR BALLOON-SPOKED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2725;"
+   unichar:name="FOUR CLUB-SPOKED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2726;"
+   unichar:name="BLACK FOUR POINTED STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2727;"
+   unichar:name="WHITE FOUR POINTED STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2729;"
+   unichar:name="STRESS OUTLINED WHITE STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x272a;"
+   unichar:name="CIRCLED WHITE STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x272b;"
+   unichar:name="OPEN CENTRE BLACK STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x272c;"
+   unichar:name="BLACK CENTRE WHITE STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x272d;"
+   unichar:name="OUTLINED BLACK STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x272e;"
+   unichar:name="HEAVY OUTLINED BLACK STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x272f;"
+   unichar:name="PINWHEEL STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2730;"
+   unichar:name="SHADOWED WHITE STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2731;"
+   unichar:name="HEAVY ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2732;"
+   unichar:name="OPEN CENTRE ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2733;"
+   unichar:name="EIGHT SPOKED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2734;"
+   unichar:name="EIGHT POINTED BLACK STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2735;"
+   unichar:name="EIGHT POINTED PINWHEEL STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2736;"
+   unichar:name="SIX POINTED BLACK STAR"
+   unichar:entity="sext"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2737;"
+   unichar:name="EIGHT POINTED RECTILINEAR BLACK STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2738;"
+   unichar:name="HEAVY EIGHT POINTED RECTILINEAR BLACK STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2739;"
+   unichar:name="TWELVE POINTED BLACK STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x273a;"
+   unichar:name="SIXTEEN POINTED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x273b;"
+   unichar:name="TEARDROP-SPOKED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x273c;"
+   unichar:name="OPEN CENTRE TEARDROP-SPOKED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x273d;"
+   unichar:name="HEAVY TEARDROP-SPOKED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x273e;"
+   unichar:name="SIX PETALLED BLACK AND WHITE FLORETTE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x273f;"
+   unichar:name="BLACK FLORETTE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2740;"
+   unichar:name="WHITE FLORETTE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2741;"
+   unichar:name="EIGHT PETALLED OUTLINED BLACK FLORETTE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2742;"
+   unichar:name="CIRCLED OPEN CENTRE EIGHT POINTED STAR"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2743;"
+   unichar:name="HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2744;"
+   unichar:name="SNOWFLAKE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2745;"
+   unichar:name="TIGHT TRIFOLIATE SNOWFLAKE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2746;"
+   unichar:name="HEAVY CHEVRON SNOWFLAKE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2747;"
+   unichar:name="SPARKLE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2748;"
+   unichar:name="HEAVY SPARKLE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2749;"
+   unichar:name="BALLOON-SPOKED ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x274a;"
+   unichar:name="EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x274b;"
+   unichar:name="HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x274d;"
+   unichar:name="SHADOWED WHITE CIRCLE"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x274f;"
+   unichar:name="LOWER RIGHT DROP-SHADOWED WHITE SQUARE"
+   string="@esc@(sq"
+   />
+  <xsl:output-character
+   char="&#x2750;"
+   unichar:name="UPPER RIGHT DROP-SHADOWED WHITE SQUARE"
+   string="@esc@(sq"
+   />
+  <xsl:output-character
+   char="&#x2751;"
+   unichar:name="LOWER RIGHT SHADOWED WHITE SQUARE"
+   string="@esc@(sq"
+   />
+  <xsl:output-character
+   char="&#x2752;"
+   unichar:name="UPPER RIGHT SHADOWED WHITE SQUARE"
+   string="@esc@(sq"
+   />
+  <xsl:output-character
+   char="&#x2756;"
+   unichar:name="BLACK DIAMOND MINUS WHITE X"
+   string="*"
+   />
+  <xsl:output-character
+   char="&#x2758;"
+   unichar:name="LIGHT VERTICAL BAR"
+   string="@esc@(bv"
+   />
+  <xsl:output-character
+   char="&#x2759;"
+   unichar:name="MEDIUM VERTICAL BAR"
+   string="@esc@fB@esc@(bv@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x275a;"
+   unichar:name="HEAVY VERTICAL BAR"
+   string="@esc@fB@esc@(bv@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x275b;"
+   unichar:name="HEAVY SINGLE TURNED COMMA QUOTATION MARK ORUNICHAR:NAMENT"
+   string="@esc@fB@esc@(oq@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x275c;"
+   unichar:name="HEAVY SINGLE COMMA QUOTATION MARK ORUNICHAR:NAMENT"
+   string="@esc@fB@esc@(cq@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x275d;"
+   unichar:name="HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORUNICHAR:NAMENT"
+   string="@esc@fB@esc@(lq@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x275e;"
+   unichar:name="HEAVY DOUBLE COMMA QUOTATION MARK ORUNICHAR:NAMENT"
+   string="@esc@fB@esc@(rq@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2761;"
+   unichar:name="CURVED STEM PARAGRAPH SIGN ORUNICHAR:NAMENT"
+   string="@esc@(ps"
+   />
+  <xsl:output-character
+   char="&#x2762;"
+   unichar:name="HEAVY EXCLAMATION MARK ORUNICHAR:NAMENT"
+   string="@esc@fB!@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2763;"
+   unichar:name="HEAVY HEART EXCLAMATION MARK ORUNICHAR:NAMENT"
+   string="@esc@fB!@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2764;"
+   unichar:name="HEAVY BLACK HEART"
+   string="@esc@fB@esc@(HE@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2765;"
+   unichar:name="ROTATED HEAVY BLACK HEART BULLET"
+   string="@esc@fB@esc@(HE@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2766;"
+   unichar:name="FLORAL HEART"
+   string="@esc@fB@esc@(HE@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2767;"
+   unichar:name="ROTATED FLORAL HEART BULLET"
+   string="@esc@fB@esc@(HE@esc@fR"
+   />
+  <xsl:output-character
+   char="&#x2776;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT ONE"
+   string="1"
+   />
+  <xsl:output-character
+   char="&#x2777;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT TWO"
+   string="2"
+   />
+  <xsl:output-character
+   char="&#x2778;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT THREE"
+   string="3"
+   />
+  <xsl:output-character
+   char="&#x2779;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT FOUR"
+   string="4"
+   />
+  <xsl:output-character
+   char="&#x277a;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT FIVE"
+   string="5"
+   />
+  <xsl:output-character
+   char="&#x277b;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT SIX"
+   string="6"
+   />
+  <xsl:output-character
+   char="&#x277c;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT SEVEN"
+   string="7"
+   />
+  <xsl:output-character
+   char="&#x277d;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT EIGHT"
+   string="8"
+   />
+  <xsl:output-character
+   char="&#x277e;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT NINE"
+   string="9"
+   />
+  <xsl:output-character
+   char="&#x277f;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED NUMBER TEN"
+   string="10"
+   />
+  <xsl:output-character
+   char="&#x2780;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT ONE"
+   string="1"
+   />
+  <xsl:output-character
+   char="&#x2781;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT TWO"
+   string="2"
+   />
+  <xsl:output-character
+   char="&#x2782;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT THREE"
+   string="3"
+   />
+  <xsl:output-character
+   char="&#x2783;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT FOUR"
+   string="4"
+   />
+  <xsl:output-character
+   char="&#x2784;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT FIVE"
+   string="5"
+   />
+  <xsl:output-character
+   char="&#x2785;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT SIX"
+   string="6"
+   />
+  <xsl:output-character
+   char="&#x2786;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN"
+   string="7"
+   />
+  <xsl:output-character
+   char="&#x2787;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT"
+   string="8"
+   />
+  <xsl:output-character
+   char="&#x2788;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT NINE"
+   string="9"
+   />
+  <xsl:output-character
+   char="&#x2789;"
+   unichar:name="DINGBAT CIRCLED SANS-SERIF NUMBER TEN"
+   string="10"
+   />
+  <xsl:output-character
+   char="&#x278a;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE"
+   string="1"
+   />
+  <xsl:output-character
+   char="&#x278b;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO"
+   string="2"
+   />
+  <xsl:output-character
+   char="&#x278c;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE"
+   string="3"
+   />
+  <xsl:output-character
+   char="&#x278d;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR"
+   string="4"
+   />
+  <xsl:output-character
+   char="&#x278e;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE"
+   string="5"
+   />
+  <xsl:output-character
+   char="&#x278f;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX"
+   string="6"
+   />
+  <xsl:output-character
+   char="&#x2790;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN"
+   string="7"
+   />
+  <xsl:output-character
+   char="&#x2791;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT"
+   string="8"
+   />
+  <xsl:output-character
+   char="&#x2792;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE"
+   string="9"
+   />
+  <xsl:output-character
+   char="&#x2793;"
+   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN"
+   string="10"
+   />
+  <xsl:output-character
+   char="&#x2794;"
+   unichar:name="HEAVY WIDE-HEADED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x2799;"
+   unichar:name="HEAVY RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x279b;"
+   unichar:name="DRAFTING POINT RIGHTWARDS ARROW"
+   string="@esc@(->"
+   />
+  <xsl:output-character
+   char="&#x279c;"
+   unichar:name="HEAVY ROUND-TIPPED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x279d;"
+   unichar:name="TRIANGLE-HEADED RIGHTWARDS ARROW"
+   string="@esc@(->"
+   />
+  <xsl:output-character
+   char="&#x279e;"
+   unichar:name="HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x279f;"
+   unichar:name="DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"
+   string="@esc@(->"
+   />
+  <xsl:output-character
+   char="&#x27a0;"
+   unichar:name="HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27a1;"
+   unichar:name="BLACK RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27a2;"
+   unichar:name="THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD"
+   string="@esc@(->"
+   />
+  <xsl:output-character
+   char="&#x27a3;"
+   unichar:name="THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD"
+   string="@esc@(->"
+   />
+  <xsl:output-character
+   char="&#x27a4;"
+   unichar:name="BLACK RIGHTWARDS ARROWHEAD"
+   string="@esc@(->"
+   />
+  <xsl:output-character
+   char="&#x27a7;"
+   unichar:name="SQUAT BLACK RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27a8;"
+   unichar:name="HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27a9;"
+   unichar:name="RIGHT-SHADED WHITE RIGHTWARDS ARROW"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x27aa;"
+   unichar:name="LEFT-SHADED WHITE RIGHTWARDS ARROW"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x27ab;"
+   unichar:name="BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x27ac;"
+   unichar:name="FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x27ad;"
+   unichar:name="HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x27ae;"
+   unichar:name="HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x27af;"
+   unichar:name="NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x27b1;"
+   unichar:name="NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x27b2;"
+   unichar:name="CIRCLED HEAVY WHITE RIGHTWARDS ARROW"
+   string="@esc@(rA"
+   />
+  <xsl:output-character
+   char="&#x27b3;"
+   unichar:name="WHITE-FEATHERED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27b4;"
+   unichar:name="BLACK-FEATHERED SOUTH EAST ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27b5;"
+   unichar:name="BLACK-FEATHERED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27b6;"
+   unichar:name="BLACK-FEATHERED NORTH EAST ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27b7;"
+   unichar:name="HEAVY BLACK-FEATHERED SOUTH EAST ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27b8;"
+   unichar:name="HEAVY BLACK-FEATHERED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27b9;"
+   unichar:name="HEAVY BLACK-FEATHERED NORTH EAST ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27ba;"
+   unichar:name="TEARDROP-BARBED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27bb;"
+   unichar:name="HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27bc;"
+   unichar:name="WEDGE-TAILED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27bd;"
+   unichar:name="HEAVY WEDGE-TAILED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(->@esc@fB"
+   />
+  <xsl:output-character
+   char="&#x27be;"
+   unichar:name="OPEN-OUTLINED RIGHTWARDS ARROW"
+   string="@esc@fR@esc@(rA@esc@fB"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Dingbats -->
+  <!-- * ***************************************************************** -->
+
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+  <!-- *   Miscellaneous Mathematical Symbols -->
+  <!-- *     x27c0 to x27ef -->
+  <!-- *   Supplemental Arrows -->
+  <!-- *     x27f0 to x297f -->
+  <!-- *   Miscellaneous Mathematical Symbols -->
+  <!-- *     x2980 to x29ff -->
+  <!-- *   Supplemental Mathematical Operators -->
+  <!-- *     x2a00 to x2aff -->
+  <!-- *   - no nothing - -->
+  <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+
+  <!-- * ***************************************************************** -->
+  <!-- *   Begin: Alphabetic Presentation Forms -->
+  <!-- *     xfb00 to xfb04 -->
+  <!-- * ***************************************************************** -->
+
+  <xsl:output-character
+   char="&#xfb00;"
+   unichar:name="LATIN SMALL LIGATURE FF"
+   unichar:entity="fflig"
+   string="@esc@(ff"
+   />
+  <xsl:output-character
+   char="&#xfb01;"
+   unichar:name="LATIN SMALL LIGATURE FI"
+   unichar:entity="filig"
+   string="@esc@(fi"
+   />
+  <xsl:output-character
+   char="&#xfb02;"
+   unichar:name="LATIN SMALL LIGATURE FL"
+   unichar:entity="fllig"
+   string="@esc@(fl"
+   />
+  <xsl:output-character
+   char="&#xfb03;"
+   unichar:name="LATIN SMALL LIGATURE FFI"
+   unichar:entity="ffilig"
+   string="@esc@(Fi"
+   />
+  <xsl:output-character
+   char="&#xfb04;"
+   unichar:name="LATIN SMALL LIGATURE FFL"
+   unichar:entity="ffllig"
+   string="@esc@(Fl"
+   />
+
+  <!-- * ***************************************************************** -->
+  <!-- *   End: Alphabetic Presentation Forms -->
+  <!-- * ***************************************************************** -->
+
+  <!-- * ================================================================= -->
+
+  <!-- * Regarding x2060 vs. xFEFF, the document "Unicode Standard Annex #14, -->
+  <!-- * Line Breaking Properties"[1] says: -->
+  <!-- * -->
+  <!-- *   The word joiner character [x2060 a.k.a "WJ"] is the preferred -->
+  <!-- *   choice for an invisible character to keep other characters -->
+  <!-- *   together that would otherwise be split across the line at a direct -->
+  <!-- *   break. The character FEFF has the same effect, but because it is -->
+  <!-- *   also used in an unrelated way as a byte order mark, the use of the -->
+  <!-- *   WJ as the preferred interword glue simplifies the handling of FEFF. -->
+  <!-- * -->
+  <!-- * [1] http://www.unicode.org/reports/tr14/ -->
+  <!-- * -->
+We include it here anyway, and map it to the roff zero-width
+  <xsl:output-character
+   char="&#xfeff;"
+   unichar:name="ZERO WIDTH NO-BREAK SPACE"
+   string="@esc@&amp;"
+   />
+
+</xsl:character-map>
diff --git a/xsl/manpages/unicodetrans.xsl b/xsl/manpages/unicodetrans.xsl
new file mode 100755 (executable)
index 0000000..7857a6a
--- /dev/null
@@ -0,0 +1,50 @@
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:str="http://xsltsl.org/string">
+
+<!-- ********************************************************************
+     $Id$
+     ********************************************************************
+
+     This file is part of the XSL DocBook Stylesheet distribution.
+     See ../README or http://docbook.sf.net/release/xsl/current/ for
+     copyright and other information.
+
+     ******************************************************************** -->
+
+<!-- ==================================================================== -->
+
+  <xsl:param name="charmap.filename">roff.charmap.min.xml</xsl:param>
+
+  <!-- * The following function is a modified version of Jeni -->
+  <!-- * Tennison's 'replace_strings' in the 'multiple string -->
+  <!-- * replacements' section of Dave Pawson's XSLT FAQ: -->
+  <!-- *  -->
+  <!-- *   http://www.dpawson.co.uk/xsl/sect2/StringReplace.html -->
+
+  <xsl:template name="replace.unicode.chars">
+    <xsl:param name="content" />
+    <xsl:param name="search"
+               select="document($charmap.filename)//*[local-name()='output-character']" />
+    <xsl:variable name="replaced_text">
+      <xsl:call-template name="string.subst">
+        <xsl:with-param name="string" select="$content" />
+        <xsl:with-param name="target" 
+                        select="$search[1]/@char" />
+        <xsl:with-param name="replacement" 
+                        select="$search[1]/@string" />
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:choose>
+      <xsl:when test="$search[2]">
+        <xsl:call-template name="replace.unicode.chars">
+          <xsl:with-param name="content" select="$replaced_text" />
+          <xsl:with-param name="search" select="$search[position() > 1]" />
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$replaced_text" />
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+</xsl:stylesheet>