Completed
Push — master ( 3af88c...d76c98 )
by Mewes
05:10
created

XlsBlockTokenParser   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 4
Bugs 0 Features 1
Metric Value
wmc 5
c 4
b 0
f 1
lcom 1
cbo 7
dl 0
loc 49
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A parse() 0 21 3
A decideBlockEnd() 0 4 1
A getTag() 0 4 1
1
<?php
2
3
namespace MewesK\TwigExcelBundle\Twig\TokenParser;
4
5
use MewesK\TwigExcelBundle\Twig\TokenParser\Traits\FixMacroCallsTrait;
6
use MewesK\TwigExcelBundle\Twig\TokenParser\Traits\RemoveTextNodeTrait;
7
use Twig_Error_Syntax;
8
use Twig_Node_Block;
9
use Twig_Node_BlockReference;
10
use Twig_Token;
11
use Twig_TokenParser_Block;
12
13
/**
14
 * Class XlsBlockTokenParser
15
 *
16
 * @package MewesK\TwigExcelBundle\Twig\TokenParser
17
 */
18
class XlsBlockTokenParser extends Twig_TokenParser_Block
19
{
20
    use FixMacroCallsTrait;
21
    use RemoveTextNodeTrait;
22
23
    /**
24
     * @param Twig_Token $token
25
     * @return Twig_Node_BlockReference
26
     * @throws Twig_Error_Syntax
27
     */
28
    public function parse(Twig_Token $token)
29
    {
30
        /**
31
         * @var Twig_Node_BlockReference $blockReference
32
         */
33
        $blockReference = parent::parse($token);
34
        $block = $this->parser->getBlock($blockReference->getAttribute('name'));
35
36
        // prepare block
37
        $this->removeTextNodesRecursively($block);
38
        $this->fixMacroCallsRecursively($block);
39
40
        // mark for syntax checks
41
        foreach ($block->getIterator() as $node) {
42
            if ($node instanceof Twig_Node_Block) {
43
                $node->setAttribute('twigExcelBundle', true);
44
            }
45
        }
46
47
        return $blockReference;
48
    }
49
50
    /**
51
     * @param Twig_Token $token
52
     * @return bool
53
     */
54
    public function decideBlockEnd(Twig_Token $token)
55
    {
56
        return $token->test('endxlsblock');
57
    }
58
59
    /**
60
     * @return string
61
     */
62
    public function getTag()
63
    {
64
        return 'xlsblock';
65
    }
66
}
67