1898184e3Ssthen 2898184e3SsthenBEGIN { 3898184e3Ssthen if ($ENV{PERL_CORE}) { 4898184e3Ssthen chdir('t') if -d 't'; 5898184e3Ssthen @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); 6898184e3Ssthen } 7898184e3Ssthen} 8898184e3Ssthen 9898184e3Ssthenuse strict; 10898184e3Ssthenuse warnings; 11898184e3SsthenBEGIN { $| = 1; print "1..42\n"; } 12898184e3Ssthenmy $count = 0; 13898184e3Ssthensub ok ($;$) { 14898184e3Ssthen my $p = my $r = shift; 15898184e3Ssthen if (@_) { 16898184e3Ssthen my $x = shift; 17898184e3Ssthen $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x; 18898184e3Ssthen } 19898184e3Ssthen print $p ? "ok" : "not ok", ' ', ++$count, "\n"; 20898184e3Ssthen} 21898184e3Ssthen 22898184e3Ssthenuse Unicode::Collate; 23898184e3Ssthen 24898184e3Ssthenok(1); 25898184e3Ssthen 26*256a93a4Safresh1sub _pack_U { Unicode::Collate::pack_U(@_) } 27*256a93a4Safresh1sub _unpack_U { Unicode::Collate::unpack_U(@_) } 28*256a93a4Safresh1 29898184e3Ssthen######################### 30898184e3Ssthen 31898184e3Ssthenmy $Collator = Unicode::Collate->new( 32898184e3Ssthen table => 'keys.txt', 33898184e3Ssthen normalization => undef, 34898184e3Ssthen ignore_level2 => 1, 35898184e3Ssthen entry => << 'ENTRIES', 36898184e3Ssthen1B00 ; [.0000.00FF.0002.1B00] # BALINESE SIGN ULU RICEM 37898184e3Ssthen1B01 ; [.0000.0100.0002.1B01] # BALINESE SIGN ULU CANDRA 38898184e3Ssthen1B02 ; [.0000.0101.0002.1B02] # BALINESE SIGN CECEK 39898184e3Ssthen03C6 ; [.1900.0020.0002.03C6] # GREEK SMALL LETTER PHI 40898184e3Ssthen03D5 ; [.1900.0020.0004.03D5] # GREEK PHI SYMBOL; QQK 41898184e3Ssthen03A6 ; [.1900.0020.0008.03A6] # GREEK CAPITAL LETTER PHI 42898184e3SsthenENTRIES 43898184e3Ssthen); 44898184e3Ssthen 45898184e3Ssthenok($Collator->eq("camel", "came\x{300}l")); 46898184e3Ssthenok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 47898184e3Ssthenok($Collator->lt("camel", "Camel")); 48898184e3Ssthen 49898184e3Ssthen# 4 50898184e3Ssthen 51898184e3Ssthen$Collator->change(ignore_level2 => 0); 52898184e3Ssthen 53898184e3Ssthenok($Collator->lt("camel", "came\x{300}l")); 54898184e3Ssthenok($Collator->lt("camel", "ca\x{300}me\x{301}l")); 55898184e3Ssthenok($Collator->lt("camel", "Camel")); 56898184e3Ssthen 57898184e3Ssthen$Collator->change(level => 1); 58898184e3Ssthen 59898184e3Ssthenok($Collator->eq("camel", "came\x{300}l")); 60898184e3Ssthenok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 61898184e3Ssthenok($Collator->eq("camel", "Camel")); 62898184e3Ssthen 63898184e3Ssthen$Collator->change(level => 2); 64898184e3Ssthen 65898184e3Ssthenok($Collator->lt("camel", "came\x{300}l")); 66898184e3Ssthenok($Collator->lt("camel", "ca\x{300}me\x{301}l")); 67898184e3Ssthenok($Collator->eq("camel", "Camel")); 68898184e3Ssthen 69898184e3Ssthen# 13 70898184e3Ssthen 71898184e3Ssthen$Collator->change(ignore_level2 => 1); 72898184e3Ssthen 73898184e3Ssthenok($Collator->eq("camel", "came\x{300}l")); 74898184e3Ssthenok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 75898184e3Ssthenok($Collator->eq("camel", "Camel")); 76898184e3Ssthen 77898184e3Ssthen$Collator->change(level => 3); 78898184e3Ssthen 79898184e3Ssthenok($Collator->eq("camel", "came\x{300}l")); 80898184e3Ssthenok($Collator->eq("camel", "ca\x{300}me\x{301}l")); 81898184e3Ssthenok($Collator->lt("camel", "Camel")); 82898184e3Ssthen 83898184e3Ssthen# secondary: neither 00FF nor 0100 is zero 84898184e3Ssthenok($Collator->eq("camel", "came\x{1B00}l")); 85898184e3Ssthenok($Collator->eq("camel", "came\x{1B01}l")); 86898184e3Ssthenok($Collator->eq("camel", "came\x{1B02}l")); 87898184e3Ssthen 88898184e3Ssthen# primary: 1900 isn't zero 89898184e3Ssthenok($Collator->lt("\x{3C6}", "\x{3D5}")); 90898184e3Ssthenok($Collator->lt("\x{3D5}", "\x{3A6}")); 91898184e3Ssthen 92898184e3Ssthen# 24 93898184e3Ssthen 94898184e3Ssthen{ 95898184e3Ssthen my $s; 96898184e3Ssthen my $txt = "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L."; 97898184e3Ssthen 98898184e3Ssthen $Collator->change(ignore_level2 => 0, level => 1); 99898184e3Ssthen 100898184e3Ssthen $s = $txt; 101898184e3Ssthen $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 102898184e3Ssthen ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); 103898184e3Ssthen 104898184e3Ssthen $Collator->change(level => 2); 105898184e3Ssthen 106898184e3Ssthen $s = $txt; 107898184e3Ssthen $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 108898184e3Ssthen ok($s, "=Camel= donkey zebra came\x{301}l =CAMEL= horse =cAm\0E\0L=."); 109898184e3Ssthen 110898184e3Ssthen $Collator->change(level => 3); 111898184e3Ssthen 112898184e3Ssthen $s = $txt; 113898184e3Ssthen $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 114898184e3Ssthen ok($s, "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L."); 115898184e3Ssthen 116898184e3Ssthen $Collator->change(ignore_level2 => 1); 117898184e3Ssthen 118898184e3Ssthen $s = $txt; 119898184e3Ssthen $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 120898184e3Ssthen ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse cAm\0E\0L."); 121898184e3Ssthen 122898184e3Ssthen $Collator->change(level => 2); 123898184e3Ssthen $s = $txt; 124898184e3Ssthen $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 125898184e3Ssthen ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); 126898184e3Ssthen 127898184e3Ssthen $Collator->change(level => 1); 128898184e3Ssthen $s = $txt; 129898184e3Ssthen $Collator->gsubst($s, "camel", sub { "=$_[0]=" }); 130898184e3Ssthen ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=."); 131898184e3Ssthen 132898184e3Ssthen} 133898184e3Ssthen 134898184e3Ssthen# 30 135898184e3Ssthen 136898184e3Ssthen{ 137898184e3Ssthen my $c = Unicode::Collate->new( 138898184e3Ssthen table => 'keys.txt', normalization => undef, level => 1, 139898184e3Ssthen ); 140898184e3Ssthen my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 141898184e3Ssthen $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 142898184e3Ssthen ok($str, "<b>Camel</b> donkey zebra <b>came\x{301}l</b> <b>CAMEL</b> horse <b>cam\0e\0l</b>..."); 143898184e3Ssthen} 144898184e3Ssthen 145898184e3Ssthen{ 146898184e3Ssthen my $c = Unicode::Collate->new( 147898184e3Ssthen table => 'keys.txt', normalization => undef, level => 2, 148898184e3Ssthen ); 149898184e3Ssthen my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 150898184e3Ssthen $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 151898184e3Ssthen ok($str, "<b>Camel</b> donkey zebra came\x{301}l <b>CAMEL</b> horse <b>cam\0e\0l</b>..."); 152898184e3Ssthen} 153898184e3Ssthen 154898184e3Ssthen{ 155898184e3Ssthen my $c = Unicode::Collate->new( 156898184e3Ssthen table => 'keys.txt', normalization => undef, ignore_level2 => 1, 157898184e3Ssthen ); 158898184e3Ssthen my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 159898184e3Ssthen $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 160898184e3Ssthen ok($str, "Camel donkey zebra <b>came\x{301}l</b> CAMEL horse <b>cam\0e\0l</b>..."); 161898184e3Ssthen} 162898184e3Ssthen 163898184e3Ssthen{ 164898184e3Ssthen my $c = Unicode::Collate->new( 165898184e3Ssthen table => 'keys.txt', normalization => undef, level => 3, 166898184e3Ssthen ); 167898184e3Ssthen my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; 168898184e3Ssthen $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); 169898184e3Ssthen ok($str, "Camel donkey zebra came\x{301}l CAMEL horse <b>cam\0e\0l</b>..."); 170898184e3Ssthen} 171898184e3Ssthen 172898184e3Ssthen# 34 173898184e3Ssthen 174898184e3Ssthen{ 175898184e3Ssthen my $str; 176898184e3Ssthen my $camel = "camel Camel came\x{301}l c-a-m-e-l cam\0e\0l"; 177898184e3Ssthen 178898184e3Ssthen $Collator->change(ignore_level2 => 0); 179898184e3Ssthen 180898184e3Ssthen $Collator->change(level => 1); 181898184e3Ssthen $str = $camel; 182898184e3Ssthen $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 183898184e3Ssthen ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 184898184e3Ssthen 185898184e3Ssthen $Collator->change(level => 2); 186898184e3Ssthen $str = $camel; 187898184e3Ssthen $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 188898184e3Ssthen ok($str, "=camel= =Camel= came\x{301}l =c-a-m-e-l= =cam\0e\0l="); 189898184e3Ssthen 190898184e3Ssthen $Collator->change(level => 3); 191898184e3Ssthen $str = $camel; 192898184e3Ssthen $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 193898184e3Ssthen ok($str, "=camel= Camel came\x{301}l =c-a-m-e-l= =cam\0e\0l="); 194898184e3Ssthen 195898184e3Ssthen $Collator->change(level => 4); 196898184e3Ssthen $str = $camel; 197898184e3Ssthen $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 198898184e3Ssthen ok($str, "=camel= Camel came\x{301}l c-a-m-e-l =cam\0e\0l="); 199898184e3Ssthen 200898184e3Ssthen $Collator->change(ignore_level2 => 1); 201898184e3Ssthen 202898184e3Ssthen $Collator->change(level => 1); 203898184e3Ssthen $str = $camel; 204898184e3Ssthen $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 205898184e3Ssthen ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 206898184e3Ssthen 207898184e3Ssthen $Collator->change(level => 2); 208898184e3Ssthen $str = $camel; 209898184e3Ssthen $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 210898184e3Ssthen ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 211898184e3Ssthen 212898184e3Ssthen $Collator->change(level => 3); 213898184e3Ssthen $str = $camel; 214898184e3Ssthen $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 215898184e3Ssthen ok($str, "=camel= Camel =came\x{301}l= =c-a-m-e-l= =cam\0e\0l="); 216898184e3Ssthen 217898184e3Ssthen $Collator->change(level => 4); 218898184e3Ssthen $str = $camel; 219898184e3Ssthen $Collator->gsubst($str, "camel", sub { "=$_[0]=" }); 220898184e3Ssthen ok($str, "=camel= Camel =came\x{301}l= c-a-m-e-l =cam\0e\0l="); 221898184e3Ssthen} 222898184e3Ssthen 223898184e3Ssthen# 42 224898184e3Ssthen 225