Test Failed
Push — master ( eebd04...0e5dd0 )
by Kacper
04:21
created

Prolog::getIdentifier()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 2
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 4
rs 10
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;
17
18
use Kadet\Highlighter\Matcher\CommentMatcher;
19
use Kadet\Highlighter\Matcher\RegexMatcher;
20
use Kadet\Highlighter\Matcher\WordMatcher;
21
use Kadet\Highlighter\Parser\Rule;
22
23
class Prolog extends GreedyLanguage
24
{
25
    /**
26
     * Tokenization rules
27
     */
28
    public function setupRules()
29
    {
30
        $this->rules->addMany([
31
            'keyword' => new Rule(new WordMatcher(['is', 'forall', 'write', 'catch', 'throw', 'garbage_collect'])),
32
33
            'constant' => new Rule(new WordMatcher(['fail', 'true', 'No', 'Yes', '_']), ['priority' => 3]),
34
            'comment'  => new Rule(new CommentMatcher(['%'], [['/*', '*/']]), ['priority' => 20]),
35
36
            'symbol.function' => new Rule(new RegexMatcher('/([a-z]\w*)/'), ['priority' => 3]),
37
38
            'variable'        => new Rule(new RegexMatcher('/([A-Z]\w*)/')),
39
            'string'   => CommonFeatures::strings(['single' => '\'', 'double' => '"']),
40
41
            'number'          => new Rule(new RegexMatcher('/\b(\d+(?>(?>\.|e[+-]?)\d+)?|0o[0-7]+|0x[0-9a-f])\b/i'), ['context' => ['!string', '!comment']]),
42
            'operator'        => new Rule(new WordMatcher(['!', '@?>=?', '@?<=?', '\??==?', '[:\\?]?-', '\\\\?\+', '[-*]?->', ':=', '=[\\\\@:]='], ['escape' => false, 'separated' => false]), [
43
                'priority' => -1,
44
                'context'  => ['!comment', '!string']
45
            ]),
46
            'operator.punctuation' => new Rule(new RegexMatcher('/([,.;])/'))
47
        ]);
48
    }
49
50
    /** {@inheritdoc} */
51
    public function getIdentifier()
52
    {
53
        return 'prolog';
54
    }
55
56
    public static function getMetadata()
57
    {
58
        return [
59
            'name'      => ['prolog'],
60
            'mime'      => ['text/x-prolog'],
61
            'extension' => ['*.prolog']
62
        ];
63
    }
64
}
65