Added Visitor.php less 4.2

This commit is contained in:
gtbu 2024-02-19 22:36:53 +01:00
parent 9c40a5b167
commit a6298413fd
2 changed files with 108 additions and 0 deletions

43
include/thirdparty/less.php/Visitor.php vendored Normal file
View file

@ -0,0 +1,43 @@
<?php
/**
* @private
*/
class Less_Visitor {
protected $methods = [];
protected $_visitFnCache = [];
public function __construct() {
$this->_visitFnCache = get_class_methods( get_class( $this ) );
$this->_visitFnCache = array_flip( $this->_visitFnCache );
}
public function visitObj( $node ) {
$funcName = 'visit' . str_replace( [ 'Less_Tree_', '_' ], '', get_class( $node ) );
if ( isset( $this->_visitFnCache[$funcName] ) ) {
$visitDeeper = true;
$this->$funcName( $node, $visitDeeper );
if ( $visitDeeper ) {
$node->accept( $this );
}
$funcName .= "Out";
if ( isset( $this->_visitFnCache[$funcName] ) ) {
$this->$funcName( $node );
}
} else {
$node->accept( $this );
}
return $node;
}
public function visitArray( $nodes ) {
foreach ( $nodes as $node ) {
$this->visitObj( $node );
}
return $nodes;
}
}

View file

@ -0,0 +1,65 @@
<?php
/**
* @private
*/
class Less_VisitorReplacing extends Less_Visitor {
public function visitObj( $node ) {
$funcName = 'visit' . str_replace( [ 'Less_Tree_', '_' ], '', get_class( $node ) );
if ( isset( $this->_visitFnCache[$funcName] ) ) {
$visitDeeper = true;
$node = $this->$funcName( $node, $visitDeeper );
if ( $node ) {
if ( $visitDeeper && is_object( $node ) ) {
$node->accept( $this );
}
$funcName .= "Out";
if ( isset( $this->_visitFnCache[$funcName] ) ) {
$this->$funcName( $node );
}
}
} else {
$node->accept( $this );
}
return $node;
}
public function visitArray( $nodes ) {
$newNodes = [];
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;
}
}