1use IPC::Open3;
2use strict;
3use vars qw($VERSION %IRSSI);
4
5use Irssi qw(command_bind active_win);
6$VERSION = "1.14";
7%IRSSI = (
8    authors	=> 'Juerd',
9    contact	=> 'juerd@juerd.nl',
10    name	=> 'Figlet',
11    description	=> 'Safe figlet implementation (with color support!)',
12    license	=> 'Public Domain',
13    url		=> 'http://juerd.nl/irssi/',
14    changed	=> 'Sun 10 Mar 14:46 CET 2002',
15    changes	=> 'No more zombie processes',
16);
17
18command_bind(
19    figlet => sub {
20	my ($msg) = @_;
21	my @figlet;
22	my $prefix = '';
23	while ($msg =~ s/
24	    ^(
25		[^\cC\cB\cO\c_]+
26	    |
27		(?:
28		    \cC\d*(?:,\d*)?
29		|
30		    [\cB\cO\c_]
31		)+
32	    )
33	//x) {
34	    my $part = $1;
35	    if ($part =~ /[\cC\cB\cO\c_]/) {
36		if (@figlet) {
37		    $_ .= $part for @figlet;
38		} else {
39		    $prefix = $part;
40		}
41	    } else {
42		my $i = 0;
43		my $pid = open3(undef, *FIG, *FIG,  qw(figlet -k), $part);
44		while (<FIG>) {
45		    chomp;
46		    $figlet[$i++] .= $_;
47		}
48		close FIG;
49		waitpid $pid, 0;
50	    }
51	}
52	for (@figlet) {
53	    (my $copy = $_) =~ s/\cC\d*(?:,\d*)?|[\cB\cO\c_]//g;
54	    next unless $copy =~ /\S/;
55	    active_win->command("say $prefix$_");
56	}
57    }
58);
59