From: Christian Weiske Date: Mon, 27 Jan 2014 05:47:02 +0000 (+0100) Subject: Add ansi color codes to console output X-Git-Tag: v0.5.0~48 X-Git-Url: https://git.cweiske.de/bdrem.git/commitdiff_plain/60afdc2f2abb13fc3aefa8b16879c8088975d145?ds=sidebyside Add ansi color codes to console output --- diff --git a/src/bdrem/Renderer/Console.php b/src/bdrem/Renderer/Console.php index 01d6eb2..195f53d 100644 --- a/src/bdrem/Renderer/Console.php +++ b/src/bdrem/Renderer/Console.php @@ -3,32 +3,82 @@ namespace bdrem; class Renderer_Console { + /** + * Use ANSI color codes for output coloring + * + * @var boolean + */ + public $ansi = true; + + /** + * @var \Console_Color2 + */ + protected $cc; + public function render($arEvents) { + if ($this->ansi) { + $this->cc = new \Console_Color2(); + } + $tbl = new \Console_Table( CONSOLE_TABLE_ALIGN_LEFT, - array('sect' => '', 'rule' => '-', 'vert' => '') + array('sect' => '', 'rule' => '-', 'vert' => ''), + 1, null, $this->ansi ); $tbl->setAlign(0, CONSOLE_TABLE_ALIGN_RIGHT); $tbl->setAlign(1, CONSOLE_TABLE_ALIGN_RIGHT); $tbl->setHeaders( - array('Days', 'Age', 'Name', 'Event', 'Date', 'Day') + $this->ansiWrap( + array('Days', 'Age', 'Name', 'Event', 'Date', 'Day'), + '%_%9' + ) + ); + $tbl->setBorderVisibility( + array( + 'left' => false, + 'right' => false, + 'top' => true, + 'bottom' => false, + 'inner' => true, + ) ); foreach ($arEvents as $event) { + $colorCode = null; + if ($event->days == 0) { + $colorCode = '%R'; + } $tbl->addRow( - array( - $event->days, - $event->age, - wordwrap($event->title, 30, "\n", true), - wordwrap($event->type, 20, "\n", true), - $event->date, - strftime('%a', strtotime($event->localDate)) + $this->ansiWrap( + array( + $event->days, + $event->age, + wordwrap($event->title, 30, "\n", true), + wordwrap($event->type, 20, "\n", true), + $event->date, + strftime('%a', strtotime($event->localDate)) + ), + $colorCode ) ); } return $tbl->getTable(); } + + protected function ansiWrap($data, $colorCode = null) + { + if (!$this->ansi || $colorCode === null) { + return $data; + } + + foreach ($data as $k => &$value) { + $value = $this->cc->convert( + $colorCode . $value . '%n' + ); + } + return $data; + } } ?> diff --git a/src/bdrem/WebText.php b/src/bdrem/WebText.php index aaace51..fe2e5dc 100644 --- a/src/bdrem/WebText.php +++ b/src/bdrem/WebText.php @@ -7,6 +7,7 @@ class WebText extends Web { header('Content-type: text/plain; charset=utf-8'); $r = new Renderer_Console(); + $r->ansi = false; echo $r->render($arEvents); } }