@stll/folio-core 0.51.0 → 0.53.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/README.md +23 -0
- package/dist/ai-edits/apply.d.ts +26 -1
- package/dist/ai-edits/apply.js +1519 -105
- package/dist/ai-edits/batch-claims.d.ts +130 -0
- package/dist/ai-edits/batch-claims.js +244 -0
- package/dist/ai-edits/blockRange.js +9 -3
- package/dist/ai-edits/character-boundaries.d.ts +43 -0
- package/dist/ai-edits/character-boundaries.js +95 -0
- package/dist/ai-edits/clean-text.d.ts +33 -3
- package/dist/ai-edits/clean-text.js +52 -6
- package/dist/ai-edits/comment-lifecycle.d.ts +18 -0
- package/dist/ai-edits/comment-lifecycle.js +52 -0
- package/dist/ai-edits/headless.d.ts +71 -7
- package/dist/ai-edits/headless.js +381 -41
- package/dist/ai-edits/index.d.ts +2 -1
- package/dist/ai-edits/index.js +2 -1
- package/dist/ai-edits/minimal-replacement.d.ts +21 -6
- package/dist/ai-edits/minimal-replacement.js +134 -15
- package/dist/ai-edits/newListNumbering.d.ts +23 -0
- package/dist/ai-edits/newListNumbering.js +94 -0
- package/dist/ai-edits/note-references.d.ts +96 -0
- package/dist/ai-edits/note-references.js +139 -0
- package/dist/ai-edits/pending-suggestions.d.ts +79 -0
- package/dist/ai-edits/pending-suggestions.js +306 -0
- package/dist/ai-edits/read.d.ts +1 -1
- package/dist/ai-edits/read.js +56 -43
- package/dist/ai-edits/result-validation.d.ts +29 -0
- package/dist/ai-edits/result-validation.js +164 -0
- package/dist/ai-edits/snapshot.d.ts +36 -3
- package/dist/ai-edits/snapshot.js +177 -23
- package/dist/ai-edits/table-cell-mutations.d.ts +1 -1
- package/dist/ai-edits/table-cell-mutations.js +4 -1
- package/dist/ai-edits/table-geometry.d.ts +1 -1
- package/dist/ai-edits/table-row-column-mutations.d.ts +38 -16
- package/dist/ai-edits/table-row-column-mutations.js +61 -26
- package/dist/ai-edits/types.d.ts +155 -16
- package/dist/compare/compare.d.ts +1 -1
- package/dist/compare/compare.js +65 -16
- package/dist/compare/content-alignment.js +13 -2
- package/dist/compare/content-types.d.ts +7 -0
- package/dist/compare/content.d.ts +4 -1
- package/dist/compare/content.js +6 -1
- package/dist/compare/formatting.js +2 -1
- package/dist/compare/inline-atoms.d.ts +21 -4
- package/dist/compare/inline-atoms.js +138 -16
- package/dist/compare/inline-provenance.js +18 -22
- package/dist/compare/plan.js +10 -5
- package/dist/compare/scenario.js +14 -3
- package/dist/compare/section-boundary-properties.js +14 -1
- package/dist/compare/types.d.ts +4 -2
- package/dist/compare/types.js +2 -1
- package/dist/compare/verification.d.ts +1 -1
- package/dist/compare/verification.js +15 -3
- package/dist/controller/committedLayoutDiff.d.ts +25 -0
- package/dist/controller/committedLayoutDiff.js +71 -0
- package/dist/controller/contentControlWidgetController.d.ts +1 -1
- package/dist/controller/folioEditor.d.ts +1 -1
- package/dist/controller/fontReadiness.d.ts +70 -3
- package/dist/controller/fontReadiness.js +100 -10
- package/dist/controller/headerFooterEditorManager.js +6 -1
- package/dist/controller/layoutPipeline.d.ts +12 -10
- package/dist/controller/layoutPipeline.js +62 -9
- package/dist/controller/layoutRunOptions.d.ts +24 -0
- package/dist/controller/layoutRunOptions.js +17 -0
- package/dist/controller/layoutScheduler.d.ts +19 -14
- package/dist/controller/layoutScheduler.js +15 -12
- package/dist/controller/layoutSession.d.ts +26 -2
- package/dist/controller/layoutSession.js +1 -1
- package/dist/controller/noteEditorManager.js +8 -3
- package/dist/document-operations.d.ts +11 -2
- package/dist/document-operations.js +230 -21
- package/dist/docx/altChunk.d.ts +8 -0
- package/dist/docx/altChunk.js +17 -0
- package/dist/docx/attributeRemainder.d.ts +1 -1
- package/dist/docx/blockContentParser.d.ts +64 -1
- package/dist/docx/blockContentParser.js +17 -4
- package/dist/docx/blockCustomXmlShell.d.ts +7 -0
- package/dist/docx/blockCustomXmlShell.js +14 -0
- package/dist/docx/blockPlainText.js +7 -0
- package/dist/docx/commentAnchorIndex.js +1 -1
- package/dist/docx/commentRangeIntegrity.js +8 -3
- package/dist/docx/commentReferenceNormalization.js +1 -1
- package/dist/docx/commentReplyMarkers.js +20 -1
- package/dist/docx/compatibility.d.ts +1 -1
- package/dist/docx/compatibility.js +34 -13
- package/dist/docx/containerChildren.gen.d.ts +1 -1
- package/dist/docx/containerChildren.gen.js +1 -0
- package/dist/docx/documentParser.js +12 -12
- package/dist/docx/drawingIdNormalization.d.ts +3 -1
- package/dist/docx/drawingIdNormalization.js +6 -1
- package/dist/docx/ensureParaIds.js +119 -97
- package/dist/docx/footnoteParser.js +8 -4
- package/dist/docx/headerFooterParser.js +3 -3
- package/dist/docx/headerFooterReferenceNormalization.d.ts +20 -1
- package/dist/docx/headerFooterReferenceNormalization.js +52 -27
- package/dist/docx/hyperlinkParser.d.ts +1 -1
- package/dist/docx/index.d.ts +1 -1
- package/dist/docx/listNumberingInstances.d.ts +59 -0
- package/dist/docx/listNumberingInstances.js +249 -0
- package/dist/docx/normalizeBaseDirection.js +2 -1
- package/dist/docx/opaqueCarrier.d.ts +7 -0
- package/dist/docx/opaqueCarrier.js +38 -0
- package/dist/docx/packageParts.js +4 -1
- package/dist/docx/paragraphParser.js +91 -24
- package/dist/docx/paragraphPropertySource.d.ts +4 -2
- package/dist/docx/paragraphPropertySource.js +7 -1
- package/dist/docx/paragraphTraversal.js +1 -0
- package/dist/docx/parseWarningMessage.js +4 -1
- package/dist/docx/parser.js +173 -20
- package/dist/docx/rezip.js +27 -5
- package/dist/docx/sdtProperties.js +1 -1
- package/dist/docx/sdtPropertiesPatch.js +3 -0
- package/dist/docx/selectiveSave.js +16 -9
- package/dist/docx/selectiveXmlPatch.js +106 -37
- package/dist/docx/serializer/blockCustomXmlSerializer.d.ts +5 -0
- package/dist/docx/serializer/blockCustomXmlSerializer.js +4 -0
- package/dist/docx/serializer/documentSerializer.js +2 -0
- package/dist/docx/serializer/headerFooterSerializer.js +2 -0
- package/dist/docx/serializer/noteSerializer.js +3 -1
- package/dist/docx/serializer/paragraphSerializer.js +33 -9
- package/dist/docx/serializer/tableSerializer.js +25 -38
- package/dist/docx/server/createBilingualDocument.js +3 -3
- package/dist/docx/tableParser.d.ts +157 -1
- package/dist/docx/tableParser.js +89 -10
- package/dist/docx/textBoxParser.js +1 -1
- package/dist/docx/unzip.d.ts +2 -1
- package/dist/docx/unzip.js +1 -1
- package/dist/docx/wordprocessingPrefixes.d.ts +78 -0
- package/dist/docx/wordprocessingPrefixes.js +286 -0
- package/dist/generated/text_shaper.js +26 -0
- package/dist/generated/text_shaper_bg.wasm +0 -0
- package/dist/i18n/messages/catalogs.gen.d.ts +136 -0
- package/dist/i18n/messages/catalogs.gen.js +153 -17
- package/dist/i18n/messages/messages.gen.d.ts +8 -0
- package/dist/internal/compare/inline-presentation.d.ts +2 -1
- package/dist/internal/compare/inline-presentation.js +11 -10
- package/dist/internal/headlessRevisionResolutionGuard.d.ts +2 -8
- package/dist/internal/headlessRevisionResolutionGuard.js +2 -11
- package/dist/internal/indexedPositionMap.d.ts +11 -0
- package/dist/internal/indexedPositionMap.js +42 -0
- package/dist/internal/pageBreakRunSourceDescendantIndex.js +2 -1
- package/dist/internal/revisionResolutionEdits.d.ts +13 -0
- package/dist/internal/revisionResolutionEdits.js +19 -0
- package/dist/internal/revisionResolutionInline.d.ts +24 -0
- package/dist/internal/{headlessRevisionResolution.js → revisionResolutionInline.js} +61 -43
- package/dist/internal/revisionResolutionStep.d.ts +34 -0
- package/dist/internal/revisionResolutionStep.js +282 -0
- package/dist/internal/revisionResolutionTracking.d.ts +11 -0
- package/dist/internal/revisionResolutionTracking.js +124 -0
- package/dist/internal/wholeStoryRevisionResolution.d.ts +56 -0
- package/dist/internal/wholeStoryRevisionResolution.js +530 -0
- package/dist/layout-bridge/convert/markupViewFlow.d.ts +20 -0
- package/dist/layout-bridge/convert/markupViewFlow.js +123 -0
- package/dist/layout-bridge/convert/tableConversion.js +1 -1
- package/dist/layout-bridge/convert/toFlowBlocks.js +10 -1
- package/dist/layout-engine/layoutInstrumentation.d.ts +9 -1
- package/dist/layout-engine/layoutInstrumentation.js +4 -1
- package/dist/layout-engine/measure/cache.d.ts +18 -1
- package/dist/layout-engine/measure/cache.js +31 -1
- package/dist/layout-engine/measure/font-metrics.worker.js +3 -7
- package/dist/layout-engine/measure/measureContainer.js +7 -47
- package/dist/layout-engine/measure/measureHelpers.d.ts +6 -1
- package/dist/layout-engine/measure/measureHelpers.js +22 -2
- package/dist/layout-engine/measure/measureWorker.js +2 -3
- package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +6 -7
- package/dist/layout-engine/measure/measureWorkerProtocol.js +1 -2
- package/dist/layout-engine/types.d.ts +6 -0
- package/dist/layout-painter/renderPage.js +1 -0
- package/dist/layout-painter/renderParagraph.js +1 -1
- package/dist/managers/ContextMenuManager.js +5 -2
- package/dist/managers/types.d.ts +3 -0
- package/dist/markdown/fromMarkdown.js +2 -1
- package/dist/markdown/internals.d.ts +11 -1
- package/dist/markdown/internals.js +24 -3
- package/dist/markdown/renderBlock.js +39 -9
- package/dist/markdown/renderParagraph.d.ts +13 -1
- package/dist/markdown/renderParagraph.js +85 -38
- package/dist/markdown/renderRuns.js +3 -10
- package/dist/markdown/renderTable.js +24 -12
- package/dist/markdown/trailers.js +2 -2
- package/dist/markdown/types.d.ts +29 -7
- package/dist/paged-layout/incrementalMeasure.d.ts +1 -2
- package/dist/paged-layout/incrementalMeasure.js +1 -9
- package/dist/paged-layout/transactionDirtyRange.d.ts +1 -3
- package/dist/paged-layout/transactionDirtyRange.js +29 -41
- package/dist/panel-layout.d.ts +83 -0
- package/dist/panel-layout.js +96 -0
- package/dist/prosemirror/anchoredTextBoxes.d.ts +37 -0
- package/dist/prosemirror/anchoredTextBoxes.js +156 -0
- package/dist/prosemirror/attrs/index.d.ts +6 -2
- package/dist/prosemirror/attrs/index.js +172 -1
- package/dist/prosemirror/commands/comments.d.ts +7 -8
- package/dist/prosemirror/commands/comments.js +241 -207
- package/dist/prosemirror/commands/contentControls.d.ts +1 -1
- package/dist/prosemirror/commands/formatPainter.d.ts +1 -1
- package/dist/prosemirror/commands/formatting.d.ts +1 -1
- package/dist/prosemirror/commands/index.d.ts +2 -2
- package/dist/prosemirror/commands/index.js +2 -2
- package/dist/prosemirror/commands/paragraph.d.ts +7 -1
- package/dist/prosemirror/commands/paragraph.js +9 -1
- package/dist/prosemirror/commands/paragraphBookmarkJoin.d.ts +13 -0
- package/dist/prosemirror/commands/paragraphBookmarkJoin.js +22 -0
- package/dist/prosemirror/commands/pastePlainText.d.ts +1 -1
- package/dist/prosemirror/commands/resolveAllTableChanges.d.ts +40 -0
- package/dist/prosemirror/commands/resolveAllTableChanges.js +615 -0
- package/dist/prosemirror/commands/resolveNodePropertyChangeAttrs.d.ts +15 -0
- package/dist/prosemirror/commands/resolveNodePropertyChangeAttrs.js +46 -0
- package/dist/prosemirror/commands/resolveParagraphProperties.d.ts +16 -0
- package/dist/prosemirror/commands/resolveParagraphProperties.js +59 -0
- package/dist/prosemirror/commands/sectionBreak.js +2 -1
- package/dist/prosemirror/commands/tableCellMergeResolution.d.ts +8 -2
- package/dist/prosemirror/commands/tableCellMergeResolution.js +1 -1
- package/dist/prosemirror/contentControlRevisions.d.ts +1 -1
- package/dist/prosemirror/conversion/fromProseDoc.js +181 -31
- package/dist/prosemirror/conversion/toProseDoc.js +39 -4
- package/dist/prosemirror/emptyFieldResultRuns.d.ts +18 -0
- package/dist/prosemirror/emptyFieldResultRuns.js +33 -0
- package/dist/prosemirror/extensions/ExtensionManager.d.ts +1 -1
- package/dist/prosemirror/extensions/ExtensionManager.js +3 -1
- package/dist/prosemirror/extensions/StarterKit.js +3 -1
- package/dist/prosemirror/extensions/core/DocExtension.js +1 -1
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +12 -0
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +3 -0
- package/dist/prosemirror/extensions/features/ListExtension.js +161 -123
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +19 -2
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +33 -20
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +31 -2
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +270 -99
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.js +3 -2
- package/dist/prosemirror/extensions/features/pasteCleanup.js +2 -1
- package/dist/prosemirror/extensions/features/pastedHtmlLists.d.ts +12 -0
- package/dist/prosemirror/extensions/features/pastedHtmlLists.js +126 -0
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.js +21 -5
- package/dist/prosemirror/extensions/marks/RunIdentityExtension.d.ts +21 -18
- package/dist/prosemirror/extensions/marks/RunIdentityExtension.js +37 -17
- package/dist/prosemirror/extensions/marks/markUtils.d.ts +7 -2
- package/dist/prosemirror/extensions/marks/markUtils.js +8 -2
- package/dist/prosemirror/extensions/marks/noteReferenceDeletion.d.ts +10 -0
- package/dist/prosemirror/extensions/marks/noteReferenceDeletion.js +35 -0
- package/dist/prosemirror/extensions/nodes/BlockCustomXmlExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/nodes/BlockCustomXmlExtension.js +52 -0
- package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +3 -3
- package/dist/prosemirror/extensions/nodes/FieldExtension.js +50 -15
- package/dist/prosemirror/extensions/nodes/PreservedBlockExtension.js +4 -1
- package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +1 -1
- package/dist/prosemirror/extensions/nodes/TableExtension.js +19 -18
- package/dist/prosemirror/extensions/types.d.ts +4 -1
- package/dist/prosemirror/findReplaceSelection.js +1 -1
- package/dist/prosemirror/index.d.ts +3 -2
- package/dist/prosemirror/index.js +3 -2
- package/dist/prosemirror/indexedNodeLookup.d.ts +17 -0
- package/dist/prosemirror/indexedNodeLookup.js +103 -0
- package/dist/prosemirror/listAutoformatMarkers.d.ts +19 -0
- package/dist/prosemirror/listAutoformatMarkers.js +98 -0
- package/dist/prosemirror/listInstanceReferences.d.ts +12 -0
- package/dist/prosemirror/listInstanceReferences.js +72 -0
- package/dist/prosemirror/listLabels.d.ts +24 -0
- package/dist/prosemirror/listLabels.js +111 -0
- package/dist/prosemirror/listNumbering.d.ts +110 -0
- package/dist/prosemirror/listNumbering.js +345 -0
- package/dist/prosemirror/listRenderingAttrs.d.ts +11 -2
- package/dist/prosemirror/listRenderingAttrs.js +8 -1
- package/dist/prosemirror/markupViewProjection.d.ts +95 -0
- package/dist/prosemirror/markupViewProjection.js +83 -0
- package/dist/prosemirror/numberingAttr.d.ts +9 -1
- package/dist/prosemirror/numberingAttr.js +9 -1
- package/dist/prosemirror/outlineLevelAttr.js +1 -1
- package/dist/prosemirror/paragraphIndentation.d.ts +10 -1
- package/dist/prosemirror/paragraphIndentation.js +29 -7
- package/dist/prosemirror/paragraphMarkJoin.d.ts +19 -0
- package/dist/prosemirror/paragraphMarkJoin.js +24 -0
- package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +1 -1
- package/dist/prosemirror/plugins/documentNumbering.d.ts +27 -1
- package/dist/prosemirror/plugins/documentNumbering.js +97 -11
- package/dist/prosemirror/plugins/documentStyles.d.ts +10 -1
- package/dist/prosemirror/plugins/documentStyles.js +14 -1
- package/dist/prosemirror/plugins/suggestionMode.d.ts +16 -2
- package/dist/prosemirror/plugins/suggestionMode.js +116 -52
- package/dist/prosemirror/plugins/templateDirectives.d.ts +1 -1
- package/dist/prosemirror/plugins/transactionInvariants.d.ts +32 -0
- package/dist/prosemirror/plugins/transactionInvariants.js +86 -0
- package/dist/prosemirror/positionSweep.d.ts +24 -0
- package/dist/prosemirror/positionSweep.js +222 -0
- package/dist/prosemirror/rebaseParagraphRunFormatting.d.ts +1 -1
- package/dist/prosemirror/rejoinRunCarriers.d.ts +1 -1
- package/dist/prosemirror/replacedAnnotations.d.ts +33 -1
- package/dist/prosemirror/replacedAnnotations.js +170 -1
- package/dist/prosemirror/runFormattingInlineCarriers.d.ts +1 -1
- package/dist/prosemirror/runStyleFormatting.d.ts +7 -1
- package/dist/prosemirror/runStyleFormatting.js +13 -7
- package/dist/prosemirror/schema/index.d.ts +2 -2
- package/dist/prosemirror/schema/index.js +3 -0
- package/dist/prosemirror/schema/nodes.d.ts +42 -11
- package/dist/prosemirror/sectionMarkEdits.d.ts +20 -0
- package/dist/prosemirror/sectionMarkEdits.js +59 -0
- package/dist/prosemirror/storyListNumbering.d.ts +17 -0
- package/dist/prosemirror/storyListNumbering.js +102 -0
- package/dist/prosemirror/tableGridMutation.d.ts +48 -2
- package/dist/prosemirror/tableGridMutation.js +106 -1
- package/dist/prosemirror/validation.js +5 -1
- package/dist/redline.js +93 -9
- package/dist/render-dom/BodySelectionOverlay.d.ts +4 -1
- package/dist/render-dom/BodySelectionOverlay.js +3 -2
- package/dist/shaping/shaper.d.ts +47 -4
- package/dist/shaping/shaper.js +46 -15
- package/dist/text-shaping.d.ts +4 -0
- package/dist/text-shaping.js +4 -0
- package/dist/utils/findReplace.js +2 -2
- package/dist/utils/mergeDocumentContent.js +1 -1
- package/dist/utils/noteReferenceLabels.d.ts +36 -0
- package/dist/utils/noteReferenceLabels.js +32 -0
- package/dist/utils/replaceText.js +1 -1
- package/dist/version-comparison.d.ts +1 -0
- package/dist/version-comparison.js +1 -0
- package/package.json +8 -2
- package/dist/internal/headlessRevisionResolution.d.ts +0 -23
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { cloneParagraphWithPropertySource } from "./paragraphPropertySource.js";
|
|
2
2
|
//#region src/docx/commentRangeIntegrity.ts
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* A range marker under any prefix, or none: this is the guard a splice is
|
|
5
|
+
* refused by, and a guard that only knows `w:` passes every patch of a part
|
|
6
|
+
* that spells WordprocessingML another way.
|
|
7
|
+
*/
|
|
8
|
+
const COMMENT_RANGE_MARKER_PATTERN = /<(?:[\w.-]+:)?commentRange(Start|End)(?:\s[^>]*?)?\s(?:[\w.-]+:)?id=["'](\d+)["']/gu;
|
|
4
9
|
/**
|
|
5
10
|
* Comment ids whose range is not a start followed by an end in this story's
|
|
6
11
|
* XML. Either half alone is invalid OOXML and anchors nothing: Word shows no
|
|
@@ -147,7 +152,7 @@ const withoutOrphanBlockMarkers = (blocks, validCommentIds) => {
|
|
|
147
152
|
const withoutOrphanBlockMarker = (block, validCommentIds) => {
|
|
148
153
|
if (block.type === "paragraph") return withoutOrphanParagraphMarkers(block, validCommentIds);
|
|
149
154
|
if (block.type === "table") return withoutOrphanTableMarkers(block, validCommentIds);
|
|
150
|
-
if (block.type !== "blockSdt") return block;
|
|
155
|
+
if (block.type !== "blockSdt" && block.type !== "blockCustomXml") return block;
|
|
151
156
|
const content = withoutOrphanBlockMarkers(block.content, validCommentIds);
|
|
152
157
|
if (!content) return block;
|
|
153
158
|
return {
|
|
@@ -204,7 +209,7 @@ const withoutOrphanTableCellBlockMarkers = (blocks, validCommentIds) => {
|
|
|
204
209
|
const withoutOrphanTableCellBlockMarker = (block, validCommentIds) => {
|
|
205
210
|
if (block.type === "paragraph") return withoutOrphanParagraphMarkers(block, validCommentIds);
|
|
206
211
|
if (block.type === "table") return withoutOrphanTableMarkers(block, validCommentIds);
|
|
207
|
-
if (block.type === "blockSdt") {
|
|
212
|
+
if (block.type === "blockSdt" || block.type === "blockCustomXml") {
|
|
208
213
|
const content = withoutOrphanTableCellBlockMarkers(block.content, validCommentIds);
|
|
209
214
|
return content ? {
|
|
210
215
|
...block,
|
|
@@ -40,7 +40,7 @@ const normalizeCommentReferences = ({ documentBody, comments, headers, footers,
|
|
|
40
40
|
normalizeTable(block);
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
-
if (block.type !== "blockSdt") return;
|
|
43
|
+
if (block.type !== "blockSdt" && block.type !== "blockCustomXml") return;
|
|
44
44
|
normalizeBlocks(block.content);
|
|
45
45
|
};
|
|
46
46
|
const normalizeBlocks = (blocks) => {
|
|
@@ -25,7 +25,7 @@ const eachParagraph = (blocks, visit) => {
|
|
|
25
25
|
for (const row of block.rows ?? []) for (const cell of row.cells ?? []) eachParagraph(cell.content ?? [], visit);
|
|
26
26
|
continue;
|
|
27
27
|
}
|
|
28
|
-
if (block.type !== "blockSdt") continue;
|
|
28
|
+
if (block.type !== "blockSdt" && block.type !== "blockCustomXml") continue;
|
|
29
29
|
eachParagraph(block.content ?? [], visit);
|
|
30
30
|
}
|
|
31
31
|
};
|
|
@@ -42,6 +42,24 @@ const commentParentedReplies = (comments) => {
|
|
|
42
42
|
const commentIds = new Set(comments.map((comment) => comment.id));
|
|
43
43
|
return comments.filter((comment) => comment.parentId !== void 0 && commentIds.has(comment.parentId));
|
|
44
44
|
};
|
|
45
|
+
/** Match the order fromProseDoc uses when several ranges share a boundary. */
|
|
46
|
+
const orderCoLocatedRanges = (content) => {
|
|
47
|
+
for (let start = 0; start < content.length;) {
|
|
48
|
+
const type = content[start]?.type;
|
|
49
|
+
if (type !== "commentRangeStart" && type !== "commentRangeEnd") {
|
|
50
|
+
start += 1;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
let end = start + 1;
|
|
54
|
+
while (content[end]?.type === type) end += 1;
|
|
55
|
+
const ordered = content.slice(start, end).toSorted((left, right) => {
|
|
56
|
+
if ((left.type === "commentRangeStart" || left.type === "commentRangeEnd") && (right.type === "commentRangeStart" || right.type === "commentRangeEnd")) return left.id - right.id;
|
|
57
|
+
return 0;
|
|
58
|
+
});
|
|
59
|
+
content.splice(start, end - start, ...ordered);
|
|
60
|
+
start = end;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
45
63
|
const injectIntoParagraph = (paragraph, replyIdsByParent) => {
|
|
46
64
|
const content = paragraph.content ?? [];
|
|
47
65
|
if (!content.some((item) => (item.type === "commentRangeStart" || item.type === "commentRangeEnd" || item.type === "commentReference") && replyIdsByParent.has(item.id))) return 0;
|
|
@@ -68,6 +86,7 @@ const injectIntoParagraph = (paragraph, replyIdsByParent) => {
|
|
|
68
86
|
injected += 1;
|
|
69
87
|
}
|
|
70
88
|
}
|
|
89
|
+
orderCoLocatedRanges(next);
|
|
71
90
|
paragraph.content = next;
|
|
72
91
|
return injected;
|
|
73
92
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { document_d_exports } from "../types/document.js";
|
|
2
2
|
import { DrawingSafetyClass } from "./imageRawXml.js";
|
|
3
3
|
//#region src/docx/compatibility.d.ts
|
|
4
|
-
type DocxCompatibilityReason = "opaqueDrawing";
|
|
4
|
+
type DocxCompatibilityReason = "opaqueDrawing" | "unsupportedAltChunk";
|
|
5
5
|
type FolioDocxCompatibilityHost = "browser" | "server" | "unknown";
|
|
6
6
|
type FolioDocxCompatibilityProfile = document_d_exports.DocxConformanceClass;
|
|
7
7
|
type DocxCompatibilityContext = {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isAltChunkMarkup } from "./altChunk.js";
|
|
1
2
|
import { DRAWING_SAFETY_CLASSES, classifyDrawingSafety } from "./imageRawXml.js";
|
|
2
3
|
import { panic } from "better-result";
|
|
3
4
|
import { DOCX_CONFORMANCE_CLASSES } from "@stll/docx-core/model";
|
|
@@ -24,17 +25,20 @@ const inspectDocxCompatibility = (doc, options = {}) => {
|
|
|
24
25
|
const record = (drawing) => {
|
|
25
26
|
drawings.push(drawing);
|
|
26
27
|
if (drawing.class !== DRAWING_SAFETY_CLASSES.OPAQUE) return;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
issues.push({
|
|
30
|
-
code,
|
|
28
|
+
recordIssue({
|
|
29
|
+
code: "opaqueDrawing",
|
|
31
30
|
location: drawing.location
|
|
32
31
|
});
|
|
33
32
|
};
|
|
33
|
+
const recordIssue = (issue) => {
|
|
34
|
+
reasons.add(issue.code);
|
|
35
|
+
issues.push(issue);
|
|
36
|
+
};
|
|
34
37
|
inspectBlocks(doc.package.document.content, {
|
|
35
38
|
part: { type: "document" },
|
|
36
39
|
path: "package.document.content",
|
|
37
|
-
record
|
|
40
|
+
record,
|
|
41
|
+
recordIssue
|
|
38
42
|
});
|
|
39
43
|
for (const [relationshipId, header] of doc.package.headers?.entries() ?? []) inspectHeaderFooter(header, {
|
|
40
44
|
part: {
|
|
@@ -42,7 +46,8 @@ const inspectDocxCompatibility = (doc, options = {}) => {
|
|
|
42
46
|
relationshipId
|
|
43
47
|
},
|
|
44
48
|
path: `package.headers.get(${JSON.stringify(relationshipId)}).content`,
|
|
45
|
-
record
|
|
49
|
+
record,
|
|
50
|
+
recordIssue
|
|
46
51
|
});
|
|
47
52
|
for (const [relationshipId, footer] of doc.package.footers?.entries() ?? []) inspectHeaderFooter(footer, {
|
|
48
53
|
part: {
|
|
@@ -50,7 +55,8 @@ const inspectDocxCompatibility = (doc, options = {}) => {
|
|
|
50
55
|
relationshipId
|
|
51
56
|
},
|
|
52
57
|
path: `package.footers.get(${JSON.stringify(relationshipId)}).content`,
|
|
53
|
-
record
|
|
58
|
+
record,
|
|
59
|
+
recordIssue
|
|
54
60
|
});
|
|
55
61
|
for (const footnote of doc.package.footnotes ?? []) inspectBlocks(footnote.content, {
|
|
56
62
|
part: {
|
|
@@ -58,7 +64,8 @@ const inspectDocxCompatibility = (doc, options = {}) => {
|
|
|
58
64
|
id: footnote.id
|
|
59
65
|
},
|
|
60
66
|
path: `package.footnotes[id=${footnote.id}].content`,
|
|
61
|
-
record
|
|
67
|
+
record,
|
|
68
|
+
recordIssue
|
|
62
69
|
});
|
|
63
70
|
for (const endnote of doc.package.endnotes ?? []) inspectBlocks(endnote.content, {
|
|
64
71
|
part: {
|
|
@@ -66,7 +73,8 @@ const inspectDocxCompatibility = (doc, options = {}) => {
|
|
|
66
73
|
id: endnote.id
|
|
67
74
|
},
|
|
68
75
|
path: `package.endnotes[id=${endnote.id}].content`,
|
|
69
|
-
record
|
|
76
|
+
record,
|
|
77
|
+
recordIssue
|
|
70
78
|
});
|
|
71
79
|
return {
|
|
72
80
|
schemaVersion: 2,
|
|
@@ -86,7 +94,8 @@ function inspectBlocks(blocks, context) {
|
|
|
86
94
|
...block.paraId === void 0 ? {} : { blockId: block.paraId },
|
|
87
95
|
part: context.part,
|
|
88
96
|
path: `${blockPath}.content`,
|
|
89
|
-
record: context.record
|
|
97
|
+
record: context.record,
|
|
98
|
+
recordIssue: context.recordIssue
|
|
90
99
|
});
|
|
91
100
|
continue;
|
|
92
101
|
}
|
|
@@ -94,15 +103,27 @@ function inspectBlocks(blocks, context) {
|
|
|
94
103
|
for (const [rowIndex, row] of block.rows.entries()) for (const [cellIndex, cell] of row.cells.entries()) inspectBlocks(cell.content, {
|
|
95
104
|
part: context.part,
|
|
96
105
|
path: `${blockPath}.rows[${rowIndex}].cells[${cellIndex}].content`,
|
|
97
|
-
record: context.record
|
|
106
|
+
record: context.record,
|
|
107
|
+
recordIssue: context.recordIssue
|
|
108
|
+
});
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (block.type === "preservedBlock" && isAltChunkMarkup(block.xml)) {
|
|
112
|
+
context.recordIssue({
|
|
113
|
+
code: "unsupportedAltChunk",
|
|
114
|
+
location: {
|
|
115
|
+
part: context.part,
|
|
116
|
+
path: blockPath
|
|
117
|
+
}
|
|
98
118
|
});
|
|
99
119
|
continue;
|
|
100
120
|
}
|
|
101
|
-
if (block.type !== "blockSdt") continue;
|
|
121
|
+
if (block.type !== "blockSdt" && block.type !== "blockCustomXml") continue;
|
|
102
122
|
inspectBlocks(block.content, {
|
|
103
123
|
part: context.part,
|
|
104
124
|
path: `${blockPath}.content`,
|
|
105
|
-
record: context.record
|
|
125
|
+
record: context.record,
|
|
126
|
+
recordIssue: context.recordIssue
|
|
106
127
|
});
|
|
107
128
|
}
|
|
108
129
|
}
|
|
@@ -28,7 +28,7 @@ declare const CONTAINER_CHILDREN: {
|
|
|
28
28
|
readonly "w:comment": readonly ["altChunk", "bookmarkEnd", "bookmarkStart", "commentRangeEnd", "commentRangeStart", "customXml", "customXmlDelRangeEnd", "customXmlDelRangeStart", "customXmlInsRangeEnd", "customXmlInsRangeStart", "customXmlMoveFromRangeEnd", "customXmlMoveFromRangeStart", "customXmlMoveToRangeEnd", "customXmlMoveToRangeStart", "del", "ins", "moveFrom", "moveFromRangeEnd", "moveFromRangeStart", "moveTo", "moveToRangeEnd", "moveToRangeStart", "p", "permEnd", "permStart", "proofErr", "sdt", "tbl"];
|
|
29
29
|
readonly "run-level-content": readonly ["bdo", "bookmarkEnd", "bookmarkStart", "commentRangeEnd", "commentRangeStart", "customXml", "customXmlDelRangeEnd", "customXmlDelRangeStart", "customXmlInsRangeEnd", "customXmlInsRangeStart", "customXmlMoveFromRangeEnd", "customXmlMoveFromRangeStart", "customXmlMoveToRangeEnd", "customXmlMoveToRangeStart", "customXmlPr", "del", "dir", "fldSimple", "hyperlink", "ins", "moveFrom", "moveFromRangeEnd", "moveFromRangeStart", "moveTo", "moveToRangeEnd", "moveToRangeStart", "pPr", "permEnd", "permStart", "proofErr", "r", "sdt", "smartTag", "smartTagPr", "subDoc"];
|
|
30
30
|
readonly "table-content": readonly ["bookmarkEnd", "bookmarkStart", "commentRangeEnd", "commentRangeStart", "customXml", "customXmlDelRangeEnd", "customXmlDelRangeStart", "customXmlInsRangeEnd", "customXmlInsRangeStart", "customXmlMoveFromRangeEnd", "customXmlMoveFromRangeStart", "customXmlMoveToRangeEnd", "customXmlMoveToRangeStart", "customXmlPr", "del", "ins", "moveFrom", "moveFromRangeEnd", "moveFromRangeStart", "moveTo", "moveToRangeEnd", "moveToRangeStart", "permEnd", "permStart", "proofErr", "sdt", "tblGrid", "tblPr", "tr"];
|
|
31
|
-
readonly "row-content": readonly ["bookmarkEnd", "bookmarkStart", "commentRangeEnd", "commentRangeStart", "customXml", "customXmlDelRangeEnd", "customXmlDelRangeStart", "customXmlInsRangeEnd", "customXmlInsRangeStart", "customXmlMoveFromRangeEnd", "customXmlMoveFromRangeStart", "customXmlMoveToRangeEnd", "customXmlMoveToRangeStart", "del", "ins", "moveFrom", "moveFromRangeEnd", "moveFromRangeStart", "moveTo", "moveToRangeEnd", "moveToRangeStart", "permEnd", "permStart", "proofErr", "sdt", "tblPrEx", "tc", "tr", "trPr"];
|
|
31
|
+
readonly "row-content": readonly ["bookmarkEnd", "bookmarkStart", "commentRangeEnd", "commentRangeStart", "customXml", "customXmlDelRangeEnd", "customXmlDelRangeStart", "customXmlInsRangeEnd", "customXmlInsRangeStart", "customXmlMoveFromRangeEnd", "customXmlMoveFromRangeStart", "customXmlMoveToRangeEnd", "customXmlMoveToRangeStart", "customXmlPr", "del", "ins", "moveFrom", "moveFromRangeEnd", "moveFromRangeStart", "moveTo", "moveToRangeEnd", "moveToRangeStart", "permEnd", "permStart", "proofErr", "sdt", "tblPrEx", "tc", "tr", "trPr"];
|
|
32
32
|
readonly "w:fonts": readonly ["font"];
|
|
33
33
|
readonly "w:font": readonly ["altName", "charset", "embedBold", "embedBoldItalic", "embedItalic", "embedRegular", "family", "notTrueType", "panose1", "pitch", "sig"];
|
|
34
34
|
readonly "w:hyperlink": readonly ["bdo", "bookmarkEnd", "bookmarkStart", "commentRangeEnd", "commentRangeStart", "customXml", "customXmlDelRangeEnd", "customXmlDelRangeStart", "customXmlInsRangeEnd", "customXmlInsRangeStart", "customXmlMoveFromRangeEnd", "customXmlMoveFromRangeStart", "customXmlMoveToRangeEnd", "customXmlMoveToRangeStart", "del", "dir", "fldSimple", "hyperlink", "ins", "moveFrom", "moveFromRangeEnd", "moveFromRangeStart", "moveTo", "moveToRangeEnd", "moveToRangeStart", "permEnd", "permStart", "proofErr", "r", "sdt", "smartTag", "subDoc"];
|
|
@@ -40,7 +40,7 @@ function extractAllTemplateVariables(content) {
|
|
|
40
40
|
} else if (block.type === "table") {
|
|
41
41
|
const tableVars = extractTableVariables(block);
|
|
42
42
|
for (const v of tableVars) if (!variables.includes(v)) variables.push(v);
|
|
43
|
-
} else if (block.type === "blockSdt") {
|
|
43
|
+
} else if (block.type === "blockSdt" || block.type === "blockCustomXml") {
|
|
44
44
|
for (const v of extractAllTemplateVariables(block.content)) if (!variables.includes(v)) variables.push(v);
|
|
45
45
|
}
|
|
46
46
|
return variables;
|
|
@@ -56,7 +56,7 @@ function extractTableVariables(table) {
|
|
|
56
56
|
} else if (cellContent.type === "table") {
|
|
57
57
|
const nestedVars = extractTableVariables(cellContent);
|
|
58
58
|
for (const v of nestedVars) if (!variables.includes(v)) variables.push(v);
|
|
59
|
-
} else if (cellContent.type === "blockSdt") {
|
|
59
|
+
} else if (cellContent.type === "blockSdt" || cellContent.type === "blockCustomXml") {
|
|
60
60
|
for (const v of extractAllTemplateVariables(cellContent.content)) if (!variables.includes(v)) variables.push(v);
|
|
61
61
|
}
|
|
62
62
|
return variables;
|
|
@@ -153,7 +153,7 @@ function parseDocumentBackground(documentEl, context) {
|
|
|
153
153
|
function parseDocumentBody(xml, styles = null, theme = null, numbering = null, rels = null, media = null, context, previews = standalonePreviewLedger()) {
|
|
154
154
|
const result = { content: [] };
|
|
155
155
|
if (!xml) return result;
|
|
156
|
-
const documentEl = (parseXml(xml).elements ?? []).find((el) => el.type === "element" && (el.name
|
|
156
|
+
const documentEl = (parseXml(xml).elements ?? []).find((el) => el.type === "element" && getLocalName(el.name ?? "") === "document");
|
|
157
157
|
if (!documentEl) return result;
|
|
158
158
|
const background = parseDocumentBackground(documentEl, context);
|
|
159
159
|
if (background !== void 0) result.background = background;
|
|
@@ -177,14 +177,14 @@ function getAllParagraphs(body) {
|
|
|
177
177
|
const paragraphs = [];
|
|
178
178
|
for (const block of body.content) if (block.type === "paragraph") paragraphs.push(block);
|
|
179
179
|
else if (block.type === "table") paragraphs.push(...getTableParagraphs(block));
|
|
180
|
-
else if (block.type === "blockSdt") paragraphs.push(...getParagraphsFromBlocks(block.content));
|
|
180
|
+
else if (block.type === "blockSdt" || block.type === "blockCustomXml") paragraphs.push(...getParagraphsFromBlocks(block.content));
|
|
181
181
|
return paragraphs;
|
|
182
182
|
}
|
|
183
183
|
const getParagraphsFromBlocks = (blocks) => {
|
|
184
184
|
const paragraphs = [];
|
|
185
185
|
for (const block of blocks) if (block.type === "paragraph") paragraphs.push(block);
|
|
186
186
|
else if (block.type === "table") paragraphs.push(...getTableParagraphs(block));
|
|
187
|
-
else if (block.type === "blockSdt") paragraphs.push(...getParagraphsFromBlocks(block.content));
|
|
187
|
+
else if (block.type === "blockSdt" || block.type === "blockCustomXml") paragraphs.push(...getParagraphsFromBlocks(block.content));
|
|
188
188
|
return paragraphs;
|
|
189
189
|
};
|
|
190
190
|
/**
|
|
@@ -194,7 +194,7 @@ function getTableParagraphs(table) {
|
|
|
194
194
|
const paragraphs = [];
|
|
195
195
|
for (const row of table.rows) for (const cell of row.cells) for (const content of cell.content) if (content.type === "paragraph") paragraphs.push(content);
|
|
196
196
|
else if (content.type === "table") paragraphs.push(...getTableParagraphs(content));
|
|
197
|
-
else if (content.type === "blockSdt") paragraphs.push(...getParagraphsFromBlocks(content.content));
|
|
197
|
+
else if (content.type === "blockSdt" || content.type === "blockCustomXml") paragraphs.push(...getParagraphsFromBlocks(content.content));
|
|
198
198
|
return paragraphs;
|
|
199
199
|
}
|
|
200
200
|
/**
|
|
@@ -205,13 +205,13 @@ function getAllTables(body) {
|
|
|
205
205
|
for (const block of body.content) if (block.type === "table") {
|
|
206
206
|
tables.push(block);
|
|
207
207
|
tables.push(...getNestedTables(block));
|
|
208
|
-
} else if (block.type === "blockSdt") tables.push(...getTablesFromBlocks(block.content));
|
|
208
|
+
} else if (block.type === "blockSdt" || block.type === "blockCustomXml") tables.push(...getTablesFromBlocks(block.content));
|
|
209
209
|
return tables;
|
|
210
210
|
}
|
|
211
211
|
const getTablesFromBlocks = (blocks) => {
|
|
212
212
|
const tables = [];
|
|
213
213
|
for (const block of blocks) if (block.type === "table") tables.push(block, ...getNestedTables(block));
|
|
214
|
-
else if (block.type === "blockSdt") tables.push(...getTablesFromBlocks(block.content));
|
|
214
|
+
else if (block.type === "blockSdt" || block.type === "blockCustomXml") tables.push(...getTablesFromBlocks(block.content));
|
|
215
215
|
return tables;
|
|
216
216
|
};
|
|
217
217
|
/**
|
|
@@ -222,7 +222,7 @@ function getNestedTables(table) {
|
|
|
222
222
|
for (const row of table.rows) for (const cell of row.cells) for (const content of cell.content) if (content.type === "table") {
|
|
223
223
|
tables.push(content);
|
|
224
224
|
tables.push(...getNestedTables(content));
|
|
225
|
-
} else if (content.type === "blockSdt") tables.push(...getTablesFromBlocks(content.content));
|
|
225
|
+
} else if (content.type === "blockSdt" || content.type === "blockCustomXml") tables.push(...getTablesFromBlocks(content.content));
|
|
226
226
|
return tables;
|
|
227
227
|
}
|
|
228
228
|
/**
|
|
@@ -232,13 +232,13 @@ function getDocumentText(body) {
|
|
|
232
232
|
const lines = [];
|
|
233
233
|
for (const block of body.content) if (block.type === "paragraph") lines.push(getParagraphText(block));
|
|
234
234
|
else if (block.type === "table") lines.push(getTableText(block));
|
|
235
|
-
else if (block.type === "blockSdt") lines.push(getTextFromBlocks(block.content));
|
|
235
|
+
else if (block.type === "blockSdt" || block.type === "blockCustomXml") lines.push(getTextFromBlocks(block.content));
|
|
236
236
|
return lines.join("\n");
|
|
237
237
|
}
|
|
238
238
|
const getTextFromBlocks = (blocks) => blocks.flatMap((block) => {
|
|
239
239
|
if (block.type === "paragraph") return [getParagraphText(block)];
|
|
240
240
|
if (block.type === "table") return [getTableText(block)];
|
|
241
|
-
return block.type === "blockSdt" ? [getTextFromBlocks(block.content)] : [];
|
|
241
|
+
return block.type === "blockSdt" || block.type === "blockCustomXml" ? [getTextFromBlocks(block.content)] : [];
|
|
242
242
|
}).join("\n");
|
|
243
243
|
/**
|
|
244
244
|
* Get plain text from a table
|
|
@@ -251,7 +251,7 @@ function getTableText(table) {
|
|
|
251
251
|
const cellTexts = [];
|
|
252
252
|
for (const content of cell.content) if (content.type === "paragraph") cellTexts.push(getParagraphText(content));
|
|
253
253
|
else if (content.type === "table") cellTexts.push(getTableText(content));
|
|
254
|
-
else if (content.type === "blockSdt") cellTexts.push(getTextFromBlocks(content.content));
|
|
254
|
+
else if (content.type === "blockSdt" || content.type === "blockCustomXml") cellTexts.push(getTextFromBlocks(content.content));
|
|
255
255
|
rowTexts.push(cellTexts.join("\n"));
|
|
256
256
|
}
|
|
257
257
|
lines.push(rowTexts.join(" "));
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { DocxParagraphSurfaces } from "./paragraphTraversal.js";
|
|
2
2
|
//#region src/docx/drawingIdNormalization.d.ts
|
|
3
|
+
/** Drawing IDs are package-local identifiers, not image content. */
|
|
4
|
+
declare const drawingXmlWithoutIdentity: (xml: string) => string;
|
|
3
5
|
declare const normalizeDrawingIds: (surfaces: DocxParagraphSurfaces) => void;
|
|
4
6
|
//#endregion
|
|
5
|
-
export { normalizeDrawingIds };
|
|
7
|
+
export { drawingXmlWithoutIdentity, normalizeDrawingIds };
|
|
@@ -22,6 +22,11 @@ const reassignRawDrawingId = ({ xml, id }) => {
|
|
|
22
22
|
visit(root);
|
|
23
23
|
return foundDocPr ? (root.elements ?? []).map(captureVerbatimXml).join("") : null;
|
|
24
24
|
};
|
|
25
|
+
/** Drawing IDs are package-local identifiers, not image content. */
|
|
26
|
+
const drawingXmlWithoutIdentity = (xml) => reassignRawDrawingId({
|
|
27
|
+
xml,
|
|
28
|
+
id: "0"
|
|
29
|
+
}) ?? xml;
|
|
25
30
|
const needsGeneratedId = ({ id }) => id === void 0 || id === "" || id === "0";
|
|
26
31
|
const normalizeDrawingIds = (surfaces) => {
|
|
27
32
|
const entries = [];
|
|
@@ -73,4 +78,4 @@ const normalizeDrawingIds = (surfaces) => {
|
|
|
73
78
|
}
|
|
74
79
|
};
|
|
75
80
|
//#endregion
|
|
76
|
-
export { normalizeDrawingIds };
|
|
81
|
+
export { drawingXmlWithoutIdentity, normalizeDrawingIds };
|