function testFunctionsGeneration() { $state = new PHPTAL_Php_State($this->newPHPTAL()); $codewriter = new PHPTAL_Php_CodeWriter($state); $codewriter->doFunction('test1', '$tpl'); $codewriter->pushHTML($codewriter->interpolateHTML('test1')); $codewriter->doFunction('test2', '$tpl'); $codewriter->pushHTML('test2'); $codewriter->doEnd(); $codewriter->pushHTML('test1'); $codewriter->doEnd(); $res = $codewriter->getResult(); $exp = <<<EOS <?php function test2(\$tpl) {?>test2<?php}?> <?php function test1(\$tpl) {?>test1test1<?php}?> EOS; $res = normalize_phpsource($res, true); $exp = normalize_phpsource($exp, true); $this->assertEquals($exp, $res); }
public function generateCode(PHPTAL_Dom_Element $treeGen) { $codewriter = new PHPTAL_Php_CodeWriter($this->_state); $codewriter->doComment("\n*** DO NOT EDIT THIS FILE ***\n\nGenerated by PHPTAL from " . $this->_sourceFile . " (edit that file instead)"); $codewriter->doFunction($this->_functionName, '$tpl, $ctx'); $codewriter->setFunctionPrefix($this->_functionName . "_"); $codewriter->doSetVar('$_thistpl', '$tpl'); $codewriter->doSetVar('$_translator', '$tpl->getTranslator()'); $treeGen->generateCode($codewriter); $codewriter->doEnd(); return $codewriter->getResult(); }
public function before(PHPTAL_Php_CodeWriter $codewriter) { if ($this->shouldUseCallback()) { $function_base_name = 'slot_' . preg_replace('/[^a-z0-9]/', '_', $this->expression) . '_' . self::$uid++; $codewriter->doFunction($function_base_name, 'PHPTAL $_thistpl, PHPTAL $tpl'); $this->function_name = $codewriter->getFunctionPrefix() . $function_base_name; $codewriter->doSetVar('$ctx', '$tpl->getContext()'); $codewriter->doInitTranslator(); } else { $codewriter->pushCode('ob_start()'); $this->function_name = null; } }
public function before(PHPTAL_Php_CodeWriter $codewriter) { $macroname = strtr(trim($this->expression), '-', '_'); if (!preg_match('/^[a-z0-9_]+$/i', $macroname)) { throw new PHPTAL_ParserException('Bad macro name "' . $macroname . '"', $this->phpelement->getSourceFile(), $this->phpelement->getSourceLine()); } if ($codewriter->functionExists($macroname)) { throw new PHPTAL_TemplateException("Macro {$macroname} is defined twice", $this->phpelement->getSourceFile(), $this->phpelement->getSourceLine()); } $codewriter->doFunction($macroname, 'PHPTAL $_thistpl, PHPTAL $tpl'); $codewriter->doSetVar('$tpl', 'clone $tpl'); $codewriter->doSetVar('$ctx', '$tpl->getContext()'); $codewriter->doInitTranslator(); $codewriter->doXmlDeclaration(true); $codewriter->doDoctype(true); }