@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,270 @@
|
|
|
1
|
+
import { findChild, findChildren, getAttributes, getChildElements, getLocalName, parseXml } from "./xmlParser.js";
|
|
2
|
+
import { parseSdtProperties } from "./sdtProperties.js";
|
|
3
|
+
import { parseEndnoteProperties, parseFootnoteProperties } from "./notePropertiesParser.js";
|
|
4
|
+
import { parseParagraph } from "./paragraphParser.js";
|
|
5
|
+
import { parseTable } from "./tableParser.js";
|
|
6
|
+
//#region src/docx/footnoteParser.ts
|
|
7
|
+
/**
|
|
8
|
+
* Parse note type attribute
|
|
9
|
+
*/
|
|
10
|
+
function parseNoteType(typeAttr) {
|
|
11
|
+
switch (typeAttr) {
|
|
12
|
+
case "separator": return "separator";
|
|
13
|
+
case "continuationSeparator": return "continuationSeparator";
|
|
14
|
+
case "continuationNotice": return "continuationNotice";
|
|
15
|
+
default: return "normal";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function getNoteAttribute(element, localName) {
|
|
19
|
+
for (const [name, value] of Object.entries(getAttributes(element))) if (getLocalName(name) === localName) return value;
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
function parseNoteId(element) {
|
|
23
|
+
const id = getNoteAttribute(element, "id");
|
|
24
|
+
if (id === null) return 0;
|
|
25
|
+
const parsed = Number.parseInt(id, 10);
|
|
26
|
+
return Number.isNaN(parsed) ? 0 : parsed;
|
|
27
|
+
}
|
|
28
|
+
function parseNoteBlockContent(element, styles, theme, numbering, rels, media) {
|
|
29
|
+
const blocks = [];
|
|
30
|
+
for (const child of getChildElements(element)) {
|
|
31
|
+
const localName = getLocalName(child.name ?? "");
|
|
32
|
+
if (localName === "p") blocks.push(parseParagraph(child, styles, theme, numbering, rels));
|
|
33
|
+
else if (localName === "tbl") blocks.push(parseTable(child, styles, theme, numbering, rels, media));
|
|
34
|
+
else if (localName === "sdt") {
|
|
35
|
+
const sdtPr = findChild(child, "w", "sdtPr");
|
|
36
|
+
const sdtEndPr = findChild(child, "w", "sdtEndPr");
|
|
37
|
+
const sdtContent = findChild(child, "w", "sdtContent");
|
|
38
|
+
blocks.push({
|
|
39
|
+
type: "blockSdt",
|
|
40
|
+
properties: parseSdtProperties(sdtPr, sdtEndPr),
|
|
41
|
+
content: sdtContent ? parseNoteBlockContent(sdtContent, styles, theme, numbering, rels, media) : []
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return blocks;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse a single footnote element (w:footnote)
|
|
49
|
+
*/
|
|
50
|
+
function parseFootnote(element, styles, theme, numbering, rels, media) {
|
|
51
|
+
return {
|
|
52
|
+
type: "footnote",
|
|
53
|
+
id: parseNoteId(element),
|
|
54
|
+
noteType: parseNoteType(getNoteAttribute(element, "type")),
|
|
55
|
+
content: parseNoteBlockContent(element, styles, theme, numbering, rels, media)
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parse footnotes.xml
|
|
60
|
+
*
|
|
61
|
+
* @param footnotesXml - The raw XML content of word/footnotes.xml
|
|
62
|
+
* @param styles - Parsed style map for applying styles
|
|
63
|
+
* @param theme - Parsed theme for color resolution
|
|
64
|
+
* @param numbering - Parsed numbering definitions for lists
|
|
65
|
+
* @param rels - Relationships for resolving hyperlinks
|
|
66
|
+
* @param media - Media files for images
|
|
67
|
+
* @returns FootnoteMap with all footnotes
|
|
68
|
+
*/
|
|
69
|
+
function parseFootnotes(footnotesXml, styles = null, theme = null, numbering = null, rels = null, media = null) {
|
|
70
|
+
const byId = /* @__PURE__ */ new Map();
|
|
71
|
+
const footnotes = [];
|
|
72
|
+
if (!footnotesXml) return createFootnoteMap(byId, footnotes);
|
|
73
|
+
const rootElement = parseXml(footnotesXml).elements?.find((el) => el.type === "element" && (el.name === "w:footnotes" || el.name?.endsWith(":footnotes")));
|
|
74
|
+
if (!rootElement) return createFootnoteMap(byId, footnotes);
|
|
75
|
+
const footnoteElements = findChildren(rootElement, "w", "footnote");
|
|
76
|
+
for (const fnEl of footnoteElements) {
|
|
77
|
+
const footnote = parseFootnote(fnEl, styles, theme, numbering, rels, media);
|
|
78
|
+
byId.set(footnote.id, footnote);
|
|
79
|
+
footnotes.push(footnote);
|
|
80
|
+
}
|
|
81
|
+
return createFootnoteMap(byId, footnotes);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Create FootnoteMap object with helper methods
|
|
85
|
+
*/
|
|
86
|
+
function createFootnoteMap(byId, footnotes) {
|
|
87
|
+
return {
|
|
88
|
+
byId,
|
|
89
|
+
footnotes,
|
|
90
|
+
getFootnote(id) {
|
|
91
|
+
return byId.get(id);
|
|
92
|
+
},
|
|
93
|
+
hasFootnote(id) {
|
|
94
|
+
return byId.has(id);
|
|
95
|
+
},
|
|
96
|
+
getNormalFootnotes() {
|
|
97
|
+
return footnotes.filter((fn) => fn.noteType === "normal");
|
|
98
|
+
},
|
|
99
|
+
getSeparator() {
|
|
100
|
+
return footnotes.find((fn) => fn.noteType === "separator");
|
|
101
|
+
},
|
|
102
|
+
getContinuationSeparator() {
|
|
103
|
+
return footnotes.find((fn) => fn.noteType === "continuationSeparator");
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Parse a single endnote element (w:endnote)
|
|
109
|
+
*/
|
|
110
|
+
function parseEndnote(element, styles, theme, numbering, rels, media) {
|
|
111
|
+
return {
|
|
112
|
+
type: "endnote",
|
|
113
|
+
id: parseNoteId(element),
|
|
114
|
+
noteType: parseNoteType(getNoteAttribute(element, "type")),
|
|
115
|
+
content: parseNoteBlockContent(element, styles, theme, numbering, rels, media)
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Parse endnotes.xml
|
|
120
|
+
*
|
|
121
|
+
* @param endnotesXml - The raw XML content of word/endnotes.xml
|
|
122
|
+
* @param styles - Parsed style map for applying styles
|
|
123
|
+
* @param theme - Parsed theme for color resolution
|
|
124
|
+
* @param numbering - Parsed numbering definitions for lists
|
|
125
|
+
* @param rels - Relationships for resolving hyperlinks
|
|
126
|
+
* @param media - Media files for images
|
|
127
|
+
* @returns EndnoteMap with all endnotes
|
|
128
|
+
*/
|
|
129
|
+
function parseEndnotes(endnotesXml, styles = null, theme = null, numbering = null, rels = null, media = null) {
|
|
130
|
+
const byId = /* @__PURE__ */ new Map();
|
|
131
|
+
const endnotes = [];
|
|
132
|
+
if (!endnotesXml) return createEndnoteMap(byId, endnotes);
|
|
133
|
+
const rootElement = parseXml(endnotesXml).elements?.find((el) => el.type === "element" && (el.name === "w:endnotes" || el.name?.endsWith(":endnotes")));
|
|
134
|
+
if (!rootElement) return createEndnoteMap(byId, endnotes);
|
|
135
|
+
const endnoteElements = findChildren(rootElement, "w", "endnote");
|
|
136
|
+
for (const enEl of endnoteElements) {
|
|
137
|
+
const endnote = parseEndnote(enEl, styles, theme, numbering, rels, media);
|
|
138
|
+
byId.set(endnote.id, endnote);
|
|
139
|
+
endnotes.push(endnote);
|
|
140
|
+
}
|
|
141
|
+
return createEndnoteMap(byId, endnotes);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Create EndnoteMap object with helper methods
|
|
145
|
+
*/
|
|
146
|
+
function createEndnoteMap(byId, endnotes) {
|
|
147
|
+
return {
|
|
148
|
+
byId,
|
|
149
|
+
endnotes,
|
|
150
|
+
getEndnote(id) {
|
|
151
|
+
return byId.get(id);
|
|
152
|
+
},
|
|
153
|
+
hasEndnote(id) {
|
|
154
|
+
return byId.has(id);
|
|
155
|
+
},
|
|
156
|
+
getNormalEndnotes() {
|
|
157
|
+
return endnotes.filter((en) => en.noteType === "normal");
|
|
158
|
+
},
|
|
159
|
+
getSeparator() {
|
|
160
|
+
return endnotes.find((en) => en.noteType === "separator");
|
|
161
|
+
},
|
|
162
|
+
getContinuationSeparator() {
|
|
163
|
+
return endnotes.find((en) => en.noteType === "continuationSeparator");
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get plain text content of a footnote.
|
|
169
|
+
*
|
|
170
|
+
* Recurses into block-level SDTs so a citation slot inside a note still
|
|
171
|
+
* contributes its text; without recursion, the BlockSdt addition from
|
|
172
|
+
* the previous commit would silently hide the slot's body from this
|
|
173
|
+
* helper.
|
|
174
|
+
*/
|
|
175
|
+
function getFootnoteText(footnote) {
|
|
176
|
+
return collectNoteBlockTexts(footnote.content).join("\n");
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get plain text content of an endnote.
|
|
180
|
+
*/
|
|
181
|
+
function getEndnoteText(endnote) {
|
|
182
|
+
return collectNoteBlockTexts(endnote.content).join("\n");
|
|
183
|
+
}
|
|
184
|
+
function collectNoteBlockTexts(blocks) {
|
|
185
|
+
const texts = [];
|
|
186
|
+
for (const block of blocks) if (block.type === "paragraph") {
|
|
187
|
+
const paraTexts = [];
|
|
188
|
+
for (const content of block.content) if (content.type === "run") {
|
|
189
|
+
for (const runContent of content.content) if (runContent.type === "text") paraTexts.push(runContent.text);
|
|
190
|
+
}
|
|
191
|
+
texts.push(paraTexts.join(""));
|
|
192
|
+
} else if (block.type === "blockSdt") texts.push(...collectNoteBlockTexts(block.content));
|
|
193
|
+
return texts;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if a footnote is a separator (not regular content)
|
|
197
|
+
*/
|
|
198
|
+
function isSeparatorFootnote(footnote) {
|
|
199
|
+
return footnote.noteType === "separator" || footnote.noteType === "continuationSeparator" || footnote.noteType === "continuationNotice";
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Check if an endnote is a separator (not regular content)
|
|
203
|
+
*/
|
|
204
|
+
function isSeparatorEndnote(endnote) {
|
|
205
|
+
return endnote.noteType === "separator" || endnote.noteType === "continuationSeparator" || endnote.noteType === "continuationNotice";
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get footnote number for display (excluding separators)
|
|
209
|
+
* @param footnote - The footnote to get the number for
|
|
210
|
+
* @param footnoteMap - The footnote map
|
|
211
|
+
* @param startNumber - Starting number (default 1)
|
|
212
|
+
* @returns The display number, or null for separator footnotes
|
|
213
|
+
*/
|
|
214
|
+
function getFootnoteDisplayNumber(footnote, footnoteMap, startNumber = 1) {
|
|
215
|
+
if (isSeparatorFootnote(footnote)) return null;
|
|
216
|
+
const index = footnoteMap.getNormalFootnotes().findIndex((fn) => fn.id === footnote.id);
|
|
217
|
+
if (index === -1) return null;
|
|
218
|
+
return startNumber + index;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get endnote number for display (excluding separators)
|
|
222
|
+
* @param endnote - The endnote to get the number for
|
|
223
|
+
* @param endnoteMap - The endnote map
|
|
224
|
+
* @param startNumber - Starting number (default 1)
|
|
225
|
+
* @returns The display number, or null for separator endnotes
|
|
226
|
+
*/
|
|
227
|
+
function getEndnoteDisplayNumber(endnote, endnoteMap, startNumber = 1) {
|
|
228
|
+
if (isSeparatorEndnote(endnote)) return null;
|
|
229
|
+
const index = endnoteMap.getNormalEndnotes().findIndex((en) => en.id === endnote.id);
|
|
230
|
+
if (index === -1) return null;
|
|
231
|
+
return startNumber + index;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Create an empty footnote map
|
|
235
|
+
*/
|
|
236
|
+
function createEmptyFootnoteMap() {
|
|
237
|
+
return createFootnoteMap(/* @__PURE__ */ new Map(), []);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Create an empty endnote map
|
|
241
|
+
*/
|
|
242
|
+
function createEmptyEndnoteMap() {
|
|
243
|
+
return createEndnoteMap(/* @__PURE__ */ new Map(), []);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Merge multiple footnote maps (e.g., from different documents)
|
|
247
|
+
*/
|
|
248
|
+
function mergeFootnoteMaps(...maps) {
|
|
249
|
+
const byId = /* @__PURE__ */ new Map();
|
|
250
|
+
const footnotes = [];
|
|
251
|
+
for (const map of maps) for (const fn of map.footnotes) if (!byId.has(fn.id)) {
|
|
252
|
+
byId.set(fn.id, fn);
|
|
253
|
+
footnotes.push(fn);
|
|
254
|
+
}
|
|
255
|
+
return createFootnoteMap(byId, footnotes);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Merge multiple endnote maps (e.g., from different documents)
|
|
259
|
+
*/
|
|
260
|
+
function mergeEndnoteMaps(...maps) {
|
|
261
|
+
const byId = /* @__PURE__ */ new Map();
|
|
262
|
+
const endnotes = [];
|
|
263
|
+
for (const map of maps) for (const en of map.endnotes) if (!byId.has(en.id)) {
|
|
264
|
+
byId.set(en.id, en);
|
|
265
|
+
endnotes.push(en);
|
|
266
|
+
}
|
|
267
|
+
return createEndnoteMap(byId, endnotes);
|
|
268
|
+
}
|
|
269
|
+
//#endregion
|
|
270
|
+
export { createEmptyEndnoteMap, createEmptyFootnoteMap, getEndnoteDisplayNumber, getEndnoteText, getFootnoteDisplayNumber, getFootnoteText, isSeparatorEndnote, isSeparatorFootnote, mergeEndnoteMaps, mergeFootnoteMaps, parseEndnoteProperties, parseEndnotes, parseFootnoteProperties, parseFootnotes };
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
2
|
+
import { NumberingMap } from "./numberingParser.js";
|
|
3
|
+
import { StyleMap } from "./styleParser.js";
|
|
4
|
+
import { parseFooterReference, parseFooterReferences, parseHeaderReference, parseHeaderReferences } from "./headerFooterRefParser.js";
|
|
5
|
+
|
|
6
|
+
//#region src/docx/headerFooterParser.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Map of header/footer ID to HeaderFooter content
|
|
9
|
+
*/
|
|
10
|
+
type HeaderFooterMap = {
|
|
11
|
+
/** Map of rId to HeaderFooter */byId: Map<string, document_d_exports.HeaderFooter>; /** Get header/footer by rId */
|
|
12
|
+
get: (rId: string) => document_d_exports.HeaderFooter | undefined; /** Check if header/footer exists */
|
|
13
|
+
has: (rId: string) => boolean; /** Get all headers/footers */
|
|
14
|
+
getAll: () => document_d_exports.HeaderFooter[]; /** Get by type */
|
|
15
|
+
getByType: (type: document_d_exports.HeaderFooterType) => document_d_exports.HeaderFooter | undefined;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Parse a header XML file (word/header*.xml)
|
|
19
|
+
*
|
|
20
|
+
* @param headerXml - The raw XML content of the header file
|
|
21
|
+
* @param hdrFtrType - The type of header (default, first, even)
|
|
22
|
+
* @param styles - Parsed style map for applying styles
|
|
23
|
+
* @param theme - Parsed theme for color resolution
|
|
24
|
+
* @param numbering - Parsed numbering definitions for lists
|
|
25
|
+
* @param rels - Relationships for resolving hyperlinks/images
|
|
26
|
+
* @param media - Media files for images
|
|
27
|
+
* @returns HeaderFooter object
|
|
28
|
+
*/
|
|
29
|
+
declare function parseHeader(headerXml: string, hdrFtrType?: document_d_exports.HeaderFooterType, styles?: StyleMap | null, theme?: document_d_exports.Theme | null, numbering?: NumberingMap | null, rels?: document_d_exports.RelationshipMap | null, media?: Map<string, document_d_exports.MediaFile> | null): document_d_exports.HeaderFooter;
|
|
30
|
+
/**
|
|
31
|
+
* Parse a footer XML file (word/footer*.xml)
|
|
32
|
+
*
|
|
33
|
+
* @param footerXml - The raw XML content of the footer file
|
|
34
|
+
* @param hdrFtrType - The type of footer (default, first, even)
|
|
35
|
+
* @param styles - Parsed style map for applying styles
|
|
36
|
+
* @param theme - Parsed theme for color resolution
|
|
37
|
+
* @param numbering - Parsed numbering definitions for lists
|
|
38
|
+
* @param rels - Relationships for resolving hyperlinks/images
|
|
39
|
+
* @param media - Media files for images
|
|
40
|
+
* @returns HeaderFooter object
|
|
41
|
+
*/
|
|
42
|
+
declare function parseFooter(footerXml: string, hdrFtrType?: document_d_exports.HeaderFooterType, styles?: StyleMap | null, theme?: document_d_exports.Theme | null, numbering?: NumberingMap | null, rels?: document_d_exports.RelationshipMap | null, media?: Map<string, document_d_exports.MediaFile> | null): document_d_exports.HeaderFooter;
|
|
43
|
+
/**
|
|
44
|
+
* Generic function to parse either header or footer
|
|
45
|
+
*
|
|
46
|
+
* @param xml - Raw XML content
|
|
47
|
+
* @param isHeader - true for header, false for footer
|
|
48
|
+
* @param hdrFtrType - The type (default, first, even)
|
|
49
|
+
* @param styles - Style map
|
|
50
|
+
* @param theme - Theme
|
|
51
|
+
* @param numbering - Numbering definitions
|
|
52
|
+
* @param rels - Relationships
|
|
53
|
+
* @param media - Media files
|
|
54
|
+
* @returns HeaderFooter object
|
|
55
|
+
*/
|
|
56
|
+
declare function parseHeaderFooter(xml: string, isHeader: boolean, hdrFtrType?: document_d_exports.HeaderFooterType, styles?: StyleMap | null, theme?: document_d_exports.Theme | null, numbering?: NumberingMap | null, rels?: document_d_exports.RelationshipMap | null, media?: Map<string, document_d_exports.MediaFile> | null): document_d_exports.HeaderFooter;
|
|
57
|
+
/**
|
|
58
|
+
* Create an empty HeaderFooterMap
|
|
59
|
+
*/
|
|
60
|
+
declare function createEmptyHeaderFooterMap(): HeaderFooterMap;
|
|
61
|
+
/**
|
|
62
|
+
* Build a HeaderFooterMap from references and XML content
|
|
63
|
+
*
|
|
64
|
+
* @param references - Header or footer references from sectPr
|
|
65
|
+
* @param xmlContents - Map of rId to XML content
|
|
66
|
+
* @param isHeader - true for headers, false for footers
|
|
67
|
+
* @param styles - Style map
|
|
68
|
+
* @param theme - Theme
|
|
69
|
+
* @param numbering - Numbering definitions
|
|
70
|
+
* @param rels - Relationships
|
|
71
|
+
* @param media - Media files
|
|
72
|
+
* @returns HeaderFooterMap with all parsed headers/footers
|
|
73
|
+
*/
|
|
74
|
+
declare function buildHeaderFooterMap(references: (document_d_exports.HeaderReference | document_d_exports.FooterReference)[], xmlContents: Map<string, string>, isHeader: boolean, styles?: StyleMap | null, theme?: document_d_exports.Theme | null, numbering?: NumberingMap | null, rels?: document_d_exports.RelationshipMap | null, media?: Map<string, document_d_exports.MediaFile> | null): HeaderFooterMap;
|
|
75
|
+
/**
|
|
76
|
+
* Get plain text content of a header/footer
|
|
77
|
+
*/
|
|
78
|
+
declare function getHeaderFooterText(hf: document_d_exports.HeaderFooter): string;
|
|
79
|
+
/**
|
|
80
|
+
* Check if header/footer is empty (no content)
|
|
81
|
+
*/
|
|
82
|
+
declare function isEmptyHeaderFooter(hf: document_d_exports.HeaderFooter): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Check if header/footer has page number field
|
|
85
|
+
*/
|
|
86
|
+
declare function hasPageNumberField(hf: document_d_exports.HeaderFooter): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Get the header for a given page considering type rules
|
|
89
|
+
*
|
|
90
|
+
* @param headers - Map of type to HeaderFooter
|
|
91
|
+
* @param pageNumber - 1-based page number
|
|
92
|
+
* @param isFirstPage - Whether this is the first page of the section
|
|
93
|
+
* @param hasDifferentFirstPage - Whether different first page is enabled
|
|
94
|
+
* @param hasDifferentOddEven - Whether different odd/even pages is enabled
|
|
95
|
+
* @returns The appropriate HeaderFooter or undefined
|
|
96
|
+
*/
|
|
97
|
+
declare function getHeaderForPage(headers: Map<document_d_exports.HeaderFooterType, document_d_exports.HeaderFooter>, pageNumber: number, isFirstPage: boolean, hasDifferentFirstPage: boolean, hasDifferentOddEven: boolean): document_d_exports.HeaderFooter | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Get the footer for a given page considering type rules
|
|
100
|
+
* (Same logic as getHeaderForPage)
|
|
101
|
+
*/
|
|
102
|
+
declare function getFooterForPage(footers: Map<document_d_exports.HeaderFooterType, document_d_exports.HeaderFooter>, pageNumber: number, isFirstPage: boolean, hasDifferentFirstPage: boolean, hasDifferentOddEven: boolean): document_d_exports.HeaderFooter | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* Convert HeaderFooterMap to type-indexed Map
|
|
105
|
+
*
|
|
106
|
+
* @param map - HeaderFooterMap
|
|
107
|
+
* @returns Map indexed by HeaderFooterType
|
|
108
|
+
*/
|
|
109
|
+
declare function headerFooterMapToTypeMap(map: HeaderFooterMap): Map<document_d_exports.HeaderFooterType, document_d_exports.HeaderFooter>;
|
|
110
|
+
/**
|
|
111
|
+
* Check if a HeaderFooter contains any images
|
|
112
|
+
*/
|
|
113
|
+
declare function hasImages(hf: document_d_exports.HeaderFooter): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Check if a HeaderFooter contains any tables
|
|
116
|
+
*/
|
|
117
|
+
declare function hasTables(hf: document_d_exports.HeaderFooter): boolean;
|
|
118
|
+
//#endregion
|
|
119
|
+
export { HeaderFooterMap, buildHeaderFooterMap, createEmptyHeaderFooterMap, getFooterForPage, getHeaderFooterText, getHeaderForPage, hasImages, hasPageNumberField, hasTables, headerFooterMapToTypeMap, isEmptyHeaderFooter, parseFooter, parseFooterReference, parseFooterReferences, parseHeader, parseHeaderFooter, parseHeaderReference, parseHeaderReferences };
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { collectXmlnsDeclarations, parseXml } from "./xmlParser.js";
|
|
2
|
+
import { parseWatermark } from "./watermarkParser.js";
|
|
3
|
+
import { parseFooterReference, parseFooterReferences, parseHeaderReference, parseHeaderReferences } from "./headerFooterRefParser.js";
|
|
4
|
+
import { parseBlockContent } from "./blockContentParser.js";
|
|
5
|
+
//#region src/docx/headerFooterParser.ts
|
|
6
|
+
/**
|
|
7
|
+
* Parse a header XML file (word/header*.xml)
|
|
8
|
+
*
|
|
9
|
+
* @param headerXml - The raw XML content of the header file
|
|
10
|
+
* @param hdrFtrType - The type of header (default, first, even)
|
|
11
|
+
* @param styles - Parsed style map for applying styles
|
|
12
|
+
* @param theme - Parsed theme for color resolution
|
|
13
|
+
* @param numbering - Parsed numbering definitions for lists
|
|
14
|
+
* @param rels - Relationships for resolving hyperlinks/images
|
|
15
|
+
* @param media - Media files for images
|
|
16
|
+
* @returns HeaderFooter object
|
|
17
|
+
*/
|
|
18
|
+
function parseHeader(headerXml, hdrFtrType = "default", styles = null, theme = null, numbering = null, rels = null, media = null) {
|
|
19
|
+
const result = {
|
|
20
|
+
type: "header",
|
|
21
|
+
hdrFtrType,
|
|
22
|
+
content: []
|
|
23
|
+
};
|
|
24
|
+
if (!headerXml) return result;
|
|
25
|
+
const rootElement = parseXml(headerXml).elements?.find((el) => el.type === "element" && (el.name === "w:hdr" || el.name?.endsWith(":hdr")));
|
|
26
|
+
if (!rootElement) return result;
|
|
27
|
+
const watermarkResult = parseWatermark(rootElement);
|
|
28
|
+
if (watermarkResult) {
|
|
29
|
+
result.watermark = watermarkResult.watermark;
|
|
30
|
+
result.rawWatermarkXml = watermarkResult.rawParagraphXml;
|
|
31
|
+
result.watermarkBlockIndex = watermarkResult.blockIndex;
|
|
32
|
+
}
|
|
33
|
+
result.content = parseBlockContent(watermarkResult ? withoutChild(rootElement, watermarkResult.hostingParagraph) : rootElement, styles, theme, numbering, rels, media, {
|
|
34
|
+
inHeaderFooter: true,
|
|
35
|
+
rootXmlns: collectXmlnsDeclarations(rootElement)
|
|
36
|
+
});
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Return a shallow copy of `parent` whose `elements` array omits the
|
|
41
|
+
* single child reference `child`. Used to skip the watermark paragraph
|
|
42
|
+
* when feeding the header into `parseBlockContent` — without this the
|
|
43
|
+
* body parser would emit an empty placeholder paragraph where the
|
|
44
|
+
* watermark sits in the source.
|
|
45
|
+
*/
|
|
46
|
+
function withoutChild(parent, child) {
|
|
47
|
+
return {
|
|
48
|
+
...parent,
|
|
49
|
+
elements: (parent.elements ?? []).filter((el) => el !== child)
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Parse a footer XML file (word/footer*.xml)
|
|
54
|
+
*
|
|
55
|
+
* @param footerXml - The raw XML content of the footer file
|
|
56
|
+
* @param hdrFtrType - The type of footer (default, first, even)
|
|
57
|
+
* @param styles - Parsed style map for applying styles
|
|
58
|
+
* @param theme - Parsed theme for color resolution
|
|
59
|
+
* @param numbering - Parsed numbering definitions for lists
|
|
60
|
+
* @param rels - Relationships for resolving hyperlinks/images
|
|
61
|
+
* @param media - Media files for images
|
|
62
|
+
* @returns HeaderFooter object
|
|
63
|
+
*/
|
|
64
|
+
function parseFooter(footerXml, hdrFtrType = "default", styles = null, theme = null, numbering = null, rels = null, media = null) {
|
|
65
|
+
const result = {
|
|
66
|
+
type: "footer",
|
|
67
|
+
hdrFtrType,
|
|
68
|
+
content: []
|
|
69
|
+
};
|
|
70
|
+
if (!footerXml) return result;
|
|
71
|
+
const rootElement = parseXml(footerXml).elements?.find((el) => el.type === "element" && (el.name === "w:ftr" || el.name?.endsWith(":ftr")));
|
|
72
|
+
if (!rootElement) return result;
|
|
73
|
+
result.content = parseBlockContent(rootElement, styles, theme, numbering, rels, media, {
|
|
74
|
+
inHeaderFooter: true,
|
|
75
|
+
rootXmlns: collectXmlnsDeclarations(rootElement)
|
|
76
|
+
});
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Generic function to parse either header or footer
|
|
81
|
+
*
|
|
82
|
+
* @param xml - Raw XML content
|
|
83
|
+
* @param isHeader - true for header, false for footer
|
|
84
|
+
* @param hdrFtrType - The type (default, first, even)
|
|
85
|
+
* @param styles - Style map
|
|
86
|
+
* @param theme - Theme
|
|
87
|
+
* @param numbering - Numbering definitions
|
|
88
|
+
* @param rels - Relationships
|
|
89
|
+
* @param media - Media files
|
|
90
|
+
* @returns HeaderFooter object
|
|
91
|
+
*/
|
|
92
|
+
function parseHeaderFooter(xml, isHeader, hdrFtrType = "default", styles = null, theme = null, numbering = null, rels = null, media = null) {
|
|
93
|
+
if (isHeader) return parseHeader(xml, hdrFtrType, styles, theme, numbering, rels, media);
|
|
94
|
+
return parseFooter(xml, hdrFtrType, styles, theme, numbering, rels, media);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create a HeaderFooterMap from parsed headers/footers
|
|
98
|
+
*/
|
|
99
|
+
function createHeaderFooterMap(byId) {
|
|
100
|
+
return {
|
|
101
|
+
byId,
|
|
102
|
+
get(rId) {
|
|
103
|
+
return byId.get(rId);
|
|
104
|
+
},
|
|
105
|
+
has(rId) {
|
|
106
|
+
return byId.has(rId);
|
|
107
|
+
},
|
|
108
|
+
getAll() {
|
|
109
|
+
return Array.from(byId.values());
|
|
110
|
+
},
|
|
111
|
+
getByType(type) {
|
|
112
|
+
for (const hf of byId.values()) if (hf.hdrFtrType === type) return hf;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Create an empty HeaderFooterMap
|
|
118
|
+
*/
|
|
119
|
+
function createEmptyHeaderFooterMap() {
|
|
120
|
+
return createHeaderFooterMap(/* @__PURE__ */ new Map());
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Build a HeaderFooterMap from references and XML content
|
|
124
|
+
*
|
|
125
|
+
* @param references - Header or footer references from sectPr
|
|
126
|
+
* @param xmlContents - Map of rId to XML content
|
|
127
|
+
* @param isHeader - true for headers, false for footers
|
|
128
|
+
* @param styles - Style map
|
|
129
|
+
* @param theme - Theme
|
|
130
|
+
* @param numbering - Numbering definitions
|
|
131
|
+
* @param rels - Relationships
|
|
132
|
+
* @param media - Media files
|
|
133
|
+
* @returns HeaderFooterMap with all parsed headers/footers
|
|
134
|
+
*/
|
|
135
|
+
function buildHeaderFooterMap(references, xmlContents, isHeader, styles = null, theme = null, numbering = null, rels = null, media = null) {
|
|
136
|
+
const byId = /* @__PURE__ */ new Map();
|
|
137
|
+
for (const ref of references) {
|
|
138
|
+
const xml = xmlContents.get(ref.rId);
|
|
139
|
+
if (xml) {
|
|
140
|
+
const hf = parseHeaderFooter(xml, isHeader, ref.type, styles, theme, numbering, rels, media);
|
|
141
|
+
byId.set(ref.rId, hf);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return createHeaderFooterMap(byId);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get plain text content of a header/footer
|
|
148
|
+
*/
|
|
149
|
+
function getHeaderFooterText(hf) {
|
|
150
|
+
const texts = [];
|
|
151
|
+
for (const item of hf.content) if (item.type === "paragraph") {
|
|
152
|
+
const paraTexts = [];
|
|
153
|
+
for (const content of item.content) if (content.type === "run") {
|
|
154
|
+
for (const runContent of content.content) if (runContent.type === "text") paraTexts.push(runContent.text);
|
|
155
|
+
}
|
|
156
|
+
texts.push(paraTexts.join(""));
|
|
157
|
+
} else if (item.type === "blockSdt") texts.push(getHeaderFooterText({
|
|
158
|
+
type: hf.type,
|
|
159
|
+
hdrFtrType: hf.hdrFtrType,
|
|
160
|
+
content: item.content
|
|
161
|
+
}));
|
|
162
|
+
else for (const row of item.rows) for (const cell of row.cells) for (const cellContent of cell.content) if (cellContent.type === "paragraph") {
|
|
163
|
+
const paraTexts = [];
|
|
164
|
+
for (const content of cellContent.content) if (content.type === "run") {
|
|
165
|
+
for (const runContent of content.content) if (runContent.type === "text") paraTexts.push(runContent.text);
|
|
166
|
+
}
|
|
167
|
+
texts.push(paraTexts.join(""));
|
|
168
|
+
}
|
|
169
|
+
return texts.join("\n");
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Check if header/footer is empty (no content)
|
|
173
|
+
*/
|
|
174
|
+
function isEmptyHeaderFooter(hf) {
|
|
175
|
+
if (hf.content.length === 0) return true;
|
|
176
|
+
for (const item of hf.content) {
|
|
177
|
+
if (item.type === "table") return false;
|
|
178
|
+
if (item.content.length > 0) for (const content of item.content) {
|
|
179
|
+
if (content.type !== "run") return false;
|
|
180
|
+
for (const rc of content.content) {
|
|
181
|
+
if (rc.type === "text" && rc.text.length > 0) return false;
|
|
182
|
+
if (rc.type !== "text") return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Check if header/footer has page number field
|
|
190
|
+
*/
|
|
191
|
+
function hasPageNumberField(hf) {
|
|
192
|
+
for (const item of hf.content) if (item.type === "paragraph") for (const content of item.content) {
|
|
193
|
+
if ((content.type === "simpleField" || content.type === "complexField") && (content.fieldType === "PAGE" || content.fieldType === "NUMPAGES")) return true;
|
|
194
|
+
if (content.type === "run") {
|
|
195
|
+
for (const rc of content.content) if (rc.type === "fieldChar" && rc.charType === "begin") continue;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get the header for a given page considering type rules
|
|
202
|
+
*
|
|
203
|
+
* @param headers - Map of type to HeaderFooter
|
|
204
|
+
* @param pageNumber - 1-based page number
|
|
205
|
+
* @param isFirstPage - Whether this is the first page of the section
|
|
206
|
+
* @param hasDifferentFirstPage - Whether different first page is enabled
|
|
207
|
+
* @param hasDifferentOddEven - Whether different odd/even pages is enabled
|
|
208
|
+
* @returns The appropriate HeaderFooter or undefined
|
|
209
|
+
*/
|
|
210
|
+
function getHeaderForPage(headers, pageNumber, isFirstPage, hasDifferentFirstPage, hasDifferentOddEven) {
|
|
211
|
+
if (isFirstPage && hasDifferentFirstPage) {
|
|
212
|
+
const firstHeader = headers.get("first");
|
|
213
|
+
if (firstHeader) return firstHeader;
|
|
214
|
+
}
|
|
215
|
+
if (hasDifferentOddEven && pageNumber % 2 === 0) {
|
|
216
|
+
const evenHeader = headers.get("even");
|
|
217
|
+
if (evenHeader) return evenHeader;
|
|
218
|
+
}
|
|
219
|
+
return headers.get("default");
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get the footer for a given page considering type rules
|
|
223
|
+
* (Same logic as getHeaderForPage)
|
|
224
|
+
*/
|
|
225
|
+
function getFooterForPage(footers, pageNumber, isFirstPage, hasDifferentFirstPage, hasDifferentOddEven) {
|
|
226
|
+
if (isFirstPage && hasDifferentFirstPage) {
|
|
227
|
+
const firstFooter = footers.get("first");
|
|
228
|
+
if (firstFooter) return firstFooter;
|
|
229
|
+
}
|
|
230
|
+
if (hasDifferentOddEven && pageNumber % 2 === 0) {
|
|
231
|
+
const evenFooter = footers.get("even");
|
|
232
|
+
if (evenFooter) return evenFooter;
|
|
233
|
+
}
|
|
234
|
+
return footers.get("default");
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Convert HeaderFooterMap to type-indexed Map
|
|
238
|
+
*
|
|
239
|
+
* @param map - HeaderFooterMap
|
|
240
|
+
* @returns Map indexed by HeaderFooterType
|
|
241
|
+
*/
|
|
242
|
+
function headerFooterMapToTypeMap(map) {
|
|
243
|
+
const result = /* @__PURE__ */ new Map();
|
|
244
|
+
for (const hf of map.getAll()) result.set(hf.hdrFtrType, hf);
|
|
245
|
+
return result;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Check if a HeaderFooter contains any images
|
|
249
|
+
*/
|
|
250
|
+
function hasImages(hf) {
|
|
251
|
+
for (const item of hf.content) if (item.type === "paragraph") {
|
|
252
|
+
for (const content of item.content) if (content.type === "run") {
|
|
253
|
+
for (const rc of content.content) if (rc.type === "drawing") return true;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Check if a HeaderFooter contains any tables
|
|
260
|
+
*/
|
|
261
|
+
function hasTables(hf) {
|
|
262
|
+
for (const item of hf.content) if (item.type === "table") return true;
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
//#endregion
|
|
266
|
+
export { buildHeaderFooterMap, createEmptyHeaderFooterMap, getFooterForPage, getHeaderFooterText, getHeaderForPage, hasImages, hasPageNumberField, hasTables, headerFooterMapToTypeMap, isEmptyHeaderFooter, parseFooter, parseFooterReference, parseFooterReferences, parseHeader, parseHeaderFooter, parseHeaderReference, parseHeaderReferences };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
2
|
+
import { XmlElement } from "./xmlParser.js";
|
|
3
|
+
|
|
4
|
+
//#region src/docx/headerFooterRefParser.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Parse a header reference from sectPr (w:headerReference)
|
|
7
|
+
*/
|
|
8
|
+
declare function parseHeaderReference(element: XmlElement): document_d_exports.HeaderReference;
|
|
9
|
+
/**
|
|
10
|
+
* Parse a footer reference from sectPr (w:footerReference)
|
|
11
|
+
*/
|
|
12
|
+
declare function parseFooterReference(element: XmlElement): document_d_exports.FooterReference;
|
|
13
|
+
/**
|
|
14
|
+
* Parse all header references from a sectPr element
|
|
15
|
+
*/
|
|
16
|
+
declare function parseHeaderReferences(sectPr: XmlElement): document_d_exports.HeaderReference[];
|
|
17
|
+
/**
|
|
18
|
+
* Parse all footer references from a sectPr element
|
|
19
|
+
*/
|
|
20
|
+
declare function parseFooterReferences(sectPr: XmlElement): document_d_exports.FooterReference[];
|
|
21
|
+
//#endregion
|
|
22
|
+
export { parseFooterReference, parseFooterReferences, parseHeaderReference, parseHeaderReferences };
|