friendship ended with social-app. php is my new best friend
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Component\CssSelector\Node;
13
14use Symfony\Component\CssSelector\Parser\Token;
15
16/**
17 * Represents a "<selector>:<name>(<arguments>)" node.
18 *
19 * This component is a port of the Python cssselect library,
20 * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect.
21 *
22 * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
23 *
24 * @internal
25 */
26class FunctionNode extends AbstractNode
27{
28 private string $name;
29
30 /**
31 * @param Token[] $arguments
32 */
33 public function __construct(
34 private NodeInterface $selector,
35 string $name,
36 private array $arguments = [],
37 ) {
38 $this->name = strtolower($name);
39 }
40
41 public function getSelector(): NodeInterface
42 {
43 return $this->selector;
44 }
45
46 public function getName(): string
47 {
48 return $this->name;
49 }
50
51 /**
52 * @return Token[]
53 */
54 public function getArguments(): array
55 {
56 return $this->arguments;
57 }
58
59 public function getSpecificity(): Specificity
60 {
61 return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
62 }
63
64 public function __toString(): string
65 {
66 $arguments = implode(', ', array_map(fn (Token $token) => "'".$token->getValue()."'", $this->arguments));
67
68 return \sprintf('%s[%s:%s(%s)]', $this->getNodeName(), $this->selector, $this->name, $arguments ? '['.$arguments.']' : '');
69 }
70}