@stll/folio-core 0.52.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/plan.js +10 -5
- package/dist/compare/scenario.js +14 -3
- package/dist/compare/section-boundary-properties.js +1 -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/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/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/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 +3 -2
- package/dist/internal/headlessRevisionResolution.d.ts +0 -23
|
@@ -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 };
|