Blob Blame History Raw
<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE xsl:stylesheet [
<!ENTITY groff_char "<citerefentry><refentrytitle>groff_char</refentrytitle><manvolnum>7</manvolnum></citerefentry>">
<!ENTITY groff_info "the <application>groff</application> Info page">
<!ENTITY groff "<application>groff</application>">
<!ENTITY docbook2X "<application>docbook2X</application>">
<!ENTITY utf8trans "<citerefentry><refentrytitle><command>utf8trans</command></refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY xmlcharmap2utf8trans "<command>xmlcharmap2utf8trans</command>">
]>

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:unichar="http://docbook.sourceforge.net/xmlns/unichar/1.0"
  xmlns:doc="http://docbook2x.sourceforge.net/xmlns/character-map-doc"
  exclude-result-prefixes="unichar doc"
  version="2.0"
>

<!-- ************************************************************** -->
<doc:reference xmlns="">
  <partinfo>
    <author><firstname>Michael</firstname> <surname>Smith</surname></author>
    <author><firstname>Steve</firstname> <surname>Cheng</surname></author>
  </partinfo>

  <partintro>
    <para>
      This file maps a small subset of Unicode characters (around 800
      or so) to corresponding roff espace sequences. Use it when you
      need to convert XML documents using Unicode characters
      to roff (e.g., to generate “portable” man-page output).
    </para>

    <para>
      Although the format follows the “character map” format
      specified in the 
      <ulink url="http://www.w3.org/TR/xslt20/#character-maps">
      XSLT 2.0 working draft</ulink>, it can be used with
      an appropriate XSLT 1.0 stylesheet and any XSLT 1.0 processor.
      It can also be used with the &utf8trans; program of &docbook2X;,
      after conversion with the &xmlcharmap2utf8trans; script.
    </para>

    <para>
      In order to make the character map more readable, it uses the
      following “extension attributes” (in the <sgmltag
      class="namespace">unichar</sgmltag>
      namespace):

      <variablelist>
        <varlistentry>
          <term>
            <sgmltag class="attribute">unichar:name</sgmltag>
          </term>
          <listitem>
            <para>Name for the character assigned by Unicode
                  (e.g. <literal>NO-BREAK SPACE</literal>)</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>
            <sgmltag class="attribute">unichar:entity</sgmltag>
          </term>
          <listitem>
            <para>ISO entity name for the character
                  (e.g. <literal>nbsp</literal>)
            </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </para>

    <para>
      Use of such extension attributes is permitted by the XSLT 2.0
      spec; see the 
      <ulink url="http://www.w3.org/TR/xslt20/#extension-attributes">
      “Extension Attributes” section</ulink>.
    </para>

    <para>
      The initial version of this file (before the “string” mappings
      were added) was generated by taking the
      <filename>unichars.el</filename> file from
      Norm Walsh’s <filename>xmlunicode.el</filename> elisp distro, 
      and running a script on it to convert it to XML.
    </para>

    <para>
      Steve Cheng later reorganized the file, putting the characters
      in each Unicode block in separate 
      <sgmltag class="element">xsl:character-map</sgmltag> elements,
      and changing the XML comments to documentation snippets in the
      <sgmltag class="namespace">doc</sgmltag> namespace.  
      (This helps to pretty-print the document.)
    </para>

    <para>
      References used in selecting roff mappings:

      <orderedlist>
        <listitem>
          <para>&groff_char; man page</para>
        </listitem>

        <listitem>
          <para>&groff; Info file; in particular, the “Page Motions”
          section</para>
        </listitem>

        <listitem>
          <para>tables in the “Character Sets” chapter of 
          <ulink url="http://www.ibiblio.org/xml/books/xian2/">
          <citetitle>XML In a Nutshell</citetitle></ulink></para>
        </listitem>
      </orderedlist>
    </para>
  </partintro>
</doc:reference>



<!-- ************************************************************** -->
<!-- Select the character maps used -->

<xsl:output 
  use-character-maps="latin1 latin-ext-A latin-ext-B
                      spacing-modifiers greek-coptic
                      punct letterlike arrows
                      math-op misc-tech geometric-shapes
                      misc-symbols dingbats cjk-symbols-punct
                      alphabetic-presentation-forms
                      
                      sup-subscript currency number-forms
                      control-pictures enclosed-alphanumerics" 
  />



<!-- ************************************************************** -->
<!-- Include the ASCII transliterations -->

<xsl:include href="translit.charmap.xml" />



<!-- ************************************************************** -->
<doc:character-map name="latin1" xmlns="">
  <title>Latin-1 Supplement</title>
</doc:character-map>

<xsl:character-map name="latin1">

  <doc:output-character character="&#x00a0;" xmlns="">
    <para>
      No-break space can be written two ways in roff; the difference,
      according to the “Page Motions” node in &groff_info;, is:

      <variablelist>
        <varlistentry>
          <term><markup>\ </markup></term>
          <listitem>
            <para><quote>
              An unbreakable and unpaddable (i.e. not expanded during filling)
              space.
            </quote></para>
          </listitem>
        </varlistentry>
        
        <varlistentry>
          <term><markup>\~</markup></term>
          <listitem>
            <para><quote>
              An unbreakable space that stretches like a normal
              inter-word space when a line is adjusted.
            </quote></para>
          </listitem>
        </varlistentry>
      </variablelist>
    </para>

    <para>
      Unfortunately, roff seems to do some weird things with long
      lines that only have words separated by <markup>\~</markup> 
      spaces, so it is safer just to stick with the <markup>\ </markup>
      space.
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x00a0;"
   unichar:name="NO-BREAK SPACE"
   unichar:entity="nbsp"
   string="\ "
   />

  <xsl:output-character
   character="&#x00a1;"
   unichar:name="INVERTED EXCLAMATION MARK"
   unichar:entity="iexcl"
   string="\(r!"
   />
  <xsl:output-character
   character="&#x00a2;"
   unichar:name="CENT SIGN"
   unichar:entity="cent"
   string="\(ct"
   />
  <xsl:output-character
   character="&#x00a3;"
   unichar:name="POUND SIGN"
   unichar:entity="pound"
   string="\(Po"
   />
  <xsl:output-character
   character="&#x00a4;"
   unichar:name="CURRENCY SIGN"
   unichar:entity="curren"
   string="\(Cs"
   />
  <xsl:output-character
   character="&#x00a5;"
   unichar:name="YEN SIGN"
   unichar:entity="yen"
   string="\(Ye"
   />
  <xsl:output-character
   character="&#x00a6;"
   unichar:name="BROKEN BAR"
   unichar:entity="brvbar"
   string="\(bb"
   />
  <xsl:output-character
   character="&#x00a7;"
   unichar:name="SECTION SIGN"
   unichar:entity="sect"
   string="\(sc"
   />
  <xsl:output-character
   character="&#x00a8;"
   unichar:name="DIAERESIS"
   unichar:entity="Dot"
   string="\(ad"
   />
  <xsl:output-character
   character="&#x00a9;"
   unichar:name="COPYRIGHT SIGN"
   unichar:entity="copy"
   string="\(co"
   />
  <xsl:output-character
   character="&#x00aa;"
   unichar:name="FEMININE ORDINAL INDICATOR"
   unichar:entity="ordf"
   string="\(Of"
   />
  <xsl:output-character
   character="&#x00ab;"
   unichar:name="LEFT-POINTING DOUBLE ANGLE QUOTATION MARK"
   unichar:entity="laquo"
   string="\(Fo"
   />
  <xsl:output-character
   character="&#x00ac;"
   unichar:name="NOT SIGN"
   unichar:entity="not"
   string="\(no"
   />

  <doc:output-character character="&#x00ad;" xmlns="">
    <para>
      &groff_char; says: <quote>the soft hyphen control character
      (prints as itself).  groff never uses this character
      for output (thus it is omitted in the table below); 
      the input character 173 is mapped onto
      <markup>\%</markup>.</quote>
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x00ad;"
   unichar:name="SOFT HYPHEN"
   unichar:entity="shy"
   string="\%"
   />
   
  <xsl:output-character
   character="&#x00ae;"
   unichar:name="REGISTERED SIGN"
   unichar:entity="reg"
   string="\(rg"
   />
  <xsl:output-character
   character="&#x00af;"
   unichar:name="MACRON"
   unichar:entity="macr"
   string="\(a-"
   />
  <xsl:output-character
   character="&#x00b0;"
   unichar:name="DEGREE SIGN"
   unichar:entity="deg"
   string="\(de"
   />
  <xsl:output-character
   character="&#x00b1;"
   unichar:name="PLUS-MINUS SIGN"
   unichar:entity="plusmn"
   string="\(+-"
   />
  <xsl:output-character
   character="&#x00b2;"
   unichar:name="SUPERSCRIPT TWO"
   unichar:entity="sup2"
   string="\(S2"
   />
  <xsl:output-character
   character="&#x00b3;"
   unichar:name="SUPERSCRIPT THREE"
   unichar:entity="sup3"
   string="\(S3"
   />
  <xsl:output-character
   character="&#x00b4;"
   unichar:name="ACUTE ACCENT"
   unichar:entity="acute"
   string="\(aa"
   />
  <xsl:output-character
   character="&#x00b5;"
   unichar:name="MICRO SIGN"
   unichar:entity="micro"
   string="\(mc"
   />
  <xsl:output-character
   character="&#x00b6;"
   unichar:name="PILCROW SIGN"
   unichar:entity="para"
   string="\(ps"
   />

  <doc:output-character character="&#x00b7;" xmlns="">
    <para>
      According to &groff_char;, I think the escape string
      <markup>\(pc</markup> "periodcentered" could also be used for 
      middot; not sure which is better, but "md" mnemonic is a better 
      fit :-)
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x00b7;"
   unichar:name="MIDDLE DOT"
   unichar:entity="middot"
   string="\(md"
   />
   
  <xsl:output-character
   character="&#x00b8;"
   unichar:name="CEDILLA"
   unichar:entity="cedil"
   string="\(ac"
   />
  <xsl:output-character
   character="&#x00b9;"
   unichar:name="SUPERSCRIPT ONE"
   unichar:entity="sup1"
   string="\(S1"
   />
  <xsl:output-character
   character="&#x00ba;"
   unichar:name="MASCULINE ORDINAL INDICATOR"
   unichar:entity="ordm"
   string="\(Om"
   />
  <xsl:output-character
   character="&#x00bb;"
   unichar:name="RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK"
   unichar:entity="raquo"
   string="\(Fc"
   />
  <xsl:output-character
   character="&#x00bc;"
   unichar:name="VULGAR FRACTION ONE QUARTER"
   unichar:entity="frac14"
   string="\(14"
   />
  <xsl:output-character
   character="&#x00bd;"
   unichar:name="VULGAR FRACTION ONE HALF"
   unichar:entity="frac12"
   string="\(12"
   />
  <xsl:output-character
   character="&#x00be;"
   unichar:name="VULGAR FRACTION THREE QUARTERS"
   unichar:entity="frac34"
   string="\(34"
   />
  <xsl:output-character
   character="&#x00bf;"
   unichar:name="INVERTED QUESTION MARK"
   unichar:entity="iquest"
   string="\(r?"
   />
  <xsl:output-character
   character="&#x00c0;"
   unichar:name="LATIN CAPITAL LETTER A WITH GRAVE"
   unichar:entity="Agrave"
   string="\(`A"
   />
  <xsl:output-character
   character="&#x00c1;"
   unichar:name="LATIN CAPITAL LETTER A WITH ACUTE"
   unichar:entity="Aacute"
   string="\('A"
   />
  <xsl:output-character
   character="&#x00c2;"
   unichar:name="LATIN CAPITAL LETTER A WITH CIRCUMFLEX"
   unichar:entity="Acirc"
   string="\(^A"
   />
  <xsl:output-character
   character="&#x00c3;"
   unichar:name="LATIN CAPITAL LETTER A WITH TILDE"
   unichar:entity="Atilde"
   string="\(~A"
   />
  <xsl:output-character
   character="&#x00c4;"
   unichar:name="LATIN CAPITAL LETTER A WITH DIAERESIS"
   unichar:entity="Auml"
   string="\(:A"
   />
  <xsl:output-character
   character="&#x00c5;"
   unichar:name="LATIN CAPITAL LETTER A WITH RING ABOVE"
   unichar:entity="Aring"
   string="\(oA"
   />
  <xsl:output-character
   character="&#x00c6;"
   unichar:name="LATIN CAPITAL LETTER AE"
   unichar:entity="AElig"
   string="\(AE"
   />
  <xsl:output-character
   character="&#x00c7;"
   unichar:name="LATIN CAPITAL LETTER C WITH CEDILLA"
   unichar:entity="Ccedil"
   string="\(,C"
   />
  <xsl:output-character
   character="&#x00c8;"
   unichar:name="LATIN CAPITAL LETTER E WITH GRAVE"
   unichar:entity="Egrave"
   string="\(`E"
   />
  <xsl:output-character
   character="&#x00c9;"
   unichar:name="LATIN CAPITAL LETTER E WITH ACUTE"
   unichar:entity="Eacute"
   string="\('E"
   />
  <xsl:output-character
   character="&#x00ca;"
   unichar:name="LATIN CAPITAL LETTER E WITH CIRCUMFLEX"
   unichar:entity="Ecirc"
   string="\(^E"
   />
  <xsl:output-character
   character="&#x00cb;"
   unichar:name="LATIN CAPITAL LETTER E WITH DIAERESIS"
   unichar:entity="Euml"
   string="\(:E"
   />
  <xsl:output-character
   character="&#x00cc;"
   unichar:name="LATIN CAPITAL LETTER I WITH GRAVE"
   unichar:entity="Igrave"
   string="\(`I"
   />
  <xsl:output-character
   character="&#x00cd;"
   unichar:name="LATIN CAPITAL LETTER I WITH ACUTE"
   unichar:entity="Iacute"
   string="\('I"
   />
  <xsl:output-character
   character="&#x00ce;"
   unichar:name="LATIN CAPITAL LETTER I WITH CIRCUMFLEX"
   unichar:entity="Icirc"
   string="\(^I"
   />
  <xsl:output-character
   character="&#x00cf;"
   unichar:name="LATIN CAPITAL LETTER I WITH DIAERESIS"
   unichar:entity="Iuml"
   string="\(:I"
   />
  <xsl:output-character
   character="&#x00d0;"
   unichar:name="LATIN CAPITAL LETTER ETH"
   unichar:entity="ETH"
   string="\(-D"
   />
  <xsl:output-character
   character="&#x00d1;"
   unichar:name="LATIN CAPITAL LETTER N WITH TILDE"
   unichar:entity="Ntilde"
   string="\(~N"
   />
  <xsl:output-character
   character="&#x00d2;"
   unichar:name="LATIN CAPITAL LETTER O WITH GRAVE"
   unichar:entity="Ograve"
   string="\(`O"
   />
  <xsl:output-character
   character="&#x00d3;"
   unichar:name="LATIN CAPITAL LETTER O WITH ACUTE"
   unichar:entity="Oacute"
   string="\('O"
   />
  <xsl:output-character
   character="&#x00d4;"
   unichar:name="LATIN CAPITAL LETTER O WITH CIRCUMFLEX"
   unichar:entity="Ocirc"
   string="\(^O"
   />
  <xsl:output-character
   character="&#x00d5;"
   unichar:name="LATIN CAPITAL LETTER O WITH TILDE"
   unichar:entity="Otilde"
   string="\(~O"
   />
  <xsl:output-character
   character="&#x00d6;"
   unichar:name="LATIN CAPITAL LETTER O WITH DIAERESIS"
   unichar:entity="Ouml"
   string="\(:O"
   />
  <xsl:output-character
   character="&#x00d7;"
   unichar:name="MULTIPLICATION SIGN"
   unichar:entity="times"
   string="\(mu"
   />
  <xsl:output-character
   character="&#x00d8;"
   unichar:name="LATIN CAPITAL LETTER O WITH STROKE"
   unichar:entity="Oslash"
   string="\(/O"
   />
  <xsl:output-character
   character="&#x00d9;"
   unichar:name="LATIN CAPITAL LETTER U WITH GRAVE"
   unichar:entity="Ugrave"
   string="\(`U"
   />
  <xsl:output-character
   character="&#x00da;"
   unichar:name="LATIN CAPITAL LETTER U WITH ACUTE"
   unichar:entity="Uacute"
   string="\('U"
   />
  <xsl:output-character
   character="&#x00db;"
   unichar:name="LATIN CAPITAL LETTER U WITH CIRCUMFLEX"
   unichar:entity="Ucirc"
   string="\(^U"
   />
  <xsl:output-character
   character="&#x00dc;"
   unichar:name="LATIN CAPITAL LETTER U WITH DIAERESIS"
   unichar:entity="Uuml"
   string="\(:U"
   />
  <xsl:output-character
   character="&#x00dd;"
   unichar:name="LATIN CAPITAL LETTER Y WITH ACUTE"
   unichar:entity="Yacute"
   string="\('Y"
   />
  <xsl:output-character
   character="&#x00de;"
   unichar:name="LATIN CAPITAL LETTER THORN"
   unichar:entity="THORN"
   string="\(TP"
   />
  <xsl:output-character
   character="&#x00df;"
   unichar:name="LATIN SMALL LETTER SHARP S"
   unichar:entity="szlig"
   string="\(ss"
   />
  <xsl:output-character
   character="&#x00e0;"
   unichar:name="LATIN SMALL LETTER A WITH GRAVE"
   unichar:entity="agrave"
   string="\(`a"
   />
  <xsl:output-character
   character="&#x00e1;"
   unichar:name="LATIN SMALL LETTER A WITH ACUTE"
   unichar:entity="aacute"
   string="\('a"
   />
  <xsl:output-character
   character="&#x00e2;"
   unichar:name="LATIN SMALL LETTER A WITH CIRCUMFLEX"
   unichar:entity="acirc"
   string="\(^a"
   />
  <xsl:output-character
   character="&#x00e3;"
   unichar:name="LATIN SMALL LETTER A WITH TILDE"
   unichar:entity="atilde"
   string="\(~a"
   />
  <xsl:output-character
   character="&#x00e4;"
   unichar:name="LATIN SMALL LETTER A WITH DIAERESIS"
   unichar:entity="auml"
   string="\(:a"
   />
  <xsl:output-character
   character="&#x00e5;"
   unichar:name="LATIN SMALL LETTER A WITH RING ABOVE"
   unichar:entity="aring"
   string="\(oa"
   />
  <xsl:output-character
   character="&#x00e6;"
   unichar:name="LATIN SMALL LETTER AE"
   unichar:entity="aelig"
   string="\(ae"
   />
  <xsl:output-character
   character="&#x00e7;"
   unichar:name="LATIN SMALL LETTER C WITH CEDILLA"
   unichar:entity="ccedil"
   string="\(,c"
   />
  <xsl:output-character
   character="&#x00e8;"
   unichar:name="LATIN SMALL LETTER E WITH GRAVE"
   unichar:entity="egrave"
   string="\(`e"
   />
  <xsl:output-character
   character="&#x00e9;"
   unichar:name="LATIN SMALL LETTER E WITH ACUTE"
   unichar:entity="eacute"
   string="\('e"
   />
  <xsl:output-character
   character="&#x00ea;"
   unichar:name="LATIN SMALL LETTER E WITH CIRCUMFLEX"
   unichar:entity="ecirc"
   string="\(^e"
   />
  <xsl:output-character
   character="&#x00eb;"
   unichar:name="LATIN SMALL LETTER E WITH DIAERESIS"
   unichar:entity="euml"
   string="\(:e"
   />
  <xsl:output-character
   character="&#x00ec;"
   unichar:name="LATIN SMALL LETTER I WITH GRAVE"
   unichar:entity="igrave"
   string="\(`i"
   />
  <xsl:output-character
   character="&#x00ed;"
   unichar:name="LATIN SMALL LETTER I WITH ACUTE"
   unichar:entity="iacute"
   string="\('i"
   />
  <xsl:output-character
   character="&#x00ee;"
   unichar:name="LATIN SMALL LETTER I WITH CIRCUMFLEX"
   unichar:entity="icirc"
   string="\(^i"
   />
  <xsl:output-character
   character="&#x00ef;"
   unichar:name="LATIN SMALL LETTER I WITH DIAERESIS"
   unichar:entity="iuml"
   string="\(:i"
   />
  <xsl:output-character
   character="&#x00f0;"
   unichar:name="LATIN SMALL LETTER ETH"
   unichar:entity="eth"
   string="\(Sd"
   />
  <xsl:output-character
   character="&#x00f1;"
   unichar:name="LATIN SMALL LETTER N WITH TILDE"
   unichar:entity="ntilde"
   string="\(~n"
   />
  <xsl:output-character
   character="&#x00f2;"
   unichar:name="LATIN SMALL LETTER O WITH GRAVE"
   unichar:entity="ograve"
   string="\(`o"
   />
  <xsl:output-character
   character="&#x00f3;"
   unichar:name="LATIN SMALL LETTER O WITH ACUTE"
   unichar:entity="oacute"
   string="\('o"
   />
  <xsl:output-character
   character="&#x00f4;"
   unichar:name="LATIN SMALL LETTER O WITH CIRCUMFLEX"
   unichar:entity="ocirc"
   string="\(^o"
   />
  <xsl:output-character
   character="&#x00f5;"
   unichar:name="LATIN SMALL LETTER O WITH TILDE"
   unichar:entity="otilde"
   string="\(~o"
   />
  <xsl:output-character
   character="&#x00f6;"
   unichar:name="LATIN SMALL LETTER O WITH DIAERESIS"
   unichar:entity="ouml"
   string="\(:o"
   />
  <xsl:output-character
   character="&#x00f7;"
   unichar:name="DIVISION SIGN"
   unichar:entity="divide"
   string="\(di"
   />
  <xsl:output-character
   character="&#x00f8;"
   unichar:name="LATIN SMALL LETTER O WITH STROKE"
   unichar:entity="oslash"
   string="\(/o"
   />
  <xsl:output-character
   character="&#x00f9;"
   unichar:name="LATIN SMALL LETTER U WITH GRAVE"
   unichar:entity="ugrave"
   string="\(`u"
   />
  <xsl:output-character
   character="&#x00fa;"
   unichar:name="LATIN SMALL LETTER U WITH ACUTE"
   unichar:entity="uacute"
   string="\('u"
   />
  <xsl:output-character
   character="&#x00fb;"
   unichar:name="LATIN SMALL LETTER U WITH CIRCUMFLEX"
   unichar:entity="ucirc"
   string="\(^u"
   />
  <xsl:output-character
   character="&#x00fc;"
   unichar:name="LATIN SMALL LETTER U WITH DIAERESIS"
   unichar:entity="uuml"
   string="\(:u"
   />
  <xsl:output-character
   character="&#x00fd;"
   unichar:name="LATIN SMALL LETTER Y WITH ACUTE"
   unichar:entity="yacute"
   string="\('y"
   />
  <xsl:output-character
   character="&#x00fe;"
   unichar:name="LATIN SMALL LETTER THORN"
   unichar:entity="thorn"
   string="\(Tp"
   />
  <xsl:output-character
   character="&#x00ff;"
   unichar:name="LATIN SMALL LETTER Y WITH DIAERESIS"
   unichar:entity="yuml"
   string="\(:y"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="latin-ext-A" xmlns=""
  from="0x0100" to="0x017F">
  <title>Latin Extended-A</title>
  <para>
    Most characters here do not have any (direct) roff equivalents.
    Those that do have been mapped already.
  </para>
</doc:character-map>

<xsl:character-map name="latin-ext-A">
  <xsl:output-character
   character="&#x0131;"
   unichar:name="LATIN SMALL LETTER DOTLESS I"
   unichar:entity="inodot"
   string="\(.i"
   />
  <xsl:output-character
   character="&#x0132;"
   unichar:name="LATIN CAPITAL LIGATURE IJ"
   unichar:entity="IJlig"
   string="\(IJ"
   />
  <xsl:output-character
   character="&#x0133;"
   unichar:name="LATIN SMALL LIGATURE IJ"
   unichar:entity="ijlig"
   string="\(ij"
   />
   
  <xsl:output-character
   character="&#x0141;"
   unichar:name="LATIN CAPITAL LETTER L WITH STROKE"
   unichar:entity="Lstrok"
   string="\(/L"
   />
  <xsl:output-character
   character="&#x0142;"
   unichar:name="LATIN SMALL LETTER L WITH STROKE"
   unichar:entity="lstrok"
   string="\(/l"
   />
   
  <xsl:output-character
   character="&#x0152;"
   unichar:name="LATIN CAPITAL LIGATURE OE"
   unichar:entity="OElig"
   string="\(OE"
   />
  <xsl:output-character
   character="&#x0153;"
   unichar:name="LATIN SMALL LIGATURE OE"
   unichar:entity="oelig"
   string="\(oe"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="latin-ext-B" xmlns=""
  from="0x0180" to="0x023F">
  <title>Latin Extended-B</title>
  <para>
    Most characters here do not have any (direct) roff equivalents.
    Those that do have been mapped already.
  </para>
</doc:character-map>

<xsl:character-map name="latin-ext-B">
  <xsl:output-character
   character="&#x0192;"
   unichar:name="LATIN SMALL LETTER F WITH HOOK"
   unichar:entity="fnof"
   string="\(Fn"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="spacing-modifiers" xmlns=""
  from="0x02B0" to="0x02EE">
  <title>Spacing Modifier Letters</title>
</doc:character-map>

<xsl:character-map name="spacing-modifiers">
  <xsl:output-character
   character="&#x02c6;"
   unichar:name="MODIFIER LETTER CIRCUMFLEX ACCENT"
   unichar:entity="circ"
   string="\(a^"
   />
  <xsl:output-character
   character="&#x02c7;"
   unichar:name="CARON"
   unichar:entity="caron"
   string="\(ac"
   />
  <xsl:output-character
   character="&#x02c9;"
   unichar:name="MODIFIER LETTER MACRON"
   string="\(a-"
   />
  <xsl:output-character
   character="&#x02d8;"
   unichar:name="BREVE"
   unichar:entity="breve"
   string="\(ab"
   />
  <!-- there does not seem to by any roff equivalent for "dot above"
  <xsl:output-character
   character="&#x02d9;"
   unichar:name="DOT ABOVE"
   unichar:entity="dot"
   />
  -->
  <xsl:output-character
   character="&#x02da;"
   unichar:name="RING ABOVE"
   unichar:entity="ring"
   string="\(ao"
   />
  <xsl:output-character
   character="&#x02db;"
   unichar:name="OGONEK"
   unichar:entity="ogon"
   string="\(ho"
   />

  <doc:output-character character="&#x02dd;" xmlns="">
    <para>
      &groff_char; calls this a <quote>Hungarian umlaut</quote>.
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x02dd;"
   unichar:name="DOUBLE ACUTE ACCENT"
   unichar:entity="dblac"
   string='\(a"'
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="greek-coptic" xmlns=""
  from="0x0370" to="0x03FF">
  <title>Greek and Coptic</title>
</doc:character-map>

<xsl:character-map name="greek-coptic">
  <xsl:output-character
   character="&#x0391;"
   unichar:name="GREEK CAPITAL LETTER ALPHA"
   unichar:entity="Agr"
   string="\(*A)"
   />
  <xsl:output-character
   character="&#x0392;"
   unichar:name="GREEK CAPITAL LETTER BETA"
   unichar:entity="Bgr"
   string="\(*B"
   />
  <xsl:output-character
   character="&#x0393;"
   unichar:name="GREEK CAPITAL LETTER GAMMA"
   unichar:entity="Gamma"
   string="\(*G"
   />
  <xsl:output-character
   character="&#x0394;"
   unichar:name="GREEK CAPITAL LETTER DELTA"
   unichar:entity="Delta"
   string="\(*D"
   />
  <xsl:output-character
   character="&#x0395;"
   unichar:name="GREEK CAPITAL LETTER EPSILON"
   unichar:entity="Egr"
   string="\(*E"
   />
  <xsl:output-character
   character="&#x0396;"
   unichar:name="GREEK CAPITAL LETTER ZETA"
   unichar:entity="Zgr"
   string="\(*Z"
   />
  <xsl:output-character
   character="&#x0397;"
   unichar:name="GREEK CAPITAL LETTER ETA"
   unichar:entity="EEgr"
   string="\(*Y"
   />
  <xsl:output-character
   character="&#x0398;"
   unichar:name="GREEK CAPITAL LETTER THETA"
   unichar:entity="THgr"
   string="\(*H"
   />
  <xsl:output-character
   character="&#x0399;"
   unichar:name="GREEK CAPITAL LETTER IOTA"
   unichar:entity="Igr"
   string="\(*I"
   />
  <xsl:output-character
   character="&#x039a;"
   unichar:name="GREEK CAPITAL LETTER KAPPA"
   unichar:entity="Kgr"
   string="\(*K"
   />
  <xsl:output-character
   character="&#x039b;"
   unichar:name="GREEK CAPITAL LETTER LAMDA"
   unichar:entity="Lambda"
   string="\(*L"
   />
  <xsl:output-character
   character="&#x039c;"
   unichar:name="GREEK CAPITAL LETTER MU"
   unichar:entity="Mgr"
   string="\(*M"
   />
  <xsl:output-character
   character="&#x039d;"
   unichar:name="GREEK CAPITAL LETTER NU"
   unichar:entity="Ngr"
   string="\(*N"
   />
  <xsl:output-character
   character="&#x039e;"
   unichar:name="GREEK CAPITAL LETTER XI"
   unichar:entity="Xgr"
   string="\(*C"
   />
  <xsl:output-character
   character="&#x039f;"
   unichar:name="GREEK CAPITAL LETTER OMICRON"
   unichar:entity="Ogr"
   string="\(*O"
   />
  <xsl:output-character
   character="&#x03a0;"
   unichar:name="GREEK CAPITAL LETTER PI"
   unichar:entity="Pgr"
   string="\(*P"
   />
  <xsl:output-character
   character="&#x03a1;"
   unichar:name="GREEK CAPITAL LETTER RHO"
   unichar:entity="Rgr"
   string="\(*R"
   />
  <xsl:output-character
   character="&#x03a3;"
   unichar:name="GREEK CAPITAL LETTER SIGMA"
   unichar:entity="Sgr"
   string="\(*S"
   />
  <xsl:output-character
   character="&#x03a4;"
   unichar:name="GREEK CAPITAL LETTER TAU"
   unichar:entity="Tgr"
   string="\(*T"
   />
  <xsl:output-character
   character="&#x03a5;"
   unichar:name="GREEK CAPITAL LETTER UPSILON"
   unichar:entity="Ugr"
   string="\(*U"
   />
  <xsl:output-character
   character="&#x03a6;"
   unichar:name="GREEK CAPITAL LETTER PHI"
   unichar:entity="PHgr"
   string="\(*F"
   />
  <xsl:output-character
   character="&#x03a7;"
   unichar:name="GREEK CAPITAL LETTER CHI"
   unichar:entity="KHgr"
   string="\(*X"
   />
  <xsl:output-character
   character="&#x03a8;"
   unichar:name="GREEK CAPITAL LETTER PSI"
   unichar:entity="PSgr"
   string="\(*Q"
   />
  <xsl:output-character
   character="&#x03a9;"
   unichar:name="GREEK CAPITAL LETTER OMEGA"
   unichar:entity="OHgr"
   string="\(*W"
   />
  <xsl:output-character
   character="&#x03aa;"
   unichar:name="GREEK CAPITAL LETTER IOTA WITH DIALYTIKA"
   unichar:entity="Idigr"
   string="\(*I"
   />
  <xsl:output-character
   character="&#x03ab;"
   unichar:name="GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA"
   unichar:entity="Udigr"
   string="\(*U"
   />
  <xsl:output-character
   character="&#x03ac;"
   unichar:name="GREEK SMALL LETTER ALPHA WITH TONOS"
   unichar:entity="aacgr"
   string="\(*a"
   />
  <xsl:output-character
   character="&#x03ad;"
   unichar:name="GREEK SMALL LETTER EPSILON WITH TONOS"
   unichar:entity="eacgr"
   string="\(*e"
   />
  <xsl:output-character
   character="&#x03ae;"
   unichar:name="GREEK SMALL LETTER ETA WITH TONOS"
   unichar:entity="eeacgr"
   string="\(*y"
   />
  <xsl:output-character
   character="&#x03af;"
   unichar:name="GREEK SMALL LETTER IOTA WITH TONOS"
   unichar:entity="iacgr"
   string="\(*i"
   />
  <xsl:output-character
   character="&#x03b0;"
   unichar:name="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS"
   unichar:entity="udiagr"
   string="\(*u"
   />
  <xsl:output-character
   character="&#x03b1;"
   unichar:name="GREEK SMALL LETTER ALPHA"
   unichar:entity="agr"
   string="\(*a"
   />
  <xsl:output-character
   character="&#x03b2;"
   unichar:name="GREEK SMALL LETTER BETA"
   unichar:entity="beta"
   string="\(*b"
   />
  <xsl:output-character
   character="&#x03b3;"
   unichar:name="GREEK SMALL LETTER GAMMA"
   unichar:entity="gamma"
   string="\(*g"
   />
  <xsl:output-character
   character="&#x03b4;"
   unichar:name="GREEK SMALL LETTER DELTA"
   unichar:entity="delta"
   string="\(*d"
   />
  <xsl:output-character
   character="&#x03b5;"
   unichar:name="GREEK SMALL LETTER EPSILON"
   unichar:entity="epsi"
   string="\(*e"
   />
  <xsl:output-character
   character="&#x03b6;"
   unichar:name="GREEK SMALL LETTER ZETA"
   unichar:entity="zeta"
   string="\(*z"
   />
  <xsl:output-character
   character="&#x03b7;"
   unichar:name="GREEK SMALL LETTER ETA"
   unichar:entity="eegr"
   string="\(*y"
   />
  <xsl:output-character
   character="&#x03b8;"
   unichar:name="GREEK SMALL LETTER THETA"
   unichar:entity="thetas"
   string="\(*h"
   />
  <xsl:output-character
   character="&#x03b9;"
   unichar:name="GREEK SMALL LETTER IOTA"
   unichar:entity="igr"
   string="\(*i"
   />
  <xsl:output-character
   character="&#x03ba;"
   unichar:name="GREEK SMALL LETTER KAPPA"
   unichar:entity="kappa"
   string="\(*k"
   />
  <xsl:output-character
   character="&#x03bb;"
   unichar:name="GREEK SMALL LETTER LAMDA"
   unichar:entity="lambda"
   string="\(*l"
   />
  <xsl:output-character
   character="&#x03bc;"
   unichar:name="GREEK SMALL LETTER MU"
   unichar:entity="mgr"
   string="\(*m"
   />
  <xsl:output-character
   character="&#x03bd;"
   unichar:name="GREEK SMALL LETTER NU"
   unichar:entity="ngr"
   string="\(*n"
   />
  <xsl:output-character
   character="&#x03be;"
   unichar:name="GREEK SMALL LETTER XI"
   unichar:entity="xgr"
   string="\(*c"
   />
  <xsl:output-character
   character="&#x03bf;"
   unichar:name="GREEK SMALL LETTER OMICRON"
   unichar:entity="ogr"
   string="\(*o"
   />
  <xsl:output-character
   character="&#x03c0;"
   unichar:name="GREEK SMALL LETTER PI"
   unichar:entity="pgr"
   string="\(*p"
   />
  <xsl:output-character
   character="&#x03c1;"
   unichar:name="GREEK SMALL LETTER RHO"
   unichar:entity="rgr"
   string="\(*r"
   />
  <xsl:output-character
   character="&#x03c2;"
   unichar:name="GREEK SMALL LETTER FINAL SIGMA"
   unichar:entity="sfgr"
   string="\(ts"
   />
  <xsl:output-character
   character="&#x03c3;"
   unichar:name="GREEK SMALL LETTER SIGMA"
   unichar:entity="sgr"
   string="\(*s"
   />
  <xsl:output-character
   character="&#x03c4;"
   unichar:name="GREEK SMALL LETTER TAU"
   unichar:entity="tau"
   string="\(*t"
   />
  <xsl:output-character
   character="&#x03c5;"
   unichar:name="GREEK SMALL LETTER UPSILON"
   unichar:entity="ugr"
   string="\(*u"
   />
  <xsl:output-character
   character="&#x03c6;"
   unichar:name="GREEK SMALL LETTER PHI"
   unichar:entity="phgr"
   string="\(*f"
   />
  <xsl:output-character
   character="&#x03c7;"
   unichar:name="GREEK SMALL LETTER CHI"
   unichar:entity="chi"
   string="\(*x"
   />
  <xsl:output-character
   character="&#x03c8;"
   unichar:name="GREEK SMALL LETTER PSI"
   unichar:entity="psgr"
   string="\(*q"
   />
  <xsl:output-character
   character="&#x03c9;"
   unichar:name="GREEK SMALL LETTER OMEGA"
   unichar:entity="ohgr"
   string="\(*w"
   />
  <xsl:output-character
   character="&#x03ca;"
   unichar:name="GREEK SMALL LETTER IOTA WITH DIALYTIKA"
   unichar:entity="idigr"
   string="\(*i"
   />
  <xsl:output-character
   character="&#x03cb;"
   unichar:name="GREEK SMALL LETTER UPSILON WITH DIALYTIKA"
   unichar:entity="udigr"
   string="\(*u"
   />
  <xsl:output-character
   character="&#x03cc;"
   unichar:name="GREEK SMALL LETTER OMICRON WITH TONOS"
   unichar:entity="oacgr"
   string="\(*o"
   />
  <xsl:output-character
   character="&#x03cd;"
   unichar:name="GREEK SMALL LETTER UPSILON WITH TONOS"
   unichar:entity="uacgr"
   string="\(*u"
   />
  <xsl:output-character
   character="&#x03ce;"
   unichar:name="GREEK SMALL LETTER OMEGA WITH TONOS"
   unichar:entity="ohacgr"
   string="\(*w"
   />
  <xsl:output-character
   character="&#x03d0;"
   unichar:name="GREEK BETA SYMBOL"
   string="\(*B"
   />
  <xsl:output-character
   character="&#x03d1;"
   unichar:name="GREEK THETA SYMBOL"
   unichar:entity="thetav"
   string="\(+h"
   />
  <xsl:output-character
   character="&#x03d2;"
   unichar:name="GREEK UPSILON WITH HOOK SYMBOL"
   unichar:entity="Upsi"
   string="\(*U"
   />
  <xsl:output-character
   character="&#x03d3;"
   unichar:name="GREEK UPSILON WITH ACUTE AND HOOK SYMBOL"
   string="\(*U"
   />
  <xsl:output-character
   character="&#x03d4;"
   unichar:name="GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL"
   string="\(*U"
   />
  <xsl:output-character
   character="&#x03d5;"
   unichar:name="GREEK PHI SYMBOL"
   unichar:entity="phis"
   string="\(+f"
   />
  <xsl:output-character
   character="&#x03d6;"
   unichar:name="GREEK PI SYMBOL"
   unichar:entity="piv"
   string="\(+p"
   />
  <!-- no mappings for remaining chars x03d7 to x03ef -->
  <xsl:output-character
   character="&#x03f0;"
   unichar:name="GREEK KAPPA SYMBOL"
   unichar:entity="kappav"
   string="(*k"
   />
  <xsl:output-character
   character="&#x03f1;"
   unichar:name="GREEK RHO SYMBOL"
   unichar:entity="rhov"
   string="\(*r"
   />
  <xsl:output-character
   character="&#x03f2;"
   unichar:name="GREEK LUNATE SIGMA SYMBOL"
   string="\(*s"
   />
  <xsl:output-character
   character="&#x03f4;"
   unichar:name="GREEK CAPITAL THETA SYMBOL"
   string="\(*H"
   />
  <xsl:output-character
   character="&#x03f5;"
   unichar:name="GREEK LUNATE EPSILON SYMBOL"
   string="\(*e"
   />
  <xsl:output-character
   character="&#x03f6;"
   unichar:name="GREEK REVERSED LUNATE EPSILON SYMBOL"
   unichar:entity="bepsi"
   string="\(*e"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="punct" xmlns=""
  from="0x2000" to="0x206F">
  <title>General Punctuation</title>
</doc:character-map>

<xsl:character-map name="punct">

  <doc:output-character character="&#x2000;" xmlns="">
    <para>
      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, <markup>\0</markup>), 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, 
      <markup>\0\0</markup>).
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x2000;"
   unichar:name="EN QUAD"
   string="\0"
   />
  <xsl:output-character
   character="&#x2001;"
   unichar:name="EM QUAD"
   string="\0\0"
   />
  <xsl:output-character
   character="&#x2002;"
   unichar:name="EN SPACE"
   unichar:entity="ensp"
   string="\0"
   />
  <xsl:output-character
   character="&#x2003;"
   unichar:name="EM SPACE"
   unichar:entity="emsp"
   string="\0\0"
   />

  <doc:output-character character="&#x2004;" xmlns="">
    <para>Roughly same width as a normal space.</para>
  </doc:output-character>
  <xsl:output-character
   character="&#x2004;"
   unichar:name="THREE-PER-EM SPACE"
   unichar:entity="emsp13"
   string=" "
   />

  <doc:output-character character="&#x2005;" xmlns="">
    <para>Roughly same width as a normal space.</para>
  </doc:output-character>
  <xsl:output-character
   character="&#x2005;"
   unichar:name="FOUR-PER-EM SPACE"
   unichar:entity="emsp14"
   string=" "
   />
   
  <doc:output-character character="&#x2006;" xmlns="">
    <para>Roughly same width as a normal space.</para>
  </doc:output-character>
  <xsl:output-character
   character="&#x2006;"
   unichar:name="SIX-PER-EM SPACE"
   string=" "
   />

  <doc:output-character character="&#x2007;" xmlns="">
    <para>Same as roff “digit” space.</para>
  </doc:output-character>
  <xsl:output-character
   character="&#x2007;"
   unichar:name="FIGURE SPACE"
   unichar:entity="numsp"
   string="\0"
   />

  <doc:output-character character="&#x2008;" xmlns="">
    <para>
      Punctuation space in most fonts is actually closer to a normal
      space than it is to a thin space.
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x2008;"
   unichar:name="PUNCTUATION SPACE"
   unichar:entity="puncsp"
   string=" "
   />

  <doc:output-character character="&#x2009;" xmlns="">
    <para>
      Not sure how best to deal with thin space, because the
      roff thin space, <markup>\^</markup>, 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 <markup>\(\^</markup>
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x2009;"
   unichar:name="THIN SPACE"
   unichar:entity="thinsp"
   string=" "
   />
   
  <doc:output-character character="&#x200a;" xmlns="">
    <para>
      I don't think there’s a standard definition of what a hair
      space is; some guides just say it's <quote>less than 1/5 of an
      em</quote> or that it’s <quote>narrower than a thin space</quote>;
      seems like in practice, it's <emphasis>a lot</emphasis>
      narrower than a thin space, to the point where
      it’s close to being a non-space, so here it is substituted with
      the roff equivalent of a zero-width joiner.
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x200a;"
   unichar:name="HAIR SPACE"
   unichar:entity="hairsp"
   string="\&amp;"
   />

  <doc:output-character character="&#x200b;" xmlns="">
    <para>
      Map to roff <quote>zero-width break point</quote>
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x200b;"
   unichar:name="ZERO WIDTH SPACE"
   string="\:"
   />

  <doc:output-character character="&#x200c;" xmlns="">
    <para>
      Map to roff <quote>zero-width break point</quote>
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x200c;"
   unichar:name="ZERO WIDTH NON-JOINER"
   string="\:"
   />

  <doc:output-character character="&#x200d;" xmlns="">
    <para>
       &groff; docs seem ambiguous about whether <markup>\&amp;</markup>
       is a joiner and prevents breaks, but, based on testing, 
       seems like it does.
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x200d;"
   unichar:name="ZERO WIDTH JOINER"
   string="\&amp;"
   />
  <!-- non-visible 
       <xsl:output-character
       character="&#x200e;"
       unichar:name="LEFT-TO-RIGHT MARK"
       />
       <xsl:output-character
       character="&#x200f;"
       unichar:name="RIGHT-TO-LEFT MARK"
       />
  -->

  <!-- .................................................... -->
  <!-- next, hyphens and various dashes, bars, underscores  -->
  <xsl:output-character
   character="&#x2010;"
   unichar:name="HYPHEN"
   unichar:entity="hyphen"
   string="\(hy"
   />
  <xsl:output-character
   character="&#x2011;"
   unichar:name="NON-BREAKING HYPHEN"
   string="\&amp;-\&amp;"
   />
  <!-- roughly same width as en dash -->
  <xsl:output-character
   character="&#x2012;"
   unichar:name="FIGURE DASH"
   string="\(en"
   />
  <xsl:output-character
   character="&#x2013;"
   unichar:name="EN DASH"
   unichar:entity="ndash"
   string="\(en"
   />
  <xsl:output-character
   character="&#x2014;"
   unichar:name="EM DASH"
   unichar:entity="mdash"
   string="\(em"
   />
  <!-- seems roughly same width as em dash -->
  <xsl:output-character
   character="&#x2015;"
   unichar:name="HORIZONTAL BAR"
   unichar:entity="horbar"
   string="\(em"
   />
  <xsl:output-character
   character="&#x2016;"
   unichar:name="DOUBLE VERTICAL LINE"
   unichar:entity="Verbar"
   string="\(bv\(bv"
   />
  <!-- no double-underscore in roff; so just make it a single
       underscore -->
  <xsl:output-character
   character="&#x2017;"
   unichar:name="DOUBLE LOW LINE"
   string="_"
   />

  <!-- .................................................... -->
  <!-- various quotation marks -->
  <xsl:output-character
   character="&#x2018;"
   unichar:name="LEFT SINGLE QUOTATION MARK"
   unichar:entity="lsquo"
   string="\(oq"
   />
  <xsl:output-character
   character="&#x2019;"
   unichar:name="RIGHT SINGLE QUOTATION MARK"
   unichar:entity="rsquo"
   string="\(cq"
   />
  <xsl:output-character
   character="&#x201a;"
   unichar:name="SINGLE LOW-9 QUOTATION MARK"
   unichar:entity="lsquor"
   string="\(bq"
   />
  <!-- no roff equiv; treat same as lsquo -->
  <xsl:output-character
   character="&#x201b;"
   unichar:name="SINGLE HIGH-REVERSED-9 QUOTATION MARK"
   string="\(oq"
   />
  <xsl:output-character
   character="&#x201c;"
   unichar:name="LEFT DOUBLE QUOTATION MARK"
   unichar:entity="ldquo"
   string="\(lq"
   />
  <xsl:output-character
   character="&#x201d;"
   unichar:name="RIGHT DOUBLE QUOTATION MARK"
   unichar:entity="rdquo"
   string="\(rq"
   />
  <xsl:output-character
   character="&#x201e;"
   unichar:name="DOUBLE LOW-9 QUOTATION MARK"
   unichar:entity="ldquor"
   string="\(Bq"
   />
  <!-- no roff equiv; treat same as rdquo -->
  <xsl:output-character
   character="&#x201f;"
   unichar:name="DOUBLE HIGH-REVERSED-9 QUOTATION MARK"
   string="\(rq"
   />

  <!-- .................................................... -->
  <!-- various symbols -->
  <xsl:output-character
   character="&#x2020;"
   unichar:name="DAGGER"
   unichar:entity="dagger"
   string="\(dg"
   />
  <xsl:output-character
   character="&#x2021;"
   unichar:name="DOUBLE DAGGER"
   unichar:entity="Dagger"
   string="\(dd"
   />
  <xsl:output-character
   character="&#x2022;"
   unichar:name="BULLET"
   unichar:entity="bull"
   string="\(bu"
   />
  <!-- no roff equiv -->
  <xsl:output-character
   character="&#x2023;"
   unichar:name="TRIANGULAR BULLET"
   string=">\&amp;"
   />
  <!-- no roff equiv -->
  <xsl:output-character
   character="&#x2024;"
   unichar:name="ONE DOT LEADER"
   string="\&amp;."
   />
  <!-- no roff equiv -->
  <xsl:output-character
   character="&#x2025;"
   unichar:name="TWO DOT LEADER"
   unichar:entity="nldr"
   string="\&amp;.."
   />
  <!-- no roff equiv -->
  <xsl:output-character
   character="&#x2026;"
   unichar:name="HORIZONTAL ELLIPSIS"
   unichar:entity="hellip"
   string="\&amp;..."
   />
  <xsl:output-character
   character="&#x2027;"
   unichar:name="HYPHENATION POINT"
   string="\%"
   />
  <!-- Begin x2028 to x202e - no idea what to do with these
       <xsl:output-character
       character="&#x2028;"
       unichar:name="LINE SEPARATOR"
       />
       <xsl:output-character
       character="&#x2029;"
       unichar:name="PARAGRAPH SEPARATOR"
       />
       <xsl:output-character
       character="&#x202a;"
       unichar:name="LEFT-TO-RIGHT EMBEDDING"
       />
       <xsl:output-character
       character="&#x202b;"
       unichar:name="RIGHT-TO-LEFT EMBEDDING"
       />
       <xsl:output-character
       character="&#x202c;"
       unichar:name="POP DIRECTIONAL FORMATTING"
       />
       <xsl:output-character
       character="&#x202d;"
       unichar:name="LEFT-TO-RIGHT OVERRIDE"
       />
       <xsl:output-character
       character="&#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
   character="&#x202f;"
   unichar:name="NARROW NO-BREAK SPACE"
   string="\ "
   />
  <xsl:output-character
   character="&#x2030;"
   unichar:name="PER MILLE SIGN"
   unichar:entity="permil"
   string="\(%0"
   />
  <!-- no roff equiv; no idea what to do with it
       <xsl:output-character
       character="&#x2031;"
       unichar:name="PER TEN THOUSAND SIGN"
       />
  -->
  <xsl:output-character
   character="&#x2032;"
   unichar:name="PRIME"
   unichar:entity="prime"
   string="\(fm"
   />
  <xsl:output-character
   character="&#x2033;"
   unichar:name="DOUBLE PRIME"
   unichar:entity="Prime"
   string="\(sd"
   />
  <xsl:output-character
   character="&#x2034;"
   unichar:name="TRIPLE PRIME"
   unichar:entity="tprime"
   string="\(sd\(fm"
   />
  <!-- no idea for these 
       <xsl:output-character
       character="&#x2035;"
       unichar:name="REVERSED PRIME"
       unichar:entity="bprime"
       />
       <xsl:output-character
       character="&#x2036;"
       unichar:name="REVERSED DOUBLE PRIME"
       />
       <xsl:output-character
       character="&#x2037;"
       unichar:name="REVERSED TRIPLE PRIME"
       />
  -->
  <!-- there is no low caret in roff -->
  <xsl:output-character
   character="&#x2038;"
   unichar:name="CARET"
   string="^"
   />
  <xsl:output-character
   character="&#x2039;"
   unichar:name="SINGLE LEFT-POINTING ANGLE QUOTATION MARK"
   string="\(fo"
   />
  <xsl:output-character
   character="&#x203a;"
   unichar:name="SINGLE RIGHT-POINTING ANGLE QUOTATION MARK"
   string="\(fc"
   />
  <!-- not in roff -->
  <xsl:output-character
   character="&#x203b;"
   unichar:name="REFERENCE MARK"
   string="*"
   />
  <xsl:output-character
   character="&#x203c;"
   unichar:name="DOUBLE EXCLAMATION MARK"
   string="!!"
   />
  <xsl:output-character
   character="&#x203d;"
   unichar:name="INTERROBANG"
   string="?!"
   />
  <xsl:output-character
   character="&#x203e;"
   unichar:name="OVERLINE"
   string="\(rn"
   />
  <xsl:output-character
   character="&#x203f;"
   unichar:name="UNDERTIE"
   string="\(ul"
   />
  <!-- not in roff -->
  <xsl:output-character
   character="&#x2040;"
   unichar:name="CHARACTER TIE"
   string="\(rn"
   />
  <!-- not in roff -->
  <xsl:output-character
   character="&#x2041;"
   unichar:name="CARET INSERTION POINT"
   unichar:entity="caret"
   string="^"
   />
  <!-- not in roff -->
  <xsl:output-character
   character="&#x2042;"
   unichar:name="ASTERISM"
   string="*"
   />
  <!-- not in roff; just make bold hyphen -->
  <xsl:output-character
   character="&#x2043;"
   unichar:name="HYPHEN BULLET"
   unichar:entity="hybull"
   string="\fB-\fR"
   />
  <xsl:output-character
   character="&#x2044;"
   unichar:name="FRACTION SLASH"
   string="\(sl"
   />
  <!-- not in roff -->
  <xsl:output-character
   character="&#x2045;"
   unichar:name="LEFT SQUARE BRACKET WITH QUILL"
   string="["
   />
  <!-- not in roff -->
  <xsl:output-character
   character="&#x2046;"
   unichar:name="RIGHT SQUARE BRACKET WITH QUILL"
   string="]"
   />
  <xsl:output-character
   character="&#x2047;"
   unichar:name="DOUBLE QUESTION MARK"
   string="??"
   />
  <xsl:output-character
   character="&#x2048;"
   unichar:name="QUESTION EXCLAMATION MARK"
   string="?!"
   />
  <xsl:output-character
   character="&#x2049;"
   unichar:name="EXCLAMATION QUESTION MARK"
   string="!?"
   />
  <!-- not in roff -->
  <xsl:output-character
   character="&#x204a;"
   unichar:name="TIRONIAN SIGN ET"
   string="7"
   />
  <!-- not in roff; just replace with un-reversed pilcrow -->
  <xsl:output-character
   character="&#x204b;"
   unichar:name="REVERSED PILCROW SIGN"
   string="\(ps"
   />
  <!-- not in roff; just make regular bullet -->
  <xsl:output-character
   character="&#x204c;"
   unichar:name="BLACK LEFTWARDS BULLET"
   string="\(bu"
   />
  <!-- not in roff; just make regular bullet -->
  <xsl:output-character
   character="&#x204d;"
   unichar:name="BLACK RIGHTWARDS BULLET"
   string="\(bu"
   />
  <xsl:output-character
   character="&#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
   character="&#x205f;"
   unichar:name="MEDIUM MATHEMATICAL SPACE"
   string=" "
   />
  <!-- no idea how this is different than a zero-width joiner -->
  <xsl:output-character
   character="&#x2060;"
   unichar:name="WORD JOINER"
   string="\&amp;"
   />

</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="letterlike" xmlns=""
  from="0x2100" to="0x214B">
  <title>Letterlike Symbols</title>
  <para>
	No mappings for any of these, and nothing appropriate for most
	of them; so, just spell out the ones that we can.
  </para>
</doc:character-map>

<xsl:character-map name="letterlike">
  <xsl:output-character
   character="&#x2103;"
   unichar:name="DEGREE CELSIUS"
   string="\(deC"
   />
  <xsl:output-character
   character="&#x2105;"
   unichar:name="CARE OF"
   unichar:entity="incare"
   string="c/o"
   />
  <xsl:output-character
   character="&#x2109;"
   unichar:name="DEGREE FAHRENHEIT"
   string="\(deF"
   />
  <!-- roff Ifraktur -->
  <xsl:output-character
   character="&#x2111;"
   unichar:name="BLACK-LETTER CAPITAL I"
   string="\(Im"
   />
  <xsl:output-character
   character="&#x2113;"
   unichar:name="SCRIPT SMALL L"
   unichar:entity="ell"
   string="l"
   />
  <xsl:output-character
   character="&#x2116;"
   unichar:name="NUMERO SIGN"
   unichar:entity="numero"
   string="No."
   />
  <xsl:output-character
   character="&#x2118;"
   unichar:name="SCRIPT CAPITAL P"
   unichar:entity="weierp"
   string="\(wp"
   />
  <xsl:output-character
   character="&#x211c;"
   unichar:name="BLACK-LETTER CAPITAL R"
   unichar:entity="real"
   string="\(Re"
   />
  <xsl:output-character
   character="&#x211e;"
   unichar:name="PRESCRIPTION TAKE"
   unichar:entity="rx"
   string="Rx"
   />
  <xsl:output-character
   character="&#x2120;"
   unichar:name="SERVICE MARK"
   string="sm"
   />
  <xsl:output-character
   character="&#x2122;"
   unichar:name="TRADE MARK SIGN"
   unichar:entity="trade"
   string="\(tm"
   />
  <xsl:output-character
   character="&#x2126;"
   unichar:name="OHM SIGN"
   unichar:entity="ohm"
   string="\(*W"
   />
  <xsl:output-character
   character="&#x212a;"
   unichar:name="KELVIN SIGN"
   string="K"
   />
  <xsl:output-character
   character="&#x212b;"
   unichar:name="ANGSTROM SIGN"
   unichar:entity="angst"
   string="\(oA"
   />
  <xsl:output-character
   character="&#x2135;"
   unichar:name="ALEF SYMBOL"
   unichar:entity="aleph"
   string="\(Ah"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="arrows" xmlns=""
  from="0x2190" to="0x21FF">
  <title>Arrows</title>
</doc:character-map>

<xsl:character-map name="arrows">
  <xsl:output-character
   character="&#x2190;"
   unichar:name="LEFTWARDS ARROW"
   unichar:entity="larr"
   string="\(&lt;-"
   />
  <xsl:output-character
   character="&#x2191;"
   unichar:name="UPWARDS ARROW"
   unichar:entity="uarr"
   string="\(ua"
   />
  <xsl:output-character
   character="&#x2192;"
   unichar:name="RIGHTWARDS ARROW"
   unichar:entity="rarr"
   string="\(->"
   />
  <xsl:output-character
   character="&#x2193;"
   unichar:name="DOWNWARDS ARROW"
   unichar:entity="darr"
   string="\(da"
   />
  <xsl:output-character
   character="&#x2194;"
   unichar:name="LEFT RIGHT ARROW"
   unichar:entity="harr"
   string="\(&lt;>"
   />
  <xsl:output-character
   character="&#x2195;"
   unichar:name="UP DOWN ARROW"
   unichar:entity="varr"
   string="\(va"
   />
  <xsl:output-character
   character="&#x21b5;"
   unichar:name="DOWNWARDS ARROW WITH CORNER LEFTWARDS"
   unichar:entity="crarr"
   string="\(CR"
   />
  <xsl:output-character
   character="&#x21d0;"
   unichar:name="LEFTWARDS DOUBLE ARROW"
   unichar:entity="lArr"
   string="\(la"
   />
  <xsl:output-character
   character="&#x21d1;"
   unichar:name="UPWARDS DOUBLE ARROW"
   unichar:entity="uArr"
   string="\(uA"
   />
  <xsl:output-character
   character="&#x21d2;"
   unichar:name="RIGHTWARDS DOUBLE ARROW"
   unichar:entity="rArr"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x21d3;"
   unichar:name="DOWNWARDS DOUBLE ARROW"
   unichar:entity="dArr"
   string="\(dA"
   />
  <xsl:output-character
   character="&#x21d4;"
   unichar:name="LEFT RIGHT DOUBLE ARROW"
   unichar:entity="hArr"
   string="\(hA"
   />
  <!-- no roff equiv; render same as single arrow -->
  <xsl:output-character
   character="&#x21d5;"
   unichar:name="UP DOWN DOUBLE ARROW"
   unichar:entity="vArr"
   string="\(va"
   />
</xsl:character-map>


<doc:character-map name="math-op" xmlns=""
  from="0x2200" to="0x22FF">
  <title>Mathematical Operators</title>
</doc:character-map>

<xsl:character-map name="math-op">
  <xsl:output-character
   character="&#x2200;"
   unichar:name="FOR ALL"
   unichar:entity="forall"
   string="\(fa"
   />
  <xsl:output-character
   character="&#x2201;"
   unichar:name="COMPLEMENT"
   unichar:entity="comp"
   string="C"
   />
  <xsl:output-character
   character="&#x2202;"
   unichar:name="PARTIAL DIFFERENTIAL"
   unichar:entity="part"
   string="\(pd"
   />
  <xsl:output-character
   character="&#x2203;"
   unichar:name="THERE EXISTS"
   unichar:entity="exist"
   string="\(te"
   />
  <!-- no roff equiv 
       <xsl:output-character
       character="&#x2204;"
       unichar:name="THERE DOES NOT EXIST"
       unichar:entity="nexist"
       />
  -->
  <xsl:output-character
   character="&#x2205;"
   unichar:name="EMPTY SET"
   unichar:entity="empty"
   string="\(es"
   />
  <xsl:output-character
   character="&#x2206;"
   unichar:name="INCREMENT"
   string="\(*D"
   />
  <xsl:output-character
   character="&#x2207;"
   unichar:name="NABLA"
   unichar:entity="nabla"
   string="\(gr"
   />
  <xsl:output-character
   character="&#x2208;"
   unichar:name="ELEMENT OF"
   unichar:entity="isin"
   string="\(mo"
   />
  <xsl:output-character
   character="&#x2209;"
   unichar:name="NOT AN ELEMENT OF"
   unichar:entity="notin"
   string="\(nm"
   />
  <xsl:output-character
   character="&#x220a;"
   unichar:name="SMALL ELEMENT OF"
   string="\(mo"
   />

  <xsl:output-character
   character="&#x220b;"
   unichar:name="CONTAINS AS MEMBER"
   unichar:entity="ni"
   string="\(st"
   />
  <!-- not in roff 
       <xsl:output-character
       character="&#x220c;"
       unichar:name="DOES NOT CONTAIN AS MEMBER"
       />
  -->
  <xsl:output-character
   character="&#x220d;"
   unichar:name="SMALL CONTAINS AS MEMBER"
   string="\(st"
   />
  <!-- not in roff
       <xsl:output-character
       character="&#x220e;"
       unichar:name="END OF PROOF"
       />
  -->
  <xsl:output-character
   character="&#x220f;"
   unichar:name="N-ARY PRODUCT"
   unichar:entity="prod"
   string="\(product"
   />
  <!-- not in roff
       <xsl:output-character
       character="&#x2210;"
       unichar:name="N-ARY COPRODUCT"
       unichar:entity="coprod"
       />
  -->
  <xsl:output-character
   character="&#x2211;"
   unichar:name="N-ARY SUMMATION"
   unichar:entity="sum"
   string="\(sum"
   />
  <xsl:output-character
   character="&#x2212;"
   unichar:name="MINUS SIGN"
   unichar:entity="minus"
   string="\-"
   />
  <xsl:output-character
   character="&#x2213;"
   unichar:name="MINUS-OR-PLUS SIGN"
   unichar:entity="mnplus"
   string="\(+-"
   />
  <!-- not in roff
       <xsl:output-character
       character="&#x2214;"
       unichar:name="DOT PLUS"
       unichar:entity="plusdo"
       />
  -->
  <xsl:output-character
   character="&#x2215;"
   unichar:name="DIVISION SLASH"
   string="\(f/"
   />
  <!-- not in roff
       <xsl:output-character
       character="&#x2216;"
       unichar:name="SET MINUS"
       unichar:entity="setmn"
       />
  -->
  <xsl:output-character
   character="&#x2217;"
   unichar:name="ASTERISK OPERATOR"
   unichar:entity="lowast"
   string="\(**"
   />
  <!-- not in roff
       <xsl:output-character
       character="&#x2218;"
       unichar:name="RING OPERATOR"
       unichar:entity="compfn"
       />
  -->
  <xsl:output-character
   character="&#x2219;"
   unichar:name="BULLET OPERATOR"
   string="\(bu"
   />
  <xsl:output-character
   character="&#x221a;"
   unichar:name="SQUARE ROOT"
   unichar:entity="radic"
   string="\(sr"
   />
  <!-- not in roff
       <xsl:output-character
       character="&#x221b;"
       unichar:name="CUBE ROOT"
       />
       <xsl:output-character
       character="&#x221c;"
       unichar:name="FOURTH ROOT"
       />
  -->
  <xsl:output-character
   character="&#x221d;"
   unichar:name="PROPORTIONAL TO"
   unichar:entity="prop"
   string="\(pt"
   />
  <xsl:output-character
   character="&#x221e;"
   unichar:name="INFINITY"
   unichar:entity="infin"
   string="\(if"
   />
  <!-- not in roff
       <xsl:output-character
       character="&#x221f;"
       unichar:name="RIGHT ANGLE"
       unichar:entity="ang90"
       />
  -->
  <xsl:output-character
   character="&#x2220;"
   unichar:name="ANGLE"
   unichar:entity="ang"
   string="\(/_"
   />

  <!-- 0x2221 to 0x2226 not in roff;
       but fake a parallel sign with vert bars-->

  <xsl:output-character
   character="&#x2225;"
   unichar:name="PARALLEL TO"
   unichar:entity="par"
   string="\(bv\(bv"
   />

  <xsl:output-character
   character="&#x2227;"
   unichar:name="LOGICAL AND"
   unichar:entity="and"
   string="\(AN"
   />
  <xsl:output-character
   character="&#x2228;"
   unichar:name="LOGICAL OR"
   unichar:entity="or"
   string="\(OR"
   />
  <xsl:output-character
   character="&#x2229;"
   unichar:name="INTERSECTION"
   unichar:entity="cap"
   string="\(ca"
   />
  <xsl:output-character
   character="&#x222a;"
   unichar:name="UNION"
   unichar:entity="cup"
   string="\(cu"
   />
  <xsl:output-character
   character="&#x222b;"
   unichar:name="INTEGRAL"
   unichar:entity="int"
   string="\(is"
   />
  <xsl:output-character
   character="&#x222c;"
   unichar:name="DOUBLE INTEGRAL"
   string="\(is\(is"
   />
  <xsl:output-character
   character="&#x222d;"
   unichar:name="TRIPLE INTEGRAL"
   string="\(is\(is\(is"
   />

  <!-- 0x222e to 0x2233 not in roff -->

  <xsl:output-character
   character="&#x2234;"
   unichar:name="THEREFORE"
   unichar:entity="there4"
   string="\(tf"
   />

  <!-- not in roff
       <xsl:output-character
       character="&#x2235;"
       unichar:name="BECAUSE"
       unichar:entity="becaus"
       />
  -->
  <xsl:output-character
   character="&#x2236;"
   unichar:name="RATIO"
   string=":"
   />
  <xsl:output-character
   character="&#x2237;"
   unichar:name="PROPORTION"
   string="::"
   />

  <!-- 0x2238 to 0x223b not in roff -->

  <xsl:output-character
   character="&#x223c;"
   unichar:name="TILDE OPERATOR"
   unichar:entity="sim"
   string="\(ti"
   />

  <!-- 0x223d to 0x224b not in roff -->

  <xsl:output-character
   character="&#x2245;"
   unichar:name="APPROXIMATELY EQUAL TO"
   unichar:entity="cong"
   string="\(=~"
   />

  <!-- not in roff
       <xsl:output-character
       character="&#x2246;"
       unichar:name="APPROXIMATELY BUT NOT ACTUALLY EQUAL TO"
       />
       <xsl:output-character
       character="&#x2247;"
       unichar:name="NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO"
       unichar:entity="ncong"
       />
  -->

  <xsl:output-character
   character="&#x2248;"
   unichar:name="ALMOST EQUAL TO"
   unichar:entity="asymp"
   string="\(~~"
   />

  <!-- x2249 to x2253 not in roff -->

  <xsl:output-character
   character="&#x2254;"
   unichar:name="COLON EQUALS"
   unichar:entity="colone"
   string=":="
   />
  <xsl:output-character
   character="&#x2255;"
   unichar:name="EQUALS COLON"
   unichar:entity="ecolon"
   string="=:"
   />

  <!-- x2256 to x2255 not in roff -->

  <xsl:output-character
   character="&#x225f;"
   unichar:name="QUESTIONED EQUAL TO"
   string="?="
   />
  <xsl:output-character
   character="&#x2260;"
   unichar:name="NOT EQUAL TO"
   unichar:entity="ne"
   string="\(!="
   />
  <xsl:output-character
   character="&#x2261;"
   unichar:name="IDENTICAL TO"
   unichar:entity="equiv"
   string="\(=="
   />
  <!-- not in roff
       <xsl:output-character
       character="&#x2262;"
       unichar:name="NOT IDENTICAL TO"
       unichar:entity="nequiv"
       />
       <xsl:output-character
       character="&#x2263;"
       unichar:name="STRICTLY EQUIVALENT TO"
       />
  -->
  <xsl:output-character
   character="&#x2264;"
   unichar:name="LESS-THAN OR EQUAL TO"
   unichar:entity="le"
   string="\(&lt;="
   />
  <xsl:output-character
   character="&#x2265;"
   unichar:name="GREATER-THAN OR EQUAL TO"
   unichar:entity="ge"
   string="\(>="
   />
  <!-- x2266 to x2269 not in roff -->

  <xsl:output-character
   character="&#x226a;"
   unichar:name="MUCH LESS-THAN"
   unichar:entity="Lt"
   string="&lt;&lt;"
   />
  <xsl:output-character
   character="&#x226b;"
   unichar:name="MUCH GREATER-THAN"
   unichar:entity="Gt"
   string=">>"
   />
  <!-- x226c to x2281 not in roff -->

  <xsl:output-character
   character="&#x2282;"
   unichar:name="SUBSET OF"
   unichar:entity="sub"
   string="\(sb"
   />
  <xsl:output-character
   character="&#x2283;"
   unichar:name="SUPERSET OF"
   unichar:entity="sup"
   string="\(sp"
   />
  <xsl:output-character
   character="&#x2284;"
   unichar:name="NOT A SUBSET OF"
   unichar:entity="nsub"
   string="\(nb"
   />
  <!-- not in roff
       <xsl:output-character
       character="&#x2285;"
       unichar:name="NOT A SUPERSET OF"
       unichar:entity="nsup"
       />
  -->
  <xsl:output-character
   character="&#x2286;"
   unichar:name="SUBSET OF OR EQUAL TO"
   unichar:entity="sube"
   string="\(ib"
   />
  <xsl:output-character
   character="&#x2287;"
   unichar:name="SUPERSET OF OR EQUAL TO"
   unichar:entity="supe"
   string="\(ip"
   />
  <!-- x2288 to x2294 not in roff -->

  <xsl:output-character
   character="&#x2295;"
   unichar:name="CIRCLED PLUS"
   unichar:entity="oplus"
   string="\(c+"
   />
  <xsl:output-character
   character="&#x2296;"
   unichar:name="CIRCLED MINUS"
   unichar:entity="ominus"
   string="\(c*"
   />
  <xsl:output-character
   character="&#x2297;"
   unichar:name="CIRCLED TIMES"
   unichar:entity="otimes"
   string="\(c*"
   />

  <!-- x2298 to x22a4 not in roff -->

  <xsl:output-character
   character="&#x22a5;"
   unichar:name="UP TACK"
   unichar:entity="bottom"
   string="\(pp"
   />

  <!-- x22a6 to x22bf not in roff -->

  <xsl:output-character
   character="&#x22c0;"
   unichar:name="N-ARY LOGICAL AND"
   string="\(AN"
   />
  <xsl:output-character
   character="&#x22c1;"
   unichar:name="N-ARY LOGICAL OR"
   string="\(OR"
   />
  <xsl:output-character
   character="&#x22c2;"
   unichar:name="N-ARY INTERSECTION"
   string="\(ca"
   />
  <xsl:output-character
   character="&#x22c3;"
   unichar:name="N-ARY UNION"
   string="\(cu"
   />

  <!-- not in roff
       <xsl:output-character
       character="&#x22c4;"
       unichar:name="DIAMOND OPERATOR"
       unichar:entity="diam"
       />
  -->
  <xsl:output-character
   character="&#x22c5;"
   unichar:name="DOT OPERATOR"
   unichar:entity="sdot"
   string="\(md"
   />
  <xsl:output-character
   character="&#x22c6;"
   unichar:name="STAR OPERATOR"
   unichar:entity="sstarf"
   string="\(**"
   />
  <!-- x22c7 to x22cd not in roff -->

  <xsl:output-character
   character="&#x22ce;"
   unichar:name="CURLY LOGICAL OR"
   unichar:entity="cuvee"
   string="\(OR"
   />
  <xsl:output-character
   character="&#x22cf;"
   unichar:name="CURLY LOGICAL AND"
   unichar:entity="cuwed"
   string="\(AN"
   />

  <!-- x22d0 to x22d7 not in roff -->

  <xsl:output-character
   character="&#x22d8;"
   unichar:name="VERY MUCH LESS-THAN"
   unichar:entity="Ll"
   string="&lt;&lt;&lt;"
   />
  <xsl:output-character
   character="&#x22d9;"
   unichar:name="VERY MUCH GREATER-THAN"
   unichar:entity="Gg"
   string=">>>"
   />

  <!-- x22da to x22ee not in roff -->

  <xsl:output-character
   character="&#x22ef;"
   unichar:name="MIDLINE HORIZONTAL ELLIPSIS"
   string="\&amp;..."
   />

  <!-- x22fo to x22ff not in roff -->
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="misc-tech" xmlns=""
  from="0x2300" to="0x23FF">
  <title>Miscellaneous Technical</title>
</doc:character-map>

<xsl:character-map name="misc-tech">
  <doc:output-character character="&#x2329;" xmlns="">
    <para>
      The ISO entities used by DocBook maps 
      <sgmltag class="genentity">lang</sgmltag>
      to U+3008, from the mathematics block.)
      Originally, Michael Smith had this entity mapped to
      U+2329.  It is not clear
      who is right from a “theoretical” point of view.
      But since this is for DocBook, we follow the DocBook
      mapping for the 
      <sgmltag class="attribute">unichar:entity</sgmltag>
      documentation, but keep both <sgmltag
      class="element">xsl:output-character</sgmltag> entries,
      which actually map to the same roff markup.
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x2329;"
   unichar:name="LEFT-POINTING ANGLE BRACKET"
   string="\(la"
   />

  <doc:output-character character="&#x232a;" xmlns="">
    <para>
      The same notes for U+2329 apply to 
      this character.
    </para>
  </doc:output-character>
  <xsl:output-character
   character="&#x232a;"
   unichar:name="RIGHT-POINTING ANGLE BRACKET"
   string="\(ra"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="geometric-shapes" xmlns=""
  from="0x25A0" to="0x25F7">
  <title>Geometric Shapes</title>
</doc:character-map>

<xsl:character-map name="geometric-shapes">
  <xsl:output-character
   character="&#x25a1;"
   unichar:name="WHITE SQUARE"
   unichar:entity="squ"
   string="\(sq"
   />
  <xsl:output-character
   character="&#x25a2;"
   unichar:name="WHITE SQUARE WITH ROUNDED CORNERS"
   string="\(sq"
   />
  <xsl:output-character
   character="&#x25ab;"
   unichar:name="WHITE SMALL SQUARE"
   string="\(sq"
   />
  <xsl:output-character
   character="&#x25ba;"
   unichar:name="BLACK RIGHT-POINTING POINTER"
   string="\fB>\fR"
   />
  <xsl:output-character
   character="&#x25bb;"
   unichar:name="WHITE RIGHT-POINTING POINTER"
   string=">"
   />
  <xsl:output-character
   character="&#x25bc;"
   unichar:name="BLACK DOWN-POINTING TRIANGLE"
   string="\fBv\fR"
   />
  <xsl:output-character
   character="&#x25bd;"
   unichar:name="WHITE DOWN-POINTING TRIANGLE"
   unichar:entity="xdtri"
   string="v"
   />
  <xsl:output-character
   character="&#x25c4;"
   unichar:name="BLACK LEFT-POINTING POINTER"
   string="\fB&lt;\fR"
   />
  <xsl:output-character
   character="&#x25c5;"
   unichar:name="WHITE LEFT-POINTING POINTER"
   string="&lt;"
   />
  <xsl:output-character
   character="&#x25c6;"
   unichar:name="BLACK DIAMOND"
   string="\(DI"
   />
  <xsl:output-character
   character="&#x25c7;"
   unichar:name="WHITE DIAMOND"
   string="\(lz"
   />
  <xsl:output-character
   character="&#x25ca;"
   unichar:name="LOZENGE"
   unichar:entity="loz"
   string="\(lz"
   />
  <xsl:output-character
   character="&#x25cb;"
   unichar:name="WHITE CIRCLE"
   unichar:entity="cir"
   string="\(ci"
   />
  <xsl:output-character
   character="&#x25cf;"
   unichar:name="BLACK CIRCLE"
   string="\(bu"
   />
  <xsl:output-character
   character="&#x25e6;"
   unichar:name="WHITE BULLET"
   string="\(ci"
   />
  <xsl:output-character
   character="&#x25ef;"
   unichar:name="LARGE CIRCLE"
   unichar:entity="xcirc"
   string="\(ci"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="misc-symbols" xmlns=""
  from="0x2600" to="0x26FF">
  <title>Miscellaneous Symbols</title>
</doc:character-map>

<xsl:character-map name="misc-symbols">
  <xsl:output-character
   character="&#x261a;"
   unichar:name="BLACK LEFT POINTING INDEX"
   string="\(lh"
   />
  <xsl:output-character
   character="&#x261b;"
   unichar:name="BLACK RIGHT POINTING INDEX"
   string="\(rh)"
   />
  <xsl:output-character
   character="&#x261c;"
   unichar:name="WHITE LEFT POINTING INDEX"
   string="\(lh"
   />
  <xsl:output-character
   character="&#x261e;"
   unichar:name="WHITE RIGHT POINTING INDEX"
   string="\(rh)"
   />
  <xsl:output-character
   character="&#x2660;"
   unichar:name="BLACK SPADE SUIT"
   unichar:entity="spades"
   string="\(SP"
   />
  <xsl:output-character
   character="&#x2661;"
   unichar:name="WHITE HEART SUIT"
   string="\(HE"
   />
  <xsl:output-character
   character="&#x2662;"
   unichar:name="WHITE DIAMOND SUIT"
   string="\(DI"
   />
  <xsl:output-character
   character="&#x2663;"
   unichar:name="BLACK CLUB SUIT"
   unichar:entity="clubs"
   string="\(CL"
   />
  <xsl:output-character
   character="&#x2664;"
   unichar:name="WHITE SPADE SUIT"
   string="\(SP"
   />
  <xsl:output-character
   character="&#x2665;"
   unichar:name="BLACK HEART SUIT"
   unichar:entity="hearts"
   string="\(HE"
   />
  <xsl:output-character
   character="&#x2666;"
   unichar:name="BLACK DIAMOND SUIT"
   unichar:entity="diams"
   string="\(DI"
   />
  <xsl:output-character
   character="&#x2667;"
   unichar:name="WHITE CLUB SUIT"
   string="\(CL"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="dingbats" xmlns=""
  from="0x2700" to="0x27BE">
  <title>Dingbats</title>
  <para>No &groff; equivalent for most of these;
        just map to something close.</para>
</doc:character-map>

<xsl:character-map name="dingbats">
  <xsl:output-character
   character="&#x2713;"
   unichar:name="CHECK MARK"
   unichar:entity="check"
   string="\(OK"
   />
  <xsl:output-character
   character="&#x2714;"
   unichar:name="HEAVY CHECK MARK"
   string="\fB\(OK\fR"
   />
  <xsl:output-character
   character="&#x2715;"
   unichar:name="MULTIPLICATION X"
   string="\(mu"
   />
  <xsl:output-character
   character="&#x2716;"
   unichar:name="HEAVY MULTIPLICATION X"
   string="\fB\(mu\fR"
   />
  <xsl:output-character
   character="&#x2717;"
   unichar:name="BALLOT X"
   unichar:entity="cross"
   string="\(mu"
   />
  <xsl:output-character
   character="&#x2718;"
   unichar:name="HEAVY BALLOT X"
   string="\fB\(mu\fR"
   />
  <xsl:output-character
   character="&#x2719;"
   unichar:name="OUTLINED GREEK CROSS"
   string="\fB+\fR"
   />
  <xsl:output-character
   character="&#x271a;"
   unichar:name="HEAVY GREEK CROSS"
   string="\fB+\fR"
   />
  <xsl:output-character
   character="&#x271b;"
   unichar:name="OPEN CENTRE CROSS"
   string="\fB+\fR"
   />
  <xsl:output-character
   character="&#x271c;"
   unichar:name="HEAVY OPEN CENTRE CROSS"
   string="\fB+\fR"
   />
  <xsl:output-character
   character="&#x271d;"
   unichar:name="LATIN CROSS"
   string="\fB+\fR"
   />
  <xsl:output-character
   character="&#x271e;"
   unichar:name="SHADOWED WHITE LATIN CROSS"
   string="\fB+\fR"
   />
  <xsl:output-character
   character="&#x271f;"
   unichar:name="OUTLINED LATIN CROSS"
   string="\fB+\fR"
   />
  <xsl:output-character
   character="&#x2720;"
   unichar:name="MALTESE CROSS"
   unichar:entity="malt"
   string="\fB+\fR"
   />
  <xsl:output-character
   character="&#x2721;"
   unichar:name="STAR OF DAVID"
   string="*"
   />
  <xsl:output-character
   character="&#x2722;"
   unichar:name="FOUR TEARDROP-SPOKED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x2723;"
   unichar:name="FOUR BALLOON-SPOKED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x2724;"
   unichar:name="HEAVY FOUR BALLOON-SPOKED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x2725;"
   unichar:name="FOUR CLUB-SPOKED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x2726;"
   unichar:name="BLACK FOUR POINTED STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x2727;"
   unichar:name="WHITE FOUR POINTED STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x2729;"
   unichar:name="STRESS OUTLINED WHITE STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x272a;"
   unichar:name="CIRCLED WHITE STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x272b;"
   unichar:name="OPEN CENTRE BLACK STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x272c;"
   unichar:name="BLACK CENTRE WHITE STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x272d;"
   unichar:name="OUTLINED BLACK STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x272e;"
   unichar:name="HEAVY OUTLINED BLACK STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x272f;"
   unichar:name="PINWHEEL STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x2730;"
   unichar:name="SHADOWED WHITE STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x2731;"
   unichar:name="HEAVY ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x2732;"
   unichar:name="OPEN CENTRE ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x2733;"
   unichar:name="EIGHT SPOKED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x2734;"
   unichar:name="EIGHT POINTED BLACK STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x2735;"
   unichar:name="EIGHT POINTED PINWHEEL STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x2736;"
   unichar:name="SIX POINTED BLACK STAR"
   unichar:entity="sext"
   string="*"
   />
  <xsl:output-character
   character="&#x2737;"
   unichar:name="EIGHT POINTED RECTILINEAR BLACK STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x2738;"
   unichar:name="HEAVY EIGHT POINTED RECTILINEAR BLACK STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x2739;"
   unichar:name="TWELVE POINTED BLACK STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x273a;"
   unichar:name="SIXTEEN POINTED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x273b;"
   unichar:name="TEARDROP-SPOKED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x273c;"
   unichar:name="OPEN CENTRE TEARDROP-SPOKED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x273d;"
   unichar:name="HEAVY TEARDROP-SPOKED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x273e;"
   unichar:name="SIX PETALLED BLACK AND WHITE FLORETTE"
   string="*"
   />
  <xsl:output-character
   character="&#x273f;"
   unichar:name="BLACK FLORETTE"
   string="*"
   />
  <xsl:output-character
   character="&#x2740;"
   unichar:name="WHITE FLORETTE"
   string="*"
   />
  <xsl:output-character
   character="&#x2741;"
   unichar:name="EIGHT PETALLED OUTLINED BLACK FLORETTE"
   string="*"
   />
  <xsl:output-character
   character="&#x2742;"
   unichar:name="CIRCLED OPEN CENTRE EIGHT POINTED STAR"
   string="*"
   />
  <xsl:output-character
   character="&#x2743;"
   unichar:name="HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x2744;"
   unichar:name="SNOWFLAKE"
   string="*"
   />
  <xsl:output-character
   character="&#x2745;"
   unichar:name="TIGHT TRIFOLIATE SNOWFLAKE"
   string="*"
   />
  <xsl:output-character
   character="&#x2746;"
   unichar:name="HEAVY CHEVRON SNOWFLAKE"
   string="*"
   />
  <xsl:output-character
   character="&#x2747;"
   unichar:name="SPARKLE"
   string="*"
   />
  <xsl:output-character
   character="&#x2748;"
   unichar:name="HEAVY SPARKLE"
   string="*"
   />
  <xsl:output-character
   character="&#x2749;"
   unichar:name="BALLOON-SPOKED ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x274a;"
   unichar:name="EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x274b;"
   unichar:name="HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"
   string="*"
   />
  <xsl:output-character
   character="&#x274d;"
   unichar:name="SHADOWED WHITE CIRCLE"
   string="*"
   />
  <xsl:output-character
   character="&#x274f;"
   unichar:name="LOWER RIGHT DROP-SHADOWED WHITE SQUARE"
   string="\(sq"
   />
  <xsl:output-character
   character="&#x2750;"
   unichar:name="UPPER RIGHT DROP-SHADOWED WHITE SQUARE"
   string="\(sq"
   />
  <xsl:output-character
   character="&#x2751;"
   unichar:name="LOWER RIGHT SHADOWED WHITE SQUARE"
   string="\(sq"
   />
  <xsl:output-character
   character="&#x2752;"
   unichar:name="UPPER RIGHT SHADOWED WHITE SQUARE"
   string="\(sq"
   />
  <xsl:output-character
   character="&#x2756;"
   unichar:name="BLACK DIAMOND MINUS WHITE X"
   string="*"
   />
  <xsl:output-character
   character="&#x2758;"
   unichar:name="LIGHT VERTICAL BAR"
   string="\(bv"
   />
  <xsl:output-character
   character="&#x2759;"
   unichar:name="MEDIUM VERTICAL BAR"
   string="\fB\(bv\fR"
   />
  <xsl:output-character
   character="&#x275a;"
   unichar:name="HEAVY VERTICAL BAR"
   string="\fB\(bv\fR"
   />
  <xsl:output-character
   character="&#x275b;"
   unichar:name="HEAVY SINGLE TURNED COMMA QUOTATION MARK ORUNICHAR:NAMENT"
   string="\fB\(oq\fR"
   />
  <xsl:output-character
   character="&#x275c;"
   unichar:name="HEAVY SINGLE COMMA QUOTATION MARK ORUNICHAR:NAMENT"
   string="\fB\(cq\fR"
   />
  <xsl:output-character
   character="&#x275d;"
   unichar:name="HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORUNICHAR:NAMENT"
   string="\fB\(lq\fR"
   />
  <xsl:output-character
   character="&#x275e;"
   unichar:name="HEAVY DOUBLE COMMA QUOTATION MARK ORUNICHAR:NAMENT"
   string="\fB\(rq\fR"
   />
  <xsl:output-character
   character="&#x2761;"
   unichar:name="CURVED STEM PARAGRAPH SIGN ORUNICHAR:NAMENT"
   string="\(ps"
   />
  <xsl:output-character
   character="&#x2762;"
   unichar:name="HEAVY EXCLAMATION MARK ORUNICHAR:NAMENT"
   string="\fB!\fR"
   />
  <xsl:output-character
   character="&#x2763;"
   unichar:name="HEAVY HEART EXCLAMATION MARK ORUNICHAR:NAMENT"
   string="\fB!\fR"
   />
  <xsl:output-character
   character="&#x2764;"
   unichar:name="HEAVY BLACK HEART"
   string="\fB\(HE\fR"
   />
  <xsl:output-character
   character="&#x2765;"
   unichar:name="ROTATED HEAVY BLACK HEART BULLET"
   string="\fB\(HE\fR"
   />
  <xsl:output-character
   character="&#x2766;"
   unichar:name="FLORAL HEART"
   string="\fB\(HE\fR"
   />
  <xsl:output-character
   character="&#x2767;"
   unichar:name="ROTATED FLORAL HEART BULLET"
   string="\fB\(HE\fR"
   />
  <xsl:output-character
   character="&#x2776;"
   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT ONE"
   string="1"
   />
  <xsl:output-character
   character="&#x2777;"
   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT TWO"
   string="2"
   />
  <xsl:output-character
   character="&#x2778;"
   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT THREE"
   string="3"
   />
  <xsl:output-character
   character="&#x2779;"
   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT FOUR"
   string="4"
   />
  <xsl:output-character
   character="&#x277a;"
   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT FIVE"
   string="5"
   />
  <xsl:output-character
   character="&#x277b;"
   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT SIX"
   string="6"
   />
  <xsl:output-character
   character="&#x277c;"
   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT SEVEN"
   string="7"
   />
  <xsl:output-character
   character="&#x277d;"
   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT EIGHT"
   string="8"
   />
  <xsl:output-character
   character="&#x277e;"
   unichar:name="DINGBAT NEGATIVE CIRCLED DIGIT NINE"
   string="9"
   />
  <xsl:output-character
   character="&#x277f;"
   unichar:name="DINGBAT NEGATIVE CIRCLED NUMBER TEN"
   string="10"
   />
  <xsl:output-character
   character="&#x2780;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT ONE"
   string="1"
   />
  <xsl:output-character
   character="&#x2781;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT TWO"
   string="2"
   />
  <xsl:output-character
   character="&#x2782;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT THREE"
   string="3"
   />
  <xsl:output-character
   character="&#x2783;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT FOUR"
   string="4"
   />
  <xsl:output-character
   character="&#x2784;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT FIVE"
   string="5"
   />
  <xsl:output-character
   character="&#x2785;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT SIX"
   string="6"
   />
  <xsl:output-character
   character="&#x2786;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN"
   string="7"
   />
  <xsl:output-character
   character="&#x2787;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT"
   string="8"
   />
  <xsl:output-character
   character="&#x2788;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF DIGIT NINE"
   string="9"
   />
  <xsl:output-character
   character="&#x2789;"
   unichar:name="DINGBAT CIRCLED SANS-SERIF NUMBER TEN"
   string="10"
   />
  <xsl:output-character
   character="&#x278a;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE"
   string="1"
   />
  <xsl:output-character
   character="&#x278b;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO"
   string="2"
   />
  <xsl:output-character
   character="&#x278c;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE"
   string="3"
   />
  <xsl:output-character
   character="&#x278d;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR"
   string="4"
   />
  <xsl:output-character
   character="&#x278e;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE"
   string="5"
   />
  <xsl:output-character
   character="&#x278f;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX"
   string="6"
   />
  <xsl:output-character
   character="&#x2790;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN"
   string="7"
   />
  <xsl:output-character
   character="&#x2791;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT"
   string="8"
   />
  <xsl:output-character
   character="&#x2792;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE"
   string="9"
   />
  <xsl:output-character
   character="&#x2793;"
   unichar:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN"
   string="10"
   />
  <xsl:output-character
   character="&#x2794;"
   unichar:name="HEAVY WIDE-HEADED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x2799;"
   unichar:name="HEAVY RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x279b;"
   unichar:name="DRAFTING POINT RIGHTWARDS ARROW"
   string="\(->"
   />
  <xsl:output-character
   character="&#x279c;"
   unichar:name="HEAVY ROUND-TIPPED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x279d;"
   unichar:name="TRIANGLE-HEADED RIGHTWARDS ARROW"
   string="\(->"
   />
  <xsl:output-character
   character="&#x279e;"
   unichar:name="HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x279f;"
   unichar:name="DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"
   string="\(->"
   />
  <xsl:output-character
   character="&#x27a0;"
   unichar:name="HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27a1;"
   unichar:name="BLACK RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27a2;"
   unichar:name="THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD"
   string="\(->"
   />
  <xsl:output-character
   character="&#x27a3;"
   unichar:name="THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD"
   string="\(->"
   />
  <xsl:output-character
   character="&#x27a4;"
   unichar:name="BLACK RIGHTWARDS ARROWHEAD"
   string="\(->"
   />
  <xsl:output-character
   character="&#x27a7;"
   unichar:name="SQUAT BLACK RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27a8;"
   unichar:name="HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27a9;"
   unichar:name="RIGHT-SHADED WHITE RIGHTWARDS ARROW"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x27aa;"
   unichar:name="LEFT-SHADED WHITE RIGHTWARDS ARROW"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x27ab;"
   unichar:name="BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x27ac;"
   unichar:name="FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x27ad;"
   unichar:name="HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x27ae;"
   unichar:name="HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x27af;"
   unichar:name="NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x27b1;"
   unichar:name="NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x27b2;"
   unichar:name="CIRCLED HEAVY WHITE RIGHTWARDS ARROW"
   string="\(rA"
   />
  <xsl:output-character
   character="&#x27b3;"
   unichar:name="WHITE-FEATHERED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27b4;"
   unichar:name="BLACK-FEATHERED SOUTH EAST ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27b5;"
   unichar:name="BLACK-FEATHERED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27b6;"
   unichar:name="BLACK-FEATHERED NORTH EAST ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27b7;"
   unichar:name="HEAVY BLACK-FEATHERED SOUTH EAST ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27b8;"
   unichar:name="HEAVY BLACK-FEATHERED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27b9;"
   unichar:name="HEAVY BLACK-FEATHERED NORTH EAST ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27ba;"
   unichar:name="TEARDROP-BARBED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27bb;"
   unichar:name="HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27bc;"
   unichar:name="WEDGE-TAILED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27bd;"
   unichar:name="HEAVY WEDGE-TAILED RIGHTWARDS ARROW"
   string="\fR\(->\fB"
   />
  <xsl:output-character
   character="&#x27be;"
   unichar:name="OPEN-OUTLINED RIGHTWARDS ARROW"
   string="\fR\(rA\fB"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="cjk-symbols-punct" xmlns=""
  from="0x3000" to="0x303F">
  <title>CJK Symbols and Punctuation</title>
  <para>Of course &groff; does not support CJK, but a few of the
        symbols in the ISO entity sets have been unified with
        the CJK symbols here in Unicode.</para>
</doc:character-map>

<xsl:character-map name="cjk-symbols-punct">
  <xsl:output-character
   character="&#x3008;"
   unichar:entity="lang"
   unichar:name="LEFT ANGLE BRACKET"
   string="\[la]"
   />
  <xsl:output-character
   character="&#x3009;"
   unichar:entity="rang"
   unichar:name="RIGHT ANGLE BRACKET"
   string="\[ra]"
   />
</xsl:character-map>



<!-- ************************************************************** -->
<doc:character-map name="alphabetic-presentation-forms" xmlns=""
  from="0xFB00" to="0xFB04">
  <title>Alphabetic Presentation Forms</title>
</doc:character-map>

<xsl:character-map name="alphabetic-presentation-forms">
  <xsl:output-character
   character="&#xfb00;"
   unichar:name="LATIN SMALL LIGATURE FF"
   unichar:entity="fflig"
   string="\(ff"
   />
  <xsl:output-character
   character="&#xfb01;"
   unichar:name="LATIN SMALL LIGATURE FI"
   unichar:entity="filig"
   string="\(fi"
   />
  <xsl:output-character
   character="&#xfb02;"
   unichar:name="LATIN SMALL LIGATURE FL"
   unichar:entity="fllig"
   string="\(fl"
   />
  <xsl:output-character
   character="&#xfb03;"
   unichar:name="LATIN SMALL LIGATURE FFI"
   unichar:entity="ffilig"
   string="\(Fi"
   />
  <xsl:output-character
   character="&#xfb04;"
   unichar:name="LATIN SMALL LIGATURE FFL"
   unichar:entity="ffllig"
   string="\(Fl"
   />
</xsl:character-map>

</xsl:stylesheet>