diff options
Diffstat (limited to 'lib/less.php/VisitorReplacing.php')
-rw-r--r-- | lib/less.php/VisitorReplacing.php | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/less.php/VisitorReplacing.php b/lib/less.php/VisitorReplacing.php new file mode 100644 index 0000000..5923170 --- /dev/null +++ b/lib/less.php/VisitorReplacing.php @@ -0,0 +1,75 @@ +<?php + +/** + * Replacing Visitor + * + * @package Less + * @subpackage visitor + */ +class Less_VisitorReplacing extends Less_Visitor{ + + public function visitObj( $node ){ + + $funcName = 'visit'.$node->type; + if( isset($this->_visitFnCache[$funcName]) ){ + + $visitDeeper = true; + $node = $this->$funcName( $node, $visitDeeper ); + + if( $node ){ + if( $visitDeeper && is_object($node) ){ + $node->accept($this); + } + + $funcName = $funcName . "Out"; + if( isset($this->_visitFnCache[$funcName]) ){ + $this->$funcName( $node ); + } + } + + }else{ + $node->accept($this); + } + + return $node; + } + + public function visitArray( $nodes ){ + + $newNodes = array(); + foreach($nodes as $node){ + $evald = $this->visitObj($node); + if( $evald ){ + if( is_array($evald) ){ + self::flatten($evald,$newNodes); + }else{ + $newNodes[] = $evald; + } + } + } + return $newNodes; + } + + public function flatten( $arr, &$out ){ + + foreach($arr as $item){ + if( !is_array($item) ){ + $out[] = $item; + continue; + } + + foreach($item as $nestedItem){ + if( is_array($nestedItem) ){ + self::flatten( $nestedItem, $out); + }else{ + $out[] = $nestedItem; + } + } + } + + return $out; + } + +} + + |