24#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
87#ifdef LIBXML_XPATH_ENABLED
105#ifdef LIBXML_XPATH_ENABLED
111static HashTable dom_document_prop_handlers;
112static HashTable dom_xml_document_prop_handlers;
113static HashTable dom_abstract_base_document_prop_handlers;
114static HashTable dom_documentfragment_prop_handlers;
115static HashTable dom_modern_documentfragment_prop_handlers;
117static HashTable dom_modern_node_prop_handlers;
118static HashTable dom_entity_reference_prop_handlers;
119static HashTable dom_modern_entity_reference_prop_handlers;
120static HashTable dom_nodelist_prop_handlers;
121static HashTable dom_namednodemap_prop_handlers;
122static HashTable dom_characterdata_prop_handlers;
123static HashTable dom_modern_characterdata_prop_handlers;
125static HashTable dom_modern_attr_prop_handlers;
126static HashTable dom_element_prop_handlers;
127static HashTable dom_modern_element_prop_handlers;
128static HashTable dom_modern_element_prop_handlers;
130static HashTable dom_modern_text_prop_handlers;
131static HashTable dom_documenttype_prop_handlers;
132static HashTable dom_modern_documenttype_prop_handlers;
133static HashTable dom_notation_prop_handlers;
134static HashTable dom_modern_notation_prop_handlers;
135static HashTable dom_entity_prop_handlers;
136static HashTable dom_modern_entity_prop_handlers;
137static HashTable dom_processinginstruction_prop_handlers;
138static HashTable dom_modern_processinginstruction_prop_handlers;
139static HashTable dom_namespace_node_prop_handlers;
140static HashTable dom_token_list_prop_handlers;
141#ifdef LIBXML_XPATH_ENABLED
147static void dom_object_namespace_node_free_storage(
zend_object *
object);
148static xmlNodePtr php_dom_create_fake_namespace_decl_node_ptr(xmlNodePtr nodep, xmlNsPtr original);
153typedef struct dom_prop_handler {
154 dom_read_t read_func;
155 dom_write_t write_func;
159 switch (node->type) {
165 case XML_ELEMENT_DECL:
166 case XML_ATTRIBUTE_DECL:
167 case XML_ENTITY_DECL:
168 case XML_NAMESPACE_DECL:
172 if (node->doc ==
NULL) {
181 switch (node->type) {
195static const libxml_doc_props default_doc_props = {
196 .formatoutput =
false,
197 .validateonparse =
false,
198 .resolveexternals =
false,
199 .preservewhitespace =
true,
200 .substituteentities =
false,
210#if defined(COMPILE_DL_DOM) && defined(ZTS)
213 dom_globals->suppress_warnings =
false;
221 if (document && document->doc_props) {
222 return document->doc_props;
224 doc_props =
emalloc(
sizeof(libxml_doc_props));
225 memcpy(doc_props, &default_doc_props,
sizeof(libxml_doc_props));
227 document->doc_props = doc_props;
236 if (document && document->doc_props) {
237 return document->doc_props;
239 return &default_doc_props;
243static void dom_copy_document_ref(php_libxml_ref_obj *source_doc, php_libxml_ref_obj *dest_doc)
247 if (source_doc && dest_doc) {
252 dest->formatoutput = source->formatoutput;
253 dest->validateonparse = source->validateonparse;
254 dest->resolveexternals = source->resolveexternals;
255 dest->preservewhitespace = source->preservewhitespace;
256 dest->substituteentities = source->substituteentities;
257 dest->stricterror = source->stricterror;
258 dest->recover = source->recover;
259 if (source->classmap) {
265 dest_doc->class_type = source_doc->class_type;
266 dest_doc->handlers = source_doc->handlers;
276 if (doc_props->classmap ==
NULL) {
284 zend_hash_update_ptr(doc_props->classmap, basece->
name, ce);
295 if (doc_props->classmap) {
317 return ((php_libxml_node_ptr *)obj->
ptr)->node;
327 if (obj && obj->_private !=
NULL) {
328 return (
dom_object *) ((php_libxml_node_ptr *) obj->_private)->_private;
335static void dom_register_prop_handler(
HashTable *prop_handler,
const char *
name,
size_t name_len,
const dom_prop_handler *hnd)
338 zend_hash_add_new_ptr(prop_handler, str, (
void *) hnd);
342static void dom_overwrite_prop_handler(
HashTable *prop_handler,
const char *
name,
size_t name_len,
const dom_prop_handler *hnd)
344 zend_hash_str_update_ptr(prop_handler,
name, name_len, (
void *) hnd);
347#define DOM_REGISTER_PROP_HANDLER(prop_handler, name, prop_read_func, prop_write_func) do { \
348 static const dom_prop_handler hnd = {.read_func = prop_read_func, .write_func = prop_write_func}; \
349 dom_register_prop_handler(prop_handler, "" name, sizeof("" name) - 1, &hnd); \
352#define DOM_OVERWRITE_PROP_HANDLER(prop_handler, name, prop_read_func, prop_write_func) do { \
353 static const dom_prop_handler hnd = {.read_func = prop_read_func, .write_func = prop_write_func}; \
354 dom_overwrite_prop_handler(prop_handler, "" name, sizeof("" name) - 1, &hnd); \
359 dom_object *obj = php_dom_obj_from_obj(
object);
366 cache_slot[0] = cache_slot[1] = cache_slot[2] =
NULL;
373 const dom_prop_handler *hnd =
NULL;
383 cache_slot[1] = (
void *) hnd;
384 cache_slot[2] =
NULL;
395 dom_object *obj = php_dom_obj_from_obj(
object);
397 const dom_prop_handler *hnd = dom_get_prop_handler(obj,
name, cache_slot);
400 int ret = hnd->read_func(obj,
rv);
416 dom_object *obj = php_dom_obj_from_obj(
object);
417 const dom_prop_handler *hnd = dom_get_prop_handler(obj,
name, cache_slot);
422 return &
EG(error_zval);
428 prop = *(cache_slot + 2);
433 *(cache_slot + 2) = prop;
442 return &
EG(error_zval);
444 hnd->write_func(obj, &tmp);
457 dom_object *obj = php_dom_obj_from_obj(
object);
459 const dom_prop_handler *hnd = dom_get_prop_handler(obj,
name, cache_slot);
464 if (check_empty == 2) {
466 }
else if (hnd->read_func(obj, &tmp) ==
SUCCESS) {
467 if (check_empty == 1) {
469 }
else if (check_empty == 0) {
484 dom_object *obj = php_dom_obj_from_obj(
object);
496 dom_object *obj = php_dom_obj_from_obj(
object);
501 dom_prop_handler *entry;
509 if (!prop_handlers) {
529 zend_string_addref(object_str);
545 return dom_get_debug_info_helper(
object, is_temp);
549void *php_dom_export_node(
zval *
object)
551 php_libxml_node_object *intern;
552 xmlNodePtr nodep =
NULL;
554 intern = (php_libxml_node_object *)
Z_DOMOBJ_P(
object);
556 nodep = intern->node->node;
567 xmlNodePtr nodep =
NULL;
568 php_libxml_node_object *nodeobj;
575 nodep = php_libxml_import_node(node);
578 php_libxml_class_type old_class_type = nodeobj->document->class_type;
579 if (old_class_type != PHP_LIBXML_CLASS_UNSET && old_class_type != new_class) {
580 if (new_class == PHP_LIBXML_CLASS_MODERN) {
589 nodeobj->document->class_type = new_class;
591 if (old_class_type != PHP_LIBXML_CLASS_MODERN && new_class == PHP_LIBXML_CLASS_MODERN && nodep->doc !=
NULL) {
619#if LIBXML_VERSION < 20911
626static void dom_update_refcount_after_clone(
dom_object *original, xmlNodePtr original_node,
dom_object *clone, xmlNodePtr cloned_node)
629 if (cloned_node->doc == original_node->doc) {
632 php_libxml_increment_doc_ref((php_libxml_node_object *)clone, cloned_node->doc);
633 php_libxml_increment_node_ptr((php_libxml_node_object *)clone, cloned_node, (
void *)clone);
634 if (original->
document != clone->document) {
641 dom_object *intern = php_dom_obj_from_obj(zobject);
648 if (php_dom_follow_spec_intern(intern)) {
652 private_data = php_dom_get_private_data(intern);
657 if (cloned_node !=
NULL) {
658 dom_update_refcount_after_clone(intern, node, clone, cloned_node);
660 if (private_data !=
NULL) {
679 ZEND_ASSERT(original_node->type == XML_NAMESPACE_DECL);
680 xmlNodePtr cloned_node = php_dom_create_fake_namespace_decl_node_ptr(original_node->parent, original_node->ns);
686 dom_update_refcount_after_clone(&intern->
dom, original_node, &clone_intern->
dom, cloned_node);
733void dom_nnodemap_objects_free_storage(
zend_object *
object);
735static int dom_nodelist_has_dimension(
zend_object *
object,
zval *member,
int check_empty);
737static int dom_nodemap_has_dimension(
zend_object *
object,
zval *member,
int check_empty);
739static int dom_modern_nodemap_has_dimension(
zend_object *
object,
zval *member,
int check_empty);
741#ifdef LIBXML_XPATH_ENABLED
742void dom_xpath_objects_free_storage(
zend_object *
object);
746static void *dom_malloc(
size_t size) {
750static void *dom_realloc(
void *dst,
size_t size) {
754static void *dom_calloc(
size_t num,
size_t size) {
758static void dom_free(
void *
ptr) {
772 dom_object_handlers.
clone_obj = dom_objects_store_clone_obj;
779 dom_modern_domimplementation_object_handlers.
clone_obj =
NULL;
782 dom_nnodemap_object_handlers.
free_obj = dom_nnodemap_objects_free_storage;
783 dom_nnodemap_object_handlers.
read_dimension = dom_nodemap_read_dimension;
784 dom_nnodemap_object_handlers.
has_dimension = dom_nodemap_has_dimension;
787 dom_nodelist_object_handlers.
read_dimension = dom_nodelist_read_dimension;
788 dom_nodelist_object_handlers.
has_dimension = dom_nodelist_has_dimension;
791 dom_modern_nnodemap_object_handlers.
read_dimension = dom_modern_nodemap_read_dimension;
792 dom_modern_nnodemap_object_handlers.
has_dimension = dom_modern_nodemap_has_dimension;
804 dom_object_namespace_node_handlers.
free_obj = dom_object_namespace_node_free_storage;
805 dom_object_namespace_node_handlers.
clone_obj = dom_object_namespace_node_clone_obj;
910 zend_hash_merge(&dom_documentfragment_prop_handlers, &dom_node_prop_handlers,
NULL,
false);
921 zend_hash_merge(&dom_modern_documentfragment_prop_handlers, &dom_modern_node_prop_handlers,
NULL,
false);
942 zend_hash_merge(&dom_abstract_base_document_prop_handlers, &dom_modern_node_prop_handlers,
NULL,
false);
987 zend_hash_merge(&dom_xml_document_prop_handlers, &dom_abstract_base_document_prop_handlers,
NULL,
false);
1057 zend_hash_merge(&dom_modern_characterdata_prop_handlers, &dom_modern_node_prop_handlers,
NULL,
false);
1087 zend_hash_merge(&dom_modern_attr_prop_handlers, &dom_modern_node_prop_handlers,
NULL,
false);
1129 zend_hash_merge(&dom_modern_element_prop_handlers, &dom_modern_node_prop_handlers,
NULL,
false);
1153 zend_hash_merge(&dom_modern_text_prop_handlers, &dom_modern_characterdata_prop_handlers,
NULL,
false);
1201 zend_hash_merge(&dom_modern_documenttype_prop_handlers, &dom_modern_node_prop_handlers,
NULL,
false);
1221 zend_hash_merge(&dom_modern_notation_prop_handlers, &dom_modern_node_prop_handlers,
NULL,
false);
1246 zend_hash_merge(&dom_modern_entity_prop_handlers, &dom_modern_node_prop_handlers,
NULL,
false);
1254 zend_hash_merge(&dom_entity_reference_prop_handlers, &dom_node_prop_handlers,
NULL,
false);
1266 zend_hash_merge(&dom_modern_entity_reference_prop_handlers, &dom_modern_node_prop_handlers,
NULL,
false);
1280 zend_hash_merge(&dom_processinginstruction_prop_handlers, &dom_node_prop_handlers,
NULL,
false);
1290 zend_hash_merge(&dom_modern_processinginstruction_prop_handlers, &dom_modern_characterdata_prop_handlers,
NULL,
false);
1293#ifdef LIBXML_XPATH_ENABLED
1296 dom_xpath_object_handlers.
free_obj = dom_xpath_objects_free_storage;
1297 dom_xpath_object_handlers.
get_gc = dom_xpath_get_gc;
1300 dom_xpath_class_entry = register_class_DOMXPath();
1301 dom_xpath_class_entry->create_object = dom_xpath_objects_new;
1302 dom_xpath_class_entry->default_object_handlers = &dom_xpath_object_handlers;
1305 DOM_REGISTER_PROP_HANDLER(&dom_xpath_prop_handlers,
"document", dom_xpath_document_read,
NULL);
1306 DOM_REGISTER_PROP_HANDLER(&dom_xpath_prop_handlers,
"registerNodeNamespaces", dom_xpath_register_node_ns_read, dom_xpath_register_node_ns_write);
1307 zend_hash_add_new_ptr(&classes, dom_xpath_class_entry->name, &dom_xpath_prop_handlers);
1309 dom_modern_xpath_class_entry = register_class_Dom_XPath();
1310 dom_modern_xpath_class_entry->create_object = dom_xpath_objects_new;
1311 dom_modern_xpath_class_entry->default_object_handlers = &dom_xpath_object_handlers;
1313 zend_hash_add_new_ptr(&classes, dom_modern_xpath_class_entry->name, &dom_xpath_prop_handlers);
1326 register_php_dom_symbols(module_number);
1344#ifdef LIBXML_HTML_ENABLED
1347#ifdef LIBXML_XPATH_ENABLED
1350#ifdef LIBXML_XPTR_ENABLED
1353#ifdef LIBXML_SCHEMAS_ENABLED
1392#ifdef LIBXML_XPATH_ENABLED
1411 while (node !=
NULL) {
1415 if (wrapper !=
NULL ) {
1416 xmlUnlinkNode(node);
1422 switch (node->type) {
1423 case XML_ATTRIBUTE_DECL:
1426 case XML_ENTITY_DECL:
1444 dom_object *intern = php_dom_obj_from_obj(
object);
1448 php_libxml_node_ptr *
ptr = intern->
ptr;
1450 xmlNodePtr node =
ptr->node;
1453 php_libxml_node_decrement_resource((php_libxml_node_object *) intern);
1455 php_libxml_decrement_node_ptr((php_libxml_node_object *) intern);
1456 php_libxml_decrement_doc_ref((php_libxml_node_object *) intern);
1471 xmlDocPtr doc = basenode->document ? basenode->document->ptr :
NULL;
1473 mapptr->baseobj = basenode;
1474 mapptr->nodetype = ntype;
1477 mapptr->dict = doc->dict;
1478 xmlDictReference(doc->dict);
1484 int len = (int) local_len;
1485 if (doc !=
NULL && (tmp = xmlDictExists(doc->dict, (
const xmlChar *)local,
len)) !=
NULL) {
1486 mapptr->local = BAD_CAST tmp;
1488 mapptr->local = xmlCharStrndup(local,
len);
1489 mapptr->free_local =
true;
1491 mapptr->local_lower = BAD_CAST
estrdup(local);
1496 int len = (int) ns_len;
1497 if (doc !=
NULL && (tmp = xmlDictExists(doc->dict, (
const xmlChar *)ns,
len)) !=
NULL) {
1498 mapptr->ns = BAD_CAST tmp;
1500 mapptr->ns = xmlCharStrndup(ns,
len);
1501 mapptr->free_ns =
true;
1511 base_class = base_class->
parent;
1523 dom_objects_set_class_ex(class_type, intern);
1530 dom_object *intern = dom_objects_set_class(class_type);
1531 return &intern->
std;
1538 dom_objects_set_class_ex(class_type, &intern->
dom);
1542static void dom_object_namespace_node_free_storage(
zend_object *
object)
1551#ifdef LIBXML_XPATH_ENABLED
1572void dom_nnodemap_objects_free_storage(
zend_object *
object)
1574 dom_object *intern = php_dom_obj_from_obj(
object);
1578 if (objmap->cached_obj &&
GC_DELREF(&objmap->cached_obj->std) == 0) {
1581 if (objmap->free_local) {
1582 xmlFree(objmap->local);
1584 if (objmap->free_ns) {
1585 xmlFree(objmap->ns);
1587 if (objmap->local_lower) {
1588 efree(objmap->local_lower);
1593 xmlDictFree(objmap->dict);
1598 php_libxml_decrement_doc_ref((php_libxml_node_object *)intern);
1609 intern = dom_objects_set_class(class_type);
1627 return &intern->
std;
1635 ce = dom_get_namednodemap_ce(modern);
1641 ce = dom_get_dtd_namednodemap_ce(modern);
1644 ce = dom_get_nodelist_ce(modern);
1683 bool modern = domobj && php_dom_follow_spec_intern(domobj);
1686 switch (obj->type) {
1689 ce = dom_get_xml_document_ce(modern);
1694 ce = dom_get_html_document_ce(modern);
1700 ce = dom_get_documenttype_ce(modern);
1705 ce = dom_get_element_ce(obj, modern);
1710 ce = dom_get_attr_ce(modern);
1715 ce = dom_get_text_ce(modern);
1720 ce = dom_get_comment_ce(modern);
1725 ce = dom_get_processinginstruction_ce(modern);
1730 ce = dom_get_entityreference_ce(modern);
1733 case XML_ENTITY_DECL:
1734 case XML_ELEMENT_DECL:
1736 ce = dom_get_entity_ce(modern);
1741 ce = dom_get_cdatasection_ce(modern);
1746 ce = dom_get_documentfragment_ce(modern);
1751 ce = dom_get_notation_ce(modern);
1754 case XML_NAMESPACE_DECL:
1768 ce = dom_get_doc_classmap(domobj->
document, ce);
1780 if (obj->doc !=
NULL) {
1781 if (parent !=
NULL) {
1782 intern->
document = parent->document;
1784 php_libxml_increment_doc_ref((php_libxml_node_object *)intern, obj->doc);
1787 php_libxml_increment_node_ptr((php_libxml_node_object *)intern, obj, (
void *)intern);
1801 if (parent ==
NULL || child ==
NULL || child->doc != parent->doc) {
1812 if (nodep == child) {
1815 nodep = nodep->parent;
1842 const xmlChar *node_local = nodep->name;
1847 if (nodep->ns !=
NULL && nodep->ns->prefix !=
NULL) {
1848 const char *
prefix = (
const char *) nodep->ns->prefix;
1852 if (
strncmp((
const char *) qname,
prefix, prefix_len) != 0) {
1856 if (qname[prefix_len] !=
':') {
1860 return xmlStrEqual(qname + prefix_len + 1, node_local);
1862 return xmlStrEqual(node_local, qname);
1866static bool dom_match_qualified_name_for_tag_name_equality(
const xmlChar *local,
const xmlChar *local_lower,
const xmlNode *nodep,
bool match_qname)
1869 return xmlStrEqual(nodep->name, local);
1884 bool local_match_any = local[0] ==
'*' && local[1] ==
'\0';
1889 bool ns_match_any = ns ==
NULL || (ns[0] ==
'*' && ns[1] ==
'\0');
1891 bool match_qname = ns ==
NULL && php_dom_follow_spec_node(basep);
1893 while (*cur <= index) {
1895 if (local_match_any || dom_match_qualified_name_for_tag_name_equality(local, local_lower, nodep, match_qname)) {
1896 if (ns_match_any || (ns[0] ==
'\0' && nodep->ns ==
NULL) || (nodep->ns !=
NULL && xmlStrEqual(nodep->ns->href, ns))) {
1897 if (*cur == index) {
1906 nodep = php_dom_next_in_tree_order(nodep, basep);
1915static inline bool is_empty_node(xmlNodePtr nodep)
1917 return nodep->content ==
NULL || *nodep->content ==
'\0';
1920static inline void free_node(xmlNodePtr node)
1922 if (node->_private ==
NULL) {
1927static void dom_merge_adjacent_exclusive_text_nodes(xmlNodePtr node)
1929 xmlNodePtr nextp = node->next;
1931 xmlNodePtr newnextp = nextp->next;
1932 xmlChar *strContent = nextp->content;
1933 if (strContent !=
NULL) {
1934 xmlNodeAddContent(node, strContent);
1936 xmlUnlinkNode(nextp);
1945 xmlNodePtr child = nodep->children;
1946 while(child !=
NULL) {
1947 switch (child->type) {
1949 dom_merge_adjacent_exclusive_text_nodes(child);
1950 if (is_empty_node(child)) {
1951 xmlNodePtr nextp = child->next;
1952 xmlUnlinkNode(child);
1960 xmlAttrPtr
attr = child->properties;
1969 child = child->next;
1978 xmlNodePtr node = this->children;
1979 while (node !=
NULL) {
1983 bool is_empty = is_empty_node(node);
1987 xmlNodePtr
next = node->next;
1988 xmlUnlinkNode(node);
1998 dom_merge_adjacent_exclusive_text_nodes(node);
2008static void dom_reconcile_ns_internal(xmlDocPtr doc, xmlNodePtr nodep, xmlNodePtr search_parent)
2010 xmlNsPtr nsptr, nsdftptr, curns, prevns =
NULL;
2013 if (nodep->nsDef !=
NULL) {
2014 curns = nodep->nsDef;
2016 nsdftptr = curns->next;
2017 if (curns->href !=
NULL) {
2018 if((nsptr = xmlSearchNsByHref(doc, search_parent, curns->href)) &&
2019 (curns->prefix ==
NULL || xmlStrEqual(nsptr->prefix, curns->prefix))) {
2021 if (prevns ==
NULL) {
2022 nodep->nsDef = nsdftptr;
2024 prevns->next = nsdftptr;
2029 php_libxml_set_old_ns(doc, curns);
2046 dom_reconcile_ns_internal(doc, nodep, nodep->parent);
2047 xmlReconciliateNs(doc, nodep);
2052static void dom_reconcile_ns_list_internal(xmlDocPtr doc, xmlNodePtr nodep, xmlNodePtr
last, xmlNodePtr search_parent)
2057 dom_reconcile_ns_internal(doc, nodep, search_parent);
2058 if (nodep->children) {
2059 dom_reconcile_ns_list_internal(doc, nodep->children, nodep->last , search_parent);
2062 if (nodep ==
last) {
2065 nodep = nodep->next;
2071 dom_reconcile_ns_list_internal(doc, nodep,
last, nodep->parent);
2076 xmlReconciliateNs(doc, nodep);
2077 if (nodep ==
last) {
2080 nodep = nodep->next;
2090 if (
namespace ==
NULL) {
2095 if (xmlValidateQName(BAD_CAST
ZSTR_VAL(qname), 0) != 0) {
2123 if (*localName ==
NULL) {
2124 *localName = xmlStrdup(BAD_CAST
ZSTR_VAL(qname));
2141 if (name_len == 0) {
2145 *localname = (
char *)xmlSplitQName2(BAD_CAST qname, (xmlChar **)
prefix);
2146 if (*localname ==
NULL) {
2147 *localname = (
char *)xmlStrdup(BAD_CAST qname);
2154 if (xmlValidateQName(BAD_CAST qname, 0) != 0) {
2173 xmlDocPtr doc = tree->doc;
2183 xmlNsPtr nsptr = xmlSearchNs(doc, tree, (
const xmlChar *)
prefix);
2184 while (nsptr !=
NULL) {
2185 if (counter > 1000) {
2189 nsptr = xmlSearchNs(doc, tree, (
const xmlChar *)
prefix);
2193 return xmlNewNs(tree, (
const xmlChar *) uri, (
const xmlChar *)
prefix);
2208 xmlNsPtr nsptr = xmlNewNs(nodep, BAD_CAST uri, BAD_CAST
prefix);
2221xmlNsPtr
dom_get_ns(xmlNodePtr nodep,
char *uri,
int *errorcode,
char *
prefix) {
2250 if (localName ==
NULL || localName[0] ==
'\0') {
2252 while (cur !=
NULL) {
2253 if (cur->prefix ==
NULL && cur->href !=
NULL) {
2261 while (cur !=
NULL) {
2262 if (cur->prefix !=
NULL && xmlStrEqual(localName, cur->prefix)) {
2273static xmlNodePtr php_dom_create_fake_namespace_decl_node_ptr(xmlNodePtr nodep, xmlNsPtr original)
2276 xmlNsPtr curns = xmlNewNs(
NULL, original->href,
NULL);
2277 if (original->prefix) {
2278 curns->prefix = xmlStrdup(original->prefix);
2279 attrp = xmlNewDocNode(nodep->doc,
NULL, BAD_CAST original->prefix, original->href);
2281 attrp = xmlNewDocNode(nodep->doc,
NULL, BAD_CAST
"xmlns", original->href);
2283 attrp->type = XML_NAMESPACE_DECL;
2284 attrp->parent = nodep;
2292 xmlNodePtr attrp = php_dom_create_fake_namespace_decl_node_ptr(nodep, original);
2295 php_dom_namespace_node_obj_from_obj(
Z_OBJ_P(
return_value))->parent_intern = parent_intern;
2307 }
else if (is_numeric_string_type ==
IS_DOUBLE) {
2308 *lval = zend_dval_to_lval_cap(
dval);
2311 *lval = zval_get_long(
offset);
2326 if (dom_nodemap_or_nodelist_process_offset_as_named(
offset, &lval)) {
2336static int dom_nodelist_has_dimension(
zend_object *
object,
zval *member,
int check_empty)
2344 if (dom_nodemap_or_nodelist_process_offset_as_named(member, &
offset)) {
2354 if (nodep->children) {
2356 php_libxml_node_free_list((xmlNodePtr) nodep->children);
2357 nodep->children =
NULL;
2366 switch (nodep->type) {
2371 char *str = (
char * ) nodep->content;
2381 xmlChar *
value = php_libxml_attr_value((
const xmlAttr *) nodep, &free);
2390 char *str = (
char *) xmlNodeGetContent(nodep);
2401 if (null_on_failure) {
2418 if (dom_nodemap_or_nodelist_process_offset_as_named(
offset, &lval)) {
2434static int dom_nodemap_has_dimension(
zend_object *
object,
zval *member,
int check_empty)
2442 if (dom_nodemap_or_nodelist_process_offset_as_named(member, &
offset)) {
2479static int dom_modern_nodemap_has_dimension(
zend_object *
object,
zval *member,
int check_empty)
2484 dom_object *obj = php_dom_obj_from_obj(
object);
2507static xmlNodePtr dom_clone_container_helper(
php_dom_libxml_ns_mapper *ns_mapper, xmlNodePtr src_node, xmlDocPtr dst_doc)
2509 xmlNodePtr clone = xmlDocCopyNode(src_node, dst_doc, 0);
2512 clone->ns = src_node->ns;
2515 xmlAttrPtr last_added_attr =
NULL;
2517 if (src_node->nsDef !=
NULL) {
2518 xmlNsPtr current_ns = src_node->nsDef;
2521 }
while ((current_ns = current_ns->next) !=
NULL);
2523 last_added_attr = clone->properties;
2524 while (last_added_attr->next !=
NULL) {
2525 last_added_attr = last_added_attr->next;
2531 xmlAttrPtr new_attr = (xmlAttrPtr) xmlDocCopyNode((xmlNodePtr)
attr, dst_doc, 0);
2536 if (last_added_attr ==
NULL) {
2537 clone->properties = new_attr;
2539 new_attr->prev = last_added_attr;
2540 last_added_attr->next = new_attr;
2542 new_attr->parent = clone;
2543 last_added_attr = new_attr;
2546 new_attr->ns =
attr->ns;
2553static xmlNodePtr dom_clone_helper(
php_dom_libxml_ns_mapper *ns_mapper, xmlNodePtr src_node, xmlDocPtr dst_doc,
bool recursive)
2555 xmlNodePtr outer_clone = dom_clone_container_helper(ns_mapper, src_node, dst_doc);
2563 dst_doc = (xmlDocPtr) outer_clone;
2565 xmlDtdPtr original_subset = ((xmlDocPtr) src_node)->intSubset;
2566 if (original_subset !=
NULL) {
2567 dst_doc->intSubset = xmlCopyDtd(((xmlDocPtr) src_node)->intSubset);
2569 xmlFreeNode(outer_clone);
2572 dst_doc->intSubset->parent = dst_doc;
2573 xmlSetTreeDoc((xmlNodePtr) dst_doc->intSubset, dst_doc);
2574 dst_doc->children = dst_doc->last = (xmlNodePtr) dst_doc->intSubset;
2578 xmlNodePtr cloned_parent = outer_clone;
2579 xmlNodePtr base = src_node;
2580 src_node = src_node->children;
2581 while (src_node !=
NULL) {
2586 cloned = dom_clone_container_helper(ns_mapper, src_node, dst_doc);
2591 cloned = xmlDocCopyNode(src_node, dst_doc, 1);
2595 if (cloned_parent->children ==
NULL) {
2596 cloned_parent->children = cloned;
2598 cloned->prev = cloned_parent->last;
2599 cloned_parent->last->next = cloned;
2601 cloned->parent = cloned_parent;
2602 cloned_parent->last = cloned;
2606 cloned_parent = cloned;
2607 src_node = src_node->children;
2608 }
else if (src_node->next) {
2609 src_node = src_node->next;
2613 src_node = src_node->parent;
2614 if (src_node == base) {
2617 cloned_parent = cloned_parent->parent;
2618 }
while (src_node->next ==
NULL);
2619 src_node = src_node->next;
2632 xmlDtdPtr dtd = xmlCopyDtd((xmlDtdPtr) node);
2633 xmlSetTreeDoc((xmlNodePtr) dtd, doc);
2634 return (xmlNodePtr) dtd;
2637 if (ns_mapper !=
NULL) {
2638 xmlNodePtr clone = dom_clone_helper(ns_mapper, node, doc, recursive);
2642 if (
EXPECTED(clone !=
NULL) && clone->doc != node->doc) {
2646 for (xmlNodePtr child = clone->children; child !=
NULL; child = child->next) {
2656 int extended_recursive = recursive;
2658 extended_recursive = 2;
2660 return xmlDocCopyNode(node, doc, extended_recursive);
2666 xmlNodePtr child = node->children;
2668 while (child !=
NULL) {
2669 if (child->type ==
type) {
2673 child = child->next;
2681 xmlNodePtr
next = node->next;
2696 xmlNodePtr
prev = node->prev;
2711 xmlChar *name_processed = BAD_CAST
name;
2714 if (lowercase_copy !=
NULL) {
2715 name_processed = BAD_CAST lowercase_copy;
2727 if (name_processed !=
name) {
2728 efree(name_processed);
2737 if (
strncmp((
char *) path,
"file:/",
sizeof(
"file:/") - 1) == 0) {
2738 if (path[6] !=
'/' && path[6] !=
'\0' && path[7] !=
'/' && path[7] !=
'\0') {
2740 xmlChar *new_path = xmlStrdup(BAD_CAST
"file:///");
2744 new_path = xmlStrcat(new_path, path + 6);
2754#ifdef LIBXML_HTML_ENABLED
2755 xmlDocPtr lxml_doc = htmlNewDocNoDtD(
NULL,
NULL);
2757 lxml_doc->dict = xmlDictCreate();
2762 xmlDocPtr lxml_doc = xmlNewDoc((
const xmlChar *)
"1.0");
2765 lxml_doc->dict = xmlDictCreate();
prev(array|object &$array)
PHP_DOM_EXPORT zend_class_entry * dom_text_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_domimplementation_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_parentnode_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_namespace_info_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_node_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_attr_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_childnode_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_html_document_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_cdatasection_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_entity_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_html_element_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_documenttype_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_element_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_dtd_namednodemap_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_node_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_nodelist_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_namespace_node_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_entityreference_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_notation_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_attr_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_element_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_xml_document_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_abstract_base_document_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_comment_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_parentnode_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_notation_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_childnode_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_processinginstruction_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_documentfragment_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_processinginstruction_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_entity_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_namednodemap_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_entityreference_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_nodelist_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_characterdata_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_namednodemap_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_adjacent_position_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_token_list_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_characterdata_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_document_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_documentfragment_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_html_collection_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_domimplementation_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_cdatasection_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_domexception_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_comment_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_text_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_modern_documenttype_class_entry
zend_result dom_token_list_value_write(dom_object *obj, zval *newval)
zend_result dom_nodelist_length_read(dom_object *obj, zval *retval)
zend_result dom_token_list_value_read(dom_object *obj, zval *retval)
zend_result dom_html_document_encoding_write(dom_object *obj, zval *retval)
zend_result dom_documenttype_entities_read(dom_object *obj, zval *retval)
zend_result dom_element_tag_name_read(dom_object *obj, zval *retval)
zend_result dom_modern_document_implementation_read(dom_object *obj, zval *retval)
zend_result dom_element_id_read(dom_object *obj, zval *retval)
zend_result dom_document_strict_error_checking_write(dom_object *obj, zval *newval)
zend_result dom_entity_reference_text_content_read(dom_object *obj, zval *retval)
zend_result dom_node_first_child_read(dom_object *obj, zval *retval)
zend_result dom_text_whole_text_read(dom_object *obj, zval *retval)
zend_result dom_node_last_child_read(dom_object *obj, zval *retval)
zend_result dom_node_owner_document_read(dom_object *obj, zval *retval)
zend_result dom_element_inner_html_read(dom_object *obj, zval *retval)
zend_result dom_html_document_body_write(dom_object *obj, zval *newval)
zend_result dom_node_local_name_read(dom_object *obj, zval *retval)
zend_result dom_document_format_output_read(dom_object *obj, zval *retval)
zend_result dom_document_standalone_write(dom_object *obj, zval *newval)
zend_result dom_characterdata_length_read(dom_object *obj, zval *retval)
zend_result dom_parent_node_last_element_child_read(dom_object *obj, zval *retval)
zend_result dom_documenttype_internal_subset_read(dom_object *obj, zval *retval)
zend_result dom_document_standalone_read(dom_object *obj, zval *retval)
zend_result dom_node_text_content_write(dom_object *obj, zval *newval)
zend_result dom_document_strict_error_checking_read(dom_object *obj, zval *retval)
zend_result dom_attr_schema_type_info_read(dom_object *obj, zval *retval)
zend_result dom_document_substitue_entities_write(dom_object *obj, zval *newval)
zend_result dom_document_recover_read(dom_object *obj, zval *retval)
zend_result dom_node_attributes_read(dom_object *obj, zval *retval)
zend_result dom_processinginstruction_data_write(dom_object *obj, zval *newval)
zend_result dom_token_list_length_read(dom_object *obj, zval *retval)
zend_result dom_document_resolve_externals_read(dom_object *obj, zval *retval)
zend_result dom_document_document_element_read(dom_object *obj, zval *retval)
zend_result dom_documenttype_name_read(dom_object *obj, zval *retval)
zend_result dom_node_next_element_sibling_read(dom_object *obj, zval *retval)
zend_result dom_attr_value_read(dom_object *obj, zval *retval)
zend_result dom_node_previous_sibling_read(dom_object *obj, zval *retval)
zend_result dom_document_format_output_write(dom_object *obj, zval *newval)
zend_result dom_html_document_title_write(dom_object *obj, zval *newval)
zend_result dom_characterdata_data_read(dom_object *obj, zval *retval)
zend_result dom_document_substitue_entities_read(dom_object *obj, zval *retval)
zend_result dom_node_previous_element_sibling_read(dom_object *obj, zval *retval)
zend_result dom_attr_name_read(dom_object *obj, zval *retval)
zend_result dom_modern_element_substituted_node_value_write(dom_object *obj, zval *newval)
zend_result dom_element_class_name_read(dom_object *obj, zval *retval)
zend_result dom_document_document_uri_write(dom_object *obj, zval *newval)
zend_result dom_entity_public_id_read(dom_object *obj, zval *retval)
zend_result dom_element_schema_type_info_read(dom_object *obj, zval *retval)
zend_result dom_notation_system_id_read(dom_object *obj, zval *retval)
zend_result dom_node_parent_node_read(dom_object *obj, zval *retval)
zend_result dom_node_child_nodes_read(dom_object *obj, zval *retval)
zend_result dom_element_class_name_write(dom_object *obj, zval *newval)
zend_result dom_html_document_head_read(dom_object *obj, zval *retval)
zend_result dom_documenttype_notations_read(dom_object *obj, zval *retval)
zend_result dom_document_config_read(dom_object *obj, zval *retval)
zend_result dom_namednodemap_length_read(dom_object *obj, zval *retval)
zend_result dom_document_actual_encoding_read(dom_object *obj, zval *retval)
zend_result dom_node_parent_element_read(dom_object *obj, zval *retval)
zend_result dom_element_inner_html_write(dom_object *obj, zval *newval)
zend_result dom_modern_element_substituted_node_value_read(dom_object *obj, zval *retval)
zend_result dom_entity_version_read(dom_object *obj, zval *retval)
zend_result dom_html_document_body_read(dom_object *obj, zval *retval)
zend_result dom_node_node_value_read(dom_object *obj, zval *retval)
zend_result dom_document_document_uri_read(dom_object *obj, zval *retval)
zend_result dom_entity_reference_child_read(dom_object *obj, zval *retval)
zend_result dom_node_node_value_write(dom_object *obj, zval *newval)
zend_result dom_document_resolve_externals_write(dom_object *obj, zval *newval)
zend_result dom_attr_value_write(dom_object *obj, zval *newval)
zend_result dom_html_document_title_read(dom_object *obj, zval *retval)
zend_result dom_element_class_list_read(dom_object *obj, zval *retval)
zend_result dom_processinginstruction_data_read(dom_object *obj, zval *retval)
zend_result dom_documenttype_public_id_read(dom_object *obj, zval *retval)
zend_result dom_node_prefix_read(dom_object *obj, zval *retval)
zend_result dom_characterdata_data_write(dom_object *obj, zval *newval)
zend_result dom_document_recover_write(dom_object *obj, zval *newval)
zend_result dom_node_prefix_write(dom_object *obj, zval *newval)
zend_result dom_documenttype_system_id_read(dom_object *obj, zval *retval)
zend_result dom_node_next_sibling_read(dom_object *obj, zval *retval)
zend_result dom_entity_reference_child_nodes_read(dom_object *obj, zval *retval)
zend_result dom_document_preserve_whitespace_write(dom_object *obj, zval *newval)
zend_result dom_entity_notation_name_read(dom_object *obj, zval *retval)
zend_result dom_document_validate_on_parse_read(dom_object *obj, zval *retval)
zend_result dom_node_namespace_uri_read(dom_object *obj, zval *retval)
zend_result dom_element_id_write(dom_object *obj, zval *newval)
zend_result dom_parent_node_child_element_count(dom_object *obj, zval *retval)
zend_result dom_processinginstruction_target_read(dom_object *obj, zval *retval)
zend_result dom_node_base_uri_read(dom_object *obj, zval *retval)
zend_result dom_entity_actual_encoding_read(dom_object *obj, zval *retval)
zend_result dom_attr_owner_element_read(dom_object *obj, zval *retval)
zend_result dom_document_implementation_read(dom_object *obj, zval *retval)
zend_result dom_notation_public_id_read(dom_object *obj, zval *retval)
zend_result dom_parent_node_first_element_child_read(dom_object *obj, zval *retval)
zend_result dom_document_validate_on_parse_write(dom_object *obj, zval *newval)
zend_result dom_document_encoding_write(dom_object *obj, zval *newval)
zend_result dom_entity_encoding_read(dom_object *obj, zval *retval)
zend_result dom_node_is_connected_read(dom_object *obj, zval *retval)
zend_result dom_attr_specified_read(dom_object *obj, zval *retval)
zend_result dom_modern_node_prefix_read(dom_object *obj, zval *retval)
zend_result dom_node_text_content_read(dom_object *obj, zval *retval)
zend_result dom_document_version_write(dom_object *obj, zval *newval)
zend_result dom_node_node_type_read(dom_object *obj, zval *retval)
zend_result dom_node_node_name_read(dom_object *obj, zval *retval)
zend_result dom_document_encoding_read(dom_object *obj, zval *retval)
zend_result dom_document_doctype_read(dom_object *obj, zval *retval)
zend_result dom_document_version_read(dom_object *obj, zval *retval)
zend_result dom_document_preserve_whitespace_read(dom_object *obj, zval *retval)
zend_result dom_entity_system_id_read(dom_object *obj, zval *retval)
zval * dom_html_collection_read_dimension(zend_object *object, zval *offset, int type, zval *rv)
int dom_html_collection_has_dimension(zend_object *object, zval *member, int check_empty)
LXB_API lxb_status_t lexbor_memory_setup(lexbor_memory_malloc_f new_malloc, lexbor_memory_realloc_f new_realloc, lexbor_memory_calloc_f new_calloc, lexbor_memory_free_f new_free)
const LIBXML_DOTTED_VERSION
PHP_DOM_EXPORT const php_dom_ns_magic_token * php_dom_ns_is_html_magic_token
PHP_DOM_EXPORT bool php_dom_ns_is_fast(const xmlNode *nodep, const php_dom_ns_magic_token *magic_token)
PHP_DOM_EXPORT bool php_dom_ns_is_html_and_document_is_html(const xmlNode *nodep)
PHP_DOM_EXPORT void php_dom_libxml_reconcile_modern(php_dom_libxml_ns_mapper *ns_mapper, xmlNodePtr node)
PHP_DOM_EXPORT xmlAttrPtr php_dom_ns_compat_mark_attribute(php_dom_libxml_ns_mapper *mapper, xmlNodePtr node, xmlNsPtr ns)
zval * dom_modern_nodelist_read_dimension(zend_object *object, zval *offset, int type, zval *rv)
zend_long php_dom_get_nodelist_length(dom_object *obj)
void php_dom_nodelist_get_item_into_zval(dom_nnodemap_object *objmap, zend_long index, zval *return_value)
int dom_modern_nodelist_has_dimension(zend_object *object, zval *member, int check_empty)
php_info_print_table_start()
php_info_print_table_row(2, "PDO Driver for Firebird", "enabled")
php_info_print_table_end()
#define PHP_MSHUTDOWN_FUNCTION
#define PHP_MINIT_FUNCTION
#define PHP_MINFO_FUNCTION
#define PHP_GINIT_FUNCTION
#define PHP_MODULE_GLOBALS
xmlNodePtr php_dom_named_node_map_get_named_item(dom_nnodemap_object *objmap, const zend_string *named, bool may_transform)
void php_dom_normalize_modern(xmlNodePtr nodep)
dom_object * php_dom_instantiate_object_helper(zval *return_value, zend_class_entry *ce, xmlNodePtr obj, dom_object *parent)
xmlAttrPtr php_dom_get_attribute_node(xmlNodePtr elem, const xmlChar *name, size_t name_len)
zend_object_iterator * php_dom_get_iterator(zend_class_entry *ce, zval *object, int by_ref)
void php_dom_create_implementation(zval *retval, bool modern)
xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName)
bool dom_node_children_valid(const xmlNode *node)
xmlNsPtr dom_get_ns(xmlNodePtr node, char *uri, int *errorcode, char *prefix)
xmlDocPtr php_dom_create_html_doc(void)
int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child)
void php_dom_named_node_map_get_named_item_into_zval(dom_nnodemap_object *objmap, const zend_string *named, zval *return_value)
bool dom_has_feature(zend_string *feature, zend_string *version)
zend_object * dom_objects_new(zend_class_entry *class_type)
void dom_reconcile_ns(xmlDocPtr doc, xmlNodePtr nodep)
int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len)
void dom_document_convert_to_modern(php_libxml_ref_obj *document, xmlDocPtr lxml_doc)
xmlNodePtr dom_clone_node(php_dom_libxml_ns_mapper *ns_mapper, xmlNodePtr node, xmlDocPtr doc, bool recursive)
void node_list_unlink(xmlNodePtr node)
bool dom_match_qualified_name_according_to_spec(const xmlChar *qname, const xmlNode *nodep)
int php_dom_get_namednodemap_length(dom_object *obj)
xmlNsPtr dom_get_ns_resolve_prefix_conflict(xmlNodePtr tree, const char *uri)
bool dom_get_strict_error(php_libxml_ref_obj *document)
xmlNsPtr dom_get_ns_unchecked(xmlNodePtr nodep, char *uri, char *prefix)
xmlNodePtr php_dom_create_fake_namespace_decl(xmlNodePtr nodep, xmlNsPtr original, zval *return_value, dom_object *parent_intern)
xmlNode * dom_get_elements_by_tag_name_ns_raw(xmlNodePtr basep, xmlNodePtr nodep, xmlChar *ns, xmlChar *local, xmlChar *local_lower, zend_long *cur, zend_long index)
void php_dom_update_document_after_clone(dom_object *original, xmlNodePtr original_node, dom_object *clone, xmlNodePtr cloned_node)
void dom_objects_free_storage(zend_object *object)
bool php_dom_create_nullable_object(xmlNodePtr obj, zval *return_value, dom_object *domobj)
void php_dom_normalize_legacy(xmlNodePtr nodep)
bool php_dom_has_sibling_following_node(xmlNodePtr node, xmlElementType type)
void php_dom_get_content_into_zval(const xmlNode *nodep, zval *target, bool default_is_null)
int dom_validate_and_extract(const zend_string *namespace, const zend_string *qname, xmlChar **localName, xmlChar **prefix)
dom_doc_propsptr dom_get_doc_props(php_libxml_ref_obj *document)
bool php_dom_has_sibling_preceding_node(xmlNodePtr node, xmlElementType type)
void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xmlHashTablePtr ht, const char *local, size_t local_len, const char *ns, size_t ns_len)
void php_dom_named_node_map_get_item_into_zval(dom_nnodemap_object *objmap, zend_long index, zval *return_value)
bool php_dom_has_child_of_type(xmlNodePtr node, xmlElementType type)
void dom_set_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece, zend_class_entry *ce)
void php_dom_create_iterator(zval *return_value, dom_iterator_type iterator_type, bool modern)
libxml_doc_props const * dom_get_doc_props_read_only(const php_libxml_ref_obj *document)
int dom_node_is_read_only(const xmlNode *node)
void dom_reconcile_ns_list(xmlDocPtr doc, xmlNodePtr nodep, xmlNodePtr last)
zend_object * dom_nnodemap_objects_new(zend_class_entry *class_type)
zend_module_entry dom_module_entry
xmlChar * php_dom_libxml_fix_file_path(xmlChar *path)
void dom_remove_all_children(xmlNodePtr nodep)
const XML_DOCUMENT_TYPE_NODE
dom_import_simplexml(object $node)
const XML_HTML_DOCUMENT_NODE
const XML_CDATA_SECTION_NODE
const XML_DOCUMENT_FRAG_NODE
const XML_ENTITY_REF_NODE
php_dom_private_data * php_dom_private_data_create(void)
php_dom_libxml_ns_mapper * php_dom_ns_mapper_from_private(php_dom_private_data *private_data)
php_libxml_private_data_header * php_dom_libxml_private_data_header(php_dom_private_data *private_data)
php_libxml_ref_obj * document
struct _zend_module_entry * module
union _zend_class_entry::@126215362204241324314155352336150042254204116267 info
struct _zend_class_entry::@126215362204241324314155352336150042254204116267::@031207115026352130035014265255253014334154061307 internal
zend_class_entry * parent
zend_object_write_property_t write_property
zend_object_unset_property_t unset_property
zend_object_get_property_ptr_ptr_t get_property_ptr_ptr
zend_object_free_obj_t free_obj
zend_object_get_debug_info_t get_debug_info
zend_object_get_gc_t get_gc
zend_object_has_dimension_t has_dimension
zend_object_read_property_t read_property
zend_object_has_property_t has_property
zend_object_read_dimension_t read_dimension
zend_object_clone_obj_t clone_obj
zend_long cached_obj_index
php_libxml_cache_tag cache_tag
dom_object * parent_intern
php_dom_xpath_callbacks xpath_callbacks
zend_object_iterator * dom_token_list_get_iterator(zend_class_entry *ce, zval *object, int by_ref)
void dom_token_list_free_obj(zend_object *object)
int dom_token_list_has_dimension(zend_object *object, zval *offset, int check_empty)
zval * dom_token_list_read_dimension(zend_object *object, zval *offset, int type, zval *rv)
PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj)
struct _dom_object dom_object
#define DOM_RET_OBJ(obj, domobject)
PHP_DOM_EXPORT dom_object * php_dom_object_get_data(xmlNodePtr obj)
libxml_doc_props * dom_doc_propsptr
PHP_DOM_EXPORT bool php_dom_create_object(xmlNodePtr obj, zval *return_value, dom_object *domobj)
PHP_DOM_EXPORT void php_dom_xpath_callbacks_ctor(php_dom_xpath_callbacks *registry)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_value_error(const char *format,...)
ZEND_API ZEND_COLD void zend_illegal_container_offset(const zend_string *container, const zval *offset, int type)
#define ZEND_TSRMLS_CACHE_UPDATE()
#define INTERNAL_FUNCTION_PARAMETERS
#define INTERNAL_FUNCTION_PARAM_PASSTHRU
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format,...)
#define ZEND_DECLARE_MODULE_GLOBALS(module_name)
#define ZEND_GET_MODULE(name)
#define RETVAL_STRING_FAST(s)
#define RETURN_EMPTY_STRING()
#define ecalloc(nmemb, size)
#define erealloc(ptr, size)
#define ALLOC_HASHTABLE(ht)
strncmp(string $string1, string $string2, int $length)
strcmp(string $string1, string $string2)
zend_string_release_ex(func->internal_function.function_name, 0)
struct _zend_property_info zend_property_info
#define ZEND_CALL_USES_STRICT_TYPES(call)
#define ZEND_INTERNAL_CLASS
ZEND_API zend_class_entry * zend_ce_exception
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_readonly_property_modification_error_ex(const char *class_name, const char *prop_name)
ZEND_API bool zend_never_inline zend_verify_property_type(const zend_property_info *info, zval *property, bool strict)
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
ZEND_API void ZEND_FASTCALL zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, bool overwrite)
ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor)
ZEND_API HashTable *ZEND_FASTCALL zend_array_dup(HashTable *source)
ZEND_API zval *ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zend_result ZEND_FASTCALL zend_hash_del(HashTable *ht, zend_string *key)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HANDLE_NUMERIC(key, idx)
#define ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(ht, _key, _ptr)
#define ZEND_HASH_FOREACH_END()
ZEND_API zend_class_entry * zend_ce_countable
ZEND_API zend_class_entry * zend_ce_aggregate
struct _zend_string zend_string
#define ZEND_MOD_CONFLICTS(name)
struct _zend_module_dep zend_module_dep
struct _zend_module_entry zend_module_entry
#define ZEND_MOD_REQUIRED(name)
#define STANDARD_MODULE_PROPERTIES_EX
#define STANDARD_MODULE_HEADER_EX
ZEND_API zval * zend_std_get_property_ptr_ptr(zend_object *zobj, zend_string *name, int type, void **cache_slot)
ZEND_API HashTable * zend_std_get_properties(zend_object *zobj)
ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has_set_exists, void **cache_slot)
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API zval * zend_std_write_property(zend_object *zobj, zend_string *name, zval *value, void **cache_slot)
ZEND_API zend_property_info * zend_get_property_info(const zend_class_entry *ce, zend_string *member, int silent)
ZEND_API void zend_std_unset_property(zend_object *zobj, zend_string *name, void **cache_slot)
ZEND_API zval * zend_std_read_property(zend_object *zobj, zend_string *name, int type, void **cache_slot, zval *rv)
ZEND_API void ZEND_FASTCALL zend_objects_clone_members(zend_object *new_object, zend_object *old_object)
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object)
ZEND_API char *ZEND_FASTCALL zend_str_tolower_dup_ex(const char *source, size_t length)
ZEND_API bool ZEND_FASTCALL zend_is_true(const zval *op)
ZEND_API void ZEND_FASTCALL zend_str_tolower(char *str, size_t length)
#define ZEND_IGNORE_VALUE(x)
#define EXPECTED(condition)
#define zend_always_inline
#define XtOffsetOf(s_type, field)
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define ZEND_LONG_INT_OVFL(zlong)
ZEND_API zend_string_init_interned_func_t zend_string_init_interned
ZEND_API zend_string * zend_empty_string
#define ZSTR_INIT_LITERAL(s, persistent)
#define zend_string_equals_literal(str, literal)
#define zend_string_equals_literal_ci(str, c)
#define Z_STRVAL_P(zval_p)
struct _zend_array HashTable
#define Z_OBJ_HT_P(zval_p)
#define Z_STRLEN_P(zval_p)
#define ZEND_TYPE_IS_SET(t)
#define ZVAL_NEW_STR(z, s)
#define ZVAL_OBJ_COPY(z, o)
ZEND_RESULT_CODE zend_result
struct _zend_object_handlers zend_object_handlers
ZEND_API void zval_ptr_dtor(zval *zval_ptr)