Fix TemplateProcessor :: fixBrokenMacros; (#1502)
* Fix TemplateProcessor :: fixBrokenMacros; * add unit test for fixBrokenMacros
This commit is contained in:
parent
af5a271e9e
commit
260bb75fc2
|
|
@ -11,6 +11,7 @@ v0.16.0 (xx dec 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 regex in fixBrokenMacros, make it less greedy @MuriloSo @brainwood @yurii-sio2 #1502 #1345
|
||||
- 240 twips are being added to line spacing, should not happen when using lineRule fixed @troosan #1509 #1505
|
||||
- Adding table layout to the generated HTML @aarangara #1441
|
||||
- Fix loading of Sharepoint document @Garrcomm #1498
|
||||
|
|
|
|||
|
|
@ -442,17 +442,13 @@ class TemplateProcessor
|
|||
*/
|
||||
protected function fixBrokenMacros($documentPart)
|
||||
{
|
||||
$fixedDocumentPart = $documentPart;
|
||||
|
||||
$fixedDocumentPart = preg_replace_callback(
|
||||
'|\$[^{]*\{[^}]*\}|U',
|
||||
return preg_replace_callback(
|
||||
'/\$(?:\{|[^{$]*\>\{)[^}$]*\}/U',
|
||||
function ($match) {
|
||||
return strip_tags($match[0]);
|
||||
},
|
||||
$fixedDocumentPart
|
||||
$documentPart
|
||||
);
|
||||
|
||||
return $fixedDocumentPart;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -277,6 +277,38 @@ final class TemplateProcessorTest extends \PHPUnit\Framework\TestCase
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Template macros can be fixed.
|
||||
*
|
||||
* @covers ::fixBrokenMacros
|
||||
* @test
|
||||
*/
|
||||
public function testFixBrokenMacros()
|
||||
{
|
||||
$templateProcessor = new TestableTemplateProcesor();
|
||||
|
||||
$fixed = $templateProcessor->fixBrokenMacros('<w:r><w:t>normal text</w:t></w:r>');
|
||||
$this->assertEquals('<w:r><w:t>normal text</w:t></w:r>', $fixed);
|
||||
|
||||
$fixed = $templateProcessor->fixBrokenMacros('<w:r><w:t>${documentContent}</w:t></w:r>');
|
||||
$this->assertEquals('<w:r><w:t>${documentContent}</w:t></w:r>', $fixed);
|
||||
|
||||
$fixed = $templateProcessor->fixBrokenMacros('<w:r><w:t>$</w:t><w:t>{documentContent}</w:t></w:r>');
|
||||
$this->assertEquals('<w:r><w:t>${documentContent}</w:t></w:r>', $fixed);
|
||||
|
||||
$fixed = $templateProcessor->fixBrokenMacros('<w:r><w:t>$1500</w:t><w:t>${documentContent}</w:t></w:r>');
|
||||
$this->assertEquals('<w:r><w:t>$1500</w:t><w:t>${documentContent}</w:t></w:r>', $fixed);
|
||||
|
||||
$fixed = $templateProcessor->fixBrokenMacros('<w:r><w:t>$1500</w:t><w:t>$</w:t><w:t>{documentContent}</w:t></w:r>');
|
||||
$this->assertEquals('<w:r><w:t>$1500</w:t><w:t>${documentContent}</w:t></w:r>', $fixed);
|
||||
|
||||
$fixed = $templateProcessor->fixBrokenMacros('<w:r><w:t>25$ plus some info {hint}</w:t></w:r>');
|
||||
$this->assertEquals('<w:r><w:t>25$ plus some info {hint}</w:t></w:r>', $fixed);
|
||||
|
||||
$fixed = $templateProcessor->fixBrokenMacros('<w:t>$</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/><w:r><w:t xml:space="preserve">15,000.00. </w:t></w:r><w:r w:rsidR="0056499B"><w:t>$</w:t></w:r><w:r w:rsidR="00573DFD" w:rsidRPr="00573DFD"><w:rPr><w:iCs/></w:rPr><w:t>{</w:t></w:r><w:proofErr w:type="spellStart"/><w:r w:rsidR="00573DFD" w:rsidRPr="00573DFD"><w:rPr><w:iCs/></w:rPr><w:t>variable_name</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r w:rsidR="00573DFD" w:rsidRPr="00573DFD"><w:rPr><w:iCs/></w:rPr><w:t>}</w:t></w:r>');
|
||||
$this->assertEquals('<w:t>$</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/><w:r><w:t xml:space="preserve">15,000.00. </w:t></w:r><w:r w:rsidR="0056499B"><w:t>${variable_name}</w:t></w:r>', $fixed);
|
||||
}
|
||||
|
||||
public function testMainPartNameDetection()
|
||||
{
|
||||
$templateProcessor = new TemplateProcessor(__DIR__ . '/_files/templates/document22-xml.docx');
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is part of PHPWord - A pure PHP library for reading and writing
|
||||
* word processing documents.
|
||||
*
|
||||
* PHPWord is free software distributed under the terms of the GNU Lesser
|
||||
* General Public License version 3 as published by the Free Software Foundation.
|
||||
*
|
||||
* For the full copyright and license information, please read the LICENSE
|
||||
* file that was distributed with this source code. For the full list of
|
||||
* contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
|
||||
*
|
||||
* @see https://github.com/PHPOffice/PHPWord
|
||||
* @copyright 2010-2018 PHPWord contributors
|
||||
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
|
||||
*/
|
||||
|
||||
namespace PhpOffice\PhpWord;
|
||||
|
||||
class TestableTemplateProcesor extends TemplateProcessor
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
public function fixBrokenMacros($documentPart)
|
||||
{
|
||||
return parent::fixBrokenMacros($documentPart);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue