# fullrain.pl - Irssi script for colorized fullwidth text
# Copyright (C) 2017 Kenneth B. Jensen
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3 as
# published by the Free Software Foundation.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
use strict;
use warnings;
use Encode qw(decode);
use Irssi qw(command_bind active_win);
our $VERSION = '1.0.0';
our %IRSSI = (
authors => 'kjensenxz',
contact => '[email protected]',
name => 'fullrain',
url => 'http://github.com/kjensenxz',
description => 'Prints colorized fullwidth text',
license => 'GNU GPLv3',
# code borrowed from scripts:
# 'fullwidth' by prussian
# http://github.com/GeneralUnRest/ || Apache 2.0 License
# 'rainbow' by Jakub Jankowski
# http://irssi.atn.pl/ || GNU GPLv2 (or later) License
);
# colors
# 0 white
# 4 light red
# 8 yellow
# 9 light green
# 11 light cyan
# 12 light blue
# 13 light magenta
my @COLORS = (0, 4, 8, 9, 11, 12, 13);
sub make_fullcolor {
my $str = decode('UTF-8', $_[0]);
my $newstr = q();
my $color = 0;
my $prev = $color;
foreach my $char (split //xms, $str) {
if ($char =~ /\s/xms) {
$newstr .= q( );
}
else {
my $nchar = ord $char;
while (($color = int rand scalar @COLORS) == $prev) {};
$prev = $color;
$newstr .= "\003" . $COLORS[$prev];
# check if char is printing nonwhite ascii
if ($nchar > ord ' ' && $nchar <= ord '~') {
$newstr .= chr $nchar + 65_248;
}
else {
$newstr .= $char . ' ';
}
}
}
return $newstr;
}
command_bind(rfsay => sub {
my $say = make_fullcolor($_[0]);
active_win->command("say $say"); #say what you want
# but don't play games with my affection
});
command_bind(rfme => sub {
my $say = make_fullcolor($_[0]);
active_win->command("/me $say");
});
command_bind(rftopic => sub {
my $say = make_fullcolor($_[0]);
active_win->command("/topic $say");
});
command_bind(rfaway => sub {
my $say = make_fullcolor($_[0]);
active_win->command("/away $say");
});
1;
# changelog:
# 2017/03/28 (1.0.0): initial release