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

Language::byFilename()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 2
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
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