element instanceof TableElement) { return ''; } $element = $this->element; // No nesting table for now if ($element->getNestedLevel() >= 1) { return ''; } $content = ''; $style = $this->element->getStyle(); $bidiStyle = (is_object($style) && method_exists($style, 'isBidiVisual')) ? $style->isBidiVisual() : Settings::isDefaultRtl(); $bidi = $bidiStyle ? '\rtlrow' : ''; $rows = $element->getRows(); $rowCount = count($rows); if ($rowCount > 0) { $content .= '\pard' . PHP_EOL; for ($i = 0; $i < $rowCount; ++$i) { $content .= "\\trowd$bidi "; $content .= $this->writeRowDef($rows[$i]); $content .= PHP_EOL; $content .= $this->writeRow($rows[$i]); $content .= '\row' . PHP_EOL; } $content .= '\pard' . PHP_EOL; } return $content; } /** * Write column. * * @return string */ private function writeRowDef(RowElement $row) { $content = ''; $rightMargin = 0; foreach ($row->getCells() as $cell) { $width = $cell->getWidth(); $vMerge = $this->getVMerge($cell->getStyle()->getVMerge()); if ($width === null) { $width = 720; // Arbitrary default width } $rightMargin += $width; $content .= "{$vMerge}\\cellx{$rightMargin} "; } return $content; } /** * Write row. * * @return string */ private function writeRow(RowElement $row) { $content = ''; // Write cells foreach ($row->getCells() as $cell) { $content .= $this->writeCell($cell); } return $content; } /** * Write cell. * * @return string */ private function writeCell(CellElement $cell) { $content = '\intbl' . PHP_EOL; // Write content $writer = new Container($this->parentWriter, $cell); $content .= $writer->write(); $content .= '\cell' . PHP_EOL; return $content; } /** * Get vertical merge style. * * @param string $value * * @return string * * @todo Move to style */ private function getVMerge($value) { $style = ''; if ($value == 'restart') { $style = '\clvmgf'; } elseif ($value == 'continue') { $style = '\clvmrg'; } return $style; } }