Annotation of embedaddon/php/ext/intl/formatter/formatter_main.c, revision 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>