From 677e3f6a19bcd5d3f4a81e6a0059bbce773e8ee7 Mon Sep 17 00:00:00 2001 From: Maxim Bulygin Date: Tue, 31 Jul 2018 18:25:29 +0300 Subject: [PATCH 01/22] writer / word2007 / support valign and watermark withouth paragraph --- src/PhpWord/Writer/Word2007/Element/Image.php | 8 ++++++-- src/PhpWord/Writer/Word2007/Style/Frame.php | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/PhpWord/Writer/Word2007/Element/Image.php b/src/PhpWord/Writer/Word2007/Element/Image.php index 3614ec18..5bebb89c 100644 --- a/src/PhpWord/Writer/Word2007/Element/Image.php +++ b/src/PhpWord/Writer/Word2007/Element/Image.php @@ -103,7 +103,9 @@ class Image extends AbstractElement $style->setPositioning('absolute'); $styleWriter = new ImageStyleWriter($xmlWriter, $style); - $xmlWriter->startElement('w:p'); + if (!$this->withoutP) { + $xmlWriter->startElement('w:p'); + } $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); $xmlWriter->startElement('v:shape'); @@ -118,6 +120,8 @@ class Image extends AbstractElement $xmlWriter->endElement(); // v:shape $xmlWriter->endElement(); // w:pict $xmlWriter->endElement(); // w:r - $xmlWriter->endElement(); // w:p + if (!$this->withoutP) { + $xmlWriter->endElement(); // w:p + } } } diff --git a/src/PhpWord/Writer/Word2007/Style/Frame.php b/src/PhpWord/Writer/Word2007/Style/Frame.php index ea5abf78..10e5b151 100644 --- a/src/PhpWord/Writer/Word2007/Style/Frame.php +++ b/src/PhpWord/Writer/Word2007/Style/Frame.php @@ -61,6 +61,7 @@ class Frame extends AbstractStyle 'hPos' => 'mso-position-horizontal', 'vPos' => 'mso-position-vertical', 'hPosRelTo' => 'mso-position-horizontal-relative', + 'vPosRelTo' => 'mso-position-vertical-relative', ); $posStyles = $this->getStyles($style, $properties); From 683d91990ff53f46c2ad3dd8ceaeeffc28a62ce1 Mon Sep 17 00:00:00 2001 From: vblinden Date: Mon, 3 Sep 2018 12:30:05 +0200 Subject: [PATCH 02/22] Added Dutch (nl-NL) --- src/PhpWord/Style/Language.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/PhpWord/Style/Language.php b/src/PhpWord/Style/Language.php index d7a76f78..8a3b0315 100644 --- a/src/PhpWord/Style/Language.php +++ b/src/PhpWord/Style/Language.php @@ -64,6 +64,9 @@ final class Language extends AbstractStyle const PT_BR = 'pt-BR'; const PT_BR_ID = 1046; + + const NL_NL = 'nl-NL'; + const NL_NL_ID = 1043; /** * Language ID, used for RTF document generation From d8c0441975e2032ba86bb82ecdfc754d15c92cd9 Mon Sep 17 00:00:00 2001 From: vblinden Date: Mon, 3 Sep 2018 13:32:00 +0200 Subject: [PATCH 03/22] Fix indenting --- src/PhpWord/Style/Language.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PhpWord/Style/Language.php b/src/PhpWord/Style/Language.php index 8a3b0315..412a76a7 100644 --- a/src/PhpWord/Style/Language.php +++ b/src/PhpWord/Style/Language.php @@ -64,7 +64,7 @@ final class Language extends AbstractStyle const PT_BR = 'pt-BR'; const PT_BR_ID = 1046; - + const NL_NL = 'nl-NL'; const NL_NL_ID = 1043; From 7f55816ebaa2777cefd759f6628e7753c91e0faf Mon Sep 17 00:00:00 2001 From: Martin Hanzl Date: Thu, 11 Oct 2018 08:55:38 +0200 Subject: [PATCH 04/22] detect actual filename of document xml (prevent mismatching document22.xml as in #1253) --- src/PhpWord/TemplateProcessor.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/PhpWord/TemplateProcessor.php b/src/PhpWord/TemplateProcessor.php index 7a5eaf55..86c9e1c9 100644 --- a/src/PhpWord/TemplateProcessor.php +++ b/src/PhpWord/TemplateProcessor.php @@ -507,7 +507,13 @@ class TemplateProcessor */ protected function getMainPartName() { - return 'word/document.xml'; + $contentTypes = $this->zipClass->getFromName('[Content_Types].xml'); + + $pattern = '~PartName="\/(word\/document.*?\.xml)" ContentType="application\/vnd\.openxmlformats-officedocument\.wordprocessingml\.document\.main\+xml"~'; + + preg_match($pattern, $contentTypes, $m); + + return (array_key_exists(1, $m) ? $m[1] : 'word/document.xml'); } /** From 7eb19c8f76c6a0a4ba56bc779d3f6024dc172822 Mon Sep 17 00:00:00 2001 From: Martin Hanzl Date: Thu, 11 Oct 2018 09:40:12 +0200 Subject: [PATCH 05/22] add test case for issue #1253 --- tests/PhpWord/TemplateProcessorTest.php | 10 ++++++++++ .../_files/templates/document22-xml.docx | Bin 0 -> 11126 bytes 2 files changed, 10 insertions(+) create mode 100644 tests/PhpWord/_files/templates/document22-xml.docx diff --git a/tests/PhpWord/TemplateProcessorTest.php b/tests/PhpWord/TemplateProcessorTest.php index ea739561..2b3a9fd1 100644 --- a/tests/PhpWord/TemplateProcessorTest.php +++ b/tests/PhpWord/TemplateProcessorTest.php @@ -276,4 +276,14 @@ final class TemplateProcessorTest extends \PHPUnit\Framework\TestCase ); } } + + public function testMainPartNameDetection() + { + $templatePath = 'templates/document22-xml.docx'; + $templateProcessor = new TemplateProcessor($templatePath); + + $variables = array('test'); + + $this->assertEquals($variables, $templateProcessor->getVariables()); + } } diff --git a/tests/PhpWord/_files/templates/document22-xml.docx b/tests/PhpWord/_files/templates/document22-xml.docx new file mode 100644 index 0000000000000000000000000000000000000000..206d80f46063d4f9ec4594b191bbd6f493879b8e GIT binary patch literal 11126 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 literal 0 HcmV?d00001 From e19de8e8a481ce3fb1aa84ff236952c22debb277 Mon Sep 17 00:00:00 2001 From: Martin Hanzl Date: Thu, 11 Oct 2018 11:28:44 +0200 Subject: [PATCH 06/22] #1253 - add explanatory comment --- src/PhpWord/TemplateProcessor.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/PhpWord/TemplateProcessor.php b/src/PhpWord/TemplateProcessor.php index 86c9e1c9..ced3880e 100644 --- a/src/PhpWord/TemplateProcessor.php +++ b/src/PhpWord/TemplateProcessor.php @@ -503,6 +503,8 @@ class TemplateProcessor } /** + * Usually, the name of main part document will be 'document.xml'. However, some .docx files (possibly those from Office 365, experienced also on documents from Word Online created from blank templates) have file 'document22.xml' in their zip archive instead of 'document.xml'. This method searches content types file to correctly determine the file name. + * * @return string */ protected function getMainPartName() From 28505b0b77573d9f36936bf481ff8aef11eeec3a Mon Sep 17 00:00:00 2001 From: Ralph02 Date: Thu, 25 Oct 2018 11:23:53 +0100 Subject: [PATCH 07/22] RTF writer: Round getPageSizeW and getPageSizeH to avoid decimals --- src/PhpWord/Writer/RTF/Style/Section.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PhpWord/Writer/RTF/Style/Section.php b/src/PhpWord/Writer/RTF/Style/Section.php index 5c34fa86..ee6efcf3 100644 --- a/src/PhpWord/Writer/RTF/Style/Section.php +++ b/src/PhpWord/Writer/RTF/Style/Section.php @@ -43,8 +43,8 @@ class Section extends AbstractStyle $content .= '\sectd '; // Size & margin - $content .= $this->getValueIf($style->getPageSizeW() !== null, '\pgwsxn' . $style->getPageSizeW()); - $content .= $this->getValueIf($style->getPageSizeH() !== null, '\pghsxn' . $style->getPageSizeH()); + $content .= $this->getValueIf($style->getPageSizeW() !== null, '\pgwsxn' . round($style->getPageSizeW())); + $content .= $this->getValueIf($style->getPageSizeH() !== null, '\pghsxn' . round($style->getPageSizeH())); $content .= ' '; $content .= $this->getValueIf($style->getMarginTop() !== null, '\margtsxn' . $style->getMarginTop()); $content .= $this->getValueIf($style->getMarginRight() !== null, '\margrsxn' . $style->getMarginRight()); From 54eb6e6f2cf73d9983b08d80e2da9de8311fd6bc Mon Sep 17 00:00:00 2001 From: Stefan Thoolen Date: Tue, 6 Nov 2018 14:24:56 +0100 Subject: [PATCH 08/22] Fix for undefined index PHP Notice: Undefined index: document in /home/stefan/Projects/garrcomm/PHPWord/src/PhpWord/Reader/Word2007.php on line 65 PHP Warning: Invalid argument supplied for foreach() in /home/stefan/Projects/garrcomm/PHPWord/src/PhpWord/Reader/Word2007.php on line 65 --- src/PhpWord/Reader/Word2007.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/PhpWord/Reader/Word2007.php b/src/PhpWord/Reader/Word2007.php index deed3ce3..52030ef8 100644 --- a/src/PhpWord/Reader/Word2007.php +++ b/src/PhpWord/Reader/Word2007.php @@ -62,6 +62,9 @@ class Word2007 extends AbstractReader implements ReaderInterface foreach ($steps as $step) { $stepPart = $step['stepPart']; $stepItems = $step['stepItems']; + if (!isset($relationships[$stepPart])) { + continue; + } foreach ($relationships[$stepPart] as $relItem) { $relType = $relItem['type']; if (isset($stepItems[$relType])) { From 768a07071503cd24b8089f04899bc5f6d43bf61e Mon Sep 17 00:00:00 2001 From: Gordon Franke Date: Mon, 12 Nov 2018 08:02:15 +0100 Subject: [PATCH 09/22] add/align possible values from class constant --- docs/styles.rst | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/styles.rst b/docs/styles.rst index 03366427..8c5de7cb 100644 --- a/docs/styles.rst +++ b/docs/styles.rst @@ -29,6 +29,7 @@ Available Section style options: - ``marginRight``. Page margin right in *twip*. - ``marginBottom``. Page margin bottom in *twip*. - ``orientation``. Page orientation (``portrait``, which is default, or ``landscape``). + See ``\PhpOffice\PhpWord\Style\Section::ORIENTATION_...`` class constants for possible values - ``pageSizeH``. Page height in *twip*. Implicitly defined by ``orientation`` option. Any changes are discouraged. - ``pageSizeW``. Page width in *twip*. Implicitly defined by ``orientation`` option. Any changes are discouraged. @@ -45,7 +46,7 @@ Available Font style options: - ``color``. Font color, e.g. *FF0000*. - ``doubleStrikethrough``. Double strikethrough, *true* or *false*. - ``fgColor``. Font highlight color, e.g. *yellow*, *green*, *blue*. - See ``\PhpOffice\PhpWord\Style\Font::FGCOLOR_...`` constants for more values + See ``\PhpOffice\PhpWord\Style\Font::FGCOLOR_...`` class constants for possible values - ``hint``. Font content type, *default*, *eastAsia*, or *cs*. - ``italic``. Italic, *true* or *false*. - ``name``. Font name, e.g. *Arial*. @@ -56,7 +57,7 @@ Available Font style options: - ``subScript``. Subscript, *true* or *false*. - ``superScript``. Superscript, *true* or *false*. - ``underline``. Underline, *single*, *dash*, *dotted*, etc. - See ``\PhpOffice\PhpWord\Style\Font::UNDERLINE_...`` constants for more values + See ``\PhpOffice\PhpWord\Style\Font::UNDERLINE_...`` class constants for possible values - ``lang``. Language, either a language code like *en-US*, *fr-BE*, etc. or an object (or as an array) if you need to set eastAsian or bidirectional languages See ``\PhpOffice\PhpWord\Style\Language`` class for some language codes. - ``position``. The text position, raised or lowered, in half points @@ -69,7 +70,7 @@ Paragraph Available Paragraph style options: - ``alignment``. Supports all alignment modes since 1st Edition of ECMA-376 standard up till ISO/IEC 29500:2012. - See ``\PhpOffice\PhpWord\SimpleType\Jc`` class for the details. + See ``\PhpOffice\PhpWord\SimpleType\Jc`` class constants for possible values. - ``basedOn``. Parent style. - ``hanging``. Hanging in *twip*. - ``indent``. Indent in *twip*. @@ -82,6 +83,7 @@ Available Paragraph style options: - ``spaceAfter``. Space after paragraph in *twip*. - ``spacing``. Space between lines. - ``spacingLineRule``. Line Spacing Rule. *auto*, *exact*, *atLeast* + See ``\PhpOffice\PhpWord\SimpleType\LineSpacingRule`` class constants for possible values. - ``suppressAutoHyphens``. Hyphenation for paragraph, *true* or *false*. - ``tabs``. Set of custom tab stops. - ``widowControl``. Allow first/last line to display on a separate page, *true* or *false*. @@ -89,7 +91,7 @@ Available Paragraph style options: - ``bidi``. Right to Left Paragraph Layout, *true* or *false*. - ``shading``. Paragraph Shading. - ``textAlignment``. Vertical Character Alignment on Line. - See ``\PhpOffice\PhpWord\SimpleType\TextAlignment`` class for possible values. + See ``\PhpOffice\PhpWord\SimpleType\TextAlignment`` class constants for possible values. .. _table-style: @@ -99,7 +101,7 @@ Table Available Table style options: - ``alignment``. Supports all alignment modes since 1st Edition of ECMA-376 standard up till ISO/IEC 29500:2012. - See ``\PhpOffice\PhpWord\SimpleType\JcTable`` and ``\PhpOffice\PhpWord\SimpleType\Jc`` classes for the details. + See ``\PhpOffice\PhpWord\SimpleType\JcTable`` and ``\PhpOffice\PhpWord\SimpleType\Jc`` class constants for possible values. - ``bgColor``. Background color, e.g. '9966CC'. - ``border(Top|Right|Bottom|Left)Color``. Border color, e.g. '9966CC'. - ``border(Top|Right|Bottom|Left)Size``. Border size in *twip*. @@ -168,7 +170,7 @@ Numbering level Available NumberingLevel style options: - ``alignment``. Supports all alignment modes since 1st Edition of ECMA-376 standard up till ISO/IEC 29500:2012. - See ``\PhpOffice\PhpWord\SimpleType\Jc`` class for the details. + See ``\PhpOffice\PhpWord\SimpleType\Jc`` class constants for possible values. - ``font``. Font name. - ``format``. Numbering format bullet\|decimal\|upperRoman\|lowerRoman\|upperLetter\|lowerLetter. - ``hanging``. See paragraph style. From 9f28ece4e9b4d8c917135af05d58370c62a40287 Mon Sep 17 00:00:00 2001 From: troosan Date: Fri, 16 Nov 2018 22:40:37 +0100 Subject: [PATCH 10/22] Fix path to test document --- tests/PhpWord/TemplateProcessorTest.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/PhpWord/TemplateProcessorTest.php b/tests/PhpWord/TemplateProcessorTest.php index 2b3a9fd1..1513486e 100644 --- a/tests/PhpWord/TemplateProcessorTest.php +++ b/tests/PhpWord/TemplateProcessorTest.php @@ -279,8 +279,7 @@ final class TemplateProcessorTest extends \PHPUnit\Framework\TestCase public function testMainPartNameDetection() { - $templatePath = 'templates/document22-xml.docx'; - $templateProcessor = new TemplateProcessor($templatePath); + $templateProcessor = new TemplateProcessor(__DIR__ . '/_files/templates/document22-xml.docx'); $variables = array('test'); From c51b6febc0feb8841202e38b817422ab0bcb09c5 Mon Sep 17 00:00:00 2001 From: troosan Date: Fri, 16 Nov 2018 23:00:23 +0100 Subject: [PATCH 11/22] rename variable to comply with rules --- src/PhpWord/TemplateProcessor.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PhpWord/TemplateProcessor.php b/src/PhpWord/TemplateProcessor.php index ced3880e..b4102bcd 100644 --- a/src/PhpWord/TemplateProcessor.php +++ b/src/PhpWord/TemplateProcessor.php @@ -513,9 +513,9 @@ class TemplateProcessor $pattern = '~PartName="\/(word\/document.*?\.xml)" ContentType="application\/vnd\.openxmlformats-officedocument\.wordprocessingml\.document\.main\+xml"~'; - preg_match($pattern, $contentTypes, $m); + preg_match($pattern, $contentTypes, $matches); - return (array_key_exists(1, $m) ? $m[1] : 'word/document.xml'); + return (array_key_exists(1, $matches) ? $matches[1] : 'word/document.xml'); } /** From 925e9e091910bf90290dcfcfeb3a36fe94aa6855 Mon Sep 17 00:00:00 2001 From: troosan Date: Fri, 16 Nov 2018 23:33:38 +0100 Subject: [PATCH 12/22] remove trailing spaces --- src/PhpWord/TemplateProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PhpWord/TemplateProcessor.php b/src/PhpWord/TemplateProcessor.php index b4102bcd..f9a8ceb6 100644 --- a/src/PhpWord/TemplateProcessor.php +++ b/src/PhpWord/TemplateProcessor.php @@ -514,7 +514,7 @@ class TemplateProcessor $pattern = '~PartName="\/(word\/document.*?\.xml)" ContentType="application\/vnd\.openxmlformats-officedocument\.wordprocessingml\.document\.main\+xml"~'; preg_match($pattern, $contentTypes, $matches); - + return (array_key_exists(1, $matches) ? $matches[1] : 'word/document.xml'); } From ea6edf95ccefca19ab3a87cd192d8e9ca54a9c61 Mon Sep 17 00:00:00 2001 From: Christopher ARZUR Date: Fri, 16 Nov 2018 23:35:57 +0000 Subject: [PATCH 13/22] Added PHP 7.3 support for travis (#1495) * Added PHP 7.3 support for travis * mark php 7.3 as failable --- .travis.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index db77ff05..6fcdad43 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,11 +10,19 @@ php: - 7.0 - 7.1 - 7.2 + - 7.3 matrix: include: - php: 7.0 env: COVERAGE=1 + - php: 5.3 + env: COMPOSER_MEMORY_LIMIT=2G + exclude: + - php: 7.0 + - php: 5.3 + allow_failures: + - php: 7.3 cache: directories: @@ -32,7 +40,7 @@ before_install: before_script: ## Deactivate xdebug if we don't do code coverage - - if [ -z "$COVERAGE" ]; then phpenv config-rm xdebug.ini ; fi + - if [ -z "$COVERAGE" ]; then phpenv config-rm xdebug.ini || echo "xdebug not available" ; fi ## Composer - composer self-update - travis_wait composer install --prefer-source From 9b174e52c1600cb9f302a4dc40354eeb8fc6f01b Mon Sep 17 00:00:00 2001 From: Gabriel Caruso Date: Mon, 19 Nov 2018 01:35:03 -0200 Subject: [PATCH 15/22] Fix typo in the PR template --- docs/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/PULL_REQUEST_TEMPLATE.md b/docs/PULL_REQUEST_TEMPLATE.md index 24ba001c..5430a996 100644 --- a/docs/PULL_REQUEST_TEMPLATE.md +++ b/docs/PULL_REQUEST_TEMPLATE.md @@ -8,4 +8,4 @@ Fixes # (issue) - [ ] I have run `composer run-script check --timeout=0` and no errors were reported - [ ] The new code is covered by unit tests (check build/coverage for coverage report) -- [ ] I have update the documentation to describe the changes +- [ ] I have updated the documentation to describe the changes From d9d79c0666928ce564dbdf3d08dca9bcdc678863 Mon Sep 17 00:00:00 2001 From: Ralph02 Date: Thu, 25 Oct 2018 11:23:53 +0100 Subject: [PATCH 16/22] RTF writer: Round getPageSizeW and getPageSizeH to avoid decimals --- src/PhpWord/Writer/RTF/Style/Section.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PhpWord/Writer/RTF/Style/Section.php b/src/PhpWord/Writer/RTF/Style/Section.php index 5c34fa86..ee6efcf3 100644 --- a/src/PhpWord/Writer/RTF/Style/Section.php +++ b/src/PhpWord/Writer/RTF/Style/Section.php @@ -43,8 +43,8 @@ class Section extends AbstractStyle $content .= '\sectd '; // Size & margin - $content .= $this->getValueIf($style->getPageSizeW() !== null, '\pgwsxn' . $style->getPageSizeW()); - $content .= $this->getValueIf($style->getPageSizeH() !== null, '\pghsxn' . $style->getPageSizeH()); + $content .= $this->getValueIf($style->getPageSizeW() !== null, '\pgwsxn' . round($style->getPageSizeW())); + $content .= $this->getValueIf($style->getPageSizeH() !== null, '\pghsxn' . round($style->getPageSizeH())); $content .= ' '; $content .= $this->getValueIf($style->getMarginTop() !== null, '\margtsxn' . $style->getMarginTop()); $content .= $this->getValueIf($style->getMarginRight() !== null, '\margrsxn' . $style->getMarginRight()); From b5865b2fc2bb4773450add0c354e49166d32ea02 Mon Sep 17 00:00:00 2001 From: troosan Date: Tue, 20 Nov 2018 19:59:30 +0100 Subject: [PATCH 17/22] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index abf34834..7ce722c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ v0.16.0 (xx xxx 2018) ### Fixed - Fix regex in `cloneBlock` function @nicoder #1269 - HTML Title Writer loses text when Title contains a TextRun instead a string. @begnini #1436 +- RTF writer: Round getPageSizeW and getPageSizeH to avoid decimals @Patrick64 #1493 v0.15.0 (14 Jul 2018) ---------------------- From 1c20a4ed22c791e3cc574291c1f40e53b328568d Mon Sep 17 00:00:00 2001 From: troosan Date: Tue, 20 Nov 2018 21:22:50 +0100 Subject: [PATCH 18/22] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ce722c4..ce553f05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ v0.16.0 (xx xxx 2018) - Fix regex in `cloneBlock` function @nicoder #1269 - HTML Title Writer loses text when Title contains a TextRun instead a string. @begnini #1436 - RTF writer: Round getPageSizeW and getPageSizeH to avoid decimals @Patrick64 #1493 +- Fix parsing of Office 365 documents @Timanx #1485 v0.15.0 (14 Jul 2018) ---------------------- From c12f98f69a201502f3f994d261c106c8926ef62b Mon Sep 17 00:00:00 2001 From: troosan Date: Tue, 20 Nov 2018 22:40:54 +0100 Subject: [PATCH 19/22] fix check style warning --- src/PhpWord/TemplateProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PhpWord/TemplateProcessor.php b/src/PhpWord/TemplateProcessor.php index f9a8ceb6..95468878 100644 --- a/src/PhpWord/TemplateProcessor.php +++ b/src/PhpWord/TemplateProcessor.php @@ -515,7 +515,7 @@ class TemplateProcessor preg_match($pattern, $contentTypes, $matches); - return (array_key_exists(1, $matches) ? $matches[1] : 'word/document.xml'); + return array_key_exists(1, $matches) ? $matches[1] : 'word/document.xml'; } /** From 5ccf985f9ad1c596c8b60d0730ff0bdaa2124804 Mon Sep 17 00:00:00 2001 From: Christopher ARZUR Date: Fri, 16 Nov 2018 23:35:57 +0000 Subject: [PATCH 20/22] Added PHP 7.3 support for travis (#1495) * Added PHP 7.3 support for travis * mark php 7.3 as failable --- .travis.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index db77ff05..6fcdad43 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,11 +10,19 @@ php: - 7.0 - 7.1 - 7.2 + - 7.3 matrix: include: - php: 7.0 env: COVERAGE=1 + - php: 5.3 + env: COMPOSER_MEMORY_LIMIT=2G + exclude: + - php: 7.0 + - php: 5.3 + allow_failures: + - php: 7.3 cache: directories: @@ -32,7 +40,7 @@ before_install: before_script: ## Deactivate xdebug if we don't do code coverage - - if [ -z "$COVERAGE" ]; then phpenv config-rm xdebug.ini ; fi + - if [ -z "$COVERAGE" ]; then phpenv config-rm xdebug.ini || echo "xdebug not available" ; fi ## Composer - composer self-update - travis_wait composer install --prefer-source From a2a70736addbe2929c3edf41851bb83b75d00414 Mon Sep 17 00:00:00 2001 From: troosan Date: Thu, 22 Nov 2018 23:05:43 +0100 Subject: [PATCH 21/22] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index abf34834..8c3a174d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ v0.16.0 (xx xxx 2018) ### Fixed - Fix regex in `cloneBlock` function @nicoder #1269 - HTML Title Writer loses text when Title contains a TextRun instead a string. @begnini #1436 +- Fix loading of Sharepoint document @Garrcomm #1498 v0.15.0 (14 Jul 2018) ---------------------- From 7aef21facaf78e78da3902d1c2dc7766bca52c30 Mon Sep 17 00:00:00 2001 From: troosan Date: Wed, 28 Nov 2018 22:02:39 +0100 Subject: [PATCH 22/22] add test for parsing HTML containing entities --- tests/PhpWord/Shared/HtmlTest.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/PhpWord/Shared/HtmlTest.php b/tests/PhpWord/Shared/HtmlTest.php index 51d92431..89292a20 100644 --- a/tests/PhpWord/Shared/HtmlTest.php +++ b/tests/PhpWord/Shared/HtmlTest.php @@ -86,6 +86,21 @@ class HtmlTest extends \PHPUnit\Framework\TestCase $this->assertCount(2, $section->getElements()); } + /** + * Test HTML entities + */ + public function testParseHtmlEntities() + { + \PhpOffice\PhpWord\Settings::setOutputEscapingEnabled(true); + $phpWord = new \PhpOffice\PhpWord\PhpWord(); + $section = $phpWord->addSection(); + Html::addHtml($section, 'text with entities <my text>'); + + $doc = TestHelperDOCX::getDocument($phpWord, 'Word2007'); + $this->assertTrue($doc->elementExists('/w:document/w:body/w:p[1]/w:r/w:t')); + $this->assertEquals('text with entities ', $doc->getElement('/w:document/w:body/w:p[1]/w:r/w:t')->nodeValue); + } + /** * Test underline */