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 => "Sat 5 Jan 15:42:20 GMT 2019",
17 url => 'http://www.earth.li/gitweb/?p=unicode-expand.git;a=summary',
18 # Also https://github.com/u1f35c/unicode-expand
21 sub expand_message_public {
22 my ($server, $data, $nick, $mask, $target) = @_;
23 Irssi::signal_continue($server, expand($server, $target, $data),
24 $nick, $mask, $target);
27 sub expand_message_private {
28 my ($server, $data, $nick, $mask) = @_;
29 Irssi::signal_continue($server, expand($server, $nick, $data),
34 my ($server, $channel, $nick, $mask, $reason) = @_;
35 Irssi::signal_continue($server, $channel, $nick, $mask,
36 expand($server, $channel, $reason));
40 my ($server, $nick, $mask, $reason) = @_;
41 Irssi::signal_continue($server, $nick, $mask,
42 expand($server, $nick, $reason));
46 my ($server, $channel, $nick, $kicker, $mask, $reason) = @_;
47 Irssi::signal_continue($server, $channel, $nick, $kicker, $mask,
48 expand($server, $channel, $reason));
52 my ($server, $channel, $topic, $nick, $mask) = @_;
53 Irssi::signal_continue($server, $channel,
54 expand($server, $channel, $topic), $nick, $mask);
62 for my $c (split //,$string) {
63 my $name = charnames::viacode(ord $c);
64 $name = sprintf("{%X}", ord $c) unless defined($name);
65 if (length($expansion) == 0) {
68 $expansion .= "; " . $name;
76 my ($server, $target, $data) = @_;
78 $data = decode_utf8($data);
79 $data =~ s{([^\p{Letter}\p{Punctuation}\p{Control}\p{Space}\p{Sc}[:ascii:]]+)}{
80 "${1} [".expand_char($1)."]"
86 Irssi::signal_add('message public', \&expand_message_public);
87 Irssi::signal_add('message private', \&expand_message_private);
88 Irssi::signal_add('message part', \&expand_part);
89 Irssi::signal_add('message quit', \&expand_quit);
90 Irssi::signal_add('message kick', \&expand_kick);
91 Irssi::signal_add('message topic', \&expand_topic);
92 Irssi::signal_add('message irc action', \&expand_message_public);
93 Irssi::signal_add('message irc notice', \&expand_message_public);