From 147bebfa7f59f8e68c467de792108ac35e34057a Mon Sep 17 00:00:00 2001 From: bokuweb Date: Mon, 22 Mar 2021 23:30:58 +0900 Subject: [PATCH] fix: tl2br (#258) * fix: tl2br * update * fix: type * add mock * update --- docx-core/src/reader/xml_element.rs | 2 + docx-wasm/js/json/run.ts | 2 +- docx-wasm/package.json | 2 +- .../test/__snapshots__/index.test.js.snap | 999 ++++++++++++++++++ docx-wasm/test/index.test.js | 7 + fixtures/tr2bl/tr2bl.docx | Bin 0 -> 12578 bytes 6 files changed, 1010 insertions(+), 2 deletions(-) create mode 100644 fixtures/tr2bl/tr2bl.docx diff --git a/docx-core/src/reader/xml_element.rs b/docx-core/src/reader/xml_element.rs index f335a6b..0154f5a 100644 --- a/docx-core/src/reader/xml_element.rs +++ b/docx-core/src/reader/xml_element.rs @@ -246,6 +246,8 @@ impl FromStr for XMLElement { "bottom" => Ok(XMLElement::Bottom), "insideH" => Ok(XMLElement::InsideH), "insideV" => Ok(XMLElement::InsideV), + "tl2br" => Ok(XMLElement::Tl2br), + "tr2bl" => Ok(XMLElement::Tr2bl), "tblCellMar" => Ok(XMLElement::TableCellMargin), "tblGrid" => Ok(XMLElement::TableGrid), "tblPrChange" => Ok(XMLElement::TablePropertyChange), diff --git a/docx-wasm/js/json/run.ts b/docx-wasm/js/json/run.ts index e12cbdb..21fd60e 100644 --- a/docx-wasm/js/json/run.ts +++ b/docx-wasm/js/json/run.ts @@ -20,7 +20,7 @@ export type RunPropertyJSON = { italicCs: boolean | null; vanish: boolean | null; spacing: number | null; - TextBorder: TextBorderJSON | null; + textBorder: TextBorderJSON | null; }; export type RunChildJSON = diff --git a/docx-wasm/package.json b/docx-wasm/package.json index 135baad..6cdbd39 100644 --- a/docx-wasm/package.json +++ b/docx-wasm/package.json @@ -1,6 +1,6 @@ { "name": "docx-wasm", - "version": "0.0.171", + "version": "0.0.173", "main": "dist/node/index.js", "browser": "dist/web/index.js", "author": "bokuweb ", diff --git a/docx-wasm/test/__snapshots__/index.test.js.snap b/docx-wasm/test/__snapshots__/index.test.js.snap index e9fef31..d1a0f51 100644 --- a/docx-wasm/test/__snapshots__/index.test.js.snap +++ b/docx-wasm/test/__snapshots__/index.test.js.snap @@ -10754,6 +10754,1005 @@ Object { } `; +exports[`reader should read tr2bl docx 1`] = ` +Object { + "comments": Object { + "comments": Array [], + }, + "commentsExtended": Object { + "children": Array [], + }, + "contentType": Object { + "types": Object { + "/_rels/.rels": "application/vnd.openxmlformats-package.relationships+xml", + "/docProps/app.xml": "application/vnd.openxmlformats-officedocument.extended-properties+xml", + "/docProps/core.xml": "application/vnd.openxmlformats-package.core-properties+xml", + "/word/_rels/document.xml.rels": "application/vnd.openxmlformats-package.relationships+xml", + "/word/comments.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml", + "/word/commentsExtended.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml", + "/word/document.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", + "/word/fontTable.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml", + "/word/header1.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml", + "/word/numbering.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml", + "/word/settings.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml", + "/word/styles.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml", + }, + }, + "docProps": Object { + "app": Object {}, + "core": Object { + "config": Object { + "created": null, + "creator": null, + "description": null, + "language": null, + "lastModifiedBy": null, + "modified": null, + "revision": null, + "subject": null, + "title": null, + }, + }, + }, + "document": Object { + "children": Array [ + Object { + "data": Object { + "grid": Array [ + 2829, + 2829, + 2830, + ], + "hasNumbering": false, + "property": Object { + "borders": Object { + "bottom": null, + "insideH": null, + "insideV": null, + "left": null, + "right": null, + "top": null, + }, + "indent": null, + "justification": "left", + "margins": Object { + "bottom": 55, + "left": 54, + "right": 55, + "top": 55, + }, + "style": "a3", + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + "rows": Array [ + Object { + "cells": Array [ + Object { + "children": Array [ + Object { + "data": Object { + "children": Array [], + "hasNumbering": false, + "id": "5586561A", + "property": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + }, + "type": "paragraph", + }, + ], + "hasNumbering": false, + "property": Object { + "borders": Object { + "bottom": null, + "insideH": null, + "insideV": null, + "left": null, + "right": null, + "tl2br": Object { + "borderType": "single", + "color": "auto", + "position": "tl2br", + "size": 4, + "space": 0, + }, + "top": null, + "tr2bl": null, + }, + "gridSpan": 2, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": Object { + "width": 5658, + "widthType": "DXA", + }, + }, + }, + Object { + "children": Array [ + Object { + "data": Object { + "children": Array [], + "hasNumbering": false, + "id": "1DA21770", + "property": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + }, + "type": "paragraph", + }, + ], + "hasNumbering": false, + "property": Object { + "borders": Object { + "bottom": null, + "insideH": null, + "insideV": null, + "left": null, + "right": null, + "tl2br": null, + "top": null, + "tr2bl": Object { + "borderType": "single", + "color": "auto", + "position": "tr2bl", + "size": 4, + "space": 0, + }, + }, + "gridSpan": null, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": Object { + "width": 2830, + "widthType": "DXA", + }, + }, + }, + ], + "hasNumbering": false, + "property": Object { + "gridAfter": null, + "heightRule": "atLeast", + "rowHeight": 730, + "widthAfter": null, + }, + }, + Object { + "cells": Array [ + Object { + "children": Array [ + Object { + "data": Object { + "children": Array [], + "hasNumbering": false, + "id": "31861494", + "property": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + }, + "type": "paragraph", + }, + ], + "hasNumbering": false, + "property": Object { + "borders": Object { + "bottom": null, + "insideH": null, + "insideV": null, + "left": Object { + "borderType": "dashed", + "color": "auto", + "position": "left", + "size": 4, + "space": 0, + }, + "right": null, + "tl2br": null, + "top": null, + "tr2bl": null, + }, + "gridSpan": null, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": Object { + "width": 2829, + "widthType": "DXA", + }, + }, + }, + Object { + "children": Array [ + Object { + "data": Object { + "children": Array [], + "hasNumbering": false, + "id": "7FD0387F", + "property": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + }, + "type": "paragraph", + }, + ], + "hasNumbering": false, + "property": Object { + "borders": Object { + "bottom": null, + "insideH": null, + "insideV": null, + "left": null, + "right": null, + "tl2br": Object { + "borderType": "single", + "color": "auto", + "position": "tl2br", + "size": 4, + "space": 0, + }, + "top": null, + "tr2bl": Object { + "borderType": "single", + "color": "auto", + "position": "tr2bl", + "size": 4, + "space": 0, + }, + }, + "gridSpan": null, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": Object { + "width": 2829, + "widthType": "DXA", + }, + }, + }, + Object { + "children": Array [ + Object { + "data": Object { + "children": Array [], + "hasNumbering": false, + "id": "721462F5", + "property": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + }, + "type": "paragraph", + }, + ], + "hasNumbering": false, + "property": Object { + "borders": null, + "gridSpan": null, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": Object { + "width": 2830, + "widthType": "DXA", + }, + }, + }, + ], + "hasNumbering": false, + "property": Object { + "gridAfter": null, + "heightRule": "atLeast", + "rowHeight": null, + "widthAfter": null, + }, + }, + ], + }, + "type": "table", + }, + Object { + "data": Object { + "children": Array [], + "hasNumbering": false, + "id": "1D17E6B2", + "property": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + }, + "type": "paragraph", + }, + ], + "hasNumbering": false, + "sectionProperty": Object { + "columns": 425, + "docGrid": Object { + "charSpace": null, + "gridType": "lines", + "linePitch": 360, + }, + "headerReference": Object { + "headerType": "default", + "id": "rId4", + }, + "pageMargin": Object { + "bottom": 1701, + "footer": 992, + "gutter": 0, + "header": 851, + "left": 1701, + "right": 1701, + "top": 1985, + }, + "pageSize": Object { + "h": 16840, + "w": 11900, + }, + "sectionType": null, + }, + }, + "documentRels": Object { + "hasComments": false, + "hasNumberings": false, + "imageIds": Array [], + }, + "fontTable": Object {}, + "header": Object { + "children": Array [], + }, + "media": Array [], + "numberings": Object { + "abstractNums": Array [], + "numberings": Array [], + }, + "rels": Object { + "rels": Array [ + Array [ + "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties", + "rId1", + "docProps/core.xml", + ], + Array [ + "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties", + "rId2", + "docProps/app.xml", + ], + Array [ + "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", + "rId3", + "word/document.xml", + ], + ], + }, + "settings": Object { + "defaultTabStop": 709, + "docId": "9F52F717-3F03-584C-ACEF-96E0106FA905", + "docVars": Array [], + "zoom": 100, + }, + "styles": Object { + "docDefaults": Object { + "runPropertyDefault": Object { + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": 21, + "szCs": 21, + "textBorder": null, + "underline": null, + "vanish": null, + }, + }, + }, + "styles": Array [ + Object { + "basedOn": null, + "name": "Normal", + "paragraphProperty": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "styleId": "a", + "styleType": "paragraph", + "tableProperty": Object { + "borders": Object { + "bottom": Object { + "borderType": "single", + "color": "000000", + "position": "bottom", + "size": 2, + "space": 0, + }, + "insideH": Object { + "borderType": "single", + "color": "000000", + "position": "insideH", + "size": 2, + "space": 0, + }, + "insideV": Object { + "borderType": "single", + "color": "000000", + "position": "insideV", + "size": 2, + "space": 0, + }, + "left": Object { + "borderType": "single", + "color": "000000", + "position": "left", + "size": 2, + "space": 0, + }, + "right": Object { + "borderType": "single", + "color": "000000", + "position": "right", + "size": 2, + "space": 0, + }, + "top": Object { + "borderType": "single", + "color": "000000", + "position": "top", + "size": 2, + "space": 0, + }, + }, + "indent": null, + "justification": "left", + "margins": Object { + "bottom": 55, + "left": 54, + "right": 55, + "top": 55, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + Object { + "basedOn": null, + "name": "Default Paragraph Font", + "paragraphProperty": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "styleId": "a0", + "styleType": "character", + "tableProperty": Object { + "borders": Object { + "bottom": Object { + "borderType": "single", + "color": "000000", + "position": "bottom", + "size": 2, + "space": 0, + }, + "insideH": Object { + "borderType": "single", + "color": "000000", + "position": "insideH", + "size": 2, + "space": 0, + }, + "insideV": Object { + "borderType": "single", + "color": "000000", + "position": "insideV", + "size": 2, + "space": 0, + }, + "left": Object { + "borderType": "single", + "color": "000000", + "position": "left", + "size": 2, + "space": 0, + }, + "right": Object { + "borderType": "single", + "color": "000000", + "position": "right", + "size": 2, + "space": 0, + }, + "top": Object { + "borderType": "single", + "color": "000000", + "position": "top", + "size": 2, + "space": 0, + }, + }, + "indent": null, + "justification": "left", + "margins": Object { + "bottom": 55, + "left": 54, + "right": 55, + "top": 55, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + Object { + "basedOn": null, + "name": "Normal Table", + "paragraphProperty": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "styleId": "a1", + "styleType": "table", + "tableProperty": Object { + "borders": Object { + "bottom": null, + "insideH": null, + "insideV": null, + "left": null, + "right": null, + "top": null, + }, + "indent": null, + "justification": "left", + "margins": Object { + "bottom": 55, + "left": 54, + "right": 55, + "top": 55, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + Object { + "basedOn": null, + "name": "No List", + "paragraphProperty": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "styleId": "a2", + "styleType": "numbering", + "tableProperty": Object { + "borders": Object { + "bottom": Object { + "borderType": "single", + "color": "000000", + "position": "bottom", + "size": 2, + "space": 0, + }, + "insideH": Object { + "borderType": "single", + "color": "000000", + "position": "insideH", + "size": 2, + "space": 0, + }, + "insideV": Object { + "borderType": "single", + "color": "000000", + "position": "insideV", + "size": 2, + "space": 0, + }, + "left": Object { + "borderType": "single", + "color": "000000", + "position": "left", + "size": 2, + "space": 0, + }, + "right": Object { + "borderType": "single", + "color": "000000", + "position": "right", + "size": 2, + "space": 0, + }, + "top": Object { + "borderType": "single", + "color": "000000", + "position": "top", + "size": 2, + "space": 0, + }, + }, + "indent": null, + "justification": "left", + "margins": Object { + "bottom": 55, + "left": 54, + "right": 55, + "top": 55, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + Object { + "basedOn": "a1", + "name": "Table Grid", + "paragraphProperty": Object { + "alignment": null, + "indent": null, + "lineHeight": null, + "numberingProperty": null, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "style": null, + }, + "runProperty": Object { + "bold": null, + "boldCs": null, + "color": null, + "fonts": null, + "highlight": null, + "italic": null, + "italicCs": null, + "spacing": null, + "sz": null, + "szCs": null, + "textBorder": null, + "underline": null, + "vanish": null, + }, + "styleId": "a3", + "styleType": "table", + "tableProperty": Object { + "borders": Object { + "bottom": Object { + "borderType": "single", + "color": "auto", + "position": "bottom", + "size": 4, + "space": 0, + }, + "insideH": Object { + "borderType": "single", + "color": "auto", + "position": "insideH", + "size": 4, + "space": 0, + }, + "insideV": Object { + "borderType": "single", + "color": "auto", + "position": "insideV", + "size": 4, + "space": 0, + }, + "left": Object { + "borderType": "single", + "color": "auto", + "position": "left", + "size": 4, + "space": 0, + }, + "right": Object { + "borderType": "single", + "color": "auto", + "position": "right", + "size": 4, + "space": 0, + }, + "top": Object { + "borderType": "single", + "color": "auto", + "position": "top", + "size": 4, + "space": 0, + }, + }, + "indent": null, + "justification": "left", + "margins": Object { + "bottom": 55, + "left": 54, + "right": 55, + "top": 55, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + ], + }, +} +`; + exports[`writer should write cell shading 1`] = ` " diff --git a/docx-wasm/test/index.test.js b/docx-wasm/test/index.test.js index f5f15fe..acf97c9 100644 --- a/docx-wasm/test/index.test.js +++ b/docx-wasm/test/index.test.js @@ -15,6 +15,13 @@ describe("reader", () => { expect(json).toMatchSnapshot(); }); + test("should read tr2bl docx", () => { + const buffer = readFileSync("../fixtures/tr2bl/tr2bl.docx"); + const json = w.readDocx(buffer); + writeFileSync("../output/tr2bl.json", JSON.stringify(json, null, 2)); + expect(json).toMatchSnapshot(); + }); + test("should read table style docx", () => { const buffer = readFileSync("../fixtures/table_style/table_style.docx"); const json = w.readDocx(buffer); diff --git a/fixtures/tr2bl/tr2bl.docx b/fixtures/tr2bl/tr2bl.docx new file mode 100644 index 0000000000000000000000000000000000000000..38f1305d91768a775dd6d0125024b816950288e1 GIT binary patch literal 12578 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 literal 0 HcmV?d00001