This is indent.pl in view mode; [Download] [Up]
#!@@PERL@@ -s
#
# This script is part of rtfdtohtml.
# Copyright (c) 1996 Elmar Ludwig - Universitaet Osnabrueck
#
# Experimental table support (this is now the default),
# simple indentation is emulated using nested lists.
#
# Special rule: Code enclosed in "\t{sometext}" and "\t{}"
# will become pre-formatted text.
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n";
%TAGS = ('/TT', '</TT>', '/I', '</I>', '/B', '</B>', '/U', '</U>',
'/STRIKE', '</STRIKE>', '/BIG', '</BIG>', '/SMALL', '</SMALL>',
'/SUB', '</SUB>', '/SUP', '</SUP>', '/EM', '</EM>',
'/STRONG', '</STRONG>', '/DFN', '</DFN>', '/CODE', '</CODE>',
'/SAMP', '</SAMP>', '/KBD', '</KBD>', '/VAR', '</VAR>',
'/CITE', '</CITE>', '/H1', '</H1>', '/H2', '</H2>', '/H3',
'</H3>', '/H4', '</H4>', '/H5', '</H5>', '/H6', '</H6>');
sub printstr
{
$str = $_[0];
unless ($html2 || $head)
{
$str =~ s/<[Hh]([1-4])>/'<FONT size="+'.(5-$1).'">'/ge;
$str =~ s/<[Hh]([56])>/'<FONT size="'.(4-$1).'">'/ge;
$str =~ s/<\/[Hh][1-6]>/<\/FONT>/g;
}
print $str;
}
sub finalize
{
if ($html2 || !$usetable)
{
&printstr($text);
while ($nest)
{
print '</DL>';
--$nest;
}
}
else
{
&printstr($table . "</TABLE>\n");
$nest = 0;
}
$usetable = $text = $table = '';
}
sub blue
{
$_ = $_[0];
return $_[1] unless s/<(([^&]|&([^g]|g([^t]|t[^;])))*)>//;
$url = $1;
$url =~ s/<[^>]*>//g;
if ($url !~ m%^[A-Za-z]+://% && $url !~ m%^//% && $url !~ /^mailto:/ &&
$url !~ /^news:/ && ! -e $url)
{
print STDERR "Warning: invalid hypertext link to `$url'\n";
}
return "<A href=\"$url\">$_</A>";
}
$dir = $ENV{'FILENAME'};
if ($dir !~ /\.rtfd$/)
{
$dir = $dir =~ /^(.*)\// ? $1 : '.';
}
chdir $dir || die "chdir failed for $dir: $!";
$nest = 0;
while (<>)
{
s/<body>/<body $ENV{'RTFDBODYATTR'}>/i; # default is "bgcolor=White"
if (/<\/body>/i)
{
$_ = $`;
$last = $& . $';
}
# remove some weird HTML-tags...
while (s/<(\w+)>([ \t]*)<\/\1>/$2/g) {}
if ($html2 || $head)
{
/<[Hh][1-6]>.*<[Hh][1-6]>.*<br>$/ && s/<\/?[Hh][1-6]>//g;
}
s%<FONT color=\"#0000FF\">(([^<]|<([^/]|/([^F]|F([^O]|O([^N]|N([^T]|T[^>]))))))*)</FONT>%&blue($1,$&)%eg if defined $blue;
$pre = $_;
$pre =~ s/<\/?FONT[^>]*>//g;
$pre =~ s/<\/?[Hh][1-6]>//g;
if ($pre =~ /^((<HR>|<A [^>]*>|<\/A>)*) *\t{[^;{}]+}<br>$/)
{
s/<br>$//i;
if ($code)
{
s/{[^;{}]+}//;
print "\n";
}
else
{
&finalize if $table;
s/{[^;{}]+}/<PRE>/;
$code = 'YES';
}
&printstr($_);
}
elsif ($pre =~ /^((<HR>|<A [^>]*>|<\/A>)*) *\t{}(<br>)?$/ && $code)
{
s/<br>$//i;
s/{}/<\/PRE>/;
$code = '';
&printstr($_);
}
elsif ($code)
{
s/<br>$//i;
&printstr($_);
}
elsif (index($_, "\t") > -1)
{
$table = "<TABLE>\n" unless $table;
if ($tables)
{
$bold = '';
# /^(<[^>]+>)*\t*[^\t]+(\t*)(<[^>]+>)*/;
# $left = $&;
# $bold = /^(<[^>]+>|\t)*<[Bb]>/ && $left =~ /<\/[Bb]>(<[^>]+>|\t)*$/;
}
else
{
$bold = /^(<[^>]+>|\t)*<[Bb]>/; # any line starting bold
}
s/(<img [^>]+>(<[^>]+>)*)\t/$1 \t/gi;
/^(<[^>]+>)*\t*[^\t]+(\t*)[^\t]*(\t*)/;
$usetable = 'YES' if !$usetable && ($2 && !$bold || $3);
# Use <DT> for this line? (Yes, if first word is bold.)
$bold ? /^((<[^>]+>)*)(\t*)([^\t]+)(\t*)/ :
/^((<[^>]+>)*)(\t*)([^\000]+)(@*)/;
$level = length($3) + ($5 ? 1 : 0);
$delta = $level - $nest;
while ($delta)
{
if ($delta > 0)
{
$text .= '<DL>';
--$delta;
$text .= '<DD>' if $delta || !$5;
}
else
{
$text .= '</DL>';
++$delta;
}
}
if ($5)
{
$text .= "<DT>$1$4";
$' =~ /^(<\/[^>]+>)*/;
$text .= "$&<DD>\n";
$line = $';
}
else
{
$text .= "\n" if $level != $nest;
$line = $1 . $4;
}
$text .= $line;
$nest = $level;
$table .= '<TR valign=top><TD>';
s/\t/ <TD>/g;
s/<br>$//i;
$line = $tags = '';
$pos = 0;
while (/<([\/A-Za-z0-9]+)>/g)
{
$left = $`;
$tag = "\U$1\E";
$atag = '/' . $tag;
if (defined $TAGS{$atag})
{
$tags = $TAGS{$atag} . $tags; next;
}
if (defined $TAGS{$tag})
{
$tags = substr($tags, length $TAGS{$tag}); next;
}
if ($tag eq 'TD' && $tags)
{
$tags1 = join('', reverse split(/(<\/[A-Z0-9]+>)/, $tags));
$tags1 =~ s%/%%g;
$line .= substr($left, $pos) . $tags . '<TD>' . $tags1;
$pos = length($left) + 4;
}
}
$line .= substr($_, $pos);
if ($pos)
{
while ($line =~ s%<(\w+)></\1>%%gi) {}
}
$table .= $line;
}
else
{
&finalize if $table;
&printstr($_);
}
if ($last)
{
print "</PRE>\n" if $code;
&finalize if $table;
print $last;
last;
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.