annotate src/Kachkaev/JstmplBundle/Twig/JstmplTokenParser.php @ 1:f38015048f48 tip

Added GPL
author Daniel Wolff
date Sat, 13 Feb 2016 20:43:38 +0100
parents 493bcb69166c
children
rev   line source
Daniel@0 1 <?php
Daniel@0 2
Daniel@0 3 namespace Kachkaev\JstmplBundle\Twig;
Daniel@0 4
Daniel@0 5 class JstmplTokenParser extends \Twig_TokenParser
Daniel@0 6 {
Daniel@0 7 public function parse(\Twig_Token $token)
Daniel@0 8 {
Daniel@0 9 $lineno = $token->getLine();
Daniel@0 10
Daniel@0 11 $stream = $this->parser->getStream();
Daniel@0 12
Daniel@0 13 while (!$stream->test(\Twig_Token::BLOCK_END_TYPE)) {
Daniel@0 14 if ($stream->test(\Twig_Token::NAME_TYPE, 'id')) {
Daniel@0 15 // id='tmpl_id'
Daniel@0 16 $stream->next();
Daniel@0 17 $stream->expect(\Twig_Token::OPERATOR_TYPE, '=');
Daniel@0 18 $id = $stream->expect(\Twig_Token::STRING_TYPE)->getValue();
Daniel@0 19 } else {
Daniel@0 20 $token = $stream->getCurrent();
Daniel@0 21 throw new \Twig_Error_Syntax(sprintf('Unexpected token "%s" of value "%s"', \Twig_Token::typeToEnglish($token->getType(), $token->getLine()), $token->getValue()), $token->getLine());
Daniel@0 22 }
Daniel@0 23 }
Daniel@0 24
Daniel@0 25 $stream->expect(\Twig_Token::BLOCK_END_TYPE);
Daniel@0 26
Daniel@0 27 $endtag = 'end'.$this->getTag();
Daniel@0 28 $test = function(\Twig_Token $token) use($endtag) {
Daniel@0 29 return $token->test($endtag);
Daniel@0 30 };
Daniel@0 31 $body = $this->parser->subparse($test, true);
Daniel@0 32
Daniel@0 33 $stream->expect(\Twig_Token::BLOCK_END_TYPE);
Daniel@0 34
Daniel@0 35 return new JstmplNode($id, $body, $lineno, $this->getTag());
Daniel@0 36 }
Daniel@0 37
Daniel@0 38 public function getTag()
Daniel@0 39 {
Daniel@0 40 return 'jstmpl';
Daniel@0 41 }
Daniel@0 42 }