summaryrefslogtreecommitdiff
path: root/docs/xsl-generic/manpages
diff options
context:
space:
mode:
Diffstat (limited to 'docs/xsl-generic/manpages')
-rw-r--r--docs/xsl-generic/manpages/block.xsl296
-rw-r--r--docs/xsl-generic/manpages/charmap.groff.xsl5985
-rw-r--r--docs/xsl-generic/manpages/docbook.xsl293
-rw-r--r--docs/xsl-generic/manpages/endnotes.xsl535
-rw-r--r--docs/xsl-generic/manpages/html-synop.xsl1605
-rw-r--r--docs/xsl-generic/manpages/info.xsl630
-rw-r--r--docs/xsl-generic/manpages/inline.xsl190
-rw-r--r--docs/xsl-generic/manpages/lists.xsl368
-rw-r--r--docs/xsl-generic/manpages/other.xsl674
-rw-r--r--docs/xsl-generic/manpages/param.xsl167
-rw-r--r--docs/xsl-generic/manpages/profile-docbook.xsl259
-rw-r--r--docs/xsl-generic/manpages/refentry.xsl256
-rw-r--r--docs/xsl-generic/manpages/synop.xsl305
-rw-r--r--docs/xsl-generic/manpages/table.xsl633
-rw-r--r--docs/xsl-generic/manpages/utility.xsl452
15 files changed, 12648 insertions, 0 deletions
diff --git a/docs/xsl-generic/manpages/block.xsl b/docs/xsl-generic/manpages/block.xsl
new file mode 100644
index 00000000..efee63be
--- /dev/null
+++ b/docs/xsl-generic/manpages/block.xsl
@@ -0,0 +1,296 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ exclude-result-prefixes="exsl"
+ version='1.0'>
+
+<!-- ********************************************************************
+ $Id: block.xsl 6843 2007-06-20 12:21:13Z xmldoc $
+ ********************************************************************
+
+ 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:template match="caution|important|note|tip|warning">
+ <xsl:call-template name="nested-section-title"/>
+ <xsl:apply-templates/>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="formalpara">
+ <xsl:variable name="title.wrapper">
+ <xsl:value-of select="normalize-space(title[1])"/>
+ </xsl:variable>
+ <xsl:text>.PP&#10;</xsl:text>
+ <!-- * don't put linebreak after head; instead render it as a "run in" -->
+ <!-- * head, that is, inline, with a period and space following it -->
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="exsl:node-set($title.wrapper)"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <xsl:text>. </xsl:text>
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="formalpara/para">
+ <xsl:call-template name="mixed-block"/>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="para">
+ <!-- * FIXME: Need to extract the ancestor::footnote, etc. checking and -->
+ <!-- * move to named template so that we can call it from templates for -->
+ <!-- * other block elements also -->
+ <xsl:choose>
+ <!-- * If a para is a descendant of a footnote, etc., then indent it -->
+ <!-- * (unless it is the first child, in which case don't generate -->
+ <!-- * anything at all to mark its start). -->
+ <!-- * FIXME: *blurb checking should not be munged in here the way -->
+ <!-- * it currently is; this probably breaks blurb indenting. -->
+ <xsl:when test="ancestor::footnote or
+ ancestor::annotation or
+ ancestor::authorblurb or
+ ancestor::personblurb">
+ <xsl:if test="preceding-sibling::*[not(name() ='')]">
+ <xsl:text>.sp</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.RS 4n</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>.PP</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:call-template name="mixed-block"/>
+ <xsl:if test="ancestor::footnote or
+ ancestor::annotation or
+ ancestor::authorblurb or
+ ancestor::personblurb">
+ <xsl:if test="preceding-sibling::*[not(name() ='')]">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.RE</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="simpara">
+ <xsl:variable name="content">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($content)"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:if test="not(ancestor::authorblurb) and
+ not(ancestor::personblurb)">
+ <xsl:text>.sp&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<!-- * Yes, address, synopsis, and funcsynopsisinfo are verbatim environments. -->
+<xsl:template match="literallayout|programlisting|screen|
+ address|synopsis|funcsynopsisinfo">
+ <xsl:param name="indent">
+ <!-- * Only indent this verbatim if $man.indent.verbatims is -->
+ <!-- * non-zero and it is not a child of a *synopsis element -->
+ <xsl:if test="not($man.indent.verbatims = 0) and
+ not(substring(local-name(..),
+ string-length(local-name(..))-7) = 'synopsis')">
+ <xsl:text>Yes</xsl:text>
+ </xsl:if>
+ </xsl:param>
+
+ <xsl:choose>
+ <!-- * Check to see if this verbatim item is within a parent element that -->
+ <!-- * allows mixed content. -->
+ <!-- * -->
+ <!-- * If it is within a mixed-content parent, then a line space is -->
+ <!-- * already added before it by the mixed-block template, so we don't -->
+ <!-- * need to add one here. -->
+ <!-- * -->
+ <!-- * If it is not within a mixed-content parent, then we need to add a -->
+ <!-- * line space before it. -->
+ <xsl:when test="parent::caption|parent::entry|parent::para|
+ parent::td|parent::th" /> <!-- do nothing -->
+ <xsl:otherwise>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp&#10;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="$indent = 'Yes'">
+ <!-- * start indented section -->
+ <xsl:text>.RS</xsl:text>
+ <xsl:if test="not($man.indent.width = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$man.indent.width"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="self::funcsynopsisinfo">
+ <!-- * All Funcsynopsisinfo content is by default rendered in bold, -->
+ <!-- * because the man(7) man page says this: -->
+ <!-- * -->
+ <!-- * For functions, the arguments are always specified using -->
+ <!-- * italics, even in the SYNOPSIS section, where the rest of -->
+ <!-- * the function is specified in bold -->
+ <!-- * -->
+ <!-- * Look through the contents of the man/man2 and man3 directories -->
+ <!-- * on your system, and you'll see that most existing pages do follow -->
+ <!-- * this "bold everything in function synopsis" rule. -->
+ <!-- * -->
+ <!-- * Users who don't want the bold output can choose to adjust the -->
+ <!-- * man.font.funcsynopsisinfo parameter on their own. So even if you -->
+ <!-- * don't personally like the way it looks, please don't change the -->
+ <!-- * default to be non-bold - because it's a convention that's -->
+ <!-- * followed is the vast majority of existing man pages that document -->
+ <!-- * functions, and we need to follow it by default, like it or no. -->
+ <xsl:text>.ft </xsl:text>
+ <xsl:value-of select="$man.font.funcsynopsisinfo"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.nf&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.fi&#10;</xsl:text>
+ <xsl:text>.ft&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Other verbatims do not need to get bolded -->
+ <xsl:text>.nf&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.fi&#10;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="$indent = 'Yes'">
+ <!-- * end indented section -->
+ <xsl:text>.RE&#10;</xsl:text>
+ </xsl:if>
+ <!-- * if first following sibling node of this verbatim -->
+ <!-- * environment is a text node, output a line of space before it -->
+ <xsl:if test="following-sibling::node()[1][name(.) = '']">
+ <xsl:text>.sp&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template match="table|informaltable">
+ <xsl:apply-templates select="." mode="to.tbl">
+ <!--* we call the to.tbl mode with the "source" param so that we can -->
+ <!--* preserve the context information and pass it down to the -->
+ <!--* named templates that do the actual table processing -->
+ <xsl:with-param name="source" select="ancestor::refentry/refnamediv[1]/refname[1]"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template match="informalexample">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template match="figure|example">
+ <xsl:variable name="param.placement"
+ select="substring-after(normalize-space($formal.title.placement),
+ concat(local-name(.), ' '))"/>
+
+ <xsl:variable name="placement">
+ <xsl:choose>
+ <xsl:when test="contains($param.placement, ' ')">
+ <xsl:value-of select="substring-before($param.placement, ' ')"/>
+ </xsl:when>
+ <xsl:when test="$param.placement = ''">before</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$param.placement"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:call-template name="formal.object">
+ <xsl:with-param name="placement" select="$placement"/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template match="mediaobject">
+ <xsl:text>.sp</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.RS</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.RE&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="imageobject">
+ <xsl:text>[IMAGE]</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="textobject[parent::inlinemediaobject]">
+ <xsl:text>[</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>]</xsl:text>
+</xsl:template>
+
+<xsl:template match="textobject">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="formal.object">
+ <xsl:param name="placement" select="'before'"/>
+ <xsl:param name="class" select="local-name(.)"/>
+
+ <xsl:choose>
+ <xsl:when test="$placement = 'before'">
+ <xsl:call-template name="formal.object.heading"/>
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates/>
+ <xsl:call-template name="formal.object.heading"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="formal.object.heading">
+ <xsl:param name="object" select="."/>
+ <xsl:param name="title">
+ <xsl:apply-templates select="$object" mode="object.title.markup.textonly"/>
+ </xsl:param>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="exsl:node-set($title)"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<!-- * suppress abstract -->
+<xsl:template match="abstract"/>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/charmap.groff.xsl b/docs/xsl-generic/manpages/charmap.groff.xsl
new file mode 100644
index 00000000..7587659f
--- /dev/null
+++ b/docs/xsl-generic/manpages/charmap.groff.xsl
@@ -0,0 +1,5985 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<xsl:stylesheet version="2.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:u="http://docbook.sf.net/xmlns/unichar/1.0"
+ exclude-result-prefixes="u">
+
+<!-- ********************************************************************
+ $Id: charmap.groff.xsl 6528 2007-01-19 08:54:04Z xmldoc $
+ ********************************************************************
+
+ 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:character-map name="groff">
+
+ <!-- * *************************************************************** -->
+ <!-- * Commentary -->
+ <!-- * *************************************************************** -->
+ <!-- * -->
+ <!-- * This file maps a selection of Unicode symbols and special -->
+ <!-- * characters (about 800) to corresponding groff escape sequences.-->
+ <!-- * -->
+ <!-- * Although the format of this file follows the "character map" -->
+ <!-- * format described in the XSLT 2.0 specification[1], the file can -->
+ <!-- * also 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, and to make -->
+ <!-- * it possible to create subsets of it at run time, it uses the -->
+ <!-- * following "extension attributes" (in the "unichar" namespace): -->
+ <!-- * -->
+ <!-- * - u:name = ISO character name (e.g., "OHM SIGN") -->
+ <!-- * - u:entity = ISO entity name (e.g., "ohm") -->
+ <!-- * - u:block = Unicode block name (e.g., "Letterlike Symbols") -->
+ <!-- * - u:class = character class (e.g., "bullets") -->
+ <!-- * -->
+ <!-- * 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 -->
+ <!-- * -->
+ <!-- * *************************************************************** -->
+ <!-- * Acknowledgements -->
+ <!-- * *************************************************************** -->
+ <!-- * The following references were consulted when selecting roff -->
+ <!-- * mappings and character information: -->
+ <!-- * -->
+ <!-- * - 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] -->
+ <!-- * - Zvon Character Search[7] -->
+ <!-- * -->
+ <!-- * [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/ -->
+ <!-- * [7] http://zvon.org/other/charSearch/PHP/search.php -->
+ <!-- * -->
+ <!-- * 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"[8] elisp distro, and running a -->
+ <!-- * script on it to convert it to XML. -->
+ <!-- * -->
+ <!-- * [8] http://nwalsh.com/emacs/xmlchars/ -->
+ <!-- * -->
+ <!-- * The idea for implementing a character map in the DocBook Project -->
+ <!-- * manpages system was inspired by Steve Cheng's docbook2x[9]; -->
+ <!-- * in particular, its "utf8trans" utility and character-map system. -->
+ <!-- * -->
+ <!-- * [9] 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
+ character="&#x00a0;"
+ u:name="NO-BREAK SPACE"
+ u:entity="nbsp"
+ string="\ "
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00a1;"
+ u:name="INVERTED EXCLAMATION MARK"
+ u:entity="iexcl"
+ string="\(r!"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00a2;"
+ u:name="CENT SIGN"
+ u:entity="cent"
+ string="\(ct"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00a3;"
+ u:name="POUND SIGN"
+ u:entity="pound"
+ string="\(Po"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00a4;"
+ u:name="CURRENCY SIGN"
+ u:entity="curren"
+ string="\(Cs"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00a5;"
+ u:name="YEN SIGN"
+ u:entity="yen"
+ string="\(Ye"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00a6;"
+ u:name="BROKEN BAR"
+ u:entity="brvbar"
+ string="\(bb"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00a7;"
+ u:name="SECTION SIGN"
+ u:entity="sect"
+ string="\(sc"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00a8;"
+ u:name="DIAERESIS"
+ u:entity="Dot"
+ string="\(ad"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00a9;"
+ u:name="COPYRIGHT SIGN"
+ u:entity="copy"
+ string="\(co"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00aa;"
+ u:name="FEMININE ORDINAL INDICATOR"
+ u:entity="ordf"
+ string="\(Of"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00ab;"
+ u:name="LEFT-POINTING DOUBLE ANGLE QUOTATION MARK"
+ u:entity="laquo"
+ string="\(Fo"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00ac;"
+ u:name="NOT SIGN"
+ u:entity="not"
+ string="\(no"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <!-- * groff_char(7) man page sayxsl: "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
+ character="&#x00ad;"
+ u:name="SOFT HYPHEN"
+ u:entity="shy"
+ string="\%"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00ae;"
+ u:name="REGISTERED SIGN"
+ u:entity="reg"
+ string="\(rg"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00af;"
+ u:name="MACRON"
+ u:entity="macr"
+ string="\(a-"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00b0;"
+ u:name="DEGREE SIGN"
+ u:entity="deg"
+ string="\(de"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00b1;"
+ u:name="PLUS-MINUS SIGN"
+ u:entity="plusmn"
+ string="\(+-"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00b2;"
+ u:name="SUPERSCRIPT TWO"
+ u:entity="sup2"
+ string="\(S2"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00b3;"
+ u:name="SUPERSCRIPT THREE"
+ u:entity="sup3"
+ string="\(S3"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00b4;"
+ u:name="ACUTE ACCENT"
+ u:entity="acute"
+ string="\(aa"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00b5;"
+ u:name="MICRO SIGN"
+ u:entity="micro"
+ string="\(mc"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00b6;"
+ u:name="PILCROW SIGN"
+ u:entity="para"
+ string="\(ps"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <!-- * 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
+ character="&#x00b7;"
+ u:name="MIDDLE DOT"
+ u:entity="middot"
+ string="\(md"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00b8;"
+ u:name="CEDILLA"
+ u:entity="cedil"
+ string="\(ac"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00b9;"
+ u:name="SUPERSCRIPT ONE"
+ u:entity="sup1"
+ string="\(S1"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00ba;"
+ u:name="MASCULINE ORDINAL INDICATOR"
+ u:entity="ordm"
+ string="\(Om"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00bb;"
+ u:name="RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK"
+ u:entity="raquo"
+ string="\(Fc"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00bc;"
+ u:name="VULGAR FRACTION ONE QUARTER"
+ u:entity="frac14"
+ string="\(14"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00bd;"
+ u:name="VULGAR FRACTION ONE HALF"
+ u:entity="frac12"
+ string="\(12"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00be;"
+ u:name="VULGAR FRACTION THREE QUARTERS"
+ u:entity="frac34"
+ string="\(34"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00bf;"
+ u:name="INVERTED QUESTION MARK"
+ u:entity="iquest"
+ string="\(r?"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00c0;"
+ u:name="LATIN CAPITAL LETTER A WITH GRAVE"
+ u:entity="Agrave"
+ string="\(`A"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00c1;"
+ u:name="LATIN CAPITAL LETTER A WITH ACUTE"
+ u:entity="Aacute"
+ string="\('A"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00c2;"
+ u:name="LATIN CAPITAL LETTER A WITH CIRCUMFLEX"
+ u:entity="Acirc"
+ string="\(^A"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00c3;"
+ u:name="LATIN CAPITAL LETTER A WITH TILDE"
+ u:entity="Atilde"
+ string="\(~A"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00c4;"
+ u:name="LATIN CAPITAL LETTER A WITH DIAERESIS"
+ u:entity="Auml"
+ string="\(:A"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00c5;"
+ u:name="LATIN CAPITAL LETTER A WITH RING ABOVE"
+ u:entity="Aring"
+ string="\(oA"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00c6;"
+ u:name="LATIN CAPITAL LETTER AE"
+ u:entity="AElig"
+ string="\(AE"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00c7;"
+ u:name="LATIN CAPITAL LETTER C WITH CEDILLA"
+ u:entity="Ccedil"
+ string="\(,C"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00c8;"
+ u:name="LATIN CAPITAL LETTER E WITH GRAVE"
+ u:entity="Egrave"
+ string="\(`E"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00c9;"
+ u:name="LATIN CAPITAL LETTER E WITH ACUTE"
+ u:entity="Eacute"
+ string="\('E"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00ca;"
+ u:name="LATIN CAPITAL LETTER E WITH CIRCUMFLEX"
+ u:entity="Ecirc"
+ string="\(^E"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00cb;"
+ u:name="LATIN CAPITAL LETTER E WITH DIAERESIS"
+ u:entity="Euml"
+ string="\(:E"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00cc;"
+ u:name="LATIN CAPITAL LETTER I WITH GRAVE"
+ u:entity="Igrave"
+ string="\(`I"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00cd;"
+ u:name="LATIN CAPITAL LETTER I WITH ACUTE"
+ u:entity="Iacute"
+ string="\('I"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00ce;"
+ u:name="LATIN CAPITAL LETTER I WITH CIRCUMFLEX"
+ u:entity="Icirc"
+ string="\(^I"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00cf;"
+ u:name="LATIN CAPITAL LETTER I WITH DIAERESIS"
+ u:entity="Iuml"
+ string="\(:I"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00d0;"
+ u:name="LATIN CAPITAL LETTER ETH"
+ u:entity="ETH"
+ string="\(-D"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00d1;"
+ u:name="LATIN CAPITAL LETTER N WITH TILDE"
+ u:entity="Ntilde"
+ string="\(~N"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00d2;"
+ u:name="LATIN CAPITAL LETTER O WITH GRAVE"
+ u:entity="Ograve"
+ string="\(`O"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00d3;"
+ u:name="LATIN CAPITAL LETTER O WITH ACUTE"
+ u:entity="Oacute"
+ string="\('O"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00d4;"
+ u:name="LATIN CAPITAL LETTER O WITH CIRCUMFLEX"
+ u:entity="Ocirc"
+ string="\(^O"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00d5;"
+ u:name="LATIN CAPITAL LETTER O WITH TILDE"
+ u:entity="Otilde"
+ string="\(~O"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00d6;"
+ u:name="LATIN CAPITAL LETTER O WITH DIAERESIS"
+ u:entity="Ouml"
+ string="\(:O"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00d7;"
+ u:name="MULTIPLICATION SIGN"
+ u:entity="times"
+ string="\(mu"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00d8;"
+ u:name="LATIN CAPITAL LETTER O WITH STROKE"
+ u:entity="Oslash"
+ string="\(/O"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00d9;"
+ u:name="LATIN CAPITAL LETTER U WITH GRAVE"
+ u:entity="Ugrave"
+ string="\(`U"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00da;"
+ u:name="LATIN CAPITAL LETTER U WITH ACUTE"
+ u:entity="Uacute"
+ string="\('U"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00db;"
+ u:name="LATIN CAPITAL LETTER U WITH CIRCUMFLEX"
+ u:entity="Ucirc"
+ string="\(^U"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00dc;"
+ u:name="LATIN CAPITAL LETTER U WITH DIAERESIS"
+ u:entity="Uuml"
+ string="\(:U"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00dd;"
+ u:name="LATIN CAPITAL LETTER Y WITH ACUTE"
+ u:entity="Yacute"
+ string="\('Y"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00de;"
+ u:name="LATIN CAPITAL LETTER THORN"
+ u:entity="THORN"
+ string="\(TP"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00df;"
+ u:name="LATIN SMALL LETTER SHARP S"
+ u:entity="szlig"
+ string="\(ss"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e0;"
+ u:name="LATIN SMALL LETTER A WITH GRAVE"
+ u:entity="agrave"
+ string="\(`a"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e1;"
+ u:name="LATIN SMALL LETTER A WITH ACUTE"
+ u:entity="aacute"
+ string="\('a"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e2;"
+ u:name="LATIN SMALL LETTER A WITH CIRCUMFLEX"
+ u:entity="acirc"
+ string="\(^a"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e3;"
+ u:name="LATIN SMALL LETTER A WITH TILDE"
+ u:entity="atilde"
+ string="\(~a"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e4;"
+ u:name="LATIN SMALL LETTER A WITH DIAERESIS"
+ u:entity="auml"
+ string="\(:a"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e5;"
+ u:name="LATIN SMALL LETTER A WITH RING ABOVE"
+ u:entity="aring"
+ string="\(oa"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e6;"
+ u:name="LATIN SMALL LETTER AE"
+ u:entity="aelig"
+ string="\(ae"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e7;"
+ u:name="LATIN SMALL LETTER C WITH CEDILLA"
+ u:entity="ccedil"
+ string="\(,c"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e8;"
+ u:name="LATIN SMALL LETTER E WITH GRAVE"
+ u:entity="egrave"
+ string="\(`e"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00e9;"
+ u:name="LATIN SMALL LETTER E WITH ACUTE"
+ u:entity="eacute"
+ string="\('e"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00ea;"
+ u:name="LATIN SMALL LETTER E WITH CIRCUMFLEX"
+ u:entity="ecirc"
+ string="\(^e"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00eb;"
+ u:name="LATIN SMALL LETTER E WITH DIAERESIS"
+ u:entity="euml"
+ string="\(:e"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00ec;"
+ u:name="LATIN SMALL LETTER I WITH GRAVE"
+ u:entity="igrave"
+ string="\(`i"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00ed;"
+ u:name="LATIN SMALL LETTER I WITH ACUTE"
+ u:entity="iacute"
+ string="\('i"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00ee;"
+ u:name="LATIN SMALL LETTER I WITH CIRCUMFLEX"
+ u:entity="icirc"
+ string="\(^i"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00ef;"
+ u:name="LATIN SMALL LETTER I WITH DIAERESIS"
+ u:entity="iuml"
+ string="\(:i"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00f0;"
+ u:name="LATIN SMALL LETTER ETH"
+ u:entity="eth"
+ string="\(Sd"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00f1;"
+ u:name="LATIN SMALL LETTER N WITH TILDE"
+ u:entity="ntilde"
+ string="\(~n"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00f2;"
+ u:name="LATIN SMALL LETTER O WITH GRAVE"
+ u:entity="ograve"
+ string="\(`o"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00f3;"
+ u:name="LATIN SMALL LETTER O WITH ACUTE"
+ u:entity="oacute"
+ string="\('o"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00f4;"
+ u:name="LATIN SMALL LETTER O WITH CIRCUMFLEX"
+ u:entity="ocirc"
+ string="\(^o"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00f5;"
+ u:name="LATIN SMALL LETTER O WITH TILDE"
+ u:entity="otilde"
+ string="\(~o"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00f6;"
+ u:name="LATIN SMALL LETTER O WITH DIAERESIS"
+ u:entity="ouml"
+ string="\(:o"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00f7;"
+ u:name="DIVISION SIGN"
+ u:entity="divide"
+ string="\(di"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="symbols"
+ />
+ <xsl:output-character
+ character="&#x00f8;"
+ u:name="LATIN SMALL LETTER O WITH STROKE"
+ u:entity="oslash"
+ string="\(/o"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00f9;"
+ u:name="LATIN SMALL LETTER U WITH GRAVE"
+ u:entity="ugrave"
+ string="\(`u"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00fa;"
+ u:name="LATIN SMALL LETTER U WITH ACUTE"
+ u:entity="uacute"
+ string="\('u"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00fb;"
+ u:name="LATIN SMALL LETTER U WITH CIRCUMFLEX"
+ u:entity="ucirc"
+ string="\(^u"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00fc;"
+ u:name="LATIN SMALL LETTER U WITH DIAERESIS"
+ u:entity="uuml"
+ string="\(:u"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00fd;"
+ u:name="LATIN SMALL LETTER Y WITH ACUTE"
+ u:entity="yacute"
+ string="\('y"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00fe;"
+ u:name="LATIN SMALL LETTER THORN"
+ u:entity="thorn"
+ string="\(Tp"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <xsl:output-character
+ character="&#x00ff;"
+ u:name="LATIN SMALL LETTER Y WITH DIAERESIS"
+ u:entity="yuml"
+ string="\(:y"
+ u:block="C1 Controls And Latin-1 Supplement (Latin-1 Supplement)"
+ u:class="letters"
+ />
+ <!-- * **************************************************************** -->
+ <!-- * 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
+ character="&#x0131;"
+ u:name="LATIN SMALL LETTER DOTLESS I"
+ u:entity="inodot"
+ string="\(.i"
+ u:block="Latin Extended-A"
+ />
+ <xsl:output-character
+ character="&#x0132;"
+ u:name="LATIN CAPITAL LIGATURE IJ"
+ u:entity="IJlig"
+ string="\(IJ"
+ u:block="Latin Extended-A"
+ />
+ <xsl:output-character
+ character="&#x0133;"
+ u:name="LATIN SMALL LIGATURE IJ"
+ u:entity="ijlig"
+ string="\(ij"
+ u:block="Latin Extended-A"
+ />
+ <xsl:output-character
+ character="&#x0141;"
+ u:name="LATIN CAPITAL LETTER L WITH STROKE"
+ u:entity="Lstrok"
+ string="\(/L"
+ u:block="Latin Extended-A"
+ />
+ <xsl:output-character
+ character="&#x0142;"
+ u:name="LATIN SMALL LETTER L WITH STROKE"
+ u:entity="lstrok"
+ string="\(/l"
+ u:block="Latin Extended-A"
+ />
+ <xsl:output-character
+ character="&#x0152;"
+ u:name="LATIN CAPITAL LIGATURE OE"
+ u:entity="OElig"
+ string="\(OE"
+ u:block="Latin Extended-A"
+ />
+ <xsl:output-character
+ character="&#x0153;"
+ u:name="LATIN SMALL LIGATURE OE"
+ u:entity="oelig"
+ string="\(oe"
+ u:block="Latin Extended-A"
+ />
+ <xsl:output-character
+ character="&#x0192;"
+ u:name="LATIN SMALL LETTER F WITH HOOK"
+ u:entity="fnof"
+ string="\(Fn"
+ u:block="Latin Extended-B"
+ />
+ <xsl:output-character
+ character="&#x02c6;"
+ u:name="MODIFIER LETTER CIRCUMFLEX ACCENT"
+ u:entity="circ"
+ string="\(a^"
+ u:block="Spacing Modifier Letters"
+ />
+ <xsl:output-character
+ character="&#x02c7;"
+ u:name="CARON"
+ u:entity="caron"
+ string="\(ac"
+ u:block="Spacing Modifier Letters"
+ />
+ <xsl:output-character
+ character="&#x02c9;"
+ u:name="MODIFIER LETTER MACRON"
+ string="\(a-"
+ u:block="Spacing Modifier Letters"
+ />
+ <xsl:output-character
+ character="&#x02d8;"
+ u:name="BREVE"
+ u:entity="breve"
+ string="\(ab"
+ u:block="Spacing Modifier Letters"
+ />
+<!-- * there does not seem to by any roff equivalent for "dot above" -->
+<!-- * <xsl:output-character -->
+<!-- * character="&#x02d9;" -->
+<!-- * u:name="DOT ABOVE" -->
+<!-- * u:entity="dot" -->
+<!-- * /> -->
+ <xsl:output-character
+ character="&#x02da;"
+ u:name="RING ABOVE"
+ u:entity="ring"
+ string="\(ao"
+ u:block="Spacing Modifier Letters"
+ />
+ <xsl:output-character
+ character="&#x02db;"
+ u:name="OGONEK"
+ u:entity="ogon"
+ string="\(ho"
+ u:block="Spacing Modifier Letters"
+ />
+ <!-- groff_char(7) calls Unicode x02dd a "Hungarian umlaut" -->
+ <xsl:output-character
+ character="&#x02dd;"
+ u:name="DOUBLE ACUTE ACCENT"
+ u:entity="dblac"
+ string='\(a"'
+ u:block="Spacing Modifier Letters"
+ />
+
+ <!-- * **************************************************************** -->
+ <!-- * 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
+ character="&#x0391;"
+ u:name="GREEK CAPITAL LETTER ALPHA"
+ u:entity="Agr"
+ string="\(*A)"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x0392;"
+ u:name="GREEK CAPITAL LETTER BETA"
+ u:entity="Bgr"
+ string="\(*B"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x0393;"
+ u:name="GREEK CAPITAL LETTER GAMMA"
+ u:entity="Gamma"
+ string="\(*G"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x0394;"
+ u:name="GREEK CAPITAL LETTER DELTA"
+ u:entity="Delta"
+ string="\(*D"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x0395;"
+ u:name="GREEK CAPITAL LETTER EPSILON"
+ u:entity="Egr"
+ string="\(*E"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x0396;"
+ u:name="GREEK CAPITAL LETTER ZETA"
+ u:entity="Zgr"
+ string="\(*Z"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x0397;"
+ u:name="GREEK CAPITAL LETTER ETA"
+ u:entity="EEgr"
+ string="\(*Y"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x0398;"
+ u:name="GREEK CAPITAL LETTER THETA"
+ u:entity="THgr"
+ string="\(*H"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x0399;"
+ u:name="GREEK CAPITAL LETTER IOTA"
+ u:entity="Igr"
+ string="\(*I"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x039a;"
+ u:name="GREEK CAPITAL LETTER KAPPA"
+ u:entity="Kgr"
+ string="\(*K"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x039b;"
+ u:name="GREEK CAPITAL LETTER LAMDA"
+ u:entity="Lambda"
+ string="\(*L"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x039c;"
+ u:name="GREEK CAPITAL LETTER MU"
+ u:entity="Mgr"
+ string="\(*M"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x039d;"
+ u:name="GREEK CAPITAL LETTER NU"
+ u:entity="Ngr"
+ string="\(*N"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x039e;"
+ u:name="GREEK CAPITAL LETTER XI"
+ u:entity="Xgr"
+ string="\(*C"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x039f;"
+ u:name="GREEK CAPITAL LETTER OMICRON"
+ u:entity="Ogr"
+ string="\(*O"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03a0;"
+ u:name="GREEK CAPITAL LETTER PI"
+ u:entity="Pgr"
+ string="\(*P"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03a1;"
+ u:name="GREEK CAPITAL LETTER RHO"
+ u:entity="Rgr"
+ string="\(*R"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03a3;"
+ u:name="GREEK CAPITAL LETTER SIGMA"
+ u:entity="Sgr"
+ string="\(*S"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03a4;"
+ u:name="GREEK CAPITAL LETTER TAU"
+ u:entity="Tgr"
+ string="\(*T"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03a5;"
+ u:name="GREEK CAPITAL LETTER UPSILON"
+ u:entity="Ugr"
+ string="\(*U"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03a6;"
+ u:name="GREEK CAPITAL LETTER PHI"
+ u:entity="PHgr"
+ string="\(*F"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03a7;"
+ u:name="GREEK CAPITAL LETTER CHI"
+ u:entity="KHgr"
+ string="\(*X"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03a8;"
+ u:name="GREEK CAPITAL LETTER PSI"
+ u:entity="PSgr"
+ string="\(*Q"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03a9;"
+ u:name="GREEK CAPITAL LETTER OMEGA"
+ u:entity="OHgr"
+ string="\(*W"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03aa;"
+ u:name="GREEK CAPITAL LETTER IOTA WITH DIALYTIKA"
+ u:entity="Idigr"
+ string="\(*I"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03ab;"
+ u:name="GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA"
+ u:entity="Udigr"
+ string="\(*U"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03ac;"
+ u:name="GREEK SMALL LETTER ALPHA WITH TONOS"
+ u:entity="aacgr"
+ string="\(*a"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03ad;"
+ u:name="GREEK SMALL LETTER EPSILON WITH TONOS"
+ u:entity="eacgr"
+ string="\(*e"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03ae;"
+ u:name="GREEK SMALL LETTER ETA WITH TONOS"
+ u:entity="eeacgr"
+ string="\(*y"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03af;"
+ u:name="GREEK SMALL LETTER IOTA WITH TONOS"
+ u:entity="iacgr"
+ string="\(*i"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b0;"
+ u:name="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS"
+ u:entity="udiagr"
+ string="\(*u"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b1;"
+ u:name="GREEK SMALL LETTER ALPHA"
+ u:entity="agr"
+ string="\(*a"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b2;"
+ u:name="GREEK SMALL LETTER BETA"
+ u:entity="beta"
+ string="\(*b"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b3;"
+ u:name="GREEK SMALL LETTER GAMMA"
+ u:entity="gamma"
+ string="\(*g"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b4;"
+ u:name="GREEK SMALL LETTER DELTA"
+ u:entity="delta"
+ string="\(*d"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b5;"
+ u:name="GREEK SMALL LETTER EPSILON"
+ u:entity="epsi"
+ string="\(*e"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b6;"
+ u:name="GREEK SMALL LETTER ZETA"
+ u:entity="zeta"
+ string="\(*z"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b7;"
+ u:name="GREEK SMALL LETTER ETA"
+ u:entity="eegr"
+ string="\(*y"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b8;"
+ u:name="GREEK SMALL LETTER THETA"
+ u:entity="thetas"
+ string="\(*h"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03b9;"
+ u:name="GREEK SMALL LETTER IOTA"
+ u:entity="igr"
+ string="\(*i"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03ba;"
+ u:name="GREEK SMALL LETTER KAPPA"
+ u:entity="kappa"
+ string="\(*k"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03bb;"
+ u:name="GREEK SMALL LETTER LAMDA"
+ u:entity="lambda"
+ string="\(*l"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03bc;"
+ u:name="GREEK SMALL LETTER MU"
+ u:entity="mgr"
+ string="\(*m"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03bd;"
+ u:name="GREEK SMALL LETTER NU"
+ u:entity="ngr"
+ string="\(*n"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03be;"
+ u:name="GREEK SMALL LETTER XI"
+ u:entity="xgr"
+ string="\(*c"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03bf;"
+ u:name="GREEK SMALL LETTER OMICRON"
+ u:entity="ogr"
+ string="\(*o"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c0;"
+ u:name="GREEK SMALL LETTER PI"
+ u:entity="pgr"
+ string="\(*p"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c1;"
+ u:name="GREEK SMALL LETTER RHO"
+ u:entity="rgr"
+ string="\(*r"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c2;"
+ u:name="GREEK SMALL LETTER FINAL SIGMA"
+ u:entity="sfgr"
+ string="\(ts"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c3;"
+ u:name="GREEK SMALL LETTER SIGMA"
+ u:entity="sgr"
+ string="\(*s"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c4;"
+ u:name="GREEK SMALL LETTER TAU"
+ u:entity="tau"
+ string="\(*t"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c5;"
+ u:name="GREEK SMALL LETTER UPSILON"
+ u:entity="ugr"
+ string="\(*u"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c6;"
+ u:name="GREEK SMALL LETTER PHI"
+ u:entity="phgr"
+ string="\(*f"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c7;"
+ u:name="GREEK SMALL LETTER CHI"
+ u:entity="chi"
+ string="\(*x"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c8;"
+ u:name="GREEK SMALL LETTER PSI"
+ u:entity="psgr"
+ string="\(*q"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03c9;"
+ u:name="GREEK SMALL LETTER OMEGA"
+ u:entity="ohgr"
+ string="\(*w"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03ca;"
+ u:name="GREEK SMALL LETTER IOTA WITH DIALYTIKA"
+ u:entity="idigr"
+ string="\(*i"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03cb;"
+ u:name="GREEK SMALL LETTER UPSILON WITH DIALYTIKA"
+ u:entity="udigr"
+ string="\(*u"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03cc;"
+ u:name="GREEK SMALL LETTER OMICRON WITH TONOS"
+ u:entity="oacgr"
+ string="\(*o"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03cd;"
+ u:name="GREEK SMALL LETTER UPSILON WITH TONOS"
+ u:entity="uacgr"
+ string="\(*u"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03ce;"
+ u:name="GREEK SMALL LETTER OMEGA WITH TONOS"
+ u:entity="ohacgr"
+ string="\(*w"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03d0;"
+ u:name="GREEK BETA SYMBOL"
+ string="\(*B"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03d1;"
+ u:name="GREEK THETA SYMBOL"
+ u:entity="thetav"
+ string="\(+h"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03d2;"
+ u:name="GREEK UPSILON WITH HOOK SYMBOL"
+ u:entity="Upsi"
+ string="\(*U"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03d3;"
+ u:name="GREEK UPSILON WITH ACUTE AND HOOK SYMBOL"
+ string="\(*U"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03d4;"
+ u:name="GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL"
+ string="\(*U"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03d5;"
+ u:name="GREEK PHI SYMBOL"
+ u:entity="phis"
+ string="\(+f"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03d6;"
+ u:name="GREEK PI SYMBOL"
+ u:entity="piv"
+ string="\(+p"
+ u:block="Greek and Coptic"
+ />
+ <!-- no mappings for remaining chars x03d7 to x03ef -->
+ <xsl:output-character
+ character="&#x03f0;"
+ u:name="GREEK KAPPA SYMBOL"
+ u:entity="kappav"
+ string="(*k"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03f1;"
+ u:name="GREEK RHO SYMBOL"
+ u:entity="rhov"
+ string="\(*r"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03f2;"
+ u:name="GREEK LUNATE SIGMA SYMBOL"
+ string="\(*s"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03f4;"
+ u:name="GREEK CAPITAL THETA SYMBOL"
+ string="\(*H"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03f5;"
+ u:name="GREEK LUNATE EPSILON SYMBOL"
+ string="\(*e"
+ u:block="Greek and Coptic"
+ />
+ <xsl:output-character
+ character="&#x03f6;"
+ u:name="GREEK REVERSED LUNATE EPSILON SYMBOL"
+ u:entity="bepsi"
+ string="\(*e"
+ u:block="Greek and Coptic"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * 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
+ character="&#x2000;"
+ u:name="EN QUAD"
+ string="\0"
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <xsl:output-character
+ character="&#x2001;"
+ u:name="EM QUAD"
+ string="\0\0"
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <xsl:output-character
+ character="&#x2002;"
+ u:name="EN SPACE"
+ u:entity="ensp"
+ string="\0"
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <xsl:output-character
+ character="&#x2003;"
+ u:name="EM SPACE"
+ u:entity="emsp"
+ string="\0\0"
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <!-- * roughly same width as a normal space -->
+ <xsl:output-character
+ character="&#x2004;"
+ u:name="THREE-PER-EM SPACE"
+ u:entity="emsp13"
+ string=" "
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <!-- * roughly same width as a normal space -->
+ <xsl:output-character
+ character="&#x2005;"
+ u:name="FOUR-PER-EM SPACE"
+ u:entity="emsp14"
+ string=" "
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <!-- * roughly same width as a normal space -->
+ <xsl:output-character
+ character="&#x2006;"
+ u:name="SIX-PER-EM SPACE"
+ string=" "
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <!-- * same as roff "digit" space -->
+ <xsl:output-character
+ character="&#x2007;"
+ u:name="FIGURE SPACE"
+ u:entity="numsp"
+ string="\0"
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <!-- * punctuation space in most fonts is actually closer to a normal -->
+ <!-- * space than it is to a thin space -->
+ <xsl:output-character
+ character="&#x2008;"
+ u:name="PUNCTUATION SPACE"
+ u:entity="puncsp"
+ string=" "
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <!-- * 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
+ character="&#x2009;"
+ u:name="THIN SPACE"
+ u:entity="thinsp"
+ string=" "
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <!-- * 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
+ character="&#x200a;"
+ u:name="HAIR SPACE"
+ u:entity="hairsp"
+ string="\&amp;"
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <!-- * map to roff "zero-width break point" -->
+ <xsl:output-character
+ character="&#x200b;"
+ u:name="ZERO WIDTH SPACE"
+ string="\:"
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+
+ <!-- * 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 -->
+ <!-- * character="&#x200c;" -->
+ <!-- * u:name="ZERO WIDTH NON-JOINER" -->
+ <!-- * string="\:" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x200d;" -->
+ <!-- * u:name="ZERO WIDTH JOINER" -->
+ <!-- * string="\&amp;" -->
+ <!-- * /> -->
+ <!-- * non-visible -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x200e;" -->
+ <!-- * u:name="LEFT-TO-RIGHT MARK" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x200f;" -->
+ <!-- * u:name="RIGHT-TO-LEFT MARK" -->
+ <!-- * /> -->
+
+ <!-- * .................................................... -->
+ <!-- * next, hyphens and various dashes, bars, underscores -->
+ <xsl:output-character
+ character="&#x2010;"
+ u:name="HYPHEN"
+ u:entity="hyphen"
+ string="\(hy"
+ u:block="General Punctuation"
+ u:class="dashes"
+ />
+ <!-- * although the groff docs do not make it clear, testing -->
+ <!-- * indicates that the only reliable way to make a non-breaking -->
+ <!-- * hyphen is to put just a backslash in front of it. -->
+ <!-- * -->
+ <!-- * based on testing, it also appears that no character is needed -->
+ <!-- * after the hyphen in order to make it non-breaking -->
+ <xsl:output-character
+ character="&#x2011;"
+ u:name="NON-BREAKING HYPHEN"
+ string="\-"
+ u:block="General Punctuation"
+ u:class="dashes"
+ />
+ <!-- * roughly same width as en dash -->
+ <xsl:output-character
+ character="&#x2012;"
+ u:name="FIGURE DASH"
+ string="\(en"
+ u:block="General Punctuation"
+ u:class="dashes"
+ />
+ <xsl:output-character
+ character="&#x2013;"
+ u:name="EN DASH"
+ u:entity="ndash"
+ string="\(en"
+ u:block="General Punctuation"
+ u:class="dashes"
+ />
+ <xsl:output-character
+ character="&#x2014;"
+ u:name="EM DASH"
+ u:entity="mdash"
+ string="\(em"
+ u:block="General Punctuation"
+ u:class="dashes"
+ />
+ <!-- * seems roughly same width as em dash -->
+ <xsl:output-character
+ character="&#x2015;"
+ u:name="HORIZONTAL BAR"
+ u:entity="horbar"
+ string="\(em"
+ u:block="General Punctuation"
+ u:class="dashes"
+ />
+ <xsl:output-character
+ character="&#x2016;"
+ u:name="DOUBLE VERTICAL LINE"
+ u:entity="Verbar"
+ string="\(bv\(bv"
+ u:block="General Punctuation"
+ />
+ <!-- * no double-underscore in roff; so just make it a single -->
+ <!-- * underscore -->
+ <xsl:output-character
+ character="&#x2017;"
+ u:name="DOUBLE LOW LINE"
+ string="_"
+ u:block="General Punctuation"
+ />
+
+ <!-- * .................................................... -->
+ <!-- * various quotation marks -->
+ <xsl:output-character
+ character="&#x2018;"
+ u:name="LEFT SINGLE QUOTATION MARK"
+ u:entity="lsquo"
+ string="\(oq"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+ <xsl:output-character
+ character="&#x2019;"
+ u:name="RIGHT SINGLE QUOTATION MARK"
+ u:entity="rsquo"
+ string="\(cq"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+ <xsl:output-character
+ character="&#x201a;"
+ u:name="SINGLE LOW-9 QUOTATION MARK"
+ u:entity="lsquor"
+ string="\(bq"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+ <!-- * no roff equiv; treat same as lsquo -->
+ <xsl:output-character
+ character="&#x201b;"
+ u:name="SINGLE HIGH-REVERSED-9 QUOTATION MARK"
+ string="\(oq"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+ <xsl:output-character
+ character="&#x201c;"
+ u:name="LEFT DOUBLE QUOTATION MARK"
+ u:entity="ldquo"
+ string="\(lq"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+ <xsl:output-character
+ character="&#x201d;"
+ u:name="RIGHT DOUBLE QUOTATION MARK"
+ u:entity="rdquo"
+ string="\(rq"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+ <xsl:output-character
+ character="&#x201e;"
+ u:name="DOUBLE LOW-9 QUOTATION MARK"
+ u:entity="ldquor"
+ string="\(Bq"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+ <!-- * no roff equiv; treat same as rdquo -->
+ <xsl:output-character
+ character="&#x201f;"
+ u:name="DOUBLE HIGH-REVERSED-9 QUOTATION MARK"
+ string="\(rq"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+
+ <!-- * .................................................... -->
+ <!-- * various symbols -->
+ <xsl:output-character
+ character="&#x2020;"
+ u:name="DAGGER"
+ u:entity="dagger"
+ string="\(dg"
+ u:block="General Punctuation_daggers"
+ />
+ <xsl:output-character
+ character="&#x2021;"
+ u:name="DOUBLE DAGGER"
+ u:entity="Dagger"
+ string="\(dd"
+ u:block="General Punctuation_daggers"
+ />
+ <xsl:output-character
+ character="&#x2022;"
+ u:name="BULLET"
+ u:entity="bull"
+ string="\(bu"
+ u:block="General Punctuation"
+ u:class="bullets"
+ />
+ <!-- * no roff equiv -->
+ <xsl:output-character
+ character="&#x2023;"
+ u:name="TRIANGULAR BULLET"
+ string=">\&amp;"
+ u:block="General Punctuation"
+ u:class="bullets"
+ />
+ <!-- * no roff equiv -->
+ <xsl:output-character
+ character="&#x2024;"
+ u:name="ONE DOT LEADER"
+ string="\&amp;."
+ u:block="General Punctuation_leaders"
+ />
+ <!-- * no roff equiv -->
+ <xsl:output-character
+ character="&#x2025;"
+ u:name="TWO DOT LEADER"
+ u:entity="nldr"
+ string="\&amp;.."
+ u:block="General Punctuation_leaders"
+ />
+ <!-- * no roff equiv -->
+ <xsl:output-character
+ character="&#x2026;"
+ u:name="HORIZONTAL ELLIPSIS"
+ u:entity="hellip"
+ string="\&amp;..."
+ u:block="General Punctuation"
+ />
+ <!-- what is "hyphenation point" used for? looks like middot to me... -->
+ <xsl:output-character
+ character="&#x2027;"
+ u:name="HYPHENATION POINT"
+ string="\(md"
+ u:block="General Punctuation"
+ />
+ <!-- * Begin x2028 to x202e - no idea what to do with these -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2028;" -->
+ <!-- * u:name="LINE SEPARATOR" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2029;" -->
+ <!-- * u:name="PARAGRAPH SEPARATOR" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x202a;" -->
+ <!-- * u:name="LEFT-TO-RIGHT EMBEDDING" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x202b;" -->
+ <!-- * u:name="RIGHT-TO-LEFT EMBEDDING" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x202c;" -->
+ <!-- * u:name="POP DIRECTIONAL FORMATTING" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x202d;" -->
+ <!-- * u:name="LEFT-TO-RIGHT OVERRIDE" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x202e;" -->
+ <!-- * u: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;"
+ u:name="NARROW NO-BREAK SPACE"
+ string="\ "
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <xsl:output-character
+ character="&#x2030;"
+ u:name="PER MILLE SIGN"
+ u:entity="permil"
+ string="\(%0"
+ u:block="General Punctuation"
+ />
+ <!-- * no roff equiv; no idea what to do with it -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2031;" -->
+ <!-- * u:name="PER TEN THOUSAND SIGN" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2032;"
+ u:name="PRIME"
+ u:entity="prime"
+ string="\(fm"
+ u:block="General Punctuation"
+ u:class="primes"
+ />
+ <xsl:output-character
+ character="&#x2033;"
+ u:name="DOUBLE PRIME"
+ u:entity="Prime"
+ string="\(sd"
+ u:block="General Punctuation"
+ u:class="primes"
+ />
+ <xsl:output-character
+ character="&#x2034;"
+ u:name="TRIPLE PRIME"
+ u:entity="tprime"
+ string="\(sd\(fm"
+ u:block="General Punctuation"
+ u:class="primes"
+ />
+ <!-- * no idea for these -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2035;" -->
+ <!-- * u:name="REVERSED PRIME" -->
+ <!-- * u:entity="bprime" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2036;" -->
+ <!-- * u:name="REVERSED DOUBLE PRIME" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2037;" -->
+ <!-- * u:name="REVERSED TRIPLE PRIME" -->
+ <!-- * /> -->
+
+ <!-- * there is no low caret in roff -->
+ <xsl:output-character
+ character="&#x2038;"
+ u:name="CARET"
+ string="^"
+ u:block="General Punctuation"
+ />
+ <xsl:output-character
+ character="&#x2039;"
+ u:name="SINGLE LEFT-POINTING ANGLE QUOTATION MARK"
+ string="\(fo"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+ <xsl:output-character
+ character="&#x203a;"
+ u:name="SINGLE RIGHT-POINTING ANGLE QUOTATION MARK"
+ string="\(fc"
+ u:block="General Punctuation"
+ u:class="quotes"
+ />
+ <!-- * not in roff -->
+ <xsl:output-character
+ character="&#x203b;"
+ u:name="REFERENCE MARK"
+ string="*"
+ u:block="General Punctuation"
+ />
+ <xsl:output-character
+ character="&#x203c;"
+ u:name="DOUBLE EXCLAMATION MARK"
+ string="!!"
+ u:block="General Punctuation"
+ />
+ <xsl:output-character
+ character="&#x203d;"
+ u:name="INTERROBANG"
+ string="?!"
+ u:block="General Punctuation"
+ />
+ <xsl:output-character
+ character="&#x203e;"
+ u:name="OVERLINE"
+ string="\(rn"
+ u:block="General Punctuation"
+ />
+ <xsl:output-character
+ character="&#x203f;"
+ u:name="UNDERTIE"
+ string="\(ul"
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff -->
+ <xsl:output-character
+ character="&#x2040;"
+ u:name="CHARACTER TIE"
+ string="\(rn"
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff -->
+ <xsl:output-character
+ character="&#x2041;"
+ u:name="CARET INSERTION POINT"
+ u:entity="caret"
+ string="^"
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff -->
+ <xsl:output-character
+ character="&#x2042;"
+ u:name="ASTERISM"
+ string="*"
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff; just make bold hyphen -->
+ <xsl:output-character
+ character="&#x2043;"
+ u:name="HYPHEN BULLET"
+ u:entity="hybull"
+ string="\fB-\fR"
+ u:block="General Punctuation"
+ u:class="bullets"
+ />
+ <xsl:output-character
+ character="&#x2044;"
+ u:name="FRACTION SLASH"
+ string="\(sl"
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff -->
+ <xsl:output-character
+ character="&#x2045;"
+ u:name="LEFT SQUARE BRACKET WITH QUILL"
+ string="["
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff -->
+ <xsl:output-character
+ character="&#x2046;"
+ u:name="RIGHT SQUARE BRACKET WITH QUILL"
+ string="]"
+ u:block="General Punctuation"
+ />
+ <xsl:output-character
+ character="&#x2047;"
+ u:name="DOUBLE QUESTION MARK"
+ string="??"
+ u:block="General Punctuation"
+ />
+ <xsl:output-character
+ character="&#x2048;"
+ u:name="QUESTION EXCLAMATION MARK"
+ string="?!"
+ u:block="General Punctuation"
+ />
+ <xsl:output-character
+ character="&#x2049;"
+ u:name="EXCLAMATION QUESTION MARK"
+ string="!?"
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff -->
+ <xsl:output-character
+ character="&#x204a;"
+ u:name="TIRONIAN SIGN ET"
+ string="7"
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff; just replace with un-reversed pilcrow -->
+ <xsl:output-character
+ character="&#x204b;"
+ u:name="REVERSED PILCROW SIGN"
+ string="\(ps"
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff; just make regular bullet -->
+ <xsl:output-character
+ character="&#x204c;"
+ u:name="BLACK LEFTWARDS BULLET"
+ string="\(bu"
+ u:block="General Punctuation"
+ />
+ <!-- * not in roff; just make regular bullet -->
+ <xsl:output-character
+ character="&#x204d;"
+ u:name="BLACK RIGHTWARDS BULLET"
+ string="\(bu"
+ u:block="General Punctuation"
+ />
+ <xsl:output-character
+ character="&#x204e;"
+ u:name="LOW ASTERISK"
+ string="*"
+ u:block="General Punctuation"
+ />
+
+ <!-- * ............................................................... -->
+ <!-- * Remaining General Punctuation -->
+ <!-- * from x2050 to x206f -->
+ <!-- * only map a couple of these -->
+ <!-- * ............................................................... -->
+
+ <!-- * basically same as a normal space -->
+ <xsl:output-character
+ character="&#x205f;"
+ u:name="MEDIUM MATHEMATICAL SPACE"
+ string=" "
+ u:block="General Punctuation"
+ u:class="spaces"
+ />
+ <!-- * 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
+ character="&#x2060;"
+ u:name="WORD JOINER"
+ string="\&amp;"
+ u:block="General Punctuation"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * 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
+ character="&#x2070;"
+ u:name="SUPERSCRIPT ZERO"
+ string="^0"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2071;"
+ u:name="SUPERSCRIPT LATIN SMALL LETTER I"
+ string="^i"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2074;"
+ u:name="SUPERSCRIPT FOUR"
+ string="^4"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2075;"
+ u:name="SUPERSCRIPT FIVE"
+ string="^5"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2076;"
+ u:name="SUPERSCRIPT SIX"
+ string="^6"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2077;"
+ u:name="SUPERSCRIPT SEVEN"
+ string="^7"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2078;"
+ u:name="SUPERSCRIPT EIGHT"
+ string="^8"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2079;"
+ u:name="SUPERSCRIPT NINE"
+ string="^9"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x207a;"
+ u:name="SUPERSCRIPT PLUS SIGN"
+ string="^+"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x207b;"
+ u:name="SUPERSCRIPT MINUS"
+ string="^-"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x207c;"
+ u:name="SUPERSCRIPT EQUALS SIGN"
+ string="^="
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x207d;"
+ u:name="SUPERSCRIPT LEFT PARENTHESIS"
+ string="^("
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x207e;"
+ u:name="SUPERSCRIPT RIGHT PARENTHESIS"
+ string="^)"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x207f;"
+ u:name="SUPERSCRIPT LATIN SMALL LETTER N"
+ string="^n"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2080;"
+ u:name="SUBSCRIPT ZERO"
+ string="_0"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2081;"
+ u:name="SUBSCRIPT ONE"
+ string="_1"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2082;"
+ u:name="SUBSCRIPT TWO"
+ string="_2"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2083;"
+ u:name="SUBSCRIPT THREE"
+ string="_3"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2084;"
+ u:name="SUBSCRIPT FOUR"
+ string="_4"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2085;"
+ u:name="SUBSCRIPT FIVE"
+ string="_5"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2086;"
+ u:name="SUBSCRIPT SIX"
+ string="_6"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2087;"
+ u:name="SUBSCRIPT SEVEN"
+ string="_7"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2088;"
+ u:name="SUBSCRIPT EIGHT"
+ string="_8"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x2089;"
+ u:name="SUBSCRIPT NINE"
+ string="_9"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x208a;"
+ u:name="SUBSCRIPT PLUS SIGN"
+ string="_+"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x208b;"
+ u:name="SUBSCRIPT MINUS"
+ string="_-"
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x208c;"
+ u:name="SUBSCRIPT EQUALS SIGN"
+ string="_="
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x208d;"
+ u:name="SUBSCRIPT LEFT PARENTHESIS"
+ string="_("
+ u:block="Superscripts and Subscripts"
+ />
+ <xsl:output-character
+ character="&#x208e;"
+ u:name="SUBSCRIPT RIGHT PARENTHESIS"
+ string="_)"
+ u:block="Superscripts and Subscripts"
+ />
+ <!-- * ***************************************************************** -->
+ <!-- * 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
+ character="&#x20a0;"
+ u:name="EURO-CURRENCY SIGN"
+ string="EUR"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20a1;"
+ u:name="COLON SIGN"
+ string="COLON"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20a2;"
+ u:name="CRUZEIRO SIGN"
+ string="CRUZEIRO"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20a3;"
+ u:name="FRENCH FRANC SIGN"
+ string="FRANC"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20a4;"
+ u:name="LIRA SIGN"
+ string="LIRA"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20a5;"
+ u:name="MILL SIGN"
+ string="MILL"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20a6;"
+ u:name="NAIRA SIGN"
+ string="NAIRA"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20a7;"
+ u:name="PESETA SIGN"
+ string="PESETA"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20a8;"
+ u:name="RUPEE SIGN"
+ string="RUPEE"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20a9;"
+ u:name="WON SIGN"
+ string="WON"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20aa;"
+ u:name="NEW SHEQEL SIGN"
+ string="SHEQEL"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20ab;"
+ u:name="DONG SIGN"
+ string="DONG"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20ac;"
+ u:name="EURO SIGN"
+ string="EUR"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20ad;"
+ u:name="KIP SIGN"
+ string="KIP"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20ae;"
+ u:name="TUGRIK SIGN"
+ string="TUGRIK"
+ u:block="Currency Symbols"
+ />
+ <xsl:output-character
+ character="&#x20af;"
+ u:name="DRACHMA SIGN"
+ string="DRACHMA"
+ u:block="Currency Symbols"
+ />
+ <!-- <xsl:output-character -->
+ <!-- character="&#x20b0;" -->
+ <!-- u:name="GERMAN PENNY SIGN" -->
+ <!-- string="?" -->
+ <!-- u:block="Currency Symbols" -->
+ <!-- /> -->
+ <xsl:output-character
+ character="&#x20b1;"
+ u:name="PESO SIGN"
+ string="PESO"
+ u:block="Currency Symbols"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * End: Currency Symbols -->
+ <!-- * x20a0 to x20b1 -->
+ <!-- * ***************************************************************** -->
+
+ <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+ <!-- * Combining Diacritical Marks for Symbols -->
+ <!-- * x20d0 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
+ character="&#x2103;"
+ u:name="DEGREE CELSIUS"
+ string="\(deC"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x2105;"
+ u:name="CARE OF"
+ u:entity="incare"
+ string="c/o"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x2109;"
+ u:name="DEGREE FAHRENHEIT"
+ string="\(deF"
+ u:block="Letterlike Symbols"
+ />
+ <!-- roff Ifraktur -->
+ <xsl:output-character
+ character="&#x2111;"
+ u:name="BLACK-LETTER CAPITAL I"
+ string="\(Im"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x2113;"
+ u:name="SCRIPT SMALL L"
+ u:entity="ell"
+ string="l"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x2116;"
+ u:name="NUMERO SIGN"
+ u:entity="numero"
+ string="No."
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x2118;"
+ u:name="SCRIPT CAPITAL P"
+ u:entity="weierp"
+ string="\(wp"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x211c;"
+ u:name="BLACK-LETTER CAPITAL R"
+ u:entity="real"
+ string="\(Re"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x211e;"
+ u:name="PRESCRIPTION TAKE"
+ u:entity="rx"
+ string="Rx"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x2120;"
+ u:name="SERVICE MARK"
+ string="(SM)"
+ u:block="Letterlike Symbols"
+ />
+ <!-- * We don't do "\(tm" for &#x2122; because for console output, groff -->
+ <!-- * just renders that as "tm", without any preceding space, parens, -->
+ <!-- * or anything. So it just gets run into the preceding word; i.e.: -->
+ <!-- * -->
+ <!-- * Product&#x2122; -> Producttm -->
+ <!-- * -->
+ <!-- * That it probably not what most people would want. So we just -->
+ <!-- * render it as (TM) instead, Thus: -->
+ <!-- * -->
+ <!-- * Product&#x2122; -> Product(TM) -->
+ <xsl:output-character
+ character="&#x2122;"
+ u:name="TRADE MARK SIGN"
+ u:entity="trade"
+ string="(TM)"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x2126;"
+ u:name="OHM SIGN"
+ u:entity="ohm"
+ string="\(*W"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x212a;"
+ u:name="KELVIN SIGN"
+ string="K"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x212b;"
+ u:name="ANGSTROM SIGN"
+ u:entity="angst"
+ string="\(oA"
+ u:block="Letterlike Symbols"
+ />
+ <xsl:output-character
+ character="&#x2135;"
+ u:name="ALEF SYMBOL"
+ u:entity="aleph"
+ string="\(Ah"
+ u:block="Letterlike Symbols"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * 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
+ character="&#x2153;"
+ u:name="VULGAR FRACTION ONE THIRD"
+ u:entity="frac13"
+ string="1/3"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2154;"
+ u:name="VULGAR FRACTION TWO THIRDS"
+ u:entity="frac23"
+ string="2/3"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2155;"
+ u:name="VULGAR FRACTION ONE FIFTH"
+ u:entity="frac15"
+ string="1/5"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2156;"
+ u:name="VULGAR FRACTION TWO FIFTHS"
+ u:entity="frac25"
+ string="2/5"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2157;"
+ u:name="VULGAR FRACTION THREE FIFTHS"
+ u:entity="frac35"
+ string="3/5"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2158;"
+ u:name="VULGAR FRACTION FOUR FIFTHS"
+ u:entity="frac45"
+ string="4/5"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2159;"
+ u:name="VULGAR FRACTION ONE SIXTH"
+ u:entity="frac16"
+ string="1/6"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x215a;"
+ u:name="VULGAR FRACTION FIVE SIXTHS"
+ u:entity="frac56"
+ string="5/6"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x215b;"
+ u:name="VULGAR FRACTION ONE EIGHTH"
+ u:entity="frac18"
+ string="1/8"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x215c;"
+ u:name="VULGAR FRACTION THREE EIGHTHS"
+ u:entity="frac38"
+ string="3/8"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x215d;"
+ u:name="VULGAR FRACTION FIVE EIGHTHS"
+ u:entity="frac58"
+ string="5/8"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x215e;"
+ u:name="VULGAR FRACTION SEVEN EIGHTHS"
+ u:entity="frac78"
+ string="7/8"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x215f;"
+ u:name="FRACTION NUMERATOR ONE"
+ string="1/"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2160;"
+ u:name="ROMAN NUMERAL ONE"
+ string="I"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2161;"
+ u:name="ROMAN NUMERAL TWO"
+ string="II"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2162;"
+ u:name="ROMAN NUMERAL THREE"
+ string="III"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2163;"
+ u:name="ROMAN NUMERAL FOUR"
+ string="IV"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2164;"
+ u:name="ROMAN NUMERAL FIVE"
+ string="V"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2165;"
+ u:name="ROMAN NUMERAL SIX"
+ string="VI"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2166;"
+ u:name="ROMAN NUMERAL SEVEN"
+ string="VII"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2167;"
+ u:name="ROMAN NUMERAL EIGHT"
+ string="VIII"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2168;"
+ u:name="ROMAN NUMERAL NINE"
+ string="IX"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2169;"
+ u:name="ROMAN NUMERAL TEN"
+ string="X"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x216a;"
+ u:name="ROMAN NUMERAL ELEVEN"
+ string="XI"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x216b;"
+ u:name="ROMAN NUMERAL TWELVE"
+ string="XII"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x216c;"
+ u:name="ROMAN NUMERAL FIFTY"
+ string="L"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x216d;"
+ u:name="ROMAN NUMERAL ONE HUNDRED"
+ string="C"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x216e;"
+ u:name="ROMAN NUMERAL FIVE HUNDRED"
+ string="D"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x216f;"
+ u:name="ROMAN NUMERAL ONE THOUSAND"
+ string="M"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2170;"
+ u:name="SMALL ROMAN NUMERAL ONE"
+ string="i"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2171;"
+ u:name="SMALL ROMAN NUMERAL TWO"
+ string="ii"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2172;"
+ u:name="SMALL ROMAN NUMERAL THREE"
+ string="iii"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2173;"
+ u:name="SMALL ROMAN NUMERAL FOUR"
+ string="iv"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2174;"
+ u:name="SMALL ROMAN NUMERAL FIVE"
+ string="v"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2175;"
+ u:name="SMALL ROMAN NUMERAL SIX"
+ string="vi"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2176;"
+ u:name="SMALL ROMAN NUMERAL SEVEN"
+ string="vii"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2177;"
+ u:name="SMALL ROMAN NUMERAL EIGHT"
+ string="viii"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2178;"
+ u:name="SMALL ROMAN NUMERAL NINE"
+ string="ix"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2179;"
+ u:name="SMALL ROMAN NUMERAL TEN"
+ string="x"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x217a;"
+ u:name="SMALL ROMAN NUMERAL ELEVEN"
+ string="xi"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x217b;"
+ u:name="SMALL ROMAN NUMERAL TWELVE"
+ string="xii"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x217c;"
+ u:name="SMALL ROMAN NUMERAL FIFTY"
+ string="l"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x217d;"
+ u:name="SMALL ROMAN NUMERAL ONE HUNDRED"
+ string="c"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x217e;"
+ u:name="SMALL ROMAN NUMERAL FIVE HUNDRED"
+ string="d"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x217f;"
+ u:name="SMALL ROMAN NUMERAL ONE THOUSAND"
+ string="m"
+ u:block="Number Forms"
+ />
+ <xsl:output-character
+ character="&#x2180;"
+ u:name="ROMAN NUMERAL ONE THOUSAND C D"
+ string="CD"
+ u:block="Number Forms"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * End: Number Forms -->
+ <!-- * x2150 to x218f -->
+ <!-- * ***************************************************************** -->
+
+ <!-- * ***************************************************************** -->
+ <!-- * Begin: Arrows -->
+ <!-- * x2190 to x21ff -->
+ <!-- * ***************************************************************** -->
+
+ <xsl:output-character
+ character="&#x2190;"
+ u:name="LEFTWARDS ARROW"
+ u:entity="larr"
+ string="\(&lt;-"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x2191;"
+ u:name="UPWARDS ARROW"
+ u:entity="uarr"
+ string="\(ua"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x2192;"
+ u:name="RIGHTWARDS ARROW"
+ u:entity="rarr"
+ string="\(->"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x2193;"
+ u:name="DOWNWARDS ARROW"
+ u:entity="darr"
+ string="\(da"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x2194;"
+ u:name="LEFT RIGHT ARROW"
+ u:entity="harr"
+ string="\(&lt;>"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x2195;"
+ u:name="UP DOWN ARROW"
+ u:entity="varr"
+ string="\(va"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x21b5;"
+ u:name="DOWNWARDS ARROW WITH CORNER LEFTWARDS"
+ u:entity="crarr"
+ string="\(CR"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x21d0;"
+ u:name="LEFTWARDS DOUBLE ARROW"
+ u:entity="lArr"
+ string="\(la"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x21d1;"
+ u:name="UPWARDS DOUBLE ARROW"
+ u:entity="uArr"
+ string="\(uA"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x21d2;"
+ u:name="RIGHTWARDS DOUBLE ARROW"
+ u:entity="rArr"
+ string="\(rA"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x21d3;"
+ u:name="DOWNWARDS DOUBLE ARROW"
+ u:entity="dArr"
+ string="\(dA"
+ u:block="Arrows"
+ />
+ <xsl:output-character
+ character="&#x21d4;"
+ u:name="LEFT RIGHT DOUBLE ARROW"
+ u:entity="hArr"
+ string="\(hA"
+ u:block="Arrows"
+ />
+ <!-- no roff equiv; render same as single arrow -->
+ <xsl:output-character
+ character="&#x21d5;"
+ u:name="UP DOWN DOUBLE ARROW"
+ u:entity="vArr"
+ string="\(va"
+ u:block="Arrows"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * Begin: Mathematical Operators -->
+ <!-- * x2200 to x22ff -->
+ <!-- * ***************************************************************** -->
+
+ <xsl:output-character
+ character="&#x2200;"
+ u:name="FOR ALL"
+ u:entity="forall"
+ string="\(fa"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2201;"
+ u:name="COMPLEMENT"
+ u:entity="comp"
+ string="C"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2202;"
+ u:name="PARTIAL DIFFERENTIAL"
+ u:entity="part"
+ string="\(pd"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2203;"
+ u:name="THERE EXISTS"
+ u:entity="exist"
+ string="\(te"
+ u:block="Mathematical Operators"
+ />
+ <!-- * no roff equiv -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2204;" -->
+ <!-- * u:name="THERE DOES NOT EXIST" -->
+ <!-- * u:entity="nexist" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2205;"
+ u:name="EMPTY SET"
+ u:entity="empty"
+ string="\(es"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2206;"
+ u:name="INCREMENT"
+ string="\(*D"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2207;"
+ u:name="NABLA"
+ u:entity="nabla"
+ string="\(gr"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2208;"
+ u:name="ELEMENT OF"
+ u:entity="isin"
+ string="\(mo"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2209;"
+ u:name="NOT AN ELEMENT OF"
+ u:entity="notin"
+ string="\(nm"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x220a;"
+ u:name="SMALL ELEMENT OF"
+ string="\(mo"
+ u:block="Mathematical Operators"
+ />
+
+ <xsl:output-character
+ character="&#x220b;"
+ u:name="CONTAINS AS MEMBER"
+ u:entity="ni"
+ string="\(st"
+ u:block="Mathematical Operators"
+ />
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x220c;" -->
+ <!-- * u:name="DOES NOT CONTAIN AS MEMBER" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x220d;"
+ u:name="SMALL CONTAINS AS MEMBER"
+ string="\(st"
+ u:block="Mathematical Operators"
+ />
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x220e;" -->
+ <!-- * u:name="END OF PROOF" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x220f;"
+ u:name="N-ARY PRODUCT"
+ u:entity="prod"
+ string="\(product"
+ u:block="Mathematical Operators"
+ />
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2210;" -->
+ <!-- * u:name="N-ARY COPRODUCT" -->
+ <!-- * u:entity="coprod" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2211;"
+ u:name="N-ARY SUMMATION"
+ u:entity="sum"
+ string="\(sum"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2212;"
+ u:name="MINUS SIGN"
+ u:entity="minus"
+ string="\-"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2213;"
+ u:name="MINUS-OR-PLUS SIGN"
+ u:entity="mnplus"
+ string="\(+-"
+ u:block="Mathematical Operators"
+ />
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2214;" -->
+ <!-- * u:name="DOT PLUS" -->
+ <!-- * u:entity="plusdo" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2215;"
+ u:name="DIVISION SLASH"
+ string="\(f/"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2216;"
+ u:name="SET MINUS"
+ u:entity="setmn"
+ string="\e"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2217;"
+ u:name="ASTERISK OPERATOR"
+ u:entity="lowast"
+ string="\(**"
+ u:block="Mathematical Operators"
+ />
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2218;" -->
+ <!-- * u:name="RING OPERATOR" -->
+ <!-- * u:entity="compfn" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2219;"
+ u:name="BULLET OPERATOR"
+ string="\(bu"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x221a;"
+ u:name="SQUARE ROOT"
+ u:entity="radic"
+ string="\(sr"
+ u:block="Mathematical Operators"
+ />
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x221b;" -->
+ <!-- * u:name="CUBE ROOT" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x221c;" -->
+ <!-- * u:name="FOURTH ROOT" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x221d;"
+ u:name="PROPORTIONAL TO"
+ u:entity="prop"
+ string="\(pt"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x221e;"
+ u:name="INFINITY"
+ u:entity="infin"
+ string="\(if"
+ u:block="Mathematical Operators"
+ />
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x221f;" -->
+ <!-- * u:name="RIGHT ANGLE" -->
+ <!-- * u:entity="ang90" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2220;"
+ u:name="ANGLE"
+ u:entity="ang"
+ string="\(/_"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * 0x2221 to 0x2226 not in roff; -->
+ <!-- * but fake a parallel sign with vert bars -->
+
+ <xsl:output-character
+ character="&#x2225;"
+ u:name="PARALLEL TO"
+ u:entity="par"
+ string="\(bv\(bv"
+ u:block="Mathematical Operators"
+ />
+
+ <xsl:output-character
+ character="&#x2227;"
+ u:name="LOGICAL AND"
+ u:entity="and"
+ string="\(AN"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2228;"
+ u:name="LOGICAL OR"
+ u:entity="or"
+ string="\(OR"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2229;"
+ u:name="INTERSECTION"
+ u:entity="cap"
+ string="\(ca"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x222a;"
+ u:name="UNION"
+ u:entity="cup"
+ string="\(cu"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x222b;"
+ u:name="INTEGRAL"
+ u:entity="int"
+ string="\(is"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x222c;"
+ u:name="DOUBLE INTEGRAL"
+ string="\(is\(is"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x222d;"
+ u:name="TRIPLE INTEGRAL"
+ string="\(is\(is\(is"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * 0x222e to 0x2233 not in roff -->
+
+ <xsl:output-character
+ character="&#x2234;"
+ u:name="THEREFORE"
+ u:entity="there4"
+ string="\(tf"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2235;" -->
+ <!-- * u:name="BECAUSE" -->
+ <!-- * u:entity="becaus" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2236;"
+ u:name="RATIO"
+ string=":"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2237;"
+ u:name="PROPORTION"
+ string="::"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * 0x2238 to 0x223b not in roff -->
+
+ <xsl:output-character
+ character="&#x223c;"
+ u:name="TILDE OPERATOR"
+ u:entity="sim"
+ string="\(ti"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * 0x223d to 0x224b not in roff -->
+
+ <xsl:output-character
+ character="&#x2245;"
+ u:name="APPROXIMATELY EQUAL TO"
+ u:entity="cong"
+ string="\(=~"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2246;" -->
+ <!-- * u:name="APPROXIMATELY BUT NOT ACTUALLY EQUAL TO" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2247;" -->
+ <!-- * u:name="NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO" -->
+ <!-- * u:entity="ncong" -->
+ <!-- * /> -->
+
+ <xsl:output-character
+ character="&#x2248;"
+ u:name="ALMOST EQUAL TO"
+ u:entity="asymp"
+ string="\(~~"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * x2249 to x2253 not in roff -->
+
+ <xsl:output-character
+ character="&#x2254;"
+ u:name="COLON EQUALS"
+ u:entity="colone"
+ string=":="
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2255;"
+ u:name="EQUALS COLON"
+ u:entity="ecolon"
+ string="=:"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * x2256 to x2255 not in roff -->
+
+ <xsl:output-character
+ character="&#x225f;"
+ u:name="QUESTIONED EQUAL TO"
+ string="?="
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2260;"
+ u:name="NOT EQUAL TO"
+ u:entity="ne"
+ string="\(!="
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2261;"
+ u:name="IDENTICAL TO"
+ u:entity="equiv"
+ string="\(=="
+ u:block="Mathematical Operators"
+ />
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2262;" -->
+ <!-- * u:name="NOT IDENTICAL TO" -->
+ <!-- * u:entity="nequiv" -->
+ <!-- * /> -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2263;" -->
+ <!-- * u:name="STRICTLY EQUIVALENT TO" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2264;"
+ u:name="LESS-THAN OR EQUAL TO"
+ u:entity="le"
+ string="\(&lt;="
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2265;"
+ u:name="GREATER-THAN OR EQUAL TO"
+ u:entity="ge"
+ string="\(>="
+ u:block="Mathematical Operators"
+ />
+ <!-- * x2266 to x2269 not in roff -->
+
+ <xsl:output-character
+ character="&#x226a;"
+ u:name="MUCH LESS-THAN"
+ u:entity="Lt"
+ string="&lt;&lt;"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x226b;"
+ u:name="MUCH GREATER-THAN"
+ u:entity="Gt"
+ string=">>"
+ u:block="Mathematical Operators"
+ />
+ <!-- * x226c to x2281 not in roff -->
+
+ <xsl:output-character
+ character="&#x2282;"
+ u:name="SUBSET OF"
+ u:entity="sub"
+ string="\(sb"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2283;"
+ u:name="SUPERSET OF"
+ u:entity="sup"
+ string="\(sp"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2284;"
+ u:name="NOT A SUBSET OF"
+ u:entity="nsub"
+ string="\(nb"
+ u:block="Mathematical Operators"
+ />
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2285;" -->
+ <!-- * u:name="NOT A SUPERSET OF" -->
+ <!-- * u:entity="nsup" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2286;"
+ u:name="SUBSET OF OR EQUAL TO"
+ u:entity="sube"
+ string="\(ib"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2287;"
+ u:name="SUPERSET OF OR EQUAL TO"
+ u:entity="supe"
+ string="\(ip"
+ u:block="Mathematical Operators"
+ />
+ <!-- * x2288 to x2294 not in roff -->
+
+ <xsl:output-character
+ character="&#x2295;"
+ u:name="CIRCLED PLUS"
+ u:entity="oplus"
+ string="\(c+"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2296;"
+ u:name="CIRCLED MINUS"
+ u:entity="ominus"
+ string="\(c*"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x2297;"
+ u:name="CIRCLED TIMES"
+ u:entity="otimes"
+ string="\(c*"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * x2298 to x22a4 not in roff -->
+
+ <xsl:output-character
+ character="&#x22a5;"
+ u:name="UP TACK"
+ u:entity="bottom"
+ string="\(pp"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * x22a6 to x22bf not in roff -->
+
+ <xsl:output-character
+ character="&#x22c0;"
+ u:name="N-ARY LOGICAL AND"
+ string="\(AN"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x22c1;"
+ u:name="N-ARY LOGICAL OR"
+ string="\(OR"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x22c2;"
+ u:name="N-ARY INTERSECTION"
+ string="\(ca"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x22c3;"
+ u:name="N-ARY UNION"
+ string="\(cu"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * not in roff -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x22c4;" -->
+ <!-- * u:name="DIAMOND OPERATOR" -->
+ <!-- * u:entity="diam" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x22c5;"
+ u:name="DOT OPERATOR"
+ u:entity="sdot"
+ string="\(md"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x22c6;"
+ u:name="STAR OPERATOR"
+ u:entity="sstarf"
+ string="\(**"
+ u:block="Mathematical Operators"
+ />
+ <!-- * x22c7 to x22cd not in roff -->
+
+ <xsl:output-character
+ character="&#x22ce;"
+ u:name="CURLY LOGICAL OR"
+ u:entity="cuvee"
+ string="\(OR"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x22cf;"
+ u:name="CURLY LOGICAL AND"
+ u:entity="cuwed"
+ string="\(AN"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * x22d0 to x22d7 not in roff -->
+
+ <xsl:output-character
+ character="&#x22d8;"
+ u:name="VERY MUCH LESS-THAN"
+ u:entity="Ll"
+ string="&lt;&lt;&lt;"
+ u:block="Mathematical Operators"
+ />
+ <xsl:output-character
+ character="&#x22d9;"
+ u:name="VERY MUCH GREATER-THAN"
+ u:entity="Gg"
+ string=">>>"
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * x22da to x22ee not in roff -->
+
+ <xsl:output-character
+ character="&#x22ef;"
+ u:name="MIDLINE HORIZONTAL ELLIPSIS"
+ string="\&amp;..."
+ u:block="Mathematical Operators"
+ />
+
+ <!-- * x22fo to x22ff not in roff -->
+
+ <!-- * ***************************************************************** -->
+ <!-- * End: Mathematical Operators -->
+ <!-- * ***************************************************************** -->
+
+ <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+ <!-- * Miscellaneous Technical -->
+ <!-- * x2300 to x23ff -->
+ <!-- * - do nothing except for angle brackets - -->
+ <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+
+ <xsl:output-character
+ character="&#x2329;"
+ u:name="LEFT-POINTING ANGLE BRACKET"
+ u:entity="lang"
+ string="\(la"
+ u:block="Miscellaneous Technical"
+ />
+ <xsl:output-character
+ character="&#x232a;"
+ u:name="RIGHT-POINTING ANGLE BRACKET"
+ u:entity="rang"
+ string="\(ra"
+ u:block="Miscellaneous Technical"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * Begin: Control Pictures -->
+ <!-- * x2400 to x243f -->
+ <!-- * ***************************************************************** -->
+
+ <xsl:output-character
+ character="&#x2400;"
+ u:name="SYMBOL FOR NULL"
+ string="NUL"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2401;"
+ u:name="SYMBOL FOR START OF HEADING"
+ string="SOH"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2402;"
+ u:name="SYMBOL FOR START OF TEXT"
+ string="STX"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2403;"
+ u:name="SYMBOL FOR END OF TEXT"
+ string="ETX"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2404;"
+ u:name="SYMBOL FOR END OF TRANSMISSION"
+ string="EOT"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2405;"
+ u:name="SYMBOL FOR ENQUIRY"
+ string="ENQ"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2406;"
+ u:name="SYMBOL FOR ACKNOWLEDGE"
+ string="ACK"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2407;"
+ u:name="SYMBOL FOR BELL"
+ string="BEL"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2408;"
+ u:name="SYMBOL FOR BACKSPACE"
+ string="BS"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2409;"
+ u:name="SYMBOL FOR HORIZONTAL TABULATION"
+ string="HT"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x240a;"
+ u:name="SYMBOL FOR LINE FEED"
+ string="LF"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x240b;"
+ u:name="SYMBOL FOR VERTICAL TABULATION"
+ string="VT"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x240c;"
+ u:name="SYMBOL FOR FORM FEED"
+ string="FF"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x240d;"
+ u:name="SYMBOL FOR CARRIAGE RETURN"
+ string="CR"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x240e;"
+ u:name="SYMBOL FOR SHIFT OUT"
+ string="SO"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x240f;"
+ u:name="SYMBOL FOR SHIFT IN"
+ string="SI"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2410;"
+ u:name="SYMBOL FOR DATA LINK ESCAPE"
+ string="DLE"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2411;"
+ u:name="SYMBOL FOR DEVICE CONTROL ONE"
+ string="DC1"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2412;"
+ u:name="SYMBOL FOR DEVICE CONTROL TWO"
+ string="DC2"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2413;"
+ u:name="SYMBOL FOR DEVICE CONTROL THREE"
+ string="DC3"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2414;"
+ u:name="SYMBOL FOR DEVICE CONTROL FOUR"
+ string="DC4"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2415;"
+ u:name="SYMBOL FOR NEGATIVE ACKNOWLEDGE"
+ string="NAK"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2416;"
+ u:name="SYMBOL FOR SYNCHRONOUS IDLE"
+ string="SYN"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2417;"
+ u:name="SYMBOL FOR END OF TRANSMISSION BLOCK"
+ string="ETB"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2418;"
+ u:name="SYMBOL FOR CANCEL"
+ string="CAN"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2419;"
+ u:name="SYMBOL FOR END OF MEDIUM"
+ string="EM"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x241a;"
+ u:name="SYMBOL FOR SUBSTITUTE"
+ string="SUB"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x241b;"
+ u:name="SYMBOL FOR ESCAPE"
+ string="ESC"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x241c;"
+ u:name="SYMBOL FOR FILE SEPARATOR"
+ string="FS"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x241d;"
+ u:name="SYMBOL FOR GROUP SEPARATOR"
+ string="GS"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x241e;"
+ u:name="SYMBOL FOR RECORD SEPARATOR"
+ string="RS"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x241f;"
+ u:name="SYMBOL FOR UNIT SEPARATOR"
+ string="US"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2420;"
+ u:name="SYMBOL FOR SPACE"
+ string="SP"
+ u:block="Control Pictures"
+ />
+ <xsl:output-character
+ character="&#x2421;"
+ u:name="SYMBOL FOR DELETE"
+ string="DEL"
+ u:block="Control Pictures"
+ />
+ <!-- * no roff equivs for x2422 and x2423 -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2422;" -->
+ <!-- * u:name="BLANK SYMBOL" -->
+ <!-- * string="?" -->
+ <!-- * u:block="Control Pictures" -->
+ <!-- * /> -->
+ <!-- * I think there should be a roff equiv for &blank;, but as far as I -->
+ <!-- * know, there is not... -->
+ <!-- * <xsl:output-character -->
+ <!-- * character="&#x2423;" -->
+ <!-- * u:name="OPEN BOX" -->
+ <!-- * u:entity="blank" -->
+ <!-- * string="?" -->
+ <!-- * u:block="Control Pictures" -->
+ <!-- * /> -->
+ <xsl:output-character
+ character="&#x2424;"
+ u:name="SYMBOL FOR NEWLINE"
+ string="NL"
+ u:block="Control Pictures"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * End: Control Pictures -->
+ <!-- * ***************************************************************** -->
+
+ <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+ <!-- * Optical Character Recognition -->
+ <!-- * x2440 to x24ff -->
+ <!-- * - do nothing - -->
+ <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+
+ <!-- * ***************************************************************** -->
+ <!-- * Begin: Enclosed Alphanumerics -->
+ <!-- * x2460 to x24ff -->
+ <!-- * ***************************************************************** -->
+
+ <xsl:output-character
+ character="&#x2460;"
+ u:name="CIRCLED DIGIT ONE"
+ string="1"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2461;"
+ u:name="CIRCLED DIGIT TWO"
+ string="2"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2462;"
+ u:name="CIRCLED DIGIT THREE"
+ string="3"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2463;"
+ u:name="CIRCLED DIGIT FOUR"
+ string="4"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2464;"
+ u:name="CIRCLED DIGIT FIVE"
+ string="5"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2465;"
+ u:name="CIRCLED DIGIT SIX"
+ string="6"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2466;"
+ u:name="CIRCLED DIGIT SEVEN"
+ string="7"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2467;"
+ u:name="CIRCLED DIGIT EIGHT"
+ string="8"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2468;"
+ u:name="CIRCLED DIGIT NINE"
+ string="9"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2469;"
+ u:name="CIRCLED NUMBER TEN"
+ string="10"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x246a;"
+ u:name="CIRCLED NUMBER ELEVEN"
+ string="11"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x246b;"
+ u:name="CIRCLED NUMBER TWELVE"
+ string="12"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x246c;"
+ u:name="CIRCLED NUMBER THIRTEEN"
+ string="13"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x246d;"
+ u:name="CIRCLED NUMBER FOURTEEN"
+ string="14"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x246e;"
+ u:name="CIRCLED NUMBER FIFTEEN"
+ string="15"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x246f;"
+ u:name="CIRCLED NUMBER SIXTEEN"
+ string="16"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2470;"
+ u:name="CIRCLED NUMBER SEVENTEEN"
+ string="17"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2471;"
+ u:name="CIRCLED NUMBER EIGHTEEN"
+ string="18"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2472;"
+ u:name="CIRCLED NUMBER NINETEEN"
+ string="19"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2473;"
+ u:name="CIRCLED NUMBER TWENTY"
+ string="20"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2474;"
+ u:name="PARENTHESIZED DIGIT ONE"
+ string="(1)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2475;"
+ u:name="PARENTHESIZED DIGIT TWO"
+ string="(2)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2476;"
+ u:name="PARENTHESIZED DIGIT THREE"
+ string="(3)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2477;"
+ u:name="PARENTHESIZED DIGIT FOUR"
+ string="(4)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2478;"
+ u:name="PARENTHESIZED DIGIT FIVE"
+ string="(5)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2479;"
+ u:name="PARENTHESIZED DIGIT SIX"
+ string="(6)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x247a;"
+ u:name="PARENTHESIZED DIGIT SEVEN"
+ string="(7)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x247b;"
+ u:name="PARENTHESIZED DIGIT EIGHT"
+ string="(8)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x247c;"
+ u:name="PARENTHESIZED DIGIT NINE"
+ string="(9)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x247d;"
+ u:name="PARENTHESIZED NUMBER TEN"
+ string="(10)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x247e;"
+ u:name="PARENTHESIZED NUMBER ELEVEN"
+ string="(11)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x247f;"
+ u:name="PARENTHESIZED NUMBER TWELVE"
+ string="(12)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2480;"
+ u:name="PARENTHESIZED NUMBER THIRTEEN"
+ string="(13)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2481;"
+ u:name="PARENTHESIZED NUMBER FOURTEEN"
+ string="(14)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2482;"
+ u:name="PARENTHESIZED NUMBER FIFTEEN"
+ string="(15)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2483;"
+ u:name="PARENTHESIZED NUMBER SIXTEEN"
+ string="(16)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2484;"
+ u:name="PARENTHESIZED NUMBER SEVENTEEN"
+ string="(17)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2485;"
+ u:name="PARENTHESIZED NUMBER EIGHTEEN"
+ string="(18)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2486;"
+ u:name="PARENTHESIZED NUMBER NINETEEN"
+ string="(19)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2487;"
+ u:name="PARENTHESIZED NUMBER TWENTY"
+ string="(20)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2488;"
+ u:name="DIGIT ONE FULL STOP"
+ string="1."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2489;"
+ u:name="DIGIT TWO FULL STOP"
+ string="2."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x248a;"
+ u:name="DIGIT THREE FULL STOP"
+ string="3."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x248b;"
+ u:name="DIGIT FOUR FULL STOP"
+ string="4."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x248c;"
+ u:name="DIGIT FIVE FULL STOP"
+ string="5."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x248d;"
+ u:name="DIGIT SIX FULL STOP"
+ string="6."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x248e;"
+ u:name="DIGIT SEVEN FULL STOP"
+ string="7."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x248f;"
+ u:name="DIGIT EIGHT FULL STOP"
+ string="8."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2490;"
+ u:name="DIGIT NINE FULL STOP"
+ string="9."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2491;"
+ u:name="NUMBER TEN FULL STOP"
+ string="10."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2492;"
+ u:name="NUMBER ELEVEN FULL STOP"
+ string="11."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2493;"
+ u:name="NUMBER TWELVE FULL STOP"
+ string="12."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2494;"
+ u:name="NUMBER THIRTEEN FULL STOP"
+ string="13."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2495;"
+ u:name="NUMBER FOURTEEN FULL STOP"
+ string="14."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2496;"
+ u:name="NUMBER FIFTEEN FULL STOP"
+ string="15."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2497;"
+ u:name="NUMBER SIXTEEN FULL STOP"
+ string="16."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2498;"
+ u:name="NUMBER SEVENTEEN FULL STOP"
+ string="17."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x2499;"
+ u:name="NUMBER EIGHTEEN FULL STOP"
+ string="18."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x249a;"
+ u:name="NUMBER NINETEEN FULL STOP"
+ string="19."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x249b;"
+ u:name="NUMBER TWENTY FULL STOP"
+ string="20."
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x249c;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER A"
+ string="(a)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x249d;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER B"
+ string="(b)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x249e;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER C"
+ string="(c)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x249f;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER D"
+ string="(d)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a0;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER E"
+ string="(e)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a1;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER F"
+ string="(f)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a2;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER G"
+ string="(g)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a3;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER H"
+ string="(h)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a4;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER I"
+ string="(i)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a5;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER J"
+ string="(j)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a6;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER K"
+ string="(k)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a7;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER L"
+ string="(l)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a8;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER M"
+ string="(m)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24a9;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER N"
+ string="(n)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24aa;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER O"
+ string="(o)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ab;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER P"
+ string="(p)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ac;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER Q"
+ string="(q)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ad;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER R"
+ string="(r)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ae;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER S"
+ string="(s)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24af;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER T"
+ string="(t)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b0;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER U"
+ string="(u)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b1;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER V"
+ string="(v)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b2;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER W"
+ string="(w)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b3;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER X"
+ string="(x)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b4;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER Y"
+ string="(y)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b5;"
+ u:name="PARENTHESIZED LATIN SMALL LETTER Z"
+ string="(z)"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b6;"
+ u:name="CIRCLED LATIN CAPITAL LETTER A"
+ string="A"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b7;"
+ u:name="CIRCLED LATIN CAPITAL LETTER B"
+ string="B"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b8;"
+ u:name="CIRCLED LATIN CAPITAL LETTER C"
+ string="C"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24b9;"
+ u:name="CIRCLED LATIN CAPITAL LETTER D"
+ string="D"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ba;"
+ u:name="CIRCLED LATIN CAPITAL LETTER E"
+ string="E"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24bb;"
+ u:name="CIRCLED LATIN CAPITAL LETTER F"
+ string="F"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24bc;"
+ u:name="CIRCLED LATIN CAPITAL LETTER G"
+ string="G"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24bd;"
+ u:name="CIRCLED LATIN CAPITAL LETTER H"
+ string="H"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24be;"
+ u:name="CIRCLED LATIN CAPITAL LETTER I"
+ string="I"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24bf;"
+ u:name="CIRCLED LATIN CAPITAL LETTER J"
+ string="J"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c0;"
+ u:name="CIRCLED LATIN CAPITAL LETTER K"
+ string="K"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c1;"
+ u:name="CIRCLED LATIN CAPITAL LETTER L"
+ string="L"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c2;"
+ u:name="CIRCLED LATIN CAPITAL LETTER M"
+ string="M"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c3;"
+ u:name="CIRCLED LATIN CAPITAL LETTER N"
+ string="N"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c4;"
+ u:name="CIRCLED LATIN CAPITAL LETTER O"
+ string="O"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c5;"
+ u:name="CIRCLED LATIN CAPITAL LETTER P"
+ string="P"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c6;"
+ u:name="CIRCLED LATIN CAPITAL LETTER Q"
+ string="Q"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c7;"
+ u:name="CIRCLED LATIN CAPITAL LETTER R"
+ string="R"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c8;"
+ u:name="CIRCLED LATIN CAPITAL LETTER S"
+ u:entity="oS"
+ string="S"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24c9;"
+ u:name="CIRCLED LATIN CAPITAL LETTER T"
+ string="T"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ca;"
+ u:name="CIRCLED LATIN CAPITAL LETTER U"
+ string="U"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24cb;"
+ u:name="CIRCLED LATIN CAPITAL LETTER V"
+ string="V"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24cc;"
+ u:name="CIRCLED LATIN CAPITAL LETTER W"
+ string="W"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24cd;"
+ u:name="CIRCLED LATIN CAPITAL LETTER X"
+ string="X"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ce;"
+ u:name="CIRCLED LATIN CAPITAL LETTER Y"
+ string="Y"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24cf;"
+ u:name="CIRCLED LATIN CAPITAL LETTER Z"
+ string="Z"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d0;"
+ u:name="CIRCLED LATIN SMALL LETTER A"
+ string="a"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d1;"
+ u:name="CIRCLED LATIN SMALL LETTER B"
+ string="b"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d2;"
+ u:name="CIRCLED LATIN SMALL LETTER C"
+ string="c"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d3;"
+ u:name="CIRCLED LATIN SMALL LETTER D"
+ string="d"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d4;"
+ u:name="CIRCLED LATIN SMALL LETTER E"
+ string="e"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d5;"
+ u:name="CIRCLED LATIN SMALL LETTER F"
+ string="f"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d6;"
+ u:name="CIRCLED LATIN SMALL LETTER G"
+ string="g"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d7;"
+ u:name="CIRCLED LATIN SMALL LETTER H"
+ string="h"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d8;"
+ u:name="CIRCLED LATIN SMALL LETTER I"
+ string="i"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24d9;"
+ u:name="CIRCLED LATIN SMALL LETTER J"
+ string="j"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24da;"
+ u:name="CIRCLED LATIN SMALL LETTER K"
+ string="k"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24db;"
+ u:name="CIRCLED LATIN SMALL LETTER L"
+ string="l"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24dc;"
+ u:name="CIRCLED LATIN SMALL LETTER M"
+ string="m"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24dd;"
+ u:name="CIRCLED LATIN SMALL LETTER N"
+ string="n"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24de;"
+ u:name="CIRCLED LATIN SMALL LETTER O"
+ string="o"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24df;"
+ u:name="CIRCLED LATIN SMALL LETTER P"
+ string="p"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e0;"
+ u:name="CIRCLED LATIN SMALL LETTER Q"
+ string="q"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e1;"
+ u:name="CIRCLED LATIN SMALL LETTER R"
+ string="r"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e2;"
+ u:name="CIRCLED LATIN SMALL LETTER S"
+ string="s"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e3;"
+ u:name="CIRCLED LATIN SMALL LETTER T"
+ string="t"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e4;"
+ u:name="CIRCLED LATIN SMALL LETTER U"
+ string="u"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e5;"
+ u:name="CIRCLED LATIN SMALL LETTER V"
+ string="b"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e6;"
+ u:name="CIRCLED LATIN SMALL LETTER W"
+ string="w"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e7;"
+ u:name="CIRCLED LATIN SMALL LETTER X"
+ string="x"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e8;"
+ u:name="CIRCLED LATIN SMALL LETTER Y"
+ string="y"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24e9;"
+ u:name="CIRCLED LATIN SMALL LETTER Z"
+ string="z"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ea;"
+ u:name="CIRCLED DIGIT ZERO"
+ string="0"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24eb;"
+ u:name="NEGATIVE CIRCLED NUMBER ELEVEN"
+ string="11"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ec;"
+ u:name="NEGATIVE CIRCLED NUMBER TWELVE"
+ string="12"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ed;"
+ u:name="NEGATIVE CIRCLED NUMBER THIRTEEN"
+ string="13"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ee;"
+ u:name="NEGATIVE CIRCLED NUMBER FOURTEEN"
+ string="14"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24ef;"
+ u:name="NEGATIVE CIRCLED NUMBER FIFTEEN"
+ string="15"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f0;"
+ u:name="NEGATIVE CIRCLED NUMBER SIXTEEN"
+ string="16"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f1;"
+ u:name="NEGATIVE CIRCLED NUMBER SEVENTEEN"
+ string="17"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f2;"
+ u:name="NEGATIVE CIRCLED NUMBER EIGHTEEN"
+ string="18"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f3;"
+ u:name="NEGATIVE CIRCLED NUMBER NINETEEN"
+ string="19"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f4;"
+ u:name="NEGATIVE CIRCLED NUMBER TWENTY"
+ string="20"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f5;"
+ u:name="DOUBLE CIRCLED DIGIT ONE"
+ string="1"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f6;"
+ u:name="DOUBLE CIRCLED DIGIT TWO"
+ string="2"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f7;"
+ u:name="DOUBLE CIRCLED DIGIT THREE"
+ string="3"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f8;"
+ u:name="DOUBLE CIRCLED DIGIT FOUR"
+ string="4"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24f9;"
+ u:name="DOUBLE CIRCLED DIGIT FIVE"
+ string="5"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24fa;"
+ u:name="DOUBLE CIRCLED DIGIT SIX"
+ string="6"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24fb;"
+ u:name="DOUBLE CIRCLED DIGIT SEVEN"
+ string="7"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24fc;"
+ u:name="DOUBLE CIRCLED DIGIT EIGHT"
+ string="8"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24fd;"
+ u:name="DOUBLE CIRCLED DIGIT NINE"
+ string="9"
+ u:block="Enclosed Alphanumerics"
+ />
+ <xsl:output-character
+ character="&#x24fe;"
+ u:name="DOUBLE CIRCLED NUMBER TEN"
+ string="10"
+ u:block="Enclosed Alphanumerics"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * End: Enclosed Alphanumerics -->
+ <!-- * ***************************************************************** -->
+
+ <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+ <!-- * Box Drawing -->
+ <!-- * x2500 to x257f -->
+ <!-- * Block Elements -->
+ <!-- * x2580 to x259f -->
+ <!-- * - do nothing - -->
+ <!-- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+
+ <!-- * ***************************************************************** -->
+ <!-- * Begin: Geometric Shapes -->
+ <!-- * x25a0 to x25f7 -->
+ <!-- * ***************************************************************** -->
+
+ <xsl:output-character
+ character="&#x25a1;"
+ u:name="WHITE SQUARE"
+ u:entity="squ"
+ string="\(sq"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25a2;"
+ u:name="WHITE SQUARE WITH ROUNDED CORNERS"
+ string="\(sq"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25ab;"
+ u:name="WHITE SMALL SQUARE"
+ string="\(sq"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25ba;"
+ u:name="BLACK RIGHT-POINTING POINTER"
+ string="\fB>\fR"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25bb;"
+ u:name="WHITE RIGHT-POINTING POINTER"
+ string=">"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25bc;"
+ u:name="BLACK DOWN-POINTING TRIANGLE"
+ string="\fBv\fR"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25bd;"
+ u:name="WHITE DOWN-POINTING TRIANGLE"
+ u:entity="xdtri"
+ string="v"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25c4;"
+ u:name="BLACK LEFT-POINTING POINTER"
+ string="\fB&lt;\fR"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25c5;"
+ u:name="WHITE LEFT-POINTING POINTER"
+ string="&lt;"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25c6;"
+ u:name="BLACK DIAMOND"
+ string="\(DI"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25c7;"
+ u:name="WHITE DIAMOND"
+ string="\(lz"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25ca;"
+ u:name="LOZENGE"
+ u:entity="loz"
+ string="\(lz"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25cb;"
+ u:name="WHITE CIRCLE"
+ u:entity="cir"
+ string="\(ci"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25cf;"
+ u:name="BLACK CIRCLE"
+ string="\(bu"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25e6;"
+ u:name="WHITE BULLET"
+ string="\(ci"
+ u:block="Geometric Shapes"
+ />
+ <xsl:output-character
+ character="&#x25ef;"
+ u:name="LARGE CIRCLE"
+ u:entity="xcirc"
+ string="\(ci"
+ u:block="Geometric Shapes"
+ />
+ <!-- * ***************************************************************** -->
+ <!-- * End: Geometric Shapes -->
+ <!-- * x25a0 to x25f7 -->
+ <!-- * ***************************************************************** -->
+
+ <!-- * ***************************************************************** -->
+ <!-- * Begin: Miscellaneous Symbols -->
+ <!-- * x2600 to x26ff -->
+ <!-- * ***************************************************************** -->
+
+ <xsl:output-character
+ character="&#x261a;"
+ u:name="BLACK LEFT POINTING INDEX"
+ string="\(lh"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x261b;"
+ u:name="BLACK RIGHT POINTING INDEX"
+ string="\(rh)"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x261c;"
+ u:name="WHITE LEFT POINTING INDEX"
+ string="\(lh"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x261e;"
+ u:name="WHITE RIGHT POINTING INDEX"
+ string="\(rh)"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x2660;"
+ u:name="BLACK SPADE SUIT"
+ u:entity="spades"
+ string="\(SP"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x2661;"
+ u:name="WHITE HEART SUIT"
+ string="\(HE"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x2662;"
+ u:name="WHITE DIAMOND SUIT"
+ string="\(DI"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x2663;"
+ u:name="BLACK CLUB SUIT"
+ u:entity="clubs"
+ string="\(CL"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x2664;"
+ u:name="WHITE SPADE SUIT"
+ string="\(SP"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x2665;"
+ u:name="BLACK HEART SUIT"
+ u:entity="hearts"
+ string="\(HE"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x2666;"
+ u:name="BLACK DIAMOND SUIT"
+ u:entity="diams"
+ string="\(DI"
+ u:block="Miscellaneous Symbols"
+ />
+ <xsl:output-character
+ character="&#x2667;"
+ u:name="WHITE CLUB SUIT"
+ string="\(CL"
+ u:block="Miscellaneous Symbols"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * End: Miscellaneous Symbols -->
+ <!-- * ***************************************************************** -->
+
+ <!-- * ***************************************************************** -->
+ <!-- * Begin: Dingbats -->
+ <!-- * x2700 to x27be -->
+ <!-- * No roff equiv for most of these; just map to something close -->
+ <!-- * ***************************************************************** -->
+
+ <xsl:output-character
+ character="&#x2713;"
+ u:name="CHECK MARK"
+ u:entity="check"
+ string="\(OK"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2714;"
+ u:name="HEAVY CHECK MARK"
+ string="\fB\(OK\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2715;"
+ u:name="MULTIPLICATION X"
+ string="\(mu"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2716;"
+ u:name="HEAVY MULTIPLICATION X"
+ string="\fB\(mu\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2717;"
+ u:name="BALLOT X"
+ u:entity="cross"
+ string="\(mu"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2718;"
+ u:name="HEAVY BALLOT X"
+ string="\fB\(mu\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2719;"
+ u:name="OUTLINED GREEK CROSS"
+ string="\fB+\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x271a;"
+ u:name="HEAVY GREEK CROSS"
+ string="\fB+\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x271b;"
+ u:name="OPEN CENTRE CROSS"
+ string="\fB+\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x271c;"
+ u:name="HEAVY OPEN CENTRE CROSS"
+ string="\fB+\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x271d;"
+ u:name="LATIN CROSS"
+ string="\fB+\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x271e;"
+ u:name="SHADOWED WHITE LATIN CROSS"
+ string="\fB+\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x271f;"
+ u:name="OUTLINED LATIN CROSS"
+ string="\fB+\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2720;"
+ u:name="MALTESE CROSS"
+ u:entity="malt"
+ string="\fB+\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2721;"
+ u:name="STAR OF DAVID"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2722;"
+ u:name="FOUR TEARDROP-SPOKED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2723;"
+ u:name="FOUR BALLOON-SPOKED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2724;"
+ u:name="HEAVY FOUR BALLOON-SPOKED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2725;"
+ u:name="FOUR CLUB-SPOKED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2726;"
+ u:name="BLACK FOUR POINTED STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2727;"
+ u:name="WHITE FOUR POINTED STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2729;"
+ u:name="STRESS OUTLINED WHITE STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x272a;"
+ u:name="CIRCLED WHITE STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x272b;"
+ u:name="OPEN CENTRE BLACK STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x272c;"
+ u:name="BLACK CENTRE WHITE STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x272d;"
+ u:name="OUTLINED BLACK STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x272e;"
+ u:name="HEAVY OUTLINED BLACK STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x272f;"
+ u:name="PINWHEEL STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2730;"
+ u:name="SHADOWED WHITE STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2731;"
+ u:name="HEAVY ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2732;"
+ u:name="OPEN CENTRE ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2733;"
+ u:name="EIGHT SPOKED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2734;"
+ u:name="EIGHT POINTED BLACK STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2735;"
+ u:name="EIGHT POINTED PINWHEEL STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2736;"
+ u:name="SIX POINTED BLACK STAR"
+ u:entity="sext"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2737;"
+ u:name="EIGHT POINTED RECTILINEAR BLACK STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2738;"
+ u:name="HEAVY EIGHT POINTED RECTILINEAR BLACK STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2739;"
+ u:name="TWELVE POINTED BLACK STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x273a;"
+ u:name="SIXTEEN POINTED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x273b;"
+ u:name="TEARDROP-SPOKED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x273c;"
+ u:name="OPEN CENTRE TEARDROP-SPOKED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x273d;"
+ u:name="HEAVY TEARDROP-SPOKED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x273e;"
+ u:name="SIX PETALLED BLACK AND WHITE FLORETTE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x273f;"
+ u:name="BLACK FLORETTE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2740;"
+ u:name="WHITE FLORETTE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2741;"
+ u:name="EIGHT PETALLED OUTLINED BLACK FLORETTE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2742;"
+ u:name="CIRCLED OPEN CENTRE EIGHT POINTED STAR"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2743;"
+ u:name="HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2744;"
+ u:name="SNOWFLAKE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2745;"
+ u:name="TIGHT TRIFOLIATE SNOWFLAKE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2746;"
+ u:name="HEAVY CHEVRON SNOWFLAKE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2747;"
+ u:name="SPARKLE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2748;"
+ u:name="HEAVY SPARKLE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2749;"
+ u:name="BALLOON-SPOKED ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x274a;"
+ u:name="EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x274b;"
+ u:name="HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x274d;"
+ u:name="SHADOWED WHITE CIRCLE"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x274f;"
+ u:name="LOWER RIGHT DROP-SHADOWED WHITE SQUARE"
+ string="\(sq"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2750;"
+ u:name="UPPER RIGHT DROP-SHADOWED WHITE SQUARE"
+ string="\(sq"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2751;"
+ u:name="LOWER RIGHT SHADOWED WHITE SQUARE"
+ string="\(sq"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2752;"
+ u:name="UPPER RIGHT SHADOWED WHITE SQUARE"
+ string="\(sq"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2756;"
+ u:name="BLACK DIAMOND MINUS WHITE X"
+ string="*"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2758;"
+ u:name="LIGHT VERTICAL BAR"
+ string="\(bv"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2759;"
+ u:name="MEDIUM VERTICAL BAR"
+ string="\fB\(bv\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x275a;"
+ u:name="HEAVY VERTICAL BAR"
+ string="\fB\(bv\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x275b;"
+ u:name="HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT"
+ string="\fB\(oq\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x275c;"
+ u:name="HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT"
+ string="\fB\(cq\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x275d;"
+ u:name="HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT"
+ string="\fB\(lq\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x275e;"
+ u:name="HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT"
+ string="\fB\(rq\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2761;"
+ u:name="CURVED STEM PARAGRAPH SIGN ORNAMENT"
+ string="\(ps"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2762;"
+ u:name="HEAVY EXCLAMATION MARK ORNAMENT"
+ string="\fB!\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2763;"
+ u:name="HEAVY HEART EXCLAMATION MARK ORNAMENT"
+ string="\fB!\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2764;"
+ u:name="HEAVY BLACK HEART"
+ string="\fB\(HE\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2765;"
+ u:name="ROTATED HEAVY BLACK HEART BULLET"
+ string="\fB\(HE\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2766;"
+ u:name="FLORAL HEART"
+ string="\fB\(HE\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2767;"
+ u:name="ROTATED FLORAL HEART BULLET"
+ string="\fB\(HE\fR"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2776;"
+ u:name="DINGBAT NEGATIVE CIRCLED DIGIT ONE"
+ string="1"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2777;"
+ u:name="DINGBAT NEGATIVE CIRCLED DIGIT TWO"
+ string="2"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2778;"
+ u:name="DINGBAT NEGATIVE CIRCLED DIGIT THREE"
+ string="3"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2779;"
+ u:name="DINGBAT NEGATIVE CIRCLED DIGIT FOUR"
+ string="4"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x277a;"
+ u:name="DINGBAT NEGATIVE CIRCLED DIGIT FIVE"
+ string="5"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x277b;"
+ u:name="DINGBAT NEGATIVE CIRCLED DIGIT SIX"
+ string="6"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x277c;"
+ u:name="DINGBAT NEGATIVE CIRCLED DIGIT SEVEN"
+ string="7"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x277d;"
+ u:name="DINGBAT NEGATIVE CIRCLED DIGIT EIGHT"
+ string="8"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x277e;"
+ u:name="DINGBAT NEGATIVE CIRCLED DIGIT NINE"
+ string="9"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x277f;"
+ u:name="DINGBAT NEGATIVE CIRCLED NUMBER TEN"
+ string="10"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2780;"
+ u:name="DINGBAT CIRCLED SANS-SERIF DIGIT ONE"
+ string="1"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2781;"
+ u:name="DINGBAT CIRCLED SANS-SERIF DIGIT TWO"
+ string="2"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2782;"
+ u:name="DINGBAT CIRCLED SANS-SERIF DIGIT THREE"
+ string="3"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2783;"
+ u:name="DINGBAT CIRCLED SANS-SERIF DIGIT FOUR"
+ string="4"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2784;"
+ u:name="DINGBAT CIRCLED SANS-SERIF DIGIT FIVE"
+ string="5"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2785;"
+ u:name="DINGBAT CIRCLED SANS-SERIF DIGIT SIX"
+ string="6"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2786;"
+ u:name="DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN"
+ string="7"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2787;"
+ u:name="DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT"
+ string="8"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2788;"
+ u:name="DINGBAT CIRCLED SANS-SERIF DIGIT NINE"
+ string="9"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2789;"
+ u:name="DINGBAT CIRCLED SANS-SERIF NUMBER TEN"
+ string="10"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x278a;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE"
+ string="1"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x278b;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO"
+ string="2"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x278c;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE"
+ string="3"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x278d;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR"
+ string="4"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x278e;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE"
+ string="5"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x278f;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX"
+ string="6"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2790;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN"
+ string="7"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2791;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT"
+ string="8"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2792;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE"
+ string="9"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2793;"
+ u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN"
+ string="10"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2794;"
+ u:name="HEAVY WIDE-HEADED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x2799;"
+ u:name="HEAVY RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x279b;"
+ u:name="DRAFTING POINT RIGHTWARDS ARROW"
+ string="\(->"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x279c;"
+ u:name="HEAVY ROUND-TIPPED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x279d;"
+ u:name="TRIANGLE-HEADED RIGHTWARDS ARROW"
+ string="\(->"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x279e;"
+ u:name="HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x279f;"
+ u:name="DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"
+ string="\(->"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27a0;"
+ u:name="HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27a1;"
+ u:name="BLACK RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27a2;"
+ u:name="THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD"
+ string="\(->"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27a3;"
+ u:name="THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD"
+ string="\(->"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27a4;"
+ u:name="BLACK RIGHTWARDS ARROWHEAD"
+ string="\(->"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27a7;"
+ u:name="SQUAT BLACK RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27a8;"
+ u:name="HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27a9;"
+ u:name="RIGHT-SHADED WHITE RIGHTWARDS ARROW"
+ string="\(rA"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27aa;"
+ u:name="LEFT-SHADED WHITE RIGHTWARDS ARROW"
+ string="\(rA"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27ab;"
+ u:name="BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW"
+ string="\(rA"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27ac;"
+ u:name="FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW"
+ string="\(rA"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27ad;"
+ u:name="HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
+ string="\(rA"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27ae;"
+ u:name="HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
+ string="\(rA"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27af;"
+ u:name="NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
+ string="\(rA"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27b1;"
+ u:name="NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
+ string="\(rA"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27b2;"
+ u:name="CIRCLED HEAVY WHITE RIGHTWARDS ARROW"
+ string="\(rA"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27b3;"
+ u:name="WHITE-FEATHERED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27b4;"
+ u:name="BLACK-FEATHERED SOUTH EAST ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27b5;"
+ u:name="BLACK-FEATHERED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27b6;"
+ u:name="BLACK-FEATHERED NORTH EAST ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27b7;"
+ u:name="HEAVY BLACK-FEATHERED SOUTH EAST ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27b8;"
+ u:name="HEAVY BLACK-FEATHERED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27b9;"
+ u:name="HEAVY BLACK-FEATHERED NORTH EAST ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27ba;"
+ u:name="TEARDROP-BARBED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27bb;"
+ u:name="HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27bc;"
+ u:name="WEDGE-TAILED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27bd;"
+ u:name="HEAVY WEDGE-TAILED RIGHTWARDS ARROW"
+ string="\fR\(->\fB"
+ u:block="Dingbats"
+ />
+ <xsl:output-character
+ character="&#x27be;"
+ u:name="OPEN-OUTLINED RIGHTWARDS ARROW"
+ string="\fR\(rA\fB"
+ u:block="Dingbats"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * 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
+ character="&#xfb00;"
+ u:name="LATIN SMALL LIGATURE FF"
+ u:entity="fflig"
+ string="\(ff"
+ u:block="Alphabetic Presentation Forms"
+ />
+ <xsl:output-character
+ character="&#xfb01;"
+ u:name="LATIN SMALL LIGATURE FI"
+ u:entity="filig"
+ string="\(fi"
+ u:block="Alphabetic Presentation Forms"
+ />
+ <xsl:output-character
+ character="&#xfb02;"
+ u:name="LATIN SMALL LIGATURE FL"
+ u:entity="fllig"
+ string="\(fl"
+ u:block="Alphabetic Presentation Forms"
+ />
+ <xsl:output-character
+ character="&#xfb03;"
+ u:name="LATIN SMALL LIGATURE FFI"
+ u:entity="ffilig"
+ string="\(Fi"
+ u:block="Alphabetic Presentation Forms"
+ />
+ <xsl:output-character
+ character="&#xfb04;"
+ u:name="LATIN SMALL LIGATURE FFL"
+ u:entity="ffllig"
+ string="\(Fl"
+ u:block="Alphabetic Presentation Forms"
+ />
+
+ <!-- * ***************************************************************** -->
+ <!-- * 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 & map to the roff zero-width no-break -->
+ <xsl:output-character
+ character="&#xfeff;"
+ u:name="ZERO WIDTH NO-BREAK SPACE"
+ string="\&amp;"
+ u:block="Arabic Presentation Forms-B"
+ />
+</xsl:character-map>
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/docbook.xsl b/docs/xsl-generic/manpages/docbook.xsl
new file mode 100644
index 00000000..87c7ade8
--- /dev/null
+++ b/docs/xsl-generic/manpages/docbook.xsl
@@ -0,0 +1,293 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ xmlns:ng="http://docbook.org/docbook-ng"
+ xmlns:db="http://docbook.org/ns/docbook"
+ exclude-result-prefixes="exsl"
+ version='1.0'>
+
+ <xsl:import href="../html/docbook.xsl"/>
+ <xsl:import href="../html/manifest.xsl"/>
+ <!-- * html-synop.xsl file is generated by build -->
+ <xsl:import href="html-synop.xsl"/>
+ <xsl:output method="text"
+ encoding="UTF-8"
+ indent="no"/>
+ <!-- ********************************************************************
+ $Id: docbook.xsl 7153 2007-07-26 14:08:55Z xmldoc $
+ ********************************************************************
+
+ 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:include href="../common/refentry.xsl"/>
+ <xsl:include href="../common/charmap.xsl"/>
+ <xsl:include href="param.xsl"/>
+ <xsl:include href="utility.xsl"/>
+ <xsl:include href="info.xsl"/>
+ <xsl:include href="other.xsl"/>
+ <xsl:include href="refentry.xsl"/>
+ <xsl:include href="block.xsl"/>
+ <xsl:include href="inline.xsl"/>
+ <xsl:include href="synop.xsl"/>
+ <xsl:include href="lists.xsl"/>
+ <xsl:include href="endnotes.xsl"/>
+ <xsl:include href="table.xsl"/>
+
+ <!-- * we rename the following just to avoid using params with "man" -->
+ <!-- * prefixes in the table.xsl stylesheet (because that stylesheet -->
+ <!-- * can potentially be reused for more than just man output) -->
+ <xsl:param name="tbl.font.headings" select="$man.font.table.headings"/>
+ <xsl:param name="tbl.font.title" select="$man.font.table.title"/>
+
+ <!-- ==================================================================== -->
+
+ <xsl:template match="/">
+ <!-- * Get a title for current doc so that we let the user -->
+ <!-- * know what document we are processing at this point. -->
+ <xsl:variable name="doc.title">
+ <xsl:call-template name="get.doc.title"/>
+ </xsl:variable>
+ <xsl:choose>
+ <!-- * when we find a namespaced document, strip the -->
+ <!-- * namespace and then continue processing it. -->
+ <xsl:when test="//self::db:*">
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Note</xsl:with-param>
+ <xsl:with-param name="source" select="$doc.title"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text>namesp. cut</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>stripped namespace before processing</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:variable name="stripns">
+ <xsl:apply-templates mode="stripNS"/>
+ </xsl:variable>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Note</xsl:with-param>
+ <xsl:with-param name="source" select="$doc.title"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text>namesp. cut</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>processing stripped document</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:apply-templates select="exsl:node-set($stripns)"/>
+ </xsl:when>
+ <xsl:when test="//*[local-name() = 'refentry']">
+ <!-- * Check to see if we have any refentry children in this -->
+ <!-- * document; if so, process them. The reason we use -->
+ <!-- * local-name()=refentry (instead of just //refentry) to to -->
+ <!-- * check for refentry children is because this stylsheet is -->
+ <!-- * also post-processed by the stylesheet build to create the -->
+ <!-- * manpages/profile-docbook.xsl, and the refentry child check -->
+ <!-- * in the profile-docbook.xsl stylesheet won't work if we do -->
+ <!-- * a simple //refentry check. -->
+ <xsl:apply-templates select="//refentry"/>
+ <!-- * if $man.output.manifest.enabled is non-zero, -->
+ <!-- * generate a manifest file -->
+ <xsl:if test="not($man.output.manifest.enabled = 0)">
+ <xsl:call-template name="generate.manifest">
+ <xsl:with-param name="filename">
+ <xsl:choose>
+ <xsl:when test="not($man.output.manifest.filename = '')">
+ <!-- * If a name for the manifest file is specified, -->
+ <!-- * use that name. -->
+ <xsl:value-of select="$man.output.manifest.filename"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Otherwise, if user has unset -->
+ <!-- * $man.output.manifest.filename, default to -->
+ <!-- * using "MAN.MANIFEST" as the filename. Because -->
+ <!-- * $man.output.manifest.enabled is non-zero and -->
+ <!-- * so we must have a filename in order to -->
+ <!-- * generate the manifest. -->
+ <xsl:text>MAN.MANIFEST</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Otherwise, the document does not contain any -->
+ <!-- * refentry elements, so log/emit message and stop. -->
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Erro</xsl:with-param>
+ <xsl:with-param name="source" select="$doc.title"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text> no refentry</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>No refentry elements found</xsl:text>
+ <xsl:if test="$doc.title != ''">
+ <xsl:text> in "</xsl:text>
+ <xsl:choose>
+ <xsl:when test="string-length($doc.title) &gt; 30">
+ <xsl:value-of select="substring($doc.title,1,30)"/>
+ <xsl:text>...</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$doc.title"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>"</xsl:text>
+ </xsl:if>
+ <xsl:text>.</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- ============================================================== -->
+
+ <xsl:template match="refentry">
+ <xsl:param name="lang">
+ <xsl:call-template name="l10n.language"/>
+ </xsl:param>
+ <!-- * Just use the first refname found as the "name" of the man -->
+ <!-- * page (which may different from the "title"...) -->
+ <xsl:variable name="first.refname" select="refnamediv[1]/refname[1]"/>
+
+ <xsl:call-template name="root.messages">
+ <xsl:with-param name="refname" select="$first.refname"/>
+ </xsl:call-template>
+
+ <!-- * Because there are several times when we need to check *info of -->
+ <!-- * each refentry and its ancestors, we get those and store the -->
+ <!-- * data from them as a node-set in memory. -->
+
+ <!-- * Make a node-set with contents of *info -->
+ <xsl:variable name="get.info"
+ select="ancestor-or-self::*/*[substring(local-name(),
+ string-length(local-name()) - 3) = 'info']"
+ />
+ <xsl:variable name="info" select="exsl:node-set($get.info)"/>
+
+ <!-- * The get.refentry.metadata template is in -->
+ <!-- * ../common/refentry.xsl. It looks for metadata in $info -->
+ <!-- * and in various other places and then puts it into a form -->
+ <!-- * that's easier for us to digest. -->
+ <xsl:variable name="get.refentry.metadata">
+ <xsl:call-template name="get.refentry.metadata">
+ <xsl:with-param name="refname" select="$first.refname"/>
+ <xsl:with-param name="info" select="$info"/>
+ <xsl:with-param name="prefs" select="$refentry.metadata.prefs"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="refentry.metadata" select="exsl:node-set($get.refentry.metadata)"/>
+
+ <!-- * Assemble the various parts into a complete page, then store into -->
+ <!-- * $manpage.contents so that we can manipluate them further. -->
+ <xsl:variable name="manpage.contents">
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * top.comment = commented-out section at top of roff source -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:call-template name="top.comment">
+ <xsl:with-param name="info" select="$info"/>
+ <xsl:with-param name="date" select="$refentry.metadata/date"/>
+ <xsl:with-param name="title" select="$refentry.metadata/title"/>
+ <xsl:with-param name="manual" select="$refentry.metadata/manual"/>
+ <xsl:with-param name="source" select="$refentry.metadata/source"/>
+ </xsl:call-template>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * TH.title.line = title line in header/footer of man page -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:call-template name="TH.title.line">
+ <!-- * .TH TITLE section extra1 extra2 extra3 -->
+ <!-- * -->
+ <!-- * According to the man(7) man page: -->
+ <!-- * -->
+ <!-- * extra1 = date, "the date of the last revision" -->
+ <!-- * extra2 = source, "the source of the command" -->
+ <!-- * extra3 = manual, "the title of the manual -->
+ <!-- * (e.g., Linux Programmer's Manual)" -->
+ <!-- * -->
+ <!-- * So, we end up with: -->
+ <!-- * -->
+ <!-- * .TH TITLE section date source manual -->
+ <!-- * -->
+ <xsl:with-param name="title" select="$refentry.metadata/title"/>
+ <xsl:with-param name="section" select="$refentry.metadata/section"/>
+ <xsl:with-param name="extra1" select="$refentry.metadata/date"/>
+ <xsl:with-param name="extra2" select="$refentry.metadata/source"/>
+ <xsl:with-param name="extra3" select="$refentry.metadata/manual"/>
+ </xsl:call-template>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * Set default hyphenation, justification, indentation, and -->
+ <!-- * line-breaking -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:call-template name="set.default.formatting"/>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * Main body of man page -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:apply-templates/>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * AUTHOR section -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:if test="not($man.authors.section.enabled = 0)">
+ <xsl:call-template name="author.section">
+ <xsl:with-param name="info" select="$info"/>
+ </xsl:call-template>
+ </xsl:if>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * COPYRIGHT section -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:if test="not($man.copyright.section.enabled = 0)">
+ <xsl:call-template name="copyright.section">
+ <xsl:with-param name="info" select="$info"/>
+ </xsl:call-template>
+ </xsl:if>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * NOTES list (only if user wants endnotes numbered and/or listed) -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:if test="$man.endnotes.list.enabled != 0 or
+ $man.endnotes.are.numbered != 0">
+ <xsl:call-template name="endnotes.list"/>
+ </xsl:if>
+ </xsl:variable> <!-- * end of manpage.contents -->
+
+ <!-- * Prepare the page contents for final output, then store in -->
+ <!-- * $manpage.contents.prepared so the we can pass it on to the -->
+ <!-- * write.text.chunk() function -->
+ <xsl:variable name="manpage.contents.prepared">
+ <!-- * "Preparing" the page contents involves, at a minimum, -->
+ <!-- * doubling any backslashes found (so they aren't interpreted -->
+ <!-- * as roff escapes). -->
+ <!-- * -->
+ <!-- * If $charmap.enabled is true, "preparing" the page contents also -->
+ <!-- * involves applying a character map to convert Unicode symbols and -->
+ <!-- * special characters into corresponding roff escape sequences. -->
+ <xsl:call-template name="prepare.manpage.contents">
+ <xsl:with-param name="content" select="$manpage.contents"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <!-- * Write the prepared page contents to disk to create -->
+ <!-- * the final man page. -->
+ <xsl:call-template name="write.man.file">
+ <xsl:with-param name="name" select="$first.refname"/>
+ <xsl:with-param name="section" select="$refentry.metadata/section"/>
+ <xsl:with-param name="lang" select="$lang"/>
+ <xsl:with-param name="content" select="$manpage.contents.prepared"/>
+ </xsl:call-template>
+
+ <!-- * Generate "stub" (alias) pages (if any needed) -->
+ <xsl:call-template name="write.stubs">
+ <xsl:with-param name="first.refname" select="$first.refname"/>
+ <xsl:with-param name="section" select="$refentry.metadata/section"/>
+ <xsl:with-param name="lang" select="$lang"/>
+ </xsl:call-template>
+
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/endnotes.xsl b/docs/xsl-generic/manpages/endnotes.xsl
new file mode 100644
index 00000000..f1c7480c
--- /dev/null
+++ b/docs/xsl-generic/manpages/endnotes.xsl
@@ -0,0 +1,535 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ xmlns:ng="http://docbook.org/docbook-ng"
+ xmlns:db="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ exclude-result-prefixes="db ng exsl xlink"
+ version='1.0'>
+
+<!-- ********************************************************************
+ $Id: endnotes.xsl 7254 2007-08-18 23:59:53Z xmldoc $
+ ********************************************************************
+
+ 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.
+
+ ******************************************************************** -->
+
+<!-- ==================================================================== -->
+<!-- * -->
+<!-- * The templates in this file handle elements whose contents can't -->
+<!-- * be displayed completely within the main text flow in output, but -->
+<!-- * instead need to be displayed "out of line". Those elements are: -->
+<!-- * -->
+<!-- * - elements providing annotative text (annotation|alt|footnote) -->
+<!-- * - elements pointing at external resources (ulink, link, and -->
+<!-- * any elements with xlink:href attributes; and imagedata, -->
+<!-- * audiodata, and videodata - which (using their fileref -->
+<!-- * attribute) reference external files -->
+<!-- * -->
+<!-- * Within this stylesheet, the above are collectively referred to as -->
+<!-- * a "notesources". This stylesheet handles those notesources in -->
+<!-- * this way: -->
+<!-- * -->
+<!-- * 1. Constructs a numbered in-memory index of all unique "earmarks“ -->
+<!-- * of all notesources in the document. For each link, the -->
+<!-- * earmark is the value of its url or xlink:href attribute; for -->
+<!-- * each imagedata|audiodata|videodata: the value of its fileref -->
+<!-- * attribute; for each annotative element: its content. -->
+<!-- * -->
+<!-- * Notesources with the same earmark are assigned the same -->
+<!-- * number. -->
+<!-- * -->
+<!-- * By design, that index excludes any element whose whose string -->
+<!-- * value is identical to value of its url xlink:href attribute). -->
+<!-- * -->
+<!-- * 2. Puts a numbered marker inline to mark the place where the -->
+<!-- * notesource occurs in the main text flow. -->
+<!-- * -->
+<!-- * 3. Generates a numbered endnotes list (titled NOTES in English) -->
+<!-- * at the end of the man page, with the contents of each -->
+<!-- * notesource. -->
+<!-- * -->
+<!-- * Note that table footnotes are not listed in the endnotes list, -->
+<!-- * and are not handled by this stylesheet (they are instead handled -->
+<!-- * by the table.xsl stylesheet). -->
+<!-- * -->
+<!-- * Also, we don't get notesources in *info sections or Refmeta or -->
+<!-- * Refnamediv or Indexterm, because, in manpages output, contents of -->
+<!-- * those are either suppressed or are displayed out of document -->
+<!-- * order - for example, the Info/Author content gets moved to the -->
+<!-- * end of the page. So, if we were to number notesources in the -->
+<!-- * Author content, it would "throw off" the numbering at the -->
+<!-- * beginning of the main text flow. -->
+<!-- * -->
+<!-- * And for the record, one reason we don't use xsl:key to index the -->
+<!-- * earmarks is that we need to get and check the sets of -->
+<!-- * earmarks for uniqueness per-Refentry (not per-document). -->
+<!-- * -->
+<!-- * FIXME: as -->
+<!-- * with "repeat" URLS, alt instances that have the same string value -->
+<!-- * as preceding ones (likely to occur for repeat acroynyms and -->
+<!-- * abbreviations) should be listed only once in the endnotes list, -->
+<!-- * and numbered accordingly inline; split man.indent.width into -->
+<!-- * man.indent.width.value (default 4) and man.indent.width.units -->
+<!-- * (default n); also, if the first child of notesource is some block -->
+<!-- * content other than a (non-formal) paragraph, the current code -->
+<!-- * will probably end up generating a blank line after the -->
+<!-- * corresponding number in the endnotes list... we should probably -->
+<!-- * try to instead display the title of that block content there (if -->
+<!-- * there is one: e.g., the list title, admonition title, etc.) -->
+
+<!-- ==================================================================== -->
+
+<xsl:template name="get.all.earmark.indexes.in.current.document">
+ <!-- * Here we create a tree to hold indexes of all earmarks in -->
+ <!-- * the current document. If the current document contains -->
+ <!-- * multiple refentry instances, then this tree will contain -->
+ <!-- * multiple indexes. -->
+ <xsl:if test="$man.endnotes.are.numbered != 0">
+ <!-- * Only create earmark indexes if user wants numbered endnotes -->
+ <xsl:for-each select="//refentry">
+ <earmark.index>
+ <xsl:attribute name="idref">
+ <xsl:value-of select="generate-id()"/>
+ </xsl:attribute>
+ <xsl:for-each
+ select=".//*[self::*[@xlink:href]
+ or self::ulink
+ or self::imagedata
+ or self::audiodata
+ or self::videodata
+ or self::footnote[not(ancestor::table)]
+ or self::annotation
+ or self::alt]
+ [(node()
+ or self::imagedata
+ or self::audiodata
+ or self::videodata
+ )
+ and not(ancestor::refentryinfo)
+ and not(ancestor::info)
+ and not(ancestor::docinfo)
+ and not(ancestor::refmeta)
+ and not(ancestor::refnamediv)
+ and not(ancestor::indexterm)
+ and not(. = @url)
+ and not(. = @xlink:href)
+ and not(@url =
+ preceding::ulink[node()
+ and not(ancestor::refentryinfo)
+ and not(ancestor::info)
+ and not(ancestor::docinfo)
+ and not(ancestor::refmeta)
+ and not(ancestor::refnamediv)
+ and not(ancestor::indexterm)
+ and (generate-id(ancestor::refentry)
+ = generate-id(current()))]/@url)
+ and not(@xlink:href =
+ preceding::*[@xlink:href][node()
+ and not(ancestor::refentryinfo)
+ and not(ancestor::info)
+ and not(ancestor::docinfo)
+ and not(ancestor::refmeta)
+ and not(ancestor::refnamediv)
+ and not(ancestor::indexterm)
+ and (generate-id(ancestor::refentry)
+ = generate-id(current()))]/@xlink:href)
+ and not(@fileref =
+ preceding::*[@fileref][
+ not(ancestor::refentryinfo)
+ and not(ancestor::info)
+ and not(ancestor::docinfo)
+ and not(ancestor::refmeta)
+ and not(ancestor::refnamediv)
+ and not(ancestor::indexterm)
+ and (generate-id(ancestor::refentry)
+ = generate-id(current()))]/@fileref)]">
+ <earmark>
+ <xsl:attribute name="id">
+ <xsl:value-of select="generate-id()"/>
+ </xsl:attribute>
+ <xsl:attribute name="number">
+ <xsl:value-of select="position()"/>
+ </xsl:attribute>
+ <xsl:if test="@url|@xlink:href|@fileref">
+ <!-- * Only add a uri attribute if the notesource is -->
+ <!-- * a link or an element that references an external -->
+ <!-- * (an imagedata, audiodata, or videodata element) -->
+ <xsl:attribute name="uri">
+ <xsl:value-of select="@url|@xlink:href|@fileref"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:copy>
+ <xsl:copy-of select="node()"/>
+ </xsl:copy>
+ </earmark>
+ </xsl:for-each>
+ </earmark.index>
+ </xsl:for-each>
+ </xsl:if>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template match="*[@xlink:href]|ulink
+ |imagedata|audiodata|videodata
+ |footnote[not(ancestor::table)]
+ |annotation|alt">
+ <xsl:variable name="all.earmark.indexes.in.current.document.rtf">
+ <xsl:call-template name="get.all.earmark.indexes.in.current.document"/>
+ </xsl:variable>
+ <xsl:variable name="all.earmark.indexes.in.current.document"
+ select="exsl:node-set($all.earmark.indexes.in.current.document.rtf)"/>
+ <xsl:variable name="all.earmarks.in.current.refentry.rtf">
+ <!-- * get the set of all earmarks for the ancestor Refentry of -->
+ <!-- * this notesource -->
+ <xsl:copy-of
+ select="$all.earmark.indexes.in.current.document/earmark.index
+ [@idref =
+ generate-id(current()/ancestor::refentry)]/earmark"/>
+ </xsl:variable>
+ <xsl:variable name="all.earmarks.in.current.refentry"
+ select="exsl:node-set($all.earmarks.in.current.refentry.rtf)"/>
+
+ <!-- * identify the earmark for the current element -->
+ <xsl:variable name="earmark">
+ <xsl:choose>
+ <xsl:when test="@url|@xlink:href">
+ <xsl:value-of select="@url|@xlink:href"/>
+ </xsl:when>
+ <xsl:when test="@fileref">
+ <xsl:value-of select="@fileref"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="generate-id()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="notesource.number">
+ <!-- * Get the number for this notesource -->
+ <!-- * -->
+ <!-- * If this is an imagedata, audiodata, or videodata element -->
+ <!-- * OR if it's a non-empty element AND its string value is not -->
+ <!-- * equal to the value of its url or xlink:href attribute (if -->
+ <!-- * it has one) AND user wants endnotes numbered, only then -->
+ <!-- * do we output a number for it -->
+ <xsl:if test="(self::imagedata or
+ self::audiodata or
+ self::videodata or
+ (node()
+ and not(. = @url)
+ and not(. = @xlink:href))
+ )
+ and $man.endnotes.are.numbered != 0">
+ <!-- * To select the number for this notesource, we -->
+ <!-- * check the index of all earmarks for the current refentry -->
+ <!-- * and find the number of the indexed earmark which matches -->
+ <!-- * this notesource's earmark. -->
+ <!-- * Note that multiple notesources may share the same -->
+ <!-- * numbered earmark; in that case, they get the same number. -->
+ <!-- * -->
+ <xsl:choose>
+ <xsl:when test="self::ulink or
+ self::*[@xlink:href] or
+ self::imagedata or
+ self::audiodata or
+ self::videodata">
+ <xsl:value-of select="$all.earmarks.in.current.refentry/earmark[@uri = $earmark]/@number"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$all.earmarks.in.current.refentry/earmark[@id = $earmark]/@number"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:variable name="notesource.contents">
+ <xsl:choose>
+ <!-- * check to see if the element is empty or not -->
+ <xsl:when test="node()">
+ <!-- * this is a non-empty node, so process its contents -->
+ <xsl:apply-templates/>
+ <xsl:if test="../footnote or ../annotation">
+ <!-- * if this element is a footnote or annotation, we need to -->
+ <!-- * do some further checking on it, so we can emit warnings -->
+ <!-- * about potential problems -->
+ <xsl:for-each select="node()">
+ <xsl:if test="local-name() != 'para' and local-name() !=''">
+ <!-- * for each node we find as a child of a footnote or -->
+ <!-- * annotation, if it's not a para or a text node, emit a -->
+ <!-- * warning... because in manpages output, we can't render -->
+ <!-- * block-level child content of an endnote properly unless -->
+ <!-- * it's wrapped in a para that has some "prefatory" text -->
+ <xsl:variable name="parent-name" select="local-name(..)"/>
+ <xsl:variable name="refname" select="ancestor::refentry/refnamediv[1]/refname[1]"/>
+ <xsl:variable name="endnote-number">
+ <xsl:call-template name="pad-string">
+ <!-- * endnote number may be 2 digits, so pad it with a space -->
+ <!-- * if we have only 1 digit -->
+ <xsl:with-param name="padVar" select="concat('#',$notesource.number)"/>
+ <xsl:with-param name="length" select="3"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Warn</xsl:with-param>
+ <xsl:with-param name="source" select="$refname"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text>endnote </xsl:text>
+ <xsl:value-of select="$endnote-number"/>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>Bad: </xsl:text>
+ <xsl:value-of select="$parent-name"/>
+ <!-- * figure out which occurance of this element type this -->
+ <!-- * instance is and output a number in square brackets so -->
+ <!-- * that end-user can know which element to fix -->
+ <xsl:text>[</xsl:text>
+ <xsl:value-of select="count(preceding::*[local-name() = $parent-name]) + 1"/>
+ <xsl:text>]</xsl:text>
+ <xsl:text> in source</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Note</xsl:with-param>
+ <xsl:with-param name="source" select="$refname"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text>endnote </xsl:text>
+ <xsl:value-of select="$endnote-number"/>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>Has: </xsl:text>
+ <xsl:value-of select="$parent-name"/>
+ <xsl:text>/</xsl:text>
+ <xsl:value-of select="local-name(.)"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Note</xsl:with-param>
+ <xsl:with-param name="source" select="$refname"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text>endnote </xsl:text>
+ <xsl:value-of select="$endnote-number"/>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>Fix: </xsl:text>
+ <xsl:value-of select="$parent-name"/>
+ <xsl:text>/</xsl:text>
+ <xsl:text>para/</xsl:text>
+ <xsl:value-of select="local-name(.)"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Otherwise this is an empty link or an empty imagedata, -->
+ <!-- * audiodata, or videodata element, so we just get the -->
+ <!-- * value of its url, xlink:href, or fileref attribute. -->
+ <xsl:if test="$man.hyphenate.urls = 0
+ and $man.break.after.slash = 0">
+ <!-- * Add hyphenation suppression in URL output only if -->
+ <!-- * break.after.slash is also non-zero -->
+ <xsl:call-template name="suppress.hyphenation"/>
+ <xsl:text>\%</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$earmark"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:if test="self::ulink or self::*[@xlink:href]">
+ <!-- * This is a hyperlink, so we need to decide how to format -->
+ <!-- * the inline contents of the link (to underline or not). -->
+ <xsl:choose>
+ <!-- * if user wants links underlined, underline (ital) it -->
+ <xsl:when test="$man.links.are.underlined != 0">
+ <xsl:variable name="link.wrapper">
+ <xsl:value-of select="$notesource.contents"/>
+ </xsl:variable>
+ <xsl:call-template name="italic">
+ <xsl:with-param name="node" select="exsl:node-set($link.wrapper)"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * user doesn't want links underlined, so just display content -->
+ <xsl:value-of select="$notesource.contents"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+
+ <xsl:if test="$notesource.number != ''">
+ <!-- * Format the number by placing it in square brackets. FIXME: -->
+ <!-- * This formatting should probably be made user-configurable, -->
+ <!-- * to allow something other than just square brackets; e.g., -->
+ <!-- * Angle brackets<10> or Braces{10} -->
+ <xsl:text>\&amp;[</xsl:text>
+ <xsl:value-of select="$notesource.number"/>
+ <xsl:text>]</xsl:text>
+ <!-- * Note that the reason for the \& before the opening bracket -->
+ <!-- * is to prevent any possible linebreak from being introduced -->
+ <!-- * between the opening bracket and the following text. -->
+ </xsl:if>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="endnotes.list">
+ <!-- We have stored earmark indexes for all refentry instances in the -->
+ <!-- current document, with the ID for each index being the same ID as -->
+ <!-- its corresponding refentry; so we now need to get the ID for the -->
+ <!-- current refentry so we can grab its corresponding earmark index -->
+ <xsl:variable name="current.refentry.id">
+ <xsl:value-of select="generate-id(.)"/>
+ </xsl:variable>
+
+ <xsl:variable name="endnotes.rtf">
+ <xsl:variable name="all.earmark.indexes.in.current.document.rtf">
+ <xsl:call-template name="get.all.earmark.indexes.in.current.document"/>
+ </xsl:variable>
+ <xsl:variable name="all.earmark.indexes.in.current.document"
+ select="exsl:node-set($all.earmark.indexes.in.current.document.rtf)"/>
+ <xsl:copy-of
+ select="$all.earmark.indexes.in.current.document/earmark.index
+ [@idref = $current.refentry.id]/earmark"/>
+ </xsl:variable>
+
+ <xsl:variable name="endnotes" select="exsl:node-set($endnotes.rtf)"/>
+
+ <!-- * check to see if we have actually found any content to use as -->
+ <!-- * endnotes; if we have, we generate the endnotes list, if not, -->
+ <!-- * we do nothing -->
+ <xsl:if test="$endnotes/node()">
+ <xsl:call-template name="format.endnotes.list">
+ <xsl:with-param name="endnotes" select="$endnotes"/>
+ </xsl:call-template>
+ </xsl:if>
+
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="format.endnotes.list">
+ <xsl:param name="endnotes"/>
+ <xsl:call-template name="mark.subheading"/>
+
+ <!-- * ======= make the endnotes-list section heading ============= -->
+ <xsl:text>.SH "</xsl:text>
+ <xsl:call-template name="string.upper">
+ <xsl:with-param name="string">
+ <xsl:choose>
+ <!-- * if user has specified a heading, use that -->
+ <xsl:when test="$man.endnotes.list.heading != ''">
+ <xsl:value-of select="$man.endnotes.list.heading"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * otherwise, get localized heading from gentext -->
+ <!-- * (in English, NOTES) -->
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'Notes'"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>"&#10;</xsl:text>
+
+ <!-- * ================ process each earmark ====================== -->
+ <xsl:for-each select="$endnotes/earmark">
+ <!-- * make paragraph with hanging indent, and starting with a -->
+ <!-- * number in the form " 1." (padded to $man.indent.width - 1) -->
+ <xsl:text>.IP</xsl:text>
+ <xsl:text> "</xsl:text>
+ <xsl:variable name="endnote.number">
+ <xsl:value-of select="@number"/>
+ <xsl:text>.</xsl:text>
+ </xsl:variable>
+ <xsl:call-template name="pad-string">
+ <xsl:with-param name="padVar" select="$endnote.number"/>
+ <!-- FIXME: the following assumes that $man.indent.width is in -->
+ <!-- en's; also, this should probably use $list.indent instead -->
+ <xsl:with-param name="length" select="$man.indent.width - 1"/>
+ </xsl:call-template>
+ <xsl:text>"</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+
+ <!-- * ========================================================= -->
+ <!-- * print the notesource/endnote contents -->
+ <!-- * ========================================================= -->
+ <xsl:choose>
+ <xsl:when test="*/node()">
+ <!-- * if the earmark has non-empty child content, then -->
+ <!-- * its corresponding notesource is either a link or -->
+ <!-- * an instance of annotative text, so we want to -->
+ <!-- * display that content -->
+ <xsl:choose>
+ <xsl:when test="*/node()[name(.)!='']">
+ <!-- * if node is not text only, then process it as-is -->
+ <xsl:apply-templates select="*/node()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * otherwise node is text-only, so normalize it -->
+ <xsl:value-of select="normalize-space(*/node())"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * otherwise, this earmark has empty content, -->
+ <!-- * which means its corresponding notesources is an -->
+ <!-- * imagedata, audiodata, or videodata instance; in -->
+ <!-- * that case, we use the value of the notesoures's -->
+ <!-- * @fileref attribute (which is stored in the -->
+ <!-- * earmark uri attribute) as the "contents" for -->
+ <!-- * this endnote/notesource -->
+ <xsl:value-of select="@uri"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>&#10;</xsl:text>
+
+ <!-- * ========================================================= -->
+ <!-- * print the URL for links -->
+ <!-- * ========================================================= -->
+ <!-- * In addition to the notesource contents, if the -->
+ <!-- * notesource is a link, we display the URL for the link. -->
+ <!-- * But for notesources that are imagedata, audiodata, or -->
+ <!-- * videodata instances, we don't want to (re)display the -->
+ <!-- * URL for those here, because for those elements, the -->
+ <!-- * notesource contents are the URL (the value of the -->
+ <!-- * @fileref attribute), and we have already rendered them. -->
+ <!-- * -->
+ <!-- * We know an earmark is a link if it has non-empty child -->
+ <!-- * content and a uri attribute; so we check for that -->
+ <!-- * condition here. -->
+ <xsl:if test="*/node() and @uri">
+ <xsl:text>.RS</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <!-- * Add hyphenation suppression in URL output only if -->
+ <!-- * $break.after.slash is also non-zero -->
+ <xsl:if test="$man.hyphenate.urls = 0
+ and $man.break.after.slash = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ <xsl:text>\%</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="@uri"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.RE</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+
+ </xsl:for-each>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/html-synop.xsl b/docs/xsl-generic/manpages/html-synop.xsl
new file mode 100644
index 00000000..a6182a01
--- /dev/null
+++ b/docs/xsl-generic/manpages/html-synop.xsl
@@ -0,0 +1,1605 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!-- ********************************************************************
+ $Id: synop.xsl 7250 2007-08-18 10:19:00Z xmldoc $
+ ********************************************************************
+
+ 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.
+
+ ******************************************************************** -->
+
+<!-- ==================================================================== -->
+
+<!-- synopsis is in verbatim -->
+
+<!-- ==================================================================== -->
+
+<xsl:template match="cmdsynopsis">
+ <div>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <p>
+ <xsl:if test="..//processing-instruction('dbcmdlist')">
+ <!-- * Placing a dbcmdlist PI as a child of a particular element -->
+ <!-- * creates a hyperlinked list of all cmdsynopsis instances -->
+ <!-- * that are descendants of that element; so for any -->
+ <!-- * cmdsynopsis that is a descendant of an element containing -->
+ <!-- * a dbcmdlist PI, we need to output an a@id instance so that -->
+ <!-- * we will have something to link to -->
+ <xsl:call-template name="anchor">
+ <xsl:with-param name="conditional" select="0"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:apply-templates/>
+ </p>
+ </div>
+</xsl:template>
+
+<xsl:template match="cmdsynopsis/command">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:call-template name="inline.monoseq"/>
+ <xsl:text> </xsl:text>
+</xsl:template>
+
+<xsl:template match="cmdsynopsis/command[1]" priority="2">
+ <xsl:call-template name="inline.monoseq"/>
+ <xsl:text> </xsl:text>
+</xsl:template>
+
+<xsl:template match="group|arg" name="group-or-arg">
+ <xsl:variable name="choice" select="@choice"/>
+ <xsl:variable name="rep" select="@rep"/>
+ <xsl:variable name="sepchar">
+ <xsl:choose>
+ <xsl:when test="ancestor-or-self::*/@sepchar">
+ <xsl:value-of select="ancestor-or-self::*/@sepchar"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:if test="preceding-sibling::*">
+ <xsl:value-of select="$sepchar"/>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$choice='plain'">
+ <xsl:value-of select="$arg.choice.plain.open.str"/>
+ </xsl:when>
+ <xsl:when test="$choice='req'">
+ <xsl:value-of select="$arg.choice.req.open.str"/>
+ </xsl:when>
+ <xsl:when test="$choice='opt'">
+ <xsl:value-of select="$arg.choice.opt.open.str"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$arg.choice.def.open.str"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates/>
+ <xsl:choose>
+ <xsl:when test="$rep='repeat'">
+ <xsl:value-of select="$arg.rep.repeat.str"/>
+ </xsl:when>
+ <xsl:when test="$rep='norepeat'">
+ <xsl:value-of select="$arg.rep.norepeat.str"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$arg.rep.def.str"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="$choice='plain'">
+ <xsl:value-of select="$arg.choice.plain.close.str"/>
+ </xsl:when>
+ <xsl:when test="$choice='req'">
+ <xsl:value-of select="$arg.choice.req.close.str"/>
+ </xsl:when>
+ <xsl:when test="$choice='opt'">
+ <xsl:value-of select="$arg.choice.opt.close.str"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$arg.choice.def.close.str"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="group/arg">
+ <xsl:variable name="choice" select="@choice"/>
+ <xsl:variable name="rep" select="@rep"/>
+ <xsl:if test="preceding-sibling::*">
+ <xsl:value-of select="$arg.or.sep"/>
+ </xsl:if>
+ <xsl:call-template name="group-or-arg"/>
+</xsl:template>
+
+<xsl:template match="sbr">
+ <xsl:text>
+.
+</xsl:text>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<xsl:template match="synopfragmentref">
+ <xsl:variable name="target" select="key('id',@linkend)"/>
+ <xsl:variable name="snum">
+ <xsl:apply-templates select="$target" mode="synopfragment.number"/>
+ </xsl:variable>
+ <i>
+ <a href="#{@linkend}">
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$snum"/>
+ <xsl:text>)</xsl:text>
+ </a>
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates/>
+ </i>
+</xsl:template>
+
+<xsl:template match="synopfragment" mode="synopfragment.number">
+ <xsl:number format="1"/>
+</xsl:template>
+
+<xsl:template match="synopfragment">
+ <xsl:variable name="snum">
+ <xsl:apply-templates select="." mode="synopfragment.number"/>
+ </xsl:variable>
+ <p>
+ <xsl:variable name="id">
+ <xsl:call-template name="object.id"/>
+ </xsl:variable>
+ <a name="{$id}">
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$snum"/>
+ <xsl:text>)</xsl:text>
+ </a>
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates/>
+ </p>
+</xsl:template>
+
+<xsl:template match="funcsynopsis">
+ <xsl:if test="..//processing-instruction('dbfunclist')">
+ <!-- * Placing a dbfunclist PI as a child of a particular element -->
+ <!-- * creates a hyperlinked list of all funcsynopsis instances that -->
+ <!-- * are descendants of that element; so for any funcsynopsis that is -->
+ <!-- * a descendant of an element containing a dbfunclist PI, we need -->
+ <!-- * to output an a@id instance so that we will have something to -->
+ <!-- * link to -->
+ <xsl:call-template name="anchor">
+ <xsl:with-param name="conditional" select="0"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:call-template name="informal.object"/>
+</xsl:template>
+
+<xsl:template match="funcsynopsisinfo">
+ <xsl:text>.sp
+</xsl:text><xsl:text>.nf
+</xsl:text><pre>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates/>
+ </pre><xsl:text/><xsl:text>.fi
+</xsl:text>
+</xsl:template>
+
+<!-- ====================================================================== -->
+<!-- funcprototype -->
+<!--
+
+funcprototype ::= (funcdef,
+ (void|varargs|paramdef+))
+
+funcdef ::= (#PCDATA|type|replaceable|function)*
+
+paramdef ::= (#PCDATA|type|replaceable|parameter|funcparams)*
+-->
+
+<xsl:template match="funcprototype">
+ <xsl:variable name="html-style">
+ <xsl:call-template name="pi.dbhtml_funcsynopsis-style">
+ <xsl:with-param name="node" select="ancestor::funcsynopsis/descendant-or-self::*"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="style">
+ <xsl:choose>
+ <xsl:when test="$html-style != ''">
+ <xsl:value-of select="$html-style"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$funcsynopsis.style"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+<!--
+ <xsl:variable name="tabular-p"
+ select="$funcsynopsis.tabular.threshold &gt; 0
+ and string-length(.) &gt; $funcsynopsis.tabular.threshold"/>
+-->
+
+ <xsl:variable name="tabular-p" select="true()"/>
+
+ <xsl:choose>
+ <xsl:when test="$style = 'kr' and $tabular-p">
+ <xsl:apply-templates select="." mode="kr-tabular"/>
+ </xsl:when>
+ <xsl:when test="$style = 'kr'">
+ <xsl:apply-templates select="." mode="kr-nontabular"/>
+ </xsl:when>
+ <xsl:when test="$style = 'ansi' and $tabular-p">
+ <xsl:apply-templates select="." mode="ansi-tabular"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="ansi-nontabular"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- ====================================================================== -->
+<!-- funcprototype: kr, non-tabular -->
+
+<xsl:template match="funcprototype" mode="kr-nontabular">
+ <p>
+ <xsl:apply-templates mode="kr-nontabular"/>
+ <xsl:if test="paramdef">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:apply-templates select="paramdef" mode="kr-funcsynopsis-mode"/>
+ </xsl:if>
+ </p>
+</xsl:template>
+
+<xsl:template match="funcdef" mode="kr-nontabular">
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="kr-nontabular"/>
+ <xsl:text>(</xsl:text>
+ </code>
+</xsl:template>
+
+<xsl:template match="funcdef/function" mode="kr-nontabular">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <b class="fsfunc"><xsl:apply-templates mode="kr-nontabular"/></b>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="kr-nontabular"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="void" mode="kr-nontabular">
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+</xsl:template>
+
+<xsl:template match="varargs" mode="kr-nontabular">
+ <xsl:text>...</xsl:text>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+</xsl:template>
+
+<xsl:template match="paramdef" mode="kr-nontabular">
+ <xsl:apply-templates select="parameter" mode="kr-nontabular"/>
+ <xsl:choose>
+ <xsl:when test="following-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="paramdef/parameter" mode="kr-nontabular">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <var class="pdparam">
+ <xsl:apply-templates mode="kr-nontabular"/>
+ </var>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>
+ <xsl:apply-templates mode="kr-nontabular"/>
+ </code>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="paramdef" mode="kr-funcsynopsis-mode">
+ <xsl:if test="preceding-sibling::paramdef"><xsl:text>
+.
+</xsl:text></xsl:if>
+ <code>
+ <xsl:apply-templates mode="kr-funcsynopsis-mode"/>
+ </code>
+ <xsl:text>;</xsl:text>
+</xsl:template>
+
+<xsl:template match="paramdef/parameter" mode="kr-funcsynopsis-mode">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <var class="pdparam">
+ <xsl:apply-templates mode="kr-funcsynopsis-mode"/>
+ </var>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>
+ <xsl:apply-templates mode="kr-funcsynopsis-mode"/>
+ </code>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="funcparams" mode="kr-funcsynopsis-mode">
+ <code>(</code>
+ <xsl:apply-templates mode="kr-funcsynopsis-mode"/>
+ <code>)</code>
+</xsl:template>
+
+<!-- ====================================================================== -->
+<!-- funcprototype: kr, tabular -->
+
+<xsl:template match="funcprototype" mode="kr-tabular">
+ <table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" style="padding-bottom: 1em">
+ <tr>
+ <td>
+ <xsl:apply-templates select="funcdef" mode="kr-tabular"/>
+ </td>
+ <xsl:apply-templates select="(void|varargs|paramdef)[1]" mode="kr-tabular"/>
+ </tr>
+ <xsl:for-each select="(void|varargs|paramdef)[preceding-sibling::*[not(self::funcdef)]]">
+ <tr>
+ <td> </td>
+ <xsl:apply-templates select="." mode="kr-tabular"/>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <xsl:if test="paramdef">
+ <table border="0" summary="Function argument synopsis" cellspacing="0" cellpadding="0">
+ <xsl:if test="following-sibling::funcprototype">
+ <xsl:attribute name="style">padding-bottom: 1em</xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates select="paramdef" mode="kr-tabular-funcsynopsis-mode"/>
+ </table>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="funcdef" mode="kr-tabular">
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="kr-tabular"/>
+ <xsl:text>(</xsl:text>
+ </code>
+</xsl:template>
+
+<xsl:template match="funcdef/function" mode="kr-tabular">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <b class="fsfunc"><xsl:apply-templates mode="kr-nontabular"/></b>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="kr-tabular"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="void" mode="kr-tabular">
+ <td>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+ </td>
+ <td> </td>
+</xsl:template>
+
+<xsl:template match="varargs" mode="kr-tabular">
+ <td>
+ <xsl:text>...</xsl:text>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+ </td>
+ <td> </td>
+</xsl:template>
+
+<xsl:template match="paramdef" mode="kr-tabular">
+ <td>
+ <xsl:apply-templates select="parameter" mode="kr-tabular"/>
+ <xsl:choose>
+ <xsl:when test="following-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </td>
+ <td> </td>
+</xsl:template>
+
+<xsl:template match="paramdef/parameter" mode="kr-tabular">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <var class="pdparam">
+ <xsl:apply-templates mode="kr-tabular"/>
+ </var>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>
+ <xsl:apply-templates mode="kr-tabular"/>
+ </code>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="paramdef" mode="kr-tabular-funcsynopsis-mode">
+ <xsl:variable name="type">
+ <xsl:choose>
+ <xsl:when test="type">
+ <xsl:apply-templates select="type" mode="kr-tabular-funcsynopsis-mode"/>
+ </xsl:when>
+ <xsl:when test="normalize-space(parameter/preceding-sibling::node()[not(self::parameter)]) != ''">
+ <xsl:copy-of select="parameter/preceding-sibling::node()[not(self::parameter)]"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+
+ <tr>
+ <xsl:choose>
+ <xsl:when test="$type != '' and funcparams">
+ <td>
+ <code>
+ <xsl:copy-of select="$type"/>
+ </code>
+ <xsl:text> </xsl:text>
+ </td>
+ <td>
+ <code>
+ <xsl:choose>
+ <xsl:when test="type">
+ <xsl:apply-templates select="type/following-sibling::*" mode="kr-tabular-funcsynopsis-mode"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="*" mode="kr-tabular-funcsynopsis-mode"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </code>
+ </td>
+ </xsl:when>
+
+ <xsl:when test="funcparams">
+ <td colspan="2">
+ <code>
+ <xsl:apply-templates mode="kr-tabular-funcsynopsis-mode"/>
+ </code>
+ </td>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <td>
+ <code>
+ <xsl:apply-templates select="parameter/preceding-sibling::node()[not(self::parameter)]" mode="kr-tabular-funcsynopsis-mode"/>
+ </code>
+ <xsl:text> </xsl:text>
+ </td>
+ <td>
+ <code>
+ <xsl:apply-templates select="parameter" mode="kr-tabular"/>
+ <xsl:apply-templates select="parameter/following-sibling::*[not(self::parameter)]" mode="kr-tabular-funcsynopsis-mode"/>
+ <xsl:text>;</xsl:text>
+ </code>
+ </td>
+ </xsl:otherwise>
+ </xsl:choose>
+ </tr>
+</xsl:template>
+
+<xsl:template match="paramdef/parameter" mode="kr-tabular-funcsynopsis-mode">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <var class="pdparam">
+ <xsl:apply-templates mode="kr-tabular-funcsynopsis-mode"/>
+ </var>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>
+ <xsl:apply-templates mode="kr-tabular-funcsynopsis-mode"/>
+ </code>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="funcparams" mode="kr-tabular-funcsynopsis-mode">
+ <code>(</code>
+ <xsl:apply-templates mode="kr-tabular-funcsynopsis-mode"/>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+</xsl:template>
+
+<!-- ====================================================================== -->
+<!-- funcprototype: ansi, non-tabular -->
+
+<xsl:template match="funcprototype" mode="ansi-nontabular">
+ <p>
+ <xsl:apply-templates mode="ansi-nontabular"/>
+ </p>
+</xsl:template>
+
+<xsl:template match="funcdef" mode="ansi-nontabular">
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="ansi-nontabular"/>
+ <xsl:text>(</xsl:text>
+ </code>
+</xsl:template>
+
+<xsl:template match="funcdef/function" mode="ansi-nontabular">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <b class="fsfunc"><xsl:apply-templates mode="ansi-nontabular"/></b>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="ansi-nontabular"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="void" mode="ansi-nontabular">
+ <code>void)</code>
+ <xsl:text>;</xsl:text>
+</xsl:template>
+
+<xsl:template match="varargs" mode="ansi-nontabular">
+ <xsl:text>...</xsl:text>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+</xsl:template>
+
+<xsl:template match="paramdef" mode="ansi-nontabular">
+ <xsl:apply-templates mode="ansi-nontabular"/>
+ <xsl:choose>
+ <xsl:when test="following-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="paramdef/parameter" mode="ansi-nontabular">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <var class="pdparam">
+ <xsl:apply-templates mode="ansi-nontabular"/>
+ </var>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>
+ <xsl:apply-templates mode="ansi-nontabular"/>
+ </code>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="funcparams" mode="ansi-nontabular">
+ <code>(</code>
+ <xsl:apply-templates mode="ansi-nontabular"/>
+ <code>)</code>
+</xsl:template>
+
+<!-- ====================================================================== -->
+<!-- funcprototype: ansi, tabular -->
+
+<xsl:template match="funcprototype" mode="ansi-tabular">
+ <table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0">
+ <xsl:if test="following-sibling::funcprototype">
+ <xsl:attribute name="style">padding-bottom: 1em</xsl:attribute>
+ </xsl:if>
+ <tr>
+ <td>
+ <xsl:apply-templates select="funcdef" mode="ansi-tabular"/>
+ </td>
+ <xsl:apply-templates select="(void|varargs|paramdef)[1]" mode="ansi-tabular"/>
+ </tr>
+ <xsl:for-each select="(void|varargs|paramdef)[preceding-sibling::*[not(self::funcdef)]]">
+ <tr>
+ <td> </td>
+ <xsl:apply-templates select="." mode="ansi-tabular"/>
+ </tr>
+ </xsl:for-each>
+ </table>
+</xsl:template>
+
+<xsl:template match="funcdef" mode="ansi-tabular">
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="ansi-tabular"/>
+ <xsl:text>(</xsl:text>
+ </code>
+</xsl:template>
+
+<xsl:template match="funcdef/function" mode="ansi-tabular">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <b class="fsfunc"><xsl:apply-templates mode="ansi-nontabular"/></b>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="kr-tabular"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="void" mode="ansi-tabular">
+ <td>
+ <code>void)</code>
+ <xsl:text>;</xsl:text>
+ </td>
+ <td> </td>
+</xsl:template>
+
+<xsl:template match="varargs" mode="ansi-tabular">
+ <td>
+ <xsl:text>...</xsl:text>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+ </td>
+ <td> </td>
+</xsl:template>
+
+<xsl:template match="paramdef" mode="ansi-tabular">
+ <xsl:variable name="type">
+ <xsl:choose>
+ <xsl:when test="type">
+ <xsl:apply-templates select="type" mode="ansi-tabular"/>
+ </xsl:when>
+ <xsl:when test="normalize-space(parameter/preceding-sibling::node()[not(self::parameter)]) != ''">
+ <xsl:copy-of select="parameter/preceding-sibling::node()[not(self::parameter)]"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="$type != '' and funcparams">
+ <td>
+ <xsl:copy-of select="$type"/>
+ <xsl:text> </xsl:text>
+ </td>
+ <td>
+ <xsl:choose>
+ <xsl:when test="type">
+ <xsl:apply-templates select="type/following-sibling::*" mode="ansi-tabular"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="*" mode="ansi-tabular"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="following-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>
+ <xsl:apply-templates select="parameter/preceding-sibling::node()[not(self::parameter)]" mode="ansi-tabular"/>
+ <xsl:text> </xsl:text>
+ </td>
+ <td>
+ <xsl:apply-templates select="parameter" mode="ansi-tabular"/>
+ <xsl:apply-templates select="parameter/following-sibling::*[not(self::parameter)]" mode="ansi-tabular"/>
+ <xsl:choose>
+ <xsl:when test="following-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>)</code>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </td>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="paramdef/parameter" mode="ansi-tabular">
+ <xsl:choose>
+ <xsl:when test="$funcsynopsis.decoration != 0">
+ <var class="pdparam">
+ <xsl:apply-templates mode="ansi-tabular"/>
+ </var>
+ </xsl:when>
+ <xsl:otherwise>
+ <code>
+ <xsl:apply-templates mode="ansi-tabular"/>
+ </code>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="funcparams" mode="ansi-tabular">
+ <code>(</code>
+ <xsl:apply-templates/>
+ <code>)</code>
+</xsl:template>
+
+<!-- ====================================================================== -->
+
+<xsl:variable name="default-classsynopsis-language">java</xsl:variable>
+
+<xsl:template match="classsynopsis |fieldsynopsis |methodsynopsis |constructorsynopsis |destructorsynopsis">
+ <xsl:param name="language">
+ <xsl:choose>
+ <xsl:when test="@language">
+ <xsl:value-of select="@language"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$default-classsynopsis-language"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:param>
+
+ <xsl:choose>
+ <xsl:when test="$language='java' or $language='Java'">
+ <xsl:apply-templates select="." mode="java"/>
+ </xsl:when>
+ <xsl:when test="$language='perl' or $language='Perl'">
+ <xsl:apply-templates select="." mode="perl"/>
+ </xsl:when>
+ <xsl:when test="$language='idl' or $language='IDL'">
+ <xsl:apply-templates select="." mode="idl"/>
+ </xsl:when>
+ <xsl:when test="$language='cpp' or $language='c++' or $language='C++'">
+ <xsl:apply-templates select="." mode="cpp"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>Unrecognized language on </xsl:text>
+ <xsl:value-of select="local-name(.)"/>
+ <xsl:text>: </xsl:text>
+ <xsl:value-of select="$language"/>
+ </xsl:message>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="language" select="$default-classsynopsis-language"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="synop-break">
+ <xsl:if test="parent::classsynopsis or (following-sibling::fieldsynopsis |following-sibling::methodsynopsis |following-sibling::constructorsynopsis |following-sibling::destructorsynopsis)">
+ <xsl:text>
+.
+</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- ===== Java ======================================================== -->
+
+<xsl:template match="classsynopsis" mode="java">
+ <xsl:text>.sp
+</xsl:text><xsl:text>.nf
+</xsl:text><pre>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates select="ooclass[1]" mode="java"/>
+ <xsl:if test="ooclass[preceding-sibling::*]">
+ <xsl:text> extends</xsl:text>
+ <xsl:apply-templates select="ooclass[preceding-sibling::*]" mode="java"/>
+ <xsl:if test="oointerface|ooexception">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:text>    </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="oointerface">
+ <xsl:text>implements</xsl:text>
+ <xsl:apply-templates select="oointerface" mode="java"/>
+ <xsl:if test="ooexception">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:text>    </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="ooexception">
+ <xsl:text>throws</xsl:text>
+ <xsl:apply-templates select="ooexception" mode="java"/>
+ </xsl:if>
+ <xsl:text> {</xsl:text>
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:apply-templates select="constructorsynopsis |destructorsynopsis |fieldsynopsis |methodsynopsis |classsynopsisinfo" mode="java"/>
+ <xsl:text>}</xsl:text>
+ </pre><xsl:text/><xsl:text>.fi
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="classsynopsisinfo" mode="java">
+ <xsl:apply-templates mode="java"/>
+</xsl:template>
+
+<xsl:template match="ooclass|oointerface|ooexception" mode="java">
+ <xsl:choose>
+ <xsl:when test="preceding-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="modifier|package" mode="java">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ <xsl:if test="following-sibling::*">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </span>
+</xsl:template>
+
+<xsl:template match="classname" mode="java">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'classname'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="interfacename" mode="java">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'interfacename'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="exceptionname" mode="java">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'exceptionname'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="fieldsynopsis" mode="java">
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:if test="parent::classsynopsis">
+ <xsl:text>  </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates mode="java"/>
+ <xsl:text>;</xsl:text>
+ </code>
+ <xsl:call-template name="synop-break"/>
+</xsl:template>
+
+<xsl:template match="type" mode="java">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ <xsl:text> </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="varname" mode="java">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ <xsl:text> </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="initializer" mode="java">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>= </xsl:text>
+ <xsl:apply-templates mode="java"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="void" mode="java">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>void </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="methodname" mode="java">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="methodparam" mode="java">
+ <xsl:param name="indent">0</xsl:param>
+ <xsl:if test="preceding-sibling::methodparam">
+ <xsl:text>,</xsl:text>
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:if test="$indent &gt; 0">
+ <xsl:call-template name="copy-string">
+ <xsl:with-param name="string"> </xsl:with-param>
+ <xsl:with-param name="count" select="$indent + 1"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="parameter" mode="java">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="java"/>
+ </span>
+</xsl:template>
+
+<xsl:template mode="java" match="constructorsynopsis|destructorsynopsis|methodsynopsis">
+ <xsl:variable name="start-modifiers" select="modifier[following-sibling::*[local-name(.) != 'modifier']]"/>
+ <xsl:variable name="notmod" select="*[local-name(.) != 'modifier']"/>
+ <xsl:variable name="end-modifiers" select="modifier[preceding-sibling::*[local-name(.) != 'modifier']]"/>
+ <xsl:variable name="decl">
+ <xsl:if test="parent::classsynopsis">
+ <xsl:text>  </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="$start-modifiers" mode="java"/>
+
+ <!-- type -->
+ <xsl:if test="local-name($notmod[1]) != 'methodname'">
+ <xsl:apply-templates select="$notmod[1]" mode="java"/>
+ </xsl:if>
+
+ <xsl:apply-templates select="methodname" mode="java"/>
+ </xsl:variable>
+
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:copy-of select="$decl"/>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="methodparam" mode="java">
+ <xsl:with-param name="indent" select="string-length($decl)"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ <xsl:if test="exceptionname">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:text>    throws </xsl:text>
+ <xsl:apply-templates select="exceptionname" mode="java"/>
+ </xsl:if>
+ <xsl:if test="modifier[preceding-sibling::*[local-name(.) != 'modifier']]">
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates select="$end-modifiers" mode="java"/>
+ </xsl:if>
+ <xsl:text>;</xsl:text>
+ </code>
+ <xsl:call-template name="synop-break"/>
+</xsl:template>
+
+<!-- ===== C++ ========================================================= -->
+
+<xsl:template match="classsynopsis" mode="cpp">
+ <xsl:text>.sp
+</xsl:text><xsl:text>.nf
+</xsl:text><pre>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates select="ooclass[1]" mode="cpp"/>
+ <xsl:if test="ooclass[preceding-sibling::*]">
+ <xsl:text>: </xsl:text>
+ <xsl:apply-templates select="ooclass[preceding-sibling::*]" mode="cpp"/>
+ <xsl:if test="oointerface|ooexception">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:text>    </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="oointerface">
+ <xsl:text> implements</xsl:text>
+ <xsl:apply-templates select="oointerface" mode="cpp"/>
+ <xsl:if test="ooexception">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:text>    </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="ooexception">
+ <xsl:text> throws</xsl:text>
+ <xsl:apply-templates select="ooexception" mode="cpp"/>
+ </xsl:if>
+ <xsl:text> {</xsl:text>
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:apply-templates select="constructorsynopsis |destructorsynopsis |fieldsynopsis |methodsynopsis |classsynopsisinfo" mode="cpp"/>
+ <xsl:text>}</xsl:text>
+ </pre><xsl:text/><xsl:text>.fi
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="classsynopsisinfo" mode="cpp">
+ <xsl:apply-templates mode="cpp"/>
+</xsl:template>
+
+<xsl:template match="ooclass|oointerface|ooexception" mode="cpp">
+ <xsl:if test="preceding-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="modifier|package" mode="cpp">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ <xsl:if test="following-sibling::*">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </span>
+</xsl:template>
+
+<xsl:template match="classname" mode="cpp">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'classname'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="interfacename" mode="cpp">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'interfacename'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="exceptionname" mode="cpp">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'exceptionname'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="fieldsynopsis" mode="cpp">
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:if test="parent::classsynopsis">
+ <xsl:text>  </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates mode="cpp"/>
+ <xsl:text>;</xsl:text>
+ </code>
+ <xsl:call-template name="synop-break"/>
+</xsl:template>
+
+<xsl:template match="type" mode="cpp">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ <xsl:text> </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="varname" mode="cpp">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ <xsl:text> </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="initializer" mode="cpp">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>= </xsl:text>
+ <xsl:apply-templates mode="cpp"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="void" mode="cpp">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>void </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="methodname" mode="cpp">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="methodparam" mode="cpp">
+ <xsl:if test="preceding-sibling::methodparam">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="parameter" mode="cpp">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="cpp"/>
+ </span>
+</xsl:template>
+
+<xsl:template mode="cpp" match="constructorsynopsis|destructorsynopsis|methodsynopsis">
+ <xsl:variable name="start-modifiers" select="modifier[following-sibling::*[local-name(.) != 'modifier']]"/>
+ <xsl:variable name="notmod" select="*[local-name(.) != 'modifier']"/>
+ <xsl:variable name="end-modifiers" select="modifier[preceding-sibling::*[local-name(.) != 'modifier']]"/>
+
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:if test="parent::classsynopsis">
+ <xsl:text>  </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="$start-modifiers" mode="cpp"/>
+
+ <!-- type -->
+ <xsl:if test="local-name($notmod[1]) != 'methodname'">
+ <xsl:apply-templates select="$notmod[1]" mode="cpp"/>
+ </xsl:if>
+
+ <xsl:apply-templates select="methodname" mode="cpp"/>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="methodparam" mode="cpp"/>
+ <xsl:text>)</xsl:text>
+ <xsl:if test="exceptionname">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:text>    throws </xsl:text>
+ <xsl:apply-templates select="exceptionname" mode="cpp"/>
+ </xsl:if>
+ <xsl:if test="modifier[preceding-sibling::*[local-name(.) != 'modifier']]">
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates select="$end-modifiers" mode="cpp"/>
+ </xsl:if>
+ <xsl:text>;</xsl:text>
+ </code>
+ <xsl:call-template name="synop-break"/>
+</xsl:template>
+
+<!-- ===== IDL ========================================================= -->
+
+<xsl:template match="classsynopsis" mode="idl">
+ <xsl:text>.sp
+</xsl:text><xsl:text>.nf
+</xsl:text><pre>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>interface </xsl:text>
+ <xsl:apply-templates select="ooclass[1]" mode="idl"/>
+ <xsl:if test="ooclass[preceding-sibling::*]">
+ <xsl:text>: </xsl:text>
+ <xsl:apply-templates select="ooclass[preceding-sibling::*]" mode="idl"/>
+ <xsl:if test="oointerface|ooexception">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:text>    </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="oointerface">
+ <xsl:text> implements</xsl:text>
+ <xsl:apply-templates select="oointerface" mode="idl"/>
+ <xsl:if test="ooexception">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:text>    </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="ooexception">
+ <xsl:text> throws</xsl:text>
+ <xsl:apply-templates select="ooexception" mode="idl"/>
+ </xsl:if>
+ <xsl:text> {</xsl:text>
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:apply-templates select="constructorsynopsis |destructorsynopsis |fieldsynopsis |methodsynopsis |classsynopsisinfo" mode="idl"/>
+ <xsl:text>}</xsl:text>
+ </pre><xsl:text/><xsl:text>.fi
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="classsynopsisinfo" mode="idl">
+ <xsl:apply-templates mode="idl"/>
+</xsl:template>
+
+<xsl:template match="ooclass|oointerface|ooexception" mode="idl">
+ <xsl:if test="preceding-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="modifier|package" mode="idl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ <xsl:if test="following-sibling::*">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </span>
+</xsl:template>
+
+<xsl:template match="classname" mode="idl">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'classname'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="interfacename" mode="idl">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'interfacename'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="exceptionname" mode="idl">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'exceptionname'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="fieldsynopsis" mode="idl">
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:if test="parent::classsynopsis">
+ <xsl:text>  </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates mode="idl"/>
+ <xsl:text>;</xsl:text>
+ </code>
+ <xsl:call-template name="synop-break"/>
+</xsl:template>
+
+<xsl:template match="type" mode="idl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ <xsl:text> </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="varname" mode="idl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ <xsl:text> </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="initializer" mode="idl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>= </xsl:text>
+ <xsl:apply-templates mode="idl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="void" mode="idl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>void </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="methodname" mode="idl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="methodparam" mode="idl">
+ <xsl:if test="preceding-sibling::methodparam">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="parameter" mode="idl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="idl"/>
+ </span>
+</xsl:template>
+
+<xsl:template mode="idl" match="constructorsynopsis|destructorsynopsis|methodsynopsis">
+ <xsl:variable name="start-modifiers" select="modifier[following-sibling::*[local-name(.) != 'modifier']]"/>
+ <xsl:variable name="notmod" select="*[local-name(.) != 'modifier']"/>
+ <xsl:variable name="end-modifiers" select="modifier[preceding-sibling::*[local-name(.) != 'modifier']]"/>
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:if test="parent::classsynopsis">
+ <xsl:text>  </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="$start-modifiers" mode="idl"/>
+
+ <!-- type -->
+ <xsl:if test="local-name($notmod[1]) != 'methodname'">
+ <xsl:apply-templates select="$notmod[1]" mode="idl"/>
+ </xsl:if>
+
+ <xsl:apply-templates select="methodname" mode="idl"/>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="methodparam" mode="idl"/>
+ <xsl:text>)</xsl:text>
+ <xsl:if test="exceptionname">
+ <xsl:text>
+.
+</xsl:text>
+ <xsl:text>    raises(</xsl:text>
+ <xsl:apply-templates select="exceptionname" mode="idl"/>
+ <xsl:text>)</xsl:text>
+ </xsl:if>
+ <xsl:if test="modifier[preceding-sibling::*[local-name(.) != 'modifier']]">
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates select="$end-modifiers" mode="idl"/>
+ </xsl:if>
+ <xsl:text>;</xsl:text>
+ </code>
+ <xsl:call-template name="synop-break"/>
+</xsl:template>
+
+<!-- ===== Perl ======================================================== -->
+
+<xsl:template match="classsynopsis" mode="perl">
+ <xsl:text>.sp
+</xsl:text><xsl:text>.nf
+</xsl:text><pre>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>package </xsl:text>
+ <xsl:apply-templates select="ooclass[1]" mode="perl"/>
+ <xsl:text>;</xsl:text>
+ <xsl:text>
+.
+</xsl:text>
+
+ <xsl:if test="ooclass[preceding-sibling::*]">
+ <xsl:text>@ISA = (</xsl:text>
+ <xsl:apply-templates select="ooclass[preceding-sibling::*]" mode="perl"/>
+ <xsl:text>);</xsl:text>
+ <xsl:text>
+.
+</xsl:text>
+ </xsl:if>
+
+ <xsl:apply-templates select="constructorsynopsis |destructorsynopsis |fieldsynopsis |methodsynopsis |classsynopsisinfo" mode="perl"/>
+ </pre><xsl:text/><xsl:text>.fi
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="classsynopsisinfo" mode="perl">
+ <xsl:apply-templates mode="perl"/>
+</xsl:template>
+
+<xsl:template match="ooclass|oointerface|ooexception" mode="perl">
+ <xsl:if test="preceding-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="modifier|package" mode="perl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ <xsl:if test="following-sibling::*">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </span>
+</xsl:template>
+
+<xsl:template match="classname" mode="perl">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'classname'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="interfacename" mode="perl">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'interfacename'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="exceptionname" mode="perl">
+ <xsl:if test="local-name(preceding-sibling::*[1]) = 'exceptionname'">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="fieldsynopsis" mode="perl">
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:if test="parent::classsynopsis">
+ <xsl:text>  </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates mode="perl"/>
+ <xsl:text>;</xsl:text>
+ </code>
+ <xsl:call-template name="synop-break"/>
+</xsl:template>
+
+<xsl:template match="type" mode="perl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ <xsl:text> </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="varname" mode="perl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ <xsl:text> </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="initializer" mode="perl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>= </xsl:text>
+ <xsl:apply-templates mode="perl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="void" mode="perl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>void </xsl:text>
+ </span>
+</xsl:template>
+
+<xsl:template match="methodname" mode="perl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="methodparam" mode="perl">
+ <xsl:if test="preceding-sibling::methodparam">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ </span>
+</xsl:template>
+
+<xsl:template match="parameter" mode="perl">
+ <span>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:apply-templates mode="perl"/>
+ </span>
+</xsl:template>
+
+<xsl:template mode="perl" match="constructorsynopsis|destructorsynopsis|methodsynopsis">
+ <xsl:variable name="start-modifiers" select="modifier[following-sibling::*[local-name(.) != 'modifier']]"/>
+ <xsl:variable name="notmod" select="*[local-name(.) != 'modifier']"/>
+ <xsl:variable name="end-modifiers" select="modifier[preceding-sibling::*[local-name(.) != 'modifier']]"/>
+
+ <code>
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:text>sub </xsl:text>
+
+ <xsl:apply-templates select="methodname" mode="perl"/>
+ <xsl:text> { ... };</xsl:text>
+ </code>
+ <xsl:call-template name="synop-break"/>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<!-- * DocBook 5 allows linking elements (link, olink, and xref) -->
+<!-- * within the OO *synopsis elements (classsynopsis, fieldsynopsis, -->
+<!-- * methodsynopsis, constructorsynopsis, destructorsynopsis) and -->
+<!-- * their children. So we need to have mode="java|cpp|idl|perl" -->
+<!-- * per-mode matches for those linking elements in order for them -->
+<!-- * to be processed as expected. -->
+
+<xsl:template match="link|olink|xref" mode="java">
+ <xsl:apply-templates select="."/>
+</xsl:template>
+
+<xsl:template match="link|olink|xref" mode="cpp">
+ <xsl:apply-templates select="."/>
+</xsl:template>
+
+<xsl:template match="link|olink|xref" mode="idl">
+ <xsl:apply-templates select="."/>
+</xsl:template>
+
+<xsl:template match="link|olink|xref" mode="perl">
+ <xsl:apply-templates select="."/>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/docs/xsl-generic/manpages/info.xsl b/docs/xsl-generic/manpages/info.xsl
new file mode 100644
index 00000000..36dded00
--- /dev/null
+++ b/docs/xsl-generic/manpages/info.xsl
@@ -0,0 +1,630 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:date="http://exslt.org/dates-and-times"
+ xmlns:exsl="http://exslt.org/common"
+ exclude-result-prefixes="date exsl"
+ version='1.0'>
+
+<!-- ********************************************************************
+ $Id: info.xsl 7087 2007-07-19 07:20:38Z xmldoc $
+ ********************************************************************
+
+ 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:variable name="blurb-indent">
+ <xsl:choose>
+ <xsl:when test="not($man.indent.blurbs = 0)">
+ <xsl:value-of select="$man.indent.width"/>
+ </xsl:when>
+ <xsl:when test="not($man.indent.refsect = 0)">
+ <!-- * "zq" is the name of a register we set for -->
+ <!-- * preserving the original default indent value -->
+ <!-- * when $man.indent.refsect is non-zero; -->
+ <!-- * "u" is a roff unit specifier -->
+ <xsl:text>\n(zqu</xsl:text>
+ </xsl:when>
+ <xsl:otherwise/> <!-- * otherwise, just leave it empty -->
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- ================================================================== -->
+ <!-- * About the $info param used in this stylesheet -->
+ <!-- * -->
+ <!-- * The $info param is a "master info" node set that contains -->
+ <!-- * the entire contents of the *info child of the current -->
+ <!-- * Refentry, plus the entire contents of the *info children of -->
+ <!-- * all ancestors of the current Refentry, in document order. -->
+ <!-- * -->
+ <!-- * We try to find a "best match" for selecting content from -->
+ <!-- * $infor; we look through it in reverse document order until we -->
+ <!-- * can find something usable. -->
+ <!-- * -->
+ <!-- * Specifically what the basic metadata-gathering XPath expression -->
+ <!-- * in this stylesheet does is: -->
+ <!-- * -->
+ <!-- * 1. Look through the entire "master info" node set.-->
+ <!-- * 2. Get the last node in the set that contains, for -->
+ <!-- * example, an Author element. That amounts to being the -->
+ <!-- * closest *info node to the Refentry - either its *info -->
+ <!-- * child, or the *info node of its closest ancestor that -->
+ <!-- * contains an Author. -->
+
+ <!-- ================================================================== -->
+ <!-- * Get user "refentry metadata" preferences -->
+ <!-- ================================================================== -->
+ <!-- * The DocBook XSL stylesheets include several user-configurable -->
+ <!-- * global stylesheet parameters for controlling refentry metadata -->
+ <!-- * gathering. Those parameters are not read directly by the other -->
+ <!-- * refentry metadata-gathering templates. Instead, they are read -->
+ <!-- * only by the get.refentry.metadata.prefs template, which -->
+ <!-- * assembles them into a structure that is then passed to the -->
+ <!-- * other refentry metadata-gathering template. -->
+
+ <xsl:variable name="get.refentry.metadata.prefs">
+ <!-- * get.refentry.metadata.prefs is in common/refentry.xsl -->
+ <xsl:call-template name="get.refentry.metadata.prefs"/>
+ </xsl:variable>
+
+ <xsl:variable name="refentry.metadata.prefs"
+ select="exsl:node-set($get.refentry.metadata.prefs)"/>
+
+ <!-- * ============================================================== -->
+ <!-- * Get content for Author metadata field. -->
+ <!-- * ============================================================== -->
+
+ <!-- * The make.roff.metatada.author template and metadata.author -->
+ <!-- * mode are used only for populating the Author field in the -->
+ <!-- * metadata "top comment" we embed in roff source of each page. -->
+
+ <xsl:template name="make.roff.metadata.author">
+ <xsl:param name="info"/>
+ <xsl:choose>
+ <xsl:when test="$info//author">
+ <xsl:apply-templates
+ select="(($info[//author])[last()]//author)[1]"
+ mode="metadata.author"/>
+ </xsl:when>
+ <xsl:when test="$info//corpauthor">
+ <xsl:apply-templates
+ select="(($info[//corpauthor])[last()]//corpauthor)[1]"
+ mode="metadata.author"/>
+ </xsl:when>
+ <xsl:when test="$info//editor">
+ <xsl:apply-templates
+ select="(($info[//editor])[last()]//editor)[1]"
+ mode="metadata.author"/>
+ </xsl:when>
+ <xsl:when test="$info//corpcredit">
+ <xsl:apply-templates
+ select="(($info[//corpcredit])[last()]//corpcredit)[1]"
+ mode="metadata.author"/>
+ </xsl:when>
+ <xsl:when test="$info//othercredit">
+ <xsl:apply-templates
+ select="(($info[//othercredit])[last()]//othercredit)[1]"
+ mode="metadata.author"/>
+ </xsl:when>
+ <xsl:when test="$info//collab">
+ <xsl:apply-templates
+ select="(($info[//collab])[last()]//collab)[1]"
+ mode="metadata.author"/>
+ </xsl:when>
+ <xsl:when test="$info//orgname">
+ <xsl:apply-templates
+ select="(($info[//orgname])[last()]//orgname)[1]"
+ mode="metadata.author"/>
+ </xsl:when>
+ <xsl:when test="$info//publishername">
+ <xsl:apply-templates
+ select="(($info[//publishername])[last()]//publishername)[1]"
+ mode="metadata.author"/>
+ </xsl:when>
+ <xsl:otherwise/> <!-- * do nothing, no author info found -->
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="author|editor|othercredit|collab" mode="metadata.author">
+ <xsl:choose>
+ <xsl:when test="collabname">
+ <!-- * If this node is a Collab, then it should have a -->
+ <!-- * Collabname child, so get that. -->
+ <xsl:variable name="contents">
+ <xsl:apply-templates select="collabname"/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Otherwise, this node is not a Collab, but instead -->
+ <!-- * an author|editor|othercredit, which must have a name -->
+ <!-- * of some kind; so get that name -->
+ <xsl:call-template name="person.name.normalized"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test=".//email|address/otheraddr/ulink">
+ <xsl:text> </xsl:text>
+ <!-- * For each attribution found, use only the first e-mail -->
+ <!-- * address or ulink value found -->
+ <xsl:apply-templates select="(.//email|address/otheraddr/ulink)[1]"
+ mode="metadata.author"/>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="email|address/otheraddr/ulink" mode="metadata.author">
+ <xsl:text>&lt;</xsl:text>
+ <xsl:choose>
+ <xsl:when test="self::email">
+ <xsl:variable name="contents">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ </xsl:when>
+ <xsl:when test="self::ulink">
+ <xsl:variable name="contents">
+ <xsl:apply-templates select="."/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>&gt;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="corpauthor|corpcredit|orgname|publishername" mode="metadata.author">
+ <xsl:variable name="contents">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ </xsl:template>
+
+ <!-- * ============================================================== -->
+ <!-- * Assemble the AUTHOR/AUTHORS section -->
+ <!-- * ============================================================== -->
+
+ <xsl:template name="author.section">
+ <xsl:param name="info"/>
+ <!-- * The $info param is a "master info" node set that contains -->
+ <!-- * the entires contents of the *info child of the current -->
+ <!-- * Refentry, plus the entire contents of the *info children of -->
+ <!-- * all ancestors of the current Refentry, in document order. -->
+ <xsl:choose>
+ <xsl:when test="$info//author|$info//editor|$info//collab|
+ $info//corpauthor|$info//corpcredit|
+ $info//othercredit|$info/orgname|
+ $info/publishername|$info/publisher">
+ <xsl:variable name="authorcount">
+ <xsl:value-of
+ select="count(
+ $info//author|$info//editor|$info//collab|
+ $info//corpauthor|$info//corpcredit|
+ $info//othercredit)">
+ </xsl:value-of>
+ </xsl:variable>
+ <xsl:text>.SH "</xsl:text>
+ <xsl:call-template name="make.authorsecttitle">
+ <xsl:with-param name="authorcount" select="$authorcount"/>
+ </xsl:call-template>
+ <!-- * Now output all the actual author, editor, etc. content -->
+ <xsl:for-each
+ select="$info//author|$info//editor|$info//collab|
+ $info//corpauthor|$info//corpcredit|
+ $info//othercredit|$info/orgname|
+ $info/publishername|$info/publisher">
+ <xsl:apply-templates select="." mode="authorsect"/>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise/> <!-- * do nothing, no author info found -->
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="make.authorsecttitle">
+ <!-- * If we have exactly one attributable person/entity, then output -->
+ <!-- * localized gentext for 'Author'; otherwise, output 'Authors'. -->
+ <xsl:param name="authorcount"/>
+ <xsl:param name="authorsecttitle">
+ <xsl:choose>
+ <xsl:when test="$authorcount = 1">
+ <xsl:text>Author</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Authors</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:param>
+ <xsl:call-template name="string.upper">
+ <xsl:with-param name="string">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="$authorsecttitle"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>"&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="author|editor|othercredit" mode="authorsect">
+ <xsl:variable name="person-name">
+ <xsl:call-template name="person.name.normalized"/>
+ </xsl:variable>
+ <!-- * If we have a person-name or email or ulink content, then -->
+ <!-- * output name and email or ulink content on the same line -->
+ <xsl:choose>
+ <xsl:when test="not($person-name = '') or .//email or address/otheraddr/ulink">
+ <xsl:text>.PP&#10;</xsl:text>
+ <!-- * Display person name in bold -->
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="exsl:node-set($person-name)"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <!-- * Display e-mail address(es) and ulink(s) on same line as name -->
+ <xsl:apply-templates select=".//email|address/otheraddr/ulink" mode="authorsect"/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>.br&#10;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- * Display affiliation(s) on separate lines -->
+ <xsl:apply-templates select="affiliation" mode="authorsect"/>
+ <!-- * Display direct-child addresses on separate lines -->
+ <xsl:apply-templates select="address" mode="authorsect"/>
+ <!-- * Call template for handling various attribution possibilities -->
+ <xsl:call-template name="attribution"/>
+ </xsl:template>
+
+ <xsl:template match="collab" mode="authorsect">
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="collabname"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <!-- * Display e-mail address(es) and ulink(s) on same line as name -->
+ <xsl:apply-templates select=".//email|address/otheraddr/ulink" mode="authorsect"/>
+ <xsl:text>&#10;</xsl:text>
+ <!-- * Display affilition(s) on separate lines -->
+ <xsl:apply-templates select="affiliation" mode="authorsect"/>
+ </xsl:template>
+
+ <xsl:template match="corpauthor|corpcredit|orgname|publishername" mode="authorsect">
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:if test="self::publishername">
+ <!-- * Display localized "Publisher" gentext -->
+ <xsl:call-template name="publisher.attribution"/>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="publisher" mode="authorsect">
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="publishername"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <!-- * Display e-mail address(es) and ulink(s) on same line as name -->
+ <xsl:apply-templates select=".//email|address/otheraddr/ulink" mode="authorsect"/>
+ <!-- * Display addresses on separate lines -->
+ <xsl:apply-templates select="address" mode="authorsect"/>
+ <!-- * Display localized "Publisher" literal -->
+ <xsl:call-template name="publisher.attribution"/>
+ </xsl:template>
+
+ <xsl:template name="publisher.attribution">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp -1n&#10;</xsl:text>
+ <xsl:text>.IP ""</xsl:text>
+ <xsl:if test="not($blurb-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$blurb-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'Publisher'"/>
+ </xsl:call-template>
+ <xsl:text>.&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="email|address/otheraddr/ulink" mode="authorsect">
+ <xsl:choose>
+ <xsl:when test="preceding-sibling::*[descendant-or-self::email]
+ or preceding-sibling::address/otheraddr/ulink
+ or ancestor::address[preceding-sibling::*[descendant-or-self::email]]
+ or ancestor::address[preceding-sibling::address/otheraddr/ulink]">
+ <!-- * This is not the first instance, so do nothing. -->
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * This is first instances of an e-mail address or ulink, -->
+ <!-- * so put a space before it. -->
+ <xsl:text> </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- * Note that the reason for the \& character after the opening -->
+ <!-- * angle bracket and before the closing angle bracket is to -->
+ <!-- * prevent groff from inserting a linebreak at those points and -->
+ <!-- * outputting a hyphen character where the break occurs -->
+ <xsl:text>&lt;\&amp;</xsl:text>
+ <xsl:choose>
+ <xsl:when test="self::email">
+ <xsl:variable name="contents">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ </xsl:when>
+ <xsl:when test="self::ulink">
+ <xsl:variable name="contents">
+ <xsl:apply-templates select="."/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>\&amp;&gt;</xsl:text>
+ <xsl:choose>
+ <xsl:when test="not(following-sibling::*[descendant-or-self::email]
+ or following-sibling::address/otheraddr/ulink
+ or ancestor::address[following-sibling::*[descendant-or-self::email]]
+ or ancestor::address[following-sibling::address/otheraddr/ulink])">
+ <!-- * This is the final instance, so do nothing. -->
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Separate multiple e-mail addresses or ulinks with a comma -->
+ <xsl:text>, </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="affiliation" mode="authorsect">
+ <!-- * Get the string value of the contents of this Affiliation. If the -->
+ <!-- * affiliation only contains an Address child whose only content is -->
+ <!-- * an email address or ulink, then these contents will end up empty. -->
+ <xsl:variable name="contents">
+ <xsl:apply-templates mode="authorsect"/>
+ </xsl:variable>
+ <!-- * If contents are actually empty except for an email address -->
+ <!-- * or ulink, then output nothing. -->
+ <xsl:if test="$contents != ''">
+ <xsl:text>.br&#10;</xsl:text>
+ <xsl:for-each select="shortaffil|jobtitle|orgname|orgdiv|address">
+ <!-- * only display output of nodes other than email or ulink -->
+ <xsl:apply-templates select="node()[not(self::email) and not(self::otheraddr/ulink)]"/>
+ <xsl:choose>
+ <xsl:when test="position() = last()"/> <!-- do nothing -->
+ <xsl:otherwise>
+ <!-- * only add comma if the node has a child node other than -->
+ <!-- * an email address or ulink -->
+ <xsl:if test="child::node()[not(self::email) and not(self::otheraddr/ulink)]">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:choose>
+ <xsl:when test="position() = last()"/> <!-- do nothing -->
+ <xsl:otherwise>
+ <!-- * put a line break after every Affiliation instance except -->
+ <!-- * the last one in the set -->
+ <xsl:text>.br&#10;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="address" mode="authorsect">
+ <xsl:variable name="contents"
+ select="normalize-space(node()[not(self::email)
+ and not(self::otheraddr/ulink)])"/>
+ <!-- * If this contents of this Address do not contain anything except -->
+ <!-- * an email address or ulink, then output nothing. -->
+ <xsl:if test="$contents != ''">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.br&#10;</xsl:text>
+ <!--* Skip email and ulink descendants of Address (rendered elsewhere) -->
+ <xsl:apply-templates select="node()[not(self::email) and not(self::otheraddr/ulink)]"/>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="attribution">
+ <!-- * Determine appropriate attribution for a particular person's role. -->
+ <xsl:choose>
+ <!-- * if we have a *blurb or contrib, just use that -->
+ <xsl:when test="contrib|personblurb|authorblurb">
+ <xsl:apply-templates select="contrib|personblurb|authorblurb" mode="authorsect"/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:when>
+ <!-- * If we have no *blurb or contrib, but this is an Author or -->
+ <!-- * Editor, then render the corresponding localized gentext -->
+ <xsl:when test="self::author">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp -1n&#10;</xsl:text>
+ <xsl:text>.IP ""</xsl:text>
+ <xsl:if test="not($blurb-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$blurb-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'Author'"/>
+ </xsl:call-template>
+ <xsl:text>.&#10;</xsl:text>
+ </xsl:when>
+ <xsl:when test="self::editor">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp -1n&#10;</xsl:text>
+ <xsl:text>.IP ""</xsl:text>
+ <xsl:if test="not($blurb-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$blurb-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'Editor'"/>
+ </xsl:call-template>
+ <xsl:text>.&#10;</xsl:text>
+ </xsl:when>
+ <!-- * If we have no *blurb or contrib, but this is an Othercredit, -->
+ <!-- * check value of Class attribute and use corresponding gentext. -->
+ <xsl:when test="self::othercredit">
+ <xsl:choose>
+ <xsl:when test="@class and @class != 'other'">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp -1n&#10;</xsl:text>
+ <xsl:text>.IP ""</xsl:text>
+ <xsl:if test="not($blurb-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$blurb-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="@class"/>
+ </xsl:call-template>
+ <xsl:text>.&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * We have an Othercredit, but not usable value for the Class -->
+ <!-- * attribute, so nothing to show, do nothing -->
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * We have no *blurb or contrib or anything else we can use to -->
+ <!-- * display appropriate attribution for this person, so do nothing -->
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="personblurb|authorblurb" mode="authorsect">
+ <xsl:call-template name="mark.up.blurb.or.contrib"/>
+ <!-- * yeah, it's possible for a *blurb to have a "title" -->
+ <xsl:apply-templates select="title"/>
+ <xsl:apply-templates select="*[not(self::title)]"/>
+ </xsl:template>
+
+ <xsl:template match="personblurb/title|authorblurb/title">
+ <!-- * always render period after title -->
+ <xsl:variable name="contents">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ <xsl:text>.</xsl:text>
+ <!-- * render space after Title+period if the title is followed -->
+ <!-- * by something element content -->
+ <xsl:if test="following-sibling::*[name() != '']">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="contrib" mode="authorsect">
+ <xsl:call-template name="mark.up.blurb.or.contrib"/>
+ <xsl:variable name="contents">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="mark.up.blurb.or.contrib">
+ <xsl:choose>
+ <!-- * If this *blurb has a sibling "name" element of some kind, then -->
+ <!-- * we are already outputting the name content, and we need to -->
+ <!-- * indent the *blurb content after that. -->
+ <xsl:when
+ test="../personname|../surname|../firstname
+ |../othername|../lineage|../honorific
+ |../affiliation|../email|../address">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp -1n&#10;</xsl:text>
+ <xsl:text>.IP ""</xsl:text>
+ <xsl:if test="not($blurb-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$blurb-indent"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * otherwise, we have no "name" content, so don't indent; -->
+ <!-- * instead, decide if we need a .PP or just a .br -->
+ <xsl:choose>
+ <xsl:when test="not(preceding-sibling::*)">
+ <!-- * if this *blurb or contrib has no preceding -->
+ <!-- * siblings, then we need to start a new paragraph -->
+ <xsl:text>.PP</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * otherwise, this has no preceding siblings, so -->
+ <!-- * just put a linebreak -->
+ <xsl:text>.br</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <!-- * ============================================================== -->
+ <!-- * Assemble the COPYRIGHT section -->
+ <!-- * ============================================================== -->
+ <!-- * The COPYRIGHT section is output only if a copyright or -->
+ <!-- * legalnotice is found. It contains the copyright contents -->
+ <!-- * followed by the legalnotice contents. -->
+ <xsl:template name="copyright.section">
+ <xsl:param name="info"/>
+ <xsl:choose>
+ <xsl:when test="$info//copyright|$info//legalnotice">
+ <xsl:text>.SH "</xsl:text>
+ <xsl:call-template name="string.upper">
+ <xsl:with-param name="string">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key">Copyright</xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>"&#10;</xsl:text>
+ <!-- * the copyright mode="titlepage.mode" template is -->
+ <!-- * imported from the HTML stylesheets -->
+ <xsl:for-each select="
+ (($info[//copyright])[last()]//copyright)
+ | (($info[//legalnotice])[last()]//legalnotice)">
+ <xsl:choose>
+ <xsl:when test="local-name(.) = 'copyright'">
+ <xsl:variable name="contents">
+ <xsl:apply-templates select="." mode="titlepage.mode"/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.br&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="titlepage.mode"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp&#10;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise/> <!-- * do nothing, no copyright or legalnotice found -->
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="legalnotice">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <!-- * ============================================================== -->
+
+ <!-- * suppress refmeta and all *info (we grab what we need from them -->
+ <!-- * elsewhere) -->
+
+ <xsl:template match="refmeta"/>
+
+ <xsl:template match="info|refentryinfo|referenceinfo|refsynopsisdivinfo
+ |refsectioninfo|refsect1info|refsect2info|refsect3info
+ |setinfo|bookinfo|articleinfo|chapterinfo|sectioninfo
+ |sect1info|sect2info|sect3info|sect4info|sect5info
+ |partinfo|prefaceinfo|appendixinfo|docinfo"/>
+
+ <!-- ============================================================== -->
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/inline.xsl b/docs/xsl-generic/manpages/inline.xsl
new file mode 100644
index 00000000..a88369c8
--- /dev/null
+++ b/docs/xsl-generic/manpages/inline.xsl
@@ -0,0 +1,190 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ version='1.0'>
+
+<!-- ********************************************************************
+ $Id: inline.xsl 6843 2007-06-20 12:21:13Z xmldoc $
+ ********************************************************************
+
+ 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:template match="replaceable|varname">
+ <xsl:if test="$man.hyphenate.computer.inlines = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ </xsl:if>
+ <xsl:call-template name="italic">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="option|userinput|envar|errorcode|constant|markup">
+ <xsl:if test="$man.hyphenate.computer.inlines = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ </xsl:if>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="classname">
+ <xsl:if test="$man.hyphenate.computer.inlines = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ </xsl:if>
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="command">
+ <xsl:if test="$man.hyphenate.computer.inlines = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ </xsl:if>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="type[not(ancestor::cmdsynopsis) and
+ not(ancestor::funcsynopsis)]">
+ <xsl:if test="$man.hyphenate.computer.inlines = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ </xsl:if>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="function[not(ancestor::cmdsynopsis) and
+ not(ancestor::funcsynopsis)]">
+ <xsl:if test="$man.hyphenate.computer.inlines = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ </xsl:if>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="parameter[not(ancestor::cmdsynopsis) and
+ not(ancestor::funcsynopsis)]">
+ <xsl:if test="$man.hyphenate.computer.inlines = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ </xsl:if>
+ <xsl:call-template name="italic">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="filename">
+ <!-- * add hyphenation suppression in Filename output only if -->
+ <!-- * break.after.slash is also non-zero -->
+ <xsl:if test="$man.hyphenate.filenames = 0 and
+ $man.break.after.slash = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ </xsl:if>
+ <xsl:call-template name="italic">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="emphasis">
+ <xsl:choose>
+ <xsl:when test="
+ @role = 'bold' or
+ @role = 'strong' or
+ @remap = 'B'">
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="italic">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="optional">
+ <xsl:value-of select="$arg.choice.opt.open.str"/>
+ <xsl:apply-templates/>
+ <xsl:value-of select="$arg.choice.opt.close.str"/>
+</xsl:template>
+
+<xsl:template name="do-citerefentry">
+ <xsl:param name="refentrytitle" select="''"/>
+ <xsl:param name="manvolnum" select="''"/>
+ <xsl:variable name="title">
+ <xsl:value-of select="$refentrytitle"/>
+ </xsl:variable>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="exsl:node-set($title)"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$manvolnum"/>
+ <xsl:text>)</xsl:text>
+</xsl:template>
+
+<xsl:template match="citerefentry">
+ <xsl:call-template name="do-citerefentry">
+ <xsl:with-param name="refentrytitle" select="refentrytitle"/>
+ <xsl:with-param name="manvolnum" select="manvolnum"/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="trademark|productname">
+ <xsl:apply-templates/>
+ <xsl:choose>
+ <!-- * Just use true Unicode chars for copyright, trademark, etc., -->
+ <!-- * symbols (by default, we later automatically translate them -->
+ <!-- * with the apply-string-subst-map template, or with the -->
+ <!-- * default character map, if man.charmap.enabled is true). -->
+ <xsl:when test="@class = 'copyright'">
+ <xsl:text>&#x00a9;</xsl:text>
+ </xsl:when>
+ <xsl:when test="@class = 'registered'">
+ <xsl:text>&#x00ae;</xsl:text>
+ </xsl:when>
+ <xsl:when test="@class = 'service'">
+ <xsl:text>&#x2120;</xsl:text>
+ </xsl:when>
+ <xsl:when test="@class = 'trade'">
+ <xsl:text>&#x2122;</xsl:text>
+ </xsl:when>
+ <!-- * for Trademark element, render a trademark symbol by default -->
+ <!-- * even if no "class" value is specified -->
+ <xsl:when test="self::trademark" >
+ <xsl:text>&#x2122;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * otherwise we have a Productname with no value for the -->
+ <!-- * "class" attribute, so don't render any symbol by default -->
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- * span seems to sneak through into output sometimes, possibly due -->
+<!-- * to failed Olink processing; so we need to catch it -->
+<xsl:template match="span">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="inlinemediaobject">
+ <xsl:apply-templates/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/lists.xsl b/docs/xsl-generic/manpages/lists.xsl
new file mode 100644
index 00000000..4c18c80c
--- /dev/null
+++ b/docs/xsl-generic/manpages/lists.xsl
@@ -0,0 +1,368 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version='1.0'>
+
+<!-- ********************************************************************
+ $Id: lists.xsl 6843 2007-06-20 12:21:13Z xmldoc $
+ ********************************************************************
+
+ 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:variable name="list-indent">
+ <xsl:choose>
+ <xsl:when test="not($man.indent.lists = 0)">
+ <xsl:value-of select="$man.indent.width"/>
+ </xsl:when>
+ <xsl:when test="not($man.indent.refsect = 0)">
+ <!-- * "zq" is the name of a register we set for -->
+ <!-- * preserving the original default indent value -->
+ <!-- * when $man.indent.refsect is non-zero; -->
+ <!-- * "u" is a roff unit specifier -->
+ <xsl:text>\n(zqu</xsl:text>
+ </xsl:when>
+ <xsl:otherwise/> <!-- * otherwise, just leave it empty -->
+ </xsl:choose>
+</xsl:variable>
+
+<!-- ================================================================== -->
+
+<xsl:template match="para[ancestor::listitem or ancestor::step or ancestor::glossdef]|
+ simpara[ancestor::listitem or ancestor::step or ancestor::glossdef]|
+ remark[ancestor::listitem or ancestor::step or ancestor::glossdef]">
+ <xsl:call-template name="mixed-block"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:if test="following-sibling::*[1][
+ self::para or
+ self::simpara or
+ self::remark
+ ]">
+ <!-- * Make sure multiple paragraphs within a list item don't -->
+ <!-- * merge together. -->
+ <xsl:text>.sp&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="variablelist|glosslist">
+ <xsl:if test="title">
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="title"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="varlistentry|glossentry">
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:for-each select="term|glossterm">
+ <xsl:variable name="content">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($content)"/>
+ <xsl:choose>
+ <xsl:when test="position() = last()"/> <!-- do nothing -->
+ <xsl:otherwise>
+ <!-- * if we have multiple terms in the same varlistentry, generate -->
+ <!-- * a separator (", " by default) and/or an additional line -->
+ <!-- * break after each one except the last -->
+ <!-- * -->
+ <!-- * note that it is not valid to have multiple glossterms -->
+ <!-- * within a glossentry, so this logic never gets exercised -->
+ <!-- * for glossterms (every glossterm is always the last in -->
+ <!-- * its parent glossentry) -->
+ <xsl:value-of select="$variablelist.term.separator"/>
+ <xsl:if test="not($variablelist.term.break.after = '0')">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.br&#10;</xsl:text>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.RS</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>.RE&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="varlistentry/term"/>
+<xsl:template match="glossentry/glossterm"/>
+
+<xsl:template match="variablelist[ancestor::listitem or ancestor::step or ancestor::glossdef]|
+ glosslist[ancestor::listitem or ancestor::step or ancestor::glossdef]">
+ <xsl:apply-templates/>
+ <xsl:if test="following-sibling::node() or
+ parent::para[following-sibling::node()] or
+ parent::simpara[following-sibling::node()] or
+ parent::remark[following-sibling::node()]">
+ <xsl:text>.sp</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="varlistentry/listitem|glossentry/glossdef">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="itemizedlist/listitem">
+ <!-- * We output a real bullet here (rather than, "\(bu", -->
+ <!-- * the roff bullet) because, when we do character-map -->
+ <!-- * processing before final output, the character-map will -->
+ <!-- * handle conversion of the &#x2022; to "\(bu" for us -->
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.RS</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>\h'-</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text>0</xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>'</xsl:text>
+ <xsl:text>&#x2022;</xsl:text>
+ <xsl:text>\h'+</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text>0</xsl:text>
+ <xsl:value-of select="$list-indent - 1"/>
+ <xsl:text>'</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates/>
+ <xsl:text>.RE&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="orderedlist/listitem|procedure/step">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.RS</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>\h'-</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text>0</xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>'</xsl:text>
+ <xsl:if test="count(preceding-sibling::listitem) &lt; 9">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ <xsl:number format="1."/>
+ <xsl:text>\h'+</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text>0</xsl:text>
+ <xsl:value-of select="$list-indent - 2"/>
+ <xsl:text>'</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates/>
+ <xsl:text>.RE&#10;</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="itemizedlist|orderedlist|procedure">
+ <xsl:if test="title">
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="title"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ <!-- * DocBook allows just about any block content to appear in -->
+ <!-- * lists before the actual list items, so we need to get that -->
+ <!-- * content (if any) before getting the list items -->
+ <xsl:apply-templates
+ select="*[not(self::listitem) and not(self::title)]"/>
+ <xsl:apply-templates select="listitem"/>
+ <!-- * If this list is a child of para and has content following -->
+ <!-- * it, within the same para, then add a blank line and move -->
+ <!-- * the left margin back to where it was -->
+ <xsl:if test="parent::para and following-sibling::node()">
+ <xsl:text>.sp&#10;</xsl:text>
+ <xsl:text>.RE&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="itemizedlist[ancestor::listitem or ancestor::step or ancestor::glossdef]|
+ orderedlist[ancestor::listitem or ancestor::step or ancestor::glossdef]|
+ procedure[ancestor::listitem or ancestor::step or ancestor::glossdef]">
+ <xsl:if test="title">
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="title"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates/>
+ <xsl:if test="following-sibling::node() or
+ parent::para[following-sibling::node()] or
+ parent::simpara[following-sibling::node()] or
+ parent::remark[following-sibling::node()]">
+ <xsl:text>.IP ""</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<!-- ================================================================== -->
+
+<!-- * for simplelist type="inline", render it as a comma-separated list -->
+<xsl:template match="simplelist[@type='inline']">
+
+ <!-- * if dbchoice PI exists, use that to determine the choice separator -->
+ <!-- * (that is, equivalent of "and" or "or" in current locale), or literal -->
+ <!-- * value of "choice" otherwise -->
+ <xsl:variable name="localized-choice-separator">
+ <xsl:choose>
+ <xsl:when test="processing-instruction('dbchoice')">
+ <xsl:call-template name="select.choice.separator"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * empty -->
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:for-each select="member">
+ <xsl:apply-templates/>
+ <xsl:choose>
+ <xsl:when test="position() = last()"/> <!-- do nothing -->
+ <xsl:otherwise>
+ <xsl:text>, </xsl:text>
+ <xsl:if test="position() = last() - 1">
+ <xsl:if test="$localized-choice-separator != ''">
+ <xsl:value-of select="$localized-choice-separator"/>
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<!-- * if simplelist type is not inline, render it as a one-column vertical -->
+<!-- * list (ignoring the values of the type and columns attributes) -->
+<xsl:template match="simplelist">
+ <xsl:for-each select="member">
+ <xsl:text>.IP ""</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:for-each>
+</xsl:template>
+
+<!-- ================================================================== -->
+
+<!-- * We output Segmentedlist as a table, using tbl(1) markup. There -->
+<!-- * is no option for outputting it in manpages in "list" form. -->
+<xsl:template match="segmentedlist">
+ <xsl:if test="title">
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:call-template name="bold">
+ <xsl:with-param name="node" select="title"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ <xsl:text>.\" line length increase to cope w/ tbl weirdness&#10;</xsl:text>
+ <xsl:text>.ll +(\n(LLu * 62u / 100u)&#10;</xsl:text>
+ <!-- * .TS = "Table Start" -->
+ <xsl:text>.TS&#10;</xsl:text>
+ <!-- * first output the table "format" spec, which tells tbl(1) how -->
+ <!-- * how to format each row and column. -->
+ <xsl:for-each select=".//segtitle">
+ <!-- * l = "left", which hard-codes left-alignment for tabular -->
+ <!-- * output of all segmentedlist content -->
+ <xsl:text>l</xsl:text>
+ </xsl:for-each>
+ <!-- * last line of table format section must end with a dot -->
+ <xsl:text>.&#10;</xsl:text>
+ <!-- * optionally suppress output of segtitle -->
+ <xsl:choose>
+ <xsl:when test="$man.segtitle.suppress != 0">
+ <!-- * non-zero = "suppress", so do nothing -->
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * "0" = "do not suppress", so output the segtitle(s) -->
+ <xsl:apply-templates select=".//segtitle" mode="table-title"/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates/>
+ <!-- * .TE = "Table End" -->
+ <xsl:text>.TE&#10;</xsl:text>
+ <xsl:text>.\" line length decrease back to previous value&#10;</xsl:text>
+ <xsl:text>.ll -(\n(LLu * 62u / 100u)&#10;</xsl:text>
+ <!-- * put a blank line of space below the table -->
+ <xsl:text>.sp&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="segmentedlist/segtitle" mode="table-title">
+ <xsl:call-template name="italic">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+ <xsl:choose>
+ <xsl:when test="position() = last()"/> <!-- do nothing -->
+ <xsl:otherwise>
+ <!-- * tbl(1) treats tab characters as delimiters between -->
+ <!-- * cells; so we need to output a tab after each except -->
+ <!-- * segtitle except the last one -->
+ <xsl:text>&#09;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="segmentedlist/seglistitem">
+ <xsl:apply-templates/>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="segmentedlist/seglistitem/seg">
+ <!-- * the “T{" and “T}” stuff are delimiters to tell tbl(1) that -->
+ <!-- * the delimited contents are "text blocks" that groff(1) -->
+ <!-- * needs to process -->
+ <xsl:text>T{&#10;</xsl:text>
+ <xsl:variable name="contents">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($contents)"/>
+ <xsl:text>&#10;T}</xsl:text>
+ <xsl:choose>
+ <xsl:when test="position() = last()"/> <!-- do nothing -->
+ <xsl:otherwise>
+ <!-- * tbl(1) treats tab characters as delimiters between -->
+ <!-- * cells; so we need to output a tab after each except -->
+ <!-- * segtitle except the last one -->
+ <xsl:text>&#09;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/other.xsl b/docs/xsl-generic/manpages/other.xsl
new file mode 100644
index 00000000..3a3afee9
--- /dev/null
+++ b/docs/xsl-generic/manpages/other.xsl
@@ -0,0 +1,674 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ xmlns:ng="http://docbook.org/docbook-ng"
+ xmlns:db="http://docbook.org/ns/docbook"
+ exclude-result-prefixes="exsl"
+ version='1.0'>
+
+<!-- ********************************************************************
+ $Id: other.xsl 6863 2007-06-23 09:08:06Z xmldoc $
+ ********************************************************************
+
+ 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.
+
+ ******************************************************************** -->
+
+<!-- * This file contains named templates related to things other than -->
+<!-- * just assembling the actual text of the main text flow of each man -->
+<!-- * page. This "other" stuff currently amounts to these steps: -->
+<!-- * -->
+<!-- * - get contents of the "map" used to convert special characters -->
+<!-- * - output boilerplate messages -->
+<!-- * - escape backslash, dot, dash, and apostrophe characters -->
+<!-- * - convert non-breaking spaces -->
+<!-- * - add a comment to top part of roff source of each page -->
+<!-- * - make a .TH title line (for controlling page header/footer) -->
+<!-- * - set hyphenation, alignment, indent & line-breaking defaults -->
+<!-- * - "prepare" the complete man page contents for final output -->
+<!-- * - write the actual man file to the filesystem -->
+<!-- * - write any "stub" pages to the filesystem -->
+<!-- * -->
+<!-- * The templates in this file are actually called only once per -->
+<!-- * each Refentry; they are just in a separate file for the purpose -->
+<!-- * of keeping things modular. -->
+
+<!-- ==================================================================== -->
+
+<xsl:preserve-space elements="*"/>
+
+<xsl:strip-space elements="
+abstract affiliation anchor answer appendix area areaset areaspec
+artheader article audiodata audioobject author authorblurb authorgroup
+beginpage bibliodiv biblioentry bibliography biblioset blockquote book
+bookbiblio bookinfo callout calloutlist caption caution chapter
+citerefentry cmdsynopsis co collab colophon colspec confgroup
+copyright dedication docinfo editor entrytbl epigraph equation
+example figure footnote footnoteref formalpara funcprototype
+funcsynopsis glossary glossdef glossdiv glossentry glosslist graphicco
+group highlights imagedata imageobject imageobjectco important index
+indexdiv indexentry indexterm informalequation informalexample
+informalfigure informaltable inlineequation inlinemediaobject
+itemizedlist itermset keycombo keywordset legalnotice listitem lot
+mediaobject mediaobjectco menuchoice msg msgentry msgexplan msginfo
+msgmain msgrel msgset msgsub msgtext note objectinfo
+orderedlist othercredit part partintro preface printhistory procedure
+programlistingco publisher qandadiv qandaentry qandaset question
+refentry reference refmeta refnamediv refsection refsect1 refsect1info refsect2
+refsect2info refsect3 refsect3info refsynopsisdiv refsynopsisdivinfo
+revhistory revision row sbr screenco screenshot sect1 sect1info sect2
+sect2info sect3 sect3info sect4 sect4info sect5 sect5info section
+sectioninfo seglistitem segmentedlist seriesinfo set setindex setinfo
+shortcut sidebar simplelist simplesect spanspec step subject
+subjectset substeps synopfragment table tbody textobject tfoot tgroup
+thead tip toc tocchap toclevel1 toclevel2 toclevel3 toclevel4
+toclevel5 tocpart varargs variablelist varlistentry videodata
+videoobject void warning subjectset
+
+classsynopsis
+constructorsynopsis
+destructorsynopsis
+fieldsynopsis
+methodparam
+methodsynopsis
+ooclass
+ooexception
+oointerface
+simplemsgentry
+manvolnum
+
+db:abstract db:affiliation db:anchor db:answer db:appendix db:area db:areaset db:areaspec
+db:artheader db:article db:audiodata db:audioobject db:author db:authorblurb db:authorgroup
+db:beginpage db:bibliodiv db:biblioentry db:bibliography db:biblioset db:blockquote db:book
+db:bookbiblio db:bookinfo db:callout db:calloutlist db:caption db:caution db:chapter
+db:citerefentry db:cmdsynopsis db:co db:collab db:colophon db:colspec db:confgroup
+db:copyright db:dedication db:docinfo db:editor db:entrytbl db:epigraph db:equation
+db:example db:figure db:footnote db:footnoteref db:formalpara db:funcprototype
+db:funcsynopsis db:glossary db:glossdef db:glossdiv db:glossentry db:glosslist db:graphicco
+db:group db:highlights db:imagedata db:imageobject db:imageobjectco db:important db:index
+db:indexdiv db:indexentry db:indexterm db:informalequation db:informalexample
+db:informalfigure db:informaltable db:inlineequation db:inlinemediaobject
+db:itemizedlist db:itermset db:keycombo db:keywordset db:legalnotice db:listitem db:lot
+db:mediaobject db:mediaobjectco db:menuchoice db:msg db:msgentry db:msgexplan db:msginfo
+db:msgmain db:msgrel db:msgset db:msgsub db:msgtext db:note db:objectinfo
+db:orderedlist db:othercredit db:part db:partintro db:preface db:printhistory db:procedure
+db:programlistingco db:publisher db:qandadiv db:qandaentry db:qandaset db:question
+db:refentry db:reference db:refmeta db:refnamediv db:refsection db:refsect1 db:refsect1info
+db:refsect2
+db:refsect2info db:refsect3 db:refsect3info db:refsynopsisdiv db:refsynopsisdivinfo
+db:revhistory db:revision db:row db:sbr db:screenco db:screenshot db:sect1 db:sect1info db:sect2
+db:sect2info db:sect3 db:sect3info db:sect4 db:sect4info db:sect5 db:sect5info db:section
+db:sectioninfo db:seglistitem db:segmentedlist db:seriesinfo db:set db:setindex db:setinfo
+db:shortcut db:sidebar db:simplelist db:simplesect db:spanspec db:step db:subject
+db:subjectset db:substeps db:synopfragment db:table db:tbody db:textobject db:tfoot db:tgroup
+db:thead db:tip db:toc db:tocchap db:toclevel1 db:toclevel2 db:toclevel3 db:toclevel4
+db:toclevel5 db:tocpart db:varargs db:variablelist db:varlistentry db:videodata
+db:videoobject db:void db:warning db:subjectset
+
+db:classsynopsis
+db:constructorsynopsis
+db:destructorsynopsis
+db:fieldsynopsis
+db:methodparam
+db:methodsynopsis
+db:ooclass
+db:ooexception
+db:oointerface
+db:simplemsgentry
+db:manvolnum
+"/>
+
+<!-- ==================================================================== -->
+<!-- * Get character map contents -->
+<!-- ==================================================================== -->
+
+ <xsl:variable name="man.charmap.contents">
+ <xsl:if test="$man.charmap.enabled != 0">
+ <xsl:call-template name="read-character-map">
+ <xsl:with-param name="use.subset" select="$man.charmap.use.subset"/>
+ <xsl:with-param name="subset.profile" select="$man.charmap.subset.profile"/>
+ <xsl:with-param name="uri">
+ <xsl:choose>
+ <xsl:when test="$man.charmap.uri != ''">
+ <xsl:value-of select="$man.charmap.uri"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="'../manpages/charmap.groff.xsl'"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+
+<!-- ==================================================================== -->
+
+<xsl:template name="root.messages">
+ <xsl:param name="refname"/>
+ <!-- redefine this any way you'd like to output messages -->
+ <!-- DO NOT OUTPUT ANYTHING FROM THIS TEMPLATE -->
+ <!-- Example:
+ <xsl:if test="//foo">
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Warn</xsl:with-param>
+ <xsl:with-param name="source" select="$refname"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text>limitation</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>Output for foo element is not yet supported.</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ -->
+</xsl:template>
+
+<!-- ==================================================================== -->
+<!-- * Escape roff special chars -->
+<!-- ==================================================================== -->
+
+<!-- ******************************************************************** -->
+<!-- * -->
+<!-- * The backslash, dot, dash, and apostrophe (\, ., -, ') characters -->
+<!-- * have special meaning for roff, so before we do any other -->
+<!-- * processing, we must escape those characters where they appear in -->
+<!-- * the source content. -->
+<!-- * -->
+<!-- * Here we also deal with replacing U+00a0 (non-breaking space) with -->
+<!-- * its roff equivalent -->
+<!-- * -->
+<!-- ******************************************************************** -->
+
+<xsl:template match="//refentry//text()">
+ <xsl:call-template name="escape.roff.specials">
+ <xsl:with-param name="content">
+ <xsl:value-of select="."/>
+ </xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="escape.roff.specials">
+ <xsl:param name="content"/>
+ <xsl:call-template name="convert.nobreak-space">
+ <xsl:with-param name="content">
+ <xsl:call-template name="escape.apostrophe">
+ <xsl:with-param name="content">
+ <xsl:call-template name="escape.dash">
+ <xsl:with-param name="content">
+ <xsl:call-template name="escape.dot">
+ <xsl:with-param name="content">
+ <xsl:call-template name="escape.backslash">
+ <xsl:with-param name="content" select="$content"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="escape.backslash">
+ <xsl:param name="content"/>
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$content"/>
+ <xsl:with-param name="target">\</xsl:with-param>
+ <!-- * we use "\e" instead of "\\" because the groff docs say -->
+ <!-- * that's the correct thing to do; also because testing -->
+ <!-- * shows that "\\" doesn't always work as expected; for -->
+ <!-- * example, "\\" within a table seems to mess things up -->
+ <xsl:with-param name="replacement">\e</xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="escape.dot">
+ <xsl:param name="content"/>
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$content"/>
+ <xsl:with-param name="target">.</xsl:with-param>
+ <xsl:with-param name="replacement">\.</xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="escape.dash">
+ <xsl:param name="content"/>
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$content"/>
+ <xsl:with-param name="target">-</xsl:with-param>
+ <xsl:with-param name="replacement">\-</xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="escape.apostrophe">
+ <xsl:param name="content"/>
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$content"/>
+ <xsl:with-param name="target">'</xsl:with-param>
+ <xsl:with-param name="replacement">\'</xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="convert.nobreak-space">
+ <xsl:param name="content"/>
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$content"/>
+ <xsl:with-param name="target">&#x00a0;</xsl:with-param>
+ <!-- * 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:with-param name="replacement">\ </xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<!-- ==================================================================== -->
+
+<!-- * top.comment generates a comment containing metadata for the man -->
+<!-- * page; for example, Author, Generator, and Date information -->
+
+ <xsl:template name="top.comment">
+ <xsl:param name="info"/>
+ <xsl:param name="date"/>
+ <xsl:param name="title"/>
+ <xsl:param name="manual"/>
+ <xsl:param name="source"/>
+ <xsl:text>.\" Title: </xsl:text>
+ <xsl:call-template name="replace.dots.and.dashes">
+ <xsl:with-param name="content" select="$title"/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.\" Author: </xsl:text>
+ <xsl:call-template name="replace.dots.and.dashes">
+ <xsl:with-param name="content">
+ <xsl:call-template name="make.roff.metadata.author">
+ <xsl:with-param name="info" select="$info"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.\" Generator: DocBook </xsl:text>
+ <xsl:value-of select="$DistroTitle"/>
+ <xsl:text> v</xsl:text>
+ <xsl:call-template name="replace.dots.and.dashes">
+ <xsl:with-param name="content" select="$VERSION"/>
+ </xsl:call-template>
+ <xsl:text> &lt;http://docbook.sf.net/></xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.\" Date: </xsl:text>
+ <xsl:call-template name="replace.dots.and.dashes">
+ <xsl:with-param name="content" select="$date"/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.\" Manual: </xsl:text>
+ <xsl:call-template name="replace.dots.and.dashes">
+ <xsl:with-param name="content" select="$manual"/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.\" Source: </xsl:text>
+ <xsl:call-template name="replace.dots.and.dashes">
+ <xsl:with-param name="content" select="$source"/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.\"</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+<!-- ==================================================================== -->
+
+ <xsl:template name="TH.title.line">
+
+ <!-- * The exact way that .TH contents are displayed is system- -->
+ <!-- * dependent; it varies somewhat between OSes and roff -->
+ <!-- * versions. Below is a description of how Linux systems with -->
+ <!-- * a modern groff seem to render .TH contents. -->
+ <!-- * -->
+ <!-- * title(section) extra3 title(section) <- page header -->
+ <!-- * extra2 extra1 title(section) <- page footer-->
+ <!-- * -->
+ <!-- * Or, using the names with which the man(7) man page refers -->
+ <!-- * to the various fields: -->
+ <!-- * -->
+ <!-- * title(section) manual title(section) <- page header -->
+ <!-- * source date title(section) <- page footer-->
+ <!-- * -->
+ <!-- * Note that while extra1, extra2, and extra3 are all (nominally) -->
+ <!-- * optional, in practice almost all pages include an "extra1" -->
+ <!-- * field, which is, universally, a date (in some form), and it is -->
+ <!-- * always rendered in the same place (the middle footer position) -->
+ <!-- * -->
+ <!-- * Here are a couple of examples of real-world man pages that -->
+ <!-- * have somewhat useful page headers/footers: -->
+ <!-- * -->
+ <!-- * gtk-options(7) GTK+ User's Manual gtk-options(7) -->
+ <!-- * GTK+ 1.2 2003-10-20 gtk-options(7) -->
+ <!-- * -->
+ <!-- * svgalib(7) Svgalib User Manual svgalib(7) -->
+ <!-- * Svgalib 1.4.1 16 December 1999 svgalib(7) -->
+ <!-- * -->
+ <xsl:param name="title"/>
+ <xsl:param name="section"/>
+ <xsl:param name="extra1"/>
+ <xsl:param name="extra2"/>
+ <xsl:param name="extra3"/>
+
+ <xsl:call-template name="mark.subheading"/>
+ <!-- * Note that we generate quotes around _every_ field in the -->
+ <!-- * .TH title line, including the "title" and "section" -->
+ <!-- * fields. That is because we use the contents of those "as -->
+ <!-- * is", unchanged from the DocBook source; and DTD-based -->
+ <!-- * validation does not provide a way to constrain them to be -->
+ <!-- * "space free" -->
+ <xsl:text>.TH "</xsl:text>
+ <xsl:call-template name="string.upper">
+ <xsl:with-param name="string">
+ <xsl:choose>
+ <xsl:when test="$man.th.title.max.length != ''">
+ <xsl:value-of
+ select="normalize-space(substring($title, 1, $man.th.title.max.length))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="normalize-space($title)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>" "</xsl:text>
+ <xsl:value-of select="normalize-space($section)"/>
+ <xsl:text>" "</xsl:text>
+ <xsl:if test="$man.th.extra1.suppress = 0">
+ <!-- * there is no max.length for the extra1 field; the reason -->
+ <!-- * is, it is almost always a date, and it is not possible -->
+ <!-- * to truncate dates without changing their meaning -->
+ <xsl:value-of select="normalize-space($extra1)"/>
+ </xsl:if>
+ <xsl:text>" "</xsl:text>
+ <xsl:if test="$man.th.extra2.suppress = 0">
+ <xsl:choose>
+ <!-- * if max.length is non-empty, use value to truncate field -->
+ <xsl:when test="$man.th.extra2.max.length != ''">
+ <xsl:value-of
+ select="normalize-space(substring($extra2, 1, $man.th.extra2.max.length))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="normalize-space($extra2)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ <xsl:text>" "</xsl:text>
+ <xsl:if test="$man.th.extra3.suppress = 0">
+ <xsl:choose>
+ <!-- * if max.length is non-empty, use value to truncate field -->
+ <xsl:when test="$man.th.extra3.max.length != ''">
+ <xsl:value-of
+ select="normalize-space(substring($extra3, 1, $man.th.extra3.max.length))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="normalize-space($extra3)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ <xsl:text>"&#10;</xsl:text>
+ <xsl:call-template name="mark.subheading"/>
+ </xsl:template>
+
+ <!-- ============================================================== -->
+
+ <xsl:template name="set.default.formatting">
+ <!-- * Set default hyphenation, justification, indentation and -->
+ <!-- * line-breaking -->
+ <!-- * -->
+ <!-- * If the value of man.hypenate is zero (the default), then -->
+ <!-- * disable hyphenation (".nh" = "no hyphenation") -->
+ <xsl:if test="$man.hyphenate = 0">
+ <xsl:text>.\" disable hyphenation&#10;</xsl:text>
+ <xsl:text>.nh&#10;</xsl:text>
+ </xsl:if>
+ <!-- * If the value of man.justify is zero (the default), then -->
+ <!-- * disable justification (".ad l" means "adjust to left only") -->
+ <xsl:if test="$man.justify = 0">
+ <xsl:text>.\" disable justification</xsl:text>
+ <xsl:text> (adjust text to left margin only)&#10;</xsl:text>
+ <xsl:text>.ad l&#10;</xsl:text>
+ </xsl:if>
+ <xsl:if test="not($man.indent.refsect = 0)">
+ <xsl:text>.\" store initial "default indentation value"&#10;</xsl:text>
+ <xsl:text>.nr zq \n(IN&#10;</xsl:text>
+ <xsl:text>.\" adjust default indentation&#10;</xsl:text>
+ <xsl:text>.nr IN </xsl:text>
+ <xsl:value-of select="$man.indent.width"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.\" adjust indentation of SS headings&#10;</xsl:text>
+ <xsl:text>.nr SN \n(IN&#10;</xsl:text>
+ </xsl:if>
+ <!-- * Unless the value of man.break.after.slash is zero (the -->
+ <!-- * default), tell groff that it is OK to break a line -->
+ <!-- * after a slash when needed. -->
+ <xsl:if test="$man.break.after.slash != 0">
+ <xsl:text>.\" enable line breaks after slashes&#10;</xsl:text>
+ <xsl:text>.cflags 4 /&#10;</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <!-- * The prepare.manpage.contents template is called after all -->
+ <!-- * other processing has been done, before serializing the -->
+ <!-- * result of all the other processing. It basically works on -->
+ <!-- * the result as one big string. -->
+ <xsl:template name="prepare.manpage.contents">
+ <xsl:param name="content" select="''"/>
+
+ <!-- * If user has provided a "local" string-substitution map to -->
+ <!-- * be applied /before/ the standard string-substitution map, -->
+ <!-- * apply it. -->
+ <xsl:variable name="pre.adjusted.content">
+ <xsl:choose>
+ <xsl:when test="$man.string.subst.map.local.pre">
+ <!-- * normalized value of man.string.subst.map.local.pre -->
+ <!-- * is non-empty, so get contents of map and apply them -->
+ <xsl:call-template name="apply-string-subst-map">
+ <xsl:with-param name="content" select="$content"/>
+ <xsl:with-param name="map.contents"
+ select="exsl:node-set($man.string.subst.map.local.pre)/*"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * value of man.string.subst.map.local.pre is empty, -->
+ <!-- * so just copy original contents -->
+ <xsl:value-of select="$content"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- * Apply standard string-substitution map. The main purpose -->
+ <!-- * of this map is to escape certain characters that have -->
+ <!-- * special meaning in roff, and to replace certain characters -->
+ <!-- * used within the stylesheet internally to represent roff -->
+ <!-- * markup characters. -->
+ <xsl:variable name="adjusted.content">
+ <xsl:call-template name="apply-string-subst-map">
+ <xsl:with-param name="content" select="$pre.adjusted.content"/>
+ <xsl:with-param name="map.contents"
+ select="exsl:node-set($man.string.subst.map)/*"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <!-- * If user has provided a "local" string-substitution map to -->
+ <!-- * be applied /after/ the standard string-substitution map, -->
+ <!-- * apply it. -->
+ <xsl:variable name="post.adjusted.content">
+ <xsl:choose>
+ <xsl:when test="$man.string.subst.map.local.post">
+ <!-- * normalized value of man.string.subst.map.local.post -->
+ <!-- * is non-empty, so get contents of map and apply them -->
+ <xsl:call-template name="apply-string-subst-map">
+ <xsl:with-param name="content" select="$adjusted.content"/>
+ <xsl:with-param name="map.contents"
+ select="exsl:node-set($man.string.subst.map.local.post)/*"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * value of man.string.subst.map.local.post is empty, -->
+ <!-- * so just copy original contents -->
+ <xsl:value-of select="$adjusted.content"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- * Optionally, apply a character map to replace Unicode -->
+ <!-- * symbols and special characters. -->
+ <xsl:choose>
+ <xsl:when test="$man.charmap.enabled != 0">
+ <xsl:call-template name="apply-character-map">
+ <xsl:with-param name="content" select="$post.adjusted.content"/>
+ <xsl:with-param name="map.contents"
+ select="exsl:node-set($man.charmap.contents)/*"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * if we reach here, value of $man.charmap.enabled is zero, -->
+ <!-- * so we just pass the adjusted contents through "as is" -->
+ <xsl:value-of select="$adjusted.content"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <xsl:template name="write.man.file">
+ <xsl:param name="name"/>
+ <xsl:param name="section"/>
+ <xsl:param name="lang"/>
+ <xsl:param name="content"/>
+ <xsl:param name="filename">
+ <xsl:call-template name="make.adjusted.man.filename">
+ <xsl:with-param name="name" select="$name"/>
+ <xsl:with-param name="section" select="$section"/>
+ <xsl:with-param name="lang" select="$lang"/>
+ </xsl:call-template>
+ </xsl:param>
+ <xsl:call-template name="write.text.chunk">
+ <xsl:with-param name="filename" select="$filename"/>
+ <xsl:with-param name="suppress-context-node-name" select="1"/>
+ <xsl:with-param name="quiet" select="$man.output.quietly"/>
+ <xsl:with-param
+ name="message-prolog"
+ >Note: </xsl:with-param>
+ <xsl:with-param name="encoding" select="$man.output.encoding"/>
+ <xsl:with-param name="content" select="$content"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- ============================================================== -->
+
+ <!-- * A "stub" is sort of alias for another file, intended to be read -->
+ <!-- * and expanded by soelim(1); it's simply a file whose complete -->
+ <!-- * contents are just a single line of the following form: -->
+ <!-- * -->
+ <!-- * .so manX/realname.X -->
+ <!-- * -->
+ <!-- * "realname" is a name of another man-page file. That .so line is -->
+ <!-- * basically a roff "include" statement. When the man command finds -->
+ <!-- * it, it calls soelim(1) and includes and displays the contents of -->
+ <!-- * the manX/realqname.X file. -->
+ <!-- * -->
+ <!-- * If a refentry has multiple refnames, we generate a "stub" page for -->
+ <!-- * each refname found, except for the first one. -->
+ <xsl:template name="write.stubs">
+ <xsl:param name="first.refname"/>
+ <xsl:param name="section"/>
+ <xsl:param name="lang"/>
+ <xsl:for-each select="refnamediv/refname">
+ <xsl:if test=". != $first.refname">
+ <xsl:call-template name="write.text.chunk">
+ <xsl:with-param name="filename">
+ <xsl:call-template name="make.adjusted.man.filename">
+ <xsl:with-param name="name">
+ <xsl:apply-templates/>
+ </xsl:with-param>
+ <xsl:with-param name="section" select="$section"/>
+ <xsl:with-param name="lang" select="$lang"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="quiet" select="$man.output.quietly"/>
+ <xsl:with-param name="suppress-context-node-name" select="1"/>
+ <xsl:with-param name="message-prolog">Note: </xsl:with-param>
+ <xsl:with-param name="message-epilog"> (soelim stub)</xsl:with-param>
+ <xsl:with-param name="content">
+ <xsl:value-of select="concat('.so man', $section, '/')"/>
+ <xsl:call-template name="make.adjusted.man.filename">
+ <xsl:with-param name="name" select="$first.refname"/>
+ <xsl:with-param name="section" select="$section"/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!-- ============================================================== -->
+
+ <!-- * A manifest file is useful for doing "make clean" during -->
+ <!-- * builds and for other purposes. When we make the manifest -->
+ <!-- * file, we need to include in it a filename for each man-page -->
+ <!-- * generated, including any "stub" pages. -->
+ <xsl:template name="generate.manifest">
+ <xsl:variable name="filelist">
+ <xsl:for-each select="//refentry">
+ <!-- * all refname instances in a Refentry inherit their section -->
+ <!-- * numbers from the parent Refentry; so we only need to get -->
+ <!-- * the section once per Refentry, not once per Refname -->
+ <xsl:variable name="section">
+ <xsl:call-template name="get.refentry.section">
+ <xsl:with-param name="quiet" select="1"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="lang">
+ <xsl:call-template name="l10n.language"/>
+ </xsl:variable>
+ <xsl:for-each select="refnamediv/refname">
+ <xsl:call-template name="make.adjusted.man.filename">
+ <xsl:with-param name="name" select="."/>
+ <xsl:with-param name="section" select="$section"/>
+ <xsl:with-param name="lang" select="$lang"/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:variable>
+
+ <!-- * we write the manifest file once per document, not once per -->
+ <!-- * Refentry -->
+ <xsl:call-template name="write.text.chunk">
+ <xsl:with-param name="filename">
+ <xsl:value-of select="$man.output.manifest.filename"/>
+ </xsl:with-param>
+ <xsl:with-param name="quiet" select="1"/>
+ <xsl:with-param name="message-prolog">Note: </xsl:with-param>
+ <xsl:with-param name="message-epilog"> (manifest file)</xsl:with-param>
+ <xsl:with-param name="content">
+ <xsl:value-of select="$filelist"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:if test="$man.output.quietly = 0">
+ <xsl:message><xsl:text>&#10;</xsl:text></xsl:message>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/param.xsl b/docs/xsl-generic/manpages/param.xsl
new file mode 100644
index 00000000..fcdc3bc6
--- /dev/null
+++ b/docs/xsl-generic/manpages/param.xsl
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="ASCII"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!-- This file is generated from param.xweb -->
+
+<!-- ********************************************************************
+ $Id: param.xweb 7112 2007-07-22 12:19:19Z xmldoc $
+ ********************************************************************
+
+ 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="man.authors.section.enabled">1</xsl:param>
+<xsl:param name="man.break.after.slash">0</xsl:param>
+<xsl:param name="man.charmap.enabled" select="1"/>
+<xsl:param name="man.charmap.subset.profile">
+@*[local-name() = 'block'] = 'Miscellaneous Technical' or
+(@*[local-name() = 'block'] = 'C1 Controls And Latin-1 Supplement (Latin-1 Supplement)' and
+ @*[local-name() = 'class'] = 'symbols'
+) or
+(@*[local-name() = 'block'] = 'General Punctuation' and
+ (@*[local-name() = 'class'] = 'spaces' or
+ @*[local-name() = 'class'] = 'dashes' or
+ @*[local-name() = 'class'] = 'quotes' or
+ @*[local-name() = 'class'] = 'bullets'
+ )
+) or
+@*[local-name() = 'name'] = 'HORIZONTAL ELLIPSIS' or
+@*[local-name() = 'name'] = 'WORD JOINER' or
+@*[local-name() = 'name'] = 'SERVICE MARK' or
+@*[local-name() = 'name'] = 'TRADE MARK SIGN' or
+@*[local-name() = 'name'] = 'ZERO WIDTH NO-BREAK SPACE'
+</xsl:param>
+<xsl:param name="man.charmap.uri"/>
+<xsl:param name="man.charmap.use.subset" select="1"/>
+<xsl:param name="man.copyright.section.enabled">1</xsl:param>
+<xsl:param name="man.endnotes.are.numbered">1</xsl:param>
+<xsl:param name="man.endnotes.list.enabled">1</xsl:param>
+<xsl:param name="man.endnotes.list.heading"/>
+ <xsl:param name="man.font.funcprototype">BI</xsl:param>
+ <xsl:param name="man.font.funcsynopsisinfo">B</xsl:param>
+ <xsl:param name="man.font.table.headings">B</xsl:param>
+ <xsl:param name="man.font.table.title">B</xsl:param>
+<xsl:param name="man.hyphenate.computer.inlines">0</xsl:param>
+<xsl:param name="man.hyphenate.filenames">0</xsl:param>
+<xsl:param name="man.hyphenate">0</xsl:param>
+<xsl:param name="man.hyphenate.urls">0</xsl:param>
+<xsl:param name="man.indent.blurbs" select="1"/>
+<xsl:param name="man.indent.lists" select="1"/>
+<xsl:param name="man.indent.refsect" select="0"/>
+<xsl:param name="man.indent.verbatims" select="1"/>
+<xsl:param name="man.indent.width">4</xsl:param>
+<xsl:param name="man.justify">0</xsl:param>
+<xsl:param name="man.links.are.underlined">1</xsl:param>
+<xsl:param name="man.output.base.dir">man/</xsl:param>
+<xsl:param name="man.output.encoding">UTF-8</xsl:param>
+<xsl:param name="man.output.in.separate.dir" select="0"/>
+<xsl:param name="man.output.lang.in.name.enabled" select="0"/>
+<xsl:param name="man.output.manifest.enabled" select="0"/>
+<xsl:param name="man.output.manifest.filename">MAN.MANIFEST</xsl:param>
+<xsl:param name="man.output.quietly" select="0"/>
+<xsl:param name="man.output.subdirs.enabled" select="1"/>
+<xsl:param name="man.segtitle.suppress" select="0"/>
+<xsl:param name="man.string.subst.map">
+
+ <!-- * remove no-break marker at beginning of line (stylesheet artifact) -->
+ <substitution oldstring="&#9618;&#9600;" newstring="&#9618;"/>
+ <!-- * replace U+2580 no-break marker (stylesheet-added) w/ no-break space -->
+ <substitution oldstring="&#9600;" newstring="\ "/>
+
+ <!-- ==================================================================== -->
+
+ <!-- * squeeze multiple newlines before a roff request -->
+ <substitution oldstring="&#10;&#10;." newstring="&#10;."/>
+ <!-- * remove any .sp instances that directly precede a .PP -->
+ <substitution oldstring=".sp&#10;.PP" newstring=".PP"/>
+ <!-- * remove any .sp instances that directly follow a .PP -->
+ <substitution oldstring=".PP&#10;.sp" newstring=".PP"/>
+ <!-- * squeeze multiple newlines after start of no-fill (verbatim) env. -->
+ <substitution oldstring=".nf&#10;&#10;" newstring=".nf&#10;"/>
+ <!-- * squeeze multiple newlines after REstoring margin -->
+ <substitution oldstring=".RE&#10;&#10;" newstring=".RE&#10;"/>
+ <!-- * U+2591 is a marker we add before and after every Parameter in -->
+ <!-- * Funcprototype output -->
+ <substitution oldstring="&#9617;" newstring=" "/>
+ <!-- * U+2592 is a marker we add for the newline before output of <sbr>; -->
+ <substitution oldstring="&#9618;" newstring="&#10;"/>
+ <!-- * -->
+ <!-- * Now deal with some other characters that are added by the -->
+ <!-- * stylesheets during processing. -->
+ <!-- * -->
+ <!-- * bullet -->
+ <substitution oldstring="&#8226;" newstring="\(bu"/>
+ <!-- * left double quote -->
+ <substitution oldstring="&#8220;" newstring="\(lq"/>
+ <!-- * right double quote -->
+ <substitution oldstring="&#8221;" newstring="\(rq"/>
+ <!-- * left single quote -->
+ <substitution oldstring="&#8216;" newstring="\(oq"/>
+ <!-- * right single quote -->
+ <substitution oldstring="&#8217;" newstring="\(cq"/>
+ <!-- * copyright sign -->
+ <substitution oldstring="&#169;" newstring="\(co"/>
+ <!-- * registered sign -->
+ <substitution oldstring="&#174;" newstring="\(rg"/>
+ <!-- * ...servicemark... -->
+ <!-- * There is no groff equivalent for it. -->
+ <substitution oldstring="&#8480;" newstring="(SM)"/>
+ <!-- * ...trademark... -->
+ <!-- * We don't do "\(tm" because for console output, -->
+ <!-- * groff just renders that as "tm"; that is: -->
+ <!-- * -->
+ <!-- * Product&#x2122; -> Producttm -->
+ <!-- * -->
+ <!-- * So we just make it to "(TM)" instead; thus: -->
+ <!-- * -->
+ <!-- * Product&#x2122; -> Product(TM) -->
+ <substitution oldstring="&#8482;" newstring="(TM)"/>
+
+</xsl:param>
+<xsl:param name="man.string.subst.map.local.post"/>
+ <xsl:param name="man.string.subst.map.local.pre"/>
+<xsl:param name="man.subheading.divider.enabled">0</xsl:param>
+<xsl:param name="man.subheading.divider">========================================================================</xsl:param>
+<xsl:param name="man.table.footnotes.divider">----</xsl:param>
+<xsl:param name="man.th.extra1.suppress">0</xsl:param>
+<xsl:param name="man.th.extra2.max.length">30</xsl:param>
+<xsl:param name="man.th.extra2.suppress">0</xsl:param>
+<xsl:param name="man.th.extra3.max.length">30</xsl:param>
+<xsl:param name="man.th.extra3.suppress">0</xsl:param>
+<xsl:param name="man.th.title.max.length">20</xsl:param>
+<xsl:param name="refentry.date.profile.enabled">0</xsl:param>
+<xsl:param name="refentry.date.profile">
+ (($info[//date])[last()]/date)[1]|
+ (($info[//pubdate])[last()]/pubdate)[1]
+</xsl:param>
+<xsl:param name="refentry.manual.fallback.profile">
+refmeta/refmiscinfo[1]/node()</xsl:param>
+<xsl:param name="refentry.manual.profile.enabled">0</xsl:param>
+<xsl:param name="refentry.manual.profile">
+ (($info[//title])[last()]/title)[1]|
+ ../title/node()
+</xsl:param>
+<xsl:param name="refentry.meta.get.quietly" select="0"/>
+<xsl:param name="refentry.source.fallback.profile">
+refmeta/refmiscinfo[1]/node()</xsl:param>
+<xsl:param name="refentry.source.name.profile.enabled">0</xsl:param>
+<xsl:param name="refentry.source.name.profile">
+ (($info[//productname])[last()]/productname)[1]|
+ (($info[//corpname])[last()]/corpname)[1]|
+ (($info[//corpcredit])[last()]/corpcredit)[1]|
+ (($info[//corpauthor])[last()]/corpauthor)[1]|
+ (($info[//orgname])[last()]/orgname)[1]|
+ (($info[//publishername])[last()]/publishername)[1]
+</xsl:param>
+<xsl:param name="refentry.source.name.suppress">0</xsl:param>
+<xsl:param name="refentry.version.profile.enabled">0</xsl:param>
+<xsl:param name="refentry.version.profile">
+ (($info[//productnumber])[last()]/productnumber)[1]|
+ (($info[//edition])[last()]/edition)[1]|
+ (($info[//releaseinfo])[last()]/releaseinfo)[1]
+</xsl:param>
+<xsl:param name="refentry.version.suppress">0</xsl:param>
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/profile-docbook.xsl b/docs/xsl-generic/manpages/profile-docbook.xsl
new file mode 100644
index 00000000..ec4759e0
--- /dev/null
+++ b/docs/xsl-generic/manpages/profile-docbook.xsl
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!--This file was created automatically by xsl2profile-->
+<!--from the DocBook XSL stylesheets.-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" xmlns:ng="http://docbook.org/docbook-ng" xmlns:db="http://docbook.org/ns/docbook" xmlns:exslt="http://exslt.org/common" exslt:dummy="dummy" ng:dummy="dummy" db:dummy="dummy" extension-element-prefixes="exslt" exclude-result-prefixes="exsl exslt" version="1.0">
+
+ <xsl:import href="../html/docbook.xsl"/>
+ <xsl:import href="../html/manifest.xsl"/>
+ <!-- * html-synop.xsl file is generated by build -->
+ <xsl:import href="html-synop.xsl"/>
+ <xsl:output method="text" encoding="UTF-8" indent="no"/>
+ <!-- ********************************************************************
+ $Id: docbook.xsl 7153 2007-07-26 14:08:55Z xmldoc $
+ ********************************************************************
+
+ 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:include href="../common/refentry.xsl"/>
+ <xsl:include href="../common/charmap.xsl"/>
+ <xsl:include href="param.xsl"/>
+ <xsl:include href="utility.xsl"/>
+ <xsl:include href="info.xsl"/>
+ <xsl:include href="other.xsl"/>
+ <xsl:include href="refentry.xsl"/>
+ <xsl:include href="block.xsl"/>
+ <xsl:include href="inline.xsl"/>
+ <xsl:include href="synop.xsl"/>
+ <xsl:include href="lists.xsl"/>
+ <xsl:include href="endnotes.xsl"/>
+ <xsl:include href="table.xsl"/>
+
+ <!-- * we rename the following just to avoid using params with "man" -->
+ <!-- * prefixes in the table.xsl stylesheet (because that stylesheet -->
+ <!-- * can potentially be reused for more than just man output) -->
+ <xsl:param name="tbl.font.headings" select="$man.font.table.headings"/>
+ <xsl:param name="tbl.font.title" select="$man.font.table.title"/>
+
+ <!-- ==================================================================== -->
+
+ <xslo:include xmlns:xslo="http://www.w3.org/1999/XSL/Transform" href="../profiling/profile-mode.xsl"/><xslo:variable xmlns:xslo="http://www.w3.org/1999/XSL/Transform" name="profiled-content"><xslo:choose><xslo:when test="*/self::ng:* or */self::db:*"><xslo:message>Note: namesp. cut : stripped namespace before processing</xslo:message><xslo:variable name="stripped-content"><xslo:apply-templates select="/" mode="stripNS"/></xslo:variable><xslo:message>Note: namesp. cut : processing stripped document</xslo:message><xslo:apply-templates select="exslt:node-set($stripped-content)" mode="profile"/></xslo:when><xslo:otherwise><xslo:apply-templates select="/" mode="profile"/></xslo:otherwise></xslo:choose></xslo:variable><xslo:variable xmlns:xslo="http://www.w3.org/1999/XSL/Transform" name="profiled-nodes" select="exslt:node-set($profiled-content)"/><xsl:template match="/">
+ <!-- * Get a title for current doc so that we let the user -->
+ <!-- * know what document we are processing at this point. -->
+ <xsl:variable name="doc.title">
+ <xsl:call-template name="get.doc.title"/>
+ </xsl:variable>
+ <xsl:choose>
+ <!-- * when we find a namespaced document, strip the -->
+ <!-- * namespace and then continue processing it. -->
+ <xsl:when test="false()"/>
+ <xsl:when test="//*[local-name() = 'refentry']">
+ <!-- * Check to see if we have any refentry children in this -->
+ <!-- * document; if so, process them. The reason we use -->
+ <!-- * local-name()=refentry (instead of just //refentry) to to -->
+ <!-- * check for refentry children is because this stylsheet is -->
+ <!-- * also post-processed by the stylesheet build to create the -->
+ <!-- * manpages/profile-docbook.xsl, and the refentry child check -->
+ <!-- * in the profile-docbook.xsl stylesheet won't work if we do -->
+ <!-- * a simple //refentry check. -->
+ <xsl:apply-templates select="$profiled-nodes//refentry"/>
+ <!-- * if $man.output.manifest.enabled is non-zero, -->
+ <!-- * generate a manifest file -->
+ <xsl:if test="not($man.output.manifest.enabled = 0)">
+ <xsl:call-template name="generate.manifest">
+ <xsl:with-param name="filename">
+ <xsl:choose>
+ <xsl:when test="not($man.output.manifest.filename = '')">
+ <!-- * If a name for the manifest file is specified, -->
+ <!-- * use that name. -->
+ <xsl:value-of select="$man.output.manifest.filename"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Otherwise, if user has unset -->
+ <!-- * $man.output.manifest.filename, default to -->
+ <!-- * using "MAN.MANIFEST" as the filename. Because -->
+ <!-- * $man.output.manifest.enabled is non-zero and -->
+ <!-- * so we must have a filename in order to -->
+ <!-- * generate the manifest. -->
+ <xsl:text>MAN.MANIFEST</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Otherwise, the document does not contain any -->
+ <!-- * refentry elements, so log/emit message and stop. -->
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Erro</xsl:with-param>
+ <xsl:with-param name="source" select="$doc.title"/>
+ <xsl:with-param name="context-desc">
+ <xsl:text> no refentry</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>No refentry elements found</xsl:text>
+ <xsl:if test="$doc.title != ''">
+ <xsl:text> in "</xsl:text>
+ <xsl:choose>
+ <xsl:when test="string-length($doc.title) &gt; 30">
+ <xsl:value-of select="substring($doc.title,1,30)"/>
+ <xsl:text>...</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$doc.title"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>"</xsl:text>
+ </xsl:if>
+ <xsl:text>.</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- ============================================================== -->
+
+ <xsl:template match="refentry">
+ <xsl:param name="lang">
+ <xsl:call-template name="l10n.language"/>
+ </xsl:param>
+ <!-- * Just use the first refname found as the "name" of the man -->
+ <!-- * page (which may different from the "title"...) -->
+ <xsl:variable name="first.refname" select="refnamediv[1]/refname[1]"/>
+
+ <xsl:call-template name="root.messages">
+ <xsl:with-param name="refname" select="$first.refname"/>
+ </xsl:call-template>
+
+ <!-- * Because there are several times when we need to check *info of -->
+ <!-- * each refentry and its ancestors, we get those and store the -->
+ <!-- * data from them as a node-set in memory. -->
+
+ <!-- * Make a node-set with contents of *info -->
+ <xsl:variable name="get.info" select="ancestor-or-self::*/*[substring(local-name(), string-length(local-name()) - 3) = 'info']"/>
+ <xsl:variable name="info" select="exsl:node-set($get.info)"/>
+
+ <!-- * The get.refentry.metadata template is in -->
+ <!-- * ../common/refentry.xsl. It looks for metadata in $info -->
+ <!-- * and in various other places and then puts it into a form -->
+ <!-- * that's easier for us to digest. -->
+ <xsl:variable name="get.refentry.metadata">
+ <xsl:call-template name="get.refentry.metadata">
+ <xsl:with-param name="refname" select="$first.refname"/>
+ <xsl:with-param name="info" select="$info"/>
+ <xsl:with-param name="prefs" select="$refentry.metadata.prefs"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="refentry.metadata" select="exsl:node-set($get.refentry.metadata)"/>
+
+ <!-- * Assemble the various parts into a complete page, then store into -->
+ <!-- * $manpage.contents so that we can manipluate them further. -->
+ <xsl:variable name="manpage.contents">
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * top.comment = commented-out section at top of roff source -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:call-template name="top.comment">
+ <xsl:with-param name="info" select="$info"/>
+ <xsl:with-param name="date" select="$refentry.metadata/date"/>
+ <xsl:with-param name="title" select="$refentry.metadata/title"/>
+ <xsl:with-param name="manual" select="$refentry.metadata/manual"/>
+ <xsl:with-param name="source" select="$refentry.metadata/source"/>
+ </xsl:call-template>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * TH.title.line = title line in header/footer of man page -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:call-template name="TH.title.line">
+ <!-- * .TH TITLE section extra1 extra2 extra3 -->
+ <!-- * -->
+ <!-- * According to the man(7) man page: -->
+ <!-- * -->
+ <!-- * extra1 = date, "the date of the last revision" -->
+ <!-- * extra2 = source, "the source of the command" -->
+ <!-- * extra3 = manual, "the title of the manual -->
+ <!-- * (e.g., Linux Programmer's Manual)" -->
+ <!-- * -->
+ <!-- * So, we end up with: -->
+ <!-- * -->
+ <!-- * .TH TITLE section date source manual -->
+ <!-- * -->
+ <xsl:with-param name="title" select="$refentry.metadata/title"/>
+ <xsl:with-param name="section" select="$refentry.metadata/section"/>
+ <xsl:with-param name="extra1" select="$refentry.metadata/date"/>
+ <xsl:with-param name="extra2" select="$refentry.metadata/source"/>
+ <xsl:with-param name="extra3" select="$refentry.metadata/manual"/>
+ </xsl:call-template>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * Set default hyphenation, justification, indentation, and -->
+ <!-- * line-breaking -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:call-template name="set.default.formatting"/>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * Main body of man page -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:apply-templates/>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * AUTHOR section -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:if test="not($man.authors.section.enabled = 0)">
+ <xsl:call-template name="author.section">
+ <xsl:with-param name="info" select="$info"/>
+ </xsl:call-template>
+ </xsl:if>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * COPYRIGHT section -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:if test="not($man.copyright.section.enabled = 0)">
+ <xsl:call-template name="copyright.section">
+ <xsl:with-param name="info" select="$info"/>
+ </xsl:call-template>
+ </xsl:if>
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- * NOTES list (only if user wants endnotes numbered and/or listed) -->
+ <!-- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <xsl:if test="$man.endnotes.list.enabled != 0 or $man.endnotes.are.numbered != 0">
+ <xsl:call-template name="endnotes.list"/>
+ </xsl:if>
+ </xsl:variable> <!-- * end of manpage.contents -->
+
+ <!-- * Prepare the page contents for final output, then store in -->
+ <!-- * $manpage.contents.prepared so the we can pass it on to the -->
+ <!-- * write.text.chunk() function -->
+ <xsl:variable name="manpage.contents.prepared">
+ <!-- * "Preparing" the page contents involves, at a minimum, -->
+ <!-- * doubling any backslashes found (so they aren't interpreted -->
+ <!-- * as roff escapes). -->
+ <!-- * -->
+ <!-- * If $charmap.enabled is true, "preparing" the page contents also -->
+ <!-- * involves applying a character map to convert Unicode symbols and -->
+ <!-- * special characters into corresponding roff escape sequences. -->
+ <xsl:call-template name="prepare.manpage.contents">
+ <xsl:with-param name="content" select="$manpage.contents"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <!-- * Write the prepared page contents to disk to create -->
+ <!-- * the final man page. -->
+ <xsl:call-template name="write.man.file">
+ <xsl:with-param name="name" select="$first.refname"/>
+ <xsl:with-param name="section" select="$refentry.metadata/section"/>
+ <xsl:with-param name="lang" select="$lang"/>
+ <xsl:with-param name="content" select="$manpage.contents.prepared"/>
+ </xsl:call-template>
+
+ <!-- * Generate "stub" (alias) pages (if any needed) -->
+ <xsl:call-template name="write.stubs">
+ <xsl:with-param name="first.refname" select="$first.refname"/>
+ <xsl:with-param name="section" select="$refentry.metadata/section"/>
+ <xsl:with-param name="lang" select="$lang"/>
+ </xsl:call-template>
+
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/refentry.xsl b/docs/xsl-generic/manpages/refentry.xsl
new file mode 100644
index 00000000..9cb7005f
--- /dev/null
+++ b/docs/xsl-generic/manpages/refentry.xsl
@@ -0,0 +1,256 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version='1.0'>
+
+<!-- ********************************************************************
+ $Id: refentry.xsl 6657 2007-02-26 20:04:25Z xmldoc $
+ ********************************************************************
+
+ 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:template match="refnamediv">
+ <xsl:choose>
+ <xsl:when test="preceding-sibling::refnamediv">
+ <!-- * No title on secondary refnamedivs! -->
+ <!-- * Just put a single line break instead -->
+ <xsl:text>.br&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="mark.subheading"/>
+ <xsl:text>.SH "</xsl:text>
+ <xsl:apply-templates select="." mode="title.markup"/>
+ <xsl:text>"</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:call-template name="mark.subheading"/>
+ <!-- * if we have multiple Refname instances, separate the names -->
+ <!-- * with commas -->
+ <xsl:for-each select="refname">
+ <xsl:if test="position()>1">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="."/>
+ </xsl:for-each>
+ <!-- * The man(7) man pages says: -->
+ <!-- * -->
+ <!-- * The only required heading is NAME, which should be the -->
+ <!-- * first section and be followed on the next line by a one -->
+ <!-- * line description of the program: -->
+ <!-- * -->
+ <!-- * .SH NAME chess \- the game of chess -->
+ <!-- * -->
+ <!-- * It is extremely important that this format is followed, -->
+ <!-- * and that there is a backslash before the single dash -->
+ <!-- * which follows the command name. This syntax is used by -->
+ <!-- * the makewhatis(8) program to create a database of short -->
+ <!-- * command descriptions for the whatis(1) and apropos(1) -->
+ <!-- * commands. -->
+ <!-- * -->
+ <!-- * So why don't we precede the hyphen with a backslash here? -->
+ <!-- * Well, because it's added later, by the apply-string-subst-map -->
+ <!-- * template, before we generate final output -->
+ <xsl:if test="refpurpose/node()">
+ <xsl:text> - </xsl:text>
+ <xsl:value-of select="normalize-space(refpurpose)"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="refsynopsisdiv">
+ <xsl:call-template name="mark.subheading"/>
+ <xsl:text>.SH "</xsl:text>
+ <xsl:apply-templates select="." mode="title.markup"/>
+ <xsl:text>"&#10;</xsl:text>
+ <xsl:call-template name="mark.subheading"/>
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="refsect1|refentry/refsection">
+ <xsl:variable name="title">
+ <xsl:apply-templates select="." mode="title.markup"/>
+ </xsl:variable>
+ <xsl:call-template name="mark.subheading"/>
+ <xsl:text>.SH "</xsl:text>
+ <xsl:value-of select="normalize-space($title)"/>
+ <xsl:text>"&#10;</xsl:text>
+ <xsl:call-template name="mark.subheading"/>
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="refsect2|refentry/refsection/refsection">
+ <xsl:call-template name="mark.subheading"/>
+ <xsl:variable name="title">
+ <xsl:apply-templates
+ select="(info/title
+ |refsectioninfo/title
+ |refsect1info/title
+ |title)[1]/node()"/>
+
+ </xsl:variable>
+ <xsl:text>.SS "</xsl:text>
+ <xsl:value-of select="normalize-space($title)"/>
+ <xsl:text>"&#10;</xsl:text>
+ <xsl:call-template name="mark.subheading"/>
+ <xsl:choose>
+ <!-- * If default-indentation adjustment is on, then indent the -->
+ <!-- * child content of this Refsect2 -->
+ <xsl:when test="not($man.indent.refsect = 0)">
+ <xsl:text>.RS&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>.RE&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * If default-indentation adjustment is on, then do not -->
+ <!-- * indent the child content of thie Refsect2, because -->
+ <!-- * the title is already "sticking out to the left" -->
+ <!-- * (as the groff_man(7) man page describes it), which -->
+ <!-- * actually means the title is indented by the value of -->
+ <!-- * the SN register, which appears by default to be -->
+ <!-- * about half of the default indentation value -->
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="refsect3|refentry/refsection/refsection/refsection">
+ <xsl:variable name="title">
+ <xsl:value-of select="(info/title
+ |refsectioninfo/title
+ |refsect1info/title
+ |title)[1]"/>
+ </xsl:variable>
+ <xsl:choose>
+ <!-- * If default-indentation adjustment is on, then indent the -->
+ <!-- * child content of this Refsect3 or Refsection. -->
+ <xsl:when test="not($man.indent.refsect != 0)">
+ <xsl:call-template name="nested-section-title"/>
+ <xsl:text>.RS&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>.RE&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * If default-indentation adjustment is on, then do not -->
+ <!-- * indent the child content of thie Refsect2, because -->
+ <!-- * the title is already "sticking out to the left" -->
+ <!-- * (as the groff_man(7) man page describes it), which -->
+ <!-- * actually means the title is indented by the value of -->
+ <!-- * the SN register, which appears by default to be -->
+ <!-- * about half of the default indentation value -->
+ <xsl:text>.ti (\n(SNu * 5u / 3u)&#10;</xsl:text>
+ <xsl:call-template name="nested-section-title"/>
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="refsection">
+ <!-- * This template is used for a nested Refsection that is -->
+ <!-- * is a child of a Refsect3-level section (The numberd -->
+ <!-- * Refsect hierarchy in DocBook ends with Refsect3, so -->
+ <!-- * there is not actually a Refsect4 element.) -->
+ <xsl:variable name="title">
+ <xsl:value-of select="(info/title
+ |refsectioninfo/title
+ |refsect1info/title
+ |title)[1]"/>
+ </xsl:variable>
+ <xsl:variable name="indent-width">
+ <xsl:if test="not($man.indent.refsect = 0)">
+ <!-- * If default-indentation adjustment is on, then indent the -->
+ <!-- * child content of this Refsect3 or Refsection. -->
+ <xsl:text>(\n(SNu)&#10;</xsl:text>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:call-template name="nested-section-title"/>
+ <xsl:text>.RS (\n(SNu)&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>.RE&#10;</xsl:text>
+ </xsl:template>
+
+ <!-- ==================================================================== -->
+
+ <!-- * Use uppercase to render titles of all instances of Refsect1 or -->
+ <!-- * top-level Refsection, including in cross-references -->
+ <xsl:template match="refsect1|refentry/refsection"
+ mode="title.markup">
+ <xsl:variable name="title" select="(info/title
+ |refsectioninfo/title
+ |refsect1info/title
+ |title)[1]"/>
+ <xsl:call-template name="string.upper">
+ <xsl:with-param name="string">
+ <xsl:apply-templates select="$title" mode="title.markup"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- * Output of Titles from Xref with Endterm needs to be handled -->
+ <!-- * separately from output for Endterm-less Xref -->
+ <xsl:template match="refsect1/title
+ |refentry/refsection/title
+ |refsynopsisdiv/title"
+ mode="endterm">
+ <xsl:call-template name="string.upper">
+ <xsl:with-param name="string">
+ <xsl:apply-templates/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- * Use uppercase to render titles of all instances of Refsynopsisdiv, -->
+ <!-- * including in cross-references -->
+ <xsl:template match="refsynopsisdiv" mode="title.markup">
+ <xsl:param name="allow-anchors" select="0"/>
+ <xsl:call-template name="string.upper">
+ <xsl:with-param name="string">
+ <xsl:choose>
+ <xsl:when test="info/title
+ |refsynopsisdivinfo/title
+ |title">
+ <xsl:apply-templates
+ select="(info/title
+ |refsynopsisdivinfo/title
+ |title)[1]" mode="title.markup">
+ <xsl:with-param name="allow-anchors" select="$allow-anchors"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'RefSynopsisDiv'"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- * Use uppercase to render titles of all instances of Refnamediv, -->
+ <!-- * including in cross-references -->
+ <xsl:template match="refnamediv" mode="title.markup">
+ <xsl:call-template name="string.upper">
+ <xsl:with-param name="string">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'RefName'"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="refnamediv" mode="xref-to">
+ <xsl:apply-templates select="." mode="title.markup"/>
+ </xsl:template>
+
+ <!-- ==================================================================== -->
+
+ <!-- * suppress any title we don't otherwise process elsewhere -->
+
+ <xsl:template match="title"/>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/synop.xsl b/docs/xsl-generic/manpages/synop.xsl
new file mode 100644
index 00000000..cbca36c7
--- /dev/null
+++ b/docs/xsl-generic/manpages/synop.xsl
@@ -0,0 +1,305 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ exclude-result-prefixes="exsl"
+ version='1.0'>
+
+<!-- ********************************************************************
+ $Id: synop.xsl 7235 2007-08-13 11:13:37Z xmldoc $
+ ********************************************************************
+
+ 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:variable name="arg.or.sep"> |</xsl:variable>
+
+<!-- * Note: If you're looking for the *Synopsis* element, you won't -->
+<!-- * find any code here for handling it. It's a "verbatim" -->
+<!-- * environment; see the block.xsl file instead. -->
+
+<xsl:template match="synopfragmentref">
+ <xsl:variable name="target" select="key('id',@linkend)"/>
+ <xsl:variable name="snum">
+ <xsl:apply-templates select="$target" mode="synopfragment.number"/>
+ </xsl:variable>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$snum"/>
+ <xsl:text>)</xsl:text>
+ <xsl:text>&#x2580;</xsl:text>
+ <xsl:call-template name="italic">
+ <xsl:with-param name="node" select="exsl:node-set(normalize-space(.))"/>
+ <xsl:with-param name="context" select="."/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="synopfragment" mode="synopfragment.number">
+ <xsl:number format="1"/>
+</xsl:template>
+
+<xsl:template match="synopfragment">
+ <xsl:variable name="snum">
+ <xsl:apply-templates select="." mode="synopfragment.number"/>
+ </xsl:variable>
+ <xsl:text>&#10;</xsl:text>
+ <!-- * If we have a group of Synopgfragments, we only want to output a -->
+ <!-- * line of space before the first; so when we find a Synopfragment -->
+ <!-- * whose first preceding sibling is another Synopfragment, we back -->
+ <!-- * up one line vertically to negate the line of vertical space -->
+ <!-- * that's added by the .HP macro -->
+ <xsl:if test="preceding-sibling::*[1][self::synopfragment]">
+ <xsl:text>.sp -1n&#10;</xsl:text>
+ </xsl:if>
+ <xsl:text>.HP </xsl:text>
+ <!-- * For each Synopfragment, make a hanging paragraph, with the -->
+ <!-- * indent calculated from the length of the generated number -->
+ <!-- * used as a reference + pluse 3 characters (for the open and -->
+ <!-- * close parens around the number, plus a space). -->
+ <xsl:value-of select="string-length (normalize-space ($snum)) + 3"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$snum"/>
+ <xsl:text>)</xsl:text>
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="group|arg" name="group-or-arg">
+ <xsl:variable name="choice" select="@choice"/>
+ <xsl:variable name="rep" select="@rep"/>
+ <xsl:variable name="sepchar">
+ <xsl:choose>
+ <xsl:when test="ancestor-or-self::*/@sepchar">
+ <xsl:value-of select="ancestor-or-self::*/@sepchar"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:if test="position()>1 and
+ not(preceding-sibling::*[1][self::sbr])"
+ ><xsl:value-of select="$sepchar"/></xsl:if>
+ <xsl:choose>
+ <xsl:when test="$choice='plain'">
+ <!-- * do nothing -->
+ </xsl:when>
+ <xsl:when test="$choice='req'">
+ <xsl:value-of select="$arg.choice.req.open.str"/>
+ </xsl:when>
+ <xsl:when test="$choice='opt'">
+ <xsl:value-of select="$arg.choice.opt.open.str"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$arg.choice.def.open.str"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:variable name="arg">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="local-name(.) = 'arg' and not(ancestor::arg)">
+ <!-- * Prevent arg contents from getting wrapped and broken up -->
+ <xsl:variable name="arg.wrapper">
+ <Arg><xsl:value-of select="normalize-space($arg)"/></Arg>
+ </xsl:variable>
+ <xsl:apply-templates mode="prevent.line.breaking"
+ select="exsl:node-set($arg.wrapper)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$arg"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="$rep='repeat'">
+ <xsl:value-of select="$arg.rep.repeat.str"/>
+ </xsl:when>
+ <xsl:when test="$rep='norepeat'">
+ <xsl:value-of select="$arg.rep.norepeat.str"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$arg.rep.def.str"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="$choice='plain'">
+ <xsl:if test='arg'>
+ <xsl:value-of select="$arg.choice.plain.close.str"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="$choice='req'">
+ <xsl:value-of select="$arg.choice.req.close.str"/>
+ </xsl:when>
+ <xsl:when test="$choice='opt'">
+ <xsl:value-of select="$arg.choice.opt.close.str"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$arg.choice.def.close.str"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="group/arg">
+ <xsl:variable name="choice" select="@choice"/>
+ <xsl:variable name="rep" select="@rep"/>
+ <xsl:if test="position()>1"><xsl:value-of select="$arg.or.sep"/></xsl:if>
+ <xsl:call-template name="group-or-arg"/>
+</xsl:template>
+
+<xsl:template match="sbr">
+ <xsl:text>&#x2592;</xsl:text>
+ <xsl:text>.br&#x2592;</xsl:text>
+</xsl:template>
+
+<xsl:template match="cmdsynopsis">
+ <!-- * if justification is enabled by default, turn it off temporarily -->
+ <xsl:if test="$man.justify != 0">
+ <xsl:text>.ad l&#10;</xsl:text>
+ </xsl:if>
+ <!-- * if hyphenation is enabled by default, turn it off temporarily -->
+ <xsl:if test="$man.hyphenate != 0">
+ <xsl:text>.hy 0&#10;</xsl:text>
+ </xsl:if>
+ <xsl:text>.HP </xsl:text>
+ <xsl:value-of select="string-length (normalize-space (command)) + 1"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>&#10;</xsl:text>
+ <!-- * if justification is enabled by default, turn it back on -->
+ <xsl:if test="$man.justify != 0">
+ <xsl:text>.ad&#10;</xsl:text>
+ </xsl:if>
+ <!-- * if hyphenation is enabled by default, turn it back on -->
+ <xsl:if test="$man.hyphenate != 0">
+ <xsl:text>.hy&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<!-- ==================================================================== -->
+<!-- * Funcsynopis hierarchy starts here -->
+<!-- ==================================================================== -->
+
+<!-- * Note: If you're looking for the *Funcsynopsisinfo* element, -->
+<!-- * you won't find any code here for handling it. It's a "verbatim" -->
+<!-- * environment; see the block.xsl file instead. -->
+
+<!-- * Within funcsynopis output, disable hyphenation, and use -->
+<!-- * left-aligned filling for the duration of the synopsis, so that -->
+<!-- * line breaks only occur between separate paramdefs. -->
+<xsl:template match="funcsynopsis">
+ <!-- * if justification is enabled by default, turn it off temporarily -->
+ <xsl:if test="$man.justify != 0">
+ <xsl:text>.ad l&#10;</xsl:text>
+ </xsl:if>
+ <!-- * if hyphenation is enabled by default, turn it off temporarily -->
+ <xsl:if test="$man.hyphenate != 0">
+ <xsl:text>.hy 0&#10;</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates/>
+ <!-- * if justification is enabled by default, turn it back on -->
+ <xsl:if test="$man.justify != 0">
+ <xsl:text>.ad&#10;</xsl:text>
+ </xsl:if>
+ <!-- * if hyphenation is enabled by default, turn it back on -->
+ <xsl:if test="$man.hyphenate != 0">
+ <xsl:text>.hy&#10;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<!-- * All Funcprototype content is by default rendered in bold, -->
+<!-- * because the man(7) man page says this: -->
+<!-- * -->
+<!-- * For functions, the arguments are always specified using -->
+<!-- * italics, even in the SYNOPSIS section, where the rest of -->
+<!-- * the function is specified in bold -->
+<!-- * -->
+<!-- * Look through the contents of the man/man2 and man3 directories -->
+<!-- * on your system, and you'll see that most existing pages do follow -->
+<!-- * this "bold everything in function synopsis" rule. -->
+<!-- * -->
+<!-- * Users who don't want the bold output can choose to adjust the -->
+<!-- * man.font.funcprototype parameter on their own. So even if you -->
+<!-- * don't personally like the way it looks, please don't change the -->
+<!-- * default to be non-bold - because it's a convention that's -->
+<!-- * followed is the vast majority of existing man pages that document -->
+<!-- * functions, and we need to follow it by default, like it or no. -->
+<xsl:template match="funcprototype">
+ <xsl:variable name="funcprototype.string.value">
+ <xsl:value-of select="funcdef"/>
+ </xsl:variable>
+ <xsl:variable name="funcprototype">
+ <xsl:apply-templates select="funcdef"/>
+ </xsl:variable>
+ <xsl:text>.HP </xsl:text>
+ <!-- * Hang Paragraph by length of string value of <funcdef> + 1 -->
+ <!-- * (because funcdef is always followed by one open paren char) -->
+ <xsl:value-of select="string-length (normalize-space ($funcprototype.string.value)) + 1"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.</xsl:text>
+ <xsl:value-of select="$man.font.funcprototype"/>
+ <xsl:text> </xsl:text>
+ <!-- * The following quotation mark (and the one further below) are -->
+ <!-- * needed to properly delimit the parts of the Funcprototype that -->
+ <!-- * should be rendered in the prevailing font (either Bold or Roman) -->
+ <!-- * from Parameter output that needs to be alternately rendered in -->
+ <!-- * italic. -->
+ <xsl:text>"</xsl:text>
+ <xsl:value-of select="normalize-space($funcprototype)"/>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[local-name() != 'funcdef']"/>
+ <xsl:text>"</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="funcdef">
+ <xsl:apply-templates mode="prevent.line.breaking"/>
+</xsl:template>
+
+<xsl:template match="funcdef/function">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="void">
+ <xsl:text>void);</xsl:text>
+</xsl:template>
+
+<xsl:template match="varargs">
+ <xsl:text>...);</xsl:text>
+</xsl:template>
+
+<xsl:template match="paramdef">
+ <xsl:apply-templates mode="prevent.line.breaking" select="."/>
+ <xsl:choose>
+ <xsl:when test="following-sibling::*">
+ <xsl:text>, </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>);</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="paramdef/parameter">
+ <!-- * We use U+2591 here in place of a normal space, because if we -->
+ <!-- * were to just use a normal space, it would get replaced with a -->
+ <!-- * non-breaking space when we run the whole Paramdef through the -->
+ <!-- * prevent.line.breaking template. And as far as why we're -->
+ <!-- * inserting the space and quotation marks around each Parameter -->
+ <!-- * to begin with, the reason is that we need to because we are -->
+ <!-- * outputting Funcsynopsis in either the "BI" or "RI" font, and -->
+ <!-- * the space and quotation marks delimit the text as the -->
+ <!-- * "alternate" or "I" text that needs to be rendered in italic. -->
+ <xsl:text>"&#x2591;"</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>"&#x2591;"</xsl:text>
+</xsl:template>
+
+<xsl:template match="funcparams">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>)</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/table.xsl b/docs/xsl-generic/manpages/table.xsl
new file mode 100644
index 00000000..b6e2fe2e
--- /dev/null
+++ b/docs/xsl-generic/manpages/table.xsl
@@ -0,0 +1,633 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ exclude-result-prefixes="exsl"
+ version='1.0'>
+
+ <!-- ********************************************************************
+ $Id: table.xsl 7177 2007-08-06 10:18:36Z xmldoc $
+ ********************************************************************
+
+ 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:import href="http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"/>
+ <xsl:param name="tbl.font.title">B</xsl:param>
+ <xsl:param name="tbl.font.headings">B</xsl:param>
+ -->
+ <xsl:param name="tbl.running.header.from.thead" select="0"/>
+ <xsl:param name="tbl.column.separator.char">:</xsl:param>
+
+ <!-- ==================================================================== -->
+
+ <!-- * This stylesheet transforms DocBook and HTML table source into -->
+ <!-- * tbl(1) markup. -->
+ <!-- * -->
+ <!-- * For details on tbl(1) and its markup syntaxt, see M. E. Lesk,-->
+ <!-- * "Tbl - A Program to Format Tables": -->
+ <!-- * -->
+ <!-- * http://cm.bell-labs.com/7thEdMan/vol2/tbl -->
+ <!-- * http://cm.bell-labs.com/cm/cs/doc/76/tbl.ps.gz -->
+ <!-- * http://www.snake.net/software/troffcvt/tbl.html -->
+
+ <xsl:template match="table|informaltable" mode="to.tbl">
+ <!--* the "source" param is an optional param; it can be any -->
+ <!--* string you want to use that gives some indication of the -->
+ <!--* source context for a table; it gets passed down to the named -->
+ <!--* templates that do the actual table processing; this -->
+ <!--* stylesheet currently uses the "source" information for -->
+ <!--* logging purposes -->
+ <xsl:param name="source"/>
+ <xsl:param name="title">
+ <xsl:if test="local-name(.) = 'table'">
+ <xsl:apply-templates select="." mode="object.title.markup.textonly"/>
+ </xsl:if>
+ </xsl:param>
+ <!-- * ============================================================== -->
+ <!-- * Set global table parameters -->
+ <!-- * ============================================================== -->
+ <!-- * First, set a few parameters based on attributes specified in -->
+ <!-- * the table source. -->
+ <xsl:param name="allbox">
+ <xsl:if test="not(@frame = 'none') and not(@border = '0')">
+ <!-- * By default, put a box around table and between all cells, -->
+ <!-- * unless frame="none" or border="0" -->
+ <xsl:text>allbox </xsl:text>
+ </xsl:if>
+ </xsl:param>
+ <xsl:param name="center">
+ <!-- * If align="center", center the table. Otherwise, tbl(1) -->
+ <!-- * left-aligns it by default; note that there is no support -->
+ <!-- * in tbl(1) for specifying right alignment. -->
+ <xsl:if test="@align = 'center' or tgroup/@align = 'center'">
+ <xsl:text>center </xsl:text>
+ </xsl:if>
+ </xsl:param>
+ <xsl:param name="expand">
+ <!-- * If pgwide="1" or width="100%", then "expand" the table by -->
+ <!-- * making it "as wide as the current line length" (to quote -->
+ <!-- * the tbl(1) guide). -->
+ <xsl:if test="@pgwide = '1' or @width = '100%'">
+ <xsl:text>expand </xsl:text>
+ </xsl:if>
+ </xsl:param>
+
+ <!-- * ============================================================== -->
+ <!-- * Convert table to HTML -->
+ <!-- * ============================================================== -->
+ <!-- * Process the table by applying the HTML templates from the -->
+ <!-- * DocBook XSL stylesheets to the whole thing; because we don't -->
+ <!-- * override any of the <row>, <entry>, <tr>, <td>, etc. templates, -->
+ <!-- * the templates in the HTML stylesheets (which we import) are -->
+ <!-- * used to process those. -->
+ <xsl:param name="html-table-output">
+ <xsl:choose>
+ <xsl:when test=".//tr">
+ <!-- * If this table has a TR child, it means that it's an -->
+ <!-- * HTML table in the DocBook source, instead of a CALS -->
+ <!-- * table. So we just copy it as-is, while wrapping it -->
+ <!-- * in an element with same name as its original parent. -->
+ <xsl:for-each select="descendant-or-self::table|descendant-or-self::informaltable">
+ <xsl:element name="{local-name(..)}">
+ <table>
+ <xsl:copy-of select="*"/>
+ </table>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Otherwise, this is a CALS table in the DocBook source, -->
+ <!-- * so we need to apply the templates in the HTML -->
+ <!-- * stylesheets to transform it into HTML before we do -->
+ <!-- * any further processing of it. -->
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:param>
+ <xsl:param name="contents" select="exsl:node-set($html-table-output)"/>
+
+ <!-- ==================================================================== -->
+ <!-- * Output the table -->
+ <!-- ==================================================================== -->
+ <!-- * -->
+ <!-- * This is the "driver" part of the code; it calls a series of named
+ * templates (further below) to generate the actual tbl(1) markup, -->
+ <!-- * including the optional "options line", required "format section", -->
+ <!-- * and then the actual contents of the table. -->
+ <!-- * -->
+ <!-- ==================================================================== -->
+
+ <xsl:for-each select="$contents//table">
+ <!-- * ============================================================== -->
+ <!-- * Output table title -->
+ <!-- * ============================================================== -->
+ <xsl:if test="$title != '' or parent::td">
+ <xsl:text>.PP&#10;</xsl:text>
+ <xsl:text>.</xsl:text>
+ <xsl:value-of select="$tbl.font.title"/>
+ <xsl:text> </xsl:text>
+ <xsl:if test="parent::td">
+ <xsl:text>*[nested&#x2580;table]</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="normalize-space($title)"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp -1n&#10;</xsl:text>
+ </xsl:if>
+
+ <!-- * mark the start of the table -->
+ <!-- * "TS" = "table start" -->
+ <xsl:text>.TS</xsl:text>
+ <xsl:if test="thead and $tbl.running.header.from.thead">
+ <!-- * H = "has header" -->
+ <xsl:text> H</xsl:text>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+
+ <!-- * ============================================================== -->
+ <!-- * Output "options line" -->
+ <!-- * ============================================================== -->
+ <xsl:variable name="options-line">
+ <xsl:value-of select="$allbox"/>
+ <xsl:value-of select="$center"/>
+ <xsl:value-of select="$expand"/>
+ <xsl:text>tab(</xsl:text>
+ <xsl:value-of select="$tbl.column.separator.char"/>
+ <xsl:text>)</xsl:text>
+ </xsl:variable>
+ <xsl:if test="normalize-space($options-line) != ''">
+ <xsl:value-of select="normalize-space($options-line)"/>
+ <xsl:text>;&#10;</xsl:text>
+ </xsl:if>
+
+ <!-- * ============================================================== -->
+ <!-- * Output table header rows -->
+ <!-- * ============================================================== -->
+ <xsl:if test="thead">
+ <xsl:call-template name="output.rows">
+ <xsl:with-param name="rows" select="thead/tr"/>
+ </xsl:call-template>
+ <xsl:text>&#10;</xsl:text>
+
+ <!-- * mark the end of table-header rows -->
+ <xsl:choose>
+ <xsl:when test="$tbl.running.header.from.thead">
+ <!-- * "TH" = "table header end" -->
+ <xsl:text>.TH&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * "T&" = "table continuation" and is meant just as a kind -->
+ <!-- * of convenience macro and is sorta equivalent to a "TE" -->
+ <!-- * (table end) followed immediately by a "TS" (table start); -->
+ <!-- * in this case, it marks the end of a table "subsection" -->
+ <!-- * with header rows, and the start of a subsection with body -->
+ <!-- * rows. It's necessary to output it here because the "TH" -->
+ <!-- * macro is not being output, so there's otherwise no way -->
+ <!-- * for tbl(1) to know we have the table "sectioned". -->
+ <xsl:text>.T&amp;&#10;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+
+ <!-- * ============================================================== -->
+ <!-- * Output table body rows -->
+ <!-- * ============================================================== -->
+ <!-- * First create node set with all non-thead rows (tbody+tfoot), -->
+ <!-- * but reordered with the tfoot rows at the end of the node set -->
+ <xsl:variable name="rows-set">
+ <xsl:copy-of select="tbody/tr|tr"/>
+ <xsl:copy-of select="tfoot/tr"/>
+ </xsl:variable>
+ <xsl:call-template name="output.rows">
+ <xsl:with-param name="source" select="$source"/>
+ <xsl:with-param name="rows" select="exsl:node-set($rows-set)"/>
+ </xsl:call-template>
+
+ <!-- * mark the end of the table -->
+ <xsl:text>&#10;</xsl:text>
+ <!-- * .TE = "Table End" -->
+ <xsl:text>.TE&#10;</xsl:text>
+ <!-- * put a blank line of space below the table -->
+ <xsl:text>.sp&#10;</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!-- ==================================================================== -->
+ <!-- * named templates -->
+ <!-- ==================================================================== -->
+ <!-- * -->
+ <!-- * All of the following are named templates that get called directly -->
+ <!-- * or indirectly by the main "driver" part of the code (above) -->
+ <!-- * -->
+ <!-- ==================================================================== -->
+
+ <xsl:template name="output.rows">
+ <xsl:param name="source"/>
+ <xsl:param name="rows"/>
+ <!-- * ============================================================== -->
+ <!-- * Flatten row set into simple list of cells -->
+ <!-- * ============================================================== -->
+ <!-- * Now we flatten the structure further into just a set of -->
+ <!-- * cells without the row parents. This basically creates a -->
+ <!-- * copy of the entire contents of the original table, but -->
+ <!-- * restructured in such a way that we can more easily generate -->
+ <!-- * the corresponding tbl(1) markup we need to output. -->
+ <xsl:variable name="cells-list">
+ <xsl:call-template name="build.cell.list">
+ <xsl:with-param name="source" select="$source"/>
+ <xsl:with-param name="rows" select="$rows"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="cells" select="exsl:node-set($cells-list)"/>
+
+ <!-- * Output the table "format section", which tells tbl(1) how to -->
+ <!-- * format each row and column -->
+ <xsl:call-template name="create.table.format">
+ <xsl:with-param name="cells" select="$cells"/>
+ </xsl:call-template>
+
+ <!--* Output the formatted contents of each cell. -->
+ <xsl:for-each select="$cells/cell">
+ <xsl:call-template name="output.cell"/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!-- * ============================================================== -->
+ <!-- * Output the tbl(1)-formatted contents of each cell. -->
+ <!-- * ============================================================== -->
+ <xsl:template name="output.cell">
+ <xsl:choose>
+ <xsl:when test="preceding-sibling::cell[1]/@row != @row or
+ not(preceding-sibling::cell)">
+ <!-- * If the value of the "row" attribute on this cell is -->
+ <!-- * different from the value of that on the previous cell, it -->
+ <!-- * means we have a new row. So output a line break (as long -->
+ <!-- * as this isn't the first cell in the table) -->
+ <xsl:text>&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Otherwise we are not at the start of a new row, so we -->
+ <!-- * output a tab character to delimit the contents of this -->
+ <!-- * cell from the contents of the next one. -->
+ <xsl:value-of select="$tbl.column.separator.char"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="@type = '^'">
+ <!-- * If this is a dummy cell resulting from the presence of -->
+ <!-- * rowpan attribute in the source, it has no contents, so -->
+ <!-- * we need to handle it differently. -->
+ <xsl:if test="@colspan and @colspan > 1">
+ <!-- * If there is a colspan attribute on this dummy row, then -->
+ <!-- * we need to output a tab character for each column that -->
+ <!-- * it spans. -->
+ <xsl:call-template name="copy-string">
+ <xsl:with-param name="string" select="$tbl.column.separator.char"/>
+ <xsl:with-param name="count">
+ <xsl:value-of select="@colspan - 1"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Otherwise, we have a "real" cell (not a dummy one) with -->
+ <!-- * contents that we need to output, -->
+ <!-- * -->
+ <!-- * The "T{" and "T}" stuff are delimiters to tell tbl(1) that -->
+ <!-- * the delimited contents are "text blocks" that roff -->
+ <!-- * needs to process -->
+ <xsl:text>T{&#10;</xsl:text>
+ <xsl:copy-of select="."/>
+ <xsl:text>&#10;T}</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- * ============================================================== -->
+ <!-- * Build a restructured "cell list" copy of the entire table -->
+ <!-- * ============================================================== -->
+ <xsl:template name="build.cell.list">
+ <xsl:param name="source"/>
+ <xsl:param name="rows"/>
+ <xsl:param name="cell-data-unsorted">
+ <!-- * This param collects all the "real" cells from the table, -->
+ <!-- * along with "dummy" rows that we generate for keeping -->
+ <!-- * track of Rowspan instances. -->
+ <xsl:apply-templates select="$rows" mode="cell.list">
+ <xsl:with-param name="source" select="$source"/>
+ </xsl:apply-templates>
+ </xsl:param>
+ <xsl:param name="cell-data-sorted">
+ <!-- * Sort the cells so that the dummy cells get put where we -->
+ <!-- * need them in the structure. Note that we need to specify -->
+ <!-- * data-type="number" here because the default sorting method -->
+ <!-- * for xsl:sort is "text" (alphabetical). -->
+ <xsl:for-each select="exsl:node-set($cell-data-unsorted)/cell">
+ <xsl:sort select="@row" data-type="number"/>
+ <xsl:sort select="@slot" data-type="number"/>
+ <xsl:copy-of select="."/>
+ </xsl:for-each>
+ </xsl:param>
+ <!-- * Return the sorted cell list -->
+ <xsl:copy-of select="$cell-data-sorted"/>
+ </xsl:template>
+
+ <xsl:template match="tr" mode="cell.list">
+ <xsl:param name="source"/>
+ <xsl:variable name="row">
+ <xsl:value-of select="count(preceding-sibling::tr) + 1"/>
+ </xsl:variable>
+ <xsl:for-each select="td|th">
+ <xsl:call-template name="cell">
+ <xsl:with-param name="source" select="$source"/>
+ <xsl:with-param name="row" select="$row"/>
+ <!-- * pass on the element name so we can select the appropriate -->
+ <!-- * roff font for styling the cell contents -->
+ <xsl:with-param name="class" select="name(.)"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="cell">
+ <xsl:param name="source"/>
+ <xsl:param name="row"/>
+ <xsl:param name="class"/>
+ <xsl:param name="slot">
+ <!-- * The "slot" is the horizontal position of this cell (usually -->
+ <!-- * just the same as its column, but not so when it is preceded -->
+ <!-- * by cells that have colspans or cells in preceding rows that -->
+ <!-- * that have rowspans). -->
+ <xsl:value-of select="position()"/>
+ </xsl:param>
+ <!-- * For each real TD cell, create a Cell instance; contents will -->
+ <!-- * be the roff-formatted contents of its original table cell. -->
+ <cell type=""
+ row="{$row}"
+ slot="{$slot}"
+ class="{$class}"
+ colspan="{@colspan}"
+ align="{@align}"
+ valign="{@valign}"
+ >
+ <xsl:choose>
+ <xsl:when test=".//tr">
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">Warn</xsl:with-param>
+ <xsl:with-param name="source" select="$source"/>
+ <xsl:with-param name="context-desc">tbl convert</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>Extracted a nested table</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>[\fInested&#x2580;table\fR]*&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Apply templates to the child contents of this cell, to -->
+ <!-- * transform them into marked-up roff. -->
+ <xsl:variable name="contents">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <!-- * We now have the contents in roff (plain-text) form, -->
+ <!-- * but we may also still have unnecessary whitespace at -->
+ <!-- * the beginning and/or end of it, so trim it off. -->
+ <xsl:call-template name="trim.text">
+ <xsl:with-param name="contents" select="$contents"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </cell>
+
+ <!-- * For each instance of a rowspan attribute found, we create N -->
+ <!-- * dummy cells, where N is equal to the value of the rowspan. -->
+ <xsl:if test="@rowspan and @rowspan > 0">
+ <!-- * If this cell is preceded in the same row by cells that -->
+ <!-- * have colspan attributes, then we need to calculate the -->
+ <!-- * "offset" caused by those colspan instances; the formula -->
+ <!-- * is to (1) check for all the preceding cells that have -->
+ <!-- * colspan attributes that are not empty and which have a -->
+ <!-- * value greater than 1, then (2) take the sum of the values -->
+ <!-- * of all those colspan attributes, and subtract from that -->
+ <!-- * the number of such colspan instances found. -->
+ <xsl:variable name="colspan-offset">
+ <xsl:value-of
+ select="sum(preceding-sibling::td[@colspan != ''
+ and @colspan > 1]/@colspan) -
+ count(preceding-sibling::td[@colspan != ''
+ and @colspan > 1]/@colspan)"/>
+ </xsl:variable>
+ <xsl:call-template name="create.dummy.cells">
+ <xsl:with-param name="row" select="$row + 1"/>
+ <!-- * The slot value on each dummy cell must be offset by the -->
+ <!-- * value of $colspan-offset to adjust for preceding colpans -->
+ <xsl:with-param name="slot" select="$slot + $colspan-offset"/>
+ <xsl:with-param name="colspan" select="@colspan"/>
+ <xsl:with-param name="rowspan" select="@rowspan"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="create.dummy.cells">
+ <xsl:param name="row"/>
+ <xsl:param name="slot"/>
+ <xsl:param name="colspan"/>
+ <xsl:param name="rowspan"/>
+ <xsl:choose>
+ <xsl:when test="$rowspan > 1">
+ <!-- * Tail recurse until we have no more rowspans, creating -->
+ <!-- * an empty dummy cell each time. The type value, '^' -->
+ <!-- * is the marker that tbl(1) uses to indicate a -->
+ <!-- * "vertically spanned heading". -->
+ <cell row="{$row}" slot="{$slot}" type="^" colspan="{@colspan}"/>
+ <xsl:call-template name="create.dummy.cells">
+ <xsl:with-param name="row" select="$row + 1"/>
+ <xsl:with-param name="slot" select="$slot"/>
+ <xsl:with-param name="colspan" select="$colspan"/>
+ <xsl:with-param name="rowspan" select="$rowspan - 1"/>
+ </xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- * ============================================================== -->
+ <!-- * Build the "format section" for the table -->
+ <!-- * ============================================================== -->
+ <!-- * Description from the tbl(1) guide: -->
+ <!-- * -->
+ <!-- * "The format section of the table specifies the layout of the -->
+ <!-- * columns. Each line in this section corresponds to one line of -->
+ <!-- * the table... and each line contains a key-letter for each -->
+ <!-- * column of the table." -->
+ <xsl:template name="create.table.format">
+ <xsl:param name="cells"/>
+ <xsl:apply-templates mode="table.format" select="$cells"/>
+ <!-- * last line of table format section must end with a dot -->
+ <xsl:text>.</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="cell" mode="table.format">
+ <xsl:choose>
+ <xsl:when test="preceding-sibling::cell[1]/@row != @row">
+ <!-- * If the value of the row attribute on this cell is -->
+ <!-- * different from the value of that on the previous cell, it -->
+ <!-- * means we have a new row. So output a line break. -->
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * If this isn't the first cell, output a space before it to -->
+ <!-- * separate it from the preceding key letter. -->
+ <xsl:if test="position() != 1">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- * Select an appropriate "alignment" key letter based on this -->
+ <!-- * cell's attributes. -->
+ <xsl:choose>
+ <xsl:when test="@type = '^'">
+ <xsl:text>^</xsl:text>
+ </xsl:when>
+ <xsl:when test="@align = 'center'">
+ <xsl:text>c</xsl:text>
+ </xsl:when>
+ <xsl:when test="@align = 'right'">
+ <xsl:text>r</xsl:text>
+ </xsl:when>
+ <xsl:when test="@align = 'char'">
+ <xsl:text>n</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * Default to left alignment. -->
+ <xsl:text>l</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- * By default, tbl(1) vertically centers cell contents within -->
+ <!-- * their cells; the "t" key latter tells it to top-align the -->
+ <!-- * contents instead. Note that tbl(1) has no options for -->
+ <!-- * bottom or baseline alignment. -->
+ <xsl:if test="@valign = 'top'">
+ <xsl:text>t</xsl:text>
+ </xsl:if>
+ <xsl:if test="@class = 'th'">
+ <!-- * If this is a heading row, generate a font indicator (B or I), -->
+ <!-- * or if the value of $tbl.font.headings is empty, nothing. -->
+ <xsl:value-of select="$tbl.font.headings"/>
+ </xsl:if>
+ <!-- * We only need to deal with colspans whose value is greater -->
+ <!-- * than one (a colspan="1" is the same as having no colspan -->
+ <!-- * attribute at all). -->
+ <xsl:if test="@colspan > 1">
+ <xsl:call-template name="process.colspan">
+ <xsl:with-param name="colspan" select="@colspan - 1"/>
+ <xsl:with-param name="type" select="@type"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="process.colspan">
+ <xsl:param name="colspan"/>
+ <xsl:param name="type"/>
+ <!-- * Output a space to separate this key letter from preceding one. -->
+ <xsl:text> </xsl:text>
+ <xsl:choose>
+ <xsl:when test="$type = '^'">
+ <!-- * A '^' ("vertically spanned heading" marker) indicates -->
+ <!-- * that the "parent" of this spanned cell is a dummy cell; -->
+ <!-- * in this case, we need to generate a '^' instead of the -->
+ <!-- * normal 's'. -->
+ <xsl:text>^</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * s = 'spanned heading' -->
+ <xsl:text>s</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="$colspan > 1">
+ <!-- * Tail recurse until we have no more colspans, outputting -->
+ <!-- * another marker each time. -->
+ <xsl:call-template name="process.colspan">
+ <xsl:with-param name="colspan" select="$colspan - 1"/>
+ <xsl:with-param name="type" select="$type"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+
+ <!-- * ============================================================== -->
+ <!-- * colgroup and col -->
+ <!-- * ============================================================== -->
+ <!-- * We currently don't do anything with colgroup. Not sure if it -->
+ <!-- * is widely used enough to bother adding support for it -->
+ <xsl:template match="colgroup"/>
+ <xsl:template match="col"/>
+
+ <!-- * ============================================================== -->
+ <!-- * table footnotes -->
+ <!-- * ============================================================== -->
+ <xsl:template match="footnote" mode="table.footnote.mode">
+ <xsl:variable name="footnotes" select=".//footnote"/>
+ <xsl:variable name="table.footnotes"
+ select=".//tgroup//footnote"/>
+ <xsl:value-of select="$man.table.footnotes.divider"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.br&#10;</xsl:text>
+ <xsl:apply-templates select="*[1]" mode="footnote.body.number"/>
+ <xsl:apply-templates select="*[position() &gt; 1]"/>
+ </xsl:template>
+
+ <!-- * The following template for footnote.body.number mode was just -->
+ <!-- * lifted from the HTML stylesheets with some minor adjustments -->
+ <xsl:template match="*" mode="footnote.body.number">
+ <xsl:variable name="name">
+ <xsl:text>ftn.</xsl:text>
+ <xsl:call-template name="object.id">
+ <xsl:with-param name="object" select="ancestor::footnote"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="href">
+ <xsl:text>#</xsl:text>
+ <xsl:call-template name="object.id">
+ <xsl:with-param name="object" select="ancestor::footnote"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="footnote.mark">
+ <xsl:text>[</xsl:text>
+ <xsl:apply-templates select="ancestor::footnote"
+ mode="footnote.number"/>
+ <xsl:text>]&#10;</xsl:text>
+ </xsl:variable>
+ <xsl:variable name="html">
+ <xsl:apply-templates select="."/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="function-available('exsl:node-set')">
+ <xsl:variable name="html-nodes" select="exsl:node-set($html)"/>
+ <xsl:choose>
+ <xsl:when test="$html-nodes//p">
+ <xsl:apply-templates select="$html-nodes" mode="insert.html.p">
+ <xsl:with-param name="mark" select="$footnote.mark"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="$html-nodes" mode="insert.html.text">
+ <xsl:with-param name="mark" select="$footnote.mark"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="$html"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- * The HTML stylesheets output <sup><a>...</a></sup> around -->
+ <!-- * footnote markers in tables -->
+ <xsl:template match="th/sup">
+ <xsl:apply-templates/>
+ </xsl:template>
+ <xsl:template match="a">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/xsl-generic/manpages/utility.xsl b/docs/xsl-generic/manpages/utility.xsl
new file mode 100644
index 00000000..cf72479b
--- /dev/null
+++ b/docs/xsl-generic/manpages/utility.xsl
@@ -0,0 +1,452 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ xmlns:dyn="http://exslt.org/dynamic"
+ xmlns:saxon="http://icl.com/saxon"
+ exclude-result-prefixes="exsl dyn saxon"
+ version='1.0'>
+
+<!-- ********************************************************************
+ $Id: utility.xsl 6843 2007-06-20 12:21:13Z xmldoc $
+ ********************************************************************
+
+ 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.
+
+ ******************************************************************** -->
+
+<!-- ==================================================================== -->
+
+<!-- * This file contains "utility" templates that are called multiple -->
+<!-- * times per each Refentry. -->
+
+<!-- ==================================================================== -->
+
+ <!-- * NOTE TO DEVELOPERS: For ease of maintenance, the current -->
+ <!-- * manpages stylesheets use the "bold" and "italic" named -->
+ <!-- * templates for anything and everything that needs to get -->
+ <!-- * boldfaced or italicized. -->
+ <!-- * -->
+ <!-- * So if you add anything that needs bold or italic character -->
+ <!-- * formatting, try to apply these templates to it rather than -->
+ <!-- * writing separate code to format it. This can be a little odd if -->
+ <!-- * the content you want to format is not element content; in those -->
+ <!-- * cases, you need to turn it into element content before applying -->
+ <!-- * the template; see examples of this in the existing code. -->
+
+ <xsl:template name="bold">
+ <xsl:param name="node"/>
+ <xsl:param name="context"/>
+ <xsl:choose>
+ <xsl:when test="not($context[ancestor::title])">
+ <xsl:for-each select="$node/node()">
+ <xsl:text>\fB</xsl:text>
+ <xsl:apply-templates select="."/>
+ <xsl:text>\fR</xsl:text>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="$node/node()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="italic">
+ <xsl:param name="node"/>
+ <xsl:param name="context"/>
+ <xsl:for-each select="$node/node()">
+ <xsl:text>\fI</xsl:text>
+ <xsl:apply-templates select="."/>
+ <xsl:text>\fR</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <!-- * NOTE TO DEVELOPERS: For ease of maintenance, the current -->
+ <!-- * manpages stylesheets use the mode="prevent.line.breaking" -->
+ <!-- * templates for anything and everything that needs to have -->
+ <!-- * embedded spaces turned into no-break spaces in output - in -->
+ <!-- * order to prevent that output from getting broken across lines -->
+ <!-- * -->
+ <!-- * So if you add anything that whose output, try to apply this -->
+ <!-- * template to it rather than writing separate code to format -->
+ <!-- * it. This can be a little odd if the content you want to -->
+ <!-- * format is not element content; in those cases, you need to -->
+ <!-- * turn it into element content before applying the template; -->
+ <!-- * see examples of this in the existing code. -->
+ <!-- * -->
+ <!-- * This template is currently called by the funcdef and paramdef -->
+ <!-- * and group/arg templates. -->
+ <xsl:template mode="prevent.line.breaking" match="*">
+ <xsl:variable name="rcontent">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <xsl:variable name="content">
+ <xsl:value-of select="normalize-space($rcontent)"/>
+ </xsl:variable>
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$content"/>
+ <xsl:with-param name="target" select="' '"/>
+ <!-- * U+2580 is a "UPPER HALF BLOCK"; we use it here because -->
+ <!-- * if we were to just use a normal space, it would get -->
+ <!-- * replaced when normalization is done. We replace it -->
+ <!-- * later with the groff markup for non-breaking space. -->
+ <xsl:with-param name="replacement" select="'&#x2580;'"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <xsl:template name="suppress.hyphenation">
+ <!-- * we need to suppress hyphenation inline only if hyphenation is -->
+ <!-- * actually on, and even then only outside of Cmdsynopsis and -->
+ <!-- * Funcsynopsis, where it is already always turned off -->
+ <xsl:if test="$man.hyphenate != 0 and
+ not(ancestor::cmdsynopsis) and
+ not(ancestor::funcsynopsis)">
+ <xsl:text>\%</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <!-- * The replace.dots.and.dashes template is used to cause real -->
+ <!-- * dots and dashes to be output in the top comment (instead of -->
+ <!-- * escaped ones as in the source for the text displayed in the -->
+ <!-- * body of the page) -->
+ <xsl:template name="replace.dots.and.dashes">
+ <xsl:param name="content">
+ <xsl:apply-templates/>
+ </xsl:param>
+ <xsl:variable name="dot-content">
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$content"/>
+ <xsl:with-param name="target" select="'\.'"/>
+ <xsl:with-param name="replacement" select="'.'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$dot-content"/>
+ <xsl:with-param name="target" select="'\-'"/>
+ <xsl:with-param name="replacement" select="'-'"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <!-- * The nested-section-title template is called for refsect3, and any -->
+ <!-- * refsection nested more than 2 levels deep. -->
+ <xsl:template name="nested-section-title">
+ <!-- * The next few lines are some arcane roff code to control line -->
+ <!-- * spacing after headings. -->
+ <xsl:text>.sp&#10;</xsl:text>
+ <xsl:text>.it 1 an-trap&#10;</xsl:text>
+ <xsl:text>.nr an-no-space-flag 1&#10;</xsl:text>
+ <xsl:text>.nr an-break-flag 1&#10;</xsl:text>
+ <xsl:text>.br&#10;</xsl:text>
+ <!-- * make title wrapper so that we can use mode="bold" template to -->
+ <!-- * apply character formatting to it -->
+ <xsl:variable name="title.wrapper">
+ <bold><xsl:choose>
+ <xsl:when test="title">
+ <xsl:value-of select="normalize-space(title[1])"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="object.title.markup.textonly"/>
+ </xsl:otherwise>
+ </xsl:choose></bold>
+ </xsl:variable>
+ <xsl:call-template name="mark.subheading"/>
+ <xsl:apply-templates mode="bold" select="exsl:node-set($title.wrapper)"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:call-template name="mark.subheading"/>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <!-- * The mixed-block template jumps through a few hoops to deal with -->
+ <!-- * mixed-content blocks, so that we don't end up munging verbatim -->
+ <!-- * environments or lists and so that we don't gobble up whitespace -->
+ <!-- * when we shouldn't -->
+ <xsl:template name="mixed-block">
+ <xsl:for-each select="node()">
+ <xsl:choose>
+ <!-- * Check to see if this node is a verbatim environment. -->
+ <!-- * If so, put a line of space before it. -->
+ <!-- * -->
+ <!-- * Yes, address and synopsis are vertabim environments. -->
+ <!-- * -->
+ <!-- * The code here previously also treated informaltable as a -->
+ <!-- * verbatim, presumably to support some kludge; I removed it -->
+ <xsl:when test="self::address|self::literallayout|self::programlisting|
+ self::screen|self::synopsis">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.sp&#10;</xsl:text>
+ <xsl:call-template name="mark.up.block.start"/>
+ <xsl:apply-templates select="."/>
+ </xsl:when>
+ <!-- * Check to see if this node is a list; if it is, we don't -->
+ <!-- * want to normalize-space(), so we just apply-templates. -->
+ <!-- * Do same for all admonitions -->
+ <xsl:when test="(self::itemizedlist|self::orderedlist|
+ self::variablelist|self::glosslist|
+ self::simplelist[@type !='inline']|
+ self::segmentedlist|
+ self::caution|self::important|
+ self::note|self::tip|self::warning|
+ self::table|self::informaltable)">
+ <xsl:call-template name="mark.up.block.start"/>
+ <xsl:apply-templates select="."/>
+ </xsl:when>
+ <xsl:when test="self::text()">
+ <!-- * Check to see if this is a text node. -->
+ <!-- * -->
+ <!-- * If so, replace all whitespace at the beginning or end of it -->
+ <!-- * with a single linebreak. -->
+ <!-- * -->
+ <xsl:variable name="content">
+ <xsl:apply-templates select="."/>
+ </xsl:variable>
+ <xsl:if
+ test="starts-with(translate(.,'&#9;&#10;&#13; ',' '), ' ')
+ and preceding-sibling::node()[1][name(.)!='']
+ and normalize-space($content) != ''
+ and not(
+ preceding-sibling::*[1][
+ self::caution or
+ self::important or
+ self::note or
+ self::tip or
+ self::warning or
+ self::variablelist or
+ self::glosslist or
+ self::itemizedlist or
+ self::orderedlist or
+ self::segmentedlist or
+ self::procedure or
+ self::address or
+ self::literallayout or
+ self::programlisting or
+ self::screen or
+ self::table or
+ self::informaltable
+ ]
+ )
+ ">
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="normalize-space($content)"/>
+ <xsl:if
+ test="(translate(substring(., string-length(.), 1),'&#9;&#10;&#13; ',' ') = ' '
+ and following-sibling::node()[1][name(.)!=''])
+ or following-sibling::node()[1][self::comment()]
+ or following-sibling::node()[1][self::processing-instruction()]
+ ">
+ <xsl:if test="normalize-space($content) != ''
+ or concat(normalize-space($content), ' ') = ' '">
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * At this point, we know that this node is not a verbatim -->
+ <!-- * environment, list, admonition, or text node; so we can -->
+ <!-- * safely normalize-space() it. -->
+ <xsl:variable name="content">
+ <xsl:apply-templates select="."/>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($content)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:call-template name="mark.up.block.end"/>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <!-- * Footnote and annotation contents are displayed using a hanging -->
+ <!-- * indent out to $man.indent.width If a paragraph-level block -->
+ <!-- * element (verbatim, list, or admonition) is the first block -->
+ <!-- * element nested at its same level within the same footnote or -->
+ <!-- * annotation, then we push it over by the same indent width. -->
+ <!-- * -->
+ <!-- * We don't reset the indent for each following sibling, but -->
+ <!-- * instead do it after for-eaching over all block siblings at -->
+ <!-- * the same level. So the effect is that if there are any -->
+ <!-- * following-sibling blocks after the block that starts this -->
+ <!-- * indent, then they just retain the indent that was already set -->
+
+ <xsl:template name="mark.up.block.start">
+ <xsl:choose>
+ <xsl:when test="(ancestor::footnote
+ or ancestor::annotation)">
+ <xsl:if test="not(preceding-sibling::address|
+ preceding-sibling::literallayout|
+ preceding-sibling::programlisting|
+ preceding-sibling::screen|
+ preceding-sibling::synopsis|
+ preceding-sibling::itemizedlist|
+ preceding-sibling::orderedlist|
+ preceding-sibling::variablelist|
+ preceding-sibling::glosslist|
+ preceding-sibling::simplelist[@type !='inline']|
+ preceding-sibling::segmentedlist|
+ preceding-sibling::caution|
+ preceding-sibling::important|
+ preceding-sibling::note|
+ preceding-sibling::tip|
+ preceding-sibling::warning|
+ preceding-sibling::table|
+ preceding-sibling::informaltable
+ )">
+ <xsl:text>.RS</xsl:text>
+ <xsl:if test="not($list-indent = '')">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$list-indent"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- * Check to see if we were called from a block within a footnote or -->
+ <!-- * annotation; if so, and the block contains any nested block -->
+ <!-- * content, then we know the mark.up.block.end template was already -->
+ <!-- * called to generate a .RS macro to indent that nested block -->
+ <!-- * content; so we need to generate a .RE to set the margin back to -->
+ <!-- * where it was prior to the .RS call. -->
+ <xsl:template name="mark.up.block.end">
+ <xsl:if test="(ancestor::footnote
+ or ancestor::annotation)">
+ <xsl:if test="address|
+ literallayout|
+ programlisting|
+ screen|
+ synopsis|
+ itemizedlist|
+ orderedlist|
+ variablelist|
+ glosslist|
+ simplelist[@type !='inline']|
+ segmentedlist|
+ caution|
+ important|
+ note|
+ tip|
+ warning|
+ table|
+ informaltable">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>.RE</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <!-- * The person.name template in the HTML stylesheets outputs extra -->
+ <!-- * spaces that we need to strip out for manpages output. This -->
+ <!-- * template calls person.name, then tries to do some smart -->
+ <!-- * normalization of the result tree fragment from that. -->
+ <xsl:template name="person.name.normalized">
+ <xsl:variable name="contents">
+ <xsl:call-template name="person.name"/>
+ </xsl:variable>
+ <!-- * We put the output of person.name into a node-set and then we -->
+ <!-- * check it node-by-node and strip out space only where needed. -->
+ <xsl:variable name="contents.tree" select="exsl:node-set($contents)"/>
+ <xsl:for-each select="$contents.tree/node()">
+ <xsl:choose>
+ <!-- * We don't want to monkey with single spaces or commas/periods -->
+ <!-- * followed by spaces, because those are bits of text that are -->
+ <!-- * actually generated by the person.name template itself (that -->
+ <!-- * is, they're not in the source). So, we preserve them. -->
+ <xsl:when test=". = ' ' or . = ', ' or . = '. '">
+ <xsl:value-of select="."/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="normalize-space(.)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <xsl:template name="make.adjusted.man.filename">
+ <xsl:param name="name"/>
+ <xsl:param name="lang"/>
+ <xsl:param name="name.with.lang">
+ <xsl:choose>
+ <xsl:when test="$lang != 'en'
+ and not($man.output.lang.in.name.enabled = 0)
+ and ($man.output.subdirs.enabled = 0 or
+ $man.output.in.separate.dir = 0)">
+ <!-- * $lang is not en (English) -->
+ <!-- * AND user has specified man.output.lang.in.name.enabled -->
+ <!-- * AND doesn't want output going into separate dirs, -->
+ <!-- * SO... we include the $lang value in the filename; e.g., -->
+ <!-- * foo.ja.1 -->
+ <xsl:value-of select="concat($name, '.', $lang)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- * user either has man.output.lang.in.name.enabled unset -->
+ <!-- * or has set it but also has man.output.subdirs.enabled -->
+ <!-- * set (in which case the $lang value is used to add a -->
+ <!-- * $lang subdir in the pathname); in either case, we don't -->
+ <!-- * want to include the $lang in the filename -->
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:param>
+ <xsl:param name="section"/>
+ <xsl:param name="dirname">
+ <xsl:if test="not($man.output.in.separate.dir = 0)">
+ <xsl:choose>
+ <xsl:when test="not($man.output.subdirs.enabled = 0)">
+ <xsl:variable name="lang.subdir">
+ <xsl:if test="not($man.output.lang.in.name.enabled = 0)">
+ <!-- * user has man.output.lang.in.name.enabled set, so -->
+ <!-- * we need to add a $lang subdir -->
+ <xsl:value-of select="concat($lang, '/')"/>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:value-of
+ select="concat($man.output.base.dir, $lang.subdir,
+ 'man', normalize-space($section), '/')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$man.output.base.dir"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:param>
+ <xsl:call-template name="string.subst">
+ <!-- * To create the man filename, replace any spaces in filename with -->
+ <!-- * underscores and then append a dot plus a section number. -->
+ <xsl:with-param name="string"
+ select="concat($dirname,
+ normalize-space($name.with.lang),
+ '.', normalize-space($section))"/>
+ <xsl:with-param name="target" select="' '"/>
+ <xsl:with-param name="replacement" select="'_'"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- ================================================================== -->
+
+ <!-- * Put a horizontal rule or other divider around section titles -->
+ <!-- * in roff source (just to make things easier to read). -->
+ <xsl:template name="mark.subheading">
+ <xsl:if test="$man.subheading.divider.enabled != 0">
+ <xsl:text>.\" </xsl:text>
+ <xsl:value-of select="$man.subheading.divider"/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>