LightnCandy\Parser::parse PHP Метод

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

Parse the token and return parsed result.
public static parse ( array &$token, array\arraystring | integer> &$context ) : arrayinteger | array>
$token array
$context array\arraystring | integer>
Результат arrayinteger | array>
    public static function parse(&$token, &$context)
    {
        $vars = static::analyze($token[static::POS_INNERTAG], $context);
        if ($token[static::POS_OP] === '>') {
            $fn = static::getPartialName($vars);
        } else {
            if ($token[static::POS_OP] === '#*') {
                $fn = static::getPartialName($vars, 1);
            }
        }
        $avars = static::advancedVariable($vars, $context, static::toString($token));
        if (isset($fn) && $fn !== null) {
            if ($token[static::POS_OP] === '>') {
                $avars[0] = $fn;
            } else {
                if ($token[static::POS_OP] === '#*') {
                    $avars[1] = $fn;
                }
            }
        }
        return array($token[static::POS_BEGINRAW] === '{' || $token[static::POS_OP] === '&' || $context['flags']['noesc'] || $context['rawblock'], $avars);
    }

Usage Example

Пример #1
0
 /**
  * Collect handlebars usage information, detect template error.
  *
  * @param string[] $token detected handlebars {{ }} token
  * @param array<string,array|string|integer> $context current compile context
  */
 protected static function token(&$token, &$context)
 {
     $context['currentToken'] =& $token;
     if (static::rawblock($token, $context)) {
         return Token::toString($token);
     }
     if (static::delimiter($token, $context)) {
         return;
     }
     if (static::isDelimiter($context)) {
         static::spacing($token, $context);
         return;
     }
     if (static::comment($token, $context)) {
         static::spacing($token, $context);
         return;
     }
     list($raw, $vars) = Parser::parse($token, $context);
     $partials = static::partialBlock($context, $vars);
     $partials = static::inlinePartial($context, $vars) || $partials;
     if ($partials) {
         $context['stack'] = array_slice($context['stack'], 0, -4);
         $context['currentToken'][Token::POS_LOTHER] = '';
         $context['currentToken'][Token::POS_LSPACE] = '';
         return;
     }
     // Handle spacing (standalone tags, partial indent)
     static::spacing($token, $context, ($token[Token::POS_OP] === '' || $token[Token::POS_OP] === '&') && (!$context['flags']['else'] || !isset($vars[0][0]) || $vars[0][0] !== 'else') || $context['flags']['nostd'] > 0);
     if (static::operator($token[Token::POS_OP], $context, $vars)) {
         return isset($token[Token::POS_BACKFILL]) ? null : array($raw, $vars);
     }
     if (count($vars) == 0) {
         return $context['error'][] = 'Wrong variable naming in ' . Token::toString($token);
     }
     if (!isset($vars[0])) {
         return $context['error'][] = 'Do not support name=value in ' . Token::toString($token) . ', you should use it after a custom helper.';
     }
     $context['usedFeature'][$raw ? 'raw' : 'enc']++;
     foreach ($vars as $var) {
         if (!isset($var[0]) || $var[0] === 0) {
             if ($context['level'] == 0) {
                 $context['usedFeature']['rootthis']++;
             }
             $context['usedFeature']['this']++;
         }
     }
     if (!isset($vars[0][0])) {
         return array($raw, $vars);
     }
     if ($vars[0][0] === 'else' && $context['flags']['else']) {
         static::doElse($context, $vars);
         return array($raw, $vars);
     }
     if (!static::helper($context, $vars[0][0])) {
         static::lookup($context, $vars);
         static::log($context, $vars);
     }
     return array($raw, $vars);
 }