@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,246 @@
|
|
|
1
|
+
import { getAttribute, parseNumericAttribute } from "./xmlParser.js";
|
|
2
|
+
//#region src/docx/bookmarkParser.ts
|
|
3
|
+
/**
|
|
4
|
+
* Parse a bookmark start element (w:bookmarkStart)
|
|
5
|
+
*
|
|
6
|
+
* Extracts:
|
|
7
|
+
* - id: Numeric identifier (required, matches with bookmarkEnd)
|
|
8
|
+
* - name: Bookmark name (required, used by hyperlinks)
|
|
9
|
+
* - colFirst: First column for table bookmarks (optional)
|
|
10
|
+
* - colLast: Last column for table bookmarks (optional)
|
|
11
|
+
*
|
|
12
|
+
* @param node - The w:bookmarkStart XML element
|
|
13
|
+
* @returns Parsed BookmarkStart object
|
|
14
|
+
*/
|
|
15
|
+
function parseBookmarkStart(node) {
|
|
16
|
+
const bookmark = {
|
|
17
|
+
type: "bookmarkStart",
|
|
18
|
+
id: parseNumericAttribute(node, "w", "id") ?? 0,
|
|
19
|
+
name: getAttribute(node, "w", "name") ?? ""
|
|
20
|
+
};
|
|
21
|
+
const colFirst = parseNumericAttribute(node, "w", "colFirst");
|
|
22
|
+
if (colFirst !== void 0) bookmark.colFirst = colFirst;
|
|
23
|
+
const colLast = parseNumericAttribute(node, "w", "colLast");
|
|
24
|
+
if (colLast !== void 0) bookmark.colLast = colLast;
|
|
25
|
+
return bookmark;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse a bookmark end element (w:bookmarkEnd)
|
|
29
|
+
*
|
|
30
|
+
* Bookmark ends only contain an ID that matches the corresponding start marker.
|
|
31
|
+
*
|
|
32
|
+
* @param node - The w:bookmarkEnd XML element
|
|
33
|
+
* @returns Parsed BookmarkEnd object
|
|
34
|
+
*/
|
|
35
|
+
function parseBookmarkEnd(node) {
|
|
36
|
+
return {
|
|
37
|
+
type: "bookmarkEnd",
|
|
38
|
+
id: parseNumericAttribute(node, "w", "id") ?? 0
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create an empty bookmark map
|
|
43
|
+
*/
|
|
44
|
+
function createBookmarkMap() {
|
|
45
|
+
return {
|
|
46
|
+
byId: /* @__PURE__ */ new Map(),
|
|
47
|
+
byName: /* @__PURE__ */ new Map(),
|
|
48
|
+
bookmarks: []
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Add a bookmark to the map
|
|
53
|
+
*
|
|
54
|
+
* @param map - The bookmark map to update
|
|
55
|
+
* @param bookmark - The bookmark start to add
|
|
56
|
+
*/
|
|
57
|
+
function addBookmark(map, bookmark) {
|
|
58
|
+
map.byId.set(bookmark.id, bookmark);
|
|
59
|
+
if (bookmark.name) map.byName.set(bookmark.name, bookmark);
|
|
60
|
+
map.bookmarks.push(bookmark);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get a bookmark by name (for resolving internal hyperlinks)
|
|
64
|
+
*
|
|
65
|
+
* @param map - The bookmark map to search
|
|
66
|
+
* @param name - Bookmark name to find
|
|
67
|
+
* @returns The BookmarkStart or undefined if not found
|
|
68
|
+
*/
|
|
69
|
+
function getBookmarkByName(map, name) {
|
|
70
|
+
return map.byName.get(name);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get a bookmark by ID (for matching start/end pairs)
|
|
74
|
+
*
|
|
75
|
+
* @param map - The bookmark map to search
|
|
76
|
+
* @param id - Bookmark ID to find
|
|
77
|
+
* @returns The BookmarkStart or undefined if not found
|
|
78
|
+
*/
|
|
79
|
+
function getBookmarkById(map, id) {
|
|
80
|
+
return map.byId.get(id);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if a bookmark exists by name
|
|
84
|
+
*
|
|
85
|
+
* @param map - The bookmark map to search
|
|
86
|
+
* @param name - Bookmark name to check
|
|
87
|
+
* @returns true if bookmark exists
|
|
88
|
+
*/
|
|
89
|
+
function hasBookmark(map, name) {
|
|
90
|
+
return map.byName.has(name);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get all bookmark names in the document
|
|
94
|
+
*
|
|
95
|
+
* @param map - The bookmark map
|
|
96
|
+
* @returns Array of bookmark names
|
|
97
|
+
*/
|
|
98
|
+
function getAllBookmarkNames(map) {
|
|
99
|
+
return Array.from(map.byName.keys());
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if a bookmark is a point bookmark (start and end at same location)
|
|
103
|
+
*
|
|
104
|
+
* Point bookmarks have no content between start and end markers.
|
|
105
|
+
* This is commonly used for insertion points.
|
|
106
|
+
*
|
|
107
|
+
* @param start - The bookmark start
|
|
108
|
+
* @param end - The bookmark end
|
|
109
|
+
* @param contents - Content between them
|
|
110
|
+
* @returns true if this is a point bookmark
|
|
111
|
+
*/
|
|
112
|
+
function isPointBookmark(start, end, contents) {
|
|
113
|
+
return start.id === end.id && contents.length === 0;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if a bookmark is a table column bookmark
|
|
117
|
+
*
|
|
118
|
+
* Table bookmarks have colFirst and colLast attributes indicating
|
|
119
|
+
* they span specific table columns.
|
|
120
|
+
*
|
|
121
|
+
* @param bookmark - The bookmark to check
|
|
122
|
+
* @returns true if bookmark has column range info
|
|
123
|
+
*/
|
|
124
|
+
function isTableBookmark(bookmark) {
|
|
125
|
+
return bookmark.colFirst !== void 0 || bookmark.colLast !== void 0;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Generate an internal hyperlink href from a bookmark name
|
|
129
|
+
*
|
|
130
|
+
* Internal hyperlinks use #anchor format.
|
|
131
|
+
*
|
|
132
|
+
* @param bookmarkName - The bookmark name to link to
|
|
133
|
+
* @returns Href string (e.g., "#BookmarkName")
|
|
134
|
+
*/
|
|
135
|
+
function bookmarkToHref(bookmarkName) {
|
|
136
|
+
return `#${bookmarkName}`;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Extract bookmark name from an internal hyperlink href
|
|
140
|
+
*
|
|
141
|
+
* @param href - The href string
|
|
142
|
+
* @returns Bookmark name or null if not an internal link
|
|
143
|
+
*/
|
|
144
|
+
function hrefToBookmarkName(href) {
|
|
145
|
+
if (href.startsWith("#")) return href.slice(1);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Check if a bookmark is a built-in Word bookmark
|
|
150
|
+
*
|
|
151
|
+
* Word uses certain reserved bookmark names for special purposes:
|
|
152
|
+
* - _GoBack: Last editing position
|
|
153
|
+
* - _Toc*: Table of contents entries
|
|
154
|
+
* - _Ref*: Cross-reference anchors
|
|
155
|
+
* - _Hlt*: Highlight ranges
|
|
156
|
+
*
|
|
157
|
+
* @param name - Bookmark name to check
|
|
158
|
+
* @returns true if this is a built-in bookmark
|
|
159
|
+
*/
|
|
160
|
+
function isBuiltInBookmark(name) {
|
|
161
|
+
if (!name) return false;
|
|
162
|
+
if (name.startsWith("_")) return true;
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if a bookmark is a TOC entry bookmark
|
|
167
|
+
*
|
|
168
|
+
* @param name - Bookmark name to check
|
|
169
|
+
* @returns true if bookmark is for TOC
|
|
170
|
+
*/
|
|
171
|
+
function isTocBookmark(name) {
|
|
172
|
+
return name.startsWith("_Toc");
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Check if a bookmark is a cross-reference anchor
|
|
176
|
+
*
|
|
177
|
+
* @param name - Bookmark name to check
|
|
178
|
+
* @returns true if bookmark is for cross-reference
|
|
179
|
+
*/
|
|
180
|
+
function isRefBookmark(name) {
|
|
181
|
+
return name.startsWith("_Ref");
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get bookmark type category
|
|
185
|
+
*
|
|
186
|
+
* @param name - Bookmark name
|
|
187
|
+
* @returns Bookmark type
|
|
188
|
+
*/
|
|
189
|
+
function getBookmarkType(name) {
|
|
190
|
+
if (name === "_GoBack") return "goBack";
|
|
191
|
+
if (isTocBookmark(name)) return "toc";
|
|
192
|
+
if (isRefBookmark(name)) return "ref";
|
|
193
|
+
if (isBuiltInBookmark(name)) return "internal";
|
|
194
|
+
return "user";
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Validate that all bookmark starts have matching ends
|
|
198
|
+
*
|
|
199
|
+
* @param starts - Array of bookmark starts
|
|
200
|
+
* @param ends - Array of bookmark ends
|
|
201
|
+
* @returns Object with validation results
|
|
202
|
+
*/
|
|
203
|
+
function validateBookmarkPairs(starts, ends) {
|
|
204
|
+
const startIds = new Set(starts.map((s) => s.id));
|
|
205
|
+
const endIds = new Set(ends.map((e) => e.id));
|
|
206
|
+
const unmatchedStarts = starts.filter((s) => !endIds.has(s.id));
|
|
207
|
+
const unmatchedEnds = ends.filter((e) => !startIds.has(e.id));
|
|
208
|
+
return {
|
|
209
|
+
valid: unmatchedStarts.length === 0 && unmatchedEnds.length === 0,
|
|
210
|
+
unmatchedStarts,
|
|
211
|
+
unmatchedEnds
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Validate a bookmark name (for creating new bookmarks)
|
|
216
|
+
*
|
|
217
|
+
* Valid bookmark names:
|
|
218
|
+
* - Cannot be empty
|
|
219
|
+
* - Must start with a letter or underscore
|
|
220
|
+
* - Can contain letters, digits, and underscores
|
|
221
|
+
* - Cannot exceed 40 characters
|
|
222
|
+
*
|
|
223
|
+
* @param name - Name to validate
|
|
224
|
+
* @returns Object with validation result and error message if invalid
|
|
225
|
+
*/
|
|
226
|
+
function validateBookmarkName(name) {
|
|
227
|
+
if (!name) return {
|
|
228
|
+
valid: false,
|
|
229
|
+
error: "Bookmark name cannot be empty"
|
|
230
|
+
};
|
|
231
|
+
if (name.length > 40) return {
|
|
232
|
+
valid: false,
|
|
233
|
+
error: "Bookmark name cannot exceed 40 characters"
|
|
234
|
+
};
|
|
235
|
+
if (!/^[a-zA-Z_]/u.test(name)) return {
|
|
236
|
+
valid: false,
|
|
237
|
+
error: "Bookmark name must start with a letter or underscore"
|
|
238
|
+
};
|
|
239
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/u.test(name)) return {
|
|
240
|
+
valid: false,
|
|
241
|
+
error: "Bookmark name can only contain letters, digits, and underscores"
|
|
242
|
+
};
|
|
243
|
+
return { valid: true };
|
|
244
|
+
}
|
|
245
|
+
//#endregion
|
|
246
|
+
export { addBookmark, bookmarkToHref, createBookmarkMap, getAllBookmarkNames, getBookmarkById, getBookmarkByName, getBookmarkType, hasBookmark, hrefToBookmarkName, isBuiltInBookmark, isPointBookmark, isRefBookmark, isTableBookmark, isTocBookmark, parseBookmarkEnd, parseBookmarkStart, validateBookmarkName, validateBookmarkPairs };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
2
|
+
|
|
3
|
+
//#region src/docx/bookmarkPlacement.d.ts
|
|
4
|
+
type BookmarkMarker = document_d_exports.BookmarkStart | document_d_exports.BookmarkEnd;
|
|
5
|
+
declare const appendBookmarkMarkerToLastParagraphInBlocks: (blocks: readonly document_d_exports.BlockContent[], marker: BookmarkMarker) => boolean;
|
|
6
|
+
declare const prependBookmarkMarkersToFirstParagraphInBlocks: (blocks: readonly document_d_exports.BlockContent[], markers: readonly BookmarkMarker[]) => boolean;
|
|
7
|
+
declare const appendBookmarkMarkerToLastParagraphInCells: (cells: readonly document_d_exports.TableCell[], marker: BookmarkMarker) => boolean;
|
|
8
|
+
declare const prependBookmarkMarkersToFirstParagraphInCell: (cell: document_d_exports.TableCell, markers: readonly BookmarkMarker[]) => boolean;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { BookmarkMarker, appendBookmarkMarkerToLastParagraphInBlocks, appendBookmarkMarkerToLastParagraphInCells, prependBookmarkMarkersToFirstParagraphInBlocks, prependBookmarkMarkersToFirstParagraphInCell };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//#region src/docx/bookmarkPlacement.ts
|
|
2
|
+
const appendBookmarkMarkerToLastParagraphInBlocks = (blocks, marker) => {
|
|
3
|
+
for (let index = blocks.length - 1; index >= 0; index -= 1) {
|
|
4
|
+
const block = blocks[index];
|
|
5
|
+
if (block && appendBookmarkMarkerToLastParagraph(block, marker)) return true;
|
|
6
|
+
}
|
|
7
|
+
return false;
|
|
8
|
+
};
|
|
9
|
+
const prependBookmarkMarkersToFirstParagraphInBlocks = (blocks, markers) => {
|
|
10
|
+
if (markers.length === 0) return true;
|
|
11
|
+
for (const block of blocks) if (prependBookmarkMarkersToFirstParagraph(block, markers)) return true;
|
|
12
|
+
return false;
|
|
13
|
+
};
|
|
14
|
+
const appendBookmarkMarkerToLastParagraphInCells = (cells, marker) => {
|
|
15
|
+
for (let index = cells.length - 1; index >= 0; index -= 1) {
|
|
16
|
+
const cell = cells[index];
|
|
17
|
+
if (cell && appendBookmarkMarkerToLastParagraphInBlocks(cell.content, marker)) return true;
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
};
|
|
21
|
+
const prependBookmarkMarkersToFirstParagraphInCell = (cell, markers) => prependBookmarkMarkersToFirstParagraphInBlocks(cell.content, markers);
|
|
22
|
+
const appendBookmarkMarkerToLastParagraph = (block, marker) => {
|
|
23
|
+
if (block.type === "paragraph") {
|
|
24
|
+
block.content.push(marker);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (block.type === "table") return appendBookmarkMarkerToLastParagraphInTable(block, marker);
|
|
28
|
+
return appendBookmarkMarkerToLastParagraphInBlocks(block.content, marker);
|
|
29
|
+
};
|
|
30
|
+
const appendBookmarkMarkerToLastParagraphInTable = (table, marker) => {
|
|
31
|
+
for (let rowIndex = table.rows.length - 1; rowIndex >= 0; rowIndex -= 1) {
|
|
32
|
+
const row = table.rows[rowIndex];
|
|
33
|
+
if (row && appendBookmarkMarkerToLastParagraphInCells(row.cells, marker)) return true;
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
};
|
|
37
|
+
const prependBookmarkMarkersToFirstParagraph = (block, markers) => {
|
|
38
|
+
if (block.type === "paragraph") {
|
|
39
|
+
block.content.unshift(...markers);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
if (block.type === "table") return prependBookmarkMarkersToFirstParagraphInTable(block, markers);
|
|
43
|
+
return prependBookmarkMarkersToFirstParagraphInBlocks(block.content, markers);
|
|
44
|
+
};
|
|
45
|
+
const prependBookmarkMarkersToFirstParagraphInTable = (table, markers) => {
|
|
46
|
+
for (const row of table.rows) for (const cell of row.cells) if (prependBookmarkMarkersToFirstParagraphInCell(cell, markers)) return true;
|
|
47
|
+
return false;
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { appendBookmarkMarkerToLastParagraphInBlocks, appendBookmarkMarkerToLastParagraphInCells, prependBookmarkMarkersToFirstParagraphInBlocks, prependBookmarkMarkersToFirstParagraphInCell };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//#region src/docx/bulletMarkers.ts
|
|
2
|
+
const SYMBOL_BULLET_MAP = {
|
|
3
|
+
183: "•",
|
|
4
|
+
111: "○",
|
|
5
|
+
167: "■",
|
|
6
|
+
252: "✓",
|
|
7
|
+
110: "■",
|
|
8
|
+
113: "○",
|
|
9
|
+
117: "◆",
|
|
10
|
+
118: "❖",
|
|
11
|
+
168: "✓",
|
|
12
|
+
251: "✓",
|
|
13
|
+
254: "✓",
|
|
14
|
+
61623: "•",
|
|
15
|
+
61550: "■",
|
|
16
|
+
61551: "○",
|
|
17
|
+
61607: "■",
|
|
18
|
+
61692: "✓",
|
|
19
|
+
8226: "•",
|
|
20
|
+
9679: "●",
|
|
21
|
+
9675: "○",
|
|
22
|
+
9632: "■",
|
|
23
|
+
9633: "□",
|
|
24
|
+
9670: "◆",
|
|
25
|
+
9671: "◇",
|
|
26
|
+
8211: "–",
|
|
27
|
+
8212: "—",
|
|
28
|
+
62: ">",
|
|
29
|
+
45: "-"
|
|
30
|
+
};
|
|
31
|
+
const convertBulletToUnicode = (bulletChar) => {
|
|
32
|
+
if (!bulletChar || bulletChar.trim() === "") return "•";
|
|
33
|
+
const charCode = bulletChar.codePointAt(0);
|
|
34
|
+
if (charCode === void 0) return "•";
|
|
35
|
+
const mapped = SYMBOL_BULLET_MAP[charCode];
|
|
36
|
+
if (mapped !== void 0) return mapped;
|
|
37
|
+
if (charCode >= 57344 && charCode <= 63743) return "•";
|
|
38
|
+
if (charCode < 32 || charCode >= 127 && charCode < 160) return "•";
|
|
39
|
+
return bulletChar;
|
|
40
|
+
};
|
|
41
|
+
//#endregion
|
|
42
|
+
export { convertBulletToUnicode };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
2
|
+
import { StyleMap } from "./styleParser.js";
|
|
3
|
+
|
|
4
|
+
//#region src/docx/commentParser.d.ts
|
|
5
|
+
type CommentExtendedInfo = {
|
|
6
|
+
parentParaId?: string;
|
|
7
|
+
done?: boolean;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Build a lookup from paraId → reply-thread info from
|
|
11
|
+
* commentsExtended.xml. The XML structure is:
|
|
12
|
+
*
|
|
13
|
+
* ```xml
|
|
14
|
+
* <w15:commentsEx>
|
|
15
|
+
* <w15:commentEx w15:paraId="..." w15:done="0"/>
|
|
16
|
+
* <w15:commentEx w15:paraId="..." w15:paraIdParent="..." w15:done="1"/>
|
|
17
|
+
* </w15:commentsEx>
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* `w15:paraIdParent` points at the parent thread's paraId; `w15:done`
|
|
21
|
+
* (`"1"` / `"true"`) marks the thread resolved.
|
|
22
|
+
*/
|
|
23
|
+
declare function parseCommentsExtended(xml: string): Map<string, CommentExtendedInfo>;
|
|
24
|
+
/**
|
|
25
|
+
* Parse comments.xml into an array of Comment objects.
|
|
26
|
+
*
|
|
27
|
+
* If `commentsExtensibleXml` is provided, UTC timestamps are
|
|
28
|
+
* cross-referenced via paraId and preferred over the ambiguous w:date
|
|
29
|
+
* local time. If `commentsExtendedXml` is provided, reply-thread
|
|
30
|
+
* parent links (`parentId`) and resolved state (`done`) are populated.
|
|
31
|
+
*/
|
|
32
|
+
declare function parseComments(commentsXml: string | null, styles: StyleMap | null, theme: document_d_exports.Theme | null, rels: document_d_exports.RelationshipMap, media: Map<string, document_d_exports.MediaFile>, commentsExtensibleXml?: string | null, commentsExtendedXml?: string | null): document_d_exports.Comment[];
|
|
33
|
+
//#endregion
|
|
34
|
+
export { CommentExtendedInfo, parseComments, parseCommentsExtended };
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { findChild, getAttribute, getChildElements, parseXml } from "./xmlParser.js";
|
|
2
|
+
import { parseParagraph } from "./paragraphParser.js";
|
|
3
|
+
//#region src/docx/commentParser.ts
|
|
4
|
+
/**
|
|
5
|
+
* Build a lookup from paraId → dateUtc from commentsExtensible.xml
|
|
6
|
+
*
|
|
7
|
+
* The XML structure is:
|
|
8
|
+
* <w16cex:commentsExtensible>
|
|
9
|
+
* <w16cex:comment w16cex:paraId="..." w16cex:dateUtc="2024-02-10T14:30:45Z"/>
|
|
10
|
+
* </w16cex:commentsExtensible>
|
|
11
|
+
*/
|
|
12
|
+
function parseCommentsExtensible(xml) {
|
|
13
|
+
const dateUtcByParaId = /* @__PURE__ */ new Map();
|
|
14
|
+
const root = parseXml(xml);
|
|
15
|
+
const container = findChild(root, "w16cex", "commentsExtensible") ?? root;
|
|
16
|
+
for (const child of getChildElements(container)) {
|
|
17
|
+
if ((child.name?.replace(/^.*:/u, "") ?? "") !== "comment") continue;
|
|
18
|
+
const paraId = getAttribute(child, "w16cex", "paraId") ?? getAttribute(child, "w15", "paraId") ?? child.attributes?.["w16cex:paraId"] ?? child.attributes?.["w15:paraId"];
|
|
19
|
+
const dateUtc = getAttribute(child, "w16cex", "dateUtc") ?? getAttribute(child, "w15", "dateUtc") ?? child.attributes?.["w16cex:dateUtc"] ?? child.attributes?.["w15:dateUtc"];
|
|
20
|
+
if (paraId && dateUtc) dateUtcByParaId.set(String(paraId).toUpperCase(), String(dateUtc));
|
|
21
|
+
}
|
|
22
|
+
return dateUtcByParaId;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build a lookup from paraId → reply-thread info from
|
|
26
|
+
* commentsExtended.xml. The XML structure is:
|
|
27
|
+
*
|
|
28
|
+
* ```xml
|
|
29
|
+
* <w15:commentsEx>
|
|
30
|
+
* <w15:commentEx w15:paraId="..." w15:done="0"/>
|
|
31
|
+
* <w15:commentEx w15:paraId="..." w15:paraIdParent="..." w15:done="1"/>
|
|
32
|
+
* </w15:commentsEx>
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* `w15:paraIdParent` points at the parent thread's paraId; `w15:done`
|
|
36
|
+
* (`"1"` / `"true"`) marks the thread resolved.
|
|
37
|
+
*/
|
|
38
|
+
function parseCommentsExtended(xml) {
|
|
39
|
+
const infoByParaId = /* @__PURE__ */ new Map();
|
|
40
|
+
const root = parseXml(xml);
|
|
41
|
+
const container = findChild(root, "w15", "commentsEx") ?? root;
|
|
42
|
+
for (const child of getChildElements(container)) {
|
|
43
|
+
if ((child.name?.replace(/^.*:/u, "") ?? "") !== "commentEx") continue;
|
|
44
|
+
const paraId = getAttribute(child, "w15", "paraId") ?? child.attributes?.["w15:paraId"];
|
|
45
|
+
if (!paraId) continue;
|
|
46
|
+
const parentParaId = getAttribute(child, "w15", "paraIdParent") ?? child.attributes?.["w15:paraIdParent"];
|
|
47
|
+
const doneAttr = getAttribute(child, "w15", "done") ?? child.attributes?.["w15:done"];
|
|
48
|
+
const info = {};
|
|
49
|
+
if (parentParaId) info.parentParaId = String(parentParaId).toUpperCase();
|
|
50
|
+
if (doneAttr !== void 0) {
|
|
51
|
+
const v = String(doneAttr).toLowerCase();
|
|
52
|
+
info.done = v === "1" || v === "true";
|
|
53
|
+
}
|
|
54
|
+
infoByParaId.set(String(paraId).toUpperCase(), info);
|
|
55
|
+
}
|
|
56
|
+
return infoByParaId;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parse comments.xml into an array of Comment objects.
|
|
60
|
+
*
|
|
61
|
+
* If `commentsExtensibleXml` is provided, UTC timestamps are
|
|
62
|
+
* cross-referenced via paraId and preferred over the ambiguous w:date
|
|
63
|
+
* local time. If `commentsExtendedXml` is provided, reply-thread
|
|
64
|
+
* parent links (`parentId`) and resolved state (`done`) are populated.
|
|
65
|
+
*/
|
|
66
|
+
function parseComments(commentsXml, styles, theme, rels, media, commentsExtensibleXml, commentsExtendedXml) {
|
|
67
|
+
if (!commentsXml) return [];
|
|
68
|
+
const root = parseXml(commentsXml);
|
|
69
|
+
const dateUtcByParaId = commentsExtensibleXml ? parseCommentsExtensible(commentsExtensibleXml) : /* @__PURE__ */ new Map();
|
|
70
|
+
const extendedByParaId = commentsExtendedXml ? parseCommentsExtended(commentsExtendedXml) : /* @__PURE__ */ new Map();
|
|
71
|
+
const children = getChildElements(findChild(root, "w", "comments") ?? root);
|
|
72
|
+
const comments = [];
|
|
73
|
+
const commentIdByParaId = /* @__PURE__ */ new Map();
|
|
74
|
+
const paraIdByCommentIndex = /* @__PURE__ */ new Map();
|
|
75
|
+
for (const child of children) {
|
|
76
|
+
if ((child.name?.replace(/^.*:/u, "") ?? "") !== "comment") continue;
|
|
77
|
+
const id = Number.parseInt(getAttribute(child, "w", "id") ?? "0", 10);
|
|
78
|
+
const author = getAttribute(child, "w", "author") ?? "Unknown";
|
|
79
|
+
const rawInitials = getAttribute(child, "w", "initials");
|
|
80
|
+
const initials = rawInitials !== null ? String(rawInitials) : void 0;
|
|
81
|
+
const rawDate = getAttribute(child, "w", "date");
|
|
82
|
+
const localDate = rawDate !== null ? String(rawDate) : void 0;
|
|
83
|
+
let rawParaId = getAttribute(child, "w14", "paraId") ?? child.attributes?.["w14:paraId"] ?? getAttribute(child, "w15", "paraId") ?? child.attributes?.["w15:paraId"] ?? getAttribute(child, "w", "paraId");
|
|
84
|
+
if (!rawParaId) for (const sub of getChildElements(child)) {
|
|
85
|
+
if ((sub.name?.replace(/^.*:/u, "") ?? "") !== "p") continue;
|
|
86
|
+
const subParaId = getAttribute(sub, "w14", "paraId") ?? sub.attributes?.["w14:paraId"] ?? getAttribute(sub, "w15", "paraId") ?? sub.attributes?.["w15:paraId"] ?? getAttribute(sub, "w", "paraId");
|
|
87
|
+
if (subParaId) rawParaId = subParaId;
|
|
88
|
+
}
|
|
89
|
+
const paraId = rawParaId ? String(rawParaId).toUpperCase() : null;
|
|
90
|
+
const date = (paraId ? dateUtcByParaId.get(paraId) : void 0) ?? localDate;
|
|
91
|
+
const done = (paraId ? extendedByParaId.get(paraId) : void 0)?.done;
|
|
92
|
+
const paragraphs = [];
|
|
93
|
+
for (const contentChild of getChildElements(child)) if ((contentChild.name?.replace(/^.*:/u, "") ?? "") === "p") {
|
|
94
|
+
const paragraph = parseParagraph(contentChild, styles, theme, null, rels, media);
|
|
95
|
+
paragraphs.push(paragraph);
|
|
96
|
+
}
|
|
97
|
+
const commentIndex = comments.length;
|
|
98
|
+
if (paraId) {
|
|
99
|
+
commentIdByParaId.set(paraId, id);
|
|
100
|
+
paraIdByCommentIndex.set(commentIndex, paraId);
|
|
101
|
+
}
|
|
102
|
+
comments.push({
|
|
103
|
+
id,
|
|
104
|
+
author,
|
|
105
|
+
...initials !== void 0 ? { initials } : {},
|
|
106
|
+
...date !== void 0 ? { date } : {},
|
|
107
|
+
...done !== void 0 ? { done } : {},
|
|
108
|
+
content: paragraphs
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
for (let i = 0; i < comments.length; i++) {
|
|
112
|
+
const comment = comments[i];
|
|
113
|
+
if (!comment) continue;
|
|
114
|
+
const paraId = paraIdByCommentIndex.get(i);
|
|
115
|
+
if (!paraId) continue;
|
|
116
|
+
const parentParaId = extendedByParaId.get(paraId)?.parentParaId;
|
|
117
|
+
if (!parentParaId) continue;
|
|
118
|
+
const parentId = commentIdByParaId.get(parentParaId);
|
|
119
|
+
if (parentId !== void 0 && parentId !== comment.id) comments[i] = {
|
|
120
|
+
...comment,
|
|
121
|
+
parentId
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return comments;
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
export { parseComments, parseCommentsExtended };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
2
|
+
|
|
3
|
+
//#region src/docx/commentReferenceNormalization.d.ts
|
|
4
|
+
type NormalizeCommentReferencesInput = {
|
|
5
|
+
documentBody: document_d_exports.DocumentBody;
|
|
6
|
+
comments: readonly document_d_exports.Comment[];
|
|
7
|
+
headers?: Map<string, document_d_exports.HeaderFooter>;
|
|
8
|
+
footers?: Map<string, document_d_exports.HeaderFooter>;
|
|
9
|
+
footnotes?: readonly document_d_exports.Footnote[];
|
|
10
|
+
endnotes?: readonly document_d_exports.Endnote[];
|
|
11
|
+
};
|
|
12
|
+
type NormalizeCommentReferencesResult = {
|
|
13
|
+
removedDanglingReferences: number;
|
|
14
|
+
reanchoredUnbalancedRanges: number;
|
|
15
|
+
};
|
|
16
|
+
declare const normalizeCommentReferences: ({
|
|
17
|
+
documentBody,
|
|
18
|
+
comments,
|
|
19
|
+
headers,
|
|
20
|
+
footers,
|
|
21
|
+
footnotes,
|
|
22
|
+
endnotes
|
|
23
|
+
}: NormalizeCommentReferencesInput) => NormalizeCommentReferencesResult;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { normalizeCommentReferences };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
//#region src/docx/commentReferenceNormalization.ts
|
|
2
|
+
const normalizeCommentReferences = ({ documentBody, comments, headers, footers, footnotes, endnotes }) => {
|
|
3
|
+
const validCommentIds = new Set(comments.map((comment) => comment.id));
|
|
4
|
+
const rangeMarkers = [];
|
|
5
|
+
let removedDanglingReferences = 0;
|
|
6
|
+
const normalizeParagraph = (paragraph) => {
|
|
7
|
+
const nextContent = [];
|
|
8
|
+
for (const content of paragraph.content) {
|
|
9
|
+
if (isCommentMarker(content) && !validCommentIds.has(content.id)) {
|
|
10
|
+
removedDanglingReferences += 1;
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
nextContent.push(content);
|
|
14
|
+
if (isCommentRangeMarker(content)) rangeMarkers.push({
|
|
15
|
+
content: nextContent,
|
|
16
|
+
index: nextContent.length - 1,
|
|
17
|
+
id: content.id,
|
|
18
|
+
type: content.type
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
paragraph.content = nextContent;
|
|
22
|
+
};
|
|
23
|
+
const normalizeTable = (table) => {
|
|
24
|
+
for (const row of table.rows) for (const cell of row.cells) normalizeBlocks(cell.content);
|
|
25
|
+
};
|
|
26
|
+
const normalizeBlock = (block) => {
|
|
27
|
+
if (block.type === "paragraph") {
|
|
28
|
+
normalizeParagraph(block);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (block.type === "table") {
|
|
32
|
+
normalizeTable(block);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
normalizeBlocks(block.content);
|
|
36
|
+
};
|
|
37
|
+
const normalizeBlocks = (blocks) => {
|
|
38
|
+
for (const block of blocks) normalizeBlock(block);
|
|
39
|
+
};
|
|
40
|
+
normalizeBlocks(documentBody.content);
|
|
41
|
+
for (const header of headers?.values() ?? []) normalizeBlocks(header.content);
|
|
42
|
+
for (const footer of footers?.values() ?? []) normalizeBlocks(footer.content);
|
|
43
|
+
for (const footnote of footnotes ?? []) normalizeBlocks(footnote.content);
|
|
44
|
+
for (const endnote of endnotes ?? []) normalizeBlocks(endnote.content);
|
|
45
|
+
for (const comment of comments) for (const paragraph of comment.content) normalizeParagraph(paragraph);
|
|
46
|
+
return {
|
|
47
|
+
removedDanglingReferences,
|
|
48
|
+
reanchoredUnbalancedRanges: reanchorUnbalancedCommentRanges(rangeMarkers)
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
const reanchorUnbalancedCommentRanges = (rangeMarkers) => {
|
|
52
|
+
const byId = /* @__PURE__ */ new Map();
|
|
53
|
+
for (const marker of rangeMarkers) {
|
|
54
|
+
const markers = byId.get(marker.id);
|
|
55
|
+
if (markers) {
|
|
56
|
+
markers.push(marker);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
byId.set(marker.id, [marker]);
|
|
60
|
+
}
|
|
61
|
+
let reanchoredCount = 0;
|
|
62
|
+
for (const markers of byId.values()) {
|
|
63
|
+
let openStart = null;
|
|
64
|
+
for (const marker of markers) {
|
|
65
|
+
if (marker.type === "commentRangeStart") {
|
|
66
|
+
if (openStart) {
|
|
67
|
+
reanchorCommentRangeMarker(marker);
|
|
68
|
+
reanchoredCount += 1;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
openStart = marker;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!openStart) {
|
|
75
|
+
reanchorCommentRangeMarker(marker);
|
|
76
|
+
reanchoredCount += 1;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
openStart = null;
|
|
80
|
+
}
|
|
81
|
+
if (openStart) {
|
|
82
|
+
reanchorCommentRangeMarker(openStart);
|
|
83
|
+
reanchoredCount += 1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return reanchoredCount;
|
|
87
|
+
};
|
|
88
|
+
const reanchorCommentRangeMarker = (marker) => {
|
|
89
|
+
marker.content[marker.index] = {
|
|
90
|
+
type: "commentReference",
|
|
91
|
+
id: marker.id
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
const isCommentMarker = (content) => content.type === "commentRangeStart" || content.type === "commentRangeEnd" || content.type === "commentReference";
|
|
95
|
+
const isCommentRangeMarker = (content) => content.type === "commentRangeStart" || content.type === "commentRangeEnd";
|
|
96
|
+
//#endregion
|
|
97
|
+
export { normalizeCommentReferences };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
2
|
+
|
|
3
|
+
//#region src/docx/commentReplyMarkers.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Synthesize reply range markers into a document model in place, so every
|
|
6
|
+
* reply comment picks up its parent's anchor before `document.xml` is
|
|
7
|
+
* serialized. Idempotent and safe to call on both save paths. Returns the
|
|
8
|
+
* number of markers injected.
|
|
9
|
+
*/
|
|
10
|
+
declare const applyReplyThreadMarkers: (doc: document_d_exports.Document) => number;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the model holds a reply comment that has no anchor of its own yet —
|
|
13
|
+
* i.e. one that still needs {@link applyReplyThreadMarkers} to run. The
|
|
14
|
+
* selective-save path uses this to bail to a full repack, which is the path
|
|
15
|
+
* that owns marker synthesis (selective only patches individually-changed
|
|
16
|
+
* paragraphs, so it cannot add a reply's markers to the parent's paragraph).
|
|
17
|
+
*/
|
|
18
|
+
declare const hasUnsynthesizedReplyRanges: (doc: document_d_exports.Document) => boolean;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { applyReplyThreadMarkers, hasUnsynthesizedReplyRanges };
|