|
18 | 18 | namespace PhpOffice\PhpWord\Reader\ODText;
|
19 | 19 |
|
20 | 20 | use DateTime;
|
| 21 | +use PhpOffice\Math\Reader\MathML; |
21 | 22 | use PhpOffice\PhpWord\Element\TrackChange;
|
22 | 23 | use PhpOffice\PhpWord\PhpWord;
|
23 | 24 | use PhpOffice\PhpWord\Shared\XMLReader;
|
@@ -51,37 +52,55 @@ public function read(PhpWord $phpWord): void
|
51 | 52 |
|
52 | 53 | break;
|
53 | 54 | case 'text:p': // Paragraph
|
54 |
| - $children = $node->childNodes; |
55 |
| - foreach ($children as $child) { |
56 |
| - switch ($child->nodeName) { |
57 |
| - case 'text:change-start': |
58 |
| - $changeId = $child->getAttribute('text:change-id'); |
59 |
| - if (isset($trackedChanges[$changeId])) { |
60 |
| - $changed = $trackedChanges[$changeId]; |
61 |
| - } |
| 55 | + $element = $xmlReader->getElement('draw:frame/draw:object', $node); |
| 56 | + if ($element) { |
| 57 | + $mathFile = str_replace('./', '', $element->getAttribute('xlink:href')) . '/content.xml'; |
62 | 58 |
|
63 |
| - break; |
64 |
| - case 'text:change-end': |
65 |
| - unset($changed); |
| 59 | + $xmlReaderObject = new XMLReader(); |
| 60 | + $mathElement = $xmlReaderObject->getDomFromZip($this->docFile, $mathFile); |
| 61 | + if ($mathElement) { |
| 62 | + $mathXML = $mathElement->saveXML($mathElement); |
66 | 63 |
|
67 |
| - break; |
68 |
| - case 'text:change': |
69 |
| - $changeId = $child->getAttribute('text:change-id'); |
70 |
| - if (isset($trackedChanges[$changeId])) { |
71 |
| - $changed = $trackedChanges[$changeId]; |
72 |
| - } |
| 64 | + if (is_string($mathXML)) { |
| 65 | + $reader = new MathML(); |
| 66 | + $math = $reader->read($mathXML); |
73 | 67 |
|
74 |
| - break; |
| 68 | + $section->addFormula($math); |
| 69 | + } |
75 | 70 | }
|
76 |
| - } |
| 71 | + } else { |
| 72 | + $children = $node->childNodes; |
| 73 | + foreach ($children as $child) { |
| 74 | + switch ($child->nodeName) { |
| 75 | + case 'text:change-start': |
| 76 | + $changeId = $child->getAttribute('text:change-id'); |
| 77 | + if (isset($trackedChanges[$changeId])) { |
| 78 | + $changed = $trackedChanges[$changeId]; |
| 79 | + } |
| 80 | + |
| 81 | + break; |
| 82 | + case 'text:change-end': |
| 83 | + unset($changed); |
77 | 84 |
|
78 |
| - $element = $section->addText($node->nodeValue); |
79 |
| - if (isset($changed) && is_array($changed)) { |
80 |
| - $element->setTrackChange($changed['changed']); |
81 |
| - if (isset($changed['textNodes'])) { |
82 |
| - foreach ($changed['textNodes'] as $changedNode) { |
83 |
| - $element = $section->addText($changedNode->nodeValue); |
84 |
| - $element->setTrackChange($changed['changed']); |
| 85 | + break; |
| 86 | + case 'text:change': |
| 87 | + $changeId = $child->getAttribute('text:change-id'); |
| 88 | + if (isset($trackedChanges[$changeId])) { |
| 89 | + $changed = $trackedChanges[$changeId]; |
| 90 | + } |
| 91 | + |
| 92 | + break; |
| 93 | + } |
| 94 | + } |
| 95 | + |
| 96 | + $element = $section->addText($node->nodeValue); |
| 97 | + if (isset($changed) && is_array($changed)) { |
| 98 | + $element->setTrackChange($changed['changed']); |
| 99 | + if (isset($changed['textNodes'])) { |
| 100 | + foreach ($changed['textNodes'] as $changedNode) { |
| 101 | + $element = $section->addText($changedNode->nodeValue); |
| 102 | + $element->setTrackChange($changed['changed']); |
| 103 | + } |
85 | 104 | }
|
86 | 105 | }
|
87 | 106 | }
|
|
0 commit comments