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 = []; 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([$func, $nameLC], $args); } catch (Exception $e) { throw new Less_Exception_Compiler('error evaluating function `'.$this->name.'` '.$e->getMessage().' index: '.$this->index); } } else if (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(); //} }