diff --git a/CHANGELOG.md b/CHANGELOG.md
index e5ce3c1587..9ec1deeff7 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 82a5cf6eef..6bd926fe5b 100644
--- a/samples/Sample_26_Html.php
+++ b/samples/Sample_26_Html.php
@@ -74,7 +74,7 @@
- 1 | 2 |
+ 1 | 2 |
This is bold text | | 6 |
';
diff --git a/src/PhpWord/Shared/Html.php b/src/PhpWord/Shared/Html.php
index 7f4bf825e3..89881822ca 100644
--- a/src/PhpWord/Shared/Html.php
+++ b/src/PhpWord/Shared/Html.php
@@ -516,7 +516,7 @@ private static function parseStyle($attribute, $styles)
$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 @@ private static function parseStyle($attribute, $styles)
$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 @@ private static function mapBorderStyle($cssBorderStyle)
}
}
+ 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 2f9a4be405..5bc9e2411a 100644
--- a/tests/PhpWord/Shared/HtmlTest.php
+++ b/tests/PhpWord/Shared/HtmlTest.php
@@ -297,8 +297,8 @@ public function testParseTable()
header a |
- header b |
- header c |
+ header b |
+ header c |
@@ -313,6 +313,17 @@ public function testParseTable()
$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 @@ public function testParseMalformedStyleIsIgnored()
$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'));
+ }
}