home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 May / PCWorld_2003-05_cd.bin / Komunik / apache / apache_2.0.45-win32-x86-no_ssl.msi / Data.Cab / F213264_common.xsl < prev    next >
Extensible Markup Language  |  2003-01-15  |  27KB  |  858 lines

  1. <?xml version="1.0"?>
  2. <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
  3. <xsl:stylesheet version="1.0"
  4.               xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  5.                   xmlns="http://www.w3.org/1999/xhtml">
  6.  
  7.   <!--                                                          -->
  8.   <!-- Please, don't hard-code output strings! Use the language -->
  9.   <!-- files and the translation "stuff"...                     -->
  10.   <!--                                                          -->
  11.  
  12.   <!-- Constants used for case translation -->
  13.   <xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
  14.   <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
  15.  
  16.   <!--
  17.     space separated list of blockelements defined in common.dtd
  18.     used for inline content catching in <example>s
  19.   -->
  20.   <xsl:variable name="blockelements">
  21.     p  example  note  table  ul  ol  dl  pre  img  blockquote
  22.   </xsl:variable>
  23.  
  24.   <!-- relative path to /manual/ -->
  25.   <xsl:variable name="path">
  26.     <xsl:choose>
  27.       <xsl:when test="*/relativepath/@href">
  28.         <xsl:value-of select="*/relativepath/@href"/>
  29.       </xsl:when>
  30.       <xsl:otherwise>
  31.         <xsl:value-of select="'..'"/>
  32.       </xsl:otherwise>
  33.     </xsl:choose>
  34.   </xsl:variable>
  35.  
  36.   <!-- load outsourced page types -->
  37.   <xsl:include href="moduleindex.xsl"/>
  38.   <xsl:include href="directiveindex.xsl"/>
  39.   <xsl:include href="manualpage.xsl"/>
  40.   <xsl:include href="synopsis.xsl"/>
  41.   <xsl:include href="sitemap.xsl"/>
  42.   <xsl:include href="quickreference.xsl"/>
  43.  
  44.   <!-- make sure, we set relative anchors
  45.        only, if we're actually transforming
  46.        a modulefile (see <directive>) -->
  47.   <xsl:variable name="in-modulesynopsis"><xsl:choose>
  48.     <xsl:when test="/quickreference">0</xsl:when>
  49.  
  50.     <xsl:otherwise>1</xsl:otherwise></xsl:choose>
  51.   </xsl:variable>
  52.  
  53.   <!--                                                            -->
  54.   <!--    Utility templates for constructing pages                -->
  55.   <!--                                                            -->
  56.  
  57.  
  58.   <!--                                                            -->
  59.   <!-- HTML head                                                  -->
  60.   <!--                                                            -->
  61.   <xsl:template name="head">
  62.     <head>
  63.       <xsl:comment>
  64.         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  65.               This file is generated from xml source: DO NOT EDIT
  66.         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  67.       </xsl:comment>
  68.  
  69. <xsl:text>
  70. </xsl:text> <!-- insert line break -->
  71.  
  72.       <title>
  73.         <xsl:choose>
  74.           <xsl:when test="name">
  75.             <xsl:value-of select="name"/>
  76.           </xsl:when>
  77.  
  78.           <xsl:otherwise>
  79.             <xsl:value-of select="title"/>
  80.           </xsl:otherwise>
  81.         </xsl:choose>
  82.  
  83.         <xsl:text> </xsl:text>
  84.         <xsl:value-of select="$messages/message[@name='apachetitle']"/>
  85.       </title>
  86.  
  87. <xsl:text>
  88. </xsl:text> <!-- insert line break -->
  89.  
  90.       <link title="Main stylesheet"  type="text/css" media="all" rel="stylesheet"
  91.              href="{$path}/style/css/manual.css" />
  92.  
  93. <xsl:text>
  94. </xsl:text> <!-- insert line break -->
  95.  
  96.       <link title="No Sidebar - Default font size" type="text/css" media="all"
  97.              rel="alternate stylesheet"
  98.              href="{$path}/style/css/manual-loose-100pc.css"/>
  99.  
  100. <xsl:text>
  101. </xsl:text> <!-- insert line break -->
  102.  
  103.       <link type="text/css" media="print"
  104.              rel="stylesheet"
  105.              href="{$path}/style/css/manual-print.css"/>
  106.  
  107. <xsl:text>
  108. </xsl:text> <!-- insert line break -->
  109.  
  110.       <link rel="shortcut icon" href="{$path}/images/favicon.ico" />
  111.     </head>
  112.   </xsl:template>
  113.   <!-- /head -->
  114.  
  115.  
  116.   <!--                                                            -->
  117.   <!-- page top                                                   -->
  118.   <!--                                                            -->
  119.   <xsl:template name="top">
  120.     <div id="page-header">
  121.  
  122. <xsl:text>
  123. </xsl:text> <!-- insert line break -->
  124.  
  125.       <xsl:call-template name="super-menu" />
  126.  
  127. <xsl:text>
  128. </xsl:text> <!-- insert line break -->
  129.  
  130.       <p class="apache">
  131.         <xsl:value-of select="$messages/message[@name='apachehttpserver']"/>
  132.       </p>
  133.  
  134. <xsl:text>
  135. </xsl:text> <!-- insert line break -->
  136.  
  137.       <img src="{$path}/images/feather.gif" alt="" />
  138.     </div> <!-- /page-header -->
  139.  
  140. <xsl:text>
  141. </xsl:text> <!-- insert line break -->
  142.  
  143.     <div class="up">
  144.       <a href="./">
  145.         <xsl:if test="parentdocument">
  146.           <xsl:attribute name="href"><xsl:value-of select="parentdocument/@href"/></xsl:attribute>
  147.         </xsl:if>
  148.         <img src="{$path}/images/left.gif" alt="<-" title="<-" />
  149.       </a>
  150.     </div>
  151.  
  152. <xsl:text>
  153. </xsl:text> <!-- insert line break -->
  154.  
  155.     <div id="path">
  156.  
  157. <xsl:text>
  158. </xsl:text> <!-- insert line break -->
  159.  
  160.       <a href="http://www.apache.org/">
  161.         <xsl:value-of select="$messages/message[@name='apache']"/>
  162.       </a>
  163.       <xsl:text> > </xsl:text>
  164.       <a href="http://httpd.apache.org/">
  165.         <xsl:value-of select="$messages/message[@name='http-server']"/>
  166.       </a>
  167.       <xsl:text> > </xsl:text>
  168.       <a href="http://httpd.apache.org/docs-project/">
  169.         <xsl:value-of select="$messages/message[@name='documentation']"/>
  170.       </a>
  171.       <xsl:text> > </xsl:text>
  172.       <a href="{$path}/">
  173.         <xsl:value-of select="$messages/message[@name='version']"/>
  174.       </a>
  175.       <xsl:if test="../modulesynopsis or ../directiveindex or ../quickreference">
  176.         <xsl:text> > </xsl:text>
  177.         <a href="./">
  178.           <xsl:value-of select="$messages/message[@name='modules']"/>
  179.         </a>
  180.       </xsl:if>
  181.       <xsl:if test="parentdocument/text()">
  182.         <xsl:text> > </xsl:text>
  183.         <a href="{parentdocument/@href}">
  184.           <xsl:value-of select="parentdocument"/>
  185.         </a>
  186.       </xsl:if>
  187.     </div> <!-- /path -->
  188.   </xsl:template>
  189.   <!-- /top -->
  190.  
  191.  
  192.   <!--                                                            -->
  193.   <!-- page bottom                                                -->
  194.   <!--                                                            -->
  195.   <xsl:template name="bottom">
  196.     <div id="footer">
  197.  
  198. <xsl:text>
  199. </xsl:text> <!-- insert line break -->
  200.  
  201.       <p class="apache">
  202.         <xsl:value-of select="$messages/message[@name='maintainedby']"/>
  203.         <xsl:text> </xsl:text>
  204.         <a href="http://httpd.apache.org/docs-project/"
  205.           >Apache HTTP Server Documentation Project</a>
  206.       </p>
  207.  
  208. <xsl:text>
  209. </xsl:text> <!-- insert line break -->
  210.  
  211.       <xsl:call-template name="super-menu"/>
  212.  
  213.     </div> <!-- /footer -->
  214.   </xsl:template>
  215.   <!-- /bottom -->
  216.  
  217.  
  218.   <!--                                                            -->
  219.   <!-- Process a documentation section                            -->
  220.   <!--                                                            -->
  221.   <xsl:template match="section">
  222.  
  223.     <xsl:call-template name="toplink"/>
  224.  
  225. <xsl:text>
  226. </xsl:text> <!-- insert line break -->
  227.  
  228.     <div class="section">
  229.  
  230. <xsl:text>
  231. </xsl:text> <!-- insert line break -->
  232.  
  233.       <!-- Section heading -->
  234.       <h2>
  235.         <xsl:if test="@id">
  236.           <a id="{@id}" name="{@id}">
  237.             <xsl:apply-templates select="title" mode="print"/>
  238.           </a>
  239.         </xsl:if>
  240.  
  241.         <xsl:if test="not(@id)">
  242.           <xsl:apply-templates select="title" mode="print"/>
  243.         </xsl:if>
  244.       </h2>
  245.  
  246.       <!-- Section body -->
  247.       <xsl:apply-templates/>
  248.  
  249.     </div> <!-- /.section -->
  250.   </xsl:template>
  251.   <!-- /section -->
  252.  
  253.  
  254.   <!--                                                            -->
  255.   <!-- handle subsections (lower level headings)                  -->
  256.   <!--                                                            -->
  257.   <xsl:template match="section/section">
  258.  
  259.     <!-- Section heading -->
  260.     <h3>
  261.       <xsl:if test="@id">
  262.         <a id="{@id}" name="{@id}">
  263.           <xsl:apply-templates select="title" mode="print"/>
  264.         </a>
  265.       </xsl:if>
  266.  
  267.       <xsl:if test="not(@id)">
  268.         <xsl:apply-templates select="title" mode="print"/>
  269.       </xsl:if>
  270.     </h3>
  271.  
  272.     <!-- Section body -->
  273.     <xsl:apply-templates/>
  274.  
  275.   </xsl:template>
  276.   <!-- /section/section -->
  277.  
  278.  
  279.   <!--                                                            -->
  280.   <!-- handle subsubsections (h4)                                 -->
  281.   <!--                                                            -->
  282.   <xsl:template match="section/section/section">
  283.  
  284.     <!-- Section heading -->
  285.     <h4>
  286.       <xsl:if test="@id">
  287.         <a id="{@id}" name="{@id}">
  288.           <xsl:apply-templates select="title" mode="print"/>
  289.         </a>
  290.       </xsl:if>
  291.  
  292.       <xsl:if test="not(@id)">
  293.         <xsl:apply-templates select="title" mode="print"/>
  294.       </xsl:if>
  295.     </h4>
  296.  
  297.     <!-- Section body -->
  298.     <xsl:apply-templates/>
  299.  
  300.   </xsl:template>
  301.   <!-- /section/section/section -->
  302.  
  303.  
  304.   <!--                                                            -->
  305.   <!-- section nesting > h4 is not supported for now              -->
  306.   <!--                                                            -->
  307.   <xsl:template match="section/section/section/section">
  308.     <xsl:message terminate="yes">
  309.       <xsl:text>FATAL: exceeding maximum section nesting level.
  310.  
  311.       Perhaps you should consider to split your document into
  312.       several ones...
  313.       </xsl:text>
  314.     </xsl:message>
  315.   </xsl:template>
  316.   <!-- /section/section/section/section -->
  317.  
  318.  
  319.   <!--                                                            -->
  320.   <!-- (sub)section titles                                        -->
  321.   <!--                                                            -->
  322.   <xsl:template match="section/title" mode="print">
  323.     <xsl:apply-templates/>
  324.   </xsl:template>
  325.  
  326.   <xsl:template match="section/title">
  327.     <!-- Don't print the title twice -->
  328.   </xsl:template>
  329.   <!-- /section/title -->
  330.  
  331.  
  332.   <!--                                                            -->
  333.   <!-- generate section index                                     -->
  334.   <!--                                                            -->
  335.   <xsl:template match="section" mode="index">
  336.  
  337.     <xsl:if test="@id">
  338.       <li>
  339.         <img src="{$path}/images/down.gif" alt="" />
  340.         <xsl:text> </xsl:text>
  341.         <a href="#{@id}">
  342.           <xsl:apply-templates select="title" mode="print"/>
  343.         </a>
  344.       </li>
  345.  
  346. <xsl:text>
  347. </xsl:text> <!-- insert line break -->
  348.  
  349.     </xsl:if>
  350.  
  351.     <xsl:if test="not(@id)">
  352.       <li>
  353.         <img src="{$path}/images/down.gif" alt="" />
  354.         <xsl:text> </xsl:text>
  355.         <xsl:apply-templates select="title" mode="print"/>
  356.  
  357.         <!-- nested sections -->
  358.         <!-- NOT FOR NOW     -->
  359.         <!--
  360.         <xsl:if test="section">
  361.           <ul>
  362.             <xsl:apply-templates select="section" mode="index"/>
  363.           </ul>
  364.         </xsl:if>
  365.         -->
  366.       </li>
  367.  
  368. <xsl:text>
  369. </xsl:text> <!-- insert line break -->
  370.  
  371.     </xsl:if>
  372.  
  373.   </xsl:template>
  374.   <!-- /section index -->
  375.  
  376.  
  377.   <!--                                                            -->
  378.   <!-- docs super menu                                            -->
  379.   <!--                                                            -->
  380.   <xsl:template name="super-menu">
  381.     <p class="menu">
  382.       <a href="{$path}/mod/">
  383.         <xsl:value-of select="$messages/message[@name='modules']"/>
  384.       </a>
  385.       <xsl:text> | </xsl:text>
  386.       <a href="{$path}/mod/directives.html">
  387.         <xsl:value-of select="$messages/message[@name='directives']"/>
  388.       </a>
  389.       <xsl:text> | </xsl:text>
  390.       <a href="{$path}/faq/">
  391.         <xsl:value-of select="$messages/message[@name='faq']"/>
  392.       </a>
  393.       <xsl:text> | </xsl:text>
  394.       <a href="{$path}/glossary.html">
  395.         <xsl:value-of select="$messages/message[@name='glossary']"/>
  396.       </a>
  397.       <xsl:text> | </xsl:text>
  398.       <a href="{$path}/sitemap.html">
  399.         <xsl:value-of select="$messages/message[@name='sitemap']"/>
  400.       </a>
  401.     </p>
  402.   </xsl:template>
  403.   <!-- /super-menu -->
  404.  
  405.  
  406.   <!--                                                    -->
  407.   <!-- <example>                                          -->
  408.   <!-- iterate over *all* nodes; bare text and other      -->
  409.   <!-- inline stuff is wrapped into <p><code>, block      -->
  410.   <!-- level elements (defined in $blockelements) are     -->
  411.   <!-- applied "as is"                                    -->
  412.   <!--                                                    -->
  413.   <xsl:variable name="blocks"
  414.               select="concat(' ', normalize-space($blockelements), ' ')"/>
  415.  
  416.   <xsl:template match="example">
  417.     <div class="example">
  418.        <xsl:apply-templates select="title" mode="print"/>
  419.  
  420.        <xsl:for-each select="./node()">
  421.          <xsl:variable name="is-block-node" select="boolean(contains($blocks, concat(' ',local-name(),' ')))"/>
  422.          <xsl:variable name="bb" select="count(preceding-sibling::*[contains($blocks,concat(' ',local-name(),' '))])"/>
  423.  
  424.          <xsl:if test="$is-block-node or position()=last()">
  425.            <xsl:variable name="content">
  426.              <xsl:apply-templates select="preceding-sibling::node()[count(preceding-sibling::*[contains($blocks,concat(' ',local-name(),' '))]) >= $bb]"/>
  427.              <xsl:apply-templates select="self::node()[not($is-block-node)]"/>
  428.            </xsl:variable>
  429.  
  430.            <!-- apply bare text only, if it's not only \s or empty -->
  431.            <xsl:if test="normalize-space($content) != ''">
  432.              <p><code>
  433.                <xsl:copy-of select="$content"/>
  434.              </code></p>
  435.            </xsl:if>
  436.  
  437.            <xsl:apply-templates select="self::node()[$is-block-node]"/>
  438.          </xsl:if>
  439.  
  440.        </xsl:for-each>
  441.        <!-- /node() -->
  442.  
  443.      </div> <!-- /.example -->
  444.   </xsl:template>
  445.   <!-- /example -->
  446.  
  447.  
  448.   <!--                                                    -->
  449.   <!-- example/title                                      -->
  450.   <!--                                                    -->
  451.   <xsl:template match="example/title" mode="print">
  452.     <h3>
  453.         <xsl:apply-templates/>
  454.     </h3>
  455.   </xsl:template>
  456.  
  457.   <xsl:template match="example/title">
  458.     <!-- don't print twice -->
  459.   </xsl:template>
  460.   <!-- /example/title -->
  461.  
  462.  
  463.   <!--                                                    -->
  464.   <!-- indent                                             -->
  465.   <!--                                                    -->
  466.   <xsl:template match="indent">
  467.     <span class="indent">
  468.       <xsl:apply-templates/>
  469.     </span>
  470.   </xsl:template>
  471.   <!-- /indent -->
  472.  
  473.  
  474.   <!--                                                    -->
  475.   <!-- <note>                                             -->
  476.   <!-- Notes are placed in a table. Uses different back-  -->
  477.   <!-- ground colors, depending on type of note.          -->
  478.   <!--                                                    -->
  479.   <xsl:template match="note">
  480.     <div class="note">
  481.       <xsl:if test="@type='warning'">
  482.         <xsl:attribute name="class">warning</xsl:attribute>
  483.       </xsl:if>
  484.  
  485.       <xsl:apply-templates/>
  486.     </div>
  487.   </xsl:template>
  488.   <!-- /note -->
  489.  
  490.  
  491.   <!--                                                    -->
  492.   <!-- <note><title>                                      -->
  493.   <!--                                                    -->
  494.   <xsl:template match="note/title">
  495.     <h3>
  496.       <xsl:apply-templates/>
  497.     </h3>
  498.   </xsl:template>
  499.   <!-- /note/title -->
  500.  
  501.  
  502.   <!--                                                    -->
  503.   <!-- <directive>                                        -->
  504.   <!-- Inserts link to another directive, which might be  -->
  505.   <!-- in another module. References are converted into   -->
  506.   <!-- lower case.                                        -->
  507.   <!--                                                    -->
  508.   <xsl:template match="directive" name="directive">
  509.     <code class="directive">
  510.  
  511.       <xsl:if test="@module">
  512.         <xsl:variable name="lowerdirective" select="translate(., $uppercase, $lowercase)"/>
  513.  
  514.         <xsl:choose>
  515.           <xsl:when test="$in-modulesynopsis = '1' and @module = /modulesynopsis/name">
  516.             <a href="#{$lowerdirective}">
  517.               <xsl:if test="@type='section'"><</xsl:if>
  518.               <xsl:value-of select="."/>
  519.               <xsl:if test="@type='section'">></xsl:if>
  520.             </a>
  521.           </xsl:when>
  522.  
  523.           <xsl:otherwise>
  524.             <xsl:variable name="obs_">
  525.               <xsl:if test="@status = 'obsolete'">obs_</xsl:if>
  526.             </xsl:variable>
  527.  
  528.             <a href="{$path}/mod/{$obs_}{@module}.html#{$lowerdirective}">
  529.               <xsl:if test="@type='section'"><</xsl:if>
  530.               <xsl:value-of select="."/>
  531.               <xsl:if test="@type='section'">></xsl:if>
  532.             </a>
  533.           </xsl:otherwise>
  534.         </xsl:choose>
  535.       </xsl:if>
  536.  
  537.       <xsl:if test="not(@module)">
  538.         <xsl:if test="@type='section'"><</xsl:if>
  539.         <xsl:value-of select="."/>
  540.         <xsl:if test="@type='section'">></xsl:if>
  541.       </xsl:if>
  542.  
  543.     </code>
  544.   </xsl:template>
  545.   <!-- /directive -->
  546.  
  547.  
  548.   <!--                                                    -->
  549.   <!-- <module>                                           -->
  550.   <!-- Inserts a link to refereed module                  -->
  551.   <!--                                                    -->
  552.   <xsl:template match="module" name="module">
  553.     <xsl:variable name="obs_">
  554.       <xsl:if test="@status = 'obsolete'">obs_</xsl:if>
  555.     </xsl:variable>
  556.  
  557.     <code class="module">
  558.       <a href="{$path}/mod/{$obs_}{.}.html">
  559.         <xsl:value-of select="."/>
  560.       </a>
  561.     </code>
  562.   </xsl:template>
  563.   <!-- /module -->
  564.  
  565.  
  566.   <!--                                                    -->
  567.   <!-- <related>                                          -->
  568.   <!--                                                    -->
  569.   <xsl:template match="related">
  570.     <table class="related">
  571.       <tr>
  572.         <th>
  573.           <xsl:value-of select="$messages/message[@name='relatedmodules']"/>
  574.         </th>
  575.         <th>
  576.           <xsl:value-of select="$messages/message[@name='relateddirectives']"/>
  577.         </th>
  578.       </tr>
  579.  
  580.       <tr>
  581.         <td>
  582.           <xsl:if test="count(modulelist/*) > 0">
  583.         <ul>
  584.           <xsl:apply-templates select="modulelist"/>
  585.         </ul>
  586.       </xsl:if>
  587.         </td>
  588.  
  589.         <td>
  590.           <xsl:if test="count(directivelist/*) > 0">
  591.             <ul>
  592.           <xsl:apply-templates select="directivelist"/>
  593.             </ul>
  594.           </xsl:if>
  595.         </td>
  596.       </tr>
  597.     </table>
  598.   </xsl:template>
  599.   <!-- /related -->
  600.  
  601.  
  602.   <xsl:template match="related/modulelist">
  603.     <xsl:for-each select="module">
  604.       <li>
  605.         <xsl:call-template name="module"/>
  606.       </li>
  607.     </xsl:for-each>
  608.   </xsl:template>
  609.  
  610.  
  611.  
  612.   <xsl:template match="related/directivelist">
  613.     <xsl:for-each select="directive">
  614.       <li>
  615.         <xsl:call-template name="directive"/>
  616.       </li>
  617.     </xsl:for-each>
  618.   </xsl:template>
  619.  
  620.  
  621.   <!--                                                    -->
  622.   <!-- <table>                                            -->
  623.   <!--                                                    -->
  624.   <xsl:template match="table">
  625.     <table>
  626.       <xsl:if test="@border">
  627.         <xsl:attribute name="class">bordered</xsl:attribute>
  628.       </xsl:if>
  629.  
  630.       <xsl:choose>
  631.         <xsl:when test="@style = 'zebra'">
  632.           <xsl:for-each select="tr">
  633.  
  634.             <tr><xsl:choose>
  635.               <xsl:when test="count(td) = 0">
  636.                 <xsl:attribute name="class">header</xsl:attribute>
  637.               </xsl:when>
  638.  
  639.               <xsl:when test="position() mod 2 = (count(preceding-sibling::*[count(td) = 0]) mod 2)">
  640.                 <xsl:attribute name="class">odd</xsl:attribute>
  641.               </xsl:when></xsl:choose>
  642.  
  643.               <xsl:apply-templates />
  644.             </tr>
  645.  
  646. <xsl:text>
  647. </xsl:text> <!-- insert line break -->
  648.  
  649.           </xsl:for-each>
  650.         </xsl:when>
  651.  
  652.         <xsl:otherwise>
  653.           <xsl:apply-templates />
  654.         </xsl:otherwise>
  655.       </xsl:choose>
  656.     </table>
  657.  
  658.   </xsl:template>
  659.   <!-- /table -->
  660.  
  661.  
  662.   <!--                                                    -->
  663.   <!-- <ol type                                           -->
  664.   <!--                                                    -->
  665.   <xsl:template match="ol">
  666.     <ol>
  667.       <xsl:if test="@type = 'A'">
  668.         <xsl:attribute name="class">up-A</xsl:attribute>
  669.       </xsl:if>
  670.  
  671.       <xsl:apply-templates/>
  672.     </ol>
  673.   </xsl:template>
  674.   <!-- /ol type -->
  675.  
  676.  
  677.   <!--                                                    -->
  678.   <!-- <summary>                                          -->
  679.   <!-- Passes through content                             -->
  680.   <!--                                                    -->
  681.   <xsl:template match="summary">
  682.     <xsl:apply-templates/>
  683.   </xsl:template>
  684.   <!-- /summary -->
  685.  
  686.  
  687.   <!--                                                    -->
  688.   <!-- <description>                                      -->
  689.   <!-- Passes through content                             -->
  690.   <!--                                                    -->
  691.   <xsl:template match="description">
  692.     <xsl:apply-templates/>
  693.   </xsl:template>
  694.   <!-- /description -->
  695.  
  696.  
  697.   <!--                                                    -->
  698.   <!-- <hint>                                             -->
  699.   <!-- Passes through content                             -->
  700.   <!--                                                    -->
  701.   <xsl:template match="hint">
  702.     <xsl:apply-templates/>
  703.   </xsl:template>
  704.   <!-- /description -->
  705.  
  706.  
  707.   <!--                                                    -->
  708.   <!-- <usage>                                            -->
  709.   <!-- Passes through content                             -->
  710.   <!--                                                    -->
  711.   <xsl:template match="usage">
  712.     <xsl:apply-templates/>
  713.   </xsl:template>
  714.   <!-- /usage -->
  715.  
  716.  
  717.   <!--                                                    -->
  718.   <!-- <syntax>                                           -->
  719.   <!-- Passes through content                             -->
  720.   <!--                                                    -->
  721.   <xsl:template match="syntax">
  722.     <xsl:apply-templates/>
  723.   </xsl:template>
  724.   <!-- /syntax -->
  725.  
  726.   <!--                                                    -->
  727.   <!-- <default>                                          -->
  728.   <!-- Passes through content                             -->
  729.   <!--                                                    -->
  730.   <xsl:template match="default">
  731.     <xsl:apply-templates/>
  732.   </xsl:template>
  733.   <!-- /default -->
  734.  
  735.  
  736.   <!--                                                    -->
  737.   <!-- toplink                                            -->
  738.   <!--                                                    -->
  739.   <xsl:template name="toplink">
  740.     <div class="top">
  741.       <a href="#page-header"><img src="{$path}/images/up.gif" alt="top" /></a>
  742.     </div>
  743.   </xsl:template>
  744.   <!-- /toplink -->
  745.  
  746.  
  747.   <!--                                                    -->
  748.   <!-- <transnote>                                        -->
  749.   <!--                                                    -->
  750.   <xsl:template match="transnote">
  751.     <span class="transnote">
  752.       <xsl:text>(</xsl:text><em>
  753.       <xsl:value-of select="$messages/message[@name='transnote']"/>
  754.       </em><xsl:text> </xsl:text>
  755.       <xsl:apply-templates/>
  756.       <xsl:text>)</xsl:text>
  757.     </span>
  758.   </xsl:template>
  759.   <!-- /note/title -->
  760.  
  761.  
  762.   <!--                                                    -->
  763.   <!-- Process everything else by just passing it through -->
  764.   <!--                                                    -->
  765.   <xsl:template match="*|@*">
  766.     <xsl:copy>
  767.       <xsl:apply-templates select="@*|*|text()"/>
  768.     </xsl:copy>
  769.   </xsl:template>
  770.  
  771.  
  772.   <!--                                                    -->
  773.   <!-- create a letter bar                                -->
  774.   <!-- used in several documents                          -->
  775.   <!--                                                    -->
  776.   <xsl:template name="letter-bar">
  777.   <xsl:param name="letters"/>
  778.   <xsl:param name="first"/>
  779.  
  780.     <xsl:if test="not($first)">
  781.       <xsl:text> | </xsl:text>
  782.     </xsl:if>
  783.  
  784.     <a href="#{substring($letters,1,1)}">
  785.       <xsl:text> </xsl:text>
  786.       <xsl:value-of select="substring($letters,1,1)"/>
  787.       <xsl:text> </xsl:text>
  788.     </a>
  789.  
  790.     <xsl:if test="string-length($letters) > 1">
  791.       <xsl:call-template name="letter-bar">
  792.         <xsl:with-param name="letters" select="substring($letters,2)"/>
  793.         <xsl:with-param name="first" select="false()"/>
  794.       </xsl:call-template>
  795.     </xsl:if>
  796.   </xsl:template>
  797.  
  798.  
  799.   <!--                                                    -->
  800.   <!-- template(s) for collecting all start letters       -->
  801.   <!-- of directives                                      -->
  802.   <!-- used in several documents                          -->
  803.   <!--                                                    -->
  804.   <xsl:template name="directive-startletters">
  805.   <xsl:param name="directives"/>
  806.  
  807.     <xsl:call-template name="_squeeze-letters">
  808.       <xsl:with-param name="lastletter" select="''"/>
  809.  
  810.       <xsl:with-param name="letters">
  811.         <xsl:for-each select="$directives">
  812.         <xsl:sort select="name"/>
  813.           <xsl:value-of select="translate(substring(normalize-space(name),1,1),$lowercase,$uppercase)"/>
  814.         </xsl:for-each>
  815.       </xsl:with-param>
  816.     </xsl:call-template>
  817.  
  818.   </xsl:template>
  819.  
  820.   <xsl:template name="_squeeze-letters">
  821.   <xsl:param name="letters"/>
  822.   <xsl:param name="lastletter"/>
  823.  
  824.     <xsl:variable name="current" select="substring($letters,1,1)"/>
  825.  
  826.     <xsl:if test="$lastletter != $current">
  827.       <xsl:value-of select="$current"/>
  828.     </xsl:if>
  829.  
  830.     <xsl:if test="string-length($letters) > 1">
  831.       <xsl:call-template name="_squeeze-letters">
  832.         <xsl:with-param name="letters" select="substring($letters,2)"/>
  833.         <xsl:with-param name="lastletter" select="$current"/>
  834.       </xsl:call-template>
  835.     </xsl:if>
  836.   </xsl:template>
  837.  
  838.  
  839.   <xsl:template name="module-translatename">
  840.   <xsl:param name="name"/>
  841.  
  842.     <xsl:variable name="sname" select="translate($name,$lowercase,$uppercase)"/>
  843.  
  844.     <xsl:choose>
  845.       <xsl:when test="starts-with($sname,'MOD_') or starts-with($sname,'MPM_')">
  846.         <xsl:value-of select="substring($name, 5)"/>
  847.       </xsl:when>
  848.       <xsl:when test="starts-with($sname,'MPMT_')">
  849.         <xsl:value-of select="substring($name, 6)"/>
  850.       </xsl:when>
  851.       <xsl:otherwise>
  852.         <xsl:value-of select="$name"/>
  853.       </xsl:otherwise>
  854.     </xsl:choose>
  855.   </xsl:template>
  856.   <!-- /module-translatename -->
  857.  
  858. </xsl:stylesheet>