diff options
author | Stanislav Malyshev <stas@php.net> | 2008-07-22 20:23:47 +0000 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2008-07-22 20:23:47 +0000 |
commit | d54c396dcaaa220f620463ce750cd9180830b179 (patch) | |
tree | c481a1a58250776ce01a582b5acc7002c79c7d23 /ext/intl/msgformat/msgformat.c | |
parent | 1fb3313f7584b8554f774d8351a0e283fe814ade (diff) | |
download | php-git-d54c396dcaaa220f620463ce750cd9180830b179.tar.gz |
refactor ctors, cleanup code
Diffstat (limited to 'ext/intl/msgformat/msgformat.c')
-rwxr-xr-x | ext/intl/msgformat/msgformat.c | 130 |
1 files changed, 22 insertions, 108 deletions
diff --git a/ext/intl/msgformat/msgformat.c b/ext/intl/msgformat/msgformat.c index 1c792aa81a..88c586b7d9 100755 --- a/ext/intl/msgformat/msgformat.c +++ b/ext/intl/msgformat/msgformat.c @@ -25,12 +25,8 @@ #include "msgformat_class.h" #include "intl_convert.h" -/* {{{ proto MessageFormatter MesssageFormatter::create( string $locale, string $pattern ) - * Create formatter. }}} */ -/* {{{ proto MessageFormatter msgfmt_create( string $locale, string $pattern ) - * Create formatter. - */ -PHP_FUNCTION( msgfmt_create ) +/* {{{ */ +static msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS) { char* locale; char* pattern; @@ -39,39 +35,26 @@ PHP_FUNCTION( msgfmt_create ) int spattern_len = 0; zval* object; MessageFormatter_object* mfo; - intl_error_reset( NULL TSRMLS_CC ); + object = return_value; // Parse parameters. if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "ss", &locale, &locale_len, &pattern, &pattern_len ) == FAILURE ) { intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "msgfmt_create: unable to parse input parameters", 0 TSRMLS_CC ); - + zval_dtor(return_value); RETURN_NULL(); } INTL_CHECK_LOCALE_LEN(locale_len); - // Create a MessageFormatter object and save the ICU formatter into it. - if( ( object = getThis() ) == NULL ) - object = return_value; - - if( Z_TYPE_P( object ) != IS_OBJECT ) - object_init_ex( object, MessageFormatter_ce_ptr ); - MSG_FORMAT_METHOD_FETCH_OBJECT; // Convert pattern (if specified) to UTF-16. if(pattern && pattern_len) { intl_convert_utf8_to_utf16(&spattern, &spattern_len, pattern, pattern_len, &INTL_DATA_ERROR_CODE(mfo)); - if( U_FAILURE( INTL_DATA_ERROR_CODE((mfo)) ) ) - { - intl_error_set( NULL, INTL_DATA_ERROR_CODE( mfo ), - "msgfmt_create: error converting pattern to UTF-16", 0 TSRMLS_CC ); - zval_dtor(return_value); - RETURN_NULL(); - } + INTL_CTOR_CHECK_STATUS(mfo, "msgfmt_create: error converting pattern to UTF-16"); } else { spattern_len = 0; spattern = NULL; @@ -81,11 +64,8 @@ PHP_FUNCTION( msgfmt_create ) locale = INTL_G(default_locale); } - if(msfgotmat_fix_quotes(&spattern, &spattern_len, &INTL_DATA_ERROR_CODE(mfo)) != SUCCESS) { - intl_error_set( NULL, U_INVALID_FORMAT_ERROR, - "msgfmt_create: error converting pattern to quote-friendly format", 0 TSRMLS_CC ); - zval_dtor(return_value); - RETURN_NULL(); + if(msgformat_fix_quotes(&spattern, &spattern_len, &INTL_DATA_ERROR_CODE(mfo)) != SUCCESS) { + INTL_CTOR_CHECK_STATUS(mfo, "msgfmt_create: error converting pattern to quote-friendly format"); } (mfo)->mf_data.orig_format = estrndup(pattern, pattern_len); @@ -98,13 +78,19 @@ PHP_FUNCTION( msgfmt_create ) efree(spattern); } - if( U_FAILURE( INTL_DATA_ERROR_CODE((mfo)) ) ) - { - intl_error_set( NULL, INTL_DATA_ERROR_CODE( mfo ), - "msgfmt_create: message formatter creation failed", 0 TSRMLS_CC ); - zval_dtor(return_value); - RETURN_NULL(); - } + INTL_CTOR_CHECK_STATUS(mfo, "msgfmt_create: message formatter creation failed"); +} +/* }}} */ + +/* {{{ proto MessageFormatter MesssageFormatter::create( string $locale, string $pattern ) + * Create formatter. }}} */ +/* {{{ proto MessageFormatter msgfmt_create( string $locale, string $pattern ) + * Create formatter. + */ +PHP_FUNCTION( msgfmt_create ) +{ + object_init_ex( return_value, MessageFormatter_ce_ptr ); + msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU); } /* }}} */ @@ -113,80 +99,8 @@ PHP_FUNCTION( msgfmt_create ) */ PHP_METHOD( MessageFormatter, __construct ) { - char* locale; - char* pattern; - int locale_len, pattern_len = 0; - UChar* spattern = NULL; - int spattern_len = 0; - zval* object; - MessageFormatter_object* mfo; - - intl_error_reset( NULL TSRMLS_CC ); - - object = getThis(); - - // Parse parameters. - if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &locale, &locale_len, &pattern, &pattern_len ) == FAILURE ) - { - intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, - "__construct: unable to parse input params", 0 TSRMLS_CC ); - zval_dtor(object); - ZVAL_NULL(object); - RETURN_NULL(); - } - - INTL_CHECK_LOCALE_LEN_OBJ(locale_len, object); - mfo = (MessageFormatter_object *) zend_object_store_get_object( object TSRMLS_CC ); - - intl_error_reset( &mfo->mf_data.error TSRMLS_CC ); - - // Convert pattern to UTF-16. - if(pattern && pattern_len) { - intl_convert_utf8_to_utf16(&spattern, &spattern_len, pattern, pattern_len, &INTL_DATA_ERROR_CODE(mfo)); - if( U_FAILURE( INTL_DATA_ERROR_CODE((mfo)) ) ) - { - intl_error_set( NULL, INTL_DATA_ERROR_CODE( mfo ), - "__construct: Error converting pattern to UTF-16", 0 TSRMLS_CC ); - zval_dtor(object); - ZVAL_NULL(object); - RETURN_NULL(); - } - } else { - spattern_len = 0; - spattern = NULL; - } - - if(locale_len == 0) { - locale = INTL_G(default_locale); - } - - if(msfgotmat_fix_quotes(&spattern, &spattern_len, &INTL_DATA_ERROR_CODE(mfo)) != SUCCESS) { - intl_error_set( NULL, U_INVALID_FORMAT_ERROR, - "__construct: error converting pattern to quote-friendly format", 0 TSRMLS_CC ); - zval_dtor(object); - ZVAL_NULL(object); - RETURN_NULL(); - } - - (mfo)->mf_data.orig_format = estrndup(pattern, pattern_len); - (mfo)->mf_data.orig_format_len = pattern_len; - - // Create an ICU message formatter. - MSG_FORMAT_OBJECT(mfo) = umsg_open(spattern, spattern_len, locale, NULL, &INTL_DATA_ERROR_CODE(mfo)); - - if(spattern && spattern_len) { - efree(spattern); - } - - if( U_FAILURE( INTL_DATA_ERROR_CODE((mfo)) ) ) - { - intl_error_set( NULL, INTL_DATA_ERROR_CODE(mfo), - "__construct: message formatter creation failed", 0 TSRMLS_CC ); - zval_dtor(object); - ZVAL_NULL(object); - RETURN_NULL(); - } + return_value = getThis(); + msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU); } /* }}} */ |