You are here

function lessc::compileValue in Less CSS Preprocessor 6.3

Same name and namespace in other branches
  1. 6 lessc.inc.php \lessc::compileValue()
6 calls to lessc::compileValue()
lessc::chunk in lessphp/lessc.inc.php
lessc::compileProperty in lessphp/lessc.inc.php
lessc::evaluate in lessphp/lessc.inc.php
lessc::lib_quote in lessphp/lessc.inc.php
lessc::lib_unquote in lessphp/lessc.inc.php

... See full list

File

lessphp/lessc.inc.php, line 751

Class

lessc

Code

function compileValue($value) {
  switch ($value[0]) {
    case 'list':

      // [1] - delimiter
      // [2] - array of values
      return implode($value[1], array_map(array(
        $this,
        'compileValue',
      ), $value[2]));
    case 'keyword':

    // [1] - the keyword
    case 'number':

      // [1] - the number
      return $value[1];
    case 'expression':

      // [1] - operator
      // [2] - value of left hand side
      // [3] - value of right
      return $this
        ->compileValue($this
        ->evaluate($value[1], $value[2], $value[3]));
    case 'string':

      // [1] - contents of string (includes quotes)
      // search for inline variables to replace
      $replace = array();
      if (preg_match_all('/{(' . $this
        ->preg_quote($this->vPrefix) . '[\\w-_][0-9\\w-_]*?)}/', $value[1], $m)) {
        foreach ($m[1] as $name) {
          if (!isset($replace[$name])) {
            $replace[$name] = $this
              ->compileValue(array(
              'variable',
              $name,
            ));
          }
        }
      }
      foreach ($replace as $var => $val) {

        // strip quotes
        if (preg_match('/^(["\']).*?(\\1)$/', $val)) {
          $val = substr($val, 1, -1);
        }
        $value[1] = str_replace('{' . $var . '}', $val, $value[1]);
      }
      return $value[1];
    case 'color':

      // [1] - red component (either number for a %)
      // [2] - green component
      // [3] - blue component
      // [4] - optional alpha component
      if (count($value) == 5) {

        // rgba
        return 'rgba(' . $value[1] . ',' . $value[2] . ',' . $value[3] . ',' . $value[4] . ')';
      }
      $out = '#';
      foreach (range(1, 3) as $i) {
        $out .= ($value[$i] < 16 ? '0' : '') . dechex($value[$i]);
      }
      return $out;
    case 'variable':

      // [1] - the name of the variable including @
      $tmp = $this
        ->compileValue($this
        ->getVal($value[1], $this
        ->pushName($value[1])));
      $this
        ->popName();
      return $tmp;
    case 'negative':

      // [1] - some value that needs to become negative
      return $this
        ->compileValue($this
        ->reduce($value));
    case 'function':

      // [1] - function name
      // [2] - some value representing arguments
      // see if there is a library function for this func
      $f = array(
        $this,
        'lib_' . $value[1],
      );
      if (is_callable($f)) {
        return call_user_func($f, $value[2]);
      }
      return $value[1] . '(' . $this
        ->compileValue($value[2]) . ')';
    default:

      // assumed to be unit
      return $value[1] . $value[0];
  }
}