You are here

public function SassScriptLexer::lex in Sassy 7.3

Same name and namespace in other branches
  1. 7 phamlp/sass/script/SassScriptLexer.php \SassScriptLexer::lex()

Lex an expression into SassScript tokens.

Parameters

string expression to lex:

SassContext the context in which the expression is lexed:

Return value

array tokens

File

phpsass/script/SassScriptLexer.php, line 56

Class

SassScriptLexer
SassScriptLexer class. Lexes SassSCript into tokens for the parser.

Code

public function lex($string, $context) {
  $tokens = array();
  while ($string !== false) {
    if (($match = $this
      ->isWhitespace($string)) !== false) {
      $tokens[] = null;
    }
    elseif (($match = SassScriptFunction::isa($string)) !== false) {
      preg_match(SassScriptFunction::MATCH_FUNC, $match, $matches);
      if (!isset($matches[SassScriptFunction::ARGS])) {
        print_r($string);
      }
      $args = array();
      foreach (SassScriptFunction::extractArgs($matches[SassScriptFunction::ARGS]) as $expression) {
        $args[] = $this->parser
          ->evaluate($expression, $context);
      }
      $tokens[] = new SassScriptFunction($matches[SassScriptFunction::NAME], $args);
    }
    elseif (($match = SassString::isa($string)) !== false) {
      $tokens[] = new SassString($match);
    }
    elseif (($match = SassBoolean::isa($string)) !== false) {
      $tokens[] = new SassBoolean($match);
    }
    elseif (($match = SassColour::isa($string)) !== false) {
      $tokens[] = new SassColour($match);
    }
    elseif (($match = SassNumber::isa($string)) !== false) {
      $tokens[] = new SassNumber($match);
    }
    elseif (($match = SassScriptOperation::isa($string)) !== false) {
      $tokens[] = new SassScriptOperation($match);
    }
    elseif (($match = SassScriptVariable::isa($string)) !== false) {
      $tokens[] = new SassScriptVariable($match);
    }
    else {
      $_string = $string;
      $match = '';
      while (strlen($_string) && !$this
        ->isWhitespace($_string)) {
        foreach (SassScriptOperation::$inStrOperators as $operator) {
          if (substr($_string, 0, strlen($operator)) == $operator) {
            break 2;
          }
        }
        $match .= $_string[0];
        $_string = substr($_string, 1);
      }
      $tokens[] = new SassString($match);
    }
    $string = substr($string, strlen($match));
  }
  return $tokens;
}