root/ext/dom/namednodemap.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. dom_namednodemap_length_read
  2. PHP_FUNCTION
  3. PHP_FUNCTION
  4. PHP_FUNCTION
  5. PHP_FUNCTION
  6. PHP_FUNCTION
  7. PHP_FUNCTION
  8. PHP_FUNCTION

   1 /*
   2    +----------------------------------------------------------------------+
   3    | PHP Version 7                                                        |
   4    +----------------------------------------------------------------------+
   5    | Copyright (c) 1997-2016 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 /* {{{ arginfo */
  31 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_get_named_item, 0, 0, 1)
  32         ZEND_ARG_INFO(0, name)
  33 ZEND_END_ARG_INFO();
  34 
  35 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_set_named_item, 0, 0, 1)
  36         ZEND_ARG_OBJ_INFO(0, arg, DOMNode, 0)
  37 ZEND_END_ARG_INFO();
  38 
  39 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_remove_named_item, 0, 0, 0)
  40         ZEND_ARG_INFO(0, name)
  41 ZEND_END_ARG_INFO();
  42 
  43 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_item, 0, 0, 0)
  44         ZEND_ARG_INFO(0, index)
  45 ZEND_END_ARG_INFO();
  46 
  47 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_get_named_item_ns, 0, 0, 0)
  48         ZEND_ARG_INFO(0, namespaceURI)
  49         ZEND_ARG_INFO(0, localName)
  50 ZEND_END_ARG_INFO();
  51 
  52 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_set_named_item_ns, 0, 0, 0)
  53         ZEND_ARG_OBJ_INFO(0, arg, DOMNode, 0)
  54 ZEND_END_ARG_INFO();
  55 
  56 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_remove_named_item_ns, 0, 0, 0)
  57         ZEND_ARG_INFO(0, namespaceURI)
  58         ZEND_ARG_INFO(0, localName)
  59 ZEND_END_ARG_INFO();
  60 /* }}} */
  61 
  62 /*
  63 * class DOMNamedNodeMap
  64 *
  65 * URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1780488922
  66 * Since:
  67 */
  68 
  69 const zend_function_entry php_dom_namednodemap_class_functions[] = { /* {{{ */
  70         PHP_FALIAS(getNamedItem, dom_namednodemap_get_named_item, arginfo_dom_namednodemap_get_named_item)
  71         PHP_FALIAS(setNamedItem, dom_namednodemap_set_named_item, arginfo_dom_namednodemap_set_named_item)
  72         PHP_FALIAS(removeNamedItem, dom_namednodemap_remove_named_item, arginfo_dom_namednodemap_remove_named_item)
  73         PHP_FALIAS(item, dom_namednodemap_item, arginfo_dom_namednodemap_item)
  74         PHP_FALIAS(getNamedItemNS, dom_namednodemap_get_named_item_ns, arginfo_dom_namednodemap_get_named_item_ns)
  75         PHP_FALIAS(setNamedItemNS, dom_namednodemap_set_named_item_ns, arginfo_dom_namednodemap_set_named_item_ns)
  76         PHP_FALIAS(removeNamedItemNS, dom_namednodemap_remove_named_item_ns, arginfo_dom_namednodemap_remove_named_item_ns)
  77         PHP_FE_END
  78 };
  79 /* }}} */
  80 
  81 /* {{{ length   int
  82 readonly=yes
  83 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D0FB19E
  84 Since:
  85 */
  86 int dom_namednodemap_length_read(dom_object *obj, zval *retval)
  87 {
  88         dom_nnodemap_object *objmap;
  89         xmlAttrPtr curnode;
  90         xmlNodePtr nodep;
  91         int count = 0;
  92 
  93         objmap = (dom_nnodemap_object *)obj->ptr;
  94 
  95         if (objmap != NULL) {
  96                 if ((objmap->nodetype == XML_NOTATION_NODE) ||
  97                         objmap->nodetype == XML_ENTITY_NODE) {
  98                         if (objmap->ht) {
  99                                 count = xmlHashSize(objmap->ht);
 100                         }
 101                 } else {
 102                         nodep = dom_object_get_node(objmap->baseobj);
 103                         if (nodep) {
 104                                 curnode = nodep->properties;
 105                                 if (curnode) {
 106                                         count++;
 107                                         while (curnode->next != NULL) {
 108                                                 count++;
 109                                                 curnode = curnode->next;
 110                                         }
 111                                 }
 112                         }
 113                 }
 114         }
 115 
 116         ZVAL_LONG(retval, count);
 117         return SUCCESS;
 118 }
 119 
 120 /* }}} */
 121 
 122 /* {{{ proto DOMNode dom_namednodemap_get_named_item(string name);
 123 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549
 124 Since:
 125 */
 126 PHP_FUNCTION(dom_namednodemap_get_named_item)
 127 {
 128         zval *id;
 129         int ret;
 130         size_t namedlen=0;
 131         dom_object *intern;
 132         xmlNodePtr itemnode = NULL;
 133         char *named;
 134 
 135         dom_nnodemap_object *objmap;
 136         xmlNodePtr nodep;
 137         xmlNotation *notep = NULL;
 138 
 139         if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &id, dom_namednodemap_class_entry, &named, &namedlen) == FAILURE) {
 140                 return;
 141         }
 142 
 143         intern = Z_DOMOBJ_P(id);
 144 
 145         objmap = (dom_nnodemap_object *)intern->ptr;
 146 
 147         if (objmap != NULL) {
 148                 if ((objmap->nodetype == XML_NOTATION_NODE) ||
 149                         objmap->nodetype == XML_ENTITY_NODE) {
 150                         if (objmap->ht) {
 151                                 if (objmap->nodetype == XML_ENTITY_NODE) {
 152                                         itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, (xmlChar *) named);
 153                                 } else {
 154                                         notep = (xmlNotation *)xmlHashLookup(objmap->ht, (xmlChar *) named);
 155                                         if (notep) {
 156                                                 itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID);
 157                                         }
 158                                 }
 159                         }
 160                 } else {
 161                         nodep = dom_object_get_node(objmap->baseobj);
 162                         if (nodep) {
 163                                 itemnode = (xmlNodePtr)xmlHasProp(nodep, (xmlChar *) named);
 164                         }
 165                 }
 166         }
 167 
 168         if (itemnode) {
 169                 DOM_RET_OBJ(itemnode, &ret, objmap->baseobj);
 170                 return;
 171         } else {
 172                 RETVAL_NULL();
 173         }
 174 }
 175 /* }}} end dom_namednodemap_get_named_item */
 176 
 177 /* {{{ proto DOMNode dom_namednodemap_set_named_item(DOMNode arg);
 178 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788
 179 Since:
 180 */
 181 PHP_FUNCTION(dom_namednodemap_set_named_item)
 182 {
 183  DOM_NOT_IMPLEMENTED();
 184 }
 185 /* }}} end dom_namednodemap_set_named_item */
 186 
 187 /* {{{ proto DOMNode dom_namednodemap_remove_named_item(string name);
 188 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193
 189 Since:
 190 */
 191 PHP_FUNCTION(dom_namednodemap_remove_named_item)
 192 {
 193  DOM_NOT_IMPLEMENTED();
 194 }
 195 /* }}} end dom_namednodemap_remove_named_item */
 196 
 197 /* {{{ proto DOMNode dom_namednodemap_item(int index);
 198 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9
 199 Since:
 200 */
 201 PHP_FUNCTION(dom_namednodemap_item)
 202 {
 203         zval *id;
 204         zend_long index;
 205         int ret;
 206         dom_object *intern;
 207         xmlNodePtr itemnode = NULL;
 208 
 209         dom_nnodemap_object *objmap;
 210         xmlNodePtr nodep, curnode;
 211         int count;
 212 
 213         if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &id, dom_namednodemap_class_entry, &index) == FAILURE) {
 214                 return;
 215         }
 216         if (index >= 0) {
 217                 if (ZEND_LONG_INT_OVFL(index)) {
 218                         php_error_docref(NULL, E_WARNING, "Invalid index");
 219                         RETURN_NULL();
 220                 }
 221 
 222                 intern = Z_DOMOBJ_P(id);
 223 
 224                 objmap = (dom_nnodemap_object *)intern->ptr;
 225 
 226                 if (objmap != NULL) {
 227                         if ((objmap->nodetype == XML_NOTATION_NODE) ||
 228                                 objmap->nodetype == XML_ENTITY_NODE) {
 229                                 if (objmap->ht) {
 230                                         if (objmap->nodetype == XML_ENTITY_NODE) {
 231                                                 itemnode = php_dom_libxml_hash_iter(objmap->ht, index);
 232                                         } else {
 233                                                 itemnode = php_dom_libxml_notation_iter(objmap->ht, index);
 234                                         }
 235                                 }
 236                         } else {
 237                                 nodep = dom_object_get_node(objmap->baseobj);
 238                                 if (nodep) {
 239                                         curnode = (xmlNodePtr)nodep->properties;
 240                                         count = 0;
 241                                         while (count < index && curnode != NULL) {
 242                                                 count++;
 243                                                 curnode = (xmlNodePtr)curnode->next;
 244                                         }
 245                                         itemnode = curnode;
 246                                 }
 247                         }
 248                 }
 249 
 250                 if (itemnode) {
 251                         DOM_RET_OBJ(itemnode, &ret, objmap->baseobj);
 252                         return;
 253                 }
 254         }
 255 
 256         RETVAL_NULL();
 257 }
 258 /* }}} end dom_namednodemap_item */
 259 
 260 /* {{{ proto DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);
 261 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS
 262 Since: DOM Level 2
 263 */
 264 PHP_FUNCTION(dom_namednodemap_get_named_item_ns)
 265 {
 266         zval *id;
 267         int ret;
 268         size_t namedlen=0, urilen=0;
 269         dom_object *intern;
 270         xmlNodePtr itemnode = NULL;
 271         char *uri, *named;
 272 
 273         dom_nnodemap_object *objmap;
 274         xmlNodePtr nodep;
 275         xmlNotation *notep = NULL;
 276 
 277         if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os!s", &id, dom_namednodemap_class_entry, &uri, &urilen, &named, &namedlen) == FAILURE) {
 278                 return;
 279         }
 280 
 281         intern = Z_DOMOBJ_P(id);
 282 
 283         objmap = (dom_nnodemap_object *)intern->ptr;
 284 
 285         if (objmap != NULL) {
 286                 if ((objmap->nodetype == XML_NOTATION_NODE) ||
 287                         objmap->nodetype == XML_ENTITY_NODE) {
 288                         if (objmap->ht) {
 289                                 if (objmap->nodetype == XML_ENTITY_NODE) {
 290                                         itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, (xmlChar *) named);
 291                                 } else {
 292                                         notep = (xmlNotation *)xmlHashLookup(objmap->ht, (xmlChar *) named);
 293                                         if (notep) {
 294                                                 itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID);
 295                                         }
 296                                 }
 297                         }
 298                 } else {
 299                         nodep = dom_object_get_node(objmap->baseobj);
 300                         if (nodep) {
 301                                 itemnode = (xmlNodePtr)xmlHasNsProp(nodep, (xmlChar *) named, (xmlChar *) uri);
 302                         }
 303                 }
 304         }
 305 
 306         if (itemnode) {
 307                 DOM_RET_OBJ(itemnode, &ret, objmap->baseobj);
 308                 return;
 309         } else {
 310                 RETVAL_NULL();
 311         }
 312 }
 313 /* }}} end dom_namednodemap_get_named_item_ns */
 314 
 315 /* {{{ proto DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);
 316 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS
 317 Since: DOM Level 2
 318 */
 319 PHP_FUNCTION(dom_namednodemap_set_named_item_ns)
 320 {
 321  DOM_NOT_IMPLEMENTED();
 322 }
 323 /* }}} end dom_namednodemap_set_named_item_ns */
 324 
 325 /* {{{ proto DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);
 326 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS
 327 Since: DOM Level 2
 328 */
 329 PHP_FUNCTION(dom_namednodemap_remove_named_item_ns)
 330 {
 331  DOM_NOT_IMPLEMENTED();
 332 }
 333 /* }}} end dom_namednodemap_remove_named_item_ns */
 334 
 335 #endif
 336 
 337 /*
 338  * Local variables:
 339  * tab-width: 4
 340  * c-basic-offset: 4
 341  * End:
 342  * vim600: noet sw=4 ts=4 fdm=marker
 343  * vim<600: noet sw=4 ts=4
 344  */

/* [<][>][^][v][top][bottom][index][help] */