#!/usr/bin/perl
use News::NNTPClient;
use CGI;
@color = (
"black", "black", "black",
"red", "red", "darkred",
"green", "lightgreen", "darkgreen",
"yellow", "lightyellow", "yellow",
"blue", "lightblue", "darkblue",
"magenta", "magenta", "darkmagenta",
"cyan", "lightcyan", "darkcyan",
"white", "white", "white");
=pod
@color = (
"#000000", "#808080", "#000000",
"#FF0000", "#800000", "#FF0000",
"#00FF00", "#008000", "#00FF00",
"#FFFF00", "#808000", "#FFFF00",
"#0000FF", "#000080", "#0000FF",
"#FF00FF", "#800080", "#FF00FF",
"#00FFFF", "#008080", "#00FFFF",
"#FFFFFF", "#C0C0C0", "#FFFFFF");
=cut
$pagebgcolor = "black";
$text = "white";
$bright = 0;
$underscore = 0;
$blink = 0;
$reverse = 0;
$hidden = 0;
$fgcolor = 7;
$bgcolor = 0;
$colored = 0;
$server = CGI::param('server');
$group = CGI::param('group');
$msgid = CGI::param('msgid');
$c = new News::NNTPClient($server);
$c->group($group);
@head = $c->head($msgid);
@body = $c->body($msgid);
foreach (@head) {
if (/^From: (.*)/) {
$from = $1;
} elsif (/^Subject: (.*)/) {
$subject = $1;
} elsif (/^Date: (.*)/) {
$date = $1;
}
}
foreach (@body) {
s/&/&/g;
s/</g;
s/>/>/g;
s/\n/
\n/g;
# s/(http:\/\/\S*)/$1<\/a>/g;
s/ / /g;
s/^※.*$/$_<\/font>/;
s/\[([0-9;]*)m/attribute($1)/ge;
}
print CGI::header(-charset=>'big5');
print "\n";
print "\n";
print "\n";
print "\n";
print "\n";
print "";
print "| 作者 | $from
|
\n";
print "| 標題 | $subject
|
\n";
print "| 時間 | $date
|
\n";
print "
";
print "
\n";
print @body;
print "\n";
print "\n";
sub attribute {
my $return = '';
my $tmp_bright = $bright;
my $tmp_fgcolor = $fgcolor;
my $tmp_bgcolor = $bgcolor;
my $tmp_underscore = $underscore;
my $tmp_blink = $blink;
my $tmp_reverse = $reverse;
my $tmp_hidden = $hidden;
my $tmp = shift(@_);
if ($tmp =~ /^$/) {
if ($colored) {
$return .= "";
$tmp_bright = $bright = 0;
$tmp_fgcolor = $fgcolor = 7;
$tmp_bgcolor = $bgcolor = 0;
$tmp_underscore = $underscore = 0;
$tmp_blink = $blink = 0;
$colored = 0;
}
if ($reverse) { $tmp_reverse = $reverse = 0; }
if ($hidden) { $tmp_hidden = $hidden = 0; }
} else {
my @tmp = split(/;/, $tmp);
foreach (@tmp) {
if (/^0$/) { $tmp_bright = 0; }
if (/^1$/) { $tmp_bright = 1; }
if (/^2$/) { $tmp_bright = 2; }
if (/^4$/) { $tmp_underscore = 1; }
if (/^5$/) { $tmp_blink = 1; }
if (/^7$/) { $tmp_reverse = 1; }
if ($_ >= 30 && $_ <= 37) { $tmp_fgcolor = $_ - 30; }
if ($_ >= 40 && $_ <= 47) { $tmp_bgcolor = $_ - 40; }
}
if ($tmp_bright != $bright || $tmp_fgcolor != $fgcolor || $tmp_bgcolor != $bgcolor || $tmp_underscore != $underscore || $tmp_blink != $blink) {
$bright = $tmp_bright;
$fgcolor = $tmp_fgcolor;
$bgcolor = $tmp_bgcolor;
$blink = $tmp_blink;
$underscore = $tmp_underscore;
if ( $colored ) { $return .= ""; }
$return .= "";
$colored = 1;
}
if ($tmp_reverse != $reverse) { $reverse = $tmp_reverse; }
if ($tmp_hidden != $hidden) { $hidden = $tmp_hidden; }
}
return $return;
}