Issues (109)

parser/TableRowNode.php (1 issue)

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
Documentation Bug introduced by
$parent is of type dokuwiki\plugin\prosemirror\parser\Node, but the property $parent was declared to be of type dokuwiki\plugin\prosemirror\parser\TableNode. Are you sure that you always receive this specific sub-class here, or does it make sense to add an instanceof check?

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.

class Alien {}

class Dalek extends Alien {}

class Plot
{
    /** @var  Dalek */
    public $villain;
}

$alien = new Alien();
$plot = new Plot();
if ($alien instanceof Dalek) {
    $plot->villain = $alien;
}
Loading history...
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