#!/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 = '<b>'.$2." (Last Updated $tstamp)".'</b>'; $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
\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"); print ( F_OUT "\n"); close ( F_OUT ); } # end of sub proto2html # begin main execution block: foreach $x ( @ARGV ) { proto2html ( $x ); } # that's it!