Completed
Push — develop ( 972740...30a3fc )
by Franck
9s
created

Slide::writeNote()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 151
Code Lines 72

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 71
CRAP Score 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 151
ccs 71
cts 71
cp 1
rs 8.1935
cc 4
eloc 72
nc 4
nop 1
crap 4

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
 * @link        https://github.com/PHPOffice/PHPPresentation
14
 * @copyright   2009-2015 PHPPresentation contributors
15
 * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
16
 */
17
18
namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
19
20
use PhpOffice\Common\Drawing as CommonDrawing;
21
use PhpOffice\Common\Text;
22
use PhpOffice\Common\XMLWriter;
23
use PhpOffice\PhpPresentation\Shape\AbstractDrawing;
24
use PhpOffice\PhpPresentation\Shape\Chart as ShapeChart;
25
use PhpOffice\PhpPresentation\Shape\Group;
26
use PhpOffice\PhpPresentation\Shape\Line;
27
use PhpOffice\PhpPresentation\Shape\RichText;
28
use PhpOffice\PhpPresentation\Shape\RichText\BreakElement;
29
use PhpOffice\PhpPresentation\Shape\RichText\Run;
30
use PhpOffice\PhpPresentation\Shape\RichText\TextElement;
31
use PhpOffice\PhpPresentation\Shape\Table;
32
use PhpOffice\PhpPresentation\Slide as SlideElement;
33
use PhpOffice\PhpPresentation\Slide\Note;
34
use PhpOffice\PhpPresentation\Slide\Transition;
35
use PhpOffice\PhpPresentation\Style\Alignment;
36
use PhpOffice\PhpPresentation\Style\Border;
37
use PhpOffice\PhpPresentation\Style\Bullet;
38
use PhpOffice\PhpPresentation\Style\Fill;
39
use PhpOffice\PhpPresentation\Style\Shadow;
40
41
/**
42
 * Slide writer
43
 */
44
class Slide extends AbstractPart
45
{
46
    /**
47
     * Write slide to XML format
48
     *
49
     * @param  \PhpOffice\PhpPresentation\Slide $pSlide
50
     * @return string              XML Output
51
     * @throws \Exception
52
     */
53 62
    public function writeSlide(SlideElement $pSlide = null)
54
    {
55
        // Check slide
56 62
        if (is_null($pSlide)) {
57 1
            throw new \Exception("Invalid \PhpOffice\PhpPresentation\Slide object passed.");
58
        }
59
60
        // Create XML writer
61 61
        $objWriter = $this->getXMLWriter();
62
63
        // XML header
64 61
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
65
66
        // p:sld
67 61
        $objWriter->startElement('p:sld');
68 61
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
69 61
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
70 61
        $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
71
72
        // p:cSld
73 61
        $objWriter->startElement('p:cSld');
74
75
        // Background
76 61
        if ($pSlide->getBackground() instanceof SlideElement\AbstractBackground) {
77
            $oBackground = $pSlide->getBackground();
78
            // p:bg
79
            $objWriter->startElement('p:bg');
80
81
            // p:bgPr
82
            $objWriter->startElement('p:bgPr');
83
84
            if ($oBackground instanceof SlideElement\Background\Color) {
85
                // a:solidFill
86
                $objWriter->startElement('a:solidFill');
87
88
                // a:srgbClr
89
                $objWriter->startElement('a:srgbClr');
90
                $objWriter->writeAttribute('val', $oBackground->getColor()->getRGB());
91
                $objWriter->endElement();
92
93
                // > a:solidFill
94
                $objWriter->endElement();
95
            }
96
97
            if ($oBackground instanceof SlideElement\Background\Image) {
98
                // a:blipFill
99
                $objWriter->startElement('a:blipFill');
100
101
                // a:blip
102
                $objWriter->startElement('a:blip');
103
                $objWriter->writeAttribute('r:embed', $oBackground->relationId);
104
105
                // > a:blipFill
106
                $objWriter->endElement();
107
108
                // a:stretch
109
                $objWriter->startElement('a:stretch');
110
111
                // a:fillRect
112
                $objWriter->writeElement('a:fillRect');
113
114
                // > a:stretch
115
                $objWriter->endElement();
116
117
                // > a:blipFill
118
                $objWriter->endElement();
119
            }
120
121
            // > p:bgPr
122
            $objWriter->endElement();
123
124
            // > p:bg
125
            $objWriter->endElement();
126
        }
127
128
        // p:spTree
129 61
        $objWriter->startElement('p:spTree');
130
131
        // p:nvGrpSpPr
132 61
        $objWriter->startElement('p:nvGrpSpPr');
133
134
        // p:cNvPr
135 61
        $objWriter->startElement('p:cNvPr');
136 61
        $objWriter->writeAttribute('id', '1');
137 61
        $objWriter->writeAttribute('name', '');
138 61
        $objWriter->endElement();
139
140
        // p:cNvGrpSpPr
141 61
        $objWriter->writeElement('p:cNvGrpSpPr', null);
142
143
        // p:nvPr
144 61
        $objWriter->writeElement('p:nvPr', null);
145
146 61
        $objWriter->endElement();
147
148
        // p:grpSpPr
149 61
        $objWriter->startElement('p:grpSpPr');
150
151
        // a:xfrm
152 61
        $objWriter->startElement('a:xfrm');
153
154
        // a:off
155 61
        $objWriter->startElement('a:off');
156 61
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pSlide->getOffsetX()));
157 61
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pSlide->getOffsetY()));
158 61
        $objWriter->endElement(); // a:off
159
160
        // a:ext
161 61
        $objWriter->startElement('a:ext');
162 61
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pSlide->getExtentX()));
163 61
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pSlide->getExtentY()));
164 61
        $objWriter->endElement(); // a:ext
165
166
        // a:chOff
167 61
        $objWriter->startElement('a:chOff');
168 61
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pSlide->getOffsetX()));
169 61
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pSlide->getOffsetY()));
170 61
        $objWriter->endElement(); // a:chOff
171
172
        // a:chExt
173 61
        $objWriter->startElement('a:chExt');
174 61
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pSlide->getExtentX()));
175 61
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pSlide->getExtentY()));
176 61
        $objWriter->endElement(); // a:chExt
177
178 61
        $objWriter->endElement();
179
180 61
        $objWriter->endElement();
181
182
        // Loop shapes
183 61
        $shapeId = 0;
184 61
        $shapes  = $pSlide->getShapeCollection();
185 61
        foreach ($shapes as $shape) {
186
            // Increment $shapeId
187 53
            ++$shapeId;
188
189
            // Check type
190 53
            if ($shape instanceof RichText) {
191 21
                $this->writeShapeText($objWriter, $shape, $shapeId);
192
            } elseif ($shape instanceof Table) {
193 10
                $this->writeShapeTable($objWriter, $shape, $shapeId);
194
            } elseif ($shape instanceof Line) {
195 2
                $this->writeShapeLine($objWriter, $shape, $shapeId);
196
            } elseif ($shape instanceof ShapeChart) {
197 20
                $this->writeShapeChart($objWriter, $shape, $shapeId);
198
            } elseif ($shape instanceof AbstractDrawing) {
199 4
                $this->writeShapePic($objWriter, $shape, $shapeId);
200
            } elseif ($shape instanceof Group) {
201 53
                $this->writeShapeGroup($objWriter, $shape, $shapeId);
202
            }
203
        }
204
205
        // TODO
206 61
        $objWriter->endElement();
207
208 61
        $objWriter->endElement();
209
210
        // p:clrMapOvr
211 61
        $objWriter->startElement('p:clrMapOvr');
212
213
        // a:masterClrMapping
214 61
        $objWriter->writeElement('a:masterClrMapping', null);
215
216 61
        $objWriter->endElement();
217
218 61
        if (!is_null($pSlide->getTransition())) {
219 1
            $this->writeTransition($objWriter, $pSlide->getTransition());
220
        }
221
222 61
        $objWriter->endElement();
223
224
        // Return
225 61
        return $objWriter->getData();
226
    }
227
228
    /**
229
     * Write group
230
     *
231
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
232
     * @param \PhpOffice\PhpPresentation\Shape\Group $group
233
     * @param  int $shapeId
234
     */
235
    private function writeShapeGroup(XMLWriter $objWriter, Group $group, &$shapeId)
236
    {
237
        // p:grpSp
238
        $objWriter->startElement('p:grpSp');
239
240
        // p:nvGrpSpPr
241
        $objWriter->startElement('p:nvGrpSpPr');
242
243
        // p:cNvPr
244
        $objWriter->startElement('p:cNvPr');
245
        $objWriter->writeAttribute('name', 'Group '.$shapeId++);
246
        $objWriter->writeAttribute('id', $shapeId);
247
        $objWriter->endElement(); // p:cNvPr
248
        // NOTE: Re: $shapeId This seems to be how PowerPoint 2010 does business.
249
250
        // p:cNvGrpSpPr
251
        $objWriter->writeElement('p:cNvGrpSpPr', null);
252
253
        // p:nvPr
254
        $objWriter->writeElement('p:nvPr', null);
255
256
        $objWriter->endElement(); // p:nvGrpSpPr
257
258
        // p:grpSpPr
259
        $objWriter->startElement('p:grpSpPr');
260
261
        // a:xfrm
262
        $objWriter->startElement('a:xfrm');
263
264
        // a:off
265
        $objWriter->startElement('a:off');
266
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($group->getOffsetX()));
267
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($group->getOffsetY()));
268
        $objWriter->endElement(); // a:off
269
270
        // a:ext
271
        $objWriter->startElement('a:ext');
272
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($group->getExtentX()));
273
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($group->getExtentY()));
274
        $objWriter->endElement(); // a:ext
275
276
        // a:chOff
277
        $objWriter->startElement('a:chOff');
278
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($group->getOffsetX()));
279
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($group->getOffsetY()));
280
        $objWriter->endElement(); // a:chOff
281
282
        // a:chExt
283
        $objWriter->startElement('a:chExt');
284
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($group->getExtentX()));
285
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($group->getExtentY()));
286
        $objWriter->endElement(); // a:chExt
287
288
        $objWriter->endElement(); // a:xfrm
289
290
        $objWriter->endElement(); // p:grpSpPr
291
292
        $shapes  = $group->getShapeCollection();
293
        foreach ($shapes as $shape) {
294
            // Increment $shapeId
295
            ++$shapeId;
296
297
            // Check type
298
            if ($shape instanceof RichText) {
299
                $this->writeShapeText($objWriter, $shape, $shapeId);
300
            } elseif ($shape instanceof Table) {
301
                $this->writeShapeTable($objWriter, $shape, $shapeId);
302
            } elseif ($shape instanceof Line) {
303
                $this->writeShapeLine($objWriter, $shape, $shapeId);
304
            } elseif ($shape instanceof ShapeChart) {
305
                $this->writeShapeChart($objWriter, $shape, $shapeId);
306
            } elseif ($shape instanceof AbstractDrawing) {
307
                $this->writeShapePic($objWriter, $shape, $shapeId);
308
            } elseif ($shape instanceof Group) {
309
                $this->writeShapeGroup($objWriter, $shape, $shapeId);
310
            }
311
        }
312
313
        $objWriter->endElement(); // p:grpSp
314
    }
315
316
    /**
317
     * Write chart
318
     *
319
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
320
     * @param \PhpOffice\PhpPresentation\Shape\Chart $shape
321
     * @param  int $shapeId
322
     */
323 20
    private function writeShapeChart(XMLWriter $objWriter, ShapeChart $shape, $shapeId)
324
    {
325
        // p:graphicFrame
326 20
        $objWriter->startElement('p:graphicFrame');
327
328
        // p:nvGraphicFramePr
329 20
        $objWriter->startElement('p:nvGraphicFramePr');
330
331
        // p:cNvPr
332 20
        $objWriter->startElement('p:cNvPr');
333 20
        $objWriter->writeAttribute('id', $shapeId);
334 20
        $objWriter->writeAttribute('name', $shape->getName());
335 20
        $objWriter->writeAttribute('descr', $shape->getDescription());
336 20
        $objWriter->endElement();
337
338
        // p:cNvGraphicFramePr
339 20
        $objWriter->writeElement('p:cNvGraphicFramePr', null);
340
341
        // p:nvPr
342 20
        $objWriter->writeElement('p:nvPr', null);
343
344 20
        $objWriter->endElement();
345
346
        // p:xfrm
347 20
        $objWriter->startElement('p:xfrm');
348 20
        $objWriter->writeAttribute('rot', CommonDrawing::degreesToAngle($shape->getRotation()));
349
350
        // a:off
351 20
        $objWriter->startElement('a:off');
352 20
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
353 20
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
354 20
        $objWriter->endElement();
355
356
        // a:ext
357 20
        $objWriter->startElement('a:ext');
358 20
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
359 20
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
360 20
        $objWriter->endElement();
361
362 20
        $objWriter->endElement();
363
364
        // a:graphic
365 20
        $objWriter->startElement('a:graphic');
366
367
        // a:graphicData
368 20
        $objWriter->startElement('a:graphicData');
369 20
        $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
370
371
        // c:chart
372 20
        $objWriter->startElement('c:chart');
373 20
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
374 20
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
375 20
        $objWriter->writeAttribute('r:id', $shape->relationId);
376 20
        $objWriter->endElement();
377
378 20
        $objWriter->endElement();
379
380 20
        $objWriter->endElement();
381
382 20
        $objWriter->endElement();
383 20
    }
384
385
    /**
386
     * Write pic
387
     *
388
     * @param  \PhpOffice\Common\XMLWriter  $objWriter XML Writer
389
     * @param  \PhpOffice\PhpPresentation\Shape\AbstractDrawing $shape
390
     * @param  int $shapeId
391
     * @throws \Exception
392
     */
393 4
    private function writeShapePic(XMLWriter $objWriter, AbstractDrawing $shape, $shapeId)
394
    {
395
        // p:pic
396 4
        $objWriter->startElement('p:pic');
397
398
        // p:nvPicPr
399 4
        $objWriter->startElement('p:nvPicPr');
400
401
        // p:cNvPr
402 4
        $objWriter->startElement('p:cNvPr');
403 4
        $objWriter->writeAttribute('id', $shapeId);
404 4
        $objWriter->writeAttribute('name', $shape->getName());
405 4
        $objWriter->writeAttribute('descr', $shape->getDescription());
406
407
        // a:hlinkClick
408 4
        if ($shape->hasHyperlink()) {
409 1
            $this->writeHyperlink($objWriter, $shape);
410
        }
411
        
412 4
        $objWriter->endElement();
413
414
        // p:cNvPicPr
415 4
        $objWriter->startElement('p:cNvPicPr');
416
417
        // a:picLocks
418 4
        $objWriter->startElement('a:picLocks');
419 4
        $objWriter->writeAttribute('noChangeAspect', '1');
420 4
        $objWriter->endElement();
421
422 4
        $objWriter->endElement();
423
424
        // p:nvPr
425 4
        $objWriter->writeElement('p:nvPr', null);
426 4
        $objWriter->endElement();
427
428
        // p:blipFill
429 4
        $objWriter->startElement('p:blipFill');
430
431
        // a:blip
432 4
        $objWriter->startElement('a:blip');
433 4
        $objWriter->writeAttribute('r:embed', $shape->relationId);
434 4
        $objWriter->endElement();
435
436
        // a:stretch
437 4
        $objWriter->startElement('a:stretch');
438 4
        $objWriter->writeElement('a:fillRect', null);
439 4
        $objWriter->endElement();
440
441 4
        $objWriter->endElement();
442
443
        // p:spPr
444 4
        $objWriter->startElement('p:spPr');
445
446
        // a:xfrm
447 4
        $objWriter->startElement('a:xfrm');
448 4
        $objWriter->writeAttribute('rot', CommonDrawing::degreesToAngle($shape->getRotation()));
449
450
        // a:off
451 4
        $objWriter->startElement('a:off');
452 4
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
453 4
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
454 4
        $objWriter->endElement();
455
456
        // a:ext
457 4
        $objWriter->startElement('a:ext');
458 4
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
459 4
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
460 4
        $objWriter->endElement();
461
462 4
        $objWriter->endElement();
463
464
        // a:prstGeom
465 4
        $objWriter->startElement('a:prstGeom');
466 4
        $objWriter->writeAttribute('prst', 'rect');
467
468
        // a:avLst
469 4
        $objWriter->writeElement('a:avLst', null);
470
471 4
        $objWriter->endElement();
472
473 4
        if ($shape->getBorder()->getLineStyle() != Border::LINE_NONE) {
474 1
            $this->writeBorder($objWriter, $shape->getBorder(), '');
475
        }
476
477 4
        if ($shape->getShadow()->isVisible()) {
478 1
            $this->writeShadow($objWriter, $shape->getShadow());
479
        }
480
481 4
        $objWriter->endElement();
482
483 4
        $objWriter->endElement();
484 4
    }
485
486
    /**
487
     * Write txt
488
     *
489
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
490
     * @param  \PhpOffice\PhpPresentation\Shape\RichText   $shape
491
     * @param  int                            $shapeId
492
     * @throws \Exception
493
     */
494 21
    private function writeShapeText(XMLWriter $objWriter, RichText $shape, $shapeId)
495
    {
496
        // p:sp
497 21
        $objWriter->startElement('p:sp');
498
499
        // p:sp\p:nvSpPr
500 21
        $objWriter->startElement('p:nvSpPr');
501
502
        // p:sp\p:nvSpPr\p:cNvPr
503 21
        $objWriter->startElement('p:cNvPr');
504 21
        $objWriter->writeAttribute('id', $shapeId);
505 21
        $objWriter->writeAttribute('name', '');
506
507
        // Hyperlink
508 21
        if ($shape->hasHyperlink()) {
509 1
            $this->writeHyperlink($objWriter, $shape);
510
        }
511
        // > p:sp\p:nvSpPr
512 21
        $objWriter->endElement();
513
514
        // p:sp\p:cNvSpPr
515 21
        $objWriter->startElement('p:cNvSpPr');
516 21
        $objWriter->writeAttribute('txBox', '1');
517 21
        $objWriter->endElement();
518
        // p:sp\p:cNvSpPr\p:nvPr
519 21
        $objWriter->writeElement('p:nvPr', null);
520
        // > p:sp\p:cNvSpPr
521 21
        $objWriter->endElement();
522
523
        // p:sp\p:spPr
524 21
        $objWriter->startElement('p:spPr');
525
526
        // p:sp\p:spPr\a:xfrm
527 21
        $objWriter->startElement('a:xfrm');
528 21
        $objWriter->writeAttribute('rot', CommonDrawing::degreesToAngle($shape->getRotation()));
529
        
530
        // p:sp\p:spPr\a:xfrm\a:off
531 21
        $objWriter->startElement('a:off');
532 21
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
533 21
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
534 21
        $objWriter->endElement();
535
        
536
        // p:sp\p:spPr\a:xfrm\a:ext
537 21
        $objWriter->startElement('a:ext');
538 21
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
539 21
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
540 21
        $objWriter->endElement();
541
        
542
        // > p:sp\p:spPr\a:xfrm
543 21
        $objWriter->endElement();
544
545
        // p:sp\p:spPr\a:prstGeom
546 21
        $objWriter->startElement('a:prstGeom');
547 21
        $objWriter->writeAttribute('prst', 'rect');
548 21
        $objWriter->endElement();
549
        
550 21
        if ($shape->getFill()) {
551 21
            $this->writeFill($objWriter, $shape->getFill());
552
        }
553 21
        if ($shape->getBorder()->getLineStyle() != Border::LINE_NONE) {
554
            $this->writeBorder($objWriter, $shape->getBorder(), '');
555
        }
556 21
        if ($shape->getShadow()->isVisible()) {
557 1
            $this->writeShadow($objWriter, $shape->getShadow());
558
        }
559
        // > p:sp\p:spPr
560 21
        $objWriter->endElement();
561
562
        // p:txBody
563 21
        $objWriter->startElement('p:txBody');
564
565
        // a:bodyPr
566
        //@link :http://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.bodyproperties%28v=office.14%29.aspx
567 21
        $objWriter->startElement('a:bodyPr');
568 21
        $verticalAlign = $shape->getActiveParagraph()->getAlignment()->getVertical();
569 21
        if ($verticalAlign != Alignment::VERTICAL_BASE && $verticalAlign != Alignment::VERTICAL_AUTO) {
570 3
            $objWriter->writeAttribute('anchor', $verticalAlign);
571
        }
572 21
        if ($shape->getWrap() != RichText::WRAP_SQUARE) {
573
            $objWriter->writeAttribute('wrap', $shape->getWrap());
574
        }
575 21
        $objWriter->writeAttribute('rtlCol', '0');
576
577 21
        if ($shape->getHorizontalOverflow() != RichText::OVERFLOW_OVERFLOW) {
578
            $objWriter->writeAttribute('horzOverflow', $shape->getHorizontalOverflow());
579
        }
580 21
        if ($shape->getVerticalOverflow() != RichText::OVERFLOW_OVERFLOW) {
581
            $objWriter->writeAttribute('vertOverflow', $shape->getVerticalOverflow());
582
        }
583
584 21
        if ($shape->isUpright()) {
585 1
            $objWriter->writeAttribute('upright', '1');
586
        }
587 21
        if ($shape->isVertical()) {
588 1
            $objWriter->writeAttribute('vert', 'vert');
589
        }
590
591 21
        $objWriter->writeAttribute('bIns', CommonDrawing::pixelsToEmu($shape->getInsetBottom()));
592 21
        $objWriter->writeAttribute('lIns', CommonDrawing::pixelsToEmu($shape->getInsetLeft()));
593 21
        $objWriter->writeAttribute('rIns', CommonDrawing::pixelsToEmu($shape->getInsetRight()));
594 21
        $objWriter->writeAttribute('tIns', CommonDrawing::pixelsToEmu($shape->getInsetTop()));
595
596 21
        if ($shape->getColumns() <> 1) {
597
            $objWriter->writeAttribute('numCol', $shape->getColumns());
598
        }
599
600
        // a:spAutoFit
601 21
        $objWriter->startElement('a:' . $shape->getAutoFit());
602 21
        if ($shape->getAutoFit() == RichText::AUTOFIT_NORMAL) {
603 1
            if (!is_null($shape->getFontScale())) {
604 1
                $objWriter->writeAttribute('fontScale', (int)($shape->getFontScale() * 1000));
605
            }
606 1
            if (!is_null($shape->getLineSpaceReduction())) {
607 1
                $objWriter->writeAttribute('lnSpcReduction', (int)($shape->getLineSpaceReduction() * 1000));
608
            }
609
        }
610
        
611 21
        $objWriter->endElement();
612
613 21
        $objWriter->endElement();
614
615
        // a:lstStyle
616 21
        $objWriter->writeElement('a:lstStyle', null);
617
        
618
        // Write paragraphs
619 21
        $this->writeParagraphs($objWriter, $shape->getParagraphs());
620
621 21
        $objWriter->endElement();
622
623 21
        $objWriter->endElement();
624 21
    }
625
626
    /**
627
     * Write table
628
     *
629
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
630
     * @param  \PhpOffice\PhpPresentation\Shape\Table      $shape
631
     * @param  int                            $shapeId
632
     * @throws \Exception
633
     */
634 10
    private function writeShapeTable(XMLWriter $objWriter, Table $shape, $shapeId)
635
    {
636
        // p:graphicFrame
637 10
        $objWriter->startElement('p:graphicFrame');
638
639
        // p:nvGraphicFramePr
640 10
        $objWriter->startElement('p:nvGraphicFramePr');
641
642
        // p:cNvPr
643 10
        $objWriter->startElement('p:cNvPr');
644 10
        $objWriter->writeAttribute('id', $shapeId);
645 10
        $objWriter->writeAttribute('name', $shape->getName());
646 10
        $objWriter->writeAttribute('descr', $shape->getDescription());
647
648 10
        $objWriter->endElement();
649
650
        // p:cNvGraphicFramePr
651 10
        $objWriter->startElement('p:cNvGraphicFramePr');
652
653
        // a:graphicFrameLocks
654 10
        $objWriter->startElement('a:graphicFrameLocks');
655 10
        $objWriter->writeAttribute('noGrp', '1');
656 10
        $objWriter->endElement();
657
658 10
        $objWriter->endElement();
659
660
        // p:nvPr
661 10
        $objWriter->writeElement('p:nvPr', null);
662
663 10
        $objWriter->endElement();
664
665
        // p:xfrm
666 10
        $objWriter->startElement('p:xfrm');
667
668
        // a:off
669 10
        $objWriter->startElement('a:off');
670 10
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
671 10
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
672 10
        $objWriter->endElement();
673
674
        // a:ext
675 10
        $objWriter->startElement('a:ext');
676 10
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
677 10
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
678 10
        $objWriter->endElement();
679
680 10
        $objWriter->endElement();
681
682
        // a:graphic
683 10
        $objWriter->startElement('a:graphic');
684
685
        // a:graphicData
686 10
        $objWriter->startElement('a:graphicData');
687 10
        $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/table');
688
689
        // a:tbl
690 10
        $objWriter->startElement('a:tbl');
691
692
        // a:tblPr
693 10
        $objWriter->startElement('a:tblPr');
694 10
        $objWriter->writeAttribute('firstRow', '1');
695 10
        $objWriter->writeAttribute('bandRow', '1');
696
697 10
        $objWriter->endElement();
698
699
        // a:tblGrid
700 10
        $objWriter->startElement('a:tblGrid');
701
702
        // Write cell widths
703 10
        $countCells = count($shape->getRow(0)->getCells());
704 10
        for ($cell = 0; $cell < $countCells; $cell++) {
705
            // a:gridCol
706 10
            $objWriter->startElement('a:gridCol');
707
708
            // Calculate column width
709 10
            $width = $shape->getRow(0)->getCell($cell)->getWidth();
710 10
            if ($width == 0) {
711 10
                $colCount   = count($shape->getRow(0)->getCells());
712 10
                $totalWidth = $shape->getWidth();
713 10
                $width      = $totalWidth / $colCount;
714
            }
715
716 10
            $objWriter->writeAttribute('w', CommonDrawing::pixelsToEmu($width));
717 10
            $objWriter->endElement();
718
        }
719
720 10
        $objWriter->endElement();
721
722
        // Colspan / rowspan containers
723 10
        $colSpan = array();
724 10
        $rowSpan = array();
725
726
        // Default border style
727 10
        $defaultBorder = new Border();
728
729
        // Write rows
730 10
        $countRows = count($shape->getRows());
731 10
        for ($row = 0; $row < $countRows; $row++) {
732
            // a:tr
733 10
            $objWriter->startElement('a:tr');
734 10
            $objWriter->writeAttribute('h', CommonDrawing::pixelsToEmu($shape->getRow($row)->getHeight()));
735
736
            // Write cells
737 10
            $countCells = count($shape->getRow($row)->getCells());
738 10
            for ($cell = 0; $cell < $countCells; $cell++) {
739
                // Current cell
740 10
                $currentCell = $shape->getRow($row)->getCell($cell);
741
742
                // Next cell right
743 10
                $nextCellRight = $shape->getRow($row)->getCell($cell + 1, true);
744
745
                // Next cell below
746 10
                $nextRowBelow  = $shape->getRow($row + 1, true);
747 10
                $nextCellBelow = null;
748 10
                if ($nextRowBelow != null) {
749 2
                    $nextCellBelow = $nextRowBelow->getCell($cell, true);
750
                }
751
752
                // a:tc
753 10
                $objWriter->startElement('a:tc');
754
                // Colspan
755 10
                if ($currentCell->getColSpan() > 1) {
756 1
                    $objWriter->writeAttribute('gridSpan', $currentCell->getColSpan());
757 1
                    $colSpan[$row] = $currentCell->getColSpan() - 1;
758 10
                } elseif (isset($colSpan[$row]) && $colSpan[$row] > 0) {
759 1
                    $colSpan[$row]--;
760 1
                    $objWriter->writeAttribute('hMerge', '1');
761
                }
762
763
                // Rowspan
764 10
                if ($currentCell->getRowSpan() > 1) {
765 1
                    $objWriter->writeAttribute('rowSpan', $currentCell->getRowSpan());
766 1
                    $rowSpan[$cell] = $currentCell->getRowSpan() - 1;
767 10
                } elseif (isset($rowSpan[$cell]) && $rowSpan[$cell] > 0) {
768 1
                    $rowSpan[$cell]--;
769 1
                    $objWriter->writeAttribute('vMerge', '1');
770
                }
771
772
                // a:txBody
773 10
                $objWriter->startElement('a:txBody');
774
775
                // a:bodyPr
776 10
                $objWriter->startElement('a:bodyPr');
777 10
                $objWriter->writeAttribute('wrap', 'square');
778 10
                $objWriter->writeAttribute('rtlCol', '0');
779
780
                // a:spAutoFit
781 10
                $objWriter->writeElement('a:spAutoFit', null);
782
783 10
                $objWriter->endElement();
784
785
                // a:lstStyle
786 10
                $objWriter->writeElement('a:lstStyle', null);
787
788
                // Write paragraphs
789 10
                $this->writeParagraphs($objWriter, $currentCell->getParagraphs());
790
791 10
                $objWriter->endElement();
792
793
                // a:tcPr
794 10
                $objWriter->startElement('a:tcPr');
795
                // Alignment (horizontal)
796 10
                $firstParagraph  = $currentCell->getParagraph(0);
797 10
                $verticalAlign = $firstParagraph->getAlignment()->getVertical();
798 10
                if ($verticalAlign != Alignment::VERTICAL_BASE && $verticalAlign != Alignment::VERTICAL_AUTO) {
799 1
                    $objWriter->writeAttribute('anchor', $verticalAlign);
800
                }
801
802
                // Determine borders
803 10
                $borderLeft         = $currentCell->getBorders()->getLeft();
804 10
                $borderRight        = $currentCell->getBorders()->getRight();
805 10
                $borderTop          = $currentCell->getBorders()->getTop();
806 10
                $borderBottom       = $currentCell->getBorders()->getBottom();
807 10
                $borderDiagonalDown = $currentCell->getBorders()->getDiagonalDown();
808 10
                $borderDiagonalUp   = $currentCell->getBorders()->getDiagonalUp();
809
810
                // Fix PowerPoint implementation
811 10
                if (!is_null($nextCellRight) && $nextCellRight->getBorders()->getRight()->getHashCode() != $defaultBorder->getHashCode()) {
812 1
                    $borderRight = $nextCellRight->getBorders()->getLeft();
813
                }
814 10
                if (!is_null($nextCellBelow) && $nextCellBelow->getBorders()->getBottom()->getHashCode() != $defaultBorder->getHashCode()) {
815 1
                    $borderBottom = $nextCellBelow->getBorders()->getTop();
816
                }
817
818
                // Write borders
819 10
                $this->writeBorder($objWriter, $borderLeft, 'L');
820 10
                $this->writeBorder($objWriter, $borderRight, 'R');
821 10
                $this->writeBorder($objWriter, $borderTop, 'T');
822 10
                $this->writeBorder($objWriter, $borderBottom, 'B');
823 10
                $this->writeBorder($objWriter, $borderDiagonalDown, 'TlToBr');
824 10
                $this->writeBorder($objWriter, $borderDiagonalUp, 'BlToTr');
825
826
                // Fill
827 10
                $this->writeFill($objWriter, $currentCell->getFill());
828
829 10
                $objWriter->endElement();
830
831 10
                $objWriter->endElement();
832
            }
833
834 10
            $objWriter->endElement();
835
        }
836
837 10
        $objWriter->endElement();
838
839 10
        $objWriter->endElement();
840
841 10
        $objWriter->endElement();
842
843 10
        $objWriter->endElement();
844 10
    }
845
846
    /**
847
     * Write paragraphs
848
     *
849
     * @param  \PhpOffice\Common\XMLWriter           $objWriter  XML Writer
850
     * @param  \PhpOffice\PhpPresentation\Shape\RichText\Paragraph[] $paragraphs
851
     * @throws \Exception
852
     */
853 31
    private function writeParagraphs(XMLWriter $objWriter, $paragraphs)
854
    {
855
        // Loop trough paragraphs
856 31
        foreach ($paragraphs as $paragraph) {
857
            // a:p
858 31
            $objWriter->startElement('a:p');
859
860
            // a:pPr
861 31
            $objWriter->startElement('a:pPr');
862 31
            $objWriter->writeAttribute('algn', $paragraph->getAlignment()->getHorizontal());
863 31
            $objWriter->writeAttribute('fontAlgn', $paragraph->getAlignment()->getVertical());
864 31
            $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getMarginLeft()));
865 31
            $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getMarginRight()));
866 31
            $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getIndent()));
867 31
            $objWriter->writeAttribute('lvl', $paragraph->getAlignment()->getLevel());
868
869
            // Bullet type specified?
870 31
            if ($paragraph->getBulletStyle()->getBulletType() != Bullet::TYPE_NONE) {
871
                // a:buFont
872 2
                $objWriter->startElement('a:buFont');
873 2
                $objWriter->writeAttribute('typeface', $paragraph->getBulletStyle()->getBulletFont());
874 2
                $objWriter->endElement();
875
876 2
                if ($paragraph->getBulletStyle()->getBulletType() == Bullet::TYPE_BULLET) {
877
                    // a:buChar
878 1
                    $objWriter->startElement('a:buChar');
879 1
                    $objWriter->writeAttribute('char', $paragraph->getBulletStyle()->getBulletChar());
880 1
                    $objWriter->endElement();
881 1
                } elseif ($paragraph->getBulletStyle()->getBulletType() == Bullet::TYPE_NUMERIC) {
882
                    // a:buAutoNum
883 1
                    $objWriter->startElement('a:buAutoNum');
884 1
                    $objWriter->writeAttribute('type', $paragraph->getBulletStyle()->getBulletNumericStyle());
885 1
                    if ($paragraph->getBulletStyle()->getBulletNumericStartAt() != 1) {
886 1
                        $objWriter->writeAttribute('startAt', $paragraph->getBulletStyle()->getBulletNumericStartAt());
887
                    }
888 1
                    $objWriter->endElement();
889
                }
890
            }
891
892 31
            $objWriter->endElement();
893
894
            // Loop trough rich text elements
895 31
            $elements = $paragraph->getRichTextElements();
896 31
            foreach ($elements as $element) {
897 26
                if ($element instanceof BreakElement) {
898
                    // a:br
899 1
                    $objWriter->writeElement('a:br', null);
900 25
                } elseif ($element instanceof Run || $element instanceof TextElement) {
901
                    // a:r
902 25
                    $objWriter->startElement('a:r');
903
904
                    // a:rPr
905 25
                    if ($element instanceof Run) {
906
                        // a:rPr
907 25
                        $objWriter->startElement('a:rPr');
908
909
                        // Bold
910 25
                        $objWriter->writeAttribute('b', ($element->getFont()->isBold() ? '1' : '0'));
911
912
                        // Italic
913 25
                        $objWriter->writeAttribute('i', ($element->getFont()->isItalic() ? '1' : '0'));
914
915
                        // Strikethrough
916 25
                        $objWriter->writeAttribute('strike', ($element->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
917
918
                        // Size
919 25
                        $objWriter->writeAttribute('sz', ($element->getFont()->getSize() * 100));
920
921
                        // Underline
922 25
                        $objWriter->writeAttribute('u', $element->getFont()->getUnderline());
923
924
                        // Superscript / subscript
925 25
                        if ($element->getFont()->isSuperScript() || $element->getFont()->isSubScript()) {
926 2
                            if ($element->getFont()->isSuperScript()) {
927 1
                                $objWriter->writeAttribute('baseline', '30000');
928 1
                            } elseif ($element->getFont()->isSubScript()) {
929 1
                                $objWriter->writeAttribute('baseline', '-25000');
930
                            }
931
                        }
932
933
                        // Color - a:solidFill
934 25
                        $objWriter->startElement('a:solidFill');
935
936
                        // a:srgbClr
937 25
                        $objWriter->startElement('a:srgbClr');
938 25
                        $objWriter->writeAttribute('val', $element->getFont()->getColor()->getRGB());
939 25
                        $objWriter->endElement();
940
941 25
                        $objWriter->endElement();
942
943
                        // Font - a:latin
944 25
                        $objWriter->startElement('a:latin');
945 25
                        $objWriter->writeAttribute('typeface', $element->getFont()->getName());
946 25
                        $objWriter->endElement();
947
948
                        // a:hlinkClick
949 25
                        if ($element->hasHyperlink()) {
950 3
                            $this->writeHyperlink($objWriter, $element);
951
                        }
952
953 25
                        $objWriter->endElement();
954
                    }
955
956
                    // t
957 25
                    $objWriter->startElement('a:t');
958 25
                    $objWriter->writeCData(Text::controlCharacterPHP2OOXML($element->getText()));
959 25
                    $objWriter->endElement();
960
961 26
                    $objWriter->endElement();
962
                }
963
            }
964
965 31
            $objWriter->endElement();
966
        }
967 31
    }
968
969
    /**
970
     * Write Line Shape
971
     *
972
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
973
     * @param \PhpOffice\PhpPresentation\Shape\Line $shape
974
     * @param  int $shapeId
975
     */
976 2
    private function writeShapeLine(XMLWriter $objWriter, Line $shape, $shapeId)
977
    {
978
        // p:sp
979 2
        $objWriter->startElement('p:cxnSp');
980
981
        // p:nvSpPr
982 2
        $objWriter->startElement('p:nvCxnSpPr');
983
984
        // p:cNvPr
985 2
        $objWriter->startElement('p:cNvPr');
986 2
        $objWriter->writeAttribute('id', $shapeId);
987 2
        $objWriter->writeAttribute('name', '');
988
989 2
        $objWriter->endElement();
990
991
        // p:cNvCxnSpPr
992 2
        $objWriter->writeElement('p:cNvCxnSpPr', null);
993
994
        // p:nvPr
995 2
        $objWriter->writeElement('p:nvPr', null);
996
997 2
        $objWriter->endElement();
998
999
        // p:spPr
1000 2
        $objWriter->startElement('p:spPr');
1001
1002
        // a:xfrm
1003 2
        $objWriter->startElement('a:xfrm');
1004
1005 2
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
1006
            // a:off
1007 2
            $objWriter->startElement('a:off');
1008 2
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
1009 2
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
1010 2
            $objWriter->endElement();
1011
1012
            // a:ext
1013 2
            $objWriter->startElement('a:ext');
1014 2
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
1015 2
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
1016 2
            $objWriter->endElement();
1017 1
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
1018
            // a:off
1019 1
            $objWriter->startElement('a:off');
1020 1
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
1021 1
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
1022 1
            $objWriter->endElement();
1023
1024
            // a:ext
1025 1
            $objWriter->startElement('a:ext');
1026 1
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
1027 1
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
1028 1
            $objWriter->endElement();
1029 1
        } elseif ($shape->getHeight() < 0) {
1030 1
            $objWriter->writeAttribute('flipV', 1);
1031
1032
            // a:off
1033 1
            $objWriter->startElement('a:off');
1034 1
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
1035 1
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
1036 1
            $objWriter->endElement();
1037
1038
            // a:ext
1039 1
            $objWriter->startElement('a:ext');
1040 1
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
1041 1
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
1042 1
            $objWriter->endElement();
1043 1
        } elseif ($shape->getWidth() < 0) {
1044 1
            $objWriter->writeAttribute('flipV', 1);
1045
1046
            // a:off
1047 1
            $objWriter->startElement('a:off');
1048 1
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
1049 1
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
1050 1
            $objWriter->endElement();
1051
1052
            // a:ext
1053 1
            $objWriter->startElement('a:ext');
1054 1
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
1055 1
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
1056 1
            $objWriter->endElement();
1057
        }
1058
1059 2
        $objWriter->endElement();
1060
1061
        // a:prstGeom
1062 2
        $objWriter->startElement('a:prstGeom');
1063 2
        $objWriter->writeAttribute('prst', 'line');
1064 2
        $objWriter->endElement();
1065
1066 2
        if ($shape->getBorder()->getLineStyle() != Border::LINE_NONE) {
1067 2
            $this->writeBorder($objWriter, $shape->getBorder(), '');
1068
        }
1069
1070 2
        $objWriter->endElement();
1071
1072 2
        $objWriter->endElement();
1073 2
    }
1074
1075
    /**
1076
     * Write Border
1077
     *
1078
     * @param  \PhpOffice\Common\XMLWriter $objWriter    XML Writer
1079
     * @param  \PhpOffice\PhpPresentation\Style\Border     $pBorder      Border
1080
     * @param  string                         $pElementName Element name
1081
     * @throws \Exception
1082
     */
1083 30
    protected function writeBorder(XMLWriter $objWriter, Border $pBorder, $pElementName = 'L')
1084
    {
1085
        // Line style
1086 30
        $lineStyle = $pBorder->getLineStyle();
1087 30
        if ($lineStyle == Border::LINE_NONE) {
1088 10
            $lineStyle = Border::LINE_SINGLE;
1089
        }
1090
1091
        // Line width
1092 30
        $lineWidth = 12700 * $pBorder->getLineWidth();
1093
1094
        // a:ln $pElementName
1095 30
        $objWriter->startElement('a:ln' . $pElementName);
1096 30
        $objWriter->writeAttribute('w', $lineWidth);
1097 30
        $objWriter->writeAttribute('cap', 'flat');
1098 30
        $objWriter->writeAttribute('cmpd', $lineStyle);
1099 30
        $objWriter->writeAttribute('algn', 'ctr');
1100
1101
        // Fill?
1102 30
        if ($pBorder->getLineStyle() == Border::LINE_NONE) {
1103
            // a:noFill
1104 10
            $objWriter->writeElement('a:noFill', null);
1105
        } else {
1106
            // a:solidFill
1107 30
            $objWriter->startElement('a:solidFill');
1108
1109
            // a:srgbClr
1110 30
            $objWriter->startElement('a:srgbClr');
1111 30
            $objWriter->writeAttribute('val', $pBorder->getColor()->getRGB());
1112 30
            $objWriter->endElement();
1113
1114 30
            $objWriter->endElement();
1115
        }
1116
1117
        // Dash
1118 30
        $objWriter->startElement('a:prstDash');
1119 30
        $objWriter->writeAttribute('val', $pBorder->getDashStyle());
1120 30
        $objWriter->endElement();
1121
1122
        // a:round
1123 30
        $objWriter->writeElement('a:round', null);
1124
1125
        // a:headEnd
1126 30
        $objWriter->startElement('a:headEnd');
1127 30
        $objWriter->writeAttribute('type', 'none');
1128 30
        $objWriter->writeAttribute('w', 'med');
1129 30
        $objWriter->writeAttribute('len', 'med');
1130 30
        $objWriter->endElement();
1131
1132
        // a:tailEnd
1133 30
        $objWriter->startElement('a:tailEnd');
1134 30
        $objWriter->writeAttribute('type', 'none');
1135 30
        $objWriter->writeAttribute('w', 'med');
1136 30
        $objWriter->writeAttribute('len', 'med');
1137 30
        $objWriter->endElement();
1138
1139 30
        $objWriter->endElement();
1140 30
    }
1141
1142
    /**
1143
     * Write Fill
1144
     *
1145
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1146
     * @param  \PhpOffice\PhpPresentation\Style\Fill       $pFill     Fill style
1147
     * @throws \Exception
1148
     */
1149 48
    protected function writeFill(XMLWriter $objWriter, Fill $pFill)
1150
    {
1151
        // Is it a fill?
1152 48
        if ($pFill->getFillType() == Fill::FILL_NONE) {
1153 41
            return;
1154
        }
1155
1156
        // Is it a solid fill?
1157 11
        if ($pFill->getFillType() == Fill::FILL_SOLID) {
1158 6
            $this->writeSolidFill($objWriter, $pFill);
1159 6
            return;
1160
        }
1161
1162
        // Check if this is a pattern type or gradient type
1163 5
        if ($pFill->getFillType() == Fill::FILL_GRADIENT_LINEAR || $pFill->getFillType() == Fill::FILL_GRADIENT_PATH) {
1164
            // Gradient fill
1165 4
            $this->writeGradientFill($objWriter, $pFill);
1166
        } else {
1167
            // Pattern fill
1168 1
            $this->writePatternFill($objWriter, $pFill);
1169
        }
1170 5
    }
1171
1172
    /**
1173
     * Write Solid Fill
1174
     *
1175
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1176
     * @param  \PhpOffice\PhpPresentation\Style\Fill       $pFill     Fill style
1177
     * @throws \Exception
1178
     */
1179 6
    protected function writeSolidFill(XMLWriter $objWriter, Fill $pFill)
1180
    {
1181
        // a:gradFill
1182 6
        $objWriter->startElement('a:solidFill');
1183
1184
        // srgbClr
1185 6
        $objWriter->startElement('a:srgbClr');
1186 6
        $objWriter->writeAttribute('val', $pFill->getStartColor()->getRGB());
1187 6
        $objWriter->endElement();
1188
1189 6
        $objWriter->endElement();
1190 6
    }
1191
1192
    /**
1193
     * Write Gradient Fill
1194
     *
1195
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1196
     * @param  \PhpOffice\PhpPresentation\Style\Fill       $pFill     Fill style
1197
     * @throws \Exception
1198
     */
1199 4
    protected function writeGradientFill(XMLWriter $objWriter, Fill $pFill)
1200
    {
1201
        // a:gradFill
1202 4
        $objWriter->startElement('a:gradFill');
1203
1204
        // a:gsLst
1205 4
        $objWriter->startElement('a:gsLst');
1206
        // a:gs
1207 4
        $objWriter->startElement('a:gs');
1208 4
        $objWriter->writeAttribute('pos', '0');
1209
1210
        // srgbClr
1211 4
        $objWriter->startElement('a:srgbClr');
1212 4
        $objWriter->writeAttribute('val', $pFill->getStartColor()->getRGB());
1213 4
        $objWriter->endElement();
1214
1215 4
        $objWriter->endElement();
1216
1217
        // a:gs
1218 4
        $objWriter->startElement('a:gs');
1219 4
        $objWriter->writeAttribute('pos', '100000');
1220
1221
        // srgbClr
1222 4
        $objWriter->startElement('a:srgbClr');
1223 4
        $objWriter->writeAttribute('val', $pFill->getEndColor()->getRGB());
1224 4
        $objWriter->endElement();
1225
1226 4
        $objWriter->endElement();
1227
1228 4
        $objWriter->endElement();
1229
1230
        // a:lin
1231 4
        $objWriter->startElement('a:lin');
1232 4
        $objWriter->writeAttribute('ang', CommonDrawing::degreesToAngle($pFill->getRotation()));
1233 4
        $objWriter->writeAttribute('scaled', '0');
1234 4
        $objWriter->endElement();
1235
1236 4
        $objWriter->endElement();
1237 4
    }
1238
1239
    /**
1240
     * Write Pattern Fill
1241
     *
1242
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1243
     * @param  \PhpOffice\PhpPresentation\Style\Fill       $pFill     Fill style
1244
     * @throws \Exception
1245
     */
1246 1
    protected function writePatternFill(XMLWriter $objWriter, Fill $pFill)
1247
    {
1248
        // a:pattFill
1249 1
        $objWriter->startElement('a:pattFill');
1250
1251
        // fgClr
1252 1
        $objWriter->startElement('a:fgClr');
1253
1254
        // srgbClr
1255 1
        $objWriter->startElement('a:srgbClr');
1256 1
        $objWriter->writeAttribute('val', $pFill->getStartColor()->getRGB());
1257 1
        $objWriter->endElement();
1258
1259 1
        $objWriter->endElement();
1260
1261
        // bgClr
1262 1
        $objWriter->startElement('a:bgClr');
1263
1264
        // srgbClr
1265 1
        $objWriter->startElement('a:srgbClr');
1266 1
        $objWriter->writeAttribute('val', $pFill->getEndColor()->getRGB());
1267 1
        $objWriter->endElement();
1268
1269 1
        $objWriter->endElement();
1270
1271 1
        $objWriter->endElement();
1272 1
    }
1273
1274 2
    protected function writeShadow(XMLWriter $objWriter, Shadow $oShadow)
1275
    {
1276
        // a:effectLst
1277 2
        $objWriter->startElement('a:effectLst');
1278
        
1279
        // a:outerShdw
1280 2
        $objWriter->startElement('a:outerShdw');
1281 2
        $objWriter->writeAttribute('blurRad', CommonDrawing::pixelsToEmu($oShadow->getBlurRadius()));
1282 2
        $objWriter->writeAttribute('dist', CommonDrawing::pixelsToEmu($oShadow->getDistance()));
1283 2
        $objWriter->writeAttribute('dir', CommonDrawing::degreesToAngle($oShadow->getDirection()));
1284 2
        $objWriter->writeAttribute('algn', $oShadow->getAlignment());
1285 2
        $objWriter->writeAttribute('rotWithShape', '0');
1286
        
1287
        // a:srgbClr
1288 2
        $objWriter->startElement('a:srgbClr');
1289 2
        $objWriter->writeAttribute('val', $oShadow->getColor()->getRGB());
1290
        
1291
        // a:alpha
1292 2
        $objWriter->startElement('a:alpha');
1293 2
        $objWriter->writeAttribute('val', $oShadow->getAlpha() * 1000);
1294 2
        $objWriter->endElement();
1295
        
1296 2
        $objWriter->endElement();
1297
        
1298 2
        $objWriter->endElement();
1299
        
1300 2
        $objWriter->endElement();
1301 2
    }
1302
    
1303
    /**
1304
     * Write hyperlink
1305
     *
1306
     * @param \PhpOffice\Common\XMLWriter                               $objWriter XML Writer
1307
     * @param \PhpOffice\PhpPresentation\AbstractShape|\PhpOffice\PhpPresentation\Shape\RichText\TextElement $shape
1308
     */
1309 5
    private function writeHyperlink(XMLWriter $objWriter, $shape)
1310
    {
1311
        // a:hlinkClick
1312 5
        $objWriter->startElement('a:hlinkClick');
1313 5
        $objWriter->writeAttribute('r:id', $shape->getHyperlink()->relationId);
1314 5
        $objWriter->writeAttribute('tooltip', $shape->getHyperlink()->getTooltip());
1315 5
        if ($shape->getHyperlink()->isInternal()) {
1316 1
            $objWriter->writeAttribute('action', $shape->getHyperlink()->getUrl());
1317
        }
1318 5
        $objWriter->endElement();
1319 5
    }
1320
1321
    /**
1322
     * Write Note Slide
1323
     * @param Note $pNote
1324
     * @throws \Exception
1325
     */
1326 1
    public function writeNote(Note $pNote = null)
1327
    {
1328
        // Check slide
1329 1
        if (is_null($pNote)) {
1330
            throw new \Exception("Invalid \PhpOffice\PhpPresentation\Slide\Note object passed.");
1331
        }
1332
1333
        // Create XML writer
1334 1
        $objWriter = $this->getXMLWriter();
1335
1336
        // XML header
1337 1
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
1338
1339
        // p:notes
1340 1
        $objWriter->startElement('p:notes');
1341 1
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
1342 1
        $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
1343 1
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
1344
1345
        // p:cSld
1346 1
        $objWriter->startElement('p:cSld');
1347
1348
        // p:spTree
1349 1
        $objWriter->startElement('p:spTree');
1350
1351
        // p:nvGrpSpPr
1352 1
        $objWriter->startElement('p:nvGrpSpPr');
1353
1354
        // p:cNvPr
1355 1
        $objWriter->startElement('p:cNvPr');
1356 1
        $objWriter->writeAttribute('id', '1');
1357 1
        $objWriter->writeAttribute('name', '');
1358 1
        $objWriter->endElement();
1359
1360
        // p:cNvGrpSpPr
1361 1
        $objWriter->writeElement('p:cNvGrpSpPr', null);
1362
1363
        // p:nvPr
1364 1
        $objWriter->writeElement('p:nvPr', null);
1365
1366
        // ## p:nvGrpSpPr
1367 1
        $objWriter->endElement();
1368
1369
        // p:grpSpPr
1370 1
        $objWriter->startElement('p:grpSpPr');
1371
1372
        // a:xfrm
1373 1
        $objWriter->startElement('a:xfrm');
1374
1375
        // a:off
1376 1
        $objWriter->startElement('a:off');
1377 1
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
1378 1
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
1379 1
        $objWriter->endElement(); // a:off
1380
1381
        // a:ext
1382 1
        $objWriter->startElement('a:ext');
1383 1
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
1384 1
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
1385 1
        $objWriter->endElement(); // a:ext
1386
1387
        // a:chOff
1388 1
        $objWriter->startElement('a:chOff');
1389 1
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
1390 1
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
1391 1
        $objWriter->endElement(); // a:chOff
1392
1393
        // a:chExt
1394 1
        $objWriter->startElement('a:chExt');
1395 1
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
1396 1
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
1397 1
        $objWriter->endElement(); // a:chExt
1398
1399
        // ## a:xfrm
1400 1
        $objWriter->endElement();
1401
1402
        // ## p:grpSpPr
1403 1
        $objWriter->endElement();
1404
1405
        // p:sp
1406 1
        $objWriter->startElement('p:sp');
1407
1408
        // p:nvSpPr
1409 1
        $objWriter->startElement('p:nvSpPr');
1410
1411 1
        $objWriter->startElement('p:cNvPr');
1412 1
        $objWriter->writeAttribute('id', '1');
1413 1
        $objWriter->writeAttribute('name', 'Notes Placeholder');
1414 1
        $objWriter->endElement();
1415
1416
        // p:cNvSpPr
1417 1
        $objWriter->startElement('p:cNvSpPr');
1418
1419
        //a:spLocks
1420 1
        $objWriter->startElement('a:spLocks');
1421 1
        $objWriter->writeAttribute('noGrp', '1');
1422 1
        $objWriter->endElement();
1423
1424
        // ## p:cNvSpPr
1425 1
        $objWriter->endElement();
1426
1427
        // p:nvPr
1428 1
        $objWriter->startElement('p:nvPr');
1429
1430 1
        $objWriter->startElement('p:ph');
1431 1
        $objWriter->writeAttribute('type', 'body');
1432 1
        $objWriter->writeAttribute('idx', '1');
1433 1
        $objWriter->endElement();
1434
1435
        // ## p:nvPr
1436 1
        $objWriter->endElement();
1437
1438
        // ## p:nvSpPr
1439 1
        $objWriter->endElement();
1440
1441 1
        $objWriter->writeElement('p:spPr', null);
1442
1443
        // p:txBody
1444 1
        $objWriter->startElement('p:txBody');
1445
1446 1
        $objWriter->writeElement('a:bodyPr', null);
1447 1
        $objWriter->writeElement('a:lstStyle', null);
1448
1449
        // Loop shapes
1450 1
        $shapes  = $pNote->getShapeCollection();
1451 1
        foreach ($shapes as $shape) {
1452
            // Check type
1453 1
            if ($shape instanceof RichText) {
1454 1
                $paragraphs = $shape->getParagraphs();
1455 1
                $this->writeParagraphs($objWriter, $paragraphs);
1456
            }
1457
        }
1458
1459
        // ## p:txBody
1460 1
        $objWriter->endElement();
1461
1462
        // ## p:sp
1463 1
        $objWriter->endElement();
1464
1465
        // ## p:spTree
1466 1
        $objWriter->endElement();
1467
1468
        // ## p:cSld
1469 1
        $objWriter->endElement();
1470
1471
        // ## p:notes
1472 1
        $objWriter->endElement();
1473
1474
        // Return
1475 1
        return $objWriter->getData();
1476
    }
1477
1478
    /**
1479
     * Write Transition Slide
1480
     * @link http://officeopenxml.com/prSlide-transitions.php
1481
     * @param XMLWriter $objWriter
1482
     * @param Transition $transition
1483
     */
1484 1
    public function writeTransition(XMLWriter $objWriter, Transition $transition)
1485
    {
1486 1
        $objWriter->startElement('p:transition');
1487 1
        if (!is_null($transition->getSpeed())) {
1488 1
            $objWriter->writeAttribute('spd', $transition->getSpeed());
1489
        }
1490 1
        $objWriter->writeAttribute('advClick', $transition->hasManualTrigger() ? '1' : '0');
1491 1
        if ($transition->hasTimeTrigger()) {
1492 1
            $objWriter->writeAttribute('advTm', $transition->getAdvanceTimeTrigger());
1493
        }
1494
1495 1
        switch ($transition->getTransitionType()) {
1496 1
            case Transition::TRANSITION_BLINDS_HORIZONTAL:
1497 1
                $objWriter->startElement('p:blinds');
1498 1
                $objWriter->writeAttribute('dir', 'horz');
1499 1
                $objWriter->endElement();
1500 1
                break;
1501 1
            case Transition::TRANSITION_BLINDS_VERTICAL:
1502 1
                $objWriter->startElement('p:blinds');
1503 1
                $objWriter->writeAttribute('dir', 'vert');
1504 1
                $objWriter->endElement();
1505 1
                break;
1506 1
            case Transition::TRANSITION_CHECKER_HORIZONTAL:
1507 1
                $objWriter->startElement('p:checker');
1508 1
                $objWriter->writeAttribute('dir', 'horz');
1509 1
                $objWriter->endElement();
1510 1
                break;
1511 1
            case Transition::TRANSITION_CHECKER_VERTICAL:
1512 1
                $objWriter->startElement('p:checker');
1513 1
                $objWriter->writeAttribute('dir', 'vert');
1514 1
                $objWriter->endElement();
1515 1
                break;
1516 1
            case Transition::TRANSITION_CIRCLE_HORIZONTAL:
1517 1
                $objWriter->startElement('p:circle');
1518 1
                $objWriter->writeAttribute('dir', 'horz');
1519 1
                $objWriter->endElement();
1520 1
                break;
1521 1
            case Transition::TRANSITION_CIRCLE_VERTICAL:
1522 1
                $objWriter->startElement('p:circle');
1523 1
                $objWriter->writeAttribute('dir', 'vert');
1524 1
                $objWriter->endElement();
1525 1
                break;
1526 1
            case Transition::TRANSITION_COMB_HORIZONTAL:
1527 1
                $objWriter->startElement('p:comb');
1528 1
                $objWriter->writeAttribute('dir', 'horz');
1529 1
                $objWriter->endElement();
1530 1
                break;
1531 1
            case Transition::TRANSITION_COMB_VERTICAL:
1532 1
                $objWriter->startElement('p:comb');
1533 1
                $objWriter->writeAttribute('dir', 'vert');
1534 1
                $objWriter->endElement();
1535 1
                break;
1536 1
            case Transition::TRANSITION_COVER_DOWN:
1537 1
                $objWriter->startElement('p:cover');
1538 1
                $objWriter->writeAttribute('dir', 'd');
1539 1
                $objWriter->endElement();
1540 1
                break;
1541 1
            case Transition::TRANSITION_COVER_LEFT:
1542 1
                $objWriter->startElement('p:cover');
1543 1
                $objWriter->writeAttribute('dir', 'l');
1544 1
                $objWriter->endElement();
1545 1
                break;
1546 1
            case Transition::TRANSITION_COVER_LEFT_DOWN:
1547 1
                $objWriter->startElement('p:cover');
1548 1
                $objWriter->writeAttribute('dir', 'ld');
1549 1
                $objWriter->endElement();
1550 1
                break;
1551 1
            case Transition::TRANSITION_COVER_LEFT_UP:
1552 1
                $objWriter->startElement('p:cover');
1553 1
                $objWriter->writeAttribute('dir', 'lu');
1554 1
                $objWriter->endElement();
1555 1
                break;
1556 1
            case Transition::TRANSITION_COVER_RIGHT:
1557 1
                $objWriter->startElement('p:cover');
1558 1
                $objWriter->writeAttribute('dir', 'r');
1559 1
                $objWriter->endElement();
1560 1
                break;
1561 1
            case Transition::TRANSITION_COVER_RIGHT_DOWN:
1562 1
                $objWriter->startElement('p:cover');
1563 1
                $objWriter->writeAttribute('dir', 'rd');
1564 1
                $objWriter->endElement();
1565 1
                break;
1566 1
            case Transition::TRANSITION_COVER_RIGHT_UP:
1567 1
                $objWriter->startElement('p:cover');
1568 1
                $objWriter->writeAttribute('dir', 'ru');
1569 1
                $objWriter->endElement();
1570 1
                break;
1571 1
            case Transition::TRANSITION_COVER_UP:
1572 1
                $objWriter->startElement('p:cover');
1573 1
                $objWriter->writeAttribute('dir', 'u');
1574 1
                $objWriter->endElement();
1575 1
                break;
1576 1
            case Transition::TRANSITION_CUT:
1577 1
                $objWriter->writeElement('p:cut');
1578 1
                break;
1579 1
            case Transition::TRANSITION_DIAMOND:
1580 1
                $objWriter->writeElement('p:diamond');
1581 1
                break;
1582 1
            case Transition::TRANSITION_DISSOLVE:
1583 1
                $objWriter->writeElement('p:dissolve');
1584 1
                break;
1585 1
            case Transition::TRANSITION_FADE:
1586 1
                $objWriter->writeElement('p:fade');
1587 1
                break;
1588 1
            case Transition::TRANSITION_NEWSFLASH:
1589 1
                $objWriter->writeElement('p:newsflash');
1590 1
                break;
1591 1
            case Transition::TRANSITION_PLUS:
1592 1
                $objWriter->writeElement('p:plus');
1593 1
                break;
1594 1
            case Transition::TRANSITION_PULL_DOWN:
1595 1
                $objWriter->startElement('p:pull');
1596 1
                $objWriter->writeAttribute('dir', 'd');
1597 1
                $objWriter->endElement();
1598 1
                break;
1599 1
            case Transition::TRANSITION_PULL_LEFT:
1600 1
                $objWriter->startElement('p:pull');
1601 1
                $objWriter->writeAttribute('dir', 'l');
1602 1
                $objWriter->endElement();
1603 1
                break;
1604 1
            case Transition::TRANSITION_PULL_RIGHT:
1605 1
                $objWriter->startElement('p:pull');
1606 1
                $objWriter->writeAttribute('dir', 'r');
1607 1
                $objWriter->endElement();
1608 1
                break;
1609 1
            case Transition::TRANSITION_PULL_UP:
1610 1
                $objWriter->startElement('p:pull');
1611 1
                $objWriter->writeAttribute('dir', 'u');
1612 1
                $objWriter->endElement();
1613 1
                break;
1614 1
            case Transition::TRANSITION_PUSH_DOWN:
1615 1
                $objWriter->startElement('p:push');
1616 1
                $objWriter->writeAttribute('dir', 'd');
1617 1
                $objWriter->endElement();
1618 1
                break;
1619 1
            case Transition::TRANSITION_PUSH_LEFT:
1620 1
                $objWriter->startElement('p:push');
1621 1
                $objWriter->writeAttribute('dir', 'l');
1622 1
                $objWriter->endElement();
1623 1
                break;
1624 1
            case Transition::TRANSITION_PUSH_RIGHT:
1625 1
                $objWriter->startElement('p:push');
1626 1
                $objWriter->writeAttribute('dir', 'r');
1627 1
                $objWriter->endElement();
1628 1
                break;
1629 1
            case Transition::TRANSITION_PUSH_UP:
1630 1
                $objWriter->startElement('p:push');
1631 1
                $objWriter->writeAttribute('dir', 'u');
1632 1
                $objWriter->endElement();
1633 1
                break;
1634 1
            case Transition::TRANSITION_RANDOM:
1635 1
                $objWriter->writeElement('p:random');
1636 1
                break;
1637 1
            case Transition::TRANSITION_RANDOMBAR_HORIZONTAL:
1638 1
                $objWriter->startElement('p:randomBar');
1639 1
                $objWriter->writeAttribute('dir', 'horz');
1640 1
                $objWriter->endElement();
1641 1
                break;
1642 1
            case Transition::TRANSITION_RANDOMBAR_VERTICAL:
1643 1
                $objWriter->startElement('p:randomBar');
1644 1
                $objWriter->writeAttribute('dir', 'vert');
1645 1
                $objWriter->endElement();
1646 1
                break;
1647 1
            case Transition::TRANSITION_SPLIT_IN_HORIZONTAL:
1648 1
                $objWriter->startElement('p:split');
1649 1
                $objWriter->writeAttribute('dir', 'in');
1650 1
                $objWriter->writeAttribute('orient', 'horz');
1651 1
                $objWriter->endElement();
1652 1
                break;
1653 1
            case Transition::TRANSITION_SPLIT_OUT_HORIZONTAL:
1654 1
                $objWriter->startElement('p:split');
1655 1
                $objWriter->writeAttribute('dir', 'out');
1656 1
                $objWriter->writeAttribute('orient', 'horz');
1657 1
                $objWriter->endElement();
1658 1
                break;
1659 1
            case Transition::TRANSITION_SPLIT_IN_VERTICAL:
1660 1
                $objWriter->startElement('p:split');
1661 1
                $objWriter->writeAttribute('dir', 'in');
1662 1
                $objWriter->writeAttribute('orient', 'vert');
1663 1
                $objWriter->endElement();
1664 1
                break;
1665 1
            case Transition::TRANSITION_SPLIT_OUT_VERTICAL:
1666 1
                $objWriter->startElement('p:split');
1667 1
                $objWriter->writeAttribute('dir', 'out');
1668 1
                $objWriter->writeAttribute('orient', 'vert');
1669 1
                $objWriter->endElement();
1670 1
                break;
1671 1
            case Transition::TRANSITION_STRIPS_LEFT_DOWN:
1672 1
                $objWriter->startElement('p:strips');
1673 1
                $objWriter->writeAttribute('dir', 'ld');
1674 1
                $objWriter->endElement();
1675 1
                break;
1676 1
            case Transition::TRANSITION_STRIPS_LEFT_UP:
1677 1
                $objWriter->startElement('p:strips');
1678 1
                $objWriter->writeAttribute('dir', 'lu');
1679 1
                $objWriter->endElement();
1680 1
                break;
1681 1
            case Transition::TRANSITION_STRIPS_RIGHT_DOWN:
1682 1
                $objWriter->startElement('p:strips');
1683 1
                $objWriter->writeAttribute('dir', 'rd');
1684 1
                $objWriter->endElement();
1685 1
                break;
1686 1
            case Transition::TRANSITION_STRIPS_RIGHT_UP:
1687 1
                $objWriter->startElement('p:strips');
1688 1
                $objWriter->writeAttribute('dir', 'ru');
1689 1
                $objWriter->endElement();
1690 1
                break;
1691 1
            case Transition::TRANSITION_WEDGE:
1692 1
                $objWriter->writeElement('p:wedge');
1693 1
                break;
1694 1
            case Transition::TRANSITION_WIPE_DOWN:
1695 1
                $objWriter->startElement('p:wipe');
1696 1
                $objWriter->writeAttribute('dir', 'd');
1697 1
                $objWriter->endElement();
1698 1
                break;
1699 1
            case Transition::TRANSITION_WIPE_LEFT:
1700 1
                $objWriter->startElement('p:wipe');
1701 1
                $objWriter->writeAttribute('dir', 'l');
1702 1
                $objWriter->endElement();
1703 1
                break;
1704 1
            case Transition::TRANSITION_WIPE_RIGHT:
1705 1
                $objWriter->startElement('p:wipe');
1706 1
                $objWriter->writeAttribute('dir', 'r');
1707 1
                $objWriter->endElement();
1708 1
                break;
1709 1
            case Transition::TRANSITION_WIPE_UP:
1710 1
                $objWriter->startElement('p:wipe');
1711 1
                $objWriter->writeAttribute('dir', 'u');
1712 1
                $objWriter->endElement();
1713 1
                break;
1714 1
            case Transition::TRANSITION_ZOOM_IN:
1715 1
                $objWriter->startElement('p:zoom');
1716 1
                $objWriter->writeAttribute('dir', 'in');
1717 1
                $objWriter->endElement();
1718 1
                break;
1719 1
            case Transition::TRANSITION_ZOOM_OUT:
1720 1
                $objWriter->startElement('p:zoom');
1721 1
                $objWriter->writeAttribute('dir', 'out');
1722 1
                $objWriter->endElement();
1723 1
                break;
1724
        }
1725
1726 1
        $objWriter->endElement();
1727 1
    }
1728
}
1729