@@ -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; |