1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3 <xsl:output method="html"
7 <xsl:variable name="apos">'</xsl:variable>
9 <xsl:template match="/">
12 <meta charset="UTF-8" />
13 <title>Parse-Tree</title>
14 <link type="text/css" rel="stylesheet" href="tree-view.css"/>
18 <xsl:apply-templates select="." mode="render"/>
23 <xsl:template match="/" mode="render">
24 <xsl:apply-templates mode="render"/>
27 <xsl:template match="*" mode="render">
28 <xsl:call-template name="ascii-art-hierarchy"/>
30 <xsl:call-template name="ascii-art-hierarchy"/>
31 <span class='connector'>___</span>
32 <span class="element"><xsl:value-of select="local-name()"/></span>
33 <xsl:text> </xsl:text>
35 <xsl:apply-templates select="@*" mode="render"/>
36 <xsl:apply-templates mode="render"/>
39 <xsl:template match="@*" mode="render">
40 <xsl:call-template name="ascii-art-hierarchy"/>
41 <span class='connector'>  </span>
42 <span class='connector'>\___</span>
44 <xsl:text> </xsl:text>
46 <xsl:value-of select="local-name()"/>
48 <xsl:text> = </xsl:text>
50 <xsl:call-template name="escape-ws">
51 <xsl:with-param name="text" select="translate(.,' ',' ')"/>
57 <xsl:template match="text()" mode="render">
58 <xsl:call-template name="ascii-art-hierarchy"/>
60 <xsl:call-template name="ascii-art-hierarchy"/>
61 <span class='connector'>___</span>
62 <xsl:text> </xsl:text>
64 <xsl:call-template name="escape-ws">
65 <xsl:with-param name="text" select="translate(.,' ',' ')"/>
71 <xsl:template match="comment()" mode="render" />
72 <xsl:template match="processing-instruction()" mode="render" />
75 <xsl:template name="ascii-art-hierarchy">
76 <xsl:for-each select="ancestor::*">
78 <xsl:when test="following-sibling::node()">
79 <span class='connector'>  </span>|<span class='connector'>  </span>
80 <xsl:text> </xsl:text>
83 <span class='connector'>    </span>
84 <span class='connector'>  </span>
89 <xsl:when test="parent::node() and ../child::node()">
90 <span class='connector'>  </span>
91 <xsl:text>|</xsl:text>
94 <span class='connector'>   </span>
99 <!-- recursive template to escape linefeeds, tabs -->
100 <xsl:template name="escape-ws">
101 <xsl:param name="text"/>
103 <xsl:when test="contains($text, '
')">
104 <xsl:call-template name="escape-ws">
105 <xsl:with-param name="text" select="substring-before($text, '
')"/>
107 <span class="escape">\n</span>
108 <xsl:call-template name="escape-ws">
109 <xsl:with-param name="text" select="substring-after($text, '
')"/>
112 <xsl:when test="contains($text, '	')">
113 <xsl:value-of select="substring-before($text, '	')"/>
114 <span class="escape">\t</span>
115 <xsl:call-template name="escape-ws">
116 <xsl:with-param name="text" select="substring-after($text, '	')"/>
119 <xsl:otherwise><xsl:value-of select="$text"/></xsl:otherwise>