/**
  * Quotes symbols to strings.
  * @return MacroTokens
  */
 public function quoteFilter(MacroTokens $tokens)
 {
     $res = new MacroTokens();
     while ($tokens->nextToken()) {
         $res->append($tokens->isCurrent(MacroTokens::T_SYMBOL) && (!$tokens->isPrev() || $tokens->isPrev(',', '(', '[', '=>', ':', '?', '.', '<', '>', '<=', '>=', '===', '!==', '==', '!=', '<>', '&&', '||', '=', 'and', 'or', 'xor', '??')) && (!$tokens->isNext() || $tokens->isNext(',', ';', ')', ']', '=>', ':', '?', '.', '<', '>', '<=', '>=', '===', '!==', '==', '!=', '<>', '&&', '||', 'and', 'or', 'xor', '??')) ? "'" . $tokens->currentValue() . "'" : $tokens->currentToken());
     }
     return $res;
 }
示例#2
0
文件: PhpWriter.php 项目: nette/latte
 /**
  * Syntax $entry in [item1, item2].
  * @return MacroTokens
  */
 public function inOperatorPass(MacroTokens $tokens)
 {
     while ($tokens->nextToken()) {
         if ($tokens->isCurrent($tokens::T_VARIABLE)) {
             $start = $tokens->position;
             $depth = $tokens->depth;
             $expr = $arr = [];
             $expr[] = $tokens->currentToken();
             while ($tokens->isNext($tokens::T_VARIABLE, $tokens::T_SYMBOL, $tokens::T_NUMBER, $tokens::T_STRING, '[', ']', '(', ')', '->') && !$tokens->isNext('in')) {
                 $expr[] = $tokens->nextToken();
             }
             if ($depth === $tokens->depth && $tokens->nextValue('in') && ($arr[] = $tokens->nextToken('['))) {
                 while ($tokens->isNext()) {
                     $arr[] = $tokens->nextToken();
                     if ($tokens->isCurrent(']') && $tokens->depth === $depth) {
                         $new = array_merge($tokens->parse('in_array('), $expr, $tokens->parse(', '), $arr, $tokens->parse(', TRUE)'));
                         array_splice($tokens->tokens, $start, $tokens->position - $start + 1, $new);
                         $tokens->position = $start + count($new) - 1;
                         continue 2;
                     }
                 }
             }
             $tokens->position = $start;
         }
     }
     return $tokens->reset();
 }