%PDF- %PDF-
Direktori : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Parser/ |
Current File : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Parser/InterpolationBuffer.php |
<?php /** * SCSSPHP * * @copyright 2012-2020 Leaf Corcoran * * @license http://opensource.org/licenses/MIT MIT * * @link http://scssphp.github.io/scssphp */ namespace ScssPhp\ScssPhp\Parser; use ScssPhp\ScssPhp\Ast\Sass\Expression; use ScssPhp\ScssPhp\Ast\Sass\Interpolation; use ScssPhp\ScssPhp\SourceSpan\FileSpan; /** * A buffer that iteratively builds up an {@see Interpolation}. * * @internal */ final class InterpolationBuffer { /** * @var string */ private $text = ''; /** * @var list<string|Expression> */ private $contents = []; /** * Returns the substring of the buffer string after the last interpolation. */ public function getTrailingString(): string { return $this->text; } public function isEmpty(): bool { return $this->text === '' && \count($this->contents) === 0; } public function write(string $string): void { $this->text .= $string; } public function add(Expression $expression): void { $this->flushText(); $this->contents[] = $expression; } public function addInterpolation(Interpolation $interpolation): void { $contents = $interpolation->getContents(); if (empty($contents)) { return; } if (is_string($contents[0])) { $this->text .= $contents[0]; array_shift($contents); } $this->flushText(); foreach ($contents as $content) { $this->contents[] = $content; } if (\is_string($this->contents[\count($this->contents) - 1])) { $this->text = $this->contents[\count($this->contents) - 1]; array_pop($this->contents); } } public function buildInterpolation(FileSpan $span): Interpolation { $contents = $this->contents; if ($this->text !== '') { $contents[] = $this->text; } return new Interpolation($contents, $span); } /** * Flushes {@see self::$text} to {@see self::$contents} if necessary. */ private function flushText(): void { if ($this->text === '') { return; } $this->contents[] = $this->text; $this->text = ''; } }