Fold subj2html.pl into emp2html.pl
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 11 May 2013 13:49:11 +0000 (15:49 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 11 May 2013 14:04:11 +0000 (16:04 +0200)
Make.mk
info/emp2html.pl
info/subj2html.pl [deleted file]

diff --git a/Make.mk b/Make.mk
index 9e222218a58a476bbbae9f5dc3bda8a922b01910..87968b6bace2be7818f718317c168638731a4f1b 100644 (file)
--- a/Make.mk
+++ b/Make.mk
@@ -62,8 +62,6 @@ include $(srcdir)/info/subjects.mk
 # Abbreviations
 topics := $(patsubst %.t,%,$(notdir $(tsrc)))
 info := $(topics) $(subjects) all TOP
-subjects.html := $(addprefix info.html/, $(addsuffix .html, $(subjects)))
-topics.html := $(addprefix info.html/, $(addsuffix .html, $(topics)))
 scripts := $(srcdir)/src/scripts
 depcomp := $(SHELL) $(srcdir)/depcomp
 tarball := $(SHELL) -e $(scripts)/tarball
@@ -295,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 $(filter %.pl, $^) $< >$@
+       perl $(srcdir)/info/emp2html.pl $< >$@
 
 
 ### Explicit rules
@@ -345,8 +343,7 @@ info.html/all.html: info.nr/all info/ls2html.pl
 
 $(info.nr): info/CRT.MAC info/INFO.MAC info/Blank.awk
 
-$(subjects.html) info.html/TOP.html: info/subj2html.pl
-$(topics.html): info/emp2html.pl
+$(info.html): info/emp2html.pl
 
 info.ps: info/TROFF.MAC info/INFO.MAC $(ttop) $(tsubj) $(tsrc)
        groff $^ >$@
index ce131d8d66ebce45ee7588c2aab14e5af848ce93..0cd134246a2bd6732c7b97660015984b1a296de6 100644 (file)
@@ -1,10 +1,47 @@
-#!/usr/local/bin/perl
+#!/usr/bin/perl
+#
+#   Empire - A multi-player, client/server Internet based war game.
+#   Copyright (C) 1986-2013, Dave Pare, Jeff Bailey, Thomas Ruschak,
+#                 Ken Stevens, Steve McClure, Markus Armbruster
+#
+#   Empire is free software: you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation, either version 3 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+#   ---
+#
+#   See files README, COPYING and CREDITS in the root of the source
+#   tree for related information and legal notices.  It is expected
+#   that future projects/authors will amend these files as needed.
+#
+#   ---
+#
+#   emp2html.pl: Convert info source to HTML
+#
+#   Known contributors to this file:
+#      Drake Diedrich, 1996
+#      Markus Armbruster, 2004-2013
+#
+# Usage: emp2html.pl [INFO-FILE]
+#
+# Convert INFO-FILE (or else standard input) to HTML on standard output.
 
 use strict;
 use warnings;
 
+my $in_nf = 0;
 my $esc = "\\";
 my $ignore = 0;
+my $is_subj;
 my @a;
 
 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n";
@@ -19,6 +56,13 @@ line: while (<>) {
     @a = req($_);
 
     if (!@a) {
+       if ($is_subj && $in_nf) {
+           while ($_ =~ /[A-Za-z0-9\-\.]+/g) {
+               print htmlify("$`");
+               print anchor("$&");
+               $_="$'";
+           }
+       }
        print htmlify($_), "\n" unless $ignore;
        next line;
     }
@@ -33,6 +77,7 @@ line: while (<>) {
 
     if ($a[1] eq "TH") {
        @a = checkarg(2, @a);
+       $is_subj = $a[2] eq 'Subject' || $a[2] eq 'Info';
        $a[3] = htmlify($a[3]);
        print "<title>$a[2] : $a[3]</title>\n";
        print "</head>\n";
@@ -55,6 +100,12 @@ line: while (<>) {
        next line;
     }
 
+    if ($a[1] eq "L" && $is_subj) {
+       $a[2] =~ / /;
+       print "<br>" . anchor("$`") . " $'\n";
+       next line;
+    }
+
     if ($a[1] =~ /^LV?$/) {
        @a = checkarg(1, @a);
        $a[2] = htmlify($a[2]);
@@ -66,8 +117,8 @@ line: while (<>) {
     if ($a[1] eq "eo") { $esc = 0; next line; }
     if ($a[1] eq "ec") { $esc = $#a == 1 ? "\\" : $a[2]; next line; }
 
-    if ($a[1] =~ /NF|nf/i) { printf (("<p><pre>\n")); next line; }
-    if ($a[1] =~ /FI|fi/i) { printf (("</pre><p>\n")); next line; }
+    if ($a[1] =~ /NF|nf/i) { $in_nf = 1; printf (("<p><pre>\n")); next line; }
+    if ($a[1] =~ /FI|fi/i) { $in_nf = 0; printf (("</pre><p>\n")); next line; }
     if ($a[1] eq "s1") { printf (("<hr><p>\n")); next line; }
     if ($a[1] eq "br") { printf "<br>\n"; next line; }
 
diff --git a/info/subj2html.pl b/info/subj2html.pl
deleted file mode 100644 (file)
index e5d8cce..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/usr/local/bin/perl
-
-use strict;
-use warnings;
-
-my $dome = 0;
-my $esc="\\";
-my @a;
-
-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 (<>) {
-    chomp;                     # strip record separator
-    s/([^\\](\\\\)*)\\\".*/$1/g; # strip comments
-
-    @a = req($_);
-    if (!@a) {
-       if ($dome) {
-           while ($_ =~ /[A-Za-z0-9\-\.]+/g) {
-               print htmlify("$`");
-               print anchor("$&");
-               $_="$'";
-           }
-       }
-       print htmlify($_), "\n";
-       next line;
-    }
-
-    # requests
-
-    if ($a[1] eq "TH") {
-       @a = checkarg(2, @a);
-       $a[3] = htmlify($a[3]);
-       print "<title>$a[2] : $a[3]</title>\n";
-       print "</head>\n";
-       print "<body>\n";
-       print "<h1>$a[2] : $a[3]</h1>\n";
-       print "<p>\n";
-       next line;
-    }
-
-    if ($a[1] eq "SY") {
-       @a = checkarg(1, @a);
-       $a[2] = htmlify($a[2]);
-       print "<samp>[##:##] Command : </samp><KBD>$a[2]</KBD><p>\n";
-       next line;
-    }
-
-    if ($a[1] eq "EX") {
-       my $str = htmlify(join(' ',@a[2..$#a]));
-       print "<br><samp>[##:##] Command : </samp><kbd>$str</kbd><p>\n";
-       next line;
-    }
-
-    if ($a[1] eq "L") {
-       $a[2] =~ / /;
-       print "<br>" . anchor("$`") . " $'\n";
-       next line;
-    }
-
-    if ($a[1] eq "eo") { $esc = 0; next line; }
-    if ($a[1] eq "ec") { $esc = $#a == 1 ? "\\" : $a[2]; next line; }
-
-    if ($a[1] =~ /NF|nf/i) { $dome = 1; printf (("<p><pre>\n")); next line; }
-    if ($a[1] =~ /FI|fi/i) { $dome = 0; printf (("</pre><p>\n")); next line; }
-    if ($a[1] eq "s1") { printf (("<hr><p>\n")); next line; }
-    if ($a[1] eq "br") { printf "<br>\n"; next line; }
-
-    if ($a[1] eq "SA") {
-       @a = checkarg(1, @a);
-       @a = split(/[\: \"\,\.]+/, $a[2]);
-       for my $a (@a) {
-           $a = anchor($a);
-       }
-       print "<p>See also : ", join("\n, ", @a), "\n";
-    }
-
-    # ignore unknown request
-}
-
-print "</body>\n";
-print "</html>\n";
-
-sub req {
-    local ($_) = @_;
-    if (/^([\.\'])[ \t]*([^ ]*) *(.*)/) {
-       my @a = ($1, $2);
-       $_ = $3;
-       while (/\G(\"((\\.|[^\\\"])*)(\"|\Z))|\G(([^ ]|\\.)+) */g) {
-           push(@a, $2 || $5);
-       }
-       return @a;
-    }
-    return ();
-}
-
-sub checkarg {
-    my ($n, @a) = @_;
-    warn "extra arguments for $a[1] ignored" if $#a > $n+1;
-    warn "missing arguments for $a[1] supplied" if $#a < $n+1;
-    while ($#a < $n+1) {
-       push @a, "";
-    }
-    return @a;
-}
-
-sub anchor {
-    local ($_) = @_;
-    # FIXME don't create dangling links here
-    return "<a href=\"$_.html\">$_</a>";
-}
-
-# Translate HTML special characters into escape sequences
-sub htmlify {
-    local ($_) = @_;
-    die "funny escape character `$esc' not supported"
-       if $esc && $esc ne "\\";
-    # translate some troff escapes
-    s/\\&//g if $esc;          # zero width space character
-    # escape HTML special characters
-    s/\&/&amp;/g;
-    s/\</&lt;/g;
-    s/\>/&gt;/g;
-    # delete form feed
-    s/\f//g;
-    return $_ unless $esc;
-    # translate more troff escapes
-    s/\\e/&\#92;/g;            # escape character
-    # turn quoted strings that look like info names into links
-    # tacky...
-    while (/(\\\*Q)([A-Za-z0-9\-\.]+)(\\\*U)/) {
-       $_ = $` . anchor($2) . "$'";
-    }
-    while (/(\"info )([A-Za-z0-9\-\.]+)/) {
-       $_ = "$`\"info " . anchor($2) . "$'";
-    }
-    # tranlate more troff escapes and strings
-    s/\\\*Q/<em>/g;
-    s/\\\*U/<\/em>/g;
-    s/\\fI/<em>/g;
-    s/\\fR/<\/em><\/em>/g;
-    s/\\fB/<strong>/g;
-    s/\\fP/<\/strong><\/em>/g;
-    s/\\\*\(bF/<strong>/g;     # bold font
-    s/\\\*\(pF/<\/strong><\/em>/g; # pica font
-    s/\\\*\(nF/<\/strong><\/em>/g; # normal font
-    s/\\\*\(iF/<em>/g;         # italic font
-    s/\\\(mu/x/g;              # multiply symbol
-    s/\\ /&nbsp;/g;            # non breaking space
-    return $_;
-}