wez Sat Aug 13 09:43:32 2005 EDT Modified files: /php-src/ext/unicode config.w32 unicode.c Log: Fixup config.w32. Implement unicode_decode() and unicode_encode(), as described in README.UNICODE. Still need to decide how to handle errors here, since there is no error return, and a conversion error is not necessarily fatal. http://cvs.php.net/diff.php/php-src/ext/unicode/config.w32?r1=1.2&r2=1.3&ty=u Index: php-src/ext/unicode/config.w32 diff -u php-src/ext/unicode/config.w32:1.2 php-src/ext/unicode/config.w32:1.3 --- php-src/ext/unicode/config.w32:1.2 Fri Aug 12 05:10:04 2005 +++ php-src/ext/unicode/config.w32 Sat Aug 13 09:43:31 2005 @@ -1,9 +1,8 @@ -// $Id: config.w32,v 1.2 2005/08/12 09:10:04 sniper Exp $ +// $Id: config.w32,v 1.3 2005/08/13 13:43:31 wez Exp $ // vim:ft=javascript -ARG_ENABLE('unicode' , 'ICU API extension', 'no'); -if (PHP_UNICODE) { - +ARG_ENABLE('unicode' , 'ICU API extension', 'yes'); +if (PHP_UNICODE != 'no') { EXTENSION("unicode", "unicode.c unicode_filter.c locale.c"); AC_DEFINE('HAVE_UNICODE', 1, 'ICU API extension'); } http://cvs.php.net/diff.php/php-src/ext/unicode/unicode.c?r1=1.2&r2=1.3&ty=u Index: php-src/ext/unicode/unicode.c diff -u php-src/ext/unicode/unicode.c:1.2 php-src/ext/unicode/unicode.c:1.3 --- php-src/ext/unicode/unicode.c:1.2 Fri Aug 12 05:10:04 2005 +++ php-src/ext/unicode/unicode.c Sat Aug 13 09:43:31 2005 @@ -11,19 +11,101 @@ | [EMAIL PROTECTED] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrei Zmievski <[EMAIL PROTECTED]> | + | Wez Furlong <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: unicode.c,v 1.2 2005/08/12 09:10:04 sniper Exp $ */ +/* $Id: unicode.c,v 1.3 2005/08/13 13:43:31 wez Exp $ */ #include "php_unicode.h" - #if HAVE_UNICODE +#include "zend_unicode.h" + +/* {{{ proto unicode unicode_decode(string $input, string $encoding) + Takes a string in the souce encoding and converts it to a UTF-16 unicode string, returning the result */ +static PHP_FUNCTION(unicode_decode) +{ + union { + void *vptr; + char *bin; + } input; + zend_uchar type; + int len; + char *encoding; + int enclen; + UErrorCode status; + UConverter *conv = NULL; + UChar *target; + int32_t targetlen; + + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ts", &input.vptr, &len, &type, &encoding, &enclen)) { + return; + } + + if (type == IS_UNICODE) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "input string is already unicode"); + RETURN_FALSE; + } + + status = U_ZERO_ERROR; + conv = ucnv_open(encoding, &status); + if (!conv) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "could not locate converter for %s", encoding); + RETURN_FALSE; + } + status = U_ZERO_ERROR; + zend_convert_to_unicode(conv, &target, &targetlen, input.bin, len, &status); + if (U_FAILURE(status)) { + /* TODO: error handling semantics ? */ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "conversion was not entirely successful: %d", status); + } + RETVAL_UNICODEL(target, targetlen, 0); + + ucnv_close(conv); +} +/* }}} */ + +/* {{{ proto string unicode_encode(unicode $input, string $encoding) + Takes a unicode string and converts it to a string in the specified encoding */ +static PHP_FUNCTION(unicode_encode) +{ + UChar *uni; + int len; + char *encoding; + int enclen; + UErrorCode status; + UConverter *conv = NULL; + char *target; + int32_t targetlen; + + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "us", &uni, &len, &encoding, &enclen)) { + return; + } + + status = U_ZERO_ERROR; + conv = ucnv_open(encoding, &status); + if (!conv) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "could not locate converter for %s", encoding); + RETURN_FALSE; + } + + status = U_ZERO_ERROR; + zend_convert_from_unicode(conv, &target, &targetlen, uni, len, &status); + if (U_FAILURE(status)) { + /* TODO: error handling semantics ? */ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "conversion was not entirely successful: %d", status); + } + RETVAL_STRINGL(target, targetlen, 0); + + ucnv_close(conv); +} /* {{{ unicode_functions[] */ function_entry unicode_functions[] = { PHP_FE(icu_loc_get_default, NULL) PHP_FE(icu_loc_set_default, NULL) + PHP_FE(unicode_decode, NULL) + PHP_FE(unicode_encode, NULL) { NULL, NULL, NULL } }; /* }}} */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php