Ejemplo n.º 1
0
 /**
  * Return compiled PHP code for a handlebars token
  *
  * @param array<string,array|string|integer> $context current compile context
  * @param array<string,array|boolean> $info parsed information
  *
  * @return string Return compiled code segment for the token
  */
 protected static function compileToken(&$context, $info)
 {
     list($raw, $vars, $token, $indent) = $info;
     $context['tokens']['partialind'] = $indent;
     $context['currentToken'] = $token;
     // Do not touch the tag, keep it as is.
     if ($raw === -1) {
         return ".'" . Token::toString($token) . "'.";
     }
     if ($ret = static::operator($token[Token::POS_OP], $context, $vars)) {
         return $ret;
     }
     if (isset($vars[0][0])) {
         if ($ret = static::customHelper($context, $vars, $raw)) {
             return $ret;
         }
         if ($vars[0][0] === 'else') {
             return static::doElse($context);
         }
         if ($vars[0][0] === 'lookup') {
             return static::compileLookup($context, $vars, $raw);
         }
     }
     return static::compileVariable($context, $vars, $raw);
 }
Ejemplo n.º 2
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);
 }