xmlWriter = $xmlWriter; $this->element = $element; $this->withoutP = $withoutP; } /** * Get XML Writer * * @return \PhpOffice\Common\XMLWriter */ protected function getXmlWriter() { return $this->xmlWriter; } /** * Get element * * @return \PhpOffice\PhpWord\Element\AbstractElement */ protected function getElement() { return $this->element; } /** * Start w:p DOM element. * * @uses \PhpOffice\PhpWord\Writer\Word2007\Element\PageBreak::write() * @return void */ protected function startElementP() { if (!$this->withoutP) { $this->xmlWriter->startElement('w:p'); // Paragraph style if (method_exists($this->element, 'getParagraphStyle')) { $this->writeParagraphStyle(); } } $this->writeCommentRangeStart(); } /** * End w:p DOM element. * * @return void */ protected function endElementP() { $this->writeCommentRangeEnd(); if (!$this->withoutP) { $this->xmlWriter->endElement(); // w:p } } /** * Writes the w:commentRangeStart DOM element * * @return void */ protected function writeCommentRangeStart() { if ($this->element->getCommentRangeStart() != null) { $comment = $this->element->getCommentRangeStart(); //only set the ID if it is not yet set, otherwise it will overwrite it if ($comment->getElementId() == null) { $comment->setElementId(); } $this->xmlWriter->writeElementBlock('w:commentRangeStart', array('w:id' => $comment->getElementId())); } } /** * Writes the w:commentRangeEnd DOM element * * @return void */ protected function writeCommentRangeEnd() { if ($this->element->getCommentRangeEnd() != null) { $comment = $this->element->getCommentRangeEnd(); //only set the ID if it is not yet set, otherwise it will overwrite it if ($comment->getElementId() == null) { $comment->setElementId(); } $this->xmlWriter->writeElementBlock('w:commentRangeEnd', array('w:id' => $comment->getElementId())); $this->xmlWriter->startElement('w:r'); $this->xmlWriter->writeElementBlock('w:commentReference', array('w:id' => $comment->getElementId())); $this->xmlWriter->endElement(); } elseif ($this->element->getCommentRangeStart() != null && $this->element->getCommentRangeStart()->getEndElement() == null) { $comment = $this->element->getCommentRangeStart(); //only set the ID if it is not yet set, otherwise it will overwrite it if ($comment->getElementId() == null) { $comment->setElementId(); } $this->xmlWriter->writeElementBlock('w:commentRangeEnd', array('w:id' => $comment->getElementId())); $this->xmlWriter->startElement('w:r'); $this->xmlWriter->writeElementBlock('w:commentReference', array('w:id' => $comment->getElementId())); $this->xmlWriter->endElement(); } } /** * Write ending. * * @return void */ protected function writeParagraphStyle() { $this->writeTextStyle('Paragraph'); } /** * Write ending. * * @return void */ protected function writeFontStyle() { $this->writeTextStyle('Font'); } /** * Write text style. * * @param string $styleType Font|Paragraph * @return void */ private function writeTextStyle($styleType) { $method = "get{$styleType}Style"; $class = "PhpOffice\\PhpWord\\Writer\\Word2007\\Style\\{$styleType}"; $styleObject = $this->element->$method(); $styleWriter = new $class($this->xmlWriter, $styleObject); if (method_exists($styleWriter, 'setIsInline')) { $styleWriter->setIsInline(true); } /** @var \PhpOffice\PhpWord\Writer\Word2007\Style\AbstractStyle $styleWriter */ $styleWriter->write(); } /** * Convert text to valid format * * @param string $text * @return string */ protected function getText($text) { return CommonText::controlCharacterPHP2OOXML($text); } }