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

Reply via email to