derick Mon Sep 12 05:53:23 2005 EDT
Modified files:
/ZendEngine2 zend_operators.c
/php-src/ext/standard array.c
/php-src/ext/standard/tests/array locale_sort.phpt
Log:
- Reimplement SORT_LOCALE_STRING with ICU locales.
http://cvs.php.net/diff.php/ZendEngine2/zend_operators.c?
r1=1.219&r2=1.220&ty=u
Index: ZendEngine2/zend_operators.c
diff -u ZendEngine2/zend_operators.c:1.219
ZendEngine2/zend_operators.c:1.220
--- ZendEngine2/zend_operators.c:1.219 Tue Aug 23 18:05:22 2005
+++ ZendEngine2/zend_operators.c Mon Sep 12 05:53:20 2005
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------
+
*/
-/* $Id: zend_operators.c,v 1.219 2005/08/23 22:05:22 andrei Exp $ */
+/* $Id: zend_operators.c,v 1.220 2005/09/12 09:53:20 derick Exp $ */
#include <ctype.h>
@@ -32,6 +32,7 @@
#include "zend_strtod.h"
#include "unicode/uchar.h"
+#include "unicode/ucol.h"
#define LONG_SIGN_MASK (1L << (8*sizeof(long)-1))
@@ -1508,14 +1509,17 @@
return SUCCESS;
}
-#if HAVE_STRCOLL
ZEND_API int string_locale_compare_function(zval *result, zval *op1,
zval *op2 TSRMLS_DC)
{
zval op1_copy, op2_copy;
int use_copy1, use_copy2;
+ UErrorCode status = U_ZERO_ERROR;
+ UCollator *col;
- zend_make_printable_zval(op1, &op1_copy, &use_copy1);
- zend_make_printable_zval(op2, &op2_copy, &use_copy2);
+ col = ucol_open(UG(default_locale), &status);
+
+ zend_make_unicode_zval(op1, &op1_copy, &use_copy1);
+ zend_make_unicode_zval(op2, &op2_copy, &use_copy2);
if (use_copy1) {
op1 = &op1_copy;
@@ -1524,7 +1528,7 @@
op2 = &op2_copy;
}
- result->value.lval = strcoll(op1->value.str.val, op2->value.str.val);
+ result->value.lval = ucol_strcoll(col, op1->value.str.val,
op1->value.str.len, op2->value.str.val, op2->value.str.len);
result->type = IS_LONG;
if (use_copy1) {
@@ -1533,9 +1537,11 @@
if (use_copy2) {
zval_dtor(op2);
}
+
+ ucol_close(col);
+
return SUCCESS;
}
-#endif
ZEND_API int numeric_compare_function(zval *result, zval *op1, zval
*op2 TSRMLS_DC)
{
http://cvs.php.net/diff.php/php-src/ext/standard/array.c?
r1=1.323&r2=1.324&ty=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.323
php-src/ext/standard/array.c:1.324
--- php-src/ext/standard/array.c:1.323 Thu Sep 1 07:58:39 2005
+++ php-src/ext/standard/array.c Mon Sep 12 05:53:22 2005
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------
+
*/
-/* $Id: array.c,v 1.323 2005/09/01 11:58:39 dmitry Exp $ */
+/* $Id: array.c,v 1.324 2005/09/12 09:53:22 derick Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -163,11 +163,9 @@
ARRAYG(compare_func) = string_compare_function;
break;
-#if HAVE_STRCOLL
case SORT_LOCALE_STRING:
ARRAYG(compare_func) = string_locale_compare_function;
break;
-#endif
case SORT_REGULAR:
default:
http://cvs.php.net/diff.php/php-src/ext/standard/tests/array/
locale_sort.phpt?r1=1.3&r2=1.4&ty=u
Index: php-src/ext/standard/tests/array/locale_sort.phpt
diff -u php-src/ext/standard/tests/array/locale_sort.phpt:1.3
php-src/ext/standard/tests/array/locale_sort.phpt:1.4
--- php-src/ext/standard/tests/array/locale_sort.phpt:1.3 Wed Aug 17
10:01:06 2005
+++ php-src/ext/standard/tests/array/locale_sort.phpt Mon Sep 12
05:53:23 2005
@@ -7,20 +7,21 @@
}
?>
--INI--
-unicode.script_encoding=ISO-8859-1
-unicode.output_encoding=ISO-8859-1
+unicode.script_encoding=UTF-8
+unicode.output_encoding=UTF-8
--FILE--
<?php
setlocale(LC_ALL, 'fr_FR');
+i18n_loc_set_default('fr_FR');
$table = array("AB" => "Alberta",
"BC" => "Colombie-Britannique",
"MB" => "Manitoba",
"NB" => "Nouveau-Brunswick",
"NL" => "Terre-Neuve-et-Labrador",
-"NS" => "Nouvelle-Écosse",
+"NS" => "Nouvelle-Ãcosse",
"ON" => "Ontario",
-"PE" => "Île-du-Prince-Édouard",
-"QC" => "Québec",
+"PE" => "Ãle-du-Prince-Ãdouard",
+"QC" => "Québec",
"SK" => "Saskatchewan",
"NT" => "Territoires du Nord-Ouest",
"NU" => "Nunavut",
@@ -35,19 +36,19 @@
["BC"]=>
string(20) "Colombie-Britannique"
["PE"]=>
- string(21) "Île-du-Prince-Édouard"
+ string(21) "Ãle-du-Prince-Ãdouard"
["MB"]=>
string(8) "Manitoba"
["NB"]=>
string(17) "Nouveau-Brunswick"
["NS"]=>
- string(15) "Nouvelle-Écosse"
+ string(15) "Nouvelle-Ãcosse"
["NU"]=>
string(7) "Nunavut"
["ON"]=>
string(7) "Ontario"
["QC"]=>
- string(6) "Québec"
+ string(6) "Québec"
["SK"]=>
string(12) "Saskatchewan"
["NL"]=>
@@ -64,19 +65,19 @@
[u"BC"]=>
unicode(20) "Colombie-Britannique"
[u"PE"]=>
- unicode(21) "Île-du-Prince-Édouard"
+ unicode(21) "Ãle-du-Prince-Ãdouard"
[u"MB"]=>
unicode(8) "Manitoba"
[u"NB"]=>
unicode(17) "Nouveau-Brunswick"
[u"NS"]=>
- unicode(15) "Nouvelle-Écosse"
+ unicode(15) "Nouvelle-Ãcosse"
[u"NU"]=>
unicode(7) "Nunavut"
[u"ON"]=>
unicode(7) "Ontario"
[u"QC"]=>
- unicode(6) "Québec"
+ unicode(6) "Québec"
[u"SK"]=>
unicode(12) "Saskatchewan"
[u"NL"]=>
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php