Viewing file: Call.php (2.84 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/** * Call * * @package Less * @subpackage tree */ class Less_Tree_Call extends Less_Tree{ public $value;
protected $name; protected $args; protected $index; protected $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(); //}
}
|