libreqr/less.php/lib/Less/VisitorReplacing.php

71 lines
1.2 KiB
PHP

<?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;
}
}