Version 1
[yaffs-website] / vendor / psy / psysh / src / Psy / Readline / Transient.php
diff --git a/vendor/psy/psysh/src/Psy/Readline/Transient.php b/vendor/psy/psysh/src/Psy/Readline/Transient.php
new file mode 100644 (file)
index 0000000..102eaf7
--- /dev/null
@@ -0,0 +1,146 @@
+<?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;
+    }
+}