common.xsl revision beaad6ac31022179c44d88536811e9ccd9425696
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<?xml version="1.0"?>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!--
456de5f26ad346749963525a4f91883e6a51c5f3gryzor Copyright 2002-2004 Apache Software Foundation
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor Licensed under the Apache License, Version 2.0 (the "License");
456de5f26ad346749963525a4f91883e6a51c5f3gryzor you may not use this file except in compliance with the License.
96ad5d81ee4a2cc66a4ae19893efc8aa6d06fae7jailletc You may obtain a copy of the License at
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor http://www.apache.org/licenses/LICENSE-2.0
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
2e545ce2450a9953665f701bb05350f0d3f26275nd Unless required by applicable law or agreed to in writing, software
456de5f26ad346749963525a4f91883e6a51c5f3gryzor distributed under the License is distributed on an "AS IS" BASIS,
456de5f26ad346749963525a4f91883e6a51c5f3gryzor WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
456de5f26ad346749963525a4f91883e6a51c5f3gryzor See the License for the specific language governing permissions and
456de5f26ad346749963525a4f91883e6a51c5f3gryzor limitations under the License.
456de5f26ad346749963525a4f91883e6a51c5f3gryzor-->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!DOCTYPE xsl:stylesheet [
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <!ENTITY nbsp SYSTEM "util/nbsp.xml">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <!ENTITY lf SYSTEM "util/lf.xml">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor]>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:stylesheet version="1.0"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor xmlns="http://www.w3.org/1999/xhtml">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- Please, don't hard-code output strings! Use the language -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- files and the translation "stuff"... -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- Injected variables: -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- $is-chm - (boolean) target is for CHM generation or not -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- $is-zip - (boolean) target is for ZIP generation or not -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- $messages - (node-set) localized common text snippets -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- $output-encoding - (string) MIME charset name of the output -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- encoding -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- Constants used for case translation -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- space separated list of blockelements defined in common.dtd -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- used for inline content catching in <example>s -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:variable name="blockelements">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor p example note table ul ol dl pre img blockquote
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</xsl:variable>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- relative path to /manual/ -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:variable name="path" select="document(/*/@metafile)/metafile/relpath" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- load outsourced page types -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:include href="moduleindex.xsl" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:include href="directiveindex.xsl" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:include href="manualpage.xsl" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:include href="synopsis.xsl" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:include href="sitemap.xsl" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:include href="indexpage.xsl" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:include href="quickreference.xsl" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:include href="faq.xsl" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- load utility snippets -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:include href="util/modtrans.xsl" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- make sure, we set relative anchors only, if we're actually -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- transforming a modulefile (see <directive> template) -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:variable name="in-modulesynopsis" select="boolean(/modulesynopsis)" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- when referencing to a directory, we may need to complete the path -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- with the index file (for offline applications like *.chm files) -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:variable name="index-file">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="$is-chm or $is-zip">index.html</xsl:if>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</xsl:variable>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- it may be desired to open external targets in a new window -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:variable name="ext-target" select="boolean($is-chm)" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- #################################################################### -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- Utility templates for constructing pages -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- #################################################################### -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
20f499565e77defe9dab24dd85c02f38a1175855nd<!-- ==================================================================== -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- HTML head -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- ==================================================================== -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:template name="head">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<head>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <!-- the meta element is necessary for offline handling like CHM -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:choose>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:when test="$is-chm or $is-zip">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <meta http-equiv="Content-Type"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor content="text/html; charset={$output-encoding}" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:when>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:otherwise>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:comment>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor &lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text> </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor &lf;
4aa603e6448b99f9371397d439795c91a93637eand <xsl:text> </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text>This file is generated from xml source: DO NOT EDIT</xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor &lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text> </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor &lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text> </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:comment>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:otherwise>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:choose>&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <title>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:choose>
4aa603e6448b99f9371397d439795c91a93637eand <xsl:when test="name">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="name"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:when>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:otherwise>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="title"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:otherwise>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:choose>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text> </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="$messages/message[@name='apachetitle']"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </title>&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <!-- chm files get a slightly different stylesheet -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:choose>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:when test="$is-chm">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <link type="text/css" rel="stylesheet" media="all"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor href="{$path}/style/css/manual-chm.css" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:when>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <!-- zip packages do also -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:when test="$is-zip">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <link title="Main stylesheet" type="text/css" media="all"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor rel="stylesheet"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor href="{$path}/style/css/manual-zip.css" />&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <link title="No Sidebar - Default font size" type="text/css" media="all"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor rel="alternate stylesheet"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor href="{$path}/style/css/manual-zip-100pc.css"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:when>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:otherwise>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <link title="Main stylesheet" type="text/css" media="all"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor rel="stylesheet"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor href="{$path}/style/css/manual.css" />&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <link title="No Sidebar - Default font size" type="text/css" media="all"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor rel="alternate stylesheet"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor href="{$path}/style/css/manual-loose-100pc.css"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:otherwise>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:choose>&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <link type="text/css" media="print"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor rel="stylesheet"
456de5f26ad346749963525a4f91883e6a51c5f3gryzor href="{$path}/style/css/manual-print.css"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <!-- chm files do not need a favicon -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="not($is-chm or $is-zip)">&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <link rel="shortcut icon" href="{$path}/images/favicon.ico" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:if>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</head>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</xsl:template>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- /head -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- ==================================================================== -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- page top -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- ==================================================================== -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:template name="top">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<div id="page-header">&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:call-template name="super-menu" />&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <p class="apache">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="$messages/message[@name='apachehttpserver']"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </p>&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
4aa603e6448b99f9371397d439795c91a93637eand <img src="{$path}/images/feather.gif" alt="" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</div>&lf; <!-- /page-header -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
82acb2833a1071ce9818a5cc295a472ec57ad4c2lgentis<div class="up">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <a href="./{$index-file}">
4aa603e6448b99f9371397d439795c91a93637eand <xsl:if test="parentdocument">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:attribute name="href">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="parentdocument/@href"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:attribute>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:call-template name="helper.uri.fix">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:with-param name="uri" select="parentdocument/@href" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:call-template>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:if>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <img src="{$path}/images/left.gif" alt="&lt;-" title="&lt;-" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </a>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</div>&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<div id="path">&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <a href="http://www.apache.org/">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="$ext-target">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:attribute name="target">_blank</xsl:attribute>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:if>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="$messages/message[@name='apache']" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </a>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
4aa603e6448b99f9371397d439795c91a93637eand <xsl:text> &gt; </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
4aa603e6448b99f9371397d439795c91a93637eand <a href="http://httpd.apache.org/">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="$ext-target">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:attribute name="target">_blank</xsl:attribute>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:if>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="$messages/message[@name='http-server']" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </a>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text> &gt; </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <a href="http://httpd.apache.org/docs-project/">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="$ext-target">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:attribute name="target">_blank</xsl:attribute>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:if>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="$messages/message[@name='documentation']" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </a>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="not(/indexpage)">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text> &gt; </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <a href="{$path}/{$index-file}">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="$messages/message[@name='version']"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </a>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:if>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="/modulesynopsis or /directiveindex or /quickreference">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text> &gt; </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <a href="./{$index-file}">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="$messages/message[@name='modules']"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </a>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:if>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="parentdocument/text()">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text> &gt; </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <a href="{parentdocument/@href}">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:call-template name="helper.uri.fix">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:with-param name="uri" select="parentdocument/@href"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:call-template>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="parentdocument"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </a>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:if>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</div> <!-- /path -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</xsl:template>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- /top -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- ==================================================================== -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- page bottom -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- ==================================================================== -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:template name="bottom">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:call-template name="langavail">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:with-param name="position" select="'bottom'" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</xsl:call-template>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<div id="footer">&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <p class="apache">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="$messages/message[@name='maintainedby']"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text> </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <a href="http://httpd.apache.org/docs-project/">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="$ext-target">
4aa603e6448b99f9371397d439795c91a93637eand <xsl:attribute name="target">_blank</xsl:attribute>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:if>
4aa603e6448b99f9371397d439795c91a93637eand <xsl:text>Apache HTTP Server Documentation Project</xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </a>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </p>&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:call-template name="super-menu"/>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</div> <!-- /footer -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor</xsl:template>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- /bottom -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- ==================================================================== -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- build an "available languages" section -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<!-- ==================================================================== -->
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:template name="langavail">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:param name="position" select="'top'" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:variable name="metafile" select="document(/*/@metafile)/metafile" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<xsl:if test="not($is-chm or $is-zip)">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor<div class="{$position}lang">&lf;
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <p>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <span>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of select="$messages/message[@name='langavail']" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:text>: </xsl:text>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </span>
456de5f26ad346749963525a4f91883e6a51c5f3gryzor
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:for-each select="$metafile/variants/variant">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:sort select="." />
07dc96d063d49299da433f84b5c5681da9bbdf68rbowen
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <a href="{$path}/{.}{$metafile/path}{$metafile/basename}.html">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:if test="$metafile/basename = 'index'">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:attribute name="href">
456de5f26ad346749963525a4f91883e6a51c5f3gryzor <xsl:value-of
456de5f26ad346749963525a4f91883e6a51c5f3gryzor select="concat($path, '/', ., $metafile/path)" />
456de5f26ad346749963525a4f91883e6a51c5f3gryzor </xsl:attribute>
</xsl:if>
<xsl:if test="$messages/@lang != .">
<xsl:attribute name="hreflang">
<xsl:value-of select="." />
</xsl:attribute>
<xsl:attribute name="rel">alternate</xsl:attribute>
</xsl:if>
<xsl:attribute name="title">
<xsl:choose>
<xsl:when test=". != 'fr'"> <!-- no language file avail. -->
<xsl:value-of select="document(concat('/lang/', ., '.xml'))
/messages/@langname" />
</xsl:when>
<xsl:otherwise>
<xsl:text>Fran&#231;ais</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
&nbsp;
<xsl:value-of select="." />
&nbsp;
</a>
<xsl:if test="position() != last()">
<xsl:text> |&#xA;</xsl:text>
</xsl:if>
</xsl:for-each>
</p>&lf;
</div> <!-- /.{$position}lang -->
</xsl:if>
</xsl:template>
<!-- /langavail -->
<!-- ==================================================================== -->
<!-- Process a documentation section -->
<!-- ==================================================================== -->
<xsl:template match="section">
<xsl:call-template name="toplink" />&lf;
<div class="section">&lf;
<!-- Section heading -->
<h2>
<xsl:choose>
<xsl:when test="@id">
<a id="{@id}" name="{@id}">
<xsl:apply-templates select="title" mode="print" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="title" mode="print" />
</xsl:otherwise>
</xsl:choose>
</h2>
<!-- Section body -->
<xsl:apply-templates />
</div> <!-- /.section -->
</xsl:template>
<!-- /section -->
<!-- ==================================================================== -->
<!-- handle subsections (lower level headings) -->
<!-- ==================================================================== -->
<xsl:template match="section/section">
<!-- Section heading -->
<h3>
<xsl:choose>
<xsl:when test="@id">
<a id="{@id}" name="{@id}">
<xsl:apply-templates select="title" mode="print" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="title" mode="print" />
</xsl:otherwise>
</xsl:choose>
</h3>
<!-- Section body -->
<xsl:apply-templates />
</xsl:template>
<!-- /section/section -->
<!-- ==================================================================== -->
<!-- handle subsubsections (h4) -->
<!-- ==================================================================== -->
<xsl:template match="section/section/section">
<!-- Section heading -->
<h4>
<xsl:choose>
<xsl:when test="@id">
<a id="{@id}" name="{@id}">
<xsl:apply-templates select="title" mode="print" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="title" mode="print" />
</xsl:otherwise>
</xsl:choose>
</h4>
<!-- Section body -->
<xsl:apply-templates/>
</xsl:template>
<!-- /section/section/section -->
<!-- ==================================================================== -->
<!-- section nesting > h4 is not supported for now -->
<!-- ==================================================================== -->
<xsl:template match="section/section/section/section">
<xsl:message terminate="yes">
<xsl:text>FATAL: exceeding maximum section nesting level.</xsl:text>
&lf;&lf;
<xsl:text>Perhaps you should consider to split your document into</xsl:text>
&lf;
<xsl:text>several ones...</xsl:text>
&lf;
</xsl:message>
</xsl:template>
<!-- /section/section/section/section -->
<!-- ==================================================================== -->
<!-- (sub)section titles -->
<!-- ==================================================================== -->
<xsl:template match="section/title" mode="print">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="section/title" />
<!-- /section/title -->
<!-- ==================================================================== -->
<!-- generate section index -->
<!-- ==================================================================== -->
<xsl:template match="section" mode="index">
<li>
<img src="{$path}/images/down.gif" alt="" />
<xsl:text> </xsl:text>
<xsl:choose>
<xsl:when test="@id">
<a href="#{@id}">
<xsl:apply-templates select="title" mode="print" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="title" mode="print" />
</xsl:otherwise>
</xsl:choose>
</li>&lf;
</xsl:template>
<!-- /section index -->
<!-- ==================================================================== -->
<!-- docs super menu -->
<!-- ==================================================================== -->
<xsl:template name="super-menu">
<p class="menu">
<a href="{$path}/mod/{$index-file}">
<xsl:value-of select="$messages/message[@name='modules']" />
</a>
<xsl:text> | </xsl:text>
<a href="{$path}/mod/directives.html">
<xsl:value-of select="$messages/message[@name='directives']" />
</a>
<xsl:text> | </xsl:text>
<a href="{$path}/faq/{$index-file}">
<xsl:value-of select="$messages/message[@name='faq']" />
</a>
<xsl:text> | </xsl:text>
<a href="{$path}/glossary.html">
<xsl:value-of select="$messages/message[@name='glossary']" />
</a>
<xsl:text> | </xsl:text>
<a href="{$path}/sitemap.html">
<xsl:value-of select="$messages/message[@name='sitemap']" />
</a>
</p>
</xsl:template>
<!-- /super-menu -->
<!-- ==================================================================== -->
<!-- <example> -->
<!-- iterate over *all* nodes; bare text and other inline stuff is -->
<!-- wrapped into <p><code>, block level elements (defined in -->
<!-- $blockelements) are applied "as is" -->
<!-- ==================================================================== -->
<xsl:variable name="blocks"
select="concat(' ', normalize-space($blockelements), ' ')" />
<xsl:template match="example">
<div class="example">
<xsl:apply-templates select="title" mode="print" />
<xsl:for-each select="/node()">
<xsl:variable name="is-block-node"
select="boolean(contains($blocks,
concat(' ', local-name(), ' ')))"/>
<!-- bb = (number of) blocks nodes before (the current) -->
<xsl:variable name="bb"
select="count(preceding-sibling::*[
contains($blocks,
concat(' ', local-name(), ' '))])" />
<xsl:if test="$is-block-node or position()=last()">
<xsl:variable name="content">
<!-- phew. short explanation, what happens here: -->
<!-- We want to get the inline stuff between the last -->
<!-- block node and the current node. -->
<!-- So filter all previous nodes for the condition -->
<!-- that the number of block nodes of all of *their* -->
<!-- previous nodes is >= $bb. Hope that helps ;-) -->
<xsl:apply-templates
select="preceding-sibling::node()[
count(preceding-sibling::*[
contains($blocks,
concat(' ', local-name(), ' '))])
&gt;= $bb]" />
<xsl:apply-templates
select="self::node()[not($is-block-node)]" />
</xsl:variable>
<!-- apply bare text only, if it's not only \s or empty -->
<xsl:if test="not(normalize-space($content) = '')">
<p><code>
<!-- same as $content above. xsl:copy-of seems to make -->
<!-- thread problems with xalan-j ... -->
<xsl:apply-templates
select="preceding-sibling::node()[
count(preceding-sibling::*[
contains($blocks,
concat(' ', local-name(),
' '))])
&gt;= $bb]" />
<xsl:apply-templates
select="self::node()[not($is-block-node)]" />
</code></p>
</xsl:if>
<xsl:apply-templates select="self::node()[$is-block-node]" />
</xsl:if>
</xsl:for-each>
<!-- /node() -->
</div> <!-- /.example -->
</xsl:template>
<!-- /example -->
<!-- ==================================================================== -->
<!-- example/title -->
<!-- ==================================================================== -->
<xsl:template match="example/title" mode="print">
<h3>
<xsl:apply-templates/>
</h3>
</xsl:template>
<xsl:template match="example/title" />
<!-- /example/title -->
<!-- ==================================================================== -->
<!-- indentations -->
<!-- ==================================================================== -->
<xsl:template match="indent">
<span class="indent">
<xsl:apply-templates/>
</span>
</xsl:template>
<!-- /indent -->
<!-- ==================================================================== -->
<!-- <note> -->
<!-- ==================================================================== -->
<xsl:template match="note">
<div class="note">
<xsl:if test="@type='warning'">
<xsl:attribute name="class">warning</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</div>
</xsl:template>
<!-- /note -->
<!-- ==================================================================== -->
<!-- <note><title> -->
<!-- ==================================================================== -->
<xsl:template match="note/title">
<h3>
<xsl:apply-templates/>
</h3>
</xsl:template>
<!-- /note/title -->
<!-- ==================================================================== -->
<!-- <directive> -->
<!-- Inserts link to another directive, which might be in another module. -->
<!-- References are converted into lower case. -->
<!-- ==================================================================== -->
<xsl:template match="directive" name="directive">
<code class="directive">
<xsl:choose>
<xsl:when test="@module">
<xsl:variable name="lowerdirective"
select="translate(., $uppercase, $lowercase)" />
<xsl:choose>
<xsl:when test="$in-modulesynopsis and @module = /modulesynopsis/name">
<a href="#{$lowerdirective}">
<xsl:if test="@type='section'">&lt;</xsl:if>
<xsl:value-of select="."/>
<xsl:if test="@type='section'">&gt;</xsl:if>
</a>
</xsl:when>
<xsl:otherwise>
<a href="{$path}/mod/{@module}.html#{$lowerdirective}">
<xsl:if test="@type='section'">&lt;</xsl:if>
<xsl:value-of select="."/>
<xsl:if test="@type='section'">&gt;</xsl:if>
</a>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:if test="@type='section'">&lt;</xsl:if>
<xsl:value-of select="."/>
<xsl:if test="@type='section'">&gt;</xsl:if>
</xsl:otherwise>
</xsl:choose>
</code>
</xsl:template>
<!-- /directive -->
<!-- ==================================================================== -->
<!-- <module> -->
<!-- Inserts a link to refereed module -->
<!-- ==================================================================== -->
<xsl:template match="module" name="module">
<code class="module">
<a href="{$path}/mod/{.}.html">
<xsl:value-of select="."/>
</a>
</code>
</xsl:template>
<!-- /module -->
<!-- ==================================================================== -->
<!-- <related> -->
<!-- ==================================================================== -->
<xsl:template match="related">
<table class="related">
<tr>
<th>
<xsl:value-of select="$messages/message[@name='relatedmodules']" />
</th>
<th>
<xsl:value-of select="$messages/message[@name='relateddirectives']" />
</th>
</tr>
<tr>
<td>
<xsl:if test="count(modulelist/*) &gt; 0">
<ul>
<xsl:apply-templates select="modulelist" />
</ul>
</xsl:if>
</td>
<td>
<xsl:if test="count(directivelist/*) &gt; 0">
<ul>
<xsl:apply-templates select="directivelist"/>
</ul>
</xsl:if>
</td>
</tr>
</table>
</xsl:template>
<!-- /related -->
<!-- ==================================================================== -->
<!-- related/modulelist -->
<!-- ==================================================================== -->
<xsl:template match="related/modulelist">
<xsl:for-each select="module">
<li>
<xsl:call-template name="module"/>
</li>
</xsl:for-each>
</xsl:template>
<!-- /related/modulelist -->
<!-- ==================================================================== -->
<!-- related/directivelist -->
<!-- ==================================================================== -->
<xsl:template match="related/directivelist">
<xsl:for-each select="directive">
<li>
<xsl:call-template name="directive"/>
</li>
</xsl:for-each>
</xsl:template>
<!-- /related/directivelist -->
<!-- ==================================================================== -->
<!-- <table> -->
<!-- ==================================================================== -->
<xsl:template match="table">
<table>
<!-- existing border attribute will result in <table class="bordered"> -->
<xsl:if test="@border">
<xsl:attribute name="class">bordered</xsl:attribute>
</xsl:if>
<!-- style="zebra": alternating colors per row, i.e. every second row -->
<!-- gets a class="odd". Header lines (no <td>) get a -->
<!-- class="header". These lines will be excluded from -->
<!-- the "odd" line count. That way header lines act -->
<!-- interjectional, which creates a better visual and -->
<!-- psychological effect. -->
<xsl:choose>
<xsl:when test="@style = 'zebra'">
<xsl:for-each select="tr">
<tr>
<xsl:choose>
<xsl:when test="count(td) = 0">
<xsl:attribute name="class">header</xsl:attribute>
</xsl:when>
<xsl:when
test="position() mod 2 =
(count(preceding-sibling::tr[count(td) = 0]) mod 2)">
<xsl:attribute name="class">odd</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:apply-templates />
</tr>&lf;
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates />
</xsl:otherwise>
</xsl:choose>
</table>
</xsl:template>
<!-- /table -->
<!-- ==================================================================== -->
<!-- <ol> -->
<!-- ==================================================================== -->
<xsl:template match="ol">
<ol>
<!-- A. B. C. D. (list-style-type="upper-alpha") -->
<xsl:if test="@type = 'A'">
<xsl:attribute name="class">up-A</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</ol>
</xsl:template>
<!-- /ol -->
<!-- ==================================================================== -->
<!-- diverse elements -->
<!-- Passes through content -->
<!-- ==================================================================== -->
<xsl:template match="summary|description|usage|syntax|default">
<xsl:apply-templates/>
</xsl:template>
<!-- /diverse -->
<!-- ==================================================================== -->
<!-- <a> -->
<!-- ==================================================================== -->
<xsl:template match="a">
<xsl:choose>
<xsl:when test="not(@href)">
<xsl:copy>
<xsl:apply-templates select="@*|*|text()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<a href="@href">
<xsl:apply-templates select="@*"/>
<xsl:call-template name="helper.uri.fix">
<xsl:with-param name="uri" select="@href"/>
</xsl:call-template>
<xsl:apply-templates select="*|text()"/>
</a>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- /a -->
<!-- ==================================================================== -->
<!-- toplink -->
<!-- ==================================================================== -->
<xsl:template name="toplink">
<div class="top">
<a href="#page-header"><img src="{$path}/images/up.gif" alt="top" /></a>
</div>
</xsl:template>
<!-- /toplink -->
<!-- ==================================================================== -->
<!-- <transnote> -->
<!-- translator's notes are displayed in a different color -->
<!-- ==================================================================== -->
<xsl:template match="transnote">
<span class="transnote">
<xsl:text>(</xsl:text>
<em>
<xsl:value-of select="$messages/message[@name='transnote']" />
</em>
<xsl:text> </xsl:text>
<xsl:apply-templates />
<xsl:text>)</xsl:text>
</span>
</xsl:template>
<!-- /transnote -->
<!-- ==================================================================== -->
<!-- Filter &#160; in text() nodes. -->
<!-- In some environments this character won't be transformed correctly, -->
<!-- so we just write it explicitely as "&nbsp;" into the output. -->
<!-- ==================================================================== -->
<xsl:template match="text()" name="filter.nbsp">
<xsl:param name="text" select="." />
<xsl:choose>
<xsl:when test="contains($text, '&#160;')">
<xsl:value-of select="substring-before($text, '&#160;')" />
&nbsp;
<xsl:call-template name="filter.nbsp">
<xsl:with-param name="text" select="substring-after($text, '&#160;')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- /filter.nbsp -->
<!-- ==================================================================== -->
<!-- Process everything else by just passing it through -->
<!-- ==================================================================== -->
<xsl:template match="*">
<xsl:message terminate="yes">
<xsl:text>Unknown element: </xsl:text>
<xsl:value-of select="local-name()" />&lf;
<xsl:text>Please fix style/xsl/common.xsl!</xsl:text>
</xsl:message>
</xsl:template>
<xsl:template match="@*">
<xsl:copy>
<xsl:apply-templates select="*|@*|text()" />
</xsl:copy>
</xsl:template>
<xsl:template match="br"><br /></xsl:template>
<xsl:template match="tr"><tr><xsl:apply-templates select="*|@*|text()" /></tr></xsl:template>
<xsl:template match="th"><th><xsl:apply-templates select="*|@*|text()" /></th></xsl:template>
<xsl:template match="td"><td><xsl:apply-templates select="*|@*|text()" /></td></xsl:template>
<xsl:template match="p"><p><xsl:apply-templates select="*|@*|text()" /></p></xsl:template>
<xsl:template match="ul"><ul><xsl:apply-templates select="*|@*|text()" /></ul></xsl:template>
<xsl:template match="li"><li><xsl:apply-templates select="*|@*|text()" /></li></xsl:template>
<xsl:template match="dl"><dl><xsl:apply-templates select="*|@*|text()" /></dl></xsl:template>
<xsl:template match="dt"><dt><xsl:apply-templates select="*|@*|text()" /></dt></xsl:template>
<xsl:template match="dd"><dd><xsl:apply-templates select="*|@*|text()" /></dd></xsl:template>
<xsl:template match="em"><em><xsl:apply-templates select="*|@*|text()" /></em></xsl:template>
<xsl:template match="strong"><strong><xsl:apply-templates select="*|@*|text()" /></strong></xsl:template>
<xsl:template match="pre"><pre><xsl:apply-templates select="*|@*|text()" /></pre></xsl:template>
<xsl:template match="code"><code><xsl:apply-templates select="*|@*|text()" /></code></xsl:template>
<xsl:template match="var"><var><xsl:apply-templates select="*|@*|text()" /></var></xsl:template>
<xsl:template match="dfn"><dfn><xsl:apply-templates select="*|@*|text()" /></dfn></xsl:template>
<xsl:template match="blockquote"><blockquote><xsl:apply-templates select="*|@*|text()" /></blockquote></xsl:template>
<xsl:template match="q"><q><xsl:apply-templates select="*|@*|text()" /></q></xsl:template>
<xsl:template match="cite"><cite><xsl:apply-templates select="*|@*|text()" /></cite></xsl:template>
<xsl:template match="img"><img><xsl:apply-templates select="*|@*|text()" /></img></xsl:template>
<!-- /pass through -->
<!-- ==================================================================== -->
<!-- create a letter bar -->
<!-- ==================================================================== -->
<xsl:template name="letter-bar">
<xsl:param name="letters" />
<xsl:param name="first" />
<xsl:if test="not($first)">
<xsl:text> | </xsl:text>
</xsl:if>
<a href="#{substring($letters,1,1)}">
&nbsp;
<xsl:value-of select="substring($letters, 1, 1)" />
&nbsp;
</a>
<xsl:if test="string-length($letters) &gt; 1">
<xsl:call-template name="letter-bar">
<xsl:with-param name="letters" select="substring($letters, 2)" />
<xsl:with-param name="first" select="false()" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<!-- /letter-bar -->
<!-- ==================================================================== -->
<!-- template(s) for collecting all start letters of directives -->
<!-- ==================================================================== -->
<xsl:template name="directive-startletters">
<xsl:param name="directives" />
<xsl:call-template name="_squeeze-letters">
<xsl:with-param name="lastletter" select="''" />
<xsl:with-param name="letters">
<xsl:for-each select="$directives">
<xsl:sort select="name"/>
<xsl:value-of
select="translate(substring(normalize-space(name), 1, 1),
$lowercase, $uppercase)" />
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<!-- /directive-startletters -->
<!-- ==================================================================== -->
<!-- squeeze subsequent letters in a string -->
<!-- ==================================================================== -->
<xsl:template name="_squeeze-letters">
<xsl:param name="letters"/>
<xsl:param name="lastletter"/>
<xsl:variable name="current" select="substring($letters, 1, 1)" />
<xsl:if test="not($lastletter = $current)">
<xsl:value-of select="$current" />
</xsl:if>
<xsl:if test="string-length($letters) &gt; 1">
<xsl:call-template name="_squeeze-letters">
<xsl:with-param name="letters" select="substring($letters, 2)" />
<xsl:with-param name="lastletter" select="$current"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!-- /_squeeze-letters -->
<!-- ==================================================================== -->
<!-- fix href and target attribute of an element. -->
<!-- ==================================================================== -->
<xsl:template name="helper.uri.fix">
<xsl:param name="uri"/>
<xsl:choose>
<!-- lame is_absolute_uri test -->
<xsl:when test=" contains($uri, ':')
and string-length(substring-before($uri, ':')) &lt; 7">
<xsl:if test="$ext-target">
<xsl:attribute name="target">_blank</xsl:attribute>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="fragment">
<xsl:if test="contains($uri, '#')">
<xsl:value-of select="concat('#', substring-after($uri, '#'))"/>
</xsl:if>
</xsl:variable>
<xsl:variable name="absuri">
<xsl:choose>
<xsl:when test="contains($uri, '#')">
<xsl:value-of select="concat('#', substring-before($uri, '#'))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$uri"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="substring($absuri, string-length($uri), 1) = '/'">
<xsl:attribute name="href">
<xsl:value-of select="concat($absuri, $index-file, $fragment)"/>
</xsl:attribute>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- /helper.uri.fix -->
<!-- ==================================================================== -->
<!-- Ignore table hints used for latex -->
<!-- ==================================================================== -->
<xsl:template match="columnspec">
</xsl:template>
<xsl:template match="column">
</xsl:template>
</xsl:stylesheet>