Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
420 / 420
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
PptTheme
100.00% covered (success)
100.00%
420 / 420
100.00% covered (success)
100.00%
2 / 2
8
100.00% covered (success)
100.00%
1 / 1
 render
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 writeTheme
100.00% covered (success)
100.00%
417 / 417
100.00% covered (success)
100.00%
1 / 1
6
1<?php
2/**
3 * This file is part of PHPPresentation - A pure PHP library for reading and writing
4 * presentations documents.
5 *
6 * PHPPresentation is free software distributed under the terms of the GNU Lesser
7 * General Public License version 3 as published by the Free Software Foundation.
8 *
9 * For the full copyright and license information, please read the LICENSE
10 * file that was distributed with this source code. For the full list of
11 * contributors, visit https://github.com/PHPOffice/PHPPresentation/contributors.
12 *
13 * @see        https://github.com/PHPOffice/PHPPresentation
14 *
15 * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
16 */
17
18declare(strict_types=1);
19
20namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
21
22use PhpOffice\Common\Adapter\Zip\ZipInterface;
23use PhpOffice\Common\XMLWriter;
24use PhpOffice\PhpPresentation\Slide;
25
26class PptTheme extends AbstractDecoratorWriter
27{
28    public function render(): ZipInterface
29    {
30        foreach ($this->oPresentation->getAllMasterSlides() as $oMasterSlide) {
31            $this->getZip()->addFromString('ppt/theme/theme' . $oMasterSlide->getRelsIndex() . '.xml', $this->writeTheme($oMasterSlide));
32        }
33
34        return $this->getZip();
35    }
36
37    /**
38     * Write theme to XML format.
39     *
40     * @return string XML Output
41     */
42    protected function writeTheme(Slide\SlideMaster $oMasterSlide): string
43    {
44        $arrayFont = [
45            'Jpan' => 'MS Pゴシック',
46            'Hang' => '맑은 고딕',
47            'Hans' => '宋体',
48            'Hant' => '新細明體',
49            'Arab' => 'Times New Roman',
50            'Hebr' => 'Times New Roman',
51            'Thai' => 'Angsana New',
52            'Ethi' => 'Nyala',
53            'Beng' => 'Vrinda',
54            'Gujr' => 'Shruti',
55            'Khmr' => 'MoolBoran',
56            'Knda' => 'Tunga',
57            'Guru' => 'Raavi',
58            'Cans' => 'Euphemia',
59            'Cher' => 'Plantagenet Cherokee',
60            'Yiii' => 'Microsoft Yi Baiti',
61            'Tibt' => 'Microsoft Himalaya',
62            'Thaa' => 'MV Boli',
63            'Deva' => 'Mangal',
64            'Telu' => 'Gautami',
65            'Taml' => 'Latha',
66            'Syrc' => 'Estrangelo Edessa',
67            'Orya' => 'Kalinga',
68            'Mlym' => 'Kartika',
69            'Laoo' => 'DokChampa',
70            'Sinh' => 'Iskoola Pota',
71            'Mong' => 'Mongolian Baiti',
72            'Viet' => 'Times New Roman',
73            'Uigh' => 'Microsoft Uighur',
74        ];
75
76        // Create XML writer
77        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
78
79        $name = 'Theme' . mt_rand(1, 100);
80
81        // XML header
82        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
83
84        // a:theme
85        $objWriter->startElement('a:theme');
86        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
87        $objWriter->writeAttribute('name', $name);
88
89        // a:theme/a:themeElements
90        $objWriter->startElement('a:themeElements');
91
92        // a:theme/a:themeElements/a:clrScheme
93        $objWriter->startElement('a:clrScheme');
94        $objWriter->writeAttribute('name', $name);
95
96        foreach ($oMasterSlide->getAllSchemeColors() as $oSchemeColor) {
97            // a:theme/a:themeElements/a:clrScheme/a:*
98            $objWriter->startElement('a:' . $oSchemeColor->getValue());
99
100            if (in_array($oSchemeColor->getValue(), [
101                'dk1', 'lt1',
102            ])) {
103                $objWriter->startElement('a:sysClr');
104                $objWriter->writeAttribute('val', ('dk1' == $oSchemeColor->getValue() ? 'windowText' : 'window'));
105                $objWriter->writeAttribute('lastClr', $oSchemeColor->getRGB());
106                $objWriter->endElement();
107            } else {
108                $objWriter->startElement('a:srgbClr');
109                $objWriter->writeAttribute('val', $oSchemeColor->getRGB());
110                $objWriter->endElement();
111            }
112
113            // a:theme/a:themeElements/a:clrScheme/a:*/
114            $objWriter->endElement();
115        }
116
117        // a:theme/a:themeElements/a:clrScheme/
118        $objWriter->endElement();
119
120        // a:theme/a:themeElements/a:fontScheme
121        $objWriter->startElement('a:fontScheme');
122        $objWriter->writeAttribute('name', $name);
123
124        // a:theme/a:themeElements/a:fontScheme/a:majorFont
125        $objWriter->startElement('a:majorFont');
126
127        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin
128        $objWriter->startElement('a:latin');
129        $objWriter->writeAttribute('typeface', 'Calibri');
130        $objWriter->endElement();
131
132        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea
133        $objWriter->startElement('a:ea');
134        $objWriter->writeAttribute('typeface', '');
135        $objWriter->endElement();
136
137        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs
138        $objWriter->startElement('a:cs');
139        $objWriter->writeAttribute('typeface', '');
140        $objWriter->endElement();
141
142        foreach ($arrayFont as $script => $typeface) {
143            // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font
144            $objWriter->startElement('a:font');
145            $objWriter->writeAttribute('script', $script);
146            $objWriter->writeAttribute('typeface', $typeface);
147            $objWriter->endElement();
148        }
149
150        // a:theme/a:themeElements/a:fontScheme/a:majorFont/
151        $objWriter->endElement();
152
153        // a:theme/a:themeElements/a:fontScheme/a:minorFont
154        $objWriter->startElement('a:minorFont');
155
156        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin
157        $objWriter->startElement('a:latin');
158        $objWriter->writeAttribute('typeface', 'Calibri');
159        $objWriter->endElement();
160
161        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea
162        $objWriter->startElement('a:ea');
163        $objWriter->writeAttribute('typeface', '');
164        $objWriter->endElement();
165
166        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs
167        $objWriter->startElement('a:cs');
168        $objWriter->writeAttribute('typeface', '');
169        $objWriter->endElement();
170
171        foreach ($arrayFont as $script => $typeface) {
172            // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font
173            $objWriter->startElement('a:font');
174            $objWriter->writeAttribute('script', $script);
175            $objWriter->writeAttribute('typeface', $typeface);
176            $objWriter->endElement();
177        }
178
179        // a:theme/a:themeElements/a:fontScheme/a:minorFont/
180        $objWriter->endElement();
181
182        // a:theme/a:themeElements/a:fontScheme/
183        $objWriter->endElement();
184
185        // a:theme/a:themeElements/a:fmtScheme
186        $objWriter->startElement('a:fmtScheme');
187        $objWriter->writeAttribute('name', $name);
188
189        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst
190        $objWriter->startElement('a:fillStyleLst');
191
192        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill
193        $objWriter->startElement('a:solidFill');
194
195        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr
196        $objWriter->startElement('a:schemeClr');
197        $objWriter->writeAttribute('val', 'phClr');
198
199        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr/
200        $objWriter->endElement();
201
202        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/
203        $objWriter->endElement();
204
205        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill
206        $objWriter->startElement('a:gradFill');
207        $objWriter->writeAttribute('rotWithShape', 1);
208
209        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst
210        $objWriter->startElement('a:gsLst');
211
212        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
213        $objWriter->startElement('a:gs');
214        $objWriter->writeAttribute('pos', '0');
215
216        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
217        $objWriter->startElement('a:schemeClr');
218        $objWriter->writeAttribute('val', 'phClr');
219
220        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
221        $objWriter->startElement('a:tint');
222        $objWriter->writeAttribute('val', '50000');
223        $objWriter->endElement();
224
225        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
226        $objWriter->startElement('a:satMod');
227        $objWriter->writeAttribute('val', '300000');
228        $objWriter->endElement();
229
230        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
231        $objWriter->endElement();
232
233        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
234        $objWriter->endElement();
235
236        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
237        $objWriter->startElement('a:gs');
238        $objWriter->writeAttribute('pos', '35000');
239
240        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
241        $objWriter->startElement('a:schemeClr');
242        $objWriter->writeAttribute('val', 'phClr');
243
244        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
245        $objWriter->startElement('a:tint');
246        $objWriter->writeAttribute('val', '37000');
247        $objWriter->endElement();
248
249        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
250        $objWriter->startElement('a:satMod');
251        $objWriter->writeAttribute('val', '300000');
252        $objWriter->endElement();
253
254        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
255        $objWriter->endElement();
256
257        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
258        $objWriter->endElement();
259
260        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
261        $objWriter->startElement('a:gs');
262        $objWriter->writeAttribute('pos', '100000');
263
264        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
265        $objWriter->startElement('a:schemeClr');
266        $objWriter->writeAttribute('val', 'phClr');
267
268        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
269        $objWriter->startElement('a:tint');
270        $objWriter->writeAttribute('val', '15000');
271        $objWriter->endElement();
272
273        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
274        $objWriter->startElement('a:satMod');
275        $objWriter->writeAttribute('val', '350000');
276        $objWriter->endElement();
277
278        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
279        $objWriter->endElement();
280
281        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
282        $objWriter->endElement();
283
284        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/
285        $objWriter->endElement();
286
287        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:lin
288        $objWriter->startElement('a:lin');
289        $objWriter->writeAttribute('ang', 16200000);
290        $objWriter->writeAttribute('scaled', 1);
291        $objWriter->endElement();
292
293        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/
294        $objWriter->endElement();
295
296        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill
297        $objWriter->startElement('a:gradFill');
298        $objWriter->writeAttribute('rotWithShape', 1);
299
300        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst
301        $objWriter->startElement('a:gsLst');
302
303        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
304        $objWriter->startElement('a:gs');
305        $objWriter->writeAttribute('pos', '0');
306
307        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
308        $objWriter->startElement('a:schemeClr');
309        $objWriter->writeAttribute('val', 'phClr');
310
311        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
312        $objWriter->startElement('a:shade');
313        $objWriter->writeAttribute('val', '51000');
314        $objWriter->endElement();
315
316        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
317        $objWriter->startElement('a:satMod');
318        $objWriter->writeAttribute('val', '130000');
319        $objWriter->endElement();
320
321        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
322        $objWriter->endElement();
323
324        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
325        $objWriter->endElement();
326
327        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
328        $objWriter->startElement('a:gs');
329        $objWriter->writeAttribute('pos', '80000');
330
331        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
332        $objWriter->startElement('a:schemeClr');
333        $objWriter->writeAttribute('val', 'phClr');
334
335        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
336        $objWriter->startElement('a:shade');
337        $objWriter->writeAttribute('val', '93000');
338        $objWriter->endElement();
339
340        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
341        $objWriter->startElement('a:satMod');
342        $objWriter->writeAttribute('val', '130000');
343        $objWriter->endElement();
344
345        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
346        $objWriter->endElement();
347
348        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
349        $objWriter->endElement();
350
351        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
352        $objWriter->startElement('a:gs');
353        $objWriter->writeAttribute('pos', '100000');
354
355        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
356        $objWriter->startElement('a:schemeClr');
357        $objWriter->writeAttribute('val', 'phClr');
358
359        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
360        $objWriter->startElement('a:shade');
361        $objWriter->writeAttribute('val', '94000');
362        $objWriter->endElement();
363
364        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
365        $objWriter->startElement('a:satMod');
366        $objWriter->writeAttribute('val', '135000');
367        $objWriter->endElement();
368
369        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
370        $objWriter->endElement();
371
372        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
373        $objWriter->endElement();
374
375        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/
376        $objWriter->endElement();
377
378        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:lin
379        $objWriter->startElement('a:lin');
380        $objWriter->writeAttribute('ang', 16200000);
381        $objWriter->writeAttribute('scaled', 0);
382        $objWriter->endElement();
383
384        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/
385        $objWriter->endElement();
386
387        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/
388        $objWriter->endElement();
389
390        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst
391        $objWriter->startElement('a:lnStyleLst');
392
393        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
394        $objWriter->startElement('a:ln');
395        $objWriter->writeAttribute('w', 9525);
396        $objWriter->writeAttribute('cap', 'flat');
397        $objWriter->writeAttribute('cmpd', 'sng');
398        $objWriter->writeAttribute('algn', 'ctr');
399
400        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
401        $objWriter->startElement('a:solidFill');
402
403        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
404        $objWriter->startElement('a:schemeClr');
405        $objWriter->writeAttribute('val', 'phClr');
406
407        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
408        $objWriter->startElement('a:shade');
409        $objWriter->writeAttribute('val', '95000');
410        $objWriter->endElement();
411
412        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
413        $objWriter->startElement('a:satMod');
414        $objWriter->writeAttribute('val', '105000');
415        $objWriter->endElement();
416
417        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
418        $objWriter->endElement();
419
420        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
421        $objWriter->endElement();
422
423        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
424        $objWriter->startElement('a:prstDash');
425        $objWriter->writeAttribute('val', 'solid');
426        $objWriter->endElement();
427
428        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
429        $objWriter->endElement();
430
431        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
432        $objWriter->startElement('a:ln');
433        $objWriter->writeAttribute('w', 25400);
434        $objWriter->writeAttribute('cap', 'flat');
435        $objWriter->writeAttribute('cmpd', 'sng');
436        $objWriter->writeAttribute('algn', 'ctr');
437
438        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
439        $objWriter->startElement('a:solidFill');
440
441        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
442        $objWriter->startElement('a:schemeClr');
443        $objWriter->writeAttribute('val', 'phClr');
444
445        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
446        $objWriter->endElement();
447
448        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
449        $objWriter->endElement();
450
451        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
452        $objWriter->startElement('a:prstDash');
453        $objWriter->writeAttribute('val', 'solid');
454        $objWriter->endElement();
455
456        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
457        $objWriter->endElement();
458
459        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
460        $objWriter->startElement('a:ln');
461        $objWriter->writeAttribute('w', 38100);
462        $objWriter->writeAttribute('cap', 'flat');
463        $objWriter->writeAttribute('cmpd', 'sng');
464        $objWriter->writeAttribute('algn', 'ctr');
465
466        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
467        $objWriter->startElement('a:solidFill');
468
469        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
470        $objWriter->startElement('a:schemeClr');
471        $objWriter->writeAttribute('val', 'phClr');
472
473        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
474        $objWriter->endElement();
475
476        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
477        $objWriter->endElement();
478
479        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
480        $objWriter->startElement('a:prstDash');
481        $objWriter->writeAttribute('val', 'solid');
482        $objWriter->endElement();
483
484        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
485        $objWriter->endElement();
486
487        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/
488        $objWriter->endElement();
489
490        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst
491        $objWriter->startElement('a:effectStyleLst');
492
493        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
494        $objWriter->startElement('a:effectStyle');
495
496        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
497        $objWriter->startElement('a:effectLst');
498
499        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
500        $objWriter->startElement('a:outerShdw');
501        $objWriter->writeAttribute('blurRad', 40000);
502        $objWriter->writeAttribute('dir', 5400000);
503        $objWriter->writeAttribute('dist', 20000);
504        $objWriter->writeAttribute('rotWithShape', 0);
505
506        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
507        $objWriter->startElement('a:srgbClr');
508        $objWriter->writeAttribute('val', '000000');
509
510        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
511        $objWriter->startElement('a:alpha');
512        $objWriter->writeAttribute('val', '38000');
513
514        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
515        $objWriter->endElement();
516
517        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
518        $objWriter->endElement();
519
520        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
521        $objWriter->endElement();
522
523        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
524        $objWriter->endElement();
525
526        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
527        $objWriter->endElement();
528
529        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
530        $objWriter->startElement('a:effectStyle');
531
532        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
533        $objWriter->startElement('a:effectLst');
534
535        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
536        $objWriter->startElement('a:outerShdw');
537        $objWriter->writeAttribute('blurRad', 40000);
538        $objWriter->writeAttribute('dir', 5400000);
539        $objWriter->writeAttribute('dist', 23000);
540        $objWriter->writeAttribute('rotWithShape', 0);
541
542        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
543        $objWriter->startElement('a:srgbClr');
544        $objWriter->writeAttribute('val', '000000');
545
546        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
547        $objWriter->startElement('a:alpha');
548        $objWriter->writeAttribute('val', '35');
549
550        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
551        $objWriter->endElement();
552
553        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
554        $objWriter->endElement();
555
556        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
557        $objWriter->endElement();
558
559        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
560        $objWriter->endElement();
561
562        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
563        $objWriter->endElement();
564
565        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
566        $objWriter->startElement('a:effectStyle');
567
568        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
569        $objWriter->startElement('a:effectLst');
570
571        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
572        $objWriter->startElement('a:outerShdw');
573        $objWriter->writeAttribute('blurRad', 40000);
574        $objWriter->writeAttribute('dir', 5400000);
575        $objWriter->writeAttribute('dist', 23000);
576        $objWriter->writeAttribute('rotWithShape', 0);
577
578        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
579        $objWriter->startElement('a:srgbClr');
580        $objWriter->writeAttribute('val', '000000');
581
582        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
583        $objWriter->startElement('a:alpha');
584        $objWriter->writeAttribute('val', '35000');
585
586        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
587        $objWriter->endElement();
588
589        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
590        $objWriter->endElement();
591
592        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
593        $objWriter->endElement();
594
595        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
596        $objWriter->endElement();
597
598        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d
599        $objWriter->startElement('a:scene3d');
600
601        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera
602        $objWriter->startElement('a:camera');
603        $objWriter->writeAttribute('prst', 'orthographicFront');
604
605        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/a:rot
606        $objWriter->startElement('a:rot');
607        $objWriter->writeAttribute('lat', 0);
608        $objWriter->writeAttribute('lon', 0);
609        $objWriter->writeAttribute('rev', 0);
610        $objWriter->endElement();
611
612        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/
613        $objWriter->endElement();
614
615        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig
616        $objWriter->startElement('a:lightRig');
617        $objWriter->writeAttribute('dir', 't');
618        $objWriter->writeAttribute('rig', 'threePt');
619
620        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/a:rot
621        $objWriter->startElement('a:rot');
622        $objWriter->writeAttribute('lat', 0);
623        $objWriter->writeAttribute('lon', 0);
624        $objWriter->writeAttribute('rev', 1200000);
625        $objWriter->endElement();
626
627        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/
628        $objWriter->endElement();
629
630        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/
631        $objWriter->endElement();
632
633        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d
634        $objWriter->startElement('a:sp3d');
635
636        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/a:bevelT
637        $objWriter->startElement('a:bevelT');
638        $objWriter->writeAttribute('h', 25400);
639        $objWriter->writeAttribute('w', 63500);
640        $objWriter->endElement();
641
642        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/
643        $objWriter->endElement();
644
645        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
646        $objWriter->endElement();
647
648        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/
649        $objWriter->endElement();
650
651        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst
652        $objWriter->startElement('a:bgFillStyleLst');
653
654        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill
655        $objWriter->startElement('a:solidFill');
656
657        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr
658        $objWriter->startElement('a:schemeClr');
659        $objWriter->writeAttribute('val', 'phClr');
660
661        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr/
662        $objWriter->endElement();
663
664        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/
665        $objWriter->endElement();
666
667        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill
668        $objWriter->startElement('a:gradFill');
669        $objWriter->writeAttribute('rotWithShape', 1);
670
671        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst
672        $objWriter->startElement('a:gsLst');
673
674        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
675        $objWriter->startElement('a:gs');
676        $objWriter->writeAttribute('pos', '0');
677
678        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
679        $objWriter->startElement('a:schemeClr');
680        $objWriter->writeAttribute('val', 'phClr');
681
682        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
683        $objWriter->startElement('a:tint');
684        $objWriter->writeAttribute('val', '40000');
685        $objWriter->endElement();
686
687        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
688        $objWriter->startElement('a:satMod');
689        $objWriter->writeAttribute('val', '350000');
690        $objWriter->endElement();
691
692        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
693        $objWriter->endElement();
694
695        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
696        $objWriter->endElement();
697
698        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
699        $objWriter->startElement('a:gs');
700        $objWriter->writeAttribute('pos', '40000');
701
702        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
703        $objWriter->startElement('a:schemeClr');
704        $objWriter->writeAttribute('val', 'phClr');
705
706        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
707        $objWriter->startElement('a:tint');
708        $objWriter->writeAttribute('val', '45000');
709        $objWriter->endElement();
710
711        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
712        $objWriter->startElement('a:shade');
713        $objWriter->writeAttribute('val', '99000');
714        $objWriter->endElement();
715
716        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
717        $objWriter->startElement('a:satMod');
718        $objWriter->writeAttribute('val', '350000');
719        $objWriter->endElement();
720
721        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
722        $objWriter->endElement();
723
724        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
725        $objWriter->endElement();
726
727        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
728        $objWriter->startElement('a:gs');
729        $objWriter->writeAttribute('pos', '100000');
730
731        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
732        $objWriter->startElement('a:schemeClr');
733        $objWriter->writeAttribute('val', 'phClr');
734
735        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
736        $objWriter->startElement('a:shade');
737        $objWriter->writeAttribute('val', '20000');
738        $objWriter->endElement();
739
740        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
741        $objWriter->startElement('a:satMod');
742        $objWriter->writeAttribute('val', '255000');
743        $objWriter->endElement();
744
745        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
746        $objWriter->endElement();
747
748        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
749        $objWriter->endElement();
750
751        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/
752        $objWriter->endElement();
753
754        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path
755        $objWriter->startElement('a:path');
756        $objWriter->writeAttribute('path', 'circle');
757
758        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect
759        $objWriter->startElement('a:fillToRect');
760        $objWriter->writeAttribute('b', '180000');
761        $objWriter->writeAttribute('l', '50000');
762        $objWriter->writeAttribute('r', '50000');
763        $objWriter->writeAttribute('t', '-80000');
764        $objWriter->endElement();
765
766        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/
767        $objWriter->endElement();
768
769        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/
770        $objWriter->endElement();
771
772        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill
773        $objWriter->startElement('a:gradFill');
774        $objWriter->writeAttribute('rotWithShape', 1);
775
776        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst
777        $objWriter->startElement('a:gsLst');
778
779        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
780        $objWriter->startElement('a:gs');
781        $objWriter->writeAttribute('pos', '0');
782
783        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
784        $objWriter->startElement('a:schemeClr');
785        $objWriter->writeAttribute('val', 'phClr');
786
787        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
788        $objWriter->startElement('a:tint');
789        $objWriter->writeAttribute('val', '80000');
790        $objWriter->endElement();
791
792        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
793        $objWriter->startElement('a:satMod');
794        $objWriter->writeAttribute('val', '300000');
795        $objWriter->endElement();
796
797        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
798        $objWriter->endElement();
799
800        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
801        $objWriter->endElement();
802
803        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
804        $objWriter->startElement('a:gs');
805        $objWriter->writeAttribute('pos', '100000');
806
807        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
808        $objWriter->startElement('a:schemeClr');
809        $objWriter->writeAttribute('val', 'phClr');
810
811        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
812        $objWriter->startElement('a:shade');
813        $objWriter->writeAttribute('val', '30000');
814        $objWriter->endElement();
815
816        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
817        $objWriter->startElement('a:satMod');
818        $objWriter->writeAttribute('val', '200000');
819        $objWriter->endElement();
820
821        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
822        $objWriter->endElement();
823
824        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
825        $objWriter->endElement();
826
827        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/
828        $objWriter->endElement();
829
830        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path
831        $objWriter->startElement('a:path');
832        $objWriter->writeAttribute('path', 'circle');
833
834        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect
835        $objWriter->startElement('a:fillToRect');
836        $objWriter->writeAttribute('b', '50000');
837        $objWriter->writeAttribute('l', '50000');
838        $objWriter->writeAttribute('r', '50000');
839        $objWriter->writeAttribute('t', '50000');
840        $objWriter->endElement();
841
842        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/
843        $objWriter->endElement();
844
845        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/
846        $objWriter->endElement();
847
848        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/
849        $objWriter->endElement();
850
851        // a:theme/a:themeElements/a:fmtScheme/
852        $objWriter->endElement();
853
854        // a:theme/a:themeElements/
855        $objWriter->endElement();
856
857        // a:theme/a:themeElements
858        $objWriter->writeElement('a:objectDefaults');
859
860        // a:theme/a:extraClrSchemeLst
861        $objWriter->writeElement('a:extraClrSchemeLst');
862
863        // a:theme/
864        $objWriter->endElement();
865
866        // Return
867        return $objWriter->getData();
868    }
869}