/lib/lessphp/Tree/Call.php
PHP | 121 lines | 73 code | 24 blank | 24 comment | 6 complexity | 053e3cf02cc0ca29a5c4b236a23c36a3 MD5 | raw file
Possible License(s): Apache-2.0, LGPL-2.1, BSD-3-Clause, MIT, GPL-3.0
- <?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();
- //}
- }