| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888 | 
							- <?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:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"
 
-                 exclude-result-prefixes="exsl"
 
-                 version='1.0'>
 
- <!-- ********************************************************************
 
-      $Id: other.xsl 8865 2010-08-20 18:22:06Z mzjn $
 
-      ********************************************************************
 
-      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
 
- "/>
 
- <!-- ==================================================================== -->
 
- <!-- * Get character map contents -->
 
- <!-- ==================================================================== -->
 
-   <xsl:variable name="man.charmap.contents">
 
-     <xsl:if test="$man.charmap.enabled != 0">
 
-       <xsl:variable name="lang">
 
-         <xsl:call-template name="l10n.language">
 
-           <xsl:with-param name="target" select="//refentry[1]"/>
 
-         </xsl:call-template>
 
-       </xsl:variable>
 
-       <xsl:call-template name="read-character-map">
 
-         <xsl:with-param name="use.subset" select="$man.charmap.use.subset"/>
 
-         <xsl:with-param name="subset.profile">
 
-           <xsl:choose>
 
-             <xsl:when test="$lang = 'en'">
 
-               <xsl:value-of select="$man.charmap.subset.profile.english"/>
 
-             </xsl:when>
 
-             <xsl:otherwise>
 
-               <xsl:value-of select="$man.charmap.subset.profile"/>
 
-             </xsl:otherwise>
 
-           </xsl:choose>
 
-         </xsl:with-param>
 
-         <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">\*(Aq</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 -->
 
-     <!-- *  -->
 
-     <!-- * We append a "\&" to handle the case of a no-break space that -->
 
-     <!-- * appears at the end of a line - because later processing will -->
 
-     <!-- * cause that space to get eaten otherwise. -->
 
-     <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:param name="refname"/>
 
-     <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:with-param name="refname" select="$refname"/>
 
-         </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>.\"  Language: </xsl:text>
 
-     <xsl:call-template name="l10n.language.name"/>
 
-     <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:text>.\" -----------------------------------------------------------------
</xsl:text>
 
-     <xsl:text>.\" * set default formatting
</xsl:text>
 
-     <xsl:text>.\" -----------------------------------------------------------------
</xsl:text>
 
-     <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" select="."/>
 
-               <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="'.so '"/>
 
-             <xsl:call-template name="make.adjusted.man.filename">
 
-               <xsl:with-param name="name" select="$first.refname"/>
 
-               <xsl:with-param name="section" select="$section"/>
 
-               <xsl:with-param name="lang" select="$lang"/>
 
-             </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>
 
-   <!-- ============================================================== -->
 
-   <!-- There is some stuff, that is not portable between groff/troff. -->
 
-   <xsl:template name="define.portability.macros">
 
-     <xsl:text>.\" -----------------------------------------------------------------
</xsl:text>
 
-     <xsl:text>.\" * Define some portability stuff
</xsl:text>
 
-     <xsl:text>.\" -----------------------------------------------------------------
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.\" http://bugs.debian.org/507673
</xsl:text>
 
-     <xsl:text>.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>
</xsl:text>
 
-     <xsl:text>.ie \n(.g .ds Aq \(aq</xsl:text>
 
-     <xsl:text>
</xsl:text>
 
-     <xsl:text>.el       .ds Aq '</xsl:text>
 
-     <xsl:text>
</xsl:text>
 
-   </xsl:template>
 
-   <!-- ============================================================== -->
 
-   <xsl:template name="define.macros">
 
-     <xsl:text>.\" -----------------------------------------------------------------
</xsl:text>
 
-     <xsl:text>.\" * (re)Define some macros
</xsl:text>
 
-     <xsl:text>.\" -----------------------------------------------------------------
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.\" toupper - uppercase a string (locale-aware)
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.de toupper
</xsl:text>
 
-     <xsl:text>.tr</xsl:text>
 
-     <xsl:text> </xsl:text>
 
-     <xsl:call-template name="make.tr.uppercase.arg"/>
 
-     <xsl:text>\\$*
</xsl:text>
 
-     <xsl:text>.tr</xsl:text>
 
-     <xsl:text> </xsl:text>
 
-     <xsl:call-template name="make.tr.normalcase.arg"/>
 
-     <xsl:text>..
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.\" SH-xref - format a cross-reference to an SH section
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.de SH-xref
 
- .ie n \{\
 
- .\}
 
- .toupper \\$*
 
- .el \{\
 
- \\$*
 
- .\}
 
- ..
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.\" SH - level-one heading that works better for non-TTY output
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.de1 SH
</xsl:text>
 
-     <xsl:text>.\" put an extra blank line of space above the head in non-TTY output
</xsl:text>
 
-     <xsl:call-template name="roff-if-start">
 
-       <xsl:with-param name="condition">t</xsl:with-param>
 
-     </xsl:call-template>
 
-     <xsl:text>.sp 1
</xsl:text>
 
-     <xsl:call-template name="roff-if-end"/>
 
-     <xsl:text>.sp \\n[PD]u
 
- .nr an-level 1
 
- .set-an-margin
 
- .nr an-prevailing-indent \\n[IN]
 
- .fi
 
- .in \\n[an-margin]u
 
- .ti 0
 
- .HTML-TAG ".NH \\n[an-level]"
 
- .it 1 an-trap
 
- .nr an-no-space-flag 1
 
- .nr an-break-flag 1
 
- \." make the size of the head bigger
 
- .ps +3
 
- .ft B
 
- .ne (2v + 1u)
 
- .ie n \{\
 
- .\" if n (TTY output), use uppercase
 
- .toupper \\$*
 
- .\}
 
- .el \{\
 
- .nr an-break-flag 0
 
- .\" if not n (not TTY), use normal case (not uppercase)
 
- \\$1
 
- .in \\n[an-margin]u
 
- .ti 0
 
- .\" if not n (not TTY), put a border/line under subheading
 
- .sp -.6
 
- \l'\n(.lu'
 
- .\}
 
- ..
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.\" SS - level-two heading that works better for non-TTY output
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.de1 SS
 
- .sp \\n[PD]u
 
- .nr an-level 1
 
- .set-an-margin
 
- .nr an-prevailing-indent \\n[IN]
 
- .fi
 
- .in \\n[IN]u
 
- .ti \\n[SN]u
 
- .it 1 an-trap
 
- .nr an-no-space-flag 1
 
- .nr an-break-flag 1
 
- .ps \\n[PS-SS]u
 
- \." make the size of the head bigger
 
- .ps +2
 
- .ft B
 
- .ne (2v + 1u)
 
- .if \\n[.$] \&\\$*
 
- ..
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.\" BB/EB - put background/screen (filled box) around block of text
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.de BB
 
- .if t \{\
 
- .sp -.5
 
- .br
 
- .in +2n
 
- .ll -2n
 
- .gcolor red
 
- .di BX
 
- .\}
 
- ..
 
- .de EB
 
- .if t \{\
 
- .if "\\$2"adjust-for-leading-newline" \{\
 
- .sp -1
 
- .\}
 
- .br
 
- .di
 
- .in
 
- .ll
 
- .gcolor
 
- .nr BW \\n(.lu-\\n(.i
 
- .nr BH \\n(dn+.5v
 
- .ne \\n(BHu+.5v
 
- .ie "\\$2"adjust-for-leading-newline" \{\
 
- \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[]
 
- .\}
 
- .el \{\
 
- \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[]
 
- .\}
 
- .in 0
 
- .sp -.5v
 
- .nf
 
- .BX
 
- .in
 
- .sp .5v
 
- .fi
 
- .\}
 
- ..
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.\" BM/EM - put colored marker in margin next to block of text
</xsl:text>
 
-     <xsl:text>.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:text>
 
-     <xsl:text>.de BM
 
- .if t \{\
 
- .br
 
- .ll -2n
 
- .gcolor red
 
- .di BX
 
- .\}
 
- ..
 
- .de EM
 
- .if t \{\
 
- .br
 
- .di
 
- .ll
 
- .gcolor
 
- .nr BH \\n(dn
 
- .ne \\n(BHu
 
- \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[]
 
- .in 0
 
- .nf
 
- .BX
 
- .in
 
- .fi
 
- .\}
 
- ..
</xsl:text>
 
- </xsl:template>
 
- <xsl:template name="make.tr.uppercase.arg">
 
-   <xsl:call-template name="string.shuffle">
 
-     <xsl:with-param name="string1">
 
-       <xsl:call-template name="gentext">
 
-         <xsl:with-param name="key" select="'lowercase.alpha'"/>
 
-       </xsl:call-template>
 
-     </xsl:with-param>
 
-     <xsl:with-param name="string2">
 
-       <xsl:call-template name="gentext">
 
-         <xsl:with-param name="key" select="'uppercase.alpha'"/>
 
-       </xsl:call-template>
 
-     </xsl:with-param>
 
-   </xsl:call-template>
 
-   <xsl:text>
</xsl:text>
 
- </xsl:template>
 
- <xsl:template name="make.tr.normalcase.arg">
 
-   <xsl:call-template name="string.shuffle">
 
-     <xsl:with-param name="string1">
 
-       <xsl:call-template name="gentext">
 
-         <xsl:with-param name="key" select="'lowercase.alpha'"/>
 
-       </xsl:call-template>
 
-     </xsl:with-param>
 
-     <xsl:with-param name="string2">
 
-       <xsl:call-template name="gentext">
 
-         <xsl:with-param name="key" select="'lowercase.alpha'"/>
 
-       </xsl:call-template>
 
-     </xsl:with-param>
 
-   </xsl:call-template>
 
-   <xsl:text>
</xsl:text>
 
- </xsl:template>
 
- <xsl:template name="string.shuffle">
 
-   <!-- * given two strings, "shuffle" them together into one -->
 
-   <xsl:param name="string1"/>
 
-   <xsl:param name="string2"/>
 
-   <xsl:value-of select="substring($string1, 1, 1)"/>
 
-   <xsl:value-of select="substring($string2, 1, 1)"/>
 
-   <xsl:if test="string-length($string1) > 1">
 
-     <xsl:call-template name="string.shuffle">
 
-       <xsl:with-param name="string1">
 
-         <xsl:value-of select="substring($string1, 2)"/>
 
-       </xsl:with-param>
 
-       <xsl:with-param name="string2">
 
-         <xsl:value-of select="substring($string2, 2)"/>
 
-       </xsl:with-param>
 
-     </xsl:call-template>
 
-   </xsl:if>
 
- </xsl:template>
 
- </xsl:stylesheet>
 
 
  |