@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,23 @@
|
|
|
1
|
+
import { ParsedFieldInstruction } from "../docx/fieldParser.js";
|
|
2
|
+
import { FieldContext } from "./fieldContext.js";
|
|
3
|
+
|
|
4
|
+
//#region src/fields/evaluateField.d.ts
|
|
5
|
+
type EvaluateFieldOptions = {
|
|
6
|
+
/** Shown for unsupported field types and unresolved references. */fallback?: string; /** Run identity (`pmStart`) used to look up a precomputed SEQ value. */
|
|
7
|
+
instanceId?: number; /** Locked fields preserve their cached result instead of recalculating. */
|
|
8
|
+
locked?: boolean;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Evaluate a parsed field instruction to its display string for `ctx`.
|
|
12
|
+
*
|
|
13
|
+
* Returns `options.fallback` (default empty) for field types this engine does
|
|
14
|
+
* not compute and for references that do not resolve in the current layout, so
|
|
15
|
+
* an unsupported or dangling field keeps its last-known cached text rather than
|
|
16
|
+
* vanishing. Pure: all position-dependent inputs come from `ctx`.
|
|
17
|
+
*/
|
|
18
|
+
declare function evaluateField(parsed: ParsedFieldInstruction, ctx: FieldContext, options?: EvaluateFieldOptions): string;
|
|
19
|
+
/** Parse `instruction` then evaluate it; convenience for callers holding the
|
|
20
|
+
* raw instruction string rather than a pre-parsed instruction. */
|
|
21
|
+
declare function evaluateFieldInstruction(instruction: string, ctx: FieldContext, options?: EvaluateFieldOptions): string;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { evaluateField, evaluateFieldInstruction };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { computePageNumber, formatDate, parseFieldInstruction } from "../docx/fieldParser.js";
|
|
2
|
+
//#region src/fields/evaluateField.ts
|
|
3
|
+
/** The `\@` date picture, or undefined. Unlike the general format switch, this
|
|
4
|
+
* must NOT match `\*` (e.g. `\* MERGEFORMAT`), which is not a date format. */
|
|
5
|
+
function dateFormatSwitch(parsed) {
|
|
6
|
+
return parsed.switches.find((s) => s.switch === "@")?.value;
|
|
7
|
+
}
|
|
8
|
+
function hasRefNumberingSwitch(parsed) {
|
|
9
|
+
return hasAnySwitch(parsed, [
|
|
10
|
+
"n",
|
|
11
|
+
"r",
|
|
12
|
+
"w"
|
|
13
|
+
]);
|
|
14
|
+
}
|
|
15
|
+
function hasPageRefPositionSwitch(parsed) {
|
|
16
|
+
return hasAnySwitch(parsed, ["p"]);
|
|
17
|
+
}
|
|
18
|
+
function hasSeqHiddenSwitch(parsed) {
|
|
19
|
+
return hasAnySwitch(parsed, ["h"]);
|
|
20
|
+
}
|
|
21
|
+
function hasAnySwitch(parsed, names) {
|
|
22
|
+
return names.some((name) => hasSwitch(parsed, name));
|
|
23
|
+
}
|
|
24
|
+
function hasSwitch(parsed, name) {
|
|
25
|
+
const normalized = name.toLowerCase();
|
|
26
|
+
if (parsed.switches.some((s) => s.switch.toLowerCase() === normalized)) return true;
|
|
27
|
+
return new RegExp(`\\\\${normalized}\\b`, "iu").test(parsed.raw);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Evaluate a parsed field instruction to its display string for `ctx`.
|
|
31
|
+
*
|
|
32
|
+
* Returns `options.fallback` (default empty) for field types this engine does
|
|
33
|
+
* not compute and for references that do not resolve in the current layout, so
|
|
34
|
+
* an unsupported or dangling field keeps its last-known cached text rather than
|
|
35
|
+
* vanishing. Pure: all position-dependent inputs come from `ctx`.
|
|
36
|
+
*/
|
|
37
|
+
function evaluateField(parsed, ctx, options = {}) {
|
|
38
|
+
const fallback = options.fallback ?? "";
|
|
39
|
+
if (options.locked) return fallback;
|
|
40
|
+
switch (parsed.type) {
|
|
41
|
+
case "PAGE": return computePageNumber(ctx.pageNumber, parsed);
|
|
42
|
+
case "NUMPAGES": return computePageNumber(ctx.totalPages, parsed);
|
|
43
|
+
case "SECTIONPAGES": return ctx.sectionPages === void 0 ? fallback : computePageNumber(ctx.sectionPages, parsed);
|
|
44
|
+
case "TIME": {
|
|
45
|
+
const format = dateFormatSwitch(parsed);
|
|
46
|
+
return format ? formatDate(ctx.now, format) : ctx.now.toLocaleTimeString();
|
|
47
|
+
}
|
|
48
|
+
case "DATE": {
|
|
49
|
+
const format = dateFormatSwitch(parsed);
|
|
50
|
+
return format ? formatDate(ctx.now, format) : ctx.now.toLocaleDateString();
|
|
51
|
+
}
|
|
52
|
+
case "CREATEDATE":
|
|
53
|
+
case "SAVEDATE":
|
|
54
|
+
case "PRINTDATE": return fallback;
|
|
55
|
+
case "PAGEREF": {
|
|
56
|
+
if (hasPageRefPositionSwitch(parsed)) return fallback;
|
|
57
|
+
const page = parsed.argument ? ctx.bookmarkPages.get(parsed.argument) : void 0;
|
|
58
|
+
return page === void 0 ? fallback : computePageNumber(page, parsed);
|
|
59
|
+
}
|
|
60
|
+
case "REF":
|
|
61
|
+
if (hasRefNumberingSwitch(parsed)) return fallback;
|
|
62
|
+
return (parsed.argument ? ctx.bookmarkText.get(parsed.argument) : void 0) ?? fallback;
|
|
63
|
+
case "SEQ": {
|
|
64
|
+
if (hasSeqHiddenSwitch(parsed)) return fallback;
|
|
65
|
+
const value = options.instanceId === void 0 ? void 0 : ctx.seqValues.get(options.instanceId);
|
|
66
|
+
return value === void 0 ? fallback : computePageNumber(value, parsed);
|
|
67
|
+
}
|
|
68
|
+
default: return fallback;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Parse `instruction` then evaluate it; convenience for callers holding the
|
|
72
|
+
* raw instruction string rather than a pre-parsed instruction. */
|
|
73
|
+
function evaluateFieldInstruction(instruction, ctx, options = {}) {
|
|
74
|
+
return evaluateField(parseFieldInstruction(instruction), ctx, options);
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
export { evaluateField, evaluateFieldInstruction };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/fields/fieldContext.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Resolution context for evaluating dynamic DOCX fields against a laid-out
|
|
4
|
+
* document. Built once per layout pass (see the field-resolution pass) and
|
|
5
|
+
* consumed by {@link evaluateField}. All position-dependent values
|
|
6
|
+
* (page numbers, bookmark pages, SEQ counters) are resolved against the current
|
|
7
|
+
* layout so a field paints the same value its width was measured against.
|
|
8
|
+
*/
|
|
9
|
+
type FieldContext = {
|
|
10
|
+
/** 1-indexed page the field is on (PAGE). */pageNumber: number; /** Total pages in the document (NUMPAGES). */
|
|
11
|
+
totalPages: number;
|
|
12
|
+
/** Pages in the field's current section (SECTIONPAGES); omit until the
|
|
13
|
+
* per-section page counts are available, in which case the field falls back. */
|
|
14
|
+
sectionPages?: number; /** Bookmark name -> 1-indexed page it lands on (PAGEREF). */
|
|
15
|
+
bookmarkPages: ReadonlyMap<string, number>; /** Bookmark name -> resolved display text (REF). */
|
|
16
|
+
bookmarkText: ReadonlyMap<string, string>; /** Field instance id (the run's `pmStart`) -> precomputed SEQ value. */
|
|
17
|
+
seqValues: ReadonlyMap<number, number>; /** Clock for DATE/TIME-family fields; passed in so evaluation stays pure. */
|
|
18
|
+
now: Date;
|
|
19
|
+
};
|
|
20
|
+
//#endregion
|
|
21
|
+
export { FieldContext };
|
|
File without changes
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { FlowBlock, Page } from "../layout-engine/types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/fields/resolveFieldValues.d.ts
|
|
4
|
+
/** Layout-derived inputs shared by every field, regardless of its position. */
|
|
5
|
+
type SharedFieldInputs = {
|
|
6
|
+
totalPages: number;
|
|
7
|
+
bookmarkPages: ReadonlyMap<string, number>;
|
|
8
|
+
bookmarkText: ReadonlyMap<string, string>;
|
|
9
|
+
seqValues: ReadonlyMap<number, number>; /** Section index -> page count, for SECTIONPAGES. */
|
|
10
|
+
sectionPageCounts: ReadonlyMap<number, number>;
|
|
11
|
+
now: Date;
|
|
12
|
+
};
|
|
13
|
+
type HeaderFooterFieldInputs = Pick<SharedFieldInputs, "bookmarkPages" | "bookmarkText" | "seqValues" | "sectionPageCounts">;
|
|
14
|
+
type ResolvedFieldValues = {
|
|
15
|
+
/** Field run `pmStart` -> resolved display text. */values: Map<number, string>;
|
|
16
|
+
/**
|
|
17
|
+
* True when at least one field resolved to a string that differs from the
|
|
18
|
+
* text it was measured at (`fallback || "1"`), i.e. a re-measure would change
|
|
19
|
+
* line widths. The driver uses this to skip re-layout when nothing moved.
|
|
20
|
+
*/
|
|
21
|
+
changed: boolean;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Resolve every field run to its display value against a finished layout, keyed
|
|
25
|
+
* by the run's `pmStart`. Each field is evaluated for the page its top-level
|
|
26
|
+
* block lands on (fields inside a table/text box take that container's page).
|
|
27
|
+
* Feed `values` back into `measureBlocks({ fieldValues })` so fields measure at
|
|
28
|
+
* their painted width.
|
|
29
|
+
*/
|
|
30
|
+
declare function resolveFieldValues(blocks: readonly FlowBlock[], pages: readonly Page[], shared: SharedFieldInputs): ResolvedFieldValues;
|
|
31
|
+
/**
|
|
32
|
+
* Field values for measuring header/footer blocks, which are laid out once but
|
|
33
|
+
* painted on every page with a different page number. Page-number fields
|
|
34
|
+
* (PAGE/NUMPAGES/SECTIONPAGES) are reserved at the width of the largest page
|
|
35
|
+
* (`pageCount`) so a multi-digit number on a later page can't wrap differently
|
|
36
|
+
* than the single layout; other fields keep their fallback (resolved per-page at
|
|
37
|
+
* paint). `pageCount` is the document's page count — a prior render's count is a
|
|
38
|
+
* fine estimate, since headers are measured before the body is re-laid-out.
|
|
39
|
+
*/
|
|
40
|
+
declare function buildHeaderFooterFieldValues(blocks: readonly FlowBlock[], pageCount: number, now: Date, inputs?: Partial<HeaderFooterFieldInputs>): Map<number, string>;
|
|
41
|
+
/** Whether two resolved-value maps are identical, for loop convergence. */
|
|
42
|
+
declare function fieldValuesEqual(a: ReadonlyMap<number, string>, b: ReadonlyMap<number, string>): boolean;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { HeaderFooterFieldInputs, ResolvedFieldValues, SharedFieldInputs, buildHeaderFooterFieldValues, fieldValuesEqual, resolveFieldValues };
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { computePageNumber, getFormatSwitch, parseFieldInstruction } from "../docx/fieldParser.js";
|
|
2
|
+
import { evaluateField } from "./evaluateField.js";
|
|
3
|
+
//#region src/fields/resolveFieldValues.ts
|
|
4
|
+
/**
|
|
5
|
+
* Resolve every field run to its display value against a finished layout, keyed
|
|
6
|
+
* by the run's `pmStart`. Each field is evaluated for the page its top-level
|
|
7
|
+
* block lands on (fields inside a table/text box take that container's page).
|
|
8
|
+
* Feed `values` back into `measureBlocks({ fieldValues })` so fields measure at
|
|
9
|
+
* their painted width.
|
|
10
|
+
*/
|
|
11
|
+
function resolveFieldValues(blocks, pages, shared) {
|
|
12
|
+
const blockPage = buildBlockPageMap(pages);
|
|
13
|
+
const tableRowPage = buildTableRowPageMap(pages);
|
|
14
|
+
const fields = [];
|
|
15
|
+
for (const block of blocks) collectFieldAnchors(block, block.id, fields);
|
|
16
|
+
const values = /* @__PURE__ */ new Map();
|
|
17
|
+
let changed = false;
|
|
18
|
+
for (const field of fields) {
|
|
19
|
+
const run = field.run;
|
|
20
|
+
if (run.pmStart === void 0) continue;
|
|
21
|
+
const location = resolveAnchorLocation(field, blockPage, tableRowPage);
|
|
22
|
+
const sectionPages = location ? shared.sectionPageCounts.get(location.sectionIndex) : void 0;
|
|
23
|
+
const context = {
|
|
24
|
+
pageNumber: location?.page ?? 1,
|
|
25
|
+
totalPages: shared.totalPages,
|
|
26
|
+
bookmarkPages: shared.bookmarkPages,
|
|
27
|
+
bookmarkText: shared.bookmarkText,
|
|
28
|
+
seqValues: shared.seqValues,
|
|
29
|
+
now: shared.now,
|
|
30
|
+
...sectionPages === void 0 ? {} : { sectionPages }
|
|
31
|
+
};
|
|
32
|
+
const value = evaluateField(parseFieldInstruction(run.instruction || run.fieldType), context, {
|
|
33
|
+
fallback: run.fallback ?? "",
|
|
34
|
+
instanceId: run.pmStart,
|
|
35
|
+
...run.fldLock ? { locked: true } : {}
|
|
36
|
+
});
|
|
37
|
+
values.set(run.pmStart, value);
|
|
38
|
+
if (value !== (run.fallback || "1")) changed = true;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
values,
|
|
42
|
+
changed
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const EMPTY_STRING_NUMBER = /* @__PURE__ */ new Map();
|
|
46
|
+
const EMPTY_STRING_STRING = /* @__PURE__ */ new Map();
|
|
47
|
+
const EMPTY_NUMBER_NUMBER = /* @__PURE__ */ new Map();
|
|
48
|
+
/**
|
|
49
|
+
* Field values for measuring header/footer blocks, which are laid out once but
|
|
50
|
+
* painted on every page with a different page number. Page-number fields
|
|
51
|
+
* (PAGE/NUMPAGES/SECTIONPAGES) are reserved at the width of the largest page
|
|
52
|
+
* (`pageCount`) so a multi-digit number on a later page can't wrap differently
|
|
53
|
+
* than the single layout; other fields keep their fallback (resolved per-page at
|
|
54
|
+
* paint). `pageCount` is the document's page count — a prior render's count is a
|
|
55
|
+
* fine estimate, since headers are measured before the body is re-laid-out.
|
|
56
|
+
*/
|
|
57
|
+
function buildHeaderFooterFieldValues(blocks, pageCount, now, inputs) {
|
|
58
|
+
const values = /* @__PURE__ */ new Map();
|
|
59
|
+
const fields = [];
|
|
60
|
+
for (const block of blocks) collectFieldRuns(block, fields);
|
|
61
|
+
if (fields.length === 0) return values;
|
|
62
|
+
const context = {
|
|
63
|
+
pageNumber: pageCount,
|
|
64
|
+
totalPages: pageCount,
|
|
65
|
+
sectionPages: pageCount,
|
|
66
|
+
bookmarkPages: inputs?.bookmarkPages ?? EMPTY_STRING_NUMBER,
|
|
67
|
+
bookmarkText: inputs?.bookmarkText ?? EMPTY_STRING_STRING,
|
|
68
|
+
seqValues: inputs?.seqValues ?? EMPTY_NUMBER_NUMBER,
|
|
69
|
+
now
|
|
70
|
+
};
|
|
71
|
+
for (const run of fields) {
|
|
72
|
+
if (run.pmStart === void 0) continue;
|
|
73
|
+
const parsed = parseFieldInstruction(run.instruction || run.fieldType);
|
|
74
|
+
const fieldContext = {
|
|
75
|
+
...context,
|
|
76
|
+
...parsed.type === "PAGE" ? { pageNumber: widestFormattedPageNumber(parsed, pageCount) } : {},
|
|
77
|
+
...parsed.type === "SECTIONPAGES" ? { sectionPages: widestSectionPageCount(parsed, pageCount, inputs?.sectionPageCounts) } : {}
|
|
78
|
+
};
|
|
79
|
+
values.set(run.pmStart, evaluateField(parsed, fieldContext, {
|
|
80
|
+
fallback: run.fallback ?? "",
|
|
81
|
+
instanceId: run.pmStart,
|
|
82
|
+
...run.fldLock ? { locked: true } : {}
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
return values;
|
|
86
|
+
}
|
|
87
|
+
function widestSectionPageCount(parsed, fallbackPageCount, sectionPageCounts) {
|
|
88
|
+
if (!sectionPageCounts || sectionPageCounts.size === 0) return fallbackPageCount;
|
|
89
|
+
return widestFormattedCount(parsed, Array.from(sectionPageCounts.values()));
|
|
90
|
+
}
|
|
91
|
+
function widestFormattedPageNumber(parsed, pageCount) {
|
|
92
|
+
return widestFormattedCount(parsed, Array.from({ length: pageCount }, (_, index) => index + 1));
|
|
93
|
+
}
|
|
94
|
+
function widestFormattedCount(parsed, counts) {
|
|
95
|
+
const format = getFormatSwitch(parsed)?.toUpperCase();
|
|
96
|
+
if (format !== "ROMAN" && format !== "ALPHABETIC") return Math.max(...counts, 1);
|
|
97
|
+
const first = counts.at(0) ?? 1;
|
|
98
|
+
let widestPage = first;
|
|
99
|
+
let widestWidth = formattedPageWidthScore(computePageNumber(first, parsed));
|
|
100
|
+
for (const page of counts.slice(1)) {
|
|
101
|
+
const width = formattedPageWidthScore(computePageNumber(page, parsed));
|
|
102
|
+
if (width > widestWidth) {
|
|
103
|
+
widestPage = page;
|
|
104
|
+
widestWidth = width;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return widestPage;
|
|
108
|
+
}
|
|
109
|
+
function formattedPageWidthScore(value) {
|
|
110
|
+
let score = 0;
|
|
111
|
+
for (const char of value) score += PAGE_WIDTH_SCORE[char] ?? 3;
|
|
112
|
+
return score;
|
|
113
|
+
}
|
|
114
|
+
const PAGE_WIDTH_SCORE = {
|
|
115
|
+
I: 1,
|
|
116
|
+
L: 3,
|
|
117
|
+
V: 4,
|
|
118
|
+
X: 4,
|
|
119
|
+
C: 5,
|
|
120
|
+
D: 5,
|
|
121
|
+
M: 5,
|
|
122
|
+
W: 5
|
|
123
|
+
};
|
|
124
|
+
/** Whether two resolved-value maps are identical, for loop convergence. */
|
|
125
|
+
function fieldValuesEqual(a, b) {
|
|
126
|
+
if (a.size !== b.size) return false;
|
|
127
|
+
for (const [key, value] of a) if (b.get(key) !== value) return false;
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
/** First page (and its section) each top-level block lands on. */
|
|
131
|
+
function buildBlockPageMap(pages) {
|
|
132
|
+
const map = /* @__PURE__ */ new Map();
|
|
133
|
+
for (const page of pages) for (const fragment of page.fragments) if (!map.has(fragment.blockId)) map.set(fragment.blockId, {
|
|
134
|
+
page: page.number,
|
|
135
|
+
sectionIndex: page.sectionIndex ?? 0
|
|
136
|
+
});
|
|
137
|
+
return map;
|
|
138
|
+
}
|
|
139
|
+
function buildTableRowPageMap(pages) {
|
|
140
|
+
const map = /* @__PURE__ */ new Map();
|
|
141
|
+
for (const page of pages) for (const fragment of page.fragments) {
|
|
142
|
+
if (fragment.kind !== "table") continue;
|
|
143
|
+
for (let rowIndex = fragment.fromRow; rowIndex < fragment.toRow; rowIndex++) {
|
|
144
|
+
const key = tableRowKey(fragment.blockId, rowIndex);
|
|
145
|
+
if (!map.has(key)) map.set(key, {
|
|
146
|
+
page: page.number,
|
|
147
|
+
sectionIndex: page.sectionIndex ?? 0
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return map;
|
|
152
|
+
}
|
|
153
|
+
function tableRowKey(blockId, rowIndex) {
|
|
154
|
+
return `${blockId}:${rowIndex}`;
|
|
155
|
+
}
|
|
156
|
+
function resolveAnchorLocation(field, blockPage, tableRowPage) {
|
|
157
|
+
if (field.type === "block") return blockPage.get(field.blockId);
|
|
158
|
+
return tableRowPage.get(tableRowKey(field.blockId, field.rowIndex)) ?? blockPage.get(field.blockId);
|
|
159
|
+
}
|
|
160
|
+
function collectFieldAnchors(block, topLevelId, out) {
|
|
161
|
+
if (block.kind === "paragraph") {
|
|
162
|
+
for (const run of block.runs) if (run.kind === "field") out.push({
|
|
163
|
+
type: "block",
|
|
164
|
+
blockId: topLevelId,
|
|
165
|
+
run
|
|
166
|
+
});
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (block.kind === "table") {
|
|
170
|
+
for (let rowIndex = 0; rowIndex < block.rows.length; rowIndex++) {
|
|
171
|
+
const row = block.rows[rowIndex];
|
|
172
|
+
if (!row) continue;
|
|
173
|
+
for (const cell of row.cells) for (const child of cell.blocks) collectTableRowFieldAnchors(child, block.id, rowIndex, out);
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (block.kind === "textBox") for (const child of block.content) collectFieldAnchors(child, topLevelId, out);
|
|
178
|
+
}
|
|
179
|
+
function collectTableRowFieldAnchors(block, tableId, rowIndex, out) {
|
|
180
|
+
if (block.kind === "paragraph") {
|
|
181
|
+
for (const run of block.runs) if (run.kind === "field") out.push({
|
|
182
|
+
type: "tableRow",
|
|
183
|
+
blockId: tableId,
|
|
184
|
+
rowIndex,
|
|
185
|
+
run
|
|
186
|
+
});
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (block.kind === "table") {
|
|
190
|
+
for (const row of block.rows) for (const cell of row.cells) for (const child of cell.blocks) collectTableRowFieldAnchors(child, tableId, rowIndex, out);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (block.kind === "textBox") for (const child of block.content) collectTableRowFieldAnchors(child, tableId, rowIndex, out);
|
|
194
|
+
}
|
|
195
|
+
function collectFieldRuns(block, out) {
|
|
196
|
+
if (block.kind === "paragraph") {
|
|
197
|
+
for (const run of block.runs) if (run.kind === "field") out.push(run);
|
|
198
|
+
} else if (block.kind === "table") for (const row of block.rows) for (const cell of row.cells) for (const cellBlock of cell.blocks) collectFieldRuns(cellBlock, out);
|
|
199
|
+
else if (block.kind === "textBox") {
|
|
200
|
+
for (const paragraph of block.content) for (const run of paragraph.runs) if (run.kind === "field") out.push(run);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//#endregion
|
|
204
|
+
export { buildHeaderFooterFieldValues, fieldValuesEqual, resolveFieldValues };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Page } from "../layout-engine/types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/fields/sectionPageCounts.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Count how many pages belong to each section (by `Page.sectionIndex`, defaulting
|
|
6
|
+
* to 0 for single-section documents), for resolving SECTIONPAGES. A field on a
|
|
7
|
+
* page reads the count for that page's section.
|
|
8
|
+
*/
|
|
9
|
+
declare function buildSectionPageCounts(pages: readonly Page[]): Map<number, number>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { buildSectionPageCounts };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/fields/sectionPageCounts.ts
|
|
2
|
+
/**
|
|
3
|
+
* Count how many pages belong to each section (by `Page.sectionIndex`, defaulting
|
|
4
|
+
* to 0 for single-section documents), for resolving SECTIONPAGES. A field on a
|
|
5
|
+
* page reads the count for that page's section.
|
|
6
|
+
*/
|
|
7
|
+
function buildSectionPageCounts(pages) {
|
|
8
|
+
const counts = /* @__PURE__ */ new Map();
|
|
9
|
+
for (const page of pages) {
|
|
10
|
+
const index = page.sectionIndex ?? 0;
|
|
11
|
+
counts.set(index, (counts.get(index) ?? 0) + 1);
|
|
12
|
+
}
|
|
13
|
+
return counts;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { buildSectionPageCounts };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FlowBlock } from "../layout-engine/types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/fields/seqValues.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Assign each SEQ field instance its sequence number in document order, keyed by
|
|
6
|
+
* the field run's `pmStart`. SEQ counters are per identifier (the field
|
|
7
|
+
* argument, e.g. `Figure`), so `SEQ Figure` and `SEQ Table` count
|
|
8
|
+
* independently. Honours `\r n` (reset to n) and `\c` (repeat current without
|
|
9
|
+
* advancing); every other SEQ advances its counter by one. Independent of
|
|
10
|
+
* pagination, so it runs once per document, not per layout pass.
|
|
11
|
+
*/
|
|
12
|
+
declare function buildSeqValues(blocks: readonly FlowBlock[]): Map<number, number>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { buildSeqValues };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { parseFieldInstruction } from "../docx/fieldParser.js";
|
|
2
|
+
//#region src/fields/seqValues.ts
|
|
3
|
+
/**
|
|
4
|
+
* Assign each SEQ field instance its sequence number in document order, keyed by
|
|
5
|
+
* the field run's `pmStart`. SEQ counters are per identifier (the field
|
|
6
|
+
* argument, e.g. `Figure`), so `SEQ Figure` and `SEQ Table` count
|
|
7
|
+
* independently. Honours `\r n` (reset to n) and `\c` (repeat current without
|
|
8
|
+
* advancing); every other SEQ advances its counter by one. Independent of
|
|
9
|
+
* pagination, so it runs once per document, not per layout pass.
|
|
10
|
+
*/
|
|
11
|
+
function buildSeqValues(blocks) {
|
|
12
|
+
const counters = /* @__PURE__ */ new Map();
|
|
13
|
+
const values = /* @__PURE__ */ new Map();
|
|
14
|
+
walkBlocks(blocks, counters, values);
|
|
15
|
+
return values;
|
|
16
|
+
}
|
|
17
|
+
function walkBlocks(blocks, counters, values) {
|
|
18
|
+
for (const block of blocks) if (block.kind === "paragraph") for (const run of block.runs) {
|
|
19
|
+
if (run.kind !== "field" || run.pmStart === void 0) continue;
|
|
20
|
+
const parsed = parseFieldInstruction(run.instruction || run.fieldType);
|
|
21
|
+
if (parsed.type !== "SEQ") continue;
|
|
22
|
+
const id = parsed.argument ?? "";
|
|
23
|
+
const reset = parsed.switches.find((s) => s.switch.toLowerCase() === "r")?.value;
|
|
24
|
+
const repeat = parsed.switches.some((s) => s.switch.toLowerCase() === "c");
|
|
25
|
+
let value;
|
|
26
|
+
if (reset !== void 0) value = Number.parseInt(reset, 10) || 1;
|
|
27
|
+
else if (repeat) value = counters.get(id) ?? 0;
|
|
28
|
+
else value = (counters.get(id) ?? 0) + 1;
|
|
29
|
+
counters.set(id, value);
|
|
30
|
+
values.set(run.pmStart, value);
|
|
31
|
+
}
|
|
32
|
+
else if (block.kind === "table") for (const row of block.rows) for (const cell of row.cells) walkBlocks(cell.blocks, counters, values);
|
|
33
|
+
else if (block.kind === "textBox") walkBlocks(block.content, counters, values);
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { buildSeqValues };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//#region src/fonts/embeddedFontTable.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Parses the embedded-font references out of `word/fontTable.xml`.
|
|
4
|
+
*
|
|
5
|
+
* The shared docx model (`@stll/docx-core`) keeps only the embed relationship
|
|
6
|
+
* ids and drops the `w:fontKey` GUID, which is exactly the value needed to
|
|
7
|
+
* de-obfuscate the `.odttf` binary. This parser therefore reads the font table
|
|
8
|
+
* directly and keeps the full embed reference (rel id, key, subsetted flag).
|
|
9
|
+
*
|
|
10
|
+
* Structure:
|
|
11
|
+
* ```xml
|
|
12
|
+
* <w:fonts>
|
|
13
|
+
* <w:font w:name="My Brand Sans">
|
|
14
|
+
* <w:embedRegular r:id="rId1" w:fontKey="{GUID}" w:subsetted="true"/>
|
|
15
|
+
* </w:font>
|
|
16
|
+
* </w:fonts>
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Ported from eigenpal/docx-editor (see NOTICE.md).
|
|
20
|
+
*/
|
|
21
|
+
/** A single embedded face referenced from a `w:embed*` element. */
|
|
22
|
+
type EmbeddedFontFaceRef = {
|
|
23
|
+
/** Relationship id (`r:id`) resolved via `word/_rels/fontTable.xml.rels`. */relId: string; /** Obfuscation key GUID (`w:fontKey`), e.g. `{XXXXXXXX-...}`. */
|
|
24
|
+
fontKey?: string; /** Whether the embedded face is subsetted (`w:subsetted`). */
|
|
25
|
+
subsetted?: boolean;
|
|
26
|
+
};
|
|
27
|
+
/** One `<w:font>` entry with whichever of the four embed faces it declares. */
|
|
28
|
+
type EmbeddedFontEntry = {
|
|
29
|
+
name: string;
|
|
30
|
+
embedRegular?: EmbeddedFontFaceRef;
|
|
31
|
+
embedBold?: EmbeddedFontFaceRef;
|
|
32
|
+
embedItalic?: EmbeddedFontFaceRef;
|
|
33
|
+
embedBoldItalic?: EmbeddedFontFaceRef;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Parse `word/fontTable.xml` into the list of font entries that declare at
|
|
37
|
+
* least one embedded face. Entries with no embeds are still returned (callers
|
|
38
|
+
* filter), and missing/unparseable input yields an empty list.
|
|
39
|
+
*/
|
|
40
|
+
declare function parseEmbeddedFontTable(fontTableXml: string | null | undefined): EmbeddedFontEntry[];
|
|
41
|
+
//#endregion
|
|
42
|
+
export { EmbeddedFontEntry, EmbeddedFontFaceRef, parseEmbeddedFontTable };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { findChild, findChildren, getAttribute, parseXmlDocument } from "../docx/xmlParser.js";
|
|
2
|
+
//#region src/fonts/embeddedFontTable.ts
|
|
3
|
+
/**
|
|
4
|
+
* Parses the embedded-font references out of `word/fontTable.xml`.
|
|
5
|
+
*
|
|
6
|
+
* The shared docx model (`@stll/docx-core`) keeps only the embed relationship
|
|
7
|
+
* ids and drops the `w:fontKey` GUID, which is exactly the value needed to
|
|
8
|
+
* de-obfuscate the `.odttf` binary. This parser therefore reads the font table
|
|
9
|
+
* directly and keeps the full embed reference (rel id, key, subsetted flag).
|
|
10
|
+
*
|
|
11
|
+
* Structure:
|
|
12
|
+
* ```xml
|
|
13
|
+
* <w:fonts>
|
|
14
|
+
* <w:font w:name="My Brand Sans">
|
|
15
|
+
* <w:embedRegular r:id="rId1" w:fontKey="{GUID}" w:subsetted="true"/>
|
|
16
|
+
* </w:font>
|
|
17
|
+
* </w:fonts>
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* Ported from eigenpal/docx-editor (see NOTICE.md).
|
|
21
|
+
*/
|
|
22
|
+
/** The four `w:embed*` local names paired with the entry field they populate. */
|
|
23
|
+
const EMBED_ELEMENTS = [
|
|
24
|
+
{
|
|
25
|
+
element: "embedRegular",
|
|
26
|
+
field: "embedRegular"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
element: "embedBold",
|
|
30
|
+
field: "embedBold"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
element: "embedItalic",
|
|
34
|
+
field: "embedItalic"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
element: "embedBoldItalic",
|
|
38
|
+
field: "embedBoldItalic"
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
function parseEmbed(font, localName) {
|
|
42
|
+
const el = findChild(font, "w", localName);
|
|
43
|
+
if (!el) return;
|
|
44
|
+
const relId = getAttribute(el, "r", "id");
|
|
45
|
+
if (!relId) return;
|
|
46
|
+
const ref = { relId };
|
|
47
|
+
const fontKey = getAttribute(el, "w", "fontKey");
|
|
48
|
+
if (fontKey) ref.fontKey = fontKey;
|
|
49
|
+
const subsetted = getAttribute(el, "w", "subsetted");
|
|
50
|
+
if (subsetted === "true" || subsetted === "1") ref.subsetted = true;
|
|
51
|
+
return ref;
|
|
52
|
+
}
|
|
53
|
+
function parseFontEntry(font) {
|
|
54
|
+
const name = getAttribute(font, "w", "name");
|
|
55
|
+
if (!name) return null;
|
|
56
|
+
const entry = { name };
|
|
57
|
+
for (const { element, field } of EMBED_ELEMENTS) {
|
|
58
|
+
const ref = parseEmbed(font, element);
|
|
59
|
+
if (ref) entry[field] = ref;
|
|
60
|
+
}
|
|
61
|
+
return entry;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Parse `word/fontTable.xml` into the list of font entries that declare at
|
|
65
|
+
* least one embedded face. Entries with no embeds are still returned (callers
|
|
66
|
+
* filter), and missing/unparseable input yields an empty list.
|
|
67
|
+
*/
|
|
68
|
+
function parseEmbeddedFontTable(fontTableXml) {
|
|
69
|
+
if (!fontTableXml || fontTableXml.trim().length === 0) return [];
|
|
70
|
+
const root = parseXmlDocument(fontTableXml);
|
|
71
|
+
if (!root) return [];
|
|
72
|
+
const entries = [];
|
|
73
|
+
for (const font of findChildren(root, "w", "font")) {
|
|
74
|
+
const entry = parseFontEntry(font);
|
|
75
|
+
if (entry) entries.push(entry);
|
|
76
|
+
}
|
|
77
|
+
return entries;
|
|
78
|
+
}
|
|
79
|
+
//#endregion
|
|
80
|
+
export { parseEmbeddedFontTable };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/fonts/embeddedFonts.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Embedded-font extraction.
|
|
4
|
+
*
|
|
5
|
+
* Turns the obfuscated `word/fonts/*.odttf` binaries a `.docx` carries into
|
|
6
|
+
* de-obfuscated OpenType/TrueType faces the renderer can register as
|
|
7
|
+
* `@font-face`s, so documents whose fonts are embedded (rather than installed)
|
|
8
|
+
* render in their authored fonts instead of a fallback.
|
|
9
|
+
*
|
|
10
|
+
* The core is pure and framework-free: {@link getEmbeddedFontFaces} works over
|
|
11
|
+
* already-unzipped package parts; {@link extractEmbeddedFonts} is the buffer
|
|
12
|
+
* convenience that unzips first. Neither touches the DOM. Round-trip
|
|
13
|
+
* preservation is unaffected: the serializer copies `word/fonts/*` and
|
|
14
|
+
* `fontTable.xml` from the original ZIP untouched, so this is a read-only view.
|
|
15
|
+
*
|
|
16
|
+
* Ported from eigenpal/docx-editor (see NOTICE.md).
|
|
17
|
+
*/
|
|
18
|
+
/** A single de-obfuscated embedded font face, ready to register as `@font-face`. */
|
|
19
|
+
type EmbeddedFont = {
|
|
20
|
+
/** Word font name to register the face under (`w:font w:name`). */family: string; /** CSS `font-style` the face maps to (`embed*Italic` → `italic`). */
|
|
21
|
+
style: "normal" | "italic"; /** CSS `font-weight` the face maps to (`embedBold*` → `700`). */
|
|
22
|
+
weight: 400 | 700; /** De-obfuscated OpenType/TrueType bytes (backed by a fresh, non-shared buffer). */
|
|
23
|
+
bytes: Uint8Array<ArrayBuffer>; /** Whether the source face was subsetted (`w:subsetted`). */
|
|
24
|
+
subsetted: boolean;
|
|
25
|
+
};
|
|
26
|
+
/** Already-unzipped package parts the pure extractor needs. */
|
|
27
|
+
type EmbeddedFontParts = {
|
|
28
|
+
/** Raw `word/fontTable.xml`. */fontTableXml: string | null | undefined; /** Raw `word/_rels/fontTable.xml.rels`. */
|
|
29
|
+
fontTableRelsXml: string | null | undefined; /** Unzipped font binaries keyed by package path (e.g. `word/fonts/font1.odttf`). */
|
|
30
|
+
fonts: ReadonlyMap<string, ArrayBuffer>;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Resolve and de-obfuscate every embedded font face declared in a font table.
|
|
34
|
+
* Pure and DOM-free. Faces whose relationship or binary is missing are skipped,
|
|
35
|
+
* so the result only contains faces that produced usable bytes.
|
|
36
|
+
*/
|
|
37
|
+
declare function getEmbeddedFontFaces(parts: EmbeddedFontParts): EmbeddedFont[];
|
|
38
|
+
/**
|
|
39
|
+
* Extract every embedded font face from a raw `.docx` buffer. Unzips the
|
|
40
|
+
* package, then resolves + de-obfuscates the faces via
|
|
41
|
+
* {@link getEmbeddedFontFaces}. Returns an empty list for documents with no
|
|
42
|
+
* embedded fonts.
|
|
43
|
+
*/
|
|
44
|
+
declare function extractEmbeddedFonts(buffer: ArrayBuffer): Promise<EmbeddedFont[]>;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { EmbeddedFont, EmbeddedFontParts, extractEmbeddedFonts, getEmbeddedFontFaces };
|