X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fcharnames.pm;h=f895d3796731e0e0397ee4fb71473c9f1269d29f;hb=c74ace89800a81a764294e9f6eacc04bbed5a568;hp=3457b8b66b26e29863de2d0e98fe0f51e6d0eae7;hpb=76ae0c45721dbaad41835ad785762950350f86b7;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/charnames.pm b/lib/charnames.pm index 3457b8b..f895d37 100644 --- a/lib/charnames.pm +++ b/lib/charnames.pm @@ -3,7 +3,7 @@ use strict; use warnings; use Carp; use File::Spec; -our $VERSION = '1.02'; +our $VERSION = '1.04'; use bytes (); # for $bytes::hint_bits $charnames::hint_bits = 0x20000; # HINT_LOCALIZE_HH @@ -190,8 +190,8 @@ sub import ## fill %h keys with our @_ args. ## my ($promote, %h, @args) = (0); - while (@_ and $_ = shift) { - if ($_ eq ":alias") { + while (my $arg = shift) { + if ($arg eq ":alias") { @_ or croak ":alias needs an argument in charnames"; my $alias = shift; @@ -210,11 +210,11 @@ sub import alias_file ($alias); next; } - if (m/^:/ and ! ($_ eq ":full" || $_ eq ":short")) { - warn "unsupported special '$_' in charnames"; + if (substr($arg, 0, 1) eq ':' and ! ($arg eq ":full" || $arg eq ":short")) { + warn "unsupported special '$arg' in charnames"; next; } - push @args, $_; + push @args, $arg; } @args == 0 && $promote and @args = (":full"); @h{@args} = (1) x @args; @@ -238,7 +238,19 @@ sub import } } # import -require Unicode::UCD; # for Unicode::UCD::_getcode() +# this comes actually from Unicode::UCD, but it avoids the +# overhead of loading it +sub _getcode { + my $arg = shift; + + if ($arg =~ /^[1-9]\d*$/) { + return $arg; + } elsif ($arg =~ /^(?:[Uu]\+|0[xX])?([[:xdigit:]]+)$/) { + return hex($1); + } + + return; +} my %viacode; @@ -250,7 +262,7 @@ sub viacode } my $arg = shift; - my $code = Unicode::UCD::_getcode($arg); + my $code = _getcode($arg); my $hex;