Completed
Push — master ( 9b98d4...f3f280 )
by Maciej
06:39
created

Language   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 5
Bugs 0 Features 0
Metric Value
eloc 20
dl 0
loc 88
ccs 13
cts 13
cp 1
rs 10
c 5
b 0
f 0
wmc 8

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getMetadata() 0 8 1
A byName() 0 3 1
A byMime() 0 3 1
A byFilename() 0 3 1
A getFQN() 0 9 4
1
<?php
2
3
/**
4
 * Highlighter
5
 *
6
 * Copyright (C) 2016, Some right reserved.
7
 *
8
 * @author Kacper "Kadet" Donat <[email protected]>
9
 *
10
 * Contact with author:
11
 * Xmpp: [email protected]
12
 * E-mail: [email protected]
13
 *
14
 * From Kadet with love.
15
 */
16
17
namespace Kadet\Highlighter\Language;
18
19
use Kadet\Highlighter\KeyLighter;
20
use Kadet\Highlighter\Parser\Rule;
21
use Kadet\Highlighter\Parser\Tokens;
22
23
/**
24
 * Class Language
25
 *
26
 * @package Kadet\Highlighter\Language
27
 */
28
abstract class Language
29
{
30
    public const EMBEDDED_BY_PARENT = 2;
31
    public const EMBEDDED           = true;
32
    public const NOT_EMBEDDED       = false;
33
34
    /**
35
     * Parses source and removes wrong tokens.
36
     *
37
     * @param Tokens|string $tokens
38
     *
39
     * @param array                $additional
40
     * @param bool                 $embedded
41
     *
42
     * @return Tokens
43
     */
44
    public abstract function parse($tokens = null, $additional = [], $embedded = false);
45
46
    public abstract function tokenize($source, $additional = [], $offset = 0, $embedded = false);
47
48
    /**
49
     * Unique language identifier, for example 'php'
50
     *
51
     * @return string
52
     */
53
    public abstract function getIdentifier();
54
55
    /**
56
     * Language range Rule(s)
57
     *
58
     * @param $embedded
59
     *
60
     * @return Rule|\Kadet\Highlighter\Parser\Rule[]
61
     */
62
    public abstract function getEnds($embedded = false);
63
64
    /**
65
     * @return Language[]
66
     */
67
    public abstract function getEmbedded();
68
69
    /**
70
     * @param Language $lang
71
     */
72
    public abstract function embed(Language $lang);
73
74 1
    public static function byName($name, $params = [])
75
    {
76 1
        return KeyLighter::get()->languageByName($name, $params);
77
    }
78
79 2
    public static function byMime($mime, $params = [])
80
    {
81 2
        return KeyLighter::get()->languageByMime($mime, $params);
82
    }
83
84 1
    public static function byFilename($filename, $params = [])
85
    {
86 1
        return KeyLighter::get()->languageByExt($filename, $params);
87
    }
88
89 5
    public final function getFQN($class = false)
90
    {
91 5
        $embedded = $this->getEmbedded();
92 5
        return  ($class ? get_class($this) : $this->getIdentifier()) . (
93 5
            !empty($embedded)
94
                ? ' + ' . implode(', ', array_map($class ? 'get_class' : function (Language $e) {
95 1
                    return $e->getIdentifier();
96 1
                }, $embedded))
97 5
                : ''
98
        );
99
    }
100
101
    /**
102
     * Aliases of given language, used for aliases.php file generation.
103
     *
104
     * @return array
105
     *
106
     * @codeCoverageIgnore
107
     */
108
    public static function getMetadata()
109
    {
110
        return [
111
            'name'      => [],
112
            'mime'      => [],
113
            'extension' => [],
114
            'standalone' => true,
115
            'injectable' => false
116
        ];
117
    }
118
}
119