<!--
xml2html.xsl - transform Bison XML Report into XHTML.
- $Id$
- Copyright (C) 2007 Free Software Foundation, Inc.
+ Copyright (C) 2007-2013 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
<xsl:template match="/">
<html>
<head>
- <title>GNU Bison XML Automaton Report</title>
+ <title>
+ <xsl:value-of select="bison-xml-report/filename"/>
+ <xsl:text> - GNU Bison XML Automaton Report</xsl:text>
+ </title>
<style type="text/css"><![CDATA[
body {
font-family: "Nimbus Sans L", Arial, sans-serif;
font-size: 9pt;
}
a:link {
- color: #1f00ff;
+ color: #1f00ff;
text-decoration: none;
}
a:visited {
- color: #1f00ff;
+ color: #1f00ff;
text-decoration: none;
}
a:hover {
- color: red;
+ color: red;
}
#menu a {
text-decoration: underline;
<body>
<xsl:apply-templates select="bison-xml-report"/>
<xsl:text> </xsl:text>
- <div id="footer"><hr />
+ <div id="footer"><hr />This document was generated using
<a href="http://www.gnu.org/software/bison/" title="GNU Bison">
GNU Bison <xsl:value-of select="/bison-xml-report/@version"/></a>
- XML Automaton Report, written by
- <a href="http://www.gnu.org.ua/~polak/" title="Wojciech Polak">Wojciech Polak</a>.
- Copyright (C) 2007 Free Software Foundation, Inc.<br />
- Verbatim copying and distribution of this entire page is permitted
- in any medium, provided this notice is preserved.</div>
+ XML Automaton Report.<br />
+ <!-- default copying notice -->
+ Verbatim copying and distribution of this entire page is
+ permitted in any medium, provided this notice is preserved.</div>
</body>
</html>
</xsl:template>
<xsl:template match="terminal">
<b><xsl:value-of select="@name"/></b>
<xsl:value-of select="concat(' (', @token-number, ')')"/>
- <xsl:apply-templates select="rule"/>
+ <xsl:for-each select="key('bison:ruleByRhs', @name)">
+ <xsl:apply-templates select="." mode="number-link"/>
+ </xsl:for-each>
<xsl:text> </xsl:text>
</xsl:template>
-<xsl:template match="terminal/rule">
- <xsl:text> </xsl:text>
- <a>
- <xsl:attribute name="href">
- <xsl:value-of select="concat('#rule_', .)"/>
- </xsl:attribute>
- <xsl:value-of select="."/>
- </a>
-</xsl:template>
-
<xsl:template match="nonterminal">
<b><xsl:value-of select="@name"/></b>
<xsl:value-of select="concat(' (', @symbol-number, ')')"/>
<xsl:text> </xsl:text>
- <xsl:if test="left/rule">
+ <xsl:if test="key('bison:ruleByLhs', @name)">
<xsl:text>on left:</xsl:text>
+ <xsl:for-each select="key('bison:ruleByLhs', @name)">
+ <xsl:apply-templates select="." mode="number-link"/>
+ </xsl:for-each>
</xsl:if>
- <xsl:apply-templates select="left/rule"/>
- <xsl:if test="left/rule and right/rule">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:if test="right/rule">
+ <xsl:if test="key('bison:ruleByRhs', @name)">
+ <xsl:if test="key('bison:ruleByLhs', @name)">
+ <xsl:text> </xsl:text>
+ </xsl:if>
<xsl:text>on right:</xsl:text>
+ <xsl:for-each select="key('bison:ruleByRhs', @name)">
+ <xsl:apply-templates select="." mode="number-link"/>
+ </xsl:for-each>
</xsl:if>
- <xsl:apply-templates select="right/rule"/>
<xsl:text> </xsl:text>
</xsl:template>
-<xsl:template match="nonterminal/left/rule|nonterminal/right/rule">
+<xsl:template match="rule" mode="number-link">
<xsl:text> </xsl:text>
<a>
<xsl:attribute name="href">
- <xsl:value-of select="concat('#rule_', .)"/>
+ <xsl:value-of select="concat('#rule_', @number)"/>
</xsl:attribute>
- <xsl:value-of select="."/>
+ <xsl:value-of select="@number"/>
</a>
</xsl:template>
<xsl:param name="pad"/>
<xsl:param name="prev-rule-number"
select="preceding-sibling::item[1]/@rule-number"/>
- <xsl:apply-templates select="key('bison:ruleNumber', current()/@rule-number)">
+ <xsl:apply-templates
+ select="key('bison:ruleByNumber', current()/@rule-number)"
+ >
<xsl:with-param name="itemset" select="'true'"/>
<xsl:with-param name="pad" select="$pad"/>
<xsl:with-param name="prev-lhs"
- select="key('bison:ruleNumber', $prev-rule-number)/lhs[text()]"/>
+ select="key('bison:ruleByNumber', $prev-rule-number)/lhs[text()]"
+ />
<xsl:with-param name="point" select="@point"/>
<xsl:with-param name="lookaheads">
<xsl:apply-templates select="lookaheads"/>
<xsl:template match="symbol">
<xsl:text> </xsl:text>
<xsl:choose>
- <xsl:when test="@class = 'nonterminal'">
+ <xsl:when test="name(key('bison:symbolByName', .)) = 'nonterminal'">
<span class="i"><xsl:value-of select="."/></span>
</xsl:when>
<xsl:otherwise>
</a>
<xsl:text> (</xsl:text>
<xsl:value-of
- select="key('bison:ruleNumber', current()/@rule)/lhs[text()]"/>
+ select="key('bison:ruleByNumber', current()/@rule)/lhs[text()]"
+ />
<xsl:text>)</xsl:text>
</xsl:otherwise>
</xsl:choose>