%PDF- %PDF-
Direktori : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Ast/Sass/ |
Current File : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Ast/Sass/Interpolation.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; use ScssPhp\ScssPhp\Parser\InterpolationBuffer; use ScssPhp\ScssPhp\SourceSpan\FileSpan; /** * Plain text interpolated with Sass expressions. * * @internal */ final class Interpolation implements SassNode { /** * @var list<string|Expression> * @readonly */ private $contents; /** * @var FileSpan * @readonly */ private $span; /** * Creates a new {@see Interpolation} by concatenating a sequence of strings, * {@see Expression}s, or nested {@see Interpolation}s. * * @param array<string|Expression|Interpolation> $contents */ public static function concat(array $contents, FileSpan $span): Interpolation { $buffer = new InterpolationBuffer(); foreach ($contents as $element) { if (\is_string($element)) { $buffer->write($element); } elseif ($element instanceof Expression) { $buffer->add($element); } elseif ($element instanceof Interpolation) { $buffer->addInterpolation($element); } else { throw new \InvalidArgumentException(sprintf('The elements in $contents may only contains strings, Expressions, or Interpolations, "%s" given.', \is_object($element) ? get_class($element) : gettype($element))); } } return $buffer->buildInterpolation($span); } /** * @param list<string|Expression> $contents */ public function __construct(array $contents, FileSpan $span) { for ($i = 0; $i < \count($contents); $i++) { if (!\is_string($contents[$i]) && !$contents[$i] instanceof Expression) { throw new \TypeError('The contents of an Interpolation may only contain strings or Expression instances.'); } if ($i != 0 && \is_string($contents[$i]) && \is_string($contents[$i - 1])) { throw new \InvalidArgumentException('The contents of an Interpolation may not contain adjacent strings.'); } } $this->contents = $contents; $this->span = $span; } /** * @return list<string|Expression> */ public function getContents(): array { return $this->contents; } public function getSpan(): FileSpan { return $this->span; } /** * If this contains no interpolated expressions, returns its text contents. * * Otherwise, returns `null`. * * @psalm-mutation-free */ public function getAsPlain(): ?string { if (\count($this->contents) === 0) { return ''; } if (\count($this->contents) > 1) { return null; } if (\is_string($this->contents[0])) { return $this->contents[0]; } return null; } /** * Returns the plain text before the interpolation, or the empty string. */ public function getInitialPlain(): string { $first = $this->contents[0] ?? null; if (\is_string($first)) { return $first; } return ''; } public function __toString(): string { return implode('', array_map(function ($value) { return \is_string($value) ? $value : '#{' . $value .'}'; }, $this->contents)); } }