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 "php_intl.h" 22#include "msgformat_class.h" 23#include "msgformat_attr.h" 24#include "intl_convert.h" 25 26#include <unicode/ustring.h> 27 28 29/* {{{ proto string MessageFormatter::getPattern( ) 30 * Get formatter pattern. }}} */ 31/* {{{ proto string msgfmt_get_pattern( MessageFormatter $mf ) 32 * Get formatter pattern. 33 */ 34PHP_FUNCTION( msgfmt_get_pattern ) 35{ 36 MSG_FORMAT_METHOD_INIT_VARS; 37 38 /* Parse parameters. */ 39 if( zend_parse_method_parameters( ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, MessageFormatter_ce_ptr ) == FAILURE ) 40 { 41 intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, 42 "msgfmt_get_pattern: unable to parse input params", 0 TSRMLS_CC ); 43 RETURN_FALSE; 44 } 45 46 /* Fetch the object. */ 47 MSG_FORMAT_METHOD_FETCH_OBJECT; 48 49 if(mfo->mf_data.orig_format) { 50 RETURN_STRINGL(mfo->mf_data.orig_format, mfo->mf_data.orig_format_len, 1); 51 } 52 53 RETURN_FALSE; 54} 55/* }}} */ 56 57/* {{{ proto bool MessageFormatter::setPattern( string $pattern ) 58 * Set formatter pattern. }}} */ 59/* {{{ proto bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern ) 60 * Set formatter pattern. 61 */ 62PHP_FUNCTION( msgfmt_set_pattern ) 63{ 64 char* value = NULL; 65 int value_len = 0; 66 int spattern_len = 0; 67 UChar* spattern = NULL; 68 MSG_FORMAT_METHOD_INIT_VARS; 69 70 /* Parse parameters. */ 71 if( zend_parse_method_parameters( ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", 72 &object, MessageFormatter_ce_ptr, &value, &value_len ) == FAILURE ) 73 { 74 intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, 75 "msgfmt_set_pattern: unable to parse input params", 0 TSRMLS_CC); 76 RETURN_FALSE; 77 } 78 79 MSG_FORMAT_METHOD_FETCH_OBJECT; 80 81 /* Convert given pattern to UTF-16. */ 82 intl_convert_utf8_to_utf16(&spattern, &spattern_len, value, value_len, &INTL_DATA_ERROR_CODE(mfo)); 83 INTL_METHOD_CHECK_STATUS(mfo, "Error converting pattern to UTF-16" ); 84 85#ifdef MSG_FORMAT_QUOTE_APOS 86 if(msgformat_fix_quotes(&spattern, &spattern_len, &INTL_DATA_ERROR_CODE(mfo)) != SUCCESS) { 87 intl_error_set( NULL, U_INVALID_FORMAT_ERROR, 88 "msgfmt_set_pattern: error converting pattern to quote-friendly format", 0 TSRMLS_CC ); 89 RETURN_FALSE; 90 } 91#endif 92 93 /* TODO: add parse error information */ 94 umsg_applyPattern(MSG_FORMAT_OBJECT(mfo), spattern, spattern_len, NULL, &INTL_DATA_ERROR_CODE(mfo)); 95 if (spattern) { 96 efree(spattern); 97 } 98 INTL_METHOD_CHECK_STATUS(mfo, "Error setting symbol value"); 99 100 if(mfo->mf_data.orig_format) { 101 efree(mfo->mf_data.orig_format); 102 } 103 mfo->mf_data.orig_format = estrndup(value, value_len); 104 mfo->mf_data.orig_format_len = value_len; 105 106 RETURN_TRUE; 107} 108/* }}} */ 109 110/* {{{ proto string MessageFormatter::getLocale() 111 * Get formatter locale. }}} */ 112/* {{{ proto string msgfmt_get_locale(MessageFormatter $mf) 113 * Get formatter locale. 114 */ 115PHP_FUNCTION( msgfmt_get_locale ) 116{ 117 char *loc; 118 MSG_FORMAT_METHOD_INIT_VARS; 119 120 /* Parse parameters. */ 121 if( zend_parse_method_parameters( ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", 122 &object, MessageFormatter_ce_ptr ) == FAILURE ) 123 { 124 intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, 125 "msgfmt_get_locale: unable to parse input params", 0 TSRMLS_CC ); 126 127 RETURN_FALSE; 128 } 129 130 /* Fetch the object. */ 131 MSG_FORMAT_METHOD_FETCH_OBJECT; 132 133 loc = (char *)umsg_getLocale(MSG_FORMAT_OBJECT(mfo)); 134 RETURN_STRING(loc, 1); 135} 136/* }}} */ 137 138/* 139 * Local variables: 140 * tab-width: 4 141 * c-basic-offset: 4 142 * End: 143 * vim600: noet sw=4 ts=4 fdm=marker 144 * vim<600: noet sw=4 ts=4 145 */ 146