Return to namednodemap.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / dom |
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: */