summaryrefslogtreecommitdiffstats
path: root/contrib/perl5/lib/charnames.pm
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/perl5/lib/charnames.pm')
-rw-r--r--contrib/perl5/lib/charnames.pm15
1 files changed, 13 insertions, 2 deletions
diff --git a/contrib/perl5/lib/charnames.pm b/contrib/perl5/lib/charnames.pm
index 7c2209b..5f0c95f 100644
--- a/contrib/perl5/lib/charnames.pm
+++ b/contrib/perl5/lib/charnames.pm
@@ -1,5 +1,6 @@
package charnames;
use bytes (); # for $bytes::hint_bits
+use warnings();
$charnames::hint_bits = 0x20000;
my $txt;
@@ -29,8 +30,11 @@ sub charnames {
}
}
die "Unknown charname '$name'" unless @off;
-
- my $ord = hex substr $txt, $off[0] - 4, 4;
+
+ my $hexlen = 4; # Unicode guarantees 4-, 5-, or 6-digit format
+ $hexlen++ while
+ $hexlen < 6 && substr($txt, $off[0] - $hexlen - 1, 1) =~ /[0-9a-f]/;
+ my $ord = hex substr $txt, $off[0] - $hexlen, $hexlen;
if ($^H & $bytes::hint_bits) { # "use bytes" in effect?
use bytes;
return chr $ord if $ord <= 255;
@@ -51,6 +55,13 @@ sub import {
$^H{charnames_full} = delete $h{':full'};
$^H{charnames_short} = delete $h{':short'};
$^H{charnames_scripts} = [map uc, keys %h];
+ if (warnings::enabled('utf8') && @{$^H{charnames_scripts}}) {
+ $txt = do "unicode/Name.pl" unless $txt;
+ for (@{$^H{charnames_scripts}}) {
+ warnings::warn('utf8', "No such script: '$_'") unless
+ $txt =~ m/\t\t$_ (?:CAPITAL |SMALL )?LETTER /;
+ }
+ }
}
OpenPOWER on IntegriCloud