This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
mktables: Generalize the scx property handling
authorKarl Williamson <khw@cpan.org>
Mon, 3 Feb 2020 21:49:44 +0000 (14:49 -0700)
committerKarl Williamson <khw@cpan.org>
Mon, 3 Feb 2020 23:34:55 +0000 (16:34 -0700)
Until now, this property was unique in that it specifies a set of
possible values for scripts that a character can be in, rather than a
single script.  That multiplicity has been handled specially.  But the
next couple of commits will introduce another property that has similar
characteristics.  This commit makes the scx handling more general, so as
to also be usable for the new property.

charclass_invlists.h
lib/unicore/mktables
lib/unicore/uni_keywords.pl
regcharclass.h
uni_keywords.h

index 5bc350e..1c6e820 100644 (file)
@@ -403454,7 +403454,7 @@ static const U8 WB_table[24][24] = {
  * 0fea35394151afefbb4121b6380db1b480be6f9bafb4eba3382dc292dcf68526 lib/unicore/extracted/DLineBreak.txt
  * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
  * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
- * e3cbd908e180d39554e2c7351cebfd939a567c796c79e2e4a71ec2af874adfa3 lib/unicore/mktables
+ * eefd34f5f03191cb297d62f66273ca68efc972703f5323543427a9b285f28657 lib/unicore/mktables
  * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
  * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
  * 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl
index dc0d7db..f11e466 100644 (file)
@@ -13989,6 +13989,51 @@ END
                 );
             }
         } # End of loop through aliases for this property
+
+
+        # Properties that have sets of values for some characters are now
+        # converted.  For example, the Script_Extensions property started out
+        # as a clone of the Script property.  But processing its data file
+        # caused some elements to be replaced with different data.  (These
+        # elements were for the Common and Inherited properties.)  This data
+        # is a qw() list of all the scripts that the code points in the given
+        # range are in.  An example line is:
+        #
+        # 060C          ; Arab Syrc Thaa # Po       ARABIC COMMA
+        #
+        # Code executed earlier has created a new match table named "Arab Syrc
+        # Thaa" which contains 060C.  (The cloned table started out with this
+        # code point mapping to "Common".)  Now we add 060C to each of the
+        # Arab, Syrc, and Thaa match tables.  Then we delete the now spurious
+        # "Arab Syrc Thaa" match table.  This is repeated for all these tables
+        # and ranges.  The map data is retained in the map table for
+        # reference, but the spurious match tables are deleted.
+        my $format = $property->format;
+        if (defined $format && $format eq $STRING_WHITE_SPACE_LIST) {
+            foreach my $table ($property->tables) {
+
+                # Space separates the entries which should go in multiple
+                # tables
+                next unless $table->name =~ /\s/;
+
+                # The list of the entries, hence the names of the tables that
+                # everything in this combo table should be added to.
+                my @list = split /\s+/, $table->name;
+
+                # Add the entries from the combo table to each individual
+                # table
+                foreach my $individual (@list) {
+                    my $existing_table = $property->table($individual);
+
+                    # This should only be necessary if this particular entry
+                    # occurs only in combo with others.
+                    $existing_table = $property->add_match_table($individual)
+                                                unless defined $existing_table;
+                    $existing_table += $table;
+                }
+                $property->delete_match_table($table);
+            }
+        }
     } # End of loop through all Unicode properties.
 
     # Fill in the mappings that Unicode doesn't completely furnish.  First the
@@ -14077,40 +14122,11 @@ END
                     Initialize => property_ref('cf'),
     );
 
-    # The Script_Extensions property started out as a clone of the Script
-    # property.  But processing its data file caused some elements to be
-    # replaced with different data.  (These elements were for the Common and
-    # Inherited properties.)  This data is a qw() list of all the scripts that
-    # the code points in the given range are in.  An example line is:
-    # 060C          ; Arab Syrc Thaa # Po       ARABIC COMMA
-    #
-    # The code above has created a new match table named "Arab Syrc Thaa"
-    # which contains 060C.  (The cloned table started out with this code point
-    # mapping to "Common".)  Now we add 060C to each of the Arab, Syrc, and
-    # Thaa match tables.  Then we delete the now spurious "Arab Syrc Thaa"
-    # match table.  This is repeated for all these tables and ranges.  The map
-    # data is retained in the map table for reference, but the spurious match
-    # tables are deleted.
-
+    # Mark the scx table as the parent of the corresponding sc table for those
+    # which are identical.  This causes the pod for the script table to refer
+    # to the corresponding scx one.  This is done after everything, so as to
+    # wait until the tables are stabilized before checking for equivalency.
     if (defined $scx) {
-        foreach my $table ($scx->tables) {
-            next unless $table->name =~ /\s/;   # All the new and only the new
-                                                # tables have a space in their
-                                                # names
-            my @scripts = split /\s+/, $table->name;
-            foreach my $script (@scripts) {
-                my $script_table = $scx->table($script);
-                $script_table += $table;
-            }
-            $scx->delete_match_table($table);
-        }
-
-        # Mark the scx table as the parent of the corresponding sc table for
-        # those which are identical.  This causes the pod for the script table
-        # to refer to the corresponding scx one.
-        #
-        # This has to be in a separate loop from above, so as to wait until
-        # the tables are stabilized before checking for equivalency.
         if (defined $pod_directory) {
             foreach my $table ($scx->tables) {
                 my $plain_sc_equiv = $script->table($table->name);
index 63c3dd9..894ede5 100644 (file)
 # 0fea35394151afefbb4121b6380db1b480be6f9bafb4eba3382dc292dcf68526 lib/unicore/extracted/DLineBreak.txt
 # 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
 # 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
-# e3cbd908e180d39554e2c7351cebfd939a567c796c79e2e4a71ec2af874adfa3 lib/unicore/mktables
+# eefd34f5f03191cb297d62f66273ca68efc972703f5323543427a9b285f28657 lib/unicore/mktables
 # 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
 # 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
 # 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl
index 0e8cdc2..0022d61 100644 (file)
  * 0fea35394151afefbb4121b6380db1b480be6f9bafb4eba3382dc292dcf68526 lib/unicore/extracted/DLineBreak.txt
  * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
  * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
- * e3cbd908e180d39554e2c7351cebfd939a567c796c79e2e4a71ec2af874adfa3 lib/unicore/mktables
+ * eefd34f5f03191cb297d62f66273ca68efc972703f5323543427a9b285f28657 lib/unicore/mktables
  * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
  * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
  * f9a393e7add8c7c2728356473ce5b52246d51295b2da0c48fb6f0aa21799e2bb regen/regcharclass.pl
index 0d81df0..7003c2e 100644 (file)
@@ -7520,7 +7520,7 @@ MPH_VALt match_uniprop( const unsigned char * const key, const U16 key_len ) {
  * 0fea35394151afefbb4121b6380db1b480be6f9bafb4eba3382dc292dcf68526 lib/unicore/extracted/DLineBreak.txt
  * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
  * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
- * e3cbd908e180d39554e2c7351cebfd939a567c796c79e2e4a71ec2af874adfa3 lib/unicore/mktables
+ * eefd34f5f03191cb297d62f66273ca68efc972703f5323543427a9b285f28657 lib/unicore/mktables
  * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
  * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
  * 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl