@stll/folio-core 0.46.0 → 0.47.1
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/dist/ai-edits/apply.d.ts +17 -1
- package/dist/ai-edits/apply.js +31 -27
- package/dist/ai-edits/headless.d.ts +9 -2
- package/dist/ai-edits/headless.js +5 -3
- package/dist/ai-edits/read.d.ts +1 -0
- package/dist/ai-edits/read.js +1 -0
- package/dist/ai-edits/snapshot.js +32 -27
- package/dist/ai-edits/table-cell-mutations.js +15 -7
- package/dist/ai-edits/table-geometry.js +21 -18
- package/dist/ai-edits/table-template.js +2 -2
- package/dist/compare/compare.js +2 -1
- package/dist/compare/content-alignment.js +192 -46
- package/dist/compare/content-types.d.ts +8 -2
- package/dist/compare/content.js +2 -11
- package/dist/compare/plan.js +7 -4
- package/dist/compare/section-boundary-properties.js +1 -2
- package/dist/content-controls/checkboxDisplay.d.ts +8 -2
- package/dist/content-controls/checkboxDisplay.js +11 -5
- package/dist/content-controls/mutateContentControls.js +41 -42
- package/dist/controller/layoutPipeline.js +8 -3
- package/dist/display-list/build/buildDisplayList.js +7 -7
- package/dist/display-list/build/imagePrimitives.d.ts +4 -4
- package/dist/display-list/build/imagePrimitives.js +38 -20
- package/dist/display-list/build/pageBorderPrimitives.js +2 -1
- package/dist/display-list/build/paragraphPrimitives.js +93 -13
- package/dist/display-list/build/previewPrimitives.d.ts +10 -0
- package/dist/display-list/build/previewPrimitives.js +89 -0
- package/dist/display-list/build/strokes.d.ts +177 -8
- package/dist/display-list/build/strokes.js +167 -47
- package/dist/display-list/build/tablePrimitives.js +4 -2
- package/dist/display-list/build/textBoxPrimitives.js +6 -4
- package/dist/display-list/build/textDecorations.d.ts +15 -1
- package/dist/display-list/build/textDecorations.js +15 -1
- package/dist/display-list/dom/renderDisplayListToDom.js +1 -19
- package/dist/display-list/primitives.d.ts +13 -2
- package/dist/display-list/primitives.js +36 -1
- package/dist/document-operations.d.ts +9 -2
- package/dist/document-operations.js +5 -3
- package/dist/docx/attributeRemainder.d.ts +34 -1
- package/dist/docx/attributeRemainder.js +49 -3
- package/dist/docx/blockContentParser.d.ts +2 -0
- package/dist/docx/blockContentParser.js +39 -67
- package/dist/docx/blockPlainText.js +3 -1
- package/dist/docx/borderParser.js +26 -11
- package/dist/docx/builtInStyles.d.ts +8 -16
- package/dist/docx/builtInStyles.js +54 -17
- package/dist/docx/commentAnchorIndex.js +1 -1
- package/dist/docx/commentParser.js +3 -3
- package/dist/docx/commentRangeIntegrity.js +1 -1
- package/dist/docx/commentRangeJoin.js +1 -1
- package/dist/docx/commentReferenceNormalization.js +3 -2
- package/dist/docx/commentReplyMarkers.js +1 -1
- package/dist/docx/compatibility.js +56 -42
- package/dist/docx/containerChildren.d.ts +110 -13
- package/dist/docx/containerChildren.gen.d.ts +16 -1
- package/dist/docx/containerChildren.gen.js +18 -1
- package/dist/docx/containerChildren.js +63 -13
- package/dist/docx/diagramPreview.d.ts +14 -2
- package/dist/docx/diagramPreview.js +81 -169
- package/dist/docx/documentParser.js +4 -1
- package/dist/docx/drawingAnchor.d.ts +87 -0
- package/dist/docx/drawingAnchor.js +201 -0
- package/dist/docx/drawingUtils.d.ts +43 -38
- package/dist/docx/drawingUtils.js +205 -118
- package/dist/docx/fontTableParser.js +102 -41
- package/dist/docx/footnoteParser.js +10 -6
- package/dist/docx/groupDrawingParser.js +4 -3
- package/dist/docx/headerFooterReferenceNormalization.js +1 -1
- package/dist/docx/hyperlinkParser.d.ts +45 -7
- package/dist/docx/hyperlinkParser.js +126 -57
- package/dist/docx/imageParser.js +127 -107
- package/dist/docx/index.d.ts +2 -1
- package/dist/docx/index.js +2 -1
- package/dist/docx/inlineContentRemovals.d.ts +28 -0
- package/dist/docx/inlineContentRemovals.js +46 -0
- package/dist/docx/inlineWrapperContent.d.ts +84 -3
- package/dist/docx/inlineWrapperContent.js +85 -4
- package/dist/docx/inlineWrapperParser.d.ts +11 -0
- package/dist/docx/inlineWrapperParser.js +60 -0
- package/dist/docx/nonVisualDrawingProps.d.ts +5 -13
- package/dist/docx/normalizeBaseDirection.js +4 -2
- package/dist/docx/numberingParser.d.ts +25 -2
- package/dist/docx/numberingParser.js +264 -361
- package/dist/docx/numberingReference.d.ts +9 -16
- package/dist/docx/numberingReference.js +17 -16
- package/dist/docx/numberingReferenceNormalization.js +7 -7
- package/dist/docx/ooxmlCounterFormatter.d.ts +1 -1
- package/dist/docx/ooxmlCounterFormatter.js +4 -1
- package/dist/docx/paraIdAttribute.d.ts +91 -1
- package/dist/docx/paraIdAttribute.js +79 -1
- package/dist/docx/paragraphParser.d.ts +9 -24
- package/dist/docx/paragraphParser.js +212 -396
- package/dist/docx/paragraphProperties.d.ts +23 -0
- package/dist/docx/paragraphProperties.js +279 -0
- package/dist/docx/paragraphPropertySource.js +2 -0
- package/dist/docx/paragraphTextBoxEnrichment.d.ts +2 -1
- package/dist/docx/paragraphTextBoxEnrichment.js +14 -7
- package/dist/docx/paragraphTraversal.d.ts +14 -10
- package/dist/docx/paragraphTraversal.js +47 -49
- package/dist/docx/parseWarningMessage.js +3 -0
- package/dist/docx/parserEnums.d.ts +6 -8
- package/dist/docx/parserEnums.js +4 -6
- package/dist/docx/preservedRunContent.js +16 -6
- package/dist/docx/previewBudget.d.ts +44 -23
- package/dist/docx/previewBudget.js +61 -30
- package/dist/docx/propertyElementAttributes.d.ts +178 -0
- package/dist/docx/propertyElementAttributes.js +114 -0
- package/dist/docx/renderedPageBreakNormalization.js +2 -2
- package/dist/docx/rezip.d.ts +28 -2
- package/dist/docx/rezip.js +78 -9
- package/dist/docx/runConsolidator.d.ts +42 -2
- package/dist/docx/runConsolidator.js +60 -6
- package/dist/docx/runParser.d.ts +54 -18
- package/dist/docx/runParser.js +379 -295
- package/dist/docx/runPayload.d.ts +5 -0
- package/dist/docx/runPayload.js +4 -0
- package/dist/docx/sdtProperties.d.ts +39 -5
- package/dist/docx/sdtProperties.js +205 -84
- package/dist/docx/sdtPropertiesPatch.d.ts +5 -9
- package/dist/docx/sdtPropertiesPatch.js +68 -112
- package/dist/docx/sectionParser.d.ts +1 -2
- package/dist/docx/sectionParser.js +236 -240
- package/dist/docx/selectiveSave.js +3 -2
- package/dist/docx/selectiveXmlPatch.d.ts +21 -2
- package/dist/docx/selectiveXmlPatch.js +195 -99
- package/dist/docx/serializer/blockSdtSerializer.js +2 -96
- package/dist/docx/serializer/borderSerializer.d.ts +5 -5
- package/dist/docx/serializer/borderSerializer.js +10 -8
- package/dist/docx/serializer/documentSerializer.js +3 -0
- package/dist/docx/serializer/fontTableSerializer.js +31 -3
- package/dist/docx/serializer/headerFooterSerializer.js +3 -0
- package/dist/docx/serializer/markupRangeAttributes.d.ts +9 -1
- package/dist/docx/serializer/markupRangeAttributes.js +9 -1
- package/dist/docx/serializer/noteSerializer.js +3 -0
- package/dist/docx/serializer/numberingSerializer.d.ts +1 -6
- package/dist/docx/serializer/numberingSerializer.js +81 -79
- package/dist/docx/serializer/paragraphSerializer.d.ts +1 -9
- package/dist/docx/serializer/paragraphSerializer.js +88 -188
- package/dist/docx/serializer/runSerializer.d.ts +1 -5
- package/dist/docx/serializer/runSerializer.js +109 -59
- package/dist/docx/serializer/sdtPropertiesSerializer.d.ts +26 -0
- package/dist/docx/serializer/sdtPropertiesSerializer.js +111 -0
- package/dist/docx/serializer/sectionPropertiesSerializer.js +34 -45
- package/dist/docx/serializer/settingsSerializer.js +6 -4
- package/dist/docx/serializer/stylesSerializer.js +8 -11
- package/dist/docx/serializer/tableSerializer.js +268 -100
- package/dist/docx/serializer/textFormattingSerializer.d.ts +28 -4
- package/dist/docx/serializer/textFormattingSerializer.js +111 -101
- package/dist/docx/serializer/xmlUtils.d.ts +1 -1
- package/dist/docx/serializer/xmlUtils.js +1 -1
- package/dist/docx/server/createBilingualDocument.js +18 -16
- package/dist/docx/server/migrateYjsAttrSchema.js +3 -3
- package/dist/docx/settingsParser.js +7 -4
- package/dist/docx/shadingParser.d.ts +2 -1
- package/dist/docx/shadingParser.js +43 -7
- package/dist/docx/shapeParser.js +8 -3
- package/dist/docx/strictNames.d.ts +11 -0
- package/dist/docx/strictNames.gen.d.ts +45 -0
- package/dist/docx/strictNames.gen.js +50 -0
- package/dist/docx/strictNames.js +43 -0
- package/dist/docx/strictValueEncodings.gen.js +133 -131
- package/dist/docx/styleParser.js +17 -349
- package/dist/docx/tableParser.d.ts +10 -1
- package/dist/docx/tableParser.js +505 -181
- package/dist/docx/textBoxParser.d.ts +3 -1
- package/dist/docx/textBoxParser.js +18 -8
- package/dist/docx/themeColorAttribute.d.ts +13 -0
- package/dist/docx/themeColorAttribute.js +24 -0
- package/dist/docx/trackedMoveRangeNormalization.js +2 -1
- package/dist/docx/vmlImageParser.d.ts +13 -4
- package/dist/docx/vmlImageParser.js +74 -31
- package/dist/docx/vmlPreview.js +2 -2
- package/dist/docx/wrapPolygon.d.ts +30 -0
- package/dist/docx/wrapPolygon.js +70 -0
- package/dist/docx/xmlParser.d.ts +14 -1
- package/dist/docx/xmlParser.js +18 -2
- package/dist/fonts/embeddedFonts.js +3 -3
- package/dist/headless-layout.js +2 -0
- package/dist/i18n/messages/catalogs.gen.d.ts +68 -0
- package/dist/i18n/messages/catalogs.gen.js +102 -34
- package/dist/i18n/messages/messages.gen.d.ts +4 -0
- package/dist/internal/headlessRevisionResolution.js +9 -0
- package/dist/internal/pageBreakRunSourceDescendantIndex.js +3 -1
- package/dist/internal/paragraphFormattingSerialization.d.ts +20 -9
- package/dist/internal/paragraphFormattingSerialization.js +118 -83
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +1 -0
- package/dist/layout-bridge/convert/footnoteLayout.js +1 -0
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +1 -0
- package/dist/layout-bridge/convert/headerFooterLayout.js +2 -0
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +17 -12
- package/dist/layout-bridge/convert/toFlowBlocks.js +177 -101
- package/dist/layout-engine/index.d.ts +2 -2
- package/dist/layout-engine/index.js +53 -17
- package/dist/layout-engine/measure/measureBlocks.d.ts +3 -0
- package/dist/layout-engine/measure/measureBlocks.js +6 -10
- package/dist/layout-engine/measure/tableCellGrid.js +2 -1
- package/dist/layout-engine/measure/tableFragmentBorderGeometry.js +2 -1
- package/dist/layout-engine/measure/tableInlinePlacement.js +2 -5
- package/dist/layout-engine/paragraphSequence.js +3 -2
- package/dist/layout-engine/renderedBreakReconciliation.js +2 -1
- package/dist/layout-engine/section-breaks.d.ts +49 -2
- package/dist/layout-engine/section-breaks.js +55 -4
- package/dist/layout-engine/types.d.ts +47 -17
- package/dist/layout-engine/types.js +16 -1
- package/dist/layout-painter/borderStroke.d.ts +18 -4
- package/dist/layout-painter/renderPage.js +6 -4
- package/dist/layout-painter/renderParagraph.d.ts +2 -1
- package/dist/layout-painter/renderParagraph.js +13 -26
- package/dist/layout-painter/renderTable.d.ts +4 -1
- package/dist/layout-painter/renderTable.js +22 -22
- package/dist/layout-painter/renderTextBox.js +5 -3
- package/dist/markdown/renderBlock.js +3 -1
- package/dist/markdown/renderRuns.js +7 -2
- package/dist/markdown/renderTable.js +2 -1
- package/dist/model.d.ts +3 -3
- package/dist/model.js +2 -2
- package/dist/paged-layout/sectionBlockWidths.d.ts +3 -0
- package/dist/paged-layout/sectionBlockWidths.js +26 -4
- package/dist/prosemirror/attrs/index.d.ts +22 -4
- package/dist/prosemirror/attrs/index.js +498 -60
- package/dist/prosemirror/bookmarkBoundaryAttrs.d.ts +9 -1
- package/dist/prosemirror/bookmarkBoundaryAttrs.js +22 -3
- package/dist/prosemirror/commands/comments.js +68 -53
- package/dist/prosemirror/commands/contentControls.js +24 -19
- package/dist/prosemirror/commands/image.d.ts +1 -1
- package/dist/prosemirror/commands/image.js +4 -1
- package/dist/prosemirror/commands/paragraph.d.ts +2 -1
- package/dist/prosemirror/commands/propertyChangeScope.d.ts +12 -4
- package/dist/prosemirror/commands/propertyChangeScope.js +22 -4
- package/dist/prosemirror/commands/sectionBreak.d.ts +33 -1
- package/dist/prosemirror/commands/sectionBreak.js +187 -11
- package/dist/prosemirror/conversion/fromProseDoc.d.ts +18 -2
- package/dist/prosemirror/conversion/fromProseDoc.js +330 -183
- package/dist/prosemirror/conversion/index.d.ts +2 -2
- package/dist/prosemirror/conversion/preservedSinkCarriers.d.ts +39 -0
- package/dist/prosemirror/conversion/preservedSinkCarriers.js +19 -0
- package/dist/prosemirror/conversion/runShadingMark.js +14 -1
- package/dist/prosemirror/conversion/sdtAttrs.d.ts +10 -1
- package/dist/prosemirror/conversion/sdtAttrs.js +19 -5
- package/dist/prosemirror/conversion/toProseDoc.js +371 -141
- package/dist/prosemirror/emptyRangeAnchor.d.ts +53 -0
- package/dist/prosemirror/emptyRangeAnchor.js +158 -0
- package/dist/prosemirror/extensions/StarterKit.js +8 -2
- package/dist/prosemirror/extensions/core/DocExtension.js +1 -1
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +19 -15
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +3 -2
- package/dist/prosemirror/extensions/features/ListExtension.js +43 -24
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +4 -3
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.d.ts +3 -3
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.js +5 -5
- package/dist/prosemirror/extensions/features/pasteCleanup.d.ts +3 -1
- package/dist/prosemirror/extensions/features/pasteCleanup.js +56 -2
- package/dist/prosemirror/extensions/features/pastedHeadingStyles.js +5 -4
- package/dist/prosemirror/extensions/markRegistry.d.ts +26 -2
- package/dist/prosemirror/extensions/markRegistry.js +73 -10
- package/dist/prosemirror/extensions/marks/InlineWrapperExtension.js +17 -3
- package/dist/prosemirror/extensions/marks/RunIdentityExtension.d.ts +26 -0
- package/dist/prosemirror/extensions/marks/RunIdentityExtension.js +134 -0
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.js +2 -1
- package/dist/prosemirror/extensions/marks/UnderlineExtension.js +12 -18
- package/dist/prosemirror/extensions/marks/markUtils.js +2 -1
- package/dist/prosemirror/extensions/nodes/BlockBookmarkBoundaryExtension.d.ts +29 -0
- package/dist/prosemirror/extensions/nodes/BlockBookmarkBoundaryExtension.js +46 -0
- package/dist/prosemirror/extensions/nodes/BlockSdtExtension.d.ts +4 -3
- package/dist/prosemirror/extensions/nodes/BlockSdtExtension.js +18 -13
- package/dist/prosemirror/extensions/nodes/BookmarkBoundaryExtension.js +28 -53
- package/dist/prosemirror/extensions/nodes/CommentReferenceExtension.js +10 -0
- package/dist/prosemirror/extensions/nodes/ImageExtension.js +8 -1
- package/dist/prosemirror/extensions/nodes/MoveRangeBoundaryExtension.d.ts +11 -0
- package/dist/prosemirror/extensions/nodes/MoveRangeBoundaryExtension.js +43 -0
- package/dist/prosemirror/extensions/nodes/RangeAnchorExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/nodes/RangeAnchorExtension.js +65 -0
- package/dist/prosemirror/extensions/nodes/SdtExtension.d.ts +3 -1
- package/dist/prosemirror/extensions/nodes/SdtExtension.js +22 -16
- package/dist/prosemirror/extensions/nodes/ShapeExtension.js +4 -0
- package/dist/prosemirror/extensions/nodes/TableExtension.js +141 -123
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +4 -0
- package/dist/prosemirror/extensions/nodes/bookmarkBoundaryDom.d.ts +23 -0
- package/dist/prosemirror/extensions/nodes/bookmarkBoundaryDom.js +57 -0
- package/dist/prosemirror/extensions/types.d.ts +12 -3
- package/dist/prosemirror/index.d.ts +4 -2
- package/dist/prosemirror/index.js +2 -1
- package/dist/prosemirror/inlineWrapperStack.js +20 -3
- package/dist/prosemirror/listMarker.d.ts +2 -2
- package/dist/prosemirror/listMarker.js +7 -8
- package/dist/prosemirror/listRenderingAttrs.js +11 -1
- package/dist/prosemirror/listState.d.ts +62 -0
- package/dist/prosemirror/listState.js +49 -0
- package/dist/prosemirror/moveRangeBoundaryAttrs.d.ts +13 -0
- package/dist/prosemirror/moveRangeBoundaryAttrs.js +114 -0
- package/dist/prosemirror/numberedRefFields.js +4 -4
- package/dist/prosemirror/numberingAttr.d.ts +55 -0
- package/dist/prosemirror/numberingAttr.js +74 -0
- package/dist/prosemirror/outlineLevelAttr.d.ts +29 -0
- package/dist/prosemirror/outlineLevelAttr.js +42 -0
- package/dist/prosemirror/paragraphFormattingProvenance.d.ts +9 -0
- package/dist/prosemirror/paragraphFormattingProvenance.js +4 -1
- package/dist/prosemirror/plugins/selectionTracker.d.ts +3 -6
- package/dist/prosemirror/plugins/selectionTracker.js +3 -10
- package/dist/prosemirror/rangeAnchorAttrs.d.ts +14 -0
- package/dist/prosemirror/rangeAnchorAttrs.js +101 -0
- package/dist/prosemirror/replacedAnnotations.d.ts +1 -1
- package/dist/prosemirror/replacedAnnotations.js +24 -6
- package/dist/prosemirror/revisionCarriers.d.ts +86 -2
- package/dist/prosemirror/revisionCarriers.js +86 -60
- package/dist/prosemirror/runFormattingInlineCarriers.d.ts +2 -0
- package/dist/prosemirror/runFormattingInlineCarriers.js +2 -0
- package/dist/prosemirror/runIdentity.d.ts +28 -0
- package/dist/prosemirror/runIdentity.js +36 -0
- package/dist/prosemirror/runStyleFormatting.js +1 -1
- package/dist/prosemirror/schema/index.d.ts +2 -2
- package/dist/prosemirror/schema/marks.d.ts +23 -4
- package/dist/prosemirror/schema/nodes.d.ts +220 -24
- package/dist/prosemirror/sectionCarrier.d.ts +37 -0
- package/dist/prosemirror/sectionCarrier.js +40 -0
- package/dist/prosemirror/selectionState.d.ts +3 -0
- package/dist/prosemirror/selectionState.js +4 -1
- package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +5 -4
- package/dist/prosemirror/styles/resolvedStyleAttrs.js +15 -13
- package/dist/prosemirror/tableResize.js +5 -6
- package/dist/prosemirror/trackedRunInlineAtoms.d.ts +2 -0
- package/dist/prosemirror/trackedRunInlineAtoms.js +2 -0
- package/dist/prosemirror/utils/extractTrackedChanges.d.ts +10 -11
- package/dist/prosemirror/utils/extractTrackedChanges.js +109 -92
- package/dist/prosemirror/validation.js +17 -6
- package/dist/prosemirror/yjsDocumentMetadata.d.ts +2 -2
- package/dist/prosemirror/yjsDocumentMetadata.js +428 -7
- package/dist/prosemirror/zeroWidthAnchors.js +4 -0
- package/dist/style-sets/extract.js +4 -4
- package/dist/style-sets/stellaStyle.js +36 -23
- package/dist/types/colors.d.ts +2 -2
- package/dist/types/content.d.ts +2 -2
- package/dist/types/documentEnumValues.d.ts +53 -26
- package/dist/types/documentEnumValues.js +72 -174
- package/dist/types/formatting.d.ts +2 -2
- package/dist/types/index.d.ts +9 -2
- package/dist/utils/borderCss.d.ts +246 -0
- package/dist/utils/borderCss.js +325 -0
- package/dist/utils/colorResolver.d.ts +4 -3
- package/dist/utils/colorResolver.js +45 -76
- package/dist/utils/createDocument.js +24 -6
- package/dist/utils/findReplace.js +52 -10
- package/dist/utils/formatToStyle.d.ts +84 -2
- package/dist/utils/formatToStyle.js +133 -52
- package/dist/utils/headingCollector.js +3 -2
- package/dist/utils/mergeDocumentContent.js +5 -3
- package/dist/utils/paragraphFormattingMerge.js +27 -6
- package/dist/utils/replaceText.js +1 -1
- package/dist/utils/tableOperations.d.ts +5 -3
- package/dist/utils/tableOperations.js +14 -1
- package/dist/utils/tablePlacement.d.ts +7 -0
- package/dist/utils/tablePlacement.js +14 -0
- package/dist/utils/textDirectionFlow.d.ts +15 -0
- package/dist/utils/textDirectionFlow.js +38 -0
- package/dist/utils/textFormattingMerge.js +16 -4
- package/package.json +10 -10
- package/dist/ai-edits/__fixtures__/paragraphs.d.ts +0 -17
- package/dist/ai-edits/__fixtures__/paragraphs.js +0 -33
- package/dist/compare/__fixtures__/body-sequence.d.ts +0 -119
- package/dist/compare/__fixtures__/body-sequence.js +0 -225
- package/dist/compare/__fixtures__/nested-table.d.ts +0 -16
- package/dist/compare/__fixtures__/nested-table.js +0 -50
- package/dist/compare/__fixtures__/numbered-list.d.ts +0 -34
- package/dist/compare/__fixtures__/numbered-list.js +0 -85
- package/dist/docx/bookmarkPlacement.d.ts +0 -9
- package/dist/docx/bookmarkPlacement.js +0 -52
- package/dist/fonts/embeddedFontTable.d.ts +0 -45
- package/dist/fonts/embeddedFontTable.js +0 -80
- package/dist/prosemirror/extensions/marks/PageBreakRunOwnerExtension.d.ts +0 -13
- package/dist/prosemirror/extensions/marks/PageBreakRunOwnerExtension.js +0 -39
|
@@ -1,72 +1,29 @@
|
|
|
1
|
+
import { DERIVED_PART_ROOT_ATTRIBUTES, attributeRemainder } from "./attributeRemainder.js";
|
|
2
|
+
import { CAPTURE, dispatchChildren, sequencePositions } from "./containerChildren.js";
|
|
1
3
|
import { isNumberingReference } from "./numberingReference.js";
|
|
2
4
|
import { formatOoxmlCounter, padDecimal } from "./ooxmlCounterFormatter.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
5
|
+
import { parseParagraphProperties } from "./paragraphProperties.js";
|
|
6
|
+
import { LevelSuffixSchema, NumberFormatSchema, ParagraphAlignmentSchema, narrowEnum } from "./parserEnums.js";
|
|
7
|
+
import { RUN_PROPERTY_OWNERS, parseRunProperties } from "./runParser.js";
|
|
8
|
+
import { findChild, getAttribute, parseBooleanElement, parseNumericAttribute, parseOnOffAttribute, parseXmlDocument } from "./xmlParser.js";
|
|
6
9
|
//#region src/docx/numberingParser.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
ideographDigital: "ideographDigital",
|
|
24
|
-
japaneseCounting: "japaneseCounting",
|
|
25
|
-
aiueo: "aiueo",
|
|
26
|
-
iroha: "iroha",
|
|
27
|
-
decimalFullWidth: "decimalFullWidth",
|
|
28
|
-
decimalHalfWidth: "decimalHalfWidth",
|
|
29
|
-
japaneseLegal: "japaneseLegal",
|
|
30
|
-
japaneseDigitalTenThousand: "japaneseDigitalTenThousand",
|
|
31
|
-
decimalEnclosedCircle: "decimalEnclosedCircle",
|
|
32
|
-
decimalFullWidth2: "decimalFullWidth2",
|
|
33
|
-
aiueoFullWidth: "aiueoFullWidth",
|
|
34
|
-
irohaFullWidth: "irohaFullWidth",
|
|
35
|
-
decimalEnclosedFullstop: "decimalEnclosedFullstop",
|
|
36
|
-
decimalEnclosedParen: "decimalEnclosedParen",
|
|
37
|
-
decimalEnclosedCircleChinese: "decimalEnclosedCircleChinese",
|
|
38
|
-
ideographEnclosedCircle: "ideographEnclosedCircle",
|
|
39
|
-
ideographTraditional: "ideographTraditional",
|
|
40
|
-
ideographZodiac: "ideographZodiac",
|
|
41
|
-
ideographZodiacTraditional: "ideographZodiacTraditional",
|
|
42
|
-
taiwaneseCounting: "taiwaneseCounting",
|
|
43
|
-
ideographLegalTraditional: "ideographLegalTraditional",
|
|
44
|
-
taiwaneseCountingThousand: "taiwaneseCountingThousand",
|
|
45
|
-
taiwaneseDigital: "taiwaneseDigital",
|
|
46
|
-
chineseCounting: "chineseCounting",
|
|
47
|
-
chineseLegalSimplified: "chineseLegalSimplified",
|
|
48
|
-
chineseCountingThousand: "chineseCountingThousand",
|
|
49
|
-
koreanDigital: "koreanDigital",
|
|
50
|
-
koreanCounting: "koreanCounting",
|
|
51
|
-
koreanLegal: "koreanLegal",
|
|
52
|
-
koreanDigital2: "koreanDigital2",
|
|
53
|
-
vietnameseCounting: "vietnameseCounting",
|
|
54
|
-
russianLower: "russianLower",
|
|
55
|
-
russianUpper: "russianUpper",
|
|
56
|
-
numberInDash: "numberInDash",
|
|
57
|
-
hebrew1: "hebrew1",
|
|
58
|
-
hebrew2: "hebrew2",
|
|
59
|
-
arabicAlpha: "arabicAlpha",
|
|
60
|
-
arabicAbjad: "arabicAbjad",
|
|
61
|
-
hindiVowels: "hindiVowels",
|
|
62
|
-
hindiConsonants: "hindiConsonants",
|
|
63
|
-
hindiNumbers: "hindiNumbers",
|
|
64
|
-
hindiCounting: "hindiCounting",
|
|
65
|
-
thaiLetters: "thaiLetters",
|
|
66
|
-
thaiNumbers: "thaiNumbers",
|
|
67
|
-
thaiCounting: "thaiCounting"
|
|
10
|
+
/** `w:abstractNum` reads its id; everything else it carries is the remainder's. */
|
|
11
|
+
const MODELLED_ABSTRACT_NUM_ATTRIBUTES = /* @__PURE__ */ new Set(["abstractNumId"]);
|
|
12
|
+
/** `w:lvl` reads the level it defines and Word's two template markers. */
|
|
13
|
+
const MODELLED_LVL_ATTRIBUTES = /* @__PURE__ */ new Set([
|
|
14
|
+
"ilvl",
|
|
15
|
+
"tplc",
|
|
16
|
+
"tentative"
|
|
17
|
+
]);
|
|
18
|
+
/** `w:num` reads the id paragraphs reference it by. */
|
|
19
|
+
const MODELLED_NUM_ATTRIBUTES = /* @__PURE__ */ new Set(["numId"]);
|
|
20
|
+
/** `w:lvlOverride` reads the level it overrides. */
|
|
21
|
+
const MODELLED_LVL_OVERRIDE_ATTRIBUTES = /* @__PURE__ */ new Set(["ilvl"]);
|
|
22
|
+
const attributeValue = (element) => getAttribute(element, "w", "val") ?? void 0;
|
|
23
|
+
const integerValue = (element) => {
|
|
24
|
+
const parsed = parseNumericAttribute(element, "w", "val");
|
|
25
|
+
return parsed === void 0 || !Number.isFinite(parsed) ? void 0 : parsed;
|
|
68
26
|
};
|
|
69
|
-
const wordprocessingLocalName = (element) => WORDPROCESSINGML_NAMESPACE_URIS.has(getNamespaceUri(element) ?? "") ? getLocalName(element.name) : null;
|
|
70
27
|
/**
|
|
71
28
|
* Parse numbering.xml into NumberingDefinitions
|
|
72
29
|
*
|
|
@@ -81,16 +38,29 @@ function parseNumbering(numberingXml) {
|
|
|
81
38
|
if (!numberingXml) return createNumberingMap(definitions);
|
|
82
39
|
const root = parseXmlDocument(numberingXml);
|
|
83
40
|
if (!root) return createNumberingMap(definitions);
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
41
|
+
const preserved = dispatchChildren({
|
|
42
|
+
element: root,
|
|
43
|
+
container: "w:numbering",
|
|
44
|
+
capturePosition: sequencePositions("w:numbering", root),
|
|
45
|
+
handlers: {
|
|
46
|
+
abstractNum: (child) => {
|
|
47
|
+
const parsed = parseAbstractNumbering(child);
|
|
48
|
+
if (parsed) definitions.abstractNums.push(parsed);
|
|
49
|
+
},
|
|
50
|
+
num: (child) => {
|
|
51
|
+
const parsed = parseNumberingInstance(child);
|
|
52
|
+
if (parsed) definitions.nums.push(parsed);
|
|
53
|
+
},
|
|
54
|
+
numPicBullet: CAPTURE,
|
|
55
|
+
numIdMacAtCleanup: CAPTURE
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
if (preserved !== void 0) definitions.preserved = preserved;
|
|
59
|
+
const preservedAttributes = attributeRemainder({
|
|
60
|
+
element: root,
|
|
61
|
+
modelled: DERIVED_PART_ROOT_ATTRIBUTES
|
|
62
|
+
});
|
|
63
|
+
if (preservedAttributes !== void 0) definitions.preservedAttributes = preservedAttributes;
|
|
94
64
|
return createNumberingMap(definitions);
|
|
95
65
|
}
|
|
96
66
|
/**
|
|
@@ -105,55 +75,44 @@ function parseAbstractNumbering(element) {
|
|
|
105
75
|
abstractNumId,
|
|
106
76
|
levels: []
|
|
107
77
|
};
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
break;
|
|
128
|
-
case "lvl":
|
|
129
|
-
levelElements.push(child);
|
|
130
|
-
break;
|
|
131
|
-
default: break;
|
|
78
|
+
const read = (key, value) => {
|
|
79
|
+
if (value === void 0) return;
|
|
80
|
+
abstractNum[key] = value;
|
|
81
|
+
};
|
|
82
|
+
const preserved = dispatchChildren({
|
|
83
|
+
element,
|
|
84
|
+
container: "w:abstractNum",
|
|
85
|
+
capturePosition: sequencePositions("w:abstractNum", element),
|
|
86
|
+
handlers: {
|
|
87
|
+
nsid: (child) => read("nsid", attributeValue(child)),
|
|
88
|
+
multiLevelType: (child) => read("multiLevelType", narrow(attributeValue(child), MULTI_LEVEL_TYPES)),
|
|
89
|
+
tmpl: (child) => read("tmpl", attributeValue(child)),
|
|
90
|
+
name: (child) => read("name", attributeValue(child)),
|
|
91
|
+
styleLink: (child) => read("styleLink", attributeValue(child)),
|
|
92
|
+
numStyleLink: (child) => read("numStyleLink", attributeValue(child)),
|
|
93
|
+
lvl: (child) => {
|
|
94
|
+
const level = parseListLevel(child);
|
|
95
|
+
if (level) abstractNum.levels.push(level);
|
|
96
|
+
}
|
|
132
97
|
}
|
|
133
|
-
}
|
|
134
|
-
if (
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (nameVal != null) abstractNum.name = nameVal;
|
|
141
|
-
}
|
|
142
|
-
if (numStyleLinkEl) {
|
|
143
|
-
const numStyleLinkVal = getAttribute(numStyleLinkEl, "w", "val");
|
|
144
|
-
if (numStyleLinkVal != null) abstractNum.numStyleLink = numStyleLinkVal;
|
|
145
|
-
}
|
|
146
|
-
if (styleLinkEl) {
|
|
147
|
-
const styleLinkVal = getAttribute(styleLinkEl, "w", "val");
|
|
148
|
-
if (styleLinkVal != null) abstractNum.styleLink = styleLinkVal;
|
|
149
|
-
}
|
|
150
|
-
for (const lvlEl of levelElements) {
|
|
151
|
-
const level = parseListLevel(lvlEl);
|
|
152
|
-
if (level) abstractNum.levels.push(level);
|
|
153
|
-
}
|
|
98
|
+
});
|
|
99
|
+
if (preserved !== void 0) abstractNum.preserved = preserved;
|
|
100
|
+
const preservedAttributes = attributeRemainder({
|
|
101
|
+
element,
|
|
102
|
+
modelled: MODELLED_ABSTRACT_NUM_ATTRIBUTES
|
|
103
|
+
});
|
|
104
|
+
if (preservedAttributes !== void 0) abstractNum.preservedAttributes = preservedAttributes;
|
|
154
105
|
abstractNum.levels.sort((a, b) => a.ilvl - b.ilvl);
|
|
155
106
|
return abstractNum;
|
|
156
107
|
}
|
|
108
|
+
/** ECMA-376 §17.9.1: a `w:abstractNum` defines levels 0 through 8 and no more. */
|
|
109
|
+
const MAX_LIST_LEVEL = 8;
|
|
110
|
+
const MULTI_LEVEL_TYPES = [
|
|
111
|
+
"hybridMultilevel",
|
|
112
|
+
"multilevel",
|
|
113
|
+
"singleLevel"
|
|
114
|
+
];
|
|
115
|
+
const narrow = (carried, members) => members.find((member) => member === carried);
|
|
157
116
|
/**
|
|
158
117
|
* Parse a single w:num element (numbering instance)
|
|
159
118
|
*/
|
|
@@ -162,280 +121,222 @@ function parseNumberingInstance(element) {
|
|
|
162
121
|
if (numIdStr === null) return null;
|
|
163
122
|
const numId = Number.parseInt(numIdStr, 10);
|
|
164
123
|
if (Number.isNaN(numId)) return null;
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
124
|
+
const levelOverrides = [];
|
|
125
|
+
let abstractNumId;
|
|
126
|
+
const preserved = dispatchChildren({
|
|
127
|
+
element,
|
|
128
|
+
container: "w:num",
|
|
129
|
+
capturePosition: sequencePositions("w:num", element),
|
|
130
|
+
handlers: {
|
|
131
|
+
abstractNumId: (child) => {
|
|
132
|
+
if (abstractNumId !== void 0) return;
|
|
133
|
+
abstractNumId = integerValue(child);
|
|
134
|
+
},
|
|
135
|
+
lvlOverride: (child) => {
|
|
136
|
+
const override = parseLevelOverride(child);
|
|
137
|
+
if (override) levelOverrides.push(override);
|
|
138
|
+
}
|
|
172
139
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (!abstractNumIdEl) return null;
|
|
176
|
-
const abstractNumIdStr = getAttribute(abstractNumIdEl, "w", "val");
|
|
177
|
-
if (abstractNumIdStr === null) return null;
|
|
178
|
-
const abstractNumId = Number.parseInt(abstractNumIdStr, 10);
|
|
179
|
-
if (Number.isNaN(abstractNumId)) return null;
|
|
140
|
+
});
|
|
141
|
+
if (abstractNumId === void 0) return null;
|
|
180
142
|
const instance = {
|
|
181
143
|
numId,
|
|
182
144
|
abstractNumId
|
|
183
145
|
};
|
|
184
|
-
if (
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const
|
|
211
|
-
if (
|
|
146
|
+
if (levelOverrides.length > 0) instance.levelOverrides = levelOverrides;
|
|
147
|
+
if (preserved !== void 0) instance.preserved = preserved;
|
|
148
|
+
const preservedAttributes = attributeRemainder({
|
|
149
|
+
element,
|
|
150
|
+
modelled: MODELLED_NUM_ATTRIBUTES
|
|
151
|
+
});
|
|
152
|
+
if (preservedAttributes !== void 0) instance.preservedAttributes = preservedAttributes;
|
|
153
|
+
return instance;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Parse a single w:lvlOverride element (one level of one numbering instance)
|
|
157
|
+
*/
|
|
158
|
+
function parseLevelOverride(element) {
|
|
159
|
+
const ilvl = parseNumericAttribute(element, "w", "ilvl");
|
|
160
|
+
if (ilvl === void 0) return null;
|
|
161
|
+
const override = { ilvl };
|
|
162
|
+
const preserved = dispatchChildren({
|
|
163
|
+
element,
|
|
164
|
+
container: "w:lvlOverride",
|
|
165
|
+
capturePosition: sequencePositions("w:lvlOverride", element),
|
|
166
|
+
handlers: {
|
|
167
|
+
startOverride: (child) => {
|
|
168
|
+
const start = integerValue(child);
|
|
169
|
+
if (start !== void 0 && override.startOverride === void 0) override.startOverride = start;
|
|
170
|
+
},
|
|
171
|
+
lvl: (child) => {
|
|
172
|
+
const level = parseListLevel(child);
|
|
173
|
+
if (level && override.lvl === void 0) override.lvl = level;
|
|
212
174
|
}
|
|
213
|
-
instance.levelOverrides.push(override);
|
|
214
175
|
}
|
|
215
|
-
}
|
|
216
|
-
|
|
176
|
+
});
|
|
177
|
+
if (preserved !== void 0) override.preserved = preserved;
|
|
178
|
+
const preservedAttributes = attributeRemainder({
|
|
179
|
+
element,
|
|
180
|
+
modelled: MODELLED_LVL_OVERRIDE_ATTRIBUTES
|
|
181
|
+
});
|
|
182
|
+
if (preservedAttributes !== void 0) override.preservedAttributes = preservedAttributes;
|
|
183
|
+
return override;
|
|
217
184
|
}
|
|
218
185
|
/**
|
|
219
186
|
* Parse a single w:lvl element (list level definition)
|
|
220
187
|
*/
|
|
221
188
|
function parseListLevel(element) {
|
|
222
|
-
const
|
|
223
|
-
if (
|
|
224
|
-
const ilvl = Number.parseInt(ilvlStr, 10);
|
|
225
|
-
if (Number.isNaN(ilvl) || ilvl < 0 || ilvl > 8) return null;
|
|
189
|
+
const ilvl = parseNumericAttribute(element, "w", "ilvl");
|
|
190
|
+
if (ilvl === void 0) return null;
|
|
226
191
|
const level = {
|
|
227
192
|
ilvl,
|
|
228
193
|
numFmt: "decimal",
|
|
229
194
|
lvlText: ""
|
|
230
195
|
};
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
pPrEl ??= child;
|
|
276
|
-
break;
|
|
277
|
-
case "rPr":
|
|
278
|
-
rPrEl ??= child;
|
|
279
|
-
break;
|
|
280
|
-
default: break;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
if (startEl) {
|
|
284
|
-
const startVal = getAttribute(startEl, "w", "val");
|
|
285
|
-
if (startVal !== null) {
|
|
286
|
-
const startNum = Number.parseInt(startVal, 10);
|
|
287
|
-
if (!Number.isNaN(startNum)) level.start = startNum;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
if (numFmtEl) level.numFmt = resolveNumFmt(numFmtEl) ?? "decimal";
|
|
291
|
-
else if (alternateEl) {
|
|
196
|
+
const alternateEl = findChild(element, "mc", "AlternateContent");
|
|
197
|
+
const read = (key, value) => {
|
|
198
|
+
if (value === void 0) return;
|
|
199
|
+
level[key] = value;
|
|
200
|
+
};
|
|
201
|
+
const preserved = dispatchChildren({
|
|
202
|
+
element,
|
|
203
|
+
container: "w:lvl",
|
|
204
|
+
capturePosition: sequencePositions("w:lvl", element),
|
|
205
|
+
handlers: {
|
|
206
|
+
start: (child) => read("start", integerValue(child)),
|
|
207
|
+
numFmt: (child) => {
|
|
208
|
+
const resolved = resolveNumFmt(child);
|
|
209
|
+
if (resolved === null) return CAPTURE;
|
|
210
|
+
Object.assign(level, resolved);
|
|
211
|
+
},
|
|
212
|
+
lvlRestart: (child) => read("lvlRestart", integerValue(child)),
|
|
213
|
+
pStyle: (child) => read("pStyle", attributeValue(child)),
|
|
214
|
+
isLgl: (child) => read("isLgl", parseBooleanElement(child)),
|
|
215
|
+
suff: (child) => read("suffix", narrowEnum(attributeValue(child), LevelSuffixSchema)),
|
|
216
|
+
lvlText: (child) => {
|
|
217
|
+
read("lvlText", attributeValue(child) ?? "");
|
|
218
|
+
const isNull = parseOnOffAttribute(child, "w", "null");
|
|
219
|
+
if (isNull !== void 0) level.lvlTextNull = isNull;
|
|
220
|
+
},
|
|
221
|
+
lvlPicBulletId: (child) => read("lvlPicBulletId", integerValue(child)),
|
|
222
|
+
legacy: (child) => read("legacy", legacyOf(child)),
|
|
223
|
+
lvlJc: (child) => read("lvlJc", narrowEnum(attributeValue(child), ParagraphAlignmentSchema)),
|
|
224
|
+
pPr: (child) => read("pPr", parseParagraphProperties(child, null) ?? {}),
|
|
225
|
+
rPr: (child) => read("rPr", parseRunProperties(child, null, RUN_PROPERTY_OWNERS.standalone) ?? {})
|
|
226
|
+
},
|
|
227
|
+
undeclared: { AlternateContent: () => void 0 }
|
|
228
|
+
});
|
|
229
|
+
if (preserved !== void 0) level.preserved = preserved;
|
|
230
|
+
const preservedAttributes = attributeRemainder({
|
|
231
|
+
element,
|
|
232
|
+
modelled: MODELLED_LVL_ATTRIBUTES
|
|
233
|
+
});
|
|
234
|
+
if (preservedAttributes !== void 0) level.preservedAttributes = preservedAttributes;
|
|
235
|
+
const tplc = getAttribute(element, "w", "tplc");
|
|
236
|
+
if (tplc !== null) level.tplc = tplc;
|
|
237
|
+
const tentative = parseOnOffAttribute(element, "w", "tentative");
|
|
238
|
+
if (tentative !== void 0) level.tentative = tentative;
|
|
239
|
+
if (alternateEl && findChild(element, "w", "numFmt") === null) {
|
|
292
240
|
const choiceFmt = resolveNumFmt(findChild(findChild(alternateEl, "mc", "Choice"), "w", "numFmt"));
|
|
293
241
|
const fallbackFmt = resolveNumFmt(findChild(findChild(alternateEl, "mc", "Fallback"), "w", "numFmt"));
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
if (lvlTextEl) level.lvlText = getAttribute(lvlTextEl, "w", "val") ?? "";
|
|
297
|
-
if (lvlJcEl) {
|
|
298
|
-
const jcVal = getAttribute(lvlJcEl, "w", "val");
|
|
299
|
-
if (jcVal === "left" || jcVal === "center" || jcVal === "right") level.lvlJc = jcVal;
|
|
300
|
-
}
|
|
301
|
-
if (suffEl) {
|
|
302
|
-
const suffix = narrowEnum(getAttribute(suffEl, "w", "val"), LevelSuffixSchema);
|
|
303
|
-
if (suffix) level.suffix = suffix;
|
|
304
|
-
}
|
|
305
|
-
if (isLglEl) level.isLgl = parseBooleanElement(isLglEl);
|
|
306
|
-
if (lvlRestartEl) {
|
|
307
|
-
const restartVal = getAttribute(lvlRestartEl, "w", "val");
|
|
308
|
-
if (restartVal !== null) {
|
|
309
|
-
const restartNum = Number.parseInt(restartVal, 10);
|
|
310
|
-
if (!Number.isNaN(restartNum)) level.lvlRestart = restartNum;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
if (legacyEl) {
|
|
314
|
-
const legacySpace = parseNumericAttribute(legacyEl, "w", "legacySpace");
|
|
315
|
-
const legacyIndent = parseNumericAttribute(legacyEl, "w", "legacyIndent");
|
|
316
|
-
level.legacy = {
|
|
317
|
-
legacy: parseBooleanElement(legacyEl),
|
|
318
|
-
...legacySpace !== void 0 ? { legacySpace } : {},
|
|
319
|
-
...legacyIndent !== void 0 ? { legacyIndent } : {}
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
if (pPrEl) level.pPr = parseLevelParagraphProps(pPrEl);
|
|
323
|
-
if (rPrEl) {
|
|
324
|
-
const runProperties = parseRunProperties(rPrEl, null);
|
|
325
|
-
if (runProperties) level.rPr = runProperties;
|
|
242
|
+
const resolved = choiceFmt && counterFormatOf(choiceFmt) !== "custom" ? choiceFmt : fallbackFmt ?? choiceFmt;
|
|
243
|
+
if (resolved) Object.assign(level, resolved);
|
|
326
244
|
}
|
|
327
245
|
return level;
|
|
328
246
|
}
|
|
329
247
|
/**
|
|
330
|
-
* Resolve a `<w:numFmt>` element
|
|
331
|
-
*
|
|
332
|
-
*
|
|
248
|
+
* Resolve a `<w:numFmt>` element, or null when it is absent or carries a token
|
|
249
|
+
* outside `ST_NumberFormat` (an mc:Fallback can then supply the rendering).
|
|
250
|
+
*
|
|
251
|
+
* `custom` stays `custom`, with its `@w:format` beside it. It used to be
|
|
252
|
+
* decoded here into a synthetic `decimalZero{3,4,5}` the enumeration does not
|
|
253
|
+
* declare, which the serializer wrote back as a `w:val` no consumer can read.
|
|
254
|
+
* The pad width belongs to the renderer, not to the model.
|
|
333
255
|
*/
|
|
334
256
|
function resolveNumFmt(numFmtEl) {
|
|
335
257
|
if (!numFmtEl) return null;
|
|
336
|
-
const
|
|
337
|
-
if (
|
|
338
|
-
if (
|
|
339
|
-
|
|
258
|
+
const numFmt = narrowEnum(getAttribute(numFmtEl, "w", "val"), NumberFormatSchema);
|
|
259
|
+
if (numFmt === void 0) return null;
|
|
260
|
+
if (numFmt !== "custom") return { numFmt };
|
|
261
|
+
const format = getAttribute(numFmtEl, "w", "format");
|
|
262
|
+
return format === null ? { numFmt } : {
|
|
263
|
+
numFmt,
|
|
264
|
+
numFmtFormat: format
|
|
265
|
+
};
|
|
340
266
|
}
|
|
341
267
|
/**
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
* the caller can fall back to an mc:Fallback or plain decimal.
|
|
268
|
+
* `w:legacy`: the flag is the element's own `w:legacy` attribute.
|
|
269
|
+
*
|
|
270
|
+
* `CT_LvlLegacy` has no `w:val`, so reading one turned every explicit
|
|
271
|
+
* `w:legacy="0"` into the `w:legacy="1"` a rebuild wrote back.
|
|
347
272
|
*/
|
|
348
|
-
function
|
|
349
|
-
const
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
273
|
+
function legacyOf(element) {
|
|
274
|
+
const legacy = parseOnOffAttribute(element, "w", "legacy");
|
|
275
|
+
const legacySpace = parseNumericAttribute(element, "w", "legacySpace");
|
|
276
|
+
const legacyIndent = parseNumericAttribute(element, "w", "legacyIndent");
|
|
277
|
+
return {
|
|
278
|
+
...legacy === void 0 ? {} : { legacy },
|
|
279
|
+
...legacySpace === void 0 ? {} : { legacySpace },
|
|
280
|
+
...legacyIndent === void 0 ? {} : { legacyIndent }
|
|
281
|
+
};
|
|
357
282
|
}
|
|
358
283
|
/**
|
|
359
|
-
*
|
|
360
|
-
*
|
|
284
|
+
* The width a `custom` format's zero-padded first token counts to, or
|
|
285
|
+
* `undefined` for a pattern folio does not render.
|
|
286
|
+
*
|
|
287
|
+
* ECMA-376 §17.9.17: `@w:format` is an XSLT token list like
|
|
288
|
+
* "0001, 0002, 0003, ...". Word only emits zero-padded decimal customs this
|
|
289
|
+
* way; the width is the digit count of the first token, clamped to five.
|
|
361
290
|
*/
|
|
362
|
-
|
|
363
|
-
const
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
if (child.type !== "element") continue;
|
|
368
|
-
if (wordprocessingLocalName(child) === "ind") {
|
|
369
|
-
indEl ??= child;
|
|
370
|
-
continue;
|
|
371
|
-
}
|
|
372
|
-
if (wordprocessingLocalName(child) === "tabs") tabsEl ??= child;
|
|
373
|
-
}
|
|
374
|
-
if (indEl) {
|
|
375
|
-
const left = parseNumericAttribute(indEl, "w", "left");
|
|
376
|
-
const right = parseNumericAttribute(indEl, "w", "right");
|
|
377
|
-
const start = parseNumericAttribute(indEl, "w", "start");
|
|
378
|
-
const end = parseNumericAttribute(indEl, "w", "end");
|
|
379
|
-
const firstLine = parseNumericAttribute(indEl, "w", "firstLine");
|
|
380
|
-
const hanging = parseNumericAttribute(indEl, "w", "hanging");
|
|
381
|
-
const resolvedLeft = left ?? start;
|
|
382
|
-
const resolvedRight = right ?? end;
|
|
383
|
-
if (resolvedLeft !== void 0) formatting.indentLeft = resolvedLeft;
|
|
384
|
-
if (resolvedRight !== void 0) formatting.indentRight = resolvedRight;
|
|
385
|
-
if (hanging !== void 0) {
|
|
386
|
-
formatting.indentFirstLine = -hanging;
|
|
387
|
-
formatting.hangingIndent = true;
|
|
388
|
-
} else if (firstLine !== void 0) formatting.indentFirstLine = firstLine;
|
|
389
|
-
}
|
|
390
|
-
if (tabsEl) {
|
|
391
|
-
formatting.tabs = [];
|
|
392
|
-
const tabElements = findChildren(tabsEl, "w", "tab");
|
|
393
|
-
for (const tabEl of tabElements) {
|
|
394
|
-
const pos = parseNumericAttribute(tabEl, "w", "pos");
|
|
395
|
-
const val = getAttribute(tabEl, "w", "val");
|
|
396
|
-
const leader = getAttribute(tabEl, "w", "leader");
|
|
397
|
-
if (pos !== void 0 && val) {
|
|
398
|
-
const parsedLeader = parseTabLeader(leader);
|
|
399
|
-
formatting.tabs.push({
|
|
400
|
-
position: pos,
|
|
401
|
-
alignment: parseTabAlignment(val),
|
|
402
|
-
...parsedLeader !== void 0 ? { leader: parsedLeader } : {}
|
|
403
|
-
});
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
return formatting;
|
|
408
|
-
}
|
|
291
|
+
const customNumberFormatPadWidth = (format) => {
|
|
292
|
+
const firstToken = format?.split(",")[0]?.trim() ?? "";
|
|
293
|
+
if (!/^0+1$/u.test(firstToken)) return;
|
|
294
|
+
return Math.min(firstToken.length, 5);
|
|
295
|
+
};
|
|
409
296
|
/**
|
|
410
|
-
*
|
|
297
|
+
* The `@w:format` a level's `w:numFmt` writes, which only `custom` carries.
|
|
298
|
+
*
|
|
299
|
+
* `custom` is the reserved member that defers to another attribute, so the
|
|
300
|
+
* comparison lives here, in the module the reserved-value registry names as
|
|
301
|
+
* its owner, rather than in the serializer that needs the answer.
|
|
411
302
|
*/
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
case
|
|
418
|
-
case
|
|
419
|
-
case
|
|
420
|
-
case
|
|
421
|
-
default: return "
|
|
303
|
+
const customNumberFormatOf = (level) => level.numFmt === "custom" ? level.numFmtFormat : void 0;
|
|
304
|
+
/** What the marker renderer counts a level in; `custom` decides by pad width. */
|
|
305
|
+
const counterFormatOf = (level) => {
|
|
306
|
+
if (level.numFmt !== "custom") return level.numFmt;
|
|
307
|
+
switch (customNumberFormatPadWidth(level.numFmtFormat)) {
|
|
308
|
+
case 2: return "decimalZero";
|
|
309
|
+
case 3: return "decimalZero3";
|
|
310
|
+
case 4: return "decimalZero4";
|
|
311
|
+
case 5: return "decimalZero5";
|
|
312
|
+
default: return "custom";
|
|
422
313
|
}
|
|
423
|
-
}
|
|
314
|
+
};
|
|
424
315
|
/**
|
|
425
|
-
*
|
|
316
|
+
* How a `w:lvlJc` lays a marker out, for the three alignments layout has.
|
|
317
|
+
*
|
|
318
|
+
* `start` and `end` are the Strict logical-direction spellings folio
|
|
319
|
+
* canonicalises to `left` and `right` everywhere it rebuilds a part. The
|
|
320
|
+
* justification members describe how a *line* of text is spread and say nothing
|
|
321
|
+
* about a marker, so they resolve to no alignment rather than to a guess; the
|
|
322
|
+
* value itself is still carried on the level and written back.
|
|
426
323
|
*/
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
324
|
+
const MARKER_ALIGNMENT = {
|
|
325
|
+
start: "left",
|
|
326
|
+
left: "left",
|
|
327
|
+
center: "center",
|
|
328
|
+
end: "right",
|
|
329
|
+
right: "right",
|
|
330
|
+
both: void 0,
|
|
331
|
+
distribute: void 0,
|
|
332
|
+
mediumKashida: void 0,
|
|
333
|
+
highKashida: void 0,
|
|
334
|
+
lowKashida: void 0,
|
|
335
|
+
numTab: void 0,
|
|
336
|
+
thaiDistribute: void 0
|
|
337
|
+
};
|
|
338
|
+
/** {@link MARKER_ALIGNMENT} for a level that may not state a justification. */
|
|
339
|
+
const markerAlignmentForLevel = (lvlJc) => lvlJc === void 0 ? void 0 : MARKER_ALIGNMENT[lvlJc];
|
|
439
340
|
const markerFormattingFromLevel = (formatting) => {
|
|
440
341
|
if (!formatting) return;
|
|
441
342
|
const markerFormatting = {
|
|
@@ -476,6 +377,7 @@ function createNumberingMap(definitions) {
|
|
|
476
377
|
return {
|
|
477
378
|
definitions,
|
|
478
379
|
getLevel(numId, ilvl) {
|
|
380
|
+
if (ilvl < 0 || ilvl > MAX_LIST_LEVEL) return null;
|
|
479
381
|
const num = numMap.get(numId);
|
|
480
382
|
if (!num) return null;
|
|
481
383
|
if (num.levelOverrides) {
|
|
@@ -537,7 +439,7 @@ function computeListRendering(numPr, numbering) {
|
|
|
537
439
|
const levelStarts = [];
|
|
538
440
|
for (let i = 0; i <= ilvl; i += 1) {
|
|
539
441
|
const listLevel = numbering.getLevel(numId, i);
|
|
540
|
-
levelNumFmts.push(level.isLgl ? "decimal" : listLevel
|
|
442
|
+
levelNumFmts.push(level.isLgl || !listLevel ? "decimal" : counterFormatOf(listLevel));
|
|
541
443
|
levelStarts.push(listLevel?.start ?? 1);
|
|
542
444
|
}
|
|
543
445
|
const instance = numbering.getInstance(numId);
|
|
@@ -548,7 +450,7 @@ function computeListRendering(numPr, numbering) {
|
|
|
548
450
|
marker: level.lvlText,
|
|
549
451
|
markerTemplate: level.lvlText,
|
|
550
452
|
isBullet: level.numFmt === "bullet",
|
|
551
|
-
numFmt: level.isLgl ? "decimal" : level
|
|
453
|
+
numFmt: level.isLgl ? "decimal" : counterFormatOf(level),
|
|
552
454
|
levelNumFmts,
|
|
553
455
|
levelStarts
|
|
554
456
|
};
|
|
@@ -557,7 +459,8 @@ function computeListRendering(numPr, numbering) {
|
|
|
557
459
|
const markerFormatting = markerFormattingFromLevel(level.rPr);
|
|
558
460
|
if (markerFormatting) rendering.markerFormatting = markerFormatting;
|
|
559
461
|
if (level.rPr?.allCaps) rendering.markerAllCaps = true;
|
|
560
|
-
|
|
462
|
+
const markerAlignment = markerAlignmentForLevel(level.lvlJc);
|
|
463
|
+
if (markerAlignment !== void 0) rendering.markerAlignment = markerAlignment;
|
|
561
464
|
if (level.suffix) rendering.markerSuffix = level.suffix;
|
|
562
465
|
if (instance?.abstractNumId !== void 0) rendering.abstractNumId = instance.abstractNumId;
|
|
563
466
|
if (overrideForLevel?.startOverride !== void 0) rendering.startOverride = overrideForLevel.startOverride;
|
|
@@ -608,4 +511,4 @@ function isBulletLevel(level) {
|
|
|
608
511
|
/** Whether a numbering level reserves horizontal space for a visible marker. */
|
|
609
512
|
const numberingLevelHasMarkerSlot = (level) => level.numFmt !== "none";
|
|
610
513
|
//#endregion
|
|
611
|
-
export { computeListRendering, createNumberingMap, formatOoxmlCounter as formatNumber, getBulletCharacter, getCachedNumberingMap, isBulletLevel, markerFormattingFromLevel, numberingLevelHasMarkerSlot, padDecimal, parseNumbering, renderListMarker };
|
|
514
|
+
export { computeListRendering, counterFormatOf, createNumberingMap, customNumberFormatOf, customNumberFormatPadWidth, formatOoxmlCounter as formatNumber, getBulletCharacter, getCachedNumberingMap, isBulletLevel, markerAlignmentForLevel, markerFormattingFromLevel, numberingLevelHasMarkerSlot, padDecimal, parseNumbering, renderListMarker };
|