| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 | <?php/* * 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;    }}
 |