hirokawa Fri Dec 23 15:18:52 2005 EDT
Added files: (Branch: PHP_5_1)
/php-src/ext/mbstring/libmbfl/nls nls_tr.c nls_tr.h
Modified files:
/php-src/ext/mbstring config.m4 config.w32 php_unicode.c
/php-src/ext/mbstring/libmbfl/mbfl mbfl_language.c mbfl_language.h
Log:
MFH: fixed #29955 mb_strtoupper() / lower() broken with Turkish encoding..
http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/config.m4?r1=1.58.2.2&r2=1.58.2.3&diff_format=u
Index: php-src/ext/mbstring/config.m4
diff -u php-src/ext/mbstring/config.m4:1.58.2.2
php-src/ext/mbstring/config.m4:1.58.2.3
--- php-src/ext/mbstring/config.m4:1.58.2.2 Fri Oct 28 07:52:58 2005
+++ php-src/ext/mbstring/config.m4 Fri Dec 23 15:18:52 2005
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.58.2.2 2005/10/28 07:52:58 hyanantha Exp $
+dnl $Id: config.m4,v 1.58.2.3 2005/12/23 15:18:52 hirokawa Exp $
dnl
AC_DEFUN([PHP_MBSTRING_ADD_SOURCES], [
@@ -237,6 +237,7 @@
libmbfl/nls/nls_uni.c
libmbfl/nls/nls_zh.c
libmbfl/nls/nls_hy.c
+ libmbfl/nls/nls_tr.c
])
PHP_MBSTRING_ADD_CFLAG([-DHAVE_CONFIG_H])
else
http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/config.w32?r1=1.10&r2=1.10.2.1&diff_format=u
Index: php-src/ext/mbstring/config.w32
diff -u php-src/ext/mbstring/config.w32:1.10
php-src/ext/mbstring/config.w32:1.10.2.1
--- php-src/ext/mbstring/config.w32:1.10 Tue Mar 22 22:22:08 2005
+++ php-src/ext/mbstring/config.w32 Fri Dec 23 15:18:52 2005
@@ -1,4 +1,4 @@
-// $Id: config.w32,v 1.10 2005/03/22 22:22:08 moriyoshi Exp $
+// $Id: config.w32,v 1.10.2.1 2005/12/23 15:18:52 hirokawa Exp $
// vim:ft=javascript
ARG_ENABLE("mbstring", "multibyte string functions", "no");
@@ -40,7 +40,7 @@
ADD_SOURCES("ext/mbstring/libmbfl/nls", "nls_de.c nls_en.c nls_ja.c \
nls_kr.c nls_neutral.c nls_ru.c nls_uni.c nls_zh.c nls_hy.c \
- ", "mbstring");
+ nls_tr.c", "mbstring");
AC_DEFINE('HAVE_MBSTRING', 1, 'Have mbstring support');
AC_DEFINE('HAVE_MBSTR_CN', 1, 'CN');
http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/php_unicode.c?r1=1.11&r2=1.11.2.1&diff_format=u
Index: php-src/ext/mbstring/php_unicode.c
diff -u php-src/ext/mbstring/php_unicode.c:1.11
php-src/ext/mbstring/php_unicode.c:1.11.2.1
--- php-src/ext/mbstring/php_unicode.c:1.11 Wed Aug 3 14:07:24 2005
+++ php-src/ext/mbstring/php_unicode.c Fri Dec 23 15:18:52 2005
@@ -44,6 +44,8 @@
#include "php_unicode.h"
#include "unicode_data.h"
+ZEND_EXTERN_MODULE_GLOBALS(mbstring)
+
/*
* A simple array of 32-bit masks for lookup.
*/
@@ -142,7 +144,23 @@
return code;
}
-MBSTRING_API unsigned long php_unicode_toupper(unsigned long code)
+MBSTRING_API unsigned long php_turkish_toupper(unsigned long code, long l,
long r, int field)
+{
+ if (code == 0x0069L) {
+ return 0x0130L;
+ }
+ return case_lookup(code, l, r, field);
+}
+
+MBSTRING_API unsigned long php_turkish_tolower(unsigned long code, long l,
long r, int field)
+{
+ if (code == 0x0049L) {
+ return 0x0131L;
+ }
+ return case_lookup(code, l, r, field);
+}
+
+MBSTRING_API unsigned long php_unicode_toupper(unsigned long code, enum
mbfl_no_encoding enc TSRMLS_DC)
{
int field;
long l, r;
@@ -157,6 +175,12 @@
field = 2;
l = _uccase_len[0];
r = (l + _uccase_len[1]) - 3;
+
+ if (MBSTRG(current_language) == mbfl_no_language_turkish &&
+ enc == mbfl_no_encoding_8859_9) {
+ return php_turkish_toupper(code, l, r, field);
+ }
+
} else {
/*
* The character is title case.
@@ -168,7 +192,7 @@
return case_lookup(code, l, r, field);
}
-MBSTRING_API unsigned long php_unicode_tolower(unsigned long code)
+MBSTRING_API unsigned long php_unicode_tolower(unsigned long code, enum
mbfl_no_encoding enc TSRMLS_DC)
{
int field;
long l, r;
@@ -183,6 +207,12 @@
field = 1;
l = 0;
r = _uccase_len[0] - 3;
+
+ if (MBSTRG(current_language) == mbfl_no_language_turkish &&
+ enc == mbfl_no_encoding_8859_9) {
+ return php_turkish_tolower(code, l, r, field);
+ }
+
} else {
/*
* The character is title case.
@@ -194,7 +224,7 @@
return case_lookup(code, l, r, field);
}
-MBSTRING_API unsigned long php_unicode_totitle(unsigned long code)
+MBSTRING_API unsigned long php_unicode_totitle(unsigned long code, enum
mbfl_no_encoding enc TSRMLS_DC)
{
int field;
long l, r;
@@ -246,25 +276,26 @@
size_t unicode_len;
unsigned char *unicode_ptr;
size_t i;
+ enum mbfl_no_encoding _src_encoding =
mbfl_name2no_encoding(src_encoding);
unicode = php_mb_convert_encoding(srcstr, srclen, "UCS-4BE",
src_encoding, &unicode_len TSRMLS_CC);
if (unicode == NULL)
return NULL;
- unicode_ptr = unicode;
+ unicode_ptr = (unsigned char *)unicode;
switch(case_mode) {
case PHP_UNICODE_CASE_UPPER:
for (i = 0; i < unicode_len; i+=4) {
UINT32_TO_BE_ARY(&unicode_ptr[i],
-
php_unicode_toupper(BE_ARY_TO_UINT32(&unicode_ptr[i])));
+
php_unicode_toupper(BE_ARY_TO_UINT32(&unicode_ptr[i]), _src_encoding
TSRMLS_CC));
}
break;
case PHP_UNICODE_CASE_LOWER:
for (i = 0; i < unicode_len; i+=4) {
UINT32_TO_BE_ARY(&unicode_ptr[i],
-
php_unicode_tolower(BE_ARY_TO_UINT32(&unicode_ptr[i])));
+
php_unicode_tolower(BE_ARY_TO_UINT32(&unicode_ptr[i]), _src_encoding
TSRMLS_CC));
}
break;
@@ -278,7 +309,7 @@
if (mode) {
if (res) {
UINT32_TO_BE_ARY(&unicode_ptr[i],
-
php_unicode_tolower(BE_ARY_TO_UINT32(&unicode_ptr[i])));
+
php_unicode_tolower(BE_ARY_TO_UINT32(&unicode_ptr[i]), _src_encoding
TSRMLS_CC));
} else {
mode = 0;
}
@@ -286,7 +317,7 @@
if (res) {
mode = 1;
UINT32_TO_BE_ARY(&unicode_ptr[i],
-
php_unicode_totitle(BE_ARY_TO_UINT32(&unicode_ptr[i])));
+
php_unicode_totitle(BE_ARY_TO_UINT32(&unicode_ptr[i]), _src_encoding
TSRMLS_CC));
}
}
}
http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.c?r1=1.6&r2=1.6.2.1&diff_format=u
Index: php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.c
diff -u php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.c:1.6
php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.c:1.6.2.1
--- php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.c:1.6 Tue Mar 22
22:22:11 2005
+++ php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.c Fri Dec 23 15:18:52 2005
@@ -59,6 +59,7 @@
#include "nls/nls_ru.h"
#include "nls/nls_en.h"
#include "nls/nls_hy.h"
+#include "nls/nls_tr.h"
#include "nls/nls_neutral.h"
#ifndef HAVE_STRCASECMP
@@ -77,6 +78,7 @@
&mbfl_language_german,
&mbfl_language_russian,
&mbfl_language_armenian,
+ &mbfl_language_turkish,
&mbfl_language_neutral,
NULL
};
http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.h?r1=1.3&r2=1.3.2.1&diff_format=u
Index: php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.h
diff -u php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.h:1.3
php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.h:1.3.2.1
--- php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.h:1.3 Tue Mar 22
22:22:11 2005
+++ php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.h Fri Dec 23 15:18:52 2005
@@ -58,6 +58,7 @@
mbfl_no_language_traditional_chinese, /* zh-tw */
mbfl_no_language_russian, /* ru */
mbfl_no_language_armenian, /* hy */
+ mbfl_no_language_turkish, /* tr */
mbfl_no_language_max
};
http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/libmbfl/nls/nls_tr.c?view=markup&rev=1.1
Index: php-src/ext/mbstring/libmbfl/nls/nls_tr.c
+++ php-src/ext/mbstring/libmbfl/nls/nls_tr.c
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
#include "mbfilter.h"
#include "nls_tr.h"
const mbfl_language mbfl_language_turkish = {
mbfl_no_language_turkish,
"Turkish",
"tr",
NULL,
mbfl_no_encoding_8859_9,
mbfl_no_encoding_qprint,
mbfl_no_encoding_8bit
};
http://cvs.php.net/viewcvs.cgi/php-src/ext/mbstring/libmbfl/nls/nls_tr.h?view=markup&rev=1.1
Index: php-src/ext/mbstring/libmbfl/nls/nls_tr.h
+++ php-src/ext/mbstring/libmbfl/nls/nls_tr.h
#ifndef MBFL_NLS_TR_H
#define MBFL_NLS_TR_H
#include "mbfilter.h"
extern const mbfl_language mbfl_language_turkish;
#endif /* MBFL_NLS_TR_H */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php