%PDF- %PDF-
| Direktori : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Util/ | 
| Current File : /home/q/g/b/qgbqkvz/www/wp-content/plugins/wp-scss/scssphp/src/Util/ParserUtil.php | 
<?php
/**
 * SCSSPHP
 *
 * @copyright 2012-2020 Leaf Corcoran
 *
 * @license http://opensource.org/licenses/MIT MIT
 *
 * @link http://scssphp.github.io/scssphp
 */
namespace ScssPhp\ScssPhp\Util;
use ScssPhp\ScssPhp\Parser\StringScanner;
use ScssPhp\ScssPhp\Util;
/**
 * @internal
 */
final class ParserUtil
{
    /**
     * Consumes an escape sequence from $scanner and returns the character it
     * represents.
     */
    public static function consumeEscapedCharacter(StringScanner $scanner): string
    {
        // See https://drafts.csswg.org/css-syntax-3/#consume-escaped-code-point.
        $scanner->expectChar('\\');
        $first = $scanner->peekChar();
        if ($first === null) {
            return "\u{FFFD}";
        }
        if (Character::isNewline($first)) {
            $scanner->error('Expected escape sequence.');
        }
        if (Character::isHex($first)) {
            $value = 0;
            for ($i = 0; $i < 6; $i++) {
                $next = $scanner->peekChar();
                if ($next === null || !Character::isHex($next)) {
                    break;
                }
                $value *= 16;
                $value += hexdec($scanner->readChar());
                assert(\is_int($value));
            }
            if (Character::isWhitespace($scanner->peekChar())) {
                $scanner->readChar();
            }
            if ($value === 0 || ($value >= 0xD800 && $value <= 0xDFFF) || $value >= 0x10FFFF) {
                return "\u{FFFD}";
            }
            return Util::mbChr($value);
        }
        return $scanner->readUtf8Char();
    }
}