sFactoryClass = $sFactoryClass; $this->sTag = call_user_func([$sFactoryClass, 'GetTwigTagName']); $this->sBlockClassName = call_user_func([$sFactoryClass, 'GetUIBlockClassName']); $this->bHasSubBlocks = is_subclass_of($this->sBlockClassName, "Combodo\\iTop\\Application\\UI\\Base\\Layout\\UIContentBlock") || $this->sBlockClassName == "Combodo\\iTop\\Application\\UI\\Base\\Layout\\UIContentBlock"; } /** * @inheritDoc */ public function parse(Token $token) { $iLineno = $token->getLine(); $oStream = $this->parser->getStream(); $sType = $oStream->expect(Token::NAME_TYPE)->getValue(); $oParams = $this->parser->getExpressionParser()->parseExpression(); $oStream->expect(Token::BLOCK_END_TYPE); if ($this->bHasSubBlocks) { $oBody = $this->parser->subparse([$this, 'decideForEnd'], true); $oStream->expect(Token::BLOCK_END_TYPE); } else { $oBody = null; } return new UIBlockNode($this->sFactoryClass, $this->sBlockClassName, $sType, $oParams, $oBody, $iLineno, $this->getTag()); } /** * @inheritDoc */ public function getTag() { return $this->sTag; } public function decideForEnd(Token $token) { return $token->test('End'.$this->sTag); } }