Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/recipe-fiddle.git
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!--
 | Converts a fractional number into a UTF-8 character.
 |
 | @param quantity - The numeric value to convert.
 +-->
<xsl:template name="utf-fraction">
  <xsl:param name="quantity" />
  <xsl:param name="rounding" select="false()" />

  <xsl:variable name="frac">
    <xsl:value-of select="$quantity mod 1" />
  </xsl:variable>
  <xsl:variable name="whole">
    <xsl:if test="$quantity - $frac != 0">
      <xsl:value-of select="$quantity - $frac" />
    </xsl:if>
  </xsl:variable>

  <xsl:choose>
    <xsl:when test="$frac = '0.5'"><xsl:value-of select="$whole" />&#189;</xsl:when>
    <xsl:when test="$frac = '0.333'"><xsl:value-of select="$whole" />&#8531;</xsl:when>
    <xsl:when test="$frac = '0.666'"><xsl:value-of select="$whole" />&#8532;</xsl:when>
    <xsl:when test="$frac = '0.25'"><xsl:value-of select="$whole" />&#188;</xsl:when>
    <xsl:when test="$frac = '0.75'"><xsl:value-of select="$whole" />&#190;</xsl:when>
    <xsl:when test="$frac = '0.2'"><xsl:value-of select="$whole" />&#8533;</xsl:when>
    <xsl:when test="$frac = '0.4'"><xsl:value-of select="$whole" />&#8534;</xsl:when>
    <xsl:when test="$frac = '0.6'"><xsl:value-of select="$whole" />&#8535;</xsl:when>
    <xsl:when test="$frac = '0.8'"><xsl:value-of select="$whole" />&#8536;</xsl:when>
    <xsl:when test="$frac = '0.166'"><xsl:value-of select="$whole" />&#8537;</xsl:when>
    <xsl:when test="$frac = '0.833'"><xsl:value-of select="$whole" />&#8538;</xsl:when>
    <xsl:when test="$frac = '0.125'"><xsl:value-of select="$whole" />&#8539;</xsl:when>
    <xsl:when test="$frac = '0.375'"><xsl:value-of select="$whole" />&#8540;</xsl:when>
    <xsl:when test="$frac = '0.625'"><xsl:value-of select="$whole" />&#8541;</xsl:when>
    <xsl:when test="$frac = '0.875'"><xsl:value-of select="$whole" />&#8542;</xsl:when>

    <!-- Round up amounts to attain exact fraction of 1/2 or 0. -->
    <xsl:when test="($frac != '0') and $rounding"><xsl:call-template name="utf-fraction"><xsl:with-param name="quantity" select="round(($quantity * 2) + 0.5) div 2" /><xsl:with-param name="rounding" select="false()" /></xsl:call-template></xsl:when>
    <xsl:otherwise><xsl:value-of select="$quantity" /></xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>