#!/usr/bin/env perl # Given an IRC quote on stdin in a variety of log/display formats, reformat it # into the style I use on quotes.fivegeeks.net and print it to stdout. # I use this as a :! filter in VIM on incoming quotes. # Adam Sampson use strict; my $width = 72; my @lines = (); sub finish () { foreach my $line (@lines) { my $max_length = 72; while (length($line) > $max_length) { my $pos = rindex($line, " ", $max_length); die "Cannot wrap: $line\n" if $pos == -1; print substr($line, 0, $pos) . "\n "; $line = substr($line, $pos + 1); $max_length = 72 - 4; } print "$line\n"; } @lines = (); } while (<>) { s/^([0-9:]+) +([^<][^ ]+)>/$1 <$2>/; s/^([0-9:]+) +\+/$1 */; s/^\+//; s/^\s*//; s/\s*$//; s/^\[?[0-9:]+\]?\s*//; s/\s+/ /g; if (/[^ ]* is now known as [^ ]*/) { s/-!-//; s/^/*** /; } if ($_ eq "") { next; } elsif (/^<([^>]+)>\s*(.*)$/) { my ($nick, $rest) = ($1, $2); $nick =~ s/^[\s@\+]//; push @lines, "<$nick> $rest"; } elsif (/^[\*\!-]{3}\s* (.*)$/) { push @lines, "*** $1"; } elsif (/^\*\s*(.*)$/) { push @lines, "* $1"; } else { my $l = pop @lines; push @lines, "$l $_"; } } finish();