mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Use common helper macro for getting the node in property handlers
This commit is contained in:
parent
649394d357
commit
539d8d9259
13 changed files with 123 additions and 458 deletions
|
@ -24,6 +24,7 @@
|
|||
#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
|
||||
|
||||
#include "php_dom.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
/*
|
||||
* class DOMAttr extends DOMNode
|
||||
|
@ -77,12 +78,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_attr_name_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj);
|
||||
|
||||
if (attrp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlAttrPtr, attrp, obj);
|
||||
|
||||
if (php_dom_follow_spec_intern(obj)) {
|
||||
zend_string *str = dom_node_get_node_name_attribute_or_element((xmlNodePtr) attrp, false);
|
||||
|
@ -117,14 +113,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_attr_value_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj);
|
||||
DOM_PROP_NODE(xmlAttrPtr, attrp, obj);
|
||||
xmlChar *content;
|
||||
|
||||
if (attrp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
/* Can't avoid a content copy because it's an attribute node */
|
||||
if ((content = xmlNodeGetContent((xmlNodePtr) attrp)) != NULL) {
|
||||
ZVAL_STRING(retval, (char *) content);
|
||||
|
@ -139,12 +130,7 @@ zend_result dom_attr_value_read(dom_object *obj, zval *retval)
|
|||
|
||||
zend_result dom_attr_value_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj);
|
||||
|
||||
if (attrp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlAttrPtr, attrp, obj);
|
||||
|
||||
/* Typed property, this is already a string */
|
||||
ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING);
|
||||
|
@ -171,16 +157,9 @@ Since: DOM Level 2
|
|||
*/
|
||||
zend_result dom_attr_owner_element_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNodePtr nodep, nodeparent;
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
nodeparent = nodep->parent;
|
||||
xmlNodePtr nodeparent = nodep->parent;
|
||||
if (!nodeparent) {
|
||||
ZVAL_NULL(retval);
|
||||
return SUCCESS;
|
||||
|
@ -188,7 +167,6 @@ zend_result dom_attr_owner_element_read(dom_object *obj, zval *retval)
|
|||
|
||||
php_dom_create_object(nodeparent, retval, obj);
|
||||
return SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "php.h"
|
||||
#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
|
||||
#include "php_dom.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
/*
|
||||
* class DOMCharacterData extends DOMNode
|
||||
|
@ -55,26 +56,14 @@ Since:
|
|||
*/
|
||||
zend_result dom_characterdata_data_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNodePtr nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
php_dom_get_content_into_zval(nodep, retval, false);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
zend_result dom_characterdata_data_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
/* Typed property, this is already a string */
|
||||
ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING);
|
||||
|
@ -94,14 +83,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_characterdata_length_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNodePtr nodep = dom_object_get_node(obj);
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
long length = 0;
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (nodep->content) {
|
||||
length = xmlUTF8Strlen(nodep->content);
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "namespace_compat.h"
|
||||
#include "xml_serializer.h"
|
||||
#include "internal_helpers.h"
|
||||
#include "dom_properties.h"
|
||||
#include <libxml/SAX.h>
|
||||
#ifdef LIBXML_SCHEMAS_ENABLED
|
||||
#include <libxml/relaxng.h>
|
||||
|
@ -45,15 +46,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_document_doctype_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
xmlDtdPtr dtdptr;
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
dtdptr = xmlGetIntSubset(docp);
|
||||
xmlDtdPtr dtdptr = xmlGetIntSubset(docp);
|
||||
if (!dtdptr) {
|
||||
ZVAL_NULL(retval);
|
||||
return SUCCESS;
|
||||
|
@ -84,15 +79,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_document_document_element_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
xmlNode *root;
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
root = xmlDocGetRootElement(docp);
|
||||
xmlNodePtr root = xmlDocGetRootElement(docp);
|
||||
if (!root) {
|
||||
ZVAL_NULL(retval);
|
||||
return SUCCESS;
|
||||
|
@ -110,15 +99,9 @@ Since: DOM Level 3
|
|||
*/
|
||||
zend_result dom_document_encoding_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
char *encoding;
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
encoding = (char *) docp->encoding;
|
||||
const char *encoding = (const char *) docp->encoding;
|
||||
|
||||
if (encoding != NULL) {
|
||||
ZVAL_STRING(retval, encoding);
|
||||
|
@ -131,13 +114,7 @@ zend_result dom_document_encoding_read(dom_object *obj, zval *retval)
|
|||
|
||||
zend_result dom_document_encoding_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
xmlCharEncodingHandlerPtr handler;
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
/* Typed property, can only be IS_STRING or IS_NULL. */
|
||||
ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING || Z_TYPE_P(newval) == IS_NULL);
|
||||
|
@ -146,9 +123,9 @@ zend_result dom_document_encoding_write(dom_object *obj, zval *newval)
|
|||
goto invalid_encoding;
|
||||
}
|
||||
|
||||
zend_string *str = Z_STR_P(newval);
|
||||
const zend_string *str = Z_STR_P(newval);
|
||||
|
||||
handler = xmlFindCharEncodingHandler(ZSTR_VAL(str));
|
||||
xmlCharEncodingHandlerPtr handler = xmlFindCharEncodingHandler(ZSTR_VAL(str));
|
||||
|
||||
if (handler != NULL) {
|
||||
xmlCharEncCloseFunc(handler);
|
||||
|
@ -176,30 +153,16 @@ Since: DOM Level 3
|
|||
*/
|
||||
zend_result dom_document_standalone_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDoc *docp;
|
||||
|
||||
docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
ZVAL_BOOL(retval, docp->standalone > 0);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
zend_result dom_document_standalone_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
zend_long standalone;
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
standalone = zval_get_long(newval);
|
||||
zend_long standalone = zval_get_long(newval);
|
||||
docp->standalone = ZEND_NORMALIZE_BOOL(standalone);
|
||||
|
||||
return SUCCESS;
|
||||
|
@ -214,15 +177,9 @@ Since: DOM Level 3
|
|||
*/
|
||||
zend_result dom_document_version_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
char *version;
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
version = (char *) docp->version;
|
||||
const char *version = (const char *) docp->version;
|
||||
|
||||
if (version != NULL) {
|
||||
ZVAL_STRING(retval, version);
|
||||
|
@ -235,15 +192,9 @@ zend_result dom_document_version_read(dom_object *obj, zval *retval)
|
|||
|
||||
zend_result dom_document_version_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
zend_string *str;
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
str = zval_try_get_string(newval);
|
||||
zend_string *str = zval_try_get_string(newval);
|
||||
if (UNEXPECTED(!str)) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
@ -425,15 +376,9 @@ Since: DOM Level 3
|
|||
*/
|
||||
zend_result dom_document_document_uri_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
char *url;
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
url = (char *) docp->URL;
|
||||
const char *url = (const char *) docp->URL;
|
||||
if (url != NULL) {
|
||||
ZVAL_STRING(retval, url);
|
||||
} else {
|
||||
|
@ -449,15 +394,9 @@ zend_result dom_document_document_uri_read(dom_object *obj, zval *retval)
|
|||
|
||||
zend_result dom_document_document_uri_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
zend_string *str;
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
str = zval_try_get_string(newval);
|
||||
zend_string *str = zval_try_get_string(newval);
|
||||
if (UNEXPECTED(!str)) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "php.h"
|
||||
#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
|
||||
#include "php_dom.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
/* {{{ name string
|
||||
readonly=yes
|
||||
|
@ -30,15 +31,8 @@ Since:
|
|||
*/
|
||||
zend_result dom_documenttype_name_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
|
||||
|
||||
if (dtdptr == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
|
||||
ZVAL_STRING(retval, dtdptr->name ? (char *) (dtdptr->name) : "");
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -51,20 +45,13 @@ Since:
|
|||
*/
|
||||
zend_result dom_documenttype_entities_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj);
|
||||
xmlHashTable *entityht;
|
||||
dom_object *intern;
|
||||
|
||||
if (doctypep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
|
||||
|
||||
php_dom_create_iterator(retval, DOM_DTD_NAMEDNODEMAP, php_dom_follow_spec_intern(obj));
|
||||
|
||||
entityht = (xmlHashTable *) doctypep->entities;
|
||||
xmlHashTable *entityht = (xmlHashTable *) dtdptr->entities;
|
||||
|
||||
intern = Z_DOMOBJ_P(retval);
|
||||
dom_object *intern = Z_DOMOBJ_P(retval);
|
||||
dom_namednode_iter(obj, XML_ENTITY_NODE, intern, entityht, NULL, 0, NULL, 0);
|
||||
|
||||
return SUCCESS;
|
||||
|
@ -79,20 +66,13 @@ Since:
|
|||
*/
|
||||
zend_result dom_documenttype_notations_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj);
|
||||
xmlHashTable *notationht;
|
||||
dom_object *intern;
|
||||
|
||||
if (doctypep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
|
||||
|
||||
php_dom_create_iterator(retval, DOM_DTD_NAMEDNODEMAP, php_dom_follow_spec_intern(obj));
|
||||
|
||||
notationht = (xmlHashTable *) doctypep->notations;
|
||||
xmlHashTable *notationht = (xmlHashTable *) dtdptr->notations;
|
||||
|
||||
intern = Z_DOMOBJ_P(retval);
|
||||
dom_object *intern = Z_DOMOBJ_P(retval);
|
||||
dom_namednode_iter(obj, XML_NOTATION_NODE, intern, notationht, NULL, 0, NULL, 0);
|
||||
|
||||
return SUCCESS;
|
||||
|
@ -107,20 +87,15 @@ Since: DOM Level 2
|
|||
*/
|
||||
zend_result dom_documenttype_public_id_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
|
||||
|
||||
if (dtdptr == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
|
||||
|
||||
if (dtdptr->ExternalID) {
|
||||
ZVAL_STRING(retval, (char *) (dtdptr->ExternalID));
|
||||
} else {
|
||||
ZVAL_EMPTY_STRING(retval);
|
||||
}
|
||||
return SUCCESS;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
@ -132,18 +107,14 @@ Since: DOM Level 2
|
|||
*/
|
||||
zend_result dom_documenttype_system_id_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
|
||||
|
||||
if (dtdptr == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
|
||||
|
||||
if (dtdptr->SystemID) {
|
||||
ZVAL_STRING(retval, (char *) (dtdptr->SystemID));
|
||||
} else {
|
||||
ZVAL_EMPTY_STRING(retval);
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -156,14 +127,9 @@ Since: DOM Level 2
|
|||
*/
|
||||
zend_result dom_documenttype_internal_subset_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
|
||||
DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
|
||||
|
||||
xmlDtdPtr intsubset;
|
||||
|
||||
if (dtdptr == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (dtdptr->doc != NULL && ((intsubset = xmlGetIntSubset(dtdptr->doc)) != NULL)) {
|
||||
smart_str ret_buf = {0};
|
||||
xmlNodePtr cur = intsubset->children;
|
||||
|
@ -192,7 +158,6 @@ zend_result dom_documenttype_internal_subset_read(dom_object *obj, zval *retval)
|
|||
ZVAL_NULL(retval);
|
||||
|
||||
return SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
|
|
@ -145,4 +145,11 @@ zend_result dom_xpath_register_node_ns_read(dom_object *obj, zval *retval);
|
|||
zend_result dom_xpath_register_node_ns_write(dom_object *obj, zval *newval);
|
||||
#endif
|
||||
|
||||
#define DOM_PROP_NODE(type, name, obj) \
|
||||
type name = (type) dom_object_get_node(obj); \
|
||||
if (UNEXPECTED(name == NULL)) { \
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true); \
|
||||
return FAILURE; \
|
||||
}
|
||||
|
||||
#endif /* DOM_PROPERTIES_H */
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "php_dom.h"
|
||||
#include "namespace_compat.h"
|
||||
#include "internal_helpers.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
/*
|
||||
* class DOMElement extends DOMNode
|
||||
|
@ -113,12 +114,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_element_tag_name_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNodePtr nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
bool uppercase = php_dom_follow_spec_intern(obj) && php_dom_ns_is_html_and_document_is_html(nodep);
|
||||
|
||||
|
@ -132,12 +128,7 @@ zend_result dom_element_tag_name_read(dom_object *obj, zval *retval)
|
|||
|
||||
static zend_result dom_element_reflected_attribute_read(dom_object *obj, zval *retval, const char *name)
|
||||
{
|
||||
xmlNodePtr nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
xmlChar *content = xmlGetNoNsProp(nodep, (const xmlChar *) name);
|
||||
if (content == NULL) {
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "php.h"
|
||||
#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
|
||||
#include "php_dom.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
|
||||
/*
|
||||
|
@ -38,12 +39,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_entity_public_id_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
|
||||
|
||||
if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY || !nodep->ExternalID) {
|
||||
ZVAL_NULL(retval);
|
||||
|
@ -63,12 +59,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_entity_system_id_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
|
||||
|
||||
if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
|
||||
ZVAL_NULL(retval);
|
||||
|
@ -88,12 +79,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_entity_notation_name_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
|
||||
|
||||
if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
|
||||
ZVAL_NULL(retval);
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "html5_parser.h"
|
||||
#include "html5_serializer.h"
|
||||
#include "namespace_compat.h"
|
||||
#include "dom_properties.h"
|
||||
#include <Zend/zend_smart_string.h>
|
||||
#include <lexbor/html/encoding.h>
|
||||
#include <lexbor/encoding/encoding.h>
|
||||
|
@ -1313,11 +1314,7 @@ PHP_METHOD(DOM_HTMLDocument, saveHTML)
|
|||
|
||||
zend_result dom_html_document_encoding_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
|
||||
if (docp == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlDocPtr, docp, obj);
|
||||
|
||||
/* Typed property, can only be IS_STRING or IS_NULL. */
|
||||
ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING || Z_TYPE_P(newval) == IS_NULL);
|
||||
|
|
216
ext/dom/node.c
216
ext/dom/node.c
|
@ -24,6 +24,7 @@
|
|||
#include "php_dom.h"
|
||||
#include "namespace_compat.h"
|
||||
#include "internal_helpers.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
/*
|
||||
* class DOMNode
|
||||
|
@ -77,12 +78,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_node_name_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
bool uppercase = false;
|
||||
|
||||
|
@ -143,12 +139,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_node_value_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
/* Access to Element node is implemented as a convenience method */
|
||||
switch (nodep->type) {
|
||||
|
@ -186,15 +177,9 @@ zend_result dom_node_node_value_read(dom_object *obj, zval *retval)
|
|||
|
||||
zend_result dom_node_node_value_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
zend_string *str;
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
str = zval_try_get_string(newval);
|
||||
zend_string *str = zval_try_get_string(newval);
|
||||
if (UNEXPECTED(!str)) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
@ -236,14 +221,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_node_type_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep;
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
/* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */
|
||||
if (nodep->type == XML_DTD_NODE) {
|
||||
|
@ -259,12 +237,7 @@ zend_result dom_node_node_type_read(dom_object *obj, zval *retval)
|
|||
|
||||
static zend_result dom_node_parent_get(dom_object *obj, zval *retval, bool only_element)
|
||||
{
|
||||
xmlNodePtr nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
xmlNodePtr nodeparent = nodep->parent;
|
||||
if (!nodeparent || (only_element && nodeparent->type != XML_ELEMENT_NODE)) {
|
||||
|
@ -307,16 +280,10 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_child_nodes_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
dom_object *intern;
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
php_dom_create_iterator(retval, DOM_NODELIST, php_dom_follow_spec_intern(obj));
|
||||
intern = Z_DOMOBJ_P(retval);
|
||||
dom_object *intern = Z_DOMOBJ_P(retval);
|
||||
dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, 0, NULL, 0);
|
||||
|
||||
return SUCCESS;
|
||||
|
@ -330,15 +297,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_first_child_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep, *first = NULL;
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
xmlNodePtr first = NULL;
|
||||
if (dom_node_children_valid(nodep)) {
|
||||
first = nodep->children;
|
||||
}
|
||||
|
@ -361,15 +322,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_last_child_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep, *last = NULL;
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
xmlNodePtr last = NULL;
|
||||
if (dom_node_children_valid(nodep)) {
|
||||
last = nodep->last;
|
||||
}
|
||||
|
@ -392,16 +347,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_previous_sibling_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep, *prevsib;
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
prevsib = nodep->prev;
|
||||
xmlNodePtr prevsib = nodep->prev;
|
||||
if (!prevsib) {
|
||||
ZVAL_NULL(retval);
|
||||
return SUCCESS;
|
||||
|
@ -420,16 +368,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_next_sibling_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep, *nextsib;
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
nextsib = nodep->next;
|
||||
xmlNodePtr nextsib = nodep->next;
|
||||
if (!nextsib) {
|
||||
ZVAL_NULL(retval);
|
||||
return SUCCESS;
|
||||
|
@ -448,16 +389,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_previous_element_sibling_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep, *prevsib;
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
prevsib = nodep->prev;
|
||||
xmlNodePtr prevsib = nodep->prev;
|
||||
|
||||
while (prevsib && prevsib->type != XML_ELEMENT_NODE) {
|
||||
prevsib = prevsib->prev;
|
||||
|
@ -481,16 +415,9 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_next_element_sibling_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep, *nextsib;
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
nextsib = nodep->next;
|
||||
xmlNodePtr nextsib = nodep->next;
|
||||
|
||||
while (nextsib != NULL && nextsib->type != XML_ELEMENT_NODE) {
|
||||
nextsib = nextsib->next;
|
||||
|
@ -514,17 +441,11 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_attributes_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
dom_object *intern;
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
if (nodep->type == XML_ELEMENT_NODE) {
|
||||
php_dom_create_iterator(retval, DOM_NAMEDNODEMAP, php_dom_follow_spec_intern(obj));
|
||||
intern = Z_DOMOBJ_P(retval);
|
||||
dom_object *intern = Z_DOMOBJ_P(retval);
|
||||
dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, 0, NULL, 0);
|
||||
} else {
|
||||
ZVAL_NULL(retval);
|
||||
|
@ -542,13 +463,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_is_connected_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
ZVAL_BOOL(retval, php_dom_is_node_connected(nodep));
|
||||
return SUCCESS;
|
||||
}
|
||||
|
@ -561,20 +476,14 @@ Since:
|
|||
*/
|
||||
zend_result dom_node_owner_document_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
xmlDocPtr docp;
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
|
||||
ZVAL_NULL(retval);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
docp = nodep->doc;
|
||||
xmlDocPtr docp = nodep->doc;
|
||||
if (!docp) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
@ -592,20 +501,15 @@ Since: DOM Level 2
|
|||
*/
|
||||
zend_result dom_node_namespace_uri_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
char *str = NULL;
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
const char *str = NULL;
|
||||
switch (nodep->type) {
|
||||
case XML_ELEMENT_NODE:
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
case XML_NAMESPACE_DECL:
|
||||
if (nodep->ns != NULL) {
|
||||
str = (char *) nodep->ns->href;
|
||||
str = (const char *) nodep->ns->href;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -632,24 +536,19 @@ Since: DOM Level 2
|
|||
*/
|
||||
zend_result dom_node_prefix_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
xmlNsPtr ns;
|
||||
char *str = NULL;
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
const char *str = NULL;
|
||||
switch (nodep->type) {
|
||||
case XML_ELEMENT_NODE:
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
case XML_NAMESPACE_DECL:
|
||||
ns = nodep->ns;
|
||||
case XML_NAMESPACE_DECL: {
|
||||
xmlNsPtr ns = nodep->ns;
|
||||
if (ns != NULL && ns->prefix) {
|
||||
str = (char *) ns->prefix;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
str = NULL;
|
||||
break;
|
||||
|
@ -665,12 +564,7 @@ zend_result dom_node_prefix_read(dom_object *obj, zval *retval)
|
|||
|
||||
zend_result dom_modern_node_prefix_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
xmlNsPtr ns = nodep->ns;
|
||||
if (ns != NULL && ns->prefix != NULL) {
|
||||
|
@ -684,17 +578,12 @@ zend_result dom_modern_node_prefix_read(dom_object *obj, zval *retval)
|
|||
zend_result dom_node_prefix_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
zend_string *prefix_str;
|
||||
xmlNode *nodep, *nsnode = NULL;
|
||||
xmlNode *nsnode = NULL;
|
||||
xmlNsPtr ns = NULL, curns;
|
||||
char *strURI;
|
||||
char *prefix;
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
switch (nodep->type) {
|
||||
case XML_ELEMENT_NODE:
|
||||
|
@ -766,12 +655,7 @@ Since: DOM Level 2
|
|||
*/
|
||||
zend_result dom_node_local_name_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) {
|
||||
ZVAL_STRING(retval, (char *) (nodep->name));
|
||||
|
@ -791,15 +675,9 @@ Since: DOM Level 3
|
|||
*/
|
||||
zend_result dom_node_base_uri_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
xmlChar *baseuri;
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
baseuri = xmlNodeGetBase(nodep->doc, nodep);
|
||||
xmlChar *baseuri = xmlNodeGetBase(nodep->doc, nodep);
|
||||
if (baseuri) {
|
||||
ZVAL_STRING(retval, (const char *) baseuri);
|
||||
xmlFree(baseuri);
|
||||
|
@ -842,12 +720,7 @@ static bool dom_skip_text_content(dom_object *obj, xmlNodePtr nodep)
|
|||
|
||||
zend_result dom_node_text_content_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
if (dom_skip_text_content(obj, nodep)) {
|
||||
ZVAL_NULL(retval);
|
||||
|
@ -860,12 +733,7 @@ zend_result dom_node_text_content_read(dom_object *obj, zval *retval)
|
|||
|
||||
zend_result dom_node_text_content_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
php_libxml_invalidate_node_list_cache(obj->document);
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "php.h"
|
||||
#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
|
||||
#include "php_dom.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
/*
|
||||
* class DOMNotation extends DOMNode
|
||||
|
@ -39,12 +40,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_notation_public_id_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
|
||||
|
||||
if (nodep->ExternalID) {
|
||||
ZVAL_STRING(retval, (char *) (nodep->ExternalID));
|
||||
|
@ -64,12 +60,7 @@ Since:
|
|||
*/
|
||||
zend_result dom_notation_system_id_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
|
||||
|
||||
if (nodep->SystemID) {
|
||||
ZVAL_STRING(retval, (char *) (nodep->SystemID));
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
|
||||
#include "php_dom.h"
|
||||
#include "internal_helpers.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
/* {{{ firstElementChild DomParentNode
|
||||
readonly=yes
|
||||
|
@ -32,15 +33,9 @@ URL: https://www.w3.org/TR/dom/#dom-parentnode-firstelementchild
|
|||
*/
|
||||
zend_result dom_parent_node_first_element_child_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep, *first = NULL;
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
xmlNodePtr first = NULL;
|
||||
if (dom_node_children_valid(nodep)) {
|
||||
first = nodep->children;
|
||||
|
||||
|
@ -65,15 +60,9 @@ URL: https://www.w3.org/TR/dom/#dom-parentnode-lastelementchild
|
|||
*/
|
||||
zend_result dom_parent_node_last_element_child_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep, *last = NULL;
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
xmlNodePtr last = NULL;
|
||||
if (dom_node_children_valid(nodep)) {
|
||||
last = nodep->last;
|
||||
|
||||
|
@ -98,18 +87,11 @@ https://www.w3.org/TR/dom/#dom-parentnode-childelementcount
|
|||
*/
|
||||
zend_result dom_parent_node_child_element_count(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNode *nodep, *first = NULL;
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
zend_long count = 0;
|
||||
|
||||
nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (dom_node_children_valid(nodep)) {
|
||||
first = nodep->children;
|
||||
xmlNodePtr first = nodep->children;
|
||||
|
||||
while (first != NULL) {
|
||||
if (first->type == XML_ELEMENT_NODE) {
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "php.h"
|
||||
#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
|
||||
#include "php_dom.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
/*
|
||||
* class DOMProcessingInstruction extends DOMNode
|
||||
|
@ -72,15 +73,8 @@ Since:
|
|||
*/
|
||||
zend_result dom_processinginstruction_target_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNodePtr nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
ZVAL_STRING(retval, (char *) (nodep->name));
|
||||
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
ZVAL_STRING(retval, (const char *) nodep->name);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -93,26 +87,14 @@ Since:
|
|||
*/
|
||||
zend_result dom_processinginstruction_data_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNodePtr nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
php_dom_get_content_into_zval(nodep, retval, false);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
zend_result dom_processinginstruction_data_write(dom_object *obj, zval *newval)
|
||||
{
|
||||
xmlNode *nodep = dom_object_get_node(obj);
|
||||
|
||||
if (nodep == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
/* Typed property, this is already a string */
|
||||
ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING);
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
|
||||
#include "php_dom.h"
|
||||
#include "dom_ce.h"
|
||||
#include "dom_properties.h"
|
||||
|
||||
/*
|
||||
* class DOMText extends DOMCharacterData
|
||||
|
@ -66,16 +67,10 @@ Since: DOM Level 3
|
|||
*/
|
||||
zend_result dom_text_whole_text_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
xmlNodePtr node;
|
||||
DOM_PROP_NODE(xmlNodePtr, node, obj);
|
||||
|
||||
xmlChar *wholetext = NULL;
|
||||
|
||||
node = dom_object_get_node(obj);
|
||||
|
||||
if (node == NULL) {
|
||||
php_dom_throw_error(INVALID_STATE_ERR, true);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
/* Find starting text node */
|
||||
while (node->prev && ((node->prev->type == XML_TEXT_NODE) || (node->prev->type == XML_CDATA_SECTION_NODE))) {
|
||||
node = node->prev;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue