5 use Encode qw(decode_utf8);
11 authors => 'Jonathan McDowell',
12 contact => 'noodles@earth.li',
13 name => 'unicode-expand',
14 description => 'Expands Unicode characters to include their names',
15 license => 'Public Domain',
16 changed => "Fri Dec 8 13:39:00 UTC 2017",
17 url => 'https://the.earth.li/~noodles/unicode-expand.pl',
20 sub expand_message_public {
21 my ($server, $data, $nick, $mask, $target) = @_;
22 Irssi::signal_continue($server, expand($server, $target, $data),
23 $nick, $mask, $target);
26 sub expand_message_private {
27 my ($server, $data, $nick, $mask) = @_;
28 Irssi::signal_continue($server, expand($server, $nick, $data),
33 my ($server, $channel, $nick, $mask, $reason) = @_;
34 Irssi::signal_continue($server, $channel, $nick, $mask,
35 expand($server, $channel, $reason));
39 my ($server, $nick, $mask, $reason) = @_;
40 Irssi::signal_continue($server, $nick, $mask,
41 expand($server, $nick, $reason));
45 my ($server, $channel, $nick, $kicker, $mask, $reason) = @_;
46 Irssi::signal_continue($server, $channel, $nick, $kicker, $mask,
47 expand($server, $channel, $reason));
51 my ($server, $channel, $topic, $nick, $mask) = @_;
52 Irssi::signal_continue($server, $channel,
53 expand($server, $channel, $topic), $nick, $mask);
59 my $name = charnames::viacode(ord $1);
60 $name = sprintf("{%X}", ord $1) unless defined($name);
66 my ($server, $target, $data) = @_;
68 $data = decode_utf8($data);
69 $data =~ s{([^\p{Letter}\p{Punctuation}\p{Control}\p{Space}\p{Sc}[:ascii:]])}{
70 "${1} [".expand_char($1)."]"
76 Irssi::signal_add('message public', \&expand_message_public);
77 Irssi::signal_add('message private', \&expand_message_private);
78 Irssi::signal_add('message part', \&expand_part);
79 Irssi::signal_add('message quit', \&expand_quit);
80 Irssi::signal_add('message kick', \&expand_kick);
81 Irssi::signal_add('message topic', \&expand_topic);
82 Irssi::signal_add('message irc action', \&expand_message_public);
83 Irssi::signal_add('message irc notice', \&expand_message_public);