#!/usr/bin/perl -w
use strict;
############################################################################################
# #
# help2html.pl - Convert EW-Too style help files into a pre-formatted web page. #
# #
# Copyright (c) 2001 Will Fischer #
# #
############################################################################################
#**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!
my $HELPDIR = 'pgplus/doc/'; # what dir is the help file in?
my $HTMLDIR = 'web/help/'; # what dir do we want the html files to go to?
my $HELP = 'help'; # name of the main talker help file
my $HTML = 'help.html'; # name for the html file where the help will be printed
my $TOC = 'toc.html'; # name for the table of contents html file
my $FRAMEPAGE = 'helpmain.html'; # name for the page that loads the previous 2 in frames
my $BGCOLOR = '#000000'; # background color of all html files
my $TEXTCOLOR = '#C0C0C0'; # default text color of all html files
my $LINKCOLOR = '#FFFFFF'; # link color of all html files
my $VLINKCOLOR = '#DDDDDD'; # visited link color of all html files
my $talker = 'MyTalker'; # talker name
#**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!
my $TEMP = 'temp.txt'; # temp file for TOC processing
my $foo = '';
open(HELP, "$HELPDIR$HELP") or die "Failed to open $HELP: $!";
open(HTML, ">$HTMLDIR$HTML") or die "Failed to open $HTML: $!";
open(TEMP, ">$TEMP") or die "Failed to open $TEMP: $!";
# This has to be done in a specific order, so that things don't get whacked out.
while (<HELP>)
{
read_toc(); # Read all the tags the talker looks for, and print them to a list.
convert_dynatext(); # Get the dynatext out first, in case we've got <T:blah> format.
convert_operators(); # Replace all < and > with < and >, before we add any html tags
convert_colors(); # Convert all PG color codes to html color codes
convert_tags(); # Now convert all those tags to html: <a name="blah"> </a>
print HTML $_; # Print out the final result
}
close HELP;
close HTML;
close TEMP;
append_main_file();
append_toc_read();
make_toc();
make_pretty();
make_framepage();
############# SUBROUTINES ############
sub convert_dynatext
{
#**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!
# Strings of Dynatext...
my $tname = '<T:name>'; # dynatext string for talker name
my $taddr = '<T:addr>'; # dynatext string for talker address
my $temail = '<T:email>'; # dynatext string for talker email
my $tpot = '<T:pot>'; # dynatext string for slots jackpot
my $tonline = '<T:online>'; # dynatext string for num of ppl online
my $tstaff = '<T:staff>'; # dynatext string for num of staff online
my $tcount = '<T:count>'; # dynatext string for num of ppl total
my $tcountstaff = '<T:countstaff>'; # dynatext string for num of staff total
my $mname = '<M:name>'; # dynatext string for person seeing message
# ... and their replacements.
# $talker is defined globally, for use elsewhere
my $address = 'mytalker.com 7777'; # talker's address and port number
my $email = 'MyTalker@mytalker.com'; # talker's email addy
my $pot = 4000; # some number for jackpot
my $online = 4; # number of ppl online (Don't lie. :P)
my $staff = 2; # number of staff online
my $count = 112; # number of ppl total (Again, don't lie. We know better.)
my $countstaff = 6; # number of staff total
my $name = 'John_Doe'; # name to use in place of $mname
#**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!**!
my $temp = ''; # temp variable for foreach loops
# This first bit is to account for places where older dynatext is used, and a string is NOT
# to be converted. For example: &&t->name should show as &t->name. If we find such an animal,
# snip off the first & and go on to the next subroutine. Otherwise, convert the dynatext.
foreach $temp (/&&/g)
{
s/&&/&/;
}
# And now, onto the dynatext converting...
foreach $temp (/$tname/g)
{
s/$tname/$talker/;
}
foreach $temp (/$taddr/g)
{
s/$taddr/$address/;
}
foreach $temp (/$temail/g)
{
s/$temail/$email/;
}
foreach $temp (/$tpot/g)
{
s/$tpot/$pot/;
}
foreach $temp (/$tonline/g)
{
s/$tonline/$online/;
}
foreach $temp (/$tstaff/g)
{
s/$tstaff/$staff/;
}
foreach $temp (/$tcount/g)
{
s/$tcount/$count/;
}
foreach $temp (/$tcountstaff/g)
{
s/$tcountstaff/$countstaff/;
}
foreach $temp (/$mname/g)
{
s/$mname/$name/;
}
}
sub convert_operators
{
my $temp = '';
foreach $temp (/</g)
{
s/</</; # Why does perl regexp look so NASTY?
}
foreach $temp (/>/g)
{
s/>/>/;
}
}
sub convert_colors # More nasty regexp statements ;)
{
my $temp = '';
foreach $temp (/\^R/g)
{
s/\^R/<font color="#FF0000">/;
}
foreach $temp (/\^r/g)
{
s/\^r/<font color="#A00000">/;
}
foreach $temp (/\^A/g)
{
s/\^A/<font color="#C0C0C0">/;
}
foreach $temp (/\^a/g)
{
s/\^a/<font color="#808080">/;
}
foreach $temp (/\^C/g)
{
s/\^C/<font color="#00FFFF">/;
}
foreach $temp (/\^c/g)
{
s/\^c/<font color="#00A0A0">/;
}
foreach $temp (/\^Y/g)
{
s/\^Y/<font color="#FFFF00">/;
}
foreach $temp (/\^y/g)
{
s/\^y/<font color="#A0A000">/;
}
foreach $temp (/\^p/g)
{
s/\^p/<font color="#A000A0">/;
}
foreach $temp (/\^P/g)
{
s/\^P/<font color="#FF00FF">/;
}
foreach $temp (/\^G/g)
{
s/\^G/<font color="#00FF00">/;
}
foreach $temp (/\^g/g)
{
s/\^g/<font color="#00A000">/;
}
foreach $temp (/\^B/g)
{
s/\^B/<font color="#0000FF">/;
}
foreach $temp (/\^b/g)
{
s/\^b/<font color="#0000A0">/;
}
foreach $temp (/\^H/g)
{
s/\^H/<font color="#FFFFFF">/;
}
# special cases
foreach $temp (/<\^N/g) # "Turn off" code for dynatext 3.0 and higher
{
s/<\^N/</;
}
foreach $temp (/\^S/g) # italic
{
s/\^S/<i>/;
if (/\^N/) # replace the next case of ^N with </i> instead of </font>
{
s/\^N/<\/i>/;
}
}
foreach $temp (/\^U/g) # underline
{
s/\^U/<u>/;
if (/\^N/)
{
s/\^N/<\/u>/;
}
}
foreach $temp (/\^K/g) # blink, but we'll use bold instead
{
s/\^K/<b>/;
if (/\^N/)
{
s/\^N/<\/b>/;
}
}
foreach $temp (/\^N/g)
{
s/\^N/<\/font>/;
}
}
sub read_toc
{
my $temp = '';
my $gee = '';
my @toclist = ();
foreach $temp (/^:/g)
{
$gee = $_;
$gee =~ s/^://g;
$gee =~ s/,/\n/g;
@toclist = split(/ /, $gee);
print TEMP @toclist;
}
}
sub append_toc_read
{
open(TEMP, ">>$TEMP") or die "Failed to open $TEMP in append_toc_read(): $!";
opendir(HELPDIR, "$HELPDIR") or die "Failed to open directory $HELPDIR in append_toc_read(): $!";
my @dirlist = readdir(HELPDIR);
closedir (HELPDIR);
foreach (@dirlist)
{
if (/\.help/i)
{
s/\.help$//;
print TEMP "$_\n";
}
}
close TEMP;
}
sub append_main_file
{
opendir (HELPDIR, "$HELPDIR") or die "Failed to open directory $HELPDIR in append_main_file(): $!";
my @list = readdir(HELPDIR);
my @pnuss = ();
closedir (HELPDIR);
open (HTML, ">>$HTMLDIR$HTML") or die "Failed to open $HTML in append_main_file(): $!";
foreach (@list)
{
if (/\.help/i)
{
my $garb = $_;
foreach ($garb)
{
$garb =~ s/\.help//g;
print HTML "<hr><a name=\"$garb\"></a>\n";
}
open (FOO, "$HELPDIR$_") or die "Failed to open $_ in append_main_file(): $!";
@pnuss = <FOO>;
foreach (@pnuss)
{
convert_dynatext();
convert_operators();
convert_colors();
}
print HTML @pnuss;
close FOO;
}
}
}
sub make_toc
{
open (TEMP, "$TEMP") or die "Failed to open $TEMP in make_toc(): $!";
open (TOC, ">$HTMLDIR$TOC") or die "Failed to open $TOC in make_toc(): $!";
print TOC '<html>';
print TOC "\n<body bgcolor=\"$BGCOLOR\" text=\"$TEXTCOLOR\" link=\"$LINKCOLOR\" vlink=\"$VLINKCOLOR\">\n";
print TOC "\n<ul>\n";
my @list = <TEMP>;
my @alphalist = sort @list;
foreach $foo (@alphalist)
{
chomp $foo;
print TOC "<li><a target = \"help\" href = \"help.html#$foo\">$foo</a><br>\n";
}
print TOC "</ul>\n</html>";
close TEMP;
close TOC;
unlink $TEMP;
}
sub convert_tags
{
my $temp = '';
my $foo = '';
my @taglist = ();
foreach $temp (/^:/g)
{
$foo = $_;
chomp $foo;
$foo =~ s/^://g;
$foo =~ s/,/ /g;
@taglist = split(/ /, $foo);
print HTML "<hr>";
foreach $temp (@taglist)
{
$_ = "<a name = \"$temp\"></a>";
print HTML $_;
}
}
}
sub make_pretty
{
open(HTML, "$HTMLDIR$HTML") or die "Failed to open $HTML in make_pretty(): $!";
open(FOO, ">foo.txt") or die "Failed to open foo.txt in make_pretty(): $!";
print FOO "<html>\n";
print FOO "\n<body bgcolor=\"$BGCOLOR\" text=\"$TEXTCOLOR\" link=\"$LINKCOLOR\" vlink=\"$VLINKCOLOR\">\n";
print FOO "<pre>\n";
print FOO <HTML>;
print FOO "\n</pre></html>";
close FOO;
close HTML;
rename 'foo.txt', "$HTMLDIR$HTML";
}
sub make_framepage
{
open(FP, ">$HTMLDIR$FRAMEPAGE") or die "Failed to open $FRAMEPAGE in make_framepage(): $!";
print FP "<html>\n<head>\n<title>$talker Online Help</title>\n<\head>\n\n";
print FP "<frameset cols = \"20\%, 80\%\">\n";
print FP "<frame name=\"toc\" src=\"$TOC\" scrolling=\"auto\" noresize longdesc=\"Table of Contents\">\n";
print FP "<frame name=\"help\" src=\"$HTML\" scrolling=\"auto\" noresize longdesc=\"Help Files\">\n";
print FP "</frameset>\n\n</html>";
close FP;
}