Completed
Push — master ( f55160...29545d )
by Kacper
03:09
created

Language::byFilename()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 2
crap 1
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
namespace Kadet\Highlighter\Language;
16
17
use Kadet\Highlighter\KeyLighter;
18
use Kadet\Highlighter\Parser\Rule;
19
use Kadet\Highlighter\Parser\TokenIterator;
20
use Kadet\Highlighter\Parser\Tokens;
21
22
23
/**
24
 * Class Language
25
 *
26
 * @package Kadet\Highlighter\Language
27
 */
28
abstract class Language
29
{
30
    const EMBEDDED_BY_PARENT = 2;
31
    const EMBEDDED           = true;
32
    const NOT_EMBEDDED       = false;
33
34
    /**
35
     * Parses source and removes wrong tokens.
36
     *
37
     * @param TokenIterator|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 1
    public static function byMime($mime, $params = [])
80
    {
81 1
        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()
90
    {
91 5
        $embedded = $this->getEmbedded();
92 5
        return $this->getIdentifier().(
93
            !empty($embedded)
94
                ? ' + '.implode(', ', array_map(function(Language $e) { return $e->getIdentifier(); }, $embedded))
95 1
                : ''
96 5
        );
97
    }
98
}
99