--- /dev/null
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!--
+This stylesheet contains the majority of templates for converting documentv11
+to HTML. It renders XML as HTML in this form:
+
+ <div class="content">
+ ...
+ </div>
+
+..which site-to-xhtml.xsl then combines with HTML from the index (book-to-menu.xsl)
+and tabs (tab-to-menu.xsl) to generate the final HTML.
+
+Section handling
+ - <a name/> anchors are added if the id attribute is specified
+
+-->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:param name="dynamic-page" select="'false'"/>
+ <xsl:param name="notoc"/>
+ <xsl:param name="path"/>
+<!-- <xsl:include href="split.xsl"/> -->
+ <xsl:include href="dotdots.xsl"/>
+ <xsl:include href="pathutils.xsl"/>
+<!-- Path to site root, eg '../../' -->
+ <xsl:variable name="root">
+ <xsl:call-template name="dotdots">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
+ <xsl:template match="/">
+ <xsl:apply-templates mode="toc"/>
+ <xsl:apply-templates/>
+ </xsl:template>
+ <xsl:template match="document">
+ <div class="content">
+ <table summary="" class="title">
+ <tr>
+ <td valign="middle">
+ <xsl:if test="normalize-space(header/title)!=''">
+ <h1>
+ <xsl:value-of select="header/title"/>
+ </h1>
+ </xsl:if>
+ </td>
+ <div id="skinconf-printlink"/>
+ <xsl:if test="$dynamic-page='false'">
+ <div id="skinconf-pdflink"/>
+ <div id="skinconf-xmllink"/>
+ </xsl:if>
+ </tr>
+ </table>
+ <xsl:if test="normalize-space(header/subtitle)!=''">
+ <h3>
+ <xsl:value-of select="header/subtitle"/>
+ </h3>
+ </xsl:if>
+ <xsl:apply-templates select="header/type"/>
+ <xsl:apply-templates select="header/notice"/>
+ <xsl:apply-templates select="header/abstract"/>
+ <xsl:apply-templates select="body"/>
+ <div class="attribution">
+ <xsl:apply-templates select="header/authors"/>
+ <xsl:if test="header/authors and header/version">
+<xsl:text>; </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="header/version"/>
+ </div>
+ </div>
+ </xsl:template>
+ <xsl:template match="body">
+ <div id="skinconf-toc-page"/>
+ <xsl:apply-templates/>
+ </xsl:template>
+<!-- Generate a <a name="..."> tag for an @id -->
+ <xsl:template match="@id">
+ <xsl:if test="normalize-space(.)!=''"><a name="{.}"/>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="section">
+<!-- count the number of section in the ancestor-or-self axis to compute
+ the title element name later on -->
+ <xsl:variable name="sectiondepth" select="count(ancestor-or-self::section)"/><a name="{generate-id()}"/>
+ <xsl:apply-templates select="@id"/>
+<!-- generate a title element, level 1 -> h3, level 2 -> h4 and so on... -->
+ <xsl:element name="{concat('h',$sectiondepth + 2)}">
+ <xsl:value-of select="title"/>
+ <xsl:if test="$notoc='true' and $sectiondepth = 3">
+ <span style="float: right"><a href="#{@id}-menu">^</a>
+ </span>
+ </xsl:if>
+ </xsl:element>
+<!-- Indent FAQ entry text 15 pixels -->
+ <xsl:variable name="indent">
+ <xsl:choose>
+ <xsl:when test="$notoc='true' and $sectiondepth = 3">
+<xsl:text>15</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+<xsl:text>0</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <div style="margin-left: {$indent} ; border: 2px">
+ <xsl:apply-templates select="*[not(self::title)]"/>
+ </div>
+ </xsl:template>
+ <xsl:template match="note | warning | fixme">
+ <xsl:apply-templates select="@id"/>
+ <div>
+ <xsl:call-template name="add.class">
+ <xsl:with-param name="class">
+ <xsl:value-of select="local-name()"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <div class="label">
+ <xsl:choose>
+<!-- FIXME: i18n Transformer here -->
+ <xsl:when test="@label">
+ <xsl:value-of select="@label"/>
+ </xsl:when>
+ <xsl:when test="local-name() = 'note'">Note</xsl:when>
+ <xsl:when test="local-name() = 'warning'">Warning</xsl:when>
+ <xsl:otherwise>Fixme (<xsl:value-of select="@author"/>)</xsl:otherwise>
+ </xsl:choose>
+ </div>
+ <div class="content">
+ <xsl:apply-templates/>
+ </div>
+ </div>
+ </xsl:template>
+ <xsl:template match="notice">
+ <div class="notice">
+<!-- FIXME: i18n Transformer here -->
+<xsl:text>Notice: </xsl:text>
+ <xsl:apply-templates/>
+ </div>
+ </xsl:template>
+ <xsl:template match="link">
+ <xsl:apply-templates select="@id"/><a>
+ <xsl:if test="@class='jump'">
+ <xsl:attribute name="target">_top</xsl:attribute>
+ </xsl:if>
+ <xsl:if test="@class='fork'">
+ <xsl:attribute name="target">_blank</xsl:attribute>
+ </xsl:if>
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/></a>
+ </xsl:template>
+ <xsl:template match="jump">
+ <xsl:apply-templates select="@id"/><a href="{@href}" target="_top">
+ <xsl:apply-templates/></a>
+ </xsl:template>
+ <xsl:template match="fork">
+ <xsl:apply-templates select="@id"/><a href="{@href}" target="_blank">
+ <xsl:apply-templates/></a>
+ </xsl:template>
+ <xsl:template match="p[@xml:space='preserve']">
+ <xsl:apply-templates select="@id"/>
+ <div class="pre">
+ <xsl:copy-of select="@id"/>
+ <xsl:apply-templates/>
+ </div>
+ </xsl:template>
+ <xsl:template match="source">
+ <xsl:apply-templates select="@id"/>
+ <pre class="code">
+<!-- Temporarily removed long-line-splitter ... gives out-of-memory problems -->
+ <xsl:copy-of select="@id"/>
+ <xsl:apply-templates/>
+<!--
+ <xsl:call-template name="format">
+ <xsl:with-param select="." name="txt" />
+ <xsl:with-param name="width">80</xsl:with-param>
+ </xsl:call-template>
+-->
+ </pre>
+ </xsl:template>
+ <xsl:template match="anchor"><a name="{@id}">
+ <xsl:copy-of select="@id"/></a>
+ </xsl:template>
+ <xsl:template match="icon">
+ <xsl:apply-templates select="@id"/>
+ <img class="icon">
+ <xsl:copy-of select="@height | @width | @src | @alt | @id"/>
+ </img>
+ </xsl:template>
+ <xsl:template match="code">
+ <xsl:apply-templates select="@id"/>
+ <span>
+ <xsl:call-template name="add.class">
+ <xsl:with-param name="class">codefrag</xsl:with-param>
+ </xsl:call-template>
+ <xsl:copy-of select="@id"/>
+ <xsl:value-of select="."/>
+ </span>
+ </xsl:template>
+ <xsl:template match="figure">
+ <xsl:apply-templates select="@id"/>
+ <div align="center">
+ <xsl:copy-of select="@id"/>
+ <img class="figure">
+ <xsl:copy-of select="@height | @width | @src | @alt | @id"/>
+ </img>
+ </div>
+ </xsl:template>
+ <xsl:template match="table">
+ <xsl:apply-templates select="@id"/>
+ <xsl:choose>
+<!-- Limit Forrest specific processing to tables without class -->
+ <xsl:when test="not(@class) or @class=''">
+ <table cellpadding="4" cellspacing="1" class="ForrestTable">
+ <xsl:copy-of select="@cellspacing | @cellpadding | @border | @class | @bgcolor |@id"/>
+ <xsl:apply-templates/>
+ </table>
+ </xsl:when>
+ <xsl:otherwise>
+<!-- Tables with class are passed without change -->
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="@class = ''"></xsl:if>
+ </xsl:template>
+ <xsl:template match="acronym/@title">
+ <xsl:attribute name="title">
+ <xsl:value-of select="normalize-space(.)"/>
+ </xsl:attribute>
+ </xsl:template>
+ <xsl:template match="header/authors">
+ <xsl:for-each select="person">
+ <xsl:choose>
+ <xsl:when test="position()=1">by</xsl:when>
+ <xsl:otherwise>,</xsl:otherwise>
+ </xsl:choose>
+<xsl:text> </xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:for-each>
+ </xsl:template>
+ <xsl:template match="version">
+ <span class="version">
+ <xsl:apply-templates select="@major"/>
+ <xsl:apply-templates select="@minor"/>
+ <xsl:apply-templates select="@fix"/>
+ <xsl:apply-templates select="@tag"/>
+ <xsl:choose>
+ <xsl:when test="starts-with(., '$Revision: ')">
+ version <xsl:value-of select="substring(., 12, string-length(.) -11-2)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </span>
+ </xsl:template>
+ <xsl:template match="@major">
+ v<xsl:value-of select="."/>
+ </xsl:template>
+ <xsl:template match="@minor | @fix">
+ <xsl:value-of select="concat('.',.)"/>
+ </xsl:template>
+ <xsl:template match="@tag">
+ <xsl:value-of select="concat('-',.)"/>
+ </xsl:template>
+ <xsl:template match="type">
+ <p class="type">
+<!-- FIXME: i18n Transformer here -->
+<xsl:text>Type: </xsl:text>
+ <xsl:value-of select="."/>
+ </p>
+ </xsl:template>
+ <xsl:template match="abstract">
+ <p>
+ <xsl:apply-templates/>
+ </p>
+ </xsl:template>
+ <xsl:template name="email"><a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat('mailto:',@email)"/>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/></a>
+ </xsl:template>
+ <xsl:template name="generate-id">
+ <xsl:choose>
+ <xsl:when test="@id">
+ <xsl:value-of select="@id"/>
+ </xsl:when>
+ <xsl:when test="@title">
+ <xsl:value-of select="@title"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="generate-id(.)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+<!-- Templates for "toc" mode. This will generate a complete
+ Table of Contents for the document. This will then be used
+ by the site2xhtml to generate a Menu ToC and a Page ToC -->
+ <xsl:template match="document" mode="toc">
+ <xsl:apply-templates mode="toc"/>
+ </xsl:template>
+ <xsl:template match="body" mode="toc">
+ <tocitems>
+ <xsl:if test="../header/meta[@name='forrest.force-toc'] = 'true'">
+ <xsl:attribute name="force">true</xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates select="section" mode="toc">
+ <xsl:with-param name="level" select="1"/>
+ </xsl:apply-templates>
+ </tocitems>
+ </xsl:template>
+ <xsl:template match="section" mode="toc">
+ <xsl:param name="level"/>
+ <tocitem level="{$level}">
+ <xsl:attribute name="href">#<xsl:call-template name="generate-id"/>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:value-of select="title"/>
+ </xsl:attribute>
+ <xsl:apply-templates mode="toc">
+ <xsl:with-param name="level" select="$level+1"/>
+ </xsl:apply-templates>
+ </tocitem>
+ </xsl:template>
+ <xsl:template name="add.class">
+<!-- use the parameter to set class attribute -->
+<!-- if there are already classes set, adds to them -->
+ <xsl:param name="class"/>
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="@class">
+ <xsl:value-of select="$class"/>
+<xsl:text> </xsl:text>
+ <xsl:value-of select="@class"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$class"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ </xsl:template>
+ <xsl:template match="node()|@*" mode="toc"/>
+<!-- End of "toc" mode templates -->
+ <xsl:template match="node()|@*" priority="-1">
+<!-- id processing will create its own a-element so processing has to
+ happen outside the copied element
+ -->
+ <xsl:apply-templates select="@id"/>
+ <xsl:copy>
+ <xsl:apply-templates select="@*[name(.) != 'id']"/>
+ <xsl:copy-of select="@id"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+</xsl:stylesheet>