docs/parse-support-md: Unify identical [*] in footnotes
authorIan Jackson <ian.jackson@eu.citrix.com>
Thu, 12 Apr 2018 11:59:24 +0000 (12:59 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Thu, 12 Apr 2018 16:12:12 +0000 (17:12 +0100)
A section in the SUPPORT.md may mention multiple
   Status, something: Supported
and then have some text.  The text is linked to from [*] footnotes
in the table.  But, this means that each bit of text needs to
apply to multiple rows.

Before this commit this was a separate [*] after each applicable item.
But multiple apparently-different links to the same thing are annoying
for the reader.

So, in this commit we combine them.  Formatting the result is not
entirely trivial.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Release-acked-by: Juergen Gross <jgross@suse.com>
---
v3: New patch
v3.1: Drop `}' in multi-row [*] notes.  I put this in to help work
   around firefox bugs eg
     https://bugzilla.mozilla.org/show_bug.cgi?id=244135
   but I have been convinced it is not generally wanted.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
docs/parse-support-md

index 83768cf7ef3173cc21838a9ef581c70b3c2e574f..decda33fb6929660c575cae6e4afd203820bb910 100755 (executable)
@@ -17,6 +17,7 @@ use Tie::IxHash;
 use IO::File;
 use CGI qw(escapeHTML);
 use Data::Dumper;
+use POSIX;
 
 #---------- accumulating input/output ----------
 
@@ -285,9 +286,14 @@ sub count_rows_sectnode ($) {
     $rows++ if $sectnode->{Status};
     $rows += count_rows_sectlist $sectnode->{Children};
     $sectnode->{Rows} = $rows;
+    $sectnode->{RealSect}{Rows} = $rows;
     return $rows;
 }
 
+# Now we have
+#   $sectnode->{Rows}
+#   $sectnode->{RealSect}{Rows}
+
 sub count_rows_sectlist ($) {
     my ($sectlist) = @_;
     my $rows = 0;
@@ -349,22 +355,34 @@ sub write_output_row ($) {
     }
     for (my $i=0; $i<@version_urls; $i++) {
         my $st = $sectnode->{Status}[$i];
+
+        my $colspan = $sectnode->{RealSect}{ColSpan}[$i];
+        my $nextcell = '';
+        if (!defined $colspan) { # first row of this RealSect
+            $colspan= ' colspan="2"';
+            if ($sectnode->{RealSect}{HasText}[$i] && $st
+                && $sectnode->{RealSect}{Anchor}) {
+                my $rows = $sectnode->{RealSect}{Rows};
+                $nextcell = sprintf '<td rowspan=%d>', $rows;
+                $nextcell .= sprintf '<a href="%s#%s">[*]</a>',
+                    $version_urls[$i], $sectnode->{RealSect}{Anchor};
+                $nextcell .= '</td>';
+                $colspan = '';
+            }
+            $sectnode->{RealSect}{ColSpan}[$i] = $colspan;
+        }
+
         $st //= '-';
-        o('<td>');
+        o("<td$colspan>");
         my $end_a = '';
         if ($sectnode->{Key} eq 'release-support--xen-version') {
             o(sprintf '<a href="%s">', $version_urls[$i]);
             $end_a = '</a>';
         }
         o(escapeHTML($st));
-        if ($sectnode->{RealSect}{HasText}[$i]
-            && $sectnode->{Status}[$i]
-            && $sectnode->{RealSect}{Anchor}) {
-            o(sprintf '<a href="%s#%s">[*]</a>',
-              $version_urls[$i], $sectnode->{RealSect}{Anchor});
-        }
         o($end_a);
         o('</td>');
+        o($nextcell);
     }
     o("</tr>\n");
 }