diff options
| author | Michael Williamson <mike@zwobble.org> | 2017-05-20 15:21:05 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2017-05-20 15:21:05 +0100 |
| commit | 76dbec2efb57f87118069427158c15f7bb59c82d (patch) | |
| tree | 4a5cdeac9e3f64964d7ef5cec6d8556837a62df4 | |
| parent | c2d5d7043644cbd3e0a8bfe3d9251cc5eca811d4 (diff) | |
Read whether row is header
| -rw-r--r-- | lib/documents.js | 6 | ||||
| -rw-r--r-- | lib/docx/body-reader.js | 7 | ||||
| -rw-r--r-- | test/docx/body-reader.tests.js | 26 |
3 files changed, 36 insertions, 3 deletions
diff --git a/lib/documents.js b/lib/documents.js index d4f4e3c..81fea00 100644 --- a/lib/documents.js +++ b/lib/documents.js @@ -153,10 +153,12 @@ function Table(children) { }; } -function TableRow(children) { +function TableRow(children, options) { + options = options || {}; return { type: types.tableRow, - children: children + children: children, + isHeader: options.isHeader || false }; } diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index 05a564a..f035c1a 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -285,7 +285,11 @@ function BodyReader(options) { } function readTableRow(element) { - return readXmlElements(element.children).map(documents.TableRow); + var properties = element.firstOrEmpty("w:trPr"); + var isHeader = !!properties.first("w:tblHeader"); + return readXmlElements(element.children).map(function(children) { + return documents.TableRow(children, {isHeader: isHeader}); + }); } function readTableCell(element) { @@ -467,6 +471,7 @@ var ignoreElements = { "w:endnoteRef": true, "w:tblPr": true, "w:tblGrid": true, + "w:trPr": true, "w:tcPr": true }; diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js index 14fbba9..aaac22d 100644 --- a/test/docx/body-reader.tests.js +++ b/test/docx/body-reader.tests.js @@ -527,6 +527,24 @@ test("w:tbl is read as document table element", function() { ])); }); +test("w:tblHeader marks table row as header", function() { + var tableXml = new XmlElement("w:tbl", {}, [ + new XmlElement("w:tr", {}, [ + new XmlElement("w:trPr", {}, [ + new XmlElement("w:tblHeader") + ]) + ]), + new XmlElement("w:tr") + ]); + var result = readXmlElementValue(tableXml); + assertThat(result, isTable({ + children: contains( + isRow({isHeader: true}), + isRow({isHeader: false}) + ) + })); +}); + test("w:gridSpan is read as colSpan for table cell", function() { var tableXml = new XmlElement("w:tbl", {}, [ new XmlElement("w:tr", {}, [ @@ -648,6 +666,14 @@ function docEmptyCell(properties) { return new documents.TableCell([], properties); } +function isTable(options) { + return hasProperties(_.extend({type: documents.types.table}, options)); +} + +function isRow(options) { + return hasProperties(_.extend({type: documents.types.tableRow}, options)); +} + test("w:bookmarkStart is read as a bookmarkStart", function() { var bookmarkStart = new XmlElement("w:bookmarkStart", {"w:name": "_Peter", "w:id": "42"}); var result = readXmlElement(bookmarkStart); |
