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

TwigExcelExtension   B

Complexity

Total Complexity 8

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 16

Importance

Changes 9
Bugs 0 Features 3
Metric Value
wmc 8
c 9
b 0
f 3
lcom 1
cbo 16
dl 0
loc 84
rs 8.4614

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A getFunctions() 0 4 1
A getTokenParsers() 0 17 1
A getNodeVisitors() 0 6 1
A getName() 0 4 1
A mergeStyles() 0 8 3
1
<?php
2
3
namespace MewesK\TwigExcelBundle\Twig;
4
5
use MewesK\TwigExcelBundle\Twig\NodeVisitor\SyntaxCheckNodeVisitor;
6
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsBlockTokenParser;
7
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsCellTokenParser;
8
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsCenterTokenParser;
9
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsDocumentTokenParser;
10
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsDrawingTokenParser;
11
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsFooterTokenParser;
12
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsHeaderTokenParser;
13
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsLeftTokenParser;
14
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsMacroTokenParser;
15
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsRightTokenParser;
16
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsRowTokenParser;
17
use MewesK\TwigExcelBundle\Twig\TokenParser\XlsSheetTokenParser;
18
use Twig_Error_Runtime;
19
use Twig_Extension;
20
use Twig_SimpleFunction;
21
22
/**
23
 * Class TwigExcelExtension
24
 *
25
 * @package MewesK\TwigExcelBundle\Twig
26
 */
27
class TwigExcelExtension extends Twig_Extension
28
{
29
    /**
30
     * @var bool
31
     */
32
    private $preCalculateFormulas;
33
    /**
34
     * @var null|string
35
     */
36
    private $diskCachingDirectory;
37
38
    /**
39
     * @param bool $preCalculateFormulas
40
     * @param null|string $diskCachingDirectory
41
     */
42
    public function __construct($preCalculateFormulas = true, $diskCachingDirectory = null)
43
    {
44
        $this->preCalculateFormulas = $preCalculateFormulas;
45
        $this->diskCachingDirectory = $diskCachingDirectory;
46
    }
47
48
    /**
49
     * {@inheritdoc}
50
     */
51
    public function getFunctions()
52
    {
53
        return [new Twig_SimpleFunction('xlsmergestyles', [$this, 'mergeStyles'])];
54
    }
55
56
    /**
57
     * {@inheritdoc}
58
     */
59
    public function getTokenParsers()
60
    {
61
        return [
62
            new XlsBlockTokenParser(),
63
            new XlsCellTokenParser(),
64
            new XlsCenterTokenParser(),
65
            new XlsDocumentTokenParser($this->preCalculateFormulas, $this->diskCachingDirectory),
66
            new XlsDrawingTokenParser(),
67
            new XlsFooterTokenParser(),
68
            new XlsHeaderTokenParser(),
69
            new XlsLeftTokenParser(),
70
            new XlsMacroTokenParser(),
71
            new XlsRightTokenParser(),
72
            new XlsRowTokenParser(),
73
            new XlsSheetTokenParser()
74
        ];
75
    }
76
77
    /**
78
     * {@inheritdoc}
79
     */
80
    public function getNodeVisitors()
81
    {
82
        return [
83
            new SyntaxCheckNodeVisitor()
84
        ];
85
    }
86
87
    /**
88
     * {@inheritdoc}
89
     */
90
    public function getName()
91
    {
92
        return 'excel_extension';
93
    }
94
95
    /**
96
     * @param array $style1
97
     * @param array $style2
98
     *
99
     * @return array
100
     * @throws Twig_Error_Runtime
101
     */
102
    public function mergeStyles(array $style1, array $style2)
103
    {
104
        if (!is_array($style1) || !is_array($style2)) {
105
            throw new Twig_Error_Runtime('The xlsmergestyles function only works with arrays.');
106
        }
107
108
        return array_merge_recursive($style1, $style2);
109
    }
110
} 
111