<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>

<xsl:template match="/">

	<nta>
		<declaration>
		
		<!--canales-->
		<xsl:text>chan </xsl:text>
		<xsl:call-template name="variables_canal"/>
		
		<!--canales de multisincronizacion-->
		<xsl:text>chan_multi </xsl:text>
		<xsl:call-template name="variables_canal_multi"/>		
		
		<!--boolean-->
		<xsl:if test="(nta/declaration/boolean !='')">
		<xsl:text>int [0,1] </xsl:text>
		<xsl:call-template name="variables_bool"/>
		</xsl:if>

		<!--int-->
		<xsl:if test="(nta/declaration/integer !='')">
		<xsl:text>int </xsl:text>
		<xsl:call-template name="variables_int"/>
		</xsl:if>
		
		<!--relojes-->
		<xsl:if test="(nta/declaration/reloj !='')">
		<xsl:text>clock </xsl:text>
		<xsl:call-template name="variables_reloj"/>
		</xsl:if>

		</declaration>

		 <xsl:for-each select="nta/template">
		
		 <xsl:variable name="rol" select="name"/>
		
		 <template>
		 <name>
		   <xsl:value-of select="$rol"/>
		 </name>
						
		<!--Declaracion de los location que componen el template-->
		<xsl:call-template name="template_locations">		
		<xsl:with-param name="rol"><xsl:value-of select="$rol"/></xsl:with-param>
		</xsl:call-template>
		
		<!--Transiciones que componen el template-->
		<xsl:call-template name="template_transitions">
		<xsl:with-param name="rol"><xsl:value-of select="$rol"/></xsl:with-param>
		</xsl:call-template>	
		
		</template>
		</xsl:for-each>
		
		<instantiation></instantiation>
		
		<system>		 
		 <xsl:value-of select="substring(//system,1,string-length(//system)-2)"/>
		 <xsl:text>;</xsl:text>
		</system>
		</nta>
</xsl:template>

<!--Plantilla para los location-->
<xsl:template name="template_locations">

	<xsl:param name="rol"/>
	
	<!--Se deben recorrer en orden los elementos, tanto interaction como frames-->
	<xsl:for-each select="child::*[position() > 1]">
	
	<xsl:sort select="orden" data-type="number"/>
			
		<!--Si se trata de un interaction de tipo send se debe añadir un location-->
		<xsl:if test="(name() = 'interaction') and (@role='source')">
		
			<location>
			<xsl:attribute name="id">
				<xsl:text>send_</xsl:text>
				<xsl:value-of select="@name"/>								
			</xsl:attribute>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<name>
				<xsl:text>send_</xsl:text>
				<xsl:value-of select="@name"/>				
			</name>
			</location>
		
		</xsl:if>
		
		<!--Si se trata de un interaction de tipo receive se debe añadir un location-->
		<xsl:if test="(name() = 'interaction') and (@role='target')">
		
			<location>
			<xsl:attribute name="id">
				<xsl:text>receive_</xsl:text>
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<name>
				<xsl:text>receive_</xsl:text>
				<xsl:value-of select="@name"/>				
			</name>
			</location>
		
		</xsl:if>
		
		<!--Si se trata del comienzo de un frame de tipo alt-->
		<xsl:if test="(name() = 'frames') and starts-with(@name,'alt')">
		
			<location>
			<xsl:attribute name="id">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<name>				
				<xsl:value-of select="@name"/>				
			</name>
			</location>
		
		</xsl:if>
		
		<!--Si se trata del comienzo de un frame de tipo alt-->
		<xsl:if test="(name() = 'frames') and starts-with(@name,'if')">
		
			<location>
			<xsl:attribute name="id">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<name>				
				<xsl:value-of select="@name"/>				
			</name>
			</location>
		
		</xsl:if>
		
		<!--Si se trata del comienzo de un frame de tipo loop-->
		<xsl:if test="(name() = 'frames') and starts-with(@name,'loop')">
		
			<location>
			<xsl:attribute name="id">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<name>				
				<xsl:value-of select="@name"/>				
			</name>
			</location>
		
		</xsl:if>
		
		<!--Si se trata del comienzo de un frame de tipo par-->
		<xsl:if test="(name() = 'frames') and starts-with(@name,'par')">
		
			<location>
			<xsl:attribute name="id">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<name>				
				<xsl:value-of select="@name"/>				
			</name>
			</location>
		
		</xsl:if>
		
		<!--Si se trata del final de un frame de tipo loop-->
		<xsl:if test="(name() = 'frames_end') and starts-with(@name,'loop')">
		
			<location>
			<xsl:attribute name="id">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
				<xsl:text>_in</xsl:text>
			</xsl:attribute>
			<name>
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
				<xsl:text>_in</xsl:text>				
			</name>
			</location>
		
			<location>
			<xsl:attribute name="id">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			<name>
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</name>
			</location>
		
		</xsl:if>
		
		<!--Si se trata del final de un frame de tipo par-->
		<xsl:if test="(name() = 'frames_end') and starts-with(@name,'par')">
		
			<location>
			<xsl:attribute name="id">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
				<xsl:text>_in</xsl:text>
			</xsl:attribute>
			<name>
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
				<xsl:text>_in</xsl:text>
			</name>
			</location>
		
			<location>
			<xsl:attribute name="id">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</xsl:attribute>
			<name>
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</name>
			</location>
		
		</xsl:if>
		
		<!--Si se trata del final de un frame de tipo alt-->
		<xsl:if test="(name() = 'frames_end') and starts-with(@name,'alt')">
		
			<location>
			<xsl:attribute name="id">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</xsl:attribute>
			<name>
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</name>
			</location>
		
		</xsl:if>
		
		<!--Si se trata del final de un frame de tipo if-->
		<xsl:if test="(name() = 'frames_end') and starts-with(@name,'if')">
		
			<location>
			<xsl:attribute name="id">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</xsl:attribute>
			<name>
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</name>
			</location>
		
		</xsl:if>
			
	</xsl:for-each>
				
	<location>
		<xsl:attribute name="id">
			<xsl:text>end_</xsl:text>			
			<xsl:value-of select="$rol"/>
		</xsl:attribute>
		<name>
			<xsl:text>end_</xsl:text>			
			<xsl:value-of select="$rol"/>
		</name>
	</location>
	
</xsl:template>

<!--Plantilla para los transition-->
<xsl:template name="template_transitions">

	<xsl:param name="rol"/>
	
	<!--Se deben recorrer en orden los elementos, tanto interaction como frames-->
	<xsl:for-each select="child::*[position() > 1]">
	
	<xsl:sort select="orden" data-type="number"/>	
			
		<!--Si se trata de un interaction de tipo send se debe añadir un transition con origen el estado añadido y sincronización !-->
		<xsl:if test="(name() = 'interaction') and (@role='source')">
		
			<xsl:variable name="origen" select="@source"/>
					
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">
				<xsl:text>send_</xsl:text>
				<xsl:value-of select="@name"/>
				<xsl:value-of select="$rol"/>
			</xsl:attribute>
			</source>
			<target ref=""/>
			<label kind="synchronisation">
			
				<!--Se debe mirar que canal se ha definido finalmente entre el origen y el destino del mensaje en el siguiente paso-->	
				<!--Por ahora se deja el canal source2targetChannel-->	
				<xsl:value-of select="../../template/name[@id=$origen]"/>
				<xsl:text>2</xsl:text>
				<xsl:value-of select="substring-before(@target,'RoleType')"/>								
				<xsl:text>Channel!</xsl:text>
				
			</label>
			</transition>
		
		</xsl:if>
		
		<!--Si se trata de un interaction de tipo receive se debe añadir un transition con origen el estado añadido y sincronización ?-->
		<xsl:if test="(name() = 'interaction') and (@role='target')">
		
			<xsl:variable name="destino" select="@target"/>
		
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">
				<xsl:text>receive_</xsl:text>
				<xsl:value-of select="@name"/>
				<xsl:value-of select="$rol"/>
			</xsl:attribute>
			</source>
			<target ref=""/>
			<label kind="synchronisation">
			
				<!--Se debe mirar que canal se ha definido finalmente entre el origen y el destino del mensaje en el siguiente paso-->	
				<!--Por ahora se deja el canal source2targetChannel-->	
				<xsl:value-of select="../../template/name[@id=$destino]"/>
				<xsl:text>2</xsl:text>
				<xsl:value-of select="substring-before(@target,'RoleType')"/>								
				<xsl:text>Channel?</xsl:text>
				
			</label>
			</transition>
		
		</xsl:if>
		
		<!--Si se trata de un frame de tipo alt/else se deben añadir dos transition, uno con la guarda sin negar y otro con la guarda negada-->		
		<xsl:if test="(name() = 'frames') and starts-with(@name,'if')">
		
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			</source>
			<target ref=""/>
			<label kind="synchronisation">
							
				<xsl:value-of select="@name"/>
				<xsl:text>_1</xsl:text>				
				<xsl:text>Channel!?</xsl:text>
				
			</label>
			
			<label kind="guard">
			    <xsl:value-of select="@guard"/>
			</label>
			
			</transition>
			
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			</source>
			<target ref=""/>
			<label kind="synchronisation">
			
				<xsl:value-of select="@name"/>
				<xsl:text>_2</xsl:text>				
				<xsl:text>Channel!?</xsl:text>
				
			</label>
			
			<label kind="guard">
			    <xsl:value-of select="@guard_invert"/>
			</label>
						
			</transition>
		
		</xsl:if>
		
		<!--Si se trata de un frame de tipo alt se deben añadir dos transition sin guarda-->
		<xsl:if test="(name() = 'frames') and starts-with(@name,'alt')">
		
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			</source>
			<target ref=""/>
			<label kind="synchronisation">
			
				<!--Se debe mirar que canal se ha definido finalmente entre el origen y el destino del mensaje en el siguiente paso-->	
				<!--Por ahora se deja el canal source2targetChannel-->	
				<xsl:value-of select="@name"/>
				<xsl:text>_1</xsl:text>				
				<xsl:text>Channel!?</xsl:text>
				
			</label>
			</transition>
			
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			</source>
			<target ref=""/>
			<label kind="synchronisation">
							
				<xsl:value-of select="@name"/>
				<xsl:text>_2</xsl:text>				
				<xsl:text>Channel!?</xsl:text>
				
			</label>
			</transition>
		
		</xsl:if>
		
		<!--Si se trata de un frame de tipo lop se deben añadir dos transition, una con el repeat y otra con el repeat invertido-->
		<xsl:if test="(name() = 'frames') and starts-with(@name,'loop')">
		
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			</source>
			<target ref=""/>
			<label kind="synchronisation">			
				
				<xsl:value-of select="@name"/>
				<xsl:text>_1</xsl:text>				
				<xsl:text>Channel!?</xsl:text>
				
			</label>
			
			<label kind="guard">
			    <xsl:value-of select="@repeat"/>
			</label>
			
			</transition>
			
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			</source>
			<target>
			<xsl:attribute name="ref">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</xsl:attribute>
			</target>
			<label kind="synchronisation">			
				
				<xsl:value-of select="@name"/>
				<xsl:text>_2</xsl:text>				
				<xsl:text>Channel!?</xsl:text>
				
			</label>
			
			<label kind="guard">
			    <xsl:value-of select="@repeat_invert"/>
			</label>
						
			</transition>
		
		</xsl:if>
		
		<!--Si se trata de un frame de tipo par se debe añadir un transition para el comienzo-->
		<xsl:if test="(name() = 'frames') and starts-with(@name,'par')">
		
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			</source>
			<target ref=""/>
			<label kind="synchronisation">			
				
				
				<xsl:text>par_</xsl:text>
				<xsl:value-of select="substring($rol,0,string-length($rol)-7)"/>
				<xsl:value-of select="substring-after(@name,'par')"/>
				<xsl:text>!</xsl:text>
				
			</label>
			
			</transition>
					
		</xsl:if>
		
		<!--Si se trata del final de un frame de tipo loop se debe añadir un transition para la vuelta al comienzo y otro con comienzo el final-->
		<xsl:if test="(name() = 'frames_end') and starts-with(@name,'loop')">
		
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source ref=""/>			
			<target>
			<xsl:attribute name="ref">				
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			</target>
			<label kind="synchronisation">			
				
				<xsl:value-of select="@name"/>
				<xsl:text>_3</xsl:text>				
				<xsl:text>Channel!?</xsl:text>
				
			</label>
			
			</transition>
			
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</xsl:attribute>
			</source>
			<target ref=""/>
			</transition>
			
		</xsl:if>
		
		<!--Si se trata del final de un frame de tipo par se deben añadir tres transition-->
		<xsl:if test="(name() = 'frames_end') and starts-with(@name,'par')">
		
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">				
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
				<xsl:text>_in</xsl:text>
			</xsl:attribute>
			</source>
			<target ref=""/>			
			
			</transition>
			
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source ref=""/>
			<target>			
			<xsl:attribute name="ref">				
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>				
			</xsl:attribute>			
			</target>			
			
			<label kind="synchronisation">
				
				<xsl:text>par_</xsl:text>
				<xsl:value-of select="substring($rol,0,string-length($rol)-7)"/>
				<xsl:value-of select="substring-after(@name,'par')"/>
				<xsl:text>?</xsl:text>
				
			</label>
			
			</transition>
			
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">				
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">				
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>				
			</xsl:attribute>
			</source>
			<target ref=""/>			
			
			</transition>
					
		</xsl:if>
		
		<!--Si se trata del final de un frame de tipo alt se debe añadir un transition-->
		<xsl:if test="(name() = 'frames_end') and starts-with(@name,'alt')">		
						
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</xsl:attribute>
			</source>
			<target ref=""/>
			</transition>
			
		</xsl:if>
		
		<!--Si se trata del final de un frame de tipo if se debe añadir un transition-->
		<xsl:if test="(name() = 'frames_end') and starts-with(@name,'if')">		
						
			<transition>
			
			<!--Añadir información de secuencia en caso de encontrarse dentro de un frame con varias partes-->
			<xsl:if test="@altseq">
				<xsl:attribute name="altseq">
				<xsl:value-of select="@altseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@altelseseq">
				<xsl:attribute name="altelseseq">				
				<xsl:value-of select="@altelseseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<xsl:if test="@parseq">
				<xsl:attribute name="parseq">				
				<xsl:value-of select="@parseq"/>								
				</xsl:attribute>			
			</xsl:if>
			
			<source>
			<xsl:attribute name="ref">
				<xsl:text>end_</xsl:text>
				<xsl:value-of select="@name"/>
			</xsl:attribute>
			</source>
			<target ref=""/>
			</transition>
			
		</xsl:if>
		
	</xsl:for-each>
			
</xsl:template>

<!--Plantilla para editar los canales definidos, eliminando aquellos repetidos o innecesarios. Falta quitar la , anterior al punto y coma en la siguiente plantilla-->
<xsl:template name="variables_canal">
	
	<xsl:for-each select="nta/declaration/canales/chan">
	
	<!--Ver si el nombre contiene un .-->
		<xsl:if test="contains(.,'.')">
			<xsl:variable name="origen" select="substring-before(.,'.')"/>			
			<xsl:variable name="destino" select="substring-after(.,'.')"/>
			<xsl:variable name="invertido" select="concat(concat($destino,'.'),$origen)"/>
			
			<!--En primer lugar se debe mirar que el origen y el destino sean diferentes-->
			<xsl:if test="$origen!=$destino">
			
				<!--Ver que el canal no haya aparecido previamente ni tampoco haya aparecido invertido-->
				<xsl:if test="not(.=preceding-sibling::*/.) and not($invertido=preceding-sibling::*/.)">

					<xsl:value-of select="translate(concat(.,'Channel'),'.','2')"/>
					<xsl:text>,</xsl:text>
					
				</xsl:if>
			
			</xsl:if>
			
		</xsl:if>
		
		<xsl:if test="not(contains(.,'.'))">
		
			<xsl:value-of select="concat(translate(.,'.','2'),'Channel')"/>
			<xsl:text>,</xsl:text>
		
		</xsl:if>
		
	</xsl:for-each>
	
	<xsl:text>;</xsl:text>
	
</xsl:template>

<!--Plantilla para los canales de multisincronización. Falta quitar la , anterior al punto y coma en la siguiente plantilla-->
<xsl:template name="variables_canal_multi">
	
	<xsl:for-each select="nta/declaration/canales_multi/chan_multi">
	
			<xsl:value-of select="concat(.,'Channel')"/>
			<xsl:text>,</xsl:text>		
				
	</xsl:for-each>
	
	<xsl:text>;</xsl:text>
	
</xsl:template>

<!--Plantilla para las variables de tipo booleano-->
<xsl:template name="variables_bool">

	<xsl:for-each select="nta/declaration/boolean/bool">
	
		<xsl:value-of select="."/>
		<xsl:text>,</xsl:text>
		
	</xsl:for-each>
	
	<xsl:text>;</xsl:text>
	
</xsl:template>

<!--Plantilla para las variables de tipo int-->
<xsl:template name="variables_int">

	<xsl:for-each select="nta/declaration/integer/int">
	
		<xsl:value-of select="."/>
		<xsl:text>,</xsl:text>
		
	</xsl:for-each>
	
	<xsl:text>;</xsl:text>
	
</xsl:template>

<!--Plantilla para las variables de tipo reloj-->
<xsl:template name="variables_reloj">

	<xsl:for-each select="nta/declaration/reloj/clock">
	
		<xsl:value-of select="."/>
		<xsl:text>,</xsl:text>
		
	</xsl:for-each>
	
	<xsl:text>;</xsl:text>
	
</xsl:template>

</xsl:stylesheet>