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