<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
	xmlns:eat="http://msqr.us/xsd/ieat"
	xmlns:xweb="http://msqr.us/xsd/jaxb-web">

	<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
	
	<!-- message resource bundle defined as key for quick lookup -->
	<xsl:key name="i18n" match="xweb:x-data/xweb:x-msg/xweb:msg" use="@key"/>

	<xsl:template match="/">
		<xsl:apply-templates select="//eat:recipe"/>
	</xsl:template>
	
	<xsl:template match="eat:recipe">
		<xsl:if test="position() &gt; 1">
			<xsl:text>
-----------------------------------------------------------
</xsl:text>
			<xsl:text>[</xsl:text>
			<xsl:value-of select="position()"/>
			<xsl:text>] </xsl:text>
		</xsl:if>
		<xsl:value-of select="eat:name"/>
		<xsl:text>

</xsl:text>

		<xsl:if test="string(normalize-space(eat:excerpt))">
			<xsl:value-of select="eat:excerpt"/>
			<xsl:text>

</xsl:text>
		</xsl:if>
		
		<xsl:if test="string(normalize-space(eat:directions))">
			<xsl:value-of select="eat:directions"/>
			<xsl:text>

</xsl:text>
		</xsl:if>
		
		<xsl:if test="eat:source/@sourceId">
			<xsl:value-of select="key('i18n','recipe.source.displayName')"/>
			<xsl:text>: </xsl:text>
			<xsl:value-of select="eat:source"/>
			<xsl:text>
</xsl:text>
		</xsl:if>
		
		<xsl:if test="eat:difficulty/@difficultyId">
			<xsl:value-of select="key('i18n','recipe.difficulty.displayName')"/>
			<xsl:text>: </xsl:text>
			<xsl:value-of select="eat:difficulty"/>
			<xsl:text>
</xsl:text>
		</xsl:if>
		
		<xsl:if test="eat:base/@baseId">
			<xsl:value-of select="key('i18n','recipe.base.displayName')"/>
			<xsl:text>: </xsl:text>
			<xsl:value-of select="eat:base"/>
			<xsl:text>
</xsl:text>
		</xsl:if>

		<xsl:if test="eat:ethnicity/@ethnicityId">
			<xsl:value-of select="key('i18n','recipe.ethnicity.displayName')"/>
			<xsl:text>: </xsl:text>
			<xsl:value-of select="eat:ethnicity"/>
			<xsl:text>
</xsl:text>
		</xsl:if>

		<xsl:if test="eat:course/@courseId">
			<xsl:value-of select="key('i18n','recipe.course.displayName')"/>
			<xsl:text>: </xsl:text>
			<xsl:value-of select="eat:course"/>
			<xsl:text>
</xsl:text>
		</xsl:if>

		<xsl:if test="string(@servingSize)">
			<xsl:value-of select="key('i18n','recipe.servings.displayName')"/>
			<xsl:text>: </xsl:text>
			<xsl:value-of select="@servingSize"/>
			<xsl:text>
</xsl:text>
		</xsl:if>
		
		<xsl:text>
</xsl:text>
		<xsl:value-of select="key('i18n','recipe.ingredients.displayName')"/>
		<xsl:text>

</xsl:text>
		<xsl:apply-templates select="eat:ingredient"/>
		
		<xsl:value-of select="key('i18n','recipe.steps.displayName')"/>
		<xsl:text>

</xsl:text>
		<xsl:apply-templates select="eat:step"/>
		
	</xsl:template>

	<xsl:template match="eat:ingredient">
		<xsl:value-of select="position()"/>
		<xsl:text>) </xsl:text>
		<xsl:call-template name="ingredient-quantity">
			<xsl:with-param name="quantity" select="@quantity"/>
		</xsl:call-template>
		<xsl:if test="eat:unit">
			<xsl:text> </xsl:text>
			<xsl:apply-templates select="eat:unit"/>
		</xsl:if>
		<xsl:text> </xsl:text>
		<xsl:choose>
			<xsl:when test="eat:recipe">
				<xsl:value-of select="eat:recipe/eat:name"/>
				<xsl:text> *see [</xsl:text>
				<xsl:for-each select="eat:recipe">
					<xsl:number level="any"/>
				</xsl:for-each>
				<xsl:text>]</xsl:text>
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="eat:ingredient/eat:name"/>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:if test="string(@qualifier)">
			<xsl:text> -- </xsl:text>
			<xsl:value-of select="@qualifier"/>
		</xsl:if>
		<xsl:text>

</xsl:text>
	</xsl:template>
	
	<xsl:template match="eat:unit">
		<xsl:variable name="unit-key">
    			<xsl:text>unit.</xsl:text>
    			<xsl:value-of select="translate(@abbreviation,' ','')"/>
    			<xsl:if test="../@quantity &gt; 1">
    				<xsl:text>.plural</xsl:text>
    			</xsl:if>
    		</xsl:variable>
    		<xsl:value-of select="key('i18n',$unit-key)"/>
	</xsl:template>
	
	<xsl:template match="eat:step">
		<xsl:value-of select="position()"/>
		<xsl:text>) </xsl:text>
		<xsl:value-of select="."/>
		<xsl:text>
		
</xsl:text>
	</xsl:template>
	
	<xsl:template name="ingredient-quantity">
		<xsl:param name="quantity"/>
		<xsl:variable name="whole">
			<xsl:choose>
				<xsl:when test="contains($quantity,'.')">
					<xsl:value-of select="substring-before($quantity,'.')"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="$quantity"/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		<xsl:variable name="frac" select="$quantity - $whole"/>
		<!--
		<xsl:comment>
			whole = <xsl:value-of select="$whole"/>
			frac = <xsl:value-of select="$frac"/>
		</xsl:comment>
		-->
		<xsl:choose>
			<xsl:when test="$frac = 0">
				<xsl:value-of select="$whole"/>
			</xsl:when>
			<xsl:otherwise>
				<xsl:if test="not($whole = 0)">
					<xsl:value-of select="$whole"/>
					<xsl:text> </xsl:text>
				</xsl:if>
				<xsl:choose>
					<xsl:when test="$frac = .75">
						<xsl:text>3/4</xsl:text>
					</xsl:when>
					<xsl:when test="(format-number($frac,'.00') = '.67') or (format-number($frac,'.00') = '.66')">
						<xsl:text>2/3</xsl:text>
					</xsl:when>
					<xsl:when test="$frac = .5">
						<xsl:text>1/2</xsl:text>
					</xsl:when>
					<xsl:when test="format-number($frac,'.00') = '.33'">
						<xsl:text>1/3</xsl:text>
					</xsl:when>
					<xsl:when test="$frac = .25">
						<xsl:text>1/4</xsl:text>
					</xsl:when>
					<xsl:when test="floor($frac * 8) =  $frac * 8">
						<xsl:value-of select="$frac * 8"/>
						<xsl:text>/8</xsl:text>
					</xsl:when>
					<xsl:when test="floor($frac * 16) =  $frac * 16">
						<xsl:value-of select="$frac * 16"/>
						<xsl:text>/16</xsl:text>
					</xsl:when>
					<xsl:when test="floor($frac * 32) =  $frac * 32">
						<xsl:value-of select="$frac * 32"/>
						<xsl:text>/32</xsl:text>
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="format-number($frac,'.00#')"/>
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>

</xsl:stylesheet>