public function parse(Parser $parser, Stream $stream) { $templateNameToken = $stream->expect(Token::IDENTIFIER); $templateName = $templateNameToken->getValue(); $stream->expect(Token::TAG_END); $classNode = $parser->getCurrentClassNode(); if ($classNode->hasChild($templateName)) { throw new ParseException("Block {$templateName} is already defined", $templateNameToken->getLine()); } $parser->enterBlock($templateName); $parser->getCurrentClassNode()->addChild($parser->parseBlock($stream, 'enddefine'), $templateName); $stream->expect(Token::TAG_END); $parser->leaveBlock(); }
public function parse(Parser $parser, Stream $stream) { if (!$parser->inMainScope()) { throw new ParseException("Extends tags must be placed in the main scope. Unexpected extends tag", $stream->current()->getLine()); } $parser->getCurrentClassNode()->setParentTemplate($parser->parseExpression($stream)); }
/** * @param Parser $parser * @param Stream $stream * @param $parentTemplate * * @return ClassNode */ private function parseClass(Parser $parser, Stream $stream, $parentTemplate) { $oldClassNode = $parser->getCurrentClassNode(); $fileNode = $parser->getCurrentFileNode(); /** @var $classNode ClassNode */ $classNode = $fileNode->addClass($fileNode->getNextEmbeddedTemplateName()); $classNode->setParentTemplate($parentTemplate); $parser->setCurrentClassNode($classNode); $classNode->addChild($parser->parseBlock($stream, 'endembed'), ClassNode::MAIN_TEMPLATE_BLOCK); $stream->expect(Token::TAG_END); $parser->setCurrentClassNode($oldClassNode); return $classNode->getClassName(); }
public function parse(Parser $parser, Stream $stream) { $templateNameToken = $stream->expect(Token::IDENTIFIER); $templateName = $templateNameToken->getValue(); $stream->expect(Token::TAG_END); $classNode = $parser->getCurrentClassNode(); if ($classNode->hasChild($templateName)) { throw new ParseException("Block {$templateName} is already defined", $templateNameToken->getLine()); } $parser->enterBlock($templateName); $classNode->addChild($parser->parseBlock($stream, 'endblock'), $templateName); $stream->expect(Token::TAG_END); $parser->leaveBlock(); return $this->helper->createRenderBlockNode($templateName, new TempVariableNode('context')); }