ORIENT/vendor/wikimedia/less.php/lib/Less/Tree/Expression.php

91 lines
1.8 KiB
PHP
Raw Normal View History

2021-04-08 08:08:59 +00:00
<?php
/**
2023-02-27 04:39:19 +00:00
* @private
2021-04-08 08:08:59 +00:00
*/
2023-02-27 04:39:19 +00:00
class Less_Tree_Expression extends Less_Tree {
/** @var array */
public $value = [];
2021-04-08 08:08:59 +00:00
public $parens = false;
public $type = 'Expression';
2023-02-27 04:39:19 +00:00
public function __construct( $value, $parens = null ) {
2021-04-08 08:08:59 +00:00
$this->value = $value;
$this->parens = $parens;
}
2023-02-27 04:39:19 +00:00
public function accept( $visitor ) {
2021-04-08 08:08:59 +00:00
$this->value = $visitor->visitArray( $this->value );
}
2023-02-27 04:39:19 +00:00
public function compile( $env ) {
2021-04-08 08:08:59 +00:00
$doubleParen = false;
2023-02-27 04:39:19 +00:00
if ( $this->parens && !$this->parensInOp ) {
2021-04-08 08:08:59 +00:00
Less_Environment::$parensStack++;
}
$returnValue = null;
2023-02-27 04:39:19 +00:00
if ( $this->value ) {
2021-04-08 08:08:59 +00:00
2023-02-27 04:39:19 +00:00
$count = count( $this->value );
2021-04-08 08:08:59 +00:00
2023-02-27 04:39:19 +00:00
if ( $count > 1 ) {
2021-04-08 08:08:59 +00:00
2023-02-27 04:39:19 +00:00
$ret = [];
foreach ( $this->value as $e ) {
$ret[] = $e->compile( $env );
2021-04-08 08:08:59 +00:00
}
2023-02-27 04:39:19 +00:00
$returnValue = new Less_Tree_Expression( $ret );
2021-04-08 08:08:59 +00:00
2023-02-27 04:39:19 +00:00
} else {
2021-04-08 08:08:59 +00:00
2023-02-27 04:39:19 +00:00
if ( ( $this->value[0] instanceof Less_Tree_Expression ) && $this->value[0]->parens && !$this->value[0]->parensInOp ) {
2021-04-08 08:08:59 +00:00
$doubleParen = true;
}
2023-02-27 04:39:19 +00:00
$returnValue = $this->value[0]->compile( $env );
2021-04-08 08:08:59 +00:00
}
} else {
$returnValue = $this;
}
2023-02-27 04:39:19 +00:00
if ( $this->parens ) {
if ( !$this->parensInOp ) {
2021-04-08 08:08:59 +00:00
Less_Environment::$parensStack--;
2023-02-27 04:39:19 +00:00
} elseif ( !Less_Environment::isMathOn() && !$doubleParen ) {
$returnValue = new Less_Tree_Paren( $returnValue );
2021-04-08 08:08:59 +00:00
}
}
return $returnValue;
}
2023-02-27 04:39:19 +00:00
/**
* @see Less_Tree::genCSS
*/
public function genCSS( $output ) {
$val_len = count( $this->value );
for ( $i = 0; $i < $val_len; $i++ ) {
2021-04-08 08:08:59 +00:00
$this->value[$i]->genCSS( $output );
2023-02-27 04:39:19 +00:00
if ( $i + 1 < $val_len ) {
2021-04-08 08:08:59 +00:00
$output->add( ' ' );
}
}
}
2023-02-27 04:39:19 +00:00
public function throwAwayComments() {
if ( is_array( $this->value ) ) {
$new_value = [];
foreach ( $this->value as $v ) {
if ( $v instanceof Less_Tree_Comment ) {
2021-04-08 08:08:59 +00:00
continue;
}
$new_value[] = $v;
}
$this->value = $new_value;
}
}
}