name: Table
class_comment: "# * Provides helpers to display a table.\n# *\n# * @author Fabien\
  \ Potencier <fabien@symfony.com>\n# * @author \u0421\u0430\u0448\u0430 \u0421\u0442\
  \u0430\u043C\u0435\u043D\u043A\u043E\u0432\u0438\u045B <umpirsky@gmail.com>\n# *\
  \ @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n# * @author Max Grigorian\
  \ <maxakawizard@gmail.com>\n# * @author Dany Maillard <danymaillard93b@gmail.com>"
dependencies:
- name: InvalidArgumentException
  type: class
  source: Symfony\Component\Console\Exception\InvalidArgumentException
- name: RuntimeException
  type: class
  source: Symfony\Component\Console\Exception\RuntimeException
- name: OutputFormatter
  type: class
  source: Symfony\Component\Console\Formatter\OutputFormatter
- name: WrappableOutputFormatterInterface
  type: class
  source: Symfony\Component\Console\Formatter\WrappableOutputFormatterInterface
- name: ConsoleSectionOutput
  type: class
  source: Symfony\Component\Console\Output\ConsoleSectionOutput
- name: OutputInterface
  type: class
  source: Symfony\Component\Console\Output\OutputInterface
properties: []
methods:
- name: setStyleDefinition
  visibility: public
  parameters:
  - name: name
  - name: style
  comment: "# * Provides helpers to display a table.\n# *\n# * @author Fabien Potencier\
    \ <fabien@symfony.com>\n# * @author \u0421\u0430\u0448\u0430 \u0421\u0442\u0430\
    \u043C\u0435\u043D\u043A\u043E\u0432\u0438\u045B <umpirsky@gmail.com>\n# * @author\
    \ Abdellatif Ait boudad <a.aitboudad@gmail.com>\n# * @author Max Grigorian <maxakawizard@gmail.com>\n\
    # * @author Dany Maillard <danymaillard93b@gmail.com>\n# */\n# class Table\n#\
    \ {\n# private const SEPARATOR_TOP = 0;\n# private const SEPARATOR_TOP_BOTTOM\
    \ = 1;\n# private const SEPARATOR_MID = 2;\n# private const SEPARATOR_BOTTOM =\
    \ 3;\n# private const BORDER_OUTSIDE = 0;\n# private const BORDER_INSIDE = 1;\n\
    # private const DISPLAY_ORIENTATION_DEFAULT = 'default';\n# private const DISPLAY_ORIENTATION_HORIZONTAL\
    \ = 'horizontal';\n# private const DISPLAY_ORIENTATION_VERTICAL = 'vertical';\n\
    # \n# private ?string $headerTitle = null;\n# private ?string $footerTitle = null;\n\
    # private array $headers = [];\n# private array $rows = [];\n# private array $effectiveColumnWidths\
    \ = [];\n# private int $numberOfColumns;\n# private TableStyle $style;\n# private\
    \ array $columnStyles = [];\n# private array $columnWidths = [];\n# private array\
    \ $columnMaxWidths = [];\n# private bool $rendered = false;\n# private string\
    \ $displayOrientation = self::DISPLAY_ORIENTATION_DEFAULT;\n# \n# private static\
    \ array $styles;\n# \n# public function __construct(\n# private OutputInterface\
    \ $output,\n# ) {\n# self::$styles ??= self::initStyles();\n# \n# $this->setStyle('default');\n\
    # }\n# \n# /**\n# * Sets a style definition."
- name: getStyleDefinition
  visibility: public
  parameters:
  - name: name
  comment: '# * Gets a style definition by name.'
- name: setStyle
  visibility: public
  parameters:
  - name: name
  comment: '# * Sets table style.

    # *

    # * @return $this'
- name: getStyle
  visibility: public
  parameters: []
  comment: '# * Gets the current table style.'
- name: setColumnStyle
  visibility: public
  parameters:
  - name: columnIndex
  - name: name
  comment: '# * Sets table column style.

    # *

    # * @param TableStyle|string $name The style name or a TableStyle instance

    # *

    # * @return $this'
- name: getColumnStyle
  visibility: public
  parameters:
  - name: columnIndex
  comment: '# * Gets the current style for a column.

    # *

    # * If style was not set, it returns the global table style.'
- name: setColumnWidth
  visibility: public
  parameters:
  - name: columnIndex
  - name: width
  comment: '# * Sets the minimum width of a column.

    # *

    # * @return $this'
- name: setColumnWidths
  visibility: public
  parameters:
  - name: widths
  comment: '# * Sets the minimum width of all columns.

    # *

    # * @return $this'
- name: setColumnMaxWidth
  visibility: public
  parameters:
  - name: columnIndex
  - name: width
  comment: '# * Sets the maximum width of a column.

    # *

    # * Any cell within this column which contents exceeds the specified width will
    be wrapped into multiple lines, while

    # * formatted strings are preserved.

    # *

    # * @return $this'
- name: setHeaders
  visibility: public
  parameters:
  - name: headers
  comment: '# * @return $this'
- name: setRows
  visibility: public
  parameters:
  - name: rows
  comment: '# * @return $this'
- name: addRows
  visibility: public
  parameters:
  - name: rows
  comment: '# * @return $this'
- name: addRow
  visibility: public
  parameters:
  - name: row
  comment: '# * @return $this'
- name: appendRow
  visibility: public
  parameters:
  - name: row
  comment: '# * Adds a row to the table, and re-renders the table.

    # *

    # * @return $this'
- name: setRow
  visibility: public
  parameters:
  - name: column
  - name: row
  comment: '# * @return $this'
- name: setHeaderTitle
  visibility: public
  parameters:
  - name: title
  comment: '# * @return $this'
- name: setFooterTitle
  visibility: public
  parameters:
  - name: title
  comment: '# * @return $this'
- name: setHorizontal
  visibility: public
  parameters:
  - name: horizontal
    default: 'true'
  comment: '# * @return $this'
- name: setVertical
  visibility: public
  parameters:
  - name: vertical
    default: 'true'
  comment: '# * @return $this'
- name: render
  visibility: public
  parameters: []
  comment: '# * Renders table to output.

    # *

    # * Example:

    # *

    # *     +---------------+-----------------------+------------------+

    # *     | ISBN          | 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 |

    # *     +---------------+-----------------------+------------------+'
- name: renderRowSeparator
  visibility: private
  parameters:
  - name: type
    default: self::SEPARATOR_MID
  - name: title
    default: 'null'
  - name: titleFormat
    default: 'null'
  comment: '# * Renders horizontal header separator.

    # *

    # * Example:

    # *

    # *     +-----+-----------+-------+'
- name: renderColumnSeparator
  visibility: private
  parameters:
  - name: type
    default: self::BORDER_OUTSIDE
  comment: '# * Renders vertical column separator.'
- name: renderRow
  visibility: private
  parameters:
  - name: row
  - name: cellFormat
  - name: firstCellFormat
    default: 'null'
  comment: '# * Renders table row.

    # *

    # * Example:

    # *

    # *     | 9971-5-0210-0 | A Tale of Two Cities  | Charles Dickens  |'
- name: renderCell
  visibility: private
  parameters:
  - name: row
  - name: column
  - name: cellFormat
  comment: '# * Renders table cell with padding.'
- name: calculateNumberOfColumns
  visibility: private
  parameters:
  - name: rows
  comment: '# * Calculate number of columns for this table.'
- name: buildTableRows
  visibility: private
  parameters:
  - name: rows
  comment: null
- name: fillNextRows
  visibility: private
  parameters:
  - name: rows
  - name: line
  comment: "# @var WrappableOutputFormatterInterface $formatter */\n# $formatter =\
    \ $this->output->getFormatter();\n# $unmergedRows = [];\n# for ($rowKey = 0; $rowKey\
    \ < \\count($rows); ++$rowKey) {\n# $rows = $this->fillNextRows($rows, $rowKey);\n\
    # \n# // Remove any new line breaks and replace it with a new line\n# foreach\
    \ ($rows[$rowKey] as $column => $cell) {\n# $colspan = $cell instanceof TableCell\
    \ ? $cell->getColspan() : 1;\n# \n# if (isset($this->columnMaxWidths[$column])\
    \ && Helper::width(Helper::removeDecoration($formatter, $cell)) > $this->columnMaxWidths[$column])\
    \ {\n# $cell = $formatter->formatAndWrap($cell, $this->columnMaxWidths[$column]\
    \ * $colspan);\n# }\n# if (!str_contains($cell ?? '', \"\\n\")) {\n# continue;\n\
    # }\n# $eol = str_contains($cell ?? '', \"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n\
    # $escaped = implode($eol, array_map(OutputFormatter::escapeTrailingBackslash(...),\
    \ explode($eol, $cell)));\n# $cell = $cell instanceof TableCell ? new TableCell($escaped,\
    \ ['colspan' => $cell->getColspan()]) : $escaped;\n# $lines = explode($eol, str_replace($eol,\
    \ '<fg=default;bg=default></>'.$eol, $cell));\n# foreach ($lines as $lineKey =>\
    \ $line) {\n# if ($colspan > 1) {\n# $line = new TableCell($line, ['colspan' =>\
    \ $colspan]);\n# }\n# if (0 === $lineKey) {\n# $rows[$rowKey][$column] = $line;\n\
    # } else {\n# if (!\\array_key_exists($rowKey, $unmergedRows) || !\\array_key_exists($lineKey,\
    \ $unmergedRows[$rowKey])) {\n# $unmergedRows[$rowKey][$lineKey] = $this->copyRow($rows,\
    \ $rowKey);\n# }\n# $unmergedRows[$rowKey][$lineKey][$column] = $line;\n# }\n\
    # }\n# }\n# }\n# \n# return new TableRows(function () use ($rows, $unmergedRows):\
    \ \\Traversable {\n# foreach ($rows as $rowKey => $row) {\n# $rowGroup = [$row\
    \ instanceof TableSeparator ? $row : $this->fillCells($row)];\n# \n# if (isset($unmergedRows[$rowKey]))\
    \ {\n# foreach ($unmergedRows[$rowKey] as $row) {\n# $rowGroup[] = $row instanceof\
    \ TableSeparator ? $row : $this->fillCells($row);\n# }\n# }\n# yield $rowGroup;\n\
    # }\n# });\n# }\n# \n# private function calculateRowCount(): int\n# {\n# $numberOfRows\
    \ = \\count(iterator_to_array($this->buildTableRows(array_merge($this->headers,\
    \ [new TableSeparator()], $this->rows))));\n# \n# if ($this->headers) {\n# ++$numberOfRows;\
    \ // Add row for header separator\n# }\n# \n# if ($this->rows) {\n# ++$numberOfRows;\
    \ // Add row for footer separator\n# }\n# \n# return $numberOfRows;\n# }\n# \n\
    # /**\n# * fill rows that contains rowspan > 1.\n# *\n# * @throws InvalidArgumentException"
- name: fillCells
  visibility: private
  parameters:
  - name: row
  comment: '# * fill cells for a row that contains colspan > 1.'
- name: copyRow
  visibility: private
  parameters:
  - name: rows
  - name: line
  comment: null
- name: getNumberOfColumns
  visibility: private
  parameters:
  - name: row
  comment: '# * Gets number of columns by row.'
- name: getRowColumns
  visibility: private
  parameters:
  - name: row
  comment: '# * Gets list of columns for the given row.'
- name: calculateColumnsWidth
  visibility: private
  parameters:
  - name: groups
  comment: '# * Calculates columns widths.'
- name: getColumnSeparatorWidth
  visibility: private
  parameters: []
  comment: null
- name: getCellWidth
  visibility: private
  parameters:
  - name: row
  - name: column
  comment: null
- name: cleanup
  visibility: private
  parameters: []
  comment: '# * Called after rendering to cleanup cache data.'
- name: initStyles
  visibility: private
  parameters: []
  comment: '# * @return array<string, TableStyle>'
- name: resolveStyle
  visibility: private
  parameters:
  - name: name
  comment: null
traits:
- Symfony\Component\Console\Exception\InvalidArgumentException
- Symfony\Component\Console\Exception\RuntimeException
- Symfony\Component\Console\Formatter\OutputFormatter
- Symfony\Component\Console\Formatter\WrappableOutputFormatterInterface
- Symfony\Component\Console\Output\ConsoleSectionOutput
- Symfony\Component\Console\Output\OutputInterface
interfaces: []