<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tei="http://www.tei-c.org/ns/1.0"
>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- globals -->
<xsl:output method="xml" version="1.0" indent="yes" encoding="UTF-8"/>
<xsl:key name="rawid" match="s|w|tei:s|tei:w" use="@id"/>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- template: root -->
<xsl:template match="/*" priority="100">
<xsl:element name="doc">
<xsl:apply-templates select="@xml:base|@tei:base|@base|//s|//tei:s"/>
</xsl:element>
</xsl:template>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- template: chains: non-initial elements -->
<xsl:template match="*[@prev]" priority="20">
<!-- content of these should get pulled in by named template "chain.next" -->
</xsl:template>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- template: chain attributes: ignore -->
<xsl:template match="@prev|@next|lb|pb|fw" priority="20">
<!-- ignore -->
</xsl:template>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- template: NAMED: chain.first -->
<xsl:template name="chain.first">
<xsl:param name="lname" select="local-name()"/>
<xsl:element name="{$lname}">
<xsl:apply-templates select="@*|*|text()"/>
<xsl:if test="@next">
<xsl:call-template name="chain.next">
<xsl:with-param name="nextid" select="@next"/>
</xsl:call-template>
</xsl:if>
</xsl:element>
</xsl:template>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- template: NAMED: chain.next -->
<xsl:template name="chain.next">
<xsl:param name="nextid" select="./@next"/>
<xsl:param name="nextnod" select="key('rawid',$nextid)"/>
<xsl:if test="$nextid">
<xsl:apply-templates select="$nextnod/*"/>
<xsl:call-template name="chain.next">
<xsl:with-param name="nextid" select="$nextnod/@next"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- template: CAB structure: fragmented -->
<xsl:template match="s|tei:s|w|tei:w|w//*|tei:w//*">
<xsl:call-template name="chain.first"/>
</xsl:template>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- template: text: kept -->
<xsl:template match="@*|w//a//text()|tei:w//tei:a//text()">
<xsl:copy/>
</xsl:template>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- default: just recurse -->
<xsl:template match="*|text()|processing-instruction()|comment()" priority="-1">
<xsl:apply-templates select="*|text()|processing-instruction()|comment()"/>
</xsl:template>
</xsl:stylesheet>