/**
* validate partial block token
*
* @param array<string,array|string|integer> $context current compile context
* @param array<boolean|integer|string|array> $vars parsed arguments list
*
* @return boolean|null Return true when partial block ends
*/
protected static function partialBlock(&$context, $vars)
{
if (count($context['partialblock']) > 0) {
$ended = false;
$append = $context['currentToken'][Token::POS_LOTHER] . $context['currentToken'][Token::POS_LSPACE];
array_walk($context['partialblock'], function (&$pb) use($context, $append) {
$pb .= $append;
});
if ($context['currentToken'][Token::POS_OP] === '/') {
if (static::blockEnd($context, $vars, '#>') !== null) {
$c = $context['stack'][count($context['stack']) - 4];
$found = Partial::resolve($context, $vars[0][0]) !== null;
$v = $found ? "@partial-block{$context['parsed'][0][$c][1][Parser::PARTIALBLOCK]}" : "{$vars[0][0]}";
if ($found) {
$context['partials'][$v] = $context['partialblock'][0];
}
$context['usedPartial'][$v] = $context['partialblock'][0];
Partial::compileDynamic($context, $v);
if ($found) {
Partial::read($context, $vars[0][0]);
}
array_shift($context['partialblock']);
$context['parsed'][0] = array_slice($context['parsed'][0], 0, $c + 1);
$ended = true;
}
}
$append = Token::toString($context['currentToken']);
array_walk($context['partialblock'], function (&$pb) use($context, $append) {
$pb .= $append;
});
return $ended;
}
}