mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
ext/intl converter and formatter using fast ZPP (#14413)
This commit is contained in:
parent
694bb32119
commit
d005ab20ea
2 changed files with 61 additions and 62 deletions
|
@ -109,10 +109,12 @@ PHP_METHOD(UConverter, toUCallback) {
|
||||||
zend_string *source, *codeUnits;
|
zend_string *source, *codeUnits;
|
||||||
zval *error;
|
zval *error;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lSSz",
|
ZEND_PARSE_PARAMETERS_START(4, 4)
|
||||||
&reason, &source, &codeUnits, &error) == FAILURE) {
|
Z_PARAM_LONG(reason)
|
||||||
RETURN_THROWS();
|
Z_PARAM_STR(source)
|
||||||
}
|
Z_PARAM_STR(codeUnits)
|
||||||
|
Z_PARAM_ZVAL(error)
|
||||||
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
|
|
||||||
php_converter_default_callback(return_value, ZEND_THIS, reason, error);
|
php_converter_default_callback(return_value, ZEND_THIS, reason, error);
|
||||||
}
|
}
|
||||||
|
@ -124,10 +126,12 @@ PHP_METHOD(UConverter, fromUCallback) {
|
||||||
zval *source, *error;
|
zval *source, *error;
|
||||||
zend_long codePoint;
|
zend_long codePoint;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lalz",
|
ZEND_PARSE_PARAMETERS_START(4, 4)
|
||||||
&reason, &source, &codePoint, &error) == FAILURE) {
|
Z_PARAM_LONG(reason)
|
||||||
RETURN_THROWS();
|
Z_PARAM_ARRAY(source)
|
||||||
}
|
Z_PARAM_LONG(codePoint)
|
||||||
|
Z_PARAM_ZVAL(error)
|
||||||
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
|
|
||||||
php_converter_default_callback(return_value, ZEND_THIS, reason, error);
|
php_converter_default_callback(return_value, ZEND_THIS, reason, error);
|
||||||
}
|
}
|
||||||
|
@ -333,7 +337,7 @@ static void php_converter_from_u_callback(const void *context,
|
||||||
|
|
||||||
/* {{{ php_converter_set_callbacks */
|
/* {{{ php_converter_set_callbacks */
|
||||||
static inline bool php_converter_set_callbacks(php_converter_object *objval, UConverter *cnv) {
|
static inline bool php_converter_set_callbacks(php_converter_object *objval, UConverter *cnv) {
|
||||||
bool ret = 1;
|
bool ret = true;
|
||||||
UErrorCode error = U_ZERO_ERROR;
|
UErrorCode error = U_ZERO_ERROR;
|
||||||
|
|
||||||
if (objval->obj.ce == php_converter_ce) {
|
if (objval->obj.ce == php_converter_ce) {
|
||||||
|
@ -403,9 +407,10 @@ static void php_converter_do_set_encoding(UConverter **pcnv, INTERNAL_FUNCTION_P
|
||||||
char *enc;
|
char *enc;
|
||||||
size_t enc_len;
|
size_t enc_len;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &enc, &enc_len) == FAILURE) {
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||||
RETURN_THROWS();
|
Z_PARAM_STRING(enc, enc_len)
|
||||||
}
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
|
|
||||||
intl_errors_reset(&objval->error);
|
intl_errors_reset(&objval->error);
|
||||||
|
|
||||||
RETURN_BOOL(php_converter_set_encoding(objval, pcnv, enc, enc_len));
|
RETURN_BOOL(php_converter_set_encoding(objval, pcnv, enc, enc_len));
|
||||||
|
@ -430,9 +435,7 @@ PHP_METHOD(UConverter, setDestinationEncoding) {
|
||||||
static void php_converter_do_get_encoding(php_converter_object *objval, UConverter *cnv, INTERNAL_FUNCTION_PARAMETERS) {
|
static void php_converter_do_get_encoding(php_converter_object *objval, UConverter *cnv, INTERNAL_FUNCTION_PARAMETERS) {
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
ZEND_PARSE_PARAMETERS_NONE();
|
||||||
RETURN_THROWS();
|
|
||||||
}
|
|
||||||
|
|
||||||
intl_errors_reset(&objval->error);
|
intl_errors_reset(&objval->error);
|
||||||
|
|
||||||
|
@ -468,9 +471,7 @@ PHP_METHOD(UConverter, getDestinationEncoding) {
|
||||||
static void php_converter_do_get_type(php_converter_object *objval, UConverter *cnv, INTERNAL_FUNCTION_PARAMETERS) {
|
static void php_converter_do_get_type(php_converter_object *objval, UConverter *cnv, INTERNAL_FUNCTION_PARAMETERS) {
|
||||||
UConverterType t;
|
UConverterType t;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
ZEND_PARSE_PARAMETERS_NONE();
|
||||||
RETURN_THROWS();
|
|
||||||
}
|
|
||||||
intl_errors_reset(&objval->error);
|
intl_errors_reset(&objval->error);
|
||||||
|
|
||||||
if (!cnv) {
|
if (!cnv) {
|
||||||
|
@ -535,9 +536,11 @@ PHP_METHOD(UConverter, __construct) {
|
||||||
|
|
||||||
intl_error_reset(NULL);
|
intl_error_reset(NULL);
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!s!", &dest, &dest_len, &src, &src_len) == FAILURE) {
|
ZEND_PARSE_PARAMETERS_START(0, 2)
|
||||||
RETURN_THROWS();
|
Z_PARAM_OPTIONAL
|
||||||
}
|
Z_PARAM_STRING_OR_NULL(dest, dest_len)
|
||||||
|
Z_PARAM_STRING_OR_NULL(src, src_len)
|
||||||
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
|
|
||||||
php_converter_set_encoding(objval, &(objval->src), src, src_len );
|
php_converter_set_encoding(objval, &(objval->src), src, src_len );
|
||||||
php_converter_set_encoding(objval, &(objval->dest), dest, dest_len);
|
php_converter_set_encoding(objval, &(objval->dest), dest, dest_len);
|
||||||
|
@ -553,9 +556,10 @@ PHP_METHOD(UConverter, setSubstChars) {
|
||||||
size_t chars_len;
|
size_t chars_len;
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &chars, &chars_len) == FAILURE) {
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||||
RETURN_THROWS();
|
Z_PARAM_STRING(chars, chars_len)
|
||||||
}
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
|
|
||||||
intl_errors_reset(&objval->error);
|
intl_errors_reset(&objval->error);
|
||||||
|
|
||||||
if (objval->src) {
|
if (objval->src) {
|
||||||
|
@ -593,9 +597,7 @@ PHP_METHOD(UConverter, getSubstChars) {
|
||||||
int8_t chars_len = sizeof(chars);
|
int8_t chars_len = sizeof(chars);
|
||||||
UErrorCode error = U_ZERO_ERROR;
|
UErrorCode error = U_ZERO_ERROR;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
ZEND_PARSE_PARAMETERS_NONE();
|
||||||
RETURN_THROWS();
|
|
||||||
}
|
|
||||||
intl_errors_reset(&objval->error);
|
intl_errors_reset(&objval->error);
|
||||||
|
|
||||||
if (!objval->src) {
|
if (!objval->src) {
|
||||||
|
@ -678,9 +680,9 @@ static zend_string* php_converter_do_convert(UConverter *dest_cnv,
|
||||||
PHP_METHOD(UConverter, reasonText) {
|
PHP_METHOD(UConverter, reasonText) {
|
||||||
zend_long reason;
|
zend_long reason;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &reason) == FAILURE) {
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||||
RETURN_THROWS();
|
Z_PARAM_LONG(reason)
|
||||||
}
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
intl_error_reset(NULL);
|
intl_error_reset(NULL);
|
||||||
|
|
||||||
switch (reason) {
|
switch (reason) {
|
||||||
|
@ -703,12 +705,13 @@ PHP_METHOD(UConverter, convert) {
|
||||||
char *str;
|
char *str;
|
||||||
size_t str_len;
|
size_t str_len;
|
||||||
zend_string *ret;
|
zend_string *ret;
|
||||||
bool reverse = 0;
|
bool reverse = false;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|b",
|
ZEND_PARSE_PARAMETERS_START(1, 2)
|
||||||
&str, &str_len, &reverse) == FAILURE) {
|
Z_PARAM_STRING(str, str_len)
|
||||||
RETURN_THROWS();
|
Z_PARAM_OPTIONAL
|
||||||
}
|
Z_PARAM_BOOL(reverse)
|
||||||
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
intl_errors_reset(&objval->error);
|
intl_errors_reset(&objval->error);
|
||||||
|
|
||||||
ret = php_converter_do_convert(reverse ? objval->src : objval->dest,
|
ret = php_converter_do_convert(reverse ? objval->src : objval->dest,
|
||||||
|
@ -730,10 +733,13 @@ PHP_METHOD(UConverter, transcode) {
|
||||||
zval *options = NULL;
|
zval *options = NULL;
|
||||||
UConverter *src_cnv = NULL, *dest_cnv = NULL;
|
UConverter *src_cnv = NULL, *dest_cnv = NULL;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sss|a!",
|
ZEND_PARSE_PARAMETERS_START(3, 4)
|
||||||
&str, &str_len, &dest, &dest_len, &src, &src_len, &options) == FAILURE) {
|
Z_PARAM_STRING(str, str_len)
|
||||||
RETURN_THROWS();
|
Z_PARAM_STRING(dest, dest_len)
|
||||||
}
|
Z_PARAM_STRING(src, src_len)
|
||||||
|
Z_PARAM_OPTIONAL
|
||||||
|
Z_PARAM_ARRAY_OR_NULL(options)
|
||||||
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
intl_error_reset(NULL);
|
intl_error_reset(NULL);
|
||||||
|
|
||||||
if (php_converter_set_encoding(NULL, &src_cnv, src, src_len) &&
|
if (php_converter_set_encoding(NULL, &src_cnv, src, src_len) &&
|
||||||
|
@ -784,9 +790,7 @@ PHP_METHOD(UConverter, transcode) {
|
||||||
PHP_METHOD(UConverter, getErrorCode) {
|
PHP_METHOD(UConverter, getErrorCode) {
|
||||||
php_converter_object *objval = CONV_GET(ZEND_THIS);
|
php_converter_object *objval = CONV_GET(ZEND_THIS);
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
ZEND_PARSE_PARAMETERS_NONE();
|
||||||
RETURN_THROWS();
|
|
||||||
}
|
|
||||||
|
|
||||||
RETURN_LONG(intl_error_get_code(&(objval->error)));
|
RETURN_LONG(intl_error_get_code(&(objval->error)));
|
||||||
}
|
}
|
||||||
|
@ -796,9 +800,7 @@ PHP_METHOD(UConverter, getErrorCode) {
|
||||||
PHP_METHOD(UConverter, getErrorMessage) {
|
PHP_METHOD(UConverter, getErrorMessage) {
|
||||||
php_converter_object *objval = CONV_GET(ZEND_THIS);
|
php_converter_object *objval = CONV_GET(ZEND_THIS);
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
ZEND_PARSE_PARAMETERS_NONE();
|
||||||
RETURN_THROWS();
|
|
||||||
}
|
|
||||||
|
|
||||||
zend_string *message = intl_error_get_message(&(objval->error));
|
zend_string *message = intl_error_get_message(&(objval->error));
|
||||||
if (message) {
|
if (message) {
|
||||||
|
@ -814,9 +816,8 @@ PHP_METHOD(UConverter, getAvailable) {
|
||||||
int32_t i,
|
int32_t i,
|
||||||
count = ucnv_countAvailable();
|
count = ucnv_countAvailable();
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
ZEND_PARSE_PARAMETERS_NONE();
|
||||||
RETURN_THROWS();
|
|
||||||
}
|
|
||||||
intl_error_reset(NULL);
|
intl_error_reset(NULL);
|
||||||
|
|
||||||
array_init(return_value);
|
array_init(return_value);
|
||||||
|
@ -834,9 +835,9 @@ PHP_METHOD(UConverter, getAliases) {
|
||||||
UErrorCode error = U_ZERO_ERROR;
|
UErrorCode error = U_ZERO_ERROR;
|
||||||
uint16_t i, count;
|
uint16_t i, count;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) {
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||||
RETURN_THROWS();
|
Z_PARAM_STRING(name, name_len)
|
||||||
}
|
ZEND_PARSE_PARAMETERS_END();
|
||||||
intl_error_reset(NULL);
|
intl_error_reset(NULL);
|
||||||
|
|
||||||
count = ucnv_countAliases(name, &error);
|
count = ucnv_countAliases(name, &error);
|
||||||
|
@ -865,9 +866,7 @@ PHP_METHOD(UConverter, getAliases) {
|
||||||
PHP_METHOD(UConverter, getStandards) {
|
PHP_METHOD(UConverter, getStandards) {
|
||||||
uint16_t i, count;
|
uint16_t i, count;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
ZEND_PARSE_PARAMETERS_NONE();
|
||||||
RETURN_THROWS();
|
|
||||||
}
|
|
||||||
intl_error_reset(NULL);
|
intl_error_reset(NULL);
|
||||||
|
|
||||||
array_init(return_value);
|
array_init(return_value);
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
/* {{{ */
|
/* {{{ */
|
||||||
static int numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_error_handling *error_handling, bool *error_handling_replaced)
|
static int numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_error_handling *error_handling, bool *error_handling_replaced)
|
||||||
{
|
{
|
||||||
const char* locale;
|
char* locale;
|
||||||
char* pattern = NULL;
|
char* pattern = NULL;
|
||||||
size_t locale_len = 0, pattern_len = 0;
|
size_t locale_len = 0, pattern_len = 0;
|
||||||
zend_long style;
|
zend_long style;
|
||||||
|
@ -34,12 +34,12 @@ static int numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_error_handling *error_
|
||||||
int32_t spattern_len = 0;
|
int32_t spattern_len = 0;
|
||||||
FORMATTER_METHOD_INIT_VARS;
|
FORMATTER_METHOD_INIT_VARS;
|
||||||
|
|
||||||
/* Parse parameters. */
|
ZEND_PARSE_PARAMETERS_START(2, 3)
|
||||||
if( zend_parse_parameters( ZEND_NUM_ARGS(), "sl|s!",
|
Z_PARAM_STRING(locale, locale_len)
|
||||||
&locale, &locale_len, &style, &pattern, &pattern_len ) == FAILURE )
|
Z_PARAM_LONG(style)
|
||||||
{
|
Z_PARAM_OPTIONAL
|
||||||
return FAILURE;
|
Z_PARAM_STRING_OR_NULL(pattern, pattern_len)
|
||||||
}
|
ZEND_PARSE_PARAMETERS_END_EX(return FAILURE);
|
||||||
|
|
||||||
if (error_handling != NULL) {
|
if (error_handling != NULL) {
|
||||||
zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, error_handling);
|
zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, error_handling);
|
||||||
|
@ -61,7 +61,7 @@ static int numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_error_handling *error_
|
||||||
}
|
}
|
||||||
|
|
||||||
if(locale_len == 0) {
|
if(locale_len == 0) {
|
||||||
locale = intl_locale_get_default();
|
locale = (char *)intl_locale_get_default();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(uloc_getISO3Language(locale)) == 0) {
|
if (strlen(uloc_getISO3Language(locale)) == 0) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue