Annotation of embedaddon/php/ext/dom/namednodemap.c, revision 1.1.1.4
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
1.1.1.4 ! misho 5: | Copyright (c) 1997-2014 The PHP Group |
1.1 misho 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:
1.1.1.2 misho 20: /* $Id$ */
1.1 misho 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: {
1.1.1.2 misho 129: zval *id;
1.1 misho 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) {
1.1.1.2 misho 169: DOM_RET_OBJ(itemnode, &ret, objmap->baseobj);
1.1 misho 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: {
1.1.1.2 misho 203: zval *id;
1.1 misho 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) {
1.1.1.2 misho 246: DOM_RET_OBJ(itemnode, &ret, objmap->baseobj);
1.1 misho 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: {
1.1.1.2 misho 261: zval *id;
1.1 misho 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) {
1.1.1.2 misho 301: DOM_RET_OBJ(itemnode, &ret, objmap->baseobj);
1.1 misho 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>