cvs: pear /XML_Transformer Transformer.php
| From: | Sebastian Bergmann | Date: | Sat, 11 May 2002 10:35:56 +0000 |
| Subject: | cvs: pear /XML_Transformer Transformer.php | ||
| Groups: | php.pear.cvs | ||
| Request: | Send a blank email to pear-cvs+get-3754@lists.php.net to get a copy of this message | ||
sebastian Sat May 11 06:35:56 2002 EDT
Modified files:
/pear/XML_Transformer Transformer.php
Log:
Hopefully make Harald happy by allowing to disable the recursion on a per-tag basis.
Index: pear/XML_Transformer/Transformer.php
diff -u pear/XML_Transformer/Transformer.php:1.6 pear/XML_Transformer/Transformer.php:1.7
--- pear/XML_Transformer/Transformer.php:1.6 Mon Apr 8 02:27:51 2002
+++ pear/XML_Transformer/Transformer.php Sat May 11 06:35:55 2002
@@ -17,7 +17,7 @@
// | Kristian Köhntopp <kris@koehntopp.de> |
// +----------------------------------------------------------------------+
//
-// $Id: Transformer.php,v 1.6 2002/04/08 06:27:51 sebastian Exp $
+// $Id: Transformer.php,v 1.7 2002/05/11 10:35:55 sebastian Exp $
//
/**
@@ -62,7 +62,7 @@
*
* @author Sebastian Bergmann <sb@sebastian-bergmann.de>
* Kristian Köhntopp <kris@koehntopp.de>
-* @version $Revision: 1.6 $
+* @version $Revision: 1.7 $
* @access public
*/
class XML_Transformer {
@@ -112,6 +112,12 @@
* @var boolean
* @access private
*/
+ var $_recursiveOperation = true;
+
+ /**
+ * @var boolean
+ * @access private
+ */
var $_started = false;
/**
@@ -127,17 +133,24 @@
$this->_caseFolding = isset($parameters['caseFolding']) ?
$parameters['caseFolding'] : false;
$overloadedElements = isset($parameters['overloadedElements']) ?
$parameters['overloadedElements'] : array();
$this->_overloadedNamespaces = isset($parameters['overloadedNamespaces']) ?
$parameters['overloadedNamespaces'] : array();
+ $this->_recursiveOperation = isset($parameters['recursiveOperation']) ?
$parameters['recursiveOperation'] : true;
if ($startup) {
// Walk through overloadedElements array,
// that was passed to the constructor and
// register the element callbacks it contains.
- foreach ($overloadedElements as $element => $callbacks) {
- $callbacks['start'] = isset($callbacks['start']) ?
$callbacks['start'] : '';
- $callbacks['end'] = isset($callbacks['end']) ?
$callbacks['end'] : '';
-
- $this->overloadElement($element, $callbacks['start'],
$callbacks['end']);
+ foreach ($overloadedElements as $element => $overloadedElement) {
+ $overloadedElement['start'] =
isset($overloadedElement['start']) ? $overloadedElement['start']
: '';
+ $overloadedElement['end'] =
isset($overloadedElement['end']) ? $overloadedElement['end']
: '';
+ $overloadedElement['recursiveOperation'] =
isset($overloadedElement['recursiveOperation']) ?
$overloadedElement['recursiveOperation'] : $this->_recursiveOperation;
+
+ $this->overloadElement(
+ $element,
+ $overloadedElement['start'],
+ $overloadedElement['end'],
+ $overloadedElement['recursiveOperation']
+ );
}
// Start transformation.
@@ -190,13 +203,16 @@
* @param string
* @param string
* @param string
+ * @param boolean
* @access public
*/
- function overloadElement($element, $startHandler, $endHandler) {
+ function overloadElement($element, $startHandler, $recursiveOperation = '') {
$element = $this->canonicalName($element);
$this->_registerElementCallback($element, 'start', $startHandler);
$this->_registerElementCallback($element, 'end', $endHandler);
+
+ $this->_overloadedElements[$element]['recursiveOperation'] =
!empty($recursiveOperation) ? $recursiveOperation : $this->_recursiveOperation;
}
/**
@@ -300,6 +316,18 @@
}
/**
+ * Enables or disables the recursive operation.
+ *
+ * @param boolean
+ * @access public
+ */
+ function setRecursiveOperation($recursiveOperation) {
+ if (is_bool($recursiveOperation)) {
+ $this->_recursiveOperation = $recursiveOperation;
+ }
+ }
+
+ /**
* Starts the output-buffering,
* and thus the transformation.
*
@@ -455,7 +483,10 @@
$cdata .= '</' . $element . '>';
}
- if ($recursion) {
+ if ($resursion &&
+ $this->_overloadedElements[$element]['recursiveOperation']
+ )
+ {
// Recursively process this transformation's result.
$transformer = new XML_Transformer(