You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
850 B
50 lines
850 B
2 years ago
|
<?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;
|
||
|
}
|
||
|
}
|
||
|
|