From a6298413fdb4a45733de635d6bf7dc779f2a65c5 Mon Sep 17 00:00:00 2001 From: gtbu Date: Mon, 19 Feb 2024 22:36:53 +0100 Subject: [PATCH] Added Visitor.php less 4.2 --- include/thirdparty/less.php/Visitor.php | 43 ++++++++++++ .../thirdparty/less.php/VisitorReplacing.php | 65 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 include/thirdparty/less.php/Visitor.php create mode 100644 include/thirdparty/less.php/VisitorReplacing.php diff --git a/include/thirdparty/less.php/Visitor.php b/include/thirdparty/less.php/Visitor.php new file mode 100644 index 0000000..965ddcd --- /dev/null +++ b/include/thirdparty/less.php/Visitor.php @@ -0,0 +1,43 @@ +_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; + } +} diff --git a/include/thirdparty/less.php/VisitorReplacing.php b/include/thirdparty/less.php/VisitorReplacing.php new file mode 100644 index 0000000..484f0e0 --- /dev/null +++ b/include/thirdparty/less.php/VisitorReplacing.php @@ -0,0 +1,65 @@ +_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; + } + +}