diff --git a/src/Symfony/Component/Console/Helper/Helper.php b/src/Symfony/Component/Console/Helper/Helper.php index acec994db83c4..579c8ddb90ba4 100644 --- a/src/Symfony/Component/Console/Helper/Helper.php +++ b/src/Symfony/Component/Console/Helper/Helper.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Console\Helper; use Symfony\Component\Console\Formatter\OutputFormatterInterface; -use Symfony\Component\String\UnicodeString; /** * Helper is the base class for all helper classes. @@ -46,11 +45,7 @@ public function getHelperSet() */ public static function strlen(?string $string) { - $string ?? $string = ''; - - if (preg_match('//u', $string)) { - return (new UnicodeString($string))->width(false); - } + $string = (string) $string; if (false === $encoding = mb_detect_encoding($string, null, true)) { return \strlen($string); @@ -64,9 +59,9 @@ public static function strlen(?string $string) * * @return string The string subset */ - public static function substr(?string $string, int $from, int $length = null) + public static function substr(string $string, int $from, int $length = null) { - $string ?? $string = ''; + $string = (string) $string; if (false === $encoding = mb_detect_encoding($string, null, true)) { return substr($string, $from, $length); @@ -123,13 +118,7 @@ public static function formatMemory(int $memory) public static function strlenWithoutDecoration(OutputFormatterInterface $formatter, ?string $string) { - $string = self::removeDecoration($formatter, $string); - - if (preg_match('//u', $string)) { - return (new UnicodeString($string))->width(true); - } - - return self::strlen($string); + return self::strlen(self::removeDecoration($formatter, $string)); } public static function removeDecoration(OutputFormatterInterface $formatter, ?string $string) diff --git a/src/Symfony/Component/Console/Helper/QuestionHelper.php b/src/Symfony/Component/Console/Helper/QuestionHelper.php index 5bf8186b8fbf8..c0fb5461fc660 100644 --- a/src/Symfony/Component/Console/Helper/QuestionHelper.php +++ b/src/Symfony/Component/Console/Helper/QuestionHelper.php @@ -311,7 +311,7 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu $remainingCharacters = substr($ret, \strlen(trim($this->mostRecentlyEnteredValue($fullChoice)))); $output->write($remainingCharacters); $fullChoice .= $remainingCharacters; - $i = (false === $encoding = mb_detect_encoding($fullChoice, null, true)) ? \strlen($fullChoice) : mb_strlen($fullChoice, $encoding); + $i = self::strlen($fullChoice); $matches = array_filter( $autocomplete($ret), diff --git a/src/Symfony/Component/Console/Style/SymfonyStyle.php b/src/Symfony/Component/Console/Style/SymfonyStyle.php index 075fe6621cc1f..187bceed2a75f 100644 --- a/src/Symfony/Component/Console/Style/SymfonyStyle.php +++ b/src/Symfony/Component/Console/Style/SymfonyStyle.php @@ -501,6 +501,8 @@ private function createBlock(iterable $messages, string $type = null, string $st } $line = $prefix.$line; + $decorationLength = Helper::strlen($line) - Helper::strlenWithoutDecoration($this->getFormatter(), $line); + $messageLineLength = min($this->lineLength - $prefixLength - $indentLength + $decorationLength, $this->lineLength); $line .= str_repeat(' ', max($this->lineLength - Helper::strlenWithoutDecoration($this->getFormatter(), $line), 0)); if ($style) { diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/command/command_21.php b/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/command/command_21.php deleted file mode 100644 index 8460e7ececf37..0000000000000 --- a/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/command/command_21.php +++ /dev/null @@ -1,13 +0,0 @@ -success('Lorem ipsum dolor sit amet'); - $output->success('Lorem ipsum dolor sit amet with one emoji πŸŽ‰'); - $output->success('Lorem ipsum dolor sit amet with so many of them πŸ‘©β€πŸŒΎπŸ‘©β€πŸŒΎπŸ‘©β€πŸŒΎπŸ‘©β€πŸŒΎπŸ‘©β€πŸŒΎ'); -}; diff --git a/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/output/output_21.txt b/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/output/output_21.txt deleted file mode 100644 index aee3c4a89c2e7..0000000000000 --- a/src/Symfony/Component/Console/Tests/Fixtures/Style/SymfonyStyle/output/output_21.txt +++ /dev/null @@ -1,7 +0,0 @@ - - [OK] Lorem ipsum dolor sit amet - - [OK] Lorem ipsum dolor sit amet with one emoji πŸŽ‰ - - [OK] Lorem ipsum dolor sit amet with so many of them πŸ‘©β€πŸŒΎπŸ‘©β€πŸŒΎπŸ‘©β€πŸŒΎπŸ‘©β€πŸŒΎπŸ‘©β€πŸŒΎ -