summaryrefslogtreecommitdiff
path: root/ext/xsl/xsltprocessor.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/xsl/xsltprocessor.c')
-rw-r--r--ext/xsl/xsltprocessor.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c
index 58a903868..c67cac9dd 100644
--- a/ext/xsl/xsltprocessor.c
+++ b/ext/xsl/xsltprocessor.c
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xsltprocessor.c,v 1.39.2.3 2006/06/14 09:43:22 chregu Exp $ */
+/* $Id: xsltprocessor.c,v 1.39.2.2.2.4 2006/07/31 13:05:35 chregu Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -351,7 +351,7 @@ PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet)
}
if (doc == NULL) {
php_error(E_WARNING, "Invalid Document");
- RETURN_NULL();
+ RETURN_FALSE;
}
/* libxslt uses _private, so we must copy the imported
@@ -395,7 +395,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) {
@@ -406,11 +406,12 @@ PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet)
}
php_xsl_set_object(id, sheetp TSRMLS_CC);
+ RETVAL_TRUE;
}
/* }}} 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;
@@ -419,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);
@@ -452,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);
@@ -500,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);
@@ -531,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) {
@@ -564,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) {