<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mtr="http://www.metarule.com/metarule" version="1.0">
<xsl:output method="html"/>

<!-- Override the built-in template -->
<xsl:template match="text()"/>

<xsl:template match="mtr:ruleset">
	<hr/>
	<p><b>Rules generated:</b></p>
	<xsl:apply-templates/>
</xsl:template>

<xsl:template match="mtr:inputlist|mtr:outputlist">
	<table border="1" style="font-family:helvetica;font-size:12px;">
	<caption align="left"><b><xsl:value-of select="name()"/></b></caption>
	<tr>
		<th>
			<b>Name</b>
		</th>
		<th>
			<b>Type</b>
		</th>
		<th>
			<b>Category/Set</b>
		</th>
	</tr>
	<xsl:apply-templates/>
	</table>
</xsl:template>


<xsl:template match="mtr:if|mtr:then">
	<xsl:element name="b">
	<xsl:value-of select="name()"/>
	<xsl:text> </xsl:text>
	<xsl:value-of select="text()"/>
	</xsl:element>
	<xsl:apply-templates/>
</xsl:template>

<xsl:template match="mtr:willbe">
	<xsl:text>will be </xsl:text>
	<xsl:value-of select="text()"/>
	<xsl:apply-templates/>
</xsl:template>

<xsl:template match="mtr:rule">
	<xsl:element name="p">
	<xsl:apply-templates/>
	</xsl:element>
</xsl:template>

<xsl:template match="mtr:confidence">
	<xsl:text>(</xsl:text>
	<xsl:value-of select="name()"/>
	<xsl:text> </xsl:text>
	<xsl:value-of select="format-number(number(text()),'0.00')"/>
	<xsl:text>)</xsl:text>
	<xsl:apply-templates/>
</xsl:template>

<xsl:template match="mtr:output|mtr:input|mtr:category|mtr:constant">
	<xsl:value-of select="text()"/>
	<xsl:text> </xsl:text>
	<xsl:apply-templates/>
</xsl:template>

<xsl:template match="mtr:and|mtr:or|mtr:is|mtr:plus|mtr:minus|mtr:multiply|mtr:divide|mtr:power">
	<xsl:apply-templates select="*[position() = 1]"/>
	<xsl:attribute name="style">background-color: lightblue</xsl:attribute>
	<xsl:value-of select="name()"/>
	<xsl:text> </xsl:text>
	<xsl:apply-templates select="*[position() = 2]"/>
</xsl:template>

<xsl:template match="mtr:set|mtr:range">
	<xsl:value-of select="@settype"/>
	<xsl:text> </xsl:text>
</xsl:template>

<xsl:template match="mtr:not|mtr:unaryminus|mtr:sigmoid">
	<xsl:value-of select="name()"/>
	<xsl:text> </xsl:text>
	<xsl:apply-templates select="*[position() = 1]"/>
</xsl:template>

<xsl:template match="mtr:inputspec|mtr:outputspec">
	<xsl:element name="tr">
		<xsl:element name="td">
			<xsl:apply-templates select="*[position() = 1]"/>
		</xsl:element>
		<xsl:if test="mtr:path">
			<xsl:apply-templates select="*[position() = 3]" />
			</xsl:if>
		<xsl:if test="not(mtr:path)">
			<xsl:apply-templates select="*[position() = 2]" />
		</xsl:if>
	</xsl:element>
</xsl:template>

<xsl:template match="mtr:numeric">
	<xsl:element name="td">
		<xsl:value-of select="name()"/>
	</xsl:element>
	<xsl:element name="td">
		<xsl:apply-templates/>
	</xsl:element>
</xsl:template>

<xsl:template match="mtr:setdefinition">
	<xsl:apply-templates />
	<xsl:element name="br"/>
</xsl:template>

<xsl:template match="mtr:lower|mtr:middle">
	<xsl:choose>
		<xsl:when test="text() = '-INF'">
			<xsl:text>-infinity</xsl:text>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="format-number(number(text()),'0.000')"/>
		</xsl:otherwise>
	</xsl:choose>
	<xsl:text>,</xsl:text>
</xsl:template>
	
<xsl:template match="mtr:upper">
	<xsl:choose>
		<xsl:when test="text() = 'INF'">
			<xsl:text>infinity</xsl:text>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="format-number(number(text()),'0.000')"/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

<xsl:template match="mtr:categorical">
	<xsl:element name="td">
	<xsl:value-of select="name()"/>
	</xsl:element>
	<xsl:element name="td">
	<xsl:for-each select="mtr:category">
		<xsl:value-of select="text()"/>
		<xsl:text> </xsl:text>
		<xsl:element name="br"/>
	</xsl:for-each>
	</xsl:element>
</xsl:template>

<xsl:template match="mtr:textual">
	<xsl:element name="td">
			<xsl:element name="font">
				<xsl:attribute name="face">helvetica</xsl:attribute>
				<xsl:attribute name="size">2</xsl:attribute>
				<xsl:value-of select="name()" />
			</xsl:element>
		</xsl:element>
		<xsl:element name="td">
			<xsl:element name="font">
				<xsl:attribute name="face">helvetica</xsl:attribute>
				<xsl:attribute name="size">2</xsl:attribute>
				<xsl:for-each select="mtr:vocabulary">
					<xsl:value-of select="@name" />
					<xsl:text> </xsl:text>
					<xsl:element name="br" />
				</xsl:for-each>
			</xsl:element>
		</xsl:element>
	</xsl:template>
	<xsl:template match="mtr:presence">
		<xsl:element name="td">
			<xsl:value-of select="name()" />
		</xsl:element>
	</xsl:template>
	<xsl:template match="mtr:present|mtr:absent">
		<xsl:value-of select="name()" />
		<xsl:text> </xsl:text>
	</xsl:template>
	
	<xsl:template match="mtr:arity">
	<xsl:element name="td">
		<xsl:value-of select="name()"/>
	</xsl:element>
	<xsl:element name="td">
		<xsl:apply-templates/>
	</xsl:element>
	</xsl:template>


</xsl:stylesheet>