cosmocode /
dokuwiki-plugin-prosemirror
| 1 | <?php |
||
| 2 | |||
| 3 | namespace dokuwiki\plugin\prosemirror\parser; |
||
| 4 | |||
| 5 | class TableRowNode extends Node |
||
| 6 | { |
||
| 7 | /** @var TableCellNode[] */ |
||
| 8 | protected $tableCells = []; |
||
| 9 | |||
| 10 | /** @var TableNode */ |
||
| 11 | protected $parent; |
||
| 12 | |||
| 13 | public function __construct($data, Node $parent) |
||
| 14 | { |
||
| 15 | $this->parent = $parent; |
||
|
0 ignored issues
–
show
|
|||
| 16 | foreach ($data['content'] as $cell) { |
||
| 17 | $this->tableCells[] = new TableCellNode($cell); |
||
| 18 | } |
||
| 19 | } |
||
| 20 | |||
| 21 | public function toSyntax() |
||
| 22 | { |
||
| 23 | $doc = ''; |
||
| 24 | $rowSpans = $this->parent->getRowSpans(); |
||
| 25 | $numColsInTable = $this->parent->getNumTableCols(); |
||
| 26 | $lastCell = end($this->tableCells); |
||
| 27 | for ($colIndex = 1; $colIndex <= $numColsInTable; $colIndex += $colSpan) { |
||
| 28 | if (!empty($rowSpans[$colIndex])) { |
||
| 29 | $doc .= '| ::: '; |
||
| 30 | --$rowSpans[$colIndex]; |
||
| 31 | $colSpan = 1; |
||
| 32 | continue; |
||
| 33 | } |
||
| 34 | $tableCell = array_shift($this->tableCells); |
||
| 35 | $doc .= $tableCell->toSyntax(); |
||
| 36 | |||
| 37 | $rowSpan = $tableCell->getRowSpan(); |
||
| 38 | $colSpan = $tableCell->getColSpan(); |
||
| 39 | // does nothing if $rowSpan==1 and $colSpan==1 |
||
| 40 | for ($colSpanIndex = 0; $colSpanIndex < $colSpan; ++$colSpanIndex) { |
||
| 41 | $rowSpans[$colIndex + $colSpanIndex] = $rowSpan - 1; |
||
| 42 | } |
||
| 43 | |||
| 44 | $doc .= str_repeat('|', $colSpan - 1); |
||
| 45 | } |
||
| 46 | $this->parent->setRowSpans($rowSpans); |
||
| 47 | |||
| 48 | $postfix = $lastCell->isHeaderCell() ? '^' : '|'; |
||
| 49 | |||
| 50 | return $doc . $postfix; |
||
| 51 | } |
||
| 52 | |||
| 53 | /** |
||
| 54 | * This counts the number of columns covered by the cells in the current row |
||
| 55 | * |
||
| 56 | * WARNING: This will not(!) count cells ommited due to row-spans! |
||
| 57 | * |
||
| 58 | * @return int |
||
| 59 | */ |
||
| 60 | public function countCols() |
||
| 61 | { |
||
| 62 | $cols = 0; |
||
| 63 | foreach ($this->tableCells as $cell) { |
||
| 64 | $cols += $cell->getColSpan(); |
||
| 65 | } |
||
| 66 | return $cols; |
||
| 67 | } |
||
| 68 | } |
||
| 69 |
Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a given class or a super-class is assigned to a property that is type hinted more strictly.
Either this assignment is in error or an instanceof check should be added for that assignment.