home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 May / PCWorld_2004-05_cd.bin / komunikace / apache / apache_2.0.48-win32-x86-no_ssl.msi / Data.Cab / F213264_common.xsl < prev    next >
Extensible Markup Language  |  2003-06-30  |  39KB  |  1,050 lines

  1. <?xml version="1.0"?><!--
  2. /* ====================================================================
  3.  * The Apache Software License, Version 1.1
  4.  *
  5.  * Copyright (c) 2002-2003 The Apache Software Foundation.  All rights
  6.  * reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  *
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  *
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in
  17.  *    the documentation and/or other materials provided with the
  18.  *    distribution.
  19.  *
  20.  * 3. The end-user documentation included with the redistribution,
  21.  *    if any, must include the following acknowledgment:
  22.  *       "This product includes software developed by the
  23.  *        Apache Software Foundation (http://www.apache.org/)."
  24.  *    Alternately, this acknowledgment may appear in the software itself,
  25.  *    if and wherever such third-party acknowledgments normally appear.
  26.  *
  27.  * 4. The names "Apache" and "Apache Software Foundation" must
  28.  *    not be used to endorse or promote products derived from this
  29.  *    software without prior written permission. For written
  30.  *    permission, please contact apache@apache.org.
  31.  *
  32.  * 5. Products derived from this software may not be called "Apache",
  33.  *    nor may "Apache" appear in their name, without prior written
  34.  *    permission of the Apache Software Foundation.
  35.  *
  36.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  37.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  38.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  39.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  40.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  41.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  42.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  43.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  44.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  45.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  46.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  47.  * SUCH DAMAGE.
  48.  * ====================================================================
  49.  *
  50.  * This software consists of voluntary contributions made by many
  51.  * individuals on behalf of the Apache Software Foundation.  For more
  52.  * information on the Apache Software Foundation, please see
  53.  * <http://www.apache.org/>.
  54.  */ -->
  55. <!DOCTYPE xsl:stylesheet [
  56.     <!ENTITY nbsp SYSTEM "util/nbsp.xml">
  57.     <!ENTITY lf SYSTEM "util/lf.xml">
  58. ]>
  59. <xsl:stylesheet version="1.0"
  60.               xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  61.                   xmlns="http://www.w3.org/1999/xhtml">
  62.  
  63. <!--                                                                      -->
  64. <!-- Please, don't hard-code output strings! Use the language             -->
  65. <!-- files and the translation "stuff"...                                 -->
  66. <!--                                                                      -->
  67.  
  68. <!-- Injected variables:                                                  -->
  69. <!--   $is-chm          - (boolean) target is for CHM generation or not   -->
  70. <!--   $is-zip          - (boolean) target is for ZIP generation or not   -->
  71. <!--   $messages        - (node-set) localized common text snippets       -->
  72. <!--   $output-encoding - (string) MIME charset name of the output        -->
  73. <!--                      encoding                                        -->
  74.  
  75. <!-- Constants used for case translation -->
  76. <xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
  77. <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
  78.  
  79. <!-- space separated list of blockelements defined in common.dtd -->
  80. <!--    used for inline content catching in <example>s           -->
  81. <xsl:variable name="blockelements">
  82.     p  example  note  table  ul  ol  dl  pre  img  blockquote
  83. </xsl:variable>
  84.  
  85. <!-- relative path to /manual/ -->
  86. <xsl:variable name="path" select="document(/*/@metafile)/metafile/relpath" />
  87.  
  88. <!-- load outsourced page types -->
  89. <xsl:include href="moduleindex.xsl" />
  90. <xsl:include href="directiveindex.xsl" />
  91. <xsl:include href="manualpage.xsl" />
  92. <xsl:include href="synopsis.xsl" />
  93. <xsl:include href="sitemap.xsl" />
  94. <xsl:include href="indexpage.xsl" />
  95. <xsl:include href="quickreference.xsl" />
  96. <xsl:include href="faq.xsl" />
  97.  
  98. <!-- load utility snippets -->
  99. <xsl:include href="util/modtrans.xsl" />
  100.  
  101. <!-- make sure, we set relative anchors only, if we're actually -->
  102. <!-- transforming a modulefile (see <directive> template)       -->
  103. <xsl:variable name="in-modulesynopsis" select="boolean(/modulesynopsis)" />
  104.  
  105. <!-- when referencing to a directory, we may need to complete the path -->
  106. <!-- with the index file (for offline applications like *.chm files)   -->
  107. <xsl:variable name="index-file">
  108.     <xsl:if test="$is-chm or $is-zip">index.html</xsl:if>
  109. </xsl:variable>
  110.  
  111. <!-- it may be desired to open external targets in a new window -->
  112. <xsl:variable name="ext-target" select="boolean($is-chm)" />
  113.  
  114. <!-- #################################################################### -->
  115. <!-- Utility templates for constructing pages                             -->
  116. <!-- #################################################################### -->
  117.  
  118. <!-- ==================================================================== -->
  119. <!-- HTML head                                                            -->
  120. <!-- ==================================================================== -->
  121. <xsl:template name="head">
  122. <head>
  123.     <!-- the meta element is necessary for offline handling like CHM -->
  124.     <xsl:choose>
  125.     <xsl:when test="$is-chm or $is-zip">
  126.         <meta http-equiv="Content-Type"
  127.                  content="text/html; charset={$output-encoding}" />
  128.     </xsl:when>
  129.     <xsl:otherwise>
  130.         <xsl:comment>
  131.             &lf;
  132.             <xsl:text>        </xsl:text>
  133.             <xsl:text>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:text>
  134.             &lf;
  135.             <xsl:text>              </xsl:text>
  136.             <xsl:text>This file is generated from xml source: DO NOT EDIT</xsl:text>
  137.             &lf;
  138.             <xsl:text>        </xsl:text>
  139.             <xsl:text>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:text>
  140.             &lf;
  141.             <xsl:text>      </xsl:text>
  142.         </xsl:comment>
  143.     </xsl:otherwise>
  144.     </xsl:choose>&lf;
  145.  
  146.     <title>
  147.         <xsl:choose>
  148.         <xsl:when test="name">
  149.             <xsl:value-of select="name"/>
  150.         </xsl:when>
  151.  
  152.         <xsl:otherwise>
  153.             <xsl:value-of select="title"/>
  154.         </xsl:otherwise>
  155.         </xsl:choose>
  156.  
  157.         <xsl:text> </xsl:text>
  158.         <xsl:value-of select="$messages/message[@name='apachetitle']"/>
  159.     </title>&lf;
  160.  
  161.     <!-- chm files get a slightly different stylesheet -->
  162.     <xsl:choose>
  163.     <xsl:when test="$is-chm">
  164.         <link type="text/css" rel="stylesheet" media="all"
  165.               href="{$path}/style/css/manual-chm.css" />
  166.     </xsl:when>
  167.     <!-- zip packages do also -->
  168.     <xsl:when test="$is-zip">
  169.         <link title="Main stylesheet"  type="text/css" media="all"
  170.                 rel="stylesheet"
  171.                href="{$path}/style/css/manual-zip.css" />&lf;
  172.         <link title="No Sidebar - Default font size" type="text/css" media="all"
  173.                rel="alternate stylesheet"
  174.                href="{$path}/style/css/manual-zip-100pc.css"/>
  175.     </xsl:when>
  176.     <xsl:otherwise>
  177.         <link title="Main stylesheet"  type="text/css" media="all"
  178.                 rel="stylesheet"
  179.                href="{$path}/style/css/manual.css" />&lf;
  180.         <link title="No Sidebar - Default font size" type="text/css" media="all"
  181.                rel="alternate stylesheet"
  182.                href="{$path}/style/css/manual-loose-100pc.css"/>
  183.     </xsl:otherwise>
  184.     </xsl:choose>&lf;
  185.  
  186.     <link type="text/css" media="print"
  187.            rel="stylesheet"
  188.            href="{$path}/style/css/manual-print.css"/>
  189.  
  190.     <!-- chm files do not need a favicon -->
  191.     <xsl:if test="not($is-chm or $is-zip)">&lf;
  192.         <link rel="shortcut icon" href="{$path}/images/favicon.ico" />
  193.     </xsl:if>
  194. </head>
  195. </xsl:template>
  196. <!-- /head -->
  197.  
  198.  
  199. <!-- ==================================================================== -->
  200. <!-- page top                                                             -->
  201. <!-- ==================================================================== -->
  202. <xsl:template name="top">
  203. <div id="page-header">&lf;
  204.     <xsl:call-template name="super-menu" />&lf;
  205.  
  206.     <p class="apache">
  207.         <xsl:value-of select="$messages/message[@name='apachehttpserver']"/>
  208.     </p>&lf;
  209.  
  210.     <img src="{$path}/images/feather.gif" alt="" />
  211. </div>&lf; <!-- /page-header -->
  212.  
  213. <div class="up">
  214.     <a href="./{$index-file}">
  215.         <xsl:if test="parentdocument">
  216.             <xsl:attribute name="href">
  217.                 <xsl:value-of select="parentdocument/@href"/>
  218.             </xsl:attribute>
  219.  
  220.             <xsl:call-template name="helper.uri.fix">
  221.                 <xsl:with-param name="uri" select="parentdocument/@href" />
  222.             </xsl:call-template>
  223.       </xsl:if>
  224.  
  225.       <img src="{$path}/images/left.gif" alt="<-" title="<-" />
  226.     </a>
  227. </div>&lf;
  228.  
  229. <div id="path">&lf;
  230.     <a href="http://www.apache.org/">
  231.         <xsl:if test="$ext-target">
  232.             <xsl:attribute name="target">_blank</xsl:attribute>
  233.         </xsl:if>
  234.         <xsl:value-of select="$messages/message[@name='apache']" />
  235.     </a>
  236.  
  237.     <xsl:text> > </xsl:text>
  238.  
  239.     <a href="http://httpd.apache.org/">
  240.         <xsl:if test="$ext-target">
  241.             <xsl:attribute name="target">_blank</xsl:attribute>
  242.         </xsl:if>
  243.         <xsl:value-of select="$messages/message[@name='http-server']" />
  244.     </a>
  245.  
  246.     <xsl:text> > </xsl:text>
  247.  
  248.     <a href="http://httpd.apache.org/docs-project/">
  249.         <xsl:if test="$ext-target">
  250.             <xsl:attribute name="target">_blank</xsl:attribute>
  251.         </xsl:if>
  252.         <xsl:value-of select="$messages/message[@name='documentation']" />
  253.     </a>
  254.  
  255.     <xsl:if test="not(../indexpage)">
  256.     <xsl:text> > </xsl:text>
  257.  
  258.     <a href="{$path}/{$index-file}">
  259.         <xsl:value-of select="$messages/message[@name='version']"/>
  260.     </a>
  261.     </xsl:if>
  262.  
  263.     <xsl:if test="../modulesynopsis or ../directiveindex or ../quickreference">
  264.     <xsl:text> > </xsl:text>
  265.  
  266.     <a href="./{$index-file}">
  267.         <xsl:value-of select="$messages/message[@name='modules']"/>
  268.     </a>
  269.     </xsl:if>
  270.  
  271.     <xsl:if test="parentdocument/text()">
  272.     <xsl:text> > </xsl:text>
  273.  
  274.     <a href="{parentdocument/@href}">
  275.         <xsl:call-template name="helper.uri.fix">
  276.             <xsl:with-param name="uri" select="parentdocument/@href"/>
  277.         </xsl:call-template>
  278.         <xsl:value-of select="parentdocument"/>
  279.     </a>
  280.     </xsl:if>
  281. </div> <!-- /path -->
  282. </xsl:template>
  283. <!-- /top -->
  284.  
  285.  
  286. <!-- ==================================================================== -->
  287. <!-- page bottom                                                          -->
  288. <!-- ==================================================================== -->
  289. <xsl:template name="bottom">
  290. <xsl:call-template name="langavail">
  291.     <xsl:with-param name="position" select="'bottom'" />
  292. </xsl:call-template>
  293.  
  294. <div id="footer">&lf;
  295.     <p class="apache">
  296.         <xsl:value-of select="$messages/message[@name='maintainedby']"/>
  297.         <xsl:text> </xsl:text>
  298.         <a href="http://httpd.apache.org/docs-project/">
  299.             <xsl:if test="$ext-target">
  300.                 <xsl:attribute name="target">_blank</xsl:attribute>
  301.             </xsl:if>
  302.             <xsl:text>Apache HTTP Server Documentation Project</xsl:text>
  303.         </a>
  304.     </p>&lf;
  305.  
  306.     <xsl:call-template name="super-menu"/>
  307.  
  308. </div> <!-- /footer -->
  309. </xsl:template>
  310. <!-- /bottom -->
  311.  
  312.  
  313. <!-- ==================================================================== -->
  314. <!-- build an "available languages" section                               -->
  315. <!-- ==================================================================== -->
  316. <xsl:template name="langavail">
  317. <xsl:param name="position" select="'top'" />
  318. <xsl:variable name="metafile" select="document(/*/@metafile)/metafile" />
  319.  
  320. <xsl:if test="not($is-chm or $is-zip)">
  321. <div class="{$position}lang">&lf;
  322.     <p>
  323.         <span>
  324.             <xsl:value-of select="$messages/message[@name='langavail']" />
  325.             <xsl:text>: </xsl:text>
  326.         </span>
  327.  
  328.         <xsl:for-each select="$metafile/variants/variant">
  329.         <xsl:sort select="." />
  330.  
  331.             <a href="{$path}/{.}{$metafile/path}{$metafile/basename}.html">
  332.                 <xsl:if test="$metafile/basename = 'index'">
  333.                     <xsl:attribute name="href">
  334.                         <xsl:value-of
  335.                             select="concat($path, '/', ., $metafile/path)" />
  336.                     </xsl:attribute>
  337.                 </xsl:if>
  338.                 <xsl:if test="$messages/@lang != .">
  339.                     <xsl:attribute name="hreflang">
  340.                         <xsl:value-of select="." />
  341.                     </xsl:attribute>
  342.                     <xsl:attribute name="rel">alternate</xsl:attribute>
  343.                 </xsl:if>
  344.                 <xsl:attribute name="title">
  345.                     <xsl:choose>
  346.                     <xsl:when test=". != 'fr'"> <!-- no language file avail. -->
  347.                         <xsl:value-of select="document(concat('../lang/', ., '.xml'))
  348.                                               /messages/@langname" />
  349.                     </xsl:when>
  350.                     <xsl:otherwise>
  351.                         <xsl:text>Français</xsl:text>
  352.                     </xsl:otherwise>
  353.                     </xsl:choose>
  354.                 </xsl:attribute>
  355.  
  356.                  
  357.                 <xsl:value-of select="." />
  358.                  
  359.             </a>
  360.             <xsl:if test="position() != last()">
  361.                 <xsl:text> | </xsl:text>
  362.             </xsl:if>
  363.         </xsl:for-each>
  364.     </p>&lf;
  365. </div> <!-- /.{$position}lang -->
  366. </xsl:if>
  367. </xsl:template>
  368. <!-- /langavail -->
  369.  
  370.  
  371. <!-- ==================================================================== -->
  372. <!-- Process a documentation section                                      -->
  373. <!-- ==================================================================== -->
  374. <xsl:template match="section">
  375. <xsl:call-template name="toplink" />&lf;
  376. <div class="section">&lf;
  377.  
  378.     <!-- Section heading -->
  379.     <h2>
  380.         <xsl:choose>
  381.         <xsl:when test="@id">
  382.           <a id="{@id}" name="{@id}">
  383.               <xsl:apply-templates select="title" mode="print" />
  384.           </a>
  385.         </xsl:when>
  386.  
  387.         <xsl:otherwise>
  388.             <xsl:apply-templates select="title" mode="print" />
  389.         </xsl:otherwise>
  390.         </xsl:choose>
  391.     </h2>
  392.  
  393.     <!-- Section body -->
  394.     <xsl:apply-templates />
  395. </div> <!-- /.section -->
  396. </xsl:template>
  397. <!-- /section -->
  398.  
  399.  
  400. <!-- ==================================================================== -->
  401. <!-- handle subsections (lower level headings)                            -->
  402. <!-- ==================================================================== -->
  403. <xsl:template match="section/section">
  404. <!-- Section heading -->
  405. <h3>
  406.     <xsl:choose>
  407.     <xsl:when test="@id">
  408.         <a id="{@id}" name="{@id}">
  409.             <xsl:apply-templates select="title" mode="print" />
  410.         </a>
  411.     </xsl:when>
  412.  
  413.     <xsl:otherwise>
  414.         <xsl:apply-templates select="title" mode="print" />
  415.     </xsl:otherwise>
  416.     </xsl:choose>
  417. </h3>
  418.  
  419. <!-- Section body -->
  420. <xsl:apply-templates />
  421. </xsl:template>
  422. <!-- /section/section -->
  423.  
  424.  
  425. <!-- ==================================================================== -->
  426. <!-- handle subsubsections (h4)                                           -->
  427. <!-- ==================================================================== -->
  428. <xsl:template match="section/section/section">
  429. <!-- Section heading -->
  430. <h4>
  431.     <xsl:choose>
  432.     <xsl:when test="@id">
  433.         <a id="{@id}" name="{@id}">
  434.             <xsl:apply-templates select="title" mode="print" />
  435.         </a>
  436.     </xsl:when>
  437.  
  438.     <xsl:otherwise>
  439.         <xsl:apply-templates select="title" mode="print" />
  440.     </xsl:otherwise>
  441.     </xsl:choose>
  442. </h4>
  443.  
  444. <!-- Section body -->
  445. <xsl:apply-templates/>
  446.  
  447. </xsl:template>
  448. <!-- /section/section/section -->
  449.  
  450.  
  451. <!-- ==================================================================== -->
  452. <!-- section nesting > h4 is not supported for now                        -->
  453. <!-- ==================================================================== -->
  454. <xsl:template match="section/section/section/section">
  455. <xsl:message terminate="yes">
  456.     <xsl:text>FATAL: exceeding maximum section nesting level.</xsl:text>
  457.     &lf;&lf;
  458.     <xsl:text>Perhaps you should consider to split your document into</xsl:text>
  459.     &lf;
  460.     <xsl:text>several ones...</xsl:text>
  461.     &lf;
  462. </xsl:message>
  463. </xsl:template>
  464. <!-- /section/section/section/section -->
  465.  
  466.  
  467. <!-- ==================================================================== -->
  468. <!-- (sub)section titles                                                  -->
  469. <!-- ==================================================================== -->
  470. <xsl:template match="section/title" mode="print">
  471. <xsl:apply-templates/>
  472. </xsl:template>
  473. <xsl:template match="section/title" />
  474. <!-- /section/title -->
  475.  
  476.  
  477. <!-- ==================================================================== -->
  478. <!-- generate section index                                               -->
  479. <!-- ==================================================================== -->
  480. <xsl:template match="section" mode="index">
  481. <li>
  482.     <img src="{$path}/images/down.gif" alt="" />
  483.     <xsl:text> </xsl:text>
  484.     <xsl:choose>
  485.     <xsl:when test="@id">
  486.         <a href="#{@id}">
  487.             <xsl:apply-templates select="title" mode="print" />
  488.         </a>
  489.     </xsl:when>
  490.     <xsl:otherwise>
  491.         <xsl:apply-templates select="title" mode="print" />
  492.     </xsl:otherwise>
  493.     </xsl:choose>
  494. </li>&lf;
  495. </xsl:template>
  496. <!-- /section index -->
  497.  
  498.  
  499. <!-- ==================================================================== -->
  500. <!-- docs super menu                                                      -->
  501. <!-- ==================================================================== -->
  502. <xsl:template name="super-menu">
  503. <p class="menu">
  504.     <a href="{$path}/mod/{$index-file}">
  505.         <xsl:value-of select="$messages/message[@name='modules']" />
  506.     </a>
  507.  
  508.     <xsl:text> | </xsl:text>
  509.  
  510.     <a href="{$path}/mod/directives.html">
  511.         <xsl:value-of select="$messages/message[@name='directives']" />
  512.     </a>
  513.  
  514.     <xsl:text> | </xsl:text>
  515.  
  516.     <a href="{$path}/faq/{$index-file}">
  517.         <xsl:value-of select="$messages/message[@name='faq']" />
  518.     </a>
  519.  
  520.     <xsl:text> | </xsl:text>
  521.  
  522.     <a href="{$path}/glossary.html">
  523.         <xsl:value-of select="$messages/message[@name='glossary']" />
  524.     </a>
  525.  
  526.     <xsl:text> | </xsl:text>
  527.  
  528.     <a href="{$path}/sitemap.html">
  529.         <xsl:value-of select="$messages/message[@name='sitemap']" />
  530.     </a>
  531. </p>
  532. </xsl:template>
  533. <!-- /super-menu -->
  534.  
  535.  
  536. <!-- ==================================================================== -->
  537. <!-- <example>                                                            -->
  538. <!-- iterate over *all* nodes; bare text and other inline stuff is        -->
  539. <!-- wrapped into <p><code>, block level elements (defined in             -->
  540. <!-- $blockelements) are applied "as is"                                  -->
  541. <!-- ==================================================================== -->
  542. <xsl:variable name="blocks"
  543.             select="concat(' ', normalize-space($blockelements), ' ')" />
  544.  
  545. <xsl:template match="example">
  546. <div class="example">
  547.     <xsl:apply-templates select="title" mode="print" />
  548.  
  549.     <xsl:for-each select="./node()">
  550.         <xsl:variable name="is-block-node"
  551.                     select="boolean(contains($blocks,
  552.                                              concat(' ', local-name(), ' ')))"/>
  553.         <!-- bb = (number of) blocks nodes before (the current) -->
  554.         <xsl:variable name="bb"
  555.                     select="count(preceding-sibling::*[
  556.                                 contains($blocks,
  557.                                          concat(' ', local-name(), ' '))])" />
  558.  
  559.         <xsl:if test="$is-block-node or position()=last()">
  560.             <xsl:variable name="content">
  561.                 <!-- phew. short explanation, what happens here:      -->
  562.                 <!-- We want to get the inline stuff between the last -->
  563.                 <!-- block node and the current node.                 -->
  564.                 <!-- So filter all previous nodes for the condition   -->
  565.                 <!-- that the number of block nodes of all of *their* -->
  566.                 <!-- previous nodes is >= $bb. Hope that helps ;-)    -->
  567.                 <xsl:apply-templates
  568.                     select="preceding-sibling::node()[
  569.                                 count(preceding-sibling::*[
  570.                                     contains($blocks,
  571.                                              concat(' ', local-name(), ' '))])
  572.                                 >= $bb]" />
  573.  
  574.                 <xsl:apply-templates
  575.                     select="self::node()[not($is-block-node)]" />
  576.             </xsl:variable>
  577.  
  578.             <!-- apply bare text only, if it's not only \s or empty -->
  579.             <xsl:if test="not(normalize-space($content) = '')">
  580.                 <p><code>
  581.                     <!-- same as $content above. xsl:copy-of seems to make -->
  582.                     <!-- thread problems with xalan-j ... -->
  583.                     <xsl:apply-templates
  584.                         select="preceding-sibling::node()[
  585.                                     count(preceding-sibling::*[
  586.                                         contains($blocks,
  587.                                                  concat(' ', local-name(),
  588.                                                         ' '))])
  589.                                     >= $bb]" />
  590.  
  591.                     <xsl:apply-templates
  592.                         select="self::node()[not($is-block-node)]" />
  593.                 </code></p>
  594.             </xsl:if>
  595.  
  596.             <xsl:apply-templates select="self::node()[$is-block-node]" />
  597.         </xsl:if>
  598.     </xsl:for-each>
  599.     <!-- /node() -->
  600. </div> <!-- /.example -->
  601. </xsl:template>
  602. <!-- /example -->
  603.  
  604.  
  605. <!-- ==================================================================== -->
  606. <!-- example/title                                                        -->
  607. <!-- ==================================================================== -->
  608. <xsl:template match="example/title" mode="print">
  609. <h3>
  610.     <xsl:apply-templates/>
  611. </h3>
  612. </xsl:template>
  613. <xsl:template match="example/title" />
  614. <!-- /example/title -->
  615.  
  616.  
  617. <!-- ==================================================================== -->
  618. <!-- indentations                                                         -->
  619. <!-- ==================================================================== -->
  620. <xsl:template match="indent">
  621. <span class="indent">
  622.     <xsl:apply-templates/>
  623. </span>
  624. </xsl:template>
  625. <!-- /indent -->
  626.  
  627.  
  628. <!-- ==================================================================== -->
  629. <!-- <note>                                                               -->
  630. <!-- ==================================================================== -->
  631. <xsl:template match="note">
  632. <div class="note">
  633.     <xsl:if test="@type='warning'">
  634.         <xsl:attribute name="class">warning</xsl:attribute>
  635.     </xsl:if>
  636.  
  637.     <xsl:apply-templates/>
  638. </div>
  639. </xsl:template>
  640. <!-- /note -->
  641.  
  642.  
  643. <!-- ==================================================================== -->
  644. <!-- <note><title>                                                        -->
  645. <!-- ==================================================================== -->
  646. <xsl:template match="note/title">
  647. <h3>
  648.     <xsl:apply-templates/>
  649. </h3>
  650. </xsl:template>
  651. <!-- /note/title -->
  652.  
  653.  
  654. <!-- ==================================================================== -->
  655. <!-- <directive>                                                          -->
  656. <!-- Inserts link to another directive, which might be in another module. -->
  657. <!-- References are converted into lower case.                            -->
  658. <!-- ==================================================================== -->
  659. <xsl:template match="directive" name="directive">
  660. <code class="directive">
  661.     <xsl:choose>
  662.     <xsl:when test="@module">
  663.         <xsl:variable name="lowerdirective"
  664.             select="translate(., $uppercase, $lowercase)" />
  665.  
  666.         <xsl:choose>
  667.         <xsl:when test="$in-modulesynopsis and @module = /modulesynopsis/name">
  668.             <a href="#{$lowerdirective}">
  669.                 <xsl:if test="@type='section'"><</xsl:if>
  670.                 <xsl:value-of select="."/>
  671.                 <xsl:if test="@type='section'">></xsl:if>
  672.             </a>
  673.         </xsl:when>
  674.         <xsl:otherwise>
  675.             <a href="{$path}/mod/{@module}.html#{$lowerdirective}">
  676.                 <xsl:if test="@type='section'"><</xsl:if>
  677.                 <xsl:value-of select="."/>
  678.                 <xsl:if test="@type='section'">></xsl:if>
  679.             </a>
  680.         </xsl:otherwise>
  681.         </xsl:choose>
  682.     </xsl:when>
  683.  
  684.     <xsl:otherwise>
  685.         <xsl:if test="@type='section'"><</xsl:if>
  686.         <xsl:value-of select="."/>
  687.         <xsl:if test="@type='section'">></xsl:if>
  688.     </xsl:otherwise>
  689.     </xsl:choose>
  690. </code>
  691. </xsl:template>
  692. <!-- /directive -->
  693.  
  694.  
  695. <!-- ==================================================================== -->
  696. <!-- <module>                                                             -->
  697. <!-- Inserts a link to refereed module                                    -->
  698. <!-- ==================================================================== -->
  699. <xsl:template match="module" name="module">
  700. <code class="module">
  701.     <a href="{$path}/mod/{.}.html">
  702.         <xsl:value-of select="."/>
  703.     </a>
  704. </code>
  705. </xsl:template>
  706. <!-- /module -->
  707.  
  708.  
  709. <!-- ==================================================================== -->
  710. <!-- <related>                                                            -->
  711. <!-- ==================================================================== -->
  712. <xsl:template match="related">
  713. <table class="related">
  714. <tr>
  715.     <th>
  716.         <xsl:value-of select="$messages/message[@name='relatedmodules']" />
  717.     </th>
  718.     <th>
  719.         <xsl:value-of select="$messages/message[@name='relateddirectives']" />
  720.     </th>
  721. </tr>
  722. <tr>
  723.     <td>
  724.         <xsl:if test="count(modulelist/*) > 0">
  725.             <ul>
  726.                 <xsl:apply-templates select="modulelist" />
  727.             </ul>
  728.         </xsl:if>
  729.     </td>
  730.     <td>
  731.         <xsl:if test="count(directivelist/*) > 0">
  732.             <ul>
  733.                 <xsl:apply-templates select="directivelist"/>
  734.             </ul>
  735.         </xsl:if>
  736.     </td>
  737. </tr>
  738. </table>
  739. </xsl:template>
  740. <!-- /related -->
  741.  
  742. <!-- ==================================================================== -->
  743. <!-- related/modulelist                                                   -->
  744. <!-- ==================================================================== -->
  745. <xsl:template match="related/modulelist">
  746. <xsl:for-each select="module">
  747.     <li>
  748.         <xsl:call-template name="module"/>
  749.     </li>
  750. </xsl:for-each>
  751. </xsl:template>
  752. <!-- /related/modulelist -->
  753.  
  754.  
  755. <!-- ==================================================================== -->
  756. <!-- related/directivelist                                                -->
  757. <!-- ==================================================================== -->
  758. <xsl:template match="related/directivelist">
  759. <xsl:for-each select="directive">
  760.     <li>
  761.         <xsl:call-template name="directive"/>
  762.     </li>
  763. </xsl:for-each>
  764. </xsl:template>
  765. <!-- /related/directivelist -->
  766.  
  767. <!-- ==================================================================== -->
  768. <!-- <table>                                                              -->
  769. <!-- ==================================================================== -->
  770. <xsl:template match="table">
  771. <table>
  772.     <!-- existing border attribute will result in <table class="bordered"> -->
  773.     <xsl:if test="@border">
  774.         <xsl:attribute name="class">bordered</xsl:attribute>
  775.     </xsl:if>
  776.  
  777.     <!-- style="zebra": alternating colors per row, i.e. every second row -->
  778.     <!--                gets a class="odd". Header lines (no <td>) get a  -->
  779.     <!--                class="header". These lines will be excluded from -->
  780.     <!--                the "odd" line count. That way header lines act   -->
  781.     <!--                interjectional, which creates a better visual and -->
  782.     <!--                psychological effect.                             -->
  783.     <xsl:choose>
  784.     <xsl:when test="@style = 'zebra'">
  785.         <xsl:for-each select="tr">
  786.             <tr>
  787.                 <xsl:choose>
  788.                 <xsl:when test="count(td) = 0">
  789.                     <xsl:attribute name="class">header</xsl:attribute>
  790.                 </xsl:when>
  791.  
  792.                 <xsl:when
  793.                     test="position() mod 2 =
  794.                             (count(preceding-sibling::tr[count(td) = 0]) mod 2)">
  795.                     <xsl:attribute name="class">odd</xsl:attribute>
  796.                 </xsl:when>
  797.                 </xsl:choose>
  798.  
  799.                 <xsl:apply-templates />
  800.             </tr>&lf;
  801.         </xsl:for-each>
  802.     </xsl:when>
  803.     <xsl:otherwise>
  804.         <xsl:apply-templates />
  805.     </xsl:otherwise>
  806.     </xsl:choose>
  807. </table>
  808. </xsl:template>
  809. <!-- /table -->
  810.  
  811.  
  812. <!-- ==================================================================== -->
  813. <!-- <ol>                                                                 -->
  814. <!-- ==================================================================== -->
  815. <xsl:template match="ol">
  816. <ol>
  817.     <!-- A. B. C. D. (list-style-type="upper-alpha") -->
  818.     <xsl:if test="@type = 'A'">
  819.         <xsl:attribute name="class">up-A</xsl:attribute>
  820.     </xsl:if>
  821.  
  822.     <xsl:apply-templates/>
  823. </ol>
  824. </xsl:template>
  825. <!-- /ol -->
  826.  
  827.  
  828. <!-- ==================================================================== -->
  829. <!-- diverse elements                                                     -->
  830. <!-- Passes through content                                               -->
  831. <!-- ==================================================================== -->
  832. <xsl:template match="summary|description|usage|syntax|default">
  833. <xsl:apply-templates/>
  834. </xsl:template>
  835. <!-- /diverse -->
  836.  
  837.  
  838. <!-- ==================================================================== -->
  839. <!-- <a>                                                                  -->
  840. <!-- ==================================================================== -->
  841. <xsl:template match="a">
  842. <xsl:choose>
  843. <xsl:when test="not(@href)">
  844.     <xsl:copy>
  845.         <xsl:apply-templates select="@*|*|text()"/>
  846.     </xsl:copy>
  847. </xsl:when>
  848. <xsl:otherwise>
  849.     <a href="@href">
  850.         <xsl:apply-templates select="@*"/>
  851.         <xsl:call-template name="helper.uri.fix">
  852.             <xsl:with-param name="uri" select="@href"/>
  853.         </xsl:call-template>
  854.  
  855.         <xsl:apply-templates select="*|text()"/>
  856.     </a>
  857. </xsl:otherwise>
  858. </xsl:choose>
  859. </xsl:template> 
  860. <!-- /a -->
  861.  
  862.  
  863. <!-- ==================================================================== -->
  864. <!-- toplink                                                              -->
  865. <!-- ==================================================================== -->
  866. <xsl:template name="toplink">
  867. <div class="top">
  868.     <a href="#page-header"><img src="{$path}/images/up.gif" alt="top" /></a>
  869. </div>
  870. </xsl:template>
  871. <!-- /toplink -->
  872.  
  873.  
  874. <!-- ==================================================================== -->
  875. <!-- <transnote>                                                          -->
  876. <!-- translator's notes are displayed in a different color                -->
  877. <!-- ==================================================================== -->
  878. <xsl:template match="transnote">
  879. <span class="transnote">
  880.     <xsl:text>(</xsl:text>
  881.     <em>
  882.         <xsl:value-of select="$messages/message[@name='transnote']" />
  883.     </em>
  884.     <xsl:text> </xsl:text>
  885.     <xsl:apply-templates />
  886.     <xsl:text>)</xsl:text>
  887. </span>
  888. </xsl:template>
  889. <!-- /transnote -->
  890.  
  891.  
  892. <!-- ==================================================================== -->
  893. <!-- Filter   in text() nodes.                                       -->
  894. <!-- In some environments this character won't be transformed correctly,  -->
  895. <!-- so we just write it explicitely as " " into the output.         -->
  896. <!-- ==================================================================== -->
  897. <xsl:template match="text()" name="filter.nbsp">
  898. <xsl:param name="text" select="." />
  899.  
  900. <xsl:choose>
  901. <xsl:when test="contains($text, ' ')">
  902.     <xsl:value-of select="substring-before($text, ' ')" />
  903.      
  904.     <xsl:call-template name="filter.nbsp">
  905.         <xsl:with-param name="text" select="substring-after($text, ' ')" />
  906.     </xsl:call-template>
  907. </xsl:when>
  908. <xsl:otherwise>
  909.     <xsl:value-of select="$text" />
  910. </xsl:otherwise>
  911. </xsl:choose>
  912. </xsl:template>
  913. <!-- /filter.nbsp -->
  914.  
  915.  
  916. <!-- ==================================================================== -->
  917. <!-- Process everything else by just passing it through                   -->
  918. <!-- ==================================================================== -->
  919. <xsl:template match="*|@*">
  920. <xsl:copy>
  921.     <xsl:apply-templates select="*|@*|text()" />
  922. </xsl:copy>
  923. </xsl:template>
  924. <!-- /pass through -->
  925.  
  926.  
  927. <!-- ==================================================================== -->
  928. <!-- create a letter bar                                                  -->
  929. <!-- ==================================================================== -->
  930. <xsl:template name="letter-bar">
  931. <xsl:param name="letters" />
  932. <xsl:param name="first" />
  933.  
  934. <xsl:if test="not($first)">
  935.     <xsl:text> | </xsl:text>
  936. </xsl:if>
  937.  
  938. <a href="#{substring($letters,1,1)}">
  939.      
  940.     <xsl:value-of select="substring($letters, 1, 1)" />
  941.      
  942. </a>
  943.  
  944. <xsl:if test="string-length($letters) > 1">
  945.     <xsl:call-template name="letter-bar">
  946.         <xsl:with-param name="letters" select="substring($letters, 2)" />
  947.         <xsl:with-param name="first" select="false()" />
  948.     </xsl:call-template>
  949. </xsl:if>
  950. </xsl:template>
  951. <!-- /letter-bar -->
  952.  
  953.  
  954. <!-- ==================================================================== -->
  955. <!-- template(s) for collecting all start letters of directives           -->
  956. <!-- ==================================================================== -->
  957. <xsl:template name="directive-startletters">
  958. <xsl:param name="directives" />
  959.  
  960. <xsl:call-template name="_squeeze-letters">
  961.     <xsl:with-param name="lastletter" select="''" />
  962.     <xsl:with-param name="letters">
  963.         <xsl:for-each select="$directives">
  964.         <xsl:sort select="name"/>
  965.             <xsl:value-of
  966.                 select="translate(substring(normalize-space(name), 1, 1),
  967.                                   $lowercase, $uppercase)" />
  968.         </xsl:for-each>
  969.     </xsl:with-param>
  970. </xsl:call-template>
  971. </xsl:template>
  972. <!-- /directive-startletters -->
  973.  
  974.  
  975. <!-- ==================================================================== -->
  976. <!-- squeeze subsequent letters in a string                               -->
  977. <!-- ==================================================================== -->
  978. <xsl:template name="_squeeze-letters">
  979. <xsl:param name="letters"/>
  980. <xsl:param name="lastletter"/>
  981.  
  982. <xsl:variable name="current" select="substring($letters, 1, 1)" />
  983.  
  984. <xsl:if test="not($lastletter = $current)">
  985.     <xsl:value-of select="$current" />
  986. </xsl:if>
  987.  
  988. <xsl:if test="string-length($letters) > 1">
  989.     <xsl:call-template name="_squeeze-letters">
  990.         <xsl:with-param name="letters" select="substring($letters, 2)" />
  991.         <xsl:with-param name="lastletter" select="$current"/>
  992.     </xsl:call-template>
  993. </xsl:if>
  994. </xsl:template>
  995. <!-- /_squeeze-letters -->
  996.  
  997.  
  998. <!-- ==================================================================== -->
  999. <!-- fix href and target attribute of an element.                         -->
  1000. <!-- ==================================================================== -->
  1001. <xsl:template name="helper.uri.fix">
  1002. <xsl:param name="uri"/>
  1003.  
  1004. <xsl:choose>
  1005. <!-- lame is_absolute_uri test -->
  1006. <xsl:when test="    contains($uri, ':')
  1007.                 and string-length(substring-before($uri, ':')) < 7">
  1008.     <xsl:if test="$ext-target">
  1009.         <xsl:attribute name="target">_blank</xsl:attribute>
  1010.     </xsl:if>
  1011. </xsl:when>
  1012. <xsl:otherwise>
  1013.     <xsl:variable name="fragment">
  1014.         <xsl:if test="contains($uri, '#')">
  1015.             <xsl:value-of select="concat('#', substring-after($uri, '#'))"/>
  1016.         </xsl:if>
  1017.     </xsl:variable>
  1018.     <xsl:variable name="absuri">
  1019.         <xsl:choose>
  1020.         <xsl:when test="contains($uri, '#')">
  1021.             <xsl:value-of select="concat('#', substring-before($uri, '#'))"/>
  1022.         </xsl:when>
  1023.         <xsl:otherwise>
  1024.             <xsl:value-of select="$uri"/>
  1025.         </xsl:otherwise>
  1026.         </xsl:choose>
  1027.     </xsl:variable>
  1028.         
  1029.     <xsl:if test="substring($absuri, string-length($uri), 1) = '/'">
  1030.         <xsl:attribute name="href">
  1031.             <xsl:value-of select="concat($absuri, $index-file, $fragment)"/>
  1032.         </xsl:attribute>
  1033.     </xsl:if>
  1034. </xsl:otherwise>
  1035. </xsl:choose>
  1036. </xsl:template>
  1037. <!-- /helper.uri.fix -->
  1038.  
  1039.  
  1040. <!-- ==================================================================== -->
  1041. <!-- Ignore table hints used for latex                                    -->
  1042. <!-- ==================================================================== -->
  1043. <xsl:template match="columnspec">
  1044. </xsl:template>
  1045.  
  1046. <xsl:template match="column">
  1047. </xsl:template>
  1048.  
  1049. </xsl:stylesheet>
  1050.