Completed
Pull Request — master (#223)
by Jaap
07:24
created

DocBlockLexer::getCatchablePatterns()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.9
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace phpDocumentor\Reflection;
6
7
use Doctrine\Common\Lexer\AbstractLexer;
8
9
final class DocBlockLexer extends AbstractLexer
10
{
11
12
    const T_START = 257;
13
    const T_END = 258;
14
    const T_LINE_START = 259;
15
    const T_AT = 260;
16
    const T_COLON = 261;
17
18
19
    const T_STRING = 262;
20
    const T_CHAR = 263;
21
22
    const T_CRLF = 264;
23
    const T_WHITESPACE = 265;
24
25
    const T_CLOSE_CURLY_BRACES = 102;
26
    const T_CLOSE_PARENTHESIS = 103;
27
    const T_COMMA = 104;
28
    const T_EQUALS = 105;
29
    const T_NAMESPACE_SEPARATOR = 107;
30
    const T_OPEN_CURLY_BRACES = 108;
31
    const T_OPEN_PARENTHESIS = 109;
32
    const T_MINUS = 113;
33
    const T_DOT = 114;
34
35
36
37
    /**
38
     * @var array
39
     */
40
    private $noCase = [
41
        '@' => self::T_AT,
42
        '.' => self::T_DOT,
43
        ',' => self::T_COMMA,
44
        '(' => self::T_OPEN_PARENTHESIS,
45
        ')' => self::T_CLOSE_PARENTHESIS,
46
        '{' => self::T_OPEN_CURLY_BRACES,
47
        '}' => self::T_CLOSE_CURLY_BRACES,
48
        '=' => self::T_EQUALS,
49
        ':' => self::T_COLON,
50
        '-' => self::T_MINUS,
51
        '\\' => self::T_NAMESPACE_SEPARATOR,
52
    ];
53
54
    protected function getCatchablePatterns()
55
    {
56
        return [
57
            '\\/\\*\\*',
58
            '[[:blank:]]*\\*\\/',
59
            '[[:blank:]]*\\*',
60
            '[a-z][a-z]*',
61
            '\n',
62
            '[[:blank:]]+'
63
        ];
64
    }
65
66
    protected function getNonCatchablePatterns()
67
    {
68
        return [
69
            '(.)',
70
        ];
71
    }
72
73
    protected function getType(&$value)
74
    {
75
        if (isset($this->noCase[$value])) {
76
            return $this->noCase[$value];
77
        }
78
79
        switch ($value) {
80
            case '/**':
81
                return self::T_START;
82
            case trim($value) === '*/':
83
                return self::T_END;
84
            case '@':
85
                return self::T_AT;
86
            case trim($value) === '*':
87
                return self::T_LINE_START;
88
            case "\n":
89
                return self::T_CRLF;
90
            case strlen($value) > 1:
91
                return self::T_STRING;
92
            case preg_match('/^[[:blank:]]+$/', $value) !== false:
93
                return self::T_WHITESPACE;
94
            default:
95
                return self::T_CHAR;
96
        }
97
    }
98
}
99