#i) {
s#^ *#\\fC\n.DS#i;
$preformat = 1;
return 1;
}
s#
##i;
if (m##i) {return 2};
s###i;
s#<\!\-\-#.\\\" #i;
s#\-\->##i;
if (m#^$#i) {return 0};
s#
##i;
s#
##i;
if (&DoStrip($_)) {return 0}
&DoFont($_);
if (! &DoList($_)) {return 0};
if (! &DoSection($_)) {return 0}
&DoEscape($_);
&DoPara($_);
if (! $preformat) {
if (m/^$/) {return 0};
s#^[ \t]*##;
s#<[^>]*>##g;
}
return 1;
}
sub DoEscape {
# s#>#>#i;
# s#<#<#i;
s#>#>#i;
s#<#<#i;
}
sub DoSection {
if (m#^ *Table of Contents *$#i) {return 0};
if (m#^$#i) {return 0;}
s###i;
s#^.*#.SH #i;
s#^.*#.SS #i;
# s#^.*#.TP\n.SM #i;
s#^.*#.SS #i;
if (m#^[^>]*>$#i) {return 0};
s#[^>]*>##ig;
s#^
$#.br#i;
s#
#\n.br\n#i;
return 1;
}
#================
# Paragraph breaks:
#
sub DoPara {
s/^ *
/.PP\n/i;
s/
/\n.PP\n/ig;
return;
}
#================
# Lists
#
-
#
sub DoList {
if (m#^ * *$#i) {return 0};
if (m#
- *$#i) {chop};
# s#^ *
- #.IP \"#i;
# s#
- #\n.IP \"#i;
# s#
#\" 4m#i;
s#^ *- #.TP\n#i;
s#
- #\n.TP\n#i;
s#
#\n#i;
if (m#^ * - *$#i) {return 0};
if (m#^ *
*$#i) {return 0};
if (m#^$#i) {return 0};
s#- ##i;
s#
##i;
# s##\n.B #i;
# s##\n#i;
# s#^.* *$##i;
# s##\n.VL 4m\n#i;
# s#^.*
*$#.PP#i;
# s##\n.IP\n#i;
s#^.* *$##i;
s##\n.VL 4m\n#i;
s#^.*
*$#.PP#i;
s#
#\n.IP\n#i;
s#^.*]*> *$#.RS#i;
s#]*>#\n.RS\n#i;
# s#^.*]*> *$##i;
# s#]*>#\n#i;
s#^.*
*$#.RE#i;
s#
#\n.RE\n#i;
# s#^.*
*$##i;
# s#
#\n#i;
s#^.* *$#..IP#i;
s##\n.AL\n#i;
s#^.*
*$#.PP#i;
s#
#\n.PP\n#i;
s###i;
# s#^
$#.IP#i;
# s#^ * *$#.IP#i;
# s# #.IP\n#i;
s#^ $#.IP \\(bu#i;
s#^ * *$#.IP \\(bu#i;
s# #.IP \\(bu\n#i;
return 1;
}
#================
# Font transitions:
# => \fB
# => \fR
# => \fI
# => \fR
#
sub DoFont {
s# * *_ * *#_#ig;
s# *# #ig;
s##\\fB#ig;
s##\\fR#ig;
s# * *_ * *#_#ig;
s# *# #ig;
s##\\fI#ig;
s##\\fR#ig;
s# * *_ * *#_#ig;
s# *# #ig;
s##\\fI#ig;
s##\\fR#ig;
s/&NBSP;/ /ig;
s/&NDASH;/-/ig;
s/&MDASH;/--/ig;
s/&HELLIP;/ .../ig;
return;
}
#############################################################################
#==================
# Process HTML file
$infile = $ARGV[0];
$outfile = $ARGV[1];
$preformat = 0;
$page = &basename($ARGV[0], ".html");
$sect = $ARGV[2];
open(INP,$infile) || die "Can't open '$infile' for reading: $!";
if (! &GetTitle($page,$sect)) {
print "$infile: Did not find a valid line\n";
close(INP);
return;
}
open(OUT,"> $outfile") || die "Can't open '$outfile' for writing: $!";
print "Converting: $infile to $outfile\n";
&PrintHeader($page,$sect,$TITLE[0]);
while () {
$result = &DoLine($_);
if ($result == 2) {
close(INP);
close(OUT);
return;
}
if (&DoLine($_) == 1) {
s#<#<#g;
s#>#>#g;
print OUT;
if ($preformat == 1) {
print OUT ".br\n";
}
}
}
close(INP);
close(OUT);
exit;
#############################################################################