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/dom - characterdata.c (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 120 136 88.2 %
Date: 2014-12-15 Functions: 8 8 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :    +----------------------------------------------------------------------+
       3             :    | PHP Version 5                                                        |
       4             :    +----------------------------------------------------------------------+
       5             :    | Copyright (c) 1997-2014 The PHP Group                                |
       6             :    +----------------------------------------------------------------------+
       7             :    | This source file is subject to version 3.01 of the PHP license,      |
       8             :    | that is bundled with this package in the file LICENSE, and is        |
       9             :    | available through the world-wide-web at the following url:           |
      10             :    | http://www.php.net/license/3_01.txt                                  |
      11             :    | If you did not receive a copy of the PHP license and are unable to   |
      12             :    | obtain it through the world-wide-web, please send a note to          |
      13             :    | license@php.net so we can mail you a copy immediately.               |
      14             :    +----------------------------------------------------------------------+
      15             :    | Authors: Christian Stocker <chregu@php.net>                          |
      16             :    |          Rob Richards <rrichards@php.net>                            |
      17             :    +----------------------------------------------------------------------+
      18             : */
      19             : 
      20             : /* $Id$ */
      21             : 
      22             : #ifdef HAVE_CONFIG_H
      23             : #include "config.h"
      24             : #endif
      25             : 
      26             : #include "php.h"
      27             : #if HAVE_LIBXML && HAVE_DOM
      28             : #include "php_dom.h"
      29             : 
      30             : 
      31             : /* {{{ arginfo */
      32             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_characterdata_substring_data, 0, 0, 2)
      33             :         ZEND_ARG_INFO(0, offset)
      34             :         ZEND_ARG_INFO(0, count)
      35             : ZEND_END_ARG_INFO();
      36             : 
      37             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_characterdata_append_data, 0, 0, 1)
      38             :         ZEND_ARG_INFO(0, arg)
      39             : ZEND_END_ARG_INFO();
      40             : 
      41             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_characterdata_insert_data, 0, 0, 2)
      42             :         ZEND_ARG_INFO(0, offset)
      43             :         ZEND_ARG_INFO(0, arg)
      44             : ZEND_END_ARG_INFO();
      45             : 
      46             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_characterdata_delete_data, 0, 0, 2)
      47             :         ZEND_ARG_INFO(0, offset)
      48             :         ZEND_ARG_INFO(0, count)
      49             : ZEND_END_ARG_INFO();
      50             : 
      51             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_characterdata_replace_data, 0, 0, 3)
      52             :         ZEND_ARG_INFO(0, offset)
      53             :         ZEND_ARG_INFO(0, count)
      54             :         ZEND_ARG_INFO(0, arg)
      55             : ZEND_END_ARG_INFO();
      56             : /* }}} */
      57             : 
      58             : /*
      59             : * class DOMCharacterData extends DOMNode 
      60             : *
      61             : * URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-FF21A306
      62             : * Since: 
      63             : */
      64             : 
      65             : const zend_function_entry php_dom_characterdata_class_functions[] = {
      66             :         PHP_FALIAS(substringData, dom_characterdata_substring_data, arginfo_dom_characterdata_substring_data)
      67             :         PHP_FALIAS(appendData, dom_characterdata_append_data, arginfo_dom_characterdata_append_data)
      68             :         PHP_FALIAS(insertData, dom_characterdata_insert_data, arginfo_dom_characterdata_insert_data)
      69             :         PHP_FALIAS(deleteData, dom_characterdata_delete_data, arginfo_dom_characterdata_delete_data)
      70             :         PHP_FALIAS(replaceData, dom_characterdata_replace_data, arginfo_dom_characterdata_replace_data)
      71             :         PHP_FE_END
      72             : };
      73             : 
      74             : /* {{{ data     string  
      75             : readonly=no 
      76             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-72AB8359
      77             : Since: 
      78             : */
      79          10 : int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC)
      80             : {
      81             :         xmlNodePtr nodep;
      82             :         xmlChar *content;
      83             : 
      84          10 :         nodep = dom_object_get_node(obj);
      85             : 
      86          10 :         if (nodep == NULL) {
      87           1 :                 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
      88           1 :                 return FAILURE;
      89             :         }
      90             : 
      91           9 :         ALLOC_ZVAL(*retval);
      92             :         
      93           9 :         if ((content = xmlNodeGetContent(nodep)) != NULL) {
      94           9 :                 ZVAL_STRING(*retval, content, 1);
      95           9 :                 xmlFree(content);
      96             :         } else {
      97           0 :                 ZVAL_EMPTY_STRING(*retval);
      98             :         }
      99             : 
     100           9 :         return SUCCESS;
     101             : }
     102             : 
     103           3 : int dom_characterdata_data_write(dom_object *obj, zval *newval TSRMLS_DC)
     104             : {
     105             :         zval value_copy;
     106             :         xmlNode *nodep;
     107             : 
     108           3 :         nodep = dom_object_get_node(obj);
     109             : 
     110           3 :         if (nodep == NULL) {
     111           0 :                 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
     112           0 :                 return FAILURE;
     113             :         }
     114             : 
     115           3 :         if (newval->type != IS_STRING) {
     116           1 :                 if(Z_REFCOUNT_P(newval) > 1) {
     117           0 :                         value_copy = *newval;
     118             :                         zval_copy_ctor(&value_copy);
     119           0 :                         newval = &value_copy;
     120             :                 }
     121           1 :                 convert_to_string(newval);
     122             :         }
     123             : 
     124           3 :         xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
     125             : 
     126           3 :         if (newval == &value_copy) {
     127             :                 zval_dtor(newval);
     128             :         }
     129             : 
     130           3 :         return SUCCESS;
     131             : }
     132             : 
     133             : /* }}} */
     134             : 
     135             : /* {{{ length   long    
     136             : readonly=yes 
     137             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7D61178C
     138             : Since: 
     139             : */
     140           9 : int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC)
     141             : {
     142             :         xmlNodePtr nodep;
     143             :         xmlChar *content;
     144           9 :         long length = 0;
     145             : 
     146           9 :         nodep = dom_object_get_node(obj);
     147             : 
     148           9 :         if (nodep == NULL) {
     149           1 :                 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
     150           1 :                 return FAILURE;
     151             :         }
     152             : 
     153           8 :         ALLOC_ZVAL(*retval);
     154             :         
     155           8 :         content = xmlNodeGetContent(nodep);
     156             : 
     157           8 :         if (content) {
     158           8 :                 length = xmlUTF8Strlen(content);
     159           8 :                 xmlFree(content);
     160             :         }
     161             : 
     162           8 :         ZVAL_LONG(*retval, length);
     163             : 
     164           8 :         return SUCCESS;
     165             : }
     166             : 
     167             : /* }}} */
     168             : 
     169             : /* {{{ proto string dom_characterdata_substring_data(int offset, int count);
     170             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6531BCCF
     171             : Since: 
     172             : */
     173           3 : PHP_FUNCTION(dom_characterdata_substring_data)
     174             : {
     175             :         zval       *id;
     176             :         xmlChar    *cur;
     177             :         xmlChar    *substring;
     178             :         xmlNodePtr  node;
     179             :         long        offset, count;
     180             :         int         length;
     181             :         dom_object      *intern;
     182             : 
     183           3 :         if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll", &id, dom_characterdata_class_entry, &offset, &count) == FAILURE) {
     184           0 :                 return;
     185             :         }
     186             : 
     187           3 :         DOM_GET_OBJ(node, id, xmlNodePtr, intern);
     188             : 
     189           3 :         cur = xmlNodeGetContent(node);
     190           3 :         if (cur == NULL) {
     191           0 :                 RETURN_FALSE;
     192             :         }
     193             : 
     194           3 :         length = xmlUTF8Strlen(cur);
     195             : 
     196           3 :         if (offset < 0 || count < 0 || offset > length) {
     197           0 :                 xmlFree(cur);
     198           0 :                 php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
     199           0 :                 RETURN_FALSE;
     200             :         }
     201             : 
     202           3 :         if ((offset + count) > length) {
     203           0 :                 count = length - offset;
     204             :         }
     205             : 
     206           3 :         substring = xmlUTF8Strsub(cur, offset, count);
     207           3 :         xmlFree(cur);
     208             : 
     209           3 :         if (substring) {
     210           3 :                 RETVAL_STRING(substring, 1);
     211           3 :                 xmlFree(substring);
     212             :         } else {
     213           0 :                 RETVAL_EMPTY_STRING();
     214             :         }
     215             : }
     216             : /* }}} end dom_characterdata_substring_data */
     217             : 
     218             : /* {{{ proto void dom_characterdata_append_data(string arg);
     219             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-32791A2F
     220             : Since: 
     221             : */
     222           8 : PHP_FUNCTION(dom_characterdata_append_data)
     223             : {
     224             :         zval *id;
     225             :         xmlNode *nodep;
     226             :         dom_object *intern;
     227             :         char *arg;
     228             :         int arg_len;
     229             : 
     230           8 :         if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_characterdata_class_entry, &arg, &arg_len) == FAILURE) {
     231           1 :                 return;
     232             :         }
     233             : 
     234           7 :         DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
     235             : #if LIBXML_VERSION < 20627
     236             : /* Implement logic from libxml xmlTextConcat to add suport for comments and PI */
     237             :     if ((nodep->content == (xmlChar *) &(nodep->properties)) ||
     238             :         ((nodep->doc != NULL) && (nodep->doc->dict != NULL) &&
     239             :                 xmlDictOwns(nodep->doc->dict, nodep->content))) {
     240             :         nodep->content = xmlStrncatNew(nodep->content, arg, arg_len);
     241             :     } else {
     242             :         nodep->content = xmlStrncat(nodep->content, arg, arg_len);
     243             :     }
     244             :     nodep->properties = NULL;
     245             : #else
     246           7 :         xmlTextConcat(nodep, arg, arg_len);
     247             : #endif
     248           7 :         RETURN_TRUE;
     249             : }
     250             : /* }}} end dom_characterdata_append_data */
     251             : 
     252             : /* {{{ proto void dom_characterdata_insert_data(int offset, string arg);
     253             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3EDB695F
     254             : Since: 
     255             : */
     256           7 : PHP_FUNCTION(dom_characterdata_insert_data)
     257             : {
     258             :         zval *id;
     259             :         xmlChar         *cur, *first, *second;
     260             :         xmlNodePtr  node;
     261             :         char            *arg;
     262             :         long        offset;
     263             :         int         length, arg_len;
     264             :         dom_object      *intern;
     265             : 
     266           7 :         if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ols", &id, dom_characterdata_class_entry, &offset, &arg, &arg_len) == FAILURE) {
     267           1 :                 return;
     268             :         }
     269             : 
     270           6 :         DOM_GET_OBJ(node, id, xmlNodePtr, intern);
     271             : 
     272           6 :         cur = xmlNodeGetContent(node);
     273           6 :         if (cur == NULL) {
     274           0 :                 RETURN_FALSE;
     275             :         }
     276             : 
     277           6 :         length = xmlUTF8Strlen(cur);
     278             : 
     279           6 :         if (offset < 0 || offset > length) {
     280           2 :                 xmlFree(cur);
     281           2 :                 php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
     282           2 :                 RETURN_FALSE;
     283             :         }
     284             : 
     285           4 :         first = xmlUTF8Strndup(cur, offset);
     286           4 :         second = xmlUTF8Strsub(cur, offset, length - offset);
     287           4 :         xmlFree(cur);
     288             : 
     289           4 :         xmlNodeSetContent(node, first);
     290           4 :         xmlNodeAddContent(node, arg);
     291           4 :         xmlNodeAddContent(node, second);
     292             :         
     293           4 :         xmlFree(first);
     294           4 :         xmlFree(second);
     295             : 
     296           4 :         RETURN_TRUE;
     297             : }
     298             : /* }}} end dom_characterdata_insert_data */
     299             : 
     300             : /* {{{ proto void dom_characterdata_delete_data(int offset, int count);
     301             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7C603781
     302             : Since: 
     303             : */
     304           5 : PHP_FUNCTION(dom_characterdata_delete_data)
     305             : {
     306             :         zval *id;
     307             :         xmlChar    *cur, *substring, *second;
     308             :         xmlNodePtr  node;
     309             :         long        offset, count;
     310             :         int         length;
     311             :         dom_object      *intern;
     312             : 
     313           5 :         if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll", &id, dom_characterdata_class_entry, &offset, &count) == FAILURE) {
     314           1 :                 return;
     315             :         }
     316             : 
     317           4 :         DOM_GET_OBJ(node, id, xmlNodePtr, intern);
     318             : 
     319           4 :         cur = xmlNodeGetContent(node);
     320           4 :         if (cur == NULL) {
     321           0 :                 RETURN_FALSE;
     322             :         }
     323             : 
     324           4 :         length = xmlUTF8Strlen(cur);
     325             : 
     326           4 :         if (offset < 0 || count < 0 || offset > length) {
     327           1 :                 xmlFree(cur);
     328           1 :                 php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
     329           1 :                 RETURN_FALSE;
     330             :         }
     331             : 
     332           3 :         if (offset > 0) {
     333           3 :                 substring = xmlUTF8Strsub(cur, 0, offset);
     334             :         } else {
     335           0 :                 substring = NULL;
     336             :         }
     337             : 
     338           3 :         if ((offset + count) > length) {
     339           1 :                 count = length - offset;
     340             :         }
     341             : 
     342           3 :         second = xmlUTF8Strsub(cur, offset + count, length - offset);
     343           3 :         substring = xmlStrcat(substring, second);
     344             : 
     345           3 :         xmlNodeSetContent(node, substring);
     346             : 
     347           3 :         xmlFree(cur);
     348           3 :         xmlFree(second);
     349           3 :         xmlFree(substring);
     350             : 
     351           3 :         RETURN_TRUE;
     352             : }
     353             : /* }}} end dom_characterdata_delete_data */
     354             : 
     355             : /* {{{ proto void dom_characterdata_replace_data(int offset, int count, string arg);
     356             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-E5CBA7FB
     357             : Since: 
     358             : */
     359           7 : PHP_FUNCTION(dom_characterdata_replace_data)
     360             : {
     361             :         zval *id;
     362           7 :         xmlChar         *cur, *substring, *second = NULL;
     363             :         xmlNodePtr  node;
     364             :         char            *arg;
     365             :         long        offset, count;
     366             :         int         length, arg_len;
     367             :         dom_object      *intern;
     368             : 
     369           7 :         if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olls", &id, dom_characterdata_class_entry, &offset, &count, &arg, &arg_len) == FAILURE) {
     370           1 :                 return;
     371             :         }
     372             : 
     373           6 :         DOM_GET_OBJ(node, id, xmlNodePtr, intern);
     374             : 
     375           6 :         cur = xmlNodeGetContent(node);
     376           6 :         if (cur == NULL) {
     377           0 :                 RETURN_FALSE;
     378             :         }
     379             : 
     380           6 :         length = xmlUTF8Strlen(cur);
     381             : 
     382           6 :         if (offset < 0 || count < 0 || offset > length) {
     383           2 :                 xmlFree(cur);
     384           2 :                 php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
     385           2 :                 RETURN_FALSE;
     386             :         }
     387             : 
     388           4 :         if (offset > 0) {
     389           3 :                 substring = xmlUTF8Strsub(cur, 0, offset);
     390             :         } else {
     391           1 :                 substring = NULL;
     392             :         }
     393             : 
     394           4 :         if ((offset + count) > length) {
     395           1 :                 count = length - offset;
     396             :         }
     397             : 
     398           4 :         if (offset < length) {
     399           4 :                 second = xmlUTF8Strsub(cur, offset + count, length - offset);
     400             :         }
     401             : 
     402           4 :         substring = xmlStrcat(substring, arg);
     403           4 :         substring = xmlStrcat(substring, second);
     404             : 
     405           4 :         xmlNodeSetContent(node, substring);
     406             : 
     407           4 :         xmlFree(cur);
     408           4 :         if (second) {
     409           4 :                 xmlFree(second);
     410             :         }
     411           4 :         xmlFree(substring);
     412             : 
     413           4 :         RETURN_TRUE;
     414             : }
     415             : /* }}} end dom_characterdata_replace_data */
     416             : 
     417             : #endif
     418             : 
     419             : /*
     420             :  * Local variables:
     421             :  * tab-width: 4
     422             :  * c-basic-offset: 4
     423             :  * End:
     424             :  * vim600: noet sw=4 ts=4 fdm=marker
     425             :  * vim<600: noet sw=4 ts=4
     426             :  */

Generated by: LCOV version 1.10

Generated at Mon, 15 Dec 2014 17:02:41 +0000 (4 days ago)

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