summaryrefslogtreecommitdiff
path: root/lib/utf8_heavy.pl
diff options
context:
space:
mode:
authorJeff Pinyan <japhy@pobox.com>2004-04-22 10:31:30 -0400
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2004-04-27 08:43:38 +0000
commit12ac2576dfc10fd43d91903e7602870c10b4f00f (patch)
tree892346cd2c9b2ff37d1269e1845007129a60e263 /lib/utf8_heavy.pl
parent88567e60ed3ba016aaedace3242715b8ab2023f7 (diff)
downloadperl-12ac2576dfc10fd43d91903e7602870c10b4f00f.tar.gz
candidate for TR18 compliance
Date: Thu, 22 Apr 2004 14:31:30 -0400 (EDT) Message-ID: <Pine.LNX.4.44.0404221429040.10466-101000@perlmonk.org> Date: Mon, 26 Apr 2004 12:37:21 -0400 (EDT) Message-ID: <Pine.LNX.4.44.0404261222320.7154-400000@perlmonk.org> p4raw-id: //depot/perl@22744
Diffstat (limited to 'lib/utf8_heavy.pl')
-rw-r--r--lib/utf8_heavy.pl82
1 files changed, 54 insertions, 28 deletions
diff --git a/lib/utf8_heavy.pl b/lib/utf8_heavy.pl
index 668a176e4e..96910354cc 100644
--- a/lib/utf8_heavy.pl
+++ b/lib/utf8_heavy.pl
@@ -1,6 +1,7 @@
package utf8;
use strict;
use warnings;
+require "utf8_pva.pl";
sub DEBUG () { 0 }
@@ -8,6 +9,8 @@ sub DESTROY {}
my %Cache;
+our (%PropertyAlias, %PA_reverse, %PropValueAlias, %PVA_reverse, %PVA_abbr_map);
+
sub croak { require Carp; Carp::croak(@_) }
##
@@ -45,28 +48,67 @@ sub SWASHNEW {
GETFILE:
{
- ##
- ## 'Is' is always optional, so if it's there, remove it.
- ## Same with 'Category=' and 'Script='.
- ##
- ## 'Block=' is replaced by 'In'.
- ##
+ ##
+ ## It could be a user-defined property.
+ ##
+
+ my $caller1 = $type =~ s/(.+)::// ? $1 : caller(1);
+
+ if (defined $caller1 && $type =~ /^(?:\w+)$/) {
+ my $prop = "${caller1}::$type";
+ if (exists &{$prop}) {
+ no strict 'refs';
+
+ $list = &{$prop};
+ last GETFILE;
+ }
+ }
+
my $wasIs;
($wasIs = $type =~ s/^Is(?:\s+|[-_])?//i)
or
- $type =~ s/^Category\s*=\s*//i
+ $type =~ s/^(?:(?:General(?:\s+|_)?)?Category|gc)\s*[:=]\s*//i
or
- $type =~ s/^Script\s*=\s*//i
+ $type =~ s/^(?:Script|sc)\s*[:=]\s*//i
or
- $type =~ s/^Block\s*=\s*/In/i;
+ $type =~ s/^Block\s*[:=]\s*/In/i;
+
+
+ ##
+ ## See if it's in some enumeration.
+ ##
+ if ($type =~ /^([\w\s]+)[:=]\s*(.*)/) {
+ require "utf8_pva.pl";
+ my ($enum, $val) = (lc $1, lc $2);
+ $enum =~ tr/ _-//d;
+ $val =~ tr/ _-//d;
+
+ my $pa = $PropertyAlias{$enum} ? $enum : $PA_reverse{$enum};
+ my $f = $PropValueAlias{$pa}{$val} ? $val : $PVA_reverse{$pa}{lc $val};
+
+ if ($pa and $f) {
+ $pa = "gc_sc" if $pa eq "gc" or $pa eq "sc";
+ $file = "unicore/lib/$pa/$PVA_abbr_map{$pa}{lc $f}.pl";
+ last GETFILE;
+ }
+ }
+ else {
+ my $t = lc $type;
+ $t =~ tr/ _-//d;
+
+ if ($PropValueAlias{gc}{$t} or $PropValueAlias{sc}{$t}) {
+ $file = "unicore/lib/gc_sc/$PVA_abbr_map{gc_sc}{$t}.pl";
+ last GETFILE;
+ }
+ }
##
## See if it's in the direct mapping table.
##
require "unicore/Exact.pl";
if (my $base = $utf8::Exact{$type}) {
- $file = "unicore/lib/$base.pl";
+ $file = "unicore/lib/gc_sc/$base.pl";
last GETFILE;
}
@@ -79,28 +121,12 @@ sub SWASHNEW {
print "canonical = $canonical\n" if DEBUG;
require "unicore/Canonical.pl";
- if (my $base = $utf8::Canonical{$canonical}) {
- $file = "unicore/lib/$base.pl";
+ if (my $base = ($utf8::Canonical{$canonical} || $utf8::Canonical{ lc $utf8::PropertyAlias{$canonical} })) {
+ $file = "unicore/lib/gc_sc/$base.pl";
last GETFILE;
}
##
- ## It could be a user-defined property.
- ##
-
- my $caller1 = $type =~ s/(.+)::// ? $1 : caller(1);
-
- if (defined $caller1 && $type =~ /^(?:\w+)$/) {
- my $prop = $caller1 . "::" . ( $wasIs ? "Is" : "" ) . $type;
- if (exists &{$prop}) {
- no strict 'refs';
-
- $list = &{$prop};
- last GETFILE;
- }
- }
-
- ##
## See if it's a user-level "To".
##