From e4dfaf5d3f761c66d7dec31af6439294f8f4505c Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Fri, 7 Feb 2025 14:52:08 +0100 Subject: [PATCH] Add option to colorize CLI output via MDOutputHandler --- src/MDConsoleStatus.php | 34 ++++++++++++++++++++++++++++++++++ src/MDOutputHandler.php | 18 +++++++++--------- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/MDConsoleStatus.php b/src/MDConsoleStatus.php index d1c8cb1..b7d8dab 100644 --- a/src/MDConsoleStatus.php +++ b/src/MDConsoleStatus.php @@ -29,4 +29,38 @@ enum MDConsoleStatus { }; } + + /** + * Returns the color for a CLI command. + * + * @return string + */ + public function get_cli_color():string { + + return match($this) { + self::NOTICE => MDConsoleColors::COLOR_OFF, + self::ERROR => MDConsoleColors::BG_RED, + self::UPDATE => MDConsoleColors::BG_GREEN, + self::DELETION => MDConsoleColors::BG_BLUE, + self::SKIPPED => MDConsoleColors::BG_GREY, + }; + + } + + /** + * Returns the symbol for each status. + * + * @return string + */ + public function get_symbol():string { + + return match($this) { + self::SKIPPED => "-", + self::UPDATE => "U", + self::ERROR => "E", + self::DELETION => "D", + self::NOTICE => "N", + }; + + } } diff --git a/src/MDOutputHandler.php b/src/MDOutputHandler.php index 714e093..cb387d8 100644 --- a/src/MDOutputHandler.php +++ b/src/MDOutputHandler.php @@ -35,6 +35,8 @@ final class MDOutputHandler { /** @var boolean */ private bool $_logfile_status_checked = false; + public bool $color_output = false; + /** * Simple echo that is silent during $disable_completely. * @@ -148,19 +150,17 @@ final class MDOutputHandler { ++$this->_counter; // Increment counter $date = \date("Y-m-d H:i:s"); // Get current date & time. - $statusSymbol = match($statusCode) { - MDConsoleStatus::SKIPPED => "-", - MDConsoleStatus::UPDATE => "U", - MDConsoleStatus::ERROR => "E", - MDConsoleStatus::DELETION => "D", - MDConsoleStatus::NOTICE => "N", - }; + $statusSymbol = $statusCode->get_symbol(); - if ($this->_context !== "") $contextStr = "{$this->_context} │ "; + if ($this->_context !== "") $contextStr = " │ "; else $contextStr = ""; // Generate the message to log. - $message = "$statusSymbol │ {$contextStr}#" . sprintf("%1$07s", $this->_counter) . " │ " . \sprintf("%1$7s", $this->_human_filesize(\memory_get_usage())) . " │ {$date} │ {$msg}" . PHP_EOL; + $format = match($this->color_output) { + true => $statusCode->get_cli_color() . "%s" . MDConsoleColors::COLOR_OFF . " │ " . MDConsoleColors::FG_AQUA . "%s" . MDConsoleColors::FG_GREY . "%s#%'.08d" . MDConsoleColors::COLOR_OFF . " │ " . MDConsoleColors::FG_GREY . "%s │ %s" . MDConsoleColors::COLOR_OFF . " │ %s", + default => "%s │ %s#%'.08d │ %s │ %s │ %s", + }; + $message = \sprintf($format . PHP_EOL, $statusSymbol, $this->_context, $contextStr, $this->_counter, $this->_human_filesize(\memory_get_usage()), $date, $msg); if ($this->_file_logging === true) { $this->_log_queue[] = $message;