This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Unicode-Collate to CPAN version 1.23
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Mon, 13 Nov 2017 13:45:36 +0000 (13:45 +0000)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Mon, 13 Nov 2017 15:16:12 +0000 (15:16 +0000)
  [DELTA]

1.23  Mon Nov 13 19:10:28 2017
    - Now UCA_Version 36 (for Unicode 10.0.0) is supported.
      * But the default UCA_Version is still 34.
    - added nushu.t in t.

1.22  Sat Nov 11 10:53:35 2017
    - internal: someone suggests using 'exists' for checking the truth of
      $collator->{mapping}{$variable} and $collator->{maxlength}{$variable},
      where $variable may stand for codepoints whose mapping is not defined;
      though such a problem was not reproduced on my environment.

109 files changed:
MANIFEST
Porting/Maintainers.pl
cpan/Unicode-Collate/Collate.pm
cpan/Unicode-Collate/Collate.xs
cpan/Unicode-Collate/Collate/CJK/Big5.pm
cpan/Unicode-Collate/Collate/CJK/GB2312.pm
cpan/Unicode-Collate/Collate/CJK/JISX0208.pm
cpan/Unicode-Collate/Collate/CJK/Korean.pm
cpan/Unicode-Collate/Collate/CJK/Pinyin.pm
cpan/Unicode-Collate/Collate/CJK/Stroke.pm
cpan/Unicode-Collate/Collate/CJK/Zhuyin.pm
cpan/Unicode-Collate/Collate/Locale.pm
cpan/Unicode-Collate/Collate/Locale/af.pl
cpan/Unicode-Collate/Collate/Locale/ar.pl
cpan/Unicode-Collate/Collate/Locale/as.pl
cpan/Unicode-Collate/Collate/Locale/az.pl
cpan/Unicode-Collate/Collate/Locale/be.pl
cpan/Unicode-Collate/Collate/Locale/bn.pl
cpan/Unicode-Collate/Collate/Locale/ca.pl
cpan/Unicode-Collate/Collate/Locale/cs.pl
cpan/Unicode-Collate/Collate/Locale/cy.pl
cpan/Unicode-Collate/Collate/Locale/da.pl
cpan/Unicode-Collate/Collate/Locale/de_at_ph.pl
cpan/Unicode-Collate/Collate/Locale/de_phone.pl
cpan/Unicode-Collate/Collate/Locale/dsb.pl
cpan/Unicode-Collate/Collate/Locale/ee.pl
cpan/Unicode-Collate/Collate/Locale/eo.pl
cpan/Unicode-Collate/Collate/Locale/es.pl
cpan/Unicode-Collate/Collate/Locale/es_trad.pl
cpan/Unicode-Collate/Collate/Locale/et.pl
cpan/Unicode-Collate/Collate/Locale/fa.pl
cpan/Unicode-Collate/Collate/Locale/fi.pl
cpan/Unicode-Collate/Collate/Locale/fi_phone.pl
cpan/Unicode-Collate/Collate/Locale/fil.pl
cpan/Unicode-Collate/Collate/Locale/fo.pl
cpan/Unicode-Collate/Collate/Locale/fr_ca.pl
cpan/Unicode-Collate/Collate/Locale/gu.pl
cpan/Unicode-Collate/Collate/Locale/ha.pl
cpan/Unicode-Collate/Collate/Locale/haw.pl
cpan/Unicode-Collate/Collate/Locale/he.pl
cpan/Unicode-Collate/Collate/Locale/hi.pl
cpan/Unicode-Collate/Collate/Locale/hr.pl
cpan/Unicode-Collate/Collate/Locale/hu.pl
cpan/Unicode-Collate/Collate/Locale/hy.pl
cpan/Unicode-Collate/Collate/Locale/ig.pl
cpan/Unicode-Collate/Collate/Locale/is.pl
cpan/Unicode-Collate/Collate/Locale/ja.pl
cpan/Unicode-Collate/Collate/Locale/kk.pl
cpan/Unicode-Collate/Collate/Locale/kl.pl
cpan/Unicode-Collate/Collate/Locale/kn.pl
cpan/Unicode-Collate/Collate/Locale/ko.pl
cpan/Unicode-Collate/Collate/Locale/kok.pl
cpan/Unicode-Collate/Collate/Locale/lkt.pl
cpan/Unicode-Collate/Collate/Locale/ln.pl
cpan/Unicode-Collate/Collate/Locale/lt.pl
cpan/Unicode-Collate/Collate/Locale/lv.pl
cpan/Unicode-Collate/Collate/Locale/mk.pl
cpan/Unicode-Collate/Collate/Locale/ml.pl
cpan/Unicode-Collate/Collate/Locale/mr.pl
cpan/Unicode-Collate/Collate/Locale/mt.pl
cpan/Unicode-Collate/Collate/Locale/nb.pl
cpan/Unicode-Collate/Collate/Locale/nn.pl
cpan/Unicode-Collate/Collate/Locale/nso.pl
cpan/Unicode-Collate/Collate/Locale/om.pl
cpan/Unicode-Collate/Collate/Locale/or.pl
cpan/Unicode-Collate/Collate/Locale/pa.pl
cpan/Unicode-Collate/Collate/Locale/pl.pl
cpan/Unicode-Collate/Collate/Locale/ro.pl
cpan/Unicode-Collate/Collate/Locale/sa.pl
cpan/Unicode-Collate/Collate/Locale/se.pl
cpan/Unicode-Collate/Collate/Locale/si.pl
cpan/Unicode-Collate/Collate/Locale/si_dict.pl
cpan/Unicode-Collate/Collate/Locale/sk.pl
cpan/Unicode-Collate/Collate/Locale/sl.pl
cpan/Unicode-Collate/Collate/Locale/sq.pl
cpan/Unicode-Collate/Collate/Locale/sr.pl
cpan/Unicode-Collate/Collate/Locale/sv.pl
cpan/Unicode-Collate/Collate/Locale/sv_refo.pl
cpan/Unicode-Collate/Collate/Locale/ta.pl
cpan/Unicode-Collate/Collate/Locale/te.pl
cpan/Unicode-Collate/Collate/Locale/th.pl
cpan/Unicode-Collate/Collate/Locale/tn.pl
cpan/Unicode-Collate/Collate/Locale/to.pl
cpan/Unicode-Collate/Collate/Locale/tr.pl
cpan/Unicode-Collate/Collate/Locale/ug_cyrl.pl
cpan/Unicode-Collate/Collate/Locale/uk.pl
cpan/Unicode-Collate/Collate/Locale/ur.pl
cpan/Unicode-Collate/Collate/Locale/vi.pl
cpan/Unicode-Collate/Collate/Locale/vo.pl
cpan/Unicode-Collate/Collate/Locale/wae.pl
cpan/Unicode-Collate/Collate/Locale/wo.pl
cpan/Unicode-Collate/Collate/Locale/yo.pl
cpan/Unicode-Collate/Collate/Locale/zh.pl
cpan/Unicode-Collate/Collate/Locale/zh_big5.pl
cpan/Unicode-Collate/Collate/Locale/zh_gb.pl
cpan/Unicode-Collate/Collate/Locale/zh_pin.pl
cpan/Unicode-Collate/Collate/Locale/zh_strk.pl
cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl
cpan/Unicode-Collate/t/cjkrange.t
cpan/Unicode-Collate/t/compatui.t
cpan/Unicode-Collate/t/hangtype.t
cpan/Unicode-Collate/t/illegal.t
cpan/Unicode-Collate/t/loc_es.t
cpan/Unicode-Collate/t/loc_estr.t
cpan/Unicode-Collate/t/nushu.t [new file with mode: 0644]
cpan/Unicode-Collate/t/overcjk0.t
cpan/Unicode-Collate/t/overcjk1.t
cpan/Unicode-Collate/t/tangut.t
cpan/Unicode-Collate/t/view.t

index 6caab5a..d9bcfcd 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -2829,6 +2829,7 @@ cpan/Unicode-Collate/t/loc_zhzy.t
 cpan/Unicode-Collate/t/nonchar.t                       Unicode::Collate
 cpan/Unicode-Collate/t/normal.t                        Unicode::Collate
 cpan/Unicode-Collate/t/notable.t
+cpan/Unicode-Collate/t/nushu.t
 cpan/Unicode-Collate/t/overcjk0.t              Unicode::Collate
 cpan/Unicode-Collate/t/overcjk1.t              Unicode::Collate
 cpan/Unicode-Collate/t/override.t              Unicode::Collate
index 2f89e81..ac45380 100755 (executable)
@@ -1208,7 +1208,7 @@ use File::Glob qw(:case);
     },
 
     'Unicode::Collate' => {
-        'DISTRIBUTION' => 'SADAHIRO/Unicode-Collate-1.21.tar.gz',
+        'DISTRIBUTION' => 'SADAHIRO/Unicode-Collate-1.23.tar.gz',
         'FILES'        => q[cpan/Unicode-Collate],
         'EXCLUDED'     => [
             qr{N$},
index e61ffcc..e572e7c 100644 (file)
@@ -17,7 +17,7 @@ use File::Spec;
 
 no warnings 'utf8';
 
-our $VERSION = '1.21';
+our $VERSION = '1.23';
 our $PACKAGE = __PACKAGE__;
 
 ### begin XS only ###
@@ -191,6 +191,7 @@ my %DerivCode = (
    30 => \&_derivCE_24, # 30 == 24
    32 => \&_derivCE_32,
    34 => \&_derivCE_34,
+   36 => \&_derivCE_36,
 );
 
 sub checkCollator {
@@ -440,13 +441,17 @@ sub parseEntry
        # if and only if "all" CEs are [.0000.0000.0000].
     }
 
+    # mapping: be an array ref or not exists (any false value is disallowed)
     $self->{mapping}{$entry} = $is_L3_ignorable ? [] : \@key;
 
+    # maxlength: be more than 1 or not exists (any false value is disallowed)
     if (@uv > 1) {
        if (!$self->{maxlength}{$uv[0]} || $self->{maxlength}{$uv[0]} < @uv) {
            $self->{maxlength}{$uv[0]} = @uv;
        }
     }
+
+    # contraction: be 1 or not exists (any false value is disallowed)
     while (@uv > 2) {
        pop @uv;
        my $fake_entry = join(CODE_SEP, @uv); # in JCPS
@@ -515,7 +520,7 @@ sub splitEnt
        if ($vers <= 20 && _isIllegal($src[$i])) {
            $src[$i] = undef;
        } elsif ($ver9) {
-           $src[$i] = undef if $map->{ $src[$i] }
+           $src[$i] = undef if exists $map->{ $src[$i] }
                           ? @{ $map->{ $src[$i] } } == 0
                           : $uXS && _ignorable_simple($src[$i]); ### XS only
        }
@@ -535,7 +540,7 @@ sub splitEnt
        my $i_orig = $i;
 
        # find contraction
-       if ($max->{$jcps}) {
+       if (exists $max->{$jcps}) {
            my $temp_jcps = $jcps;
            my $jcpsLen = 1;
            my $maxLen = $max->{$jcps};
@@ -544,7 +549,7 @@ sub splitEnt
                next if ! defined $src[$p];
                $temp_jcps .= CODE_SEP . $src[$p];
                $jcpsLen++;
-               if ($map->{$temp_jcps}) {
+               if (exists $map->{$temp_jcps}) {
                    $jcps = $temp_jcps;
                    $i = $p;
                }
@@ -571,7 +576,7 @@ sub splitEnt
                    last unless $curCC;
                    my $tail = CODE_SEP . $src[$p];
 
-                   if ($preCC != $curCC && $map->{$jcps.$tail}) {
+                   if ($preCC != $curCC && exists $map->{$jcps.$tail}) {
                        $jcps .= $tail;
                        push @out, $p;
                    } else {
@@ -580,8 +585,9 @@ sub splitEnt
 
                    next if !$long;
 
-                   if ($preCC_uc != $curCC && ($map->{$jcps_uc.$tail} ||
-                                              $cont->{$jcps_uc.$tail})) {
+                   if ($preCC_uc != $curCC &&
+                           (exists $map->{$jcps_uc.$tail} ||
+                           exists $cont->{$jcps_uc.$tail})) {
                        $jcps_uc .= $tail;
                        push @out_uc, $p;
                    } else {
@@ -589,7 +595,7 @@ sub splitEnt
                    }
                }
 
-               if (@out_uc && $map->{$jcps_uc}) {
+               if (@out_uc && exists $map->{$jcps_uc}) {
                    $jcps = $jcps_uc;
                    $src[$_] = undef for @out_uc;
                } else {
@@ -599,7 +605,7 @@ sub splitEnt
        }
 
        # skip completely ignorable
-       if ($map->{$jcps} ? @{ $map->{$jcps} } == 0 :
+       if (exists $map->{$jcps} ? @{ $map->{$jcps} } == 0 :
            $uXS && $jcps !~ /;/ && _ignorable_simple($jcps)) { ### XS only
            if ($wLen && @buf) {
                $buf[-1][2] = $i + 1;
@@ -648,7 +654,7 @@ sub getWt
     $u = 0xFFFD if $u !~ /;/ && 0x10FFFF < $u && !$out;
 
     my @ce;
-    if ($map->{$u}) {
+    if (exists $map->{$u}) {
        @ce = @{ $map->{$u} }; # $u may be a contraction
 ### begin XS only ###
     } elsif ($uXS && _exists_simple($u)) {
@@ -666,27 +672,27 @@ sub getWt
 
            if (@decH == 2) {
                my $contract = join(CODE_SEP, @decH);
-               @decH = ($contract) if $map->{$contract};
+               @decH = ($contract) if exists $map->{$contract};
            } else { # must be <@decH == 3>
-               if ($max->{$decH[0]}) {
+               if (exists $max->{$decH[0]}) {
                    my $contract = join(CODE_SEP, @decH);
-                   if ($map->{$contract}) {
+                   if (exists $map->{$contract}) {
                        @decH = ($contract);
                    } else {
                        $contract = join(CODE_SEP, @decH[0,1]);
-                       $map->{$contract} and @decH = ($contract, $decH[2]);
+                       exists $map->{$contract} and @decH = ($contract, $decH[2]);
                    }
                    # even if V's ignorable, LT contraction is not supported.
                    # If such a situation were required, NFD should be used.
                }
-               if (@decH == 3 && $max->{$decH[1]}) {
+               if (@decH == 3 && exists $max->{$decH[1]}) {
                    my $contract = join(CODE_SEP, @decH[1,2]);
-                   $map->{$contract} and @decH = ($decH[0], $contract);
+                   exists $map->{$contract} and @decH = ($decH[0], $contract);
                }
            }
 
            @ce = map({
-                   $map->{$_} ? @{ $map->{$_} } :
+                   exists $map->{$_} ? @{ $map->{$_} } :
                $uXS && _exists_simple($_) ? _fetch_simple($_) : ### XS only
                    $der->($_);
                } @decH);
@@ -1117,6 +1123,7 @@ The following revisions are supported.  The default is 34.
      30             7.0.0               7.0.0 (7.0.0)
      32             8.0.0               8.0.0 (8.0.0)
      34             9.0.0               9.0.0 (9.0.0)
+     36            10.0.0              10.0.0(10.0.0)
 
 * See below for C<long_contraction> with C<UCA_Version> 22 and 24.
 
@@ -1457,12 +1464,14 @@ those in the CJK Unified Ideographs Extension A etc.
     U+4E00..U+9FCB if UCA_Version is 20 or 22.
     U+4E00..U+9FCC if UCA_Version is 24 to 30.
     U+4E00..U+9FD5 if UCA_Version is 32 or 34.
+    U+4E00..U+9FEA if UCA_Version is 36.
 
     In the CJK Unified Ideographs Extension blocks:
     Ext.A (U+3400..U+4DB5) and Ext.B (U+20000..U+2A6D6) in any UCA_Version.
     Ext.C (U+2A700..U+2B734) if UCA_Version is 20 or later.
     Ext.D (U+2B740..U+2B81D) if UCA_Version is 22 or later.
     Ext.E (U+2B820..U+2CEA1) if UCA_Version is 32 or later.
+    Ext.F (U+2CEB0..U+2EBE0) if UCA_Version is 36.
 
 Through C<overrideCJK>, ordering of CJK unified ideographs (including
 extensions) can be overridden.
index 0838f45..ac57b47 100644 (file)
 
 #define CJK_UidIni    (0x4E00)
 #define CJK_UidFin    (0x9FA5)
-#define CJK_UidF41    (0x9FBB)
-#define CJK_UidF51    (0x9FC3)
-#define CJK_UidF52    (0x9FCB)
-#define CJK_UidF61    (0x9FCC)
-#define CJK_UidF80    (0x9FD5)
+#define CJK_UidF41    (0x9FBB) /* Unicode 4.1 */
+#define CJK_UidF51    (0x9FC3) /* Unicode 5.1 */
+#define CJK_UidF52    (0x9FCB) /* Unicode 5.2 */
+#define CJK_UidF61    (0x9FCC) /* Unicode 6.1 */
+#define CJK_UidF80    (0x9FD5) /* Unicode 8.0 */
+#define CJK_UidF100   (0x9FEA) /* Unicode 10.0 */
+
 #define CJK_ExtAIni   (0x3400) /* Unicode 3.0 */
 #define CJK_ExtAFin   (0x4DB5) /* Unicode 3.0 */
 #define CJK_ExtBIni  (0x20000) /* Unicode 3.1 */
@@ -67,6 +69,8 @@
 #define CJK_ExtDFin  (0x2B81D) /* Unicode 6.0 */
 #define CJK_ExtEIni  (0x2B820) /* Unicode 8.0 */
 #define CJK_ExtEFin  (0x2CEA1) /* Unicode 8.0 */
+#define CJK_ExtFIni  (0x2CEB0) /* Unicode 10.0 */
+#define CJK_ExtFFin  (0x2EBE0) /* Unicode 10.0 */
 
 #define CJK_CompIni  (0xFA0E)
 #define CJK_CompFin  (0xFA29)
@@ -78,6 +82,8 @@ static const STDCHAR UnifiedCompat[] = {
 #define TangIdeoFin  (0x187EC) /* Unicode 9.0 */
 #define TangCompIni  (0x18800) /* Unicode 9.0 */
 #define TangCompFin  (0x18AF2) /* Unicode 9.0 */
+#define NushuIni     (0x1B170) /* Unicode 10.0 */
+#define NushuFin     (0x1B2FB) /* Unicode 10.0 */
 
 #define codeRange(bcode, ecode)        ((bcode) <= code && code <= (ecode))
 
@@ -276,28 +282,35 @@ _derivCE_9 (code)
     _derivCE_24 = 5
     _derivCE_32 = 6
     _derivCE_34 = 7
+    _derivCE_36 = 8
   PREINIT:
     UV base, aaaa, bbbb;
     U8 a[VCE_Length + 1] = "\x00\x00\x00\x00\x00\x00\x00\x00\x00";
     U8 b[VCE_Length + 1] = "\x00\x00\x00\x00\x00\x00\x00\x00\x00";
-    bool basic_unified = 0, tangut = 0;
+    bool basic_unified = 0, tangut = 0, nushu = 0;
   PPCODE:
     if (codeRange(CJK_UidIni, CJK_CompFin)) {
        if (codeRange(CJK_CompIni, CJK_CompFin))
            basic_unified = (bool)UnifiedCompat[code - CJK_CompIni];
        else
-           basic_unified = (ix >= 6 ? (code <= CJK_UidF80) :
+           basic_unified = (ix >= 8 ? (code <= CJK_UidF100) :
+                            ix >= 6 ? (code <= CJK_UidF80) :
                             ix == 5 ? (code <= CJK_UidF61) :
                             ix >= 3 ? (code <= CJK_UidF52) :
                             ix == 2 ? (code <= CJK_UidF51) :
                             ix == 1 ? (code <= CJK_UidF41) :
                                       (code <= CJK_UidFin));
-    } else if (ix >= 7) {
-       tangut = (codeRange(TangIdeoIni, TangIdeoFin) ||
-                 codeRange(TangCompIni, TangCompFin));
+    } else {
+       if (ix >= 7)
+           tangut = (codeRange(TangIdeoIni, TangIdeoFin) ||
+                     codeRange(TangCompIni, TangCompFin));
+       if (ix >= 8)
+           nushu = (codeRange(NushuIni, NushuFin));
     }
     base = tangut
            ? 0xFB00 :
+          nushu
+           ? 0xFB01 :
           basic_unified
            ? 0xFB40 : /* CJK */
           ((codeRange(CJK_ExtAIni, CJK_ExtAFin))
@@ -308,11 +321,14 @@ _derivCE_9 (code)
                ||
            (ix >= 4 && codeRange(CJK_ExtDIni, CJK_ExtDFin))
                ||
-           (ix >= 6 && codeRange(CJK_ExtEIni, CJK_ExtEFin)))
+           (ix >= 6 && codeRange(CJK_ExtEIni, CJK_ExtEFin))
+               ||
+           (ix >= 8 && codeRange(CJK_ExtFIni, CJK_ExtFFin)))
            ? 0xFB80   /* CJK ext. */
            : 0xFBC0;  /* others */
-    aaaa = tangut ? base : base + (code >> 15);
-    bbbb = (tangut ? (code - TangIdeoIni) : (code & 0x7FFF)) | 0x8000;
+    aaaa = tangut || nushu ? base : base + (code >> 15);
+    bbbb = (tangut ? (code - TangIdeoIni) :
+           nushu  ? (code - NushuIni) : (code & 0x7FFF)) | 0x8000;
     a[1] = (U8)(aaaa >> 8);
     a[2] = (U8)(aaaa & 0xFF);
     b[1] = (U8)(bbbb >> 8);
@@ -373,7 +389,8 @@ _isUIdeo (code, uca_vers)
        if (codeRange(CJK_CompIni, CJK_CompFin))
            basic_unified = (bool)UnifiedCompat[code - CJK_CompIni];
        else
-           basic_unified = (uca_vers >= 32 ? (code <= CJK_UidF80) :
+           basic_unified = (uca_vers >= 36 ? (code <= CJK_UidF100) :
+                            uca_vers >= 32 ? (code <= CJK_UidF80) :
                             uca_vers >= 24 ? (code <= CJK_UidF61) :
                             uca_vers >= 20 ? (code <= CJK_UidF52) :
                             uca_vers >= 18 ? (code <= CJK_UidF51) :
@@ -392,6 +409,8 @@ _isUIdeo (code, uca_vers)
        (uca_vers >= 22 && codeRange(CJK_ExtDIni, CJK_ExtDFin))
                ||
        (uca_vers >= 32 && codeRange(CJK_ExtEIni, CJK_ExtEFin))
+               ||
+       (uca_vers >= 36 && codeRange(CJK_ExtFIni, CJK_ExtFFin))
     );
 OUTPUT:
     RETVAL
@@ -560,6 +579,7 @@ varCE (self, vce)
     U8 *a, *v, *d;
     STRLEN alen, vlen;
     bool ig_l2;
+    IV uca_vers;
     UV totwt;
   CODE:
     if (SvROK(self) && SvTYPE(SvRV(self)) == SVt_PVHV)
@@ -604,8 +624,18 @@ varCE (self, vce)
                    d[7] = d[1]; /* wt level 1 to 4 */
                    d[8] = d[2];
                } else {
-                   d[7] = (U8)(Shift4Wt >> 8);
-                   d[8] = (U8)(Shift4Wt & 0xFF);
+                   svp = hv_fetch(selfHV, "UCA_Version", 11, FALSE);
+                   if (!svp)
+                       croak("Panic: no $self->{UCA_Version} in varCE");
+                   uca_vers = SvIV(*svp);
+
+                   /* completely ignorable or the second derived CE */
+                   if (uca_vers >= 36 && d[3] + d[4] + d[5] + d[6] == 0) {
+                       d[7] = d[8] = '\0';
+                   } else {
+                       d[7] = (U8)(Shift4Wt >> 8);
+                       d[8] = (U8)(Shift4Wt & 0xFF);
+                   }
                }
            } else { /* shift-trimmed or completely ignorable */
                d[7] = d[8] = '\0';
index e430dba..2fd7ac1 100644 (file)
@@ -4,7 +4,7 @@ use 5.006;
 use strict;
 use warnings;
 
-our $VERSION = '1.21';
+our $VERSION = '1.23';
 
 my %u2p;
 my $wt = 0x8000;
index 094bb55..6b593c1 100644 (file)
@@ -4,7 +4,7 @@ use 5.006;
 use strict;
 use warnings;
 
-our $VERSION = '1.21';
+our $VERSION = '1.23';
 
 my %u2p;
 my $wt = 0x8000;
index d4624bd..df9c38c 100644 (file)
@@ -4,7 +4,7 @@ use 5.006;
 use strict;
 use warnings;
 
-our $VERSION = '1.21';
+our $VERSION = '1.23';
 
 my %u2p;
 my $wt = 0x8000;
index 7d2d52a..7e69d0c 100644 (file)
@@ -4,7 +4,7 @@ use 5.006;
 use strict;
 use warnings;
 
-our $VERSION = '1.21';
+our $VERSION = '1.23';
 
 my %jamo2prim = (
     '1100', 0x3BF5,   '1101', 0x3BF6,   '1102', 0x3BF7,   '1103', 0x3BF8,
index 4f3a5db..75524af 100644 (file)
@@ -4,7 +4,7 @@ use 5.006;
 use strict;
 use warnings;
 
-our $VERSION = '1.21';
+our $VERSION = '1.23';
 
 my %u2p;
 my $wt = 0x8000;
index e6ba887..ac74667 100644 (file)
@@ -4,7 +4,7 @@ use 5.006;
 use strict;
 use warnings;
 
-our $VERSION = '1.21';
+our $VERSION = '1.23';
 
 my %u2p;
 my $wt = 0x8000;
index 2dbd97a..e82b234 100644 (file)
@@ -4,7 +4,7 @@ use 5.006;
 use strict;
 use warnings;
 
-our $VERSION = '1.21';
+our $VERSION = '1.23';
 
 my %u2p;
 my $wt = 0x8000;
index 3de45c3..0bde742 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 use Carp;
 use base qw(Unicode::Collate);
 
-our $VERSION = '1.21';
+our $VERSION = '1.23';
 
 my $PL_EXT  = '.pl';
 
index 7713a25..88da28a 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0149      ; [.1DB9.0020.0009] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
 ENTRY
index 6cf9e18..31bb2e5 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0629      ; [.231D.0021.0002] # ARABIC LETTER TEH MARBUTA
 FE94      ; [.231D.0021.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM
index 7687797..ffcb2dc 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0982      ; [.26CD.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA
 0981      ; [.26CD.0020.0002][.FFF2.0000.0000] # BENGALI SIGN CANDRABINDU
index d8fecac..ec68857 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
 # schwa doesn't require tailoring
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E7      ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
index a64ba84..872fa00 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0451      ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO
 0435 0308 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO
index 5129968..2fd8eba 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0982      ; [.26CD.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA
 0983      ; [.26CD.0020.0002][.FFF2.0000.0000] # BENGALI SIGN VISARGA
index e5b6929..defe6b9 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0063 0068 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
 0063 0048 ; [.1C7B.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER H>
index 04e6d20..17f4cc8 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 010D      ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
index 0d36a63..67b4998 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0063 0068 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
 0043 0068 ; [.1C7B.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
index 0286558..34f6cec 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    upper_before_lower => 1,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0111      ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
index f3fefdf..ccb7daa 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E4      ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
 0061 0308 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
index 1e085da..e3357d3 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E4      ; [.1C47.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
 0061 0308 ; [.1C47.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS
index 7ee380f..f6d3fbd 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 010D      ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
index b701bce..a1b5401 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
 # d-tail, open-e, f-hook, gamma, eng, open-o, v-hook don't require tailoring
    entry => <<'ENTRY', # for DUCET v9.0.0
 0302      ; [.0000.0029.0002] # COMBINING CIRCUMFLEX ACCENT
index 05786c8..1923651 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0109      ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX
 0063 0302 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX
index 3c04f6e..3d2a947 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00F1      ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
 006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
index 5c72166..42add42 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0063 0068 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
 0043 0068 ; [.1C7B.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
index 03fd7fa..2f300ff 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0161      ; [.1E92.0020.0002] # LATIN SMALL LETTER S WITH CARON
 0073 030C ; [.1E92.0020.0002] # LATIN SMALL LETTER S WITH CARON
index 765e289..23ea1b2 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0650      ; [.0000.0077.0002] # ARABIC KASRA
 064B      ; [.0000.007B.0002] # ARABIC FATHATAN
index de271b4..ef14df5 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
 # in cldr test/fi.xml why x{110}x < xdx though xd < x{110} ?
    entry => <<'ENTRY', # for DUCET v9.0.0
 0111      ; [.1C8F.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE
index fbd5ab5..45d4fbc 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
 # in cldr test/fi.xml why x{110}x < xdx though xd < x{110} ?
    entry => <<'ENTRY', # for DUCET v9.0.0
 0111      ; [.1C8F.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE
index 249e596..ac0ace0 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00F1      ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
 006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE
index 6abbe9f..c11be2c 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0111      ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
index 97e08da..f2633d0 100644 (file)
@@ -1,4 +1,4 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    backwards => 2,
 };
index 1917b4e..b83b98a 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0A82      ; [.2739.0020.0002][.FFF1.0000.0000] # GUJARATI SIGN ANUSVARA
 0A81      ; [.2739.0021.0002][.FFF1.0000.0000] # GUJARATI SIGN CANDRABINDU
index 41dfc51..7479195 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
 # b-hook, d-hook, k-hook, y-hook don't require tailoring
    entry => <<'ENTRY', # for DUCET v9.0.0
 0073 0068 ; [.1E72.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER H>
index 0910e00..db91217 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0065      ; [.1C48.0020.0002][.FFF1.0000.0000] # LATIN SMALL LETTER E
 0045      ; [.1C48.0020.0008][.FFF1.0000.0000] # LATIN CAPITAL LETTER E
index 44a3834..a1acd0a 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 05F3      ; [*0305.001F.0002] # HEBREW PUNCTUATION GERESH
 05F4      ; [*030C.001F.0002] # HEBREW PUNCTUATION GERSHAYIM
index bc6f1bf..ae935fe 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0902      ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA
 0901      ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU
index 5331428..28c0b23 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 010D      ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
index 7027ab9..c2686f8 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0063 0073 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER S>
 0063 0053 ; [.1C7B.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER S>
index 552c7fb..2edd8cc 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0587      ; [.22B3.0020.0002][.FFF1.0000.0000] # ARMENIAN SMALL LIGATURE ECH YIWN
 0584      ; [.22B3.0020.0002][.FFF0.0000.0000] # ARMENIAN SMALL LETTER KEH
index c6f252b..47528cc 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0063 0068 ; [.1C61.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
 0043 0068 ; [.1C61.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
index faa588b..3df7aa4 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E1      ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE
 0061 0301 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE
index 5ea4730..26550c4 100644 (file)
@@ -1,6 +1,6 @@
 use Unicode::Collate::CJK::JISX0208;
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    overrideCJK => \&Unicode::Collate::CJK::JISX0208::weightJISX0208,
    entry => <<'ENTRY', # for DUCET v9.0.0
 30A1      ; [.3D5A.0020.000F.0002] # KATAKANA LETTER SMALL A
index 5fb33a1..8cea65c 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0451      ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO
 0435 0308 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO
index 43c7be2..92e5470 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0111      ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
index a43fa85..d1969d5 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0C82      ; [.284C.0020.0002][.FFF1.0000.0000] # KANNADA SIGN ANUSVARA
 0C83      ; [.284C.0020.0002][.FFF2.0000.0000] # KANNADA SIGN VISARGA
index a11a4cb..407dea5 100644 (file)
@@ -1,6 +1,6 @@
 use Unicode::Collate::CJK::Korean;
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    overrideCJK => \&Unicode::Collate::CJK::Korean::weightKorean,
    entry => <<'ENTRY', # for DUCET v9.0.0
 F967      ; [.3BFC.0021.0002.4E0D][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967
index 9cd5b1f..b4b87b6 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0902      ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA
 0901      ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU
index 4966552..7c066de 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 010D      ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
index 441c4a0..f1e01cc 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 025B      ; [.1CAB.0020.0002] # LATIN SMALL LETTER OPEN E
 0190      ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER OPEN E
index 83c346b..b5881a2 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
 # in cldr test/lt.xml why I-dot-acute > I-dot though i-dot-acute < i-dot ?
    entry => <<'ENTRY', # for DUCET v9.0.0
 0049 0307 ; [.1D32.0020.0008][.0000.002E.0002] # <LATIN CAPITAL LETTER I, COMBINING DOT ABOVE>
index 4cd2f25..ffe9cdf 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 010D      ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CARON
 0063 030C ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CARON
index 8e9c954..95c35f3 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    suppress => [0x0418, 0x0438],
    entry => <<'ENTRY', # for DUCET v9.0.0
 0453      ; [.2056.0020.0002] # CYRILLIC SMALL LETTER GJE
index cebee50..59a6fc1 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0D3D      ; [.0000.00C6.0002] # MALAYALAM SIGN AVAGRAHA
 0D57      ; [.28CD.0020.0002] # MALAYALAM AU LENGTH MARK
index 4a88db4..ccd4540 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0902      ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA
 0901      ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU
index e1edfb5..752dff1 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    upper_before_lower => 1,
    entry => <<'ENTRY', # for DUCET v9.0.0
 010B      ; [.1C79.0020.0002] # LATIN SMALL LETTER C WITH DOT ABOVE
index f7170c7..9e104eb 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0111      ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
index f7170c7..9e104eb 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0111      ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
index db1915b..69c0211 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00EA      ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
 0065 0302 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
index c3a1aac..60e06b4 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0063 0068 ; [.1F22.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
 0043 0068 ; [.1F22.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H>
index a3926ad..909cf0f 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0B01      ; [.278B.0020.0002][.FFF1.0000.0000] # ORIYA SIGN CANDRABINDU
 0B02      ; [.278B.0020.0002][.FFF2.0000.0000] # ORIYA SIGN ANUSVARA
index 4d6d7a4..a7963cc 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0A71      ; [.0000.00C3.0002] # GURMUKHI ADDAK
 0A03      ; [.0000.00C2.0002] # GURMUKHI SIGN VISARGA
index b12bb78..c2880dc 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0105      ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH OGONEK
 0061 0328 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH OGONEK
index eebf0df..be2a882 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0103      ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE
 0061 0306 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE
index 4a88db4..ccd4540 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0902      ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA
 0901      ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU
index f3966e1..d8bfcd7 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
 # eng, g-stroke, t-stroke don't require tailoring
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E1      ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE
index bbb1742..e89c65c 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0D82      ; [.28E1.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA
 0D83      ; [.28E1.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA
index a63379e..236512b 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0D82      ; [.28E1.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA
 0D83      ; [.28E1.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA
index 06da36e..3875670 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E4      ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
 0061 0308 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
index 9631acf..d7d1bd3 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 010D      ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON
index 5f70b1b..7fa8224 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E7      ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
 0063 0327 ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
index 559ccf6..ab97097 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    suppress => [0x0418, 0x0438],
    entry => <<'ENTRY', # for DUCET v9.0.0
 0439      ; [.2080.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT I
index 605656f..b9d5630 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0111      ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
index 6325de0..496e754 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0111      ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE
index c3b3136..6f977b0 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0B82      ; [.27CE.0020.0002][.FFF0.0000.0000] # TAMIL SIGN ANUSVARA
 0B83      ; [.27CE.0020.0002][.FFF1.0000.0000] # TAMIL SIGN VISARGA
index cfd9e0c..d1d95fd 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0C01      ; [.2802.0020.0002][.FFF1.0000.0000] # TELUGU SIGN CANDRABINDU
 0C02      ; [.2802.0020.0002][.FFF2.0000.0000] # TELUGU SIGN ANUSVARA
index f433e20..6885adf 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    variable => 'shifted',
    alternate => 'shifted',
    entry => <<'ENTRY', # for DUCET v9.0.0
index db1915b..69c0211 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00EA      ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
 0065 0302 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
index a1a4faf..92d65db 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 006E 0067 ; [.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER G>
 004E 0067 ; [.1DBA.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER G>
index 742464d..ecdd5ea 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E7      ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
 0063 0327 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA
index 356fa98..1760e1d 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 04D9      ; [.205B.0020.0002] # CYRILLIC SMALL LETTER SCHWA
 04D8      ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER SCHWA
index 956fd97..4327023 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0491      ; [.2037.0020.0002] # CYRILLIC SMALL LETTER GHE WITH UPTURN
 0490      ; [.2037.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
index c7a8e4a..6c07642 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0623      ; [.230B.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE
 0627 0654 ; [.230B.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE
index 2fc4cd7..66713ac 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
 # 0306 is not a Vietnamese tone, just to avoid \x{306} eq. to something.
    entry => <<'ENTRY', # for DUCET v9.0.0
 0309      ; [.0000.0026.0002][.0000.00F0.0000] # COMBINING HOOK ABOVE
index 2a2ff1e..5f40776 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E4      ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
 0061 0308 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS
index 075e169..2edbc2b 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0061 0061 ; [.1C47.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A>
 00E4 00E4 ; [.1C47.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER A WITH DIAERESIS, LATIN SMALL LETTER A WITH DIAERESIS>
index 1272e3f..4e640d8 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
 # eng doesn't require tailoring
    entry => <<'ENTRY', # for DUCET v9.0.0
 00E0      ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH GRAVE
index 0fdb943..63f39dc 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 1EB9      ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW
 0065 0323 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW
index 46b6028..c189144 100644 (file)
@@ -1,5 +1,5 @@
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0101      ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
 0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
index ede0ca8..5d7f0af 100644 (file)
@@ -1,6 +1,6 @@
 use Unicode::Collate::CJK::Big5;
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    overrideCJK => \&Unicode::Collate::CJK::Big5::weightBig5,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0101      ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
index 14f5722..0f6868c 100644 (file)
@@ -1,6 +1,6 @@
 use Unicode::Collate::CJK::GB2312;
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    overrideCJK => \&Unicode::Collate::CJK::GB2312::weightGB2312,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0101      ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
index fc86621..5403f77 100644 (file)
@@ -1,6 +1,6 @@
 use Unicode::Collate::CJK::Pinyin;
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    overrideCJK => \&Unicode::Collate::CJK::Pinyin::weightPinyin,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0101      ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
index 2b2aefb..2fcf337 100644 (file)
@@ -1,6 +1,6 @@
 use Unicode::Collate::CJK::Stroke;
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    overrideCJK => \&Unicode::Collate::CJK::Stroke::weightStroke,
    entry => <<'ENTRY', # for DUCET v9.0.0
 0101      ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON
index 74918f6..e1204b8 100644 (file)
@@ -1,6 +1,6 @@
 use Unicode::Collate::CJK::Zhuyin;
 +{
-   locale_version => 1.21,
+   locale_version => 1.23,
    overrideCJK => \&Unicode::Collate::CJK::Zhuyin::weightZhuyin,
    entry => <<'ENTRY', # for DUCET v9.0.0
 02C9      ; [.0000.0199.0002] # MODIFIER LETTER MACRON
index 2c1ace7..4ed8710 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
 
 use strict;
 use warnings;
-BEGIN { $| = 1; print "1..715\n"; } # 1 + 51 x @Versions
+BEGIN { $| = 1; print "1..901\n"; } # 1 + 60 x @Versions
 my $count = 0;
 sub ok ($;$) {
     my $p = my $r = shift;
@@ -47,14 +47,16 @@ my $coll = Unicode::Collate->new(
 # 9FC4..9FCB are CJK UI since UCA_Version 20 (Unicode 5.2).
 # 9FCC       is  CJK UI since UCA_Version 24 (Unicode 6.1).
 # 9FCD..9FD5 are CJK UI since UCA_Version 32 (Unicode 8.0).
+# 9FD6..9FEA are CJK UI since UCA_Version 36 (Unicode 10.0).
 
 # 3400..4DB5   are CJK UI Ext.A since UCA_Version 8  (Unicode 3.0).
 # 20000..2A6D6 are CJK UI Ext.B since UCA_Version 8  (Unicode 3.1).
 # 2A700..2B734 are CJK UI Ext.C since UCA_Version 20 (Unicode 5.2).
 # 2B740..2B81D are CJK UI Ext.D since UCA_Version 22 (Unicode 6.0).
 # 2B820..2CEA1 are CJK UI Ext.E since UCA_Version 32 (Unicode 8.0).
+# 2CEB0..2EBE0 are CJK UI Ext.F since UCA_Version 36 (Unicode 10.0).
 
-my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34);
+my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
 
 for my $v (@Versions) {
     $coll->change(UCA_Version => $v);
@@ -71,7 +73,9 @@ for my $v (@Versions) {
     ok($coll->cmp("\x{3400}", "\x{9FCC}") == ($v >= 24 ? 1 : -1)); # new
     ok($coll->cmp("\x{3400}", "\x{9FCD}") == ($v >= 32 ? 1 : -1)); # new
     ok($coll->cmp("\x{3400}", "\x{9FD5}") == ($v >= 32 ? 1 : -1)); # new
-    ok($coll->cmp("\x{3400}", "\x{9FD6}") == -1); # na
+    ok($coll->cmp("\x{3400}", "\x{9FD6}") == ($v >= 36 ? 1 : -1)); # new
+    ok($coll->cmp("\x{3400}", "\x{9FEA}") == ($v >= 36 ? 1 : -1)); # new
+    ok($coll->cmp("\x{3400}", "\x{9FEB}") == -1); # na
     ok($coll->cmp("\x{3400}", "\x{9FFF}") == -1); # na
 
     # UI < UI
@@ -85,8 +89,10 @@ for my $v (@Versions) {
     ok($coll->cmp("\x{9FCB}", "\x{9FCC}") == -1); # new < new
     ok($coll->cmp("\x{9FCC}", "\x{9FCD}") == -1); # new < new
     ok($coll->cmp("\x{9FCD}", "\x{9FD5}") == -1); # new < new
-    ok($coll->cmp("\x{9FD5}", "\x{9FD6}") == -1); # new < na
-    ok($coll->cmp("\x{9FD6}", "\x{9FFF}") == -1); # na < na
+    ok($coll->cmp("\x{9FD5}", "\x{9FD6}") == -1); # new < new
+    ok($coll->cmp("\x{9FD6}", "\x{9FEA}") == -1); # new < new
+    ok($coll->cmp("\x{9FEA}", "\x{9FEB}") == -1); # new < na
+    ok($coll->cmp("\x{9FEB}", "\x{9FFF}") == -1); # na < na
 
     # Ext.A < Ext.B
     ok($coll->cmp("\x{3400}", "\x{20000}") == -1);
@@ -125,5 +131,12 @@ for my $v (@Versions) {
     ok($coll->cmp("\x{2FFF}", "\x{2CEA1}") == ($v >= 32 ? 1 : -1)); # na > E
     ok($coll->cmp("\x{2FFF}", "\x{2CEA2}") == -1); # na < na
     ok($coll->cmp("\x{2FFF}", "\x{2CEAF}") == -1); # na < na
+
+    # Ext.F
+    ok($coll->cmp("\x{2CEB0}","\x{2EBE0}") == -1); # F < F
+    ok($coll->cmp("\x{2FFF}", "\x{2CEB0}") == ($v >= 36 ? 1 : -1)); # na > F
+    ok($coll->cmp("\x{2FFF}", "\x{2EBE0}") == ($v >= 36 ? 1 : -1)); # na > F
+    ok($coll->cmp("\x{2FFF}", "\x{2EBE1}") == -1); # na < na
+    ok($coll->cmp("\x{2FFF}", "\x{2EBEF}") == -1); # na < na
 }
 
index 9c51afe..96dffd4 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
 
 use strict;
 use warnings;
-BEGIN { $| = 1; print "1..981\n"; } # 1 + 70 x @Versions
+BEGIN { $| = 1; print "1..1051\n"; } # 1 + 70 x @Versions
 my $count = 0;
 sub ok ($;$) {
     my $p = my $r = shift;
@@ -33,7 +33,7 @@ ok(1);
 
 #########################
 
-my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34);
+my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
 
 # 12 compatibility ideographs are treated as unified ideographs:
 # FA0E, FA0F, FA11, FA13, FA14, FA1F, FA21, FA23, FA24, FA27, FA28, FA29.
index 3427a8a..42d0c61 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
 
 use strict;
 use warnings;
-BEGIN { $| = 1; print "1..701\n"; } # 1 + 50 x @Versions
+BEGIN { $| = 1; print "1..751\n"; } # 1 + 50 x @Versions
 my $count = 0;
 sub ok ($;$) {
     my $p = my $r = shift;
@@ -33,7 +33,7 @@ ok(1);
 
 #########################
 
-my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34);
+my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
 
 for my $v (@Versions) {
     ok(Unicode::Collate::getHST(0x0000, $v), '');
index e901402..c9ac787 100644 (file)
@@ -30,7 +30,7 @@ BEGIN {
 
 use strict;
 use warnings;
-BEGIN { $| = 1; print "1..151\n"; } # 81 + 5 x @Versions
+BEGIN { $| = 1; print "1..156\n"; } # 81 + 5 x @Versions
 my $count = 0;
 sub ok ($;$) {
     my $p = my $r = shift;
@@ -192,7 +192,7 @@ my $out = Unicode::Collate->new(
     overrideOut => sub { 0xFFFD },
 );
 
-my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34);
+my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
 
 for my $v (@Versions) {
     $out->change(UCA_Version => $v);
index 3e685a8..cd482fe 100644 (file)
@@ -37,7 +37,7 @@ my $objEs = Unicode::Collate::Locale->
     new(locale => 'ES', normalization => undef);
 
 ok($objEs->getlocale, 'es');
-ok($objEs->locale_version, 1.21);
+ok($objEs->locale_version, 1.23);
 
 $objEs->change(level => 1);
 
index b8470cb..cc02ad9 100644 (file)
@@ -37,7 +37,7 @@ my $objEsTrad = Unicode::Collate::Locale->
     new(locale => 'ES-trad', normalization => undef);
 
 ok($objEsTrad->getlocale, 'es__traditional');
-ok($objEsTrad->locale_version, 1.21);
+ok($objEsTrad->locale_version, 1.23);
 
 $objEsTrad->change(level => 1);
 
diff --git a/cpan/Unicode-Collate/t/nushu.t b/cpan/Unicode-Collate/t/nushu.t
new file mode 100644 (file)
index 0000000..4293a9a
--- /dev/null
@@ -0,0 +1,73 @@
+
+BEGIN {
+    unless ('A' eq pack('U', 0x41)) {
+       print "1..0 # Unicode::Collate cannot pack a Unicode code point\n";
+       exit 0;
+    }
+    unless (0x41 == unpack('U', 'A')) {
+       print "1..0 # Unicode::Collate cannot get a Unicode code point\n";
+       exit 0;
+    }
+    if ($ENV{PERL_CORE}) {
+       chdir('t') if -d 't';
+       @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+    }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..185\n"; } # 5 + 12 x @Versions
+my $count = 0;
+sub ok ($;$) {
+    my $p = my $r = shift;
+    if (@_) {
+       my $x = shift;
+       $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+    }
+    print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate;
+
+ok(1);
+
+#########################
+
+my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
+
+my $Collator = Unicode::Collate->new(
+    table => 'keys.txt',
+    normalization => undef,
+    UCA_Version => 36,
+);
+
+ok($Collator->viewSortKey("\x{1B170}"),
+   '[FB01 8000 | 0020 | 0002 | FFFF |]');
+ok($Collator->viewSortKey("\x{1B171}"),
+   '[FB01 8001 | 0020 | 0002 | FFFF |]');
+ok($Collator->viewSortKey("\x{1B200}"),
+   '[FB01 8090 | 0020 | 0002 | FFFF |]');
+ok($Collator->viewSortKey("\x{1B2FB}"),
+   '[FB01 818B | 0020 | 0002 | FFFF |]');
+
+# Nushu < CJK UI (4E00) < Unassigned.
+
+# 1B170..1B2FB are Nushu Characters since UCA_Version 36 (Unicode 10.0).
+
+for my $v (@Versions) {
+    $Collator->change(UCA_Version => $v);
+
+    ok($Collator->cmp("\x{1B16F}", "\x{4E00}") == 1);
+    ok($Collator->cmp("\x{1B170}", "\x{4E00}") == ($v >= 36 ? -1 : 1));
+    ok($Collator->cmp("\x{1B171}", "\x{4E00}") == ($v >= 36 ? -1 : 1));
+    ok($Collator->cmp("\x{1B1FF}", "\x{4E00}") == ($v >= 36 ? -1 : 1));
+    ok($Collator->cmp("\x{1B200}", "\x{4E00}") == ($v >= 36 ? -1 : 1));
+    ok($Collator->cmp("\x{1B2FB}", "\x{4E00}") == ($v >= 36 ? -1 : 1));
+    ok($Collator->cmp("\x{1B2FC}", "\x{4E00}") == 1);
+    ok($Collator->cmp("\x{1B2FF}", "\x{4E00}") == 1);
+
+    ok($Collator->lt("\x{1B170}", "\x{1B171}"));
+    ok($Collator->lt("\x{1B171}", "\x{1B1FF}"));
+    ok($Collator->lt("\x{1B1FF}", "\x{1B200}"));
+    ok($Collator->lt("\x{1B200}", "\x{1B2FB}"));
+}
index c2d80dc..12e599d 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
 
 use strict;
 use warnings;
-BEGIN { $| = 1; print "1..552\n"; } # 6 + 39 x @Versions
+BEGIN { $| = 1; print "1..696\n"; } # 6 + 46 x @Versions
 my $count = 0;
 sub ok ($;$) {
     my $p = my $r = shift;
@@ -60,14 +60,16 @@ ok($ignoreCJK->lt("Pe\x{5B57}rl", "Perl")); # 'r' is unassigned.
 # 9FC4..9FCB are CJK UI since UCA_Version 20 (Unicode 5.2).
 # 9FCC       is  CJK UI since UCA_Version 24 (Unicode 6.1).
 # 9FCD..9FD5 are CJK UI since UCA_Version 32 (Unicode 8.0).
+# 9FD6..9FEA are CJK UI since UCA_Version 36 (Unicode 10.0).
 
 # 3400..4DB5   are CJK UI Ext.A since UCA_Version 8  (Unicode 3.0).
 # 20000..2A6D6 are CJK UI Ext.B since UCA_Version 8  (Unicode 3.1).
 # 2A700..2B734 are CJK UI Ext.C since UCA_Version 20 (Unicode 5.2).
 # 2B740..2B81D are CJK UI Ext.D since UCA_Version 22 (Unicode 6.0).
 # 2B820..2CEA1 are CJK UI Ext.E since UCA_Version 32 (Unicode 8.0).
+# 2CEB0..2EBE0 are CJK UI Ext.F since UCA_Version 36 (Unicode 10.0).
 
-my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34);
+my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
 
 for my $v (@Versions) {
     $ignoreCJK->change(UCA_Version => $v);
@@ -90,8 +92,11 @@ for my $v (@Versions) {
     ok($ignoreCJK->cmp("\x{9FCF}", "") == ($v >= 32 ? 0 : 1));
     ok($ignoreCJK->cmp("\x{9FD0}", "") == ($v >= 32 ? 0 : 1));
     ok($ignoreCJK->cmp("\x{9FD5}", "") == ($v >= 32 ? 0 : 1));
-    ok($ignoreCJK->cmp("\x{9FD6}", "") == 1);
-    ok($ignoreCJK->cmp("\x{9FDF}", "") == 1);
+    ok($ignoreCJK->cmp("\x{9FD6}", "") == ($v >= 36 ? 0 : 1));
+    ok($ignoreCJK->cmp("\x{9FDF}", "") == ($v >= 36 ? 0 : 1));
+    ok($ignoreCJK->cmp("\x{9FEA}", "") == ($v >= 36 ? 0 : 1));
+    ok($ignoreCJK->cmp("\x{9FEB}", "") == 1);
+    ok($ignoreCJK->cmp("\x{9FFF}", "") == 1);
 
     # Ext.A
     ok($ignoreCJK->cmp("\x{3400}", "") == 0);
@@ -122,5 +127,11 @@ for my $v (@Versions) {
     ok($ignoreCJK->cmp("\x{2CEA1}","") == ($v >= 32 ? 0 : 1));
     ok($ignoreCJK->cmp("\x{2CEA2}","") == 1);
     ok($ignoreCJK->cmp("\x{2CEAF}","") == 1);
+
+    # Ext.F
+    ok($ignoreCJK->cmp("\x{2CEB0}","") == ($v >= 36 ? 0 : 1));
+    ok($ignoreCJK->cmp("\x{2EBE0}","") == ($v >= 36 ? 0 : 1));
+    ok($ignoreCJK->cmp("\x{2EBE1}","") == 1);
+    ok($ignoreCJK->cmp("\x{2EBEF}","") == 1);
 }
 
index cf80786..8441979 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
 
 use strict;
 use warnings;
-BEGIN { $| = 1; print "1..277\n"; } # 11 + 19 x @Versions
+BEGIN { $| = 1; print "1..356\n"; } # 11 + 23 x @Versions
 my $count = 0;
 sub ok ($;$) {
     my $p = my $r = shift;
@@ -60,13 +60,15 @@ ok($overCJK->lt("a\x{4E03}", "A\x{4E01}"));
 
 #####
 
+# 4E00..9FA5 are CJK UI.
 # 9FA6..9FBB are CJK UI since UCA_Version 14 (Unicode 4.1).
 # 9FBC..9FC3 are CJK UI since UCA_Version 18 (Unicode 5.1).
 # 9FC4..9FCB are CJK UI since UCA_Version 20 (Unicode 5.2).
 # 9FCC       is  CJK UI since UCA_Version 24 (Unicode 6.1).
 # 9FCD..9FD5 are CJK UI since UCA_Version 32 (Unicode 8.0).
+# 9FD6..9FEA are CJK UI since UCA_Version 36 (Unicode 10.0).
 
-my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34);
+my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
 
 for my $v (@Versions) {
     $overCJK->change(UCA_Version => $v);
@@ -87,7 +89,11 @@ for my $v (@Versions) {
     ok($overCJK->cmp("a\x{9FCC}", "A\x{9FCD}") == ($v >= 32 ? 1 : -1));
     ok($overCJK->cmp("a\x{9FCD}", "A\x{9FCF}") == ($v >= 32 ? 1 : -1));
     ok($overCJK->cmp("a\x{9FCF}", "A\x{9FD5}") == ($v >= 32 ? 1 : -1));
-    ok($overCJK->cmp("a\x{9FD5}", "A\x{9FD6}") == -1);
-    ok($overCJK->cmp("a\x{9FD6}", "A\x{9FDF}") == -1);
+    ok($overCJK->cmp("a\x{9FD5}", "A\x{9FD6}") == ($v >= 36 ? 1 : -1));
+    ok($overCJK->cmp("a\x{9FD6}", "A\x{9FDF}") == ($v >= 36 ? 1 : -1));
+    ok($overCJK->cmp("a\x{9FDF}", "A\x{9FEA}") == ($v >= 36 ? 1 : -1));
+    ok($overCJK->cmp("a\x{9FEA}", "A\x{9FEB}") == -1);
+    ok($overCJK->cmp("a\x{9FEB}", "A\x{9FEF}") == -1);
+    ok($overCJK->cmp("a\x{9FEF}", "A\x{9FFF}") == -1);
 }
 
index 76ff22d..171a205 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
 
 use strict;
 use warnings;
-BEGIN { $| = 1; print "1..355\n"; } # 5 + 25 x @Versions
+BEGIN { $| = 1; print "1..380\n"; } # 5 + 25 x @Versions
 my $count = 0;
 sub ok ($;$) {
     my $p = my $r = shift;
@@ -33,7 +33,7 @@ ok(1);
 
 #########################
 
-my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34);
+my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
 
 my $Collator = Unicode::Collate->new(
     table => 'keys.txt',
index f3472e1..63a0e92 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
 
 use strict;
 use warnings;
-BEGIN { $| = 1; print "1..114\n"; } # 62 + 4 x @Versions
+BEGIN { $| = 1; print "1..174\n"; } # 62 + 8 x @Versions
 my $count = 0;
 sub ok ($;$) {
     my $p = my $r = shift;
@@ -268,26 +268,35 @@ ok($el->viewSortKey("L\x{FF2C}\x{216C}\x{2112}\x{24C1}"),
 
 ##### 62
 
-my @Versions = (9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34);
+my @Versions = (9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36);
 
 for my $v (@Versions) {
     $Collator->change(UCA_Version => $v);
     my $app = $v >= 26 ? ' |]' : ']';
+    my $sec = $v >= 36 ? '' : ' FFFF';
 
     $Collator->change(variable => 'Shifted', level => 4);
     ok($Collator->viewSortKey("1+2"),
        '[0A0C 0A0D | 0020 0020 | 0002 0002 | FFFF 039F FFFF'.$app);
+    ok($Collator->viewSortKey("\x{4E02}"),
+       '[FB40 CE02 | 0020 | 0002 | FFFF'.$sec.$app);
 
     $Collator->change(variable => 'Shift-Trimmed');
     ok($Collator->viewSortKey("1+2"),
        '[0A0C 0A0D | 0020 0020 | 0002 0002 | 039F'.$app);
+    ok($Collator->viewSortKey("\x{4E02}"),
+       '[FB40 CE02 | 0020 | 0002 |'.$app);
 
     $Collator->change(variable => 'Non-ignorable', level => 3);
     ok($Collator->viewSortKey("1+2"),
        '[0A0C 039F 0A0D | 0020 0020 0020 | 0002 0002 0002 |]');
+    ok($Collator->viewSortKey("\x{4E02}"),
+       '[FB40 CE02 | 0020 | 0002 |]');
 
     $Collator->change(variable => 'Blanked');
     ok($Collator->viewSortKey("1+2"),
        '[0A0C 0A0D | 0020 0020 | 0002 0002 |]');
+    ok($Collator->viewSortKey("\x{4E02}"),
+       '[FB40 CE02 | 0020 | 0002 |]');
 }