User:Dr Scofield/logtransform
Jump to navigation
Jump to search
SLlog2wiki
below is a small script that transforms SL chat logs into wiki tables for posting onto this wiki. you need to invoke it with the full name of the note taker; for example, assuming i was the note taker:
sllog2wiki --taker="Dr Scofield" < raw-log > wiki-log
you can also create a config file for this little script and place your fullname in there, like this:
# $HOME/.sllog2wikirc file taker = Dr Scofield
and here's the script, copy & paste into a perl script file:
#!/usr/bin/perl # Placed into the public domain by IBM Research. use strict; use English; use Getopt::Long; sub eject_header ( ); sub eject_line ( $$$$ ); sub eject_footer ( ); sub load_cfg ( ); my $you = undef; load_cfg; GetOptions("taker=s" => \$you); if (!$you) { printf STDERR "you need to specify who you are via --taker=\"First Last\"\n"; exit 1; } eject_header; while (<>) { if (m/( # $1: captures whole lead (\[\d{1,2}:\d{2}\]\s+)? # $2: captures optional timestamp [13:00] ((?:you|\S+\s+[^\s:]+)) # $3: captures Firstname Lastname ([\s:]) # $4: captures (:| ) ) \s* # gobble up white space (.*) # $5 captures actual text /x) { my $timestamp = $2 || " "; my $who = $3; my $sep = $4; my $text = $5; if ('you' eq $who) { $who = $you; } eject_line $timestamp, $who, $sep, $text; next; } print "??? ", $_; } eject_footer; exit 0; sub eject_header() { printf STDOUT "{|\n"; } my $last_who = undef; my $cidx = 0; sub eject_line($$$$) { my $timestamp = shift; my $who = shift; my $sep = shift; my $text = shift; my $bg = ""; if (defined $last_who and $last_who ne $who) { $cidx = ($cidx + 1) % 2; } $last_who = $who; if (0 == $cidx) { $bg="background-color:#FFFFFF;"; } else { $bg="background-color:#F0F0F0;"; } $text =~ s/%/%%/g; $who =~ s/\s+/ /g; printf STDOUT "|- style=\"vertical-align:top;$bg\"\n"; printf STDOUT "| $timestamp\n"; if ($sep =~ /:/) { printf STDOUT "| [[User:$who|$who]]:\n"; printf STDOUT "| style=\"white-space:normal;\"|" . $text . "\n"; } else { printf STDOUT "| colspan=\"2\"|''$who " . $text . "''\n"; } } sub eject_footer() { printf STDOUT "|}"; } sub load_cfg() { my $cfg = $ENV{'HOME'} . "/.sllog2wikirc"; return unless -e $cfg and -r $cfg; open CFG, "<$cfg" or die "cannot open config file $cfg ($!)"; my @cfg = <CFG>; close CFG; foreach my $l (@cfg) { next unless $l =~ m/^\s*([^=]+?)\s*=\s*(.+)\s*$/; if (! grep(/$1=/, @ARGV)) { push @ARGV, '--' . $1 . '=' . $2; } } }