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