PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LCOV - code coverage report
Current view: top level - ext/intl/msgformat - msgformat_parse.c (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 47 54 87.0 %
Date: 2014-09-02 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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 "msgformat_class.h"
      25             : #include "msgformat_parse.h"
      26             : #include "msgformat_data.h"
      27             : #include "msgformat_helpers.h"
      28             : #include "intl_convert.h"
      29             : 
      30             : /* {{{ */
      31          20 : static void msgfmt_do_parse(MessageFormatter_object *mfo, char *source, int src_len, zval *return_value TSRMLS_DC) 
      32             : {
      33             :         zval **fargs;
      34          20 :         int count = 0;
      35             :         int i;
      36          20 :         UChar *usource = NULL;
      37          20 :         int usrc_len = 0;
      38             : 
      39          20 :         intl_convert_utf8_to_utf16(&usource, &usrc_len, source, src_len, &INTL_DATA_ERROR_CODE(mfo));
      40          20 :         INTL_METHOD_CHECK_STATUS(mfo, "Converting parse string failed");
      41             : 
      42          20 :         umsg_parse_helper(MSG_FORMAT_OBJECT(mfo), &count, &fargs, usource, usrc_len, &INTL_DATA_ERROR_CODE(mfo));
      43          20 :         if (usource) {
      44          20 :                 efree(usource);
      45             :         }
      46          20 :         INTL_METHOD_CHECK_STATUS(mfo, "Parsing failed");
      47             : 
      48          20 :         array_init(return_value);
      49          72 :         for(i=0;i<count;i++) {
      50          52 :                 add_next_index_zval(return_value, fargs[i]);
      51             :         }
      52          20 :         efree(fargs);
      53             : }
      54             : /* }}} */
      55             : 
      56             : /* {{{ proto array MessageFormatter::parse( string $source )
      57             :  * Parse a message }}} */
      58             : /* {{{ proto array msgfmt_parse( MessageFormatter $nf, string $source )
      59             :  * Parse a message.
      60             :  */
      61          11 : PHP_FUNCTION( msgfmt_parse )
      62             : {
      63             :         char *source;
      64             :         int source_len;
      65          11 :         MSG_FORMAT_METHOD_INIT_VARS;
      66             : 
      67             : 
      68             :         /* Parse parameters. */
      69          11 :         if( zend_parse_method_parameters( ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",
      70             :                 &object, MessageFormatter_ce_ptr,  &source, &source_len ) == FAILURE )
      71             :         {
      72           1 :                 intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
      73             :                         "msgfmt_parse: unable to parse input params", 0 TSRMLS_CC );
      74             : 
      75           1 :                 RETURN_FALSE;
      76             :         }
      77             : 
      78             :         /* Fetch the object. */
      79          10 :         MSG_FORMAT_METHOD_FETCH_OBJECT;
      80             : 
      81          10 :         msgfmt_do_parse(mfo, source, source_len, return_value TSRMLS_CC);
      82             : }
      83             : /* }}} */
      84             : 
      85             : /* {{{ proto array MessageFormatter::formatMessage( string $locale, string $pattern, string $source )
      86             :  * Parse a message. }}} */
      87             : /* {{{ proto array numfmt_parse_message( string $locale, string $pattern, string $source )
      88             :  * Parse a message.
      89             :  */
      90          11 : PHP_FUNCTION( msgfmt_parse_message )
      91             : {
      92          11 :         UChar      *spattern = NULL;
      93          11 :         int         spattern_len = 0;
      94          11 :         char       *pattern = NULL;
      95          11 :         int         pattern_len = 0;
      96          11 :         char       *slocale = NULL;
      97          11 :         int         slocale_len = 0;
      98          11 :         char       *source = NULL;
      99          11 :         int         src_len = 0;
     100          11 :         MessageFormatter_object mf = {0};
     101          11 :         MessageFormatter_object *mfo = &mf;
     102             : 
     103             :         /* Parse parameters. */
     104          11 :         if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "sss",
     105             :                   &slocale, &slocale_len, &pattern, &pattern_len, &source, &src_len ) == FAILURE )
     106             :         {
     107           1 :                 intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
     108             :                         "msgfmt_parse_message: unable to parse input params", 0 TSRMLS_CC );
     109             : 
     110           1 :                 RETURN_FALSE;
     111             :         }
     112             : 
     113          10 :         msgformat_data_init(&mfo->mf_data TSRMLS_CC);
     114             : 
     115          20 :         if(pattern && pattern_len) {
     116          10 :                 intl_convert_utf8_to_utf16(&spattern, &spattern_len, pattern, pattern_len, &INTL_DATA_ERROR_CODE(mfo));
     117          10 :                 if( U_FAILURE(INTL_DATA_ERROR_CODE((mfo))) )
     118             :                 {
     119           0 :                         intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
     120             :                                 "msgfmt_parse_message: error converting pattern to UTF-16", 0 TSRMLS_CC );
     121           0 :                         RETURN_FALSE;
     122             :                 }
     123             :         } else {
     124           0 :                 spattern_len = 0;
     125           0 :                 spattern = NULL;
     126             :         }
     127             : 
     128          10 :         if(slocale_len == 0) {
     129           0 :                 slocale = INTL_G(default_locale);
     130             :         }
     131             : 
     132             : #ifdef MSG_FORMAT_QUOTE_APOS
     133          10 :         if(msgformat_fix_quotes(&spattern, &spattern_len, &INTL_DATA_ERROR_CODE(mfo)) != SUCCESS) {
     134           0 :                 intl_error_set( NULL, U_INVALID_FORMAT_ERROR,
     135             :                         "msgfmt_parse_message: error converting pattern to quote-friendly format", 0 TSRMLS_CC );
     136           0 :                 RETURN_FALSE;
     137             :         }
     138             : #endif
     139             : 
     140             :         /* Create an ICU message formatter. */
     141          10 :         MSG_FORMAT_OBJECT(mfo) = umsg_open(spattern, spattern_len, slocale, NULL, &INTL_DATA_ERROR_CODE(mfo));
     142          10 :         if(spattern && spattern_len) {
     143          10 :                 efree(spattern);
     144             :         }
     145          10 :         INTL_METHOD_CHECK_STATUS(mfo, "Creating message formatter failed");
     146             : 
     147          10 :         msgfmt_do_parse(mfo, source, src_len, return_value TSRMLS_CC);
     148             : 
     149             :         /* drop the temporary formatter */
     150          10 :         msgformat_data_free(&mfo->mf_data TSRMLS_CC);
     151             : }
     152             : /* }}} */
     153             : 
     154             : /*
     155             :  * Local variables:
     156             :  * tab-width: 4
     157             :  * c-basic-offset: 4
     158             :  * End:
     159             :  * vim600: noet sw=4 ts=4 fdm=marker
     160             :  * vim<600: noet sw=4 ts=4
     161             :  */

Generated by: LCOV version 1.10

Generated at Tue, 02 Sep 2014 09:42:56 +0000 (21 hours ago)

Copyright © 2005-2014 The PHP Group
All rights reserved.