summaryrefslogtreecommitdiff
path: root/lib/utf8_heavy.pl
diff options
context:
space:
mode:
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