From e3cbc1d54778b59195e5fd031300f57cf1f07f3d Mon Sep 17 00:00:00 2001 From: Rolf <62988563+rolf-yoast@users.noreply.github.com> Date: Fri, 19 Apr 2024 08:22:20 +0200 Subject: [PATCH 1/2] Introduce Column interface for the right alignment names --- lib/cli/table/Column.php | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 lib/cli/table/Column.php diff --git a/lib/cli/table/Column.php b/lib/cli/table/Column.php new file mode 100644 index 0000000..ba0ee36 --- /dev/null +++ b/lib/cli/table/Column.php @@ -0,0 +1,10 @@ + Date: Fri, 19 Apr 2024 08:23:04 +0200 Subject: [PATCH 2/2] Add the alignment functionality --- lib/cli/Table.php | 17 ++++++++++++++++- lib/cli/table/Ascii.php | 10 +++++++++- lib/cli/table/Renderer.php | 13 ++++++++++++- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/lib/cli/Table.php b/lib/cli/Table.php index 8b0cf93..89eb9ee 100644 --- a/lib/cli/Table.php +++ b/lib/cli/Table.php @@ -15,6 +15,7 @@ use cli\Shell; use cli\Streams; use cli\table\Ascii; +use cli\table\Column; use cli\table\Renderer; use cli\table\Tabular; @@ -27,6 +28,7 @@ class Table { protected $_footers = array(); protected $_width = array(); protected $_rows = array(); + protected $_alignments = array(); /** * Initializes the `Table` class. @@ -44,7 +46,7 @@ class Table { * @param array $rows The rows of data for this table. Optional. * @param array $footers Footers used in this table. Optional. */ - public function __construct(array $headers = null, array $rows = null, array $footers = null) { + public function __construct(array $headers = null, array $rows = null, array $footers = null, $alignments = []) { if (!empty($headers)) { // If all the rows is given in $headers we use the keys from the // first row for the header values @@ -62,6 +64,8 @@ public function __construct(array $headers = null, array $rows = null, array $fo $this->setRows($rows); } + $this->setAlignments($alignments); + if (!empty($footers)) { $this->setFooters($footers); } @@ -79,6 +83,7 @@ public function resetTable() $this->_width = array(); $this->_rows = array(); $this->_footers = array(); + $this->_alignments = array(); return $this; } @@ -137,6 +142,7 @@ public function display() { */ public function getDisplayLines() { $this->_renderer->setWidths($this->_width, $fallback = true); + $this->_renderer->setAlignments($this->_alignments); $border = $this->_renderer->border(); $out = array(); @@ -201,6 +207,15 @@ public function setFooters(array $footers) { $this->_footers = $this->checkRow($footers); } + /** + * Set the alignments of the table. + * + * @param array $alignments An array of strings containing column alignments. + */ + public function setAlignments(array $alignments) { + $this->_alignments = $alignments; + //TODO: Implement error if alignment is not valid and field is not valid + } /** * Add a row to the table. diff --git a/lib/cli/table/Ascii.php b/lib/cli/table/Ascii.php index 27e94e9..995562d 100644 --- a/lib/cli/table/Ascii.php +++ b/lib/cli/table/Ascii.php @@ -28,6 +28,7 @@ class Ascii extends Renderer { protected $_border = null; protected $_constraintWidth = null; protected $_pre_colorized = false; + protected $_headers = null; /** * Set the widths of each column in the table. @@ -131,6 +132,10 @@ public function border() { */ public function row( array $row ) { + if($this->_headers === null) { + $this->_headers = array_values($row); + } + $extra_row_count = 0; if ( count( $row ) > 0 ) { @@ -197,7 +202,10 @@ public function row( array $row ) { } private function padColumn($content, $column) { - return $this->_characters['padding'] . Colors::pad( $content, $this->_widths[ $column ], $this->isPreColorized( $column ) ) . $this->_characters['padding']; + $column_name = $this->_headers[$column]; + $alignment = array_key_exists($column_name, $this->_alignments) ? $this->_alignments[$column_name] : Column::ALIGN_LEFT; + + return $this->_characters['padding'] . Colors::pad( $content, $this->_widths[ $column ], $this->isPreColorized( $column ), false, $alignment) . $this->_characters['padding']; } /** diff --git a/lib/cli/table/Renderer.php b/lib/cli/table/Renderer.php index 3ac7be5..8cda719 100644 --- a/lib/cli/table/Renderer.php +++ b/lib/cli/table/Renderer.php @@ -17,9 +17,20 @@ */ abstract class Renderer { protected $_widths = array(); + protected $_alignments = array(); - public function __construct(array $widths = array()) { + public function __construct(array $widths = array(), array $alignments = array()) { $this->setWidths($widths); + $this->setAlignments($alignments); + } + + /** + * Set the alignments of each column in the table. + * + * @param array $alignments The alignments of the columns. + */ + public function setAlignments(array $alignments) { + $this->_alignments = $alignments; } /**