<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dyn="http://exslt.org/dynamic"
extension-element-prefixes="dyn"
>
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html40/strict.dtd" indent="yes"/>
<xsl:include href="identity.xsl"/>
<xsl:param name="sitemapuri"/>
<xsl:variable name="map" select="document($sitemapuri,document(''))"/>
<xsl:param name="active"/>
<xsl:variable name="activenode" select="dyn:evaluate(concat('$map',$active))"/>
<xsl:variable name="lang" select="/html/@xml_lang"/>
<xsl:template match="*[@href|@src]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="*|text()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@href|@src">
<xsl:attribute name="{name()}">
<xsl:choose>
<xsl:when test="$lang and starts-with(string(),'resolve:')">
<xsl:variable name="sub" select="substring-after(string(),':')"/>
<xsl:choose>
<xsl:when test="contains($sub,':')">
<xsl:call-template name="resolve">
<xsl:with-param name="ref"><xsl:value-of select="concat('resolve:',substring-after($sub,':'))"/></xsl:with-param>
<xsl:with-param name="nav" select="$map/sitemap/section[@name=substring-before($sub,':')]"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="resolve">
<xsl:with-param name="ref"><xsl:value-of select="."/></xsl:with-param>
<xsl:with-param name="nav" select="$map/sitemap/section[@name=$lang]"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="resolve">
<xsl:with-param name="ref"><xsl:value-of select="."/></xsl:with-param>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:template>
<xsl:template name="getpath">
<xsl:param name="dest"/>
<xsl:choose>
<xsl:when test="count($dest|$map/sitemap)=1">
<xsl:value-of select="$dest/@baseURL"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="getpath"><xsl:with-param name="dest" select="$dest/parent::*"/></xsl:call-template><xsl:if test="$dest/@dest"><xsl:value-of select="concat('/',$dest/@dest)"/></xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="resolve">
<xsl:param name="ref"/>
<xsl:param name="nav" select="$map/sitemap"/>
<xsl:choose>
<xsl:when test="starts-with($ref,'resolve:')">
<xsl:variable name="rif" select="substring-after($ref,':')"/>
<xsl:choose>
<xsl:when test="contains($rif,'#')">
<xsl:variable name="refname" select="substring-before($rif,'#')"/>
<xsl:variable name="fragment" select="substring-after($ref,'#')"/>
<xsl:choose>
<xsl:when test="$nav//*[@name=$refname]">
<xsl:call-template name="getpath">
<xsl:with-param name="dest" select="$nav//*[@name=$refname]"/>
</xsl:call-template>
<xsl:value-of select="concat('#',$fragment)"/>
</xsl:when>
<xsl:when test="$map/sitemap//*[@name=$refname]">
<xsl:call-template name="getpath">
<xsl:with-param name="dest" select="$map/sitemap//*[@name=$refname][1]"/>
</xsl:call-template>
<xsl:value-of select="concat('#',$fragment)"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>WRONG REF:</xsl:text><xsl:value-of select="$ref"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$nav//*[@name=$rif]">
<xsl:call-template name="getpath">
<xsl:with-param name="dest" select="$nav//*[@name=$rif]"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$map/sitemap//*[@name=$rif]">
<xsl:call-template name="getpath">
<xsl:with-param name="dest" select="$map/sitemap//*[@name=$rif][1]"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:text>WRONG REF:</xsl:text><xsl:value-of select="$ref"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$ref"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>