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>