Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
304 / 304
100.00% covered (success)
100.00%
8 / 8
CRAP
100.00% covered (success)
100.00%
1 / 1
Theme
100.00% covered (success)
100.00%
304 / 304
100.00% covered (success)
100.00%
8 / 8
8
100.00% covered (success)
100.00%
1 / 1
 write
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
1
 writeColorScheme
100.00% covered (success)
100.00%
40 / 40
100.00% covered (success)
100.00%
1 / 1
1
 writeFontScheme
100.00% covered (success)
100.00%
72 / 72
100.00% covered (success)
100.00%
1 / 1
1
 writeFormatScheme
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
 writeFormatFill
100.00% covered (success)
100.00%
53 / 53
100.00% covered (success)
100.00%
1 / 1
1
 writeFormatLine
100.00% covered (success)
100.00%
25 / 25
100.00% covered (success)
100.00%
1 / 1
1
 writeFormatEffect
100.00% covered (success)
100.00%
42 / 42
100.00% covered (success)
100.00%
1 / 1
1
 writeFormatBackground
100.00% covered (success)
100.00%
52 / 52
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3/**
4 * This file is part of PHPWord - A pure PHP library for reading and writing
5 * word processing documents.
6 *
7 * PHPWord is free software distributed under the terms of the GNU Lesser
8 * General Public License version 3 as published by the Free Software Foundation.
9 *
10 * For the full copyright and license information, please read the LICENSE
11 * file that was distributed with this source code. For the full list of
12 * contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
13 *
14 * @see         https://github.com/PHPOffice/PHPWord
15 *
16 * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
17 */
18
19namespace PhpOffice\PhpWord\Writer\Word2007\Part;
20
21/**
22 * Word2007 theme writer: word/theme/theme1.xml.
23 *
24 * @todo Generate content dynamically
25 *
26 * @since 0.10.0
27 */
28class Theme extends AbstractPart
29{
30    /**
31     * Write part.
32     *
33     * @return string
34     */
35    public function write()
36    {
37        $str = '';
38
39        $str .= '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
40        $str .= '<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme">';
41        $str .= '<a:themeElements>';
42        $str .= $this->writeColorScheme();
43        $str .= $this->writeFontScheme();
44        $str .= $this->writeFormatScheme();
45        $str .= '</a:themeElements>';
46        $str .= '<a:objectDefaults />';
47        $str .= '<a:extraClrSchemeLst />';
48        $str .= '</a:theme>';
49
50        return $str;
51    }
52
53    /**
54     * Write color scheme.
55     *
56     * @return string
57     */
58    private function writeColorScheme()
59    {
60        $str = '';
61
62        $str .= '<a:clrScheme name="Office">';
63        $str .= '<a:dk1>';
64        $str .= '<a:sysClr val="windowText" lastClr="000000" />';
65        $str .= '</a:dk1>';
66        $str .= '<a:lt1>';
67        $str .= '<a:sysClr val="window" lastClr="FFFFFF" />';
68        $str .= '</a:lt1>';
69        $str .= '<a:dk2>';
70        $str .= '<a:srgbClr val="1F497D" />';
71        $str .= '</a:dk2>';
72        $str .= '<a:lt2>';
73        $str .= '<a:srgbClr val="EEECE1" />';
74        $str .= '</a:lt2>';
75        $str .= '<a:accent1>';
76        $str .= '<a:srgbClr val="4F81BD" />';
77        $str .= '</a:accent1>';
78        $str .= '<a:accent2>';
79        $str .= '<a:srgbClr val="C0504D" />';
80        $str .= '</a:accent2>';
81        $str .= '<a:accent3>';
82        $str .= '<a:srgbClr val="9BBB59" />';
83        $str .= '</a:accent3>';
84        $str .= '<a:accent4>';
85        $str .= '<a:srgbClr val="8064A2" />';
86        $str .= '</a:accent4>';
87        $str .= '<a:accent5>';
88        $str .= '<a:srgbClr val="4BACC6" />';
89        $str .= '</a:accent5>';
90        $str .= '<a:accent6>';
91        $str .= '<a:srgbClr val="F79646" />';
92        $str .= '</a:accent6>';
93        $str .= '<a:hlink>';
94        $str .= '<a:srgbClr val="0000FF" />';
95        $str .= '</a:hlink>';
96        $str .= '<a:folHlink>';
97        $str .= '<a:srgbClr val="800080" />';
98        $str .= '</a:folHlink>';
99        $str .= '</a:clrScheme>';
100
101        return $str;
102    }
103
104    /**
105     * Write font scheme.
106     *
107     * @return string
108     */
109    private function writeFontScheme()
110    {
111        $str = '';
112
113        $str .= '<a:fontScheme name="Office">';
114
115        $str .= '<a:majorFont>';
116        $str .= '<a:latin typeface="Cambria" />';
117        $str .= '<a:ea typeface="" />';
118        $str .= '<a:cs typeface="" />';
119        $str .= '<a:font script="Jpan" typeface="MS ゴシック" />';
120        $str .= '<a:font script="Hang" typeface="맑은 고딕" />';
121        $str .= '<a:font script="Hans" typeface="宋体" />';
122        $str .= '<a:font script="Hant" typeface="新細明體" />';
123        $str .= '<a:font script="Arab" typeface="Times New Roman" />';
124        $str .= '<a:font script="Hebr" typeface="Times New Roman" />';
125        $str .= '<a:font script="Thai" typeface="Angsana New" />';
126        $str .= '<a:font script="Ethi" typeface="Nyala" />';
127        $str .= '<a:font script="Beng" typeface="Vrinda" />';
128        $str .= '<a:font script="Gujr" typeface="Shruti" />';
129        $str .= '<a:font script="Khmr" typeface="MoolBoran" />';
130        $str .= '<a:font script="Knda" typeface="Tunga" />';
131        $str .= '<a:font script="Guru" typeface="Raavi" />';
132        $str .= '<a:font script="Cans" typeface="Euphemia" />';
133        $str .= '<a:font script="Cher" typeface="Plantagenet Cherokee" />';
134        $str .= '<a:font script="Yiii" typeface="Microsoft Yi Baiti" />';
135        $str .= '<a:font script="Tibt" typeface="Microsoft Himalaya" />';
136        $str .= '<a:font script="Thaa" typeface="MV Boli" />';
137        $str .= '<a:font script="Deva" typeface="Mangal" />';
138        $str .= '<a:font script="Telu" typeface="Gautami" />';
139        $str .= '<a:font script="Taml" typeface="Latha" />';
140        $str .= '<a:font script="Syrc" typeface="Estrangelo Edessa" />';
141        $str .= '<a:font script="Orya" typeface="Kalinga" />';
142        $str .= '<a:font script="Mlym" typeface="Kartika" />';
143        $str .= '<a:font script="Laoo" typeface="DokChampa" />';
144        $str .= '<a:font script="Sinh" typeface="Iskoola Pota" />';
145        $str .= '<a:font script="Mong" typeface="Mongolian Baiti" />';
146        $str .= '<a:font script="Viet" typeface="Times New Roman" />';
147        $str .= '<a:font script="Uigh" typeface="Microsoft Uighur" />';
148        $str .= '</a:majorFont>';
149
150        $str .= '<a:minorFont>';
151        $str .= '<a:latin typeface="Calibri" />';
152        $str .= '<a:ea typeface="" />';
153        $str .= '<a:cs typeface="" />';
154        $str .= '<a:font script="Jpan" typeface="MS 明朝" />';
155        $str .= '<a:font script="Hang" typeface="맑은 고딕" />';
156        $str .= '<a:font script="Hans" typeface="宋体" />';
157        $str .= '<a:font script="Hant" typeface="新細明體" />';
158        $str .= '<a:font script="Arab" typeface="Arial" />';
159        $str .= '<a:font script="Hebr" typeface="Arial" />';
160        $str .= '<a:font script="Thai" typeface="Cordia New" />';
161        $str .= '<a:font script="Ethi" typeface="Nyala" />';
162        $str .= '<a:font script="Beng" typeface="Vrinda" />';
163        $str .= '<a:font script="Gujr" typeface="Shruti" />';
164        $str .= '<a:font script="Khmr" typeface="DaunPenh" />';
165        $str .= '<a:font script="Knda" typeface="Tunga" />';
166        $str .= '<a:font script="Guru" typeface="Raavi" />';
167        $str .= '<a:font script="Cans" typeface="Euphemia" />';
168        $str .= '<a:font script="Cher" typeface="Plantagenet Cherokee" />';
169        $str .= '<a:font script="Yiii" typeface="Microsoft Yi Baiti" />';
170        $str .= '<a:font script="Tibt" typeface="Microsoft Himalaya" />';
171        $str .= '<a:font script="Thaa" typeface="MV Boli" />';
172        $str .= '<a:font script="Deva" typeface="Mangal" />';
173        $str .= '<a:font script="Telu" typeface="Gautami" />';
174        $str .= '<a:font script="Taml" typeface="Latha" />';
175        $str .= '<a:font script="Syrc" typeface="Estrangelo Edessa" />';
176        $str .= '<a:font script="Orya" typeface="Kalinga" />';
177        $str .= '<a:font script="Mlym" typeface="Kartika" />';
178        $str .= '<a:font script="Laoo" typeface="DokChampa" />';
179        $str .= '<a:font script="Sinh" typeface="Iskoola Pota" />';
180        $str .= '<a:font script="Mong" typeface="Mongolian Baiti" />';
181        $str .= '<a:font script="Viet" typeface="Arial" />';
182        $str .= '<a:font script="Uigh" typeface="Microsoft Uighur" />';
183        $str .= '</a:minorFont>';
184
185        $str .= '</a:fontScheme>';
186
187        return $str;
188    }
189
190    /**
191     * Write format scheme.
192     *
193     * @return string
194     */
195    private function writeFormatScheme()
196    {
197        $str = '';
198
199        $str .= '<a:fmtScheme name="Office">';
200        $str .= $this->writeFormatFill();
201        $str .= $this->writeFormatLine();
202        $str .= $this->writeFormatEffect();
203        $str .= $this->writeFormatBackground();
204        $str .= '</a:fmtScheme>';
205
206        return $str;
207    }
208
209    /**
210     * Write fill format scheme.
211     *
212     * @return string
213     */
214    private function writeFormatFill()
215    {
216        $str = '';
217
218        $str .= '<a:fillStyleLst>';
219        $str .= '<a:solidFill>';
220        $str .= '<a:schemeClr val="phClr" />';
221        $str .= '</a:solidFill>';
222        $str .= '<a:gradFill rotWithShape="1">';
223        $str .= '<a:gsLst>';
224        $str .= '<a:gs pos="0">';
225        $str .= '<a:schemeClr val="phClr">';
226        $str .= '<a:tint val="50000" />';
227        $str .= '<a:satMod val="300000" />';
228        $str .= '</a:schemeClr>';
229        $str .= '</a:gs>';
230        $str .= '<a:gs pos="35000">';
231        $str .= '<a:schemeClr val="phClr">';
232        $str .= '<a:tint val="37000" />';
233        $str .= '<a:satMod val="300000" />';
234        $str .= '</a:schemeClr>';
235        $str .= '</a:gs>';
236        $str .= '<a:gs pos="100000">';
237        $str .= '<a:schemeClr val="phClr">';
238        $str .= '<a:tint val="15000" />';
239        $str .= '<a:satMod val="350000" />';
240        $str .= '</a:schemeClr>';
241        $str .= '</a:gs>';
242        $str .= '</a:gsLst>';
243        $str .= '<a:lin ang="16200000" scaled="1" />';
244        $str .= '</a:gradFill>';
245        $str .= '<a:gradFill rotWithShape="1">';
246        $str .= '<a:gsLst>';
247        $str .= '<a:gs pos="0">';
248        $str .= '<a:schemeClr val="phClr">';
249        $str .= '<a:shade val="51000" />';
250        $str .= '<a:satMod val="130000" />';
251        $str .= '</a:schemeClr>';
252        $str .= '</a:gs>';
253        $str .= '<a:gs pos="80000">';
254        $str .= '<a:schemeClr val="phClr">';
255        $str .= '<a:shade val="93000" />';
256        $str .= '<a:satMod val="130000" />';
257        $str .= '</a:schemeClr>';
258        $str .= '</a:gs>';
259        $str .= '<a:gs pos="100000">';
260        $str .= '<a:schemeClr val="phClr">';
261        $str .= '<a:shade val="94000" />';
262        $str .= '<a:satMod val="135000" />';
263        $str .= '</a:schemeClr>';
264        $str .= '</a:gs>';
265        $str .= '</a:gsLst>';
266        $str .= '<a:lin ang="16200000" scaled="0" />';
267        $str .= '</a:gradFill>';
268        $str .= '</a:fillStyleLst>';
269
270        return $str;
271    }
272
273    /**
274     * Write line format scheme.
275     *
276     * @return string
277     */
278    private function writeFormatLine()
279    {
280        $str = '';
281
282        $str .= '<a:lnStyleLst>';
283        $str .= '<a:ln w="9525" cap="flat" cmpd="sng" algn="ctr">';
284        $str .= '<a:solidFill>';
285        $str .= '<a:schemeClr val="phClr">';
286        $str .= '<a:shade val="95000" />';
287        $str .= '<a:satMod val="105000" />';
288        $str .= '</a:schemeClr>';
289        $str .= '</a:solidFill>';
290        $str .= '<a:prstDash val="solid" />';
291        $str .= '</a:ln>';
292        $str .= '<a:ln w="25400" cap="flat" cmpd="sng" algn="ctr">';
293        $str .= '<a:solidFill>';
294        $str .= '<a:schemeClr val="phClr" />';
295        $str .= '</a:solidFill>';
296        $str .= '<a:prstDash val="solid" />';
297        $str .= '</a:ln>';
298        $str .= '<a:ln w="38100" cap="flat" cmpd="sng" algn="ctr">';
299        $str .= '<a:solidFill>';
300        $str .= '<a:schemeClr val="phClr" />';
301        $str .= '</a:solidFill>';
302        $str .= '<a:prstDash val="solid" />';
303        $str .= '</a:ln>';
304        $str .= '</a:lnStyleLst>';
305
306        return $str;
307    }
308
309    /**
310     * Write effect format scheme.
311     *
312     * @return string
313     */
314    private function writeFormatEffect()
315    {
316        $str = '';
317
318        $str .= '<a:effectStyleLst>';
319        $str .= '<a:effectStyle>';
320        $str .= '<a:effectLst>';
321        $str .= '<a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0">';
322        $str .= '<a:srgbClr val="000000">';
323        $str .= '<a:alpha val="38000" />';
324        $str .= '</a:srgbClr>';
325        $str .= '</a:outerShdw>';
326        $str .= '</a:effectLst>';
327        $str .= '</a:effectStyle>';
328        $str .= '<a:effectStyle>';
329        $str .= '<a:effectLst>';
330        $str .= '<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">';
331        $str .= '<a:srgbClr val="000000">';
332        $str .= '<a:alpha val="35000" />';
333        $str .= '</a:srgbClr>';
334        $str .= '</a:outerShdw>';
335        $str .= '</a:effectLst>';
336        $str .= '</a:effectStyle>';
337        $str .= '<a:effectStyle>';
338        $str .= '<a:effectLst>';
339        $str .= '<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">';
340        $str .= '<a:srgbClr val="000000">';
341        $str .= '<a:alpha val="35000" />';
342        $str .= '</a:srgbClr>';
343        $str .= '</a:outerShdw>';
344        $str .= '</a:effectLst>';
345        $str .= '<a:scene3d>';
346        $str .= '<a:camera prst="orthographicFront">';
347        $str .= '<a:rot lat="0" lon="0" rev="0" />';
348        $str .= '</a:camera>';
349        $str .= '<a:lightRig rig="threePt" dir="t">';
350        $str .= '<a:rot lat="0" lon="0" rev="1200000" />';
351        $str .= '</a:lightRig>';
352        $str .= '</a:scene3d>';
353        $str .= '<a:sp3d>';
354        $str .= '<a:bevelT w="63500" h="25400" />';
355        $str .= '</a:sp3d>';
356        $str .= '</a:effectStyle>';
357        $str .= '</a:effectStyleLst>';
358
359        return $str;
360    }
361
362    /**
363     * Write background format scheme.
364     *
365     * @return string
366     */
367    private function writeFormatBackground()
368    {
369        $str = '';
370
371        $str .= '<a:bgFillStyleLst>';
372        $str .= '<a:solidFill>';
373        $str .= '<a:schemeClr val="phClr" />';
374        $str .= '</a:solidFill>';
375        $str .= '<a:gradFill rotWithShape="1">';
376        $str .= '<a:gsLst>';
377        $str .= '<a:gs pos="0">';
378        $str .= '<a:schemeClr val="phClr">';
379        $str .= '<a:tint val="40000" />';
380        $str .= '<a:satMod val="350000" />';
381        $str .= '</a:schemeClr>';
382        $str .= '</a:gs>';
383        $str .= '<a:gs pos="40000">';
384        $str .= '<a:schemeClr val="phClr">';
385        $str .= '<a:tint val="45000" />';
386        $str .= '<a:shade val="99000" />';
387        $str .= '<a:satMod val="350000" />';
388        $str .= '</a:schemeClr>';
389        $str .= '</a:gs>';
390        $str .= '<a:gs pos="100000">';
391        $str .= '<a:schemeClr val="phClr">';
392        $str .= '<a:shade val="20000" />';
393        $str .= '<a:satMod val="255000" />';
394        $str .= '</a:schemeClr>';
395        $str .= '</a:gs>';
396        $str .= '</a:gsLst>';
397        $str .= '<a:path path="circle">';
398        $str .= '<a:fillToRect l="50000" t="-80000" r="50000" b="180000" />';
399        $str .= '</a:path>';
400        $str .= '</a:gradFill>';
401        $str .= '<a:gradFill rotWithShape="1">';
402        $str .= '<a:gsLst>';
403        $str .= '<a:gs pos="0">';
404        $str .= '<a:schemeClr val="phClr">';
405        $str .= '<a:tint val="80000" />';
406        $str .= '<a:satMod val="300000" />';
407        $str .= '</a:schemeClr>';
408        $str .= '</a:gs>';
409        $str .= '<a:gs pos="100000">';
410        $str .= '<a:schemeClr val="phClr">';
411        $str .= '<a:shade val="30000" />';
412        $str .= '<a:satMod val="200000" />';
413        $str .= '</a:schemeClr>';
414        $str .= '</a:gs>';
415        $str .= '</a:gsLst>';
416        $str .= '<a:path path="circle">';
417        $str .= '<a:fillToRect l="50000" t="50000" r="50000" b="50000" />';
418        $str .= '</a:path>';
419        $str .= '</a:gradFill>';
420        $str .= '</a:bgFillStyleLst>';
421
422        return $str;
423    }
424}