summaryrefslogtreecommitdiff
path: root/vendor/symfony/console/Helper/TableStyle.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/symfony/console/Helper/TableStyle.php')
-rw-r--r--vendor/symfony/console/Helper/TableStyle.php362
1 files changed, 362 insertions, 0 deletions
diff --git a/vendor/symfony/console/Helper/TableStyle.php b/vendor/symfony/console/Helper/TableStyle.php
new file mode 100644
index 0000000..be956c1
--- /dev/null
+++ b/vendor/symfony/console/Helper/TableStyle.php
@@ -0,0 +1,362 @@
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Component\Console\Helper;
13
14use Symfony\Component\Console\Exception\InvalidArgumentException;
15use Symfony\Component\Console\Exception\LogicException;
16
17/**
18 * Defines the styles for a Table.
19 *
20 * @author Fabien Potencier <fabien@symfony.com>
21 * @author Саша Стаменковић <umpirsky@gmail.com>
22 * @author Dany Maillard <danymaillard93b@gmail.com>
23 */
24class TableStyle
25{
26 private string $paddingChar = ' ';
27 private string $horizontalOutsideBorderChar = '-';
28 private string $horizontalInsideBorderChar = '-';
29 private string $verticalOutsideBorderChar = '|';
30 private string $verticalInsideBorderChar = '|';
31 private string $crossingChar = '+';
32 private string $crossingTopRightChar = '+';
33 private string $crossingTopMidChar = '+';
34 private string $crossingTopLeftChar = '+';
35 private string $crossingMidRightChar = '+';
36 private string $crossingBottomRightChar = '+';
37 private string $crossingBottomMidChar = '+';
38 private string $crossingBottomLeftChar = '+';
39 private string $crossingMidLeftChar = '+';
40 private string $crossingTopLeftBottomChar = '+';
41 private string $crossingTopMidBottomChar = '+';
42 private string $crossingTopRightBottomChar = '+';
43 private string $headerTitleFormat = '<fg=black;bg=white;options=bold> %s </>';
44 private string $footerTitleFormat = '<fg=black;bg=white;options=bold> %s </>';
45 private string $cellHeaderFormat = '<info>%s</info>';
46 private string $cellRowFormat = '%s';
47 private string $cellRowContentFormat = ' %s ';
48 private string $borderFormat = '%s';
49 private int $padType = \STR_PAD_RIGHT;
50
51 /**
52 * Sets padding character, used for cell padding.
53 *
54 * @return $this
55 */
56 public function setPaddingChar(string $paddingChar): static
57 {
58 if (!$paddingChar) {
59 throw new LogicException('The padding char must not be empty.');
60 }
61
62 $this->paddingChar = $paddingChar;
63
64 return $this;
65 }
66
67 /**
68 * Gets padding character, used for cell padding.
69 */
70 public function getPaddingChar(): string
71 {
72 return $this->paddingChar;
73 }
74
75 /**
76 * Sets horizontal border characters.
77 *
78 * <code>
79 * ╔═══════════════╤══════════════════════════╤══════════════════╗
80 * 1 ISBN 2 Title │ Author ║
81 * ╠═══════════════╪══════════════════════════╪══════════════════╣
82 * ║ 99921-58-10-7 │ Divine Comedy │ Dante Alighieri ║
83 * ║ 9971-5-0210-0 │ A Tale of Two Cities │ Charles Dickens ║
84 * ║ 960-425-059-0 │ The Lord of the Rings │ J. R. R. Tolkien ║
85 * ║ 80-902734-1-6 │ And Then There Were None │ Agatha Christie ║
86 * ╚═══════════════╧══════════════════════════╧══════════════════╝
87 * </code>
88 *
89 * @return $this
90 */
91 public function setHorizontalBorderChars(string $outside, ?string $inside = null): static
92 {
93 $this->horizontalOutsideBorderChar = $outside;
94 $this->horizontalInsideBorderChar = $inside ?? $outside;
95
96 return $this;
97 }
98
99 /**
100 * Sets vertical border characters.
101 *
102 * <code>
103 * ╔═══════════════╤══════════════════════════╤══════════════════╗
104 * ║ ISBN │ Title │ Author ║
105 * ╠═══════1═══════╪══════════════════════════╪══════════════════╣
106 * ║ 99921-58-10-7 │ Divine Comedy │ Dante Alighieri ║
107 * ║ 9971-5-0210-0 │ A Tale of Two Cities │ Charles Dickens ║
108 * ╟───────2───────┼──────────────────────────┼──────────────────╢
109 * ║ 960-425-059-0 │ The Lord of the Rings │ J. R. R. Tolkien ║
110 * ║ 80-902734-1-6 │ And Then There Were None │ Agatha Christie ║
111 * ╚═══════════════╧══════════════════════════╧══════════════════╝
112 * </code>
113 *
114 * @return $this
115 */
116 public function setVerticalBorderChars(string $outside, ?string $inside = null): static
117 {
118 $this->verticalOutsideBorderChar = $outside;
119 $this->verticalInsideBorderChar = $inside ?? $outside;
120
121 return $this;
122 }
123
124 /**
125 * Gets border characters.
126 *
127 * @internal
128 */
129 public function getBorderChars(): array
130 {
131 return [
132 $this->horizontalOutsideBorderChar,
133 $this->verticalOutsideBorderChar,
134 $this->horizontalInsideBorderChar,
135 $this->verticalInsideBorderChar,
136 ];
137 }
138
139 /**
140 * Sets crossing characters.
141 *
142 * Example:
143 * <code>
144 * 1═══════════════2══════════════════════════2══════════════════3
145 * ║ ISBN │ Title │ Author ║
146 * 8'══════════════0'═════════════════════════0'═════════════════4'
147 * ║ 99921-58-10-7 │ Divine Comedy │ Dante Alighieri ║
148 * ║ 9971-5-0210-0 │ A Tale of Two Cities │ Charles Dickens ║
149 * 8───────────────0──────────────────────────0──────────────────4
150 * ║ 960-425-059-0 │ The Lord of the Rings │ J. R. R. Tolkien ║
151 * ║ 80-902734-1-6 │ And Then There Were None │ Agatha Christie ║
152 * 7═══════════════6══════════════════════════6══════════════════5
153 * </code>
154 *
155 * @param string $cross Crossing char (see #0 of example)
156 * @param string $topLeft Top left char (see #1 of example)
157 * @param string $topMid Top mid char (see #2 of example)
158 * @param string $topRight Top right char (see #3 of example)
159 * @param string $midRight Mid right char (see #4 of example)
160 * @param string $bottomRight Bottom right char (see #5 of example)
161 * @param string $bottomMid Bottom mid char (see #6 of example)
162 * @param string $bottomLeft Bottom left char (see #7 of example)
163 * @param string $midLeft Mid left char (see #8 of example)
164 * @param string|null $topLeftBottom Top left bottom char (see #8' of example), equals to $midLeft if null
165 * @param string|null $topMidBottom Top mid bottom char (see #0' of example), equals to $cross if null
166 * @param string|null $topRightBottom Top right bottom char (see #4' of example), equals to $midRight if null
167 *
168 * @return $this
169 */
170 public function setCrossingChars(string $cross, string $topLeft, string $topMid, string $topRight, string $midRight, string $bottomRight, string $bottomMid, string $bottomLeft, string $midLeft, ?string $topLeftBottom = null, ?string $topMidBottom = null, ?string $topRightBottom = null): static
171 {
172 $this->crossingChar = $cross;
173 $this->crossingTopLeftChar = $topLeft;
174 $this->crossingTopMidChar = $topMid;
175 $this->crossingTopRightChar = $topRight;
176 $this->crossingMidRightChar = $midRight;
177 $this->crossingBottomRightChar = $bottomRight;
178 $this->crossingBottomMidChar = $bottomMid;
179 $this->crossingBottomLeftChar = $bottomLeft;
180 $this->crossingMidLeftChar = $midLeft;
181 $this->crossingTopLeftBottomChar = $topLeftBottom ?? $midLeft;
182 $this->crossingTopMidBottomChar = $topMidBottom ?? $cross;
183 $this->crossingTopRightBottomChar = $topRightBottom ?? $midRight;
184
185 return $this;
186 }
187
188 /**
189 * Sets default crossing character used for each cross.
190 *
191 * @see {@link setCrossingChars()} for setting each crossing individually.
192 */
193 public function setDefaultCrossingChar(string $char): self
194 {
195 return $this->setCrossingChars($char, $char, $char, $char, $char, $char, $char, $char, $char);
196 }
197
198 /**
199 * Gets crossing character.
200 */
201 public function getCrossingChar(): string
202 {
203 return $this->crossingChar;
204 }
205
206 /**
207 * Gets crossing characters.
208 *
209 * @internal
210 */
211 public function getCrossingChars(): array
212 {
213 return [
214 $this->crossingChar,
215 $this->crossingTopLeftChar,
216 $this->crossingTopMidChar,
217 $this->crossingTopRightChar,
218 $this->crossingMidRightChar,
219 $this->crossingBottomRightChar,
220 $this->crossingBottomMidChar,
221 $this->crossingBottomLeftChar,
222 $this->crossingMidLeftChar,
223 $this->crossingTopLeftBottomChar,
224 $this->crossingTopMidBottomChar,
225 $this->crossingTopRightBottomChar,
226 ];
227 }
228
229 /**
230 * Sets header cell format.
231 *
232 * @return $this
233 */
234 public function setCellHeaderFormat(string $cellHeaderFormat): static
235 {
236 $this->cellHeaderFormat = $cellHeaderFormat;
237
238 return $this;
239 }
240
241 /**
242 * Gets header cell format.
243 */
244 public function getCellHeaderFormat(): string
245 {
246 return $this->cellHeaderFormat;
247 }
248
249 /**
250 * Sets row cell format.
251 *
252 * @return $this
253 */
254 public function setCellRowFormat(string $cellRowFormat): static
255 {
256 $this->cellRowFormat = $cellRowFormat;
257
258 return $this;
259 }
260
261 /**
262 * Gets row cell format.
263 */
264 public function getCellRowFormat(): string
265 {
266 return $this->cellRowFormat;
267 }
268
269 /**
270 * Sets row cell content format.
271 *
272 * @return $this
273 */
274 public function setCellRowContentFormat(string $cellRowContentFormat): static
275 {
276 $this->cellRowContentFormat = $cellRowContentFormat;
277
278 return $this;
279 }
280
281 /**
282 * Gets row cell content format.
283 */
284 public function getCellRowContentFormat(): string
285 {
286 return $this->cellRowContentFormat;
287 }
288
289 /**
290 * Sets table border format.
291 *
292 * @return $this
293 */
294 public function setBorderFormat(string $borderFormat): static
295 {
296 $this->borderFormat = $borderFormat;
297
298 return $this;
299 }
300
301 /**
302 * Gets table border format.
303 */
304 public function getBorderFormat(): string
305 {
306 return $this->borderFormat;
307 }
308
309 /**
310 * Sets cell padding type.
311 *
312 * @return $this
313 */
314 public function setPadType(int $padType): static
315 {
316 if (!\in_array($padType, [\STR_PAD_LEFT, \STR_PAD_RIGHT, \STR_PAD_BOTH], true)) {
317 throw new InvalidArgumentException('Invalid padding type. Expected one of (STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH).');
318 }
319
320 $this->padType = $padType;
321
322 return $this;
323 }
324
325 /**
326 * Gets cell padding type.
327 */
328 public function getPadType(): int
329 {
330 return $this->padType;
331 }
332
333 public function getHeaderTitleFormat(): string
334 {
335 return $this->headerTitleFormat;
336 }
337
338 /**
339 * @return $this
340 */
341 public function setHeaderTitleFormat(string $format): static
342 {
343 $this->headerTitleFormat = $format;
344
345 return $this;
346 }
347
348 public function getFooterTitleFormat(): string
349 {
350 return $this->footerTitleFormat;
351 }
352
353 /**
354 * @return $this
355 */
356 public function setFooterTitleFormat(string $format): static
357 {
358 $this->footerTitleFormat = $format;
359
360 return $this;
361 }
362}