@stll/folio-core 0.0.1-placeholder.0 → 0.1.0
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/LICENSE +202 -0
- package/NOTICE.md +29 -0
- package/README.md +41 -0
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/ai-edits/apply.d.ts +35 -0
- package/dist/ai-edits/apply.js +683 -0
- package/dist/ai-edits/clean-text.d.ts +28 -0
- package/dist/ai-edits/clean-text.js +23 -0
- package/dist/ai-edits/headless.d.ts +225 -0
- package/dist/ai-edits/headless.js +513 -0
- package/dist/ai-edits/index.d.ts +6 -0
- package/dist/ai-edits/index.js +5 -0
- package/dist/ai-edits/inline-emphasis.d.ts +38 -0
- package/dist/ai-edits/inline-emphasis.js +78 -0
- package/dist/ai-edits/snapshot.d.ts +9 -0
- package/dist/ai-edits/snapshot.js +195 -0
- package/dist/ai-edits/types.d.ts +156 -0
- package/dist/ai-edits/types.js +0 -0
- package/dist/ai-edits/word-diff.d.ts +20 -0
- package/dist/ai-edits/word-diff.js +77 -0
- package/dist/ai-suggestions/apply.d.ts +17 -0
- package/dist/ai-suggestions/apply.js +64 -0
- package/dist/ai-suggestions/conflict.d.ts +22 -0
- package/dist/ai-suggestions/conflict.js +67 -0
- package/dist/ai-suggestions/text-positions.d.ts +21 -0
- package/dist/ai-suggestions/text-positions.js +48 -0
- package/dist/ai-suggestions/types.d.ts +199 -0
- package/dist/ai-suggestions/types.js +59 -0
- package/dist/content-controls/errors.d.ts +52 -0
- package/dist/content-controls/errors.js +36 -0
- package/dist/content-controls/findContentControls.d.ts +55 -0
- package/dist/content-controls/findContentControls.js +75 -0
- package/dist/content-controls/index.d.ts +4 -0
- package/dist/content-controls/index.js +4 -0
- package/dist/content-controls/mutateContentControls.d.ts +51 -0
- package/dist/content-controls/mutateContentControls.js +377 -0
- package/dist/controller/folioEditor.d.ts +21 -0
- package/dist/controller/folioEditor.js +29 -0
- package/dist/controller/folioEditorEvents.d.ts +23 -0
- package/dist/controller/folioEditorEvents.js +24 -0
- package/dist/controller/hiddenEditorApi.d.ts +35 -0
- package/dist/controller/hiddenEditorApi.js +112 -0
- package/dist/controller/hiddenEditorManager.d.ts +93 -0
- package/dist/controller/hiddenEditorManager.js +308 -0
- package/dist/controller/layoutPipeline.d.ts +63 -0
- package/dist/controller/layoutPipeline.js +406 -0
- package/dist/controller/layoutScheduler.d.ts +41 -0
- package/dist/controller/layoutScheduler.js +59 -0
- package/dist/controller/layoutSession.d.ts +24 -0
- package/dist/controller/layoutSession.js +13 -0
- package/dist/docx/blockContentParser.d.ts +13 -0
- package/dist/docx/blockContentParser.js +289 -0
- package/dist/docx/bookmarkParser.d.ts +178 -0
- package/dist/docx/bookmarkParser.js +246 -0
- package/dist/docx/bookmarkPlacement.d.ts +10 -0
- package/dist/docx/bookmarkPlacement.js +50 -0
- package/dist/docx/bulletMarkers.d.ts +4 -0
- package/dist/docx/bulletMarkers.js +42 -0
- package/dist/docx/commentParser.d.ts +34 -0
- package/dist/docx/commentParser.js +127 -0
- package/dist/docx/commentReferenceNormalization.d.ts +25 -0
- package/dist/docx/commentReferenceNormalization.js +97 -0
- package/dist/docx/commentReplyMarkers.d.ts +20 -0
- package/dist/docx/commentReplyMarkers.js +123 -0
- package/dist/docx/compatibility.d.ts +12 -0
- package/dist/docx/compatibility.js +77 -0
- package/dist/docx/documentParser.d.ts +65 -0
- package/dist/docx/documentParser.js +209 -0
- package/dist/docx/drawingUtils.d.ts +56 -0
- package/dist/docx/drawingUtils.js +305 -0
- package/dist/docx/fieldParser.d.ts +228 -0
- package/dist/docx/fieldParser.js +559 -0
- package/dist/docx/footnoteParser.d.ts +109 -0
- package/dist/docx/footnoteParser.js +270 -0
- package/dist/docx/headerFooterParser.d.ts +119 -0
- package/dist/docx/headerFooterParser.js +266 -0
- package/dist/docx/headerFooterRefParser.d.ts +22 -0
- package/dist/docx/headerFooterRefParser.js +52 -0
- package/dist/docx/headerFooterReferenceNormalization.d.ts +19 -0
- package/dist/docx/headerFooterReferenceNormalization.js +64 -0
- package/dist/docx/hyperlinkParser.d.ts +108 -0
- package/dist/docx/hyperlinkParser.js +230 -0
- package/dist/docx/imageParser.d.ts +93 -0
- package/dist/docx/imageParser.js +522 -0
- package/dist/docx/mathToMathml.d.ts +15 -0
- package/dist/docx/mathToMathml.js +357 -0
- package/dist/docx/modelValidation.d.ts +13 -0
- package/dist/docx/modelValidation.js +21 -0
- package/dist/docx/normalizeBaseDirection.d.ts +12 -0
- package/dist/docx/normalizeBaseDirection.js +81 -0
- package/dist/docx/notePropertiesParser.d.ts +16 -0
- package/dist/docx/notePropertiesParser.js +99 -0
- package/dist/docx/numberingParser.d.ts +86 -0
- package/dist/docx/numberingParser.js +735 -0
- package/dist/docx/numberingReferenceNormalization.d.ts +25 -0
- package/dist/docx/numberingReferenceNormalization.js +22 -0
- package/dist/docx/paragraphParser.d.ts +86 -0
- package/dist/docx/paragraphParser.js +1132 -0
- package/dist/docx/paragraphTraversal.d.ts +19 -0
- package/dist/docx/paragraphTraversal.js +76 -0
- package/dist/docx/parser.d.ts +67 -0
- package/dist/docx/parser.js +391 -0
- package/dist/docx/parserEnums.d.ts +45 -0
- package/dist/docx/parserEnums.js +70 -0
- package/dist/docx/relsParser.d.ts +160 -0
- package/dist/docx/relsParser.js +235 -0
- package/dist/docx/replyToComment.d.ts +29 -0
- package/dist/docx/replyToComment.js +73 -0
- package/dist/docx/rezip.d.ts +166 -0
- package/dist/docx/rezip.js +1194 -0
- package/dist/docx/runConsolidator.d.ts +57 -0
- package/dist/docx/runConsolidator.js +224 -0
- package/dist/docx/runParser.d.ts +78 -0
- package/dist/docx/runParser.js +661 -0
- package/dist/docx/sdtProperties.d.ts +15 -0
- package/dist/docx/sdtProperties.js +290 -0
- package/dist/docx/sdtPropertiesPatch.d.ts +16 -0
- package/dist/docx/sdtPropertiesPatch.js +144 -0
- package/dist/docx/sectionParser.d.ts +95 -0
- package/dist/docx/sectionParser.js +534 -0
- package/dist/docx/selectiveSave.d.ts +25 -0
- package/dist/docx/selectiveSave.js +247 -0
- package/dist/docx/selectiveSaveFlags.d.ts +33 -0
- package/dist/docx/selectiveSaveFlags.js +11 -0
- package/dist/docx/selectiveSaveTripwire.d.ts +33 -0
- package/dist/docx/selectiveSaveTripwire.js +79 -0
- package/dist/docx/selectiveXmlPatch.d.ts +103 -0
- package/dist/docx/selectiveXmlPatch.js +493 -0
- package/dist/docx/serializer/blockSdtSerializer.d.ts +6 -0
- package/dist/docx/serializer/blockSdtSerializer.js +88 -0
- package/dist/docx/serializer/borderSerializer.d.ts +25 -0
- package/dist/docx/serializer/borderSerializer.js +44 -0
- package/dist/docx/serializer/commentSerializer.d.ts +31 -0
- package/dist/docx/serializer/commentSerializer.js +184 -0
- package/dist/docx/serializer/documentSerializer.d.ts +65 -0
- package/dist/docx/serializer/documentSerializer.js +199 -0
- package/dist/docx/serializer/headerFooterSerializer.d.ts +12 -0
- package/dist/docx/serializer/headerFooterSerializer.js +84 -0
- package/dist/docx/serializer/noteSerializer.d.ts +19 -0
- package/dist/docx/serializer/noteSerializer.js +70 -0
- package/dist/docx/serializer/numberingSerializer.d.ts +12 -0
- package/dist/docx/serializer/numberingSerializer.js +93 -0
- package/dist/docx/serializer/paragraphSerializer.d.ts +48 -0
- package/dist/docx/serializer/paragraphSerializer.js +559 -0
- package/dist/docx/serializer/runSerializer.d.ts +56 -0
- package/dist/docx/serializer/runSerializer.js +621 -0
- package/dist/docx/serializer/sectionPropertiesSerializer.d.ts +6 -0
- package/dist/docx/serializer/sectionPropertiesSerializer.js +187 -0
- package/dist/docx/serializer/tableSerializer.d.ts +79 -0
- package/dist/docx/serializer/tableSerializer.js +422 -0
- package/dist/docx/serializer/xmlUtils.d.ts +20 -0
- package/dist/docx/serializer/xmlUtils.js +25 -0
- package/dist/docx/settingsParser.d.ts +8 -0
- package/dist/docx/settingsParser.js +36 -0
- package/dist/docx/shapeParser.d.ts +20 -0
- package/dist/docx/shapeParser.js +272 -0
- package/dist/docx/styleParser.d.ts +50 -0
- package/dist/docx/styleParser.js +905 -0
- package/dist/docx/tableParser.d.ts +202 -0
- package/dist/docx/tableParser.js +811 -0
- package/dist/docx/textBoxParser.d.ts +117 -0
- package/dist/docx/textBoxParser.js +262 -0
- package/dist/docx/themeParser.d.ts +77 -0
- package/dist/docx/themeParser.js +330 -0
- package/dist/docx/trackedMoveRangeNormalization.d.ts +22 -0
- package/dist/docx/trackedMoveRangeNormalization.js +100 -0
- package/dist/docx/unzip.d.ts +118 -0
- package/dist/docx/unzip.js +383 -0
- package/dist/docx/vmlImageParser.d.ts +16 -0
- package/dist/docx/vmlImageParser.js +100 -0
- package/dist/docx/watermarkParser.d.ts +45 -0
- package/dist/docx/watermarkParser.js +348 -0
- package/dist/docx/wrapTypes.d.ts +29 -0
- package/dist/docx/wrapTypes.js +48 -0
- package/dist/docx/xmlParser.d.ts +297 -0
- package/dist/docx/xmlParser.js +527 -0
- package/dist/fields/bookmarkPages.d.ts +13 -0
- package/dist/fields/bookmarkPages.js +66 -0
- package/dist/fields/bookmarkText.d.ts +16 -0
- package/dist/fields/bookmarkText.js +61 -0
- package/dist/fields/evaluateField.d.ts +23 -0
- package/dist/fields/evaluateField.js +77 -0
- package/dist/fields/fieldContext.d.ts +21 -0
- package/dist/fields/fieldContext.js +0 -0
- package/dist/fields/resolveFieldValues.d.ts +44 -0
- package/dist/fields/resolveFieldValues.js +204 -0
- package/dist/fields/sectionPageCounts.d.ts +11 -0
- package/dist/fields/sectionPageCounts.js +16 -0
- package/dist/fields/seqValues.d.ts +14 -0
- package/dist/fields/seqValues.js +36 -0
- package/dist/fonts/embeddedFontTable.d.ts +42 -0
- package/dist/fonts/embeddedFontTable.js +80 -0
- package/dist/fonts/embeddedFonts.d.ts +46 -0
- package/dist/fonts/embeddedFonts.js +112 -0
- package/dist/fonts/fontDeobfuscation.d.ts +30 -0
- package/dist/fonts/fontDeobfuscation.js +57 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +23 -0
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +57 -0
- package/dist/layout-bridge/convert/footnoteLayout.js +316 -0
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +74 -0
- package/dist/layout-bridge/convert/headerFooterLayout.js +432 -0
- package/dist/layout-bridge/convert/templatePreviewFlow.d.ts +36 -0
- package/dist/layout-bridge/convert/templatePreviewFlow.js +176 -0
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +65 -0
- package/dist/layout-bridge/convert/toFlowBlocks.js +1309 -0
- package/dist/layout-bridge/convert/wrapEditorViewAsSurface.d.ts +17 -0
- package/dist/layout-bridge/convert/wrapEditorViewAsSurface.js +36 -0
- package/dist/layout-bridge/dom/clickToPositionDom.d.ts +66 -0
- package/dist/layout-bridge/dom/clickToPositionDom.js +304 -0
- package/dist/layout-bridge/dom/findBodyPmSpans.d.ts +7 -0
- package/dist/layout-bridge/dom/findBodyPmSpans.js +17 -0
- package/dist/layout-bridge/dom/findHfPmSpans.d.ts +62 -0
- package/dist/layout-bridge/dom/findHfPmSpans.js +197 -0
- package/dist/layout-bridge/engine/clickToPosition.d.ts +66 -0
- package/dist/layout-bridge/engine/clickToPosition.js +403 -0
- package/dist/layout-bridge/engine/hitTest.d.ts +135 -0
- package/dist/layout-bridge/engine/hitTest.js +375 -0
- package/dist/layout-bridge/engine/measuring/index.d.ts +10 -0
- package/dist/layout-bridge/engine/measuring/index.js +9 -0
- package/dist/layout-bridge/engine/selectionRects.d.ts +59 -0
- package/dist/layout-bridge/engine/selectionRects.js +485 -0
- package/dist/layout-bridge/engine/tableWidthUtils.d.ts +7 -0
- package/dist/layout-bridge/engine/tableWidthUtils.js +25 -0
- package/dist/layout-engine/index.d.ts +44 -0
- package/dist/layout-engine/index.js +691 -0
- package/dist/layout-engine/keep-together.d.ts +43 -0
- package/dist/layout-engine/keep-together.js +98 -0
- package/dist/layout-engine/layoutInstrumentation.d.ts +50 -0
- package/dist/layout-engine/layoutInstrumentation.js +43 -0
- package/dist/layout-engine/lineFlow.d.ts +8 -0
- package/dist/layout-engine/lineFlow.js +17 -0
- package/dist/layout-engine/measure/cache.d.ts +93 -0
- package/dist/layout-engine/measure/cache.js +245 -0
- package/dist/layout-engine/measure/clampFloatingWrapMargins.d.ts +20 -0
- package/dist/layout-engine/measure/clampFloatingWrapMargins.js +29 -0
- package/dist/layout-engine/measure/featureFlags.d.ts +44 -0
- package/dist/layout-engine/measure/featureFlags.js +19 -0
- package/dist/layout-engine/measure/floatingZones.d.ts +89 -0
- package/dist/layout-engine/measure/floatingZones.js +152 -0
- package/dist/layout-engine/measure/font-metrics.worker.d.ts +17 -0
- package/dist/layout-engine/measure/font-metrics.worker.js +104 -0
- package/dist/layout-engine/measure/index.d.ts +9 -0
- package/dist/layout-engine/measure/index.js +8 -0
- package/dist/layout-engine/measure/listMarkerWidth.d.ts +40 -0
- package/dist/layout-engine/measure/listMarkerWidth.js +76 -0
- package/dist/layout-engine/measure/measureBlocks.d.ts +25 -0
- package/dist/layout-engine/measure/measureBlocks.js +450 -0
- package/dist/layout-engine/measure/measureContainer.d.ts +24 -0
- package/dist/layout-engine/measure/measureContainer.js +280 -0
- package/dist/layout-engine/measure/measureHelpers.d.ts +82 -0
- package/dist/layout-engine/measure/measureHelpers.js +156 -0
- package/dist/layout-engine/measure/measureParagraph.d.ts +61 -0
- package/dist/layout-engine/measure/measureParagraph.js +724 -0
- package/dist/layout-engine/measure/measureProvider.d.ts +23 -0
- package/dist/layout-engine/measure/measureProvider.js +35 -0
- package/dist/layout-engine/measure/measureTypes.d.ts +61 -0
- package/dist/layout-engine/measure/measureTypes.js +0 -0
- package/dist/layout-engine/measure/measureWorker.d.ts +54 -0
- package/dist/layout-engine/measure/measureWorker.js +249 -0
- package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +88 -0
- package/dist/layout-engine/measure/measureWorkerProtocol.js +20 -0
- package/dist/layout-engine/measure/tableCellFloating.d.ts +26 -0
- package/dist/layout-engine/measure/tableCellFloating.js +99 -0
- package/dist/layout-engine/paginator.d.ts +84 -0
- package/dist/layout-engine/paginator.js +348 -0
- package/dist/layout-engine/paragraphFragmentRange.d.ts +9 -0
- package/dist/layout-engine/paragraphFragmentRange.js +40 -0
- package/dist/layout-engine/section-breaks.d.ts +78 -0
- package/dist/layout-engine/section-breaks.js +182 -0
- package/dist/layout-engine/tableRowBreak.d.ts +23 -0
- package/dist/layout-engine/tableRowBreak.js +147 -0
- package/dist/layout-engine/textBoxFlow.d.ts +50 -0
- package/dist/layout-engine/textBoxFlow.js +160 -0
- package/dist/layout-engine/types.d.ts +1031 -0
- package/dist/layout-engine/types.js +100 -0
- package/dist/layout-painter/documentColors.d.ts +4 -0
- package/dist/layout-painter/documentColors.js +40 -0
- package/dist/layout-painter/index.d.ts +110 -0
- package/dist/layout-painter/index.js +182 -0
- package/dist/layout-painter/registry/modules/image.d.ts +6 -0
- package/dist/layout-painter/registry/modules/image.js +17 -0
- package/dist/layout-painter/registry/modules/paragraph.d.ts +6 -0
- package/dist/layout-painter/registry/modules/paragraph.js +18 -0
- package/dist/layout-painter/registry/modules/table.d.ts +6 -0
- package/dist/layout-painter/registry/modules/table.js +16 -0
- package/dist/layout-painter/registry/modules/textBox.d.ts +6 -0
- package/dist/layout-painter/registry/modules/textBox.js +13 -0
- package/dist/layout-painter/registry/modules.d.ts +6 -0
- package/dist/layout-painter/registry/modules.js +26 -0
- package/dist/layout-painter/registry/registry.d.ts +24 -0
- package/dist/layout-painter/registry/registry.js +53 -0
- package/dist/layout-painter/registry/types.d.ts +61 -0
- package/dist/layout-painter/registry/types.js +0 -0
- package/dist/layout-painter/renderFragment.d.ts +32 -0
- package/dist/layout-painter/renderFragment.js +114 -0
- package/dist/layout-painter/renderImage.d.ts +88 -0
- package/dist/layout-painter/renderImage.js +130 -0
- package/dist/layout-painter/renderPage.d.ts +264 -0
- package/dist/layout-painter/renderPage.js +1795 -0
- package/dist/layout-painter/renderParagraph.d.ts +93 -0
- package/dist/layout-painter/renderParagraph.js +1300 -0
- package/dist/layout-painter/renderTable.d.ts +36 -0
- package/dist/layout-painter/renderTable.js +432 -0
- package/dist/layout-painter/renderTextBox.d.ts +22 -0
- package/dist/layout-painter/renderTextBox.js +67 -0
- package/dist/layout-painter/renderUtils.d.ts +42 -0
- package/dist/layout-painter/renderUtils.js +30 -0
- package/dist/layout-painter/renderWatermark.d.ts +16 -0
- package/dist/layout-painter/renderWatermark.js +61 -0
- package/dist/layout-painter/sdtBoundary.d.ts +6 -0
- package/dist/layout-painter/sdtBoundary.js +28 -0
- package/dist/managers/ContextMenuManager.d.ts +28 -0
- package/dist/managers/ContextMenuManager.js +48 -0
- package/dist/managers/DocumentLoaderManager.d.ts +47 -0
- package/dist/managers/DocumentLoaderManager.js +69 -0
- package/dist/managers/EditorModeManager.d.ts +28 -0
- package/dist/managers/EditorModeManager.js +50 -0
- package/dist/managers/ErrorManager.d.ts +26 -0
- package/dist/managers/ErrorManager.js +85 -0
- package/dist/managers/FindReplaceManager.d.ts +54 -0
- package/dist/managers/FindReplaceManager.js +104 -0
- package/dist/managers/HistoryManager.d.ts +92 -0
- package/dist/managers/HistoryManager.js +193 -0
- package/dist/managers/Subscribable.d.ts +34 -0
- package/dist/managers/Subscribable.js +46 -0
- package/dist/managers/TableSelectionManager.d.ts +74 -0
- package/dist/managers/TableSelectionManager.js +225 -0
- package/dist/managers/editorShortcuts.d.ts +42 -0
- package/dist/managers/editorShortcuts.js +60 -0
- package/dist/managers/types.d.ts +41 -0
- package/dist/managers/types.js +0 -0
- package/dist/markdown/annotations.d.ts +14 -0
- package/dist/markdown/annotations.js +42 -0
- package/dist/markdown/escape.d.ts +36 -0
- package/dist/markdown/escape.js +59 -0
- package/dist/markdown/fromMarkdown.d.ts +11 -0
- package/dist/markdown/fromMarkdown.js +223 -0
- package/dist/markdown/headings.d.ts +13 -0
- package/dist/markdown/headings.js +20 -0
- package/dist/markdown/images.d.ts +13 -0
- package/dist/markdown/images.js +63 -0
- package/dist/markdown/index.d.ts +18 -0
- package/dist/markdown/index.js +33 -0
- package/dist/markdown/internals.d.ts +15 -0
- package/dist/markdown/internals.js +35 -0
- package/dist/markdown/renderBlock.d.ts +7 -0
- package/dist/markdown/renderBlock.js +68 -0
- package/dist/markdown/renderParagraph.d.ts +11 -0
- package/dist/markdown/renderParagraph.js +64 -0
- package/dist/markdown/renderRuns.d.ts +11 -0
- package/dist/markdown/renderRuns.js +265 -0
- package/dist/markdown/renderTable.d.ts +8 -0
- package/dist/markdown/renderTable.js +229 -0
- package/dist/markdown/trailers.d.ts +13 -0
- package/dist/markdown/trailers.js +54 -0
- package/dist/markdown/types.d.ts +118 -0
- package/dist/markdown/types.js +0 -0
- package/dist/model.d.ts +13 -0
- package/dist/model.js +4 -0
- package/dist/paged-layout/LayoutSelectionGate.d.ts +80 -0
- package/dist/paged-layout/LayoutSelectionGate.js +131 -0
- package/dist/paged-layout/headerFooterMargins.d.ts +73 -0
- package/dist/paged-layout/headerFooterMargins.js +120 -0
- package/dist/paged-layout/hiddenEditorScroll.d.ts +4 -0
- package/dist/paged-layout/hiddenEditorScroll.js +4 -0
- package/dist/paged-layout/incrementalMeasure.d.ts +33 -0
- package/dist/paged-layout/incrementalMeasure.js +56 -0
- package/dist/paged-layout/rangeProjection.d.ts +51 -0
- package/dist/paged-layout/rangeProjection.js +153 -0
- package/dist/paged-layout/readOnlyEditAttempt.d.ts +5 -0
- package/dist/paged-layout/readOnlyEditAttempt.js +22 -0
- package/dist/paged-layout/scrollNavigation.d.ts +23 -0
- package/dist/paged-layout/scrollNavigation.js +31 -0
- package/dist/paged-layout/scrollPageInfo.d.ts +41 -0
- package/dist/paged-layout/scrollPageInfo.js +34 -0
- package/dist/paged-layout/scrollToPmPosition.d.ts +17 -0
- package/dist/paged-layout/scrollToPmPosition.js +95 -0
- package/dist/paged-layout/sectionBlockWidths.d.ts +35 -0
- package/dist/paged-layout/sectionBlockWidths.js +52 -0
- package/dist/paged-layout/sectionGeometry.d.ts +21 -0
- package/dist/paged-layout/sectionGeometry.js +36 -0
- package/dist/paged-layout/selectionViewportRect.d.ts +29 -0
- package/dist/paged-layout/selectionViewportRect.js +55 -0
- package/dist/paged-layout/tableColumnResize.d.ts +19 -0
- package/dist/paged-layout/tableColumnResize.js +28 -0
- package/dist/paged-layout/tableInsertButtonGeometry.d.ts +15 -0
- package/dist/paged-layout/tableInsertButtonGeometry.js +15 -0
- package/dist/paged-layout/transactionDirtyRange.d.ts +7 -0
- package/dist/paged-layout/transactionDirtyRange.js +27 -0
- package/dist/paged-layout/zoomScrollAnchor.d.ts +40 -0
- package/dist/paged-layout/zoomScrollAnchor.js +25 -0
- package/dist/prosemirror/attrs/index.d.ts +80 -0
- package/dist/prosemirror/attrs/index.js +1218 -0
- package/dist/prosemirror/autospacingBase.d.ts +11 -0
- package/dist/prosemirror/autospacingBase.js +16 -0
- package/dist/prosemirror/commands/comments.d.ts +93 -0
- package/dist/prosemirror/commands/comments.js +435 -0
- package/dist/prosemirror/commands/contentControls.d.ts +45 -0
- package/dist/prosemirror/commands/contentControls.js +294 -0
- package/dist/prosemirror/commands/contentControlsBlockFill.d.ts +15 -0
- package/dist/prosemirror/commands/contentControlsBlockFill.js +19 -0
- package/dist/prosemirror/commands/formatPainter.d.ts +31 -0
- package/dist/prosemirror/commands/formatPainter.js +130 -0
- package/dist/prosemirror/commands/formatting.d.ts +32 -0
- package/dist/prosemirror/commands/formatting.js +45 -0
- package/dist/prosemirror/commands/hyperlink.d.ts +31 -0
- package/dist/prosemirror/commands/hyperlink.js +79 -0
- package/dist/prosemirror/commands/image.d.ts +59 -0
- package/dist/prosemirror/commands/image.js +219 -0
- package/dist/prosemirror/commands/index.d.ts +13 -0
- package/dist/prosemirror/commands/index.js +13 -0
- package/dist/prosemirror/commands/pageBreak.d.ts +10 -0
- package/dist/prosemirror/commands/pageBreak.js +47 -0
- package/dist/prosemirror/commands/paragraph.d.ts +39 -0
- package/dist/prosemirror/commands/paragraph.js +64 -0
- package/dist/prosemirror/commands/pastePlainText.d.ts +39 -0
- package/dist/prosemirror/commands/pastePlainText.js +67 -0
- package/dist/prosemirror/commands/table.d.ts +83 -0
- package/dist/prosemirror/commands/table.js +105 -0
- package/dist/prosemirror/conversion/fromProseDoc.d.ts +27 -0
- package/dist/prosemirror/conversion/fromProseDoc.js +1550 -0
- package/dist/prosemirror/conversion/index.d.ts +4 -0
- package/dist/prosemirror/conversion/index.js +4 -0
- package/dist/prosemirror/conversion/runShadingMark.d.ts +16 -0
- package/dist/prosemirror/conversion/runShadingMark.js +39 -0
- package/dist/prosemirror/conversion/toProseDoc.d.ts +39 -0
- package/dist/prosemirror/conversion/toProseDoc.js +1404 -0
- package/dist/prosemirror/extensions/ExtensionManager.d.ts +43 -0
- package/dist/prosemirror/extensions/ExtensionManager.js +86 -0
- package/dist/prosemirror/extensions/StarterKit.d.ts +16 -0
- package/dist/prosemirror/extensions/StarterKit.js +132 -0
- package/dist/prosemirror/extensions/core/DocExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/core/DocExtension.js +12 -0
- package/dist/prosemirror/extensions/core/HistoryExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/core/HistoryExtension.js +28 -0
- package/dist/prosemirror/extensions/core/ParagraphExtension.d.ts +25 -0
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +619 -0
- package/dist/prosemirror/extensions/core/TextExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/core/TextExtension.js +12 -0
- package/dist/prosemirror/extensions/create.d.ts +17 -0
- package/dist/prosemirror/extensions/create.js +129 -0
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.d.ts +23 -0
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.js +106 -0
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.d.ts +8 -0
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +172 -0
- package/dist/prosemirror/extensions/features/BidiShortcutExtension.d.ts +16 -0
- package/dist/prosemirror/extensions/features/BidiShortcutExtension.js +38 -0
- package/dist/prosemirror/extensions/features/ContentControlWidgetsExtension.d.ts +16 -0
- package/dist/prosemirror/extensions/features/ContentControlWidgetsExtension.js +21 -0
- package/dist/prosemirror/extensions/features/DropCursorExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/features/DropCursorExtension.js +20 -0
- package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.d.ts +8 -0
- package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.js +44 -0
- package/dist/prosemirror/extensions/features/GapCursorExtension.d.ts +19 -0
- package/dist/prosemirror/extensions/features/GapCursorExtension.js +24 -0
- package/dist/prosemirror/extensions/features/ImageDragExtension.d.ts +15 -0
- package/dist/prosemirror/extensions/features/ImageDragExtension.js +66 -0
- package/dist/prosemirror/extensions/features/ImagePasteExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/features/ImagePasteExtension.js +91 -0
- package/dist/prosemirror/extensions/features/ListExtension.d.ts +14 -0
- package/dist/prosemirror/extensions/features/ListExtension.js +340 -0
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +60 -0
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +35 -0
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +188 -0
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.d.ts +20 -0
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.js +34 -0
- package/dist/prosemirror/extensions/features/PasteStyleInlinerExtension.d.ts +20 -0
- package/dist/prosemirror/extensions/features/PasteStyleInlinerExtension.js +145 -0
- package/dist/prosemirror/extensions/features/SelectionTrackerExtension.d.ts +10 -0
- package/dist/prosemirror/extensions/features/SelectionTrackerExtension.js +17 -0
- package/dist/prosemirror/extensions/features/bidiShortcutController.d.ts +31 -0
- package/dist/prosemirror/extensions/features/bidiShortcutController.js +27 -0
- package/dist/prosemirror/extensions/features/pasteCleanup.d.ts +31 -0
- package/dist/prosemirror/extensions/features/pasteCleanup.js +159 -0
- package/dist/prosemirror/extensions/marks/AllCapsExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/AllCapsExtension.js +24 -0
- package/dist/prosemirror/extensions/marks/BoldExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/BoldExtension.js +41 -0
- package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.d.ts +14 -0
- package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.js +64 -0
- package/dist/prosemirror/extensions/marks/CharacterStyleExtension.d.ts +23 -0
- package/dist/prosemirror/extensions/marks/CharacterStyleExtension.js +47 -0
- package/dist/prosemirror/extensions/marks/CommentExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/marks/CommentExtension.js +38 -0
- package/dist/prosemirror/extensions/marks/FontFamilyExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/FontFamilyExtension.js +55 -0
- package/dist/prosemirror/extensions/marks/FontSizeExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/FontSizeExtension.js +47 -0
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.d.ts +11 -0
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.js +92 -0
- package/dist/prosemirror/extensions/marks/HiddenTextExtension.d.ts +23 -0
- package/dist/prosemirror/extensions/marks/HiddenTextExtension.js +35 -0
- package/dist/prosemirror/extensions/marks/HighlightExtension.d.ts +10 -0
- package/dist/prosemirror/extensions/marks/HighlightExtension.js +115 -0
- package/dist/prosemirror/extensions/marks/HyperlinkExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/marks/HyperlinkExtension.js +146 -0
- package/dist/prosemirror/extensions/marks/ItalicExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/ItalicExtension.js +34 -0
- package/dist/prosemirror/extensions/marks/RtlExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/marks/RtlExtension.js +21 -0
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.d.ts +11 -0
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.js +75 -0
- package/dist/prosemirror/extensions/marks/RunShadingExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/marks/RunShadingExtension.js +38 -0
- package/dist/prosemirror/extensions/marks/SmallCapsExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/SmallCapsExtension.js +24 -0
- package/dist/prosemirror/extensions/marks/StrikeExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/StrikeExtension.js +33 -0
- package/dist/prosemirror/extensions/marks/SubscriptExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/SubscriptExtension.js +25 -0
- package/dist/prosemirror/extensions/marks/SuperscriptExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/SuperscriptExtension.js +25 -0
- package/dist/prosemirror/extensions/marks/TextColorExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/TextColorExtension.js +50 -0
- package/dist/prosemirror/extensions/marks/TextEffectExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/marks/TextEffectExtension.js +35 -0
- package/dist/prosemirror/extensions/marks/TextEffectsExtensions.d.ts +31 -0
- package/dist/prosemirror/extensions/marks/TextEffectsExtensions.js +134 -0
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.d.ts +22 -0
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.js +113 -0
- package/dist/prosemirror/extensions/marks/UnderlineExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/UnderlineExtension.js +60 -0
- package/dist/prosemirror/extensions/marks/markUtils.d.ts +34 -0
- package/dist/prosemirror/extensions/marks/markUtils.js +233 -0
- package/dist/prosemirror/extensions/nodes/BlockSdtExtension.d.ts +22 -0
- package/dist/prosemirror/extensions/nodes/BlockSdtExtension.js +122 -0
- package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/nodes/FieldExtension.js +87 -0
- package/dist/prosemirror/extensions/nodes/HardBreakExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/HardBreakExtension.js +38 -0
- package/dist/prosemirror/extensions/nodes/HorizontalRuleExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/HorizontalRuleExtension.js +18 -0
- package/dist/prosemirror/extensions/nodes/ImageExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/ImageExtension.js +132 -0
- package/dist/prosemirror/extensions/nodes/MathExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/nodes/MathExtension.js +56 -0
- package/dist/prosemirror/extensions/nodes/PageBreakExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/PageBreakExtension.js +20 -0
- package/dist/prosemirror/extensions/nodes/SdtExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/nodes/SdtExtension.js +107 -0
- package/dist/prosemirror/extensions/nodes/ShapeExtension.d.ts +30 -0
- package/dist/prosemirror/extensions/nodes/ShapeExtension.js +502 -0
- package/dist/prosemirror/extensions/nodes/TabExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/TabExtension.js +27 -0
- package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +34 -0
- package/dist/prosemirror/extensions/nodes/TableExtension.js +1972 -0
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.d.ts +34 -0
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +150 -0
- package/dist/prosemirror/extensions/types.d.ts +101 -0
- package/dist/prosemirror/extensions/types.js +10 -0
- package/dist/prosemirror/findReplaceSelection.d.ts +23 -0
- package/dist/prosemirror/findReplaceSelection.js +86 -0
- package/dist/prosemirror/index.d.ts +25 -0
- package/dist/prosemirror/index.js +23 -0
- package/dist/prosemirror/insertOperations.d.ts +12 -0
- package/dist/prosemirror/insertOperations.js +19 -0
- package/dist/prosemirror/paragraphDirection.d.ts +42 -0
- package/dist/prosemirror/paragraphDirection.js +33 -0
- package/dist/prosemirror/plugins/aiCitationDecorations.d.ts +40 -0
- package/dist/prosemirror/plugins/aiCitationDecorations.js +90 -0
- package/dist/prosemirror/plugins/aiSuggestionDecorations.d.ts +42 -0
- package/dist/prosemirror/plugins/aiSuggestionDecorations.js +135 -0
- package/dist/prosemirror/plugins/anonymizationDecorations.d.ts +60 -0
- package/dist/prosemirror/plugins/anonymizationDecorations.js +120 -0
- package/dist/prosemirror/plugins/autocompleteSuggestion.d.ts +123 -0
- package/dist/prosemirror/plugins/autocompleteSuggestion.js +283 -0
- package/dist/prosemirror/plugins/contentControlWidgets.d.ts +56 -0
- package/dist/prosemirror/plugins/contentControlWidgets.js +192 -0
- package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +37 -0
- package/dist/prosemirror/plugins/createDocScanPlugin.js +55 -0
- package/dist/prosemirror/plugins/documentStyles.d.ts +18 -0
- package/dist/prosemirror/plugins/documentStyles.js +46 -0
- package/dist/prosemirror/plugins/index.d.ts +3 -0
- package/dist/prosemirror/plugins/index.js +3 -0
- package/dist/prosemirror/plugins/pmTextScan.d.ts +19 -0
- package/dist/prosemirror/plugins/pmTextScan.js +39 -0
- package/dist/prosemirror/plugins/selectionTracker.d.ts +43 -0
- package/dist/prosemirror/plugins/selectionTracker.js +179 -0
- package/dist/prosemirror/plugins/suggestionMode.d.ts +70 -0
- package/dist/prosemirror/plugins/suggestionMode.js +489 -0
- package/dist/prosemirror/plugins/templateDirectives.d.ts +25 -0
- package/dist/prosemirror/plugins/templateDirectives.js +67 -0
- package/dist/prosemirror/plugins/templatePreviewValues.d.ts +49 -0
- package/dist/prosemirror/plugins/templatePreviewValues.js +117 -0
- package/dist/prosemirror/plugins/templateSlashMenu.d.ts +57 -0
- package/dist/prosemirror/plugins/templateSlashMenu.js +184 -0
- package/dist/prosemirror/schema/index.d.ts +15 -0
- package/dist/prosemirror/schema/index.js +20 -0
- package/dist/prosemirror/schema/marks.d.ts +118 -0
- package/dist/prosemirror/schema/marks.js +0 -0
- package/dist/prosemirror/schema/nodes.d.ts +389 -0
- package/dist/prosemirror/schema/nodes.js +0 -0
- package/dist/prosemirror/selectionState.d.ts +23 -0
- package/dist/prosemirror/selectionState.js +111 -0
- package/dist/prosemirror/styles/index.d.ts +2 -0
- package/dist/prosemirror/styles/index.js +2 -0
- package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +32 -0
- package/dist/prosemirror/styles/resolvedStyleAttrs.js +108 -0
- package/dist/prosemirror/styles/styleResolver.d.ts +94 -0
- package/dist/prosemirror/styles/styleResolver.js +200 -0
- package/dist/prosemirror/utils/findParagraphByParaId.d.ts +26 -0
- package/dist/prosemirror/utils/findParagraphByParaId.js +37 -0
- package/dist/prosemirror/utils/tabCalculator.d.ts +110 -0
- package/dist/prosemirror/utils/tabCalculator.js +137 -0
- package/dist/prosemirror/validation.d.ts +20 -0
- package/dist/prosemirror/validation.js +177 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.js +6 -0
- package/dist/style-engine/index.d.ts +3 -0
- package/dist/style-engine/index.js +2 -0
- package/dist/style-engine/styleEngine.d.ts +67 -0
- package/dist/style-engine/styleEngine.js +70 -0
- package/dist/types/block-id.d.ts +58 -0
- package/dist/types/block-id.js +61 -0
- package/dist/types/colors.d.ts +2 -0
- package/dist/types/colors.js +0 -0
- package/dist/types/content.d.ts +2 -0
- package/dist/types/content.js +0 -0
- package/dist/types/document.d.ts +7 -0
- package/dist/types/document.js +0 -0
- package/dist/types/documentEnumValues.d.ts +89 -0
- package/dist/types/documentEnumValues.js +693 -0
- package/dist/types/formatting.d.ts +2 -0
- package/dist/types/formatting.js +0 -0
- package/dist/types/index.d.ts +107 -0
- package/dist/types/index.js +0 -0
- package/dist/utils/authorColors.d.ts +16 -0
- package/dist/utils/authorColors.js +30 -0
- package/dist/utils/baseDirection.d.ts +23 -0
- package/dist/utils/baseDirection.js +34 -0
- package/dist/utils/clipboard.d.ts +126 -0
- package/dist/utils/clipboard.js +622 -0
- package/dist/utils/colorResolver.d.ts +158 -0
- package/dist/utils/colorResolver.js +557 -0
- package/dist/utils/createDocument.d.ts +50 -0
- package/dist/utils/createDocument.js +262 -0
- package/dist/utils/documentLoaderBehavior.d.ts +22 -0
- package/dist/utils/documentLoaderBehavior.js +14 -0
- package/dist/utils/docxInput.d.ts +22 -0
- package/dist/utils/docxInput.js +16 -0
- package/dist/utils/domGuards.d.ts +59 -0
- package/dist/utils/domGuards.js +82 -0
- package/dist/utils/fontFamilyMerge.d.ts +7 -0
- package/dist/utils/fontFamilyMerge.js +31 -0
- package/dist/utils/fontLoader.d.ts +50 -0
- package/dist/utils/fontLoader.js +177 -0
- package/dist/utils/fontResolver.d.ts +61 -0
- package/dist/utils/fontResolver.js +651 -0
- package/dist/utils/fontWeights.d.ts +4 -0
- package/dist/utils/fontWeights.js +4 -0
- package/dist/utils/formatToStyle.d.ts +103 -0
- package/dist/utils/formatToStyle.js +289 -0
- package/dist/utils/headerFooter.d.ts +74 -0
- package/dist/utils/headerFooter.js +257 -0
- package/dist/utils/headingCollector.d.ts +22 -0
- package/dist/utils/headingCollector.js +36 -0
- package/dist/utils/hexId.d.ts +33 -0
- package/dist/utils/hexId.js +37 -0
- package/dist/utils/imageValidation.d.ts +5 -0
- package/dist/utils/imageValidation.js +31 -0
- package/dist/utils/paragraphFormattingMerge.d.ts +14 -0
- package/dist/utils/paragraphFormattingMerge.js +68 -0
- package/dist/utils/replaceText.d.ts +17 -0
- package/dist/utils/replaceText.js +161 -0
- package/dist/utils/rotationBoundingBox.d.ts +12 -0
- package/dist/utils/rotationBoundingBox.js +36 -0
- package/dist/utils/scriptSegments.d.ts +36 -0
- package/dist/utils/scriptSegments.js +52 -0
- package/dist/utils/tableOperations.d.ts +87 -0
- package/dist/utils/tableOperations.js +259 -0
- package/dist/utils/textFormattingMerge.d.ts +6 -0
- package/dist/utils/textFormattingMerge.js +31 -0
- package/dist/utils/tiffConverter.d.ts +18 -0
- package/dist/utils/tiffConverter.js +83 -0
- package/dist/utils/units.d.ts +99 -0
- package/dist/utils/units.js +139 -0
- package/dist/utils/urlSecurity.d.ts +7 -0
- package/dist/utils/urlSecurity.js +65 -0
- package/dist/watermark/index.d.ts +39 -0
- package/dist/watermark/index.js +149 -0
- package/package.json +122 -2
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
import { XMLBuilder, XMLParser } from "fast-xml-parser";
|
|
2
|
+
import { OOXML_NS } from "@stll/docx-utils";
|
|
3
|
+
//#region src/docx/xmlParser.ts
|
|
4
|
+
/**
|
|
5
|
+
* XML Parser Utilities for OOXML
|
|
6
|
+
*
|
|
7
|
+
* Provides helper functions for parsing Office Open XML (OOXML) content
|
|
8
|
+
* with proper namespace handling.
|
|
9
|
+
*
|
|
10
|
+
* OOXML uses many namespaces:
|
|
11
|
+
* - w: WordprocessingML (main document content)
|
|
12
|
+
* - a: DrawingML (graphics)
|
|
13
|
+
* - r: Relationships
|
|
14
|
+
* - wp: Word Drawing positioning
|
|
15
|
+
* - wps: Word Drawing shapes
|
|
16
|
+
* - wpc: Word Drawing canvas
|
|
17
|
+
* - wpg: Word Drawing group
|
|
18
|
+
* - m: Math
|
|
19
|
+
* - mc: Markup Compatibility
|
|
20
|
+
* - v: VML (legacy vector graphics)
|
|
21
|
+
* - o: Office (extensions)
|
|
22
|
+
* - pic: Pictures
|
|
23
|
+
*/
|
|
24
|
+
const fxpParserOptions = {
|
|
25
|
+
preserveOrder: true,
|
|
26
|
+
ignoreAttributes: false,
|
|
27
|
+
attributeNamePrefix: "",
|
|
28
|
+
trimValues: false,
|
|
29
|
+
textNodeName: "#text",
|
|
30
|
+
parseTagValue: false,
|
|
31
|
+
parseAttributeValue: false,
|
|
32
|
+
ignoreDeclaration: true,
|
|
33
|
+
ignorePiTags: true,
|
|
34
|
+
processEntities: true,
|
|
35
|
+
htmlEntities: true
|
|
36
|
+
};
|
|
37
|
+
const fxpParserOptionsWithStopNodes = {
|
|
38
|
+
...fxpParserOptions,
|
|
39
|
+
stopNodes: ["*.w:binData"]
|
|
40
|
+
};
|
|
41
|
+
const fxpBuilderOptions = {
|
|
42
|
+
preserveOrder: true,
|
|
43
|
+
ignoreAttributes: false,
|
|
44
|
+
attributeNamePrefix: "",
|
|
45
|
+
textNodeName: "#text",
|
|
46
|
+
suppressEmptyNode: true
|
|
47
|
+
};
|
|
48
|
+
const fxpParser = new XMLParser(fxpParserOptions);
|
|
49
|
+
const fxpParserWithStopNodes = new XMLParser(fxpParserOptionsWithStopNodes);
|
|
50
|
+
const fxpBuilder = new XMLBuilder(fxpBuilderOptions);
|
|
51
|
+
/** Text node key used by fast-xml-parser in preserveOrder mode. */
|
|
52
|
+
const TEXT_KEY = "#text";
|
|
53
|
+
/** Attribute group key used by fast-xml-parser in preserveOrder mode. */
|
|
54
|
+
const ATTR_KEY = ":@";
|
|
55
|
+
/**
|
|
56
|
+
* Convert a fast-xml-parser preserveOrder node into an XmlElement.
|
|
57
|
+
*
|
|
58
|
+
* In preserveOrder mode every node is an object with exactly one "real" key
|
|
59
|
+
* (the tag name or `#text`) whose value is the children array, plus an
|
|
60
|
+
* optional `:@` key holding the attributes object.
|
|
61
|
+
*/
|
|
62
|
+
function fxpNodeToElement(node) {
|
|
63
|
+
if (TEXT_KEY in node) return {
|
|
64
|
+
type: "text",
|
|
65
|
+
text: node[TEXT_KEY]
|
|
66
|
+
};
|
|
67
|
+
const attrs = node[ATTR_KEY];
|
|
68
|
+
for (const key of Object.keys(node)) {
|
|
69
|
+
if (key === ATTR_KEY) continue;
|
|
70
|
+
const children = node[key];
|
|
71
|
+
const element = {
|
|
72
|
+
type: "element",
|
|
73
|
+
name: key
|
|
74
|
+
};
|
|
75
|
+
if (attrs && Object.keys(attrs).length > 0) element.attributes = attrs;
|
|
76
|
+
if (children.length > 0) element.elements = children.map(fxpNodeToElement);
|
|
77
|
+
return element;
|
|
78
|
+
}
|
|
79
|
+
return { type: "element" };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Convert the top-level fast-xml-parser preserveOrder array into an
|
|
83
|
+
* XmlElement that matches xml-js's non-compact root structure:
|
|
84
|
+
* `{ elements: [...] }`.
|
|
85
|
+
*/
|
|
86
|
+
function fxpToRootElement(nodes) {
|
|
87
|
+
return { elements: nodes.map(fxpNodeToElement) };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Convert an XmlElement back into the fast-xml-parser preserveOrder format
|
|
91
|
+
* so we can feed it to XMLBuilder.
|
|
92
|
+
*/
|
|
93
|
+
function elementToFxpNode(el) {
|
|
94
|
+
if (el.type === "text") return { [TEXT_KEY]: el.text ?? "" };
|
|
95
|
+
const name = el.name ?? "";
|
|
96
|
+
const children = el.elements ? el.elements.map(elementToFxpNode) : [];
|
|
97
|
+
const node = { [name]: children };
|
|
98
|
+
if (el.attributes && Object.keys(el.attributes).length > 0) node[ATTR_KEY] = el.attributes;
|
|
99
|
+
return node;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Common OOXML namespace URIs — re-exported from @stll/docx-utils.
|
|
103
|
+
*/
|
|
104
|
+
const NAMESPACES = OOXML_NS;
|
|
105
|
+
/**
|
|
106
|
+
* Parse XML string into element tree
|
|
107
|
+
*
|
|
108
|
+
* @param xml - XML string to parse
|
|
109
|
+
* @returns Parsed element tree
|
|
110
|
+
*/
|
|
111
|
+
function parseXml(xml) {
|
|
112
|
+
return fxpToRootElement((xml.includes("binData") ? fxpParserWithStopNodes : fxpParser).parse(xml));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Serialize an XmlElement back to an XML string
|
|
116
|
+
*/
|
|
117
|
+
function elementToXml(element) {
|
|
118
|
+
const fxpNode = elementToFxpNode(element);
|
|
119
|
+
return fxpBuilder.build([fxpNode]);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Parse XML string to a more convenient format
|
|
123
|
+
*/
|
|
124
|
+
function parseXmlDocument(xml) {
|
|
125
|
+
try {
|
|
126
|
+
const parsed = parseXml(xml);
|
|
127
|
+
if (parsed.elements && parsed.elements.length > 0) return parsed.elements.find((e) => e.type === "element") ?? null;
|
|
128
|
+
return parsed;
|
|
129
|
+
} catch {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get local name from a prefixed element name
|
|
135
|
+
* e.g., "w:p" -> "p", "a:graphic" -> "graphic"
|
|
136
|
+
*/
|
|
137
|
+
function getLocalName(name) {
|
|
138
|
+
const colonIndex = name.indexOf(":");
|
|
139
|
+
return colonIndex !== -1 ? name.slice(colonIndex + 1) : name;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get namespace prefix from an element name
|
|
143
|
+
* e.g., "w:p" -> "w", "a:graphic" -> "a"
|
|
144
|
+
*/
|
|
145
|
+
function getNamespacePrefix(name) {
|
|
146
|
+
const colonIndex = name.indexOf(":");
|
|
147
|
+
return colonIndex !== -1 ? name.slice(0, colonIndex) : null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if an element matches a given namespaced name
|
|
151
|
+
*
|
|
152
|
+
* @param element - Element to check
|
|
153
|
+
* @param namespace - Namespace prefix (e.g., "w", "a")
|
|
154
|
+
* @param localName - Local element name (e.g., "p", "r")
|
|
155
|
+
*/
|
|
156
|
+
function matchesName(element, namespace, localName) {
|
|
157
|
+
if (!element.name) return false;
|
|
158
|
+
const fullName = `${namespace}:${localName}`;
|
|
159
|
+
if (element.name === fullName) return true;
|
|
160
|
+
if (getLocalName(element.name) === localName) return true;
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Find first child element matching the given namespaced name
|
|
165
|
+
*
|
|
166
|
+
* @param parent - Parent element
|
|
167
|
+
* @param namespace - Namespace prefix (e.g., "w")
|
|
168
|
+
* @param localName - Local element name (e.g., "p")
|
|
169
|
+
* @returns First matching child or null
|
|
170
|
+
*/
|
|
171
|
+
function findChild(parent, namespace, localName) {
|
|
172
|
+
if (!parent || !parent.elements) return null;
|
|
173
|
+
const fullName = `${namespace}:${localName}`;
|
|
174
|
+
for (const child of parent.elements) {
|
|
175
|
+
if (child.type !== "element") continue;
|
|
176
|
+
if (child.name === fullName) return child;
|
|
177
|
+
if (getLocalName(child.name || "") === localName) return child;
|
|
178
|
+
}
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Find all child elements matching the given namespaced name
|
|
183
|
+
*
|
|
184
|
+
* @param parent - Parent element
|
|
185
|
+
* @param namespace - Namespace prefix
|
|
186
|
+
* @param localName - Local element name
|
|
187
|
+
* @returns Array of matching children
|
|
188
|
+
*/
|
|
189
|
+
function findChildren(parent, namespace, localName) {
|
|
190
|
+
if (!parent || !parent.elements) return [];
|
|
191
|
+
const fullName = `${namespace}:${localName}`;
|
|
192
|
+
const results = [];
|
|
193
|
+
for (const child of parent.elements) {
|
|
194
|
+
if (child.type !== "element") continue;
|
|
195
|
+
if (child.name === fullName || getLocalName(child.name || "") === localName) results.push(child);
|
|
196
|
+
}
|
|
197
|
+
return results;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Find first child element by local name only (ignoring namespace)
|
|
201
|
+
*
|
|
202
|
+
* @param parent - Parent element
|
|
203
|
+
* @param localName - Local element name
|
|
204
|
+
* @returns First matching child or null
|
|
205
|
+
*/
|
|
206
|
+
function findChildByLocalName(parent, localName) {
|
|
207
|
+
if (!parent || !parent.elements) return null;
|
|
208
|
+
for (const child of parent.elements) {
|
|
209
|
+
if (child.type !== "element") continue;
|
|
210
|
+
if (getLocalName(child.name || "") === localName) return child;
|
|
211
|
+
}
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Find all child elements by local name only
|
|
216
|
+
*
|
|
217
|
+
* @param parent - Parent element
|
|
218
|
+
* @param localName - Local element name
|
|
219
|
+
* @returns Array of matching children
|
|
220
|
+
*/
|
|
221
|
+
function findChildrenByLocalName(parent, localName) {
|
|
222
|
+
if (!parent || !parent.elements) return [];
|
|
223
|
+
return parent.elements.filter((child) => child.type === "element" && getLocalName(child.name || "") === localName);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Find first child element by full name (including namespace prefix)
|
|
227
|
+
*
|
|
228
|
+
* @param parent - Parent element
|
|
229
|
+
* @param fullName - Full element name with namespace prefix (e.g., 'wp:extent')
|
|
230
|
+
* @returns First matching child or null
|
|
231
|
+
*/
|
|
232
|
+
function findByFullName(parent, fullName) {
|
|
233
|
+
if (!parent || !parent.elements) return null;
|
|
234
|
+
for (const child of parent.elements) {
|
|
235
|
+
if (child.type !== "element") continue;
|
|
236
|
+
if (child.name === fullName) return child;
|
|
237
|
+
}
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get all child elements (excludes text nodes, etc.)
|
|
242
|
+
*
|
|
243
|
+
* @param parent - Parent element
|
|
244
|
+
* @returns Array of child elements
|
|
245
|
+
*/
|
|
246
|
+
function getChildElements(parent) {
|
|
247
|
+
if (!parent || !parent.elements) return [];
|
|
248
|
+
return parent.elements.filter((child) => child.type === "element");
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get an attribute value from an element
|
|
252
|
+
*
|
|
253
|
+
* @param element - Element to get attribute from
|
|
254
|
+
* @param namespace - Namespace prefix for the attribute (or null for no namespace)
|
|
255
|
+
* @param name - Attribute name
|
|
256
|
+
* @returns Attribute value or null if not found
|
|
257
|
+
*
|
|
258
|
+
* Lookup order when a namespace is provided:
|
|
259
|
+
* 1. exact `${namespace}:${name}` match (`w:val`),
|
|
260
|
+
* 2. bare `${name}` match (`val`),
|
|
261
|
+
* 3. any-prefix local-name match (`x:val`, `w14:val`, …).
|
|
262
|
+
*
|
|
263
|
+
* The local-name fallback mirrors `findChild` and lets the parser tolerate
|
|
264
|
+
* producers that rebind the WordprocessingML namespace to an alternative
|
|
265
|
+
* prefix. Without it, attributes such as `x:val` on an `x:alias` element
|
|
266
|
+
* would silently drop on round-trip even though the element itself is
|
|
267
|
+
* recognised.
|
|
268
|
+
*/
|
|
269
|
+
function getAttribute(element, namespace, name) {
|
|
270
|
+
if (!element || !element.attributes) return null;
|
|
271
|
+
const attrs = element.attributes;
|
|
272
|
+
if (namespace) {
|
|
273
|
+
const prefixedName = `${namespace}:${name}`;
|
|
274
|
+
if (prefixedName in attrs) return attrs[prefixedName] ?? null;
|
|
275
|
+
}
|
|
276
|
+
if (name in attrs) return attrs[name] ?? null;
|
|
277
|
+
if (namespace) {
|
|
278
|
+
const suffix = `:${name}`;
|
|
279
|
+
for (const key of Object.keys(attrs)) if (key.endsWith(suffix)) return attrs[key] ?? null;
|
|
280
|
+
}
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Read an attribute by local name, trying the element's own prefix first,
|
|
285
|
+
* then the canonical Word prefix, then unprefixed.
|
|
286
|
+
*
|
|
287
|
+
* OOXML lets a producer bind the WordprocessingML namespace under any
|
|
288
|
+
* prefix the file's xmlns declarations choose, so a strict `w:val` /
|
|
289
|
+
* `w:tag` lookup misses valid docs that use `ns0:` (or any other prefix
|
|
290
|
+
* resolving to the same URI). This helper mirrors `parseBooleanElement`'s
|
|
291
|
+
* tolerance for the attribute path — call it whenever you want to read
|
|
292
|
+
* an OOXML attribute that conventionally lives in the `w:` namespace
|
|
293
|
+
* but could appear under an alternate prefix bound to the same URI.
|
|
294
|
+
*/
|
|
295
|
+
function getAttributeAnyPrefix(element, localName) {
|
|
296
|
+
if (!element) return null;
|
|
297
|
+
const elementName = element.name ?? "";
|
|
298
|
+
const colonIdx = elementName.indexOf(":");
|
|
299
|
+
const elementPrefix = colonIdx > 0 ? elementName.slice(0, colonIdx) : null;
|
|
300
|
+
if (elementPrefix && elementPrefix !== "w") {
|
|
301
|
+
const fromPrefix = getAttribute(element, elementPrefix, localName);
|
|
302
|
+
if (fromPrefix !== null) return fromPrefix;
|
|
303
|
+
}
|
|
304
|
+
const canonical = getAttribute(element, "w", localName);
|
|
305
|
+
if (canonical !== null) return canonical;
|
|
306
|
+
const attrs = element.attributes;
|
|
307
|
+
if (attrs) {
|
|
308
|
+
const suffix = `:${localName}`;
|
|
309
|
+
for (const [key, value] of Object.entries(attrs)) if (key === localName || key.endsWith(suffix)) return value;
|
|
310
|
+
}
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Get an attribute value, trying multiple possible names
|
|
315
|
+
*
|
|
316
|
+
* @param element - Element to get attribute from
|
|
317
|
+
* @param names - Array of possible attribute names (with or without namespace)
|
|
318
|
+
* @returns First found attribute value or null
|
|
319
|
+
*/
|
|
320
|
+
function getAttributeAny(element, names) {
|
|
321
|
+
if (!element || !element.attributes) return null;
|
|
322
|
+
const attrs = element.attributes;
|
|
323
|
+
for (const name of names) if (name in attrs) return attrs[name] ?? null;
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Get all attributes from an element
|
|
328
|
+
*
|
|
329
|
+
* @param element - Element to get attributes from
|
|
330
|
+
* @returns Record of attribute name -> value
|
|
331
|
+
*/
|
|
332
|
+
function getAttributes(element) {
|
|
333
|
+
if (!element || !element.attributes) return {};
|
|
334
|
+
return element.attributes;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Get the text content of an element (concatenates all text nodes)
|
|
338
|
+
*
|
|
339
|
+
* @param element - Element to get text from
|
|
340
|
+
* @returns Text content or empty string
|
|
341
|
+
*/
|
|
342
|
+
function getTextContent(element) {
|
|
343
|
+
if (!element) return "";
|
|
344
|
+
if ("text" in element && typeof element.text === "string") return element.text;
|
|
345
|
+
if (!element.elements) return "";
|
|
346
|
+
let text = "";
|
|
347
|
+
for (const child of element.elements) if (child.type === "text" && "text" in child) text += child.text ?? "";
|
|
348
|
+
else if (child.type === "element") text += getTextContent(child);
|
|
349
|
+
return text;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Check if an element has a specific attribute with value "true" or "1"
|
|
353
|
+
*
|
|
354
|
+
* @param element - Element to check
|
|
355
|
+
* @param namespace - Attribute namespace
|
|
356
|
+
* @param name - Attribute name
|
|
357
|
+
* @returns true if attribute exists and is truthy
|
|
358
|
+
*/
|
|
359
|
+
function hasFlag(element, namespace, name) {
|
|
360
|
+
const value = getAttribute(element, namespace, name);
|
|
361
|
+
if (value === null) return false;
|
|
362
|
+
if (value === "0" || value === "false" || value === "off") return false;
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Check if a child element exists (used for boolean flags in OOXML)
|
|
367
|
+
*
|
|
368
|
+
* @param parent - Parent element
|
|
369
|
+
* @param namespace - Namespace prefix
|
|
370
|
+
* @param localName - Local element name
|
|
371
|
+
* @returns true if child element exists
|
|
372
|
+
*/
|
|
373
|
+
function hasChild(parent, namespace, localName) {
|
|
374
|
+
return findChild(parent, namespace, localName) !== null;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Parse an OOXML color value
|
|
378
|
+
*
|
|
379
|
+
* @param element - Color element (e.g., w:color)
|
|
380
|
+
* @returns Object with val, themeColor, themeTint, themeShade
|
|
381
|
+
*/
|
|
382
|
+
function parseColorElement(element) {
|
|
383
|
+
if (!element) return null;
|
|
384
|
+
const val = getAttribute(element, "w", "val");
|
|
385
|
+
const themeColor = getAttribute(element, "w", "themeColor");
|
|
386
|
+
const themeTint = getAttribute(element, "w", "themeTint");
|
|
387
|
+
const themeShade = getAttribute(element, "w", "themeShade");
|
|
388
|
+
return {
|
|
389
|
+
...val != null ? { val } : {},
|
|
390
|
+
...themeColor != null ? { themeColor } : {},
|
|
391
|
+
...themeTint != null ? { themeTint } : {},
|
|
392
|
+
...themeShade != null ? { themeShade } : {}
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Parse a numeric value from an attribute, with optional scale
|
|
397
|
+
*
|
|
398
|
+
* @param element - Element containing the attribute
|
|
399
|
+
* @param namespace - Attribute namespace
|
|
400
|
+
* @param name - Attribute name
|
|
401
|
+
* @param scale - Optional scale factor (e.g., 20 for twips to points)
|
|
402
|
+
* @returns Parsed number or undefined
|
|
403
|
+
*/
|
|
404
|
+
function parseNumericAttribute(element, namespace, name, scale = 1) {
|
|
405
|
+
const value = getAttribute(element, namespace, name);
|
|
406
|
+
if (value === null) return;
|
|
407
|
+
const num = Number.parseInt(value, 10);
|
|
408
|
+
if (Number.isNaN(num)) return;
|
|
409
|
+
return num * scale;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Parse a boolean value from an attribute or element presence
|
|
413
|
+
*
|
|
414
|
+
* OOXML boolean conventions:
|
|
415
|
+
* - Element presence with no val attribute = true
|
|
416
|
+
* - w:val="true" or w:val="1" = true
|
|
417
|
+
* - w:val="false" or w:val="0" = false
|
|
418
|
+
*
|
|
419
|
+
* @param element - Element to check
|
|
420
|
+
* @param namespace - Namespace for val attribute
|
|
421
|
+
* @returns boolean value
|
|
422
|
+
*/
|
|
423
|
+
function parseBooleanElement(element, namespace = "w") {
|
|
424
|
+
if (!element) return false;
|
|
425
|
+
let val = null;
|
|
426
|
+
const elementName = element.name ?? "";
|
|
427
|
+
const colonIdx = elementName.indexOf(":");
|
|
428
|
+
const elementPrefix = colonIdx > 0 ? elementName.slice(0, colonIdx) : null;
|
|
429
|
+
if (elementPrefix && elementPrefix !== namespace) val = getAttribute(element, elementPrefix, "val");
|
|
430
|
+
if (val === null) val = getAttribute(element, namespace, "val");
|
|
431
|
+
if (val === null && element.attributes) {
|
|
432
|
+
for (const [key, value] of Object.entries(element.attributes)) if (key === "val" || key.endsWith(":val")) {
|
|
433
|
+
val = value;
|
|
434
|
+
break;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
if (val === null) return true;
|
|
438
|
+
if (val === "0" || val === "false" || val === "off") return false;
|
|
439
|
+
return true;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Deep find - search recursively for an element
|
|
443
|
+
*
|
|
444
|
+
* @param root - Root element to search from
|
|
445
|
+
* @param namespace - Namespace prefix
|
|
446
|
+
* @param localName - Local element name
|
|
447
|
+
* @returns First matching element found or null
|
|
448
|
+
*/
|
|
449
|
+
function findDeep(root, namespace, localName) {
|
|
450
|
+
if (!root) return null;
|
|
451
|
+
if (matchesName(root, namespace, localName)) return root;
|
|
452
|
+
if (root.elements) for (const child of root.elements) {
|
|
453
|
+
if (child.type !== "element") continue;
|
|
454
|
+
const found = findDeep(child, namespace, localName);
|
|
455
|
+
if (found) return found;
|
|
456
|
+
}
|
|
457
|
+
return null;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Find all elements matching name, searching recursively
|
|
461
|
+
*
|
|
462
|
+
* @param root - Root element to search from
|
|
463
|
+
* @param namespace - Namespace prefix
|
|
464
|
+
* @param localName - Local element name
|
|
465
|
+
* @returns Array of all matching elements
|
|
466
|
+
*/
|
|
467
|
+
function findAllDeep(root, namespace, localName) {
|
|
468
|
+
const results = [];
|
|
469
|
+
function search(element) {
|
|
470
|
+
if (!element) return;
|
|
471
|
+
if (matchesName(element, namespace, localName)) results.push(element);
|
|
472
|
+
if (element.elements) {
|
|
473
|
+
for (const child of element.elements) if (child.type === "element") search(child);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
search(root);
|
|
477
|
+
return results;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Collect every `xmlns` / `xmlns:*` declaration from an element's attributes.
|
|
481
|
+
*
|
|
482
|
+
* The serializer's hard-coded root namespaces only cover canonical prefixes
|
|
483
|
+
* (`a`, `w`, `wp`, `v`, `o`, …); a DOCX that binds a namespace to a
|
|
484
|
+
* non-canonical prefix would replay an unbound prefix when a captured subtree
|
|
485
|
+
* is emitted on its own. Carrying the source declarations forward keeps the
|
|
486
|
+
* raw replay self-contained regardless of the producer's prefix choice.
|
|
487
|
+
*/
|
|
488
|
+
function collectXmlnsDeclarations(element) {
|
|
489
|
+
const out = {};
|
|
490
|
+
const attrs = element.attributes;
|
|
491
|
+
if (!attrs) return out;
|
|
492
|
+
for (const [key, value] of Object.entries(attrs)) if ((key === "xmlns" || key.startsWith("xmlns:")) && value !== void 0) out[key] = String(value);
|
|
493
|
+
return out;
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Merge an element's own `xmlns` / `xmlns:*` declarations onto an inherited
|
|
497
|
+
* in-scope set, returning the accumulated set. Threaded down the ancestor
|
|
498
|
+
* chain (root -> paragraph -> run -> pict), the element's own declarations
|
|
499
|
+
* override an inherited binding for the same prefix, matching XML scoping. The
|
|
500
|
+
* inherited object is not mutated; the same reference is returned unchanged when
|
|
501
|
+
* the element declares nothing.
|
|
502
|
+
*/
|
|
503
|
+
function mergeXmlnsDeclarations(inherited, element) {
|
|
504
|
+
const own = collectXmlnsDeclarations(element);
|
|
505
|
+
if (Object.keys(own).length === 0) return inherited;
|
|
506
|
+
return {
|
|
507
|
+
...inherited,
|
|
508
|
+
...own
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Return a shallow clone of `element` whose attributes carry every declaration
|
|
513
|
+
* in `xmlnsDecls`. Existing attributes (including any namespace declarations the
|
|
514
|
+
* element already carries) win over the injected ones.
|
|
515
|
+
*/
|
|
516
|
+
function cloneWithXmlnsDeclarations(element, xmlnsDecls) {
|
|
517
|
+
if (Object.keys(xmlnsDecls).length === 0) return element;
|
|
518
|
+
return {
|
|
519
|
+
...element,
|
|
520
|
+
attributes: {
|
|
521
|
+
...xmlnsDecls,
|
|
522
|
+
...element.attributes
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
//#endregion
|
|
527
|
+
export { NAMESPACES, cloneWithXmlnsDeclarations, collectXmlnsDeclarations, elementToXml, findAllDeep, findByFullName, findChild, findChildByLocalName, findChildren, findChildrenByLocalName, findDeep, getAttribute, getAttributeAny, getAttributeAnyPrefix, getAttributes, getChildElements, getLocalName, getNamespacePrefix, getTextContent, hasChild, hasFlag, matchesName, mergeXmlnsDeclarations, parseBooleanElement, parseColorElement, parseNumericAttribute, parseXml, parseXmlDocument };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FlowBlock, Page } from "../layout-engine/types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/fields/bookmarkPages.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Map each bookmark name to the 1-indexed page its anchoring paragraph lands on,
|
|
6
|
+
* for PAGEREF resolution. Computed as a post-pass over a finished layout: walk
|
|
7
|
+
* pages -> fragments -> the source block's bookmarks. A bookmark whose paragraph
|
|
8
|
+
* splits across pages takes the first (lowest) page it appears on, matching how
|
|
9
|
+
* Word resolves a PAGEREF to the start of the bookmark.
|
|
10
|
+
*/
|
|
11
|
+
declare function buildBookmarkPageMap(pages: readonly Page[], blocks: readonly FlowBlock[]): Map<string, number>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { buildBookmarkPageMap };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
//#region src/fields/bookmarkPages.ts
|
|
2
|
+
/**
|
|
3
|
+
* Map each bookmark name to the 1-indexed page its anchoring paragraph lands on,
|
|
4
|
+
* for PAGEREF resolution. Computed as a post-pass over a finished layout: walk
|
|
5
|
+
* pages -> fragments -> the source block's bookmarks. A bookmark whose paragraph
|
|
6
|
+
* splits across pages takes the first (lowest) page it appears on, matching how
|
|
7
|
+
* Word resolves a PAGEREF to the start of the bookmark.
|
|
8
|
+
*/
|
|
9
|
+
function buildBookmarkPageMap(pages, blocks) {
|
|
10
|
+
const anchors = [];
|
|
11
|
+
for (const block of blocks) collectBookmarkAnchors(block, block.id, anchors);
|
|
12
|
+
const pageByBookmark = /* @__PURE__ */ new Map();
|
|
13
|
+
if (anchors.length === 0) return pageByBookmark;
|
|
14
|
+
for (const page of pages) for (const fragment of page.fragments) for (const anchor of anchors) {
|
|
15
|
+
if (!fragmentContainsAnchor(fragment, anchor)) continue;
|
|
16
|
+
assignBookmarkPage(pageByBookmark, anchor.names, page.number);
|
|
17
|
+
}
|
|
18
|
+
return pageByBookmark;
|
|
19
|
+
}
|
|
20
|
+
function collectBookmarkAnchors(block, topLevelId, anchors) {
|
|
21
|
+
if (block.kind === "paragraph") {
|
|
22
|
+
if (!block.bookmarks || block.bookmarks.length === 0) return;
|
|
23
|
+
anchors.push({
|
|
24
|
+
type: "block",
|
|
25
|
+
blockId: topLevelId,
|
|
26
|
+
names: [...block.bookmarks]
|
|
27
|
+
});
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (block.kind === "table") {
|
|
31
|
+
for (let rowIndex = 0; rowIndex < block.rows.length; rowIndex++) {
|
|
32
|
+
const row = block.rows[rowIndex];
|
|
33
|
+
if (!row) continue;
|
|
34
|
+
for (const cell of row.cells) for (const child of cell.blocks) collectTableRowBookmarkAnchors(child, block.id, rowIndex, anchors);
|
|
35
|
+
}
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (block.kind === "textBox") for (const child of block.content) collectBookmarkAnchors(child, topLevelId, anchors);
|
|
39
|
+
}
|
|
40
|
+
function collectTableRowBookmarkAnchors(block, tableId, rowIndex, anchors) {
|
|
41
|
+
if (block.kind === "paragraph") {
|
|
42
|
+
if (!block.bookmarks || block.bookmarks.length === 0) return;
|
|
43
|
+
anchors.push({
|
|
44
|
+
type: "tableRow",
|
|
45
|
+
blockId: tableId,
|
|
46
|
+
rowIndex,
|
|
47
|
+
names: [...block.bookmarks]
|
|
48
|
+
});
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (block.kind === "table") {
|
|
52
|
+
for (const row of block.rows) for (const cell of row.cells) for (const child of cell.blocks) collectTableRowBookmarkAnchors(child, tableId, rowIndex, anchors);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (block.kind === "textBox") for (const child of block.content) collectTableRowBookmarkAnchors(child, tableId, rowIndex, anchors);
|
|
56
|
+
}
|
|
57
|
+
function fragmentContainsAnchor(fragment, anchor) {
|
|
58
|
+
if (fragment.blockId !== anchor.blockId) return false;
|
|
59
|
+
if (anchor.type === "block") return true;
|
|
60
|
+
return fragment.kind === "table" && anchor.rowIndex >= fragment.fromRow && anchor.rowIndex < fragment.toRow;
|
|
61
|
+
}
|
|
62
|
+
function assignBookmarkPage(pageByBookmark, names, pageNumber) {
|
|
63
|
+
for (const name of names) if (!pageByBookmark.has(name)) pageByBookmark.set(name, pageNumber);
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
export { buildBookmarkPageMap };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FlowBlock } from "../layout-engine/types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/fields/bookmarkText.d.ts
|
|
4
|
+
type BookmarkTextInputs = {
|
|
5
|
+
fieldValues?: ReadonlyMap<number, string>;
|
|
6
|
+
seqValues?: ReadonlyMap<number, number>;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Map each bookmark name to the text of its anchoring paragraph, for REF
|
|
10
|
+
* cross-references (e.g. "see Section 1.3"). Folio anchors bookmarks at the
|
|
11
|
+
* paragraph level, so a REF resolves to that paragraph's visible text. Document
|
|
12
|
+
* order, independent of layout. First paragraph carrying a name wins.
|
|
13
|
+
*/
|
|
14
|
+
declare function buildBookmarkText(blocks: readonly FlowBlock[], inputs?: BookmarkTextInputs): Map<string, string>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { buildBookmarkText };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { parseFieldInstruction } from "../docx/fieldParser.js";
|
|
2
|
+
import { evaluateField } from "./evaluateField.js";
|
|
3
|
+
//#region src/fields/bookmarkText.ts
|
|
4
|
+
const EMPTY_STRING_NUMBER = /* @__PURE__ */ new Map();
|
|
5
|
+
const EMPTY_STRING_STRING = /* @__PURE__ */ new Map();
|
|
6
|
+
const EMPTY_NUMBER_NUMBER = /* @__PURE__ */ new Map();
|
|
7
|
+
/**
|
|
8
|
+
* Map each bookmark name to the text of its anchoring paragraph, for REF
|
|
9
|
+
* cross-references (e.g. "see Section 1.3"). Folio anchors bookmarks at the
|
|
10
|
+
* paragraph level, so a REF resolves to that paragraph's visible text. Document
|
|
11
|
+
* order, independent of layout. First paragraph carrying a name wins.
|
|
12
|
+
*/
|
|
13
|
+
function buildBookmarkText(blocks, inputs = {}) {
|
|
14
|
+
const map = /* @__PURE__ */ new Map();
|
|
15
|
+
walkBlocks(blocks, map, inputs);
|
|
16
|
+
return map;
|
|
17
|
+
}
|
|
18
|
+
function walkBlocks(blocks, map, inputs) {
|
|
19
|
+
for (const block of blocks) if (block.kind === "paragraph") {
|
|
20
|
+
if (!block.bookmarks || block.bookmarks.length === 0) continue;
|
|
21
|
+
const text = paragraphText(block, inputs);
|
|
22
|
+
for (const name of block.bookmarks) if (!map.has(name)) map.set(name, text);
|
|
23
|
+
} else if (block.kind === "table") for (const row of block.rows) for (const cell of row.cells) walkBlocks(cell.blocks, map, inputs);
|
|
24
|
+
else if (block.kind === "textBox") walkBlocks(block.content, map, inputs);
|
|
25
|
+
}
|
|
26
|
+
function paragraphText(block, inputs) {
|
|
27
|
+
let text = "";
|
|
28
|
+
for (const run of block.runs) if (run.kind === "text") text += run.text;
|
|
29
|
+
else if (run.kind === "field") text += bookmarkFieldText(run, inputs);
|
|
30
|
+
return `${visibleListMarker(block)}${text}`.trim();
|
|
31
|
+
}
|
|
32
|
+
function bookmarkFieldText(run, inputs) {
|
|
33
|
+
if (run.kind !== "field") return "";
|
|
34
|
+
const resolved = run.pmStart === void 0 ? void 0 : inputs.fieldValues?.get(run.pmStart);
|
|
35
|
+
if (resolved !== void 0) return resolved;
|
|
36
|
+
if (run.pmStart === void 0 || !inputs.seqValues?.has(run.pmStart)) return run.fallback ?? "";
|
|
37
|
+
const parsed = parseFieldInstruction(run.instruction || run.fieldType);
|
|
38
|
+
if (parsed.type !== "SEQ") return run.fallback ?? "";
|
|
39
|
+
return evaluateField(parsed, {
|
|
40
|
+
pageNumber: 1,
|
|
41
|
+
totalPages: 1,
|
|
42
|
+
sectionPages: 1,
|
|
43
|
+
bookmarkPages: EMPTY_STRING_NUMBER,
|
|
44
|
+
bookmarkText: EMPTY_STRING_STRING,
|
|
45
|
+
seqValues: inputs.seqValues ?? EMPTY_NUMBER_NUMBER,
|
|
46
|
+
now: /* @__PURE__ */ new Date(0)
|
|
47
|
+
}, {
|
|
48
|
+
fallback: run.fallback ?? "",
|
|
49
|
+
instanceId: run.pmStart,
|
|
50
|
+
...run.fldLock ? { locked: true } : {}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function visibleListMarker(block) {
|
|
54
|
+
const marker = block.attrs?.listMarker;
|
|
55
|
+
if (!marker || block.attrs?.listMarkerHidden) return "";
|
|
56
|
+
const normalized = marker.replace(/\t+/gu, " ").trim();
|
|
57
|
+
if (!normalized) return "";
|
|
58
|
+
return block.attrs?.listMarkerSuffix === "nothing" ? normalized : `${normalized} `;
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
export { buildBookmarkText };
|