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 | +-------------------------+ pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy