Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
16 / 16 |
| SDom\SelectorMatcher | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
9 | |
100.00% |
16 / 16 |
| containsWord | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
| match | |
100.00% |
1 / 1 |
7 | |
100.00% |
15 / 15 |
|||
| <?php | |
| namespace SDom; | |
| use SDom\Node as DomNode; | |
| use SDom\SelectorMatcher\AttributeNodeTrait; | |
| use SDom\SelectorMatcher\ClassNodeTrait; | |
| use SDom\SelectorMatcher\CombinedSelectorNodeTrait; | |
| use SDom\SelectorMatcher\ElementNodeTrait; | |
| use SDom\SelectorMatcher\HashNodeTrait; | |
| use Symfony\Component\CssSelector\Node as CssNode; | |
| /** | |
| * A class for matching nodes against selector tokens. | |
| * | |
| * Class SelectorMatcher | |
| * @package SDom | |
| */ | |
| class SelectorMatcher | |
| { | |
| use ElementNodeTrait; | |
| use AttributeNodeTrait; | |
| use ClassNodeTrait; | |
| use HashNodeTrait; | |
| use CombinedSelectorNodeTrait; | |
| /** | |
| * Check if the supplied word is found in the supplied sentence. | |
| * | |
| * E.g. the sentence begins with the word followed by whitespace, ends with the word preceded with whitespace, | |
| * contains the word surrounded by whitespace or is equal to the word. | |
| * | |
| * The word itself may not contain whitespace. | |
| * | |
| * @param string $word | |
| * @param string $sentence | |
| * @return bool | |
| */ | |
| public static function containsWord(string $word, string $sentence): bool | |
| { | |
| return in_array($word, preg_split('/\s+/', $sentence) ?: []); | |
| } | |
| /** | |
| * Match the supplied CSS token against the supplied Element node and return TRUE if it is matched. | |
| * | |
| * The $effectiveRoot specifies an Element node part of the hierarchy that is to be considered as root of the tree. | |
| * Immediate child nodes will be treated as if they don't have a parent. | |
| * | |
| * @param CssNode\NodeInterface $token | |
| * @param DomNode\Element $node | |
| * @param DomNode\Element|null $effectiveRoot | |
| * @return bool | |
| */ | |
| public function match( | |
| CssNode\NodeInterface $token, | |
| DomNode\Element $node, | |
| DomNode\Element $effectiveRoot = null | |
| ): bool { | |
| switch (true) { | |
| case $token instanceof CssNode\SelectorNode: | |
| return $this->match($token->getTree(), $node, $effectiveRoot); | |
| case $token instanceof CssNode\ElementNode: | |
| return $this->matchElementNode($token, $node); | |
| case $token instanceof CssNode\AttributeNode: | |
| return $this->matchAttributeNode($token, $node, $effectiveRoot); | |
| case $token instanceof CssNode\ClassNode: | |
| return $this->matchClassNode($token, $node, $effectiveRoot); | |
| case $token instanceof CssNode\HashNode: | |
| return $this->matchHashNode($token, $node, $effectiveRoot); | |
| case $token instanceof CssNode\CombinedSelectorNode: | |
| return $this->matchCombinedSelectorNode($token, $node, $effectiveRoot); | |
| default: | |
| throw new \RuntimeException(sprintf( | |
| 'Selector token %s is not supported yet.', | |
| get_class($token) | |
| )); | |
| } | |
| } | |
| } |