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