+++ /dev/null
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2017 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;
-
- /**
- * 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 = array();
- $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 = array();
-
- 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(), 1024));
- }
-
- /**
- * {@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;
- }
-}