diff options
author | Rob Richards <rrichards@php.net> | 2006-05-12 18:53:40 +0000 |
---|---|---|
committer | Rob Richards <rrichards@php.net> | 2006-05-12 18:53:40 +0000 |
commit | 8d1427dd98533d0a7ae5a3256f9888121ff4a3ed (patch) | |
tree | 8141c81ab808d130325365f7be41ac54367392a7 /ext/xsl | |
parent | aa19f65f56d9df722bb49d2b91ee9c18527ad7c4 (diff) | |
download | php-git-8d1427dd98533d0a7ae5a3256f9888121ff4a3ed.tar.gz |
MFH: add doXInclude property to allow processor to perform XIncludes
Diffstat (limited to 'ext/xsl')
-rw-r--r-- | ext/xsl/xsltprocessor.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c index e534b1c125..bad79830f8 100644 --- a/ext/xsl/xsltprocessor.c +++ b/ext/xsl/xsltprocessor.c @@ -396,7 +396,7 @@ PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet) } else { intern->hasKeys = clone_docu; } - + if ((oldsheetp = (xsltStylesheetPtr)intern->ptr)) { /* free wrapper */ if (((xsltStylesheetPtr) intern->ptr)->_private != NULL) { @@ -411,7 +411,7 @@ PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet) /* }}} end xsl_xsltprocessor_import_stylesheet */ -static xmlDocPtr php_xsl_apply_stylesheet(xsl_object *intern, xsltStylesheetPtr style, zval *docp TSRMLS_DC) +static xmlDocPtr php_xsl_apply_stylesheet(zval *id, xsl_object *intern, xsltStylesheetPtr style, zval *docp TSRMLS_DC) { xmlDocPtr newdocp; xmlDocPtr doc = NULL; @@ -420,6 +420,8 @@ static xmlDocPtr php_xsl_apply_stylesheet(xsl_object *intern, xsltStylesheetPtr php_libxml_node_object *object; char **params = NULL; int clone; + zval *doXInclude, *member; + zend_object_handlers *std_hnd; node = php_libxml_import_node(docp TSRMLS_CC); @@ -453,7 +455,18 @@ static xmlDocPtr php_xsl_apply_stylesheet(xsl_object *intern, xsltStylesheetPtr ctxt = xsltNewTransformContext(style, doc); ctxt->_private = (void *) intern; - + + std_hnd = zend_get_std_object_handlers(); + + MAKE_STD_ZVAL(member); + ZVAL_STRING(member, "doXInclude", 0); + doXInclude = std_hnd->read_property(id, member, BP_VAR_IS TSRMLS_CC); + if (Z_TYPE_P(doXInclude) != IS_NULL) { + convert_to_long(doXInclude); + ctxt->xinclude = Z_LVAL_P(doXInclude); + } + efree(member); + newdocp = xsltApplyStylesheetUser(style, doc, (const char**) params, NULL, NULL, ctxt); xsltFreeTransformContext(ctxt); @@ -501,7 +514,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc) RETURN_FALSE; } - newdocp = php_xsl_apply_stylesheet(intern, sheetp, docp TSRMLS_CC); + newdocp = php_xsl_apply_stylesheet(id, intern, sheetp, docp TSRMLS_CC); if (newdocp) { DOM_RET_OBJ(rv, (xmlNodePtr) newdocp, &ret, NULL); @@ -532,7 +545,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri) RETURN_FALSE; } - newdocp = php_xsl_apply_stylesheet(intern, sheetp, docp TSRMLS_CC); + newdocp = php_xsl_apply_stylesheet(id, intern, sheetp, docp TSRMLS_CC); ret = -1; if (newdocp) { @@ -565,7 +578,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml) RETURN_FALSE; } - newdocp = php_xsl_apply_stylesheet(intern, sheetp, docp TSRMLS_CC); + newdocp = php_xsl_apply_stylesheet(id, intern, sheetp, docp TSRMLS_CC); ret = -1; if (newdocp) { |