andrei Tue Aug 29 22:16:26 2006 UTC Modified files: /php-src/ext/pcre php_pcre.c Log: More Unicode work. http://cvs.php.net/viewvc.cgi/php-src/ext/pcre/php_pcre.c?r1=1.192&r2=1.193&diff_format=u Index: php-src/ext/pcre/php_pcre.c diff -u php-src/ext/pcre/php_pcre.c:1.192 php-src/ext/pcre/php_pcre.c:1.193 --- php-src/ext/pcre/php_pcre.c:1.192 Mon Aug 28 20:36:50 2006 +++ php-src/ext/pcre/php_pcre.c Tue Aug 29 22:16:26 2006 @@ -16,14 +16,15 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_pcre.c,v 1.192 2006/08/28 20:36:50 andrei Exp $ */ +/* $Id: php_pcre.c,v 1.193 2006/08/29 22:16:26 andrei Exp $ */ /* UTODO * - PCRE_NO_UTF8_CHECK option for Unicode strings * * php_pcre_match_all(): - * - start_offset needs to count codepoints, probably via U8_FWD_1() * - need to return matched substrings in the type matching the arguments + * - subpattern names - need to convert using UTF(utf8_conv) or just + * UG(runtime_encoding_conv) ? * * php_pcre_split_impl(): * - Avoid the /./ bump for Unicode strings with U8_FWD_1() @@ -579,6 +580,7 @@ U8_FWD_N(subject, k, subject_len, start_offset); } start_offset = k; + exoptions |= PCRE_NO_UTF8_CHECK; } else { /* Negative offset counts from the end of the string. */ if (start_offset < 0) { @@ -822,11 +824,17 @@ /* Add the match sets to the output array and clean up */ if (global && subpats_order == PREG_PATTERN_ORDER) { + UErrorCode status = U_ZERO_ERROR; + UChar *u = NULL; + int u_len; for (i = 0; i < num_subpats; i++) { if (subpat_names[i]) { - zend_hash_update(Z_ARRVAL_P(subpats), subpat_names[i], - strlen(subpat_names[i])+1, &match_sets[i], sizeof(zval *), NULL); + zend_string_to_unicode_ex(UG(utf8_conv), &u, &u_len, subpat_names[i], strlen(subpat_names[i]), &status); + zend_u_hash_update(Z_ARRVAL_P(subpats), IS_UNICODE, ZSTR(u), + u_len+1, &match_sets[i], sizeof(zval *), NULL); ZVAL_ADDREF(match_sets[i]); + efree(u); + status = U_ZERO_ERROR; } zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &match_sets[i], sizeof(zval *), NULL); }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php