mktables: Handle platforms with 3 digit exponents
authorKarl Williamson <khw@cpan.org>
Wed, 15 Aug 2018 21:18:06 +0000 (15:18 -0600)
committerKarl Williamson <khw@cpan.org>
Mon, 20 Aug 2018 15:50:29 +0000 (09:50 -0600)
C99 says there shouldn't be more than 2 digits in an exponent unless
needed.  But Windows uses three.  This messes some stuff up that is
expecting two.  Change to remove leading zeros so that only two digits
are used.  This allows mktables to properly operate on Windows.

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

index 9965fbe..d77a74b 100644 (file)
@@ -383417,7 +383417,7 @@ static const U8 WB_table[23][23] = {
  * 018e20fa2f469667cc7ccd8a3d4a4a8cce8ad9bdf5fce5b2f61137660ea1065f lib/unicore/extracted/DLineBreak.txt
  * 88c30a794011f5e6dc62154342e8bab1bd4ce2d0c0ab06fb69ba47134dc75b23 lib/unicore/extracted/DNumType.txt
  * dab1e84f48990e30635a4f489d33212b25d0e35d80839c08e33a8afe5736346c lib/unicore/extracted/DNumValues.txt
- * 63f4f8e66cba85b3b52bc4a37548c2efa300549222039a43756318114e8038c3 lib/unicore/mktables
+ * aa29d36570237ec49c1fbd59d9cfafefcce690a286d3273ff4da49da1dfc88f2 lib/unicore/mktables
  * 7bd6bcbe3813e0cd55e0998053d182b7bc8c97dcfd0b85028e9f7f55af4ad61b lib/unicore/version
  * 4bb677187a1a64e39d48f2e341b5ecb6c99857e49d7a79cf503bd8a3c709999b regen/charset_translations.pl
  * 03e51b0f07beebd5da62ab943899aa4934eee1f792fa27c1fb638c33bf4ac6ea regen/mk_PL_charclass.pl
index 38f5c9f..da5a919 100644 (file)
@@ -12968,6 +12968,11 @@ sub register_fraction($) {
 
     my $float = eval $rational;
     $float = sprintf "%.*e", $E_FLOAT_PRECISION, $float;
+
+    # Strip off any leading zeros beyond 2 digits to make it C99 compliant.
+    # (Windows has 3 digit exponents, contrary to C99)
+    $float =~ s/ ( .* e [-+] ) 0* ( \d{2,}? ) /$1$2/x;
+
     if (   defined $nv_floating_to_rational{$float}
         && $nv_floating_to_rational{$float} ne $rational)
     {
index 5240fdc..f67e86d 100644 (file)
  * 018e20fa2f469667cc7ccd8a3d4a4a8cce8ad9bdf5fce5b2f61137660ea1065f lib/unicore/extracted/DLineBreak.txt
  * 88c30a794011f5e6dc62154342e8bab1bd4ce2d0c0ab06fb69ba47134dc75b23 lib/unicore/extracted/DNumType.txt
  * dab1e84f48990e30635a4f489d33212b25d0e35d80839c08e33a8afe5736346c lib/unicore/extracted/DNumValues.txt
- * 63f4f8e66cba85b3b52bc4a37548c2efa300549222039a43756318114e8038c3 lib/unicore/mktables
+ * aa29d36570237ec49c1fbd59d9cfafefcce690a286d3273ff4da49da1dfc88f2 lib/unicore/mktables
  * 7bd6bcbe3813e0cd55e0998053d182b7bc8c97dcfd0b85028e9f7f55af4ad61b lib/unicore/version
  * 4bb677187a1a64e39d48f2e341b5ecb6c99857e49d7a79cf503bd8a3c709999b regen/charset_translations.pl
  * f4fe24c2a005b636f6e7418df060c6c9a57ddcae4219b54d0cb18baf312dbc3a regen/regcharclass.pl
index 61aa62c..8c5125b 100644 (file)
@@ -6990,7 +6990,7 @@ MPH_VALt match_uniprop( const unsigned char * const key, const U16 key_len ) {
  * 018e20fa2f469667cc7ccd8a3d4a4a8cce8ad9bdf5fce5b2f61137660ea1065f lib/unicore/extracted/DLineBreak.txt
  * 88c30a794011f5e6dc62154342e8bab1bd4ce2d0c0ab06fb69ba47134dc75b23 lib/unicore/extracted/DNumType.txt
  * dab1e84f48990e30635a4f489d33212b25d0e35d80839c08e33a8afe5736346c lib/unicore/extracted/DNumValues.txt
- * 63f4f8e66cba85b3b52bc4a37548c2efa300549222039a43756318114e8038c3 lib/unicore/mktables
+ * aa29d36570237ec49c1fbd59d9cfafefcce690a286d3273ff4da49da1dfc88f2 lib/unicore/mktables
  * 7bd6bcbe3813e0cd55e0998053d182b7bc8c97dcfd0b85028e9f7f55af4ad61b lib/unicore/version
  * 4bb677187a1a64e39d48f2e341b5ecb6c99857e49d7a79cf503bd8a3c709999b regen/charset_translations.pl
  * 03e51b0f07beebd5da62ab943899aa4934eee1f792fa27c1fb638c33bf4ac6ea regen/mk_PL_charclass.pl