From 2328e34e64d3d045d821f44212d3a4e2da5459c2 Mon Sep 17 00:00:00 2001 From: Ivan Lanin Date: Tue, 3 Jun 2014 14:13:35 +0700 Subject: [PATCH] Refactor Word2007/Element to identify the same properties --- .../Word2007/Element/AbstractElement.php | 10 ++++++++++ .../Writer/Word2007/Element/CheckBox.php | 2 +- src/PhpWord/Writer/Word2007/Element/Field.php | 2 +- .../Writer/Word2007/Element/Footnote.php | 2 +- src/PhpWord/Writer/Word2007/Element/Image.php | 19 ++++++++++++++----- src/PhpWord/Writer/Word2007/Element/Line.php | 15 ++++++++++----- src/PhpWord/Writer/Word2007/Element/Link.php | 2 +- .../Writer/Word2007/Element/Object.php | 14 +++++++++++--- .../Writer/Word2007/Element/PreserveText.php | 2 +- src/PhpWord/Writer/Word2007/Element/Shape.php | 7 +++---- src/PhpWord/Writer/Word2007/Element/Text.php | 14 +------------- .../Writer/Word2007/Element/TextBox.php | 7 ++++--- .../Writer/Word2007/Element/TextBreak.php | 4 +++- .../Writer/Word2007/Element/TextRun.php | 2 +- 14 files changed, 62 insertions(+), 40 deletions(-) diff --git a/src/PhpWord/Writer/Word2007/Element/AbstractElement.php b/src/PhpWord/Writer/Word2007/Element/AbstractElement.php index 52b4c62e..c1e721ed 100644 --- a/src/PhpWord/Writer/Word2007/Element/AbstractElement.php +++ b/src/PhpWord/Writer/Word2007/Element/AbstractElement.php @@ -115,6 +115,16 @@ abstract class AbstractElement $this->pageBreakBefore = (bool)$value; } + /** + * Write ending + */ + protected function endElementP() + { + if (!$this->withoutP) { + $this->xmlWriter->endElement(); // w:p + } + } + /** * Convert text to valid format * diff --git a/src/PhpWord/Writer/Word2007/Element/CheckBox.php b/src/PhpWord/Writer/Word2007/Element/CheckBox.php index ea13b8f9..2d0fe691 100644 --- a/src/PhpWord/Writer/Word2007/Element/CheckBox.php +++ b/src/PhpWord/Writer/Word2007/Element/CheckBox.php @@ -85,6 +85,6 @@ class CheckBox extends Text $xmlWriter->endElement(); // w:t $xmlWriter->endElement(); // w:r - $this->writeClosingWP(); + $this->endElementP(); // w:p } } diff --git a/src/PhpWord/Writer/Word2007/Element/Field.php b/src/PhpWord/Writer/Word2007/Element/Field.php index 68c4c40c..1e538e1a 100644 --- a/src/PhpWord/Writer/Word2007/Element/Field.php +++ b/src/PhpWord/Writer/Word2007/Element/Field.php @@ -82,6 +82,6 @@ class Field extends Text $xmlWriter->endElement(); // w:r $xmlWriter->endElement(); // w:fldSimple - $this->writeClosingWP(); + $this->endElementP(); // w:p } } diff --git a/src/PhpWord/Writer/Word2007/Element/Footnote.php b/src/PhpWord/Writer/Word2007/Element/Footnote.php index 240a8a00..05b96ae5 100644 --- a/src/PhpWord/Writer/Word2007/Element/Footnote.php +++ b/src/PhpWord/Writer/Word2007/Element/Footnote.php @@ -55,6 +55,6 @@ class Footnote extends Text $xmlWriter->endElement(); // w:$referenceType $xmlWriter->endElement(); // w:r - $this->writeClosingWP(); + $this->endElementP(); // w:p } } diff --git a/src/PhpWord/Writer/Word2007/Element/Image.php b/src/PhpWord/Writer/Word2007/Element/Image.php index a882040e..963e2da1 100644 --- a/src/PhpWord/Writer/Word2007/Element/Image.php +++ b/src/PhpWord/Writer/Word2007/Element/Image.php @@ -52,6 +52,7 @@ class Image extends AbstractElement private function writeImage(XMLWriter $xmlWriter, ImageElement $element) { $rId = $element->getRelationId() + ($element->isInSection() ? 6 : 0); + $style = $element->getStyle(); $styleWriter = new ImageStyleWriter($xmlWriter, $style); @@ -59,23 +60,25 @@ class Image extends AbstractElement $xmlWriter->startElement('w:p'); $styleWriter->writeAlignment(); } + $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); $xmlWriter->startElement('v:shape'); $xmlWriter->writeAttribute('type', '#_x0000_t75'); + $styleWriter->write(); + $styleWriter->writeW10Wrap(); + $xmlWriter->startElement('v:imagedata'); $xmlWriter->writeAttribute('r:id', 'rId' . $rId); $xmlWriter->writeAttribute('o:title', ''); $xmlWriter->endElement(); // v:imagedata - $styleWriter->writeW10Wrap(); + $xmlWriter->endElement(); // v:shape $xmlWriter->endElement(); // w:pict $xmlWriter->endElement(); // w:r - if (!$this->withoutP) { - $xmlWriter->endElement(); // w:p - } + $this->endElementP(); // w:p } /** * Write watermark element @@ -83,23 +86,29 @@ class Image extends AbstractElement private function writeWatermark(XMLWriter $xmlWriter, ImageElement $element) { $rId = $element->getRelationId(); + $style = $element->getStyle(); - $style->setPositioning('absolute'); $styleWriter = new ImageStyleWriter($xmlWriter, $style); $xmlWriter->startElement('w:p'); + $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); $xmlWriter->startElement('v:shape'); $xmlWriter->writeAttribute('type', '#_x0000_t75'); + + $style->setPositioning('absolute'); $styleWriter->write(); + $xmlWriter->startElement('v:imagedata'); $xmlWriter->writeAttribute('r:id', 'rId' . $rId); $xmlWriter->writeAttribute('o:title', ''); $xmlWriter->endElement(); // v:imagedata + $xmlWriter->endElement(); // v:shape $xmlWriter->endElement(); // w:pict $xmlWriter->endElement(); // w:r + $xmlWriter->endElement(); // w:p } } diff --git a/src/PhpWord/Writer/Word2007/Element/Line.php b/src/PhpWord/Writer/Word2007/Element/Line.php index 1ae10694..ce576030 100644 --- a/src/PhpWord/Writer/Word2007/Element/Line.php +++ b/src/PhpWord/Writer/Word2007/Element/Line.php @@ -37,16 +37,19 @@ class Line extends AbstractElement return; } - $style = $element->getStyle(); + $style = $element->getStyle(); $styleWriter = new LineStyleWriter($xmlWriter, $style); $elementId = $element->getElementIndex(); + if (!$this->withoutP) { $xmlWriter->startElement('w:p'); $styleWriter->writeAlignment(); } + $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); + // Shapetype could be defined for each line separately, but then a unique id would be necessary if ($elementId == 1) { $xmlWriter->startElement('v:shapetype'); @@ -67,18 +70,20 @@ class Line extends AbstractElement $xmlWriter->endElement(); // o:lock $xmlWriter->endElement(); // v:shapetype } + $xmlWriter->startElement('v:shape'); $xmlWriter->writeAttribute('id', sprintf('_x0000_s1%1$03d', $elementId)); $xmlWriter->writeAttribute('type', '#_x0000_t32'); //type should correspond to shapetype id + $styleWriter->write(); - $styleWriter->writeStroke(); $styleWriter->writeW10Wrap(); + $styleWriter->writeStroke(); + $xmlWriter->endElement(); // v:shape + $xmlWriter->endElement(); // w:pict $xmlWriter->endElement(); // w:r - if (!$this->withoutP) { - $xmlWriter->endElement(); // w:p - } + $this->endElementP(); // w:p } } diff --git a/src/PhpWord/Writer/Word2007/Element/Link.php b/src/PhpWord/Writer/Word2007/Element/Link.php index ec531bac..68851ec4 100644 --- a/src/PhpWord/Writer/Word2007/Element/Link.php +++ b/src/PhpWord/Writer/Word2007/Element/Link.php @@ -53,6 +53,6 @@ class Link extends Text $xmlWriter->endElement(); // w:r $xmlWriter->endElement(); // w:hyperlink - $this->writeClosingWP(); + $this->endElementP(); // w:p } } diff --git a/src/PhpWord/Writer/Word2007/Element/Object.php b/src/PhpWord/Writer/Word2007/Element/Object.php index ae03f04f..f172f81b 100644 --- a/src/PhpWord/Writer/Word2007/Element/Object.php +++ b/src/PhpWord/Writer/Word2007/Element/Object.php @@ -41,6 +41,7 @@ class Object extends AbstractElement $rIdImage = $element->getImageRelationId() + ($element->isInSection() ? 6 : 0); $shapeId = md5($rIdObject . '_' . $rIdImage); $objectId = $element->getRelationId() + 1325353440; + $style = $element->getStyle(); $styleWriter = new ImageStyleWriter($xmlWriter, $style); @@ -48,20 +49,27 @@ class Object extends AbstractElement $xmlWriter->startElement('w:p'); $styleWriter->writeAlignment(); } + $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:object'); $xmlWriter->writeAttribute('w:dxaOrig', '249'); $xmlWriter->writeAttribute('w:dyaOrig', '160'); + + // Icon $xmlWriter->startElement('v:shape'); $xmlWriter->writeAttribute('id', $shapeId); $xmlWriter->writeAttribute('type', '#_x0000_t75'); $xmlWriter->writeAttribute('style', 'width:104px;height:67px'); $xmlWriter->writeAttribute('o:ole', ''); + $xmlWriter->startElement('v:imagedata'); $xmlWriter->writeAttribute('r:id', 'rId' . $rIdImage); $xmlWriter->writeAttribute('o:title', ''); $xmlWriter->endElement(); // v:imagedata + $xmlWriter->endElement(); // v:shape + + // Object $xmlWriter->startElement('o:OLEObject'); $xmlWriter->writeAttribute('Type', 'Embed'); $xmlWriter->writeAttribute('ProgID', 'Package'); @@ -70,10 +78,10 @@ class Object extends AbstractElement $xmlWriter->writeAttribute('ObjectID', '_' . $objectId); $xmlWriter->writeAttribute('r:id', 'rId' . $rIdObject); $xmlWriter->endElement(); // o:OLEObject + $xmlWriter->endElement(); // w:object $xmlWriter->endElement(); // w:r - if (!$this->withoutP) { - $xmlWriter->endElement(); // w:p - } + + $this->endElementP(); // w:p } } diff --git a/src/PhpWord/Writer/Word2007/Element/PreserveText.php b/src/PhpWord/Writer/Word2007/Element/PreserveText.php index dd5d9008..c63d13a7 100644 --- a/src/PhpWord/Writer/Word2007/Element/PreserveText.php +++ b/src/PhpWord/Writer/Word2007/Element/PreserveText.php @@ -86,6 +86,6 @@ class PreserveText extends Text } } - $this->writeClosingWP(); + $this->endElementP(); // w:p } } diff --git a/src/PhpWord/Writer/Word2007/Element/Shape.php b/src/PhpWord/Writer/Word2007/Element/Shape.php index 5590861c..649e7384 100644 --- a/src/PhpWord/Writer/Word2007/Element/Shape.php +++ b/src/PhpWord/Writer/Word2007/Element/Shape.php @@ -42,6 +42,8 @@ class Shape extends AbstractElement } $style = $element->getStyle(); + $styleWriter = new ShapeStyleWriter($xmlWriter, $style); + $type = $element->getType(); if ($type == 'rect' && $style->getRoundness() !== null) { $type = 'roundrect'; @@ -62,16 +64,13 @@ class Shape extends AbstractElement } // Child style - $styleWriter = new ShapeStyleWriter($xmlWriter, $style); $styleWriter->write(); $xmlWriter->endElement(); // v:$type $xmlWriter->endElement(); // w:pict $xmlWriter->endElement(); // w:r - if (!$this->withoutP) { - $xmlWriter->endElement(); // w:p - } + $this->endElementP(); // w:p } /** diff --git a/src/PhpWord/Writer/Word2007/Element/Text.php b/src/PhpWord/Writer/Word2007/Element/Text.php index 64c4b766..5d92b3f9 100644 --- a/src/PhpWord/Writer/Word2007/Element/Text.php +++ b/src/PhpWord/Writer/Word2007/Element/Text.php @@ -51,7 +51,7 @@ class Text extends AbstractElement $xmlWriter->endElement(); $xmlWriter->endElement(); // w:r - $this->writeClosingWP(); + $this->endElementP(); // w:p } /** @@ -78,18 +78,6 @@ class Text extends AbstractElement } } - /** - * Write ending - */ - protected function writeClosingWP() - { - $xmlWriter = $this->getXmlWriter(); - - if (!$this->withoutP) { - $xmlWriter->endElement(); // w:p - } - } - /** * Write ending */ diff --git a/src/PhpWord/Writer/Word2007/Element/TextBox.php b/src/PhpWord/Writer/Word2007/Element/TextBox.php index 4ee5e68e..00fac58e 100644 --- a/src/PhpWord/Writer/Word2007/Element/TextBox.php +++ b/src/PhpWord/Writer/Word2007/Element/TextBox.php @@ -36,6 +36,7 @@ class TextBox extends AbstractElement if (!$element instanceof \PhpOffice\PhpWord\Element\TextBox) { return; } + $style = $element->getStyle(); $styleWriter = new TextBoxStyleWriter($xmlWriter, $style); @@ -48,7 +49,9 @@ class TextBox extends AbstractElement $xmlWriter->startElement('w:pict'); $xmlWriter->startElement('v:shape'); $xmlWriter->writeAttribute('type', '#_x0000_t0202'); + $styleWriter->write(); + $xmlWriter->startElement('v:textbox'); $styleWriter->writeInnerMargin(); @@ -64,8 +67,6 @@ class TextBox extends AbstractElement $xmlWriter->endElement(); // w:pict $xmlWriter->endElement(); // w:r - if (!$this->withoutP) { - $xmlWriter->endElement(); // w:p - } + $this->endElementP(); // w:p } } diff --git a/src/PhpWord/Writer/Word2007/Element/TextBreak.php b/src/PhpWord/Writer/Word2007/Element/TextBreak.php index 5f4bd3ce..2995e8be 100644 --- a/src/PhpWord/Writer/Word2007/Element/TextBreak.php +++ b/src/PhpWord/Writer/Word2007/Element/TextBreak.php @@ -38,12 +38,14 @@ class TextBreak extends Text if (!$this->withoutP) { $hasStyle = $element->hasStyle(); $this->writeOpeningWP(); + if ($hasStyle) { $xmlWriter->startElement('w:pPr'); $this->writeFontStyle(); $xmlWriter->endElement(); // w:pPr } - $this->writeClosingWP(); + + $this->endElementP(); // w:p } else { $xmlWriter->writeElement('w:br'); } diff --git a/src/PhpWord/Writer/Word2007/Element/TextRun.php b/src/PhpWord/Writer/Word2007/Element/TextRun.php index 330e297c..ca3a6b05 100644 --- a/src/PhpWord/Writer/Word2007/Element/TextRun.php +++ b/src/PhpWord/Writer/Word2007/Element/TextRun.php @@ -37,6 +37,6 @@ class TextRun extends Text $containerWriter = new Container($xmlWriter, $element); $containerWriter->write(); - $this->writeClosingWP(); + $this->endElementP(); // w:p } }