| <xsl:stylesheet version="1.0" |
| xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
| <xsl:variable name="total" select="count(//reg)"/> |
| <xsl:template name="reg"> |
| <xsl:param name="which" select="1"/> |
| <xsl:param name="nextnum" select="0"/> |
| <xsl:variable name="thisnum" select="@regnum"/> |
| <xsl:element name="reg"> |
| <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> |
| <xsl:attribute name="bitsize"><xsl:value-of select="@bitsize"/></xsl:attribute> |
| <xsl:choose> |
| <xsl:when test="not(@regnum)"> |
| <xsl:attribute name="regnum"><xsl:value-of select="$nextnum"/></xsl:attribute> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:attribute name="regnum"><xsl:value-of select="@regnum"/></xsl:attribute> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:element> |
| <xsl:if test="$which < $total"> |
| <xsl:for-each select="/descendant::reg[$which + 1]"> |
| <xsl:choose> |
| <xsl:when test="not($thisnum)"> |
| <xsl:call-template name="reg"> |
| <xsl:with-param name="which" select="$which + 1"/> |
| <xsl:with-param name="nextnum" select="$nextnum + 1"/> |
| </xsl:call-template> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:call-template name="reg"> |
| <xsl:with-param name="which" select="$which + 1"/> |
| <xsl:with-param name="nextnum" select="$thisnum + 1"/> |
| </xsl:call-template> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:for-each> |
| </xsl:if> |
| </xsl:template> |
| |
| <xsl:template match="/"> |
| <target> |
| <xsl:for-each select="/descendant::reg[1]"> |
| <xsl:call-template name="reg"/> |
| </xsl:for-each> |
| </target> |
| </xsl:template> |
| </xsl:stylesheet> |