Chris@0: history = array(); Chris@0: $this->historySize = $historySize; Chris@0: $this->eraseDups = $eraseDups; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function addHistory($line) Chris@0: { Chris@0: if ($this->eraseDups) { Chris@0: if (($key = array_search($line, $this->history)) !== false) { Chris@0: unset($this->history[$key]); Chris@0: } Chris@0: } Chris@0: Chris@0: $this->history[] = $line; Chris@0: Chris@0: if ($this->historySize > 0) { Chris@0: $histsize = count($this->history); Chris@0: if ($histsize > $this->historySize) { Chris@0: $this->history = array_slice($this->history, $histsize - $this->historySize); Chris@0: } Chris@0: } Chris@0: Chris@0: $this->history = array_values($this->history); Chris@0: Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function clearHistory() Chris@0: { Chris@0: $this->history = array(); Chris@0: Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function listHistory() Chris@0: { Chris@0: return $this->history; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function readHistory() Chris@0: { Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: * Chris@0: * @throws BreakException if user hits Ctrl+D Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public function readline($prompt = null) Chris@0: { Chris@0: echo $prompt; Chris@0: Chris@0: return rtrim(fgets($this->getStdin(), 1024)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function redisplay() Chris@0: { Chris@0: // noop Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function writeHistory() Chris@0: { Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get a STDIN file handle. Chris@0: * Chris@0: * @throws BreakException if user hits Ctrl+D Chris@0: * Chris@0: * @return resource Chris@0: */ Chris@0: private function getStdin() Chris@0: { Chris@0: if (!isset($this->stdin)) { Chris@0: $this->stdin = fopen('php://stdin', 'r'); Chris@0: } Chris@0: Chris@0: if (feof($this->stdin)) { Chris@0: throw new BreakException('Ctrl+D'); Chris@0: } Chris@0: Chris@0: return $this->stdin; Chris@0: } Chris@0: }