#!/usr/bin/perl
sub nlink_regular_expression
{
my ( $label, $num ) = ( $_[0], $_[1] );
my ( $expr );
$expr = "(".('[^\s]+\s*'x$num).")(.*)";
return ( $expr );
}
sub proto2html
{
my ( $fname ) = ( $_[0] );
my ( $buf, $k, $doc );
my ( @parts );
my ( $i, $tstamp, $link, $rest, $fore, $aft, $oname, $title, $tbuf );
my ( $bodyparams );
$k = 0; $doc = "";
$bodyparams = "";
@parts = ();
$buf = `cat $fname`;
$tstamp = substr ( `date`, 0, 20 );
$tbuf = chop ( $tstamp );
while ( $tbuf eq ' ' ) { $tbuf = chop ( $date ); }
$tstamp .= $tbuf;
while ( substr($tstamp,0,1) eq " " ) { $tstamp = substr($tstamp,1); }
if ( $fname !~ /(.+?)\.proto/ ) { print("$fname: is not a proto file\n"); return; }
$oname = $1.".html";
if ( !open ( F_OUT, ">$oname" ) ) { print("$fname: cannot create $oname\n"); return; }
while ( $buf =~ /(.*?)\@pre(.*?)\@unpre(.*)/s )
{
push ( @parts, $1 );
push ( @parts, $2 );
$buf = $3;
$k += 2;
}
push ( @parts, $buf );
$k++;
for ( $i = 0; $i <= $k; $i += 2 )
{
$buf = $parts[$i];
while ( $buf =~ /(.*?)\@title[ ]+(.+?)(\n.*)/s )
{
$title = '
'.$2." (Last Updated $tstamp)".'';
$buf = $1.$3;
}
while ( $buf =~ /(.*?)\@link=([^\s]+)[ ]+([^\s]+)(.*)/s )
{
$fore = $1;
$url = $2;
$rest = $3;
$aft = $4;
if ( ( $url !~ /[^\/]\.[A-Za-z0-9_]+$/ ) &&
( $url !~ /\/$/ ) &&
( $url !~ /#/ ) )
{ $url .= '.html'; }
$buf = $fore.''.$rest.''.$aft;
}
while ( $buf =~ /(.*?)\@link2=([^ ]+) ([^\s]+\s+[^\s]+)(.*)/s )
{
$fore = $1;
$url = $2;
$rest = $3;
$aft = $4;
if ( ( $url !~ /[^\/]\.[A-Za-z0-9_]+$/ ) &&
( $url !~ /\/$/ ) &&
( $url !~ /#/ ) )
{ $url .= '.html'; }
$buf = $fore.''.$rest.''.$aft;
}
while ( $buf =~ /(.*?)\@nlink,([0-9]+)=([^\s]+)\s+([^\n]+)(.*)/s )
{
$fore = $1;
$num = $2;
$url = $3;
$label= $4;
$aft = $5;
if ( ( $url !~ /[^\/]\.[A-Za-z0-9_]+$/ ) &&
( $url !~ /\/$/ ) &&
( $url !~ /#/ ) )
{ $url .= '.html'; }
$expr = nlink_regular_expression ( $label, $num );
if ( $label !~ /$expr/s )
{
print ("ERROR: cannot properly parse nlink '$num' for '$label' with '$expr'\n");
exit(0);
}
$label = $1;
$tbuf = $2;
if ( $tbuf ne '' ) { $tbuf .= ' '; }
$buf = $fore.''.$label.''.$tbuf.$aft;
}
while ( $buf =~ /(.*?)\@linkl=([^ ]+)\s+([^\n]+)(.*)/s )
{
$fore = $1;
$url = $2;
$rest = $3;
$aft = $4;
if ( ( $url !~ /[^\/]\.[A-Za-z0-9_]+$/ ) &&
( $url !~ /\/$/ ) &&
( $url !~ /#/ ) )
{ $url .= '.html'; }
$buf = $fore.''.$rest.''."
$aft";
}
while ( $buf =~ /(.*?)(?)\n([ \n]+.*)/s )
{
$buf = $1.'
'."\n".$2;
}
while ( $buf =~ /(.*?) (.*)/s )
{
$buf = $1.' '.$2;
}
while ( $buf =~ /(.*?)\n[ &]*\n(.*)/s )
{
$buf = $1.'
'."\n".$2;
}
while ( $buf =~ /(.*?)\
[\s]*\
(.*)/s )
{
$buf = $1.'
'."\n".$2;
}
$parts[$i] = $buf;
} # end of for
if ( $bodyparams eq "" ) { $bodyparams = 'bgcolor="#C0C0C0" vlink="#FF0000" link="#0000FF" text="#000000"'; }
if ( $tableparams eq "" ) { $tableparams = 'bgcolor="#FFFFFF" border="4" bordercolor="#0000FF" cellpadding="10"'; }
print ( F_OUT "$title\n" );
print ( F_OUT "\n" );
print ( F_OUT "\n" );
for ( $i = 0; $i <= $k; $i++ )
{
if ( ($i/2) == int($i/2) )
{
print ( F_OUT $parts[$i] );
}
elsif ( $parts[$i] ne '' )
{
print ( F_OUT "\n".$parts[$i]."\n \n" );
}
} # end of for
print ( F_OUT "\n |
\n
\n");
print ( F_OUT "\n");
close ( F_OUT );
} # end of sub proto2html
# begin main execution block:
foreach $x ( @ARGV ) { proto2html ( $x ); }
# that's it!