%PDF- %PDF-
| Direktori : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Ast/Sass/Statement/ |
| Current File : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Ast/Sass/Statement/Declaration.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\Sass\Statement;
use ScssPhp\ScssPhp\Ast\Sass\Expression;
use ScssPhp\ScssPhp\Ast\Sass\Expression\StringExpression;
use ScssPhp\ScssPhp\Ast\Sass\Interpolation;
use ScssPhp\ScssPhp\Ast\Sass\Statement;
use ScssPhp\ScssPhp\SourceSpan\FileSpan;
use ScssPhp\ScssPhp\Visitor\StatementVisitor;
/**
* A declaration (that is, a `name: value` pair).
*
* @extends ParentStatement<Statement[]|null>
*
* @internal
*/
final class Declaration extends ParentStatement
{
/**
* @var Interpolation
* @readonly
*/
private $name;
/**
* The value of this declaration.
*
* If {@see getChildren} is `null`, this is never `null`. Otherwise, it may or may
* not be `null`.
*
* @var Expression|null
* @readonly
*/
private $value;
/**
* @var FileSpan
* @readonly
*/
private $span;
/**
* @param Statement[]|null $children
*/
private function __construct(Interpolation $name, ?Expression $value, FileSpan $span, ?array $children = null)
{
$this->name = $name;
$this->value = $value;
$this->span = $span;
parent::__construct($children);
}
public static function create(Interpolation $name, Expression $value, FileSpan $span): self
{
$declaration = new self($name, $value, $span);
if ($declaration->isCustomProperty() && !$value instanceof StringExpression) {
throw new \InvalidArgumentException(sprintf('Declarations whose names begin with "--" must have StringExpression values (got %s)', get_class($value)));
}
return $declaration;
}
/**
* @param Statement[] $children
*/
public static function nested(Interpolation $name, array $children, FileSpan $span, ?Expression $value = null): self
{
$declaration = new self($name, $value, $span, $children);
if ($declaration->isCustomProperty() && !$value instanceof StringExpression) {
throw new \InvalidArgumentException('Declarations whose names begin with "--" may not be nested.');
}
return $declaration;
}
public function getName(): Interpolation
{
return $this->name;
}
public function getValue(): ?Expression
{
return $this->value;
}
/**
* Returns whether this is a CSS Custom Property declaration.
*
* Note that this can return `false` for declarations that will ultimately be
* serialized as custom properties if they aren't *parsed as* custom
* properties, such as `#{--foo}: ...`.
*
* If this is `true`, then `value` will be a {@see StringExpression}.
*/
public function isCustomProperty(): bool
{
return 0 === strpos($this->name->getInitialPlain(), '--');
}
public function getSpan(): FileSpan
{
return $this->span;
}
public function accept(StatementVisitor $visitor)
{
return $visitor->visitDeclaration($this);
}
public function __toString(): string
{
$buffer = $this->name . ':';
if ($this->value !== null) {
if (!$this->isCustomProperty()) {
$buffer .= ' ';
}
$buffer .= $this->value;
}
$children = $this->getChildren();
if ($children === null) {
return $buffer . ';';
}
return $buffer . '{' . implode(' ', $children) . '}';
}
}