diff options
author | Rob Richards <rrichards@php.net> | 2003-06-12 20:02:05 +0000 |
---|---|---|
committer | Rob Richards <rrichards@php.net> | 2003-06-12 20:02:05 +0000 |
commit | 5b19e1ec92cc49031c069fcebdc570b5fa7a325b (patch) | |
tree | aa34c7630feb6e43ff83003af1108c8e01a2e00c /ext/dom/php_dom.c | |
parent | 48cc4a7be62173ae982e68349242966bb92a0544 (diff) | |
download | php-git-5b19e1ec92cc49031c069fcebdc570b5fa7a325b.tar.gz |
add node->isSupported()
add domimplementation->hasFeature()
add formatOutput property (extends DOM)
call xmlFreeDoc when doc is no longer referenced rather than custom code
save and savexml now format based on formatOutput property
Diffstat (limited to 'ext/dom/php_dom.c')
-rw-r--r-- | ext/dom/php_dom.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c index 6f3dfcb73e..633cf55de7 100644 --- a/ext/dom/php_dom.c +++ b/ext/dom/php_dom.c @@ -102,8 +102,13 @@ int decrement_document_reference(dom_object *object TSRMLS_DC) { object->document->refcount--; ret_refcount = object->document->refcount; if (ret_refcount == 0) { - dom_clean_nodes(object TSRMLS_CC); - node_free_resource(object->document->ptr TSRMLS_CC); + 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; + } efree(object->document); object->document = NULL; } @@ -590,7 +595,7 @@ PHP_MINFO_FUNCTION(dom) php_info_print_table_start(); php_info_print_table_row(2, "DOM/XML", "enabled"); php_info_print_table_row(2, "DOM/XML API Version", DOM_API_VERSION); - php_info_print_table_row(2, "libxml Version", xmlParserVersion); + php_info_print_table_row(2, "libxml Version", LIBXML_DOTTED_VERSION); #if defined(LIBXML_HTML_ENABLED) php_info_print_table_row(2, "HTML Support", "enabled"); #endif @@ -979,6 +984,10 @@ zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *wrapper_in, zval * object_init_ex(wrapper, ce); + /* Add object properties not needing function calls */ + if (obj->type == XML_DOCUMENT_NODE || obj->type == XML_HTML_DOCUMENT_NODE) { + add_property_bool(wrapper, "formatOutput", 0); + } intern = (dom_object *)zend_objects_get_address(wrapper TSRMLS_CC); if (obj->doc != NULL) { if (domobj != NULL) { @@ -1019,6 +1028,20 @@ int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child) } /* }}} end dom_hierarchy */ +/* {{{ dom_has_feature(char *feature, char *version) */ +int dom_has_feature(char *feature, char *version) +{ + int retval = 0; + + if (!(strcmp (version, "1.0") && strcmp (version,"2.0") && strcmp(version, ""))) { + if ((!strcasecmp(feature, "Core") && strcmp (version, "1.0")) || !strcasecmp(feature, "XML")) + retval = 1; + } + + return retval; +} +/* }}} end dom_has_feature */ + /* {{{ void dom_element_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, zval **retval TSRMLS_DC) */ void dom_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, zval **retval, dom_object *intern TSRMLS_DC) { |