-#!/usr/bin/perl
+#!/usr/bin/perl -w
# irclog2html.pl Version 1.5 - 11th May 2000
# Copyright (C) 2000, Jeffrey W. Waugh
# Modified by Tim Riker <Tim@Rikers.org>
# to work with infobot logs
-# then modified again for blootbot
+# then modified again for infobot
# Usage: irclog2html <date> < logfile
my ($channel, $date) = @_;
my $return = '';
- $return .= qq{<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+ $return .= qq{<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>irclog2html for $channel on $date</title>
<meta name="generator" content="irclog2html.pl by Jeff Waugh">
- <meta name="version" content="Version 0.9 - 5th April 2000">
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="version" content="Version 1.5 - 11th May 2000">
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
-<body text="#000000" bgcolor="#ffffff"><tt>
+<body text="#000000" bgcolor="#ffffff">
<h1>irclog2html for $channel on $date</h1>
};
<a href="mailto:jdub\@NOSPAMaphid.net">Jeff Waugh</a> - find it at
<a href="http://freshmeat.net/appindex/2000/03/28/954251322.html">freshmeat.net</a>!
Modified by <a href="http://www.Rikers.org">Tim Riker</a> to work with
-<a href="http://blootbot.sourceforge.net/">blootbot</a> logs, split per channel, etc.
-</tt></body></html>
+<a href="http://infobot.sourceforge.net/">infobot</a> logs, split per channel, etc.
+</body></html>
};
return $return;
}
foreach $filename (@files) {
chomp $filename;
if (!open(OUTPUT, ">>$filename")) {
- die "Cannot open $filename for writing!\n\n";
+ print "Cannot open $filename for writing!\n\n";
+ return;
}
print OUTPUT footer();
close OUTPUT;
mkdir($channel,oct('755')) if ($channel && ! -d $channel);
if (!open(OUTPUT, ">>$filename")) {
- die "Cannot open $filename for writing!\n\n";
+ #print "Cannot open $filename for writing!\n\n";
+ return;
}
# Begin output #
print OUTPUT header($channel, $date) if -z $filename;
$lineout .= "$time " if $time;
$lineout .= "<font color=\"$htmlcolour\"><\;$nick>\; $text<\/font><br>\n";
}
- output_line($date, $time,$channel,$lineout);
+ output_line($date, $time, $channel, $lineout);
}
sub output_timeservermsg {
- my ($date, $time, $line) = @_;
+ my ($date, $time, $channel, $line) = @_;
my $lineout = '';
if ($STYLE =~ /table/) {
$lineout .= "$time " if $time;
$lineout .= "$line<br>\n";
}
- output_line($date, $time,'',$lineout);
+ output_line($date, $time, $channel, $lineout);
}
sub html_rgb
my $rgbmin = 240;
my $a = 0.95; # tune these for the starting and ending concentrations of R,G,B
- my $b = 0.5;
+ my $c = 0.5;
- my $rgb = [ [$a,$b,$b], [$b,$a,$b], [$b,$b,$a], [$a,$a,$b], [$a,$b,$a], [$b,$a,$a] ];
+ my $rgb = [ [$a,$c,$c], [$c,$a,$c], [$c,$c,$a], [$a,$a,$c], [$a,$c,$a], [$c,$a,$a] ];
my $n = $i % @$rgb;
my $m = $rgbmin + ($rgbmax - $rgbmin) * ($ncolours - $i) / $ncolours;
chomp $line;
if (!$line eq "") {
-
# parse out the time
- if ($line =~ s/^([0-9:\.]*) (.*)$/\2/) {
+ if ($line =~ s/^([0-9:\.]*) (.*)$/$2/) {
$time = $1;
} else {
- $time = "";
+ $time = '';
}
+ $channel = '';
# Replace ampersands, pointies, control characters #
$line =~ s/&/&\;/g;
$nick = $line;
$nick =~ s/^<\;([^\/]*?)\/\#.*?>\; .*$/$1/;
$channel = $line;
- $channel =~ s/^<\;[^\/]*?\/\#(.*?)>\; .*$/$1/;
+ $channel =~ s/^<\;[^\/]*?\/(\#.*?)>\; .*$/$1/;
# $nick =~ tr/[A-Z]/[a-z]/;
# <======= move this into another function when getting nick colour
$text = $line;
$text =~ s/^<\;.*?>\; (.*)$/$1/;
+ $text =~ s/^ .*/<\;PROTECTED>\;/g;
$text =~ s/ / \; \;/g;
$htmlcolour = $colour_nick{$nick};
$htmlcolour = $colour_nick{$nick} = html_rgb($nickcount, $NICKMAX);
}
output_timenicktext($date, $time, $channel, $nick, $text, $htmlcolour);
- }
-
- elsif ($line =~ /^>\;>\;>\; /) {
+ } elsif ($line =~ /^>\;>\;>\; /) {
$line =~ s/^>\;>\;>\; /\*\*\* /;
-
- # Process changed nick results, and remember colours accordingly #
- if ($line =~ /\*\*\* (.*?) are|is now known as (.*)/) {
- my $nick_old;
- my $nick_new;
- $nick_old = $line;
- $nick_old =~ s/\*\*\* (.*?) (are|is) now known as .*/$1/;
+ # Process changed nick results, and remember colours accordingly #
+ if ($line =~ /\*\*\* (.*?) materializes into (.*)/) {
+ my $nick_old = $1;
+ my $nick_new = $2;
- $nick_new = $line;
- $nick_new =~ s/\*\*\* .*? (are|is) now known as (.*)/$2/;
+ #$nick_old = $line;
+ #$nick_old =~ s/\*\*\* (.*?) materializes into .*/$1/;
+ #$nick_new = $line;
+ #$nick_new =~ s/\*\*\* (.*?) materializes into (.*)/$2/;
$colour_nick{$nick_new} = $colour_nick{$nick_old};
$colour_nick{$nick_old} = undef;
$line =~ s/(\*\*\* .*)/<font color=\"$colour_nickchange\">$1<\/font>/
- }
-
- # Colourise joined/left/server messages #
- elsif ($line =~ /\*\*\* .*left|quit/) {
- $line =~ s/(\*\*\* .*)/<font color=\"$colour_left\">$1<\/font>/;
- }
- elsif ($line =~ /\*\*\* .*joined/) {
+ } elsif ($line =~ /\*\*\* (join|mode|topic)\/(.*?) .*/) {
+ $channel = lc $2;
$line =~ s/(\*\*\* .*)/<font color=\"$colour_joined\">$1<\/font>/;
- }
- elsif ($line =~ /\*\*\* /) {
+ } elsif ($line =~ /\*\*\* (part|kick|banned)\/(.*?) .*/) {
+ $channel = lc $2;
+ $line =~ s/(\*\*\* .*)/<font color=\"$colour_left\">$1<\/font>/;
+ } elsif ($line =~ /\*\*\* .* has signed off IRC .*/) {
+ # Colourise joined/left/server messages #
+ $line =~ s/(\*\*\* .*)/<font color=\"$colour_left\">$1<\/font>/;
+ } elsif ($line =~ /\*\*\* /) {
$line =~ s/(\*\*\* .*)$/<font color=\"$colour_server\">$1<\/font>/;
- }
-
- # Colourise the /me's #
- elsif ($line =~ /^\* .*$/) {
+ } elsif ($line =~ /^\* .*$/) {
+ # Colourise the /me's #
$line =~ s/^(\*.*)$/<font color=\"$colour_action\">$1<\/font>/;
}
- output_timeservermsg($date, $time, $line);
+ output_timeservermsg($date, $time, $channel, $line);
}
}
}
if (!scalar @ARGV) {
print "Usage: irclog2html.pl <date> < logfile\n";
- print "Example: bzcat log/blootbot.log-20021104.bz2 | irclog2html.pl 20021104\n";
+ print "Example: bzcat log/infobot.log-20021104.bz2 | irclog2html.pl 20021104\n";
exit 0;
}
my $date = shift;