Completed
Push — master ( edfa10...cc4cee )
by Mewes
02:10
created

XlsBlockTokenParser::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 5
rs 9.4285
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace MewesK\TwigExcelBundle\Twig\TokenParser;
4
5
use MewesK\TwigExcelBundle\Twig\NodeHelper;
6
use Twig_Error_Syntax;
7
use Twig_Node_Block;
8
use Twig_Node_BlockReference;
9
use Twig_Parser;
10
use Twig_Token;
11
use Twig_TokenParser;
12
use Twig_TokenParser_Block;
13
14
/**
15
 * Class XlsBlockTokenParser
16
 *
17
 * @package MewesK\TwigExcelBundle\Twig\TokenParser
18
 */
19
class XlsBlockTokenParser extends Twig_TokenParser
20
{
21
    private $baseTokenParser;
22
23
    public function __construct()
24
    {
25
        // instantiate Twig block parser since final classes cannot be inherited (Twig 2.x fix)
26
        $this->baseTokenParser = new Twig_TokenParser_Block();
27
    }
28
29
    /**
30
     * @param Twig_Token $token
31
     * @return Twig_Node_BlockReference
32
     * @throws Twig_Error_Syntax
33
     */
34
    public function parse(Twig_Token $token)
35
    {
36
        /**
37
         * @var Twig_Node_BlockReference $blockReference
38
         */
39
        $blockReference = $this->baseTokenParser->parse($token);
40
        /**
41
         * @var Twig_Node_Block $block
42
         */
43
        $block = $this->parser->getBlock($blockReference->getAttribute('name'));
44
45
        // prepare block
46
        NodeHelper::removeTextNodesRecursively($block, $this->parser);
47
        NodeHelper::fixMacroCallsRecursively($block);
48
49
        // mark for syntax checks
50
        foreach ($block->getIterator() as $node) {
51
            if ($node instanceof Twig_Node_Block) {
52
                $node->setAttribute('twigExcelBundle', true);
53
            }
54
        }
55
56
        return $blockReference;
57
    }
58
59
    /**
60
     * @param Twig_Token $token
61
     * @return bool
62
     */
63
    public function decideBlockEnd(Twig_Token $token)
64
    {
65
        return $token->test('endxlsblock');
66
    }
67
68
    /**
69
     * @return string
70
     */
71
    public function getTag()
72
    {
73
        return 'xlsblock';
74
    }
75
76
    public function setParser(Twig_Parser $parser)
77
    {
78
        parent::setParser($parser);
79
        $this->baseTokenParser->setParser($parser);
80
    }
81
}
82