Support multiple elements (w:t, w:delText, w:tab) in w:r.

This commit is contained in:
Damjan Cvetko 2018-03-04 17:13:06 +01:00
parent 0869bdc8f7
commit 8a2cba2292
2 changed files with 14 additions and 8 deletions

View File

@ -241,14 +241,18 @@ abstract class AbstractPart
if ($xmlReader->elementExists('w:br', $domNode)) { if ($xmlReader->elementExists('w:br', $domNode)) {
$parent->addTextBreak(); $parent->addTextBreak();
} }
if ($xmlReader->elementExists('w:t', $domNode) || $xmlReader->elementExists('w:tab', $domNode)) { if ($xmlReader->elementExists('w:t', $domNode) || $xmlReader->elementExists('w:tab', $domNode) || $xmlReader->elementExists('w:delText', $domNode)) {
// TextRun // TextRun
if ($xmlReader->elementExists('w:tab', $domNode)) { $textContent = '';
$textContent = "\t"; $nodes = $xmlReader->getElements('w:t|w:delText|w:tab', $domNode);
} elseif ($domNode->parentNode->nodeName == 'w:del') { foreach ($nodes as $node) {
$textContent = $xmlReader->getValue('w:delText', $domNode); if ($node->nodeName == 'w:t') {
} else { $textContent .= $node->nodeValue;
$textContent = $xmlReader->getValue('w:t', $domNode); } elseif ($node->nodeName == 'w:delText') {
$textContent .= $node->nodeValue;
} elseif ($node->nodeName == 'w:tab') {
$textContent .= "\t";
}
} }
/** @var AbstractElement $element */ /** @var AbstractElement $element */
$element = $parent->addText($textContent, $fontStyle, $paragraphStyle); $element = $parent->addText($textContent, $fontStyle, $paragraphStyle);

View File

@ -91,7 +91,9 @@ class ElementTest extends AbstractTestReader
{ {
$documentXml = '<w:p> $documentXml = '<w:p>
<w:r> <w:r>
<w:t>One</w:t>
<w:tab/> <w:tab/>
<w:t>Two</w:t>
</w:r> </w:r>
</w:p>'; </w:p>';
@ -99,6 +101,6 @@ class ElementTest extends AbstractTestReader
$elements = $this->get($phpWord->getSections(), 0)->getElements(); $elements = $this->get($phpWord->getSections(), 0)->getElements();
$this->assertInstanceOf('PhpOffice\PhpWord\Element\Text', $elements[0]); $this->assertInstanceOf('PhpOffice\PhpWord\Element\Text', $elements[0]);
$this->assertEquals("\t", $elements[0]->getText()); $this->assertEquals("One\tTwo", $elements[0]->getText());
} }
} }