/** * {_'something'} * {_'something: %foo', foo => 'bar'} * {_ foo => 'bar'}something %foo{/_} * {_ n => 55}%n message{_}%n messages{/_} */ public function macroTranslate(MacroNode $node, PhpWriter $writer) { $tokens = $writer->preprocess(); $msgTokens = new MacroTokens(); $argTokens = NULL; $currTokens = $msgTokens; while ($tokens->nextToken()) { if ($tokens->depth === 0) { if ($tokens->isCurrent('=>') && $argTokens === NULL) { $argTokens = $msgTokens; $msgTokens = NULL; } elseif ($tokens->isCurrent(',') && $argTokens === NULL) { $argTokens = new MacroTokens(); $currTokens = $argTokens; continue; } } $currTokens->append($tokens->currentToken()); } if ($node->parentNode && $node->parentNode->name == '_') { if (isset($node->parentNode->data->plural)) { throw new CompileException("Invalid plural form of {_} macro"); } $node->isEmpty = true; $node->parentNode->data->plural = true; return 'ob_start()'; } $msg = $msgTokens !== NULL ? trim($writer->quoteFilter($msgTokens)->joinAll()) : NULL; if ($msg == "") { $msg = NULL; } $args = 'array(' . ($argTokens !== NULL ? trim($writer->quoteFilter($argTokens)->joinAll()) . ', ' : '') . '\'__hint__\' => $template->getFile() . ":' . $this->compiler->getLine() . '")'; if ($node->closing) { if (isset($node->data->plural)) { return $writer->write('echo %modify($template->translate(array_reverse(array(ob_get_clean(), ob_get_clean())), ' . $args . '))'); } else { return $writer->write('echo %modify($template->translate(ob_get_clean(), ' . $args . '))'); } } elseif ($msg !== NULL) { $node->isEmpty = true; return $writer->write('echo %modify($template->translate(' . $msg . ', ' . $args . '))'); } else { return 'ob_start()'; } }
/** * {var ...} * {default ...} */ public function macroVar(MacroNode $node, PhpWriter $writer) { if ($node->args === '' && $node->parentNode && $node->parentNode->name === 'switch') { return '} else {'; } elseif ($node->name === 'assign') { trigger_error('Macro {assign} is deprecated; use {var} instead.', E_USER_DEPRECATED); } $var = TRUE; $tokens = $writer->preprocess(); $res = new Latte\MacroTokens(); while ($tokens->nextToken()) { if ($var && $tokens->isCurrent(Latte\MacroTokens::T_SYMBOL, Latte\MacroTokens::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) { $res->append($node->name === 'default' ? ',' : ';'); $var = TRUE; } elseif ($var === NULL && $node->name === 'default' && !$tokens->isCurrent(Latte\MacroTokens::T_WHITESPACE)) { throw new CompileException("Unexpected '" . $tokens->currentValue() . "' in {default {$node->args}}"); } else { $res->append($tokens->currentToken()); } } $out = $writer->quoteFilter($res)->joinAll(); return $node->name === 'default' ? "extract(array({$out}), EXTR_SKIP)" : $out; }
/** * {var ...} * {default ...} */ public function macroVar(MacroNode $node, PhpWriter $writer) { $out = ''; $var = TRUE; $tokenizer = $writer->preprocess(); while ($token = $tokenizer->fetchToken()) { if ($var && ($token['type'] === Latte\MacroTokenizer::T_SYMBOL || $token['type'] === Latte\MacroTokenizer::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'] !== Latte\MacroTokenizer::T_WHITESPACE) { throw new CompileException("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; }
macroDebugbreak(MacroNode$node,PhpWriter$writer){return$writer->write(($node->args==NULL?'':'if (!(%node.args)); else').'if (function_exists("debugbreak")) debugbreak(); elseif (function_exists("xdebug_break")) xdebug_break()');}function macroVar(MacroNode$node,PhpWriter$writer){$out='';$var=TRUE;$tokenizer=$writer->preprocess();while($token=$tokenizer->fetchToken()){if($var&&($token['type']===Latte\MacroTokenizer::T_SYMBOL||$token['type']===Latte\MacroTokenizer::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']!==Latte\MacroTokenizer::T_WHITESPACE){throw new CompileException("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;}function