summaryrefslogtreecommitdiff
path: root/lib/utf8_heavy.pl
diff options
context:
space:
mode:
authorKarl Williamson <public@khwilliamson.com>2011-11-05 22:09:41 -0600
committerKarl Williamson <public@khwilliamson.com>2011-11-08 08:09:35 -0700
commit6aec79bdd1ed18509878bfc02a57c6abcc132e44 (patch)
tree1e620518ad1e92a51abc53ebf164c8484a858d73 /lib/utf8_heavy.pl
parent4b17cb47ac871703eb920ca296a7e257f51aa330 (diff)
downloadperl-6aec79bdd1ed18509878bfc02a57c6abcc132e44.tar.gz
utf8_heavy: Return values for binary property requested as map
Future commits will make Unicode::UCD return maps of all properties. Instead of storing these maps on disk, they can be inferred from the files that are already there that give the code points that match the property. This commit causes a request for the mapping of such a property to instead return the data from the binary definition file. It is left for the caller to convert this data into a map. These files do not have SwashInfo defined; and the returned BITS field in the swash will be 1.
Diffstat (limited to 'lib/utf8_heavy.pl')
-rw-r--r--lib/utf8_heavy.pl47
1 files changed, 44 insertions, 3 deletions
diff --git a/lib/utf8_heavy.pl b/lib/utf8_heavy.pl
index 5313902642..6df7d35163 100644
--- a/lib/utf8_heavy.pl
+++ b/lib/utf8_heavy.pl
@@ -424,8 +424,8 @@ sub _loose_name ($) {
## is to use Unicode::UCD.
##
# Only check if caller wants non-binary
- if ($minbits != 1 && $property_and_table =~ s/^to//) {
-
+ my $retried = 0;
+ if ($minbits != 1 && $property_and_table =~ s/^to//) {{
# Look input up in list of properties for which we have
# mapping files.
if (defined ($file =
@@ -435,8 +435,49 @@ sub _loose_name ($) {
print STDERR __LINE__, ": type set to $type\n" if DEBUG;
$file = "$unicore_dir/$file.pl";
last GETFILE;
+ } # If that fails see if there is a corresponding binary
+ # property file
+ elsif (defined ($file =
+ $utf8::loose_to_file_of{$property_and_table}))
+ {
+
+ # Here, there is no map file for the property we are
+ # trying to get the map of, but this is a binary
+ # property, and there is a file for it that can easily
+ # be translated to a mapping.
+
+ # In the case of properties that are forced to binary,
+ # they are a combination. We return the actual
+ # mapping instead of the binary. If the input is
+ # something like 'Tocjkkiicore', it will be found in
+ # %loose_property_to_file_of above as => 'To/kIICore'.
+ # But the form like ToIskiicore won't be. To fix
+ # this, it was easiest to do it here. These
+ # properties are the complements of the default
+ # property, so there is an entry in %loose_to_file_of
+ # that is 'iskiicore' => '!kIICore/N', If we find such
+ # an entry, strip off things and try again, which
+ # should find the entry in %loose_property_to_file_of.
+ # Actual binary properties that are of this form, such
+ # as this entry: 'ishrkt' => '!Perl/Any' will also be
+ # retried, but won't be in %loose_property_to_file_of,
+ # and instead the next time through, it will find
+ # 'hrkt' => '!Perl/Any' and proceed.
+ redo if ! $retried
+ && $file =~ /^!/
+ && $property_and_table =~ s/^is//;
+
+ # This is a binary property. Setting this here causes
+ # it to be stored as such in the cache, so if someone
+ # comes along later looking for just a binary, they
+ # get it.
+ $minbits = 1;
+
+ $invert_it = $file =~ s/^!//;
+ $file = "$unicore_dir/lib/$file.pl";
+ last GETFILE;
}
- }
+ } }
##
## If we reach this line, it's because we couldn't figure