php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
namednodemap.c
Go to the documentation of this file.
1/*
2 +----------------------------------------------------------------------+
3 | Copyright (c) The PHP Group |
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.01 of the PHP license, |
6 | that is bundled with this package in the file LICENSE, and is |
7 | available through the world-wide-web at the following url: |
8 | https://www.php.net/license/3_01.txt |
9 | If you did not receive a copy of the PHP license and are unable to |
10 | obtain it through the world-wide-web, please send a note to |
11 | license@php.net so we can mail you a copy immediately. |
12 +----------------------------------------------------------------------+
13 | Authors: Christian Stocker <chregu@php.net> |
14 | Rob Richards <rrichards@php.net> |
15 +----------------------------------------------------------------------+
16*/
17
18#ifdef HAVE_CONFIG_H
19#include <config.h>
20#endif
21
22#include "php.h"
23#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
24#include "php_dom.h"
25#include "zend_interfaces.h"
26
27/*
28* class DOMNamedNodeMap
29*
30* URL: https://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1780488922
31* Since:
32*/
33
35{
37 if (!objmap) {
38 return 0;
39 }
40
41 if (objmap->nodetype == XML_NOTATION_NODE || objmap->nodetype == XML_ENTITY_NODE) {
42 return objmap->ht ? xmlHashSize(objmap->ht) : 0;
43 }
44
45 int count = 0;
46 xmlNodePtr nodep = dom_object_get_node(objmap->baseobj);
47 if (nodep) {
48 xmlAttrPtr curnode = nodep->properties;
49 if (curnode) {
50 count++;
51 while (curnode->next != NULL) {
52 count++;
53 curnode = curnode->next;
54 }
55 }
56 }
57
58 return count;
59}
60
61/* {{{ length int
62readonly=yes
63URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D0FB19E
64Since:
65*/
67{
69 return SUCCESS;
70}
71
72/* }}} */
73
74xmlNodePtr php_dom_named_node_map_get_named_item(dom_nnodemap_object *objmap, const zend_string *named, bool may_transform)
75{
76 xmlNodePtr itemnode = NULL;
77 if (objmap != NULL) {
78 if ((objmap->nodetype == XML_NOTATION_NODE) ||
79 objmap->nodetype == XML_ENTITY_NODE) {
80 if (objmap->ht) {
81 if (objmap->nodetype == XML_ENTITY_NODE) {
82 itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, BAD_CAST ZSTR_VAL(named));
83 } else {
84 xmlNotationPtr notep = xmlHashLookup(objmap->ht, BAD_CAST ZSTR_VAL(named));
85 if (notep) {
86 if (may_transform) {
87 itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID);
88 } else {
89 itemnode = (xmlNodePtr) notep;
90 }
91 }
92 }
93 }
94 } else {
95 xmlNodePtr nodep = dom_object_get_node(objmap->baseobj);
96 if (nodep) {
97 if (php_dom_follow_spec_intern(objmap->baseobj)) {
98 itemnode = (xmlNodePtr) php_dom_get_attribute_node(nodep, BAD_CAST ZSTR_VAL(named), ZSTR_LEN(named));
99 } else {
100 itemnode = (xmlNodePtr) xmlHasProp(nodep, BAD_CAST ZSTR_VAL(named));
101 }
102 }
103 }
104 }
105 return itemnode;
106}
107
109{
110 xmlNodePtr itemnode = php_dom_named_node_map_get_named_item(objmap, named, true);
111 if (itemnode) {
112 DOM_RET_OBJ(itemnode, objmap->baseobj);
113 } else {
114 RETURN_NULL();
115 }
116}
117
118/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549
119Since:
120*/
121PHP_METHOD(DOMNamedNodeMap, getNamedItem)
122{
123 zend_string *named;
124
125 if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &named) == FAILURE) {
127 }
128
129 zval *id = ZEND_THIS;
130 dom_nnodemap_object *objmap = Z_DOMOBJ_P(id)->ptr;
132}
133/* }}} end dom_namednodemap_get_named_item */
134
136{
137 xmlNodePtr itemnode = NULL;
138 if (objmap != NULL) {
139 if ((objmap->nodetype == XML_NOTATION_NODE) ||
140 objmap->nodetype == XML_ENTITY_NODE) {
141 if (objmap->ht) {
142 itemnode = php_dom_libxml_hash_iter(objmap, index);
143 }
144 } else {
145 xmlNodePtr nodep = dom_object_get_node(objmap->baseobj);
146 if (nodep) {
147 xmlNodePtr curnode = (xmlNodePtr)nodep->properties;
148 zend_long count = 0;
149 while (count < index && curnode != NULL) {
150 count++;
151 curnode = (xmlNodePtr)curnode->next;
152 }
153 itemnode = curnode;
154 }
155 }
156 }
157 return itemnode;
158}
159
161{
162 xmlNodePtr itemnode = php_dom_named_node_map_get_item(objmap, index);
163 if (itemnode) {
164 DOM_RET_OBJ(itemnode, objmap->baseobj);
165 } else {
166 RETURN_NULL();
167 }
168}
169
170/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9
171Since:
172*/
174{
175 zend_long index;
177 Z_PARAM_LONG(index)
179 if (index < 0 || ZEND_LONG_INT_OVFL(index)) {
180 zend_argument_value_error(1, "must be between 0 and %d", INT_MAX);
182 }
183
184 zval *id = ZEND_THIS;
185 dom_object *intern = Z_DOMOBJ_P(id);
186 dom_nnodemap_object *objmap = intern->ptr;
188}
189/* }}} end dom_namednodemap_item */
190
191/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS
192Since: DOM Level 2
193*/
194PHP_METHOD(DOMNamedNodeMap, getNamedItemNS)
195{
196 zval *id;
197 size_t namedlen=0, urilen=0;
198 dom_object *intern;
199 xmlNodePtr itemnode = NULL;
200 char *uri, *named;
201
202 dom_nnodemap_object *objmap;
203 xmlNodePtr nodep;
204 xmlNotation *notep = NULL;
205
206 id = ZEND_THIS;
207 if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!s", &uri, &urilen, &named, &namedlen) == FAILURE) {
209 }
210
211 intern = Z_DOMOBJ_P(id);
212
213 objmap = (dom_nnodemap_object *)intern->ptr;
214
215 if (objmap != NULL) {
216 if ((objmap->nodetype == XML_NOTATION_NODE) ||
217 objmap->nodetype == XML_ENTITY_NODE) {
218 if (objmap->ht) {
219 if (objmap->nodetype == XML_ENTITY_NODE) {
220 itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, BAD_CAST named);
221 } else {
222 notep = (xmlNotation *)xmlHashLookup(objmap->ht, BAD_CAST named);
223 if (notep) {
224 itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID);
225 }
226 }
227 }
228 } else {
229 nodep = dom_object_get_node(objmap->baseobj);
230 if (nodep) {
231 itemnode = (xmlNodePtr)xmlHasNsProp(nodep, BAD_CAST named, BAD_CAST uri);
232 }
233 }
234 }
235
236 if (itemnode) {
237 DOM_RET_OBJ(itemnode, objmap->baseobj);
238 } else {
239 RETVAL_NULL();
240 }
241}
242/* }}} end dom_namednodemap_get_named_item_ns */
243
244/* {{{ */
246{
247 zval *id;
248 dom_object *intern;
249
250 id = ZEND_THIS;
253 }
254
255 intern = Z_DOMOBJ_P(id);
257}
258/* }}} end dom_namednodemap_count */
259
260PHP_METHOD(DOMNamedNodeMap, getIterator)
261{
263 return;
264 }
265
267}
268
269#endif
count(Countable|array $value, int $mode=COUNT_NORMAL)
zend_result dom_namednodemap_length_read(dom_object *obj, zval *retval)
#define NULL
Definition gdcache.h:45
#define SUCCESS
Definition hash_sha3.c:261
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
#define INT_MAX
Definition php.h:237
#define PHP_METHOD
Definition php.h:365
xmlNodePtr php_dom_named_node_map_get_named_item(dom_nnodemap_object *objmap, const zend_string *named, bool may_transform)
xmlAttrPtr php_dom_get_attribute_node(xmlNodePtr elem, const xmlChar *name, size_t name_len)
void php_dom_named_node_map_get_named_item_into_zval(dom_nnodemap_object *objmap, const zend_string *named, zval *return_value)
xmlNode * php_dom_libxml_hash_iter(dom_nnodemap_object *objmap, int index)
int php_dom_get_namednodemap_length(dom_object *obj)
xmlNodePtr create_notation(const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID)
void php_dom_named_node_map_get_item_into_zval(dom_nnodemap_object *objmap, zend_long index, zval *return_value)
xmlNodePtr php_dom_named_node_map_get_item(dom_nnodemap_object *objmap, zend_long index)
const XML_ENTITY_NODE
const XML_NOTATION_NODE
void * ptr
Definition xml_common.h:26
dom_object * baseobj
Definition php_dom.h:81
xmlHashTable * ht
Definition php_dom.h:85
PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj)
struct _dom_object dom_object
#define DOM_RET_OBJ(obj, domobject)
Definition xml_common.h:76
#define Z_DOMOBJ_P(zv)
Definition xml_common.h:36
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
Definition zend_API.c:1300
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
Definition zend_API.c:433
#define ZEND_NUM_ARGS()
Definition zend_API.h:530
#define ZEND_PARSE_PARAMETERS_END()
Definition zend_API.h:1641
#define RETURN_NULL()
Definition zend_API.h:1036
#define zend_parse_parameters_none()
Definition zend_API.h:353
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
Definition zend_API.h:1620
#define Z_PARAM_LONG(dest)
Definition zend_API.h:1896
#define RETURN_LONG(l)
Definition zend_API.h:1037
#define RETVAL_NULL()
Definition zend_API.h:1010
#define RETURN_THROWS()
Definition zend_API.h:1060
#define ZEND_THIS
Definition zend_API.h:523
struct _zval_struct zval
ZEND_API zend_result zend_create_internal_iterator_zval(zval *return_value, zval *obj)
int32_t zend_long
Definition zend_long.h:42
struct _zend_string zend_string
#define ZEND_LONG_INT_OVFL(zlong)
#define ZSTR_VAL(zstr)
Definition zend_string.h:68
#define ZSTR_LEN(zstr)
Definition zend_string.h:69
#define ZVAL_LONG(z, l)
@ FAILURE
Definition zend_types.h:61
ZEND_RESULT_CODE zend_result
Definition zend_types.h:64
zval retval
zval * return_value