From 7ee9c21079cb42039d10f98308389206175fdaa6 Mon Sep 17 00:00:00 2001 From: phpnut Date: Tue, 13 May 2008 21:31:08 +0000 Subject: [PATCH] "Completing test coverage for Multibyte class. Removed case foldings that have no lower case code points." git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@6855 3807eeeb-6ff5-0310-8944-8be069107fe0 --- cake/config/unicode/casefolding/0000_007f.php | 75 --- cake/config/unicode/casefolding/0300_036f.php | 49 -- cake/config/unicode/casefolding/0500_052f.php | 2 - cake/config/unicode/casefolding/0530_058f.php | 1 - .../unicode/casefolding/10400_1044f.php | 88 ---- cake/config/unicode/casefolding/10a0_10ff.php | 86 ---- cake/config/unicode/casefolding/1e00_1eff.php | 14 +- cake/config/unicode/casefolding/fb00_fb4f.php | 60 --- cake/libs/multibyte.php | 328 ++---------- cake/tests/cases/libs/multibyte.test.php | 465 ++++++++++++++++++ 10 files changed, 502 insertions(+), 666 deletions(-) delete mode 100644 cake/config/unicode/casefolding/0000_007f.php delete mode 100644 cake/config/unicode/casefolding/0300_036f.php delete mode 100644 cake/config/unicode/casefolding/10400_1044f.php delete mode 100644 cake/config/unicode/casefolding/10a0_10ff.php delete mode 100644 cake/config/unicode/casefolding/fb00_fb4f.php diff --git a/cake/config/unicode/casefolding/0000_007f.php b/cake/config/unicode/casefolding/0000_007f.php deleted file mode 100644 index f4915a8c8..000000000 --- a/cake/config/unicode/casefolding/0000_007f.php +++ /dev/null @@ -1,75 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.config.unicode.casefolding - * @since CakePHP(tm) v 1.2.0.5691 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * The upper field is the decimal value of the upper case character - * - * The lower filed is an array of the decimal values that form the lower case version of a character. - * - * The status field is: - * C: common case folding, common mappings shared by both simple and full mappings. - * F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. - * S: simple case folding, mappings to single characters where different from F. - * T: special case for uppercase I and dotted uppercase I - * - For non-Turkic languages, this mapping is normally not used. - * - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. - * Note that the Turkic mappings do not maintain canonical equivalence without additional processing. - * See the discussions of case mapping in the Unicode Standard for more information. - */ -$config['0000_007f'][] = array('upper' => 65, 'status' => 'C', 'lower' => array(97)); /* LATIN CAPITAL LETTER A */ -$config['0000_007f'][] = array('upper' => 66, 'status' => 'C', 'lower' => array(98)); /* LATIN CAPITAL LETTER B */ -$config['0000_007f'][] = array('upper' => 67, 'status' => 'C', 'lower' => array(99)); /* LATIN CAPITAL LETTER C */ -$config['0000_007f'][] = array('upper' => 68, 'status' => 'C', 'lower' => array(100)); /* LATIN CAPITAL LETTER D */ -$config['0000_007f'][] = array('upper' => 69, 'status' => 'C', 'lower' => array(101)); /* LATIN CAPITAL LETTER E */ -$config['0000_007f'][] = array('upper' => 70, 'status' => 'C', 'lower' => array(102)); /* LATIN CAPITAL LETTER F */ -$config['0000_007f'][] = array('upper' => 71, 'status' => 'C', 'lower' => array(103)); /* LATIN CAPITAL LETTER G */ -$config['0000_007f'][] = array('upper' => 72, 'status' => 'C', 'lower' => array(104)); /* LATIN CAPITAL LETTER H */ -$config['0000_007f'][] = array('upper' => 73, 'status' => 'C', 'lower' => array(105)); /* LATIN CAPITAL LETTER I */ -$config['0000_007f'][] = array('upper' => 73, 'status' => 'T', 'lower' => array(305)); /* LATIN CAPITAL LETTER I */ -$config['0000_007f'][] = array('upper' => 74, 'status' => 'C', 'lower' => array(106)); /* LATIN CAPITAL LETTER J */ -$config['0000_007f'][] = array('upper' => 75, 'status' => 'C', 'lower' => array(107)); /* LATIN CAPITAL LETTER K */ -$config['0000_007f'][] = array('upper' => 76, 'status' => 'C', 'lower' => array(108)); /* LATIN CAPITAL LETTER L */ -$config['0000_007f'][] = array('upper' => 77, 'status' => 'C', 'lower' => array(109)); /* LATIN CAPITAL LETTER M */ -$config['0000_007f'][] = array('upper' => 78, 'status' => 'C', 'lower' => array(110)); /* LATIN CAPITAL LETTER N */ -$config['0000_007f'][] = array('upper' => 79, 'status' => 'C', 'lower' => array(111)); /* LATIN CAPITAL LETTER O */ -$config['0000_007f'][] = array('upper' => 80, 'status' => 'C', 'lower' => array(112)); /* LATIN CAPITAL LETTER P */ -$config['0000_007f'][] = array('upper' => 81, 'status' => 'C', 'lower' => array(113)); /* LATIN CAPITAL LETTER Q */ -$config['0000_007f'][] = array('upper' => 82, 'status' => 'C', 'lower' => array(114)); /* LATIN CAPITAL LETTER R */ -$config['0000_007f'][] = array('upper' => 83, 'status' => 'C', 'lower' => array(115)); /* LATIN CAPITAL LETTER S */ -$config['0000_007f'][] = array('upper' => 84, 'status' => 'C', 'lower' => array(116)); /* LATIN CAPITAL LETTER T */ -$config['0000_007f'][] = array('upper' => 85, 'status' => 'C', 'lower' => array(117)); /* LATIN CAPITAL LETTER U */ -$config['0000_007f'][] = array('upper' => 86, 'status' => 'C', 'lower' => array(118)); /* LATIN CAPITAL LETTER V */ -$config['0000_007f'][] = array('upper' => 87, 'status' => 'C', 'lower' => array(119)); /* LATIN CAPITAL LETTER W */ -$config['0000_007f'][] = array('upper' => 88, 'status' => 'C', 'lower' => array(120)); /* LATIN CAPITAL LETTER X */ -$config['0000_007f'][] = array('upper' => 89, 'status' => 'C', 'lower' => array(121)); /* LATIN CAPITAL LETTER Y */ -$config['0000_007f'][] = array('upper' => 90, 'status' => 'C', 'lower' => array(122)); /* LATIN CAPITAL LETTER Z */ -?> \ No newline at end of file diff --git a/cake/config/unicode/casefolding/0300_036f.php b/cake/config/unicode/casefolding/0300_036f.php deleted file mode 100644 index 524a0c12f..000000000 --- a/cake/config/unicode/casefolding/0300_036f.php +++ /dev/null @@ -1,49 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.config.unicode.casefolding - * @since CakePHP(tm) v 1.2.0.5691 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * The upper field is the decimal value of the upper case character - * - * The lower filed is an array of the decimal values that form the lower case version of a character. - * - * The status field is: - * C: common case folding, common mappings shared by both simple and full mappings. - * F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. - * S: simple case folding, mappings to single characters where different from F. - * T: special case for uppercase I and dotted uppercase I - * - For non-Turkic languages, this mapping is normally not used. - * - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. - * Note that the Turkic mappings do not maintain canonical equivalence without additional processing. - * See the discussions of case mapping in the Unicode Standard for more information. - */ -$config['0300_036f'][] = array('upper' => 837, 'status' => 'C', 'lower' => array(953)); /* COMBINING GREEK YPOGEGRAMMENI */ -?> \ No newline at end of file diff --git a/cake/config/unicode/casefolding/0500_052f.php b/cake/config/unicode/casefolding/0500_052f.php index a4f6747a2..1c8455f55 100644 --- a/cake/config/unicode/casefolding/0500_052f.php +++ b/cake/config/unicode/casefolding/0500_052f.php @@ -53,6 +53,4 @@ $config['0500_052f'][] = array('upper' => 1288, 'status' => 'C', 'lower' => arra $config['0500_052f'][] = array('upper' => 1290, 'status' => 'C', 'lower' => array(1291)); /* CYRILLIC CAPITAL LETTER KOMI NJE */ $config['0500_052f'][] = array('upper' => 1292, 'status' => 'C', 'lower' => array(1293)); /* CYRILLIC CAPITAL LETTER KOMI SJE */ $config['0500_052f'][] = array('upper' => 1294, 'status' => 'C', 'lower' => array(1295)); /* CYRILLIC CAPITAL LETTER KOMI TJE */ -$config['0500_052f'][] = array('upper' => 1296, 'status' => 'C', 'lower' => array(1297)); /* CYRILLIC CAPITAL LETTER REVERSED ZE */ -$config['0500_052f'][] = array('upper' => 1298, 'status' => 'C', 'lower' => array(1299)); /* CYRILLIC CAPITAL LETTER EL WITH HOOK */ ?> \ No newline at end of file diff --git a/cake/config/unicode/casefolding/0530_058f.php b/cake/config/unicode/casefolding/0530_058f.php index 96e767dc2..9d5e18048 100644 --- a/cake/config/unicode/casefolding/0530_058f.php +++ b/cake/config/unicode/casefolding/0530_058f.php @@ -83,5 +83,4 @@ $config['0530_058f'][] = array('upper' => 1363, 'status' => 'C', 'lower' => arra $config['0530_058f'][] = array('upper' => 1364, 'status' => 'C', 'lower' => array(1412)); /* ARMENIAN CAPITAL LETTER KEH */ $config['0530_058f'][] = array('upper' => 1365, 'status' => 'C', 'lower' => array(1413)); /* ARMENIAN CAPITAL LETTER OH */ $config['0530_058f'][] = array('upper' => 1366, 'status' => 'C', 'lower' => array(1414)); /* ARMENIAN CAPITAL LETTER FEH */ -$config['0530_058f'][] = array('upper' => 1415, 'status' => 'F', 'lower' => array(1381, 1410)); /* ARMENIAN SMALL LIGATURE ECH YIWN */ ?> \ No newline at end of file diff --git a/cake/config/unicode/casefolding/10400_1044f.php b/cake/config/unicode/casefolding/10400_1044f.php deleted file mode 100644 index 7e34bbf81..000000000 --- a/cake/config/unicode/casefolding/10400_1044f.php +++ /dev/null @@ -1,88 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.config.unicode.casefolding - * @since CakePHP(tm) v 1.2.0.5691 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * The upper field is the decimal value of the upper case character - * - * The lower filed is an array of the decimal values that form the lower case version of a character. - * - * The status field is: - * C: common case folding, common mappings shared by both simple and full mappings. - * F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. - * S: simple case folding, mappings to single characters where different from F. - * T: special case for uppercase I and dotted uppercase I - * - For non-Turkic languages, this mapping is normally not used. - * - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. - * Note that the Turkic mappings do not maintain canonical equivalence without additional processing. - * See the discussions of case mapping in the Unicode Standard for more information. - */ -$config['10400_1044f'][] = array('upper' => 66560, 'status' => 'C', 'lower' => array(66600)); /* DESERET CAPITAL LETTER LONG I */ -$config['10400_1044f'][] = array('upper' => 66561, 'status' => 'C', 'lower' => array(66601)); /* DESERET CAPITAL LETTER LONG E */ -$config['10400_1044f'][] = array('upper' => 66562, 'status' => 'C', 'lower' => array(66602)); /* DESERET CAPITAL LETTER LONG A */ -$config['10400_1044f'][] = array('upper' => 66563, 'status' => 'C', 'lower' => array(66603)); /* DESERET CAPITAL LETTER LONG AH */ -$config['10400_1044f'][] = array('upper' => 66564, 'status' => 'C', 'lower' => array(66604)); /* DESERET CAPITAL LETTER LONG O */ -$config['10400_1044f'][] = array('upper' => 66565, 'status' => 'C', 'lower' => array(66605)); /* DESERET CAPITAL LETTER LONG OO */ -$config['10400_1044f'][] = array('upper' => 66566, 'status' => 'C', 'lower' => array(66606)); /* DESERET CAPITAL LETTER SHORT I */ -$config['10400_1044f'][] = array('upper' => 66567, 'status' => 'C', 'lower' => array(66607)); /* DESERET CAPITAL LETTER SHORT E */ -$config['10400_1044f'][] = array('upper' => 66568, 'status' => 'C', 'lower' => array(66608)); /* DESERET CAPITAL LETTER SHORT A */ -$config['10400_1044f'][] = array('upper' => 66569, 'status' => 'C', 'lower' => array(66609)); /* DESERET CAPITAL LETTER SHORT AH */ -$config['10400_1044f'][] = array('upper' => 66570, 'status' => 'C', 'lower' => array(66610)); /* DESERET CAPITAL LETTER SHORT O */ -$config['10400_1044f'][] = array('upper' => 66571, 'status' => 'C', 'lower' => array(66611)); /* DESERET CAPITAL LETTER SHORT OO */ -$config['10400_1044f'][] = array('upper' => 66572, 'status' => 'C', 'lower' => array(66612)); /* DESERET CAPITAL LETTER AY */ -$config['10400_1044f'][] = array('upper' => 66573, 'status' => 'C', 'lower' => array(66613)); /* DESERET CAPITAL LETTER OW */ -$config['10400_1044f'][] = array('upper' => 66574, 'status' => 'C', 'lower' => array(66614)); /* DESERET CAPITAL LETTER WU */ -$config['10400_1044f'][] = array('upper' => 66575, 'status' => 'C', 'lower' => array(66615)); /* DESERET CAPITAL LETTER YEE */ -$config['10400_1044f'][] = array('upper' => 66576, 'status' => 'C', 'lower' => array(66616)); /* DESERET CAPITAL LETTER H */ -$config['10400_1044f'][] = array('upper' => 66577, 'status' => 'C', 'lower' => array(66617)); /* DESERET CAPITAL LETTER PEE */ -$config['10400_1044f'][] = array('upper' => 66578, 'status' => 'C', 'lower' => array(66618)); /* DESERET CAPITAL LETTER BEE */ -$config['10400_1044f'][] = array('upper' => 66579, 'status' => 'C', 'lower' => array(66619)); /* DESERET CAPITAL LETTER TEE */ -$config['10400_1044f'][] = array('upper' => 66580, 'status' => 'C', 'lower' => array(66620)); /* DESERET CAPITAL LETTER DEE */ -$config['10400_1044f'][] = array('upper' => 66581, 'status' => 'C', 'lower' => array(66621)); /* DESERET CAPITAL LETTER CHEE */ -$config['10400_1044f'][] = array('upper' => 66582, 'status' => 'C', 'lower' => array(66622)); /* DESERET CAPITAL LETTER JEE */ -$config['10400_1044f'][] = array('upper' => 66583, 'status' => 'C', 'lower' => array(66623)); /* DESERET CAPITAL LETTER KAY */ -$config['10400_1044f'][] = array('upper' => 66584, 'status' => 'C', 'lower' => array(66624)); /* DESERET CAPITAL LETTER GAY */ -$config['10400_1044f'][] = array('upper' => 66585, 'status' => 'C', 'lower' => array(66625)); /* DESERET CAPITAL LETTER EF */ -$config['10400_1044f'][] = array('upper' => 66586, 'status' => 'C', 'lower' => array(66626)); /* DESERET CAPITAL LETTER VEE */ -$config['10400_1044f'][] = array('upper' => 66587, 'status' => 'C', 'lower' => array(66627)); /* DESERET CAPITAL LETTER ETH */ -$config['10400_1044f'][] = array('upper' => 66588, 'status' => 'C', 'lower' => array(66628)); /* DESERET CAPITAL LETTER THEE */ -$config['10400_1044f'][] = array('upper' => 66589, 'status' => 'C', 'lower' => array(66629)); /* DESERET CAPITAL LETTER ES */ -$config['10400_1044f'][] = array('upper' => 66590, 'status' => 'C', 'lower' => array(66630)); /* DESERET CAPITAL LETTER ZEE */ -$config['10400_1044f'][] = array('upper' => 66591, 'status' => 'C', 'lower' => array(66631)); /* DESERET CAPITAL LETTER ESH */ -$config['10400_1044f'][] = array('upper' => 66592, 'status' => 'C', 'lower' => array(66632)); /* DESERET CAPITAL LETTER ZHEE */ -$config['10400_1044f'][] = array('upper' => 66593, 'status' => 'C', 'lower' => array(66633)); /* DESERET CAPITAL LETTER ER */ -$config['10400_1044f'][] = array('upper' => 66594, 'status' => 'C', 'lower' => array(66634)); /* DESERET CAPITAL LETTER EL */ -$config['10400_1044f'][] = array('upper' => 66595, 'status' => 'C', 'lower' => array(66635)); /* DESERET CAPITAL LETTER EM */ -$config['10400_1044f'][] = array('upper' => 66596, 'status' => 'C', 'lower' => array(66636)); /* DESERET CAPITAL LETTER EN */ -$config['10400_1044f'][] = array('upper' => 66597, 'status' => 'C', 'lower' => array(66637)); /* DESERET CAPITAL LETTER ENG */ -$config['10400_1044f'][] = array('upper' => 66598, 'status' => 'C', 'lower' => array(66638)); /* DESERET CAPITAL LETTER OI */ -$config['10400_1044f'][] = array('upper' => 66599, 'status' => 'C', 'lower' => array(66639)); /* DESERET CAPITAL LETTER EW */ -?> \ No newline at end of file diff --git a/cake/config/unicode/casefolding/10a0_10ff.php b/cake/config/unicode/casefolding/10a0_10ff.php deleted file mode 100644 index cc6e6b433..000000000 --- a/cake/config/unicode/casefolding/10a0_10ff.php +++ /dev/null @@ -1,86 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.config.unicode.casefolding - * @since CakePHP(tm) v 1.2.0.5691 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * The upper field is the decimal value of the upper case character - * - * The lower filed is an array of the decimal values that form the lower case version of a character. - * - * The status field is: - * C: common case folding, common mappings shared by both simple and full mappings. - * F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. - * S: simple case folding, mappings to single characters where different from F. - * T: special case for uppercase I and dotted uppercase I - * - For non-Turkic languages, this mapping is normally not used. - * - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. - * Note that the Turkic mappings do not maintain canonical equivalence without additional processing. - * See the discussions of case mapping in the Unicode Standard for more information. - */ -$config['10a0_10ff'][] = array('upper' => 4256, 'status' => 'C', 'lower' => array(11520)); /* GEORGIAN CAPITAL LETTER AN */ -$config['10a0_10ff'][] = array('upper' => 4257, 'status' => 'C', 'lower' => array(11521)); /* GEORGIAN CAPITAL LETTER BAN */ -$config['10a0_10ff'][] = array('upper' => 4258, 'status' => 'C', 'lower' => array(11522)); /* GEORGIAN CAPITAL LETTER GAN */ -$config['10a0_10ff'][] = array('upper' => 4259, 'status' => 'C', 'lower' => array(11523)); /* GEORGIAN CAPITAL LETTER DON */ -$config['10a0_10ff'][] = array('upper' => 4260, 'status' => 'C', 'lower' => array(11524)); /* GEORGIAN CAPITAL LETTER EN */ -$config['10a0_10ff'][] = array('upper' => 4261, 'status' => 'C', 'lower' => array(11525)); /* GEORGIAN CAPITAL LETTER VIN */ -$config['10a0_10ff'][] = array('upper' => 4262, 'status' => 'C', 'lower' => array(11526)); /* GEORGIAN CAPITAL LETTER ZEN */ -$config['10a0_10ff'][] = array('upper' => 4263, 'status' => 'C', 'lower' => array(11527)); /* GEORGIAN CAPITAL LETTER TAN */ -$config['10a0_10ff'][] = array('upper' => 4264, 'status' => 'C', 'lower' => array(11528)); /* GEORGIAN CAPITAL LETTER IN */ -$config['10a0_10ff'][] = array('upper' => 4265, 'status' => 'C', 'lower' => array(11529)); /* GEORGIAN CAPITAL LETTER KAN */ -$config['10a0_10ff'][] = array('upper' => 4266, 'status' => 'C', 'lower' => array(11530)); /* GEORGIAN CAPITAL LETTER LAS */ -$config['10a0_10ff'][] = array('upper' => 4267, 'status' => 'C', 'lower' => array(11531)); /* GEORGIAN CAPITAL LETTER MAN */ -$config['10a0_10ff'][] = array('upper' => 4268, 'status' => 'C', 'lower' => array(11532)); /* GEORGIAN CAPITAL LETTER NAR */ -$config['10a0_10ff'][] = array('upper' => 4269, 'status' => 'C', 'lower' => array(11533)); /* GEORGIAN CAPITAL LETTER ON */ -$config['10a0_10ff'][] = array('upper' => 4270, 'status' => 'C', 'lower' => array(11534)); /* GEORGIAN CAPITAL LETTER PAR */ -$config['10a0_10ff'][] = array('upper' => 4271, 'status' => 'C', 'lower' => array(11535)); /* GEORGIAN CAPITAL LETTER ZHAR */ -$config['10a0_10ff'][] = array('upper' => 4272, 'status' => 'C', 'lower' => array(11536)); /* GEORGIAN CAPITAL LETTER RAE */ -$config['10a0_10ff'][] = array('upper' => 4273, 'status' => 'C', 'lower' => array(11537)); /* GEORGIAN CAPITAL LETTER SAN */ -$config['10a0_10ff'][] = array('upper' => 4274, 'status' => 'C', 'lower' => array(11538)); /* GEORGIAN CAPITAL LETTER TAR */ -$config['10a0_10ff'][] = array('upper' => 4275, 'status' => 'C', 'lower' => array(11539)); /* GEORGIAN CAPITAL LETTER UN */ -$config['10a0_10ff'][] = array('upper' => 4276, 'status' => 'C', 'lower' => array(11540)); /* GEORGIAN CAPITAL LETTER PHAR */ -$config['10a0_10ff'][] = array('upper' => 4277, 'status' => 'C', 'lower' => array(11541)); /* GEORGIAN CAPITAL LETTER KHAR */ -$config['10a0_10ff'][] = array('upper' => 4278, 'status' => 'C', 'lower' => array(11542)); /* GEORGIAN CAPITAL LETTER GHAN */ -$config['10a0_10ff'][] = array('upper' => 4279, 'status' => 'C', 'lower' => array(11543)); /* GEORGIAN CAPITAL LETTER QAR */ -$config['10a0_10ff'][] = array('upper' => 4280, 'status' => 'C', 'lower' => array(11544)); /* GEORGIAN CAPITAL LETTER SHIN */ -$config['10a0_10ff'][] = array('upper' => 4281, 'status' => 'C', 'lower' => array(11545)); /* GEORGIAN CAPITAL LETTER CHIN */ -$config['10a0_10ff'][] = array('upper' => 4282, 'status' => 'C', 'lower' => array(11546)); /* GEORGIAN CAPITAL LETTER CAN */ -$config['10a0_10ff'][] = array('upper' => 4283, 'status' => 'C', 'lower' => array(11547)); /* GEORGIAN CAPITAL LETTER JIL */ -$config['10a0_10ff'][] = array('upper' => 4284, 'status' => 'C', 'lower' => array(11548)); /* GEORGIAN CAPITAL LETTER CIL */ -$config['10a0_10ff'][] = array('upper' => 4285, 'status' => 'C', 'lower' => array(11549)); /* GEORGIAN CAPITAL LETTER CHAR */ -$config['10a0_10ff'][] = array('upper' => 4286, 'status' => 'C', 'lower' => array(11550)); /* GEORGIAN CAPITAL LETTER XAN */ -$config['10a0_10ff'][] = array('upper' => 4287, 'status' => 'C', 'lower' => array(11551)); /* GEORGIAN CAPITAL LETTER JHAN */ -$config['10a0_10ff'][] = array('upper' => 4288, 'status' => 'C', 'lower' => array(11552)); /* GEORGIAN CAPITAL LETTER HAE */ -$config['10a0_10ff'][] = array('upper' => 4289, 'status' => 'C', 'lower' => array(11553)); /* GEORGIAN CAPITAL LETTER HE */ -$config['10a0_10ff'][] = array('upper' => 4290, 'status' => 'C', 'lower' => array(11554)); /* GEORGIAN CAPITAL LETTER HIE */ -$config['10a0_10ff'][] = array('upper' => 4291, 'status' => 'C', 'lower' => array(11555)); /* GEORGIAN CAPITAL LETTER WE */ -$config['10a0_10ff'][] = array('upper' => 4292, 'status' => 'C', 'lower' => array(11556)); /* GEORGIAN CAPITAL LETTER HAR */ -$config['10a0_10ff'][] = array('upper' => 4293, 'status' => 'C', 'lower' => array(11557)); /* GEORGIAN CAPITAL LETTER HOE */ -?> \ No newline at end of file diff --git a/cake/config/unicode/casefolding/1e00_1eff.php b/cake/config/unicode/casefolding/1e00_1eff.php index 4390efd96..a6fbd0642 100644 --- a/cake/config/unicode/casefolding/1e00_1eff.php +++ b/cake/config/unicode/casefolding/1e00_1eff.php @@ -120,12 +120,14 @@ $config['1e00_1eff'][] = array('upper' => 7822, 'status' => 'C', 'lower' => arra $config['1e00_1eff'][] = array('upper' => 7824, 'status' => 'C', 'lower' => array(7825)); /* LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */ $config['1e00_1eff'][] = array('upper' => 7826, 'status' => 'C', 'lower' => array(7827)); /* LATIN CAPITAL LETTER Z WITH DOT BELOW */ $config['1e00_1eff'][] = array('upper' => 7828, 'status' => 'C', 'lower' => array(7829)); /* LATIN CAPITAL LETTER Z WITH LINE BELOW */ -$config['1e00_1eff'][] = array('upper' => 7830, 'status' => 'F', 'lower' => array(104, 817)); /* LATIN SMALL LETTER H WITH LINE BELOW */ -$config['1e00_1eff'][] = array('upper' => 7831, 'status' => 'F', 'lower' => array(116, 776)); /* LATIN SMALL LETTER T WITH DIAERESIS */ -$config['1e00_1eff'][] = array('upper' => 7832, 'status' => 'F', 'lower' => array(119, 778)); /* LATIN SMALL LETTER W WITH RING ABOVE */ -$config['1e00_1eff'][] = array('upper' => 7833, 'status' => 'F', 'lower' => array(121, 778)); /* LATIN SMALL LETTER Y WITH RING ABOVE */ -$config['1e00_1eff'][] = array('upper' => 7834, 'status' => 'F', 'lower' => array(97, 702)); /* LATIN SMALL LETTER A WITH RIGHT HALF RING */ -$config['1e00_1eff'][] = array('upper' => 7835, 'status' => 'C', 'lower' => array(7777)); /* LATIN SMALL LETTER LONG S WITH DOT ABOVE */ + +//$config['1e00_1eff'][] = array('upper' => 7830, 'status' => 'F', 'lower' => array(104, 817)); /* LATIN SMALL LETTER H WITH LINE BELOW */ +//$config['1e00_1eff'][] = array('upper' => 7831, 'status' => 'F', 'lower' => array(116, 776)); /* LATIN SMALL LETTER T WITH DIAERESIS */ +//$config['1e00_1eff'][] = array('upper' => 7832, 'status' => 'F', 'lower' => array(119, 778)); /* LATIN SMALL LETTER W WITH RING ABOVE */ +//$config['1e00_1eff'][] = array('upper' => 7833, 'status' => 'F', 'lower' => array(121, 778)); /* LATIN SMALL LETTER Y WITH RING ABOVE */ +//$config['1e00_1eff'][] = array('upper' => 7834, 'status' => 'F', 'lower' => array(97, 702)); /* LATIN SMALL LETTER A WITH RIGHT HALF RING */ +//$config['1e00_1eff'][] = array('upper' => 7835, 'status' => 'C', 'lower' => array(7777)); /* LATIN SMALL LETTER LONG S WITH DOT ABOVE */ + $config['1e00_1eff'][] = array('upper' => 7840, 'status' => 'C', 'lower' => array(7841)); /* LATIN CAPITAL LETTER A WITH DOT BELOW */ $config['1e00_1eff'][] = array('upper' => 7842, 'status' => 'C', 'lower' => array(7843)); /* LATIN CAPITAL LETTER A WITH HOOK ABOVE */ $config['1e00_1eff'][] = array('upper' => 7844, 'status' => 'C', 'lower' => array(7845)); /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */ diff --git a/cake/config/unicode/casefolding/fb00_fb4f.php b/cake/config/unicode/casefolding/fb00_fb4f.php deleted file mode 100644 index 8a9f531ef..000000000 --- a/cake/config/unicode/casefolding/fb00_fb4f.php +++ /dev/null @@ -1,60 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.config.unicode.casefolding - * @since CakePHP(tm) v 1.2.0.5691 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * The upper field is the decimal value of the upper case character - * - * The lower filed is an array of the decimal values that form the lower case version of a character. - * - * The status field is: - * C: common case folding, common mappings shared by both simple and full mappings. - * F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. - * S: simple case folding, mappings to single characters where different from F. - * T: special case for uppercase I and dotted uppercase I - * - For non-Turkic languages, this mapping is normally not used. - * - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. - * Note that the Turkic mappings do not maintain canonical equivalence without additional processing. - * See the discussions of case mapping in the Unicode Standard for more information. - */ -$config['fb00_fb4f'][] = array('upper' => 64256, 'status' => 'F', 'lower' => array(102, 102)); /* LATIN SMALL LIGATURE FF */ -$config['fb00_fb4f'][] = array('upper' => 64257, 'status' => 'F', 'lower' => array(102, 105)); /* LATIN SMALL LIGATURE FI */ -$config['fb00_fb4f'][] = array('upper' => 64258, 'status' => 'F', 'lower' => array(102, 108)); /* LATIN SMALL LIGATURE FL */ -$config['fb00_fb4f'][] = array('upper' => 64259, 'status' => 'F', 'lower' => array(102, 102, 105)); /* LATIN SMALL LIGATURE FFI */ -$config['fb00_fb4f'][] = array('upper' => 64260, 'status' => 'F', 'lower' => array(102, 102, 108)); /* LATIN SMALL LIGATURE FFL */ -$config['fb00_fb4f'][] = array('upper' => 64261, 'status' => 'F', 'lower' => array(115, 116)); /* LATIN SMALL LIGATURE LONG S T */ -$config['fb00_fb4f'][] = array('upper' => 64262, 'status' => 'F', 'lower' => array(115, 116)); /* LATIN SMALL LIGATURE ST */ -$config['fb00_fb4f'][] = array('upper' => 64275, 'status' => 'F', 'lower' => array(1396, 1398)); /* ARMENIAN SMALL LIGATURE MEN NOW */ -$config['fb00_fb4f'][] = array('upper' => 64276, 'status' => 'F', 'lower' => array(1396, 1381)); /* ARMENIAN SMALL LIGATURE MEN ECH */ -$config['fb00_fb4f'][] = array('upper' => 64277, 'status' => 'F', 'lower' => array(1396, 1387)); /* ARMENIAN SMALL LIGATURE MEN INI */ -$config['fb00_fb4f'][] = array('upper' => 64278, 'status' => 'F', 'lower' => array(1406, 1398)); /* ARMENIAN SMALL LIGATURE VEW NOW */ -$config['fb00_fb4f'][] = array('upper' => 64279, 'status' => 'F', 'lower' => array(1396, 1389)); /* ARMENIAN SMALL LIGATURE MEN XEH */ -?> \ No newline at end of file diff --git a/cake/libs/multibyte.php b/cake/libs/multibyte.php index 28cf96331..3ced62a94 100644 --- a/cake/libs/multibyte.php +++ b/cake/libs/multibyte.php @@ -972,314 +972,40 @@ class Multibyte extends Object { function __codepoint ($decimal) { $_this =& Multibyte::getInstance(); - if ($decimal < 128) { - $return = '0000_007f'; // Basic Latin - } elseif ($decimal < 256) { - $return = '0080_00ff'; // Latin-1 Supplement + if ($decimal > 128 && $decimal < 256) { + $return = '0080_00ff'; // Latin-1 Supplement } elseif ($decimal < 384) { - $return = '0100_017f'; // Latin Extended-A + $return = '0100_017f'; // Latin Extended-A } elseif ($decimal < 592) { - $return = '0180_024F'; // Latin Extended-B + $return = '0180_024F'; // Latin Extended-B } elseif ($decimal < 688) { - $return = '0250_02af'; // IPA Extensions - } elseif ($decimal < 768) { - $return = '02b0_02ff'; // Spacing Modifier Letters - } elseif ($decimal < 880) { - $return = '0300_036f'; // Combining Diacritical Marks - } elseif ($decimal < 1024) { - $return = '0370_03ff'; // Greek and Coptic + $return = '0250_02af'; // IPA Extensions + } elseif ($decimal >= 880 && $decimal < 1024) { + $return = '0370_03ff'; // Greek and Coptic } elseif ($decimal < 1280) { - $return = '0400_04ff'; // Cyrillic + $return = '0400_04ff'; // Cyrillic } elseif ($decimal < 1328) { - $return = '0500_052f'; // Cyrillic Supplement + $return = '0500_052f'; // Cyrillic Supplement } elseif ($decimal < 1424) { - $return = '0530_058f'; // Armenian - } elseif ($decimal < 1536) { - $return = '0590_05ff'; // Hebrew - } elseif ($decimal < 1792) { - $return = '0600_06ff'; // Arabic - } elseif ($decimal < 1872) { - $return = '0700_074f'; // Syriac - } elseif ($decimal < 1920) { - $return = '0750_077f'; // Arabic Supplement - } elseif ($decimal < 1984) { - $return = '0780_07bf'; // Thaana - } elseif ($decimal < 2304) { - $return = '07c0_07ff'; // NKo - } elseif ($decimal < 2432) { - $return = '0900_097f'; // Devanagari - } elseif ($decimal < 2560) { - $return = '0980_09ff'; // Bengali - } elseif ($decimal < 2688) { - $return = '0a00_0a7f'; // Gurmukhi - } elseif ($decimal < 2816) { - $return = '0a80_0aff'; // Gujarati - } elseif ($decimal < 2944) { - $return = '0b00_0b7f'; // Oriya - } elseif ($decimal < 3072) { - $return = '0b80_0bff'; // Tamil - } elseif ($decimal < 3200) { - $return = '0c00_0c7f'; // Telugu - } elseif ($decimal < 3328) { - $return = '0c80_0cff'; // Kannada - } elseif ($decimal < 3456) { - $return = '0d00_0d7f'; // Malayalam - } elseif ($decimal < 3584) { - $return = '0d80_0dff'; // Sinhala - } elseif ($decimal < 3712) { - $return = '0e00_0e7f'; // Thai - } elseif ($decimal < 3840) { - $return = '0e80_0eff'; // Lao - } elseif ($decimal < 4096) { - $return = '0f00_0fff'; // Tibetan - } elseif ($decimal < 4256) { - $return = '1000_109f'; // Myanmar - } elseif ($decimal < 4352) { - $return = '10a0_10ff'; // Georgian - } elseif ($decimal < 4608) { - $return = '1100_11ff'; // Hangul Jamo - } elseif ($decimal < 4992) { - $return = '1200_137f'; // Ethiopic - } elseif ($decimal < 5024) { - $return = '1380_139f'; // Ethiopic Supplement - } elseif ($decimal < 5120) { - $return = '13a0_13ff'; // Cherokee - } elseif ($decimal < 5760) { - $return = '1400_167f'; // Unified Canadian Aboriginal Syllabics - } elseif ($decimal < 5792) { - $return = '1680_169f'; // Ogham - } elseif ($decimal < 5888) { - $return = '16a0_16ff'; // Runic - } elseif ($decimal < 5920) { - $return = '1700_171f'; // Tagalog - } elseif ($decimal < 5952) { - $return = '1720_173f'; // Hanunoo - } elseif ($decimal < 5984) { - $return = '1740_175f'; // Buhid - } elseif ($decimal < 6016) { - $return = '1760_177f'; // Tagbanwa - } elseif ($decimal < 6144) { - $return = '1780_17ff'; // Khmer - } elseif ($decimal < 6400) { - $return = '1800_18af'; // Mongolian - } elseif ($decimal < 6480) { - $return = '1900_194f'; // Limbu - } elseif ($decimal < 6528) { - $return = '1950_197f'; // Tai Le - } elseif ($decimal < 6624) { - $return = '1980_19df'; // New Tai Lue - } elseif ($decimal < 6656) { - $return = '19e0_19ff'; // Khmer Symbols - } elseif ($decimal < 6912) { - $return = '1a00_1a1f'; // Buginese - } elseif ($decimal < 7424) { - $return = '1b00_1b7f'; // Balinese - } elseif ($decimal < 7552) { - $return = '1d00_1d7f'; // Phonetic Extensions - } elseif ($decimal < 7616) { - $return = '1d80_1dbf'; // Phonetic Extensions Supplement - } elseif ($decimal < 7680) { - $return = '1dc0_1dff'; // Combining Diacritical Marks Supplement - } elseif ($decimal < 7936) { - $return = '1e00_1eff'; // Latin Extended Additional + $return = '0530_058f'; // Armenian + } elseif ($decimal >= 7680 && $decimal < 7936) { + $return = '1e00_1eff'; // Latin Extended Additional } elseif ($decimal < 8192) { - $return = '1f00_1fff'; // Greek Extended - } elseif ($decimal < 8304) { - $return = '2000_206f'; // General Punctuation - } elseif ($decimal < 8352) { - $return = '2070_209f'; // Superscripts and Subscripts - } elseif ($decimal < 8400) { - $return = '20a0_20cf'; // Currency Symbols - } elseif ($decimal < 8448) { - $return = '20d0_20ff'; // Combining Diacritical Marks for Symbols - } elseif ($decimal < 8528) { - $return = '2100_214f'; // Letterlike Symbols + $return = '1f00_1fff'; // Greek Extended + } elseif ($decimal >= 8448 && $decimal < 8528) { + $return = '2100_214f'; // Letterlike Symbols } elseif ($decimal < 8592) { - $return = '2150_218f'; // Number Forms - } elseif ($decimal < 8704) { - $return = '2190_21ff'; // Arrows - } elseif ($decimal < 8960) { - $return = '2200_22ff'; // Mathematical Operators - } elseif ($decimal < 9216) { - $return = '2300_23ff'; // Miscellaneous Technical - } elseif ($decimal < 9280) { - $return = '2400_243f'; // Control Pictures - } elseif ($decimal < 9312) { - $return = '2440_245f'; // Optical Character Recognition - } elseif ($decimal < 9472) { - $return = '2460_24ff'; // Enclosed Alphanumerics - } elseif ($decimal < 9600) { - $return = '2500_257f'; // Box Drawing - } elseif ($decimal < 9632) { - $return = '2580_259f'; // Block Elements - } elseif ($decimal < 9728) { - $return = '25a0_25ff'; // Geometric Shapes - } elseif ($decimal < 9984) { - $return = '2600_26ff'; // Miscellaneous Symbols - } elseif ($decimal < 10176) { - $return = '2700_27bf'; // Dingbats - } elseif ($decimal < 10224) { - $return = '27c0_27ef'; // Miscellaneous Mathematical Symbols-A - } elseif ($decimal < 10240) { - $return = '27f0_27ff'; // Supplemental Arrows-A - } elseif ($decimal < 10496) { - $return = '2800_28ff'; // Braille Patterns - } elseif ($decimal < 10624) { - $return = '2900_297f'; // Supplemental Arrows-B - } elseif ($decimal < 10752) { - $return = '2980_29ff'; // Miscellaneous Mathematical Symbols-B - } elseif ($decimal < 11008) { - $return = '2a00_2aff'; // Supplemental Mathematical Operators - } elseif ($decimal < 11264) { - $return = '2b00_2bff'; // Miscellaneous Symbols and Arrows - } elseif ($decimal < 11360) { - $return = '2c00_2c5f'; // Glagolitic + $return = '2150_218f'; // Number Forms + } elseif ($decimal >= 9312 && $decimal < 9472) { + $return = '2460_24ff'; // Enclosed Alphanumerics + } elseif ($decimal >= 11264 && $decimal < 11360) { + $return = '2c00_2c5f'; // Glagolitic } elseif ($decimal < 11392) { - $return = '2c60_2c7f'; // Latin Extended-C + $return = '2c60_2c7f'; // Latin Extended-C } elseif ($decimal < 11520) { - $return = '2c80_2cff'; // Coptic - } elseif ($decimal < 11568) { - $return = '2d00_2d2f'; // Georgian Supplement - } elseif ($decimal < 11648) { - $return = '2d30_2d7f'; // Tifinagh - } elseif ($decimal < 11776) { - $return = '2d80_2ddf'; // Ethiopic Extended - } elseif ($decimal < 11904) { - $return = '2e00_2e7f'; // Supplemental Punctuation - } elseif ($decimal < 12032) { - $return = '2e80_2eff'; // CJK Radicals Supplement - } elseif ($decimal < 12272) { - $return = '2f00_2fdf'; // Kangxi Radicals - } elseif ($decimal < 12288) { - $return = '2ff0_2fff'; // Ideographic Description Characters - } elseif ($decimal < 12352) { - $return = '3000_303f'; // CJK Symbols and Punctuation - } elseif ($decimal < 12448) { - $return = '3040_309f'; // Hiragana - } elseif ($decimal < 12544) { - $return = '30a0_30ff'; // Katakana - } elseif ($decimal < 12592) { - $return = '3100_312f'; // Bopomofo - } elseif ($decimal < 12688) { - $return = '3130_318f'; // Hangul Compatibility Jamo - } elseif ($decimal < 12704) { - $return = '3190_319f'; // Kanbun - } elseif ($decimal < 12736) { - $return = '31a0_31bf'; // Bopomofo Extended - } elseif ($decimal < 12784) { - $return = '31c0_31ef'; // CJK Strokes - } elseif ($decimal < 12800) { - $return = '31f0_31ff'; // Katakana Phonetic Extensions - } elseif ($decimal < 13056) { - $return = '3200_32ff'; // Enclosed CJK Letters and Months - } elseif ($decimal < 13312) { - $return = '3300_33ff'; // CJK Compatibility - } elseif ($decimal < 19904) { - $return = '3400_4dbf'; // CJK Unified Ideographs Extension A - } elseif ($decimal < 19968) { - $return = '4dc0_4dff'; // Yijing Hexagram Symbols - } elseif ($decimal < 40960) { - $return = '4e00_9fff'; // CJK Unified Ideographs - } elseif ($decimal < 42128) { - $return = 'a000_a48f'; // Yi Syllables - } elseif ($decimal < 42752) { - $return = 'a490_a4cf'; // Yi Radicals - } elseif ($decimal < 42784) { - $return = 'a700_a71f'; // Modifier Tone Letters - } elseif ($decimal < 43008) { - $return = 'a720_a7ff'; // Latin Extended-D - } elseif ($decimal < 43072) { - $return = 'a800_a82f'; // Syloti Nagri - } elseif ($decimal < 44032) { - $return = 'a840_a87f'; // Phags-pa - } elseif ($decimal < 55296) { - $return = 'ac00_d7af'; // Hangul Syllables - } elseif ($decimal < 56192) { - $return = 'd800_db7f'; // High Surrogates - } elseif ($decimal < 56320) { - $return = 'db80_dbff'; // High Private Use Surrogates - } elseif ($decimal < 57344) { - $return = 'dc00_dfff'; // Low Surrogates - } elseif ($decimal < 63744) { - $return = 'e000_f8ff'; // Private Use Area - } elseif ($decimal < 64256) { - $return = 'f900_faff'; // CJK Compatibility Ideographs - } elseif ($decimal < 64336) { - $return = 'fb00_fb4f'; // Alphabetic Presentation Forms - } elseif ($decimal < 65024) { - $return = 'fb50_fdff'; // Arabic Presentation Forms-A - } elseif ($decimal < 65040) { - $return = 'fe00_fe0f'; // Variation Selectors - } elseif ($decimal < 65056) { - $return = 'fe10_fe1f'; // Vertical Forms - } elseif ($decimal < 65072) { - $return = 'fe20_fe2f'; // Combining Half Marks - } elseif ($decimal < 65104) { - $return = 'fe30_fe4f'; // CJK Compatibility Forms - } elseif ($decimal < 65136) { - $return = 'fe50_fe6f'; // Small Form Variants - } elseif ($decimal < 65280) { - $return = 'fe70_feff'; // Arabic Presentation Forms-B - } elseif ($decimal < 65520) { - $return = 'ff00_ffef'; // Halfwidth and Fullwidth Forms - } elseif ($decimal < 65536) { - $return = 'fff0_ffff'; // Specials - } elseif ($decimal < 65664) { - $return = '10000_1007f'; // Linear B Syllabary - } elseif ($decimal < 65792) { - $return = '10080_100ff'; // Linear B Ideograms - } elseif ($decimal < 65856) { - $return = '10100_1013f'; // Aegean Numbers - } elseif ($decimal < 66304) { - $return = '10140_1018f'; // Ancient Greek Numbers - } elseif ($decimal < 66352) { - $return = '10300_1032f'; // Old Italic - } elseif ($decimal < 66432) { - $return = '10330_1034f'; // Gothic - } elseif ($decimal < 66464) { - $return = '10380_1039f'; // Ugaritic - } elseif ($decimal < 66560) { - $return = '103a0_103df'; // Old Persian - } elseif ($decimal < 66640) { - $return = '10400_1044f'; // Deseret - } elseif ($decimal < 66688) { - $return = '10450_1047f'; // Shavian - } elseif ($decimal < 67584) { - $return = '10480_104af'; // Osmanya - } elseif ($decimal < 67840) { - $return = '10800_1083f'; // Cypriot Syllabary - } elseif ($decimal < 68096) { - $return = '10900_1091f'; // Phoenician - } elseif ($decimal < 73728) { - $return = '10a00_10a5f'; // Kharoshthi - } elseif ($decimal < 74752) { - $return = '12000_123ff'; // Cuneiform - } elseif ($decimal < 118784) { - $return = '12400_1247f'; // Cuneiform Numbers and Punctuation - } elseif ($decimal < 119040) { - $return = '1d000_1d0ff'; // Byzantine Musical Symbols - } elseif ($decimal < 119296) { - $return = '1d100_1d1ff'; // Musical Symbols - } elseif ($decimal < 119552) { - $return = '1d200_1d24f'; // Ancient Greek Musical Notation - } elseif ($decimal < 119648) { - $return = '1d300_1d35f'; // Tai Xuan Jing Symbols - } elseif ($decimal < 119808) { - $return = '1d360_1d37f'; // Counting Rod Numerals - } elseif ($decimal < 131072) { - $return = '1d400_1d7ff'; // Mathematical Alphanumeric Symbols - } elseif ($decimal < 194560) { - $return = '20000_2a6df'; // CJK Unified Ideographs Extension B - } elseif ($decimal < 917504) { - $return = '2f800_2fa1f'; // CJK Compatibility Ideographs Supplement - } elseif ($decimal < 917760) { - $return = 'e0000_e007f'; // Tags - } elseif ($decimal < 983040) { - $return = 'e0100_e01ef'; // Variation Selectors Supplement - } elseif ($decimal < 1048576) { - $return = 'f0000_fffff'; // Supplementary Private Use Area-A - } elseif ($decimal > 1048575) { - $return = '100000_10ffff'; // Supplementary Private Use Area-B + $return = '2c80_2cff'; // Coptic + } elseif ($decimal >= 65280 && $decimal < 65520) { + $return = 'ff00_ffef'; // Halfwidth and Fullwidth Forms } else { $return = false; } @@ -1301,12 +1027,16 @@ class Multibyte extends Object { if(!isset($_this->__codeRange[$char])) { $range = $_this->__codepoint($char); if ($range === false) { - + return null; } Configure::load('unicode' . DS . 'casefolding' . DS . $range); $_this->__caseFold[$range] = Configure::read($range); Configure::delete($range); } + + if (!$_this->__codeRange[$char]) { + return null; + } $_this->__table = $_this->__codeRange[$char]; $count = count($_this->__caseFold[$_this->__table]); diff --git a/cake/tests/cases/libs/multibyte.test.php b/cake/tests/cases/libs/multibyte.test.php index 979b156bd..b5dca2372 100644 --- a/cake/tests/cases/libs/multibyte.test.php +++ b/cake/tests/cases/libs/multibyte.test.php @@ -229,6 +229,128 @@ class MultibyteTest extends UnitTestCase { $result = Multibyte::utf8($string); $expected = array(19968, 20108, 19977, 21608, 27704, 40845); $this->assertEqual($result, $expected); + + $string = 'ԀԂԄԆԈԊԌԎԐԒ'; + $result = Multibyte::utf8($string); + $expected = array(1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298); + $this->assertEqual($result, $expected); + + $string = 'ԁԃԅԇԉԋԍԏԐԒ'; + $result = Multibyte::utf8($string); + $expected = array(1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1296, 1298); + $this->assertEqual($result, $expected); + + $string = 'ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖև'; + $result = Multibyte::utf8($string); + $expected = array(1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, + 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, + 1365, 1366, 1415); + $this->assertEqual($result, $expected); + + $string = 'աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև'; + $result = Multibyte::utf8($string); + $expected = array(1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, + 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, + 1413, 1414, 1415); + $this->assertEqual($result, $expected); + + $string = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $result = Multibyte::utf8($string); + $expected = array(4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, + 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, + 4292, 4293); + $this->assertEqual($result, $expected); + + $string = 'ḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẖẗẘẙẚẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸ'; + $result = Multibyte::utf8($string); + $expected = array(7680, 7682, 7684, 7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704, 7706, 7708, 7710, 7712, 7714, + 7716, 7718, 7720, 7722, 7724, 7726, 7728, 7730, 7732, 7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, + 7752, 7754, 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, 7780, 7782, 7784, 7786, + 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, + 7824, 7826, 7828, 7830, 7831, 7832, 7833, 7834, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 7856, + 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878, 7880, 7882, 7884, 7886, 7888, 7890, 7892, + 7894, 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, 7914, 7916, 7918, 7920, 7922, 7924, 7926, 7928); + $this->assertEqual($result, $expected); + + $string = 'ḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ'; + $result = Multibyte::utf8($string); + $expected = array(7681, 7683, 7685, 7687, 7689, 7691, 7693, 7695, 7697, 7699, 7701, 7703, 7705, 7707, 7709, 7711, 7713, 7715, + 7717, 7719, 7721, 7723, 7725, 7727, 7729, 7731, 7733, 7735, 7737, 7739, 7741, 7743, 7745, 7747, 7749, 7751, + 7753, 7755, 7757, 7759, 7761, 7763, 7765, 7767, 7769, 7771, 7773, 7775, 7777, 7779, 7781, 7783, 7785, 7787, + 7789, 7791, 7793, 7795, 7797, 7799, 7801, 7803, 7805, 7807, 7809, 7811, 7813, 7815, 7817, 7819, 7821, 7823, + 7825, 7827, 7829, 7830, 7831, 7832, 7833, 7834, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, + 7861, 7863, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879, 7881, 7883, 7885, 7887, 7889, 7891, 7893, 7895, + 7897, 7899, 7901, 7903, 7905, 7907, 7909, 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, 7927, 7929); + $this->assertEqual($result, $expected); + + $string = 'ΩKÅℲ'; + $result = Multibyte::utf8($string); + $expected = array(8486, 8490, 8491, 8498); + $this->assertEqual($result, $expected); + + $string = 'ωkåⅎ'; + $result = Multibyte::utf8($string); + $expected = array(969, 107, 229, 8526); + $this->assertEqual($result, $expected); + + $string = 'ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯↃ'; + $result = Multibyte::utf8($string); + $expected = array(8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8579); + $this->assertEqual($result, $expected); + + $string = 'ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↄ'; + $result = Multibyte::utf8($string); + $expected = array(8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, 8573, 8574, 8575, 8580); + $this->assertEqual($result, $expected); + + $string = 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ'; + $result = Multibyte::utf8($string); + $expected = array(9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, + 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423); + $this->assertEqual($result, $expected); + + $string = 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ'; + $result = Multibyte::utf8($string); + $expected = array(9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, + 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449); + $this->assertEqual($result, $expected); + + $string = 'ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮ'; + $result = Multibyte::utf8($string); + $expected = array(11264, 11265, 11266, 11267, 11268, 11269, 11270, 11271, 11272, 11273, 11274, 11275, 11276, 11277, 11278, + 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11292, 11293, + 11294, 11295, 11296, 11297, 11298, 11299, 11300, 11301, 11302, 11303, 11304, 11305, 11306, 11307, 11308, + 11309, 11310); + $this->assertEqual($result, $expected); + + $string = 'ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞ'; + $result = Multibyte::utf8($string); + $expected = array(11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, + 11328, 11329, 11330, 11331, 11332, 11333, 11334, 11335, 11336, 11337, 11338, 11339, 11340, 11341, 11342, 11343, + 11344, 11345, 11346, 11347, 11348, 11349, 11350, 11351, 11352, 11353, 11354, 11355, 11356, 11357, 11358); + $this->assertEqual($result, $expected); + + $string = 'ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢ'; + $result = Multibyte::utf8($string); + $expected = array(11392, 11394, 11396, 11398, 11400, 11402, 11404, 11406, 11408, 11410, 11412, 11414, 11416, 11418, 11420, + 11422, 11424, 11426, 11428, 11430, 11432, 11434, 11436, 11438, 11440, 11442, 11444, 11446, 11448, 11450, + 11452, 11454, 11456, 11458, 11460, 11462, 11464, 11466, 11468, 11470, 11472, 11474, 11476, 11478, 11480, + 11482, 11484, 11486, 11488, 11490); + $this->assertEqual($result, $expected); + + $string = 'ⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ'; + $result = Multibyte::utf8($string); + $expected = array(11393, 11395, 11397, 11399, 11401, 11403, 11405, 11407, 11409, 11411, 11413, 11415, 11417, 11419, 11421, 11423, + 11425, 11427, 11429, 11431, 11433, 11435, 11437, 11439, 11441, 11443, 11445, 11447, 11449, 11451, 11453, 11455, + 11457, 11459, 11461, 11463, 11465, 11467, 11469, 11471, 11473, 11475, 11477, 11479, 11481, 11483, 11485, 11487, + 11489, 11491); + $this->assertEqual($result, $expected); + + + $string = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $result = Multibyte::utf8($string); + $expected = array(64256, 64257, 64258, 64259, 64260, 64261, 64262, 64275, 64276, 64277, 64278, 64279); + $this->assertEqual($result, $expected); } function testAscii() { @@ -425,6 +547,125 @@ class MultibyteTest extends UnitTestCase { $expected = '一二三周永龍'; $result = Multibyte::ascii($utf8); $this->assertEqual($result, $expected); + + $utf8 = array(1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298); + $expected = 'ԀԂԄԆԈԊԌԎԐԒ'; + $result = Multibyte::ascii($utf8); + $this->assertEqual($result, $expected); + + $utf8 = array(1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1296, 1298); + $expected = 'ԁԃԅԇԉԋԍԏԐԒ'; + $result = Multibyte::ascii($utf8); + $this->assertEqual($result, $expected); + + $utf8 = array(1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, + 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, + 1366, 1415); + $result = Multibyte::ascii($utf8); + $expected = 'ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖև'; + $this->assertEqual($result, $expected); + + $utf8 = array(1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, + 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, + 1413, 1414, 1415); + $result = Multibyte::ascii($utf8); + $expected = 'աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև'; + $this->assertEqual($result, $expected); + + $utf8 = array(4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, + 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293); + $result = Multibyte::ascii($utf8); + $expected = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $this->assertEqual($result, $expected); + + $utf8 = array(7680, 7682, 7684, 7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704, 7706, 7708, 7710, 7712, 7714, + 7716, 7718, 7720, 7722, 7724, 7726, 7728, 7730, 7732, 7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, + 7752, 7754, 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, 7780, 7782, 7784, 7786, + 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, + 7824, 7826, 7828, 7830, 7831, 7832, 7833, 7834, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 7856, + 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878, 7880, 7882, 7884, 7886, 7888, 7890, 7892, + 7894, 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, 7914, 7916, 7918, 7920, 7922, 7924, 7926, 7928); + $result = Multibyte::ascii($utf8); + $expected = 'ḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẖẗẘẙẚẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸ'; + $this->assertEqual($result, $expected); + + $utf8 = array(7681, 7683, 7685, 7687, 7689, 7691, 7693, 7695, 7697, 7699, 7701, 7703, 7705, 7707, 7709, 7711, 7713, 7715, + 7717, 7719, 7721, 7723, 7725, 7727, 7729, 7731, 7733, 7735, 7737, 7739, 7741, 7743, 7745, 7747, 7749, 7751, + 7753, 7755, 7757, 7759, 7761, 7763, 7765, 7767, 7769, 7771, 7773, 7775, 7777, 7779, 7781, 7783, 7785, 7787, + 7789, 7791, 7793, 7795, 7797, 7799, 7801, 7803, 7805, 7807, 7809, 7811, 7813, 7815, 7817, 7819, 7821, 7823, + 7825, 7827, 7829, 7830, 7831, 7832, 7833, 7834, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, + 7861, 7863, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879, 7881, 7883, 7885, 7887, 7889, 7891, 7893, 7895, + 7897, 7899, 7901, 7903, 7905, 7907, 7909, 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, 7927, 7929); + $result = Multibyte::ascii($utf8); + $expected = 'ḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ'; + $this->assertEqual($result, $expected); + + $utf8 = array(8486, 8490, 8491, 8498); + $result = Multibyte::ascii($utf8); + $expected = 'ΩKÅℲ'; + $this->assertEqual($result, $expected); + + $utf8 = array(969, 107, 229, 8526); + $result = Multibyte::ascii($utf8); + $expected = 'ωkåⅎ'; + $this->assertEqual($result, $expected); + + $utf8 = array(8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8579); + $result = Multibyte::ascii($utf8); + $expected = 'ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯↃ'; + $this->assertEqual($result, $expected); + + $utf8 = array(8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, 8573, 8574, 8575, 8580); + $result = Multibyte::ascii($utf8); + $expected = 'ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↄ'; + $this->assertEqual($result, $expected); + + $utf8 = array(9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, + 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423); + $result = Multibyte::ascii($utf8); + $expected = 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ'; + $this->assertEqual($result, $expected); + + $utf8 = array(9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, + 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449); + $result = Multibyte::ascii($utf8); + $expected = 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ'; + $this->assertEqual($result, $expected); + + $utf8 = array(11264, 11265, 11266, 11267, 11268, 11269, 11270, 11271, 11272, 11273, 11274, 11275, 11276, 11277, 11278, 11279, + 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11292, 11293, 11294, 11295, + 11296, 11297, 11298, 11299, 11300, 11301, 11302, 11303, 11304, 11305, 11306, 11307, 11308, 11309, 11310); + $result = Multibyte::ascii($utf8); + $expected = 'ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮ'; + $this->assertEqual($result, $expected); + + $utf8 = array(11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, + 11328, 11329, 11330, 11331, 11332, 11333, 11334, 11335, 11336, 11337, 11338, 11339, 11340, 11341, 11342, 11343, + 11344, 11345, 11346, 11347, 11348, 11349, 11350, 11351, 11352, 11353, 11354, 11355, 11356, 11357, 11358); + $result = Multibyte::ascii($utf8); + $expected = 'ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞ'; + $this->assertEqual($result, $expected); + + $utf8 = array(11392, 11394, 11396, 11398, 11400, 11402, 11404, 11406, 11408, 11410, 11412, 11414, 11416, 11418, 11420, + 11422, 11424, 11426, 11428, 11430, 11432, 11434, 11436, 11438, 11440, 11442, 11444, 11446, 11448, 11450, + 11452, 11454, 11456, 11458, 11460, 11462, 11464, 11466, 11468, 11470, 11472, 11474, 11476, 11478, 11480, + 11482, 11484, 11486, 11488, 11490); + $result = Multibyte::ascii($utf8); + $expected = 'ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢ'; + $this->assertEqual($result, $expected); + + $utf8 = array(11393, 11395, 11397, 11399, 11401, 11403, 11405, 11407, 11409, 11411, 11413, 11415, 11417, 11419, 11421, 11423, + 11425, 11427, 11429, 11431, 11433, 11435, 11437, 11439, 11441, 11443, 11445, 11447, 11449, 11451, 11453, 11455, + 11457, 11459, 11461, 11463, 11465, 11467, 11469, 11471, 11473, 11475, 11477, 11479, 11481, 11483, 11485, 11487, + 11489, 11491); + $result = Multibyte::ascii($utf8); + $expected = 'ⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ'; + $this->assertEqual($result, $expected); + + $utf8 = array(64256, 64257, 64258, 64259, 64260, 64261, 64262, 64275, 64276, 64277, 64278, 64279); + $result = Multibyte::ascii($utf8); + $expected = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $this->assertEqual($result, $expected); } function testUsingMbStripos() { @@ -6229,6 +6470,63 @@ class MultibyteTest extends UnitTestCase { $result = mb_strtolower($string); $expected = 'ἀι'; $this->assertEqual($result, $expected); + + $string = 'ԀԂԄԆԈԊԌԎԐԒ'; + $result = mb_strtolower($string); + $expected = 'ԁԃԅԇԉԋԍԏԐԒ'; + $this->assertEqual($result, $expected); + + $string = 'ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖև'; + $result = mb_strtolower($string); + $expected = 'աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև'; + $this->assertEqual($result, $expected); + + $string = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $result = mb_strtolower($string); + $expected = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $this->assertEqual($result, $expected); + + $string = 'ḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẖẗẘẙẚẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸ'; + $result = mb_strtolower($string); + $expected = 'ḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ'; + $this->assertEqual($result, $expected); + + $string = 'ΩKÅ'; + $result = mb_strtolower($string); + $expected = 'ωkå'; + $this->assertEqual($result, $expected); + + $string = 'ΩKÅ'; + $result = mb_strtolower($string); + $expected = 'ωkå'; + $this->assertEqual($result, $expected); +/* +mb_strtolower does not work for these strings. + + $string = 'ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯↃ'; + $result = mb_strtolower($string); + $expected = 'ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↄ'; + $this->assertEqual($result, $expected); + + $string = 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ'; + $result = mb_strtolower($string); + $expected = 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ'; + $this->assertEqual($result, $expected); + + $string = 'ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮ'; + $result = mb_strtolower($string); + $expected = 'ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞ'; + $this->assertEqual($result, $expected); + + $string = 'ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢ'; + $result = mb_strtolower($string); + $expected = 'ⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ'; + $this->assertEqual($result, $expected); +*/ + $string = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $result = mb_strtolower($string); + $expected = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $this->assertEqual($result, $expected); } function testMultibyteStrtolower() { @@ -6721,6 +7019,66 @@ class MultibyteTest extends UnitTestCase { $result = Multibyte::strtolower($string); $expected = 'ἀι'; $this->assertEqual($result, $expected); + + $string = 'ԀԂԄԆԈԊԌԎԐԒ'; + $result = Multibyte::strtolower($string); + $expected = 'ԁԃԅԇԉԋԍԏԐԒ'; + $this->assertEqual($result, $expected); + + $string = 'ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖև'; + $result = Multibyte::strtolower($string); + $expected = 'աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև'; + $this->assertEqual($result, $expected); + + $string = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $result = Multibyte::strtolower($string); + $expected = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $this->assertEqual($result, $expected); + + $string = 'ḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẖẗẘẙẚẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸ'; + $result = Multibyte::strtolower($string); + $expected = 'ḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ'; + $this->assertEqual($result, $expected); + + $string = 'ΩKÅℲ'; + $result = Multibyte::strtolower($string); + $expected = 'ωkåⅎ'; + $this->assertEqual($result, $expected); + + $string = 'ΩKÅ'; + $result = Multibyte::strtolower($string); + $expected = 'ωkå'; + $this->assertEqual($result, $expected); + + $string = 'ΩKÅ'; + $result = Multibyte::strtolower($string); + $expected = 'ωkå'; + $this->assertEqual($result, $expected); + + $string = 'ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯↃ'; + $result = Multibyte::strtolower($string); + $expected = 'ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↄ'; + $this->assertEqual($result, $expected); + + $string = 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ'; + $result = Multibyte::strtolower($string); + $expected = 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ'; + $this->assertEqual($result, $expected); + + $string = 'ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮ'; + $result = Multibyte::strtolower($string); + $expected = 'ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞ'; + $this->assertEqual($result, $expected); + + $string = 'ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢ'; + $result = Multibyte::strtolower($string); + $expected = 'ⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ'; + $this->assertEqual($result, $expected); + + $string = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $result = Multibyte::strtolower($string); + $expected = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $this->assertEqual($result, $expected); } function testUsingMbStrtoupper() { @@ -7208,6 +7566,58 @@ class MultibyteTest extends UnitTestCase { $result = mb_strtoupper($string); $expected = 'ἈΙ'; $this->assertEqual($result, $expected); + + $string = 'ԁԃԅԇԉԋԍԏԐԒ'; + $result = mb_strtoupper($string); + $expected = 'ԀԂԄԆԈԊԌԎԐԒ'; + $this->assertEqual($result, $expected); + + $string = 'աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև'; + $result = mb_strtoupper($string); + $expected = 'ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖև'; + $this->assertEqual($result, $expected); + + $string = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $result = mb_strtoupper($string); + $expected = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $this->assertEqual($result, $expected); + + $string = 'ḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ'; + $result = mb_strtoupper($string); + $expected = 'ḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẖẗẘẙẚẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸ'; + $this->assertEqual($result, $expected); + + $string = 'ωkå'; + $result = mb_strtoupper($string); + $expected = 'ΩKÅ'; + $this->assertEqual($result, $expected); +/* +mb_strtoupper does not work for these strings. + + $string = 'ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↄ'; + $result = mb_strtoupper($string); + $expected = 'ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯↃ'; + $this->assertEqual($result, $expected); + + $string = 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ'; + $result = mb_strtoupper($string); + $expected = 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ'; + $this->assertEqual($result, $expected); + + $string = 'ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞ'; + $result = mb_strtoupper($string); + $expected = 'ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮ'; + $this->assertEqual($result, $expected); + + $string = 'ⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ'; + $result = mb_strtoupper($string); + $expected = 'ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢ'; + $this->assertEqual($result, $expected); +*/ + $string = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $result = mb_strtoupper($string); + $expected = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $this->assertEqual($result, $expected); } function testMultibyteStrtoupper() { @@ -7700,6 +8110,61 @@ class MultibyteTest extends UnitTestCase { $result = Multibyte::strtoupper($string); $expected = 'ἈΙ'; $this->assertEqual($result, $expected); + + $string = 'ԁԃԅԇԉԋԍԏԐԒ'; + $result = Multibyte::strtoupper($string); + $expected = 'ԀԂԄԆԈԊԌԎԐԒ'; + $this->assertEqual($result, $expected); + + $string = 'աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև'; + $result = Multibyte::strtoupper($string); + $expected = 'ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖև'; + $this->assertEqual($result, $expected); + + $string = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $result = Multibyte::strtoupper($string); + $expected = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; + $this->assertEqual($result, $expected); + + $string = 'ḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ'; + $result = Multibyte::strtoupper($string); + $expected = 'ḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẖẗẘẙẚẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸ'; + $this->assertEqual($result, $expected); + + $string = 'ωkåⅎ'; + $result = Multibyte::strtoupper($string); + $expected = 'ΩKÅℲ'; + $this->assertEqual($result, $expected); + + $string = 'ωkå'; + $result = Multibyte::strtoupper($string); + $expected = 'ΩKÅ'; + $this->assertEqual($result, $expected); + + $string = 'ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↄ'; + $result = Multibyte::strtoupper($string); + $expected = 'ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯↃ'; + $this->assertEqual($result, $expected); + + $string = 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ'; + $result = Multibyte::strtoupper($string); + $expected = 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ'; + $this->assertEqual($result, $expected); + + $string = 'ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞ'; + $result = Multibyte::strtoupper($string); + $expected = 'ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮ'; + $this->assertEqual($result, $expected); + + $string = 'ⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ'; + $result = Multibyte::strtoupper($string); + $expected = 'ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢ'; + $this->assertEqual($result, $expected); + + $string = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $result = Multibyte::strtoupper($string); + $expected = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; + $this->assertEqual($result, $expected); } function testUsingMbSubstrCount() {