/** * {var ...} * {default ...} */ public function macroVar(NMacroNode $node, NPhpWriter $writer) { $out = ''; $var = TRUE; $tokenizer = $writer->preprocess(); while ($token = $tokenizer->fetchToken()) { if ($var && ($token['type'] === NMacroTokenizer::T_SYMBOL || $token['type'] === NMacroTokenizer::T_VARIABLE)) { if ($node->name === 'default') { $out .= "'" . ltrim($token['value'], "$") . "'"; } else { $out .= '$' . ltrim($token['value'], "$"); } $var = NULL; } elseif (($token['value'] === '=' || $token['value'] === '=>') && $token['depth'] === 0) { $out .= $node->name === 'default' ? '=>' : '='; $var = FALSE; } elseif ($token['value'] === ',' && $token['depth'] === 0) { $out .= $node->name === 'default' ? ',' : ';'; $var = TRUE; } elseif ($var === NULL && $node->name === 'default' && $token['type'] !== NMacroTokenizer::T_WHITESPACE) { throw new NCompileException("Unexpected '$token[value]' in {default $node->args}"); } else { $out .= $writer->canQuote($tokenizer) ? "'$token[value]'" : $token['value']; } } return $node->name === 'default' ? "extract(array($out), EXTR_SKIP)" : $out; }