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