Annotation of embedaddon/php/ext/intl/tests/grapheme.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: grapheme()
! 3: --SKIPIF--
! 4: <?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
! 5: --FILE--
! 6: <?php
! 7:
! 8: /*
! 9: * Test grapheme functions (procedural only)
! 10: */
! 11:
! 12: function ut_main()
! 13: {
! 14: $res_str = '';
! 15:
! 16: $char_a_diaeresis = "\xC3\xA4"; // 'LATIN SMALL LETTER A WITH DIAERESIS' (U+00E4)
! 17: $char_a_ring = "\xC3\xA5"; // 'LATIN SMALL LETTER A WITH RING ABOVE' (U+00E5)
! 18: $char_o_diaeresis = "\xC3\xB6"; // 'LATIN SMALL LETTER O WITH DIAERESIS' (U+00F6)
! 19: $char_O_diaeresis = "\xC3\x96"; // 'LATIN CAPITAL LETTER O WITH DIAERESIS' (U+00D6)
! 20:
! 21: $char_angstrom_sign = "\xE2\x84\xAB"; // 'ANGSTROM SIGN' (U+212B)
! 22: $char_A_ring = "\xC3\x85"; // 'LATIN CAPITAL LETTER A WITH RING ABOVE' (U+00C5)
! 23:
! 24: $char_ohm_sign = "\xE2\x84\xA6"; // 'OHM SIGN' (U+2126)
! 25: $char_omega = "\xCE\xA9"; // 'GREEK CAPITAL LETTER OMEGA' (U+03A9)
! 26:
! 27: $char_combining_ring_above = "\xCC\x8A"; // 'COMBINING RING ABOVE' (U+030A)
! 28:
! 29: $char_fi_ligature = "\xEF\xAC\x81"; // 'LATIN SMALL LIGATURE FI' (U+FB01)
! 30:
! 31: $char_long_s_dot = "\xE1\xBA\x9B"; // 'LATIN SMALL LETTER LONG S WITH DOT ABOVE' (U+1E9B)
! 32:
! 33: // the word 'hindi' using Devanagari characters:
! 34: $hindi = "\xe0\xa4\xb9\xe0\xa4\xbf\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xa6\xe0\xa5\x80";
! 35:
! 36: $char_a_ring_nfd = "a\xCC\x8A";
! 37: $char_A_ring_nfd = "A\xCC\x8A";
! 38: $char_o_diaeresis_nfd = "o\xCC\x88";
! 39: $char_O_diaeresis_nfd = "O\xCC\x88";
! 40: $char_diaeresis = "\xCC\x88";
! 41:
! 42: //=====================================================================================
! 43: $res_str .= "\n" . 'function grapheme_strlen($string) {}' . "\n\n";
! 44:
! 45:
! 46: $res_str .= "\"hindi\" in devanagari strlen " . grapheme_strlen($hindi) . "\n";
! 47: $res_str .= "\"ab\" + \"hindi\" + \"cde\" strlen " . grapheme_strlen('ab' . $hindi . 'cde') . "\n";
! 48: $res_str .= "\"\" strlen " . grapheme_strlen("") . "\n";
! 49: $res_str .= "char_a_ring_nfd strlen " . grapheme_strlen($char_a_ring_nfd) . "\n";
! 50: $res_str .= "char_a_ring_nfd + \"bc\" strlen " . grapheme_strlen($char_a_ring_nfd . 'bc') . "\n";
! 51: $res_str .= "\"abc\" strlen " . grapheme_strlen('abc') . "\n";
! 52:
! 53:
! 54: //=====================================================================================
! 55: $res_str .= "\n" . 'function grapheme_strpos($haystack, $needle, $offset = 0) {}' . "\n\n";
! 56:
! 57: $tests = array(
! 58: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "o", "o", 5 ),
! 59: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "o", "false" ),
! 60: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, $char_o_diaeresis_nfd, 4 ),
! 61: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, 2 ),
! 62: array( "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, 1 ),
! 63: array( "abc", $char_a_ring_nfd, "false" ),
! 64: array( $char_a_ring_nfd . "bc", "a", "false" ),
! 65: array( "abc", "d", "false" ),
! 66: array( "abc", "c", 2 ),
! 67: array( "abc", "b", 1 ),
! 68: array( "abc", "a", 0 ),
! 69: array( "abc", "a", 0, 0 ),
! 70: array( "abc", "a", 1, "false" ),
! 71: array( "ababc", "a", 1, 2 ),
! 72: array( "ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "o", "o", 2, 6 ),
! 73: array( $char_o_diaeresis_nfd . $char_a_ring_nfd . "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, 2, 3 ),
! 74:
! 75: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "opq", "op", 5 ),
! 76: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "opq", "opq", 5 ),
! 77: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "abc", "false" ),
! 78: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "bc" . $char_o_diaeresis_nfd, $char_o_diaeresis_nfd . "bc" . $char_o_diaeresis_nfd, 4 ),
! 79: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd . "bc", 2 ),
! 80: array( "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd . "bc", 1 ),
! 81: array( "abc", $char_a_ring_nfd . "bc", "false" ),
! 82: array( $char_a_ring_nfd . "bc", "abcdefg", "false" ),
! 83: array( "abc", "defghijklmnopq", "false" ),
! 84: array( "abc", "ab", 0 ),
! 85: array( "abc", "bc", 1 ),
! 86: array( "abc", "abc", 0 ),
! 87: array( "abc", "abcd", "false" ),
! 88: array( "abc", "ab", 0, 0 ),
! 89: array( "abc", "abc", 0, 0 ),
! 90: array( "abc", "abc", 1, "false" ),
! 91: array( "ababc", "ab", 1, 2 ),
! 92: array( "ababc", "abc", 1, 2 ),
! 93: array( "ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "o" . $char_a_ring_nfd . "bc", "o" . $char_a_ring_nfd . "bc", 2, 6 ),
! 94: array( $char_o_diaeresis_nfd . $char_a_ring_nfd . "a" . $char_a_ring_nfd . "bc" . $char_a_ring_nfd . "def", $char_a_ring_nfd . "bc" . $char_a_ring_nfd, 2, 3 ),
! 95: );
! 96:
! 97: foreach( $tests as $test ) {
! 98: $arg1 = urlencode($test[1]);
! 99: $arg0 = urlencode($test[0]);
! 100: $res_str .= "find \"$arg1\" in \"$arg0\" - grapheme_strpos";
! 101: if ( 3 == count( $test ) ) {
! 102: $result = grapheme_strpos($test[0], $test[1]);
! 103: }
! 104: else {
! 105: $res_str .= " from $test[2]";
! 106: $result = grapheme_strpos($test[0], $test[1], $test[2]);
! 107: }
! 108: $res_str .= " = ";
! 109: if ( $result === false ) {
! 110: $res_str .= 'false';
! 111: }
! 112: else {
! 113: $res_str .= $result;
! 114: }
! 115: $res_str .= " == " . $test[count($test)-1] . check_result($result, $test[count($test)-1]) . "\n";
! 116: }
! 117:
! 118: //=====================================================================================
! 119: $res_str .= "\n" . 'function grapheme_stripos($haystack, $needle, $offset = 0) {}' . "\n\n";
! 120:
! 121: $tests = array(
! 122: array( "ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O", "o", 2, 6 ),
! 123: array( $char_o_diaeresis_nfd . $char_a_ring_nfd . "a" . $char_A_ring_nfd . "bc", $char_a_ring_nfd, 2, 3 ),
! 124: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O", "o", 5 ),
! 125: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "O", "false" ),
! 126: array( "a" . $char_a_ring_nfd . "bc" . $char_O_diaeresis_nfd, $char_o_diaeresis_nfd, 4 ),
! 127: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "bc", $char_A_ring_nfd, 2 ),
! 128: array( "a" . $char_A_ring_nfd . "bc", $char_a_ring_nfd, 1 ),
! 129: array( "Abc", $char_a_ring_nfd, "false" ),
! 130: array( $char_a_ring_nfd . "bc", "A", "false" ),
! 131: array( "abc", "D", "false" ),
! 132: array( "abC", "c", 2 ),
! 133: array( "abc", "B", 1 ),
! 134: array( "Abc", "a", 0 ),
! 135: array( "abc", "A", 0, 0 ),
! 136: array( "Abc", "a", 1, "false" ),
! 137: array( "ababc", "A", 1, 2 ),
! 138:
! 139: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", "oP", 5 ),
! 140: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", "opQ", 5 ),
! 141: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "abc", "false" ),
! 142: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "bC" . $char_o_diaeresis_nfd, $char_O_diaeresis_nfd . "bc" . $char_o_diaeresis_nfd, 4 ),
! 143: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "Bc", $char_A_ring_nfd . "bc", 2 ),
! 144: array( "a" . $char_a_ring_nfd . "BC", $char_a_ring_nfd . "bc", 1 ),
! 145: array( "abc", $char_a_ring_nfd . "BC", "false" ),
! 146: array( $char_a_ring_nfd . "BC", "aBCdefg", "false" ),
! 147: array( "aBC", "Defghijklmnopq", "false" ),
! 148: array( "abC", "Ab", 0 ),
! 149: array( "aBC", "bc", 1 ),
! 150: array( "abC", "Abc", 0 ),
! 151: array( "abC", "aBcd", "false" ),
! 152: array( "ABc", "ab", 0, 0 ),
! 153: array( "aBc", "abC", 0, 0 ),
! 154: array( "abc", "aBc", 1, "false" ),
! 155: array( "ABabc", "AB", 1, 2 ),
! 156: array( "abaBc", "aBc", 1, 2 ),
! 157: array( "ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "o" . $char_A_ring_nfd . "bC", "O" . $char_a_ring_nfd . "bC", 2, 6 ),
! 158: array( $char_o_diaeresis_nfd . $char_a_ring_nfd . "a" . $char_A_ring_nfd . "bC" . $char_a_ring_nfd . "def", $char_a_ring_nfd . "Bc" . $char_a_ring_nfd, 2, 3 ),
! 159: );
! 160:
! 161: foreach( $tests as $test ) {
! 162: $arg1 = urlencode($test[1]);
! 163: $arg0 = urlencode($test[0]);
! 164: $res_str .= "find \"$arg1\" in \"$arg0\" - grapheme_stripos";
! 165: if ( 3 == count( $test ) ) {
! 166: $result = grapheme_stripos($test[0], $test[1]);
! 167: }
! 168: else {
! 169: $res_str .= " from $test[2]";
! 170: $result = grapheme_stripos($test[0], $test[1], $test[2]);
! 171: }
! 172: $res_str .= " = ";
! 173: if ( $result === false ) {
! 174: $res_str .= 'false';
! 175: }
! 176: else {
! 177: $res_str .= $result;
! 178: }
! 179: $res_str .= " == " . $test[count($test)-1] . check_result($result, $test[count($test)-1]) . "\n";
! 180: }
! 181:
! 182:
! 183: //=====================================================================================
! 184: $res_str .= "\n" . 'function grapheme_strrpos($haystack, $needle, $offset = 0) {}' . "\n\n";
! 185:
! 186:
! 187: $tests = array(
! 188: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "o", "o", 5 ),
! 189: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "o", "false" ),
! 190: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, $char_o_diaeresis_nfd, 4 ),
! 191: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, 2 ),
! 192: array( "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, 1 ),
! 193: array( "abc", $char_a_ring_nfd, "false" ),
! 194: array( $char_a_ring_nfd . "bc", "a", "false" ),
! 195: array( "abc", "d", "false" ),
! 196: array( "abc", "c", 2 ),
! 197: array( "abc", "b", 1 ),
! 198: array( "abc", "a", 0 ),
! 199: array( "abc", "a", 0, 0 ),
! 200: array( "abc", "a", 1, "false" ),
! 201: array( "ababc", "a", 1, 2 ),
! 202: array( "ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "o", "o", 2, 6 ),
! 203: array( $char_o_diaeresis_nfd . $char_a_ring_nfd . "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, 2, 3 ),
! 204:
! 205: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "opq", "op", 5 ),
! 206: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "opq", "opq", 5 ),
! 207: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "abc", "false" ),
! 208: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "bc" . $char_o_diaeresis_nfd, $char_o_diaeresis_nfd . "bc" . $char_o_diaeresis_nfd, 4 ),
! 209: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd . "bc", 2 ),
! 210: array( "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd . "bc", 1 ),
! 211: array( "abc", $char_a_ring_nfd . "bc", "false" ),
! 212: array( $char_a_ring_nfd . "bc", "abcdefg", "false" ),
! 213: array( "abc", "defghijklmnopq", "false" ),
! 214: array( "abc", "ab", 0 ),
! 215: array( "abc", "bc", 1 ),
! 216: array( "abc", "abc", 0 ),
! 217: array( "abc", "abcd", "false" ),
! 218: array( "abc", "ab", 0, 0 ),
! 219: array( "abc", "abc", 0, 0 ),
! 220: array( "abc", "abc", 1, "false" ),
! 221: array( "ababc", "ab", 1, 2 ),
! 222: array( "ababc", "abc", 1, 2 ),
! 223: array( "ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "o" . $char_a_ring_nfd . "bc", "o" . $char_a_ring_nfd . "bc", 2, 6 ),
! 224: array( $char_o_diaeresis_nfd . $char_a_ring_nfd . "a" . $char_a_ring_nfd . "bc" . $char_a_ring_nfd . "def", $char_a_ring_nfd . "bc" . $char_a_ring_nfd, 2, 3 ),
! 225: );
! 226:
! 227: foreach( $tests as $test ) {
! 228: $arg1 = urlencode($test[1]);
! 229: $arg0 = urlencode($test[0]);
! 230: $res_str .= "find \"$arg1\" in \"$arg0\" - grapheme_strrpos";
! 231: if ( 3 == count( $test ) ) {
! 232: $result = grapheme_strrpos($test[0], $test[1]);
! 233: }
! 234: else {
! 235: $res_str .= " from $test[2]";
! 236: $result = grapheme_strrpos($test[0], $test[1], $test[2]);
! 237: }
! 238: $res_str .= " = ";
! 239: if ( $result === false ) {
! 240: $res_str .= 'false';
! 241: }
! 242: else {
! 243: $res_str .= $result;
! 244: }
! 245: $res_str .= " == " . $test[count($test)-1] . check_result($result, $test[count($test)-1]) . "\n";
! 246: }
! 247:
! 248:
! 249: //=====================================================================================
! 250: $res_str .= "\n" . 'function grapheme_strripos($haystack, $needle, $offset = 0) {}' . "\n\n";
! 251:
! 252: $tests = array(
! 253: array( "ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O", "o", 2, 6 ),
! 254: array( $char_o_diaeresis_nfd . $char_a_ring_nfd . "a" . $char_A_ring_nfd . "bc", $char_a_ring_nfd, 2, 3 ),
! 255: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O", "o", 5 ),
! 256: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "O", "false" ),
! 257: array( "a" . $char_a_ring_nfd . "bc" . $char_O_diaeresis_nfd, $char_o_diaeresis_nfd, 4 ),
! 258: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "bc", $char_A_ring_nfd, 2 ),
! 259: array( "a" . $char_A_ring_nfd . "bc", $char_a_ring_nfd, 1 ),
! 260: array( "Abc", $char_a_ring_nfd, "false" ),
! 261: array( $char_a_ring_nfd . "bc", "A", "false" ),
! 262: array( "abc", "D", "false" ),
! 263: array( "abC", "c", 2 ),
! 264: array( "abc", "B", 1 ),
! 265: array( "Abc", "a", 0 ),
! 266: array( "abc", "A", 0, 0 ),
! 267: array( "Abc", "a", 1, "false" ),
! 268: array( "ababc", "A", 1, 2 ),
! 269:
! 270: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", "oP", 5 ),
! 271: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", "opQ", 5 ),
! 272: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "abc", "false" ),
! 273: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "bC" . $char_o_diaeresis_nfd, $char_O_diaeresis_nfd . "bc" . $char_o_diaeresis_nfd, 4 ),
! 274: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "Bc", $char_A_ring_nfd . "bc", 2 ),
! 275: array( "a" . $char_a_ring_nfd . "BC", $char_a_ring_nfd . "bc", 1 ),
! 276: array( "abc", $char_a_ring_nfd . "BC", "false" ),
! 277: array( $char_a_ring_nfd . "BC", "aBCdefg", "false" ),
! 278: array( "aBC", "Defghijklmnopq", "false" ),
! 279: array( "abC", "Ab", 0 ),
! 280: array( "aBC", "bc", 1 ),
! 281: array( "abC", "Abc", 0 ),
! 282: array( "abC", "aBcd", "false" ),
! 283: array( "ABc", "ab", 0, 0 ),
! 284: array( "aBc", "abC", 0, 0 ),
! 285: array( "abc", "aBc", 1, "false" ),
! 286: array( "ABabc", "AB", 1, 2 ),
! 287: array( "abaBc", "aBc", 1, 2 ),
! 288: array( "ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "o" . $char_A_ring_nfd . "bC", "O" . $char_a_ring_nfd . "bC", 2, 6 ),
! 289: array( $char_o_diaeresis_nfd . $char_a_ring_nfd . "a" . $char_A_ring_nfd . "bC" . $char_a_ring_nfd . "def", $char_a_ring_nfd . "Bc" . $char_a_ring_nfd, 2, 3 ),
! 290: );
! 291:
! 292: foreach( $tests as $test ) {
! 293: $arg1 = urlencode($test[1]);
! 294: $arg0 = urlencode($test[0]);
! 295: $res_str .= "find \"$arg1\" in \"$arg0\" - grapheme_strripos";
! 296: if ( 3 == count( $test ) ) {
! 297: $result = grapheme_strripos($test[0], $test[1]);
! 298: }
! 299: else {
! 300: $res_str .= " from $test[2]";
! 301: $result = grapheme_strripos($test[0], $test[1], $test[2]);
! 302: }
! 303: $res_str .= " = ";
! 304: if ( $result === false ) {
! 305: $res_str .= 'false';
! 306: }
! 307: else {
! 308: $res_str .= $result;
! 309: }
! 310: $res_str .= " == " . $test[count($test)-1] . check_result($result, $test[count($test)-1]) . "\n";
! 311: }
! 312:
! 313:
! 314: //=====================================================================================
! 315: $res_str .= "\n" . 'function grapheme_substr($string, $start, $length = -1) {}' . "\n\n";
! 316:
! 317: $tests = array(
! 318:
! 319: array( "abc", 3, "false" ),
! 320: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, 5, "false" ),
! 321: array( "ao" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O", 2, $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O" ),
! 322: array( $char_o_diaeresis_nfd . $char_a_ring_nfd . "a" . $char_A_ring_nfd . "bc", 2, "a" . $char_A_ring_nfd . "bc" ),
! 323: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O", 5, "O" ),
! 324: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, 5, "false" ),
! 325: array( "a" . $char_a_ring_nfd . "bc" . $char_O_diaeresis_nfd, 4, $char_O_diaeresis_nfd ),
! 326: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "bc", 2, $char_a_ring_nfd . "bc" ),
! 327: array( "a" . $char_A_ring_nfd . "bc", 1, $char_A_ring_nfd . "bc" ),
! 328: array( "Abc", -5, "false" ),
! 329: array( $char_a_ring_nfd . "bc", 3, "false" ),
! 330: array( "abc", 4, "false" ),
! 331: array( "abC", 2, "C" ),
! 332: array( "abc", 1, "bc" ),
! 333: array( "Abc", 1, 1, "b" ),
! 334: array( "abc", 0, 2, "ab" ),
! 335: array( "Abc", -4, 1, "false" ),
! 336: array( "ababc", 1, 2, "ba" ),
! 337: array( "ababc", 0, 10, "ababc" ),
! 338:
! 339: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, 10 , "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq" ),
! 340: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 5, "Opq" ),
! 341: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 5, -1, "Op" ),
! 342: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 5, -2, "O" ),
! 343: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 5, -3, "" ),
! 344: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 5, -4, "false" ),
! 345:
! 346: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq" ),
! 347: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, -1, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Op" ),
! 348: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, -2, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O" ),
! 349: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, -3, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd ),
! 350: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, -4, "a" . $char_a_ring_nfd . "bc" ),
! 351: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, -5, "a" . $char_a_ring_nfd . "b" ),
! 352: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, -6, "a" . $char_a_ring_nfd ),
! 353: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, -7, "a" ),
! 354: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, -8, "" ),
! 355: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", 0, -9, "false" ),
! 356:
! 357: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq" ),
! 358: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -7, $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq" ),
! 359: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -6, "bc" . $char_o_diaeresis_nfd . "Opq" ),
! 360: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -5, "c" . $char_o_diaeresis_nfd . "Opq" ),
! 361: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -4, $char_o_diaeresis_nfd . "Opq" ),
! 362: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -3, "Opq" ),
! 363: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -2, "pq" ),
! 364: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -1, "q" ),
! 365: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -999, "false" ),
! 366:
! 367: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, 8, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq" ),
! 368: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, 7, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Op" ),
! 369: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, 6, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O" ),
! 370: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, 5, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd ),
! 371: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, 4, "a" . $char_a_ring_nfd . "bc" ),
! 372: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, 3, "a" . $char_a_ring_nfd . "b" ),
! 373: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, 2, "a" . $char_a_ring_nfd ),
! 374: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, 1, "a" ),
! 375: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, 0, "" ),
! 376: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -999, "false" ),
! 377:
! 378: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -1, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Op" ),
! 379: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -2, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O" ),
! 380: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -3, "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd ),
! 381: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -4, "a" . $char_a_ring_nfd . "bc" ),
! 382: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -5, "a" . $char_a_ring_nfd . "b" ),
! 383: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -6, "a" . $char_a_ring_nfd ),
! 384: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -7, "a" ),
! 385: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -8, "" ),
! 386: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "Opq", -8, -9, "false" ),
! 387:
! 388: );
! 389:
! 390: foreach( $tests as $test ) {
! 391: $arg0 = urlencode($test[0]);
! 392: $res_str .= "substring of \"$arg0\" from \"$test[1]\" - grapheme_substr";
! 393: if ( 3 == count( $test ) ) {
! 394: $result = grapheme_substr($test[0], $test[1]);
! 395: }
! 396: else {
! 397: $res_str .= " with length $test[2]";
! 398: $result = grapheme_substr($test[0], $test[1], $test[2]);
! 399: }
! 400: $res_str .= " = ";
! 401: if ( $result === false ) {
! 402: $res_str .= 'false';
! 403: }
! 404: else {
! 405: $res_str .= urlencode($result);
! 406: }
! 407: $res_str .= " == " . urlencode($test[count($test)-1]) . check_result($result, $test[count($test)-1]) . "\n";
! 408: }
! 409:
! 410:
! 411: //=====================================================================================
! 412: $res_str .= "\n" . 'function grapheme_strstr($haystack, $needle, $before_needle = FALSE) {}' . "\n\n";
! 413:
! 414: $tests = array(
! 415: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "o", "o", "o" ),
! 416: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "o", "false" ),
! 417: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, $char_o_diaeresis_nfd, $char_o_diaeresis_nfd ),
! 418: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, $char_a_ring_nfd . "bc"),
! 419: array( "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, $char_a_ring_nfd . "bc"),
! 420: array( "abc", $char_a_ring_nfd, "false" ),
! 421: array( $char_a_ring_nfd . "bc", "a", "false" ),
! 422: array( "abc", "d", "false" ),
! 423: array( "abc", "c", "c" ),
! 424: array( "abc", "b", "bc" ),
! 425: array( "abc", "a", "abc" ),
! 426: array( "abc", "ab", "abc" ),
! 427: array( "abc", "abc", "abc" ),
! 428: array( "abc", "bc", "bc" ),
! 429: array( "abc", "a", FALSE, "abc" ),
! 430: array( "abc", "a", TRUE, "" ),
! 431: array( "abc", "b", TRUE, "a" ),
! 432: array( "abc", "c", TRUE, "ab" ),
! 433: array( "ababc", "bab", TRUE, "a" ),
! 434: array( "ababc", "abc", TRUE, "ab" ),
! 435: array( "ababc", "abc", FALSE, "abc" ),
! 436:
! 437: array( "ab" . $char_a_ring_nfd . "c", "d", "false" ),
! 438: array( "bc" . $char_a_ring_nfd . "a", "a", "a" ),
! 439: array( "a" . $char_a_ring_nfd . "bc", "b", "bc" ),
! 440: array( $char_a_ring_nfd . "bc", "a", "false" ),
! 441: array( $char_a_ring_nfd . "abc", "ab", "abc" ),
! 442: array( "abc" . $char_a_ring_nfd, "abc", "abc" . $char_a_ring_nfd),
! 443: array( "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd . "bc", $char_a_ring_nfd . "bc" ),
! 444: array( "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, FALSE, $char_a_ring_nfd . "bc"),
! 445: array( "a" . $char_a_ring_nfd . "bc", "a", TRUE, "" ),
! 446: array( $char_a_ring_nfd . "abc", "b", TRUE, $char_a_ring_nfd . "a" ),
! 447: array( "ab" . $char_a_ring_nfd . "c", "c", TRUE, "ab" . $char_a_ring_nfd ),
! 448: array( "aba" . $char_a_ring_nfd . "bc", "ba" . $char_a_ring_nfd . "b", TRUE, "a" ),
! 449: array( "ababc" . $char_a_ring_nfd, "abc" . $char_a_ring_nfd, TRUE, "ab" ),
! 450: array( "abab" . $char_a_ring_nfd . "c", "ab" . $char_a_ring_nfd . "c", FALSE, "ab" . $char_a_ring_nfd . "c" ),
! 451:
! 452: );
! 453:
! 454: foreach( $tests as $test ) {
! 455: $arg1 = urlencode($test[1]);
! 456: $arg0 = urlencode($test[0]);
! 457: $res_str .= "find \"$arg1\" in \"$arg0\" - grapheme_strstr";
! 458: if ( 3 == count( $test ) ) {
! 459: $result = grapheme_strstr($test[0], $test[1]);
! 460: }
! 461: else {
! 462: $res_str .= " before flag is " . ( $test[2] ? "TRUE" : "FALSE" );
! 463: $result = grapheme_strstr($test[0], $test[1], $test[2]);
! 464: }
! 465: $res_str .= " = ";
! 466: if ( $result === false ) {
! 467: $res_str .= 'false';
! 468: }
! 469: else {
! 470: $res_str .= urlencode($result);
! 471: }
! 472: $res_str .= " == " . urlencode($test[count($test)-1]) . check_result($result, $test[count($test)-1]) . "\n";
! 473: }
! 474:
! 475:
! 476: //=====================================================================================
! 477: $res_str .= "\n" . 'function grapheme_stristr($haystack, $needle, $before_needle = FALSE) {}' . "\n\n";
! 478:
! 479: $tests = array(
! 480: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, $char_O_diaeresis_nfd, $char_o_diaeresis_nfd ),
! 481: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd . "O", "o", "O" ),
! 482: array( "a" . $char_a_ring_nfd . "bc" . $char_o_diaeresis_nfd, "o", "false" ),
! 483: array( $char_o_diaeresis_nfd . "a" . $char_a_ring_nfd . "bc", $char_a_ring_nfd, $char_a_ring_nfd . "bc"),
! 484: array( "a" . $char_a_ring_nfd . "bc", $char_A_ring_nfd, $char_a_ring_nfd . "bc"),
! 485: array( "abc", $char_a_ring_nfd, "false" ),
! 486: array( $char_a_ring_nfd . "bc", "A", "false" ),
! 487: array( "abc", "d", "false" ),
! 488: array( "abc", "C", "c" ),
! 489: array( "aBc", "b", "Bc" ),
! 490: array( "abc", "A", "abc" ),
! 491: array( "abC", "ab", "abC" ),
! 492: array( "abc", "aBc", "abc" ),
! 493: array( "abC", "bc", "bC" ),
! 494: array( "abc", "A", FALSE, "abc" ),
! 495: array( "abc", "a", TRUE, "" ),
! 496: array( "aBc", "b", TRUE, "a" ),
! 497: array( "abc", "C", TRUE, "ab" ),
! 498: array( "aBabc", "bab", TRUE, "a" ),
! 499: array( "ababc", "aBc", TRUE, "ab" ),
! 500: array( "ababc", "abC", FALSE, "abc" ),
! 501:
! 502: array( "ab" . $char_a_ring_nfd . "c", "d", "false" ),
! 503: array( "bc" . $char_a_ring_nfd . "A", "a", "A" ),
! 504: array( "a" . $char_a_ring_nfd . "bc", "B", "bc" ),
! 505: array( $char_A_ring_nfd . "bc", "a", "false" ),
! 506: array( $char_a_ring_nfd . "abc", "Ab", "abc" ),
! 507: array( "abc" . $char_A_ring_nfd, "abc", "abc" . $char_A_ring_nfd),
! 508: array( "a" . $char_a_ring_nfd . "bc", $char_A_ring_nfd . "bc", $char_a_ring_nfd . "bc" ),
! 509: array( "a" . $char_A_ring_nfd . "bc", $char_a_ring_nfd, FALSE, $char_A_ring_nfd . "bc" ),
! 510: array( "a" . $char_a_ring_nfd . "bc", "A", TRUE, "" ),
! 511: array( $char_a_ring_nfd . "aBc", "b", TRUE, $char_a_ring_nfd . "a" ),
! 512: array( "ab" . $char_a_ring_nfd . "c", "C", TRUE, "ab" . $char_a_ring_nfd ),
! 513: array( "aba" . $char_A_ring_nfd . "bc", "ba" . $char_a_ring_nfd . "b", TRUE, "a" ),
! 514: array( "ababc" . $char_a_ring_nfd, "aBc" . $char_A_ring_nfd, TRUE, "ab" ),
! 515: array( "abAB" . $char_A_ring_nfd . "c", "ab" . $char_a_ring_nfd . "c", FALSE, "AB" . $char_A_ring_nfd . "c" ),
! 516:
! 517: );
! 518:
! 519: foreach( $tests as $test ) {
! 520: $arg1 = urlencode($test[1]);
! 521: $arg0 = urlencode($test[0]);
! 522: $res_str .= "find \"$arg1\" in \"$arg0\" - grapheme_stristr";
! 523: if ( 3 == count( $test ) ) {
! 524: $result = grapheme_stristr($test[0], $test[1]);
! 525: }
! 526: else {
! 527: $res_str .= " before flag is " . ( $test[2] ? "TRUE" : "FALSE" );
! 528: $result = grapheme_stristr($test[0], $test[1], $test[2]);
! 529: }
! 530: $res_str .= " = ";
! 531: if ( $result === false ) {
! 532: $res_str .= 'false';
! 533: }
! 534: else {
! 535: $res_str .= urlencode($result);
! 536: }
! 537: $res_str .= " == " . urlencode($test[count($test)-1]) . check_result($result, $test[count($test)-1]) . "\n";
! 538: }
! 539:
! 540:
! 541: //=====================================================================================
! 542: $res_str .= "\n" . 'function grapheme_extract($haystack, $size, $extract_type = GRAPHEME_EXTR_COUNT, $start = 0[, $next])' . "\n\n";
! 543:
! 544: $tests = array(
! 545: // haystack, count, [[offset], [next]], result
! 546: array( "abc", 3, "abc" ),
! 547: array( "abc", 2, "ab" ),
! 548: array( "abc", 1, "a" ),
! 549: array( "abc", 0, "" ),
! 550: array( "abc", 1, 0, "a" ),
! 551: array( "abc", 1, 1, "b" ),
! 552: array( "abc", 1, 2, "c" ),
! 553: array( "abc", 0, 2, "" ),
! 554:
! 555: array( "abc", 3, 0, 3, "abc" ),
! 556: array( "abc", 2, 0, 2, "ab" ),
! 557: array( "abc", 1, 0, 1, "a" ),
! 558: array( "abc", 0, 0, 0, "" ),
! 559: array( "abc", 1, 0, 1, "a" ),
! 560: array( "abc", 1, 1, 2, "b" ),
! 561: array( "abc", 1, 2, 3, "c" ),
! 562: array( "abc", 0, 2, 2, "" ),
! 563: array( "http://news.bbc.co.uk/2/hi/middle_east/7831588.stm", 48, 48 , 50 , "tm" ),
! 564:
! 565: array( $char_a_ring_nfd . "bc", 3, $char_a_ring_nfd . "bc" ),
! 566: array( $char_a_ring_nfd . "bc", 2, $char_a_ring_nfd . "b" ),
! 567: array( $char_a_ring_nfd . "bc", 1, $char_a_ring_nfd . "" ),
! 568: array( $char_a_ring_nfd . "bc", 3, 0, 5, $char_a_ring_nfd . "bc" ),
! 569: array( $char_a_ring_nfd . "bc", 2, 0, 4, $char_a_ring_nfd . "b" ),
! 570: array( $char_a_ring_nfd . "bc", 1, 0, 3, $char_a_ring_nfd . "" ),
! 571: array( $char_a_ring_nfd . "bcde", 2, 3, 5, "bc" ),
! 572: array( $char_a_ring_nfd . "bcde", 2, 4, 6, "cd" ),
! 573: array( $char_a_ring_nfd . "bcde" . $char_a_ring_nfd . "f", 4, 5, 11, "de" . $char_a_ring_nfd . "f" ),
! 574:
! 575: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 3, $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd ),
! 576: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, $char_a_ring_nfd . $char_o_diaeresis_nfd ),
! 577: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . "c", 1, $char_a_ring_nfd . "" ),
! 578:
! 579: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 1, 0, $char_o_diaeresis_nfd),
! 580: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 1, 2, $char_o_diaeresis_nfd),
! 581: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 1, 3, $char_o_diaeresis_nfd),
! 582: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 1, 4, $char_diaeresis),
! 583:
! 584: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 0, $char_o_diaeresis_nfd . $char_o_diaeresis_nfd),
! 585: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 2, $char_o_diaeresis_nfd . $char_o_diaeresis_nfd),
! 586: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 3, $char_o_diaeresis_nfd . $char_o_diaeresis_nfd),
! 587: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 4, $char_diaeresis . $char_o_diaeresis_nfd),
! 588: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 7, $char_diaeresis . $char_o_diaeresis_nfd),
! 589: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 8, $char_o_diaeresis_nfd),
! 590: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 10, $char_diaeresis),
! 591: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 11, "false"),
! 592:
! 593: );
! 594:
! 595: $next = -1;
! 596: foreach( $tests as $test ) {
! 597: $arg0 = urlencode($test[0]);
! 598: $res_str .= "extract from \"$arg0\" \"$test[1]\" graphemes - grapheme_extract";
! 599: if ( 3 == count( $test ) ) {
! 600: $result = grapheme_extract($test[0], $test[1]);
! 601: }
! 602: elseif ( 4 == count ( $test ) ) {
! 603: $res_str .= " starting at byte position $test[2]";
! 604: $result = grapheme_extract($test[0], $test[1], GRAPHEME_EXTR_COUNT, $test[2]);
! 605: }
! 606: else {
! 607: $res_str .= " starting at byte position $test[2] with \$next";
! 608: $result = grapheme_extract($test[0], $test[1], GRAPHEME_EXTR_COUNT, $test[2], $next);
! 609: }
! 610: $res_str .= " = ";
! 611: if ( $result === false ) {
! 612: $res_str .= 'false';
! 613: }
! 614: else {
! 615: $res_str .= urlencode($result);
! 616: }
! 617: $res_str .= " == " . urlencode($test[count($test)-1]) . check_result($result, $test[count($test)-1]);
! 618: if ( 5 == count ( $test ) ) {
! 619: $res_str .= " \$next=$next == $test[3] ";
! 620: if ( $next != $test[3] ) {
! 621: $res_str .= "***FAILED***";
! 622: }
! 623: }
! 624: $res_str .= "\n";
! 625: }
! 626:
! 627:
! 628: //=====================================================================================
! 629: $res_str .= "\n" . 'function grapheme_extract($haystack, $size, $extract_type = GRAPHEME_EXTR_MAXBYTES, $start = 0)' . "\n\n";
! 630:
! 631: $tests = array(
! 632: array( "abc", 3, "abc" ),
! 633: array( "abc", 2, "ab" ),
! 634: array( "abc", 1, "a" ),
! 635: array( "abc", 0, "" ),
! 636: array( $char_a_ring_nfd . "bc", 5, $char_a_ring_nfd . "bc" ),
! 637: array( $char_a_ring_nfd . "bc", 4, $char_a_ring_nfd . "b" ),
! 638: array( $char_a_ring_nfd . "bc", 1, "" ),
! 639: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 9, $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd ),
! 640: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 10, $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd ),
! 641: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 11, $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd ),
! 642: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 6, $char_a_ring_nfd . $char_o_diaeresis_nfd ),
! 643: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . "c", 3, $char_a_ring_nfd . "" ),
! 644: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . "c", 4, $char_a_ring_nfd . "" ),
! 645: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . "c", 5, $char_a_ring_nfd . "" ),
! 646: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . "c", 6, $char_a_ring_nfd . $char_o_diaeresis_nfd ),
! 647: array( $char_a_ring_nfd . $char_o_diaeresis_nfd . "c", 7, $char_a_ring_nfd . $char_o_diaeresis_nfd . "c" ),
! 648:
! 649: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 3, 0, $char_o_diaeresis_nfd),
! 650: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 3, 2, $char_o_diaeresis_nfd),
! 651: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 3, 3, $char_o_diaeresis_nfd),
! 652: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 3, 4, $char_diaeresis),
! 653:
! 654: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 6, 0, $char_o_diaeresis_nfd . $char_o_diaeresis_nfd),
! 655: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 6, 2, $char_o_diaeresis_nfd . $char_o_diaeresis_nfd),
! 656: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 6, 3, $char_o_diaeresis_nfd . $char_o_diaeresis_nfd),
! 657: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 5, 4, $char_diaeresis . $char_o_diaeresis_nfd),
! 658: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 5, 7, $char_diaeresis . $char_o_diaeresis_nfd),
! 659: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 3, 8, $char_o_diaeresis_nfd),
! 660: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 10, $char_diaeresis),
! 661: array( $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd . $char_o_diaeresis_nfd, 2, 11, "false"),
! 662:
! 663: );
! 664:
! 665: foreach( $tests as $test ) {
! 666: $arg0 = urlencode($test[0]);
! 667: $res_str .= "extract from \"$arg0\" \"$test[1]\" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES";
! 668: if ( 3 == count( $test ) ) {
! 669: $result = grapheme_extract($test[0], $test[1], GRAPHEME_EXTR_MAXBYTES);
! 670: }
! 671: else {
! 672: $res_str .= " starting at byte position $test[2]";
! 673: $result = grapheme_extract($test[0], $test[1], GRAPHEME_EXTR_MAXBYTES, $test[2]);
! 674: }
! 675: $res_str .= " = ";
! 676: if ( $result === false ) {
! 677: $res_str .= 'false';
! 678: }
! 679: else {
! 680: $res_str .= urlencode($result);
! 681: }
! 682: $res_str .= " == " . urlencode($test[count($test)-1]) . check_result($result, $test[count($test)-1]) . "\n";
! 683: }
! 684:
! 685:
! 686: //=====================================================================================
! 687: $res_str .= "\n" . 'function grapheme_extract($haystack, $size, $extract_type = GRAPHEME_EXTR_MAXCHARS, $start = 0)' . "\n\n";
! 688:
! 689: $tests = array(
! 690: array( "abc", 3, "abc" ),
! 691: array( "abc", 2, "ab" ),
! 692: array( "abc", 1, "a" ),
! 693: array( "abc", 0, "" ),
! 694: array( "abc" . $char_o_diaeresis_nfd, 0, "" ),
! 695: array( "abc" . $char_o_diaeresis_nfd, 1, "a" ),
! 696: array( "abc" . $char_o_diaeresis_nfd, 2, "ab" ),
! 697: array( "abc" . $char_o_diaeresis_nfd, 3, "abc" ),
! 698: array( "abc" . $char_o_diaeresis_nfd, 4, "abc" ),
! 699: array( "abc" . $char_o_diaeresis_nfd, 5, "abc" . $char_o_diaeresis_nfd),
! 700: array( "abc" . $char_o_diaeresis_nfd, 6, "abc" . $char_o_diaeresis_nfd),
! 701: array( $char_o_diaeresis_nfd . "abc", 0, "" ),
! 702: array( $char_o_diaeresis_nfd . "abc", 1, "" ),
! 703: array( $char_o_diaeresis_nfd . "abc", 2, $char_o_diaeresis_nfd ),
! 704: array( $char_o_diaeresis_nfd . "abc", 3, $char_o_diaeresis_nfd . "a" ),
! 705: array( $char_o_diaeresis_nfd . "abc", 4, $char_o_diaeresis_nfd . "ab" ),
! 706: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 5, $char_o_diaeresis_nfd . "abc" ),
! 707: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 6, $char_o_diaeresis_nfd . "abc" ),
! 708: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 7, $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd ),
! 709: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 8, $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "x" ),
! 710:
! 711: array( "abc", 3, 0, "abc" ),
! 712: array( "abc", 2, 1, "bc" ),
! 713: array( "abc", 1, 2, "c" ),
! 714: array( "abc", 0, 3, "false" ),
! 715: array( "abc", 1, 3, "false" ),
! 716: array( "abc", 1, 999, "false" ),
! 717: array( $char_o_diaeresis_nfd . "abc", 1, 6, "false" ),
! 718: array( $char_o_diaeresis_nfd . "abc", 1, 999, "false" ),
! 719: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 8, 0, $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "x" ),
! 720: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 8, 1, $char_diaeresis . "abc" . $char_a_ring_nfd . "xy" ),
! 721: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 8, 2, "abc" . $char_a_ring_nfd . "xyz" ),
! 722: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 8, 3, "abc" . $char_a_ring_nfd . "xyz" ),
! 723: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 8, 4, "bc" . $char_a_ring_nfd . "xyz" ),
! 724: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 8, 5, "c" . $char_a_ring_nfd . "xyz" ),
! 725: array( $char_o_diaeresis_nfd . "abc" . $char_a_ring_nfd . "xyz", 8, 6, $char_a_ring_nfd . "xyz" ),
! 726:
! 727: );
! 728:
! 729: foreach( $tests as $test ) {
! 730: $arg0 = urlencode($test[0]);
! 731: $res_str .= "extract from \"$arg0\" \"$test[1]\" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS";
! 732: if ( 3 == count( $test ) ) {
! 733: $result = grapheme_extract($test[0], $test[1], GRAPHEME_EXTR_MAXCHARS);
! 734: }
! 735: else {
! 736: $res_str .= " starting at byte position $test[2]";
! 737: $result = grapheme_extract($test[0], $test[1], GRAPHEME_EXTR_MAXCHARS, $test[2]);
! 738: }
! 739: $res_str .= " = ";
! 740: if ( $result === false ) {
! 741: $res_str .= 'false';
! 742: }
! 743: else {
! 744: $res_str .= urlencode($result);
! 745: }
! 746: $res_str .= " == " . urlencode($test[count($test)-1]) . check_result($result, $test[count($test)-1]) . "\n";
! 747: }
! 748:
! 749:
! 750: //=====================================================================================
! 751:
! 752: return $res_str;
! 753: }
! 754:
! 755: echo ut_main();
! 756:
! 757: function check_result($result, $expected) {
! 758:
! 759: if ( $result === false ) {
! 760: $result = 'false';
! 761: }
! 762:
! 763: if ( strcmp($result, $expected) != 0 ) {
! 764: return " **FAILED** ";
! 765: }
! 766:
! 767: return "";
! 768: }
! 769:
! 770: ?>
! 771: --EXPECT--
! 772:
! 773: function grapheme_strlen($string) {}
! 774:
! 775: "hindi" in devanagari strlen 3
! 776: "ab" + "hindi" + "cde" strlen 8
! 777: "" strlen 0
! 778: char_a_ring_nfd strlen 1
! 779: char_a_ring_nfd + "bc" strlen 3
! 780: "abc" strlen 3
! 781:
! 782: function grapheme_strpos($haystack, $needle, $offset = 0) {}
! 783:
! 784: find "o" in "aa%CC%8Abco%CC%88o" - grapheme_strpos = 5 == 5
! 785: find "o" in "aa%CC%8Abco%CC%88" - grapheme_strpos = false == false
! 786: find "o%CC%88" in "aa%CC%8Abco%CC%88" - grapheme_strpos = 4 == 4
! 787: find "a%CC%8A" in "o%CC%88aa%CC%8Abc" - grapheme_strpos = 2 == 2
! 788: find "a%CC%8A" in "aa%CC%8Abc" - grapheme_strpos = 1 == 1
! 789: find "a%CC%8A" in "abc" - grapheme_strpos = false == false
! 790: find "a" in "a%CC%8Abc" - grapheme_strpos = false == false
! 791: find "d" in "abc" - grapheme_strpos = false == false
! 792: find "c" in "abc" - grapheme_strpos = 2 == 2
! 793: find "b" in "abc" - grapheme_strpos = 1 == 1
! 794: find "a" in "abc" - grapheme_strpos = 0 == 0
! 795: find "a" in "abc" - grapheme_strpos from 0 = 0 == 0
! 796: find "a" in "abc" - grapheme_strpos from 1 = false == false
! 797: find "a" in "ababc" - grapheme_strpos from 1 = 2 == 2
! 798: find "o" in "aoa%CC%8Abco%CC%88o" - grapheme_strpos from 2 = 6 == 6
! 799: find "a%CC%8A" in "o%CC%88a%CC%8Aaa%CC%8Abc" - grapheme_strpos from 2 = 3 == 3
! 800: find "op" in "aa%CC%8Abco%CC%88opq" - grapheme_strpos = 5 == 5
! 801: find "opq" in "aa%CC%8Abco%CC%88opq" - grapheme_strpos = 5 == 5
! 802: find "abc" in "aa%CC%8Abco%CC%88" - grapheme_strpos = false == false
! 803: find "o%CC%88bco%CC%88" in "aa%CC%8Abco%CC%88bco%CC%88" - grapheme_strpos = 4 == 4
! 804: find "a%CC%8Abc" in "o%CC%88aa%CC%8Abc" - grapheme_strpos = 2 == 2
! 805: find "a%CC%8Abc" in "aa%CC%8Abc" - grapheme_strpos = 1 == 1
! 806: find "a%CC%8Abc" in "abc" - grapheme_strpos = false == false
! 807: find "abcdefg" in "a%CC%8Abc" - grapheme_strpos = false == false
! 808: find "defghijklmnopq" in "abc" - grapheme_strpos = false == false
! 809: find "ab" in "abc" - grapheme_strpos = 0 == 0
! 810: find "bc" in "abc" - grapheme_strpos = 1 == 1
! 811: find "abc" in "abc" - grapheme_strpos = 0 == 0
! 812: find "abcd" in "abc" - grapheme_strpos = false == false
! 813: find "ab" in "abc" - grapheme_strpos from 0 = 0 == 0
! 814: find "abc" in "abc" - grapheme_strpos from 0 = 0 == 0
! 815: find "abc" in "abc" - grapheme_strpos from 1 = false == false
! 816: find "ab" in "ababc" - grapheme_strpos from 1 = 2 == 2
! 817: find "abc" in "ababc" - grapheme_strpos from 1 = 2 == 2
! 818: find "oa%CC%8Abc" in "aoa%CC%8Abco%CC%88oa%CC%8Abc" - grapheme_strpos from 2 = 6 == 6
! 819: find "a%CC%8Abca%CC%8A" in "o%CC%88a%CC%8Aaa%CC%8Abca%CC%8Adef" - grapheme_strpos from 2 = 3 == 3
! 820:
! 821: function grapheme_stripos($haystack, $needle, $offset = 0) {}
! 822:
! 823: find "o" in "aoa%CC%8Abco%CC%88O" - grapheme_stripos from 2 = 6 == 6
! 824: find "a%CC%8A" in "o%CC%88a%CC%8AaA%CC%8Abc" - grapheme_stripos from 2 = 3 == 3
! 825: find "o" in "aa%CC%8Abco%CC%88O" - grapheme_stripos = 5 == 5
! 826: find "O" in "aa%CC%8Abco%CC%88" - grapheme_stripos = false == false
! 827: find "o%CC%88" in "aa%CC%8AbcO%CC%88" - grapheme_stripos = 4 == 4
! 828: find "A%CC%8A" in "o%CC%88aa%CC%8Abc" - grapheme_stripos = 2 == 2
! 829: find "a%CC%8A" in "aA%CC%8Abc" - grapheme_stripos = 1 == 1
! 830: find "a%CC%8A" in "Abc" - grapheme_stripos = false == false
! 831: find "A" in "a%CC%8Abc" - grapheme_stripos = false == false
! 832: find "D" in "abc" - grapheme_stripos = false == false
! 833: find "c" in "abC" - grapheme_stripos = 2 == 2
! 834: find "B" in "abc" - grapheme_stripos = 1 == 1
! 835: find "a" in "Abc" - grapheme_stripos = 0 == 0
! 836: find "A" in "abc" - grapheme_stripos from 0 = 0 == 0
! 837: find "a" in "Abc" - grapheme_stripos from 1 = false == false
! 838: find "A" in "ababc" - grapheme_stripos from 1 = 2 == 2
! 839: find "oP" in "aa%CC%8Abco%CC%88Opq" - grapheme_stripos = 5 == 5
! 840: find "opQ" in "aa%CC%8Abco%CC%88Opq" - grapheme_stripos = 5 == 5
! 841: find "abc" in "aa%CC%8Abco%CC%88" - grapheme_stripos = false == false
! 842: find "O%CC%88bco%CC%88" in "aa%CC%8Abco%CC%88bCo%CC%88" - grapheme_stripos = 4 == 4
! 843: find "A%CC%8Abc" in "o%CC%88aa%CC%8ABc" - grapheme_stripos = 2 == 2
! 844: find "a%CC%8Abc" in "aa%CC%8ABC" - grapheme_stripos = 1 == 1
! 845: find "a%CC%8ABC" in "abc" - grapheme_stripos = false == false
! 846: find "aBCdefg" in "a%CC%8ABC" - grapheme_stripos = false == false
! 847: find "Defghijklmnopq" in "aBC" - grapheme_stripos = false == false
! 848: find "Ab" in "abC" - grapheme_stripos = 0 == 0
! 849: find "bc" in "aBC" - grapheme_stripos = 1 == 1
! 850: find "Abc" in "abC" - grapheme_stripos = 0 == 0
! 851: find "aBcd" in "abC" - grapheme_stripos = false == false
! 852: find "ab" in "ABc" - grapheme_stripos from 0 = 0 == 0
! 853: find "abC" in "aBc" - grapheme_stripos from 0 = 0 == 0
! 854: find "aBc" in "abc" - grapheme_stripos from 1 = false == false
! 855: find "AB" in "ABabc" - grapheme_stripos from 1 = 2 == 2
! 856: find "aBc" in "abaBc" - grapheme_stripos from 1 = 2 == 2
! 857: find "Oa%CC%8AbC" in "aoa%CC%8Abco%CC%88oA%CC%8AbC" - grapheme_stripos from 2 = 6 == 6
! 858: find "a%CC%8ABca%CC%8A" in "o%CC%88a%CC%8AaA%CC%8AbCa%CC%8Adef" - grapheme_stripos from 2 = 3 == 3
! 859:
! 860: function grapheme_strrpos($haystack, $needle, $offset = 0) {}
! 861:
! 862: find "o" in "aa%CC%8Abco%CC%88o" - grapheme_strrpos = 5 == 5
! 863: find "o" in "aa%CC%8Abco%CC%88" - grapheme_strrpos = false == false
! 864: find "o%CC%88" in "aa%CC%8Abco%CC%88" - grapheme_strrpos = 4 == 4
! 865: find "a%CC%8A" in "o%CC%88aa%CC%8Abc" - grapheme_strrpos = 2 == 2
! 866: find "a%CC%8A" in "aa%CC%8Abc" - grapheme_strrpos = 1 == 1
! 867: find "a%CC%8A" in "abc" - grapheme_strrpos = false == false
! 868: find "a" in "a%CC%8Abc" - grapheme_strrpos = false == false
! 869: find "d" in "abc" - grapheme_strrpos = false == false
! 870: find "c" in "abc" - grapheme_strrpos = 2 == 2
! 871: find "b" in "abc" - grapheme_strrpos = 1 == 1
! 872: find "a" in "abc" - grapheme_strrpos = 0 == 0
! 873: find "a" in "abc" - grapheme_strrpos from 0 = 0 == 0
! 874: find "a" in "abc" - grapheme_strrpos from 1 = false == false
! 875: find "a" in "ababc" - grapheme_strrpos from 1 = 2 == 2
! 876: find "o" in "aoa%CC%8Abco%CC%88o" - grapheme_strrpos from 2 = 6 == 6
! 877: find "a%CC%8A" in "o%CC%88a%CC%8Aaa%CC%8Abc" - grapheme_strrpos from 2 = 3 == 3
! 878: find "op" in "aa%CC%8Abco%CC%88opq" - grapheme_strrpos = 5 == 5
! 879: find "opq" in "aa%CC%8Abco%CC%88opq" - grapheme_strrpos = 5 == 5
! 880: find "abc" in "aa%CC%8Abco%CC%88" - grapheme_strrpos = false == false
! 881: find "o%CC%88bco%CC%88" in "aa%CC%8Abco%CC%88bco%CC%88" - grapheme_strrpos = 4 == 4
! 882: find "a%CC%8Abc" in "o%CC%88aa%CC%8Abc" - grapheme_strrpos = 2 == 2
! 883: find "a%CC%8Abc" in "aa%CC%8Abc" - grapheme_strrpos = 1 == 1
! 884: find "a%CC%8Abc" in "abc" - grapheme_strrpos = false == false
! 885: find "abcdefg" in "a%CC%8Abc" - grapheme_strrpos = false == false
! 886: find "defghijklmnopq" in "abc" - grapheme_strrpos = false == false
! 887: find "ab" in "abc" - grapheme_strrpos = 0 == 0
! 888: find "bc" in "abc" - grapheme_strrpos = 1 == 1
! 889: find "abc" in "abc" - grapheme_strrpos = 0 == 0
! 890: find "abcd" in "abc" - grapheme_strrpos = false == false
! 891: find "ab" in "abc" - grapheme_strrpos from 0 = 0 == 0
! 892: find "abc" in "abc" - grapheme_strrpos from 0 = 0 == 0
! 893: find "abc" in "abc" - grapheme_strrpos from 1 = false == false
! 894: find "ab" in "ababc" - grapheme_strrpos from 1 = 2 == 2
! 895: find "abc" in "ababc" - grapheme_strrpos from 1 = 2 == 2
! 896: find "oa%CC%8Abc" in "aoa%CC%8Abco%CC%88oa%CC%8Abc" - grapheme_strrpos from 2 = 6 == 6
! 897: find "a%CC%8Abca%CC%8A" in "o%CC%88a%CC%8Aaa%CC%8Abca%CC%8Adef" - grapheme_strrpos from 2 = 3 == 3
! 898:
! 899: function grapheme_strripos($haystack, $needle, $offset = 0) {}
! 900:
! 901: find "o" in "aoa%CC%8Abco%CC%88O" - grapheme_strripos from 2 = 6 == 6
! 902: find "a%CC%8A" in "o%CC%88a%CC%8AaA%CC%8Abc" - grapheme_strripos from 2 = 3 == 3
! 903: find "o" in "aa%CC%8Abco%CC%88O" - grapheme_strripos = 5 == 5
! 904: find "O" in "aa%CC%8Abco%CC%88" - grapheme_strripos = false == false
! 905: find "o%CC%88" in "aa%CC%8AbcO%CC%88" - grapheme_strripos = 4 == 4
! 906: find "A%CC%8A" in "o%CC%88aa%CC%8Abc" - grapheme_strripos = 2 == 2
! 907: find "a%CC%8A" in "aA%CC%8Abc" - grapheme_strripos = 1 == 1
! 908: find "a%CC%8A" in "Abc" - grapheme_strripos = false == false
! 909: find "A" in "a%CC%8Abc" - grapheme_strripos = false == false
! 910: find "D" in "abc" - grapheme_strripos = false == false
! 911: find "c" in "abC" - grapheme_strripos = 2 == 2
! 912: find "B" in "abc" - grapheme_strripos = 1 == 1
! 913: find "a" in "Abc" - grapheme_strripos = 0 == 0
! 914: find "A" in "abc" - grapheme_strripos from 0 = 0 == 0
! 915: find "a" in "Abc" - grapheme_strripos from 1 = false == false
! 916: find "A" in "ababc" - grapheme_strripos from 1 = 2 == 2
! 917: find "oP" in "aa%CC%8Abco%CC%88Opq" - grapheme_strripos = 5 == 5
! 918: find "opQ" in "aa%CC%8Abco%CC%88Opq" - grapheme_strripos = 5 == 5
! 919: find "abc" in "aa%CC%8Abco%CC%88" - grapheme_strripos = false == false
! 920: find "O%CC%88bco%CC%88" in "aa%CC%8Abco%CC%88bCo%CC%88" - grapheme_strripos = 4 == 4
! 921: find "A%CC%8Abc" in "o%CC%88aa%CC%8ABc" - grapheme_strripos = 2 == 2
! 922: find "a%CC%8Abc" in "aa%CC%8ABC" - grapheme_strripos = 1 == 1
! 923: find "a%CC%8ABC" in "abc" - grapheme_strripos = false == false
! 924: find "aBCdefg" in "a%CC%8ABC" - grapheme_strripos = false == false
! 925: find "Defghijklmnopq" in "aBC" - grapheme_strripos = false == false
! 926: find "Ab" in "abC" - grapheme_strripos = 0 == 0
! 927: find "bc" in "aBC" - grapheme_strripos = 1 == 1
! 928: find "Abc" in "abC" - grapheme_strripos = 0 == 0
! 929: find "aBcd" in "abC" - grapheme_strripos = false == false
! 930: find "ab" in "ABc" - grapheme_strripos from 0 = 0 == 0
! 931: find "abC" in "aBc" - grapheme_strripos from 0 = 0 == 0
! 932: find "aBc" in "abc" - grapheme_strripos from 1 = false == false
! 933: find "AB" in "ABabc" - grapheme_strripos from 1 = 2 == 2
! 934: find "aBc" in "abaBc" - grapheme_strripos from 1 = 2 == 2
! 935: find "Oa%CC%8AbC" in "aoa%CC%8Abco%CC%88oA%CC%8AbC" - grapheme_strripos from 2 = 6 == 6
! 936: find "a%CC%8ABca%CC%8A" in "o%CC%88a%CC%8AaA%CC%8AbCa%CC%8Adef" - grapheme_strripos from 2 = 3 == 3
! 937:
! 938: function grapheme_substr($string, $start, $length = -1) {}
! 939:
! 940: substring of "abc" from "3" - grapheme_substr = false == false
! 941: substring of "aa%CC%8Abco%CC%88" from "5" - grapheme_substr = false == false
! 942: substring of "aoa%CC%8Abco%CC%88O" from "2" - grapheme_substr = a%CC%8Abco%CC%88O == a%CC%8Abco%CC%88O
! 943: substring of "o%CC%88a%CC%8AaA%CC%8Abc" from "2" - grapheme_substr = aA%CC%8Abc == aA%CC%8Abc
! 944: substring of "aa%CC%8Abco%CC%88O" from "5" - grapheme_substr = O == O
! 945: substring of "aa%CC%8Abco%CC%88" from "5" - grapheme_substr = false == false
! 946: substring of "aa%CC%8AbcO%CC%88" from "4" - grapheme_substr = O%CC%88 == O%CC%88
! 947: substring of "o%CC%88aa%CC%8Abc" from "2" - grapheme_substr = a%CC%8Abc == a%CC%8Abc
! 948: substring of "aA%CC%8Abc" from "1" - grapheme_substr = A%CC%8Abc == A%CC%8Abc
! 949: substring of "Abc" from "-5" - grapheme_substr = false == false
! 950: substring of "a%CC%8Abc" from "3" - grapheme_substr = false == false
! 951: substring of "abc" from "4" - grapheme_substr = false == false
! 952: substring of "abC" from "2" - grapheme_substr = C == C
! 953: substring of "abc" from "1" - grapheme_substr = bc == bc
! 954: substring of "Abc" from "1" - grapheme_substr with length 1 = b == b
! 955: substring of "abc" from "0" - grapheme_substr with length 2 = ab == ab
! 956: substring of "Abc" from "-4" - grapheme_substr with length 1 = false == false
! 957: substring of "ababc" from "1" - grapheme_substr with length 2 = ba == ba
! 958: substring of "ababc" from "0" - grapheme_substr with length 10 = ababc == ababc
! 959: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length 10 = aa%CC%8Abco%CC%88Opq == aa%CC%8Abco%CC%88Opq
! 960: substring of "aa%CC%8Abco%CC%88Opq" from "5" - grapheme_substr = Opq == Opq
! 961: substring of "aa%CC%8Abco%CC%88Opq" from "5" - grapheme_substr with length -1 = Op == Op
! 962: substring of "aa%CC%8Abco%CC%88Opq" from "5" - grapheme_substr with length -2 = O == O
! 963: substring of "aa%CC%8Abco%CC%88Opq" from "5" - grapheme_substr with length -3 = ==
! 964: substring of "aa%CC%8Abco%CC%88Opq" from "5" - grapheme_substr with length -4 = false == false
! 965: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr = aa%CC%8Abco%CC%88Opq == aa%CC%8Abco%CC%88Opq
! 966: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length -1 = aa%CC%8Abco%CC%88Op == aa%CC%8Abco%CC%88Op
! 967: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length -2 = aa%CC%8Abco%CC%88O == aa%CC%8Abco%CC%88O
! 968: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length -3 = aa%CC%8Abco%CC%88 == aa%CC%8Abco%CC%88
! 969: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length -4 = aa%CC%8Abc == aa%CC%8Abc
! 970: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length -5 = aa%CC%8Ab == aa%CC%8Ab
! 971: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length -6 = aa%CC%8A == aa%CC%8A
! 972: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length -7 = a == a
! 973: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length -8 = ==
! 974: substring of "aa%CC%8Abco%CC%88Opq" from "0" - grapheme_substr with length -9 = false == false
! 975: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr = aa%CC%8Abco%CC%88Opq == aa%CC%8Abco%CC%88Opq
! 976: substring of "aa%CC%8Abco%CC%88Opq" from "-7" - grapheme_substr = a%CC%8Abco%CC%88Opq == a%CC%8Abco%CC%88Opq
! 977: substring of "aa%CC%8Abco%CC%88Opq" from "-6" - grapheme_substr = bco%CC%88Opq == bco%CC%88Opq
! 978: substring of "aa%CC%8Abco%CC%88Opq" from "-5" - grapheme_substr = co%CC%88Opq == co%CC%88Opq
! 979: substring of "aa%CC%8Abco%CC%88Opq" from "-4" - grapheme_substr = o%CC%88Opq == o%CC%88Opq
! 980: substring of "aa%CC%8Abco%CC%88Opq" from "-3" - grapheme_substr = Opq == Opq
! 981: substring of "aa%CC%8Abco%CC%88Opq" from "-2" - grapheme_substr = pq == pq
! 982: substring of "aa%CC%8Abco%CC%88Opq" from "-1" - grapheme_substr = q == q
! 983: substring of "aa%CC%8Abco%CC%88Opq" from "-999" - grapheme_substr = false == false
! 984: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length 8 = aa%CC%8Abco%CC%88Opq == aa%CC%8Abco%CC%88Opq
! 985: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length 7 = aa%CC%8Abco%CC%88Op == aa%CC%8Abco%CC%88Op
! 986: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length 6 = aa%CC%8Abco%CC%88O == aa%CC%8Abco%CC%88O
! 987: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length 5 = aa%CC%8Abco%CC%88 == aa%CC%8Abco%CC%88
! 988: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length 4 = aa%CC%8Abc == aa%CC%8Abc
! 989: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length 3 = aa%CC%8Ab == aa%CC%8Ab
! 990: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length 2 = aa%CC%8A == aa%CC%8A
! 991: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length 1 = a == a
! 992: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length 0 = ==
! 993: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -999 = false == false
! 994: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -1 = aa%CC%8Abco%CC%88Op == aa%CC%8Abco%CC%88Op
! 995: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -2 = aa%CC%8Abco%CC%88O == aa%CC%8Abco%CC%88O
! 996: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -3 = aa%CC%8Abco%CC%88 == aa%CC%8Abco%CC%88
! 997: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -4 = aa%CC%8Abc == aa%CC%8Abc
! 998: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -5 = aa%CC%8Ab == aa%CC%8Ab
! 999: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -6 = aa%CC%8A == aa%CC%8A
! 1000: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -7 = a == a
! 1001: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -8 = ==
! 1002: substring of "aa%CC%8Abco%CC%88Opq" from "-8" - grapheme_substr with length -9 = false == false
! 1003:
! 1004: function grapheme_strstr($haystack, $needle, $before_needle = FALSE) {}
! 1005:
! 1006: find "o" in "aa%CC%8Abco%CC%88o" - grapheme_strstr = o == o
! 1007: find "o" in "aa%CC%8Abco%CC%88" - grapheme_strstr = false == false
! 1008: find "o%CC%88" in "aa%CC%8Abco%CC%88" - grapheme_strstr = o%CC%88 == o%CC%88
! 1009: find "a%CC%8A" in "o%CC%88aa%CC%8Abc" - grapheme_strstr = a%CC%8Abc == a%CC%8Abc
! 1010: find "a%CC%8A" in "aa%CC%8Abc" - grapheme_strstr = a%CC%8Abc == a%CC%8Abc
! 1011: find "a%CC%8A" in "abc" - grapheme_strstr = false == false
! 1012: find "a" in "a%CC%8Abc" - grapheme_strstr = false == false
! 1013: find "d" in "abc" - grapheme_strstr = false == false
! 1014: find "c" in "abc" - grapheme_strstr = c == c
! 1015: find "b" in "abc" - grapheme_strstr = bc == bc
! 1016: find "a" in "abc" - grapheme_strstr = abc == abc
! 1017: find "ab" in "abc" - grapheme_strstr = abc == abc
! 1018: find "abc" in "abc" - grapheme_strstr = abc == abc
! 1019: find "bc" in "abc" - grapheme_strstr = bc == bc
! 1020: find "a" in "abc" - grapheme_strstr before flag is FALSE = abc == abc
! 1021: find "a" in "abc" - grapheme_strstr before flag is TRUE = ==
! 1022: find "b" in "abc" - grapheme_strstr before flag is TRUE = a == a
! 1023: find "c" in "abc" - grapheme_strstr before flag is TRUE = ab == ab
! 1024: find "bab" in "ababc" - grapheme_strstr before flag is TRUE = a == a
! 1025: find "abc" in "ababc" - grapheme_strstr before flag is TRUE = ab == ab
! 1026: find "abc" in "ababc" - grapheme_strstr before flag is FALSE = abc == abc
! 1027: find "d" in "aba%CC%8Ac" - grapheme_strstr = false == false
! 1028: find "a" in "bca%CC%8Aa" - grapheme_strstr = a == a
! 1029: find "b" in "aa%CC%8Abc" - grapheme_strstr = bc == bc
! 1030: find "a" in "a%CC%8Abc" - grapheme_strstr = false == false
! 1031: find "ab" in "a%CC%8Aabc" - grapheme_strstr = abc == abc
! 1032: find "abc" in "abca%CC%8A" - grapheme_strstr = abca%CC%8A == abca%CC%8A
! 1033: find "a%CC%8Abc" in "aa%CC%8Abc" - grapheme_strstr = a%CC%8Abc == a%CC%8Abc
! 1034: find "a%CC%8A" in "aa%CC%8Abc" - grapheme_strstr before flag is FALSE = a%CC%8Abc == a%CC%8Abc
! 1035: find "a" in "aa%CC%8Abc" - grapheme_strstr before flag is TRUE = ==
! 1036: find "b" in "a%CC%8Aabc" - grapheme_strstr before flag is TRUE = a%CC%8Aa == a%CC%8Aa
! 1037: find "c" in "aba%CC%8Ac" - grapheme_strstr before flag is TRUE = aba%CC%8A == aba%CC%8A
! 1038: find "baa%CC%8Ab" in "abaa%CC%8Abc" - grapheme_strstr before flag is TRUE = a == a
! 1039: find "abca%CC%8A" in "ababca%CC%8A" - grapheme_strstr before flag is TRUE = ab == ab
! 1040: find "aba%CC%8Ac" in "ababa%CC%8Ac" - grapheme_strstr before flag is FALSE = aba%CC%8Ac == aba%CC%8Ac
! 1041:
! 1042: function grapheme_stristr($haystack, $needle, $before_needle = FALSE) {}
! 1043:
! 1044: find "O%CC%88" in "aa%CC%8Abco%CC%88" - grapheme_stristr = o%CC%88 == o%CC%88
! 1045: find "o" in "aa%CC%8Abco%CC%88O" - grapheme_stristr = O == O
! 1046: find "o" in "aa%CC%8Abco%CC%88" - grapheme_stristr = false == false
! 1047: find "a%CC%8A" in "o%CC%88aa%CC%8Abc" - grapheme_stristr = a%CC%8Abc == a%CC%8Abc
! 1048: find "A%CC%8A" in "aa%CC%8Abc" - grapheme_stristr = a%CC%8Abc == a%CC%8Abc
! 1049: find "a%CC%8A" in "abc" - grapheme_stristr = false == false
! 1050: find "A" in "a%CC%8Abc" - grapheme_stristr = false == false
! 1051: find "d" in "abc" - grapheme_stristr = false == false
! 1052: find "C" in "abc" - grapheme_stristr = c == c
! 1053: find "b" in "aBc" - grapheme_stristr = Bc == Bc
! 1054: find "A" in "abc" - grapheme_stristr = abc == abc
! 1055: find "ab" in "abC" - grapheme_stristr = abC == abC
! 1056: find "aBc" in "abc" - grapheme_stristr = abc == abc
! 1057: find "bc" in "abC" - grapheme_stristr = bC == bC
! 1058: find "A" in "abc" - grapheme_stristr before flag is FALSE = abc == abc
! 1059: find "a" in "abc" - grapheme_stristr before flag is TRUE = ==
! 1060: find "b" in "aBc" - grapheme_stristr before flag is TRUE = a == a
! 1061: find "C" in "abc" - grapheme_stristr before flag is TRUE = ab == ab
! 1062: find "bab" in "aBabc" - grapheme_stristr before flag is TRUE = a == a
! 1063: find "aBc" in "ababc" - grapheme_stristr before flag is TRUE = ab == ab
! 1064: find "abC" in "ababc" - grapheme_stristr before flag is FALSE = abc == abc
! 1065: find "d" in "aba%CC%8Ac" - grapheme_stristr = false == false
! 1066: find "a" in "bca%CC%8AA" - grapheme_stristr = A == A
! 1067: find "B" in "aa%CC%8Abc" - grapheme_stristr = bc == bc
! 1068: find "a" in "A%CC%8Abc" - grapheme_stristr = false == false
! 1069: find "Ab" in "a%CC%8Aabc" - grapheme_stristr = abc == abc
! 1070: find "abc" in "abcA%CC%8A" - grapheme_stristr = abcA%CC%8A == abcA%CC%8A
! 1071: find "A%CC%8Abc" in "aa%CC%8Abc" - grapheme_stristr = a%CC%8Abc == a%CC%8Abc
! 1072: find "a%CC%8A" in "aA%CC%8Abc" - grapheme_stristr before flag is FALSE = A%CC%8Abc == A%CC%8Abc
! 1073: find "A" in "aa%CC%8Abc" - grapheme_stristr before flag is TRUE = ==
! 1074: find "b" in "a%CC%8AaBc" - grapheme_stristr before flag is TRUE = a%CC%8Aa == a%CC%8Aa
! 1075: find "C" in "aba%CC%8Ac" - grapheme_stristr before flag is TRUE = aba%CC%8A == aba%CC%8A
! 1076: find "baa%CC%8Ab" in "abaA%CC%8Abc" - grapheme_stristr before flag is TRUE = a == a
! 1077: find "aBcA%CC%8A" in "ababca%CC%8A" - grapheme_stristr before flag is TRUE = ab == ab
! 1078: find "aba%CC%8Ac" in "abABA%CC%8Ac" - grapheme_stristr before flag is FALSE = ABA%CC%8Ac == ABA%CC%8Ac
! 1079:
! 1080: function grapheme_extract($haystack, $size, $extract_type = GRAPHEME_EXTR_COUNT, $start = 0[, $next])
! 1081:
! 1082: extract from "abc" "3" graphemes - grapheme_extract = abc == abc
! 1083: extract from "abc" "2" graphemes - grapheme_extract = ab == ab
! 1084: extract from "abc" "1" graphemes - grapheme_extract = a == a
! 1085: extract from "abc" "0" graphemes - grapheme_extract = ==
! 1086: extract from "abc" "1" graphemes - grapheme_extract starting at byte position 0 = a == a
! 1087: extract from "abc" "1" graphemes - grapheme_extract starting at byte position 1 = b == b
! 1088: extract from "abc" "1" graphemes - grapheme_extract starting at byte position 2 = c == c
! 1089: extract from "abc" "0" graphemes - grapheme_extract starting at byte position 2 = ==
! 1090: extract from "abc" "3" graphemes - grapheme_extract starting at byte position 0 with $next = abc == abc $next=3 == 3
! 1091: extract from "abc" "2" graphemes - grapheme_extract starting at byte position 0 with $next = ab == ab $next=2 == 2
! 1092: extract from "abc" "1" graphemes - grapheme_extract starting at byte position 0 with $next = a == a $next=1 == 1
! 1093: extract from "abc" "0" graphemes - grapheme_extract starting at byte position 0 with $next = == $next=0 == 0
! 1094: extract from "abc" "1" graphemes - grapheme_extract starting at byte position 0 with $next = a == a $next=1 == 1
! 1095: extract from "abc" "1" graphemes - grapheme_extract starting at byte position 1 with $next = b == b $next=2 == 2
! 1096: extract from "abc" "1" graphemes - grapheme_extract starting at byte position 2 with $next = c == c $next=3 == 3
! 1097: extract from "abc" "0" graphemes - grapheme_extract starting at byte position 2 with $next = == $next=2 == 2
! 1098: extract from "http%3A%2F%2Fnews.bbc.co.uk%2F2%2Fhi%2Fmiddle_east%2F7831588.stm" "48" graphemes - grapheme_extract starting at byte position 48 with $next = tm == tm $next=50 == 50
! 1099: extract from "a%CC%8Abc" "3" graphemes - grapheme_extract = a%CC%8Abc == a%CC%8Abc
! 1100: extract from "a%CC%8Abc" "2" graphemes - grapheme_extract = a%CC%8Ab == a%CC%8Ab
! 1101: extract from "a%CC%8Abc" "1" graphemes - grapheme_extract = a%CC%8A == a%CC%8A
! 1102: extract from "a%CC%8Abc" "3" graphemes - grapheme_extract starting at byte position 0 with $next = a%CC%8Abc == a%CC%8Abc $next=5 == 5
! 1103: extract from "a%CC%8Abc" "2" graphemes - grapheme_extract starting at byte position 0 with $next = a%CC%8Ab == a%CC%8Ab $next=4 == 4
! 1104: extract from "a%CC%8Abc" "1" graphemes - grapheme_extract starting at byte position 0 with $next = a%CC%8A == a%CC%8A $next=3 == 3
! 1105: extract from "a%CC%8Abcde" "2" graphemes - grapheme_extract starting at byte position 3 with $next = bc == bc $next=5 == 5
! 1106: extract from "a%CC%8Abcde" "2" graphemes - grapheme_extract starting at byte position 4 with $next = cd == cd $next=6 == 6
! 1107: extract from "a%CC%8Abcdea%CC%8Af" "4" graphemes - grapheme_extract starting at byte position 5 with $next = dea%CC%8Af == dea%CC%8Af $next=11 == 11
! 1108: extract from "a%CC%8Ao%CC%88o%CC%88" "3" graphemes - grapheme_extract = a%CC%8Ao%CC%88o%CC%88 == a%CC%8Ao%CC%88o%CC%88
! 1109: extract from "a%CC%8Ao%CC%88o%CC%88" "2" graphemes - grapheme_extract = a%CC%8Ao%CC%88 == a%CC%8Ao%CC%88
! 1110: extract from "a%CC%8Ao%CC%88c" "1" graphemes - grapheme_extract = a%CC%8A == a%CC%8A
! 1111: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "1" graphemes - grapheme_extract starting at byte position 0 = o%CC%88 == o%CC%88
! 1112: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "1" graphemes - grapheme_extract starting at byte position 2 = o%CC%88 == o%CC%88
! 1113: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "1" graphemes - grapheme_extract starting at byte position 3 = o%CC%88 == o%CC%88
! 1114: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "1" graphemes - grapheme_extract starting at byte position 4 = %CC%88 == %CC%88
! 1115: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract starting at byte position 0 = o%CC%88o%CC%88 == o%CC%88o%CC%88
! 1116: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract starting at byte position 2 = o%CC%88o%CC%88 == o%CC%88o%CC%88
! 1117: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract starting at byte position 3 = o%CC%88o%CC%88 == o%CC%88o%CC%88
! 1118: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract starting at byte position 4 = %CC%88o%CC%88 == %CC%88o%CC%88
! 1119: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract starting at byte position 7 = %CC%88o%CC%88 == %CC%88o%CC%88
! 1120: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract starting at byte position 8 = o%CC%88 == o%CC%88
! 1121: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract starting at byte position 10 = %CC%88 == %CC%88
! 1122: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract starting at byte position 11 = false == false
! 1123:
! 1124: function grapheme_extract($haystack, $size, $extract_type = GRAPHEME_EXTR_MAXBYTES, $start = 0)
! 1125:
! 1126: extract from "abc" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = abc == abc
! 1127: extract from "abc" "2" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = ab == ab
! 1128: extract from "abc" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a == a
! 1129: extract from "abc" "0" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = ==
! 1130: extract from "a%CC%8Abc" "5" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8Abc == a%CC%8Abc
! 1131: extract from "a%CC%8Abc" "4" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8Ab == a%CC%8Ab
! 1132: extract from "a%CC%8Abc" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = ==
! 1133: extract from "a%CC%8Ao%CC%88o%CC%88" "9" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8Ao%CC%88o%CC%88 == a%CC%8Ao%CC%88o%CC%88
! 1134: extract from "a%CC%8Ao%CC%88o%CC%88" "10" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8Ao%CC%88o%CC%88 == a%CC%8Ao%CC%88o%CC%88
! 1135: extract from "a%CC%8Ao%CC%88o%CC%88" "11" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8Ao%CC%88o%CC%88 == a%CC%8Ao%CC%88o%CC%88
! 1136: extract from "a%CC%8Ao%CC%88o%CC%88" "6" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8Ao%CC%88 == a%CC%8Ao%CC%88
! 1137: extract from "a%CC%8Ao%CC%88c" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8A == a%CC%8A
! 1138: extract from "a%CC%8Ao%CC%88c" "4" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8A == a%CC%8A
! 1139: extract from "a%CC%8Ao%CC%88c" "5" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8A == a%CC%8A
! 1140: extract from "a%CC%8Ao%CC%88c" "6" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8Ao%CC%88 == a%CC%8Ao%CC%88
! 1141: extract from "a%CC%8Ao%CC%88c" "7" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES = a%CC%8Ao%CC%88c == a%CC%8Ao%CC%88c
! 1142: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 0 = o%CC%88 == o%CC%88
! 1143: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 2 = o%CC%88 == o%CC%88
! 1144: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 3 = o%CC%88 == o%CC%88
! 1145: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 4 = %CC%88 == %CC%88
! 1146: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "6" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 0 = o%CC%88o%CC%88 == o%CC%88o%CC%88
! 1147: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "6" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 2 = o%CC%88o%CC%88 == o%CC%88o%CC%88
! 1148: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "6" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 3 = o%CC%88o%CC%88 == o%CC%88o%CC%88
! 1149: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "5" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 4 = %CC%88o%CC%88 == %CC%88o%CC%88
! 1150: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "5" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 7 = %CC%88o%CC%88 == %CC%88o%CC%88
! 1151: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 8 = o%CC%88 == o%CC%88
! 1152: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 10 = %CC%88 == %CC%88
! 1153: extract from "o%CC%88o%CC%88o%CC%88o%CC%88" "2" graphemes - grapheme_extract GRAPHEME_EXTR_MAXBYTES starting at byte position 11 = false == false
! 1154:
! 1155: function grapheme_extract($haystack, $size, $extract_type = GRAPHEME_EXTR_MAXCHARS, $start = 0)
! 1156:
! 1157: extract from "abc" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = abc == abc
! 1158: extract from "abc" "2" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = ab == ab
! 1159: extract from "abc" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = a == a
! 1160: extract from "abc" "0" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = ==
! 1161: extract from "abco%CC%88" "0" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = ==
! 1162: extract from "abco%CC%88" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = a == a
! 1163: extract from "abco%CC%88" "2" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = ab == ab
! 1164: extract from "abco%CC%88" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = abc == abc
! 1165: extract from "abco%CC%88" "4" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = abc == abc
! 1166: extract from "abco%CC%88" "5" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = abco%CC%88 == abco%CC%88
! 1167: extract from "abco%CC%88" "6" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = abco%CC%88 == abco%CC%88
! 1168: extract from "o%CC%88abc" "0" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = ==
! 1169: extract from "o%CC%88abc" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = ==
! 1170: extract from "o%CC%88abc" "2" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = o%CC%88 == o%CC%88
! 1171: extract from "o%CC%88abc" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = o%CC%88a == o%CC%88a
! 1172: extract from "o%CC%88abc" "4" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = o%CC%88ab == o%CC%88ab
! 1173: extract from "o%CC%88abca%CC%8Axyz" "5" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = o%CC%88abc == o%CC%88abc
! 1174: extract from "o%CC%88abca%CC%8Axyz" "6" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = o%CC%88abc == o%CC%88abc
! 1175: extract from "o%CC%88abca%CC%8Axyz" "7" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = o%CC%88abca%CC%8A == o%CC%88abca%CC%8A
! 1176: extract from "o%CC%88abca%CC%8Axyz" "8" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS = o%CC%88abca%CC%8Ax == o%CC%88abca%CC%8Ax
! 1177: extract from "abc" "3" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 0 = abc == abc
! 1178: extract from "abc" "2" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 1 = bc == bc
! 1179: extract from "abc" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 2 = c == c
! 1180: extract from "abc" "0" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 3 = false == false
! 1181: extract from "abc" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 3 = false == false
! 1182: extract from "abc" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 999 = false == false
! 1183: extract from "o%CC%88abc" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 6 = false == false
! 1184: extract from "o%CC%88abc" "1" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 999 = false == false
! 1185: extract from "o%CC%88abca%CC%8Axyz" "8" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 0 = o%CC%88abca%CC%8Ax == o%CC%88abca%CC%8Ax
! 1186: extract from "o%CC%88abca%CC%8Axyz" "8" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 1 = %CC%88abca%CC%8Axy == %CC%88abca%CC%8Axy
! 1187: extract from "o%CC%88abca%CC%8Axyz" "8" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 2 = abca%CC%8Axyz == abca%CC%8Axyz
! 1188: extract from "o%CC%88abca%CC%8Axyz" "8" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 3 = abca%CC%8Axyz == abca%CC%8Axyz
! 1189: extract from "o%CC%88abca%CC%8Axyz" "8" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 4 = bca%CC%8Axyz == bca%CC%8Axyz
! 1190: extract from "o%CC%88abca%CC%8Axyz" "8" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 5 = ca%CC%8Axyz == ca%CC%8Axyz
! 1191: extract from "o%CC%88abca%CC%8Axyz" "8" graphemes - grapheme_extract GRAPHEME_EXTR_MAXCHARS starting at byte position 6 = a%CC%8Axyz == a%CC%8Axyz
! 1192:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>