Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\Console\Helper;
|
Chris@0
|
13
|
Chris@0
|
14 use Symfony\Component\Console\Formatter\OutputFormatter;
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * The Formatter class provides helpers to format messages.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @author Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
20 */
|
Chris@0
|
21 class FormatterHelper extends Helper
|
Chris@0
|
22 {
|
Chris@0
|
23 /**
|
Chris@0
|
24 * Formats a message within a section.
|
Chris@0
|
25 *
|
Chris@0
|
26 * @param string $section The section name
|
Chris@0
|
27 * @param string $message The message
|
Chris@0
|
28 * @param string $style The style to apply to the section
|
Chris@0
|
29 *
|
Chris@0
|
30 * @return string The format section
|
Chris@0
|
31 */
|
Chris@0
|
32 public function formatSection($section, $message, $style = 'info')
|
Chris@0
|
33 {
|
Chris@0
|
34 return sprintf('<%s>[%s]</%s> %s', $style, $section, $style, $message);
|
Chris@0
|
35 }
|
Chris@0
|
36
|
Chris@0
|
37 /**
|
Chris@0
|
38 * Formats a message as a block of text.
|
Chris@0
|
39 *
|
Chris@0
|
40 * @param string|array $messages The message to write in the block
|
Chris@0
|
41 * @param string $style The style to apply to the whole block
|
Chris@0
|
42 * @param bool $large Whether to return a large block
|
Chris@0
|
43 *
|
Chris@0
|
44 * @return string The formatter message
|
Chris@0
|
45 */
|
Chris@0
|
46 public function formatBlock($messages, $style, $large = false)
|
Chris@0
|
47 {
|
Chris@17
|
48 if (!\is_array($messages)) {
|
Chris@17
|
49 $messages = [$messages];
|
Chris@0
|
50 }
|
Chris@0
|
51
|
Chris@0
|
52 $len = 0;
|
Chris@17
|
53 $lines = [];
|
Chris@0
|
54 foreach ($messages as $message) {
|
Chris@0
|
55 $message = OutputFormatter::escape($message);
|
Chris@0
|
56 $lines[] = sprintf($large ? ' %s ' : ' %s ', $message);
|
Chris@0
|
57 $len = max($this->strlen($message) + ($large ? 4 : 2), $len);
|
Chris@0
|
58 }
|
Chris@0
|
59
|
Chris@17
|
60 $messages = $large ? [str_repeat(' ', $len)] : [];
|
Chris@0
|
61 for ($i = 0; isset($lines[$i]); ++$i) {
|
Chris@0
|
62 $messages[] = $lines[$i].str_repeat(' ', $len - $this->strlen($lines[$i]));
|
Chris@0
|
63 }
|
Chris@0
|
64 if ($large) {
|
Chris@0
|
65 $messages[] = str_repeat(' ', $len);
|
Chris@0
|
66 }
|
Chris@0
|
67
|
Chris@0
|
68 for ($i = 0; isset($messages[$i]); ++$i) {
|
Chris@0
|
69 $messages[$i] = sprintf('<%s>%s</%s>', $style, $messages[$i], $style);
|
Chris@0
|
70 }
|
Chris@0
|
71
|
Chris@0
|
72 return implode("\n", $messages);
|
Chris@0
|
73 }
|
Chris@0
|
74
|
Chris@0
|
75 /**
|
Chris@0
|
76 * Truncates a message to the given length.
|
Chris@0
|
77 *
|
Chris@0
|
78 * @param string $message
|
Chris@0
|
79 * @param int $length
|
Chris@0
|
80 * @param string $suffix
|
Chris@0
|
81 *
|
Chris@0
|
82 * @return string
|
Chris@0
|
83 */
|
Chris@0
|
84 public function truncate($message, $length, $suffix = '...')
|
Chris@0
|
85 {
|
Chris@0
|
86 $computedLength = $length - $this->strlen($suffix);
|
Chris@0
|
87
|
Chris@0
|
88 if ($computedLength > $this->strlen($message)) {
|
Chris@0
|
89 return $message;
|
Chris@0
|
90 }
|
Chris@0
|
91
|
Chris@0
|
92 if (false === $encoding = mb_detect_encoding($message, null, true)) {
|
Chris@0
|
93 return substr($message, 0, $length).$suffix;
|
Chris@0
|
94 }
|
Chris@0
|
95
|
Chris@0
|
96 return mb_substr($message, 0, $length, $encoding).$suffix;
|
Chris@0
|
97 }
|
Chris@0
|
98
|
Chris@0
|
99 /**
|
Chris@0
|
100 * {@inheritdoc}
|
Chris@0
|
101 */
|
Chris@0
|
102 public function getName()
|
Chris@0
|
103 {
|
Chris@0
|
104 return 'formatter';
|
Chris@0
|
105 }
|
Chris@0
|
106 }
|