Mercurial > hg > dml-open-vis
diff src/Kachkaev/JstmplBundle/Twig/JstmplTokenParser.php @ 0:493bcb69166c
added public content
author | Daniel Wolff |
---|---|
date | Tue, 09 Feb 2016 20:54:02 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Kachkaev/JstmplBundle/Twig/JstmplTokenParser.php Tue Feb 09 20:54:02 2016 +0100 @@ -0,0 +1,42 @@ +<?php + +namespace Kachkaev\JstmplBundle\Twig; + +class JstmplTokenParser extends \Twig_TokenParser +{ + public function parse(\Twig_Token $token) + { + $lineno = $token->getLine(); + + $stream = $this->parser->getStream(); + + while (!$stream->test(\Twig_Token::BLOCK_END_TYPE)) { + if ($stream->test(\Twig_Token::NAME_TYPE, 'id')) { + // id='tmpl_id' + $stream->next(); + $stream->expect(\Twig_Token::OPERATOR_TYPE, '='); + $id = $stream->expect(\Twig_Token::STRING_TYPE)->getValue(); + } else { + $token = $stream->getCurrent(); + throw new \Twig_Error_Syntax(sprintf('Unexpected token "%s" of value "%s"', \Twig_Token::typeToEnglish($token->getType(), $token->getLine()), $token->getValue()), $token->getLine()); + } + } + + $stream->expect(\Twig_Token::BLOCK_END_TYPE); + + $endtag = 'end'.$this->getTag(); + $test = function(\Twig_Token $token) use($endtag) { + return $token->test($endtag); + }; + $body = $this->parser->subparse($test, true); + + $stream->expect(\Twig_Token::BLOCK_END_TYPE); + + return new JstmplNode($id, $body, $lineno, $this->getTag()); + } + + public function getTag() + { + return 'jstmpl'; + } +}