84 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
										Nodes
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class H2o_Node {
							 | 
						||
| 
								 | 
							
								    var $position;
							 | 
						||
| 
								 | 
							
									function __construct($argstring) {}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									function render($context, $stream) {}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class NodeList extends H2o_Node implements IteratorAggregate  {
							 | 
						||
| 
								 | 
							
									var $parser;
							 | 
						||
| 
								 | 
							
									var $list;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									function __construct(&$parser, $initial = null, $position = 0) {
							 | 
						||
| 
								 | 
							
									    $this->parser = $parser;
							 | 
						||
| 
								 | 
							
								        if (is_null($initial))
							 | 
						||
| 
								 | 
							
								            $initial = array();
							 | 
						||
| 
								 | 
							
								        $this->list = $initial;
							 | 
						||
| 
								 | 
							
								        $this->position = $position;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function render($context, $stream) {
							 | 
						||
| 
								 | 
							
										foreach($this->list as $node) {
							 | 
						||
| 
								 | 
							
											$node->render($context, $stream);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								    function append($node) {
							 | 
						||
| 
								 | 
							
								        array_push($this->list, $node);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function extend($nodes) {
							 | 
						||
| 
								 | 
							
								        array_merge($this->list, $nodes);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function getLength() {
							 | 
						||
| 
								 | 
							
								        return count($this->list);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    function getIterator() {
							 | 
						||
| 
								 | 
							
								        return new ArrayIterator( $this->list );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class VariableNode extends H2o_Node {
							 | 
						||
| 
								 | 
							
								    private $filters = array();
							 | 
						||
| 
								 | 
							
								    var $variable;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
									function __construct($variable, $filters, $position = 0) {
							 | 
						||
| 
								 | 
							
								        if (!empty($filters))
							 | 
						||
| 
								 | 
							
								            $this->filters = $filters;
							 | 
						||
| 
								 | 
							
										$this->variable = $variable;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function render($context, $stream) {
							 | 
						||
| 
								 | 
							
								        $value = $context->resolve($this->variable);
							 | 
						||
| 
								 | 
							
								        $value = $context->escape($value, $this->variable);
							 | 
						||
| 
								 | 
							
								        $stream->write($value);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CommentNode extends H2o_Node {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TextNode extends H2o_Node {
							 | 
						||
| 
								 | 
							
								    var $content;
							 | 
						||
| 
								 | 
							
									function __construct($content, $position = 0) {
							 | 
						||
| 
								 | 
							
										$this->content = $content;
							 | 
						||
| 
								 | 
							
										$this->position = $position;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									function render($context, $stream) {
							 | 
						||
| 
								 | 
							
										$stream->write($this->content);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									function is_blank() {
							 | 
						||
| 
								 | 
							
									    return strlen(trim($this->content));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								?>
							 |