@syncfusion/ej2-docx 0.0.0-stage → 35.1.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -2
- package/core.js +4 -0
- package/dist/ej2-docx.umd.min.js +2 -0
- package/dist/ej2-docx.umd.min.js.map +1 -0
- package/dist/es6/ej2-docx.es2015.js +66697 -0
- package/dist/es6/ej2-docx.es2015.js.map +1 -0
- package/dist/es6/ej2-docx.es5.js +77568 -0
- package/dist/es6/ej2-docx.es5.js.map +1 -0
- package/dist/global/ej2-docx.min.js +2 -0
- package/dist/global/ej2-docx.min.js.map +1 -0
- package/dist/global/index.d.ts +5 -0
- package/features.js +4 -0
- package/index.js +4 -0
- package/license +10 -0
- package/package.json +31 -4
- package/src/all.d.ts +50 -0
- package/src/all.js +147 -0
- package/src/core/compat/base64.d.ts +13 -0
- package/src/core/compat/base64.js +90 -0
- package/src/core/compat/object-compat.d.ts +30 -0
- package/src/core/compat/object-compat.js +40 -0
- package/src/core/compat/sha256.d.ts +9 -0
- package/src/core/compat/sha256.js +98 -0
- package/src/core/errors/docx-error.d.ts +89 -0
- package/src/core/errors/docx-error.js +138 -0
- package/src/core/errors/error-codes.d.ts +8 -0
- package/src/core/errors/error-codes.js +0 -0
- package/src/core/errors/index.d.ts +10 -0
- package/src/core/errors/index.js +9 -0
- package/src/core/index.d.ts +12 -0
- package/src/core/index.js +12 -0
- package/src/core/mc/alternate-content.d.ts +7 -0
- package/src/core/mc/alternate-content.js +67 -0
- package/src/core/mc/attributes.d.ts +24 -0
- package/src/core/mc/attributes.js +82 -0
- package/src/core/mc/index.d.ts +7 -0
- package/src/core/mc/index.js +5 -0
- package/src/core/mc/inspect.d.ts +16 -0
- package/src/core/mc/inspect.js +148 -0
- package/src/core/mc/namespaces.d.ts +4 -0
- package/src/core/mc/namespaces.js +4 -0
- package/src/core/mc/scope.d.ts +6 -0
- package/src/core/mc/scope.js +47 -0
- package/src/core/opc/content-types.d.ts +34 -0
- package/src/core/opc/content-types.js +162 -0
- package/src/core/opc/index.d.ts +8 -0
- package/src/core/opc/index.js +4 -0
- package/src/core/opc/package.d.ts +49 -0
- package/src/core/opc/package.js +324 -0
- package/src/core/opc/part-name.d.ts +47 -0
- package/src/core/opc/part-name.js +205 -0
- package/src/core/opc/relationships.d.ts +46 -0
- package/src/core/opc/relationships.js +212 -0
- package/src/core/preservation/index.d.ts +2 -0
- package/src/core/preservation/index.js +1 -0
- package/src/core/preservation/opaque-body.d.ts +16 -0
- package/src/core/preservation/opaque-body.js +69 -0
- package/src/core/registry/block-handlers.d.ts +30 -0
- package/src/core/registry/block-handlers.js +36 -0
- package/src/core/registry/create-defaults.d.ts +39 -0
- package/src/core/registry/create-defaults.js +42 -0
- package/src/core/registry/feature-registry.d.ts +20 -0
- package/src/core/registry/feature-registry.js +29 -0
- package/src/core/registry/index.d.ts +9 -0
- package/src/core/registry/index.js +8 -0
- package/src/core/registry/inline-handlers.d.ts +20 -0
- package/src/core/registry/inline-handlers.js +30 -0
- package/src/core/registry/materialize-handlers.d.ts +35 -0
- package/src/core/registry/materialize-handlers.js +75 -0
- package/src/core/registry/multi-part-handlers.d.ts +37 -0
- package/src/core/registry/multi-part-handlers.js +206 -0
- package/src/core/registry/package-part-handlers.d.ts +28 -0
- package/src/core/registry/package-part-handlers.js +190 -0
- package/src/core/registry/part-handlers.d.ts +24 -0
- package/src/core/registry/part-handlers.js +172 -0
- package/src/core/registry/run-leaf-handlers.d.ts +26 -0
- package/src/core/registry/run-leaf-handlers.js +72 -0
- package/src/core/security/limits.d.ts +40 -0
- package/src/core/security/limits.js +26 -0
- package/src/core/xml/index.d.ts +7 -0
- package/src/core/xml/index.js +3 -0
- package/src/core/xml/model.d.ts +66 -0
- package/src/core/xml/model.js +17 -0
- package/src/core/xml/parse.d.ts +12 -0
- package/src/core/xml/parse.js +382 -0
- package/src/core/xml/serialize.d.ts +6 -0
- package/src/core/xml/serialize.js +93 -0
- package/src/core/zip/crc32.d.ts +2 -0
- package/src/core/zip/crc32.js +25 -0
- package/src/core/zip/deflate.d.ts +6 -0
- package/src/core/zip/deflate.js +6 -0
- package/src/core/zip/index.d.ts +10 -0
- package/src/core/zip/index.js +4 -0
- package/src/core/zip/inflate-raw.d.ts +17 -0
- package/src/core/zip/inflate-raw.js +450 -0
- package/src/core/zip/names.d.ts +6 -0
- package/src/core/zip/names.js +52 -0
- package/src/core/zip/read.d.ts +8 -0
- package/src/core/zip/read.js +262 -0
- package/src/core/zip/write.d.ts +7 -0
- package/src/core/zip/write.js +189 -0
- package/src/core/zip/zip-entry.d.ts +4 -0
- package/src/core/zip/zip-entry.js +0 -0
- package/src/features/bibliography/index.d.ts +100 -0
- package/src/features/bibliography/index.js +290 -0
- package/src/features/bookmarks/index.d.ts +331 -0
- package/src/features/bookmarks/index.js +1009 -0
- package/src/features/comments/comment-extensions.d.ts +157 -0
- package/src/features/comments/comment-extensions.js +356 -0
- package/src/features/comments/index.d.ts +579 -0
- package/src/features/comments/index.js +1727 -0
- package/src/features/content-controls/index.d.ts +821 -0
- package/src/features/content-controls/index.js +2857 -0
- package/src/features/custom-xml/index.d.ts +236 -0
- package/src/features/custom-xml/index.js +661 -0
- package/src/features/document/alignment.d.ts +23 -0
- package/src/features/document/alignment.js +36 -0
- package/src/features/document/alt-chunk.d.ts +103 -0
- package/src/features/document/alt-chunk.js +221 -0
- package/src/features/document/assert-never.d.ts +1 -0
- package/src/features/document/assert-never.js +4 -0
- package/src/features/document/augmentations.d.ts +578 -0
- package/src/features/document/augmentations.js +0 -0
- package/src/features/document/body-always-on.d.ts +36 -0
- package/src/features/document/body-always-on.js +66 -0
- package/src/features/document/body-blocks.d.ts +7 -0
- package/src/features/document/body-blocks.js +78 -0
- package/src/features/document/body-item-adapters.d.ts +62 -0
- package/src/features/document/body-item-adapters.js +97 -0
- package/src/features/document/body-item-collection.d.ts +151 -0
- package/src/features/document/body-item-collection.js +440 -0
- package/src/features/document/body-item.d.ts +35 -0
- package/src/features/document/body-item.js +8 -0
- package/src/features/document/body.d.ts +150 -0
- package/src/features/document/body.js +263 -0
- package/src/features/document/character-format.d.ts +413 -0
- package/src/features/document/character-format.js +2054 -0
- package/src/features/document/color.d.ts +178 -0
- package/src/features/document/color.js +495 -0
- package/src/features/document/document.d.ts +410 -0
- package/src/features/document/document.js +1049 -0
- package/src/features/document/element-type.d.ts +68 -0
- package/src/features/document/element-type.js +133 -0
- package/src/features/document/entity-type.d.ts +92 -0
- package/src/features/document/entity-type.js +93 -0
- package/src/features/document/feature-block.d.ts +16 -0
- package/src/features/document/feature-block.js +0 -0
- package/src/features/document/feature-inline.d.ts +13 -0
- package/src/features/document/feature-inline.js +0 -0
- package/src/features/document/feature-multi-package-part.d.ts +19 -0
- package/src/features/document/feature-multi-package-part.js +8 -0
- package/src/features/document/feature-package-level-part.d.ts +18 -0
- package/src/features/document/feature-package-level-part.js +8 -0
- package/src/features/document/feature-package-part.d.ts +14 -0
- package/src/features/document/feature-package-part.js +0 -0
- package/src/features/document/feature-run-leaf.d.ts +9 -0
- package/src/features/document/feature-run-leaf.js +0 -0
- package/src/features/document/headers-footers.d.ts +206 -0
- package/src/features/document/headers-footers.js +384 -0
- package/src/features/document/index.d.ts +41 -0
- package/src/features/document/index.js +34 -0
- package/src/features/document/length.d.ts +152 -0
- package/src/features/document/length.js +245 -0
- package/src/features/document/load-options.d.ts +14 -0
- package/src/features/document/load-options.js +0 -0
- package/src/features/document/locale-ids.d.ts +227 -0
- package/src/features/document/locale-ids.js +485 -0
- package/src/features/document/on-off.d.ts +9 -0
- package/src/features/document/on-off.js +27 -0
- package/src/features/document/page-setup.d.ts +339 -0
- package/src/features/document/page-setup.js +244 -0
- package/src/features/document/paragraph-format.d.ts +880 -0
- package/src/features/document/paragraph-format.js +2807 -0
- package/src/features/document/paragraph-item-collection.d.ts +162 -0
- package/src/features/document/paragraph-item-collection.js +363 -0
- package/src/features/document/paragraph-item.d.ts +83 -0
- package/src/features/document/paragraph-item.js +103 -0
- package/src/features/document/paragraph.d.ts +435 -0
- package/src/features/document/paragraph.js +888 -0
- package/src/features/document/run.d.ts +1 -0
- package/src/features/document/run.js +768 -0
- package/src/features/document/section-partition-flatten.d.ts +124 -0
- package/src/features/document/section-partition-flatten.js +217 -0
- package/src/features/document/section-properties-model.d.ts +13 -0
- package/src/features/document/section-properties-model.js +0 -0
- package/src/features/document/section.d.ts +93 -0
- package/src/features/document/section.js +178 -0
- package/src/features/document/sections.d.ts +103 -0
- package/src/features/document/sections.js +217 -0
- package/src/features/document/sub-super-script.d.ts +23 -0
- package/src/features/document/sub-super-script.js +43 -0
- package/src/features/document/text-range.d.ts +445 -0
- package/src/features/document/text-range.js +1156 -0
- package/src/features/document/typed-body-collections.d.ts +162 -0
- package/src/features/document/typed-body-collections.js +371 -0
- package/src/features/document/underline-style.d.ts +38 -0
- package/src/features/document/underline-style.js +126 -0
- package/src/features/document/units.d.ts +8 -0
- package/src/features/document/units.js +7 -0
- package/src/features/document/wml.d.ts +16 -0
- package/src/features/document/wml.js +67 -0
- package/src/features/drawing/authoring.d.ts +27 -0
- package/src/features/drawing/authoring.js +271 -0
- package/src/features/drawing/body-pr.d.ts +271 -0
- package/src/features/drawing/body-pr.js +663 -0
- package/src/features/drawing/drawing-shape.d.ts +1192 -0
- package/src/features/drawing/drawing-shape.js +3239 -0
- package/src/features/drawing/encode-builders.d.ts +176 -0
- package/src/features/drawing/encode-builders.js +390 -0
- package/src/features/drawing/fill-format.d.ts +52 -0
- package/src/features/drawing/fill-format.js +124 -0
- package/src/features/drawing/host-codec.d.ts +632 -0
- package/src/features/drawing/host-codec.js +2595 -0
- package/src/features/drawing/index.d.ts +13 -0
- package/src/features/drawing/index.js +33 -0
- package/src/features/drawing/line-format.d.ts +76 -0
- package/src/features/drawing/line-format.js +343 -0
- package/src/features/drawing/parse-register.d.ts +50 -0
- package/src/features/drawing/parse-register.js +257 -0
- package/src/features/drawing/residual-utils.d.ts +47 -0
- package/src/features/drawing/residual-utils.js +290 -0
- package/src/features/drawing/shape-types.d.ts +433 -0
- package/src/features/drawing/shape-types.js +437 -0
- package/src/features/drawing/sp-pr.d.ts +396 -0
- package/src/features/drawing/sp-pr.js +610 -0
- package/src/features/drawing/text-frame.d.ts +90 -0
- package/src/features/drawing/text-frame.js +152 -0
- package/src/features/drawing/types.d.ts +352 -0
- package/src/features/drawing/types.js +60 -0
- package/src/features/drawing/wrap-format.d.ts +62 -0
- package/src/features/drawing/wrap-format.js +114 -0
- package/src/features/editable-ranges/index.d.ts +494 -0
- package/src/features/editable-ranges/index.js +1348 -0
- package/src/features/fields/index.d.ts +428 -0
- package/src/features/fields/index.js +2148 -0
- package/src/features/fields/paragraph-field.d.ts +187 -0
- package/src/features/fields/paragraph-field.js +692 -0
- package/src/features/font-table/font-substitution-table.d.ts +75 -0
- package/src/features/font-table/font-substitution-table.js +257 -0
- package/src/features/font-table/font-table-entry.d.ts +255 -0
- package/src/features/font-table/font-table-entry.js +823 -0
- package/src/features/font-table/font-table.d.ts +128 -0
- package/src/features/font-table/font-table.js +313 -0
- package/src/features/font-table/index.d.ts +27 -0
- package/src/features/font-table/index.js +48 -0
- package/src/features/glossary/index.d.ts +97 -0
- package/src/features/glossary/index.js +286 -0
- package/src/features/headers-footers/index.d.ts +506 -0
- package/src/features/headers-footers/index.js +1666 -0
- package/src/features/hyperlinks/index.d.ts +230 -0
- package/src/features/hyperlinks/index.js +685 -0
- package/src/features/images/caption-authoring-api.d.ts +33 -0
- package/src/features/images/caption-authoring-api.js +33 -0
- package/src/features/images/caption-enums.d.ts +52 -0
- package/src/features/images/caption-enums.js +141 -0
- package/src/features/images/caption-host.d.ts +10 -0
- package/src/features/images/caption-host.js +21 -0
- package/src/features/images/captions.d.ts +13 -0
- package/src/features/images/captions.js +142 -0
- package/src/features/images/host-codec.d.ts +103 -0
- package/src/features/images/host-codec.js +720 -0
- package/src/features/images/image-sniff.d.ts +21 -0
- package/src/features/images/image-sniff.js +71 -0
- package/src/features/images/index.d.ts +506 -0
- package/src/features/images/index.js +1429 -0
- package/src/features/images/layout-types.d.ts +232 -0
- package/src/features/images/layout-types.js +294 -0
- package/src/features/images/public-entry.d.ts +9 -0
- package/src/features/images/public-entry.js +9 -0
- package/src/features/index.d.ts +35 -0
- package/src/features/index.js +36 -0
- package/src/features/mail-merge/index.d.ts +113 -0
- package/src/features/mail-merge/index.js +315 -0
- package/src/features/notes/index.d.ts +573 -0
- package/src/features/notes/index.js +1725 -0
- package/src/features/numbering/abstract-numbering.d.ts +90 -0
- package/src/features/numbering/abstract-numbering.js +292 -0
- package/src/features/numbering/index.d.ts +182 -0
- package/src/features/numbering/index.js +668 -0
- package/src/features/numbering/list-format.d.ts +158 -0
- package/src/features/numbering/list-format.js +590 -0
- package/src/features/numbering/list-string.d.ts +7 -0
- package/src/features/numbering/list-string.js +423 -0
- package/src/features/numbering/list-style.d.ts +204 -0
- package/src/features/numbering/list-style.js +1084 -0
- package/src/features/numbering/numbering-instance.d.ts +101 -0
- package/src/features/numbering/numbering-instance.js +329 -0
- package/src/features/numbering/numbering-level.d.ts +118 -0
- package/src/features/numbering/numbering-level.js +501 -0
- package/src/features/numbering/picture-bullet.d.ts +34 -0
- package/src/features/numbering/picture-bullet.js +88 -0
- package/src/features/ole-object/catalog.d.ts +300 -0
- package/src/features/ole-object/catalog.js +908 -0
- package/src/features/ole-object/index.d.ts +526 -0
- package/src/features/ole-object/index.js +1421 -0
- package/src/features/ole-object/relationship.d.ts +27 -0
- package/src/features/ole-object/relationship.js +27 -0
- package/src/features/ole-object/typed-dom.d.ts +186 -0
- package/src/features/ole-object/typed-dom.js +595 -0
- package/src/features/properties/index.d.ts +205 -0
- package/src/features/properties/index.js +549 -0
- package/src/features/revisions/index.d.ts +204 -0
- package/src/features/revisions/index.js +695 -0
- package/src/features/sections/column-collection.d.ts +119 -0
- package/src/features/sections/column-collection.js +478 -0
- package/src/features/sections/column.d.ts +15 -0
- package/src/features/sections/column.js +37 -0
- package/src/features/sections/index.d.ts +91 -0
- package/src/features/sections/index.js +1096 -0
- package/src/features/sections/margins.d.ts +40 -0
- package/src/features/sections/margins.js +105 -0
- package/src/features/sections/page-number-style.d.ts +21 -0
- package/src/features/sections/page-number-style.js +62 -0
- package/src/features/sections/page-orientation.d.ts +10 -0
- package/src/features/sections/page-orientation.js +10 -0
- package/src/features/sections/page-setup.d.ts +435 -0
- package/src/features/sections/page-setup.js +1479 -0
- package/src/features/sections/page-size.d.ts +59 -0
- package/src/features/sections/page-size.js +68 -0
- package/src/features/sections/section-break-code.d.ts +27 -0
- package/src/features/sections/section-break-code.js +60 -0
- package/src/features/sections/section-document-association.d.ts +18 -0
- package/src/features/sections/section-document-association.js +31 -0
- package/src/features/sections/section-validation.d.ts +43 -0
- package/src/features/sections/section-validation.js +97 -0
- package/src/features/settings/attached-template.d.ts +35 -0
- package/src/features/settings/attached-template.js +98 -0
- package/src/features/settings/compat-settings.d.ts +216 -0
- package/src/features/settings/compat-settings.js +508 -0
- package/src/features/settings/document-background.d.ts +59 -0
- package/src/features/settings/document-background.js +131 -0
- package/src/features/settings/document-protection.d.ts +65 -0
- package/src/features/settings/document-protection.js +157 -0
- package/src/features/settings/document-settings-facades.d.ts +108 -0
- package/src/features/settings/document-settings-facades.js +312 -0
- package/src/features/settings/document-settings-values.d.ts +43 -0
- package/src/features/settings/document-settings-values.js +60 -0
- package/src/features/settings/footnote-properties.d.ts +211 -0
- package/src/features/settings/footnote-properties.js +591 -0
- package/src/features/settings/index.d.ts +356 -0
- package/src/features/settings/index.js +829 -0
- package/src/features/settings/settings-children.d.ts +151 -0
- package/src/features/settings/settings-children.js +505 -0
- package/src/features/settings/web-settings.d.ts +88 -0
- package/src/features/settings/web-settings.js +227 -0
- package/src/features/settings/zoom.d.ts +79 -0
- package/src/features/settings/zoom.js +147 -0
- package/src/features/styles/builtin-catalog.d.ts +159 -0
- package/src/features/styles/builtin-catalog.js +963 -0
- package/src/features/styles/builtin-resolver.d.ts +49 -0
- package/src/features/styles/builtin-resolver.js +165 -0
- package/src/features/styles/default-styles.d.ts +37 -0
- package/src/features/styles/default-styles.js +186 -0
- package/src/features/styles/default-theme.d.ts +13 -0
- package/src/features/styles/default-theme.js +13 -0
- package/src/features/styles/doc-defaults.d.ts +58 -0
- package/src/features/styles/doc-defaults.js +178 -0
- package/src/features/styles/formatting-resolver.d.ts +27 -0
- package/src/features/styles/formatting-resolver.js +72 -0
- package/src/features/styles/index.d.ts +256 -0
- package/src/features/styles/index.js +1325 -0
- package/src/features/styles/latent-styles.d.ts +68 -0
- package/src/features/styles/latent-styles.js +305 -0
- package/src/features/styles/paragraph-properties.d.ts +71 -0
- package/src/features/styles/paragraph-properties.js +237 -0
- package/src/features/styles/run-properties.d.ts +93 -0
- package/src/features/styles/run-properties.js +516 -0
- package/src/features/styles/style-base.d.ts +402 -0
- package/src/features/styles/style-base.js +1026 -0
- package/src/features/styles/style-collection.d.ts +264 -0
- package/src/features/styles/style-collection.js +714 -0
- package/src/features/styles/style-format-bridge.d.ts +64 -0
- package/src/features/styles/style-format-bridge.js +100 -0
- package/src/features/styles/style.d.ts +84 -0
- package/src/features/styles/style.js +375 -0
- package/src/features/styles/styles-with-effects.d.ts +71 -0
- package/src/features/styles/styles-with-effects.js +180 -0
- package/src/features/styles/table-style.d.ts +272 -0
- package/src/features/styles/table-style.js +1226 -0
- package/src/features/styles/theme.d.ts +126 -0
- package/src/features/styles/theme.js +377 -0
- package/src/features/tables/border-style-map.d.ts +24 -0
- package/src/features/tables/border-style-map.js +81 -0
- package/src/features/tables/borders.d.ts +126 -0
- package/src/features/tables/borders.js +527 -0
- package/src/features/tables/collections.d.ts +113 -0
- package/src/features/tables/collections.js +261 -0
- package/src/features/tables/format.d.ts +208 -0
- package/src/features/tables/format.js +716 -0
- package/src/features/tables/index.d.ts +597 -0
- package/src/features/tables/index.js +2386 -0
- package/src/features/tables/paddings.d.ts +41 -0
- package/src/features/tables/paddings.js +97 -0
- package/src/features/tables/tbl-pr-positioning.d.ts +27 -0
- package/src/features/tables/tbl-pr-positioning.js +178 -0
- package/src/features/tables/tbl-pr.d.ts +528 -0
- package/src/features/tables/tbl-pr.js +1208 -0
- package/src/features/tables/tc-pr.d.ts +168 -0
- package/src/features/tables/tc-pr.js +553 -0
- package/src/features/tables/tr-pr.d.ts +60 -0
- package/src/features/tables/tr-pr.js +215 -0
- package/src/features/watermark/detect.d.ts +76 -0
- package/src/features/watermark/detect.js +219 -0
- package/src/features/watermark/index.d.ts +28 -0
- package/src/features/watermark/index.js +91 -0
- package/src/features/watermark/logical-store.d.ts +29 -0
- package/src/features/watermark/logical-store.js +31 -0
- package/src/features/watermark/model.d.ts +285 -0
- package/src/features/watermark/model.js +597 -0
- package/src/features/watermark/parse.d.ts +84 -0
- package/src/features/watermark/parse.js +815 -0
- package/src/features/watermark/serialize.d.ts +98 -0
- package/src/features/watermark/serialize.js +1517 -0
- package/src/global.js +1 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +2 -0
|
@@ -0,0 +1,888 @@
|
|
|
1
|
+
var __values = (this && this.__values) || function (o) {
|
|
2
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
|
|
3
|
+
if (m) return m.call(o);
|
|
4
|
+
return {
|
|
5
|
+
next: function () {
|
|
6
|
+
if (o && i >= o.length) o = void 0;
|
|
7
|
+
return { value: o && o[i++], done: !o };
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
import { DetachedObjectError, DocxError } from '../../core/errors/docx-error';
|
|
12
|
+
import { tryParseFeatureInline, } from '../../core/registry/inline-handlers';
|
|
13
|
+
import { CharacterFormat, parseCharacterFormat, } from './character-format';
|
|
14
|
+
import { emptyParagraphFormatSnapshot, ParagraphFormat, parseParagraphFormat, } from './paragraph-format';
|
|
15
|
+
import { ParagraphItemCollection, } from './paragraph-item-collection';
|
|
16
|
+
import { Break, BreakClearType, BreakType, createStandaloneBreakItem, createStandaloneSymbolItem, createTextAndTabItems, FeatureInlineParagraphItem, FeatureRunParagraphItem, OpaqueParagraphItem, parseTextRangeGroup, serializeParagraphItems, Tab, TextRange, WireRunGroup, } from './text-range';
|
|
17
|
+
import { elementChildren, isWml, wValAttribute, wmlAttr, wmlElement } from './wml';
|
|
18
|
+
/**
|
|
19
|
+
* Factory for {@link Paragraph.listFormat} — registered by the numbering feature
|
|
20
|
+
* to avoid Vitest ESM-breaking extensionless CJS require of list-format.
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
var listFormatFactory;
|
|
24
|
+
/**
|
|
25
|
+
* @private Registers the ListFormat constructor bridge (called from numbering feature load).
|
|
26
|
+
*/
|
|
27
|
+
export function setListFormatFactory(factory) {
|
|
28
|
+
listFormatFactory = factory;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* @private Test-only reset.
|
|
32
|
+
*/
|
|
33
|
+
export function resetListFormatFactoryForTests() {
|
|
34
|
+
listFormatFactory = undefined;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* WordprocessingML paragraph (`w:p`).
|
|
38
|
+
*
|
|
39
|
+
* Paragraph properties live on {@link Paragraph.paragraphFormat} (`w:pPr`).
|
|
40
|
+
* Paragraph-mark character formatting lives on
|
|
41
|
+
* {@link Paragraph.breakCharacterFormat} (`w:pPr/w:rPr`). Text-range character
|
|
42
|
+
* formatting remains on {@link TextRange.characterFormat} (`w:r/w:rPr`).
|
|
43
|
+
*
|
|
44
|
+
* Items appear directly on {@link Paragraph.items} — there is no nested run
|
|
45
|
+
* collection. Physical `w:r` grouping is reconstructed on serialize.
|
|
46
|
+
*
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
var Paragraph = /** @class */ (function () {
|
|
50
|
+
/** @private */
|
|
51
|
+
function Paragraph(owner) {
|
|
52
|
+
this.owner = owner;
|
|
53
|
+
this.extraAttributes = [];
|
|
54
|
+
this.numPrExtra = [];
|
|
55
|
+
this.sectionBreakSectPrElement = undefined;
|
|
56
|
+
this.paragraphItems = new ParagraphItemCollection(this);
|
|
57
|
+
this.paragraphFormatField = undefined;
|
|
58
|
+
this.breakCharacterFormatField = undefined;
|
|
59
|
+
this.listFormatField = undefined;
|
|
60
|
+
}
|
|
61
|
+
Object.defineProperty(Paragraph.prototype, "paragraphFormat", {
|
|
62
|
+
/**
|
|
63
|
+
* The direct paragraph formatting (`w:pPr`) of this paragraph — the only
|
|
64
|
+
* public paragraph-formatting surface.
|
|
65
|
+
*
|
|
66
|
+
* A live view over the typed `w:pPr` state: every read/write goes to the
|
|
67
|
+
* same storage the parser fills and the serializer reads. Lazily created
|
|
68
|
+
* on first access and cached; never null.
|
|
69
|
+
*
|
|
70
|
+
* Mutating it validates attachment — writes on a detached paragraph throw
|
|
71
|
+
* {@link DetachedObjectError}.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* paragraph.paragraphFormat.beforeSpacing = 18;
|
|
76
|
+
* paragraph.paragraphFormat.lineSpacing = 10;
|
|
77
|
+
* paragraph.paragraphFormat.firstLineIndent = 10; // negative = hanging
|
|
78
|
+
* paragraph.paragraphFormat.backColor = 'D3D3D3';
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @public
|
|
82
|
+
*/
|
|
83
|
+
get: function () {
|
|
84
|
+
if (this.paragraphFormatField === undefined) {
|
|
85
|
+
this.paragraphFormatField = new ParagraphFormat(this);
|
|
86
|
+
}
|
|
87
|
+
return this.paragraphFormatField;
|
|
88
|
+
},
|
|
89
|
+
enumerable: true,
|
|
90
|
+
configurable: true
|
|
91
|
+
});
|
|
92
|
+
Object.defineProperty(Paragraph.prototype, "breakCharacterFormat", {
|
|
93
|
+
/**
|
|
94
|
+
* Character formatting of the paragraph mark (`w:pPr/w:rPr`).
|
|
95
|
+
*
|
|
96
|
+
* Reuses the same {@link CharacterFormat} type as {@link TextRange.characterFormat}.
|
|
97
|
+
* Lazily constructed; never null. Empty format does not emit an empty `w:rPr`.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* paragraph.breakCharacterFormat.bold = true;
|
|
102
|
+
* paragraph.breakCharacterFormat.italic = true;
|
|
103
|
+
* paragraph.breakCharacterFormat.fontSize = 14;
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* @public
|
|
107
|
+
*/
|
|
108
|
+
get: function () {
|
|
109
|
+
if (this.breakCharacterFormatField === undefined) {
|
|
110
|
+
this.breakCharacterFormatField = new CharacterFormat(this);
|
|
111
|
+
}
|
|
112
|
+
return this.breakCharacterFormatField;
|
|
113
|
+
},
|
|
114
|
+
enumerable: true,
|
|
115
|
+
configurable: true
|
|
116
|
+
});
|
|
117
|
+
Object.defineProperty(Paragraph.prototype, "listFormat", {
|
|
118
|
+
/**
|
|
119
|
+
* Paragraph list formatting (`w:numPr`).
|
|
120
|
+
*
|
|
121
|
+
* A live list-format interface for applying and modifying numbering and
|
|
122
|
+
* bullet formatting on this paragraph. Lazily created on first access
|
|
123
|
+
* and cached; never null.
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```ts
|
|
127
|
+
* paragraph.listFormat.applyDefBulletStyle();
|
|
128
|
+
* paragraph.listFormat.increaseIndentLevel();
|
|
129
|
+
* paragraph.listFormat.listId = 5;
|
|
130
|
+
* ```
|
|
131
|
+
*
|
|
132
|
+
* @public
|
|
133
|
+
*/
|
|
134
|
+
get: function () {
|
|
135
|
+
if (this.listFormatField === undefined) {
|
|
136
|
+
// Factory is registered by the numbering feature (avoids circular
|
|
137
|
+
// import and extensionless CJS require under Vitest).
|
|
138
|
+
if (listFormatFactory === undefined) {
|
|
139
|
+
throw new DocxError('feature/not-registered', 'ListFormat is unavailable; register the numbering feature before accessing paragraph.listFormat');
|
|
140
|
+
}
|
|
141
|
+
this.listFormatField = listFormatFactory(this);
|
|
142
|
+
}
|
|
143
|
+
return this.listFormatField;
|
|
144
|
+
},
|
|
145
|
+
enumerable: true,
|
|
146
|
+
configurable: true
|
|
147
|
+
});
|
|
148
|
+
/** @private ParagraphFormatHost — mutation notification + detachment guard. */
|
|
149
|
+
Paragraph.prototype.notifyParagraphFormatMutation = function () {
|
|
150
|
+
this.mutate();
|
|
151
|
+
};
|
|
152
|
+
/** @private CharacterFormatHost — mark rPr mutation notification. */
|
|
153
|
+
Paragraph.prototype.notifyCharacterFormatMutation = function () {
|
|
154
|
+
this.mutate();
|
|
155
|
+
};
|
|
156
|
+
/** @private */
|
|
157
|
+
Paragraph.prototype.detach = function () {
|
|
158
|
+
this.owner = undefined;
|
|
159
|
+
this.paragraphItems.detachAll();
|
|
160
|
+
};
|
|
161
|
+
/** @private */
|
|
162
|
+
Paragraph.prototype.attach = function (owner) {
|
|
163
|
+
this.owner = owner;
|
|
164
|
+
this.paragraphItems.reattachAll();
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* @private ParagraphItemOwner — gate item property mutation.
|
|
168
|
+
*/
|
|
169
|
+
Paragraph.prototype.assertAttachedItem = function (target) {
|
|
170
|
+
this.mutate();
|
|
171
|
+
if (!this.paragraphItems.containsIdentity(target)) {
|
|
172
|
+
throw new DetachedObjectError('This paragraph item is no longer in its paragraph');
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* @private Gate paragraph-level authoring.
|
|
177
|
+
*/
|
|
178
|
+
Paragraph.prototype.assertMutable = function () {
|
|
179
|
+
this.mutate();
|
|
180
|
+
};
|
|
181
|
+
Paragraph.prototype.mutate = function () {
|
|
182
|
+
if (this.owner === undefined) {
|
|
183
|
+
throw new DetachedObjectError('This paragraph is no longer in a document');
|
|
184
|
+
}
|
|
185
|
+
this.owner.assertAttachedParagraph(this);
|
|
186
|
+
};
|
|
187
|
+
/** @private */
|
|
188
|
+
Paragraph.prototype.owningDocument = function () {
|
|
189
|
+
if (this.owner === undefined) {
|
|
190
|
+
throw new DetachedObjectError('This paragraph is no longer in a document');
|
|
191
|
+
}
|
|
192
|
+
return this.owner.owningDocument();
|
|
193
|
+
};
|
|
194
|
+
Object.defineProperty(Paragraph.prototype, "styleId", {
|
|
195
|
+
/**
|
|
196
|
+
* Gets or sets the identifier of the paragraph style applied to this paragraph.
|
|
197
|
+
*
|
|
198
|
+
* If undefined, no paragraph style is applied and formatting comes from the
|
|
199
|
+
* document defaults. The identifier must name a style that exists in the
|
|
200
|
+
* document when the file is saved.
|
|
201
|
+
*
|
|
202
|
+
* @defaultValue No paragraph style when omitted (body text formatting).
|
|
203
|
+
*
|
|
204
|
+
* @public
|
|
205
|
+
*/
|
|
206
|
+
get: function () {
|
|
207
|
+
return this.styleIdValue;
|
|
208
|
+
},
|
|
209
|
+
set: function (value) {
|
|
210
|
+
this.mutate();
|
|
211
|
+
this.styleIdValue = value;
|
|
212
|
+
},
|
|
213
|
+
enumerable: true,
|
|
214
|
+
configurable: true
|
|
215
|
+
});
|
|
216
|
+
/**
|
|
217
|
+
* Applies a paragraph style by id or BuiltInStyle.
|
|
218
|
+
* Implementation is registered by the styles feature (writes resolved styleId only).
|
|
219
|
+
* @public
|
|
220
|
+
*/
|
|
221
|
+
Paragraph.prototype.applyStyle = function (_style) {
|
|
222
|
+
throw new Error('Styles feature is not loaded');
|
|
223
|
+
};
|
|
224
|
+
/**
|
|
225
|
+
* @private Optional CharacterFormatHost effective resolver (overwritten by styles feature).
|
|
226
|
+
*/
|
|
227
|
+
Paragraph.prototype.resolveEffectiveCharacterValue = function (_key) {
|
|
228
|
+
return undefined;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* @private Optional ParagraphFormatHost effective resolver (overwritten by styles feature).
|
|
232
|
+
*/
|
|
233
|
+
Paragraph.prototype.resolveEffectiveParagraphValue = function (_key) {
|
|
234
|
+
return undefined;
|
|
235
|
+
};
|
|
236
|
+
Object.defineProperty(Paragraph.prototype, "numId", {
|
|
237
|
+
/**
|
|
238
|
+
* @private
|
|
239
|
+
* Direct `w:numPr/w:numId/@w:val`. `undefined` means absent (not in a list). */
|
|
240
|
+
get: function () {
|
|
241
|
+
return this.numIdValue;
|
|
242
|
+
},
|
|
243
|
+
/**
|
|
244
|
+
* @private
|
|
245
|
+
* Direct `w:numPr/w:numId/@w:val`. `undefined` means absent (not in a list). */
|
|
246
|
+
set: function (value) {
|
|
247
|
+
this.mutate();
|
|
248
|
+
this.numIdValue = value;
|
|
249
|
+
},
|
|
250
|
+
enumerable: true,
|
|
251
|
+
configurable: true
|
|
252
|
+
});
|
|
253
|
+
Object.defineProperty(Paragraph.prototype, "listLevel", {
|
|
254
|
+
/**
|
|
255
|
+
* Zero-based list level (`w:ilvl`). Prefer {@link listFormat.listLevelNumber}.
|
|
256
|
+
*
|
|
257
|
+
* @private
|
|
258
|
+
*/
|
|
259
|
+
get: function () {
|
|
260
|
+
return this.listLevelValue;
|
|
261
|
+
},
|
|
262
|
+
/**
|
|
263
|
+
* @private
|
|
264
|
+
*/
|
|
265
|
+
set: function (value) {
|
|
266
|
+
this.mutate();
|
|
267
|
+
this.listLevelValue = value;
|
|
268
|
+
},
|
|
269
|
+
enumerable: true,
|
|
270
|
+
configurable: true
|
|
271
|
+
});
|
|
272
|
+
/**
|
|
273
|
+
* @private
|
|
274
|
+
* Conditional table-style membership on `w:pPr/w:cnfStyle`.
|
|
275
|
+
*/
|
|
276
|
+
Paragraph.prototype.getConditionalFormatting = function () {
|
|
277
|
+
return this.paragraphFormat.readCnfStyle();
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* @private
|
|
281
|
+
* Set or clear conditional table-style membership on this paragraph.
|
|
282
|
+
* Does not call {@link mutate} beyond ParagraphFormat's write path so
|
|
283
|
+
* detached table rebuilds during calculation can still write masks.
|
|
284
|
+
*/
|
|
285
|
+
Paragraph.prototype.setConditionalFormatting = function (state) {
|
|
286
|
+
this.paragraphFormat.writeCnfStyle(state);
|
|
287
|
+
};
|
|
288
|
+
Object.defineProperty(Paragraph.prototype, "isInCell", {
|
|
289
|
+
/**
|
|
290
|
+
* True when this paragraph’s nearest body owner is a table cell
|
|
291
|
+
* (including nested table cells). False for body, header/footer, text box,
|
|
292
|
+
* footnote, endnote, or detached paragraphs.
|
|
293
|
+
*
|
|
294
|
+
* @public
|
|
295
|
+
*/
|
|
296
|
+
get: function () {
|
|
297
|
+
var owner = this.owner;
|
|
298
|
+
return owner !== undefined && owner.bodyOwnerKind === 'tableCell';
|
|
299
|
+
},
|
|
300
|
+
enumerable: true,
|
|
301
|
+
configurable: true
|
|
302
|
+
});
|
|
303
|
+
/** @private Paragraph section-break `w:pPr/w:sectPr`, when present. */
|
|
304
|
+
Paragraph.prototype.sectionBreakSectPr = function () {
|
|
305
|
+
return this.sectionBreakSectPrElement;
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* @private
|
|
309
|
+
* Replace paragraph section-break `w:sectPr`.
|
|
310
|
+
*
|
|
311
|
+
* Load/partition/flatten may dual-hold before the paragraph is attached to a
|
|
312
|
+
* body (parse uses a detached context; save may append an empty terminator).
|
|
313
|
+
* When already attached, still assert ownership via {@link mutate}.
|
|
314
|
+
*/
|
|
315
|
+
Paragraph.prototype.replaceSectionBreakSectPr = function (value) {
|
|
316
|
+
if (this.owner !== undefined) {
|
|
317
|
+
this.mutate();
|
|
318
|
+
}
|
|
319
|
+
this.sectionBreakSectPrElement = value;
|
|
320
|
+
if (value !== undefined) {
|
|
321
|
+
this.sectionBreakPropertiesModelValue = undefined;
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
/**
|
|
325
|
+
* @private
|
|
326
|
+
* Live paragraph section-break properties model (sections feature), if any.
|
|
327
|
+
*/
|
|
328
|
+
Paragraph.prototype.sectionBreakPropertiesModel = function () {
|
|
329
|
+
return this.sectionBreakPropertiesModelValue;
|
|
330
|
+
};
|
|
331
|
+
/**
|
|
332
|
+
* @private
|
|
333
|
+
* Attach or clear the live paragraph section-break properties model.
|
|
334
|
+
* When set, clears preserved `w:sectPr` XML so the model is the sole source of truth.
|
|
335
|
+
*
|
|
336
|
+
* Same attach rules as {@link replaceSectionBreakSectPr}: dual-hold is allowed
|
|
337
|
+
* before body ownership is established (TASK-8075 partition/flatten).
|
|
338
|
+
*/
|
|
339
|
+
Paragraph.prototype.replaceSectionBreakPropertiesModel = function (value) {
|
|
340
|
+
if (this.owner !== undefined) {
|
|
341
|
+
this.mutate();
|
|
342
|
+
}
|
|
343
|
+
this.sectionBreakPropertiesModelValue = value;
|
|
344
|
+
if (value !== undefined) {
|
|
345
|
+
this.sectionBreakSectPrElement = undefined;
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
Object.defineProperty(Paragraph.prototype, "items", {
|
|
349
|
+
/**
|
|
350
|
+
* Ordered paragraph items (text ranges, breaks, tabs, symbols, feature
|
|
351
|
+
* content, opaque markup) in document order.
|
|
352
|
+
*
|
|
353
|
+
* Stable collection identity for the life of the paragraph. Physical `w:r`
|
|
354
|
+
* grouping is reconstructed on serialize via shared wire groups.
|
|
355
|
+
*
|
|
356
|
+
* @public
|
|
357
|
+
*/
|
|
358
|
+
get: function () {
|
|
359
|
+
return this.paragraphItems;
|
|
360
|
+
},
|
|
361
|
+
enumerable: true,
|
|
362
|
+
configurable: true
|
|
363
|
+
});
|
|
364
|
+
Object.defineProperty(Paragraph.prototype, "text", {
|
|
365
|
+
/**
|
|
366
|
+
* Gets the concatenated plain text of modeled text ranges and tab characters
|
|
367
|
+
* in document order.
|
|
368
|
+
*
|
|
369
|
+
* Opaque and feature inlines (for example hyperlinks owned by feature modules)
|
|
370
|
+
* are skipped. Field instruction text is also skipped; only field result text
|
|
371
|
+
* is included. {@link Tab} items contribute U+0009 so plain-text views match
|
|
372
|
+
* run-level tab characters authored via {@link appendText} or loaded from
|
|
373
|
+
* `w:tab`.
|
|
374
|
+
*
|
|
375
|
+
* @public
|
|
376
|
+
*/
|
|
377
|
+
get: function () {
|
|
378
|
+
var parts = [];
|
|
379
|
+
var items = this.paragraphItems.snapshot();
|
|
380
|
+
var fieldStack = [];
|
|
381
|
+
for (var i = 0; i < items.length; i += 1) {
|
|
382
|
+
var item = items[i];
|
|
383
|
+
// Check if this is a Field (begin marker)
|
|
384
|
+
if (item !== undefined && typeof item === 'object' && 'fieldType' in item && !('fieldMarkType' in item)) {
|
|
385
|
+
fieldStack.push({ phase: 'instruction' });
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
// Check if this is a FieldMark (separator or end)
|
|
389
|
+
if (item !== undefined && typeof item === 'object' && 'fieldMarkType' in item) {
|
|
390
|
+
var mark = item;
|
|
391
|
+
if (mark.fieldMarkType === 'separate') {
|
|
392
|
+
if (fieldStack.length > 0) {
|
|
393
|
+
var top_1 = fieldStack[fieldStack.length - 1];
|
|
394
|
+
if (top_1 !== undefined) {
|
|
395
|
+
top_1.phase = 'result';
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
continue;
|
|
399
|
+
}
|
|
400
|
+
else if (mark.fieldMarkType === 'end') {
|
|
401
|
+
if (fieldStack.length > 0) {
|
|
402
|
+
fieldStack.pop();
|
|
403
|
+
}
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
// Include text / tabs only if not in field instruction phase
|
|
408
|
+
var inResult = fieldStack.length === 0 || fieldStack[fieldStack.length - 1].phase === 'result';
|
|
409
|
+
if (!inResult) {
|
|
410
|
+
continue;
|
|
411
|
+
}
|
|
412
|
+
if (item instanceof TextRange) {
|
|
413
|
+
parts.push(item.text);
|
|
414
|
+
}
|
|
415
|
+
else if (item instanceof Tab) {
|
|
416
|
+
parts.push('\t');
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
return parts.join('');
|
|
420
|
+
},
|
|
421
|
+
enumerable: true,
|
|
422
|
+
configurable: true
|
|
423
|
+
});
|
|
424
|
+
/**
|
|
425
|
+
* Appends an empty text range to the end of this paragraph and returns it.
|
|
426
|
+
*
|
|
427
|
+
* @returns The newly created empty text range.
|
|
428
|
+
* @throws DetachedObjectError if this paragraph is no longer attached to a document.
|
|
429
|
+
*
|
|
430
|
+
* @public
|
|
431
|
+
*/
|
|
432
|
+
Paragraph.prototype.appendTextRange = function () {
|
|
433
|
+
this.mutate();
|
|
434
|
+
var textRange = new TextRange();
|
|
435
|
+
this.paragraphItems.add(textRange);
|
|
436
|
+
return textRange;
|
|
437
|
+
};
|
|
438
|
+
/**
|
|
439
|
+
* Append text as one or more paragraph items, optionally with common character
|
|
440
|
+
* formatting. U+0009 (tab) characters become dedicated {@link Tab} items
|
|
441
|
+
* (`w:r/w:tab`) interleaved with {@link TextRange} segments that share one
|
|
442
|
+
* wire run group, matching Word / OOXML run-inner content.
|
|
443
|
+
*
|
|
444
|
+
* @returns The first {@link TextRange} created for non-empty text segments, or
|
|
445
|
+
* an empty trailing {@link TextRange} when `text` is empty or tab-only (so the
|
|
446
|
+
* return type stays {@link TextRange}).
|
|
447
|
+
*
|
|
448
|
+
* @public
|
|
449
|
+
*/
|
|
450
|
+
Paragraph.prototype.appendText = function (text, options) {
|
|
451
|
+
this.mutate();
|
|
452
|
+
var group = new WireRunGroup();
|
|
453
|
+
var items = createTextAndTabItems(text, group);
|
|
454
|
+
var firstTextRange;
|
|
455
|
+
for (var i = 0; i < items.length; i += 1) {
|
|
456
|
+
var item = items[i];
|
|
457
|
+
if (item === undefined) {
|
|
458
|
+
continue;
|
|
459
|
+
}
|
|
460
|
+
this.paragraphItems.add(item);
|
|
461
|
+
if (firstTextRange === undefined && item instanceof TextRange) {
|
|
462
|
+
firstTextRange = item;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
if (firstTextRange === undefined) {
|
|
466
|
+
// Tab-only input: keep API contract with an empty range on the same wire group.
|
|
467
|
+
firstTextRange = new TextRange(undefined, group);
|
|
468
|
+
this.paragraphItems.add(firstTextRange);
|
|
469
|
+
}
|
|
470
|
+
// Shared WireRunGroup CF — any member's characterFormat is the run's rPr.
|
|
471
|
+
if (options != null && options.bold !== undefined) {
|
|
472
|
+
firstTextRange.characterFormat.bold = options.bold;
|
|
473
|
+
}
|
|
474
|
+
if (options != null && options.italic !== undefined) {
|
|
475
|
+
firstTextRange.characterFormat.italic = options.italic;
|
|
476
|
+
}
|
|
477
|
+
if (options != null && options.fontSize !== undefined) {
|
|
478
|
+
firstTextRange.characterFormat.fontSize = options.fontSize;
|
|
479
|
+
}
|
|
480
|
+
return firstTextRange;
|
|
481
|
+
};
|
|
482
|
+
/**
|
|
483
|
+
* Append a break (`w:br`) as a direct paragraph item.
|
|
484
|
+
*
|
|
485
|
+
* Always run content on the wire (`w:r/w:br`), never a paragraph-level
|
|
486
|
+
* sibling of `w:r`. Serialization rebuilds the physical run.
|
|
487
|
+
*
|
|
488
|
+
* @param type - Break kind ({@link BreakType}).
|
|
489
|
+
* @param options - Optional text-wrapping clear (Line / TextWrappingBreak only).
|
|
490
|
+
* @returns The break item.
|
|
491
|
+
* @throws DocxError `content/invalid-break` if `clear` is set on Page or Column.
|
|
492
|
+
*
|
|
493
|
+
* @example
|
|
494
|
+
* ```ts
|
|
495
|
+
* paragraph.appendBreak(BreakType.PageBreak);
|
|
496
|
+
* paragraph.appendBreak(BreakType.LineBreak, { clear: BreakClearType.All });
|
|
497
|
+
* ```
|
|
498
|
+
*
|
|
499
|
+
* @public
|
|
500
|
+
*/
|
|
501
|
+
Paragraph.prototype.appendBreak = function (type, options) {
|
|
502
|
+
this.mutate();
|
|
503
|
+
var clear = options == null ? undefined : options.clear;
|
|
504
|
+
var item = createStandaloneBreakItem(type, clear != null ? clear : BreakClearType.None);
|
|
505
|
+
this.paragraphItems.add(item);
|
|
506
|
+
return item;
|
|
507
|
+
};
|
|
508
|
+
/**
|
|
509
|
+
* Append a symbol character (`w:sym`) as a direct paragraph item.
|
|
510
|
+
*
|
|
511
|
+
* Always run content on the wire (`w:r/w:sym`, ECMA-376-1 §17.3.3.30).
|
|
512
|
+
*
|
|
513
|
+
* @param font - Symbol font name (`w:font`), for example `"Wingdings"`.
|
|
514
|
+
* @param char - `ST_ShortHexNumber` hex digits for `w:char` (four hex digits, e.g. `"F0FC"`).
|
|
515
|
+
* @returns The symbol paragraph item that was created.
|
|
516
|
+
*
|
|
517
|
+
* @example
|
|
518
|
+
* ```ts
|
|
519
|
+
* paragraph.appendText('checkmark: ');
|
|
520
|
+
* paragraph.appendSymbol('Wingdings', 'F0FC');
|
|
521
|
+
* ```
|
|
522
|
+
*
|
|
523
|
+
* @public
|
|
524
|
+
*/
|
|
525
|
+
Paragraph.prototype.appendSymbol = function (font, char) {
|
|
526
|
+
this.mutate();
|
|
527
|
+
var item = createStandaloneSymbolItem(font, char);
|
|
528
|
+
this.paragraphItems.add(item);
|
|
529
|
+
return item;
|
|
530
|
+
};
|
|
531
|
+
/**
|
|
532
|
+
* Appends a feature-owned run-level item (for example an image) as a direct
|
|
533
|
+
* paragraph child. Serializes inside a physical `w:r` via its wire group.
|
|
534
|
+
*
|
|
535
|
+
* @private
|
|
536
|
+
*/
|
|
537
|
+
Paragraph.prototype.appendFeatureRunItem = function (featureId, value) {
|
|
538
|
+
this.mutate();
|
|
539
|
+
var item = new FeatureRunParagraphItem(featureId, value, new WireRunGroup());
|
|
540
|
+
this.paragraphItems.add(item);
|
|
541
|
+
return item;
|
|
542
|
+
};
|
|
543
|
+
/**
|
|
544
|
+
* Appends a feature-owned inline sibling (for example `w:hyperlink`).
|
|
545
|
+
*
|
|
546
|
+
* @private
|
|
547
|
+
*/
|
|
548
|
+
Paragraph.prototype.appendFeatureInline = function (featureId, value) {
|
|
549
|
+
this.mutate();
|
|
550
|
+
var item = new FeatureInlineParagraphItem(featureId, value);
|
|
551
|
+
this.paragraphItems.add(item);
|
|
552
|
+
return item;
|
|
553
|
+
};
|
|
554
|
+
/**
|
|
555
|
+
* Inserts a feature-owned inline at a raw content index (`0…items.count` inclusive).
|
|
556
|
+
*
|
|
557
|
+
* @private
|
|
558
|
+
*/
|
|
559
|
+
Paragraph.prototype.insertFeatureInlineAt = function (index, featureId, value) {
|
|
560
|
+
this.mutate();
|
|
561
|
+
var item = new FeatureInlineParagraphItem(featureId, value);
|
|
562
|
+
this.paragraphItems.insert(index, item);
|
|
563
|
+
return item;
|
|
564
|
+
};
|
|
565
|
+
/** @private Remove a feature inline from this paragraph. */
|
|
566
|
+
Paragraph.prototype.removeFeatureInline = function (value) {
|
|
567
|
+
this.mutate();
|
|
568
|
+
var items = this.paragraphItems.snapshot();
|
|
569
|
+
for (var i = 0; i < items.length; i += 1) {
|
|
570
|
+
var item = items[i];
|
|
571
|
+
if (item instanceof FeatureInlineParagraphItem && item.value === value) {
|
|
572
|
+
this.paragraphItems.removeAt(i);
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
throw new DetachedObjectError('This inline is no longer in its paragraph');
|
|
577
|
+
};
|
|
578
|
+
/**
|
|
579
|
+
* @private Remove a feature run-level item (image, drawing residual, …).
|
|
580
|
+
*/
|
|
581
|
+
Paragraph.prototype.removeFeatureRunItem = function (value) {
|
|
582
|
+
this.mutate();
|
|
583
|
+
var items = this.paragraphItems.snapshot();
|
|
584
|
+
for (var i = 0; i < items.length; i += 1) {
|
|
585
|
+
var item = items[i];
|
|
586
|
+
if (item instanceof FeatureRunParagraphItem && item.value === value) {
|
|
587
|
+
this.paragraphItems.removeAt(i);
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
throw new DetachedObjectError('This item is no longer in its paragraph');
|
|
592
|
+
};
|
|
593
|
+
/**
|
|
594
|
+
* @private Append a pre-built paragraph item (feature modules).
|
|
595
|
+
*/
|
|
596
|
+
Paragraph.prototype.appendParagraphItem = function (item) {
|
|
597
|
+
this.mutate();
|
|
598
|
+
this.paragraphItems.add(item);
|
|
599
|
+
};
|
|
600
|
+
/**
|
|
601
|
+
* @private Remove a text range by identity.
|
|
602
|
+
*/
|
|
603
|
+
Paragraph.prototype.removeTextRange = function (run) {
|
|
604
|
+
this.mutate();
|
|
605
|
+
var at = this.paragraphItems.indexOfIdentity(run);
|
|
606
|
+
if (at === -1) {
|
|
607
|
+
throw new DetachedObjectError('This text range is no longer in its paragraph');
|
|
608
|
+
}
|
|
609
|
+
this.paragraphItems.removeAt(at);
|
|
610
|
+
};
|
|
611
|
+
/**
|
|
612
|
+
* Advanced hatch: `w:p` tree. Unstable; prefer semantic properties.
|
|
613
|
+
*/
|
|
614
|
+
Paragraph.prototype.toOpenXml = function () {
|
|
615
|
+
return serializeParagraph(this);
|
|
616
|
+
};
|
|
617
|
+
/** @private */
|
|
618
|
+
Paragraph.fromXml = function (el, owner) {
|
|
619
|
+
return parseParagraph(el, owner);
|
|
620
|
+
};
|
|
621
|
+
/** @private */
|
|
622
|
+
Paragraph.prototype.hydrate = function (data) {
|
|
623
|
+
this.extraAttributes = data.extraAttributes;
|
|
624
|
+
this.styleIdValue = data.styleIdValue;
|
|
625
|
+
this.numIdValue = data.numIdValue;
|
|
626
|
+
this.listLevelValue = data.listLevelValue;
|
|
627
|
+
this.numPrExtra = data.numPrExtra;
|
|
628
|
+
this.sectionBreakSectPrElement = data.sectionBreakSectPr;
|
|
629
|
+
// Detach any prior owner on incoming items so collection hydrate can attach.
|
|
630
|
+
for (var i = 0; i < data.items.length; i += 1) {
|
|
631
|
+
var incoming = data.items[i];
|
|
632
|
+
if (incoming.owner !== undefined) {
|
|
633
|
+
incoming.detach();
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
this.paragraphItems.hydrate(data.items);
|
|
637
|
+
// TASK-9020-C: formatting state hydrates from parseParagraphFormat snapshot.
|
|
638
|
+
this.paragraphFormat.hydrate(data.paragraphFormat);
|
|
639
|
+
if (data.breakCharacterFormat !== undefined) {
|
|
640
|
+
this.breakCharacterFormat.hydrate(data.breakCharacterFormat);
|
|
641
|
+
}
|
|
642
|
+
};
|
|
643
|
+
/** @private */
|
|
644
|
+
Paragraph.prototype.snapshot = function () {
|
|
645
|
+
return {
|
|
646
|
+
extraAttributes: this.extraAttributes,
|
|
647
|
+
styleIdValue: this.styleIdValue,
|
|
648
|
+
numIdValue: this.numIdValue,
|
|
649
|
+
listLevelValue: this.listLevelValue,
|
|
650
|
+
numPrExtra: this.numPrExtra,
|
|
651
|
+
// Prefer the live sections-feature model when present (clears preserved XML).
|
|
652
|
+
sectionBreakSectPr: this.sectionBreakPropertiesModelValue !== undefined
|
|
653
|
+
? this.sectionBreakPropertiesModelValue.toOpenXml()
|
|
654
|
+
: this.sectionBreakSectPrElement,
|
|
655
|
+
items: this.paragraphItems.snapshot(),
|
|
656
|
+
paragraphFormat: this.paragraphFormat.snapshot(),
|
|
657
|
+
breakCharacterFormat: this.breakCharacterFormat.snapshot(),
|
|
658
|
+
};
|
|
659
|
+
};
|
|
660
|
+
return Paragraph;
|
|
661
|
+
}());
|
|
662
|
+
export { Paragraph };
|
|
663
|
+
function parseDecimalVal(raw) {
|
|
664
|
+
if (raw === undefined || !/^-?\d+$/.test(raw)) {
|
|
665
|
+
return undefined;
|
|
666
|
+
}
|
|
667
|
+
return Number.parseInt(raw, 10);
|
|
668
|
+
}
|
|
669
|
+
/**
|
|
670
|
+
* Parse `w:p`. Paragraph-owned: `pStyle` / `numPr` / `rPr` / `sectPr` / content.
|
|
671
|
+
* Format-owned `w:pPr` children go through {@link parseParagraphFormat}.
|
|
672
|
+
*/
|
|
673
|
+
function parseParagraph(el, owner) {
|
|
674
|
+
var e_1, _a, e_2, _b, e_3, _c;
|
|
675
|
+
var paragraph = new Paragraph(owner);
|
|
676
|
+
var styleIdValue;
|
|
677
|
+
var numIdValue;
|
|
678
|
+
var listLevelValue;
|
|
679
|
+
var sectionBreakSectPr;
|
|
680
|
+
var numPrExtra = [];
|
|
681
|
+
var items = [];
|
|
682
|
+
var formatSnap;
|
|
683
|
+
var breakCfSnap;
|
|
684
|
+
try {
|
|
685
|
+
for (var _d = __values(elementChildren(el)), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
686
|
+
var child = _e.value;
|
|
687
|
+
if (isWml(child, 'pPr')) {
|
|
688
|
+
try {
|
|
689
|
+
// Paragraph-owned children first, then format codec for the rest.
|
|
690
|
+
for (var _f = __values(elementChildren(child)), _g = _f.next(); !_g.done; _g = _f.next()) {
|
|
691
|
+
var prop = _g.value;
|
|
692
|
+
if (isWml(prop, 'pStyle')) {
|
|
693
|
+
styleIdValue = wValAttribute(prop);
|
|
694
|
+
continue;
|
|
695
|
+
}
|
|
696
|
+
if (isWml(prop, 'numPr')) {
|
|
697
|
+
try {
|
|
698
|
+
for (var _h = __values(elementChildren(prop)), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
699
|
+
var numChild = _j.value;
|
|
700
|
+
if (isWml(numChild, 'ilvl')) {
|
|
701
|
+
var parsed = parseDecimalVal(wValAttribute(numChild));
|
|
702
|
+
if (parsed === undefined) {
|
|
703
|
+
numPrExtra.push(numChild);
|
|
704
|
+
}
|
|
705
|
+
else {
|
|
706
|
+
listLevelValue = parsed;
|
|
707
|
+
}
|
|
708
|
+
continue;
|
|
709
|
+
}
|
|
710
|
+
if (isWml(numChild, 'numId')) {
|
|
711
|
+
var parsed = parseDecimalVal(wValAttribute(numChild));
|
|
712
|
+
if (parsed === undefined) {
|
|
713
|
+
numPrExtra.push(numChild);
|
|
714
|
+
}
|
|
715
|
+
else {
|
|
716
|
+
numIdValue = parsed;
|
|
717
|
+
}
|
|
718
|
+
continue;
|
|
719
|
+
}
|
|
720
|
+
numPrExtra.push(numChild);
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
724
|
+
finally {
|
|
725
|
+
try {
|
|
726
|
+
if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
|
|
727
|
+
}
|
|
728
|
+
finally { if (e_3) throw e_3.error; }
|
|
729
|
+
}
|
|
730
|
+
continue;
|
|
731
|
+
}
|
|
732
|
+
if (isWml(prop, 'rPr')) {
|
|
733
|
+
// Paragraph-mark character formatting (`w:pPr/w:rPr`).
|
|
734
|
+
breakCfSnap = parseCharacterFormat(prop);
|
|
735
|
+
continue;
|
|
736
|
+
}
|
|
737
|
+
if (isWml(prop, 'sectPr')) {
|
|
738
|
+
sectionBreakSectPr = prop;
|
|
739
|
+
continue;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
744
|
+
finally {
|
|
745
|
+
try {
|
|
746
|
+
if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
|
|
747
|
+
}
|
|
748
|
+
finally { if (e_2) throw e_2.error; }
|
|
749
|
+
}
|
|
750
|
+
// TASK-9020-C: format-owned pPr interpretation (skips pStyle/numPr/rPr/sectPr).
|
|
751
|
+
formatSnap = parseParagraphFormat(child);
|
|
752
|
+
continue;
|
|
753
|
+
}
|
|
754
|
+
if (isWml(child, 'r')) {
|
|
755
|
+
// Owner is applied by paragraph.hydrate → collection.hydrate.
|
|
756
|
+
var groupItems = parseTextRangeGroup(child, undefined);
|
|
757
|
+
for (var gi = 0; gi < groupItems.length; gi += 1) {
|
|
758
|
+
items.push(groupItems[gi]);
|
|
759
|
+
}
|
|
760
|
+
continue;
|
|
761
|
+
}
|
|
762
|
+
var feature = tryParseFeatureInline(child);
|
|
763
|
+
if (feature !== undefined) {
|
|
764
|
+
items.push(new FeatureInlineParagraphItem(feature.featureId, feature.value));
|
|
765
|
+
continue;
|
|
766
|
+
}
|
|
767
|
+
items.push(new OpaqueParagraphItem(child));
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
771
|
+
finally {
|
|
772
|
+
try {
|
|
773
|
+
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
774
|
+
}
|
|
775
|
+
finally { if (e_1) throw e_1.error; }
|
|
776
|
+
}
|
|
777
|
+
paragraph.hydrate({
|
|
778
|
+
extraAttributes: el.attributes,
|
|
779
|
+
styleIdValue: styleIdValue,
|
|
780
|
+
numIdValue: numIdValue,
|
|
781
|
+
listLevelValue: listLevelValue,
|
|
782
|
+
numPrExtra: numPrExtra,
|
|
783
|
+
sectionBreakSectPr: sectionBreakSectPr,
|
|
784
|
+
items: items,
|
|
785
|
+
paragraphFormat: formatSnap !== undefined
|
|
786
|
+
? formatSnap
|
|
787
|
+
: emptyParagraphFormatSnapshot(),
|
|
788
|
+
breakCharacterFormat: breakCfSnap,
|
|
789
|
+
});
|
|
790
|
+
return paragraph;
|
|
791
|
+
}
|
|
792
|
+
/**
|
|
793
|
+
* Serialize a paragraph. `w:pPr` children after `pStyle` come from
|
|
794
|
+
* {@link ParagraphFormat.buildPPrChildren} (CT_PPr order; TASK-9020-D).
|
|
795
|
+
* Mark `w:rPr` is injected from {@link Paragraph.breakCharacterFormat}.
|
|
796
|
+
*/
|
|
797
|
+
export function serializeParagraph(paragraph) {
|
|
798
|
+
var snap = paragraph.snapshot();
|
|
799
|
+
var pPrChildren = [];
|
|
800
|
+
if (snap.styleIdValue !== undefined) {
|
|
801
|
+
pPrChildren.push(wmlElement('pStyle', { attributes: [wmlAttr('val', snap.styleIdValue)] }));
|
|
802
|
+
}
|
|
803
|
+
var numPr;
|
|
804
|
+
if (snap.numIdValue !== undefined ||
|
|
805
|
+
snap.listLevelValue !== undefined ||
|
|
806
|
+
snap.numPrExtra.length > 0) {
|
|
807
|
+
var numPrChildren = [];
|
|
808
|
+
if (snap.listLevelValue !== undefined) {
|
|
809
|
+
numPrChildren.push(wmlElement('ilvl', { attributes: [wmlAttr('val', String(snap.listLevelValue))] }));
|
|
810
|
+
}
|
|
811
|
+
if (snap.numIdValue !== undefined) {
|
|
812
|
+
numPrChildren.push(wmlElement('numId', { attributes: [wmlAttr('val', String(snap.numIdValue))] }));
|
|
813
|
+
}
|
|
814
|
+
for (var i = 0; i < snap.numPrExtra.length; i++) {
|
|
815
|
+
numPrChildren.push(snap.numPrExtra[i]);
|
|
816
|
+
}
|
|
817
|
+
numPr = wmlElement('numPr', { children: numPrChildren });
|
|
818
|
+
}
|
|
819
|
+
// Match TextRange: omit empty mark rPr (no empty <w:rPr/>).
|
|
820
|
+
var rPrChildList = paragraph.breakCharacterFormat.buildRPrChildren();
|
|
821
|
+
var rPr;
|
|
822
|
+
if (rPrChildList.length > 0) {
|
|
823
|
+
rPr = wmlElement('rPr', { children: rPrChildList });
|
|
824
|
+
}
|
|
825
|
+
var formatChildren = paragraph.paragraphFormat.buildPPrChildren({
|
|
826
|
+
numPr: numPr,
|
|
827
|
+
rPr: rPr,
|
|
828
|
+
sectPr: snap.sectionBreakSectPr,
|
|
829
|
+
});
|
|
830
|
+
for (var i = 0; i < formatChildren.length; i++) {
|
|
831
|
+
pPrChildren.push(formatChildren[i]);
|
|
832
|
+
}
|
|
833
|
+
var children = [];
|
|
834
|
+
if (pPrChildren.length > 0) {
|
|
835
|
+
children.push(wmlElement('pPr', { children: pPrChildren }));
|
|
836
|
+
}
|
|
837
|
+
var itemXml = serializeParagraphItems(snap.items);
|
|
838
|
+
for (var i = 0; i < itemXml.length; i++) {
|
|
839
|
+
children.push(itemXml[i]);
|
|
840
|
+
}
|
|
841
|
+
// DocIO pageBreakAfter has no ECMA pPr child. Body serializers emit a
|
|
842
|
+
// following page-break-only paragraph via shouldEmitPageBreakAfterParagraph /
|
|
843
|
+
// createPageBreakAfterParagraphElement — do not append w:br into this w:p.
|
|
844
|
+
// Citation: docs/specs/paragraph-formatting.md (deliberate omissions); ECMA-376-1 §17.3.3.1 w:br.
|
|
845
|
+
return wmlElement('p', { attributes: snap.extraAttributes, children: children });
|
|
846
|
+
}
|
|
847
|
+
/**
|
|
848
|
+
* True when {@link ParagraphFormat.pageBreakAfter} should emit a dedicated
|
|
849
|
+
* following paragraph containing only `w:br/@w:type="page"`.
|
|
850
|
+
*
|
|
851
|
+
* Skips when the content paragraph already contains a page-break item so
|
|
852
|
+
* authoring does not duplicate breaks.
|
|
853
|
+
*
|
|
854
|
+
* @private
|
|
855
|
+
*/
|
|
856
|
+
export function shouldEmitPageBreakAfterParagraph(paragraph) {
|
|
857
|
+
var snap = paragraph.snapshot();
|
|
858
|
+
if (snap.paragraphFormat.pageBreakAfterValue !== true) {
|
|
859
|
+
return false;
|
|
860
|
+
}
|
|
861
|
+
return !paragraphItemsIncludePageBreak(snap.items);
|
|
862
|
+
}
|
|
863
|
+
/**
|
|
864
|
+
* Build a standalone `w:p` whose only content is a page break run.
|
|
865
|
+
* Used after a content paragraph when {@link shouldEmitPageBreakAfterParagraph}.
|
|
866
|
+
*
|
|
867
|
+
* @private
|
|
868
|
+
*/
|
|
869
|
+
export function createPageBreakAfterParagraphElement() {
|
|
870
|
+
var pageBreakItem = createStandaloneBreakItem(BreakType.PageBreak);
|
|
871
|
+
var breakXml = serializeParagraphItems([pageBreakItem]);
|
|
872
|
+
return wmlElement('p', { children: breakXml });
|
|
873
|
+
}
|
|
874
|
+
/**
|
|
875
|
+
* True when paragraph items already contain a page break (`w:br/@w:type="page"`).
|
|
876
|
+
* @private
|
|
877
|
+
*/
|
|
878
|
+
function paragraphItemsIncludePageBreak(items) {
|
|
879
|
+
for (var i = 0; i < items.length; i++) {
|
|
880
|
+
var item = items[i];
|
|
881
|
+
if (item instanceof Break && item.breakType === BreakType.PageBreak) {
|
|
882
|
+
return true;
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
return false;
|
|
886
|
+
}
|
|
887
|
+
// Re-export BodyItem for historical import sites (paragraph was the old home).
|
|
888
|
+
// TS 3.3.1: no export type { ... } from (3.8+). Use import() type queries.
|