/* | |
* This file is part of the Symfony package. | |
* | |
* (c) Fabien Potencier <fabien@symfony.com> | |
* | |
* For the full copyright and license information, please view the LICENSE | |
* file that was distributed with this source code. | |
*/ | |
namespace Symfony\Component\Console\Helper; | |
use Symfony\Component\Console\Exception\InvalidArgumentException; | |
use Symfony\Component\Console\Exception\LogicException; | |
/** | |
* Defines the styles for a Table. | |
* | |
* @author Fabien Potencier <fabien@symfony.com> | |
* @author Π‘Π°ΡΠ° Π‘ΡΠ°ΠΌΠ΅Π½ΠΊΠΎΠ²ΠΈΡ <umpirsky@gmail.com> | |
* @author Dany Maillard <danymaillard93b@gmail.com> | |
*/ | |
class TableStyle | |
{ | |
private $paddingChar = ' '; | |
private $horizontalOutsideBorderChar = '-'; | |
private $horizontalInsideBorderChar = '-'; | |
private $verticalOutsideBorderChar = '|'; | |
private $verticalInsideBorderChar = '|'; | |
private $crossingChar = '+'; | |
private $crossingTopRightChar = '+'; | |
private $crossingTopMidChar = '+'; | |
private $crossingTopLeftChar = '+'; | |
private $crossingMidRightChar = '+'; | |
private $crossingBottomRightChar = '+'; | |
private $crossingBottomMidChar = '+'; | |
private $crossingBottomLeftChar = '+'; | |
private $crossingMidLeftChar = '+'; | |
private $crossingTopLeftBottomChar = '+'; | |
private $crossingTopMidBottomChar = '+'; | |
private $crossingTopRightBottomChar = '+'; | |
private $headerTitleFormat = '<fg=black;bg=white;options=bold> %s </>'; | |
private $footerTitleFormat = '<fg=black;bg=white;options=bold> %s </>'; | |
private $cellHeaderFormat = '<info>%s</info>'; | |
private $cellRowFormat = '%s'; | |
private $cellRowContentFormat = ' %s '; | |
private $borderFormat = '%s'; | |
private $padType = \STR_PAD_RIGHT; | |
/** | |
* Sets padding character, used for cell padding. | |
* | |
* @return $this | |
*/ | |
public function setPaddingChar(string $paddingChar) | |
{ | |
if (!$paddingChar) { | |
throw new LogicException('The padding char must not be empty.'); | |
} | |
$this->paddingChar = $paddingChar; | |
return $this; | |
} | |
/** | |
* Gets padding character, used for cell padding. | |
* | |
* @return string | |
*/ | |
public function getPaddingChar() | |
{ | |
return $this->paddingChar; | |
} | |
/** | |
* Sets horizontal border characters. | |
* | |
* <code> | |
* βββββββββββββββββ€βββββββββββββββββββββββββββ€βββββββββββββββββββ | |
* 1 ISBN 2 Title β Author β | |
* β ββββββββββββββββͺβββββββββββββββββββββββββββͺβββββββββββββββββββ£ | |
* β 99921-58-10-7 β Divine Comedy β Dante Alighieri β | |
* β 9971-5-0210-0 β A Tale of Two Cities β Charles Dickens β | |
* β 960-425-059-0 β The Lord of the Rings β J. R. R. Tolkien β | |
* β 80-902734-1-6 β And Then There Were None β Agatha Christie β | |
* βββββββββββββββββ§βββββββββββββββββββββββββββ§βββββββββββββββββββ | |
* </code> | |
* | |
* @return $this | |
*/ | |
public function setHorizontalBorderChars(string $outside, string $inside = null): self | |
{ | |
$this->horizontalOutsideBorderChar = $outside; | |
$this->horizontalInsideBorderChar = $inside ?? $outside; | |
return $this; | |
} | |
/** | |
* Sets vertical border characters. | |
* | |
* <code> | |
* βββββββββββββββββ€βββββββββββββββββββββββββββ€βββββββββββββββββββ | |
* β ISBN β Title β Author β | |
* β βββββββ1ββββββββͺβββββββββββββββββββββββββββͺβββββββββββββββββββ£ | |
* β 99921-58-10-7 β Divine Comedy β Dante Alighieri β | |
* β 9971-5-0210-0 β A Tale of Two Cities β Charles Dickens β | |
* ββββββββ2ββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββ’ | |
* β 960-425-059-0 β The Lord of the Rings β J. R. R. Tolkien β | |
* β 80-902734-1-6 β And Then There Were None β Agatha Christie β | |
* βββββββββββββββββ§βββββββββββββββββββββββββββ§βββββββββββββββββββ | |
* </code> | |
* | |
* @return $this | |
*/ | |
public function setVerticalBorderChars(string $outside, string $inside = null): self | |
{ | |
$this->verticalOutsideBorderChar = $outside; | |
$this->verticalInsideBorderChar = $inside ?? $outside; | |
return $this; | |
} | |
/** | |
* Gets border characters. | |
* | |
* @internal | |
*/ | |
public function getBorderChars(): array | |
{ | |
return [ | |
$this->horizontalOutsideBorderChar, | |
$this->verticalOutsideBorderChar, | |
$this->horizontalInsideBorderChar, | |
$this->verticalInsideBorderChar, | |
]; | |
} | |
/** | |
* Sets crossing characters. | |
* | |
* Example: | |
* <code> | |
* 1βββββββββββββββ2ββββββββββββββββββββββββββ2ββββββββββββββββββ3 | |
* β ISBN β Title β Author β | |
* 8'ββββββββββββββ0'βββββββββββββββββββββββββ0'βββββββββββββββββ4' | |
* β 99921-58-10-7 β Divine Comedy β Dante Alighieri β | |
* β 9971-5-0210-0 β A Tale of Two Cities β Charles Dickens β | |
* 8βββββββββββββββ0ββββββββββββββββββββββββββ0ββββββββββββββββββ4 | |
* β 960-425-059-0 β The Lord of the Rings β J. R. R. Tolkien β | |
* β 80-902734-1-6 β And Then There Were None β Agatha Christie β | |
* 7βββββββββββββββ6ββββββββββββββββββββββββββ6ββββββββββββββββββ5 | |
* </code> | |
* | |
* @param string $cross Crossing char (see #0 of example) | |
* @param string $topLeft Top left char (see #1 of example) | |
* @param string $topMid Top mid char (see #2 of example) | |
* @param string $topRight Top right char (see #3 of example) | |
* @param string $midRight Mid right char (see #4 of example) | |
* @param string $bottomRight Bottom right char (see #5 of example) | |
* @param string $bottomMid Bottom mid char (see #6 of example) | |
* @param string $bottomLeft Bottom left char (see #7 of example) | |
* @param string $midLeft Mid left char (see #8 of example) | |
* @param string|null $topLeftBottom Top left bottom char (see #8' of example), equals to $midLeft if null | |
* @param string|null $topMidBottom Top mid bottom char (see #0' of example), equals to $cross if null | |
* @param string|null $topRightBottom Top right bottom char (see #4' of example), equals to $midRight if null | |
* | |
* @return $this | |
*/ | |
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): self | |
{ | |
$this->crossingChar = $cross; | |
$this->crossingTopLeftChar = $topLeft; | |
$this->crossingTopMidChar = $topMid; | |
$this->crossingTopRightChar = $topRight; | |
$this->crossingMidRightChar = $midRight; | |
$this->crossingBottomRightChar = $bottomRight; | |
$this->crossingBottomMidChar = $bottomMid; | |
$this->crossingBottomLeftChar = $bottomLeft; | |
$this->crossingMidLeftChar = $midLeft; | |
$this->crossingTopLeftBottomChar = $topLeftBottom ?? $midLeft; | |
$this->crossingTopMidBottomChar = $topMidBottom ?? $cross; | |
$this->crossingTopRightBottomChar = $topRightBottom ?? $midRight; | |
return $this; | |
} | |
/** | |
* Sets default crossing character used for each cross. | |
* | |
* @see {@link setCrossingChars()} for setting each crossing individually. | |
*/ | |
public function setDefaultCrossingChar(string $char): self | |
{ | |
return $this->setCrossingChars($char, $char, $char, $char, $char, $char, $char, $char, $char); | |
} | |
/** | |
* Gets crossing character. | |
* | |
* @return string | |
*/ | |
public function getCrossingChar() | |
{ | |
return $this->crossingChar; | |
} | |
/** | |
* Gets crossing characters. | |
* | |
* @internal | |
*/ | |
public function getCrossingChars(): array | |
{ | |
return [ | |
$this->crossingChar, | |
$this->crossingTopLeftChar, | |
$this->crossingTopMidChar, | |
$this->crossingTopRightChar, | |
$this->crossingMidRightChar, | |
$this->crossingBottomRightChar, | |
$this->crossingBottomMidChar, | |
$this->crossingBottomLeftChar, | |
$this->crossingMidLeftChar, | |
$this->crossingTopLeftBottomChar, | |
$this->crossingTopMidBottomChar, | |
$this->crossingTopRightBottomChar, | |
]; | |
} | |
/** | |
* Sets header cell format. | |
* | |
* @return $this | |
*/ | |
public function setCellHeaderFormat(string $cellHeaderFormat) | |
{ | |
$this->cellHeaderFormat = $cellHeaderFormat; | |
return $this; | |
} | |
/** | |
* Gets header cell format. | |
* | |
* @return string | |
*/ | |
public function getCellHeaderFormat() | |
{ | |
return $this->cellHeaderFormat; | |
} | |
/** | |
* Sets row cell format. | |
* | |
* @return $this | |
*/ | |
public function setCellRowFormat(string $cellRowFormat) | |
{ | |
$this->cellRowFormat = $cellRowFormat; | |
return $this; | |
} | |
/** | |
* Gets row cell format. | |
* | |
* @return string | |
*/ | |
public function getCellRowFormat() | |
{ | |
return $this->cellRowFormat; | |
} | |
/** | |
* Sets row cell content format. | |
* | |
* @return $this | |
*/ | |
public function setCellRowContentFormat(string $cellRowContentFormat) | |
{ | |
$this->cellRowContentFormat = $cellRowContentFormat; | |
return $this; | |
} | |
/** | |
* Gets row cell content format. | |
* | |
* @return string | |
*/ | |
public function getCellRowContentFormat() | |
{ | |
return $this->cellRowContentFormat; | |
} | |
/** | |
* Sets table border format. | |
* | |
* @return $this | |
*/ | |
public function setBorderFormat(string $borderFormat) | |
{ | |
$this->borderFormat = $borderFormat; | |
return $this; | |
} | |
/** | |
* Gets table border format. | |
* | |
* @return string | |
*/ | |
public function getBorderFormat() | |
{ | |
return $this->borderFormat; | |
} | |
/** | |
* Sets cell padding type. | |
* | |
* @return $this | |
*/ | |
public function setPadType(int $padType) | |
{ | |
if (!\in_array($padType, [\STR_PAD_LEFT, \STR_PAD_RIGHT, \STR_PAD_BOTH], true)) { | |
throw new InvalidArgumentException('Invalid padding type. Expected one of (STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH).'); | |
} | |
$this->padType = $padType; | |
return $this; | |
} | |
/** | |
* Gets cell padding type. | |
* | |
* @return int | |
*/ | |
public function getPadType() | |
{ | |
return $this->padType; | |
} | |
public function getHeaderTitleFormat(): string | |
{ | |
return $this->headerTitleFormat; | |
} | |
/** | |
* @return $this | |
*/ | |
public function setHeaderTitleFormat(string $format): self | |
{ | |
$this->headerTitleFormat = $format; | |
return $this; | |
} | |
public function getFooterTitleFormat(): string | |
{ | |
return $this->footerTitleFormat; | |
} | |
/** | |
* @return $this | |
*/ | |
public function setFooterTitleFormat(string $format): self | |
{ | |
$this->footerTitleFormat = $format; | |
return $this; | |
} | |
} | |