diff --git a/CHANGELOG.md b/CHANGELOG.md
index e5ce3c15..9ec1deef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,9 +7,11 @@ v0.17.0 (?? ??? 2019)
----------------------
### Added
- Add RightToLeft table presentation. @troosan #1550
+- Set complex type in template @troosan #1565
- Add support for page vertical alignment. @troosan #672 #1569
### Fixed
+- Fix HTML border-color parsing. @troosan #1551 #1570
### Miscelaneous
- Use embedded http server to test loading of remote images @troosan #
diff --git a/samples/Sample_26_Html.php b/samples/Sample_26_Html.php
index 82a5cf6e..6bd926fe 100644
--- a/samples/Sample_26_Html.php
+++ b/samples/Sample_26_Html.php
@@ -74,7 +74,7 @@ $html .= '
- | 1 | 2 |
+ | 1 | 2 |
| This is bold text | | 6 |
';
diff --git a/src/PhpWord/Shared/Html.php b/src/PhpWord/Shared/Html.php
index 7f4bf825..89881822 100644
--- a/src/PhpWord/Shared/Html.php
+++ b/src/PhpWord/Shared/Html.php
@@ -516,7 +516,7 @@ class Html
$styles['alignment'] = self::mapAlign($cValue);
break;
case 'display':
- $styles['hidden'] = $cValue === 'none';
+ $styles['hidden'] = $cValue === 'none' || $cValue === 'hidden';
break;
case 'direction':
$styles['rtl'] = $cValue === 'rtl';
@@ -581,7 +581,7 @@ class Html
$styles['spaceAfter'] = Converter::cssToPoint($cValue);
break;
case 'border-color':
- $styles['color'] = trim($cValue, '#');
+ self::mapBorderColor($styles, $cValue);
break;
case 'border-width':
$styles['borderSize'] = Converter::cssToPoint($cValue);
@@ -738,6 +738,20 @@ class Html
}
}
+ private static function mapBorderColor(&$styles, $cssBorderColor)
+ {
+ $numColors = substr_count($cssBorderColor, '#');
+ if ($numColors === 1) {
+ $styles['borderColor'] = trim($cssBorderColor, '#');
+ } elseif ($numColors > 1) {
+ $colors = explode(' ', $cssBorderColor);
+ $borders = array('borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor');
+ for ($i = 0; $i < min(4, $numColors, count($colors)); $i++) {
+ $styles[$borders[$i]] = trim($colors[$i], '#');
+ }
+ }
+ }
+
/**
* Transforms a HTML/CSS alignment into a \PhpOffice\PhpWord\SimpleType\Jc
*
diff --git a/tests/PhpWord/Shared/HtmlTest.php b/tests/PhpWord/Shared/HtmlTest.php
index 2f9a4be4..5bc9e241 100644
--- a/tests/PhpWord/Shared/HtmlTest.php
+++ b/tests/PhpWord/Shared/HtmlTest.php
@@ -297,8 +297,8 @@ class HtmlTest extends AbstractWebServerEmbeddedTest
| header a |
- header b |
- header c |
+ header b |
+ header c |
@@ -313,6 +313,17 @@ class HtmlTest extends AbstractWebServerEmbeddedTest
$this->assertTrue($doc->elementExists('/w:document/w:body/w:tbl/w:tr/w:tc'));
$this->assertTrue($doc->elementExists('/w:document/w:body/w:tbl/w:tblPr/w:jc'));
$this->assertEquals(Jc::START, $doc->getElementAttribute('/w:document/w:body/w:tbl/w:tblPr/w:jc', 'w:val'));
+
+ //check border colors
+ $this->assertEquals('00EE00', $doc->getElementAttribute('/w:document/w:body/w:tbl/w:tr[1]/w:tc[2]/w:tcPr/w:tcBorders/w:top', 'w:color'));
+ $this->assertEquals('00EE00', $doc->getElementAttribute('/w:document/w:body/w:tbl/w:tr[1]/w:tc[2]/w:tcPr/w:tcBorders/w:right', 'w:color'));
+ $this->assertEquals('00EE00', $doc->getElementAttribute('/w:document/w:body/w:tbl/w:tr[1]/w:tc[2]/w:tcPr/w:tcBorders/w:bottom', 'w:color'));
+ $this->assertEquals('00EE00', $doc->getElementAttribute('/w:document/w:body/w:tbl/w:tr[1]/w:tc[2]/w:tcPr/w:tcBorders/w:left', 'w:color'));
+
+ $this->assertEquals('00AA00', $doc->getElementAttribute('/w:document/w:body/w:tbl/w:tr[1]/w:tc[3]/w:tcPr/w:tcBorders/w:top', 'w:color'));
+ $this->assertEquals('00BB00', $doc->getElementAttribute('/w:document/w:body/w:tbl/w:tr[1]/w:tc[3]/w:tcPr/w:tcBorders/w:right', 'w:color'));
+ $this->assertEquals('00CC00', $doc->getElementAttribute('/w:document/w:body/w:tbl/w:tr[1]/w:tc[3]/w:tcPr/w:tcBorders/w:bottom', 'w:color'));
+ $this->assertEquals('00DD00', $doc->getElementAttribute('/w:document/w:body/w:tbl/w:tr[1]/w:tc[3]/w:tcPr/w:tcBorders/w:left', 'w:color'));
}
/**
@@ -590,4 +601,35 @@ class HtmlTest extends AbstractWebServerEmbeddedTest
$doc = TestHelperDOCX::getDocument($phpWord, 'Word2007');
$this->assertFalse($doc->elementExists('/w:document/w:body/w:p[1]/w:pPr/w:jc'));
}
+
+ /**
+ * Tests parsing hidden text
+ */
+ public function testParseHiddenText()
+ {
+ $phpWord = new \PhpOffice\PhpWord\PhpWord();
+ $section = $phpWord->addSection();
+ $html = 'This is some hidden text.
';
+ Html::addHtml($section, $html);
+
+ $doc = TestHelperDOCX::getDocument($phpWord, 'Word2007');
+
+ $this->assertTrue($doc->elementExists('/w:document/w:body/w:p/w:r/w:rPr/w:vanish'));
+ }
+
+ /**
+ * Tests parsing letter spacing
+ */
+ public function testParseLetterSpacing()
+ {
+ $phpWord = new \PhpOffice\PhpWord\PhpWord();
+ $section = $phpWord->addSection();
+ $html = 'This is some text with letter spacing.
';
+ Html::addHtml($section, $html);
+
+ $doc = TestHelperDOCX::getDocument($phpWord, 'Word2007');
+
+ $this->assertTrue($doc->elementExists('/w:document/w:body/w:p/w:r/w:rPr/w:spacing'));
+ $this->assertEquals(150 * 15, $doc->getElement('/w:document/w:body/w:p/w:r/w:rPr/w:spacing')->getAttribute('w:val'));
+ }
}