Validator::constants()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 5
c 0
b 0
f 0
nc 2
nop 0
dl 0
loc 10
ccs 6
cts 6
cp 1
crap 2
rs 10
1
<?php
2
3
namespace Bavix\Lexer;
4
5
class Validator
6
{
7
8
    const T_EQUAL = 100000;
9
    const T_FOR_IN = self::T_EQUAL - 1;
10
11
    const T_NULL = self::T_FOR_IN - 1;
12
    const T_TRUE = self::T_NULL - 1;
13
    const T_FALSE = self::T_TRUE - 1;
14
15
    const T_BRACKET = self::T_FALSE - 1;
16
    const T_ENDBRACKET = self::T_BRACKET - 1;
17
    const T_ENDARRAY = self::T_ENDBRACKET - 1;
18
19
    const T_HELPER = self::T_ENDARRAY - 1;
20
    const T_ENDHELPER = self::T_HELPER - 1;
21
22
    const T_WITH = self::T_ENDHELPER - 1;
23
    const T_ENDWITH = self::T_WITH - 1;
24
25
    const T_FORELSE = self::T_ENDWITH - 1;
26
27
    const T_DOT = self::T_FORELSE - 1;
28
    const T_AT = self::T_DOT - 1;
29
30
    const T_CONCAT = self::T_AT - 1;
31
    const T_COMMA = self::T_CONCAT - 1;
32
33
    const T_QUESTION_MARK = self::T_COMMA - 1;
34
    const T_EXCLAMATION_MARK = self::T_QUESTION_MARK - 1;
35
36
    const T_MOD = self::T_EXCLAMATION_MARK - 1;
37
38
    const T_SET = self::T_MOD - 1;
39
    const T_ENDSET = self::T_SET - 1;
40
41
    const T_CONSTANT = self::T_ENDSET - 1;
42
43
    protected static $globalTypes = [
44
        '[' => \T_ARRAY,
45
        ']' => self::T_ENDARRAY,
46
        '=' => self::T_EQUAL,
47
        'null' => self::T_NULL,
48
        'true' => self::T_TRUE,
49
        'false' => self::T_FALSE,
50
        '(' => self::T_BRACKET,
51
        ')' => self::T_ENDBRACKET,
52
        '~' => self::T_CONCAT,
53
        ',' => self::T_COMMA,
54
        '.' => self::T_DOT,
55
        '@' => self::T_AT,
56
        '!' => self::T_EXCLAMATION_MARK,
57
        '?' => self::T_QUESTION_MARK,
58
        '%' => self::T_QUESTION_MARK,
59
    ];
60
61
    protected static $lexerTypes = [
62
        Lexer::OPERATOR => [
63
            'helper' => self::T_HELPER,
64
            'endhelper' => self::T_ENDHELPER,
65
66
            'with' => self::T_WITH,
67
            'endwith' => self::T_ENDWITH,
68
69
            'forelse' => self::T_FORELSE,
70
71
            'set' => self::T_SET,
72
            'endset' => self::T_ENDSET,
73
        ],
74
    ];
75
76
    /**
77
     * @param array|string $type
78
     *
79
     * @return int|string
80
     */
81 32
    public static function getValue($type)
82
    {
83
84 32
        if (!is_array($type)) {
85 32
            return \T_STRING;
86
        }
87
88 32
        return $type[0];
89
    }
90
91
    /**
92
     * @return array
93
     */
94 25
    protected static function constants()
95
    {
96 25
        static $_;
97
98 25
        if (!$_) {
99 1
            $ref = new \ReflectionClass(static::class);
100 1
            $_ = $ref->getConstants();
101
        }
102
103 25
        return $_;
104
    }
105
106 32
    public static function getType($value, $default, $lexerType)
107
    {
108 32
        if ($lexerType) {
109 28
            if (isset(static::$lexerTypes[$lexerType][$value])) {
110
                return static::$lexerTypes[$lexerType][$value];
111
            }
112
        }
113
114 32
        if (isset(static::$globalTypes[$value])) {
115 18
            return static::$globalTypes[$value];
116
        }
117
118 32
        return $default;
119
    }
120
121
    /**
122
     * @param $type
123
     *
124
     * @return int|string
125
     */
126 25
    public static function get($type)
127
    {
128 25
        if (\is_string($type)) {
129 1
            if (\defined(static::class . '::' . $type)) {
130 1
                return \constant(static::class . '::' . $type);
131
            }
132
133
            if (\defined($type)) {
134
                return \constant($type);
135
            }
136
137
            return \T_STRING;
138
        }
139
140 25
        foreach (static::constants() as $name => $value) {
141 25
            if ($value === $type) {
142 25
                return $name;
143
            }
144
        }
145
146 24
        $token = \token_name($type);
147
148 24
        if ($token === 'UNKNOWN') {
149
            return 'T_STRING';
150
        }
151
152 24
        return $token;
153
    }
154
155
}
156