Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\CssSelector\Parser\Shortcut;
|
Chris@0
|
13
|
Chris@0
|
14 use Symfony\Component\CssSelector\Node\ElementNode;
|
Chris@0
|
15 use Symfony\Component\CssSelector\Node\SelectorNode;
|
Chris@0
|
16 use Symfony\Component\CssSelector\Parser\ParserInterface;
|
Chris@0
|
17
|
Chris@0
|
18 /**
|
Chris@0
|
19 * CSS selector element parser shortcut.
|
Chris@0
|
20 *
|
Chris@0
|
21 * This component is a port of the Python cssselect library,
|
Chris@0
|
22 * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect.
|
Chris@0
|
23 *
|
Chris@0
|
24 * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
Chris@0
|
25 *
|
Chris@0
|
26 * @internal
|
Chris@0
|
27 */
|
Chris@0
|
28 class ElementParser implements ParserInterface
|
Chris@0
|
29 {
|
Chris@0
|
30 /**
|
Chris@0
|
31 * {@inheritdoc}
|
Chris@0
|
32 */
|
Chris@0
|
33 public function parse($source)
|
Chris@0
|
34 {
|
Chris@0
|
35 // Matches an optional namespace, required element or `*`
|
Chris@0
|
36 // $source = 'testns|testel';
|
Chris@0
|
37 // $matches = array (size=3)
|
Chris@0
|
38 // 0 => string 'testns|testel' (length=13)
|
Chris@0
|
39 // 1 => string 'testns' (length=6)
|
Chris@0
|
40 // 2 => string 'testel' (length=6)
|
Chris@0
|
41 if (preg_match('/^(?:([a-z]++)\|)?([\w-]++|\*)$/i', trim($source), $matches)) {
|
Chris@17
|
42 return [new SelectorNode(new ElementNode($matches[1] ?: null, $matches[2]))];
|
Chris@0
|
43 }
|
Chris@0
|
44
|
Chris@17
|
45 return [];
|
Chris@0
|
46 }
|
Chris@0
|
47 }
|