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}