<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" indent="no" encoding="ascii"/>
<xsl:param name="get_name">41</xsl:param>
<!-- <xsl:strip-space elements="*"/> -->
<!-- MAIN TEMPLATE -->
<xsl:template match="/beer_recipes">
    <xsl:for-each select="recipe">
        <xsl:if test="name/@number=$get_name">
%\input css_caslon 
\input css_garamond 
%\input epsf
%\classicheadings
%\trajanheadings
%\warnockheadings
%\topmargin 1cm
%\bottommargin 1cm
%\leftmargin 1cm
%\rightmargin 1cm
\font\scttle garamondpremrprorrsrcr18 at 16pt
\overfullrule=0pt % put back to see overfulls
\def\ttsim{\lower.6ex\hbox{\char'176\null}}
\def\unorderedmarker{%
  \ifcase\unorderedlistdepth
      (impossible)%
  \or \char'225
  \or ~
  \else ~
  \fi
}%
<!-- Title -->
{\centerline{\ttle\#<xsl:value-of select="name/@number"/>: <xsl:value-of select="name"/> (<xsl:value-of select="style"/>)}
<!-- Brewer -->
{\centerline{\athr <xsl:for-each select="brewer"><xsl:value-of select="."/><xsl:text> </xsl:text></xsl:for-each> (<xsl:value-of select="date"/>)}
<!-- Description -->
<xsl:apply-templates select="descrip"/>
<!-- Recipe -->

{\subsect Recipe} (for <xsl:value-of select="number(boil/end/volume) - 0.5"/>~<xsl:value-of select="boil/end/volume/@type"/> final volume)\vskip0.1cm
<!-- Ingredients -->
\line{\hfil
\vbox{\offinterlineskip
\halign{\strut\hfil\quad#~<xsl:text>&amp;</xsl:text>\strut#\hfil\quad<xsl:text>&amp;</xsl:text>\strut\hfil#\quad<xsl:text>&amp;</xsl:text>%
    \vtop{\tolerance=750\parindent=0pt\parskip=8pt\hsize=3.5in\hangindent=0.5em\strut#\strut}\cr
<xsl:apply-templates select="ingredients"/>}}\hfill}
\vskip-0.4cm\subheading{Water}
<xsl:apply-templates select="ingredients/water"/>
\vskip-0.4cm\subheading{Mash}
                <xsl:apply-templates select="ingredients/adjuncts/adjunct/comment"/>
<xsl:apply-templates select="mash"/>
\vskip-0.4cm\subheading{Sparge}
<xsl:apply-templates select="sparge"/>
\vskip-0.4cm\subheading{Boil}
<xsl:apply-templates select="boil"/>
\vskip-0.4cm\subheading{Fermentation}
<xsl:apply-templates select="fermentation"/>
\vskip-0.4cm\subheading{Packaging}
<xsl:apply-templates select="packaging"/>
\vskip-0.4cm\subheading{Properties}
\line{\hfil
\vbox{\offinterlineskip
\halign{\strut\hfil\quad#~<xsl:text>&amp;</xsl:text>\strut#\hfil\quad\quad<xsl:text>&amp;</xsl:text>%
\strut\hfil#\quad~<xsl:text>&amp;</xsl:text>\strut#\hfil\cr%
<xsl:apply-templates select="predicted_data"/>}}\hfill}
<xsl:apply-templates select="brewing_notes"/>
<xsl:apply-templates select="tasting_notes"/>
\vfil\eject
\bye
</xsl:if>
</xsl:for-each>
</xsl:template>

<!-- DESCRIPTION -->
<xsl:template match="descript">
<xsl:apply-templates/>
</xsl:template>

<!-- INGREDIENTS -->
<xsl:template match="ingredients">
    <xsl:apply-templates select="grains"/>
    <xsl:apply-templates select="adjuncts"/>
    <xsl:apply-templates select="hops"/>
    <xsl:apply-templates select="spices"/>
    <xsl:apply-templates select="others"/>
    <xsl:apply-templates select="yeast"/>
</xsl:template>

<!-- GRAINS -->
<xsl:template match="grains">
<xsl:for-each select="grain"><xsl:apply-templates select="weight" mode="with-percentage"/><xsl:text>&amp;</xsl:text><xsl:value-of select="gname"/><xsl:apply-templates select="comment" mode="paren"/>\cr
</xsl:for-each>\noalign{\smallskip}
</xsl:template>

<!-- ADJUNCTS -->
<xsl:template match="adjuncts">
<xsl:for-each select="adjunct"><xsl:apply-templates select="weight" mode="with-percentage"/><xsl:text>&amp;</xsl:text><xsl:value-of select="aname"/><xsl:apply-templates select="comment" mode="adjunct_ref"/>\cr
</xsl:for-each>\noalign{\smallskip}
</xsl:template>

<!-- HOPS -->
<xsl:template match="hops">
<xsl:for-each select="hop"><xsl:apply-templates select="weight"/><xsl:text>&amp;&amp;</xsl:text><xsl:value-of select="hname"/>~<xsl:value-of select="@type"/> hops, <xsl:value-of select="hname/@aa"/><xsl:text>\% AA </xsl:text><xsl:apply-templates select="time" mode="paren"/><xsl:apply-templates select="first_wort"/><xsl:apply-templates select="secondary_hop"/><xsl:apply-templates select="keg_hop"/>\cr
</xsl:for-each>\noalign{\smallskip}
</xsl:template>

<xsl:template match="first_wort">(first wort hop)</xsl:template>

<xsl:template match="secondary_hop">(dry hopped in secondary)</xsl:template>

<xsl:template match="keg_hop">(dry hopped in keg)</xsl:template>

<!-- SPICES -->
<xsl:template match="spices">
<xsl:for-each select="spice"><xsl:apply-templates select="weight"/><xsl:apply-templates select="volume"/><xsl:text>&amp;&amp;</xsl:text><xsl:value-of select="sname"/><xsl:text> </xsl:text><xsl:apply-templates select="time" mode="paren"/><xsl:apply-templates select="liquor_infusion"/><xsl:apply-templates select="secondary_spiced"/><xsl:apply-templates select="keg_spiced"/>\cr
</xsl:for-each>\noalign{\smallskip}
</xsl:template>

<xsl:template match="liquor_infusion"><xsl:text>(Soaked in </xsl:text><xsl:value-of select="."/><xsl:text>, added at conditioning)</xsl:text></xsl:template>

<xsl:template match="secondary_spiced"><xsl:text>(added to secondary)</xsl:text></xsl:template>

<xsl:template match="keg_spiced"><xsl:text>(added to keg)</xsl:text></xsl:template>

<!-- OTHER INGREDIENTS -->
<xsl:template match="others">
<xsl:for-each select="other"><xsl:apply-templates select="weight"/><xsl:apply-templates select="volume"/><xsl:text>&amp;&amp;</xsl:text><xsl:value-of select="oname"/><xsl:text> (</xsl:text><xsl:apply-templates select="time"/><xsl:text>)</xsl:text>\cr
</xsl:for-each>\noalign{\smallskip}
</xsl:template>

<!-- YEAST -->
<xsl:template match="yeast">\multispan4\strut <xsl:value-of select="yname"/><xsl:text>, pitched at </xsl:text><xsl:apply-templates select="temperature"/>\hfil\cr
<xsl:apply-templates select="starter"/>
<xsl:apply-templates select="aeration"/>
<xsl:apply-templates select="comment" mode="table-row"/>
</xsl:template>

<xsl:template match="starter">\multispan4\strut <xsl:text>Starter: </xsl:text><xsl:value-of select="."/>\hfil\cr</xsl:template>

<xsl:template match="aeration">
\multispan4\strut <xsl:text>Aeration: </xsl:text><xsl:value-of select="."/>\hfil\cr</xsl:template>

<!-- WATER -->
<xsl:template match="water">
\unorderedlist
\li <xsl:value-of select="wname"/>
<xsl:apply-templates select="treatments"/>
\endunorderedlist
</xsl:template>

<xsl:template match="treatments">
\li <xsl:apply-templates select="volume" mode="notable"/><xsl:text> </xsl:text><xsl:value-of select="@type"/><xsl:text> water treated with:</xsl:text>
\unorderedlist
<xsl:for-each select="treatment">
\li <xsl:apply-templates select="weight" mode="notable"/><xsl:apply-templates select="volume" mode="notable"/><xsl:text> </xsl:text><xsl:value-of select="tname"/><xsl:apply-templates select="comment"/>
</xsl:for-each>
\endunorderedlist
</xsl:template>

<!-- ADJUNCT COMMENT FOR MASH SECTION -->
<xsl:template match="ingredients/adjuncts/adjunct/comment">
\unorderedlist
\li <xsl:value-of select="../aname"/>: <xsl:value-of select="."/>
\endunorderedlist
</xsl:template>

<!-- MASH -->
<xsl:template match="mash">
\unorderedlist
<xsl:for-each select="step">
\li <xsl:apply-templates select="added_water"/><xsl:apply-templates select="added_heat"/><xsl:apply-templates select="grist"/><xsl:apply-templates select="time" mode="step"/><xsl:apply-templates select="comment"/>
</xsl:for-each>
\endunorderedlist
</xsl:template>

<xsl:template match="added_water"><xsl:value-of select="volume"/><xsl:text> </xsl:text><xsl:value-of select="volume/@type"/><xsl:text> water @ </xsl:text><xsl:apply-templates select="temperature"/>
</xsl:template>

<xsl:template match="added_heat"><xsl:text>Heated</xsl:text>
</xsl:template>

<xsl:template match="grist"><xsl:text>, grist ratio of </xsl:text><xsl:value-of select="ratio"/><xsl:text> </xsl:text><xsl:value-of select="ratio/@type"/>
    <xsl:text> @ </xsl:text><xsl:apply-templates select="temperature"/>
</xsl:template>

<!-- SPARGE -->
<xsl:template match="sparge">
\unorderedlist
<xsl:for-each select="step">
\li <xsl:apply-templates select="added_water"/><xsl:text>, drain</xsl:text>
</xsl:for-each>
<xsl:apply-templates select="comment" mode="li"/>
\endunorderedlist
</xsl:template>

<!-- BOIL -->
<xsl:template match="boil">
\unorderedlist
\li <xsl:text>Boiled </xsl:text><xsl:apply-templates select="start/volume" mode="notable"/><xsl:text> for </xsl:text><xsl:apply-templates select="time"/><xsl:text> to yield </xsl:text><xsl:apply-templates select="end/volume" mode="notable"/><xsl:text> wort</xsl:text>
<xsl:apply-templates select="comment" mode="li"/>
\endunorderedlist
</xsl:template>

<!-- FERMENTATION -->
<xsl:template match="fermentation">
\unorderedlist
<xsl:apply-templates select="primary"/>
<xsl:apply-templates select="secondary"/>
<xsl:apply-templates select="comment" mode="li"/>
\endunorderedlist
</xsl:template>

<xsl:template match="primary">
\li <xsl:text>Primary: </xsl:text><xsl:value-of select="@type"/><xsl:text>, </xsl:text><xsl:apply-templates select="time"/><xsl:text>, </xsl:text><xsl:apply-templates select="temperature"/><xsl:apply-templates select="comment"/>
</xsl:template>

<xsl:template match="secondary">
\li <xsl:text>Secondary: </xsl:text><xsl:value-of select="@type"/><xsl:text>, </xsl:text><xsl:apply-templates select="time"/><xsl:text>, </xsl:text><xsl:apply-templates select="temperature"/><xsl:apply-templates select="comment"/>
</xsl:template>

<!-- PACKAGING -->
<xsl:template match="packaging">
\unorderedlist
<xsl:apply-templates select="bottling"/>
<xsl:apply-templates select="kegging"/>
<xsl:apply-templates select="time" mode="conditioning"/>
<xsl:apply-templates select="ready"/>
\endunorderedlist
</xsl:template>

<!-- BOTTLING -->
<xsl:template match="bottling">
\li <xsl:text>Bottled with </xsl:text><xsl:apply-templates select="weight" mode="notable"/><xsl:apply-templates select="volume" mode="notable"/><xsl:text> </xsl:text><xsl:value-of select="sugar"/><xsl:apply-templates select="comment"/>
</xsl:template>

<!-- KEGGING -->
<xsl:template match="kegging">
<xsl:apply-templates select="force_carb"/>
<xsl:apply-templates select="primed"/>
<xsl:apply-templates select="comment" mode="li"/>
</xsl:template>

<!-- FORCE_CARB -->
<xsl:template match="force_carb">
\li <xsl:text>Kegged at </xsl:text><xsl:value-of select="psi"/><xsl:text> psi, </xsl:text><xsl:apply-templates select="temperature"/><xsl:text> (</xsl:text><xsl:value-of select="volumes"/><xsl:text> volumes CO$_2$</xsl:text><xsl:text>)</xsl:text><xsl:apply-templates select="comment"/>
</xsl:template>

<!-- PRIMED -->
<xsl:template match="primed">
\li <xsl:text>Kegged with </xsl:text><xsl:apply-templates select="weight" mode="notable"/><xsl:apply-templates select="volume" mode="notable"/><xsl:text> </xsl:text><xsl:value-of select="sugar"/><xsl:apply-templates select="comment"/>
</xsl:template>

<!-- READY -->
<xsl:template match="ready">
\li <xsl:text>Ready to drink on </xsl:text><xsl:value-of select="."/>
</xsl:template>

<!-- DATA -->
<xsl:template match="predicted_data">
<xsl:text>Starting Gravity:&amp;</xsl:text><xsl:value-of select="../actual_data/SG"/><xsl:text>&amp;Final Gravity:&amp;</xsl:text><xsl:value-of select="../actual_data/FG"/>\cr
<xsl:text>Original Extract:&amp;</xsl:text><xsl:value-of select="../actual_data/OE"/><xsl:text>\deg{}Plato&amp;Apparent Extract:&amp;</xsl:text><xsl:value-of select="format-number(../actual_data/AE, '0.0')"/><xsl:text>\deg{}Plato</xsl:text>\cr
<xsl:text>&amp;&amp;Real Extract:&amp;</xsl:text><xsl:value-of select="format-number((((0.22 + (0.001 * ../actual_data/OE)) * ../actual_data/OE) + ../actual_data/AE) div (1.22 + (0.001 * ../actual_data/OE)), '0.0')"/><xsl:text>\deg{}Plato</xsl:text>\cr
<xsl:text>Alcohol:&amp;</xsl:text><xsl:value-of select="../actual_data/ABV"/><xsl:text>\% by volume&amp;Alcohol:&amp;</xsl:text><xsl:value-of select="../actual_data/ABW"/><xsl:text>\% by weight</xsl:text>\cr
<xsl:text>Apparent Attenuation:&amp;</xsl:text><xsl:value-of select="../actual_data/AA"/><xsl:text>\%&amp;Mash Efficiency:&amp;</xsl:text><xsl:value-of select="../actual_data/efficiency"/>\cr
<xsl:text>Bitterness:&amp;</xsl:text><xsl:apply-templates select="bitterness"/><xsl:text>&amp;Color:&amp;</xsl:text><xsl:apply-templates select="color"/>\cr
<xsl:text>{\sc bu:sg}:&amp;</xsl:text><xsl:value-of select="format-number(../predicted_data/bitterness div ((../actual_data/SG - 1) * 1000), '0.00')"/><xsl:text>&amp;{\sc bv}:&amp;</xsl:text><xsl:value-of select="format-number((../predicted_data/bitterness * 0.205) div ((((0.22 + (0.001 * ../actual_data/OE)) * ../actual_data/OE) + ../actual_data/AE) div (1.22 + (0.001 * ../actual_data/OE))), '0.00')"/>\cr
</xsl:template>

<xsl:template match="bitterness"><xsl:value-of select="."/><xsl:text> {\sc\lowercase{</xsl:text><xsl:value-of select="./@type"/><xsl:text>}}</xsl:text>
</xsl:template>

<xsl:template match="color"><xsl:value-of select="."/><xsl:text>\deg{}{\sc\lowercase{</xsl:text><xsl:value-of select="./@type"/><xsl:text>}}</xsl:text>
</xsl:template>

<!-- BREWING NOTES -->
<xsl:template match="brewing_notes">
<xsl:text>{\subsect Brewing Notes}</xsl:text>
\unorderedlist
<xsl:apply-templates select="note"/>
\endunorderedlist
</xsl:template>

<!-- TASTING NOTES -->
<xsl:template match="tasting_notes">
<xsl:text>{\subsect Tasting Notes}</xsl:text>
\unorderedlist
<xsl:apply-templates select="note"/>
\endunorderedlist
</xsl:template>

<!-- NOTE -->
<xsl:template match="note">
\li <xsl:value-of select="."/>
</xsl:template>

<!-- WEIGHT -->
<xsl:template match="weight"><xsl:value-of select="."/><xsl:text>&amp;</xsl:text><xsl:value-of select="@type"/></xsl:template>

<xsl:template match="weight" mode="with-percentage"><xsl:value-of select="."/><xsl:text>&amp;</xsl:text><xsl:value-of select="@type"/><xsl:text>&amp;</xsl:text><xsl:apply-templates select="../percentage"/>
</xsl:template>

<xsl:template match="weight" mode="notable"><xsl:value-of select="."/><xsl:text> </xsl:text><xsl:value-of select="@type"/>
</xsl:template>

<!-- VOLUME -->
<xsl:template match="volume"><xsl:value-of select="."/><xsl:text>&amp;</xsl:text><xsl:value-of select="@type"/></xsl:template>

<xsl:template match="volume" mode="notable"><xsl:value-of select="."/><xsl:text> </xsl:text><xsl:value-of select="@type"/>
</xsl:template>

<!-- TIME -->
<xsl:template match="time"><xsl:value-of select="."/><xsl:text> </xsl:text><xsl:value-of select="@type"/></xsl:template>

<xsl:template match="time" mode="paren">(<xsl:value-of select="."/>~<xsl:value-of select="@type"/>)</xsl:template>

<xsl:template match="time" mode="step"><xsl:text> (Held </xsl:text><xsl:value-of select="."/><xsl:text> </xsl:text><xsl:value-of select="@type"/><xsl:text>)</xsl:text>
</xsl:template>

<xsl:template match="time" mode="conditioning">
\li <xsl:text>Conditioned for </xsl:text><xsl:value-of select="."/><xsl:text> </xsl:text><xsl:value-of select="@type"/>
</xsl:template>

<!-- TEMPERATURE -->
<xsl:template match="temperature"><xsl:value-of select="."/>\deg{}{\sc \lowercase{<xsl:value-of select="./@type"/>}}</xsl:template>

<!-- PERCENTAGE -->
<xsl:template match="percentage">(<xsl:value-of select="."/>\%)</xsl:template>

<!-- COMMENT -->
<xsl:template match="comment"><xsl:text>. </xsl:text><xsl:value-of select="."/>
</xsl:template>

<xsl:template match="comment" mode="paren"> (<xsl:value-of select="."/>)</xsl:template>

<xsl:template match="comment" mode="table-row">\multispan4\strut <xsl:text>(</xsl:text><xsl:value-of select="."/><xsl:text>)</xsl:text>\hfil\cr
</xsl:template>

<xsl:template match="comment" mode="li">\li <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="comment" mode="adjunct_ref"><xsl:text> (see notes below)</xsl:text></xsl:template>

</xsl:stylesheet>
