X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=unicode-expand.pl;h=a46f6b5813148fa902e29097986b28d60c3581d7;hb=HEAD;hp=d7ae931b8d8b6a3a145036355390ee52524a4a75;hpb=5b560e84a43c665e0d8566799ab5699c4e47da64;p=unicode-expand.git diff --git a/unicode-expand.pl b/unicode-expand.pl index d7ae931..a46f6b5 100644 --- a/unicode-expand.pl +++ b/unicode-expand.pl @@ -2,57 +2,82 @@ use strict; use warnings; use utf8; -use Encode qw(decode_utf8 encode_utf8); +use Encode qw(decode_utf8); use charnames (); use Irssi; -our $VERSION = '1.30'; +our $VERSION = '1.51'; our %IRSSI = ( authors => 'Jonathan McDowell', contact => 'noodles@earth.li', name => 'unicode-expand', description => 'Expands Unicode characters to include their names', license => 'Public Domain', - changed => "Fri Dec 8 13:39:00 UTC 2017", - url => 'https://the.earth.li/~noodles/unicode-expand.pl', + changed => "Sat 5 Jan 15:42:20 GMT 2019", + url => 'http://www.earth.li/gitweb/?p=unicode-expand.git;a=summary', + # Also https://github.com/u1f35c/unicode-expand ); sub expand_message_public { my ($server, $data, $nick, $mask, $target) = @_; - Irssi::signal_continue($server, expand($data), $nick, $mask, $target); + Irssi::signal_continue($server, expand($server, $target, $data), + $nick, $mask, $target); } sub expand_message_private { my ($server, $data, $nick, $mask) = @_; - Irssi::signal_continue($server, expand($data), $nick, $mask); + Irssi::signal_continue($server, expand($server, $nick, $data), + $nick, $mask); } sub expand_part { my ($server, $channel, $nick, $mask, $reason) = @_; - Irssi::signal_continue($server, $channel, $nick, $mask, expand($reason)); + Irssi::signal_continue($server, $channel, $nick, $mask, + expand($server, $channel, $reason)); } sub expand_quit { my ($server, $nick, $mask, $reason) = @_; - Irssi::signal_continue($server, $nick, $mask, expand($reason)); + Irssi::signal_continue($server, $nick, $mask, + expand($server, $nick, $reason)); } sub expand_kick { my ($server, $channel, $nick, $kicker, $mask, $reason) = @_; - Irssi::signal_continue($server, $channel, $nick, $kicker, $mask, expand($reason)); + Irssi::signal_continue($server, $channel, $nick, $kicker, $mask, + expand($server, $channel, $reason)); } sub expand_topic { my ($server, $channel, $topic, $nick, $mask) = @_; - Irssi::signal_continue($server, $channel, expand($topic), $nick, $mask); + Irssi::signal_continue($server, $channel, + expand($server, $channel, $topic), $nick, $mask); +} + +sub expand_char { + my ($string) = @_; + + my $expansion = ""; + + for my $c (split //,$string) { + my $name = charnames::viacode(ord $c); + $name = sprintf("{%X}", ord $c) unless defined($name); + if (length($expansion) == 0) { + $expansion .= $name; + } else { + $expansion .= "; " . $name; + } + } + + return $expansion; } sub expand { - my ($data) = @_; + my ($server, $target, $data) = @_; $data = decode_utf8($data); - $data =~ s{([^[:ascii:]\p{Letter}\p{Punctuation}\p{Control}\p{Space}\p{Currency_Symbol}])}{ - "${1}[".charnames::viacode(ord $1)."]" + $data =~ s{([^\p{Letter}\p{Punctuation}\p{Control}\p{Space}\p{Sc}[:ascii:]]+)}{ + "${1} [".expand_char($1)."]" }ge; return $data;