From 67fb325111818583ea309ce60b097b4d1a5dd05d Mon Sep 17 00:00:00 2001 From: Joshua Thijssen Date: Sat, 17 Jun 2023 12:56:49 +0200 Subject: [PATCH] [Console] Aligned multiline text in vertical table --- src/Symfony/Component/Console/CHANGELOG.md | 1 + .../Component/Console/Helper/Table.php | 28 +++++++++++++------ .../Console/Tests/Helper/TableTest.php | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Component/Console/CHANGELOG.md b/src/Symfony/Component/Console/CHANGELOG.md index 62972ce961b0b..48b8f5a707c51 100644 --- a/src/Symfony/Component/Console/CHANGELOG.md +++ b/src/Symfony/Component/Console/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG --- * Add `SignalMap` to map signal value to its name + * Multi-line text in vertical tables is aligned properly 6.3 --- diff --git a/src/Symfony/Component/Console/Helper/Table.php b/src/Symfony/Component/Console/Helper/Table.php index cf714873f5b3b..db238c0fb86ad 100644 --- a/src/Symfony/Component/Console/Helper/Table.php +++ b/src/Symfony/Component/Console/Helper/Table.php @@ -364,14 +364,26 @@ public function render() $maxRows = max(\count($headers), \count($row)); for ($i = 0; $i < $maxRows; ++$i) { $cell = (string) ($row[$i] ?? ''); - if ($headers && !$containsColspan) { - $rows[] = [sprintf( - '%s: %s', - str_pad($headers[$i] ?? '', $maxHeaderLength, ' ', \STR_PAD_LEFT), - $cell - )]; - } elseif ('' !== $cell) { - $rows[] = [$cell]; + + $parts = explode("\n", $cell); + foreach ($parts as $idx => $part) { + if ($headers && !$containsColspan) { + if (0 === $idx) { + $rows[] = [sprintf( + '%s: %s', + str_pad($headers[$i] ?? '', $maxHeaderLength, ' ', \STR_PAD_LEFT), + $part + )]; + } else { + $rows[] = [sprintf( + '%s %s', + str_pad('', $maxHeaderLength, ' ', \STR_PAD_LEFT), + $part + )]; + } + } elseif ('' !== $cell) { + $rows[] = [$part]; + } } } } diff --git a/src/Symfony/Component/Console/Tests/Helper/TableTest.php b/src/Symfony/Component/Console/Tests/Helper/TableTest.php index 5908c5b97f585..ddda3382f82f9 100644 --- a/src/Symfony/Component/Console/Tests/Helper/TableTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/TableTest.php @@ -1720,7 +1720,7 @@ public static function provideRenderVerticalTests(): \Traversable |-------------------------| | ISBN: 9971-5-0210-0 | | Title: A Tale | -| of Two Cities | +| of Two Cities | | Author: Charles Dickens | | Price: 139.25 | +-------------------------+