Latte\Macros\CoreMacros::macroVar PHP Метод

macroVar() публичный Метод

..} {default ...}
public macroVar ( MacroNode $node, PhpWriter $writer )
$node Latte\MacroNode
$writer Latte\PhpWriter
    public function macroVar(MacroNode $node, PhpWriter $writer)
    {
        if ($node->modifiers) {
            throw new CompileException('Modifiers are not allowed in ' . $node->getNotation());
        }
        if ($node->args === '' && $node->parentNode && $node->parentNode->name === 'switch') {
            return '} else {';
        }
        $var = TRUE;
        $tokens = $writer->preprocess();
        $res = new Latte\MacroTokens();
        while ($tokens->nextToken()) {
            if ($var && $tokens->isCurrent($tokens::T_SYMBOL, $tokens::T_VARIABLE)) {
                if ($node->name === 'default') {
                    $res->append("'" . ltrim($tokens->currentValue(), '$') . "'");
                } else {
                    $res->append('$' . ltrim($tokens->currentValue(), '$'));
                }
                $var = NULL;
            } elseif ($tokens->isCurrent('=', '=>') && $tokens->depth === 0) {
                $res->append($node->name === 'default' ? '=>' : '=');
                $var = FALSE;
            } elseif ($tokens->isCurrent(',') && $tokens->depth === 0) {
                if ($var === NULL) {
                    $res->append($node->name === 'default' ? '=>NULL' : '=NULL');
                }
                $res->append($node->name === 'default' ? ',' : ';');
                $var = TRUE;
            } elseif ($var === NULL && $node->name === 'default' && !$tokens->isCurrent($tokens::T_WHITESPACE)) {
                throw new CompileException("Unexpected '{$tokens->currentValue()}' in {default {$node->args}}");
            } else {
                $res->append($tokens->currentToken());
            }
        }
        if ($var === NULL) {
            $res->append($node->name === 'default' ? '=>NULL' : '=NULL');
        }
        $out = $writer->quotingPass($res)->joinAll();
        return $node->name === 'default' ? "extract([{$out}], EXTR_SKIP)" : "{$out};";
    }