%PDF- %PDF-
| Direktori : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Ast/Selector/ |
| Current File : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Ast/Selector/UniversalSelector.php |
<?php
/**
* SCSSPHP
*
* @copyright 2012-2020 Leaf Corcoran
*
* @license http://opensource.org/licenses/MIT MIT
*
* @link http://scssphp.github.io/scssphp
*/
namespace ScssPhp\ScssPhp\Ast\Selector;
use ScssPhp\ScssPhp\Extend\ExtendUtil;
use ScssPhp\ScssPhp\Visitor\SelectorVisitor;
/**
* Matches any element in the given namespace.
*/
final class UniversalSelector extends SimpleSelector
{
/**
* The selector namespace.
*
* If this is `null`, this matches all elements in the default namespace. If
* it's the empty string, this matches all elements that aren't in any
* namespace. If it's `*`, this matches all elements in any namespace.
* Otherwise, it matches all elements in the given namespace.
*
* @var string|null
* @readonly
*/
private $namespace;
public function __construct(?string $namespace = null)
{
$this->namespace = $namespace;
}
public function getNamespace(): ?string
{
return $this->namespace;
}
public function getSpecificity(): int
{
return 0;
}
public function accept(SelectorVisitor $visitor)
{
return $visitor->visitUniversalSelector($this);
}
public function unify(array $compound): ?array
{
$first = $compound[0] ?? null;
if ($first instanceof UniversalSelector || $first instanceof TypeSelector) {
$unified = ExtendUtil::unifyUniversalAndElement($this, $first);
if ($unified === null) {
return null;
}
$compound[0] = $unified;
return $compound;
}
if (\count($compound) === 1 && $first instanceof PseudoSelector && ($first->isHost() || $first->isHostContext())) {
return null;
}
if ($this->namespace !== null && $this->namespace !== '*') {
return array_merge([$this], $compound);
}
// Not-empty compound list
if ($first !== null) {
return $compound;
}
return [$this];
}
public function isSuperselector(SimpleSelector $other): bool
{
if ($this->namespace === '*') {
return true;
}
if ($other instanceof TypeSelector) {
return $this->namespace === $other->getName()->getNamespace();
}
if ($other instanceof UniversalSelector) {
return $this->namespace === $other->namespace;
}
return $this->namespace === null || parent::isSuperselector($other);
}
public function equals(object $other): bool
{
return $other instanceof UniversalSelector && $other->namespace === $this->namespace;
}
}