Back to index

php5  5.3.10
Functions
msgformat_parse.c File Reference
#include <unicode/ustring.h>
#include "php_intl.h"
#include "msgformat_class.h"
#include "msgformat_parse.h"
#include "msgformat_data.h"
#include "msgformat_helpers.h"
#include "intl_convert.h"

Go to the source code of this file.

Functions

static void msgfmt_do_parse (MessageFormatter_object *mfo, char *source, int src_len, zval *return_value TSRMLS_DC)
 PHP_FUNCTION (msgfmt_parse)
 PHP_FUNCTION (msgfmt_parse_message)

Function Documentation

static void msgfmt_do_parse ( MessageFormatter_object mfo,
char *  source,
int  src_len,
zval *return_value  TSRMLS_DC 
) [static]

Definition at line 31 of file msgformat_parse.c.

{
       zval **fargs;
       int count = 0;
       int i;
       UChar *usource = NULL;
       int usrc_len = 0;

       intl_convert_utf8_to_utf16(&usource, &usrc_len, source, src_len, &INTL_DATA_ERROR_CODE(mfo));
       INTL_METHOD_CHECK_STATUS(mfo, "Converting parse string failed");

       umsg_parse_helper(MSG_FORMAT_OBJECT(mfo), &count, &fargs, usource, usrc_len, &INTL_DATA_ERROR_CODE(mfo));
       if (usource) {
              efree(usource);
       }
       INTL_METHOD_CHECK_STATUS(mfo, "Parsing failed");

       array_init(return_value);
       for(i=0;i<count;i++) {
              add_next_index_zval(return_value, fargs[i]);
       }
       efree(fargs);
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 61 of file msgformat_parse.c.

{
       char *source;
       int source_len;
       MSG_FORMAT_METHOD_INIT_VARS;


       /* Parse parameters. */
       if( zend_parse_method_parameters( ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",
              &object, MessageFormatter_ce_ptr,  &source, &source_len ) == FAILURE )
       {
              intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
                     "msgfmt_parse: unable to parse input params", 0 TSRMLS_CC );

              RETURN_FALSE;
       }

       /* Fetch the object. */
       MSG_FORMAT_METHOD_FETCH_OBJECT;

       msgfmt_do_parse(mfo, source, source_len, return_value TSRMLS_CC);
}

Here is the call graph for this function:

Definition at line 90 of file msgformat_parse.c.

{
       UChar      *spattern = NULL;
       int         spattern_len = 0;
       char       *pattern = NULL;
       int         pattern_len = 0;
       char       *slocale = NULL;
       int         slocale_len = 0;
       char       *source = NULL;
       int         src_len = 0;
       MessageFormatter_object mf = {0};
       MessageFormatter_object *mfo = &mf;

       /* Parse parameters. */
       if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "sss",
                &slocale, &slocale_len, &pattern, &pattern_len, &source, &src_len ) == FAILURE )
       {
              intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
                     "msgfmt_parse_message: unable to parse input params", 0 TSRMLS_CC );

              RETURN_FALSE;
       }

       msgformat_data_init(&mfo->mf_data TSRMLS_CC);

       if(pattern && pattern_len) {
              intl_convert_utf8_to_utf16(&spattern, &spattern_len, pattern, pattern_len, &INTL_DATA_ERROR_CODE(mfo));
              if( U_FAILURE(INTL_DATA_ERROR_CODE((mfo))) )
              {
                     intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
                            "msgfmt_parse_message: error converting pattern to UTF-16", 0 TSRMLS_CC );
                     RETURN_FALSE;
              }
       } else {
              spattern_len = 0;
              spattern = NULL;
       }

       if(slocale_len == 0) {
              slocale = INTL_G(default_locale);
       }

       if(msgformat_fix_quotes(&spattern, &spattern_len, &INTL_DATA_ERROR_CODE(mfo)) != SUCCESS) {
              intl_error_set( NULL, U_INVALID_FORMAT_ERROR,
                     "msgfmt_parse_message: error converting pattern to quote-friendly format", 0 TSRMLS_CC );
              RETURN_FALSE;
       }

       /* Create an ICU message formatter. */
       MSG_FORMAT_OBJECT(mfo) = umsg_open(spattern, spattern_len, slocale, NULL, &INTL_DATA_ERROR_CODE(mfo));
       if(spattern && spattern_len) {
              efree(spattern);
       }
       INTL_METHOD_CHECK_STATUS(mfo, "Creating message formatter failed");

       msgfmt_do_parse(mfo, source, src_len, return_value TSRMLS_CC);

       /* drop the temporary formatter */
       msgformat_data_free(&mfo->mf_data TSRMLS_CC);
}

Here is the call graph for this function: