Annotation of embedaddon/php/ext/dom/namednodemap.c, revision 1.1
1.1 ! misho 1: /*
! 2: +----------------------------------------------------------------------+
! 3: | PHP Version 5 |
! 4: +----------------------------------------------------------------------+
! 5: | Copyright (c) 1997-2012 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: namednodemap.c 321634 2012-01-01 13:15:04Z felipe $ */
! 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 TSRMLS_DC)
! 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: MAKE_STD_ZVAL(*retval);
! 117: ZVAL_LONG(*retval, count);
! 118: return SUCCESS;
! 119: }
! 120:
! 121: /* }}} */
! 122:
! 123: /* {{{ proto DOMNode dom_namednodemap_get_named_item(string name);
! 124: URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549
! 125: Since:
! 126: */
! 127: PHP_FUNCTION(dom_namednodemap_get_named_item)
! 128: {
! 129: zval *id, *rv = NULL;
! 130: int ret, 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() TSRMLS_CC, getThis(), "Os", &id, dom_namednodemap_class_entry, &named, &namedlen) == FAILURE) {
! 140: return;
! 141: }
! 142:
! 143: intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
! 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, named);
! 153: } else {
! 154: notep = (xmlNotation *)xmlHashLookup(objmap->ht, 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, named);
! 164: }
! 165: }
! 166: }
! 167:
! 168: if (itemnode) {
! 169: DOM_RET_OBJ(rv, 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, *rv = NULL;
! 204: 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() TSRMLS_CC, getThis(), "Ol", &id, dom_namednodemap_class_entry, &index) == FAILURE) {
! 214: return;
! 215: }
! 216: if (index >= 0) {
! 217: intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
! 218:
! 219: objmap = (dom_nnodemap_object *)intern->ptr;
! 220:
! 221: if (objmap != NULL) {
! 222: if ((objmap->nodetype == XML_NOTATION_NODE) ||
! 223: objmap->nodetype == XML_ENTITY_NODE) {
! 224: if (objmap->ht) {
! 225: if (objmap->nodetype == XML_ENTITY_NODE) {
! 226: itemnode = php_dom_libxml_hash_iter(objmap->ht, index);
! 227: } else {
! 228: itemnode = php_dom_libxml_notation_iter(objmap->ht, index);
! 229: }
! 230: }
! 231: } else {
! 232: nodep = dom_object_get_node(objmap->baseobj);
! 233: if (nodep) {
! 234: curnode = (xmlNodePtr)nodep->properties;
! 235: count = 0;
! 236: while (count < index && curnode != NULL) {
! 237: count++;
! 238: curnode = (xmlNodePtr)curnode->next;
! 239: }
! 240: itemnode = curnode;
! 241: }
! 242: }
! 243: }
! 244:
! 245: if (itemnode) {
! 246: DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj);
! 247: return;
! 248: }
! 249: }
! 250:
! 251: RETVAL_NULL();
! 252: }
! 253: /* }}} end dom_namednodemap_item */
! 254:
! 255: /* {{{ proto DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);
! 256: URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS
! 257: Since: DOM Level 2
! 258: */
! 259: PHP_FUNCTION(dom_namednodemap_get_named_item_ns)
! 260: {
! 261: zval *id, *rv = NULL;
! 262: int ret, namedlen=0, urilen=0;
! 263: dom_object *intern;
! 264: xmlNodePtr itemnode = NULL;
! 265: char *uri, *named;
! 266:
! 267: dom_nnodemap_object *objmap;
! 268: xmlNodePtr nodep;
! 269: xmlNotation *notep = NULL;
! 270:
! 271: if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!s", &id, dom_namednodemap_class_entry, &uri, &urilen, &named, &namedlen) == FAILURE) {
! 272: return;
! 273: }
! 274:
! 275: intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
! 276:
! 277: objmap = (dom_nnodemap_object *)intern->ptr;
! 278:
! 279: if (objmap != NULL) {
! 280: if ((objmap->nodetype == XML_NOTATION_NODE) ||
! 281: objmap->nodetype == XML_ENTITY_NODE) {
! 282: if (objmap->ht) {
! 283: if (objmap->nodetype == XML_ENTITY_NODE) {
! 284: itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, named);
! 285: } else {
! 286: notep = (xmlNotation *)xmlHashLookup(objmap->ht, named);
! 287: if (notep) {
! 288: itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID);
! 289: }
! 290: }
! 291: }
! 292: } else {
! 293: nodep = dom_object_get_node(objmap->baseobj);
! 294: if (nodep) {
! 295: itemnode = (xmlNodePtr)xmlHasNsProp(nodep, named, uri);
! 296: }
! 297: }
! 298: }
! 299:
! 300: if (itemnode) {
! 301: DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj);
! 302: return;
! 303: } else {
! 304: RETVAL_NULL();
! 305: }
! 306: }
! 307: /* }}} end dom_namednodemap_get_named_item_ns */
! 308:
! 309: /* {{{ proto DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);
! 310: URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS
! 311: Since: DOM Level 2
! 312: */
! 313: PHP_FUNCTION(dom_namednodemap_set_named_item_ns)
! 314: {
! 315: DOM_NOT_IMPLEMENTED();
! 316: }
! 317: /* }}} end dom_namednodemap_set_named_item_ns */
! 318:
! 319: /* {{{ proto DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);
! 320: URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS
! 321: Since: DOM Level 2
! 322: */
! 323: PHP_FUNCTION(dom_namednodemap_remove_named_item_ns)
! 324: {
! 325: DOM_NOT_IMPLEMENTED();
! 326: }
! 327: /* }}} end dom_namednodemap_remove_named_item_ns */
! 328:
! 329: #endif
! 330:
! 331: /*
! 332: * Local variables:
! 333: * tab-width: 4
! 334: * c-basic-offset: 4
! 335: * End:
! 336: * vim600: noet sw=4 ts=4 fdm=marker
! 337: * vim<600: noet sw=4 ts=4
! 338: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>