From: Andrei Zmievski Date: Mon, 8 May 2006 23:01:20 +0000 (+0000) Subject: Been a long day.. X-Git-Tag: BEFORE_NEW_OUTPUT_API~271 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cbe16953e851f0ed588177e8ea7cbf8d6f1e9dfa;p=php Been a long day.. --- diff --git a/ext/unicode/php_property.h b/ext/unicode/php_property.h index a58431307b..c72eb8d4df 100644 --- a/ext/unicode/php_property.h +++ b/ext/unicode/php_property.h @@ -80,6 +80,8 @@ PHP_FUNCTION(char_get_property_min_value); PHP_FUNCTION(char_get_property_max_value); PHP_FUNCTION(char_get_property_name); PHP_FUNCTION(char_get_property_from_name); +PHP_FUNCTION(char_get_property_value_name); +PHP_FUNCTION(char_get_property_value_from_name); #endif /* PHP_PROPERTY_H */ diff --git a/ext/unicode/property.c b/ext/unicode/property.c index 689b853b10..dad6e9b348 100644 --- a/ext/unicode/property.c +++ b/ext/unicode/property.c @@ -548,7 +548,6 @@ PHP_FUNCTION(char_get_property_name) } else { RETURN_FALSE; } - } PHP_FUNCTION(char_get_property_from_name) @@ -581,6 +580,60 @@ PHP_FUNCTION(char_get_property_from_name) RETURN_LONG(prop); } +PHP_FUNCTION(char_get_property_value_name) +{ + long prop; + long value; + long name_choice = U_LONG_PROPERTY_NAME; + const char *name; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|l", &prop, &value, &name_choice) == FAILURE) { + return; + } + + if (name_choice < 0) { + name_choice = U_LONG_PROPERTY_NAME; + } + + name = u_getPropertyValueName((UProperty) prop, (int32_t) value, (UPropertyNameChoice) name_choice); + if (name) { + RETURN_ASCII_STRING((char *)name, ZSTR_DUPLICATE); + } else { + RETURN_FALSE; + } +} + +PHP_FUNCTION(char_get_property_value_from_name) +{ + long prop; + void *name; + int name_len; + zend_uchar name_type; + char *buf; + long value; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lt", &prop, &name, &name_len, &name_type) == FAILURE) { + return; + } + + if (name_type == IS_UNICODE) { + buf = zend_unicode_to_ascii(name, name_len TSRMLS_CC); + if (buf == NULL) { + php_error(E_WARNING, "Property value name has to consist only of ASCII characters"); + RETURN_FALSE; + } + } else { + buf = (char *) name; + } + + value = u_getPropertyValueEnum((UProperty)prop, buf); + if (name_type == IS_UNICODE) { + efree(buf); + } + + RETURN_LONG(value); +} + /* }}} */ /* diff --git a/ext/unicode/unicode.c b/ext/unicode/unicode.c index 2e58d97ddc..b80f4d6942 100644 --- a/ext/unicode/unicode.c +++ b/ext/unicode/unicode.c @@ -292,6 +292,8 @@ zend_function_entry unicode_functions[] = { PHP_FE(char_get_property_max_value, NULL) PHP_FE(char_get_property_name, NULL) PHP_FE(char_get_property_from_name, NULL) + PHP_FE(char_get_property_value_name, NULL) + PHP_FE(char_get_property_value_from_name, NULL) { NULL, NULL, NULL } };