<
xsl:stylesheet xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform" xmlns:dtb=
"http://www.daisy.org/z3986/2005/dtbook/" version=
"2.0">
<
xsl:include href=
"recursive-copy2.xsl"/>
<
xsl:include href=
"output2.xsl"/>
<
xsl:variable name=
"maxLevel" select=
"6"/>
<
xsl:template match=
"dtb:level1|dtb:level2|dtb:level3|dtb:level4|dtb:level5|dtb:level6">
<
xsl:copy>
<
xsl:copy-of select=
"@*"/>
<
xsl:call-template name=
"scanNodes">
<
xsl:with-param name=
"currentLevel" select=
"number(substring-after(name(), 'level'))"/>
<
xsl:with-param name=
"node" select=
"node()"/>
</
xsl:call-template>
</
xsl:copy>
</
xsl:template>
<
xsl:template match=
"dtb:bodymatter|dtb:rearmatter">
<
xsl:copy>
<
xsl:copy-of select=
"@*"/>
<
xsl:call-template name=
"scanNodes">
<
xsl:with-param name=
"currentLevel" select=
"0"/>
<
xsl:with-param name=
"node" select=
"node()"/>
</
xsl:call-template>
</
xsl:copy>
</
xsl:template>
<
xsl:template name=
"scanNodes">
<
xsl:param name=
"currentLevel"/>
<
xsl:param name=
"targetLevel" select=
"$currentLevel + 1"/>
<
xsl:param name=
"node"/>
<
xsl:choose>
<
xsl:when test=
"$currentLevel>$maxLevel or $targetLevel>$maxLevel">
<
xsl:apply-templates select=
"$node"/>
</
xsl:when>
<
xsl:otherwise>
<
xsl:for-each-group select=
"$node" group-starting-with=
"dtb:*[number(substring-after(name(), 'h'))=$targetLevel or number(substring-after(name(), 'level'))=$targetLevel]">
<
xsl:choose>
<
xsl:when test=
"current-group()[1][number(substring-after(name(), 'h'))=$targetLevel]">
<
xsl:call-template name=
"addLevels">
<
xsl:with-param name=
"currentLevel" select=
"$currentLevel"/>
<
xsl:with-param name=
"targetLevel" select=
"$targetLevel"/>
<
xsl:with-param name=
"node" select=
"current-group()"/>
</
xsl:call-template>
</
xsl:when>
<
xsl:otherwise>
<
xsl:call-template name=
"scanNodes">
<
xsl:with-param name=
"currentLevel" select=
"$currentLevel"/>
<
xsl:with-param name=
"targetLevel" select=
"$targetLevel + 1"/>
<
xsl:with-param name=
"node" select=
"current-group()"/>
</
xsl:call-template>
</
xsl:otherwise>
</
xsl:choose>
</
xsl:for-each-group>
</
xsl:otherwise>
</
xsl:choose>
</
xsl:template>
<
xsl:template name=
"addLevels">
<
xsl:param name=
"currentLevel"/>
<
xsl:param name=
"targetLevel"/>
<
xsl:param name=
"node"/>
<
xsl:choose>
<
xsl:when test=
"$currentLevel=$targetLevel">
<
xsl:call-template name=
"scanNodes">
<
xsl:with-param name=
"currentLevel" select=
"$currentLevel"/>
<
xsl:with-param name=
"node" select=
"$node"/>
</
xsl:call-template>
</
xsl:when>
<
xsl:otherwise>
<
xsl:message terminate=
"no"><
xsl:value-of select=
"concat('Added a level', $currentLevel + 1)"/></
xsl:message>
<
xsl:element name=
"level{$currentLevel + 1}" namespace=
"http://www.daisy.org/z3986/2005/dtbook/">
<
xsl:call-template name=
"addLevels">
<
xsl:with-param name=
"currentLevel" select=
"$currentLevel + 1"/>
<
xsl:with-param name=
"targetLevel" select=
"$targetLevel"/>
<
xsl:with-param name=
"node" select=
"$node"/>
</
xsl:call-template>
</
xsl:element>
</
xsl:otherwise>
</
xsl:choose>
</
xsl:template>
</
xsl:stylesheet>