HEX
Server: LiteSpeed
System: Linux php-prod-3.spaceapp.ru 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: sarli3128 (1010)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/retile.ru/public_html/system/library/JsonMachine/Lexer.php
<?php

namespace JsonMachine;

class Lexer implements \IteratorAggregate
{
    /** @var resource */
    private $bytesIterator;

    private $position = 0;

    /**
     * Lexer constructor.
     * @param \Traversable $bytesIterator
     */
    public function __construct(\Traversable $bytesIterator)
    {
        $this->bytesIterator = $bytesIterator;
    }
    
    /**
     * @return \Generator
     */
    public function getIterator()
    {
        $inString = false;
        $tokenBuffer = '';
        $previousByte = null;

        ${' '} = 0;
        ${"\n"} = 0;
        ${"\r"} = 0;
        ${"\t"} = 0;
        ${'{'} = 1;
        ${'}'} = 1;
        ${'['} = 1;
        ${']'} = 1;
        ${':'} = 1;
        ${','} = 1;

        foreach ($this->bytesIterator as $bytes) {
            $bytesLength = strlen($bytes);
            for ($i = 0; $i < $bytesLength; ++$i) {
                $byte = $bytes[$i];
                ++$this->position;

                if ($inString) {
                    if ($byte === '"' && $previousByte !== '\\') {
                        $inString = false;
                    } else {
                        $previousByte = $byte;
                    }
                    $tokenBuffer .= $byte;
                    continue;
                }

                if (isset($$byte)) {
                    if ($tokenBuffer !== '') {
                        yield $tokenBuffer;
                        $tokenBuffer = '';
                    }
                    if ($$byte) { // is not whitespace
                        yield $byte;
                    }
                } else {
                    if ($byte === '"') {
                        $inString = true;
                    }
                    $tokenBuffer .= $byte;
                }
            }
        }
        if ($tokenBuffer !== '') {
            yield $tokenBuffer;
        }
    }

    /**
     * @return int
     */
    public function getPosition()
    {
        return $this->position;
    }
}