Annotation of embedaddon/php/ext/intl/formatter/formatter_class.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: #include <unicode/unum.h>
18:
19: #include "formatter_class.h"
20: #include "php_intl.h"
21: #include "formatter_data.h"
22: #include "formatter_format.h"
23: #include "formatter_parse.h"
24: #include "formatter_main.h"
25: #include "formatter_attr.h"
26:
27: zend_class_entry *NumberFormatter_ce_ptr = NULL;
28: static zend_object_handlers NumberFormatter_handlers;
29:
30: /*
31: * Auxiliary functions needed by objects of 'NumberFormatter' class
32: */
33:
34: /* {{{ NumberFormatter_objects_dtor */
35: static void NumberFormatter_object_dtor(
36: void *object,
37: zend_object_handle handle TSRMLS_DC )
38: {
39: zend_objects_destroy_object( object, handle TSRMLS_CC );
40: }
41: /* }}} */
42:
43: /* {{{ NumberFormatter_objects_free */
44: void NumberFormatter_object_free( zend_object *object TSRMLS_DC )
45: {
46: NumberFormatter_object* nfo = (NumberFormatter_object*)object;
47:
48: zend_object_std_dtor( &nfo->zo TSRMLS_CC );
49:
50: formatter_data_free( &nfo->nf_data TSRMLS_CC );
51:
52: efree( nfo );
53: }
54: /* }}} */
55:
56: /* {{{ NumberFormatter_object_create */
57: zend_object_value NumberFormatter_object_create(zend_class_entry *ce TSRMLS_DC)
58: {
59: zend_object_value retval;
60: NumberFormatter_object* intern;
61:
62: intern = ecalloc( 1, sizeof(NumberFormatter_object) );
63: formatter_data_init( &intern->nf_data TSRMLS_CC );
64: zend_object_std_init( &intern->zo, ce TSRMLS_CC );
65:
66: retval.handle = zend_objects_store_put(
67: intern,
68: NumberFormatter_object_dtor,
69: (zend_objects_free_object_storage_t)NumberFormatter_object_free,
70: NULL TSRMLS_CC );
71:
72: retval.handlers = &NumberFormatter_handlers;
73:
74: return retval;
75: }
76: /* }}} */
77:
78: /* {{{ NumberFormatter_object_clone */
79: zend_object_value NumberFormatter_object_clone(zval *object TSRMLS_DC)
80: {
81: zend_object_value new_obj_val;
82: zend_object_handle handle = Z_OBJ_HANDLE_P(object);
83: NumberFormatter_object *nfo, *new_nfo;
84:
85: FORMATTER_METHOD_FETCH_OBJECT;
86: new_obj_val = NumberFormatter_ce_ptr->create_object(NumberFormatter_ce_ptr TSRMLS_CC);
87: new_nfo = (NumberFormatter_object *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC);
88: /* clone standard parts */
89: zend_objects_clone_members(&new_nfo->zo, new_obj_val, &nfo->zo, handle TSRMLS_CC);
90: /* clone formatter object */
91: FORMATTER_OBJECT(new_nfo) = unum_clone(FORMATTER_OBJECT(nfo), &INTL_DATA_ERROR_CODE(new_nfo));
92: if(U_FAILURE(INTL_DATA_ERROR_CODE(new_nfo))) {
93: /* set up error in case error handler is interested */
94: intl_error_set( NULL, INTL_DATA_ERROR_CODE(new_nfo), "Failed to clone NumberFormatter object", 0 TSRMLS_CC );
95: NumberFormatter_object_dtor(new_nfo, new_obj_val.handle TSRMLS_CC); /* free new object */
96: zend_error(E_ERROR, "Failed to clone NumberFormatter object");
97: }
98: return new_obj_val;
99: }
100: /* }}} */
101:
102: /*
103: * 'NumberFormatter' class registration structures & functions
104: */
105:
106: /* {{{ arginfo */
107: ZEND_BEGIN_ARG_INFO_EX(number_parse_arginfo, 0, 0, 1)
108: ZEND_ARG_INFO(0, string)
109: ZEND_ARG_INFO(0, type)
110: ZEND_ARG_INFO(1, position)
111: ZEND_END_ARG_INFO()
112:
113: ZEND_BEGIN_ARG_INFO_EX(number_parse_currency_arginfo, 0, 0, 2)
114: ZEND_ARG_INFO(0, string)
115: ZEND_ARG_INFO(1, currency)
116: ZEND_ARG_INFO(1, position)
117: ZEND_END_ARG_INFO()
118:
119: ZEND_BEGIN_ARG_INFO_EX(arginfo_numberformatter_getattribute, 0, 0, 1)
120: ZEND_ARG_INFO(0, attr)
121: ZEND_END_ARG_INFO()
122:
123: ZEND_BEGIN_ARG_INFO_EX(arginfo_numberformatter_setattribute, 0, 0, 2)
124: ZEND_ARG_INFO(0, attr)
125: ZEND_ARG_INFO(0, value)
126: ZEND_END_ARG_INFO()
127:
128: ZEND_BEGIN_ARG_INFO_EX(arginfo_numberformatter_setsymbol, 0, 0, 2)
129: ZEND_ARG_INFO(0, attr)
130: ZEND_ARG_INFO(0, symbol)
131: ZEND_END_ARG_INFO()
132:
133: ZEND_BEGIN_ARG_INFO(arginfo_numberformatter_getpattern, 0)
134: ZEND_END_ARG_INFO()
135:
136: ZEND_BEGIN_ARG_INFO_EX(arginfo_numberformatter_setpattern, 0, 0, 1)
137: ZEND_ARG_INFO(0, pattern)
138: ZEND_END_ARG_INFO()
139:
140: ZEND_BEGIN_ARG_INFO_EX(arginfo_numberformatter_getlocale, 0, 0, 0)
141: ZEND_ARG_INFO(0, type)
142: ZEND_END_ARG_INFO()
143:
144: ZEND_BEGIN_ARG_INFO_EX(arginfo_numberformatter___construct, 0, 0, 2)
145: ZEND_ARG_INFO(0, locale)
146: ZEND_ARG_INFO(0, style)
147: ZEND_ARG_INFO(0, pattern)
148: ZEND_END_ARG_INFO()
149:
150: ZEND_BEGIN_ARG_INFO_EX(arginfo_numberformatter_formatcurrency, 0, 0, 2)
151: ZEND_ARG_INFO(0, num)
152: ZEND_ARG_INFO(0, currency)
153: ZEND_END_ARG_INFO()
154:
155: ZEND_BEGIN_ARG_INFO_EX(arginfo_numberformatter_format, 0, 0, 1)
156: ZEND_ARG_INFO(0, num)
157: ZEND_ARG_INFO(0, type)
158: ZEND_END_ARG_INFO()
159: /* }}} */
160:
161: /* {{{ NumberFormatter_class_functions
162: * Every 'NumberFormatter' class method has an entry in this table
163: */
164: static function_entry NumberFormatter_class_functions[] = {
165: PHP_ME( NumberFormatter, __construct, arginfo_numberformatter___construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR )
166: ZEND_FENTRY( create, ZEND_FN( numfmt_create ), arginfo_numberformatter___construct, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC )
167: PHP_NAMED_FE( format, ZEND_FN( numfmt_format ), arginfo_numberformatter_format )
168: PHP_NAMED_FE( parse, ZEND_FN( numfmt_parse ), number_parse_arginfo )
169: PHP_NAMED_FE( formatCurrency, ZEND_FN( numfmt_format_currency ), arginfo_numberformatter_formatcurrency )
170: PHP_NAMED_FE( parseCurrency, ZEND_FN( numfmt_parse_currency ), number_parse_currency_arginfo )
171: PHP_NAMED_FE( setAttribute, ZEND_FN( numfmt_set_attribute ), arginfo_numberformatter_setattribute )
172: PHP_NAMED_FE( getAttribute, ZEND_FN( numfmt_get_attribute ), arginfo_numberformatter_getattribute )
173: PHP_NAMED_FE( setTextAttribute, ZEND_FN( numfmt_set_text_attribute ), arginfo_numberformatter_setattribute )
174: PHP_NAMED_FE( getTextAttribute, ZEND_FN( numfmt_get_text_attribute ), arginfo_numberformatter_getattribute )
175: PHP_NAMED_FE( setSymbol, ZEND_FN( numfmt_set_symbol ), arginfo_numberformatter_setsymbol )
176: PHP_NAMED_FE( getSymbol, ZEND_FN( numfmt_get_symbol ), arginfo_numberformatter_getattribute )
177: PHP_NAMED_FE( setPattern, ZEND_FN( numfmt_set_pattern ), arginfo_numberformatter_setpattern )
178: PHP_NAMED_FE( getPattern, ZEND_FN( numfmt_get_pattern ), arginfo_numberformatter_getpattern )
179: PHP_NAMED_FE( getLocale, ZEND_FN( numfmt_get_locale ), arginfo_numberformatter_getlocale )
180: PHP_NAMED_FE( getErrorCode, ZEND_FN( numfmt_get_error_code ), arginfo_numberformatter_getpattern )
181: PHP_NAMED_FE( getErrorMessage, ZEND_FN( numfmt_get_error_message ), arginfo_numberformatter_getpattern )
182: PHP_FE_END
183: };
184: /* }}} */
185:
186: /* {{{ formatter_register_class
187: * Initialize 'NumberFormatter' class
188: */
189: void formatter_register_class( TSRMLS_D )
190: {
191: zend_class_entry ce;
192:
193: /* Create and register 'NumberFormatter' class. */
194: INIT_CLASS_ENTRY( ce, "NumberFormatter", NumberFormatter_class_functions );
195: ce.create_object = NumberFormatter_object_create;
196: NumberFormatter_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
197:
198: memcpy(&NumberFormatter_handlers, zend_get_std_object_handlers(),
199: sizeof(NumberFormatter_handlers));
200: NumberFormatter_handlers.clone_obj = NumberFormatter_object_clone;
201:
202: /* Declare 'NumberFormatter' class properties. */
203: if( !NumberFormatter_ce_ptr )
204: {
205: zend_error(E_ERROR, "Failed to register NumberFormatter class");
206: return;
207: }
208: }
209: /* }}} */
210:
211: /*
212: * Local variables:
213: * tab-width: 4
214: * c-basic-offset: 4
215: * End:
216: * vim600: noet sw=4 ts=4 fdm=marker
217: * vim<600: noet sw=4 ts=4
218: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>