This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regen/mk_invlists.pl: Generate a new value
authorKarl Williamson <khw@cpan.org>
Sun, 25 Nov 2018 19:12:19 +0000 (12:12 -0700)
committerKarl Williamson <khw@cpan.org>
Tue, 27 Nov 2018 04:26:45 +0000 (21:26 -0700)
The new value is the maximum number of code points that fold to any
single code point.  It will be used in a future commit.

charclass_invlists.h
regen/mk_invlists.pl
uni_keywords.h

index 0204a25..b555811 100644 (file)
@@ -383370,6 +383370,13 @@ static const U8 WB_table[23][23] = {
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
+/* More than one code point may have the same code point as their fold.  This
+ * gives the maximum number in the current Unicode release.  (The folded-to
+ * code point is not included in this count.)  For example, both 'S' and
+ * \x{17F} fold to 's', so the number for that fold is 2.  Another way to
+ * look at it is the maximum length of all the IVCF_AUX_TABLE's */
+#define MAX_FOLD_FROMS 3
+
 /* Generated from:
  * d34c77b7e7a94986cc82056919f4ffc1503b73091561e16bd8ef145ac0fd04c5 lib/Unicode/UCD.pm
  * 0bc5023a4606962114c4eb3775fae072cad8fecef5894d0de06603b1c70cbb47 lib/unicore/ArabicShaping.txt
@@ -383421,5 +383428,5 @@ static const U8 WB_table[23][23] = {
  * 7bd6bcbe3813e0cd55e0998053d182b7bc8c97dcfd0b85028e9f7f55af4ad61b lib/unicore/version
  * 4bb677187a1a64e39d48f2e341b5ecb6c99857e49d7a79cf503bd8a3c709999b regen/charset_translations.pl
  * 03e51b0f07beebd5da62ab943899aa4934eee1f792fa27c1fb638c33bf4ac6ea regen/mk_PL_charclass.pl
- * 75b68d1ed0aa09110eacc421055c41bb1cc2d7cfbf23455f0a7bc9e2eb662b13 regen/mk_invlists.pl
+ * 743fbd71a854b7898795d351668ad5059d4f07dcfa870904618c97e6b4809e93 regen/mk_invlists.pl
  * ex: set ro: */
index abbe1a0..5219051 100644 (file)
@@ -34,6 +34,12 @@ my $VERSION_DATA_STRUCTURE_TYPE = 148565664;
 # integer or float
 my $numeric_re = qr/ ^ -? \d+ (:? \. \d+ )? $ /x;
 
+# More than one code point may have the same code point as their fold.  This
+# gives the maximum number in the current Unicode release.  (The folded-to
+# code point is not included in this count.)  Most folds are pairs of code
+# points, like 'B' and 'b', so this number is at least one.
+my $max_fold_froms = 1;
+
 my %keywords;
 my $table_name_prefix = "UNI_";
 
@@ -1028,8 +1034,15 @@ sub _Perl_IVCF {
 
 
     # Now we have a hash that is the inversion of the case fold property.
-    # Convert it to an inversion map.
+    # First find the maximum number of code points that fold to the same one.
+    foreach my $fold_to (keys %new) {
+        if (ref $new{$fold_to}) {
+            my $folders_count = scalar @{$new{$fold_to}};
+            $max_fold_froms = $folders_count if $folders_count > $max_fold_froms;
+        }
+    }
 
+    # Then convert the hash to an inversion map.
     my @sorted_folds = sort { $a <=> $b } keys %new;
     my (@invlist, @invmap);
 
@@ -2966,6 +2979,16 @@ output_WB_table();
 
 end_file_pound_if;
 
+print $out_fh <<"EOF";
+
+/* More than one code point may have the same code point as their fold.  This
+ * gives the maximum number in the current Unicode release.  (The folded-to
+ * code point is not included in this count.)  For example, both 'S' and
+ * \\x{17F} fold to 's', so the number for that fold is 2.  Another way to
+ * look at it is the maximum length of all the IVCF_AUX_TABLE's */
+#define MAX_FOLD_FROMS $max_fold_froms
+EOF
+
 my $sources_list = "lib/unicore/mktables.lst";
 my @sources = qw(regen/mk_invlists.pl
                  lib/unicore/mktables
index 48e9dc6..aa7b8f6 100644 (file)
@@ -6994,6 +6994,6 @@ MPH_VALt match_uniprop( const unsigned char * const key, const U16 key_len ) {
  * 7bd6bcbe3813e0cd55e0998053d182b7bc8c97dcfd0b85028e9f7f55af4ad61b lib/unicore/version
  * 4bb677187a1a64e39d48f2e341b5ecb6c99857e49d7a79cf503bd8a3c709999b regen/charset_translations.pl
  * 03e51b0f07beebd5da62ab943899aa4934eee1f792fa27c1fb638c33bf4ac6ea regen/mk_PL_charclass.pl
- * 75b68d1ed0aa09110eacc421055c41bb1cc2d7cfbf23455f0a7bc9e2eb662b13 regen/mk_invlists.pl
+ * 743fbd71a854b7898795d351668ad5059d4f07dcfa870904618c97e6b4809e93 regen/mk_invlists.pl
  * c42c035b18a0426443184e9f889aa2b16bef5a9add9805cd853c4e2a783712ff regen/mph.pl
  * ex: set ro: */