private function scanDqEscapeSequence()

in experiments/Lexer.php [670:727]


    private function scanDqEscapeSequence($text, & $pos, $endOfFilePos) {
        if ($pos >= $endOfFilePos) {
            // ERROR
            return;
        }
        $char = ord($text[$pos]);
        switch ($char) {
            // dq-simple-escape-sequence
            case CharacterCodes::_doubleQuote:
            case CharacterCodes::_backslash:
            case CharacterCodes::_dollar:
            case CharacterCodes::e:
            case CharacterCodes::f:
            case CharacterCodes::r:
            case CharacterCodes::t:
            case CharacterCodes::v:
                $pos++;
                return;

            // dq-hexadecimal-escape-sequence
            case CharacterCodes::x:
            case CharacterCodes::X:
                $pos++;
                for ($i = 0; $i<2; $i++) {
                    if (isset($text[$pos]) && $this->isHexadecimalDigit(ord($text[$pos]))) {
                        $pos++;
                    }
                }
                return;

            // dq-unicode-escape-sequence
            case CharacterCodes::u:
                $pos++;
                if (isset($text[$pos]) && ord($text[$pos]) === CharacterCodes::_openBrace) {
                    $this->scanHexadecimalLiteral($text, $pos, $endOfFilePos);
                    if (isset($text[$pos]) && ord($text[$pos]) === CharacterCodes::_closeBrace) {
                        $pos++;
                        return;
                    }
                    // OTHERWISE ERROR
                }
                return;
            default:
                // dq-octal-digit-escape-sequence
                if ($this->isOctalDigitChar(ord($text[$pos]))) {
                    for ($i = $pos; $i < $pos + 3; $i++) {
                        if (!(isset($text[$i]) || $this->isOctalDigitChar(ord($text[$i])))) {
                            return;
                        }
                        $pos++;
                        return;
                    }
                }

                $pos++;
                return;
        }
    }