getLine(); $stream = $this->parser->getStream(); list($file, $group, $priority, $attributes) = $this->parseArguments($token); $content = null; if ($file === null) { $content = $this->parser->subparse([$this, 'decideBlockEnd'], true); $stream->expect(\Twig_Token::BLOCK_END_TYPE); } return new TwigNodeScript($content, $file, $group, $priority, $attributes, $lineno, $this->getTag()); } /** * @param \Twig_Token $token * @return array */ protected function parseArguments(\Twig_Token $token) { $stream = $this->parser->getStream(); $file = null; if (!$stream->test(\Twig_Token::NAME_TYPE) && !$stream->test(\Twig_Token::OPERATOR_TYPE) && !$stream->test(\Twig_Token::BLOCK_END_TYPE)) { $file = $this->parser->getExpressionParser()->parseExpression(); } $group = null; if ($stream->nextIf(\Twig_Token::OPERATOR_TYPE, 'in')) { $group = $this->parser->getExpressionParser()->parseExpression(); } $priority = null; if ($stream->nextIf(\Twig_Token::NAME_TYPE, 'priority')) { $stream->expect(\Twig_Token::PUNCTUATION_TYPE, ':'); $priority = $this->parser->getExpressionParser()->parseExpression(); } $attributes = null; if ($stream->nextIf(\Twig_Token::NAME_TYPE, 'with')) { $attributes = $this->parser->getExpressionParser()->parseExpression(); } $stream->expect(\Twig_Token::BLOCK_END_TYPE); return [$file, $group, $priority, $attributes]; } /** * @param \Twig_Token $token * @return bool */ public function decideBlockEnd(\Twig_Token $token) { return $token->test('endscript'); } /** * Gets the tag name associated with this token parser. * * @return string The tag name */ public function getTag() { return 'script'; } }