Merge pull request #1088 from troosan/add_support_for_contextual_spacing

Add support for contextual spacing
This commit is contained in:
troosan 2017-07-01 23:09:40 +02:00 committed by GitHub
commit ce492133a6
4 changed files with 69 additions and 20 deletions

View File

@ -77,6 +77,7 @@ See ``\PhpOffice\PhpWord\SimpleType\Jc`` class for the details.
- ``spaceAfter``. Space after paragraph.
- ``tabs``. Set of custom tab stops.
- ``widowControl``. Allow first/last line to display on a separate page, *true* or *false*.
- ``contextualSpacing``. Ignore Spacing Above and Below When Using Identical Styles, *true* or *false*.
.. _table-style:

View File

@ -158,6 +158,13 @@ class Paragraph extends Border
*/
private $shading;
/**
* Ignore Spacing Above and Below When Using Identical Styles
*
* @var bool
*/
private $contextualSpacing = false;
/**
* Set Style value
*
@ -208,6 +215,7 @@ class Paragraph extends Border
),
'tabs' => $this->getTabs(),
'shading' => $this->getShading(),
'contextualSpacing' => $this->hasContextualSpacing(),
);
return $styles;
@ -731,4 +739,27 @@ class Paragraph extends Border
return $this;
}
/**
* Get contextualSpacing
*
* @return bool
*/
public function hasContextualSpacing()
{
return $this->contextualSpacing;
}
/**
* Set contextualSpacing
*
* @param bool $contextualSpacing
* @return self
*/
public function setContextualSpacing($contextualSpacing)
{
$this->contextualSpacing = $contextualSpacing;
return $this;
}
}

View File

@ -107,6 +107,9 @@ class Paragraph extends AbstractStyle
$xmlWriter->endElement();
}
//Paragraph contextualSpacing
$xmlWriter->writeElementIf($styles['contextualSpacing'] === true, 'w:contextualSpacing');
// Child style: alignment, indentation, spacing, and shading
$this->writeChildStyle($xmlWriter, 'Indentation', $styles['indentation']);
$this->writeChildStyle($xmlWriter, 'Spacing', $styles['spacing']);

View File

@ -47,9 +47,10 @@ class ParagraphTest extends \PHPUnit_Framework_TestCase
'keepNext' => false,
'keepLines' => false,
'pageBreakBefore' => false,
'contextualSpacing' => false,
);
foreach ($attributes as $key => $default) {
$get = "get{$key}";
$get = $this->findGetter($key, $default, $object);
$object->setStyleValue($key, null);
$this->assertEquals($default, $object->$get());
$object->setStyleValue($key, '');
@ -78,9 +79,10 @@ class ParagraphTest extends \PHPUnit_Framework_TestCase
'keepNext' => true,
'keepLines' => true,
'pageBreakBefore' => true,
'contextualSpacing' => true,
);
foreach ($attributes as $key => $value) {
$get = "get{$key}";
$get = $this->findGetter($key, $value, $object);
$object->setStyleValue("$key", $value);
if ('indent' == $key || 'hanging' == $key) {
$value = $value * 720;
@ -91,6 +93,18 @@ class ParagraphTest extends \PHPUnit_Framework_TestCase
}
}
private function findGetter($key, $value, $object)
{
if (is_bool($value)) {
if (method_exists($object, "is{$key}")) {
return "is{$key}";
} else if (method_exists($object, "has{$key}")) {
return "has{$key}";
}
}
return "get{$key}";
}
/**
* Test get null style value
*/
@ -100,7 +114,7 @@ class ParagraphTest extends \PHPUnit_Framework_TestCase
$attributes = array('spacing', 'indent', 'hanging', 'spaceBefore', 'spaceAfter');
foreach ($attributes as $key) {
$get = "get{$key}";
$get = $this->findGetter($key, null, $object);
$this->assertNull($object->$get());
}
}