diff options
Diffstat (limited to 'lib/less.php/Tree/Expression.php')
| -rw-r--r-- | lib/less.php/Tree/Expression.php | 97 | 
1 files changed, 97 insertions, 0 deletions
diff --git a/lib/less.php/Tree/Expression.php b/lib/less.php/Tree/Expression.php new file mode 100644 index 0000000..d834354 --- /dev/null +++ b/lib/less.php/Tree/Expression.php @@ -0,0 +1,97 @@ +<?php + +/** + * Expression + * + * @package Less + * @subpackage tree + */ +class Less_Tree_Expression extends Less_Tree{ + +	public $value = array(); +	public $parens = false; +	public $parensInOp = false; +	public $type = 'Expression'; + +	public function __construct( $value, $parens = null ){ +		$this->value = $value; +		$this->parens = $parens; +	} + +    public function accept( $visitor ){ +		$this->value = $visitor->visitArray( $this->value ); +	} + +	public function compile($env) { + +		$doubleParen = false; + +		if( $this->parens && !$this->parensInOp ){ +			Less_Environment::$parensStack++; +		} + +		$returnValue = null; +		if( $this->value ){ + +			$count = count($this->value); + +			if( $count > 1 ){ + +				$ret = array(); +				foreach($this->value as $e){ +					$ret[] = $e->compile($env); +				} +				$returnValue = new Less_Tree_Expression($ret); + +			}else{ + +				if( ($this->value[0] instanceof Less_Tree_Expression) && $this->value[0]->parens && !$this->value[0]->parensInOp ){ +					$doubleParen = true; +				} + +				$returnValue = $this->value[0]->compile($env); +			} + +		} else { +			$returnValue = $this; +		} + +		if( $this->parens ){ +			if( !$this->parensInOp ){ +				Less_Environment::$parensStack--; + +			}elseif( !Less_Environment::isMathOn() && !$doubleParen ){ +				$returnValue = new Less_Tree_Paren($returnValue); + +			} +		} +		return $returnValue; +	} + +    /** +     * @see Less_Tree::genCSS +     */ +    public function genCSS( $output ){ +		$val_len = count($this->value); +		for( $i = 0; $i < $val_len; $i++ ){ +			$this->value[$i]->genCSS( $output ); +			if( $i + 1 < $val_len ){ +				$output->add( ' ' ); +			} +		} +	} + +    public function throwAwayComments() { + +		if( is_array($this->value) ){ +			$new_value = array(); +			foreach($this->value as $v){ +				if( $v instanceof Less_Tree_Comment ){ +					continue; +				} +				$new_value[] = $v; +			} +			$this->value = $new_value; +		} +	} +}  | 
