From c857def7ef4a113e7b47f38f1dc1ec0b17974ec8 Mon Sep 17 00:00:00 2001 From: bokuweb Date: Fri, 14 Jan 2022 11:53:39 +0900 Subject: [PATCH] Support ppr (#406) * fix * fix * 0.0.222 --- docx-wasm/js/json/paragraph.ts | 27 +- docx-wasm/package.json | 2 +- .../test/__snapshots__/index.test.js.snap | 1008 +++++++++++++++++ docx-wasm/test/index.test.js | 8 + .../paragraph_property_change.docx | Bin 0 -> 13627 bytes 5 files changed, 1033 insertions(+), 12 deletions(-) create mode 100644 fixtures/paragraph_property_change/paragraph_property_change.docx diff --git a/docx-wasm/js/json/paragraph.ts b/docx-wasm/js/json/paragraph.ts index 14c6f0a..95c46a2 100644 --- a/docx-wasm/js/json/paragraph.ts +++ b/docx-wasm/js/json/paragraph.ts @@ -19,17 +19,22 @@ export type NumberingPropertyJSON = { export type ParagraphPropertyJSON = { runProperty: RunPropertyJSON; - style: string | null; - numberingProperty: NumberingPropertyJSON | null; - alignment: "left" | "center" | "right" | "justified" | "both"; - indent: IndentJSON | null; - lineSpacing: LineSpacingJSON | null; - divId: string | null; - keepNext: boolean; - keepLines: boolean; - pageBreakBefore: boolean; - windowControl: boolean; - outlineLvl: number | null; + style?: string | null; + numberingProperty?: NumberingPropertyJSON | null; + alignment?: "left" | "center" | "right" | "justified" | "both"; + indent?: IndentJSON | null; + lineSpacing?: LineSpacingJSON | null; + divId?: string | null; + keepNext?: boolean; + keepLines?: boolean; + pageBreakBefore?: boolean; + windowControl?: boolean; + outlineLvl?: number | null; + paragraphPropertyChange?: { + author: string; + date: string; + property: ParagraphPropertyJSON; + }; }; export type ParagraphJSON = { diff --git a/docx-wasm/package.json b/docx-wasm/package.json index d241b2b..08282d3 100644 --- a/docx-wasm/package.json +++ b/docx-wasm/package.json @@ -1,6 +1,6 @@ { "name": "docx-wasm", - "version": "0.0.221", + "version": "0.0.222", "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 cd7758a..f8d51cd 100644 --- a/docx-wasm/test/__snapshots__/index.test.js.snap +++ b/docx-wasm/test/__snapshots__/index.test.js.snap @@ -12913,6 +12913,1014 @@ Object { } `; +exports[`reader should read paragraph property change docx 1`] = ` +Object { + "comments": Object { + "comments": Array [], + }, + "commentsExtended": Object { + "children": Array [], + }, + "contentType": Object { + "custom_xml_count": 1, + "footer_count": 0, + "header_count": 0, + "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", + "/docProps/custom.xml": "application/vnd.openxmlformats-officedocument.custom-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/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", + }, + "web_extension_count": 1, + }, + "customItemProps": Array [], + "customItemRels": Array [], + "customItems": Array [], + "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, + }, + }, + "custom": Object { + "properties": Object {}, + }, + }, + "document": Object { + "children": Array [ + Object { + "data": Object { + "children": Array [ + Object { + "data": Object { + "children": Array [ + Object { + "data": Object { + "preserveSpace": true, + "text": "秘密情報の", + }, + "type": "text", + }, + ], + "runProperty": Object {}, + }, + "type": "run", + }, + Object { + "data": Object { + "author": "bokuweb", + "children": Array [ + Object { + "data": Object { + "children": Array [ + Object { + "data": Object { + "preserveSpace": true, + "text": "対", + }, + "type": "deleteText", + }, + ], + "runProperty": Object {}, + }, + "type": "run", + }, + ], + "date": "2022-01-07T17:20:00Z", + }, + "type": "delete", + }, + Object { + "data": Object { + "children": Array [ + Object { + "data": Object { + "preserveSpace": true, + "text": "象と", + }, + "type": "text", + }, + ], + "runProperty": Object {}, + }, + "type": "run", + }, + Object { + "data": Object { + "children": Array [ + Object { + "data": Object { + "preserveSpace": true, + "text": "す", + }, + "type": "text", + }, + ], + "runProperty": Object {}, + }, + "type": "run", + }, + ], + "hasNumbering": false, + "id": "6F2921C6", + "property": Object { + "alignment": "left", + "indent": Object { + "end": null, + "firstLineChars": null, + "hangingChars": null, + "specialIndent": null, + "start": 728, + "startChars": null, + }, + "paragraphPropertyChange": Object { + "author": "unnamed", + "date": "1970-01-01T00:00:00Z", + "property": Object { + "alignment": "left", + "indent": Object { + "end": null, + "firstLineChars": null, + "hangingChars": null, + "specialIndent": Object { + "type": "hanging", + "val": 728, + }, + "start": 728, + "startChars": null, + }, + "runProperty": Object {}, + "tabs": Array [], + }, + }, + "runProperty": Object { + "fonts": Object {}, + }, + "tabs": Array [], + }, + }, + "type": "paragraph", + }, + ], + "hasNumbering": false, + "sectionProperty": Object { + "columns": 425, + "docGrid": Object { + "charSpace": null, + "gridType": "lines", + "linePitch": 360, + }, + "pageMargin": Object { + "bottom": 1701, + "footer": 992, + "gutter": 0, + "header": 851, + "left": 1701, + "right": 1701, + "top": 1985, + }, + "pageSize": Object { + "h": 16840, + "orient": null, + "w": 11900, + }, + "titlePg": false, + }, + }, + "documentRels": Object { + "customXmlCount": 0, + "footerCount": 0, + "hasComments": false, + "hasNumberings": false, + "headerCount": 0, + "imageIds": Array [], + }, + "fontTable": Object {}, + "media": Array [], + "numberings": Object { + "abstractNums": Array [ + Object { + "id": 0, + "levels": Array [ + Object { + "format": "decimalFullWidth", + "jc": "left", + "level": 0, + "levelRestart": null, + "paragraphProperty": Object { + "indent": Object { + "end": 0, + "firstLineChars": null, + "hangingChars": null, + "specialIndent": Object { + "type": "hanging", + "val": 728, + }, + "start": 728, + "startChars": null, + }, + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 1, + "suffix": "nothing", + "text": "第%1条 ", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 1, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 2, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 3, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 4, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 5, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 6, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 7, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 8, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + ], + "numStyleLink": null, + "styleLink": null, + }, + Object { + "id": 1, + "levels": Array [ + Object { + "format": "decimal", + "jc": "left", + "level": 0, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimalFullWidth", + "jc": "left", + "level": 1, + "levelRestart": null, + "paragraphProperty": Object { + "indent": Object { + "end": 0, + "firstLineChars": null, + "hangingChars": null, + "specialIndent": Object { + "type": "hanging", + "val": 243, + }, + "start": 972, + "startChars": null, + }, + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 1, + "suffix": "space", + "text": "(%2)", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 2, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 3, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 4, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 5, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 6, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 7, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + Object { + "format": "decimal", + "jc": "left", + "level": 8, + "levelRestart": null, + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "pstyle": null, + "runProperty": Object {}, + "start": 0, + "suffix": "tab", + "text": "", + }, + ], + "numStyleLink": null, + "styleLink": null, + }, + ], + "numberings": Array [ + Object { + "abstractNumId": 0, + "id": 1, + "levelOverrides": Array [], + }, + Object { + "abstractNumId": 1, + "id": 2, + "levelOverrides": 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", + ], + Array [ + "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties", + "rId4", + "docProps/custom.xml", + ], + ], + }, + "settings": Object { + "defaultTabStop": 840, + "docId": "D69B5D79-AA39-424E-9D58-EF8E35CE7D20", + "docVars": Array [], + "evenAndOddHeaders": false, + "zoom": 100, + }, + "styles": Object { + "docDefaults": Object { + "runPropertyDefault": Object { + "runProperty": Object { + "fonts": Object { + "ascii_theme": "minorHAnsi", + "cs_theme": "minorBidi", + "east_asia_theme": "minorEastAsia", + "hi_ansi_theme": "minorHAnsi", + }, + "sz": 21, + "szCs": 21, + }, + }, + }, + "styles": Array [ + Object { + "basedOn": null, + "name": "Normal", + "paragraphProperty": Object { + "alignment": "both", + "runProperty": Object {}, + "tabs": Array [], + }, + "runProperty": Object {}, + "styleId": "a", + "styleType": "paragraph", + "tableCellProperty": Object { + "borders": null, + "gridSpan": null, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": null, + }, + "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", + "layout": null, + "margins": Object { + "bottom": Object { + "val": 0, + "widthType": "DXA", + }, + "left": Object { + "val": 55, + "widthType": "DXA", + }, + "right": Object { + "val": 55, + "widthType": "DXA", + }, + "top": Object { + "val": 0, + "widthType": "DXA", + }, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + Object { + "basedOn": null, + "name": "Default Paragraph Font", + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "runProperty": Object {}, + "styleId": "a0", + "styleType": "character", + "tableCellProperty": Object { + "borders": null, + "gridSpan": null, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": null, + }, + "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", + "layout": null, + "margins": Object { + "bottom": Object { + "val": 0, + "widthType": "DXA", + }, + "left": Object { + "val": 55, + "widthType": "DXA", + }, + "right": Object { + "val": 55, + "widthType": "DXA", + }, + "top": Object { + "val": 0, + "widthType": "DXA", + }, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + Object { + "basedOn": null, + "name": "Normal Table", + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "runProperty": Object {}, + "styleId": "a1", + "styleType": "table", + "tableCellProperty": Object { + "borders": null, + "gridSpan": null, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": null, + }, + "tableProperty": Object { + "borders": Object { + "bottom": null, + "insideH": null, + "insideV": null, + "left": null, + "right": null, + "top": null, + }, + "indent": null, + "justification": "left", + "layout": null, + "margins": Object { + "bottom": Object { + "val": 0, + "widthType": "DXA", + }, + "left": Object { + "val": 55, + "widthType": "DXA", + }, + "right": Object { + "val": 55, + "widthType": "DXA", + }, + "top": Object { + "val": 0, + "widthType": "DXA", + }, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + Object { + "basedOn": null, + "name": "No List", + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "runProperty": Object {}, + "styleId": "a2", + "styleType": "numbering", + "tableCellProperty": Object { + "borders": null, + "gridSpan": null, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": null, + }, + "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", + "layout": null, + "margins": Object { + "bottom": Object { + "val": 0, + "widthType": "DXA", + }, + "left": Object { + "val": 55, + "widthType": "DXA", + }, + "right": Object { + "val": 55, + "widthType": "DXA", + }, + "top": Object { + "val": 0, + "widthType": "DXA", + }, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + Object { + "basedOn": null, + "name": "Revision", + "paragraphProperty": Object { + "runProperty": Object {}, + "tabs": Array [], + }, + "runProperty": Object {}, + "styleId": "a3", + "styleType": "paragraph", + "tableCellProperty": Object { + "borders": null, + "gridSpan": null, + "shading": null, + "textDirection": null, + "verticalAlign": null, + "verticalMerge": null, + "width": null, + }, + "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", + "layout": null, + "margins": Object { + "bottom": Object { + "val": 0, + "widthType": "DXA", + }, + "left": Object { + "val": 55, + "widthType": "DXA", + }, + "right": Object { + "val": 55, + "widthType": "DXA", + }, + "top": Object { + "val": 0, + "widthType": "DXA", + }, + }, + "style": null, + "width": Object { + "width": 0, + "widthType": "Auto", + }, + }, + }, + ], + }, + "taskpanes": null, + "taskpanesRels": Object { + "rels": Array [], + }, + "webExtensions": Array [], + "webSettings": Object { + "divs": Array [], + }, +} +`; + exports[`reader should read strike docx 1`] = ` Object { "comments": Object { diff --git a/docx-wasm/test/index.test.js b/docx-wasm/test/index.test.js index 8a3ca8d..d6fbb7c 100644 --- a/docx-wasm/test/index.test.js +++ b/docx-wasm/test/index.test.js @@ -98,6 +98,14 @@ describe("reader", () => { const json = w.readDocx(buffer); expect(json).toMatchSnapshot(); }); + + test("should read paragraph property change docx", () => { + const buffer = readFileSync( + "../fixtures/paragraph_property_change/paragraph_property_change.docx" + ); + const json = w.readDocx(buffer); + expect(json).toMatchSnapshot(); + }); }); describe("writer", () => { diff --git a/fixtures/paragraph_property_change/paragraph_property_change.docx b/fixtures/paragraph_property_change/paragraph_property_change.docx new file mode 100644 index 0000000000000000000000000000000000000000..51ea47224f8adde9ab4068635cdcebf04eb0fd05 GIT binary patch literal 13627 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 literal 0 HcmV?d00001