%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/KeyframeSelectorParser.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\Exception\SassFormatException; use ScssPhp\ScssPhp\Util\Character; /** * A parser for `@keyframes` block selectors. * * @internal */ final class KeyframeSelectorParser extends Parser { /** * @return list<string> * * @throws SassFormatException */ public function parse(): array { try { $selectors = []; do { $this->whitespace(); if ($this->lookingAtIdentifier()) { if ($this->scanIdentifier('from')) { $selectors[] = 'from'; } else { $this->expectIdentifier('to', '"to" or "from"'); $selectors[] = 'to'; } } else { $selectors[] = $this->percentage(); } $this->whitespace(); } while ($this->scanner->scanChar(',')); $this->scanner->expectDone(); return $selectors; } catch (FormatException $e) { throw $this->wrapException($e); } } private function percentage(): string { $buffer = ''; if ($this->scanner->scanChar('+')) { $buffer .= '+'; } $second = $this->scanner->peekChar(); if (!Character::isDigit($second) && $second !== '.') { $this->scanner->error('Expected number.'); } while (Character::isDigit($this->scanner->peekChar())) { $buffer .= $this->scanner->readChar(); } if ($this->scanner->peekChar() === '.') { $buffer .= $this->scanner->readChar(); while (Character::isDigit($this->scanner->peekChar())) { $buffer .= $this->scanner->readChar(); } } if ($this->scanIdentChar('e')) { $buffer .= 'e'; $next = $this->scanner->peekChar(); if ($next === '+' || $next === '-') { $buffer .= $this->scanner->readChar(); } if (!Character::isDigit($this->scanner->peekChar())) { $this->scanner->error('Expected digit.'); } while (Character::isDigit($this->scanner->peekChar())) { $buffer .= $this->scanner->readChar(); } } $this->scanner->expectChar('%'); $buffer .= '%'; return $buffer; } }