| <?xml version="1.0"?> |
| <!-- |
| Copyright 1999-2004 The Apache Software Foundation |
| |
| Licensed 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. |
| --> |
| |
| <xsl:stylesheet version="1.0" |
| xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| xmlns="http://www.w3.org/TR/xhtml1/strict"> |
| |
| <!-- |
| Let's start by declaring HOW this stylesheet must behave. |
| --> |
| <xsl:output method="html" indent="yes" |
| doctype-public="-//W3C//DTD HTML 4.01//EN" |
| doctype-system="http://www.w3.org/TR/html4/strict.dtd"/> |
| |
| <!-- Define default values for parameters --> |
| <xsl:param name="styles" select="''"/> |
| <xsl:param name="images" select="'../images'"/> |
| <xsl:param name="homedoc" select="'../'"/> |
| <xsl:param name="project-menu" select="'menu'"/> |
| <xsl:param name="relative-path" select="'.'"/> |
| <xsl:param name="printer-location" select="'printer/'"/> |
| |
| <!-- Defined variables (non-overrideable) --> |
| <xsl:variable name="body-bg" select="'@body-bg@'"/> |
| <xsl:variable name="body-fg" select="'@body-fg@'"/> |
| <xsl:variable name="body-link" select="'@body-link@'"/> |
| <xsl:variable name="banner-bg" select="'@banner-bg@'"/> |
| <xsl:variable name="banner-fg" select="'@banner-fg@'"/> |
| <xsl:variable name="sub-banner-bg" select="'@sub-banner-bg@'"/> |
| <xsl:variable name="sub-banner-fg" select="'@sub-banner-fg@'"/> |
| <xsl:variable name="table-th-bg" select="'@table-th-bg@'"/> |
| <xsl:variable name="table-td-bg" select="'@table-td-bg@'"/> |
| <xsl:variable name="gen-dev-doc" select="'@gen-dev-doc@'"/> |
| |
| <!-- |
| Match the ROOT of the source document and process its "document" element. |
| --> |
| <xsl:template match="/"> |
| <xsl:apply-templates select="document"/> |
| </xsl:template> |
| |
| <!-- |
| Match the roote "document" element, let's prepare the layout of the whole |
| page. |
| --> |
| <xsl:template match="document"> |
| <html> |
| |
| <!-- |
| This is the page header, we want a title from this document title |
| the <meta> copyright statement and all authors in "meta" headers. |
| --> |
| <head> |
| <title> |
| <xsl:value-of select="properties/title"/> |
| </title> |
| <xsl:apply-templates select="copyright" /> |
| <meta name="copyright" content="1999-2004 The Apache Software Foundation"/> |
| <xsl:for-each select="properties/date"> |
| <xsl:variable name="date"> |
| <xsl:value-of select="."/> |
| </xsl:variable> |
| <meta name="last-changed" content="{$date}"/> |
| </xsl:for-each> |
| <xsl:for-each select="properties/author"> |
| <xsl:variable name="name"> |
| <xsl:value-of select="."/> |
| </xsl:variable> |
| <xsl:variable name="email"> |
| <xsl:value-of select="@email"/> |
| </xsl:variable> |
| <meta name="author" content="{$name}"/> |
| <meta name="email" content="{$email}"/> |
| </xsl:for-each> |
| <link rel="stylesheet" type="text/css" href="{$styles}/style.css"/> |
| <link rel="shortcut icon" href="{$images}/tomcat.ico"/> |
| </head> |
| |
| <!-- |
| This describes the layout of the page |
| --> |
| <body bgcolor="{$body-bg}" text="{$body-fg}" alink="{$body-link}" |
| vlink="{$body-link}" link="{$body-link}"> |
| <a name="TOP"/> |
| |
| <table border="0" cellspacing="0" cellpadding="0" width="100%"> |
| <!-- |
| An empty row (thank you stupid IE). |
| --> |
| <tr height="1"> |
| <td width="150" bgcolor="{$body-bg}" height="1" class="nil"> |
| <img src="{$images}/pixel.gif" border="0" width="150" height="1" vspace="0" hspace="0"/> |
| </td> |
| <td width="*" bgcolor="{$body-bg}" height="1" class="nil"> |
| <img src="{$images}/pixel.gif" border="0" width="370" height="1" vspace="0" hspace="0"/> |
| </td> |
| </tr> |
| |
| <!-- |
| Our first row contains the Jakarta and the JK logos. |
| --> |
| <tr> |
| <td bgcolor="{$body-bg}" class="logo" colspan="2" width="*"> |
| <table border="0" cellspacing="0" cellpadding="0" width="100%"> |
| <tr> |
| <td align="left"> |
| <img src="{$images}/jakarta.gif" border="0" width="505" height="48" align="left"/> |
| </td> |
| <td align="right"> |
| <img src="{$images}/mod_jk.jpg" border="0" align="right"/> |
| </td> |
| </tr> |
| </table> |
| </td> |
| </tr> |
| |
| <!-- |
| A Turbine-style bar with links to the ASF, Jakarta and Tomcat. |
| --> |
| <tr> |
| <td bgcolor="#999999" class="head" align="right" width="*" colspan="2"> |
| <nobr> |
| <a class="head" href="http://www.apache.org/"> |
| <xsl:text>Apache Software Foundation</xsl:text> |
| </a> | |
| <a class="head" href="http://jakarta.apache.org/"> |
| <xsl:text>Jakarta Project</xsl:text> |
| </a> | |
| <a class="head" href="http://jakarta.apache.org/tomcat/"> |
| <xsl:text>Apache Tomcat</xsl:text> |
| </a> |
| </nobr> |
| </td> |
| </tr> |
| |
| <!-- |
| Sidebar menu in a nested table and main content. |
| --> |
| <tr> |
| <xsl:choose> |
| <xsl:when test="$project-menu = 'menu'"> |
| <td bgcolor="#ffffff" width="150" valign="top"> |
| |
| <!-- |
| This is the sidebar menu, we have links to all documents specified |
| in "menu.idx", and if this is the current document, we go deeper |
| and write an index of the sections as well. |
| --> |
| <table border="0" width="150" cellspacing="0" cellpadding="0" class="menu"> |
| <!-- Empty row, thanks IE --> |
| <tr height="1"> |
| <td width="10" bgcolor="#cccccc" height="1" class="nil"> |
| <img src="{$images}/pixel.gif" border="0" width="10" height="1" vspace="0" hspace="0"/> |
| </td> |
| <td width="140" bgcolor="#cccccc" height="1" class="nil"> |
| <img src="{$images}/pixel.gif" border="0" width="140" height="1" vspace="0" hspace="0"/> |
| </td> |
| </tr> |
| |
| <!-- |
| All the files we want to have processed in the final pages are |
| stored (in order) in a file called "menu.idx". We set a variable |
| name with the current URL, and then we process each "document" |
| within the index. |
| --> |
| <xsl:variable name="root" select="/"/> |
| <xsl:for-each select="document('menu.idx')/index/section"> |
| <tr height="6"> |
| <td bgcolor="#d0d0d0" width="150" colspan="2"> |
| <xsl:value-of select="@name"/> |
| </td> |
| </tr> |
| <xsl:for-each select="./document"> |
| <xsl:variable name="href" select="@href"/> |
| <tr> |
| <td bgcolor="#cccccc" width="150" colspan="2"> |
| <nobr> |
| <a class="menu"> |
| <xsl:call-template name="converturi"> |
| <xsl:with-param name="href" select="@href"/> |
| </xsl:call-template> |
| </a> |
| </nobr> |
| </td> |
| </tr> |
| <tr height="2"> |
| </tr> |
| |
| <!-- |
| Slightly more complicated, we use the document-location function |
| and compare against it to see whether we are in the same file or |
| not. If we actually are, we expand to the "section" level. |
| --> |
| <xsl:if test="$root/document/properties/title = document(@href)/document/properties/title"> |
| <xsl:for-each select="document(@href)/document/section"> |
| <tr> |
| <td bgcolor="#cccccc" width="10"/> |
| <td bgcolor="#cccccc" width="140"> |
| <a class="menu" href="#{@name}"> |
| <xsl:value-of select="@name"/> |
| </a> |
| </td> |
| </tr> |
| <tr height="1"> |
| </tr> |
| </xsl:for-each> |
| </xsl:if> |
| </xsl:for-each> |
| <tr height="6"/> |
| </xsl:for-each> |
| |
| <xsl:if test="$gen-dev-doc = true"> |
| <!-- |
| The last thing to put down in the index are the API docs, |
| both for C and for Java |
| --> |
| <tr height="6"> |
| <td bgcolor="#d0d0d0" width="150" colspan="2"> |
| Developpers |
| </td> |
| </tr> |
| <tr> |
| <td bgcolor="#cccccc" width="150" colspan="2"> |
| <nobr> |
| <a class="menu" href="./api-java/index.html">Java API Documentation</a> |
| </nobr> |
| </td> |
| </tr> |
| <tr> |
| <td bgcolor="#cccccc" width="150" colspan="2"> |
| <nobr> |
| <a class="menu" href="./api-c/">C API Documentation</a> |
| </nobr> |
| </td> |
| </tr> |
| </xsl:if> |
| |
| </table> |
| </td> |
| </xsl:when> |
| </xsl:choose> |
| |
| <!-- |
| Done with the sidebar, now, do we want some content as well or WHAT? |
| --> |
| <td bgcolor="#ffffff" width="*" valign="top" class="body"> |
| <!-- |
| Add printer friendly link. |
| --> |
| <table border="0" width="100%" cellspacing="4"> |
| <tr> |
| <td align="left" valign="top" nowrap="true"> |
| <!-- Not yet available in jk docs |
| <h1><xsl:value-of select="project/title"/></h1> |
| --> |
| <h2><xsl:value-of select="properties/title"/></h2> |
| </td> |
| <td align="right" valign="top" nowrap="true"> |
| <!-- Add the printer friendly link for docs with a menu --> |
| <xsl:if test="$project-menu = 'menu'"> |
| <xsl:call-template name="addprint"> |
| </xsl:call-template> |
| </xsl:if> |
| <xsl:if test="$project-menu != 'menu'"> |
| <img src="{$images}/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/> |
| </xsl:if> |
| </td> |
| </tr> |
| </table> |
| |
| <xsl:apply-templates select="section"/> |
| </td> |
| </tr> |
| </table> |
| </body> |
| </html> |
| </xsl:template> |
| |
| <!-- |
| Match the "author" tag only in mode "header" (meaning that we have to |
| process it for the HTML <head> element. |
| --> |
| <xsl:template match="author" mode="header"> |
| <meta name="author" content="{text()}"/> |
| <meta name="email" content="{@email}"/> |
| </xsl:template> |
| |
| <!-- |
| Present a canonical representation of an author. |
| --> |
| <xsl:template match="author"> |
| <a href="mailto:{@email}"><xsl:value-of select="text()"/></a> |
| </xsl:template> |
| |
| <xsl:template match="section"> |
| <a name="{@name}"> |
| <table border="0" cellspacing="0" cellpadding="0" width="100%"> |
| <tr> |
| <td bgcolor="{$banner-bg}" class="section" valign="top" align="left"> |
| <img src="{$images}/corner.gif" valign="top" align="left" hspace="0" vspace="0" border="0"/> |
| <xsl:if test="string-length(description/text()) = 0"> |
| <xsl:value-of select="@name"/> |
| </xsl:if> |
| <xsl:value-of select="description/text()"/> |
| </td> |
| </tr> |
| </table> |
| </a> |
| <xsl:apply-templates select="subsection|p|ul|ol|img|screen|screendos|screen5250|todo"/> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="subsection"> |
| <a name="sub_{@name}"> |
| <table border="0" cellspacing="0" cellpadding="0" width="100%"> |
| <tr> |
| <td bgcolor="{$sub-banner-bg}" class="subsection" valign="top" align="left"> |
| <img src="{$images}/corner.gif" valign="top" align="left" hspace="0" vspace="0" border="0"/> |
| <xsl:if test="string-length(description/text()) = 0"> |
| <xsl:value-of select="@name"/> |
| </xsl:if> |
| <xsl:value-of select="description/text()"/> |
| </td> |
| </tr> |
| </table> |
| </a> |
| <xsl:apply-templates select="subsection|p|ul|ol|img|screen|screendos|screen5250|todo"/> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="todo"> |
| <p class="todo"> |
| This paragraph has not been written yet, but <b>you</b> can contribute to it. |
| <xsl:if test="string-length(@note) > 0"> |
| The original author left a note attached to this TO-DO item: |
| <b><xsl:value-of select="@note"/></b> |
| </xsl:if> |
| </p> |
| </xsl:template> |
| |
| <xsl:template match="p"> |
| <p class="section"><xsl:apply-templates select="author|code|source|screen|screendos|screen5250|table|ul|ol|br|b|a|text()"/></p> |
| </xsl:template> |
| |
| <xsl:template match="b"> |
| <b><font color="#333333"><xsl:apply-templates select="text()"/></font></b> |
| </xsl:template> |
| |
| <xsl:template match="br"> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="img"> |
| <p> |
| <div align="center"> |
| <xsl:value-of select="@alt"/><br/> |
| <img src="{@src}" alt="{@alt}" vspace="0" hspace="0" border="0"/> |
| </div> |
| </p> |
| </xsl:template> |
| |
| <xsl:template match="ul"> |
| <ul><xsl:apply-templates select="li|ul|ol"/></ul> |
| </xsl:template> |
| |
| <xsl:template match="ol"> |
| <ol><xsl:apply-templates select="li|ul|ol"/></ol> |
| </xsl:template> |
| |
| <xsl:template match="li"> |
| <li><xsl:apply-templates select="br|b|a|ul|ol|text()"/></li> |
| </xsl:template> |
| |
| <!-- JFC added --> |
| <xsl:template match="table"> |
| <table border="0"><xsl:apply-templates select="tr"/></table> |
| </xsl:template> |
| |
| <xsl:template match="tr"> |
| <tr><xsl:apply-templates select="th|td|td15|td13|td6|td5|td3|td2"/></tr> |
| </xsl:template> |
| |
| <xsl:template match="th"> |
| <td bgcolor="{$table-th-bg}" valign="top" align="middle"> |
| <xsl:if test="@colspan"> |
| <xsl:attribute name="colspan"> |
| <xsl:value-of select="@colspan"/> |
| </xsl:attribute> |
| </xsl:if> |
| <xsl:apply-templates select="b|a|text()"/> |
| </td> |
| </xsl:template> |
| |
| <xsl:template match="td"> |
| <td bgcolor="{$table-td-bg}" valign="top" align="left"> |
| <xsl:if test="@colspan"> |
| <xsl:attribute name="colspan"> |
| <xsl:value-of select="@colspan"/> |
| </xsl:attribute> |
| </xsl:if> |
| <xsl:apply-templates select="b|a|text()"/> |
| </td> |
| </xsl:template> |
| |
| <xsl:template match="source"> |
| <pre class="section"><xsl:apply-templates select="text()"/></pre> |
| </xsl:template> |
| |
| <xsl:template match="code"> |
| <b class="code"><xsl:apply-templates select="text()"/></b> |
| </xsl:template> |
| <!-- end JFC --> |
| |
| <xsl:template match="screen"> |
| <p class="screen"> |
| <div align="center"> |
| <table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#cccccc"> |
| <tr> |
| <td bgcolor="#cccccc" align="left"> |
| <xsl:apply-templates select="note|wait|type|typenext|read"/> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </p> |
| </xsl:template> |
| |
| <xsl:template match="screendos"> |
| <p class="screendos"> |
| <div align="center"> |
| <table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"> |
| <tr> |
| <td bgcolor="#000000" align="left"> |
| <xsl:apply-templates select="notedos|waitdos|typedos|typedosnext|readdos"/> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </p> |
| </xsl:template> |
| |
| <xsl:template match="screen5250"> |
| <p class="screen5250"> |
| <div align="center"> |
| <table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"> |
| <tr> |
| <td bgcolor="#000000" align="left"> |
| <xsl:apply-templates select="note5250|wait5250|type5250|type5250next|read5250"/> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </p> |
| </xsl:template> |
| |
| <!-- Unix look --> |
| |
| <xsl:template match="note"> |
| <div class="screen"> |
| <xsl:value-of select="text()"/> |
| </div> |
| </xsl:template> |
| |
| <xsl:template match="wait"> |
| <div class="screen">[...]</div> |
| </xsl:template> |
| |
| <xsl:template match="type"> |
| <code> |
| <nobr> |
| <em class="screen"> |
| <xsl:text>[user@host] ~</xsl:text> |
| <xsl:if test="string-length(@dir) > 0"> |
| <xsl:text>/</xsl:text> |
| <xsl:value-of select="@dir"/> |
| </xsl:if> |
| <xsl:text> $ </xsl:text> |
| </em> |
| <xsl:if test="string-length(text()) > 0"> |
| <b class="screen"><xsl:value-of select="text()"/></b> |
| </xsl:if> |
| </nobr> |
| </code> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="typenext"> |
| <code> |
| <nobr> |
| <em class="screen"> |
| <xsl:text> </xsl:text> |
| </em> |
| <xsl:if test="string-length(text()) > 0"> |
| <b class="screen"><xsl:value-of select="text()"/></b> |
| </xsl:if> |
| </nobr> |
| </code> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="read"> |
| <code class="screen"> |
| <nobr> |
| <xsl:apply-templates select="text()|enter"/> |
| </nobr> |
| </code> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="enter"> |
| <b class="screen"><xsl:value-of select="text()"/></b> |
| </xsl:template> |
| |
| <!-- DOS/Windows look --> |
| |
| <xsl:template match="notedos"> |
| <div class="screendos"> |
| <xsl:value-of select="text()"/> |
| </div> |
| </xsl:template> |
| |
| <xsl:template match="waitdos"> |
| <div class="screendos">[...]</div> |
| </xsl:template> |
| |
| <xsl:template match="readdos"> |
| <code class="screendos"> |
| <nobr> |
| <xsl:apply-templates select="text()|enterdos"/> |
| </nobr> |
| </code> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="typedos"> |
| <code> |
| <nobr> |
| <em class="screendos"> |
| <xsl:text>c:\</xsl:text> |
| <xsl:if test="string-length(@dir) > 0"> |
| <xsl:text>/</xsl:text> |
| <xsl:value-of select="@dir"/> |
| </xsl:if> |
| <xsl:text>></xsl:text> |
| </em> |
| <xsl:if test="string-length(text()) > 0"> |
| <b class="screendos"><xsl:value-of select="text()"/></b> |
| </xsl:if> |
| </nobr> |
| </code> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="typedosnext"> |
| <code> |
| <nobr> |
| <em class="screendos"> |
| <xsl:text> </xsl:text> |
| </em> |
| <xsl:if test="string-length(text()) > 0"> |
| <b class="screendos"><xsl:value-of select="text()"/></b> |
| </xsl:if> |
| </nobr> |
| </code> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="enterdos"> |
| <b class="screendos"><xsl:value-of select="text()"/></b> |
| </xsl:template> |
| |
| <!-- iSeries/5250 look --> |
| |
| <xsl:template match="note5250"> |
| <div class="screen5250"> |
| <xsl:value-of select="text()"/> |
| </div> |
| </xsl:template> |
| |
| <xsl:template match="wait5250"> |
| <div class="screen5250">[...]</div> |
| </xsl:template> |
| |
| <xsl:template match="read5250"> |
| <code class="screen5250"> |
| <nobr> |
| <xsl:apply-templates select="text()|enter5250"/> |
| </nobr> |
| </code> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="type5250"> |
| <code> |
| <nobr> |
| <em class="screen5250"> |
| <xsl:text>===></xsl:text> |
| </em> |
| <xsl:if test="string-length(text()) > 0"> |
| <b class="screen5250"><xsl:value-of select="text()"/></b> |
| </xsl:if> |
| </nobr> |
| </code> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="type5250next"> |
| <code> |
| <nobr> |
| <em class="screen5250"> |
| <xsl:text> </xsl:text> |
| </em> |
| <xsl:if test="string-length(text()) > 0"> |
| <b class="screen5250"><xsl:value-of select="text()"/></b> |
| </xsl:if> |
| </nobr> |
| </code> |
| <br/> |
| </xsl:template> |
| |
| <xsl:template match="enter5250"> |
| <b class="screen5250"><xsl:value-of select="text()"/></b> |
| </xsl:template> |
| |
| <xsl:template match="a"> |
| <b> |
| <a> |
| <xsl:call-template name="converturi"> |
| <xsl:with-param name="href" select="@href"/> |
| <xsl:with-param name="text" select="text()"/> |
| <xsl:with-param name="attr" select="'href'"/> |
| </xsl:call-template> |
| </a> |
| </b> |
| </xsl:template> |
| |
| <!-- |
| Convert the name of the matching "href" attribute (if needed) from |
| "file.xml#anchor" to "file.html#anchor", and insert the title of |
| the target document as the only text child of the resulting html |
| <a /> tag. (Of course, don't convert fully qualified URIs). |
| --> |
| <xsl:template name="converturi"> |
| <xsl:param name="attr" select="'href'"/> |
| <xsl:param name="href" select="''"/> |
| <xsl:param name="text" select="''"/> |
| |
| <xsl:choose> |
| |
| <!-- |
| If the "href" parameter contains ":" this is most definitely an URL, |
| therefore we need to quote it "as is" without translating its value. |
| The text is either supplied, or it's the value of the URL itself |
| (without the trailing anchor, if any). |
| --> |
| <xsl:when test="contains($href,':')"> |
| <xsl:attribute name="{$attr}"><xsl:value-of select="$href"/></xsl:attribute> |
| <xsl:if test="string-length($text) = 0"> |
| <xsl:choose> |
| <xsl:when test="contains($href,'#')"> |
| <xsl:value-of select="substring-before($href,'#')"/> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:value-of select="$href"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:if> |
| <xsl:value-of select="$text"/> |
| </xsl:when> |
| |
| <!-- |
| Nope, we don't have a full URL, therefore we interpret this as a |
| relative hyperlink to another document. We need to translate its |
| name from "*.xml" to "*.html" (because this is how we convert the |
| names) and the text included in this will be the title of the |
| target document. |
| --> |
| <xsl:otherwise> |
| <!-- |
| The "file" variable contains the part of the "href" before |
| the "#" character. Yes, the "file" name. |
| --> |
| <xsl:variable name="file"> |
| <xsl:choose> |
| <xsl:when test="contains($href,'#')"> |
| <xsl:value-of select="substring-before($href,'#')" /> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:value-of select="$href" /> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:variable> |
| |
| <!-- |
| Like "file" the "anchor" variable contains the part of the "href" |
| after the "#" character. |
| --> |
| <xsl:variable name="anchor"> |
| <xsl:if test="contains($href,'#')"> |
| <xsl:value-of select="'#'" /> |
| <xsl:value-of select="substring-after($href,'#')" /> |
| </xsl:if> |
| </xsl:variable> |
| |
| <!-- |
| Good, now we check if "file" ends in ".xml", if so, we replace that |
| with ".html", otherwise we keep its original value, then we add the |
| anchor we gathered before. We call this "target". |
| --> |
| <xsl:variable name="target"> |
| <xsl:value-of select="$homedoc"/> |
| <xsl:if test="string-length($file) > 0"> |
| <xsl:choose> |
| <xsl:when test="substring($file,string-length($file)-3) = '.xml'"> |
| <xsl:value-of select="substring($file,1,string-length($file)-3)"/> |
| <xsl:value-of select="'html'"/> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:value-of select="$file"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:if> |
| <xsl:value-of select="$anchor"/> |
| </xsl:variable> |
| |
| <!-- |
| Now, we want to set the attribute to contain the "target" variable. |
| --> |
| <xsl:attribute name="{$attr}"> |
| <xsl:value-of select="$target"/> |
| </xsl:attribute> |
| |
| <!-- |
| To finish we want to set the body of this element: if we have "text" |
| the body of the element will be just that, otherwise, it will be |
| the "target" value (the translated href) if there was no text, |
| or the "title" of the target document if we actually translated |
| something |
| --> |
| <xsl:if test="string-length($text) = 0"> |
| <xsl:choose> |
| <xsl:when test="$target = $href"> |
| <xsl:value-of select="$file"/> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:value-of select="document($file)/document/properties/title"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:if> |
| <xsl:value-of select="$text"/> |
| |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:template> |
| |
| <!-- |
| Build the name of the location of the printer friendly page |
| --> |
| <xsl:template name="printeruri"> |
| <xsl:param name="attr" select="'href'"/> |
| <xsl:param name="href" select="''"/> |
| |
| <!-- Extract the filename --> |
| <xsl:variable name="file"> |
| <xsl:choose> |
| <xsl:when test="contains($href,'/')"> |
| <xsl:value-of select="substring-after($href,'/')" /> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:value-of select="$href" /> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:variable> |
| <xsl:variable name="filename"> |
| <xsl:choose> |
| <xsl:when test="substring($file,string-length($file)-3) = '.xml'"> |
| <xsl:value-of select="substring($file,1,string-length($file)-3)"/> |
| <xsl:value-of select="'html'"/> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:value-of select="$file"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:variable> |
| |
| <!-- Extract the directory name --> |
| <xsl:variable name="dirname"> |
| <xsl:choose> |
| <xsl:when test="contains($href,'/')"> |
| <xsl:value-of select="substring-before($href,'/')" /> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:value-of select="''" /> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:variable> |
| <!-- Build the target name --> |
| <xsl:variable name="target"> |
| <xsl:value-of select="$homedoc"/> |
| <xsl:choose> |
| <xsl:when test="string-length($dirname) = 0"> |
| <xsl:value-of select="$printer-location"/> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:value-of select="$dirname"/> |
| <xsl:value-of select="'/'"/> |
| <xsl:value-of select="$printer-location"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| <xsl:value-of select="$filename"/> |
| </xsl:variable> |
| |
| <xsl:attribute name="{$attr}"> |
| <xsl:value-of select="$target"/> |
| </xsl:attribute> |
| </xsl:template> |
| |
| <!-- |
| Get the file (via the menu.idx) and build the printer friendly link |
| --> |
| <xsl:template name="addprint"> |
| <xsl:variable name="root" select="/"/> |
| <xsl:for-each select="document('menu.idx')/index/section"> |
| <xsl:for-each select="./document"> |
| <xsl:variable name="href" select="@href"/> |
| <xsl:if test="$root/document/properties/title = document(@href)/document/properties/title"> |
| |
| <small> |
| <a> |
| <xsl:call-template name="printeruri"> |
| <xsl:with-param name="href" select="$href"/> |
| </xsl:call-template> |
| <img src="{$images}/printer.gif" border="0" alt="Printer Friendly Version"/> |
| <br />print-friendly<br />version |
| </a> |
| </small> |
| |
| </xsl:if> |
| </xsl:for-each> |
| </xsl:for-each> |
| </xsl:template> |
| |
| <xsl:template match="copyright"> |
| <xsl:comment> |
| <xsl:apply-templates select="text()" /> |
| </xsl:comment> |
| </xsl:template> |
| |
| </xsl:stylesheet> |