* @author Kornel LesiƄski * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License * @version SVN: $Id: DefineMacro.php 609 2009-05-21 21:40:08Z kornel $ * @link http://phptal.org/ */ /** * METAL Specification 1.0 * * argument ::= Name * * Example: * *

* Copyright 2001, Foobar Inc. *

* * PHPTAL: * * *

* Copyright 2001, Foobar Inc. *

* * * @package PHPTAL * @subpackage Php.attribute.metal * @author Laurent Bedubourg */ class PHPTAL_Php_Attribute_METAL_DefineMacro extends PHPTAL_Php_Attribute { 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"); } $codewriter->doFunction($macroname, 'PHPTAL $_thistpl, PHPTAL $tpl'); $codewriter->doSetVar('$tpl', 'clone $tpl'); $codewriter->doSetVar('$ctx', '$tpl->getContext()'); $codewriter->doSetVar('$_translator', '$tpl->getTranslator()'); $codewriter->doXmlDeclaration(); $codewriter->doDoctype(); } public function after(PHPTAL_Php_CodeWriter $codewriter) { $codewriter->doEnd(); } }