code-srv-test/dita-ot-3.6/plugins/org.dita.xhtml/xsl/xslhtml/mapwalker.xsl
2021-03-23 22:38:58 +00:00

89 lines
2.8 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<!--
This file is part of the DITA Open Toolkit project.
Copyright 2004, 2005 IBM Corporation
See the accompanying LICENSE file for applicable license.
-->
<!-- write technique adapted from Norman Walsh's DocBook XSLT
first instance technique adapted from Jeni Tennison and Steve Muench -->
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- stylesheet imports -->
<xsl:key name="topicref"
match="*[contains(@class, ' map/topicref ')]"
use="@href"/>
<xsl:template match="/">
<xsl:apply-templates select="*[contains(@class,' map/map ')]"/>
</xsl:template>
<xsl:template match="*[contains(@class,' map/map ')]">
<xsl:apply-templates select="*[contains(@class,' map/topicref ')]"/>
</xsl:template>
<xsl:template match="*[contains(@class,' map/topicref ')]">
<xsl:param name="infile" select="@href"/>
<xsl:param name="outroot">
<xsl:choose>
<xsl:when test="contains($infile, '.xml')">
<xsl:value-of select="substring-before($infile, '.xml')"/>
</xsl:when>
<xsl:when test="contains($infile, '.dita')">
<xsl:value-of select="substring-before($infile, '.dita')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$infile"/>
</xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="outfile">
<xsl:choose>
<xsl:when test="contains($infile, '.xml') or contains($infile, '.dita')">
<xsl:value-of select="concat($outroot, $OUTEXT)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$infile"/>
</xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="nodeID" select="generate-id(.)"/>
<xsl:param name="isFirstFile">
<xsl:choose>
<xsl:when test="$infile and $infile!=''">
<xsl:value-of
select="$nodeID = generate-id(key('topicref', $infile)[1])"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="true()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="isFirst" select="string($isFirstFile)='true'"/>
<xsl:apply-templates select="." mode="process">
<xsl:with-param name="infile" select="@href"/>
<xsl:with-param name="outroot" select="$outroot"/>
<xsl:with-param name="outfile" select="$outfile"/>
<xsl:with-param name="nodeID" select="$nodeID"/>
<xsl:with-param name="isFirst" select="$isFirst"/>
</xsl:apply-templates>
</xsl:template>
<!-- required overrides -->
<xsl:template match="*[contains(@class,' map/topicref ')]" mode="process">
<xsl:param name="infile"/>
<xsl:param name="outroot"/>
<xsl:param name="outfile"/>
<xsl:param name="nodeID"/>
<xsl:param name="isFirst"/>
<xsl:message terminate="yes">
<xsl:text>no process rule for topicref</xsl:text>
</xsl:message>
</xsl:template>
</xsl:stylesheet>