xref: /aosp_15_r20/prebuilts/build-tools/common/bison/xslt/xml2xhtml.xsl (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker<?xml version="1.0" encoding="UTF-8"?>
2*cda5da8dSAndroid Build Coastguard Worker
3*cda5da8dSAndroid Build Coastguard Worker<!--
4*cda5da8dSAndroid Build Coastguard Worker    xml2html.xsl - transform Bison XML Report into XHTML.
5*cda5da8dSAndroid Build Coastguard Worker
6*cda5da8dSAndroid Build Coastguard Worker    Copyright (C) 2007-2015, 2018-2021 Free Software Foundation, Inc.
7*cda5da8dSAndroid Build Coastguard Worker
8*cda5da8dSAndroid Build Coastguard Worker    This file is part of Bison, the GNU Compiler Compiler.
9*cda5da8dSAndroid Build Coastguard Worker
10*cda5da8dSAndroid Build Coastguard Worker    This program is free software: you can redistribute it and/or modify
11*cda5da8dSAndroid Build Coastguard Worker    it under the terms of the GNU General Public License as published by
12*cda5da8dSAndroid Build Coastguard Worker    the Free Software Foundation, either version 3 of the License, or
13*cda5da8dSAndroid Build Coastguard Worker    (at your option) any later version.
14*cda5da8dSAndroid Build Coastguard Worker
15*cda5da8dSAndroid Build Coastguard Worker    This program is distributed in the hope that it will be useful,
16*cda5da8dSAndroid Build Coastguard Worker    but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cda5da8dSAndroid Build Coastguard Worker    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cda5da8dSAndroid Build Coastguard Worker    GNU General Public License for more details.
19*cda5da8dSAndroid Build Coastguard Worker
20*cda5da8dSAndroid Build Coastguard Worker    You should have received a copy of the GNU General Public License
21*cda5da8dSAndroid Build Coastguard Worker    along with this program.  If not, see <https://www.gnu.org/licenses/>.
22*cda5da8dSAndroid Build Coastguard Worker
23*cda5da8dSAndroid Build Coastguard Worker    Written by Wojciech Polak <[email protected]>.
24*cda5da8dSAndroid Build Coastguard Worker  -->
25*cda5da8dSAndroid Build Coastguard Worker
26*cda5da8dSAndroid Build Coastguard Worker<xsl:stylesheet version="1.0"
27*cda5da8dSAndroid Build Coastguard Worker  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
28*cda5da8dSAndroid Build Coastguard Worker  xmlns="http://www.w3.org/1999/xhtml"
29*cda5da8dSAndroid Build Coastguard Worker  xmlns:bison="https://www.gnu.org/software/bison/">
30*cda5da8dSAndroid Build Coastguard Worker
31*cda5da8dSAndroid Build Coastguard Worker<xsl:import href="bison.xsl"/>
32*cda5da8dSAndroid Build Coastguard Worker
33*cda5da8dSAndroid Build Coastguard Worker<xsl:output method="xml" encoding="UTF-8"
34*cda5da8dSAndroid Build Coastguard Worker            doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
35*cda5da8dSAndroid Build Coastguard Worker            doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
36*cda5da8dSAndroid Build Coastguard Worker            indent="yes"/>
37*cda5da8dSAndroid Build Coastguard Worker
38*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="/">
39*cda5da8dSAndroid Build Coastguard Worker  <html>
40*cda5da8dSAndroid Build Coastguard Worker    <head>
41*cda5da8dSAndroid Build Coastguard Worker      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
42*cda5da8dSAndroid Build Coastguard Worker      <title>
43*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="bison-xml-report/filename"/>
44*cda5da8dSAndroid Build Coastguard Worker        <xsl:text> - GNU Bison XML Automaton Report</xsl:text>
45*cda5da8dSAndroid Build Coastguard Worker      </title>
46*cda5da8dSAndroid Build Coastguard Worker      <style type="text/css"><![CDATA[
47*cda5da8dSAndroid Build Coastguard Worker      body {
48*cda5da8dSAndroid Build Coastguard Worker        font-family: "Nimbus Sans L", Arial, sans-serif;
49*cda5da8dSAndroid Build Coastguard Worker        font-size: 9pt;
50*cda5da8dSAndroid Build Coastguard Worker      }
51*cda5da8dSAndroid Build Coastguard Worker      a:link {
52*cda5da8dSAndroid Build Coastguard Worker        color: #1f00ff;
53*cda5da8dSAndroid Build Coastguard Worker        text-decoration: none;
54*cda5da8dSAndroid Build Coastguard Worker      }
55*cda5da8dSAndroid Build Coastguard Worker      a:visited {
56*cda5da8dSAndroid Build Coastguard Worker        color: #1f00ff;
57*cda5da8dSAndroid Build Coastguard Worker        text-decoration: none;
58*cda5da8dSAndroid Build Coastguard Worker      }
59*cda5da8dSAndroid Build Coastguard Worker      a:hover {
60*cda5da8dSAndroid Build Coastguard Worker        color: red;
61*cda5da8dSAndroid Build Coastguard Worker      }
62*cda5da8dSAndroid Build Coastguard Worker      #menu a {
63*cda5da8dSAndroid Build Coastguard Worker        text-decoration: underline;
64*cda5da8dSAndroid Build Coastguard Worker      }
65*cda5da8dSAndroid Build Coastguard Worker      .i {
66*cda5da8dSAndroid Build Coastguard Worker        font-style: italic;
67*cda5da8dSAndroid Build Coastguard Worker      }
68*cda5da8dSAndroid Build Coastguard Worker      .pre {
69*cda5da8dSAndroid Build Coastguard Worker        font-family: monospace;
70*cda5da8dSAndroid Build Coastguard Worker        white-space: pre;
71*cda5da8dSAndroid Build Coastguard Worker      }
72*cda5da8dSAndroid Build Coastguard Worker      ol.decimal {
73*cda5da8dSAndroid Build Coastguard Worker        list-style-type: decimal;
74*cda5da8dSAndroid Build Coastguard Worker      }
75*cda5da8dSAndroid Build Coastguard Worker      ol.lower-alpha {
76*cda5da8dSAndroid Build Coastguard Worker        list-style-type: lower-alpha;
77*cda5da8dSAndroid Build Coastguard Worker      }
78*cda5da8dSAndroid Build Coastguard Worker      .dot {
79*cda5da8dSAndroid Build Coastguard Worker        color: #cc0000;
80*cda5da8dSAndroid Build Coastguard Worker      }
81*cda5da8dSAndroid Build Coastguard Worker      #footer {
82*cda5da8dSAndroid Build Coastguard Worker        margin-top: 3.5em;
83*cda5da8dSAndroid Build Coastguard Worker        font-size: 7pt;
84*cda5da8dSAndroid Build Coastguard Worker      }
85*cda5da8dSAndroid Build Coastguard Worker      ]]></style>
86*cda5da8dSAndroid Build Coastguard Worker    </head>
87*cda5da8dSAndroid Build Coastguard Worker    <body>
88*cda5da8dSAndroid Build Coastguard Worker      <xsl:apply-templates select="bison-xml-report"/>
89*cda5da8dSAndroid Build Coastguard Worker      <xsl:text>&#10;&#10;</xsl:text>
90*cda5da8dSAndroid Build Coastguard Worker      <div id="footer"><hr />This document was generated using
91*cda5da8dSAndroid Build Coastguard Worker      <a href="https://www.gnu.org/software/bison/" title="GNU Bison">
92*cda5da8dSAndroid Build Coastguard Worker      GNU Bison <xsl:value-of select="/bison-xml-report/@version"/></a>
93*cda5da8dSAndroid Build Coastguard Worker      XML Automaton Report.<br />
94*cda5da8dSAndroid Build Coastguard Worker      <!-- default copying notice -->
95*cda5da8dSAndroid Build Coastguard Worker      Verbatim copying and distribution of this entire page is
96*cda5da8dSAndroid Build Coastguard Worker      permitted in any medium, provided this notice is preserved.</div>
97*cda5da8dSAndroid Build Coastguard Worker    </body>
98*cda5da8dSAndroid Build Coastguard Worker  </html>
99*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
100*cda5da8dSAndroid Build Coastguard Worker
101*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="bison-xml-report">
102*cda5da8dSAndroid Build Coastguard Worker  <h1>GNU Bison XML Automaton Report</h1>
103*cda5da8dSAndroid Build Coastguard Worker  <p>
104*cda5da8dSAndroid Build Coastguard Worker    input grammar: <span class="i"><xsl:value-of select="filename"/></span>
105*cda5da8dSAndroid Build Coastguard Worker  </p>
106*cda5da8dSAndroid Build Coastguard Worker
107*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
108*cda5da8dSAndroid Build Coastguard Worker  <h3>Table of Contents</h3>
109*cda5da8dSAndroid Build Coastguard Worker  <ul id="menu">
110*cda5da8dSAndroid Build Coastguard Worker    <li>
111*cda5da8dSAndroid Build Coastguard Worker      <a href="#reductions">Reductions</a>
112*cda5da8dSAndroid Build Coastguard Worker      <ul class="lower-alpha">
113*cda5da8dSAndroid Build Coastguard Worker        <li><a href="#nonterminals_useless_in_grammar">Nonterminals useless in grammar</a></li>
114*cda5da8dSAndroid Build Coastguard Worker        <li><a href="#terminals_unused_in_grammar">Terminals unused in grammar</a></li>
115*cda5da8dSAndroid Build Coastguard Worker        <li><a href="#rules_useless_in_grammar">Rules useless in grammar</a></li>
116*cda5da8dSAndroid Build Coastguard Worker        <xsl:if test="grammar/rules/rule[@usefulness='useless-in-parser']">
117*cda5da8dSAndroid Build Coastguard Worker          <li><a href="#rules_useless_in_parser">Rules useless in parser due to conflicts</a></li>
118*cda5da8dSAndroid Build Coastguard Worker        </xsl:if>
119*cda5da8dSAndroid Build Coastguard Worker      </ul>
120*cda5da8dSAndroid Build Coastguard Worker    </li>
121*cda5da8dSAndroid Build Coastguard Worker    <li><a href="#conflicts">Conflicts</a></li>
122*cda5da8dSAndroid Build Coastguard Worker    <li>
123*cda5da8dSAndroid Build Coastguard Worker      <a href="#grammar">Grammar</a>
124*cda5da8dSAndroid Build Coastguard Worker      <ul class="lower-alpha">
125*cda5da8dSAndroid Build Coastguard Worker        <li><a href="#grammar">Itemset</a></li>
126*cda5da8dSAndroid Build Coastguard Worker        <li><a href="#terminals">Terminal symbols</a></li>
127*cda5da8dSAndroid Build Coastguard Worker        <li><a href="#nonterminals">Nonterminal symbols</a></li>
128*cda5da8dSAndroid Build Coastguard Worker      </ul>
129*cda5da8dSAndroid Build Coastguard Worker    </li>
130*cda5da8dSAndroid Build Coastguard Worker    <li><a href="#automaton">Automaton</a></li>
131*cda5da8dSAndroid Build Coastguard Worker  </ul>
132*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="grammar" mode="reductions"/>
133*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="grammar" mode="useless-in-parser"/>
134*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="automaton" mode="conflicts"/>
135*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="grammar"/>
136*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="automaton"/>
137*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
138*cda5da8dSAndroid Build Coastguard Worker
139*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar" mode="reductions">
140*cda5da8dSAndroid Build Coastguard Worker  <h2>
141*cda5da8dSAndroid Build Coastguard Worker    <a name="reductions"/>
142*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> Reductions</xsl:text>
143*cda5da8dSAndroid Build Coastguard Worker  </h2>
144*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="nonterminals" mode="useless-in-grammar"/>
145*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="terminals" mode="unused-in-grammar"/>
146*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="rules" mode="useless-in-grammar"/>
147*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
148*cda5da8dSAndroid Build Coastguard Worker
149*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="nonterminals" mode="useless-in-grammar">
150*cda5da8dSAndroid Build Coastguard Worker  <h3>
151*cda5da8dSAndroid Build Coastguard Worker    <a name="nonterminals_useless_in_grammar"/>
152*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> Nonterminals useless in grammar</xsl:text>
153*cda5da8dSAndroid Build Coastguard Worker  </h3>
154*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
155*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="nonterminal[@usefulness='useless-in-grammar']">
156*cda5da8dSAndroid Build Coastguard Worker    <p class="pre">
157*cda5da8dSAndroid Build Coastguard Worker      <xsl:for-each select="nonterminal[@usefulness='useless-in-grammar']">
158*cda5da8dSAndroid Build Coastguard Worker        <xsl:text>   </xsl:text>
159*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="@name"/>
160*cda5da8dSAndroid Build Coastguard Worker        <xsl:text>&#10;</xsl:text>
161*cda5da8dSAndroid Build Coastguard Worker      </xsl:for-each>
162*cda5da8dSAndroid Build Coastguard Worker      <xsl:text>&#10;&#10;</xsl:text>
163*cda5da8dSAndroid Build Coastguard Worker    </p>
164*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
165*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
166*cda5da8dSAndroid Build Coastguard Worker
167*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="terminals" mode="unused-in-grammar">
168*cda5da8dSAndroid Build Coastguard Worker  <h3>
169*cda5da8dSAndroid Build Coastguard Worker    <a name="terminals_unused_in_grammar"/>
170*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> Terminals unused in grammar</xsl:text>
171*cda5da8dSAndroid Build Coastguard Worker  </h3>
172*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
173*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="terminal[@usefulness='unused-in-grammar']">
174*cda5da8dSAndroid Build Coastguard Worker    <p class="pre">
175*cda5da8dSAndroid Build Coastguard Worker      <xsl:for-each select="terminal[@usefulness='unused-in-grammar']">
176*cda5da8dSAndroid Build Coastguard Worker        <xsl:sort select="@symbol-number" data-type="number"/>
177*cda5da8dSAndroid Build Coastguard Worker        <xsl:text>   </xsl:text>
178*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="@name"/>
179*cda5da8dSAndroid Build Coastguard Worker        <xsl:text>&#10;</xsl:text>
180*cda5da8dSAndroid Build Coastguard Worker      </xsl:for-each>
181*cda5da8dSAndroid Build Coastguard Worker      <xsl:text>&#10;&#10;</xsl:text>
182*cda5da8dSAndroid Build Coastguard Worker    </p>
183*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
184*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
185*cda5da8dSAndroid Build Coastguard Worker
186*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="rules" mode="useless-in-grammar">
187*cda5da8dSAndroid Build Coastguard Worker  <h3>
188*cda5da8dSAndroid Build Coastguard Worker    <a name="rules_useless_in_grammar"/>
189*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> Rules useless in grammar</xsl:text>
190*cda5da8dSAndroid Build Coastguard Worker  </h3>
191*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;</xsl:text>
192*cda5da8dSAndroid Build Coastguard Worker  <xsl:variable name="set" select="rule[@usefulness='useless-in-grammar']"/>
193*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="$set">
194*cda5da8dSAndroid Build Coastguard Worker    <p class="pre">
195*cda5da8dSAndroid Build Coastguard Worker      <xsl:call-template name="style-rule-set">
196*cda5da8dSAndroid Build Coastguard Worker        <xsl:with-param name="rule-set" select="$set"/>
197*cda5da8dSAndroid Build Coastguard Worker      </xsl:call-template>
198*cda5da8dSAndroid Build Coastguard Worker      <xsl:text>&#10;&#10;</xsl:text>
199*cda5da8dSAndroid Build Coastguard Worker    </p>
200*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
201*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
202*cda5da8dSAndroid Build Coastguard Worker
203*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar" mode="useless-in-parser">
204*cda5da8dSAndroid Build Coastguard Worker  <xsl:variable
205*cda5da8dSAndroid Build Coastguard Worker    name="set" select="rules/rule[@usefulness='useless-in-parser']"
206*cda5da8dSAndroid Build Coastguard Worker  />
207*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="$set">
208*cda5da8dSAndroid Build Coastguard Worker    <h2>
209*cda5da8dSAndroid Build Coastguard Worker      <a name="rules_useless_in_parser"/>
210*cda5da8dSAndroid Build Coastguard Worker      <xsl:text> Rules useless in parser due to conflicts</xsl:text>
211*cda5da8dSAndroid Build Coastguard Worker    </h2>
212*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;</xsl:text>
213*cda5da8dSAndroid Build Coastguard Worker    <p class="pre">
214*cda5da8dSAndroid Build Coastguard Worker      <xsl:call-template name="style-rule-set">
215*cda5da8dSAndroid Build Coastguard Worker        <xsl:with-param name="rule-set" select="$set"/>
216*cda5da8dSAndroid Build Coastguard Worker      </xsl:call-template>
217*cda5da8dSAndroid Build Coastguard Worker    </p>
218*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;&#10;</xsl:text>
219*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
220*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
221*cda5da8dSAndroid Build Coastguard Worker
222*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar">
223*cda5da8dSAndroid Build Coastguard Worker  <h2>
224*cda5da8dSAndroid Build Coastguard Worker    <a name="grammar"/>
225*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> Grammar</xsl:text>
226*cda5da8dSAndroid Build Coastguard Worker  </h2>
227*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;</xsl:text>
228*cda5da8dSAndroid Build Coastguard Worker  <p class="pre">
229*cda5da8dSAndroid Build Coastguard Worker    <xsl:call-template name="style-rule-set">
230*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="anchor" select="'true'" />
231*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param
232*cda5da8dSAndroid Build Coastguard Worker        name="rule-set" select="rules/rule[@usefulness!='useless-in-grammar']"
233*cda5da8dSAndroid Build Coastguard Worker      />
234*cda5da8dSAndroid Build Coastguard Worker    </xsl:call-template>
235*cda5da8dSAndroid Build Coastguard Worker  </p>
236*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
237*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="terminals"/>
238*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="nonterminals"/>
239*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
240*cda5da8dSAndroid Build Coastguard Worker
241*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="style-rule-set">
242*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="anchor"/>
243*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="rule-set"/>
244*cda5da8dSAndroid Build Coastguard Worker  <xsl:for-each select="$rule-set">
245*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select=".">
246*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="anchor" select="$anchor"/>
247*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="pad" select="'3'"/>
248*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="prev-lhs">
249*cda5da8dSAndroid Build Coastguard Worker        <xsl:if test="position()>1">
250*cda5da8dSAndroid Build Coastguard Worker          <xsl:variable name="position" select="position()"/>
251*cda5da8dSAndroid Build Coastguard Worker          <xsl:value-of select="$rule-set[$position - 1]/lhs"/>
252*cda5da8dSAndroid Build Coastguard Worker        </xsl:if>
253*cda5da8dSAndroid Build Coastguard Worker      </xsl:with-param>
254*cda5da8dSAndroid Build Coastguard Worker    </xsl:apply-templates>
255*cda5da8dSAndroid Build Coastguard Worker  </xsl:for-each>
256*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
257*cda5da8dSAndroid Build Coastguard Worker
258*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="automaton" mode="conflicts">
259*cda5da8dSAndroid Build Coastguard Worker  <h2>
260*cda5da8dSAndroid Build Coastguard Worker    <a name="conflicts"/>
261*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> Conflicts</xsl:text>
262*cda5da8dSAndroid Build Coastguard Worker  </h2>
263*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
264*cda5da8dSAndroid Build Coastguard Worker  <xsl:variable name="conflict-report">
265*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="state" mode="conflicts"/>
266*cda5da8dSAndroid Build Coastguard Worker  </xsl:variable>
267*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="string-length($conflict-report) != 0">
268*cda5da8dSAndroid Build Coastguard Worker    <p class="pre">
269*cda5da8dSAndroid Build Coastguard Worker      <xsl:copy-of select="$conflict-report"/>
270*cda5da8dSAndroid Build Coastguard Worker      <xsl:text>&#10;&#10;</xsl:text>
271*cda5da8dSAndroid Build Coastguard Worker    </p>
272*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
273*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
274*cda5da8dSAndroid Build Coastguard Worker
275*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="state" mode="conflicts">
276*cda5da8dSAndroid Build Coastguard Worker  <xsl:variable name="conflict-counts">
277*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="." mode="bison:count-conflicts" />
278*cda5da8dSAndroid Build Coastguard Worker  </xsl:variable>
279*cda5da8dSAndroid Build Coastguard Worker  <xsl:variable
280*cda5da8dSAndroid Build Coastguard Worker    name="sr-count" select="substring-before($conflict-counts, ',')"
281*cda5da8dSAndroid Build Coastguard Worker  />
282*cda5da8dSAndroid Build Coastguard Worker  <xsl:variable
283*cda5da8dSAndroid Build Coastguard Worker    name="rr-count" select="substring-after($conflict-counts, ',')"
284*cda5da8dSAndroid Build Coastguard Worker  />
285*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="$sr-count > 0 or $rr-count > 0">
286*cda5da8dSAndroid Build Coastguard Worker    <a>
287*cda5da8dSAndroid Build Coastguard Worker      <xsl:attribute name="href">
288*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="concat('#state_', @number)"/>
289*cda5da8dSAndroid Build Coastguard Worker      </xsl:attribute>
290*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="concat('State ', @number)"/>
291*cda5da8dSAndroid Build Coastguard Worker    </a>
292*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> conflicts:</xsl:text>
293*cda5da8dSAndroid Build Coastguard Worker    <xsl:if test="$sr-count > 0">
294*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="concat(' ', $sr-count, ' shift/reduce')"/>
295*cda5da8dSAndroid Build Coastguard Worker      <xsl:if test="$rr-count > 0">
296*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="(',')"/>
297*cda5da8dSAndroid Build Coastguard Worker      </xsl:if>
298*cda5da8dSAndroid Build Coastguard Worker    </xsl:if>
299*cda5da8dSAndroid Build Coastguard Worker    <xsl:if test="$rr-count > 0">
300*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="concat(' ', $rr-count, ' reduce/reduce')"/>
301*cda5da8dSAndroid Build Coastguard Worker    </xsl:if>
302*cda5da8dSAndroid Build Coastguard Worker    <xsl:value-of select="'&#10;'"/>
303*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
304*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
305*cda5da8dSAndroid Build Coastguard Worker
306*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar/terminals">
307*cda5da8dSAndroid Build Coastguard Worker  <h3>
308*cda5da8dSAndroid Build Coastguard Worker    <a name="terminals"/>
309*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> Terminals, with rules where they appear</xsl:text>
310*cda5da8dSAndroid Build Coastguard Worker  </h3>
311*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
312*cda5da8dSAndroid Build Coastguard Worker  <ul>
313*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;</xsl:text>
314*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="terminal"/>
315*cda5da8dSAndroid Build Coastguard Worker  </ul>
316*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
317*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
318*cda5da8dSAndroid Build Coastguard Worker
319*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar/nonterminals">
320*cda5da8dSAndroid Build Coastguard Worker  <h3>
321*cda5da8dSAndroid Build Coastguard Worker    <a name="nonterminals"/>
322*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> Nonterminals, with rules where they appear</xsl:text>
323*cda5da8dSAndroid Build Coastguard Worker  </h3>
324*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
325*cda5da8dSAndroid Build Coastguard Worker  <ul>
326*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;</xsl:text>
327*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates
328*cda5da8dSAndroid Build Coastguard Worker      select="nonterminal[@usefulness!='useless-in-grammar']"
329*cda5da8dSAndroid Build Coastguard Worker    />
330*cda5da8dSAndroid Build Coastguard Worker  </ul>
331*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
332*cda5da8dSAndroid Build Coastguard Worker
333*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="terminal">
334*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>  </xsl:text>
335*cda5da8dSAndroid Build Coastguard Worker  <li>
336*cda5da8dSAndroid Build Coastguard Worker    <b><xsl:value-of select="@name"/></b>
337*cda5da8dSAndroid Build Coastguard Worker    <xsl:if test="string-length(@type) != 0">
338*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="concat(' &lt;', @type, '&gt;')"/>
339*cda5da8dSAndroid Build Coastguard Worker    </xsl:if>
340*cda5da8dSAndroid Build Coastguard Worker    <xsl:value-of select="concat(' (', @token-number, ')')"/>
341*cda5da8dSAndroid Build Coastguard Worker    <xsl:for-each select="key('bison:ruleByRhs', @name)">
342*cda5da8dSAndroid Build Coastguard Worker      <xsl:apply-templates select="." mode="number-link"/>
343*cda5da8dSAndroid Build Coastguard Worker    </xsl:for-each>
344*cda5da8dSAndroid Build Coastguard Worker  </li>
345*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;</xsl:text>
346*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
347*cda5da8dSAndroid Build Coastguard Worker
348*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="nonterminal">
349*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>  </xsl:text>
350*cda5da8dSAndroid Build Coastguard Worker  <li>
351*cda5da8dSAndroid Build Coastguard Worker    <b><xsl:value-of select="@name"/></b>
352*cda5da8dSAndroid Build Coastguard Worker    <xsl:if test="string-length(@type) != 0">
353*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="concat(' &lt;', @type, '&gt;')"/>
354*cda5da8dSAndroid Build Coastguard Worker    </xsl:if>
355*cda5da8dSAndroid Build Coastguard Worker    <xsl:value-of select="concat(' (', @symbol-number, ')')"/>
356*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;    </xsl:text>
357*cda5da8dSAndroid Build Coastguard Worker    <ul>
358*cda5da8dSAndroid Build Coastguard Worker      <xsl:text>&#10;</xsl:text>
359*cda5da8dSAndroid Build Coastguard Worker      <xsl:if test="key('bison:ruleByLhs', @name)">
360*cda5da8dSAndroid Build Coastguard Worker        <xsl:text>      </xsl:text>
361*cda5da8dSAndroid Build Coastguard Worker        <li>
362*cda5da8dSAndroid Build Coastguard Worker          <xsl:text>on left:</xsl:text>
363*cda5da8dSAndroid Build Coastguard Worker          <xsl:for-each select="key('bison:ruleByLhs', @name)">
364*cda5da8dSAndroid Build Coastguard Worker            <xsl:apply-templates select="." mode="number-link"/>
365*cda5da8dSAndroid Build Coastguard Worker          </xsl:for-each>
366*cda5da8dSAndroid Build Coastguard Worker        </li>
367*cda5da8dSAndroid Build Coastguard Worker        <xsl:text>&#10;</xsl:text>
368*cda5da8dSAndroid Build Coastguard Worker      </xsl:if>
369*cda5da8dSAndroid Build Coastguard Worker      <xsl:if test="key('bison:ruleByRhs', @name)">
370*cda5da8dSAndroid Build Coastguard Worker        <xsl:text>      </xsl:text>
371*cda5da8dSAndroid Build Coastguard Worker        <li>
372*cda5da8dSAndroid Build Coastguard Worker          <xsl:text>on right:</xsl:text>
373*cda5da8dSAndroid Build Coastguard Worker          <xsl:for-each select="key('bison:ruleByRhs', @name)">
374*cda5da8dSAndroid Build Coastguard Worker            <xsl:apply-templates select="." mode="number-link"/>
375*cda5da8dSAndroid Build Coastguard Worker          </xsl:for-each>
376*cda5da8dSAndroid Build Coastguard Worker        </li>
377*cda5da8dSAndroid Build Coastguard Worker        <xsl:text>&#10;</xsl:text>
378*cda5da8dSAndroid Build Coastguard Worker      </xsl:if>
379*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>    </xsl:text>
380*cda5da8dSAndroid Build Coastguard Worker    </ul>
381*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;  </xsl:text>
382*cda5da8dSAndroid Build Coastguard Worker  </li>
383*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;</xsl:text>
384*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
385*cda5da8dSAndroid Build Coastguard Worker
386*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="rule" mode="number-link">
387*cda5da8dSAndroid Build Coastguard Worker  <xsl:text> </xsl:text>
388*cda5da8dSAndroid Build Coastguard Worker  <a>
389*cda5da8dSAndroid Build Coastguard Worker    <xsl:attribute name="href">
390*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="concat('#rule_', @number)"/>
391*cda5da8dSAndroid Build Coastguard Worker    </xsl:attribute>
392*cda5da8dSAndroid Build Coastguard Worker    <xsl:value-of select="@number"/>
393*cda5da8dSAndroid Build Coastguard Worker  </a>
394*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
395*cda5da8dSAndroid Build Coastguard Worker
396*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="automaton">
397*cda5da8dSAndroid Build Coastguard Worker  <h2>
398*cda5da8dSAndroid Build Coastguard Worker    <a name="automaton"/>
399*cda5da8dSAndroid Build Coastguard Worker    <xsl:text> Automaton</xsl:text>
400*cda5da8dSAndroid Build Coastguard Worker  </h2>
401*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="state">
402*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="pad" select="'3'"/>
403*cda5da8dSAndroid Build Coastguard Worker  </xsl:apply-templates>
404*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
405*cda5da8dSAndroid Build Coastguard Worker
406*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="automaton/state">
407*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="pad"/>
408*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
409*cda5da8dSAndroid Build Coastguard Worker  <h3>
410*cda5da8dSAndroid Build Coastguard Worker    <a>
411*cda5da8dSAndroid Build Coastguard Worker      <xsl:attribute name="name">
412*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="concat('state_', @number)"/>
413*cda5da8dSAndroid Build Coastguard Worker      </xsl:attribute>
414*cda5da8dSAndroid Build Coastguard Worker    </a>
415*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>State </xsl:text>
416*cda5da8dSAndroid Build Coastguard Worker    <xsl:value-of select="@number"/>
417*cda5da8dSAndroid Build Coastguard Worker  </h3>
418*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;&#10;</xsl:text>
419*cda5da8dSAndroid Build Coastguard Worker  <p class="pre">
420*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="itemset/item">
421*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="pad" select="$pad"/>
422*cda5da8dSAndroid Build Coastguard Worker    </xsl:apply-templates>
423*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="actions/transitions">
424*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="type" select="'shift'"/>
425*cda5da8dSAndroid Build Coastguard Worker    </xsl:apply-templates>
426*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="actions/errors"/>
427*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="actions/reductions"/>
428*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="actions/transitions">
429*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="type" select="'goto'"/>
430*cda5da8dSAndroid Build Coastguard Worker    </xsl:apply-templates>
431*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="solved-conflicts"/>
432*cda5da8dSAndroid Build Coastguard Worker  </p>
433*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
434*cda5da8dSAndroid Build Coastguard Worker
435*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="actions/transitions">
436*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="type"/>
437*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="transition[@type = $type]">
438*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;</xsl:text>
439*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="transition[@type = $type]">
440*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="pad">
441*cda5da8dSAndroid Build Coastguard Worker        <xsl:call-template name="max-width-symbol">
442*cda5da8dSAndroid Build Coastguard Worker          <xsl:with-param name="node" select="transition[@type = $type]"/>
443*cda5da8dSAndroid Build Coastguard Worker        </xsl:call-template>
444*cda5da8dSAndroid Build Coastguard Worker      </xsl:with-param>
445*cda5da8dSAndroid Build Coastguard Worker    </xsl:apply-templates>
446*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
447*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
448*cda5da8dSAndroid Build Coastguard Worker
449*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="actions/errors">
450*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="error">
451*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;</xsl:text>
452*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="error">
453*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="pad">
454*cda5da8dSAndroid Build Coastguard Worker        <xsl:call-template name="max-width-symbol">
455*cda5da8dSAndroid Build Coastguard Worker          <xsl:with-param name="node" select="error"/>
456*cda5da8dSAndroid Build Coastguard Worker        </xsl:call-template>
457*cda5da8dSAndroid Build Coastguard Worker      </xsl:with-param>
458*cda5da8dSAndroid Build Coastguard Worker    </xsl:apply-templates>
459*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
460*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
461*cda5da8dSAndroid Build Coastguard Worker
462*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="actions/reductions">
463*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="reduction">
464*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;</xsl:text>
465*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="reduction">
466*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="pad">
467*cda5da8dSAndroid Build Coastguard Worker        <xsl:call-template name="max-width-symbol">
468*cda5da8dSAndroid Build Coastguard Worker          <xsl:with-param name="node" select="reduction"/>
469*cda5da8dSAndroid Build Coastguard Worker        </xsl:call-template>
470*cda5da8dSAndroid Build Coastguard Worker      </xsl:with-param>
471*cda5da8dSAndroid Build Coastguard Worker    </xsl:apply-templates>
472*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
473*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
474*cda5da8dSAndroid Build Coastguard Worker
475*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="item">
476*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="pad"/>
477*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="prev-rule-number"
478*cda5da8dSAndroid Build Coastguard Worker             select="preceding-sibling::item[1]/@rule-number"/>
479*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates
480*cda5da8dSAndroid Build Coastguard Worker    select="key('bison:ruleByNumber', current()/@rule-number)"
481*cda5da8dSAndroid Build Coastguard Worker  >
482*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="itemset" select="'true'"/>
483*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="pad" select="$pad"/>
484*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="prev-lhs"
485*cda5da8dSAndroid Build Coastguard Worker      select="key('bison:ruleByNumber', $prev-rule-number)/lhs[text()]"
486*cda5da8dSAndroid Build Coastguard Worker   />
487*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="dot" select="@dot"/>
488*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="lookaheads">
489*cda5da8dSAndroid Build Coastguard Worker      <xsl:apply-templates select="lookaheads"/>
490*cda5da8dSAndroid Build Coastguard Worker    </xsl:with-param>
491*cda5da8dSAndroid Build Coastguard Worker  </xsl:apply-templates>
492*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
493*cda5da8dSAndroid Build Coastguard Worker
494*cda5da8dSAndroid Build Coastguard Worker<!--
495*cda5da8dSAndroid Build Coastguard Workeranchor = 'true': define as an <a> anchor.
496*cda5da8dSAndroid Build Coastguard Workeritemset = 'true': show the items.
497*cda5da8dSAndroid Build Coastguard Worker -->
498*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="rule">
499*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="anchor"/>
500*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="itemset"/>
501*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="pad"/>
502*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="prev-lhs"/>
503*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="dot"/>
504*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="lookaheads"/>
505*cda5da8dSAndroid Build Coastguard Worker
506*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="$itemset != 'true' and not($prev-lhs = lhs[text()])">
507*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;</xsl:text>
508*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
509*cda5da8dSAndroid Build Coastguard Worker
510*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>  </xsl:text>
511*cda5da8dSAndroid Build Coastguard Worker
512*cda5da8dSAndroid Build Coastguard Worker  <xsl:choose>
513*cda5da8dSAndroid Build Coastguard Worker    <xsl:when test="$anchor = 'true'">
514*cda5da8dSAndroid Build Coastguard Worker      <a>
515*cda5da8dSAndroid Build Coastguard Worker        <xsl:attribute name="name">
516*cda5da8dSAndroid Build Coastguard Worker          <xsl:value-of select="concat('rule_', @number)"/>
517*cda5da8dSAndroid Build Coastguard Worker        </xsl:attribute>
518*cda5da8dSAndroid Build Coastguard Worker        <xsl:call-template name="lpad">
519*cda5da8dSAndroid Build Coastguard Worker          <xsl:with-param name="str" select="string(@number)"/>
520*cda5da8dSAndroid Build Coastguard Worker          <xsl:with-param name="pad" select="number($pad)"/>
521*cda5da8dSAndroid Build Coastguard Worker        </xsl:call-template>
522*cda5da8dSAndroid Build Coastguard Worker      </a>
523*cda5da8dSAndroid Build Coastguard Worker    </xsl:when>
524*cda5da8dSAndroid Build Coastguard Worker    <xsl:otherwise>
525*cda5da8dSAndroid Build Coastguard Worker      <a>
526*cda5da8dSAndroid Build Coastguard Worker        <xsl:attribute name="href">
527*cda5da8dSAndroid Build Coastguard Worker          <xsl:value-of select="concat('#rule_', @number)"/>
528*cda5da8dSAndroid Build Coastguard Worker        </xsl:attribute>
529*cda5da8dSAndroid Build Coastguard Worker        <xsl:call-template name="lpad">
530*cda5da8dSAndroid Build Coastguard Worker          <xsl:with-param name="str" select="string(@number)"/>
531*cda5da8dSAndroid Build Coastguard Worker          <xsl:with-param name="pad" select="number($pad)"/>
532*cda5da8dSAndroid Build Coastguard Worker        </xsl:call-template>
533*cda5da8dSAndroid Build Coastguard Worker      </a>
534*cda5da8dSAndroid Build Coastguard Worker    </xsl:otherwise>
535*cda5da8dSAndroid Build Coastguard Worker  </xsl:choose>
536*cda5da8dSAndroid Build Coastguard Worker  <xsl:text> </xsl:text>
537*cda5da8dSAndroid Build Coastguard Worker
538*cda5da8dSAndroid Build Coastguard Worker  <!-- LHS -->
539*cda5da8dSAndroid Build Coastguard Worker  <xsl:choose>
540*cda5da8dSAndroid Build Coastguard Worker    <xsl:when test="$prev-lhs = lhs[text()]">
541*cda5da8dSAndroid Build Coastguard Worker      <xsl:call-template name="lpad">
542*cda5da8dSAndroid Build Coastguard Worker        <xsl:with-param name="str" select="'|'"/>
543*cda5da8dSAndroid Build Coastguard Worker        <xsl:with-param name="pad" select="number(string-length(lhs[text()])) + 2"/>
544*cda5da8dSAndroid Build Coastguard Worker      </xsl:call-template>
545*cda5da8dSAndroid Build Coastguard Worker    </xsl:when>
546*cda5da8dSAndroid Build Coastguard Worker    <xsl:otherwise>
547*cda5da8dSAndroid Build Coastguard Worker      <span class="i">
548*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="lhs"/>
549*cda5da8dSAndroid Build Coastguard Worker      </span>
550*cda5da8dSAndroid Build Coastguard Worker      <xsl:text> &#8594;</xsl:text>
551*cda5da8dSAndroid Build Coastguard Worker    </xsl:otherwise>
552*cda5da8dSAndroid Build Coastguard Worker  </xsl:choose>
553*cda5da8dSAndroid Build Coastguard Worker
554*cda5da8dSAndroid Build Coastguard Worker  <!-- RHS -->
555*cda5da8dSAndroid Build Coastguard Worker  <xsl:for-each select="rhs/*">
556*cda5da8dSAndroid Build Coastguard Worker    <xsl:if test="position() = $dot + 1">
557*cda5da8dSAndroid Build Coastguard Worker      <xsl:text> </xsl:text>
558*cda5da8dSAndroid Build Coastguard Worker      <span class="dot">&#x2022;</span>
559*cda5da8dSAndroid Build Coastguard Worker    </xsl:if>
560*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="."/>
561*cda5da8dSAndroid Build Coastguard Worker    <xsl:if test="position() = last() and position() = $dot">
562*cda5da8dSAndroid Build Coastguard Worker      <xsl:text> </xsl:text>
563*cda5da8dSAndroid Build Coastguard Worker      <span class="dot">&#x2022;</span>
564*cda5da8dSAndroid Build Coastguard Worker    </xsl:if>
565*cda5da8dSAndroid Build Coastguard Worker  </xsl:for-each>
566*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="$lookaheads">
567*cda5da8dSAndroid Build Coastguard Worker    <xsl:value-of select="$lookaheads"/>
568*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
569*cda5da8dSAndroid Build Coastguard Worker
570*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;</xsl:text>
571*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
572*cda5da8dSAndroid Build Coastguard Worker
573*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="symbol">
574*cda5da8dSAndroid Build Coastguard Worker  <xsl:text> </xsl:text>
575*cda5da8dSAndroid Build Coastguard Worker  <xsl:choose>
576*cda5da8dSAndroid Build Coastguard Worker    <xsl:when test="name(key('bison:symbolByName', .)) = 'nonterminal'">
577*cda5da8dSAndroid Build Coastguard Worker      <span class="i"><xsl:value-of select="."/></span>
578*cda5da8dSAndroid Build Coastguard Worker    </xsl:when>
579*cda5da8dSAndroid Build Coastguard Worker    <xsl:otherwise>
580*cda5da8dSAndroid Build Coastguard Worker      <b><xsl:value-of select="."/></b>
581*cda5da8dSAndroid Build Coastguard Worker    </xsl:otherwise>
582*cda5da8dSAndroid Build Coastguard Worker  </xsl:choose>
583*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
584*cda5da8dSAndroid Build Coastguard Worker
585*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="empty">
586*cda5da8dSAndroid Build Coastguard Worker  <xsl:text> %empty</xsl:text>
587*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
588*cda5da8dSAndroid Build Coastguard Worker
589*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="lookaheads">
590*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>  [</xsl:text>
591*cda5da8dSAndroid Build Coastguard Worker  <xsl:apply-templates select="symbol"/>
592*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>]</xsl:text>
593*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
594*cda5da8dSAndroid Build Coastguard Worker
595*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="lookaheads/symbol">
596*cda5da8dSAndroid Build Coastguard Worker  <xsl:value-of select="."/>
597*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="position() != last()">
598*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>, </xsl:text>
599*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
600*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
601*cda5da8dSAndroid Build Coastguard Worker
602*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="transition">
603*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="pad"/>
604*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>    </xsl:text>
605*cda5da8dSAndroid Build Coastguard Worker  <xsl:call-template name="rpad">
606*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="str" select="string(@symbol)"/>
607*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="pad" select="number($pad) + 2"/>
608*cda5da8dSAndroid Build Coastguard Worker  </xsl:call-template>
609*cda5da8dSAndroid Build Coastguard Worker  <xsl:choose>
610*cda5da8dSAndroid Build Coastguard Worker    <xsl:when test="@type = 'shift'">
611*cda5da8dSAndroid Build Coastguard Worker      <a>
612*cda5da8dSAndroid Build Coastguard Worker        <xsl:attribute name="href">
613*cda5da8dSAndroid Build Coastguard Worker          <xsl:value-of select="concat('#state_', @state)"/>
614*cda5da8dSAndroid Build Coastguard Worker        </xsl:attribute>
615*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="concat('shift, and go to state ', @state)"/>
616*cda5da8dSAndroid Build Coastguard Worker      </a>
617*cda5da8dSAndroid Build Coastguard Worker    </xsl:when>
618*cda5da8dSAndroid Build Coastguard Worker    <xsl:when test="@type = 'goto'">
619*cda5da8dSAndroid Build Coastguard Worker      <a>
620*cda5da8dSAndroid Build Coastguard Worker        <xsl:attribute name="href">
621*cda5da8dSAndroid Build Coastguard Worker          <xsl:value-of select="concat('#state_', @state)"/>
622*cda5da8dSAndroid Build Coastguard Worker        </xsl:attribute>
623*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="concat('go to state ', @state)"/>
624*cda5da8dSAndroid Build Coastguard Worker      </a>
625*cda5da8dSAndroid Build Coastguard Worker    </xsl:when>
626*cda5da8dSAndroid Build Coastguard Worker  </xsl:choose>
627*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;</xsl:text>
628*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
629*cda5da8dSAndroid Build Coastguard Worker
630*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="error">
631*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="pad"/>
632*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>    </xsl:text>
633*cda5da8dSAndroid Build Coastguard Worker  <xsl:call-template name="rpad">
634*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="str" select="string(@symbol)"/>
635*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="pad" select="number($pad) + 2"/>
636*cda5da8dSAndroid Build Coastguard Worker  </xsl:call-template>
637*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>error</xsl:text>
638*cda5da8dSAndroid Build Coastguard Worker  <xsl:text> (</xsl:text>
639*cda5da8dSAndroid Build Coastguard Worker  <xsl:value-of select="text()"/>
640*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>)</xsl:text>
641*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;</xsl:text>
642*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
643*cda5da8dSAndroid Build Coastguard Worker
644*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="reduction">
645*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="pad"/>
646*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>    </xsl:text>
647*cda5da8dSAndroid Build Coastguard Worker  <xsl:call-template name="rpad">
648*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="str" select="string(@symbol)"/>
649*cda5da8dSAndroid Build Coastguard Worker    <xsl:with-param name="pad" select="number($pad) + 2"/>
650*cda5da8dSAndroid Build Coastguard Worker  </xsl:call-template>
651*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="@enabled = 'false'">
652*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>[</xsl:text>
653*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
654*cda5da8dSAndroid Build Coastguard Worker  <xsl:choose>
655*cda5da8dSAndroid Build Coastguard Worker    <xsl:when test="@rule = 'accept'">
656*cda5da8dSAndroid Build Coastguard Worker      <xsl:text>accept</xsl:text>
657*cda5da8dSAndroid Build Coastguard Worker    </xsl:when>
658*cda5da8dSAndroid Build Coastguard Worker    <xsl:otherwise>
659*cda5da8dSAndroid Build Coastguard Worker      <a>
660*cda5da8dSAndroid Build Coastguard Worker        <xsl:attribute name="href">
661*cda5da8dSAndroid Build Coastguard Worker          <xsl:value-of select="concat('#rule_', @rule)"/>
662*cda5da8dSAndroid Build Coastguard Worker        </xsl:attribute>
663*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="concat('reduce using rule ', @rule)"/>
664*cda5da8dSAndroid Build Coastguard Worker      </a>
665*cda5da8dSAndroid Build Coastguard Worker      <xsl:text> (</xsl:text>
666*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of
667*cda5da8dSAndroid Build Coastguard Worker        select="key('bison:ruleByNumber', current()/@rule)/lhs[text()]"
668*cda5da8dSAndroid Build Coastguard Worker      />
669*cda5da8dSAndroid Build Coastguard Worker      <xsl:text>)</xsl:text>
670*cda5da8dSAndroid Build Coastguard Worker    </xsl:otherwise>
671*cda5da8dSAndroid Build Coastguard Worker  </xsl:choose>
672*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="@enabled = 'false'">
673*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>]</xsl:text>
674*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
675*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>&#10;</xsl:text>
676*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
677*cda5da8dSAndroid Build Coastguard Worker
678*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="solved-conflicts">
679*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="resolution">
680*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>&#10;</xsl:text>
681*cda5da8dSAndroid Build Coastguard Worker    <xsl:apply-templates select="resolution"/>
682*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
683*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
684*cda5da8dSAndroid Build Coastguard Worker
685*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="resolution">
686*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>    Conflict between </xsl:text>
687*cda5da8dSAndroid Build Coastguard Worker  <a>
688*cda5da8dSAndroid Build Coastguard Worker    <xsl:attribute name="href">
689*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="concat('#rule_', @rule)"/>
690*cda5da8dSAndroid Build Coastguard Worker    </xsl:attribute>
691*cda5da8dSAndroid Build Coastguard Worker    <xsl:value-of select="concat('rule ',@rule)"/>
692*cda5da8dSAndroid Build Coastguard Worker  </a>
693*cda5da8dSAndroid Build Coastguard Worker  <xsl:text> and token </xsl:text>
694*cda5da8dSAndroid Build Coastguard Worker  <xsl:value-of select="@symbol"/>
695*cda5da8dSAndroid Build Coastguard Worker  <xsl:text> resolved as </xsl:text>
696*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="@type = 'error'">
697*cda5da8dSAndroid Build Coastguard Worker    <xsl:text>an </xsl:text>
698*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
699*cda5da8dSAndroid Build Coastguard Worker  <xsl:value-of select="@type"/>
700*cda5da8dSAndroid Build Coastguard Worker  <xsl:text> (</xsl:text>
701*cda5da8dSAndroid Build Coastguard Worker  <xsl:value-of select="."/>
702*cda5da8dSAndroid Build Coastguard Worker  <xsl:text>).&#10;</xsl:text>
703*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
704*cda5da8dSAndroid Build Coastguard Worker
705*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="max-width-symbol">
706*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="node"/>
707*cda5da8dSAndroid Build Coastguard Worker  <xsl:variable name="longest">
708*cda5da8dSAndroid Build Coastguard Worker    <xsl:for-each select="$node">
709*cda5da8dSAndroid Build Coastguard Worker      <xsl:sort data-type="number" select="string-length(@symbol)"
710*cda5da8dSAndroid Build Coastguard Worker                order="descending"/>
711*cda5da8dSAndroid Build Coastguard Worker      <xsl:if test="position() = 1">
712*cda5da8dSAndroid Build Coastguard Worker        <xsl:value-of select="string-length(@symbol)"/>
713*cda5da8dSAndroid Build Coastguard Worker      </xsl:if>
714*cda5da8dSAndroid Build Coastguard Worker    </xsl:for-each>
715*cda5da8dSAndroid Build Coastguard Worker  </xsl:variable>
716*cda5da8dSAndroid Build Coastguard Worker  <xsl:value-of select="$longest"/>
717*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
718*cda5da8dSAndroid Build Coastguard Worker
719*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="lpad">
720*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="str" select="''"/>
721*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="pad" select="0"/>
722*cda5da8dSAndroid Build Coastguard Worker  <xsl:variable name="diff" select="$pad - string-length($str)" />
723*cda5da8dSAndroid Build Coastguard Worker  <xsl:choose>
724*cda5da8dSAndroid Build Coastguard Worker    <xsl:when test="$diff &lt; 0">
725*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="$str"/>
726*cda5da8dSAndroid Build Coastguard Worker    </xsl:when>
727*cda5da8dSAndroid Build Coastguard Worker    <xsl:otherwise>
728*cda5da8dSAndroid Build Coastguard Worker      <xsl:call-template name="space">
729*cda5da8dSAndroid Build Coastguard Worker        <xsl:with-param name="repeat" select="$diff"/>
730*cda5da8dSAndroid Build Coastguard Worker      </xsl:call-template>
731*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="$str"/>
732*cda5da8dSAndroid Build Coastguard Worker    </xsl:otherwise>
733*cda5da8dSAndroid Build Coastguard Worker  </xsl:choose>
734*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
735*cda5da8dSAndroid Build Coastguard Worker
736*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="rpad">
737*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="str" select="''"/>
738*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="pad" select="0"/>
739*cda5da8dSAndroid Build Coastguard Worker  <xsl:variable name="diff" select="$pad - string-length($str)"/>
740*cda5da8dSAndroid Build Coastguard Worker  <xsl:choose>
741*cda5da8dSAndroid Build Coastguard Worker    <xsl:when test="$diff &lt; 0">
742*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="$str"/>
743*cda5da8dSAndroid Build Coastguard Worker    </xsl:when>
744*cda5da8dSAndroid Build Coastguard Worker    <xsl:otherwise>
745*cda5da8dSAndroid Build Coastguard Worker      <xsl:value-of select="$str"/>
746*cda5da8dSAndroid Build Coastguard Worker      <xsl:call-template name="space">
747*cda5da8dSAndroid Build Coastguard Worker        <xsl:with-param name="repeat" select="$diff"/>
748*cda5da8dSAndroid Build Coastguard Worker      </xsl:call-template>
749*cda5da8dSAndroid Build Coastguard Worker    </xsl:otherwise>
750*cda5da8dSAndroid Build Coastguard Worker  </xsl:choose>
751*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
752*cda5da8dSAndroid Build Coastguard Worker
753*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="space">
754*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="repeat">0</xsl:param>
755*cda5da8dSAndroid Build Coastguard Worker  <xsl:param name="fill" select="' '"/>
756*cda5da8dSAndroid Build Coastguard Worker  <xsl:if test="number($repeat) &gt;= 1">
757*cda5da8dSAndroid Build Coastguard Worker    <xsl:call-template name="space">
758*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="repeat" select="$repeat - 1"/>
759*cda5da8dSAndroid Build Coastguard Worker      <xsl:with-param name="fill" select="$fill"/>
760*cda5da8dSAndroid Build Coastguard Worker    </xsl:call-template>
761*cda5da8dSAndroid Build Coastguard Worker    <xsl:value-of select="$fill"/>
762*cda5da8dSAndroid Build Coastguard Worker  </xsl:if>
763*cda5da8dSAndroid Build Coastguard Worker</xsl:template>
764*cda5da8dSAndroid Build Coastguard Worker
765*cda5da8dSAndroid Build Coastguard Worker</xsl:stylesheet>
766