Don't put broken links in HTML info pages
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 11 May 2013 14:44:40 +0000 (16:44 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 12 May 2013 16:53:02 +0000 (18:53 +0200)
Pass the valid info page names to emp2html.pl, and convert only valid
references to links there.

Make.mk
info/emp2html.pl

diff --git a/Make.mk b/Make.mk
index 87968b6bace2be7818f718317c168638731a4f1b..3cfad4dfe624897212d28e1c89f3e917ddadd244 100644 (file)
--- a/Make.mk
+++ b/Make.mk
@@ -293,7 +293,7 @@ info.nr/%: info/%.t
 # Pipes in make are a pain.  The "test -s" catches obvious errors.
 
 info.html/%.html: info/%.t
-       perl $(srcdir)/info/emp2html.pl $< >$@
+       $(call quiet-command,perl $(srcdir)/info/emp2html.pl $(info) <$< >$@,GEN $@)
 
 
 ### Explicit rules
index 7b7d82e787acb257996eee0f0efc04af20e5d676..13069f933d22902b89ece8891b441a394751be80 100644 (file)
 #      Drake Diedrich, 1996
 #      Markus Armbruster, 2004-2013
 #
-# Usage: emp2html.pl [INFO-FILE]
+# Usage: emp2html.pl INFO...
 #
-# Convert INFO-FILE (or else standard input) to HTML on standard output.
+# Convert info source on standard input to HTML on standard output.
+# INFO... are the info page names.
 
 use strict;
 use warnings;
@@ -43,13 +44,18 @@ my $esc = "\\";
 my $ignore = 0;
 my $is_subj;
 my @a;
+my %topic;
+
+for (@ARGV) {
+    $topic{$_} = 1;
+}
 
 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n";
 print "   \"http://www.w3.org/TR/html4/strict.dtd\">\n";
 print "<html>\n";
 print "<head>\n";
 
-line: while (<>) {
+line: while (<STDIN>) {
     chomp;                     # strip record separator
     s/((^|[^\\])(\\\\)*)\\\".*/$1/g; # strip comments
 
@@ -162,8 +168,7 @@ sub checkarg {
 
 sub anchor {
     local ($_) = @_;
-    # FIXME don't create dangling links here
-    return "<a href=\"$_.html\">$_</a>";
+    return $topic{$_} ? "<a href=\"$_.html\">$_</a>" : $_;
 }
 
 # Translate HTML special characters into escape sequences
@@ -182,13 +187,18 @@ sub htmlify {
     s/\\e/&\#92;/g;            # escape character
     # turn quoted strings that look like info names into links
     # tacky...
+    my $pfx = "";
     while (/\\\*Q([A-Za-z0-9\-\.]+)\\\*U|\"info ([A-Za-z0-9\-\.]+)\"/) {
-       if (defined $1) {
-           $_ = $` . anchor($1) . "$'";
+       if (defined $1 && $topic{$1}) {
+           $pfx = $` . anchor($1);
+       } elsif (defined $2 && $topic{$2}) {
+           $pfx = "$`\"info " . anchor($2) . "\"";
        } else {
-           $_ = "$`\"info " . anchor($2) . "\"$'";
+           $pfx .= $` . $&;
        }
+       $_ = "$'";
     }
+    $_ = "$pfx$_";
     # tranlate more troff escapes and strings
     s/\\\*Q/<em>/g;
     s/\\\*U/<\/em>/g;