diff options
Diffstat (limited to 'lib/less.php/Visitor.php')
-rw-r--r-- | lib/less.php/Visitor.php | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/less.php/Visitor.php b/lib/less.php/Visitor.php new file mode 100644 index 0000000..d85f1d9 --- /dev/null +++ b/lib/less.php/Visitor.php @@ -0,0 +1,49 @@ +<?php + +/** + * Visitor + * + * @package Less + * @subpackage visitor + */ +class Less_Visitor{ + + protected $methods = array(); + protected $_visitFnCache = array(); + + public function __construct(){ + $this->_visitFnCache = get_class_methods(get_class($this)); + $this->_visitFnCache = array_flip($this->_visitFnCache); + } + + public function visitObj( $node ){ + + $funcName = 'visit'.$node->type; + if( isset($this->_visitFnCache[$funcName]) ){ + + $visitDeeper = true; + $this->$funcName( $node, $visitDeeper ); + + if( $visitDeeper ){ + $node->accept($this); + } + + $funcName = $funcName . "Out"; + if( isset($this->_visitFnCache[$funcName]) ){ + $this->$funcName( $node ); + } + + }else{ + $node->accept($this); + } + + return $node; + } + + public function visitArray( $nodes ){ + + array_map( array($this,'visitObj'), $nodes); + return $nodes; + } +} + |