RETURN_FALSE;
}
- dom_add_to_list(node, intern TSRMLS_CC);
DOM_RET_OBJ(rv, node, &ret, intern);
}
/* }}} end dom_document_create_element */
RETURN_FALSE;
}
- dom_add_to_list(node, intern TSRMLS_CC);
DOM_RET_OBJ(rv, node, &ret, intern);
}
/* }}} end dom_document_create_document_fragment */
RETURN_FALSE;
}
- dom_add_to_list(node, intern TSRMLS_CC);
DOM_RET_OBJ(rv, node, &ret, intern);
}
/* }}} end dom_document_create_text_node */
RETURN_FALSE;
}
- dom_add_to_list(node, intern TSRMLS_CC);
DOM_RET_OBJ(rv, node, &ret, intern);
}
/* }}} end dom_document_create_comment */
RETURN_FALSE;
}
- dom_add_to_list(node, intern TSRMLS_CC);
DOM_RET_OBJ(rv, node, &ret, intern);
}
/* }}} end dom_document_create_cdatasection */
node->doc = docp;
- dom_add_to_list(node, intern TSRMLS_CC);
DOM_RET_OBJ(rv, node, &ret, intern);
}
/* }}} end dom_document_create_processing_instruction */
RETURN_FALSE;
}
- dom_add_to_list((xmlNodePtr) node, intern TSRMLS_CC);
DOM_RET_OBJ(rv, (xmlNodePtr) node, &ret, intern);
}
RETURN_FALSE;
}
- dom_add_to_list((xmlNodePtr) node, intern TSRMLS_CC);
DOM_RET_OBJ(rv, (xmlNodePtr) node, &ret, intern);
}
/* }}} end dom_document_create_entity_reference */
if (!retnodep) {
RETURN_FALSE;
}
- dom_add_to_list((xmlNodePtr) retnodep, intern TSRMLS_CC);
}
DOM_RET_OBJ(rv, (xmlNodePtr) retnodep, &ret, intern);
RETURN_FALSE;
}
- dom_add_to_list(nodep, intern TSRMLS_CC);
DOM_RET_OBJ(rv, nodep, &ret, intern);
}
/* }}} end dom_document_create_element_ns */
RETURN_FALSE;
}
- dom_add_to_list(nodep, intern TSRMLS_CC);
DOM_RET_OBJ(rv, nodep, &ret, intern);
}
/* }}} end dom_document_create_attribute_ns */
php_dom_set_object(intern, docp TSRMLS_CC);
}
+ add_property_bool(id, "formatOutput", 0);
+
}
/* }}} end dom_document_document */
xmlUnlinkNode((xmlNodePtr) attrp);
xmlFreeProp(attrp);
} else {
- dom_add_to_list((xmlNodePtr) attrp, intern TSRMLS_CC);
xmlUnlinkNode((xmlNodePtr) attrp);
}
existattrp = xmlHasProp(nodep, attrp->name);
if (existattrp != NULL) {
if ((oldobj = dom_object_get_data((xmlNodePtr) existattrp)) == NULL) {
- dom_add_to_list((xmlNodePtr) existattrp, intern TSRMLS_CC);
xmlUnlinkNode((xmlNodePtr) existattrp);
} else {
if (oldobj->ptr == attrp) {
RETURN_NULL();
}
- dom_add_to_list((xmlNodePtr) existattrp, intern TSRMLS_CC);
xmlUnlinkNode((xmlNodePtr) existattrp);
}
}
}
xmlAddChild(nodep, (xmlNodePtr) attrp);
- dom_del_from_list((xmlNodePtr) attrp, intern TSRMLS_CC);
/* Returns old property if removed otherwise NULL */
if (existattrp != NULL) {
xmlUnlinkNode((xmlNodePtr) attrp);
xmlFreeProp(attrp);
} else {
- dom_add_to_list((xmlNodePtr) attrp, intern TSRMLS_CC);
xmlUnlinkNode((xmlNodePtr) attrp);
}
xmlUnlinkNode((xmlNodePtr) attrp);
xmlFreeProp(attrp);
} else {
- dom_add_to_list((xmlNodePtr) attrp, intern TSRMLS_CC);
xmlUnlinkNode((xmlNodePtr) attrp);
}
}
if (existattrp != NULL) {
if ((oldobj = dom_object_get_data((xmlNodePtr) existattrp)) == NULL) {
- dom_add_to_list((xmlNodePtr) existattrp, intern TSRMLS_CC);
xmlUnlinkNode((xmlNodePtr) existattrp);
} else {
if (oldobj->ptr == attrp) {
RETURN_NULL();
}
- dom_add_to_list((xmlNodePtr) existattrp, intern TSRMLS_CC);
xmlUnlinkNode((xmlNodePtr) existattrp);
}
}
xmlReconciliateNs(nodep->doc, nodep);
}
- dom_del_from_list((xmlNodePtr) attrp, intern TSRMLS_CC);
-
/* Returns old property if removed otherwise NULL */
if (existattrp != NULL) {
DOM_RET_OBJ(rv, (xmlNodePtr) existattrp, &ret, intern);
if (new_child != NULL) {
child->children = NULL;
}
- dom_add_to_list(child, intern TSRMLS_CC);
DOM_RET_OBJ(rv, new_child, &ret, intern);
return;
}
RETURN_FALSE;
}
- dom_del_from_list(child, intern TSRMLS_CC);
-
DOM_RET_OBJ(rv, new_child, &ret, intern);
}
zval *rv = NULL;
if (oldchild != newchild) {
xmlNodePtr node;
- if (newchild->parent == NULL && newchild->doc != NULL) {
- dom_del_from_list(newchild, intern TSRMLS_CC);
- }
if (newchild->doc == NULL && nodep->doc != NULL) {
newchildobj->document = intern->document;
increment_document_reference(newchildobj, NULL TSRMLS_CC);
}
- if((node = xmlReplaceNode(oldchild, newchild)) != NULL) {
- dom_add_to_list(node, intern TSRMLS_CC);
- }
+ node = xmlReplaceNode(oldchild, newchild);
}
DOM_RET_OBJ(rv, oldchild, &ret, intern);
return;
if (children == child) {
zval *rv = NULL;
xmlUnlinkNode(child);
- dom_add_to_list(child, intern TSRMLS_CC);
DOM_RET_OBJ(rv, child, &ret, intern);
return;
}
if (new_child != NULL) {
child->children = NULL;
}
- dom_add_to_list(child, intern TSRMLS_CC);
DOM_RET_OBJ(rv, new_child, &ret, intern);
return;
}
new_child = xmlAddChild(nodep, child);
if (new_child == NULL) {
- dom_add_to_list(child, intern TSRMLS_CC);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't append node");
RETURN_FALSE;
}
- dom_del_from_list(child, intern TSRMLS_CC);
DOM_RET_OBJ(rv, new_child, &ret, intern);
}
/* }}} end dom_node_append_child */
if (!node) {
RETURN_FALSE;
}
- dom_add_to_list(node, intern TSRMLS_CC);
DOM_RET_OBJ(rv, node, &ret, intern);
}
object->document = emalloc(sizeof(dom_ref_obj));
object->document->ptr = docp;
object->document->refcount = 1;
- object->document->node_list = NULL;
}
return ret_refcount;
ret_refcount = object->document->refcount;
if (ret_refcount == 0) {
if (object->document->ptr != NULL) {
- dom_clean_nodes(object TSRMLS_CC);
- /* No references to Doc so can use xmlFreeDoc
- node_free_resource(object->document->ptr TSRMLS_CC); */
xmlFreeDoc((xmlDoc *) object->document->ptr);
object->document->ptr = NULL;
}
wrapper = dom_object_get_data(nodep);
if (wrapper != NULL ) {
- if (nodep->parent == NULL && nodep->doc != NULL && (xmlNodePtr) nodep->doc != nodep) {
- dom_del_from_list(nodep, wrapper TSRMLS_CC);
- }
dom_object_set_data(nodep, NULL TSRMLS_CC);
php_dom_clear_object(wrapper TSRMLS_CC);
}
}
/* }}} end dom_unregister_node */
-/* {{{ dom_del_from_list */
-void dom_del_from_list(xmlNodePtr nodep, dom_object *object TSRMLS_DC)
-{
- xmlNodePtr cur;
- node_list_pointer *cur_element, *prev;
-
- if (object != NULL && nodep != NULL) {
- if (object->document != NULL) {
- cur_element = object->document->node_list;
- prev = NULL;
- while (cur_element != NULL) {
- cur = cur_element->nodep;
- if (cur == nodep) {
- if (prev == NULL) {
- object->document->node_list = cur_element->next;
- } else {
- prev->next = cur_element->next;
- }
- efree(cur_element);
- return;
- } else {
- prev = cur_element;
- cur_element = cur_element->next;
- }
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ dom_add_to_list */
-void dom_add_to_list(xmlNodePtr nodep, dom_object *object TSRMLS_DC)
-{
- node_list_pointer *cur_element;
-
- if (object != NULL && nodep != NULL) {
- if (nodep->parent == NULL) {
- if (object->document != NULL) {
- dom_del_from_list(nodep, object TSRMLS_CC);
- cur_element = emalloc(sizeof(node_list_pointer));
- cur_element->nodep = nodep;
- cur_element->next = NULL;
- if (object->document->node_list != NULL) {
- cur_element->next = object->document->node_list;
- }
- object->document->node_list = cur_element;
- }
- }
- }
-}
-/* }}} */
-
/* {{{ dom_read_na */
static int dom_read_na(dom_object *obj, zval **retval TSRMLS_DC)
{
return SUCCESS;
}
-/* {{{ dom_clean_nodes */
-void dom_clean_nodes(dom_object *object TSRMLS_DC)
-{
- node_list_pointer *l;
-
- if (object != NULL && object->document != NULL) {
- l = object->document->node_list;
- while (l != NULL) {
- node_free_resource(l->nodep TSRMLS_CC);
- l = object->document->node_list;
- }
- }
-}
-/* }}} */
-
/* {{{ node_list_unlink */
void node_list_unlink(xmlNodePtr node TSRMLS_DC)
{
wrapper = dom_object_get_data(node);
if (wrapper != NULL ) {
- dom_add_to_list(node, wrapper TSRMLS_CC);
xmlUnlinkNode(node);
} else {
node_list_unlink(node->children TSRMLS_CC);
zend_hash_destroy(intern->std.properties);
FREE_HASHTABLE(intern->std.properties);
-
-
if (intern->ptr) {
if (((xmlNodePtr) intern->ptr)->type != XML_DOCUMENT_NODE && ((xmlNodePtr) intern->ptr)->type != XML_HTML_DOCUMENT_NODE) {
node_free_resource(intern->ptr TSRMLS_CC);
return wrapper;
}
-
object_init_ex(wrapper, ce);
/* Add object properties not needing function calls */
if (obj->type == XML_DOCUMENT_NODE || obj->type == XML_HTML_DOCUMENT_NODE) {
void php_dom_throw_error(int error_code, zval **retval TSRMLS_DC);
void node_free_resource(xmlNodePtr node TSRMLS_DC);
void node_list_unlink(xmlNodePtr node TSRMLS_DC);
-void dom_del_from_list(xmlNodePtr nodep, dom_object *intern TSRMLS_DC);
-void dom_add_to_list(xmlNodePtr nodep, dom_object *intern TSRMLS_DC);
-void dom_clean_nodes(dom_object *object TSRMLS_DC);
int increment_document_reference(dom_object *object, xmlDocPtr docp TSRMLS_DC);
int decrement_document_reference(dom_object *object TSRMLS_DC);
xmlNsPtr dom_get_ns(char *uri, char *qName, int uri_len, int qName_len, int *errorcode, char **localname);
nnode->type = XML_ELEMENT_NODE;
xmlAddNextSibling(node, nnode);
nnode->type = XML_TEXT_NODE;
- } else {
- dom_add_to_list(nnode, intern TSRMLS_CC);
}
return_value = php_dom_create_object(nnode, &ret, NULL, return_value, intern TSRMLS_CC);
/* $Id$ */
#ifndef PHP_XML_COMMON_H
-#define PHP_XML_COMMON_H
-
-typedef struct _node_list_pointer {
- xmlNodePtr nodep;
- void *next;
-} node_list_pointer;
-
-typedef struct _doc_ref_obj {
- void *ptr;
- int refcount;
-} doc_ref_obj;
+#define PHP_XML_COMMON_H
typedef struct _dom_ref_obj {
void *ptr;
int refcount;
- node_list_pointer *node_list;
} dom_ref_obj;
typedef struct _node_object {
zend_object std;
xmlNodePtr node;
- doc_ref_obj *document;
+ dom_ref_obj *document;
} node_object;
typedef struct _dom_object {