|
TYPO3 API
SVNRelease
|
00001 <?php 00002 00003 /* * 00004 * This script belongs to the FLOW3 package "Fluid". * 00005 * * 00006 * It is free software; you can redistribute it and/or modify it under * 00007 * the terms of the GNU Lesser General Public License as published by the * 00008 * Free Software Foundation, either version 3 of the License, or (at your * 00009 * option) any later version. * 00010 * * 00011 * This script is distributed in the hope that it will be useful, but * 00012 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- * 00013 * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * 00014 * General Public License for more details. * 00015 * * 00016 * You should have received a copy of the GNU Lesser General Public * 00017 * License along with the script. * 00018 * If not, see http://www.gnu.org/licenses/lgpl.html * 00019 * * 00020 * The TYPO3 project - inspiring people to share! * 00021 * */ 00022 00023 /** 00024 * Abstract node in the syntax tree which has been built. 00025 * 00026 * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later 00027 */ 00028 abstract class Tx_Fluid_Core_Parser_SyntaxTree_AbstractNode implements Tx_Fluid_Core_Parser_SyntaxTree_NodeInterface { 00029 00030 /** 00031 * List of Child Nodes. 00032 * @var array<Tx_Fluid_Core_Parser_SyntaxTree_NodeInterface> 00033 */ 00034 protected $childNodes = array(); 00035 00036 /** 00037 * Evaluate all child nodes and return the evaluated results. 00038 * 00039 * @param Tx_Fluid_Core_Rendering_RenderingContextInterface $renderingContext 00040 * @return mixed Normally, an object is returned - in case it is concatenated with a string, a string is returned. 00041 * @author Sebastian Kurfürst <sebastian@typo3.org> 00042 * @author Bastian Waidelich <bastian@typo3.org> 00043 */ 00044 public function evaluateChildNodes(Tx_Fluid_Core_Rendering_RenderingContextInterface $renderingContext) { 00045 $output = NULL; 00046 foreach ($this->childNodes as $subNode) { 00047 if ($output === NULL) { 00048 $output = $subNode->evaluate($renderingContext); 00049 } else { 00050 if (is_object($output) && !method_exists($output, '__toString')) { 00051 throw new Tx_Fluid_Core_Parser_Exception('Cannot cast object of type "' . get_class($output) . '" to string.', 1248356140); 00052 } 00053 $output = (string)$output; 00054 $subNodeOutput = $subNode->evaluate($renderingContext); 00055 00056 if (is_object($subNodeOutput) && !method_exists($subNodeOutput, '__toString')) { 00057 throw new Tx_Fluid_Core_Parser_Exception('Cannot cast object of type "' . get_class($subNodeOutput) . '" to string.', 1273753083); 00058 } 00059 $output .= (string)$subNodeOutput; 00060 } 00061 } 00062 return $output; 00063 } 00064 00065 /** 00066 * Returns all child nodes for a given node. 00067 * This is especially needed to implement the boolean expression language. 00068 * 00069 * @return array<Tx_Fluid_Core_Parser_SyntaxTree_NodeInterface> A list of nodes 00070 * @author Sebastian Kurfürst <sebastian@typo3.org> 00071 */ 00072 public function getChildNodes() { 00073 return $this->childNodes; 00074 } 00075 00076 /** 00077 * Appends a subnode to this node. Is used inside the parser to append children 00078 * 00079 * @param Tx_Fluid_Core_Parser_SyntaxTree_NodeInterface $childNode The subnode to add 00080 * @return void 00081 * @author Sebastian Kurfürst <sebastian@typo3.org> 00082 */ 00083 public function addChildNode(Tx_Fluid_Core_Parser_SyntaxTree_NodeInterface $childNode) { 00084 $this->childNodes[] = $childNode; 00085 } 00086 00087 } 00088 00089 ?>
1.8.0