LightnCandy\Expression::analyze PHP Метод

analyze() публичный статический Метод

Analyze an expression
public static analyze ( array\arraystring | integer> $context, arraystring | integer> $var ) : arrayboolean | array>
$context array\arraystring | integer>
$var arraystring | integer>
Результат arrayboolean | array>
    public static function analyze($context, $var)
    {
        $levels = 0;
        $spvar = false;
        if (isset($var[0])) {
            // trace to parent
            if (!is_string($var[0]) && is_int($var[0])) {
                $levels = array_shift($var);
            }
        }
        if (isset($var[0])) {
            // handle @root, @index, @key, @last, etc
            if ($context['flags']['spvar']) {
                if (substr($var[0], 0, 1) === '@') {
                    $spvar = true;
                    $var[0] = substr($var[0], 1);
                }
            }
        }
        return array($levels, $spvar, $var);
    }

Usage Example

Пример #1
0
 /**
  * Return compiled PHP code for a handlebars block end token
  *
  * @param array<string,array|string|integer> $context current compile context
  * @param array<boolean|integer|string|array> $vars parsed arguments list
  * @param string|null $match should also match to this operator
  *
  * @return boolean Return true
  */
 protected static function blockEnd(&$context, &$vars, $match = null)
 {
     $context['level']--;
     $c = count($context['stack']) - 2;
     $pop = $c >= 0 ? $context['stack'][$c + 1] : '';
     if ($match !== null && $match !== $pop) {
         return;
     }
     $pop2 = $c >= 0 ? $context['stack'][$c] : '';
     switch ($context['currentToken'][Token::POS_INNERTAG]) {
         case 'with':
             if (!$context['flags']['nohbh']) {
                 if ($pop2 !== '[with]') {
                     $context['error'][] = 'Unexpect token: {{/with}} !';
                     return;
                 }
             }
             return true;
     }
     switch ($pop) {
         case '#':
         case '^':
             $elsechain = array_shift($context['elselvl']);
             if (isset($elsechain[0])) {
                 $context['currentToken'][Token::POS_RSPACE] = $context['currentToken'][Token::POS_BACKFILL] = '{{/' . implode('}}{{/', $elsechain) . '}}' . Token::toString($context['currentToken']) . $context['currentToken'][Token::POS_RSPACE];
                 return Token::POS_BACKFILL;
             }
         case '#>':
         case '#*':
             list($levels, $spvar, $var) = Expression::analyze($context, $vars[0]);
             $v = Expression::toString($levels, $spvar, $var);
             if ($pop2 !== $v) {
                 $context['error'][] = 'Unexpect token ' . Token::toString($context['currentToken']) . " ! Previous token {{{$pop}{$pop2}}} is not closed";
                 return;
             }
             return true;
         default:
             $context['error'][] = 'Unexpect token: ' . Token::toString($context['currentToken']) . ' !';
             return;
     }
 }
All Usage Examples Of LightnCandy\Expression::analyze