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