258 lines
6.8 KiB
XML
258 lines
6.8 KiB
XML
<?xml version="1.0"?>
|
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
version="1.0">
|
|
|
|
<xsl:output method="xml" indent="no"
|
|
doctype-public="-//Norman Walsh//DTD Website Autolayout V2.5.0//EN"
|
|
doctype-system="http://docbook.sourceforge.net/release/website/2.5.0/schema/dtd/autolayout.dtd"
|
|
/>
|
|
|
|
<xsl:strip-space elements="toc tocentry layout copyright"/>
|
|
|
|
<xsl:template match="layout">
|
|
<autolayout>
|
|
<xsl:text> </xsl:text>
|
|
<xsl:apply-templates/>
|
|
</autolayout>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="style|script|headlink|copyright|config">
|
|
<xsl:apply-templates select="." mode="copy"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="*" mode="copy">
|
|
<xsl:element name="{name(.)}">
|
|
<xsl:copy-of select="@*"/>
|
|
<xsl:apply-templates mode="copy"/>
|
|
</xsl:element>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="toc">
|
|
<xsl:if test="not(@page)">
|
|
<xsl:message terminate="yes">
|
|
<xsl:text>All toc entries must have a page attribute.</xsl:text>
|
|
</xsl:message>
|
|
</xsl:if>
|
|
|
|
<xsl:variable name="page" select="document(@page,.)"/>
|
|
|
|
<toc>
|
|
<xsl:call-template name="tocentry"/>
|
|
</toc>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="tocentry">
|
|
<tocentry>
|
|
<xsl:call-template name="tocentry"/>
|
|
</tocentry>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="notoc">
|
|
<notoc>
|
|
<xsl:call-template name="tocentry"/>
|
|
</notoc>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="tocentry">
|
|
<xsl:if test="@revisionflag">
|
|
<xsl:attribute name="revisionflag">
|
|
<xsl:value-of select="@revisionflag"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:choose>
|
|
<xsl:when test="@href">
|
|
<xsl:call-template name="tocentry.href"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:call-template name="tocentry.page"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="tocentry.href">
|
|
<xsl:if test="not(@href)">
|
|
<xsl:message terminate="yes">
|
|
<xsl:text>All toc entries must have an href attribute.</xsl:text>
|
|
</xsl:message>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="not(@id)">
|
|
<xsl:message terminate="yes">
|
|
<xsl:text>All href toc entries must have an id attribute.</xsl:text>
|
|
</xsl:message>
|
|
</xsl:if>
|
|
|
|
<xsl:message>
|
|
<xsl:text>off site: </xsl:text>
|
|
<xsl:value-of select="@href"/>
|
|
</xsl:message>
|
|
|
|
<xsl:attribute name="id">
|
|
<xsl:value-of select="@id"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="href">
|
|
<xsl:value-of select="@href"/>
|
|
</xsl:attribute>
|
|
<xsl:if test="@tocskip = '1'">
|
|
<xsl:attribute name="tocskip">
|
|
<xsl:value-of select="@tocskip"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="not(title)">
|
|
<xsl:message terminate="yes">
|
|
<xsl:text>Off-site links must provide a title.</xsl:text>
|
|
</xsl:message>
|
|
</xsl:if>
|
|
|
|
<xsl:text> </xsl:text>
|
|
<xsl:apply-templates select="title|titleabbrev|summary" mode="copy"/>
|
|
<xsl:text> </xsl:text>
|
|
<xsl:apply-templates select="tocentry"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="tocentry.page">
|
|
<xsl:if test="not(@page)">
|
|
<xsl:message terminate="yes">
|
|
<xsl:text>All toc entries must have a page attribute.</xsl:text>
|
|
</xsl:message>
|
|
</xsl:if>
|
|
|
|
<xsl:variable name="page" select="document(@page,.)"/>
|
|
|
|
<xsl:if test="not($page/*[1]/@id)">
|
|
<xsl:message terminate="yes">
|
|
<xsl:value-of select="@page"/>
|
|
<xsl:text>: missing ID.</xsl:text>
|
|
</xsl:message>
|
|
</xsl:if>
|
|
|
|
<xsl:variable name="id" select="$page/*[1]/@id"/>
|
|
|
|
<xsl:variable name="filename">
|
|
<xsl:choose>
|
|
<xsl:when test="@filename">
|
|
<xsl:value-of select="@filename"/>
|
|
</xsl:when>
|
|
<xsl:when test="/layout/config[@param='default-filename']">
|
|
<xsl:value-of select="(/layout/config[@param='default-filename'])[1]/@value"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>index.html</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="dir">
|
|
<xsl:apply-templates select="." mode="calculate-dir"/>
|
|
</xsl:variable>
|
|
|
|
<xsl:if test="$filename = ''">
|
|
<xsl:message terminate="yes">
|
|
<xsl:value-of select="@page"/>
|
|
<xsl:text>: missing filename.</xsl:text>
|
|
</xsl:message>
|
|
</xsl:if>
|
|
|
|
<xsl:message>
|
|
<xsl:value-of select="@page"/>
|
|
<xsl:text>: </xsl:text>
|
|
<xsl:if test="$dir != ''">
|
|
<xsl:value-of select="$dir"/>
|
|
</xsl:if>
|
|
<xsl:value-of select="$filename"/>
|
|
</xsl:message>
|
|
|
|
<xsl:attribute name="page">
|
|
<xsl:value-of select="@page"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="id">
|
|
<xsl:value-of select="$id"/>
|
|
</xsl:attribute>
|
|
<xsl:if test="$dir != ''">
|
|
<xsl:attribute name="dir">
|
|
<xsl:value-of select="$dir"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:attribute name="filename">
|
|
<xsl:value-of select="$filename"/>
|
|
</xsl:attribute>
|
|
<xsl:if test="@tocskip = '1'">
|
|
<xsl:attribute name="tocskip">
|
|
<xsl:value-of select="@tocskip"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:text> </xsl:text>
|
|
<xsl:choose>
|
|
<xsl:when test="title">
|
|
<xsl:apply-templates select="title" mode="copy"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<title>
|
|
<xsl:apply-templates select="$page/*[1]/head/title"/>
|
|
</title>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:text> </xsl:text>
|
|
|
|
<xsl:if test="titleabbrev or $page/*[1]/head/titleabbrev">
|
|
<xsl:choose>
|
|
<xsl:when test="titleabbrev">
|
|
<xsl:apply-templates select="titleabbrev" mode="copy"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<titleabbrev>
|
|
<xsl:apply-templates select="$page/*[1]/head/titleabbrev"/>
|
|
</titleabbrev>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="summary or $page/*[1]/head/summary">
|
|
<xsl:choose>
|
|
<xsl:when test="summary">
|
|
<xsl:apply-templates select="summary" mode="copy"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<summary>
|
|
<xsl:apply-templates select="$page/*[1]/head/summary"/>
|
|
</summary>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:if>
|
|
|
|
<xsl:apply-templates select="tocentry"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="*" mode="calculate-dir">
|
|
<xsl:choose>
|
|
<xsl:when test="starts-with(@dir, '/')">
|
|
<!-- if the directory on this begins with a "/", we're done... -->
|
|
<xsl:value-of select="substring-after(@dir, '/')"/>
|
|
<xsl:text>/</xsl:text>
|
|
</xsl:when>
|
|
|
|
<xsl:when test="parent::*">
|
|
<!-- if there's a parent, try it -->
|
|
<xsl:apply-templates select="parent::*" mode="calculate-dir"/>
|
|
<xsl:if test="@dir">
|
|
<xsl:value-of select="@dir"/>
|
|
<xsl:text>/</xsl:text>
|
|
</xsl:if>
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>
|
|
<xsl:if test="@dir">
|
|
<xsl:value-of select="@dir"/>
|
|
<xsl:text>/</xsl:text>
|
|
</xsl:if>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
</xsl:stylesheet>
|