diff options
| author | derchris | 2019-02-02 15:35:30 +0100 | 
|---|---|---|
| committer | derchris | 2019-02-02 15:35:30 +0100 | 
| commit | 7ad9f272a482802da2d43fe83841adbe9bcd8cb4 (patch) | |
| tree | 75b43a2a8c3ab3dbdcb0694d135f4729c90b8af7 /lib/less.php/Tree/Call.php | |
| parent | eb6601b2520d48a0be91634fada0389faadde31d (diff) | |
update less.php to PHP 7.x compatible fork
Diffstat (limited to 'lib/less.php/Tree/Call.php')
| -rw-r--r-- | lib/less.php/Tree/Call.php | 121 | 
1 files changed, 121 insertions, 0 deletions
diff --git a/lib/less.php/Tree/Call.php b/lib/less.php/Tree/Call.php new file mode 100644 index 0000000..3c3382d --- /dev/null +++ b/lib/less.php/Tree/Call.php @@ -0,0 +1,121 @@ +<?php + + +/** + * Call + * + * @package Less + * @subpackage tree + */ +class Less_Tree_Call extends Less_Tree{ +    public $value; + +    public $name; +    public $args; +    public $index; +    public $currentFileInfo; +    public $type = 'Call'; + +	public function __construct($name, $args, $index, $currentFileInfo = null ){ +		$this->name = $name; +		$this->args = $args; +		$this->index = $index; +		$this->currentFileInfo = $currentFileInfo; +	} + +    public function accept( $visitor ){ +		$this->args = $visitor->visitArray( $this->args ); +	} + +    // +    // When evaluating a function call, +    // we either find the function in `tree.functions` [1], +    // in which case we call it, passing the  evaluated arguments, +    // or we simply print it out as it appeared originally [2]. +    // +    // The *functions.js* file contains the built-in functions. +    // +    // The reason why we evaluate the arguments, is in the case where +    // we try to pass a variable to a function, like: `saturate(@color)`. +    // The function should receive the value, not the variable. +    // +    public function compile($env=null){ +		$args = array(); +		foreach($this->args as $a){ +			$args[] = $a->compile($env); +		} + +		$nameLC = strtolower($this->name); +		switch($nameLC){ +			case '%': +			$nameLC = '_percent'; +			break; + +			case 'get-unit': +			$nameLC = 'getunit'; +			break; + +			case 'data-uri': +			$nameLC = 'datauri'; +			break; + +			case 'svg-gradient': +			$nameLC = 'svggradient'; +			break; +		} + +		$result = null; +		if( $nameLC === 'default' ){ +			$result = Less_Tree_DefaultFunc::compile(); + +		}else{ + +			if( method_exists('Less_Functions',$nameLC) ){ // 1. +				try { + +					$func = new Less_Functions($env, $this->currentFileInfo); +					$result = call_user_func_array( array($func,$nameLC),$args); + +				} catch (Exception $e) { +					throw new Less_Exception_Compiler('error evaluating function `' . $this->name . '` '.$e->getMessage().' index: '. $this->index); +				} +			} elseif( isset( $env->functions[$nameLC] ) && is_callable( $env->functions[$nameLC] ) ) { +				try { +					$result = call_user_func_array( $env->functions[$nameLC], $args ); +				} catch (Exception $e) { +					throw new Less_Exception_Compiler('error evaluating function `' . $this->name . '` '.$e->getMessage().' index: '. $this->index); +				} +			} +		} + +		if( $result !== null ){ +			return $result; +		} + + +		return new Less_Tree_Call( $this->name, $args, $this->index, $this->currentFileInfo ); +    } + +    /** +     * @see Less_Tree::genCSS +     */ +	public function genCSS( $output ){ + +		$output->add( $this->name . '(', $this->currentFileInfo, $this->index ); +		$args_len = count($this->args); +		for($i = 0; $i < $args_len; $i++ ){ +			$this->args[$i]->genCSS( $output ); +			if( $i + 1 < $args_len ){ +				$output->add( ', ' ); +			} +		} + +		$output->add( ')' ); +	} + + +    //public function toCSS(){ +    //    return $this->compile()->toCSS(); +    //} + +}  | 
