> */ private const LOOKUP_TABLE = [ '.' => ['gray', '.'], 'S' => ['yellow', 's'], 'I' => ['yellow', 'i'], 'N' => ['yellow', 'i'], 'R' => ['yellow', '!'], 'W' => ['yellow', '!'], 'E' => ['red', '⨯'], 'F' => ['red', '⨯'], ]; public function __construct() { $this->terminal = terminal(); $this->output = new ConsoleOutput(decorated: true); $this->style = new Style($this->output); $this->compactSymbolsPerLine = $this->terminal->width() - 4; } /** * Output an empty line in the console. Useful for providing a little breathing room. */ public function newLine(): void { render('
'); } /** * Write the given message to the console, adding vertical and horizontal padding. */ public function line(string $message): void { render("{$message}"); } /** * Outputs the given description item from the ProgressPrinter as a gorgeous, colored symbol. */ public function descriptionItem(string $item): void { [$color, $icon] = self::LOOKUP_TABLE[$item] ?? self::LOOKUP_TABLE['.']; $symbolsOnCurrentLine = $this->compactProcessed % $this->compactSymbolsPerLine; if ($symbolsOnCurrentLine >= $this->terminal->width() - 4) { $symbolsOnCurrentLine = 0; } if ($symbolsOnCurrentLine === 0) { $this->output->writeln(''); $this->output->write(' '); } $this->output->write(sprintf('