summaryrefslogtreecommitdiff
path: root/docs/xsl-generic/manpages
diff options
context:
space:
mode:
authorChris Wilson <chris+github@qwirx.com>2009-04-26 20:01:15 +0000
committerChris Wilson <chris+github@qwirx.com>2009-04-26 20:01:15 +0000
commit1afab29eadf8e0d8b724b2894b3c644ea102fb51 (patch)
tree576fa12d5d4e9de77418ea2feb54bbe3f2c06ca0 /docs/xsl-generic/manpages
parent07bf983525ce56d754a9360dfadfa19aa7aac12c (diff)
Add a local copy of the XSL stylesheets needed to build Box Backup docs,
as remote copies are slow and prone to failure and weird behaviour with different versions of xsltproc (e.g. on Cygwin).
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>