| <?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> |