@@ -7,32 +7,32 @@ discard block |
||
7 | 7 | const TOKEN = '/{([[:alpha:]]+)(\d+)}/i'; |
8 | 8 | const MAP = [ |
9 | 9 | // Empty part of #id and .class |
10 | - [ '(?<=^|\s) # The begining or an empty space. |
|
10 | + ['(?<=^|\s) # The begining or an empty space. |
|
11 | 11 | (?=[.#\[]) # . | # | [', |
12 | 12 | '*', |
13 | 13 | 'TAG', |
14 | - false ], |
|
14 | + false], |
|
15 | 15 | // #id |
16 | - [ '\# |
|
16 | + ['\# |
|
17 | 17 | ([\w\-]+)', |
18 | 18 | '[@id="\1"]', |
19 | 19 | 'ID', |
20 | - false ], |
|
20 | + false], |
|
21 | 21 | // .class |
22 | - [ '\. |
|
22 | + ['\. |
|
23 | 23 | ([\w\-]+)', |
24 | 24 | '[ contains( concat(" ", normalize-space(@class), " "), concat(" ", "\1", " ") ) ]', |
25 | 25 | 'CLASS', |
26 | - false ], |
|
26 | + false], |
|
27 | 27 | // [attr] |
28 | - [ '\[ |
|
28 | + ['\[ |
|
29 | 29 | ([\w\-]+) |
30 | 30 | \]', |
31 | 31 | '[@\1]', |
32 | 32 | 'ATTR', |
33 | - false ], |
|
33 | + false], |
|
34 | 34 | // [attr="val"] |
35 | - [ '\[ |
|
35 | + ['\[ |
|
36 | 36 | ([\w\-]+) |
37 | 37 | =["\'] |
38 | 38 | (.*) |
@@ -40,81 +40,81 @@ discard block |
||
40 | 40 | \]', |
41 | 41 | '[@\1="\2"]', |
42 | 42 | 'ATTR', |
43 | - false ], |
|
43 | + false], |
|
44 | 44 | // ns|A |
45 | - [ '([\w\-]+) |
|
45 | + ['([\w\-]+) |
|
46 | 46 | \| |
47 | 47 | (?=\w) # A namespace must be followed at least by a character.', |
48 | 48 | '\1:', |
49 | 49 | 'NS', |
50 | - false ], |
|
50 | + false], |
|
51 | 51 | // *|A |
52 | - [ '\* # Namespace wildcard |
|
52 | + ['\* # Namespace wildcard |
|
53 | 53 | \| |
54 | 54 | (\w+)', |
55 | 55 | '*[local-name() = \'\1\']', |
56 | 56 | 'NS', |
57 | - false ], |
|
57 | + false], |
|
58 | 58 | // :root |
59 | - [ ':root\b', |
|
59 | + [':root\b', |
|
60 | 60 | '/*', |
61 | 61 | 'TAG', |
62 | - false ], |
|
62 | + false], |
|
63 | 63 | // A |
64 | - [ '(?<=^|\s|\}) |
|
64 | + ['(?<=^|\s|\}) |
|
65 | 65 | ( [\w\-]+ | \* )', |
66 | 66 | '\1', |
67 | 67 | 'TAG', |
68 | - false ], |
|
68 | + false], |
|
69 | 69 | // Aggregates the components of a tag in an expression. |
70 | - [ '({NS\d+})? |
|
70 | + ['({NS\d+})? |
|
71 | 71 | ({TAG\d+}) |
72 | 72 | ((?:{ATTR\d+})*|) |
73 | 73 | ((?:{ID\d+})*|) |
74 | 74 | ((?:{CLASS\d+})*|)', |
75 | 75 | '\1\2\3\4\5', |
76 | 76 | 'EXP', |
77 | - false ], |
|
78 | - [ '({EXP\d+}) |
|
77 | + false], |
|
78 | + ['({EXP\d+}) |
|
79 | 79 | :first-child', |
80 | 80 | '*[1]/self::\1', |
81 | 81 | 'EXP', |
82 | - false ], |
|
82 | + false], |
|
83 | 83 | // {} + {} |
84 | - [ '({EXP\d+}) |
|
84 | + ['({EXP\d+}) |
|
85 | 85 | \s* \+ \s* |
86 | 86 | ({EXP\d+})', |
87 | 87 | '\1/following-sibling::*[1]/self::\2', |
88 | 88 | 'EXP', |
89 | - true ], |
|
89 | + true], |
|
90 | 90 | // {} ~ {} |
91 | - [ '({EXP\d+}) |
|
91 | + ['({EXP\d+}) |
|
92 | 92 | \s* \~ \s* |
93 | 93 | ({EXP\d+})', |
94 | 94 | '\1/following-sibling::*/self::\2', |
95 | 95 | 'EXP', |
96 | - true ], |
|
96 | + true], |
|
97 | 97 | // {} > {} |
98 | - [ '({EXP\d+}) |
|
98 | + ['({EXP\d+}) |
|
99 | 99 | \s* > \s* |
100 | 100 | ({EXP\d+})', |
101 | 101 | '\1/\2', |
102 | 102 | 'EXP', |
103 | - true ], |
|
103 | + true], |
|
104 | 104 | // {} {} |
105 | - [ '({EXP\d+}) |
|
105 | + ['({EXP\d+}) |
|
106 | 106 | \s+ |
107 | 107 | ({EXP\d+})', |
108 | 108 | '\1//\2', |
109 | 109 | 'EXP', |
110 | - true ], |
|
110 | + true], |
|
111 | 111 | // {}, {} |
112 | - [ '({EXP\d+}) |
|
112 | + ['({EXP\d+}) |
|
113 | 113 | \s* , \s* |
114 | 114 | ({EXP\d+})', |
115 | 115 | '\1|\2', |
116 | 116 | 'EXP', |
117 | - true ] |
|
117 | + true] |
|
118 | 118 | ]; |
119 | 119 | |
120 | 120 | public static function xpath($css) |
@@ -139,7 +139,7 @@ discard block |
||
139 | 139 | |
140 | 140 | $xpath = \trim($xpath); |
141 | 141 | $xpath = ".//$xpath"; |
142 | - $xpath = \str_replace('|', '|.//', $xpath); |
|
142 | + $xpath = \str_replace('|', '|.//', $xpath); |
|
143 | 143 | $xpath = \str_replace('.///', '/', $xpath); |
144 | 144 | |
145 | 145 | return $xpath; |