-#!/usr/local/bin/perl
+#!/usr/bin/perl
+#
+# Empire - A multi-player, client/server Internet based war game.
+# Copyright (C) 1986-2018, 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...
+#
+# Convert info source on standard input to HTML on standard output.
+# INFO... are the info page names.
use strict;
use warnings;
-my $esc="\\";
+my $in_nf = 0;
+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
+ s/((^|[^\\])(\\\\)*)\\\".*/$1/g; # strip comments
@a = req($_);
+
if (!@a) {
- print htmlify($_), "\n";
+ if ($is_subj && $in_nf) {
+ while ($_ =~ /[A-Za-z0-9\-\.]+/g) {
+ print htmlify("$`");
+ print anchor("$&");
+ $_="$'";
+ }
+ }
+ print htmlify($_), "\n" unless $ignore;
next line;
}
# requests
+ if ($a[1] eq "ig") { $ignore = 1; next line; }
+ if ($ignore) {
+ $ignore = 0 if $a[1] eq "..";
+ next line;
+ }
+
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";
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]);
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; }
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
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) . "$'";
+ my $pfx = "";
+ while (/\\\*Q([A-Za-z0-9\-\.]+)\\\*U|\"info ([A-Za-z0-9\-\.]+)\"/) {
+ if (defined $1 && $topic{$1}) {
+ $pfx = $` . anchor($1);
+ } elsif (defined $2 && $topic{$2}) {
+ $pfx = "$`\"info " . anchor($2) . "\"";
+ } else {
+ $pfx .= $` . $&;
+ }
+ $_ = "$'";
}
+ $_ = "$pfx$_";
# tranlate more troff escapes and strings
s/\\\*Q/<em>/g;
s/\\\*U/<\/em>/g;