This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Unicode::UCD: Handle inverted input
authorKarl Williamson <khw@cpan.org>
Sun, 5 Jul 2015 04:28:05 +0000 (22:28 -0600)
committerKarl Williamson <khw@cpan.org>
Wed, 29 Jul 2015 04:15:56 +0000 (22:15 -0600)
No current input comes inverted, but it could some time in the future,
and we wouldn't know.  In one case, it's easy to handle, so do so; in
another, die with a message so won't sneak past.  At that point, if and
when it happens, time could be spent figuring out the best way to handle
the situation.

charclass_invlists.h
lib/Unicode/UCD.pm
regcharclass.h

index 429769a..40dcb44 100644 (file)
@@ -99479,7 +99479,7 @@ static const UV XPosixXDigit_invlist[] = { /* for EBCDIC POSIX-BC */
 #endif /* EBCDIC POSIX-BC */
 
 /* Generated from:
- * db4c94a72ba2f2d4da405a135309e0c7484615d85b3f735ade07706bc81815bd lib/Unicode/UCD.pm
+ * 7a6852c2a2587d25bf414b68a398e0508bb4a988bbbc761453b2c5eb9f7c7245 lib/Unicode/UCD.pm
  * ae98bec7e4f0564758eed81eca5015481ba32581f8a735a825b71b3bba714450 lib/unicore/ArabicShaping.txt
  * 1687fe5994eb7e5c0dab8503fc2a1b3b479d91af9d3b8055941c9bd791f7d0b5 lib/unicore/BidiBrackets.txt
  * 350d1302116194b0b21def287434b55c5088098fbc726e879f7420a391965643 lib/unicore/BidiMirroring.txt
index 840f4fe..aef2e30 100644 (file)
@@ -3548,7 +3548,19 @@ RETRY:
 
     if ($swash->{'LIST'} =~ /^V/) {
         @invlist = split "\n", $swash->{'LIST'} =~ s/ \s* (?: \# .* )? $ //xmgr;
-        shift @invlist;
+
+        shift @invlist;     # Get rid of 'V';
+
+        # Could need to be inverted: add or subtract a 0 at the beginning of
+        # the list.
+        if ($swash->{'INVERT_IT'}) {
+            if (@invlist && $invlist[0] == 0) {
+                shift @invlist;
+            }
+            else {
+                unshift @invlist, 0;
+            }
+        }
         foreach my $i (0 .. @invlist - 1) {
             $invmap[$i] = ($i % 2 == 0) ? 'Y' : 'N'
         }
@@ -3561,6 +3573,10 @@ RETRY:
         }
     }
     else {
+        if ($swash->{'INVERT_IT'}) {
+            croak __PACKAGE__, ":prop_invmap: Don't know how to deal with inverted";
+        }
+
         # The LIST input lines look like:
         # ...
         # 0374\t\tCommon
index fcc520f..45aafb7 100644 (file)
 #endif /* H_REGCHARCLASS */
 
 /* Generated from:
- * db4c94a72ba2f2d4da405a135309e0c7484615d85b3f735ade07706bc81815bd lib/Unicode/UCD.pm
+ * 7a6852c2a2587d25bf414b68a398e0508bb4a988bbbc761453b2c5eb9f7c7245 lib/Unicode/UCD.pm
  * ae98bec7e4f0564758eed81eca5015481ba32581f8a735a825b71b3bba714450 lib/unicore/ArabicShaping.txt
  * 1687fe5994eb7e5c0dab8503fc2a1b3b479d91af9d3b8055941c9bd791f7d0b5 lib/unicore/BidiBrackets.txt
  * 350d1302116194b0b21def287434b55c5088098fbc726e879f7420a391965643 lib/unicore/BidiMirroring.txt