html/figlet.pl
1 use IPC::Open3;
2 use strict;
3 use vars qw($VERSION %IRSSI);
4
5 use 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
18 command_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 );