ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> php-cvs
php-cvs
[PHP-CVS] cvs: php-src /ext/unicode php_property.h property.c unicode.c
by Andrei Zmievski other posts by this author
May 9 2006 11:21AM messages near this date
[PHP-CVS] cvs: php-src /ext/unicode php_property.h property.c unicode.c | [PHP-CVS] cvs: php-src /ext/unicode php_property.h property.c unicode.c
andrei		Tue May  9 18:21:27 2006 UTC

  Modified files:              
    /php-src/ext/unicode	php_property.h property.c unicode.c 
  Log:
  Add char_enum_types().
  
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/unicode/php_property.h?r1=1.8&r2=1.9&diff_format=
u
Index: php-src/ext/unicode/php_property.h
diff -u php-src/ext/unicode/php_property.h:1.8 php-src/ext/unicode/php_property.h:1.9
--- php-src/ext/unicode/php_property.h:1.8	Tue May  9 00:06:08 2006
+++ php-src/ext/unicode/php_property.h	Tue May  9 18:21:27 2006
@@ -14,7 +14,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_property.h,v 1.8 2006/05/09 00:06:08 andrei Exp $ */ 
+/* $Id: php_property.h,v 1.9 2006/05/09 18:21:27 andrei Exp $ */ 
 
 #ifndef PHP_PROPERTY_H
 #define PHP_PROPERTY_H
@@ -84,6 +84,7 @@
 PHP_FUNCTION(char_get_property_value_from_name);
 
 PHP_FUNCTION(char_enum_names);
+PHP_FUNCTION(char_enum_types);
 
 #endif /* PHP_PROPERTY_H */
 
http://cvs.php.net/viewcvs.cgi/php-src/ext/unicode/property.c?r1=1.13&r2=1.14&diff_format=u
Index: php-src/ext/unicode/property.c
diff -u php-src/ext/unicode/property.c:1.13 php-src/ext/unicode/property.c:1.14
--- php-src/ext/unicode/property.c:1.13	Tue May  9 00:15:45 2006
+++ php-src/ext/unicode/property.c	Tue May  9 18:21:27 2006
@@ -14,7 +14,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: property.c,v 1.13 2006/05/09 00:15:45 andrei Exp $ */ 
+/* $Id: property.c,v 1.14 2006/05/09 18:21:27 andrei Exp $ */ 
 
 #include "php_unicode.h"
 
@@ -51,7 +51,6 @@
 	RETURN_BOOL(result);
 }
 
-
 /* {{{ C/POSIX migration functions */
 
 PHP_FUNCTION(char_is_lower)
@@ -645,7 +644,7 @@
 
 /* {{{ Enumerator functions */
 
-static UBool php_enum_char_names(void *context,
+static UBool php_enum_char_names(const void *context,
 								 UChar32 code,
 								 UCharNameChoice nameChoice,
 								 const char *name,
@@ -687,6 +686,44 @@
     return result;
 }
 
+static UBool php_enum_char_type_range(const void *context,
+									  UChar32 start,
+									  UChar32 limit,
+									  UCharCategory type)
+{
+    char_enum_context_t	   *ctx = (char_enum_context_t *)context;
+    zval				   *retval_ptr = NULL;
+    int						status;
+    UBool					result = FALSE;
+    TSRMLS_FETCH_FROM_CTX(ctx-> thread_ctx);
+
+    convert_to_long_ex(ctx-> args[0]);
+    convert_to_long_ex(ctx-> args[1]);
+    convert_to_long_ex(ctx-> args[2]);
+
+    ZVAL_LONG(*ctx-> args[0], start);
+    ZVAL_LONG(*ctx-> args[1], limit);
+    ZVAL_LONG(*ctx-> args[2], type);
+
+    ctx-> fci.retval_ptr_ptr = &retval_ptr;
+
+    status = zend_call_function(&ctx-> fci, &ctx->fci_cache TSRMLS_CC);
+
+    if (status == SUCCESS && retval_ptr && !EG(exception)) {
+        convert_to_boolean(retval_ptr);
+        result = (UBool)Z_BVAL_P(retval_ptr);
+    } else {
+        if (!EG(exception)) {
+            php_error_docref(NULL TSRMLS_CC, E_WARNING, "Enumeration callback encountered a
n error");
+        }
+        result = FALSE;
+    }
+    if (retval_ptr) {
+        zval_ptr_dtor(&retval_ptr);
+    }
+    return result;
+}
+
 PHP_FUNCTION(char_enum_names)
 {
     zval			   *callback;
@@ -747,6 +784,52 @@
 	}
 }
 
+PHP_FUNCTION(char_enum_types)
+{
+    zval			   *callback;
+    zval			   *zstart, *zlimit, *ztype;
+    char_enum_context_t ectx;
+    
+    if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "z", &callback)) {
+        return;               
+    }   
+    
+	if (!zend_is_callable(callback, 0, NULL)) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid enumeration callback");
+		return;
+	}
+
+    /* Do all the heavy lifing once, instead of in the callback */
+    MAKE_STD_ZVAL(zstart);
+    MAKE_STD_ZVAL(zlimit);
+    MAKE_STD_ZVAL(ztype);
+
+    ZVAL_LONG(zstart, 0);
+	ZVAL_LONG(zlimit, 0);
+	ZVAL_LONG(ztype,  0);
+
+    memset(&ectx, 0, sizeof(char_enum_context_t));
+    ectx.fci.size = sizeof(ectx.fci);
+    ectx.fci.function_table = EG(function_table);
+    ectx.fci.function_name = callback;
+    ectx.fci.no_separation = 1;
+    ectx.fci_cache = empty_fcall_info_cache;
+    ectx.args[0] = &zstart;
+    ectx.args[1] = &zlimit;
+    ectx.args[2] = &ztype;
+    ectx.fci.param_count = 3;
+    ectx.fci.params = ectx.args;
+    TSRMLS_SET_CTX(ectx.thread_ctx);
+
+	u_enumCharTypes((UCharEnumTypeRange *)php_enum_char_type_range, (void *)&ectx);
+
+    zval_ptr_dtor(&zstart);
+    zval_ptr_dtor(&zlimit);
+    zval_ptr_dtor(&ztype);
+
+	RETURN_TRUE;
+}
+
 /* }}} */
 
 /*
http://cvs.php.net/viewcvs.cgi/php-src/ext/unicode/unicode.c?r1=1.33&r2=1.34&diff_format=u
Index: php-src/ext/unicode/unicode.c
diff -u php-src/ext/unicode/unicode.c:1.33 php-src/ext/unicode/unicode.c:1.34
--- php-src/ext/unicode/unicode.c:1.33	Tue May  9 00:06:08 2006
+++ php-src/ext/unicode/unicode.c	Tue May  9 18:21:27 2006
@@ -15,7 +15,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: unicode.c,v 1.33 2006/05/09 00:06:08 andrei Exp $ */ 
+/* $Id: unicode.c,v 1.34 2006/05/09 18:21:27 andrei Exp $ */ 
 
 #include "php_unicode.h"
 #include "zend_unicode.h"
@@ -296,6 +296,7 @@
 	PHP_FE(char_get_property_value_from_name, NULL)
 
 	PHP_FE(char_enum_names, NULL)
+	PHP_FE(char_enum_types, NULL)
 
 	{ NULL, NULL, NULL }
 };

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Thread:
Andrei Zmievski
Andrei Zmievski
Andrei Zmievski
Andrei Zmievski
Andrei Zmievski

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved