<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xt="http://www.jclark.com/xt"
		version="1.0">

<xsl:template match="Go">
	<xsl:call-template name="Go2">
	<xsl:with-param name="TMS">
	<TMState>
<Instruction CurrentState="A" CurrentSymbol="b" NextSymbol="." NextState="Z" Move="R">
<Instruction CurrentState="A" CurrentSymbol="1" NextSymbol="2" NextState="A" Move="R">
</Instruction>
</Instruction>
		<State>A</State>
		<TapeLeft>
		<Nod><Square>b</Square><Nod><Square>b</Square>
		<Nod><N/></Nod>
		</Nod></Nod>
		</TapeLeft>
		<xsl:copy-of select="Symbol"/>
		<xsl:copy-of select="TapeRight"/>
	</TMState>
	</xsl:with-param>
	</xsl:call-template>

</xsl:template>

<!--============================================-->

<xsl:template name="Go2"> 
<xsl:param name="TMS"/>
<xsl:for-each select="xt:node-set($TMS)/TMState">

<xsl:choose>

<xsl:when test="State='Z'">
	<xsl:copy-of select="TapeLeft"/>
	<xsl:copy-of select="Symbol"/>
	<xsl:copy-of select="TapeRight"/>
</xsl:when>

<xsl:otherwise>
	<xsl:call-template name="Go2">
	<xsl:with-param name="TMS">
	<TMState>
	<xsl:copy-of select="Instruction"/>
		<xsl:call-template name="Step">
		<xsl:with-param name="TMS">
		<TMState>
			<xsl:copy-of select="Instruction"/>
			<xsl:copy-of select="State"/>
			<xsl:copy-of select="TapeLeft"/>
			<xsl:copy-of select="Symbol"/>
			<xsl:copy-of select="TapeRight"/>
		</TMState>
		</xsl:with-param>
		</xsl:call-template>
	</TMState>
	</xsl:with-param>
	</xsl:call-template>
</xsl:otherwise>

</xsl:choose>
</xsl:for-each>
</xsl:template>

<!--===============================================-->
<xsl:template name="Step">
  <xsl:param name="TMS"/>
<xsl:for-each select="xt:node-set($TMS)/TMState">

<xsl:choose>

<xsl:when test="Instruction/@CurrentState=State">
	<xsl:choose>
	<xsl:when test="Instruction/@CurrentSymbol=Symbol">
		<xsl:choose>
		<xsl:when test="Instruction/@Move='R'">
			<State>
				<xsl:value-of select="Instruction/@NextState"/>
			</State>
			<TapeLeft>
				<Nod>
				<Square>
				<xsl:value-of select="Instruction/@NextSymbol"/>
				</Square>
				<xsl:copy-of select="TapeLeft/Nod"/>
				</Nod>
			</TapeLeft>
			<Symbol>
				<xsl:value-of select="TapeRight/Nod/Square"/>
			</Symbol>
			<TapeRight>
				<Nod>
				<xsl:for-each select="TapeRight/Nod/Nod">
				<xsl:apply-templates/>
				</xsl:for-each>
				</Nod>
			</TapeRight>
		</xsl:when>

		<xsl:when test="Instruction/@Move='L'">
			<State>
				<xsl:value-of select="Instruction/@NextState"/>
			</State>
			<TapeLeft>
				<Nod>
				<xsl:for-each select="TapeLeft/Nod/Nod">
				<xsl:apply-templates/>
				</xsl:for-each>
				</Nod>
			</TapeLeft>
			<Symbol>
				<xsl:value-of select="TapeLeft/Nod/Square"/>
			</Symbol>
			<TapeRight>
				<Nod>
				<Square>
				<xsl:value-of select="Instruction/@NextSymbol"/>
				</Square>
				<xsl:copy-of select="TapeRight/Nod"/>
				</Nod>
			</TapeRight>
		</xsl:when>
		</xsl:choose>
	</xsl:when>

	<xsl:otherwise>
		<xsl:call-template name="Step">
		<xsl:with-param name="TMS">
		<TMState>
			<xsl:copy-of select="Instruction/Instruction"/>
			<xsl:copy-of select="State"/>
			<xsl:copy-of select="TapeLeft"/>
			<xsl:copy-of select="Symbol"/>
			<xsl:copy-of select="TapeRight"/>
		</TMState>
		</xsl:with-param>
		</xsl:call-template>
	</xsl:otherwise>
	</xsl:choose>
</xsl:when>

<xsl:otherwise>
	<xsl:call-template name="Step">
	<xsl:with-param name="TMS">
	<TMState>
		<xsl:copy-of select="Instruction/Instruction"/>
		<xsl:copy-of select="State"/>
		<xsl:copy-of select="TapeLeft"/>
		<xsl:copy-of select="Symbol"/>
		<xsl:copy-of select="TapeRight"/>
	</TMState>
	</xsl:with-param>
	</xsl:call-template>
</xsl:otherwise>

</xsl:choose>
</xsl:for-each>
</xsl:template>

<!--===============================================-->
<xsl:template match="N">

<Square>b</Square>
<Nod><Square>b</Square>
<Nod><N/>
</Nod></Nod>

</xsl:template>
<!--===============================================-->
<xsl:template match="Nod">
     <xsl:copy-of select="."/>
</xsl:template>
<!--===============================================-->
<xsl:template match="Square">
    <xsl:copy-of select="."/>
</xsl:template>
<!--===============================================-->

</xsl:stylesheet>