From 61697fa7e210e2ef3fe44ec6021d520f3170890b Mon Sep 17 00:00:00 2001 From: Marek Pietrzak Date: Tue, 24 Nov 2015 14:48:42 +0000 Subject: [PATCH 1/6] [console] Add truncate method to FormatterHelper --- .../Console/Helper/FormatterHelper.php | 20 +++++++++++ .../Tests/Helper/FormatterHelperTest.php | 35 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/src/Symfony/Component/Console/Helper/FormatterHelper.php b/src/Symfony/Component/Console/Helper/FormatterHelper.php index ac736f982e5c1..75f19db44d2d6 100644 --- a/src/Symfony/Component/Console/Helper/FormatterHelper.php +++ b/src/Symfony/Component/Console/Helper/FormatterHelper.php @@ -72,6 +72,26 @@ public function formatBlock($messages, $style, $large = false) return implode("\n", $messages); } + /** + * Truncates a message to the given length. + * + * @param string $message + * @param int $length + * @param string $suffix + * + * @return string + */ + public function truncate($message, $length, $suffix = '...') + { + $computedLength = $length - strlen($suffix); + + if ($computedLength > strlen($message)) { + return $message; + } + + return substr($message, 0, $length) . $suffix; + } + /** * {@inheritdoc} */ diff --git a/src/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php b/src/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php index e0aa9211d3319..c4087fd35eb0f 100644 --- a/src/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php @@ -89,4 +89,39 @@ public function testFormatBlockLGEscaping() '::formatBlock() escapes \'<\' chars' ); } + + public function testTruncatingWithShorterLengthThanMessageWithSuffix() + { + $formatter = new FormatterHelper(); + $message = 'testing truncate'; + + $this->assertSame('test...', $formatter->truncate($message, 4)); + $this->assertSame('testing truncat...', $formatter->truncate($message, 15)); + $this->assertSame('testing truncate...', $formatter->truncate($message, 16)); + } + + public function testTruncatingMessageWithCustomSuffix() + { + $formatter = new FormatterHelper(); + $message = 'testing truncate'; + + $this->assertSame('test!', $formatter->truncate($message, 4, '!')); + } + + public function testTruncatingWithLongerLengthThanMessageWithSuffix() + { + $formatter = new FormatterHelper(); + $message = 'test'; + + $this->assertSame($message, $formatter->truncate($message, 10)); + } + + public function testTruncatingWithNegativeLength() + { + $formatter = new FormatterHelper(); + $message = 'testing truncate'; + + $this->assertSame('testing tru...', $formatter->truncate($message, -5)); + $this->assertSame('...', $formatter->truncate($message, -100)); + } } From 3f09dfdd363bc499673ef5509c824d36cf9d8da2 Mon Sep 17 00:00:00 2001 From: Marek Pietrzak Date: Tue, 24 Nov 2015 15:06:42 +0000 Subject: [PATCH 2/6] Fix cs --- src/Symfony/Component/Console/Helper/FormatterHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Console/Helper/FormatterHelper.php b/src/Symfony/Component/Console/Helper/FormatterHelper.php index 75f19db44d2d6..9eb6dfe9df80b 100644 --- a/src/Symfony/Component/Console/Helper/FormatterHelper.php +++ b/src/Symfony/Component/Console/Helper/FormatterHelper.php @@ -89,7 +89,7 @@ public function truncate($message, $length, $suffix = '...') return $message; } - return substr($message, 0, $length) . $suffix; + return substr($message, 0, $length).$suffix; } /** From 1ebdb087d84c848730fcf105d7c67e0ab6564b92 Mon Sep 17 00:00:00 2001 From: Marek Pietrzak Date: Tue, 24 Nov 2015 15:46:57 +0000 Subject: [PATCH 3/6] Add multi byte check for string length --- src/Symfony/Component/Console/Helper/FormatterHelper.php | 6 +++--- .../Component/Console/Tests/Helper/FormatterHelperTest.php | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Console/Helper/FormatterHelper.php b/src/Symfony/Component/Console/Helper/FormatterHelper.php index 9eb6dfe9df80b..b80e829b8570c 100644 --- a/src/Symfony/Component/Console/Helper/FormatterHelper.php +++ b/src/Symfony/Component/Console/Helper/FormatterHelper.php @@ -83,13 +83,13 @@ public function formatBlock($messages, $style, $large = false) */ public function truncate($message, $length, $suffix = '...') { - $computedLength = $length - strlen($suffix); + $computedLength = $length - mb_strlen($suffix); - if ($computedLength > strlen($message)) { + if ($computedLength > mb_strlen($message)) { return $message; } - return substr($message, 0, $length).$suffix; + return mb_substr($message, 0, $length).$suffix; } /** diff --git a/src/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php b/src/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php index c4087fd35eb0f..141dc1dcbebd9 100644 --- a/src/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php @@ -98,6 +98,7 @@ public function testTruncatingWithShorterLengthThanMessageWithSuffix() $this->assertSame('test...', $formatter->truncate($message, 4)); $this->assertSame('testing truncat...', $formatter->truncate($message, 15)); $this->assertSame('testing truncate...', $formatter->truncate($message, 16)); + $this->assertSame('zażółć gęślą...', $formatter->truncate('zażółć gęślą jaźń', 12)); } public function testTruncatingMessageWithCustomSuffix() From afef6dac4938e3201a058601651ec3cd6655cbcb Mon Sep 17 00:00:00 2001 From: Marek Pietrzak Date: Tue, 24 Nov 2015 15:57:20 +0000 Subject: [PATCH 4/6] Use $this->strlen --- src/Symfony/Component/Console/Helper/FormatterHelper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Console/Helper/FormatterHelper.php b/src/Symfony/Component/Console/Helper/FormatterHelper.php index b80e829b8570c..795ccc8c08713 100644 --- a/src/Symfony/Component/Console/Helper/FormatterHelper.php +++ b/src/Symfony/Component/Console/Helper/FormatterHelper.php @@ -83,9 +83,9 @@ public function formatBlock($messages, $style, $large = false) */ public function truncate($message, $length, $suffix = '...') { - $computedLength = $length - mb_strlen($suffix); + $computedLength = $length - $this->strlen($suffix); - if ($computedLength > mb_strlen($message)) { + if ($computedLength > $this->strlen($message)) { return $message; } From 08e9dd466f2f87c4417a2b5091fe8fcb0862cead Mon Sep 17 00:00:00 2001 From: Marek Pietrzak Date: Fri, 18 Dec 2015 21:24:17 +0000 Subject: [PATCH 5/6] Use mb_detect_encoding for charset --- src/Symfony/Component/Console/Helper/FormatterHelper.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Console/Helper/FormatterHelper.php b/src/Symfony/Component/Console/Helper/FormatterHelper.php index 795ccc8c08713..6a48a77f26901 100644 --- a/src/Symfony/Component/Console/Helper/FormatterHelper.php +++ b/src/Symfony/Component/Console/Helper/FormatterHelper.php @@ -89,7 +89,11 @@ public function truncate($message, $length, $suffix = '...') return $message; } - return mb_substr($message, 0, $length).$suffix; + if (false === $encoding = mb_detect_encoding($message, null, true)) { + return substr($message, 0, $length).$suffix; + } + + return mb_substr($message, 0, $length, $encoding).$suffix; } /** From 2ba4a1115a2bd905fa4cfb10e2217cf6b492ab18 Mon Sep 17 00:00:00 2001 From: Marek Pietrzak Date: Tue, 5 Jan 2016 21:24:24 +0000 Subject: [PATCH 6/6] Update CHANGELOG.md --- src/Symfony/Component/Console/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Symfony/Component/Console/CHANGELOG.md b/src/Symfony/Component/Console/CHANGELOG.md index 4e29d2ed4517d..f7a8d0026f892 100644 --- a/src/Symfony/Component/Console/CHANGELOG.md +++ b/src/Symfony/Component/Console/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +3.1.0 +----- + + * added truncate method to FormatterHelper + 2.8.0 ----- 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