[PATCH 08/10] html: don't define several times the same anchors

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
Currently when we output useless rules, they appear before the
grammar, but using the same invocation.  As a result, the anchor is
defined twice, and the wrong one, being first, is honored.

* data/xslt/xml2xhtml.xsl (rule): Take a new 'anchor' parameter to
decide whether being an anchor, or a target.
Let it be true when output the grammar.
* tests/report.at: Adjust.
---
 data/xslt/xml2xhtml.xsl | 34 ++++++++++++++++++++--------------
 tests/report.at         | 38 +++++++++++++++++++-------------------
 2 files changed, 39 insertions(+), 33 deletions(-)

diff --git a/data/xslt/xml2xhtml.xsl b/data/xslt/xml2xhtml.xsl
index b5aeba94..706ff997 100644
--- a/data/xslt/xml2xhtml.xsl
+++ b/data/xslt/xml2xhtml.xsl
@@ -227,6 +227,7 @@
   <xsl:text>&#10;</xsl:text>
   <p class="pre">
     <xsl:call-template name="style-rule-set">
+      <xsl:with-param name="anchor" select="'true'" />
       <xsl:with-param
         name="rule-set" select="rules/rule[@usefulness!='useless-in-grammar']"
       />
@@ -238,9 +239,11 @@
 </xsl:template>
 
 <xsl:template name="style-rule-set">
+  <xsl:param name="anchor"/>
   <xsl:param name="rule-set"/>
   <xsl:for-each select="$rule-set">
     <xsl:apply-templates select=".">
+      <xsl:with-param name="anchor" select="$anchor"/>
       <xsl:with-param name="pad" select="'3'"/>
       <xsl:with-param name="prev-lhs">
         <xsl:if test="position()>1">
@@ -488,7 +491,12 @@
   </xsl:apply-templates>
 </xsl:template>
 
+<!--
+anchor = 'true': define as an <a> anchor.
+itemset = 'true': show the items.
+ -->
 <xsl:template match="rule">
+  <xsl:param name="anchor"/>
   <xsl:param name="itemset"/>
   <xsl:param name="pad"/>
   <xsl:param name="prev-lhs"/>
@@ -499,20 +507,13 @@
     <xsl:text>&#10;</xsl:text>
   </xsl:if>
 
-  <xsl:if test="$itemset != 'true'">
-    <a>
-      <xsl:attribute name="name">
-        <xsl:value-of select="concat('rule_', @number)"/>
-      </xsl:attribute>
-    </a>
-  </xsl:if>
   <xsl:text>  </xsl:text>
 
   <xsl:choose>
-    <xsl:when test="$itemset = 'true'">
+    <xsl:when test="$anchor = 'true'">
       <a>
-        <xsl:attribute name="href">
-          <xsl:value-of select="concat('#rule_', @number)"/>
+        <xsl:attribute name="name">
+          <xsl:value-of select="concat('rule_', @number)"/>
         </xsl:attribute>
         <xsl:call-template name="lpad">
           <xsl:with-param name="str" select="string(@number)"/>
@@ -521,10 +522,15 @@
       </a>
     </xsl:when>
     <xsl:otherwise>
-      <xsl:call-template name="lpad">
-        <xsl:with-param name="str" select="string(@number)"/>
-        <xsl:with-param name="pad" select="number($pad)"/>
-      </xsl:call-template>
+      <a>
+        <xsl:attribute name="href">
+          <xsl:value-of select="concat('#rule_', @number)"/>
+        </xsl:attribute>
+        <xsl:call-template name="lpad">
+          <xsl:with-param name="str" select="string(@number)"/>
+          <xsl:with-param name="pad" select="number($pad)"/>
+        </xsl:call-template>
+      </a>
     </xsl:otherwise>
   </xsl:choose>
   <xsl:text> </xsl:text>
diff --git a/tests/report.at b/tests/report.at
index 2250abbb..7c3a1690 100644
--- a/tests/report.at
+++ b/tests/report.at
@@ -1205,25 +1205,25 @@ if test x"$XSLTPROC" != x""; then
 
 <h2><a name="grammar" id="grammar"></a> Grammar</h2>
 <p class="pre">
-<a name="rule_0" id="rule_0"></a>    0 <span class="i">$accept</span> → <span class="i">unit</span> <b>"end of file"</b>
+  <a name="rule_0" id="rule_0">  0</a> <span class="i">$accept</span> → <span class="i">unit</span> <b>"end of file"</b>
 
-<a name="rule_1" id="rule_1"></a>    1 <span class="i">unit</span> → <span class="i">assignments</span> <span class="i">exp</span>
+  <a name="rule_1" id="rule_1">  1</a> <span class="i">unit</span> → <span class="i">assignments</span> <span class="i">exp</span>
 
-<a name="rule_2" id="rule_2"></a>    2 <span class="i">assignments</span> → %empty
-<a name="rule_3" id="rule_3"></a>    3             | <span class="i">assignments</span> <span class="i">assignment</span>
+  <a name="rule_2" id="rule_2">  2</a> <span class="i">assignments</span> → %empty
+  <a name="rule_3" id="rule_3">  3</a>             | <span class="i">assignments</span> <span class="i">assignment</span>
 
-<a name="rule_4" id="rule_4"></a>    4 <span class="i">assignment</span> → <span class="i">id</span> <b>":="</b> <span class="i">exp</span>
+  <a name="rule_4" id="rule_4">  4</a> <span class="i">assignment</span> → <span class="i">id</span> <b>":="</b> <span class="i">exp</span>
 
-<a name="rule_5" id="rule_5"></a>    5 <span class="i">id</span> → <b>"identifier"</b>
+  <a name="rule_5" id="rule_5">  5</a> <span class="i">id</span> → <b>"identifier"</b>
 
-<a name="rule_6" id="rule_6"></a>    6 <span class="i">@1</span> → %empty
+  <a name="rule_6" id="rule_6">  6</a> <span class="i">@1</span> → %empty
 
-<a name="rule_7" id="rule_7"></a>    7 <span class="i">@2</span> → %empty
+  <a name="rule_7" id="rule_7">  7</a> <span class="i">@2</span> → %empty
 
-<a name="rule_8" id="rule_8"></a>    8 <span class="i">exp</span> → <b>"incr"</b> <span class="i">exp</span> <span class="i">@1</span> <span class="i">@2</span> <span class="i">exp</span>
-<a name="rule_9" id="rule_9"></a>    9     | <b>"("</b> <span class="i">exp</span> <b>")"</b>
-<a name="rule_10" id="rule_10"></a>   10     | <b>"identifier"</b>
-<a name="rule_11" id="rule_11"></a>   11     | <b>"number"</b>
+  <a name="rule_8" id="rule_8">  8</a> <span class="i">exp</span> → <b>"incr"</b> <span class="i">exp</span> <span class="i">@1</span> <span class="i">@2</span> <span class="i">exp</span>
+  <a name="rule_9" id="rule_9">  9</a>     | <b>"("</b> <span class="i">exp</span> <b>")"</b>
+  <a name="rule_10" id="rule_10"> 10</a>     | <b>"identifier"</b>
+  <a name="rule_11" id="rule_11"> 11</a>     | <b>"number"</b>
 </p>
 
 <h3><a name="terminals" id="terminals"></a> Terminals, with rules where they appear</h3>
@@ -2158,7 +2158,7 @@ if test x"$XSLTPROC" != x""; then
 <h3><a name="rules_useless_in_grammar" id="rules_useless_in_grammar"></a> Rules useless in grammar</h3>
 <h2><a name="rules_useless_in_parser" id="rules_useless_in_parser"></a> Rules useless in parser due to conflicts</h2>
 <p class="pre">
-<a name="rule_3" id="rule_3"></a>    3 <span class="i">exp</span> → <span class="i">exp</span> <b>"+"</b> <span class="i">exp</span>
+  <a href="#rule_3">  3</a> <span class="i">exp</span> → <span class="i">exp</span> <b>"+"</b> <span class="i">exp</span>
 </p>
 
 <h2><a name="conflicts" id="conflicts"></a> Conflicts</h2>
@@ -2169,13 +2169,13 @@ if test x"$XSLTPROC" != x""; then
 
 </p><h2><a name="grammar" id="grammar"></a> Grammar</h2>
 <p class="pre">
-<a name="rule_0" id="rule_0"></a>    0 <span class="i">$accept</span> → <span class="i">exp</span> <b>$end</b>
+  <a name="rule_0" id="rule_0">  0</a> <span class="i">$accept</span> → <span class="i">exp</span> <b>$end</b>
 
-<a name="rule_1" id="rule_1"></a>    1 <span class="i">exp</span> → <span class="i">exp</span> <b>"⊕"</b> <span class="i">exp</span>
-<a name="rule_2" id="rule_2"></a>    2     | <span class="i">exp</span> <b>"+"</b> <span class="i">exp</span>
-<a name="rule_3" id="rule_3"></a>    3     | <span class="i">exp</span> <b>"+"</b> <span class="i">exp</span>
-<a name="rule_4" id="rule_4"></a>    4     | <b>"number"</b>
-<a name="rule_5" id="rule_5"></a>    5     | <b>"Ñùṃéℝô"</b>
+  <a name="rule_1" id="rule_1">  1</a> <span class="i">exp</span> → <span class="i">exp</span> <b>"⊕"</b> <span class="i">exp</span>
+  <a name="rule_2" id="rule_2">  2</a>     | <span class="i">exp</span> <b>"+"</b> <span class="i">exp</span>
+  <a name="rule_3" id="rule_3">  3</a>     | <span class="i">exp</span> <b>"+"</b> <span class="i">exp</span>
+  <a name="rule_4" id="rule_4">  4</a>     | <b>"number"</b>
+  <a name="rule_5" id="rule_5">  5</a>     | <b>"Ñùṃéℝô"</b>
 </p>
 
 <h3><a name="terminals" id="terminals"></a> Terminals, with rules where they appear</h3>
-- 
2.27.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.