name, $call->args, $call->index, $call->currentFileInfo); } public function compile($env = null) { if (! $env) { // Not sure how to trigger this, but if there is no $env, there is nothing we can do return parent::compile($env); } $keyWord = null; foreach ($this->args as $arg) { if (! is_array($arg->value)) { continue; } $name = null; if ($arg->value[0] instanceof Less_Tree_Keyword) { $keyWord = $arg->value[0]->value; } if ($arg->value[0] instanceof Less_Tree_Variable) { // This is the case when defining a variable with a callable LESS rules such as fade, fadeout.. // Example: `@foo: #fff; @foo-bar: fade(@foo, 10);` $name = $arg->value[0]->name; } elseif ($arg->value[0] instanceof ColorPropOrVariable) { // This is the case when defining a CSS rule using the LESS functions and passing // a variable as an argument to them. Example: `... { color: fade(@foo, 10%); }` $name = $arg->value[0]->getVariable()->name; } if ($name) { foreach ($env->frames as $frame) { if (($v = $frame->variable($name))) { // Variables from the frame stack are always of type LESS Tree Rule $vr = $v->value; if ($vr instanceof Less_Tree_Value) { // Get the actual color prop, otherwise this may cause an invalid argument error $vr = $vr->compile($env); } if ($vr instanceof DeferredColorProp) { if (! $vr->hasReference()) { // Should never happen, though just for safety's sake $vr->compile($env); } if ($this->name === 'var') { // If calling var() CSS function, get the next variable in variable references // if keyword value and color property name are same if (substr($keyWord ?? '', 2) === $vr->getName()) { // Get the uppermost variable of the variable references in case the keyword // value and color property name are same. $vr = $vr->getRef(); } } else { // If not calling var() CSS function get the uppermost variable of the // variable references while (! $vr instanceof ColorProp) { $vr = $vr->getRef(); } } } elseif ($vr instanceof Less_Tree_Color) { // Only if keyword value and color property name are not same then set variable to // ColorProp::fromColor($vr) if (substr($keyWord ?? '', 2) !== substr($name, 1)) { $vr = ColorProp::fromColor($vr); $vr->setName($name); } } $arg->value[0] = $vr; break; } } } } return parent::compile($env); } }