Completed
Push — master ( 6054a8...c11aa8 )
by Kacper
04:06
created

Django::getMetadata()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 6
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 9
rs 9.6666
1
<?php
2
/**
3
 * Highlighter
4
 *
5
 * Copyright (C) 2016, Some right reserved.
6
 *
7
 * @author Kacper "Kadet" Donat <[email protected]>
8
 *
9
 * Contact with author:
10
 * Xmpp: [email protected]
11
 * E-mail: [email protected]
12
 *
13
 * From Kadet with love.
14
 */
15
16
namespace Kadet\Highlighter\Language\Python;
17
18
19
use Kadet\Highlighter\Language\CommonFeatures;
20
use Kadet\Highlighter\Language\GreedyLanguage;
21
use Kadet\Highlighter\Matcher\CommentMatcher;
22
use Kadet\Highlighter\Matcher\RegexMatcher;
23
use Kadet\Highlighter\Matcher\SubStringMatcher;
24
use Kadet\Highlighter\Parser\CloseRule;
25
use Kadet\Highlighter\Parser\OpenRule;
26
use Kadet\Highlighter\Parser\Rule;
27
use Kadet\Highlighter\Parser\Token\LanguageToken;
28
use Kadet\Highlighter\Parser\TokenFactory;
29
use Kadet\Highlighter\Parser\Validator\Validator;
30
31
class Django extends GreedyLanguage
32
{
33
34
    /**
35
     * Tokenization rules setup
36
     */
37
    public function setupRules()
38
    {
39
        $this->rules->addMany([
40
            'comment'     => new Rule(new CommentMatcher([], [['{#', '#}']]), ['priority' => 0]),
41
            'delimiter'   => new Rule(new RegexMatcher('/((\{[{%]|[%}]\}))/')),
42
            'variable'    => new Rule(new RegexMatcher('/\{\{\s*([a-z]\w*)/')),
43
            'call'        => new Rule(new RegexMatcher('/\{\{.*?\|([a-z]\w*)/')),
44
            'call.template-tag' => new Rule(new RegexMatcher('/{%\s*([a-z]\w*)/')),
45
            'string' => CommonFeatures::strings(['single' => '\'', 'double' => '"'], [
46
                'context' => ['!string', '!comment']
47
            ]),
48
        ]);
49
    }
50
51
    public function getEnds($embedded = false)
52
    {
53
        return [
54
            'variable' => [
55
                new OpenRule(new SubStringMatcher('{{'), [
56
                    'factory'  => new TokenFactory(LanguageToken::class),
57
                    'priority' => 1000,
58
                    'inject'   => $this,
59
                    'context'  => Validator::everywhere(),
60
                    'language' => null
61
                ]),
62
                new CloseRule(new SubStringMatcher('}}'), [
63
                    'factory'  => new TokenFactory(LanguageToken::class),
64
                    'priority' => 1000,
65
                    'language' => $this
66
                ]),
67
            ],
68
            'template-tag' => [
69
                new OpenRule(new SubStringMatcher('{%'), [
70
                    'factory'  => new TokenFactory(LanguageToken::class),
71
                    'inject'   => $this,
72
                    'priority' => 1000,
73
                    'context'  => Validator::everywhere(),
74
                    'language' => null
75
                ]),
76
                new CloseRule(new SubStringMatcher('%}'), [
77
                    'factory'  => new TokenFactory(LanguageToken::class),
78
                    'language' => $this,
79
                    'priority' => 1000,
80
                ]),
81
            ],
82
            'comment' => [
83
                new OpenRule(new SubStringMatcher('{#'), [
84
                    'factory'  => new TokenFactory(LanguageToken::class),
85
                    'inject'   => $this,
86
                    'priority' => 1000,
87
                    'language' => null
88
                ]),
89
                new CloseRule(new SubStringMatcher('#}'), [
90
                    'factory'  => new TokenFactory(LanguageToken::class),
91
                    'language' => $this,
92
                    'priority' => 1000,
93
                ]),
94
            ]
95
        ];
96
    }
97
98
    /**
99
     * Unique language identifier, for example 'php'
100
     *
101
     * @return string
102
     */
103
    public function getIdentifier()
104
    {
105
        return 'python.django';
106
    }
107
108
    public static function getMetadata()
109
    {
110
        return [
111
            'name'       => ['django', 'jinja'],
112
            'mime'       => ['application/x-django-templating', 'application/x-jinja'],
113
            'standalone' => false,
114
            'injectable' => true
115
        ];
116
    }
117
}
118