Annotation of embedaddon/php/ext/intl/formatter/formatter_main.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | PHP Version 5                                                        |
                      4:    +----------------------------------------------------------------------+
                      5:    | This source file is subject to version 3.01 of the PHP license,      |
                      6:    | that is bundled with this package in the file LICENSE, and is        |
                      7:    | available through the world-wide-web at the following url:           |
                      8:    | http://www.php.net/license/3_01.txt                                  |
                      9:    | If you did not receive a copy of the PHP license and are unable to   |
                     10:    | obtain it through the world-wide-web, please send a note to          |
                     11:    | license@php.net so we can mail you a copy immediately.               |
                     12:    +----------------------------------------------------------------------+
                     13:    | Authors: Stanislav Malyshev <stas@zend.com>                          |
                     14:    +----------------------------------------------------------------------+
                     15:  */
                     16: 
                     17: #ifdef HAVE_CONFIG_H
                     18: #include "config.h"
                     19: #endif
                     20: 
                     21: #include <unicode/ustring.h>
                     22: 
                     23: #include "php_intl.h"
                     24: #include "formatter_class.h"
                     25: #include "intl_convert.h"
                     26: 
                     27: /* {{{ */
                     28: static void numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
                     29: {
                     30:        char*       locale;
                     31:        char*       pattern = NULL;
                     32:        int         locale_len = 0, pattern_len = 0;
                     33:        long        style;
                     34:        UChar*      spattern     = NULL;
                     35:        int         spattern_len = 0;
                     36:        FORMATTER_METHOD_INIT_VARS;
                     37: 
                     38:        /* Parse parameters. */
                     39:        if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "sl|s",
                     40:                &locale, &locale_len, &style, &pattern, &pattern_len ) == FAILURE )
                     41:        {
                     42:                intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
                     43:                        "numfmt_create: unable to parse input parameters", 0 TSRMLS_CC );
                     44:                zval_dtor(return_value);
                     45:                RETURN_NULL();
                     46:        }
                     47: 
                     48:        INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value);
                     49:        object = return_value;
                     50:        FORMATTER_METHOD_FETCH_OBJECT;
                     51: 
                     52:        /* Convert pattern (if specified) to UTF-16. */
                     53:        if(pattern && pattern_len) {
                     54:                intl_convert_utf8_to_utf16(&spattern, &spattern_len, pattern, pattern_len, &INTL_DATA_ERROR_CODE(nfo));
                     55:                INTL_CTOR_CHECK_STATUS(nfo, "numfmt_create: error converting pattern to UTF-16");
                     56:        }
                     57: 
                     58:        if(locale_len == 0) {
                     59:                locale = INTL_G(default_locale);
                     60:        }
                     61: 
                     62:        /* Create an ICU number formatter. */
                     63:        FORMATTER_OBJECT(nfo) = unum_open(style, spattern, spattern_len, locale, NULL, &INTL_DATA_ERROR_CODE(nfo));
                     64: 
                     65:        if(spattern) {
                     66:                efree(spattern);
                     67:        }
                     68: 
                     69:        INTL_CTOR_CHECK_STATUS(nfo, "numfmt_create: number formatter creation failed");
                     70: }
                     71: /* }}} */
                     72: 
                     73: /* {{{ proto NumberFormatter NumberFormatter::create( string $locale, int style[, string $pattern ] )
                     74:  * Create number formatter. }}} */
                     75: /* {{{ proto NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )
                     76:  * Create number formatter.
                     77:  */
                     78: PHP_FUNCTION( numfmt_create )
                     79: {
                     80:        object_init_ex( return_value, NumberFormatter_ce_ptr );
                     81:        numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
                     82: }
                     83: /* }}} */
                     84: 
                     85: /* {{{ proto void NumberFormatter::__construct( string $locale, int style[, string $pattern ] )
                     86:  * NumberFormatter object constructor.
                     87:  */
                     88: PHP_METHOD( NumberFormatter, __construct )
                     89: {
                     90:        return_value = getThis();
                     91:        numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
                     92: }
                     93: /* }}} */
                     94: 
                     95: /* {{{ proto int NumberFormatter::getErrorCode()
                     96:  * Get formatter's last error code. }}} */
                     97: /* {{{ proto int numfmt_get_error_code( NumberFormatter $nf )
                     98:  * Get formatter's last error code.
                     99:  */
                    100: PHP_FUNCTION( numfmt_get_error_code )
                    101: {
                    102:        FORMATTER_METHOD_INIT_VARS
                    103: 
                    104:        /* Parse parameters. */
                    105:        if( zend_parse_method_parameters( ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O",
                    106:                &object, NumberFormatter_ce_ptr ) == FAILURE )
                    107:        {
                    108:                intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
                    109:                        "numfmt_get_error_code: unable to parse input params", 0 TSRMLS_CC );
                    110: 
                    111:                RETURN_FALSE;
                    112:        }
                    113: 
                    114:        nfo = (NumberFormatter_object *) zend_object_store_get_object( object TSRMLS_CC );
                    115: 
                    116:        /* Return formatter's last error code. */
                    117:        RETURN_LONG( INTL_DATA_ERROR_CODE(nfo) );
                    118: }
                    119: /* }}} */
                    120: 
                    121: /* {{{ proto string NumberFormatter::getErrorMessage( )
                    122:  * Get text description for formatter's last error code. }}} */
                    123: /* {{{ proto string numfmt_get_error_message( NumberFormatter $nf )
                    124:  * Get text description for formatter's last error code.
                    125:  */
                    126: PHP_FUNCTION( numfmt_get_error_message )
                    127: {
                    128:        char*                    message = NULL;
                    129:        FORMATTER_METHOD_INIT_VARS
                    130: 
                    131:        /* Parse parameters. */
                    132:        if( zend_parse_method_parameters( ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O",
                    133:                &object, NumberFormatter_ce_ptr ) == FAILURE )
                    134:        {
                    135:                intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
                    136:                        "numfmt_get_error_message: unable to parse input params", 0 TSRMLS_CC );
                    137: 
                    138:                RETURN_FALSE;
                    139:        }
                    140: 
                    141:        nfo = (NumberFormatter_object *) zend_object_store_get_object( object TSRMLS_CC );
                    142: 
                    143:        /* Return last error message. */
                    144:        message = intl_error_get_message( INTL_DATA_ERROR_P(nfo) TSRMLS_CC );
                    145:        RETURN_STRING( message, 0);
                    146: }
                    147: /* }}} */
                    148: 
                    149: /*
                    150:  * Local variables:
                    151:  * tab-width: 4
                    152:  * c-basic-offset: 4
                    153:  * End:
                    154:  * vim600: noet sw=4 ts=4 fdm=marker
                    155:  * vim<600: noet sw=4 ts=4
                    156:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>