Automattic\WooCommerce\Vendor\GraphQL\Language

Lexer::readCharprivateWC 1.0

Reads next UTF8Character from the byte stream, starting from $byteStreamPosition.

Method of the class: Lexer{}

No Hooks.

Returns

Array{String,. int|null, int}

Usage

// private - for code of main (parent) class only
$result = $this->readChar( $advance, ?int $byteStreamPosition ): array;
$advance(true|false)
.
Default: false
?int $byteStreamPosition
.
Default: null

Lexer::readChar() code WC 10.9.1

private function readChar(bool $advance = false, ?int $byteStreamPosition = null): array
{
    if ($byteStreamPosition === null) {
        $byteStreamPosition = $this->byteStreamPosition;
    }

    $code = null;
    $utf8char = '';
    $bytes = 0;
    $positionOffset = 0;

    if (isset($this->source->body[$byteStreamPosition])) {
        $ord = ord($this->source->body[$byteStreamPosition]);

        if ($ord < 128) {
            $bytes = 1;
        } elseif ($ord < 224) {
            $bytes = 2;
        } elseif ($ord < 240) {
            $bytes = 3;
        } else {
            $bytes = 4;
        }

        for ($pos = $byteStreamPosition; $pos < $byteStreamPosition + $bytes; ++$pos) {
            $utf8char .= $this->source->body[$pos];
        }

        $positionOffset = 1;
        $code = $bytes === 1
            ? $ord
            : Utils::ord($utf8char);
    }

    if ($advance) {
        $this->moveStringCursor($positionOffset, $bytes);
    }

    return [$utf8char, $code, $bytes];
}