<?xml version="1.0" encoding="UTF-8"?>
<!-- Obtained from 
http://www.pinkjuice.com/svg/xslt/fractals/XSLT/triangular01.xslt
with some simplification
-->
<xsl:transform
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xlink="http://www.w3.org/1999/xlink">

  <xsl:param name="depth" select="//tspan[@id='level_of_depth']"/>
  <xsl:param name="view_all" select="//tspan[@id='view_all']"/>
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
  />
  <xsl:template match="/" name="main">

    <svg viewBox="{svg/@viewBox}">
      <defs>
        <g id="level_0" transform="scale(0.1)">
          <xsl:copy-of select="//g/descendant::*"/>
        </g>
        <xsl:apply-templates/>
      </defs>
      <rect style="fill:{//tspan[@id='background_color']}" x="-1000%" y="-1000%" width="100000%" height="100000%"/>
      <xsl:call-template name="use"/>
    </svg>
  </xsl:template>
  <xsl:template match="g" name="go">
    <xsl:param name="current" select="0"/>
    <g id="level_{$current+1}">
      <use xlink:href="#level_{$current}" transform="matrix(0.5 0 0 0.5   0  0)"/>
      <use xlink:href="#level_{$current}" transform="matrix(0.5 0 0 0.5   1  0)"/>
      <use xlink:href="#level_{$current}" transform="matrix(0.5 0 0 0.5  0.5 0.866)"/>
    </g>
    <xsl:if test="$current&lt;($depth)-1">
      <xsl:call-template name="go">
        <xsl:with-param name="current" select="$current+1"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
  <xsl:template name="use">
    <xsl:param name="current" select="0"/>
    <xsl:choose>
      <xsl:when test="$view_all = 'true'">
        <use opacity="{(1 div ($depth+1)) * ($current + 1)}" xlink:href="#level_{$current}" transform="translate(30,30) scale(120)"/>
        <xsl:if test="$current&lt;($depth)">
          <xsl:call-template name="use">
            <xsl:with-param name="current" select="$current+1"/>
          </xsl:call-template>
        </xsl:if>
      </xsl:when>
      <xsl:otherwise>
        <use xlink:href="#level_{$depth}" transform="translate(30,30) scale(120)"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:transform>

