Add NameAliases.txt; regenerate mktables.list
[perl.git] / lib / unicore / mktables
index 242465d..41c206c 100644 (file)
@@ -152,7 +152,7 @@ foreach my $lib ('To', 'lib',
   mkdir $lib, 0755 or die "mkdir '$lib': $!";
 }
 
-my $LastUnicodeCodepoint = 0x10FFFF; # As of Unicode 3.1.1.
+my $LastUnicodeCodepoint = 0x10FFFF; # As of Unicode 5.1.
 
 my $HEADER=<<"EOF";
 # !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
@@ -749,7 +749,7 @@ my $General  = Table->New(); ## all characters, grouped by category
 my %General;
 my %Cat;
 
-## Simple Data::Dumper alike. Good enough for our needs. We can't use the real
+## Simple Data::Dumper like. Good enough for our needs. We can't use the real
 ## thing as we have to run under miniperl
 sub simple_dumper {
     my @lines;
@@ -958,7 +958,7 @@ sub UnicodeData_Txt()
         }
     }
 
-    ## open ane read file.....
+    ## open and read file.....
     if (not open IN, "UnicodeData.txt") {
         die "$0: UnicodeData.txt: $!\n";
     }
@@ -1075,6 +1075,39 @@ sub UnicodeData_Txt()
     }
     close IN;
 
+    ## Read in the NameAliases.txt.  It contains other normative names of code
+    ## points not listed in UnicodeData.txt.  This happens when there is an
+    ## error in the name found after the data base was published, but instead of
+    ## changing it, to avoid breaking any code that came to rely on the
+    ## erroneous version, the correct name is added as an alias.
+    
+    my $NameAliases = Table->New();
+
+    if (not open IN, "NameAliases.txt") {
+        die "$0: NameAliases.txt: $!\n";
+    }
+
+    while (<IN>)
+    {
+        next unless /^[0-9A-Fa-f]+;/;
+        s/\s+$//;
+
+        my ($hexcode,   ## code point in hex (e.g. "0041")
+            $name,      ## character name (e.g. "LATIN CAPITAL LETTER A")
+              ) = split(/\s*;\s*/);
+
+        my $code = hex($hexcode);
+
+       ## One is supposed to enter elements into tables in strictly increasing
+       ## order, but this in fact works to append duplicate code points at
+       ## the end of the table.  The table is intended to be indexed by name
+       ## anyway.
+
+        $Name->RawAppendRange($code, $code, $name);
+    }
+    close IN;
+
+
     ##
     ## Tidy up a few special cases....
     ##
@@ -2089,7 +2122,9 @@ sub SpecialCasing_txt()
 #
 # Read in the case foldings.
 #
-# We will do full case folding, C + F + I (see CaseFolding.txt).
+# We will do full case folding, C + F + I (see CaseFolding.txt).  Note that
+# there are no I entries starting with Unicode 3.2, but leaving it in allows
+# for backward compatibility.
 #
 sub CaseFolding_txt()
 {
@@ -2188,7 +2223,7 @@ if ( $FileList and $MakeList ) {
 EOFHEADER
     my @input=("version",glob('*.txt'));
     print $ofh "$_\n" for 
-        @input,
+        sort(@input),
         "\n=================================\n",
         "# Output files:\n",
         # special files
@@ -2196,26 +2231,26 @@ EOFHEADER
         
     
     require File::Find;
-    my $count=0;
+    my @output_files;
     File::Find::find({
         no_chdir=>1,
         wanted=>sub {
           if (/\.pl$/) {
             s!^\./!!;
-            print $ofh "$_\n";
-            $count++;
+            push @output_files, "$_\n";
           }
         },
     },"."); 
     
+    print $ofh sort @output_files;
     print $ofh "\n# ",scalar(@input)," input files\n",
-               "# ",scalar($count+1)," output files\n\n",
+               "# ",scalar(@output_files)+1," output files\n\n",
                "# End list\n";  
     close $ofh 
         or warn "Failed to close $ofh: $!";
     
     print "Filelist has ",scalar(@input)," input files and ",
-          scalar($count+1)," output files\n"
+          scalar(@output_files)+1," output files\n"
         if $Verbose;
 }
 print "All done\n" if $Verbose;