Skip to content

Commit 8d1427d

Browse files
author
Rob Richards
committed
MFH: add doXInclude property to allow processor to perform XIncludes
1 parent aa19f65 commit 8d1427d

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

ext/xsl/xsltprocessor.c

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet)
396396
} else {
397397
intern->hasKeys = clone_docu;
398398
}
399-
399+
400400
if ((oldsheetp = (xsltStylesheetPtr)intern->ptr)) {
401401
/* free wrapper */
402402
if (((xsltStylesheetPtr) intern->ptr)->_private != NULL) {
@@ -411,7 +411,7 @@ PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet)
411411
/* }}} end xsl_xsltprocessor_import_stylesheet */
412412

413413

414-
static xmlDocPtr php_xsl_apply_stylesheet(xsl_object *intern, xsltStylesheetPtr style, zval *docp TSRMLS_DC)
414+
static xmlDocPtr php_xsl_apply_stylesheet(zval *id, xsl_object *intern, xsltStylesheetPtr style, zval *docp TSRMLS_DC)
415415
{
416416
xmlDocPtr newdocp;
417417
xmlDocPtr doc = NULL;
@@ -420,6 +420,8 @@ static xmlDocPtr php_xsl_apply_stylesheet(xsl_object *intern, xsltStylesheetPtr
420420
php_libxml_node_object *object;
421421
char **params = NULL;
422422
int clone;
423+
zval *doXInclude, *member;
424+
zend_object_handlers *std_hnd;
423425

424426
node = php_libxml_import_node(docp TSRMLS_CC);
425427

@@ -453,7 +455,18 @@ static xmlDocPtr php_xsl_apply_stylesheet(xsl_object *intern, xsltStylesheetPtr
453455

454456
ctxt = xsltNewTransformContext(style, doc);
455457
ctxt->_private = (void *) intern;
456-
458+
459+
std_hnd = zend_get_std_object_handlers();
460+
461+
MAKE_STD_ZVAL(member);
462+
ZVAL_STRING(member, "doXInclude", 0);
463+
doXInclude = std_hnd->read_property(id, member, BP_VAR_IS TSRMLS_CC);
464+
if (Z_TYPE_P(doXInclude) != IS_NULL) {
465+
convert_to_long(doXInclude);
466+
ctxt->xinclude = Z_LVAL_P(doXInclude);
467+
}
468+
efree(member);
469+
457470
newdocp = xsltApplyStylesheetUser(style, doc, (const char**) params, NULL, NULL, ctxt);
458471

459472
xsltFreeTransformContext(ctxt);
@@ -501,7 +514,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc)
501514
RETURN_FALSE;
502515
}
503516

504-
newdocp = php_xsl_apply_stylesheet(intern, sheetp, docp TSRMLS_CC);
517+
newdocp = php_xsl_apply_stylesheet(id, intern, sheetp, docp TSRMLS_CC);
505518

506519
if (newdocp) {
507520
DOM_RET_OBJ(rv, (xmlNodePtr) newdocp, &ret, NULL);
@@ -532,7 +545,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri)
532545
RETURN_FALSE;
533546
}
534547

535-
newdocp = php_xsl_apply_stylesheet(intern, sheetp, docp TSRMLS_CC);
548+
newdocp = php_xsl_apply_stylesheet(id, intern, sheetp, docp TSRMLS_CC);
536549

537550
ret = -1;
538551
if (newdocp) {
@@ -565,7 +578,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml)
565578
RETURN_FALSE;
566579
}
567580

568-
newdocp = php_xsl_apply_stylesheet(intern, sheetp, docp TSRMLS_CC);
581+
newdocp = php_xsl_apply_stylesheet(id, intern, sheetp, docp TSRMLS_CC);
569582

570583
ret = -1;
571584
if (newdocp) {

0 commit comments

Comments
 (0)