23#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
42 xmlNodePtr nodep =
NULL, oldnode =
NULL;
47 size_t name_len, value_len = 0, uri_len = 0;
49 xmlNsPtr nsptr =
NULL;
55 name_valid = xmlValidateName(BAD_CAST
name, 0);
56 if (name_valid != 0) {
65 nodep = xmlNewNode (
NULL, BAD_CAST localname);
68 xmlSetNs(nodep, nsptr);
84 localname = (
char *) xmlSplitQName2(BAD_CAST
name, (xmlChar **) &
prefix);
91 nodep = xmlNewNode(
NULL, BAD_CAST
name);
100 xmlNodeSetContentLen(nodep, BAD_CAST
value, value_len);
105 if (oldnode !=
NULL) {
106 php_libxml_node_decrement_resource((php_libxml_node_object *)intern);
108 php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (
void *)intern);
136 xmlChar *content = xmlGetNoNsProp(nodep, (
const xmlChar *)
name);
137 if (content ==
NULL) {
148static xmlAttrPtr dom_element_reflected_attribute_write(
dom_object *obj,
zval *newval,
const char *
name)
159 return xmlSetNsProp(nodep,
NULL, (
const xmlChar *)
name, (
const xmlChar *)
Z_STRVAL_P(newval));
168 return dom_element_reflected_attribute_read(obj,
retval,
"class");
173 if (dom_element_reflected_attribute_write(obj, newval,
"class")) {
185 const uint32_t PROP_INDEX = 0;
213 return dom_element_reflected_attribute_read(obj,
retval,
"id");
216static void php_set_attribute_id(xmlAttrPtr attrp,
bool is_id, php_libxml_ref_obj *document);
220 xmlAttrPtr
attr = dom_element_reflected_attribute_write(obj, newval,
"id");
243static xmlNodePtr dom_get_attribute_or_nsdecl(
dom_object *intern, xmlNodePtr elem,
const xmlChar *
name,
size_t name_len)
245 if (!php_dom_follow_spec_intern(intern)) {
247 const xmlChar *nqname = xmlSplitQName3(
name, &
len);
249 if (nqname !=
NULL) {
254 if (xmlStrEqual(ns->prefix, nqname)) {
259 return (xmlNodePtr)ns;
262 ns = xmlSearchNs(elem->doc, elem,
prefix);
267 return (xmlNodePtr)xmlHasNsProp(elem, nqname, ns->href);
270 if (xmlStrEqual(
name, BAD_CAST
"xmlns")) {
271 xmlNsPtr nsPtr = elem->nsDef;
273 if (nsPtr->prefix ==
NULL) {
274 return (xmlNodePtr)nsPtr;
281 return (xmlNodePtr) xmlHasNsProp(elem,
name,
NULL);
301 bool should_free =
false;
310 attr = dom_get_attribute_or_nsdecl(intern, nodep, BAD_CAST
name, name_len);
312 switch (
attr->type) {
317 case XML_NAMESPACE_DECL:
322 value = BAD_CAST ((xmlAttributePtr)
attr)->defaultValue;
328 if (php_dom_follow_spec_intern(intern)) {
361 if (!php_dom_follow_spec_intern(intern)) {
362 for (xmlNsPtr nsptr = nodep->nsDef; nsptr; nsptr = nsptr->next) {
363 const char *
prefix = (
const char *) nsptr->prefix;
380static xmlNodePtr dom_create_attribute(xmlNodePtr nodep,
const char *
name,
const char*
value)
382 if (xmlStrEqual(BAD_CAST
name, BAD_CAST
"xmlns")) {
383 return (xmlNodePtr) xmlNewNs(nodep, BAD_CAST
value,
NULL);
385 return (xmlNodePtr) xmlSetProp(nodep, BAD_CAST
name, BAD_CAST
value);
389static void dom_check_register_attribute_id(xmlAttrPtr
attr, php_libxml_ref_obj *document)
391 dom_mark_ids_modified(document);
408 size_t name_len, value_len;
422 name_valid = xmlValidateName(BAD_CAST
name, 0);
423 if (name_valid != 0) {
430 if (php_dom_follow_spec_intern(intern)) {
431 xmlChar *name_processed = BAD_CAST
name;
434 if (lowercase_copy !=
NULL) {
435 name_processed = BAD_CAST lowercase_copy;
444 xmlNodePtr node = xmlNewDocText(
attr->doc, BAD_CAST
value);
445 xmlAddChild((xmlNodePtr)
attr, node);
447 attr = xmlSetNsProp(nodep,
NULL, name_processed, BAD_CAST
value);
449 dom_check_register_attribute_id(
attr, intern->
document);
453 if (name_processed != BAD_CAST
name) {
454 efree(name_processed);
457 xmlNodePtr
attr = dom_get_attribute_or_nsdecl(intern, nodep, BAD_CAST
name, name_len);
459 switch (
attr->type) {
464 case XML_NAMESPACE_DECL:
475 if (
attr->type == XML_NAMESPACE_DECL) {
484typedef struct dom_deep_ns_redef_item {
485 xmlNodePtr current_node;
487} dom_deep_ns_redef_item;
490static void dom_deep_ns_redef(xmlNodePtr node, xmlNsPtr ns_to_redefine)
492 size_t worklist_capacity = 128;
493 dom_deep_ns_redef_item *worklist =
emalloc(
sizeof(dom_deep_ns_redef_item) * worklist_capacity);
494 worklist[0].current_node = node;
495 worklist[0].defined_ns =
NULL;
496 size_t worklist_size = 1;
498 while (worklist_size > 0) {
500 dom_deep_ns_redef_item *current_worklist_item = &worklist[worklist_size];
502 xmlNsPtr defined_ns = current_worklist_item->defined_ns;
504 if (current_worklist_item->current_node->ns == ns_to_redefine) {
505 if (defined_ns ==
NULL) {
506 defined_ns = xmlNewNs(current_worklist_item->current_node, ns_to_redefine->href, ns_to_redefine->prefix);
508 current_worklist_item->current_node->ns = defined_ns;
511 for (xmlAttrPtr
attr = current_worklist_item->current_node->properties;
attr;
attr =
attr->next) {
512 if (
attr->ns == ns_to_redefine) {
513 if (defined_ns ==
NULL) {
514 defined_ns = xmlNewNs(current_worklist_item->current_node, ns_to_redefine->href, ns_to_redefine->prefix);
516 attr->ns = defined_ns;
520 for (xmlNodePtr child = current_worklist_item->current_node->children; child; child = child->next) {
524 if (worklist_size == worklist_capacity) {
525 if (
UNEXPECTED(worklist_capacity >=
SIZE_MAX / 3 * 2 /
sizeof(dom_deep_ns_redef_item))) {
529 worklist_capacity = worklist_capacity * 3 / 2;
530 worklist =
erealloc(worklist,
sizeof(dom_deep_ns_redef_item) * worklist_capacity);
532 worklist[worklist_size].current_node = child;
533 worklist[worklist_size].defined_ns = defined_ns;
542static bool dom_remove_attribute(xmlNodePtr thisp, xmlNodePtr attrp)
547 switch (attrp->type) {
551 xmlUnlinkNode(attrp);
552 xmlFreeProp((xmlAttrPtr)attrp);
554 xmlUnlinkNode(attrp);
557 case XML_NAMESPACE_DECL: {
563 xmlNsPtr ns = (xmlNsPtr) attrp;
564 if (thisp->nsDef == ns) {
565 thisp->nsDef = ns->next;
566 }
else if (thisp->nsDef !=
NULL) {
567 xmlNsPtr
prev = thisp->nsDef;
568 xmlNsPtr cur =
prev->next;
571 prev->next = cur->next;
586 php_libxml_set_old_ns(thisp->doc, ns);
589 dom_deep_ns_redef(thisp, ns);
604 xmlNodePtr nodep, attrp;
615 attrp = dom_get_attribute_or_nsdecl(intern, nodep, BAD_CAST
name, name_len);
625 xmlNodePtr nodep, attrp;
636 attrp = dom_get_attribute_or_nsdecl(intern, nodep, BAD_CAST
name, name_len);
638 dom_remove_attribute(nodep, attrp);
650 xmlNodePtr nodep, attrp;
662 attrp = dom_get_attribute_or_nsdecl(intern, nodep, BAD_CAST
name, name_len);
664 if (php_dom_follow_spec_intern(intern)) {
670 if (attrp->type == XML_NAMESPACE_DECL) {
671 xmlNsPtr original = (xmlNsPtr) attrp;
686 xmlAttr *attrp, *existattrp =
NULL;
703 if (attrp->parent !=
NULL && attrp->parent != nodep) {
707 if (attrp->doc !=
NULL && attrp->doc != nodep->doc) {
711 if (!(attrp->doc ==
NULL || attrp->doc == nodep->doc)) {
718 if (use_ns && nsp !=
NULL) {
719 existattrp = xmlHasNsProp(nodep, attrp->name, nsp->href);
721 existattrp = xmlHasProp(nodep, attrp->name);
724 if (existattrp !=
NULL && existattrp->type != XML_ATTRIBUTE_DECL) {
726 ((php_libxml_node_ptr *)oldobj->
ptr)->node == (xmlNodePtr) attrp)
730 xmlUnlinkNode((xmlNodePtr) existattrp);
733 if (attrp->parent !=
NULL) {
734 xmlUnlinkNode((xmlNodePtr) attrp);
741 xmlAddChild(nodep, (xmlNodePtr) attrp);
743 dom_mark_ids_modified(intern->
document);
746 dom_check_register_attribute_id(attrp, intern->
document);
750 if (existattrp !=
NULL) {
787 if (attrp->parent != nodep) {
792 xmlUnlinkNode((xmlNodePtr) attrp);
850static const xmlChar *dom_get_attribute_ns(
dom_object *intern, xmlNodePtr elemp,
const char *uri,
size_t uri_len,
const char *
name,
bool *should_free_result)
852 bool follow_spec = php_dom_follow_spec_intern(intern);
853 if (follow_spec && uri_len == 0) {
857 xmlChar *strattr = xmlGetNsProp(elemp, BAD_CAST
name, BAD_CAST uri);
859 if (strattr !=
NULL) {
860 *should_free_result =
true;
885 size_t uri_len = 0, name_len = 0;
895 bool should_free_result =
false;
896 const xmlChar *
result = dom_get_attribute_ns(intern, elemp, uri, uri_len,
name, &should_free_result);
898 if (php_dom_follow_spec_intern(intern)) {
904 if (should_free_result) {
911static void dom_set_attribute_ns_legacy(
dom_object *intern, xmlNodePtr elemp,
char *uri,
size_t uri_len,
char *
name,
size_t name_len,
const char *
value)
918 xmlNodePtr nodep =
NULL;
922 int is_xmlns = 0, name_valid;
927 if (errorcode == 0) {
928 dom_mark_ids_modified(intern->
document);
931 nodep = (xmlNodePtr) xmlHasNsProp(elemp, BAD_CAST localname, BAD_CAST uri);
932 if (nodep !=
NULL && nodep->type != XML_ATTRIBUTE_DECL) {
936 if ((xmlStrEqual(BAD_CAST
prefix, BAD_CAST
"xmlns") ||
937 (
prefix ==
NULL && xmlStrEqual(BAD_CAST localname, BAD_CAST
"xmlns"))) &&
946 nsptr = xmlSearchNsByHref(elemp->doc, elemp, BAD_CAST uri);
947 if (nsptr && nsptr->prefix ==
NULL) {
950 tmpnsptr = nsptr->next;
952 if ((tmpnsptr->prefix !=
NULL) && (tmpnsptr->href !=
NULL) &&
953 (xmlStrEqual(tmpnsptr->href, BAD_CAST uri))) {
957 tmpnsptr = tmpnsptr->next;
959 if (tmpnsptr ==
NULL) {
971 xmlReconciliateNs(elemp->doc, elemp);
975 xmlFree(BAD_CAST nsptr->href);
977 nsptr->href = xmlStrdup(BAD_CAST
value);
981 if (errorcode == 0 && is_xmlns == 0) {
982 xmlSetNsProp(elemp, nsptr, BAD_CAST localname, BAD_CAST
value);
985 name_valid = xmlValidateName(BAD_CAST localname, 0);
986 if (name_valid != 0) {
990 attr = xmlHasProp(elemp, BAD_CAST localname);
994 xmlSetProp(elemp, BAD_CAST localname, BAD_CAST
value);
1004 if (errorcode != 0) {
1015 if (errorcode == 0) {
1018 xmlAttrPtr
attr = xmlSetNsProp(elemp, ns, localname, BAD_CAST
value);
1022 dom_check_register_attribute_id(
attr, intern->
document);
1040 size_t value_len = 0;
1053 if (php_dom_follow_spec_intern(intern)) {
1054 dom_set_attribute_ns_modern(intern, elemp, uri,
name,
value);
1061static void dom_remove_eliminated_ns_single_element(xmlNodePtr node, xmlNsPtr eliminatedNs)
1064 if (node->ns == eliminatedNs) {
1069 if (
attr->ns == eliminatedNs) {
1075static void dom_remove_eliminated_ns(xmlNodePtr node, xmlNsPtr eliminatedNs)
1077 dom_remove_eliminated_ns_single_element(node, eliminatedNs);
1079 xmlNodePtr base = node;
1080 node = node->children;
1081 while (node !=
NULL) {
1085 dom_remove_eliminated_ns_single_element(node, eliminatedNs);
1088 node = php_dom_next_in_tree_order(node, base);
1092static void dom_eliminate_ns(xmlNodePtr nodep, xmlNsPtr nsptr)
1094 if (nsptr->href !=
NULL) {
1095 xmlFree((
char *) nsptr->href);
1098 if (nsptr->prefix !=
NULL) {
1099 xmlFree((
char *) nsptr->prefix);
1100 nsptr->prefix =
NULL;
1104 xmlNsPtr current_ns = nodep->nsDef;
1105 if (current_ns == nsptr) {
1106 nodep->nsDef = nsptr->next;
1109 if (current_ns->next == nsptr) {
1110 current_ns->next = nsptr->next;
1113 current_ns = current_ns->next;
1114 }
while (current_ns !=
NULL);
1117 php_libxml_set_old_ns(nodep->doc, nsptr);
1119 dom_remove_eliminated_ns(nodep, nsptr);
1133 size_t name_len, uri_len;
1143 bool follow_spec = php_dom_follow_spec_intern(intern);
1144 if (follow_spec && uri_len == 0) {
1148 attrp = xmlHasNsProp(nodep, BAD_CAST
name, BAD_CAST uri);
1152 if (nsptr !=
NULL) {
1153 if (xmlStrEqual(BAD_CAST uri, nsptr->href)) {
1154 dom_eliminate_ns(nodep, nsptr);
1161 if (attrp && attrp->type != XML_ATTRIBUTE_DECL) {
1164 xmlUnlinkNode((xmlNodePtr) attrp);
1167 xmlUnlinkNode((xmlNodePtr) attrp);
1183 size_t uri_len, name_len;
1193 bool follow_spec = php_dom_follow_spec_intern(intern);
1194 if (follow_spec && uri_len == 0) {
1198 attrp = xmlHasNsProp(elemp, BAD_CAST
name, BAD_CAST uri);
1200 if (attrp ==
NULL) {
1201 if (!follow_spec && xmlStrEqual(BAD_CAST uri, BAD_CAST
DOM_XMLNS_NS_URI)) {
1204 if (nsptr !=
NULL) {
1242 size_t uri_len, name_len;
1276PHP_METHOD(Dom_Element, getElementsByTagNameNS)
1302 attr = dom_get_attribute_or_nsdecl(intern, nodep, BAD_CAST
name, name_len);
1320 size_t uri_len, name_len;
1330 bool should_free_result =
false;
1331 const xmlChar *
result = dom_get_attribute_ns(intern, elemp, uri, uri_len,
name, &should_free_result);
1335 if (should_free_result) {
1336 xmlFree(BAD_CAST
result);
1343static void php_set_attribute_id(xmlAttrPtr attrp,
bool is_id, php_libxml_ref_obj *document)
1348 xmlRemoveID(attrp->doc, attrp);
1352 dom_mark_ids_modified(document);
1376 attrp = xmlHasNsProp(nodep, BAD_CAST
name,
NULL);
1377 if (attrp ==
NULL || attrp->type == XML_ATTRIBUTE_DECL) {
1380 php_set_attribute_id(attrp, is_id, intern->
document);
1394 size_t uri_len, name_len;
1405 attrp = xmlHasNsProp(elemp, BAD_CAST
name, BAD_CAST uri);
1406 if (attrp ==
NULL || attrp->type == XML_ATTRIBUTE_DECL) {
1409 php_set_attribute_id(attrp, is_id, intern->
document);
1433 if (attrp->parent != nodep) {
1436 php_set_attribute_id(attrp, is_id, intern->
document);
1574#define INSERT_ADJACENT_RES_ADOPT_FAILED ((void*) -1)
1575#define INSERT_ADJACENT_RES_SYNTAX_FAILED INSERT_ADJACENT_RES_ADOPT_FAILED
1576#define INSERT_ADJACENT_RES_PRE_INSERT_FAILED ((void*) -2)
1578static xmlNodePtr dom_insert_adjacent(
const zend_string *where, xmlNodePtr thisp,
dom_object *this_intern, xmlNodePtr otherp)
1581 if (thisp->parent ==
NULL) {
1585 return INSERT_ADJACENT_RES_ADOPT_FAILED;
1588 return INSERT_ADJACENT_RES_PRE_INSERT_FAILED;
1592 return INSERT_ADJACENT_RES_ADOPT_FAILED;
1595 return INSERT_ADJACENT_RES_PRE_INSERT_FAILED;
1599 return INSERT_ADJACENT_RES_ADOPT_FAILED;
1602 return INSERT_ADJACENT_RES_PRE_INSERT_FAILED;
1605 if (thisp->parent ==
NULL) {
1609 return INSERT_ADJACENT_RES_ADOPT_FAILED;
1612 return INSERT_ADJACENT_RES_PRE_INSERT_FAILED;
1616 return INSERT_ADJACENT_RES_SYNTAX_FAILED;
1627 xmlNodePtr thisp, otherp;
1631 DOM_GET_OBJ(otherp, element_zval, xmlNodePtr, other_intern);
1633 xmlNodePtr
result = dom_insert_adjacent(where, thisp, this_intern, otherp);
1636 }
else if (
result != INSERT_ADJACENT_RES_ADOPT_FAILED &&
result != INSERT_ADJACENT_RES_PRE_INSERT_FAILED) {
1655PHP_METHOD(Dom_Element, insertAdjacentElement)
1657 zval *element_zval, *where_zv;
1686 xmlNodePtr
result = dom_insert_adjacent(where, thisp, this_intern, otherp);
1688 xmlFreeNode(otherp);
1723 char *qname, *qname_tmp =
NULL;
1724 size_t qname_length;
1725 bool force, force_is_null =
true;
1738 if (xmlValidateName(BAD_CAST qname, 0) != 0) {
1743 bool follow_spec = php_dom_follow_spec_intern(intern);
1747 && ((!follow_spec && thisp->ns ==
NULL) || (thisp->ns !=
NULL && xmlStrEqual(thisp->ns->href, BAD_CAST
DOM_XHTML_NS_URI)))) {
1749 if (qname_tmp !=
NULL) {
1755 xmlNodePtr attribute = dom_get_attribute_or_nsdecl(intern, thisp, BAD_CAST qname, qname_length);
1758 if (attribute ==
NULL) {
1760 if (force_is_null || force) {
1762 xmlSetNsProp(thisp,
NULL, BAD_CAST qname,
NULL);
1767 const xmlChar *
split = xmlSplitQName3((
const xmlChar *) qname, &
len);
1770 dom_create_attribute(thisp, qname,
"");
1773 xmlNewNs(thisp, (
const xmlChar *)
"", (
const xmlChar *) (qname +
len + 1));
1785 if (force_is_null || !force) {
1786 dom_remove_attribute(thisp, attribute);
1868 xmlChar *content = xmlNodeGetContent(nodep);
1885 php_libxml_invalidate_node_list_cache(obj->
document);
1899 for (
const xmlNode *cur = nodep; cur !=
NULL; cur = cur->parent) {
1942 if (ns !=
NULL && ns->href !=
NULL && *ns->href !=
'\0') {
1971 dom_element_get_in_scope_namespace_info(ns_mapper,
result, nodep, intern);
1974PHP_METHOD(Dom_Element, getDescendantNamespaces)
1989 dom_element_get_in_scope_namespace_info(ns_mapper,
result, nodep, intern);
1991 xmlNodePtr cur = nodep->children;
1992 while (cur !=
NULL) {
1996 dom_element_get_in_scope_namespace_info(ns_mapper,
result, cur, intern);
1999 cur = php_dom_next_in_tree_order(cur, nodep);
2025 xmlAttrPtr existing = xmlHasNsProp(nodep->parent, localname, namespace_uri &&
ZSTR_VAL(namespace_uri)[0] !=
'\0' ? BAD_CAST
ZSTR_VAL(namespace_uri) :
NULL);
2026 if (existing !=
NULL && existing != (xmlAttrPtr) nodep) {
2036 if (is_currently_html_ns != will_be_html_ns) {
2037 if (is_currently_html_ns) {
2040 "It is not possible to move an element out of the HTML namespace because the HTML namespace is tied to the HTMLElement class",
2046 "It is not possible to move an element into the HTML namespace because the HTML namespace is tied to the HTMLElement class",
2054 if (is_currently_html_ns && xmlStrEqual(nodep->name, BAD_CAST
"template") && !xmlStrEqual(localname, BAD_CAST
"template")) {
2057 "It is not possible to rename the template element because it hosts a document fragment",
2064 php_libxml_invalidate_node_list_cache(intern->
document);
2073 if (xmlDictOwns(nodep->doc->dict, nodep->name) != 1) {
2074 xmlFree((xmlChar *) nodep->name);
2076 const xmlChar *
copy = xmlDictLookup(nodep->doc->dict, localname, -1);
2080 nodep->name = localname;
rename(string $from, string $to, $context=null)
prev(array|object &$array)
copy(string $from, string $to, $context=null)
PHP_DOM_EXPORT zend_class_entry * dom_namespace_info_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_attr_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_element_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_adjacent_position_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_token_list_class_entry
zend_result dom_element_tag_name_read(dom_object *obj, zval *retval)
zend_result dom_element_id_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_element_schema_type_info_read(dom_object *obj, zval *retval)
zend_result dom_element_class_name_write(dom_object *obj, zval *newval)
zend_result dom_modern_element_substituted_node_value_read(dom_object *obj, zval *retval)
zend_result dom_element_class_list_read(dom_object *obj, zval *retval)
#define DOM_PROP_NODE(type, name, obj)
zend_result dom_element_id_write(dom_object *obj, zval *newval)
void php_dom_throw_error_with_message(dom_exception_code error_code, const char *error_message, bool strict_error)
void php_dom_throw_error(dom_exception_code error_code, bool strict_error)
@ INVALID_MODIFICATION_ERR
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
PHP_DOM_EXPORT const php_dom_ns_magic_token * php_dom_ns_is_html_magic_token
PHP_DOM_EXPORT xmlNsPtr php_dom_libxml_ns_mapper_get_ns_raw_prefix_string(php_dom_libxml_ns_mapper *mapper, const xmlChar *prefix, size_t prefix_len, zend_string *uri)
PHP_DOM_EXPORT const php_dom_ns_magic_token * php_dom_ns_is_xmlns_magic_token
PHP_DOM_EXPORT bool php_dom_ns_is_fast_ex(xmlNsPtr ns, const php_dom_ns_magic_token *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_reconcile_attribute_namespace_after_insertion(xmlAttrPtr attrp)
PHP_DOM_EXPORT php_dom_libxml_ns_mapper * php_dom_get_ns_mapper(dom_object *object)
PHP_DOM_EXPORT xmlNsPtr php_dom_libxml_ns_mapper_get_ns_raw_strings_nullsafe(php_dom_libxml_ns_mapper *mapper, const char *prefix, const char *uri)
void dom_attr_value_will_change(dom_object *obj, xmlAttrPtr attrp)
void dom_element_closest(xmlNodePtr thisp, dom_object *intern, zval *return_value, const zend_string *selectors_str)
void dom_parent_node_query_selector(xmlNodePtr thisp, dom_object *intern, zval *return_value, const zend_string *selectors_str)
xmlAttrPtr php_dom_get_attribute_node(xmlNodePtr elem, const xmlChar *name, size_t name_len)
void dom_parent_node_after(dom_object *context, zval *nodes, uint32_t nodesc)
xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName)
void dom_parent_node_replace_children(dom_object *context, zval *nodes, uint32_t nodesc)
xmlNsPtr dom_get_ns(xmlNodePtr node, char *uri, int *errorcode, char *prefix)
void dom_parent_node_query_selector_all(xmlNodePtr thisp, dom_object *intern, zval *return_value, const zend_string *selectors_str)
int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len)
bool php_dom_adopt_node(xmlNodePtr nodep, dom_object *dom_object_new_document, xmlDocPtr new_document)
void node_list_unlink(xmlNodePtr node)
xmlNsPtr dom_get_ns_resolve_prefix_conflict(xmlNodePtr tree, const char *uri)
bool dom_get_strict_error(php_libxml_ref_obj *document)
xmlNodePtr php_dom_create_fake_namespace_decl(xmlNodePtr nodep, xmlNsPtr original, zval *return_value, dom_object *parent_intern)
void dom_child_replace_with(dom_object *context, zval *nodes, uint32_t nodesc)
#define DOM_GET_OBJ(__ptr, __id, __prtype, __intern)
bool php_dom_pre_insert(php_libxml_ref_obj *document, xmlNodePtr node, xmlNodePtr parent, xmlNodePtr insertion_point)
void dom_parent_node_before(dom_object *context, zval *nodes, uint32_t nodesc)
void dom_parent_node_append(dom_object *context, zval *nodes, uint32_t nodesc)
void dom_set_document_ref_pointers_attr(xmlAttrPtr attr, php_libxml_ref_obj *document)
void dom_element_matches(xmlNodePtr thisp, dom_object *intern, zval *return_value, const zend_string *selectors_str)
int dom_validate_and_extract(const zend_string *namespace, const zend_string *qname, xmlChar **localName, xmlChar **prefix)
void dom_child_node_remove(dom_object *context)
void dom_parent_node_prepend(dom_object *context, zval *nodes, uint32_t nodesc)
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)
zend_string * dom_node_concatenated_name_helper(size_t name_len, const char *name, size_t prefix_len, const char *prefix)
void php_dom_create_iterator(zval *return_value, dom_iterator_type iterator_type, bool modern)
#define DOM_GET_THIS_INTERN(__intern)
zend_string * dom_node_get_node_name_attribute_or_element(const xmlNode *nodep, bool uppercase)
void dom_remove_all_children(xmlNodePtr nodep)
const XML_HTML_DOCUMENT_NODE
unsigned char key[REFLECTION_KEY_LEN]
#define zend_hash_str_add(...)
php_libxml_ref_obj * document
void dom_token_list_ctor(dom_token_list_object *intern, dom_object *element_obj)
#define DOM_GET_THIS_OBJ(__ptr, __id, __prtype, __intern)
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)
PHP_DOM_EXPORT bool php_dom_create_object(xmlNodePtr obj, zval *return_value, dom_object *domobj)
#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 ZEND_COLD void zend_argument_must_not_be_empty_error(uint32_t arg_num)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
#define ZEND_PARSE_PARAMETERS_END()
#define Z_PARAM_STR_OR_NULL(dest)
#define ZEND_PARSE_PARAMETERS_NONE()
#define ZVAL_STRING(z, s)
#define zend_parse_parameters_none()
#define Z_PARAM_STR(dest)
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define Z_PARAM_VARIADIC(spec, dest, dest_num)
#define Z_PARAM_OBJECT_OF_CLASS(dest, _ce)
#define RETURN_EMPTY_STRING()
#define ZVAL_EMPTY_STRING(z)
#define erealloc(ptr, size)
strncmp(string $string1, string $string2, int $length)
zend_string_release_ex(func->internal_function.function_name, 0)
#define OBJ_PROP_TO_NUM(offset)
#define OBJ_PROP_NUM(obj, num)
struct _zend_property_info zend_property_info
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
ZEND_API void ZEND_FASTCALL zend_hash_real_init_packed(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert_new(HashTable *ht, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_real_init_mixed(HashTable *ht)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY_PTR(ht, _key, _ptr)
#define ZEND_HASH_FOREACH_END()
struct _zend_string zend_string
ZEND_API zend_property_info * zend_get_property_info(const zend_class_entry *ce, zend_string *member, int silent)
ZEND_API char *ZEND_FASTCALL zend_str_tolower_dup_ex(const char *source, size_t length)
#define EXPECTED(condition)
#define ZEND_UNREACHABLE()
#define EMPTY_SWITCH_DEFAULT_CASE()
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define ZEND_SIZE_T_INT_OVFL(size)
#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)
#define Z_ISUNDEF_P(zval_p)
#define Z_ARRVAL_P(zval_p)
#define ZVAL_STR_COPY(z, s)
struct _zend_array HashTable
#define Z_STRLEN_P(zval_p)
#define ZVAL_NEW_STR(z, s)
#define ZVAL_OBJ_COPY(z, o)
ZEND_RESULT_CODE zend_result
zend_property_info * prop_info