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 );