diff options
Diffstat (limited to 'docs/xsl-generic/manpages')
-rw-r--r-- | docs/xsl-generic/manpages/block.xsl | 296 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/charmap.groff.xsl | 5985 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/docbook.xsl | 293 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/endnotes.xsl | 535 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/html-synop.xsl | 1605 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/info.xsl | 630 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/inline.xsl | 190 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/lists.xsl | 368 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/other.xsl | 674 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/param.xsl | 167 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/profile-docbook.xsl | 259 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/refentry.xsl | 256 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/synop.xsl | 305 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/table.xsl | 633 | ||||
-rw-r--r-- | docs/xsl-generic/manpages/utility.xsl | 452 |
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> </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 </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> </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> </xsl:text> + <xsl:text>.RS 4n</xsl:text> + <xsl:text> </xsl:text> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <xsl:text>.PP</xsl:text> + <xsl:text> </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> </xsl:text> + <xsl:text>.RE</xsl:text> + <xsl:text> </xsl:text> + </xsl:if> + </xsl:if> + <xsl:text> </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> </xsl:text> + <xsl:if test="not(ancestor::authorblurb) and + not(ancestor::personblurb)"> + <xsl:text>.sp </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> </xsl:text> + <xsl:text>.sp </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> </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> </xsl:text> + <xsl:text>.nf </xsl:text> + <xsl:apply-templates/> + <xsl:text> </xsl:text> + <xsl:text>.fi </xsl:text> + <xsl:text>.ft </xsl:text> + </xsl:when> + <xsl:otherwise> + <!-- * Other verbatims do not need to get bolded --> + <xsl:text>.nf </xsl:text> + <xsl:apply-templates/> + <xsl:text> </xsl:text> + <xsl:text>.fi </xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="$indent = 'Yes'"> + <!-- * end indented section --> + <xsl:text>.RE </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 </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 </xsl:text> + <xsl:call-template name="formal.object"> + <xsl:with-param name="placement" select="$placement"/> + </xsl:call-template> + <xsl:text> </xsl:text> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template match="mediaobject"> + <xsl:text>.sp</xsl:text> + <xsl:text> </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> </xsl:text> + <xsl:apply-templates/> + <xsl:text> </xsl:text> + <xsl:text>.RE </xsl:text> +</xsl:template> + +<xsl:template match="imageobject"> + <xsl:text>[IMAGE]</xsl:text> + <xsl:apply-templates/> + <xsl:text> </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> </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=" " + 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="¡" + 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="¢" + 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="£" + 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="¤" + 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="¥" + 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="¦" + 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="§" + 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="¨" + 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="©" + 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="ª" + 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="«" + 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="¬" + 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="­" + 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="®" + 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="¯" + 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="°" + 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="±" + 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="²" + 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="³" + 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="´" + 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="µ" + 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="¶" + 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="·" + 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="¸" + 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="¹" + 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="º" + 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="»" + 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="¼" + 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="½" + 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="¾" + 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="¿" + 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="À" + 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="Á" + 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="Â" + 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="Ã" + 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="Ä" + 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="Å" + 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="Æ" + 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="Ç" + 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="È" + 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="É" + 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="Ê" + 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="Ë" + 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="Ì" + 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="Í" + 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="Î" + 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="Ï" + 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="Ð" + 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="Ñ" + 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="Ò" + 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="Ó" + 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="Ô" + 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="Õ" + 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="Ö" + 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="×" + 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="Ø" + 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="Ù" + 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="Ú" + 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="Û" + 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="Ü" + 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="Ý" + 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="Þ" + 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="ß" + 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="à" + 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="á" + 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="â" + 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="ã" + 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="ä" + 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="å" + 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="æ" + 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="ç" + 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="è" + 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="é" + 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="ê" + 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="ë" + 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="ì" + 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="í" + 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="î" + 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="ï" + 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="ð" + 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="ñ" + 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="ò" + 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="ó" + 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="ô" + 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="õ" + 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="ö" + 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="÷" + 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="ø" + 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="ù" + 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="ú" + 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="û" + 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="ü" + 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="ý" + 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="þ" + 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="ÿ" + 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="ı" + u:name="LATIN SMALL LETTER DOTLESS I" + u:entity="inodot" + string="\(.i" + u:block="Latin Extended-A" + /> + <xsl:output-character + character="IJ" + u:name="LATIN CAPITAL LIGATURE IJ" + u:entity="IJlig" + string="\(IJ" + u:block="Latin Extended-A" + /> + <xsl:output-character + character="ij" + u:name="LATIN SMALL LIGATURE IJ" + u:entity="ijlig" + string="\(ij" + u:block="Latin Extended-A" + /> + <xsl:output-character + character="Ł" + u:name="LATIN CAPITAL LETTER L WITH STROKE" + u:entity="Lstrok" + string="\(/L" + u:block="Latin Extended-A" + /> + <xsl:output-character + character="ł" + u:name="LATIN SMALL LETTER L WITH STROKE" + u:entity="lstrok" + string="\(/l" + u:block="Latin Extended-A" + /> + <xsl:output-character + character="Œ" + u:name="LATIN CAPITAL LIGATURE OE" + u:entity="OElig" + string="\(OE" + u:block="Latin Extended-A" + /> + <xsl:output-character + character="œ" + u:name="LATIN SMALL LIGATURE OE" + u:entity="oelig" + string="\(oe" + u:block="Latin Extended-A" + /> + <xsl:output-character + character="ƒ" + u:name="LATIN SMALL LETTER F WITH HOOK" + u:entity="fnof" + string="\(Fn" + u:block="Latin Extended-B" + /> + <xsl:output-character + character="ˆ" + u:name="MODIFIER LETTER CIRCUMFLEX ACCENT" + u:entity="circ" + string="\(a^" + u:block="Spacing Modifier Letters" + /> + <xsl:output-character + character="ˇ" + u:name="CARON" + u:entity="caron" + string="\(ac" + u:block="Spacing Modifier Letters" + /> + <xsl:output-character + character="ˉ" + u:name="MODIFIER LETTER MACRON" + string="\(a-" + u:block="Spacing Modifier Letters" + /> + <xsl:output-character + character="˘" + 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="˙" --> +<!-- * u:name="DOT ABOVE" --> +<!-- * u:entity="dot" --> +<!-- * /> --> + <xsl:output-character + character="˚" + u:name="RING ABOVE" + u:entity="ring" + string="\(ao" + u:block="Spacing Modifier Letters" + /> + <xsl:output-character + character="˛" + 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="˝" + 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="Α" + u:name="GREEK CAPITAL LETTER ALPHA" + u:entity="Agr" + string="\(*A)" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Β" + u:name="GREEK CAPITAL LETTER BETA" + u:entity="Bgr" + string="\(*B" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Γ" + u:name="GREEK CAPITAL LETTER GAMMA" + u:entity="Gamma" + string="\(*G" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Δ" + u:name="GREEK CAPITAL LETTER DELTA" + u:entity="Delta" + string="\(*D" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ε" + u:name="GREEK CAPITAL LETTER EPSILON" + u:entity="Egr" + string="\(*E" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ζ" + u:name="GREEK CAPITAL LETTER ZETA" + u:entity="Zgr" + string="\(*Z" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Η" + u:name="GREEK CAPITAL LETTER ETA" + u:entity="EEgr" + string="\(*Y" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Θ" + u:name="GREEK CAPITAL LETTER THETA" + u:entity="THgr" + string="\(*H" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ι" + u:name="GREEK CAPITAL LETTER IOTA" + u:entity="Igr" + string="\(*I" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Κ" + u:name="GREEK CAPITAL LETTER KAPPA" + u:entity="Kgr" + string="\(*K" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Λ" + u:name="GREEK CAPITAL LETTER LAMDA" + u:entity="Lambda" + string="\(*L" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Μ" + u:name="GREEK CAPITAL LETTER MU" + u:entity="Mgr" + string="\(*M" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ν" + u:name="GREEK CAPITAL LETTER NU" + u:entity="Ngr" + string="\(*N" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ξ" + u:name="GREEK CAPITAL LETTER XI" + u:entity="Xgr" + string="\(*C" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ο" + u:name="GREEK CAPITAL LETTER OMICRON" + u:entity="Ogr" + string="\(*O" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Π" + u:name="GREEK CAPITAL LETTER PI" + u:entity="Pgr" + string="\(*P" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ρ" + u:name="GREEK CAPITAL LETTER RHO" + u:entity="Rgr" + string="\(*R" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Σ" + u:name="GREEK CAPITAL LETTER SIGMA" + u:entity="Sgr" + string="\(*S" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Τ" + u:name="GREEK CAPITAL LETTER TAU" + u:entity="Tgr" + string="\(*T" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Υ" + u:name="GREEK CAPITAL LETTER UPSILON" + u:entity="Ugr" + string="\(*U" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Φ" + u:name="GREEK CAPITAL LETTER PHI" + u:entity="PHgr" + string="\(*F" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Χ" + u:name="GREEK CAPITAL LETTER CHI" + u:entity="KHgr" + string="\(*X" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ψ" + u:name="GREEK CAPITAL LETTER PSI" + u:entity="PSgr" + string="\(*Q" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ω" + u:name="GREEK CAPITAL LETTER OMEGA" + u:entity="OHgr" + string="\(*W" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ϊ" + u:name="GREEK CAPITAL LETTER IOTA WITH DIALYTIKA" + u:entity="Idigr" + string="\(*I" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="Ϋ" + u:name="GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA" + u:entity="Udigr" + string="\(*U" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ά" + u:name="GREEK SMALL LETTER ALPHA WITH TONOS" + u:entity="aacgr" + string="\(*a" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="έ" + u:name="GREEK SMALL LETTER EPSILON WITH TONOS" + u:entity="eacgr" + string="\(*e" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ή" + u:name="GREEK SMALL LETTER ETA WITH TONOS" + u:entity="eeacgr" + string="\(*y" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ί" + u:name="GREEK SMALL LETTER IOTA WITH TONOS" + u:entity="iacgr" + string="\(*i" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ΰ" + u:name="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS" + u:entity="udiagr" + string="\(*u" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="α" + u:name="GREEK SMALL LETTER ALPHA" + u:entity="agr" + string="\(*a" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="β" + u:name="GREEK SMALL LETTER BETA" + u:entity="beta" + string="\(*b" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="γ" + u:name="GREEK SMALL LETTER GAMMA" + u:entity="gamma" + string="\(*g" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="δ" + u:name="GREEK SMALL LETTER DELTA" + u:entity="delta" + string="\(*d" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ε" + u:name="GREEK SMALL LETTER EPSILON" + u:entity="epsi" + string="\(*e" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ζ" + u:name="GREEK SMALL LETTER ZETA" + u:entity="zeta" + string="\(*z" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="η" + u:name="GREEK SMALL LETTER ETA" + u:entity="eegr" + string="\(*y" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="θ" + u:name="GREEK SMALL LETTER THETA" + u:entity="thetas" + string="\(*h" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ι" + u:name="GREEK SMALL LETTER IOTA" + u:entity="igr" + string="\(*i" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="κ" + u:name="GREEK SMALL LETTER KAPPA" + u:entity="kappa" + string="\(*k" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="λ" + u:name="GREEK SMALL LETTER LAMDA" + u:entity="lambda" + string="\(*l" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="μ" + u:name="GREEK SMALL LETTER MU" + u:entity="mgr" + string="\(*m" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ν" + u:name="GREEK SMALL LETTER NU" + u:entity="ngr" + string="\(*n" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ξ" + u:name="GREEK SMALL LETTER XI" + u:entity="xgr" + string="\(*c" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ο" + u:name="GREEK SMALL LETTER OMICRON" + u:entity="ogr" + string="\(*o" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="π" + u:name="GREEK SMALL LETTER PI" + u:entity="pgr" + string="\(*p" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ρ" + u:name="GREEK SMALL LETTER RHO" + u:entity="rgr" + string="\(*r" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ς" + u:name="GREEK SMALL LETTER FINAL SIGMA" + u:entity="sfgr" + string="\(ts" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="σ" + u:name="GREEK SMALL LETTER SIGMA" + u:entity="sgr" + string="\(*s" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="τ" + u:name="GREEK SMALL LETTER TAU" + u:entity="tau" + string="\(*t" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="υ" + u:name="GREEK SMALL LETTER UPSILON" + u:entity="ugr" + string="\(*u" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="φ" + u:name="GREEK SMALL LETTER PHI" + u:entity="phgr" + string="\(*f" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="χ" + u:name="GREEK SMALL LETTER CHI" + u:entity="chi" + string="\(*x" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ψ" + u:name="GREEK SMALL LETTER PSI" + u:entity="psgr" + string="\(*q" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ω" + u:name="GREEK SMALL LETTER OMEGA" + u:entity="ohgr" + string="\(*w" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϊ" + u:name="GREEK SMALL LETTER IOTA WITH DIALYTIKA" + u:entity="idigr" + string="\(*i" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϋ" + u:name="GREEK SMALL LETTER UPSILON WITH DIALYTIKA" + u:entity="udigr" + string="\(*u" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ό" + u:name="GREEK SMALL LETTER OMICRON WITH TONOS" + u:entity="oacgr" + string="\(*o" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ύ" + u:name="GREEK SMALL LETTER UPSILON WITH TONOS" + u:entity="uacgr" + string="\(*u" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ώ" + u:name="GREEK SMALL LETTER OMEGA WITH TONOS" + u:entity="ohacgr" + string="\(*w" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϐ" + u:name="GREEK BETA SYMBOL" + string="\(*B" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϑ" + u:name="GREEK THETA SYMBOL" + u:entity="thetav" + string="\(+h" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϒ" + u:name="GREEK UPSILON WITH HOOK SYMBOL" + u:entity="Upsi" + string="\(*U" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϓ" + u:name="GREEK UPSILON WITH ACUTE AND HOOK SYMBOL" + string="\(*U" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϔ" + u:name="GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL" + string="\(*U" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϕ" + u:name="GREEK PHI SYMBOL" + u:entity="phis" + string="\(+f" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϖ" + 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="ϰ" + u:name="GREEK KAPPA SYMBOL" + u:entity="kappav" + string="(*k" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϱ" + u:name="GREEK RHO SYMBOL" + u:entity="rhov" + string="\(*r" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϲ" + u:name="GREEK LUNATE SIGMA SYMBOL" + string="\(*s" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϴ" + u:name="GREEK CAPITAL THETA SYMBOL" + string="\(*H" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="ϵ" + u:name="GREEK LUNATE EPSILON SYMBOL" + string="\(*e" + u:block="Greek and Coptic" + /> + <xsl:output-character + character="϶" + 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=" " + u:name="EN QUAD" + string="\0" + u:block="General Punctuation" + u:class="spaces" + /> + <xsl:output-character + character=" " + u:name="EM QUAD" + string="\0\0" + u:block="General Punctuation" + u:class="spaces" + /> + <xsl:output-character + character=" " + u:name="EN SPACE" + u:entity="ensp" + string="\0" + u:block="General Punctuation" + u:class="spaces" + /> + <xsl:output-character + character=" " + 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=" " + 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=" " + 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=" " + u:name="SIX-PER-EM SPACE" + string=" " + u:block="General Punctuation" + u:class="spaces" + /> + <!-- * same as roff "digit" space --> + <xsl:output-character + character=" " + 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=" " + 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=" " + 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=" " + u:name="HAIR SPACE" + u:entity="hairsp" + string="\&" + u:block="General Punctuation" + u:class="spaces" + /> + <!-- * map to roff "zero-width break point" --> + <xsl:output-character + character="​" + 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="‌" --> + <!-- * u:name="ZERO WIDTH NON-JOINER" --> + <!-- * string="\:" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="‍" --> + <!-- * u:name="ZERO WIDTH JOINER" --> + <!-- * string="\&" --> + <!-- * /> --> + <!-- * non-visible --> + <!-- * <xsl:output-character --> + <!-- * character="‎" --> + <!-- * u:name="LEFT-TO-RIGHT MARK" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="‏" --> + <!-- * u:name="RIGHT-TO-LEFT MARK" --> + <!-- * /> --> + + <!-- * .................................................... --> + <!-- * next, hyphens and various dashes, bars, underscores --> + <xsl:output-character + character="‐" + 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="‑" + u:name="NON-BREAKING HYPHEN" + string="\-" + u:block="General Punctuation" + u:class="dashes" + /> + <!-- * roughly same width as en dash --> + <xsl:output-character + character="‒" + u:name="FIGURE DASH" + string="\(en" + u:block="General Punctuation" + u:class="dashes" + /> + <xsl:output-character + character="–" + u:name="EN DASH" + u:entity="ndash" + string="\(en" + u:block="General Punctuation" + u:class="dashes" + /> + <xsl:output-character + character="—" + 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="―" + u:name="HORIZONTAL BAR" + u:entity="horbar" + string="\(em" + u:block="General Punctuation" + u:class="dashes" + /> + <xsl:output-character + character="‖" + 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="‗" + u:name="DOUBLE LOW LINE" + string="_" + u:block="General Punctuation" + /> + + <!-- * .................................................... --> + <!-- * various quotation marks --> + <xsl:output-character + character="‘" + u:name="LEFT SINGLE QUOTATION MARK" + u:entity="lsquo" + string="\(oq" + u:block="General Punctuation" + u:class="quotes" + /> + <xsl:output-character + character="’" + u:name="RIGHT SINGLE QUOTATION MARK" + u:entity="rsquo" + string="\(cq" + u:block="General Punctuation" + u:class="quotes" + /> + <xsl:output-character + character="‚" + 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="‛" + u:name="SINGLE HIGH-REVERSED-9 QUOTATION MARK" + string="\(oq" + u:block="General Punctuation" + u:class="quotes" + /> + <xsl:output-character + character="“" + u:name="LEFT DOUBLE QUOTATION MARK" + u:entity="ldquo" + string="\(lq" + u:block="General Punctuation" + u:class="quotes" + /> + <xsl:output-character + character="”" + u:name="RIGHT DOUBLE QUOTATION MARK" + u:entity="rdquo" + string="\(rq" + u:block="General Punctuation" + u:class="quotes" + /> + <xsl:output-character + character="„" + 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="‟" + u:name="DOUBLE HIGH-REVERSED-9 QUOTATION MARK" + string="\(rq" + u:block="General Punctuation" + u:class="quotes" + /> + + <!-- * .................................................... --> + <!-- * various symbols --> + <xsl:output-character + character="†" + u:name="DAGGER" + u:entity="dagger" + string="\(dg" + u:block="General Punctuation_daggers" + /> + <xsl:output-character + character="‡" + u:name="DOUBLE DAGGER" + u:entity="Dagger" + string="\(dd" + u:block="General Punctuation_daggers" + /> + <xsl:output-character + character="•" + u:name="BULLET" + u:entity="bull" + string="\(bu" + u:block="General Punctuation" + u:class="bullets" + /> + <!-- * no roff equiv --> + <xsl:output-character + character="‣" + u:name="TRIANGULAR BULLET" + string=">\&" + u:block="General Punctuation" + u:class="bullets" + /> + <!-- * no roff equiv --> + <xsl:output-character + character="․" + u:name="ONE DOT LEADER" + string="\&." + u:block="General Punctuation_leaders" + /> + <!-- * no roff equiv --> + <xsl:output-character + character="‥" + u:name="TWO DOT LEADER" + u:entity="nldr" + string="\&.." + u:block="General Punctuation_leaders" + /> + <!-- * no roff equiv --> + <xsl:output-character + character="…" + u:name="HORIZONTAL ELLIPSIS" + u:entity="hellip" + string="\&..." + u:block="General Punctuation" + /> + <!-- what is "hyphenation point" used for? looks like middot to me... --> + <xsl:output-character + character="‧" + 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="
" --> + <!-- * u:name="LINE SEPARATOR" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="
" --> + <!-- * u:name="PARAGRAPH SEPARATOR" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="‪" --> + <!-- * u:name="LEFT-TO-RIGHT EMBEDDING" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="‫" --> + <!-- * u:name="RIGHT-TO-LEFT EMBEDDING" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="‬" --> + <!-- * u:name="POP DIRECTIONAL FORMATTING" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="‭" --> + <!-- * u:name="LEFT-TO-RIGHT OVERRIDE" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="‮" --> + <!-- * 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=" " + u:name="NARROW NO-BREAK SPACE" + string="\ " + u:block="General Punctuation" + u:class="spaces" + /> + <xsl:output-character + character="‰" + 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="‱" --> + <!-- * u:name="PER TEN THOUSAND SIGN" --> + <!-- * /> --> + <xsl:output-character + character="′" + u:name="PRIME" + u:entity="prime" + string="\(fm" + u:block="General Punctuation" + u:class="primes" + /> + <xsl:output-character + character="″" + u:name="DOUBLE PRIME" + u:entity="Prime" + string="\(sd" + u:block="General Punctuation" + u:class="primes" + /> + <xsl:output-character + character="‴" + 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="‵" --> + <!-- * u:name="REVERSED PRIME" --> + <!-- * u:entity="bprime" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="‶" --> + <!-- * u:name="REVERSED DOUBLE PRIME" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="‷" --> + <!-- * u:name="REVERSED TRIPLE PRIME" --> + <!-- * /> --> + + <!-- * there is no low caret in roff --> + <xsl:output-character + character="‸" + u:name="CARET" + string="^" + u:block="General Punctuation" + /> + <xsl:output-character + character="‹" + u:name="SINGLE LEFT-POINTING ANGLE QUOTATION MARK" + string="\(fo" + u:block="General Punctuation" + u:class="quotes" + /> + <xsl:output-character + character="›" + u:name="SINGLE RIGHT-POINTING ANGLE QUOTATION MARK" + string="\(fc" + u:block="General Punctuation" + u:class="quotes" + /> + <!-- * not in roff --> + <xsl:output-character + character="※" + u:name="REFERENCE MARK" + string="*" + u:block="General Punctuation" + /> + <xsl:output-character + character="‼" + u:name="DOUBLE EXCLAMATION MARK" + string="!!" + u:block="General Punctuation" + /> + <xsl:output-character + character="‽" + u:name="INTERROBANG" + string="?!" + u:block="General Punctuation" + /> + <xsl:output-character + character="‾" + u:name="OVERLINE" + string="\(rn" + u:block="General Punctuation" + /> + <xsl:output-character + character="‿" + u:name="UNDERTIE" + string="\(ul" + u:block="General Punctuation" + /> + <!-- * not in roff --> + <xsl:output-character + character="⁀" + u:name="CHARACTER TIE" + string="\(rn" + u:block="General Punctuation" + /> + <!-- * not in roff --> + <xsl:output-character + character="⁁" + u:name="CARET INSERTION POINT" + u:entity="caret" + string="^" + u:block="General Punctuation" + /> + <!-- * not in roff --> + <xsl:output-character + character="⁂" + u:name="ASTERISM" + string="*" + u:block="General Punctuation" + /> + <!-- * not in roff; just make bold hyphen --> + <xsl:output-character + character="⁃" + u:name="HYPHEN BULLET" + u:entity="hybull" + string="\fB-\fR" + u:block="General Punctuation" + u:class="bullets" + /> + <xsl:output-character + character="⁄" + u:name="FRACTION SLASH" + string="\(sl" + u:block="General Punctuation" + /> + <!-- * not in roff --> + <xsl:output-character + character="⁅" + u:name="LEFT SQUARE BRACKET WITH QUILL" + string="[" + u:block="General Punctuation" + /> + <!-- * not in roff --> + <xsl:output-character + character="⁆" + u:name="RIGHT SQUARE BRACKET WITH QUILL" + string="]" + u:block="General Punctuation" + /> + <xsl:output-character + character="⁇" + u:name="DOUBLE QUESTION MARK" + string="??" + u:block="General Punctuation" + /> + <xsl:output-character + character="⁈" + u:name="QUESTION EXCLAMATION MARK" + string="?!" + u:block="General Punctuation" + /> + <xsl:output-character + character="⁉" + u:name="EXCLAMATION QUESTION MARK" + string="!?" + u:block="General Punctuation" + /> + <!-- * not in roff --> + <xsl:output-character + character="⁊" + u:name="TIRONIAN SIGN ET" + string="7" + u:block="General Punctuation" + /> + <!-- * not in roff; just replace with un-reversed pilcrow --> + <xsl:output-character + character="⁋" + u:name="REVERSED PILCROW SIGN" + string="\(ps" + u:block="General Punctuation" + /> + <!-- * not in roff; just make regular bullet --> + <xsl:output-character + character="⁌" + u:name="BLACK LEFTWARDS BULLET" + string="\(bu" + u:block="General Punctuation" + /> + <!-- * not in roff; just make regular bullet --> + <xsl:output-character + character="⁍" + u:name="BLACK RIGHTWARDS BULLET" + string="\(bu" + u:block="General Punctuation" + /> + <xsl:output-character + character="⁎" + 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=" " + 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="⁠" + u:name="WORD JOINER" + string="\&" + 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="⁰" + u:name="SUPERSCRIPT ZERO" + string="^0" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="ⁱ" + u:name="SUPERSCRIPT LATIN SMALL LETTER I" + string="^i" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁴" + u:name="SUPERSCRIPT FOUR" + string="^4" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁵" + u:name="SUPERSCRIPT FIVE" + string="^5" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁶" + u:name="SUPERSCRIPT SIX" + string="^6" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁷" + u:name="SUPERSCRIPT SEVEN" + string="^7" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁸" + u:name="SUPERSCRIPT EIGHT" + string="^8" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁹" + u:name="SUPERSCRIPT NINE" + string="^9" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁺" + u:name="SUPERSCRIPT PLUS SIGN" + string="^+" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁻" + u:name="SUPERSCRIPT MINUS" + string="^-" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁼" + u:name="SUPERSCRIPT EQUALS SIGN" + string="^=" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁽" + u:name="SUPERSCRIPT LEFT PARENTHESIS" + string="^(" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="⁾" + u:name="SUPERSCRIPT RIGHT PARENTHESIS" + string="^)" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="ⁿ" + u:name="SUPERSCRIPT LATIN SMALL LETTER N" + string="^n" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₀" + u:name="SUBSCRIPT ZERO" + string="_0" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₁" + u:name="SUBSCRIPT ONE" + string="_1" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₂" + u:name="SUBSCRIPT TWO" + string="_2" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₃" + u:name="SUBSCRIPT THREE" + string="_3" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₄" + u:name="SUBSCRIPT FOUR" + string="_4" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₅" + u:name="SUBSCRIPT FIVE" + string="_5" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₆" + u:name="SUBSCRIPT SIX" + string="_6" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₇" + u:name="SUBSCRIPT SEVEN" + string="_7" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₈" + u:name="SUBSCRIPT EIGHT" + string="_8" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₉" + u:name="SUBSCRIPT NINE" + string="_9" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₊" + u:name="SUBSCRIPT PLUS SIGN" + string="_+" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₋" + u:name="SUBSCRIPT MINUS" + string="_-" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₌" + u:name="SUBSCRIPT EQUALS SIGN" + string="_=" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₍" + u:name="SUBSCRIPT LEFT PARENTHESIS" + string="_(" + u:block="Superscripts and Subscripts" + /> + <xsl:output-character + character="₎" + 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="₠" + u:name="EURO-CURRENCY SIGN" + string="EUR" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₡" + u:name="COLON SIGN" + string="COLON" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₢" + u:name="CRUZEIRO SIGN" + string="CRUZEIRO" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₣" + u:name="FRENCH FRANC SIGN" + string="FRANC" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₤" + u:name="LIRA SIGN" + string="LIRA" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₥" + u:name="MILL SIGN" + string="MILL" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₦" + u:name="NAIRA SIGN" + string="NAIRA" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₧" + u:name="PESETA SIGN" + string="PESETA" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₨" + u:name="RUPEE SIGN" + string="RUPEE" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₩" + u:name="WON SIGN" + string="WON" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₪" + u:name="NEW SHEQEL SIGN" + string="SHEQEL" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₫" + u:name="DONG SIGN" + string="DONG" + u:block="Currency Symbols" + /> + <xsl:output-character + character="€" + u:name="EURO SIGN" + string="EUR" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₭" + u:name="KIP SIGN" + string="KIP" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₮" + u:name="TUGRIK SIGN" + string="TUGRIK" + u:block="Currency Symbols" + /> + <xsl:output-character + character="₯" + u:name="DRACHMA SIGN" + string="DRACHMA" + u:block="Currency Symbols" + /> + <!-- <xsl:output-character --> + <!-- character="₰" --> + <!-- u:name="GERMAN PENNY SIGN" --> + <!-- string="?" --> + <!-- u:block="Currency Symbols" --> + <!-- /> --> + <xsl:output-character + character="₱" + 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="℃" + u:name="DEGREE CELSIUS" + string="\(deC" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="℅" + u:name="CARE OF" + u:entity="incare" + string="c/o" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="℉" + u:name="DEGREE FAHRENHEIT" + string="\(deF" + u:block="Letterlike Symbols" + /> + <!-- roff Ifraktur --> + <xsl:output-character + character="ℑ" + u:name="BLACK-LETTER CAPITAL I" + string="\(Im" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="ℓ" + u:name="SCRIPT SMALL L" + u:entity="ell" + string="l" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="№" + u:name="NUMERO SIGN" + u:entity="numero" + string="No." + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="℘" + u:name="SCRIPT CAPITAL P" + u:entity="weierp" + string="\(wp" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="ℜ" + u:name="BLACK-LETTER CAPITAL R" + u:entity="real" + string="\(Re" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="℞" + u:name="PRESCRIPTION TAKE" + u:entity="rx" + string="Rx" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="℠" + u:name="SERVICE MARK" + string="(SM)" + u:block="Letterlike Symbols" + /> + <!-- * We don't do "\(tm" for ™ 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™ -> Producttm --> + <!-- * --> + <!-- * That it probably not what most people would want. So we just --> + <!-- * render it as (TM) instead, Thus: --> + <!-- * --> + <!-- * Product™ -> Product(TM) --> + <xsl:output-character + character="™" + u:name="TRADE MARK SIGN" + u:entity="trade" + string="(TM)" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="Ω" + u:name="OHM SIGN" + u:entity="ohm" + string="\(*W" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="K" + u:name="KELVIN SIGN" + string="K" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="Å" + u:name="ANGSTROM SIGN" + u:entity="angst" + string="\(oA" + u:block="Letterlike Symbols" + /> + <xsl:output-character + character="ℵ" + 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="⅓" + u:name="VULGAR FRACTION ONE THIRD" + u:entity="frac13" + string="1/3" + u:block="Number Forms" + /> + <xsl:output-character + character="⅔" + u:name="VULGAR FRACTION TWO THIRDS" + u:entity="frac23" + string="2/3" + u:block="Number Forms" + /> + <xsl:output-character + character="⅕" + u:name="VULGAR FRACTION ONE FIFTH" + u:entity="frac15" + string="1/5" + u:block="Number Forms" + /> + <xsl:output-character + character="⅖" + u:name="VULGAR FRACTION TWO FIFTHS" + u:entity="frac25" + string="2/5" + u:block="Number Forms" + /> + <xsl:output-character + character="⅗" + u:name="VULGAR FRACTION THREE FIFTHS" + u:entity="frac35" + string="3/5" + u:block="Number Forms" + /> + <xsl:output-character + character="⅘" + u:name="VULGAR FRACTION FOUR FIFTHS" + u:entity="frac45" + string="4/5" + u:block="Number Forms" + /> + <xsl:output-character + character="⅙" + u:name="VULGAR FRACTION ONE SIXTH" + u:entity="frac16" + string="1/6" + u:block="Number Forms" + /> + <xsl:output-character + character="⅚" + u:name="VULGAR FRACTION FIVE SIXTHS" + u:entity="frac56" + string="5/6" + u:block="Number Forms" + /> + <xsl:output-character + character="⅛" + u:name="VULGAR FRACTION ONE EIGHTH" + u:entity="frac18" + string="1/8" + u:block="Number Forms" + /> + <xsl:output-character + character="⅜" + u:name="VULGAR FRACTION THREE EIGHTHS" + u:entity="frac38" + string="3/8" + u:block="Number Forms" + /> + <xsl:output-character + character="⅝" + u:name="VULGAR FRACTION FIVE EIGHTHS" + u:entity="frac58" + string="5/8" + u:block="Number Forms" + /> + <xsl:output-character + character="⅞" + u:name="VULGAR FRACTION SEVEN EIGHTHS" + u:entity="frac78" + string="7/8" + u:block="Number Forms" + /> + <xsl:output-character + character="⅟" + u:name="FRACTION NUMERATOR ONE" + string="1/" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅰ" + u:name="ROMAN NUMERAL ONE" + string="I" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅱ" + u:name="ROMAN NUMERAL TWO" + string="II" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅲ" + u:name="ROMAN NUMERAL THREE" + string="III" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅳ" + u:name="ROMAN NUMERAL FOUR" + string="IV" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅴ" + u:name="ROMAN NUMERAL FIVE" + string="V" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅵ" + u:name="ROMAN NUMERAL SIX" + string="VI" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅶ" + u:name="ROMAN NUMERAL SEVEN" + string="VII" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅷ" + u:name="ROMAN NUMERAL EIGHT" + string="VIII" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅸ" + u:name="ROMAN NUMERAL NINE" + string="IX" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅹ" + u:name="ROMAN NUMERAL TEN" + string="X" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅺ" + u:name="ROMAN NUMERAL ELEVEN" + string="XI" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅻ" + u:name="ROMAN NUMERAL TWELVE" + string="XII" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅼ" + u:name="ROMAN NUMERAL FIFTY" + string="L" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅽ" + u:name="ROMAN NUMERAL ONE HUNDRED" + string="C" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅾ" + u:name="ROMAN NUMERAL FIVE HUNDRED" + string="D" + u:block="Number Forms" + /> + <xsl:output-character + character="Ⅿ" + u:name="ROMAN NUMERAL ONE THOUSAND" + string="M" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅰ" + u:name="SMALL ROMAN NUMERAL ONE" + string="i" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅱ" + u:name="SMALL ROMAN NUMERAL TWO" + string="ii" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅲ" + u:name="SMALL ROMAN NUMERAL THREE" + string="iii" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅳ" + u:name="SMALL ROMAN NUMERAL FOUR" + string="iv" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅴ" + u:name="SMALL ROMAN NUMERAL FIVE" + string="v" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅵ" + u:name="SMALL ROMAN NUMERAL SIX" + string="vi" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅶ" + u:name="SMALL ROMAN NUMERAL SEVEN" + string="vii" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅷ" + u:name="SMALL ROMAN NUMERAL EIGHT" + string="viii" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅸ" + u:name="SMALL ROMAN NUMERAL NINE" + string="ix" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅹ" + u:name="SMALL ROMAN NUMERAL TEN" + string="x" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅺ" + u:name="SMALL ROMAN NUMERAL ELEVEN" + string="xi" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅻ" + u:name="SMALL ROMAN NUMERAL TWELVE" + string="xii" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅼ" + u:name="SMALL ROMAN NUMERAL FIFTY" + string="l" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅽ" + u:name="SMALL ROMAN NUMERAL ONE HUNDRED" + string="c" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅾ" + u:name="SMALL ROMAN NUMERAL FIVE HUNDRED" + string="d" + u:block="Number Forms" + /> + <xsl:output-character + character="ⅿ" + u:name="SMALL ROMAN NUMERAL ONE THOUSAND" + string="m" + u:block="Number Forms" + /> + <xsl:output-character + character="ↀ" + 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="←" + u:name="LEFTWARDS ARROW" + u:entity="larr" + string="\(<-" + u:block="Arrows" + /> + <xsl:output-character + character="↑" + u:name="UPWARDS ARROW" + u:entity="uarr" + string="\(ua" + u:block="Arrows" + /> + <xsl:output-character + character="→" + u:name="RIGHTWARDS ARROW" + u:entity="rarr" + string="\(->" + u:block="Arrows" + /> + <xsl:output-character + character="↓" + u:name="DOWNWARDS ARROW" + u:entity="darr" + string="\(da" + u:block="Arrows" + /> + <xsl:output-character + character="↔" + u:name="LEFT RIGHT ARROW" + u:entity="harr" + string="\(<>" + u:block="Arrows" + /> + <xsl:output-character + character="↕" + u:name="UP DOWN ARROW" + u:entity="varr" + string="\(va" + u:block="Arrows" + /> + <xsl:output-character + character="↵" + u:name="DOWNWARDS ARROW WITH CORNER LEFTWARDS" + u:entity="crarr" + string="\(CR" + u:block="Arrows" + /> + <xsl:output-character + character="⇐" + u:name="LEFTWARDS DOUBLE ARROW" + u:entity="lArr" + string="\(la" + u:block="Arrows" + /> + <xsl:output-character + character="⇑" + u:name="UPWARDS DOUBLE ARROW" + u:entity="uArr" + string="\(uA" + u:block="Arrows" + /> + <xsl:output-character + character="⇒" + u:name="RIGHTWARDS DOUBLE ARROW" + u:entity="rArr" + string="\(rA" + u:block="Arrows" + /> + <xsl:output-character + character="⇓" + u:name="DOWNWARDS DOUBLE ARROW" + u:entity="dArr" + string="\(dA" + u:block="Arrows" + /> + <xsl:output-character + character="⇔" + 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="⇕" + u:name="UP DOWN DOUBLE ARROW" + u:entity="vArr" + string="\(va" + u:block="Arrows" + /> + + <!-- * ***************************************************************** --> + <!-- * Begin: Mathematical Operators --> + <!-- * x2200 to x22ff --> + <!-- * ***************************************************************** --> + + <xsl:output-character + character="∀" + u:name="FOR ALL" + u:entity="forall" + string="\(fa" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∁" + u:name="COMPLEMENT" + u:entity="comp" + string="C" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∂" + u:name="PARTIAL DIFFERENTIAL" + u:entity="part" + string="\(pd" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∃" + u:name="THERE EXISTS" + u:entity="exist" + string="\(te" + u:block="Mathematical Operators" + /> + <!-- * no roff equiv --> + <!-- * <xsl:output-character --> + <!-- * character="∄" --> + <!-- * u:name="THERE DOES NOT EXIST" --> + <!-- * u:entity="nexist" --> + <!-- * /> --> + <xsl:output-character + character="∅" + u:name="EMPTY SET" + u:entity="empty" + string="\(es" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∆" + u:name="INCREMENT" + string="\(*D" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∇" + u:name="NABLA" + u:entity="nabla" + string="\(gr" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∈" + u:name="ELEMENT OF" + u:entity="isin" + string="\(mo" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∉" + u:name="NOT AN ELEMENT OF" + u:entity="notin" + string="\(nm" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∊" + u:name="SMALL ELEMENT OF" + string="\(mo" + u:block="Mathematical Operators" + /> + + <xsl:output-character + character="∋" + u:name="CONTAINS AS MEMBER" + u:entity="ni" + string="\(st" + u:block="Mathematical Operators" + /> + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="∌" --> + <!-- * u:name="DOES NOT CONTAIN AS MEMBER" --> + <!-- * /> --> + <xsl:output-character + character="∍" + u:name="SMALL CONTAINS AS MEMBER" + string="\(st" + u:block="Mathematical Operators" + /> + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="∎" --> + <!-- * u:name="END OF PROOF" --> + <!-- * /> --> + <xsl:output-character + character="∏" + u:name="N-ARY PRODUCT" + u:entity="prod" + string="\(product" + u:block="Mathematical Operators" + /> + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="∐" --> + <!-- * u:name="N-ARY COPRODUCT" --> + <!-- * u:entity="coprod" --> + <!-- * /> --> + <xsl:output-character + character="∑" + u:name="N-ARY SUMMATION" + u:entity="sum" + string="\(sum" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="−" + u:name="MINUS SIGN" + u:entity="minus" + string="\-" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∓" + u:name="MINUS-OR-PLUS SIGN" + u:entity="mnplus" + string="\(+-" + u:block="Mathematical Operators" + /> + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="∔" --> + <!-- * u:name="DOT PLUS" --> + <!-- * u:entity="plusdo" --> + <!-- * /> --> + <xsl:output-character + character="∕" + u:name="DIVISION SLASH" + string="\(f/" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∖" + u:name="SET MINUS" + u:entity="setmn" + string="\e" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∗" + u:name="ASTERISK OPERATOR" + u:entity="lowast" + string="\(**" + u:block="Mathematical Operators" + /> + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="∘" --> + <!-- * u:name="RING OPERATOR" --> + <!-- * u:entity="compfn" --> + <!-- * /> --> + <xsl:output-character + character="∙" + u:name="BULLET OPERATOR" + string="\(bu" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="√" + u:name="SQUARE ROOT" + u:entity="radic" + string="\(sr" + u:block="Mathematical Operators" + /> + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="∛" --> + <!-- * u:name="CUBE ROOT" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="∜" --> + <!-- * u:name="FOURTH ROOT" --> + <!-- * /> --> + <xsl:output-character + character="∝" + u:name="PROPORTIONAL TO" + u:entity="prop" + string="\(pt" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∞" + u:name="INFINITY" + u:entity="infin" + string="\(if" + u:block="Mathematical Operators" + /> + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="∟" --> + <!-- * u:name="RIGHT ANGLE" --> + <!-- * u:entity="ang90" --> + <!-- * /> --> + <xsl:output-character + character="∠" + 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="∥" + u:name="PARALLEL TO" + u:entity="par" + string="\(bv\(bv" + u:block="Mathematical Operators" + /> + + <xsl:output-character + character="∧" + u:name="LOGICAL AND" + u:entity="and" + string="\(AN" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∨" + u:name="LOGICAL OR" + u:entity="or" + string="\(OR" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∩" + u:name="INTERSECTION" + u:entity="cap" + string="\(ca" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∪" + u:name="UNION" + u:entity="cup" + string="\(cu" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∫" + u:name="INTEGRAL" + u:entity="int" + string="\(is" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∬" + u:name="DOUBLE INTEGRAL" + string="\(is\(is" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∭" + u:name="TRIPLE INTEGRAL" + string="\(is\(is\(is" + u:block="Mathematical Operators" + /> + + <!-- * 0x222e to 0x2233 not in roff --> + + <xsl:output-character + character="∴" + u:name="THEREFORE" + u:entity="there4" + string="\(tf" + u:block="Mathematical Operators" + /> + + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="∵" --> + <!-- * u:name="BECAUSE" --> + <!-- * u:entity="becaus" --> + <!-- * /> --> + <xsl:output-character + character="∶" + u:name="RATIO" + string=":" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="∷" + u:name="PROPORTION" + string="::" + u:block="Mathematical Operators" + /> + + <!-- * 0x2238 to 0x223b not in roff --> + + <xsl:output-character + character="∼" + u:name="TILDE OPERATOR" + u:entity="sim" + string="\(ti" + u:block="Mathematical Operators" + /> + + <!-- * 0x223d to 0x224b not in roff --> + + <xsl:output-character + character="≅" + u:name="APPROXIMATELY EQUAL TO" + u:entity="cong" + string="\(=~" + u:block="Mathematical Operators" + /> + + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="≆" --> + <!-- * u:name="APPROXIMATELY BUT NOT ACTUALLY EQUAL TO" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="≇" --> + <!-- * u:name="NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO" --> + <!-- * u:entity="ncong" --> + <!-- * /> --> + + <xsl:output-character + character="≈" + u:name="ALMOST EQUAL TO" + u:entity="asymp" + string="\(~~" + u:block="Mathematical Operators" + /> + + <!-- * x2249 to x2253 not in roff --> + + <xsl:output-character + character="≔" + u:name="COLON EQUALS" + u:entity="colone" + string=":=" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="≕" + u:name="EQUALS COLON" + u:entity="ecolon" + string="=:" + u:block="Mathematical Operators" + /> + + <!-- * x2256 to x2255 not in roff --> + + <xsl:output-character + character="≟" + u:name="QUESTIONED EQUAL TO" + string="?=" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="≠" + u:name="NOT EQUAL TO" + u:entity="ne" + string="\(!=" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="≡" + u:name="IDENTICAL TO" + u:entity="equiv" + string="\(==" + u:block="Mathematical Operators" + /> + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="≢" --> + <!-- * u:name="NOT IDENTICAL TO" --> + <!-- * u:entity="nequiv" --> + <!-- * /> --> + <!-- * <xsl:output-character --> + <!-- * character="≣" --> + <!-- * u:name="STRICTLY EQUIVALENT TO" --> + <!-- * /> --> + <xsl:output-character + character="≤" + u:name="LESS-THAN OR EQUAL TO" + u:entity="le" + string="\(<=" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="≥" + 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="≪" + u:name="MUCH LESS-THAN" + u:entity="Lt" + string="<<" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="≫" + u:name="MUCH GREATER-THAN" + u:entity="Gt" + string=">>" + u:block="Mathematical Operators" + /> + <!-- * x226c to x2281 not in roff --> + + <xsl:output-character + character="⊂" + u:name="SUBSET OF" + u:entity="sub" + string="\(sb" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⊃" + u:name="SUPERSET OF" + u:entity="sup" + string="\(sp" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⊄" + u:name="NOT A SUBSET OF" + u:entity="nsub" + string="\(nb" + u:block="Mathematical Operators" + /> + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="⊅" --> + <!-- * u:name="NOT A SUPERSET OF" --> + <!-- * u:entity="nsup" --> + <!-- * /> --> + <xsl:output-character + character="⊆" + u:name="SUBSET OF OR EQUAL TO" + u:entity="sube" + string="\(ib" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⊇" + 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="⊕" + u:name="CIRCLED PLUS" + u:entity="oplus" + string="\(c+" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⊖" + u:name="CIRCLED MINUS" + u:entity="ominus" + string="\(c*" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⊗" + u:name="CIRCLED TIMES" + u:entity="otimes" + string="\(c*" + u:block="Mathematical Operators" + /> + + <!-- * x2298 to x22a4 not in roff --> + + <xsl:output-character + character="⊥" + u:name="UP TACK" + u:entity="bottom" + string="\(pp" + u:block="Mathematical Operators" + /> + + <!-- * x22a6 to x22bf not in roff --> + + <xsl:output-character + character="⋀" + u:name="N-ARY LOGICAL AND" + string="\(AN" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⋁" + u:name="N-ARY LOGICAL OR" + string="\(OR" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⋂" + u:name="N-ARY INTERSECTION" + string="\(ca" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⋃" + u:name="N-ARY UNION" + string="\(cu" + u:block="Mathematical Operators" + /> + + <!-- * not in roff --> + <!-- * <xsl:output-character --> + <!-- * character="⋄" --> + <!-- * u:name="DIAMOND OPERATOR" --> + <!-- * u:entity="diam" --> + <!-- * /> --> + <xsl:output-character + character="⋅" + u:name="DOT OPERATOR" + u:entity="sdot" + string="\(md" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⋆" + u:name="STAR OPERATOR" + u:entity="sstarf" + string="\(**" + u:block="Mathematical Operators" + /> + <!-- * x22c7 to x22cd not in roff --> + + <xsl:output-character + character="⋎" + u:name="CURLY LOGICAL OR" + u:entity="cuvee" + string="\(OR" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⋏" + u:name="CURLY LOGICAL AND" + u:entity="cuwed" + string="\(AN" + u:block="Mathematical Operators" + /> + + <!-- * x22d0 to x22d7 not in roff --> + + <xsl:output-character + character="⋘" + u:name="VERY MUCH LESS-THAN" + u:entity="Ll" + string="<<<" + u:block="Mathematical Operators" + /> + <xsl:output-character + character="⋙" + u:name="VERY MUCH GREATER-THAN" + u:entity="Gg" + string=">>>" + u:block="Mathematical Operators" + /> + + <!-- * x22da to x22ee not in roff --> + + <xsl:output-character + character="⋯" + u:name="MIDLINE HORIZONTAL ELLIPSIS" + string="\&..." + 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="〈" + u:name="LEFT-POINTING ANGLE BRACKET" + u:entity="lang" + string="\(la" + u:block="Miscellaneous Technical" + /> + <xsl:output-character + character="〉" + 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="␀" + u:name="SYMBOL FOR NULL" + string="NUL" + u:block="Control Pictures" + /> + <xsl:output-character + character="␁" + u:name="SYMBOL FOR START OF HEADING" + string="SOH" + u:block="Control Pictures" + /> + <xsl:output-character + character="␂" + u:name="SYMBOL FOR START OF TEXT" + string="STX" + u:block="Control Pictures" + /> + <xsl:output-character + character="␃" + u:name="SYMBOL FOR END OF TEXT" + string="ETX" + u:block="Control Pictures" + /> + <xsl:output-character + character="␄" + u:name="SYMBOL FOR END OF TRANSMISSION" + string="EOT" + u:block="Control Pictures" + /> + <xsl:output-character + character="␅" + u:name="SYMBOL FOR ENQUIRY" + string="ENQ" + u:block="Control Pictures" + /> + <xsl:output-character + character="␆" + u:name="SYMBOL FOR ACKNOWLEDGE" + string="ACK" + u:block="Control Pictures" + /> + <xsl:output-character + character="␇" + u:name="SYMBOL FOR BELL" + string="BEL" + u:block="Control Pictures" + /> + <xsl:output-character + character="␈" + u:name="SYMBOL FOR BACKSPACE" + string="BS" + u:block="Control Pictures" + /> + <xsl:output-character + character="␉" + u:name="SYMBOL FOR HORIZONTAL TABULATION" + string="HT" + u:block="Control Pictures" + /> + <xsl:output-character + character="␊" + u:name="SYMBOL FOR LINE FEED" + string="LF" + u:block="Control Pictures" + /> + <xsl:output-character + character="␋" + u:name="SYMBOL FOR VERTICAL TABULATION" + string="VT" + u:block="Control Pictures" + /> + <xsl:output-character + character="␌" + u:name="SYMBOL FOR FORM FEED" + string="FF" + u:block="Control Pictures" + /> + <xsl:output-character + character="␍" + u:name="SYMBOL FOR CARRIAGE RETURN" + string="CR" + u:block="Control Pictures" + /> + <xsl:output-character + character="␎" + u:name="SYMBOL FOR SHIFT OUT" + string="SO" + u:block="Control Pictures" + /> + <xsl:output-character + character="␏" + u:name="SYMBOL FOR SHIFT IN" + string="SI" + u:block="Control Pictures" + /> + <xsl:output-character + character="␐" + u:name="SYMBOL FOR DATA LINK ESCAPE" + string="DLE" + u:block="Control Pictures" + /> + <xsl:output-character + character="␑" + u:name="SYMBOL FOR DEVICE CONTROL ONE" + string="DC1" + u:block="Control Pictures" + /> + <xsl:output-character + character="␒" + u:name="SYMBOL FOR DEVICE CONTROL TWO" + string="DC2" + u:block="Control Pictures" + /> + <xsl:output-character + character="␓" + u:name="SYMBOL FOR DEVICE CONTROL THREE" + string="DC3" + u:block="Control Pictures" + /> + <xsl:output-character + character="␔" + u:name="SYMBOL FOR DEVICE CONTROL FOUR" + string="DC4" + u:block="Control Pictures" + /> + <xsl:output-character + character="␕" + u:name="SYMBOL FOR NEGATIVE ACKNOWLEDGE" + string="NAK" + u:block="Control Pictures" + /> + <xsl:output-character + character="␖" + u:name="SYMBOL FOR SYNCHRONOUS IDLE" + string="SYN" + u:block="Control Pictures" + /> + <xsl:output-character + character="␗" + u:name="SYMBOL FOR END OF TRANSMISSION BLOCK" + string="ETB" + u:block="Control Pictures" + /> + <xsl:output-character + character="␘" + u:name="SYMBOL FOR CANCEL" + string="CAN" + u:block="Control Pictures" + /> + <xsl:output-character + character="␙" + u:name="SYMBOL FOR END OF MEDIUM" + string="EM" + u:block="Control Pictures" + /> + <xsl:output-character + character="␚" + u:name="SYMBOL FOR SUBSTITUTE" + string="SUB" + u:block="Control Pictures" + /> + <xsl:output-character + character="␛" + u:name="SYMBOL FOR ESCAPE" + string="ESC" + u:block="Control Pictures" + /> + <xsl:output-character + character="␜" + u:name="SYMBOL FOR FILE SEPARATOR" + string="FS" + u:block="Control Pictures" + /> + <xsl:output-character + character="␝" + u:name="SYMBOL FOR GROUP SEPARATOR" + string="GS" + u:block="Control Pictures" + /> + <xsl:output-character + character="␞" + u:name="SYMBOL FOR RECORD SEPARATOR" + string="RS" + u:block="Control Pictures" + /> + <xsl:output-character + character="␟" + u:name="SYMBOL FOR UNIT SEPARATOR" + string="US" + u:block="Control Pictures" + /> + <xsl:output-character + character="␠" + u:name="SYMBOL FOR SPACE" + string="SP" + u:block="Control Pictures" + /> + <xsl:output-character + character="␡" + u:name="SYMBOL FOR DELETE" + string="DEL" + u:block="Control Pictures" + /> + <!-- * no roff equivs for x2422 and x2423 --> + <!-- * <xsl:output-character --> + <!-- * character="␢" --> + <!-- * u:name="BLANK SYMBOL" --> + <!-- * string="?" --> + <!-- * u:block="Control Pictures" --> + <!-- * /> --> + <!-- * I think there should be a roff equiv for ␣, but as far as I --> + <!-- * know, there is not... --> + <!-- * <xsl:output-character --> + <!-- * character="␣" --> + <!-- * u:name="OPEN BOX" --> + <!-- * u:entity="blank" --> + <!-- * string="?" --> + <!-- * u:block="Control Pictures" --> + <!-- * /> --> + <xsl:output-character + character="␤" + 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="①" + u:name="CIRCLED DIGIT ONE" + string="1" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="②" + u:name="CIRCLED DIGIT TWO" + string="2" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="③" + u:name="CIRCLED DIGIT THREE" + string="3" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="④" + u:name="CIRCLED DIGIT FOUR" + string="4" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑤" + u:name="CIRCLED DIGIT FIVE" + string="5" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑥" + u:name="CIRCLED DIGIT SIX" + string="6" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑦" + u:name="CIRCLED DIGIT SEVEN" + string="7" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑧" + u:name="CIRCLED DIGIT EIGHT" + string="8" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑨" + u:name="CIRCLED DIGIT NINE" + string="9" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑩" + u:name="CIRCLED NUMBER TEN" + string="10" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑪" + u:name="CIRCLED NUMBER ELEVEN" + string="11" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑫" + u:name="CIRCLED NUMBER TWELVE" + string="12" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑬" + u:name="CIRCLED NUMBER THIRTEEN" + string="13" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑭" + u:name="CIRCLED NUMBER FOURTEEN" + string="14" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑮" + u:name="CIRCLED NUMBER FIFTEEN" + string="15" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑯" + u:name="CIRCLED NUMBER SIXTEEN" + string="16" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑰" + u:name="CIRCLED NUMBER SEVENTEEN" + string="17" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑱" + u:name="CIRCLED NUMBER EIGHTEEN" + string="18" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑲" + u:name="CIRCLED NUMBER NINETEEN" + string="19" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑳" + u:name="CIRCLED NUMBER TWENTY" + string="20" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑴" + u:name="PARENTHESIZED DIGIT ONE" + string="(1)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑵" + u:name="PARENTHESIZED DIGIT TWO" + string="(2)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑶" + u:name="PARENTHESIZED DIGIT THREE" + string="(3)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑷" + u:name="PARENTHESIZED DIGIT FOUR" + string="(4)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑸" + u:name="PARENTHESIZED DIGIT FIVE" + string="(5)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑹" + u:name="PARENTHESIZED DIGIT SIX" + string="(6)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑺" + u:name="PARENTHESIZED DIGIT SEVEN" + string="(7)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑻" + u:name="PARENTHESIZED DIGIT EIGHT" + string="(8)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑼" + u:name="PARENTHESIZED DIGIT NINE" + string="(9)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑽" + u:name="PARENTHESIZED NUMBER TEN" + string="(10)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑾" + u:name="PARENTHESIZED NUMBER ELEVEN" + string="(11)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⑿" + u:name="PARENTHESIZED NUMBER TWELVE" + string="(12)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒀" + u:name="PARENTHESIZED NUMBER THIRTEEN" + string="(13)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒁" + u:name="PARENTHESIZED NUMBER FOURTEEN" + string="(14)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒂" + u:name="PARENTHESIZED NUMBER FIFTEEN" + string="(15)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒃" + u:name="PARENTHESIZED NUMBER SIXTEEN" + string="(16)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒄" + u:name="PARENTHESIZED NUMBER SEVENTEEN" + string="(17)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒅" + u:name="PARENTHESIZED NUMBER EIGHTEEN" + string="(18)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒆" + u:name="PARENTHESIZED NUMBER NINETEEN" + string="(19)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒇" + u:name="PARENTHESIZED NUMBER TWENTY" + string="(20)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒈" + u:name="DIGIT ONE FULL STOP" + string="1." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒉" + u:name="DIGIT TWO FULL STOP" + string="2." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒊" + u:name="DIGIT THREE FULL STOP" + string="3." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒋" + u:name="DIGIT FOUR FULL STOP" + string="4." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒌" + u:name="DIGIT FIVE FULL STOP" + string="5." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒍" + u:name="DIGIT SIX FULL STOP" + string="6." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒎" + u:name="DIGIT SEVEN FULL STOP" + string="7." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒏" + u:name="DIGIT EIGHT FULL STOP" + string="8." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒐" + u:name="DIGIT NINE FULL STOP" + string="9." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒑" + u:name="NUMBER TEN FULL STOP" + string="10." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒒" + u:name="NUMBER ELEVEN FULL STOP" + string="11." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒓" + u:name="NUMBER TWELVE FULL STOP" + string="12." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒔" + u:name="NUMBER THIRTEEN FULL STOP" + string="13." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒕" + u:name="NUMBER FOURTEEN FULL STOP" + string="14." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒖" + u:name="NUMBER FIFTEEN FULL STOP" + string="15." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒗" + u:name="NUMBER SIXTEEN FULL STOP" + string="16." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒘" + u:name="NUMBER SEVENTEEN FULL STOP" + string="17." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒙" + u:name="NUMBER EIGHTEEN FULL STOP" + string="18." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒚" + u:name="NUMBER NINETEEN FULL STOP" + string="19." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒛" + u:name="NUMBER TWENTY FULL STOP" + string="20." + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒜" + u:name="PARENTHESIZED LATIN SMALL LETTER A" + string="(a)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒝" + u:name="PARENTHESIZED LATIN SMALL LETTER B" + string="(b)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒞" + u:name="PARENTHESIZED LATIN SMALL LETTER C" + string="(c)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒟" + u:name="PARENTHESIZED LATIN SMALL LETTER D" + string="(d)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒠" + u:name="PARENTHESIZED LATIN SMALL LETTER E" + string="(e)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒡" + u:name="PARENTHESIZED LATIN SMALL LETTER F" + string="(f)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒢" + u:name="PARENTHESIZED LATIN SMALL LETTER G" + string="(g)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒣" + u:name="PARENTHESIZED LATIN SMALL LETTER H" + string="(h)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒤" + u:name="PARENTHESIZED LATIN SMALL LETTER I" + string="(i)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒥" + u:name="PARENTHESIZED LATIN SMALL LETTER J" + string="(j)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒦" + u:name="PARENTHESIZED LATIN SMALL LETTER K" + string="(k)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒧" + u:name="PARENTHESIZED LATIN SMALL LETTER L" + string="(l)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒨" + u:name="PARENTHESIZED LATIN SMALL LETTER M" + string="(m)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒩" + u:name="PARENTHESIZED LATIN SMALL LETTER N" + string="(n)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒪" + u:name="PARENTHESIZED LATIN SMALL LETTER O" + string="(o)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒫" + u:name="PARENTHESIZED LATIN SMALL LETTER P" + string="(p)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒬" + u:name="PARENTHESIZED LATIN SMALL LETTER Q" + string="(q)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒭" + u:name="PARENTHESIZED LATIN SMALL LETTER R" + string="(r)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒮" + u:name="PARENTHESIZED LATIN SMALL LETTER S" + string="(s)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒯" + u:name="PARENTHESIZED LATIN SMALL LETTER T" + string="(t)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒰" + u:name="PARENTHESIZED LATIN SMALL LETTER U" + string="(u)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒱" + u:name="PARENTHESIZED LATIN SMALL LETTER V" + string="(v)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒲" + u:name="PARENTHESIZED LATIN SMALL LETTER W" + string="(w)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒳" + u:name="PARENTHESIZED LATIN SMALL LETTER X" + string="(x)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒴" + u:name="PARENTHESIZED LATIN SMALL LETTER Y" + string="(y)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⒵" + u:name="PARENTHESIZED LATIN SMALL LETTER Z" + string="(z)" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓐ" + u:name="CIRCLED LATIN CAPITAL LETTER A" + string="A" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓑ" + u:name="CIRCLED LATIN CAPITAL LETTER B" + string="B" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓒ" + u:name="CIRCLED LATIN CAPITAL LETTER C" + string="C" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓓ" + u:name="CIRCLED LATIN CAPITAL LETTER D" + string="D" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓔ" + u:name="CIRCLED LATIN CAPITAL LETTER E" + string="E" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓕ" + u:name="CIRCLED LATIN CAPITAL LETTER F" + string="F" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓖ" + u:name="CIRCLED LATIN CAPITAL LETTER G" + string="G" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓗ" + u:name="CIRCLED LATIN CAPITAL LETTER H" + string="H" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓘ" + u:name="CIRCLED LATIN CAPITAL LETTER I" + string="I" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓙ" + u:name="CIRCLED LATIN CAPITAL LETTER J" + string="J" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓚ" + u:name="CIRCLED LATIN CAPITAL LETTER K" + string="K" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓛ" + u:name="CIRCLED LATIN CAPITAL LETTER L" + string="L" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓜ" + u:name="CIRCLED LATIN CAPITAL LETTER M" + string="M" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓝ" + u:name="CIRCLED LATIN CAPITAL LETTER N" + string="N" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓞ" + u:name="CIRCLED LATIN CAPITAL LETTER O" + string="O" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓟ" + u:name="CIRCLED LATIN CAPITAL LETTER P" + string="P" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓠ" + u:name="CIRCLED LATIN CAPITAL LETTER Q" + string="Q" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓡ" + u:name="CIRCLED LATIN CAPITAL LETTER R" + string="R" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓢ" + u:name="CIRCLED LATIN CAPITAL LETTER S" + u:entity="oS" + string="S" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓣ" + u:name="CIRCLED LATIN CAPITAL LETTER T" + string="T" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓤ" + u:name="CIRCLED LATIN CAPITAL LETTER U" + string="U" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓥ" + u:name="CIRCLED LATIN CAPITAL LETTER V" + string="V" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓦ" + u:name="CIRCLED LATIN CAPITAL LETTER W" + string="W" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓧ" + u:name="CIRCLED LATIN CAPITAL LETTER X" + string="X" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓨ" + u:name="CIRCLED LATIN CAPITAL LETTER Y" + string="Y" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="Ⓩ" + u:name="CIRCLED LATIN CAPITAL LETTER Z" + string="Z" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓐ" + u:name="CIRCLED LATIN SMALL LETTER A" + string="a" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓑ" + u:name="CIRCLED LATIN SMALL LETTER B" + string="b" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓒ" + u:name="CIRCLED LATIN SMALL LETTER C" + string="c" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓓ" + u:name="CIRCLED LATIN SMALL LETTER D" + string="d" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓔ" + u:name="CIRCLED LATIN SMALL LETTER E" + string="e" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓕ" + u:name="CIRCLED LATIN SMALL LETTER F" + string="f" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓖ" + u:name="CIRCLED LATIN SMALL LETTER G" + string="g" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓗ" + u:name="CIRCLED LATIN SMALL LETTER H" + string="h" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓘ" + u:name="CIRCLED LATIN SMALL LETTER I" + string="i" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓙ" + u:name="CIRCLED LATIN SMALL LETTER J" + string="j" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓚ" + u:name="CIRCLED LATIN SMALL LETTER K" + string="k" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓛ" + u:name="CIRCLED LATIN SMALL LETTER L" + string="l" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓜ" + u:name="CIRCLED LATIN SMALL LETTER M" + string="m" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓝ" + u:name="CIRCLED LATIN SMALL LETTER N" + string="n" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓞ" + u:name="CIRCLED LATIN SMALL LETTER O" + string="o" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓟ" + u:name="CIRCLED LATIN SMALL LETTER P" + string="p" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓠ" + u:name="CIRCLED LATIN SMALL LETTER Q" + string="q" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓡ" + u:name="CIRCLED LATIN SMALL LETTER R" + string="r" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓢ" + u:name="CIRCLED LATIN SMALL LETTER S" + string="s" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓣ" + u:name="CIRCLED LATIN SMALL LETTER T" + string="t" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓤ" + u:name="CIRCLED LATIN SMALL LETTER U" + string="u" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓥ" + u:name="CIRCLED LATIN SMALL LETTER V" + string="b" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓦ" + u:name="CIRCLED LATIN SMALL LETTER W" + string="w" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓧ" + u:name="CIRCLED LATIN SMALL LETTER X" + string="x" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓨ" + u:name="CIRCLED LATIN SMALL LETTER Y" + string="y" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="ⓩ" + u:name="CIRCLED LATIN SMALL LETTER Z" + string="z" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓪" + u:name="CIRCLED DIGIT ZERO" + string="0" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓫" + u:name="NEGATIVE CIRCLED NUMBER ELEVEN" + string="11" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓬" + u:name="NEGATIVE CIRCLED NUMBER TWELVE" + string="12" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓭" + u:name="NEGATIVE CIRCLED NUMBER THIRTEEN" + string="13" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓮" + u:name="NEGATIVE CIRCLED NUMBER FOURTEEN" + string="14" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓯" + u:name="NEGATIVE CIRCLED NUMBER FIFTEEN" + string="15" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓰" + u:name="NEGATIVE CIRCLED NUMBER SIXTEEN" + string="16" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓱" + u:name="NEGATIVE CIRCLED NUMBER SEVENTEEN" + string="17" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓲" + u:name="NEGATIVE CIRCLED NUMBER EIGHTEEN" + string="18" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓳" + u:name="NEGATIVE CIRCLED NUMBER NINETEEN" + string="19" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓴" + u:name="NEGATIVE CIRCLED NUMBER TWENTY" + string="20" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓵" + u:name="DOUBLE CIRCLED DIGIT ONE" + string="1" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓶" + u:name="DOUBLE CIRCLED DIGIT TWO" + string="2" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓷" + u:name="DOUBLE CIRCLED DIGIT THREE" + string="3" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓸" + u:name="DOUBLE CIRCLED DIGIT FOUR" + string="4" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓹" + u:name="DOUBLE CIRCLED DIGIT FIVE" + string="5" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓺" + u:name="DOUBLE CIRCLED DIGIT SIX" + string="6" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓻" + u:name="DOUBLE CIRCLED DIGIT SEVEN" + string="7" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓼" + u:name="DOUBLE CIRCLED DIGIT EIGHT" + string="8" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓽" + u:name="DOUBLE CIRCLED DIGIT NINE" + string="9" + u:block="Enclosed Alphanumerics" + /> + <xsl:output-character + character="⓾" + 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="□" + u:name="WHITE SQUARE" + u:entity="squ" + string="\(sq" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="▢" + u:name="WHITE SQUARE WITH ROUNDED CORNERS" + string="\(sq" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="▫" + u:name="WHITE SMALL SQUARE" + string="\(sq" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="►" + u:name="BLACK RIGHT-POINTING POINTER" + string="\fB>\fR" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="▻" + u:name="WHITE RIGHT-POINTING POINTER" + string=">" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="▼" + u:name="BLACK DOWN-POINTING TRIANGLE" + string="\fBv\fR" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="▽" + u:name="WHITE DOWN-POINTING TRIANGLE" + u:entity="xdtri" + string="v" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="◄" + u:name="BLACK LEFT-POINTING POINTER" + string="\fB<\fR" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="◅" + u:name="WHITE LEFT-POINTING POINTER" + string="<" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="◆" + u:name="BLACK DIAMOND" + string="\(DI" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="◇" + u:name="WHITE DIAMOND" + string="\(lz" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="◊" + u:name="LOZENGE" + u:entity="loz" + string="\(lz" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="○" + u:name="WHITE CIRCLE" + u:entity="cir" + string="\(ci" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="●" + u:name="BLACK CIRCLE" + string="\(bu" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="◦" + u:name="WHITE BULLET" + string="\(ci" + u:block="Geometric Shapes" + /> + <xsl:output-character + character="◯" + 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="☚" + u:name="BLACK LEFT POINTING INDEX" + string="\(lh" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="☛" + u:name="BLACK RIGHT POINTING INDEX" + string="\(rh)" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="☜" + u:name="WHITE LEFT POINTING INDEX" + string="\(lh" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="☞" + u:name="WHITE RIGHT POINTING INDEX" + string="\(rh)" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="♠" + u:name="BLACK SPADE SUIT" + u:entity="spades" + string="\(SP" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="♡" + u:name="WHITE HEART SUIT" + string="\(HE" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="♢" + u:name="WHITE DIAMOND SUIT" + string="\(DI" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="♣" + u:name="BLACK CLUB SUIT" + u:entity="clubs" + string="\(CL" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="♤" + u:name="WHITE SPADE SUIT" + string="\(SP" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="♥" + u:name="BLACK HEART SUIT" + u:entity="hearts" + string="\(HE" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="♦" + u:name="BLACK DIAMOND SUIT" + u:entity="diams" + string="\(DI" + u:block="Miscellaneous Symbols" + /> + <xsl:output-character + character="♧" + 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="✓" + u:name="CHECK MARK" + u:entity="check" + string="\(OK" + u:block="Dingbats" + /> + <xsl:output-character + character="✔" + u:name="HEAVY CHECK MARK" + string="\fB\(OK\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✕" + u:name="MULTIPLICATION X" + string="\(mu" + u:block="Dingbats" + /> + <xsl:output-character + character="✖" + u:name="HEAVY MULTIPLICATION X" + string="\fB\(mu\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✗" + u:name="BALLOT X" + u:entity="cross" + string="\(mu" + u:block="Dingbats" + /> + <xsl:output-character + character="✘" + u:name="HEAVY BALLOT X" + string="\fB\(mu\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✙" + u:name="OUTLINED GREEK CROSS" + string="\fB+\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✚" + u:name="HEAVY GREEK CROSS" + string="\fB+\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✛" + u:name="OPEN CENTRE CROSS" + string="\fB+\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✜" + u:name="HEAVY OPEN CENTRE CROSS" + string="\fB+\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✝" + u:name="LATIN CROSS" + string="\fB+\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✞" + u:name="SHADOWED WHITE LATIN CROSS" + string="\fB+\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✟" + u:name="OUTLINED LATIN CROSS" + string="\fB+\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✠" + u:name="MALTESE CROSS" + u:entity="malt" + string="\fB+\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="✡" + u:name="STAR OF DAVID" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✢" + u:name="FOUR TEARDROP-SPOKED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✣" + u:name="FOUR BALLOON-SPOKED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✤" + u:name="HEAVY FOUR BALLOON-SPOKED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✥" + u:name="FOUR CLUB-SPOKED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✦" + u:name="BLACK FOUR POINTED STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✧" + u:name="WHITE FOUR POINTED STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✩" + u:name="STRESS OUTLINED WHITE STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✪" + u:name="CIRCLED WHITE STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✫" + u:name="OPEN CENTRE BLACK STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✬" + u:name="BLACK CENTRE WHITE STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✭" + u:name="OUTLINED BLACK STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✮" + u:name="HEAVY OUTLINED BLACK STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✯" + u:name="PINWHEEL STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✰" + u:name="SHADOWED WHITE STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✱" + u:name="HEAVY ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✲" + u:name="OPEN CENTRE ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✳" + u:name="EIGHT SPOKED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✴" + u:name="EIGHT POINTED BLACK STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✵" + u:name="EIGHT POINTED PINWHEEL STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✶" + u:name="SIX POINTED BLACK STAR" + u:entity="sext" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✷" + u:name="EIGHT POINTED RECTILINEAR BLACK STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✸" + u:name="HEAVY EIGHT POINTED RECTILINEAR BLACK STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✹" + u:name="TWELVE POINTED BLACK STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✺" + u:name="SIXTEEN POINTED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✻" + u:name="TEARDROP-SPOKED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✼" + u:name="OPEN CENTRE TEARDROP-SPOKED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✽" + u:name="HEAVY TEARDROP-SPOKED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✾" + u:name="SIX PETALLED BLACK AND WHITE FLORETTE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="✿" + u:name="BLACK FLORETTE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❀" + u:name="WHITE FLORETTE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❁" + u:name="EIGHT PETALLED OUTLINED BLACK FLORETTE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❂" + u:name="CIRCLED OPEN CENTRE EIGHT POINTED STAR" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❃" + u:name="HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❄" + u:name="SNOWFLAKE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❅" + u:name="TIGHT TRIFOLIATE SNOWFLAKE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❆" + u:name="HEAVY CHEVRON SNOWFLAKE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❇" + u:name="SPARKLE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❈" + u:name="HEAVY SPARKLE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❉" + u:name="BALLOON-SPOKED ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❊" + u:name="EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❋" + u:name="HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❍" + u:name="SHADOWED WHITE CIRCLE" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❏" + u:name="LOWER RIGHT DROP-SHADOWED WHITE SQUARE" + string="\(sq" + u:block="Dingbats" + /> + <xsl:output-character + character="❐" + u:name="UPPER RIGHT DROP-SHADOWED WHITE SQUARE" + string="\(sq" + u:block="Dingbats" + /> + <xsl:output-character + character="❑" + u:name="LOWER RIGHT SHADOWED WHITE SQUARE" + string="\(sq" + u:block="Dingbats" + /> + <xsl:output-character + character="❒" + u:name="UPPER RIGHT SHADOWED WHITE SQUARE" + string="\(sq" + u:block="Dingbats" + /> + <xsl:output-character + character="❖" + u:name="BLACK DIAMOND MINUS WHITE X" + string="*" + u:block="Dingbats" + /> + <xsl:output-character + character="❘" + u:name="LIGHT VERTICAL BAR" + string="\(bv" + u:block="Dingbats" + /> + <xsl:output-character + character="❙" + u:name="MEDIUM VERTICAL BAR" + string="\fB\(bv\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❚" + u:name="HEAVY VERTICAL BAR" + string="\fB\(bv\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❛" + u:name="HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT" + string="\fB\(oq\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❜" + u:name="HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT" + string="\fB\(cq\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❝" + u:name="HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT" + string="\fB\(lq\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❞" + u:name="HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT" + string="\fB\(rq\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❡" + u:name="CURVED STEM PARAGRAPH SIGN ORNAMENT" + string="\(ps" + u:block="Dingbats" + /> + <xsl:output-character + character="❢" + u:name="HEAVY EXCLAMATION MARK ORNAMENT" + string="\fB!\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❣" + u:name="HEAVY HEART EXCLAMATION MARK ORNAMENT" + string="\fB!\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❤" + u:name="HEAVY BLACK HEART" + string="\fB\(HE\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❥" + u:name="ROTATED HEAVY BLACK HEART BULLET" + string="\fB\(HE\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❦" + u:name="FLORAL HEART" + string="\fB\(HE\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❧" + u:name="ROTATED FLORAL HEART BULLET" + string="\fB\(HE\fR" + u:block="Dingbats" + /> + <xsl:output-character + character="❶" + u:name="DINGBAT NEGATIVE CIRCLED DIGIT ONE" + string="1" + u:block="Dingbats" + /> + <xsl:output-character + character="❷" + u:name="DINGBAT NEGATIVE CIRCLED DIGIT TWO" + string="2" + u:block="Dingbats" + /> + <xsl:output-character + character="❸" + u:name="DINGBAT NEGATIVE CIRCLED DIGIT THREE" + string="3" + u:block="Dingbats" + /> + <xsl:output-character + character="❹" + u:name="DINGBAT NEGATIVE CIRCLED DIGIT FOUR" + string="4" + u:block="Dingbats" + /> + <xsl:output-character + character="❺" + u:name="DINGBAT NEGATIVE CIRCLED DIGIT FIVE" + string="5" + u:block="Dingbats" + /> + <xsl:output-character + character="❻" + u:name="DINGBAT NEGATIVE CIRCLED DIGIT SIX" + string="6" + u:block="Dingbats" + /> + <xsl:output-character + character="❼" + u:name="DINGBAT NEGATIVE CIRCLED DIGIT SEVEN" + string="7" + u:block="Dingbats" + /> + <xsl:output-character + character="❽" + u:name="DINGBAT NEGATIVE CIRCLED DIGIT EIGHT" + string="8" + u:block="Dingbats" + /> + <xsl:output-character + character="❾" + u:name="DINGBAT NEGATIVE CIRCLED DIGIT NINE" + string="9" + u:block="Dingbats" + /> + <xsl:output-character + character="❿" + u:name="DINGBAT NEGATIVE CIRCLED NUMBER TEN" + string="10" + u:block="Dingbats" + /> + <xsl:output-character + character="➀" + u:name="DINGBAT CIRCLED SANS-SERIF DIGIT ONE" + string="1" + u:block="Dingbats" + /> + <xsl:output-character + character="➁" + u:name="DINGBAT CIRCLED SANS-SERIF DIGIT TWO" + string="2" + u:block="Dingbats" + /> + <xsl:output-character + character="➂" + u:name="DINGBAT CIRCLED SANS-SERIF DIGIT THREE" + string="3" + u:block="Dingbats" + /> + <xsl:output-character + character="➃" + u:name="DINGBAT CIRCLED SANS-SERIF DIGIT FOUR" + string="4" + u:block="Dingbats" + /> + <xsl:output-character + character="➄" + u:name="DINGBAT CIRCLED SANS-SERIF DIGIT FIVE" + string="5" + u:block="Dingbats" + /> + <xsl:output-character + character="➅" + u:name="DINGBAT CIRCLED SANS-SERIF DIGIT SIX" + string="6" + u:block="Dingbats" + /> + <xsl:output-character + character="➆" + u:name="DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN" + string="7" + u:block="Dingbats" + /> + <xsl:output-character + character="➇" + u:name="DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT" + string="8" + u:block="Dingbats" + /> + <xsl:output-character + character="➈" + u:name="DINGBAT CIRCLED SANS-SERIF DIGIT NINE" + string="9" + u:block="Dingbats" + /> + <xsl:output-character + character="➉" + u:name="DINGBAT CIRCLED SANS-SERIF NUMBER TEN" + string="10" + u:block="Dingbats" + /> + <xsl:output-character + character="➊" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE" + string="1" + u:block="Dingbats" + /> + <xsl:output-character + character="➋" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO" + string="2" + u:block="Dingbats" + /> + <xsl:output-character + character="➌" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE" + string="3" + u:block="Dingbats" + /> + <xsl:output-character + character="➍" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR" + string="4" + u:block="Dingbats" + /> + <xsl:output-character + character="➎" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE" + string="5" + u:block="Dingbats" + /> + <xsl:output-character + character="➏" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX" + string="6" + u:block="Dingbats" + /> + <xsl:output-character + character="➐" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN" + string="7" + u:block="Dingbats" + /> + <xsl:output-character + character="➑" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT" + string="8" + u:block="Dingbats" + /> + <xsl:output-character + character="➒" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE" + string="9" + u:block="Dingbats" + /> + <xsl:output-character + character="➓" + u:name="DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN" + string="10" + u:block="Dingbats" + /> + <xsl:output-character + character="➔" + u:name="HEAVY WIDE-HEADED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➙" + u:name="HEAVY RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➛" + u:name="DRAFTING POINT RIGHTWARDS ARROW" + string="\(->" + u:block="Dingbats" + /> + <xsl:output-character + character="➜" + u:name="HEAVY ROUND-TIPPED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➝" + u:name="TRIANGLE-HEADED RIGHTWARDS ARROW" + string="\(->" + u:block="Dingbats" + /> + <xsl:output-character + character="➞" + u:name="HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➟" + u:name="DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" + string="\(->" + u:block="Dingbats" + /> + <xsl:output-character + character="➠" + u:name="HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➡" + u:name="BLACK RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➢" + u:name="THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD" + string="\(->" + u:block="Dingbats" + /> + <xsl:output-character + character="➣" + u:name="THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD" + string="\(->" + u:block="Dingbats" + /> + <xsl:output-character + character="➤" + u:name="BLACK RIGHTWARDS ARROWHEAD" + string="\(->" + u:block="Dingbats" + /> + <xsl:output-character + character="➧" + u:name="SQUAT BLACK RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➨" + u:name="HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➩" + u:name="RIGHT-SHADED WHITE RIGHTWARDS ARROW" + string="\(rA" + u:block="Dingbats" + /> + <xsl:output-character + character="➪" + u:name="LEFT-SHADED WHITE RIGHTWARDS ARROW" + string="\(rA" + u:block="Dingbats" + /> + <xsl:output-character + character="➫" + u:name="BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW" + string="\(rA" + u:block="Dingbats" + /> + <xsl:output-character + character="➬" + u:name="FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW" + string="\(rA" + u:block="Dingbats" + /> + <xsl:output-character + character="➭" + u:name="HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" + string="\(rA" + u:block="Dingbats" + /> + <xsl:output-character + character="➮" + u:name="HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" + string="\(rA" + u:block="Dingbats" + /> + <xsl:output-character + character="➯" + u:name="NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" + string="\(rA" + u:block="Dingbats" + /> + <xsl:output-character + character="➱" + u:name="NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" + string="\(rA" + u:block="Dingbats" + /> + <xsl:output-character + character="➲" + u:name="CIRCLED HEAVY WHITE RIGHTWARDS ARROW" + string="\(rA" + u:block="Dingbats" + /> + <xsl:output-character + character="➳" + u:name="WHITE-FEATHERED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➴" + u:name="BLACK-FEATHERED SOUTH EAST ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➵" + u:name="BLACK-FEATHERED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➶" + u:name="BLACK-FEATHERED NORTH EAST ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➷" + u:name="HEAVY BLACK-FEATHERED SOUTH EAST ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➸" + u:name="HEAVY BLACK-FEATHERED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➹" + u:name="HEAVY BLACK-FEATHERED NORTH EAST ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➺" + u:name="TEARDROP-BARBED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➻" + u:name="HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➼" + u:name="WEDGE-TAILED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➽" + u:name="HEAVY WEDGE-TAILED RIGHTWARDS ARROW" + string="\fR\(->\fB" + u:block="Dingbats" + /> + <xsl:output-character + character="➾" + 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="ff" + u:name="LATIN SMALL LIGATURE FF" + u:entity="fflig" + string="\(ff" + u:block="Alphabetic Presentation Forms" + /> + <xsl:output-character + character="fi" + u:name="LATIN SMALL LIGATURE FI" + u:entity="filig" + string="\(fi" + u:block="Alphabetic Presentation Forms" + /> + <xsl:output-character + character="fl" + u:name="LATIN SMALL LIGATURE FL" + u:entity="fllig" + string="\(fl" + u:block="Alphabetic Presentation Forms" + /> + <xsl:output-character + character="ffi" + u:name="LATIN SMALL LIGATURE FFI" + u:entity="ffilig" + string="\(Fi" + u:block="Alphabetic Presentation Forms" + /> + <xsl:output-character + character="ffl" + 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="" + u:name="ZERO WIDTH NO-BREAK SPACE" + string="\&" + 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) > 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>\&[</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>" </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> </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> </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> </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> </xsl:text> + <xsl:text>.RE</xsl:text> + <xsl:text> </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 > 0 + and string-length(.) > $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 > 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><</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>></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>" </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 </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> </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>.br </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 </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> </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 </xsl:text> + <xsl:call-template name="bold"> + <xsl:with-param name="node" select="."/> + <xsl:with-param name="context" select="."/> + </xsl:call-template> + <xsl:text> </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 </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> </xsl:text> + <xsl:text>.sp -1n </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> </xsl:text> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'Publisher'"/> + </xsl:call-template> + <xsl:text>. </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><\&</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>\&></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 </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> </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 </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> </xsl:text> + <xsl:text>.br </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> </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> </xsl:text> + <xsl:text>.sp -1n </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> </xsl:text> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'Author'"/> + </xsl:call-template> + <xsl:text>. </xsl:text> + </xsl:when> + <xsl:when test="self::editor"> + <xsl:text> </xsl:text> + <xsl:text>.sp -1n </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> </xsl:text> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'Editor'"/> + </xsl:call-template> + <xsl:text>. </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> </xsl:text> + <xsl:text>.sp -1n </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> </xsl:text> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="@class"/> + </xsl:call-template> + <xsl:text>. </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> </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> </xsl:text> + <xsl:text>.sp -1n </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> </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>" </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> </xsl:text> + <xsl:text>.br </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="." mode="titlepage.mode"/> + <xsl:text> </xsl:text> + <xsl:text>.sp </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>©</xsl:text> + </xsl:when> + <xsl:when test="@class = 'registered'"> + <xsl:text>®</xsl:text> + </xsl:when> + <xsl:when test="@class = 'service'"> + <xsl:text>℠</xsl:text> + </xsl:when> + <xsl:when test="@class = 'trade'"> + <xsl:text>™</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>™</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> </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 </xsl:text> + </xsl:if> +</xsl:template> + +<xsl:template match="variablelist|glosslist"> + <xsl:if test="title"> + <xsl:text>.PP </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> </xsl:text> + </xsl:if> + <xsl:apply-templates/> +</xsl:template> + +<xsl:template match="varlistentry|glossentry"> + <xsl:text>.PP </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> </xsl:text> + <xsl:text>.br </xsl:text> + </xsl:if> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + <xsl:text> </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> </xsl:text> + <xsl:apply-templates/> + <xsl:text>.RE </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> </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 • to "\(bu" for us --> + <xsl:text> </xsl:text> + <xsl:text>.sp</xsl:text> + <xsl:text> </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> </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>•</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 </xsl:text> +</xsl:template> + +<xsl:template match="orderedlist/listitem|procedure/step"> + <xsl:text> </xsl:text> + <xsl:text>.sp</xsl:text> + <xsl:text> </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> </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) < 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 </xsl:text> + <xsl:text> </xsl:text> +</xsl:template> + +<xsl:template match="itemizedlist|orderedlist|procedure"> + <xsl:if test="title"> + <xsl:text>.PP </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> </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 </xsl:text> + <xsl:text>.RE </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 </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> </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> </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> </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> </xsl:text> + <xsl:apply-templates/> + <xsl:text> </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 </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> </xsl:text> + </xsl:if> + <xsl:text>.\" line length increase to cope w/ tbl weirdness </xsl:text> + <xsl:text>.ll +(\n(LLu * 62u / 100u) </xsl:text> + <!-- * .TS = "Table Start" --> + <xsl:text>.TS </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>. </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> </xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:apply-templates/> + <!-- * .TE = "Table End" --> + <xsl:text>.TE </xsl:text> + <xsl:text>.\" line length decrease back to previous value </xsl:text> + <xsl:text>.ll -(\n(LLu * 62u / 100u) </xsl:text> + <!-- * put a blank line of space below the table --> + <xsl:text>.sp </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>	</xsl:text> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template match="segmentedlist/seglistitem"> + <xsl:apply-templates/> + <xsl:text> </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{ </xsl:text> + <xsl:variable name="contents"> + <xsl:apply-templates/> + </xsl:variable> + <xsl:value-of select="normalize-space($contents)"/> + <xsl:text> 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>	</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"> </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> </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> </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> <http://docbook.sf.net/></xsl:text> + <xsl:text> </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> </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> </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> </xsl:text> + <xsl:text>.\"</xsl:text> + <xsl:text> </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>" </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 </xsl:text> + <xsl:text>.nh </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) </xsl:text> + <xsl:text>.ad l </xsl:text> + </xsl:if> + <xsl:if test="not($man.indent.refsect = 0)"> + <xsl:text>.\" store initial "default indentation value" </xsl:text> + <xsl:text>.nr zq \n(IN </xsl:text> + <xsl:text>.\" adjust default indentation </xsl:text> + <xsl:text>.nr IN </xsl:text> + <xsl:value-of select="$man.indent.width"/> + <xsl:text> </xsl:text> + <xsl:text>.\" adjust indentation of SS headings </xsl:text> + <xsl:text>.nr SN \n(IN </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 </xsl:text> + <xsl:text>.cflags 4 / </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> </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> </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> </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="▒▀" newstring="▒"/> + <!-- * replace U+2580 no-break marker (stylesheet-added) w/ no-break space --> + <substitution oldstring="▀" newstring="\ "/> + + <!-- ==================================================================== --> + + <!-- * squeeze multiple newlines before a roff request --> + <substitution oldstring=" ." newstring=" ."/> + <!-- * remove any .sp instances that directly precede a .PP --> + <substitution oldstring=".sp .PP" newstring=".PP"/> + <!-- * remove any .sp instances that directly follow a .PP --> + <substitution oldstring=".PP .sp" newstring=".PP"/> + <!-- * squeeze multiple newlines after start of no-fill (verbatim) env. --> + <substitution oldstring=".nf " newstring=".nf "/> + <!-- * squeeze multiple newlines after REstoring margin --> + <substitution oldstring=".RE " newstring=".RE "/> + <!-- * U+2591 is a marker we add before and after every Parameter in --> + <!-- * Funcprototype output --> + <substitution oldstring="░" newstring=" "/> + <!-- * U+2592 is a marker we add for the newline before output of <sbr>; --> + <substitution oldstring="▒" newstring=" "/> + <!-- * --> + <!-- * Now deal with some other characters that are added by the --> + <!-- * stylesheets during processing. --> + <!-- * --> + <!-- * bullet --> + <substitution oldstring="•" newstring="\(bu"/> + <!-- * left double quote --> + <substitution oldstring="“" newstring="\(lq"/> + <!-- * right double quote --> + <substitution oldstring="”" newstring="\(rq"/> + <!-- * left single quote --> + <substitution oldstring="‘" newstring="\(oq"/> + <!-- * right single quote --> + <substitution oldstring="’" newstring="\(cq"/> + <!-- * copyright sign --> + <substitution oldstring="©" newstring="\(co"/> + <!-- * registered sign --> + <substitution oldstring="®" newstring="\(rg"/> + <!-- * ...servicemark... --> + <!-- * There is no groff equivalent for it. --> + <substitution oldstring="℠" newstring="(SM)"/> + <!-- * ...trademark... --> + <!-- * We don't do "\(tm" because for console output, --> + <!-- * groff just renders that as "tm"; that is: --> + <!-- * --> + <!-- * Product™ -> Producttm --> + <!-- * --> + <!-- * So we just make it to "(TM)" instead; thus: --> + <!-- * --> + <!-- * Product™ -> Product(TM) --> + <substitution oldstring="™" 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) > 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 </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> </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> </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>" </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>" </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>" </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 </xsl:text> + <xsl:apply-templates/> + <xsl:text>.RE </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 </xsl:text> + <xsl:apply-templates/> + <xsl:text>.RE </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) </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) </xsl:text> + </xsl:if> + </xsl:variable> + <xsl:call-template name="nested-section-title"/> + <xsl:text>.RS (\n(SNu) </xsl:text> + <xsl:apply-templates/> + <xsl:text>.RE </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>▀</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> </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 </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> </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>▒</xsl:text> + <xsl:text>.br▒</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 </xsl:text> + </xsl:if> + <!-- * if hyphenation is enabled by default, turn it off temporarily --> + <xsl:if test="$man.hyphenate != 0"> + <xsl:text>.hy 0 </xsl:text> + </xsl:if> + <xsl:text>.HP </xsl:text> + <xsl:value-of select="string-length (normalize-space (command)) + 1"/> + <xsl:text> </xsl:text> + <xsl:apply-templates/> + <xsl:text> </xsl:text> + <!-- * if justification is enabled by default, turn it back on --> + <xsl:if test="$man.justify != 0"> + <xsl:text>.ad </xsl:text> + </xsl:if> + <!-- * if hyphenation is enabled by default, turn it back on --> + <xsl:if test="$man.hyphenate != 0"> + <xsl:text>.hy </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 </xsl:text> + </xsl:if> + <!-- * if hyphenation is enabled by default, turn it off temporarily --> + <xsl:if test="$man.hyphenate != 0"> + <xsl:text>.hy 0 </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 </xsl:text> + </xsl:if> + <!-- * if hyphenation is enabled by default, turn it back on --> + <xsl:if test="$man.hyphenate != 0"> + <xsl:text>.hy </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> </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> </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>"░"</xsl:text> + <xsl:apply-templates/> + <xsl:text>"░"</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 </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▀table]</xsl:text> + </xsl:if> + <xsl:value-of select="normalize-space($title)"/> + <xsl:text> </xsl:text> + <xsl:text>.sp -1n </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> </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>; </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> </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 </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& </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> </xsl:text> + <!-- * .TE = "Table End" --> + <xsl:text>.TE </xsl:text> + <!-- * put a blank line of space below the table --> + <xsl:text>.sp </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> </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{ </xsl:text> + <xsl:copy-of select="."/> + <xsl:text> 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▀table\fR]* </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>
</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> </xsl:text> + <xsl:text>.br </xsl:text> + <xsl:apply-templates select="*[1]" mode="footnote.body.number"/> + <xsl:apply-templates select="*[position() > 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>] </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="'▀'"/> + </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 </xsl:text> + <xsl:text>.it 1 an-trap </xsl:text> + <xsl:text>.nr an-no-space-flag 1 </xsl:text> + <xsl:text>.nr an-break-flag 1 </xsl:text> + <xsl:text>.br </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> </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> </xsl:text> + <xsl:text>.sp </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(.,'	 ',' '), ' ') + 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> </xsl:text> + </xsl:if> + <xsl:value-of select="normalize-space($content)"/> + <xsl:if + test="(translate(substring(., string-length(.), 1),'	 ',' ') = ' ' + 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> </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> </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> </xsl:text> + <xsl:text>.RE</xsl:text> + <xsl:text> </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> </xsl:text> + </xsl:if> + </xsl:template> + +</xsl:stylesheet> |