blob: 4dc5214d1bb648c8dff914db44126f69c1cf41c7 [file] [log] [blame]
<?xml version="1.0"?>
<!--
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 site2xhtml.xsl then combines with HTML from the index (book2menu.xsl)
and tabs (tab2menu.xsl) to generate the final HTML.
Section handling
- <a name/> anchors are added if the id attribute is specified
$Id$
-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- the skinconf file -->
<xsl:param name="config-file" select="'../../../../skinconf.xml'"/>
<xsl:variable name="config" select="document($config-file)/skinconfig"/>
<!-- If true, a PDF link for this page will not be generated -->
<xsl:variable name="disable-pdf-link" select="$config/disable-pdf-link"/>
<!-- If true, a "print" link for this page will not be generated -->
<xsl:variable name="disable-print-link" select="$config/disable-print-link"/>
<!-- If true, an XML link for this page will not be generated -->
<xsl:variable name="disable-xml-link" select="$config/disable-xml-link"/>
<!-- Get the section depth to use when generating the minitoc (default is 2) -->
<xsl:variable name="config-max-depth" select="$config/toc/@level"/>
<!-- Whether to obfuscate email links -->
<xsl:variable name="obfuscate-mail-links" select="$config/obfuscate-mail-links"/>
<xsl:variable name="max-depth">
<xsl:choose>
<xsl:when test="string-length($config-max-depth)&gt;0">
<xsl:value-of select="$config-max-depth"/>
</xsl:when>
<xsl:otherwise>2</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<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="filename-noext">
<xsl:call-template name="filename-noext">
<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="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>
<xsl:call-template name="printlink"/>
<xsl:call-template name="pdflink"/>
<xsl:call-template name="xmllink"/>
</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>
<!-- Generates the "printer friendly version" link -->
<xsl:template name="printlink">
<xsl:if test="$disable-print-link = 'false'">
<script type="text/javascript" language="Javascript">
function printit() {
if (window.print) {
window.print() ;
} else {
var WebBrowser = '&lt;OBJECT ID="WebBrowser1" WIDTH="0" HEIGHT="0" CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">&lt;/OBJECT>';
document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
WebBrowser1.ExecWB(6, 2);//Use a 1 vs. a 2 for a prompting dialog box WebBrowser1.outerHTML = "";
}
}
</script>
<script type="text/javascript" language="Javascript">
var NS = (navigator.appName == "Netscape");
var VERSION = parseInt(navigator.appVersion);
if (VERSION > 3) {
document.write('<td align="center" width="40" nowrap="nowrap">');
document.write(' <a href="javascript:printit()" class="dida">');
document.write(' <img class="skin" src="{$skin-img-dir}/printer.gif" alt="Print this Page"/><br />');
document.write(' print</a>');
document.write('</td>');
}
</script>
</xsl:if>
</xsl:template>
<!-- Generates the PDF link -->
<xsl:template name="pdflink">
<xsl:if test="not($config/disable-pdf-link) or $disable-pdf-link = 'false'">
<td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.pdf" class="dida">
<img class="skin" src="{$skin-img-dir}/pdfdoc.gif" alt="PDF"/><br/>
PDF</a>
</td>
</xsl:if>
</xsl:template>
<!-- Generates the XML link -->
<xsl:template name="xmllink">
<xsl:if test="$disable-xml-link = 'false'">
<td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.xml" class="dida">
<img class="skin" src="{$skin-img-dir}/xmldoc.gif" alt="xml"/><br/>
xml</a>
</td>
</xsl:if>
</xsl:template>
<xsl:template match="body">
<xsl:if test="$max-depth&gt;0 and not($notoc='true')" >
<xsl:call-template name="minitoc">
<xsl:with-param name="tocroot" select="."/>
<xsl:with-param name="depth">1</xsl:with-param>
</xsl:call-template>
</xsl:if>
<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 class="frame {local-name()}">
<div class="label">
<xsl:choose>
<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"/>
<xsl:choose>
<xsl:when test="$obfuscate-mail-links='true' and starts-with(@href, 'mailto:') and contains(@href, '@')">
<xsl:variable name="mailto-1" select="substring-before(@href,'@')"/>
<xsl:variable name="mailto-2" select="substring-after(@href,'@')"/>
<a href="{$mailto-1}.at.{$mailto-2}">
<xsl:apply-templates/>
</a>
</xsl:when>
<xsl:otherwise>
<a href="{@href}">
<xsl:apply-templates/>
</a>
</xsl:otherwise>
</xsl:choose>
</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: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: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:template>
<xsl:template match="icon">
<xsl:apply-templates select="@id"/>
<img src="{@src}" alt="{@alt}" class="icon">
<xsl:if test="@height">
<xsl:attribute name="height"><xsl:value-of select="@height"/></xsl:attribute>
</xsl:if>
<xsl:if test="@width">
<xsl:attribute name="width"><xsl:value-of select="@width"/></xsl:attribute>
</xsl:if>
</img>
</xsl:template>
<xsl:template match="code">
<xsl:apply-templates select="@id"/>
<span class="codefrag"><xsl:value-of select="."/></span>
</xsl:template>
<xsl:template match="figure">
<xsl:apply-templates select="@id"/>
<div align="center">
<img src="{@src}" alt="{@alt}" class="figure">
<xsl:if test="@height">
<xsl:attribute name="height"><xsl:value-of select="@height"/></xsl:attribute>
</xsl:if>
<xsl:if test="@width">
<xsl:attribute name="width"><xsl:value-of select="@width"/></xsl:attribute>
</xsl:if>
</img>
</div>
</xsl:template>
<xsl:template match="table">
<xsl:apply-templates select="@id"/>
<table cellpadding="4" cellspacing="1" class="ForrestTable">
<xsl:if test="@cellspacing"><xsl:attribute name="cellspacing"><xsl:value-of select="@cellspacing"/></xsl:attribute></xsl:if>
<xsl:if test="@cellpadding"><xsl:attribute name="cellpadding"><xsl:value-of select="@cellpadding"/></xsl:attribute></xsl:if>
<xsl:if test="@border"><xsl:attribute name="border"><xsl:value-of select="@border"/></xsl:attribute></xsl:if>
<xsl:if test="@class"><xsl:attribute name="class"><xsl:value-of select="@class"/></xsl:attribute></xsl:if>
<xsl:if test="@bgcolor"><xsl:attribute name="bgcolor"><xsl:value-of select="@bgcolor"/></xsl:attribute></xsl:if>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="acronym/@title">
<xsl:attribute name="title">
<xsl:value-of select="normalize-space(.)"/>
</xsl:attribute>
</xsl:template>
<xsl:template name="minitoc">
<xsl:param name="tocroot"/>
<xsl:param name="depth"/>
<xsl:if test="count($tocroot/section) > 0">
<ul class="minitoc">
<xsl:for-each select="$tocroot/section">
<li>
<xsl:call-template name="toclink"/>
<xsl:if test="$depth&lt;$max-depth">
<xsl:call-template name="minitoc">
<xsl:with-param name="tocroot" select="."/>
<xsl:with-param name="depth" select="$depth + 1"/>
</xsl:call-template>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template>
<xsl:template name="toclink">
<xsl:variable name="tocitem" select="normalize-space(title)"/>
<xsl:if test="string-length($tocitem)>0">
<a>
<xsl:attribute name="href">
<xsl:text>#</xsl:text>
<xsl:if test="@id">
<xsl:value-of select="@id"/>
</xsl:if>
</xsl:attribute>
<xsl:value-of select="$tocitem"/>
</a>
</xsl:if>
</xsl:template>
<xsl:template match="header/authors">
<xsl:for-each select="person">
<xsl:choose>
<xsl:when test="position()=1">by&#160;</xsl:when>
<xsl:otherwise>,&#160;</xsl:otherwise>
</xsl:choose>
<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">
<xsl:value-of select="concat('.',.)"/>
</xsl:template>
<xsl:template match="@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:choose>
<xsl:when test="$obfuscate-mail-links='true'">
<xsl:variable name="user" select="substring-before(@email,'@')"/>
<xsl:variable name="host" select="substring-after(@email,'@')"/>
<xsl:value-of select="concat('mailto:',$user,'.at.',$host)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('mailto:',@email)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select="@name"/>
</a>
</xsl:template>
<xsl:template match="node()|@*" priority="-1">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>