2
2
3
3
namespace PhpOffice \PhpWord \Writer \EPub3 \Part ;
4
4
5
+ use PhpOffice \PhpWord \Element \Text ;
6
+ use PhpOffice \PhpWord \Element \TextRun ;
5
7
use PhpOffice \PhpWord \PhpWord ;
6
8
use XMLWriter ;
7
9
@@ -64,33 +66,19 @@ public function write(): string
64
66
$ xmlWriter ->writeAttribute ('class ' , 'section ' );
65
67
66
68
foreach ($ section ->getElements () as $ element ) {
67
- if ($ element instanceof \ PhpOffice \ PhpWord \ Element \ TextRun) {
69
+ if ($ element instanceof TextRun) {
68
70
$ xmlWriter ->startElement ('p ' );
69
- foreach ($ element ->getElements () as $ textElement ) {
70
- if ($ textElement instanceof \PhpOffice \PhpWord \Element \Text) {
71
- $ xmlWriter ->text ($ textElement ->getText ());
72
- } elseif (method_exists ($ textElement , 'getText ' )) {
73
- $ xmlWriter ->text ($ textElement ->getText ());
74
- }
75
- }
71
+ $ this ->writeTextRun ($ element , $ xmlWriter );
76
72
$ xmlWriter ->endElement (); // p
77
73
} elseif (method_exists ($ element , 'getText ' )) {
78
- $ textValue = $ element ->getText ();
79
- if ($ textValue instanceof \PhpOffice \PhpWord \Element \TextRun) {
80
- $ xmlWriter ->startElement ('p ' );
81
- foreach ($ textValue ->getElements () as $ childElement ) {
82
- if ($ childElement instanceof \PhpOffice \PhpWord \Element \Text) {
83
- $ xmlWriter ->text ($ childElement ->getText ());
84
- } elseif (method_exists ($ childElement , 'getText ' )) {
85
- $ xmlWriter ->text ($ childElement ->getText ());
86
- }
87
- }
88
- $ xmlWriter ->endElement (); // p
89
- } else {
90
- $ xmlWriter ->startElement ('p ' );
91
- $ xmlWriter ->text ($ textValue );
92
- $ xmlWriter ->endElement (); // p
74
+ $ text = $ element ->getText ();
75
+ $ xmlWriter ->startElement ('p ' );
76
+ if ($ text instanceof TextRun) {
77
+ $ this ->writeTextRun ($ text , $ xmlWriter );
78
+ } elseif ($ text !== null ) {
79
+ $ xmlWriter ->text ((string ) $ text );
93
80
}
81
+ $ xmlWriter ->endElement (); // p
94
82
}
95
83
}
96
84
@@ -102,4 +90,28 @@ public function write(): string
102
90
103
91
return $ xmlWriter ->outputMemory (true );
104
92
}
93
+
94
+ protected function writeTextElement (\PhpOffice \PhpWord \Element \AbstractElement $ textElement , XMLWriter $ xmlWriter ): void
95
+ {
96
+ if ($ textElement instanceof Text) {
97
+ $ text = $ textElement ->getText ();
98
+ if ($ text !== null ) {
99
+ $ xmlWriter ->text ((string ) $ text );
100
+ }
101
+ } elseif (is_object ($ textElement ) && method_exists ($ textElement , 'getText ' )) {
102
+ $ text = $ textElement ->getText ();
103
+ if ($ text instanceof TextRun) {
104
+ $ this ->writeTextRun ($ text , $ xmlWriter );
105
+ } elseif ($ text !== null ) {
106
+ $ xmlWriter ->text ((string ) $ text );
107
+ }
108
+ }
109
+ }
110
+
111
+ protected function writeTextRun (TextRun $ textRun , XMLWriter $ xmlWriter ): void
112
+ {
113
+ foreach ($ textRun ->getElements () as $ element ) {
114
+ $ this ->writeTextElement ($ element , $ xmlWriter );
115
+ }
116
+ }
105
117
}
0 commit comments