Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/psy/psysh/src/Readline/Transient.php
<?php

/*
 * This file is part of Psy Shell.
 *
 * (c) 2012-2020 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Psy\Readline;

use
Psy\Exception\BreakException;

/**
 * An array-based Readline emulation implementation.
 */
class Transient implements Readline
{
    private
$history;
    private
$historySize;
    private
$eraseDups;
    private
$stdin;

   
/**
     * Transient Readline is always supported.
     *
     * {@inheritdoc}
     */
   
public static function isSupported()
    {
        return
true;
    }

   
/**
     * Transient Readline constructor.
     */
   
public function __construct($historyFile = null, $historySize = 0, $eraseDups = false)
    {
       
// don't do anything with the history file...
       
$this->history     = [];
       
$this->historySize = $historySize;
       
$this->eraseDups   = $eraseDups;
    }

   
/**
     * {@inheritdoc}
     */
   
public function addHistory($line)
    {
        if (
$this->eraseDups) {
            if ((
$key = \array_search($line, $this->history)) !== false) {
                unset(
$this->history[$key]);
            }
        }

       
$this->history[] = $line;

        if (
$this->historySize > 0) {
           
$histsize = \count($this->history);
            if (
$histsize > $this->historySize) {
               
$this->history = \array_slice($this->history, $histsize - $this->historySize);
            }
        }

       
$this->history = \array_values($this->history);

        return
true;
    }

   
/**
     * {@inheritdoc}
     */
   
public function clearHistory()
    {
       
$this->history = [];

        return
true;
    }

   
/**
     * {@inheritdoc}
     */
   
public function listHistory()
    {
        return
$this->history;
    }

   
/**
     * {@inheritdoc}
     */
   
public function readHistory()
    {
        return
true;
    }

   
/**
     * {@inheritdoc}
     *
     * @throws BreakException if user hits Ctrl+D
     *
     * @return string
     */
   
public function readline($prompt = null)
    {
        echo
$prompt;

        return \
rtrim(\fgets($this->getStdin()), "\n\r");
    }

   
/**
     * {@inheritdoc}
     */
   
public function redisplay()
    {
       
// noop
   
}

   
/**
     * {@inheritdoc}
     */
   
public function writeHistory()
    {
        return
true;
    }

   
/**
     * Get a STDIN file handle.
     *
     * @throws BreakException if user hits Ctrl+D
     *
     * @return resource
     */
   
private function getStdin()
    {
        if (!isset(
$this->stdin)) {
           
$this->stdin = \fopen('php://stdin', 'r');
        }

        if (\
feof($this->stdin)) {
            throw new
BreakException('Ctrl+D');
        }

        return
$this->stdin;
    }
}