]> the.earth.li Git - unicode-expand.git/blob - unicode-expand.pl
Fold in later updates
[unicode-expand.git] / unicode-expand.pl
1 use strict;
2 use warnings;
3
4 use utf8;
5 use Encode qw(decode_utf8);
6 use charnames ();
7
8 use Irssi;
9 our $VERSION = '1.50';
10 our %IRSSI = (
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',
18 );
19
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);
24 }
25
26 sub expand_message_private {
27     my ($server, $data, $nick, $mask) = @_;
28     Irssi::signal_continue($server, expand($server, $nick, $data),
29                            $nick, $mask);
30 }
31
32 sub expand_part {
33     my ($server, $channel, $nick, $mask, $reason) = @_;
34     Irssi::signal_continue($server, $channel, $nick, $mask,
35                            expand($server, $channel, $reason));
36 }
37
38 sub expand_quit {
39     my ($server, $nick, $mask, $reason) = @_;
40     Irssi::signal_continue($server, $nick, $mask,
41                            expand($server, $nick, $reason));
42 }
43
44 sub expand_kick {
45     my ($server, $channel, $nick, $kicker, $mask, $reason) = @_;
46     Irssi::signal_continue($server, $channel, $nick, $kicker, $mask,
47                            expand($server, $channel, $reason));
48 }
49
50 sub expand_topic {
51     my ($server, $channel, $topic, $nick, $mask) = @_;
52     Irssi::signal_continue($server, $channel,
53                            expand($server, $channel, $topic), $nick, $mask);
54 }
55
56 sub expand {
57     my ($server, $target, $data) = @_;
58
59     $data = decode_utf8($data);
60     $data =~ s{([^\p{Letter}\p{Punctuation}\p{Control}\p{Space}\p{Sc}[:ascii:]])}{
61         "${1} [".charnames::viacode(ord $1)."]"
62     }ge;
63
64     return $data;
65 }
66
67 Irssi::signal_add('message public', \&expand_message_public);
68 Irssi::signal_add('message private', \&expand_message_private);
69 Irssi::signal_add('message part', \&expand_part);
70 Irssi::signal_add('message quit', \&expand_quit);
71 Irssi::signal_add('message kick', \&expand_kick);
72 Irssi::signal_add('message topic', \&expand_topic);
73 Irssi::signal_add('message irc action', \&expand_message_public);
74 Irssi::signal_add('message irc notice', \&expand_message_public);