@stll/folio-core 0.47.6 → 0.48.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/dist/ai-edits/word-diff.d.ts +25 -6
- package/dist/ai-edits/word-diff.js +210 -38
- package/dist/controller/fontReadiness.js +3 -3
- package/dist/controller/hyphenationReadiness.d.ts +19 -0
- package/dist/controller/hyphenationReadiness.js +47 -0
- package/dist/controller/layoutPipeline.d.ts +3 -0
- package/dist/controller/layoutPipeline.js +59 -17
- package/dist/display-list/build/buildDisplayList.js +39 -12
- package/dist/display-list/build/pageFurniture.d.ts +7 -1
- package/dist/display-list/build/pageFurniture.js +21 -8
- package/dist/display-list/build/paragraphPrimitives.js +5 -4
- package/dist/display-list/build/tablePrimitives.js +10 -6
- package/dist/docx/attributeRemainder.js +10 -2
- package/dist/docx/blockContentParser.d.ts +2 -0
- package/dist/docx/blockContentParser.js +77 -62
- package/dist/docx/commentParser.d.ts +2 -1
- package/dist/docx/commentParser.js +57 -45
- package/dist/docx/containerChildren.d.ts +21 -8
- package/dist/docx/containerChildren.js +39 -9
- package/dist/docx/documentParser.d.ts +5 -1
- package/dist/docx/documentParser.js +8 -5
- package/dist/docx/documentSectionFacts.d.ts +22 -0
- package/dist/docx/documentSectionFacts.js +43 -0
- package/dist/docx/fieldParser.d.ts +8 -1
- package/dist/docx/fieldParser.js +47 -3
- package/dist/docx/fontTableParser.js +34 -27
- package/dist/docx/footnoteParser.d.ts +3 -2
- package/dist/docx/footnoteParser.js +15 -12
- package/dist/docx/groupDrawingParser.d.ts +2 -1
- package/dist/docx/groupDrawingParser.js +3 -6
- package/dist/docx/headerFooterParser.d.ts +7 -2
- package/dist/docx/headerFooterParser.js +15 -5
- package/dist/docx/hyperlinkParser.d.ts +48 -36
- package/dist/docx/hyperlinkParser.js +97 -82
- package/dist/docx/numberingParser.js +108 -84
- package/dist/docx/paragraphParser.d.ts +5 -1
- package/dist/docx/paragraphParser.js +381 -362
- package/dist/docx/paragraphProperties.js +123 -109
- package/dist/docx/paragraphPropertySource.d.ts +6 -1
- package/dist/docx/paragraphPropertySource.js +9 -1
- package/dist/docx/paragraphTextBoxEnrichment.d.ts +2 -1
- package/dist/docx/paragraphTextBoxEnrichment.js +17 -6
- package/dist/docx/parser.d.ts +7 -1
- package/dist/docx/parser.js +33 -16
- package/dist/docx/previewBudget.d.ts +55 -33
- package/dist/docx/previewBudget.js +59 -65
- package/dist/docx/relsParser.js +9 -1
- package/dist/docx/rezip.js +41 -58
- package/dist/docx/runParser.d.ts +4 -1
- package/dist/docx/runParser.js +172 -184
- package/dist/docx/sdtProperties.js +87 -84
- package/dist/docx/sectionParser.js +169 -160
- package/dist/docx/serializer/paragraphSerializer.js +42 -38
- package/dist/docx/serializer/settingsSerializer.js +19 -1
- package/dist/docx/settingsParser.js +8 -0
- package/dist/docx/streamingXmlParser.d.ts +6 -2
- package/dist/docx/streamingXmlParser.js +12 -7
- package/dist/docx/styleParser.js +34 -8
- package/dist/docx/tableParser.d.ts +21 -12
- package/dist/docx/tableParser.js +518 -441
- package/dist/docx/textBoxParser.d.ts +8 -3
- package/dist/docx/textBoxParser.js +3 -3
- package/dist/docx/verbatimCapture.d.ts +10 -8
- package/dist/docx/verbatimCapture.js +45 -2
- package/dist/docx/vmlImageParser.d.ts +15 -13
- package/dist/docx/vmlImageParser.js +75 -60
- package/dist/docx/vmlPreview.d.ts +3 -3
- package/dist/docx/vmlPreview.js +3 -4
- package/dist/docx/xmlNamespaceContext.d.ts +9 -0
- package/dist/docx/xmlNamespaceContext.js +54 -0
- package/dist/docx/xmlParser.d.ts +6 -3
- package/dist/docx/xmlParser.js +11 -41
- package/dist/docx/xmlResourceLimits.d.ts +2 -1
- package/dist/docx/xmlResourceLimits.js +4 -1
- package/dist/fonts/headlessMeasure.js +0 -0
- package/dist/headless-layout.d.ts +11 -2
- package/dist/headless-layout.js +153 -107
- package/dist/internal/paragraphFormattingSerialization.js +3 -3
- package/dist/layout-bridge/convert/endnoteLayout.d.ts +65 -0
- package/dist/layout-bridge/convert/endnoteLayout.js +227 -0
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +19 -3
- package/dist/layout-bridge/convert/footnoteLayout.js +40 -31
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +1 -7
- package/dist/layout-bridge/convert/headerFooterLayout.js +5 -20
- package/dist/layout-bridge/convert/paragraphMarkFormatting.d.ts +10 -0
- package/dist/layout-bridge/convert/paragraphMarkFormatting.js +59 -0
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +29 -1
- package/dist/layout-bridge/convert/toFlowBlocks.js +258 -35
- package/dist/layout-bridge/engine/hitTest.js +5 -3
- package/dist/layout-bridge/engine/selectionRects.js +5 -3
- package/dist/layout-engine/anchorLayoutInCellCompatibility.d.ts +10 -0
- package/dist/layout-engine/anchorLayoutInCellCompatibility.js +22 -0
- package/dist/layout-engine/index.d.ts +2 -2
- package/dist/layout-engine/index.js +70 -11
- package/dist/layout-engine/justificationCompatibility.d.ts +1 -1
- package/dist/layout-engine/justificationCompatibility.js +9 -5
- package/dist/layout-engine/keep-together.d.ts +11 -5
- package/dist/layout-engine/keep-together.js +39 -16
- package/dist/layout-engine/layoutInstrumentation.d.ts +8 -2
- package/dist/layout-engine/layoutInstrumentation.js +8 -1
- package/dist/layout-engine/measure/advanceComposition.js +4 -7
- package/dist/layout-engine/measure/hyphenationDictionaries.d.ts +74 -0
- package/dist/layout-engine/measure/hyphenationDictionaries.js +138 -0
- package/dist/layout-engine/measure/hyphenationPreload.d.ts +11 -0
- package/dist/layout-engine/measure/hyphenationPreload.js +24 -0
- package/dist/layout-engine/measure/lineBreakProvider.d.ts +12 -2
- package/dist/layout-engine/measure/lineBreakProvider.js +30 -30
- package/dist/layout-engine/measure/lineBreaks.d.ts +6 -1
- package/dist/layout-engine/measure/lineBreaks.js +10 -3
- package/dist/layout-engine/measure/listMarkerWidth.d.ts +9 -6
- package/dist/layout-engine/measure/listMarkerWidth.js +20 -22
- package/dist/layout-engine/measure/measureBlocks.js +42 -8
- package/dist/layout-engine/measure/measureContainer.js +5 -5
- package/dist/layout-engine/measure/measureHelpers.d.ts +15 -3
- package/dist/layout-engine/measure/measureHelpers.js +21 -5
- package/dist/layout-engine/measure/measureParagraph.js +109 -30
- package/dist/layout-engine/measure/measureTypes.d.ts +5 -0
- package/dist/layout-engine/measure/tabCalculator.d.ts +2 -0
- package/dist/layout-engine/measure/tabCalculator.js +2 -1
- package/dist/layout-engine/measure/tableCellFloating.d.ts +2 -0
- package/dist/layout-engine/measure/tableCellFloating.js +51 -19
- package/dist/layout-engine/measure/tableCellGrid.d.ts +28 -3
- package/dist/layout-engine/measure/tableCellGrid.js +45 -5
- package/dist/layout-engine/measure/tableFragmentBorderGeometry.js +2 -1
- package/dist/layout-engine/noteAreaFlow.d.ts +19 -0
- package/dist/layout-engine/noteAreaFlow.js +83 -0
- package/dist/layout-engine/paginator.d.ts +10 -1
- package/dist/layout-engine/paginator.js +13 -1
- package/dist/layout-engine/tableRowBreak.js +3 -1
- package/dist/layout-engine/types.d.ts +89 -3
- package/dist/layout-engine/types.js +96 -1
- package/dist/layout-painter/index.d.ts +3 -0
- package/dist/layout-painter/renderPage.js +32 -83
- package/dist/layout-painter/renderParagraph.d.ts +6 -1
- package/dist/layout-painter/renderParagraph.js +34 -22
- package/dist/layout-painter/renderTable.js +26 -13
- package/dist/prosemirror/attrs/index.d.ts +9 -9
- package/dist/prosemirror/attrs/index.js +43 -11
- package/dist/prosemirror/conversion/fromProseDoc.js +8 -1
- package/dist/prosemirror/conversion/markInterner.d.ts +21 -0
- package/dist/prosemirror/conversion/markInterner.js +90 -0
- package/dist/prosemirror/conversion/toProseDoc.js +77 -41
- package/dist/prosemirror/extensions/core/DocExtension.js +2 -1
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +1 -0
- package/dist/prosemirror/extensions/marks/markUtils.d.ts +6 -2
- package/dist/prosemirror/extensions/marks/markUtils.js +39 -51
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +2 -1
- package/dist/prosemirror/listMarker.d.ts +1 -0
- package/dist/prosemirror/listMarker.js +2 -0
- package/dist/prosemirror/listRenderingAttrs.d.ts +1 -0
- package/dist/prosemirror/listRenderingAttrs.js +3 -0
- package/dist/prosemirror/schema/nodes.d.ts +13 -1
- package/dist/prosemirror/textBoxHostParagraph.d.ts +13 -0
- package/dist/prosemirror/textBoxHostParagraph.js +21 -0
- package/dist/prosemirror/validation.js +91 -80
- package/dist/utils/createDocument.js +10 -1
- package/dist/utils/scriptSegments.d.ts +33 -4
- package/dist/utils/scriptSegments.js +39 -6
- package/dist/utils/textFormattingMerge.d.ts +17 -3
- package/dist/utils/textFormattingMerge.js +18 -12
- package/dist/utils/trailingText.d.ts +22 -0
- package/dist/utils/trailingText.js +32 -0
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DERIVED_PART_ROOT_ATTRIBUTES, attributeRemainder } from "./attributeRemainder.js";
|
|
2
|
-
import { CAPTURE,
|
|
2
|
+
import { CAPTURE, dispatchChildrenWithContext, sequencePositions } from "./containerChildren.js";
|
|
3
3
|
import { isNumberingReference } from "./numberingReference.js";
|
|
4
4
|
import { formatOoxmlCounter, padDecimal } from "./ooxmlCounterFormatter.js";
|
|
5
5
|
import { parseParagraphProperties } from "./paragraphProperties.js";
|
|
@@ -25,6 +25,29 @@ const integerValue = (element) => {
|
|
|
25
25
|
return parsed === void 0 || !Number.isFinite(parsed) ? void 0 : parsed;
|
|
26
26
|
};
|
|
27
27
|
/**
|
|
28
|
+
* A field read off a sequence child, when the child stated one.
|
|
29
|
+
*
|
|
30
|
+
* `CT_AbstractNum` and `CT_Lvl` are sequences and the serializer writes these
|
|
31
|
+
* fields back in that order, so the sink's index is a count of what has been
|
|
32
|
+
* read and a capture lands between the same two neighbours it sat between.
|
|
33
|
+
*/
|
|
34
|
+
const assignDefined = (target, key, carried) => {
|
|
35
|
+
if (carried === void 0) return;
|
|
36
|
+
target[key] = carried;
|
|
37
|
+
};
|
|
38
|
+
const NUMBERING_HANDLERS = {
|
|
39
|
+
abstractNum: (child, definitions) => {
|
|
40
|
+
const parsed = parseAbstractNumbering(child);
|
|
41
|
+
if (parsed) definitions.abstractNums.push(parsed);
|
|
42
|
+
},
|
|
43
|
+
num: (child, definitions) => {
|
|
44
|
+
const parsed = parseNumberingInstance(child);
|
|
45
|
+
if (parsed) definitions.nums.push(parsed);
|
|
46
|
+
},
|
|
47
|
+
numPicBullet: CAPTURE,
|
|
48
|
+
numIdMacAtCleanup: CAPTURE
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
28
51
|
* Parse numbering.xml into NumberingDefinitions
|
|
29
52
|
*
|
|
30
53
|
* @param numberingXml - Raw XML string from word/numbering.xml (or null if not present)
|
|
@@ -38,22 +61,12 @@ function parseNumbering(numberingXml) {
|
|
|
38
61
|
if (!numberingXml) return createNumberingMap(definitions);
|
|
39
62
|
const root = parseXmlDocument(numberingXml);
|
|
40
63
|
if (!root) return createNumberingMap(definitions);
|
|
41
|
-
const preserved =
|
|
64
|
+
const preserved = dispatchChildrenWithContext({
|
|
42
65
|
element: root,
|
|
43
66
|
container: "w:numbering",
|
|
44
67
|
capturePosition: sequencePositions("w:numbering", root),
|
|
45
|
-
handlers:
|
|
46
|
-
|
|
47
|
-
const parsed = parseAbstractNumbering(child);
|
|
48
|
-
if (parsed) definitions.abstractNums.push(parsed);
|
|
49
|
-
},
|
|
50
|
-
num: (child) => {
|
|
51
|
-
const parsed = parseNumberingInstance(child);
|
|
52
|
-
if (parsed) definitions.nums.push(parsed);
|
|
53
|
-
},
|
|
54
|
-
numPicBullet: CAPTURE,
|
|
55
|
-
numIdMacAtCleanup: CAPTURE
|
|
56
|
-
}
|
|
68
|
+
handlers: NUMBERING_HANDLERS,
|
|
69
|
+
context: definitions
|
|
57
70
|
});
|
|
58
71
|
if (preserved !== void 0) definitions.preserved = preserved;
|
|
59
72
|
const preservedAttributes = attributeRemainder({
|
|
@@ -63,6 +76,18 @@ function parseNumbering(numberingXml) {
|
|
|
63
76
|
if (preservedAttributes !== void 0) definitions.preservedAttributes = preservedAttributes;
|
|
64
77
|
return createNumberingMap(definitions);
|
|
65
78
|
}
|
|
79
|
+
const ABSTRACT_NUM_HANDLERS = {
|
|
80
|
+
nsid: (child, abstractNum) => assignDefined(abstractNum, "nsid", attributeValue(child)),
|
|
81
|
+
multiLevelType: (child, abstractNum) => assignDefined(abstractNum, "multiLevelType", narrow(attributeValue(child), MULTI_LEVEL_TYPES)),
|
|
82
|
+
tmpl: (child, abstractNum) => assignDefined(abstractNum, "tmpl", attributeValue(child)),
|
|
83
|
+
name: (child, abstractNum) => assignDefined(abstractNum, "name", attributeValue(child)),
|
|
84
|
+
styleLink: (child, abstractNum) => assignDefined(abstractNum, "styleLink", attributeValue(child)),
|
|
85
|
+
numStyleLink: (child, abstractNum) => assignDefined(abstractNum, "numStyleLink", attributeValue(child)),
|
|
86
|
+
lvl: (child, abstractNum) => {
|
|
87
|
+
const level = parseListLevel(child);
|
|
88
|
+
if (level) abstractNum.levels.push(level);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
66
91
|
/**
|
|
67
92
|
* Parse a single w:abstractNum element
|
|
68
93
|
*/
|
|
@@ -75,26 +100,12 @@ function parseAbstractNumbering(element) {
|
|
|
75
100
|
abstractNumId,
|
|
76
101
|
levels: []
|
|
77
102
|
};
|
|
78
|
-
const
|
|
79
|
-
if (value === void 0) return;
|
|
80
|
-
abstractNum[key] = value;
|
|
81
|
-
};
|
|
82
|
-
const preserved = dispatchChildren({
|
|
103
|
+
const preserved = dispatchChildrenWithContext({
|
|
83
104
|
element,
|
|
84
105
|
container: "w:abstractNum",
|
|
85
106
|
capturePosition: sequencePositions("w:abstractNum", element),
|
|
86
|
-
handlers:
|
|
87
|
-
|
|
88
|
-
multiLevelType: (child) => read("multiLevelType", narrow(attributeValue(child), MULTI_LEVEL_TYPES)),
|
|
89
|
-
tmpl: (child) => read("tmpl", attributeValue(child)),
|
|
90
|
-
name: (child) => read("name", attributeValue(child)),
|
|
91
|
-
styleLink: (child) => read("styleLink", attributeValue(child)),
|
|
92
|
-
numStyleLink: (child) => read("numStyleLink", attributeValue(child)),
|
|
93
|
-
lvl: (child) => {
|
|
94
|
-
const level = parseListLevel(child);
|
|
95
|
-
if (level) abstractNum.levels.push(level);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
107
|
+
handlers: ABSTRACT_NUM_HANDLERS,
|
|
108
|
+
context: abstractNum
|
|
98
109
|
});
|
|
99
110
|
if (preserved !== void 0) abstractNum.preserved = preserved;
|
|
100
111
|
const preservedAttributes = attributeRemainder({
|
|
@@ -113,6 +124,16 @@ const MULTI_LEVEL_TYPES = [
|
|
|
113
124
|
"singleLevel"
|
|
114
125
|
];
|
|
115
126
|
const narrow = (carried, members) => members.find((member) => member === carried);
|
|
127
|
+
const NUMBERING_INSTANCE_HANDLERS = {
|
|
128
|
+
abstractNumId: (child, walk) => {
|
|
129
|
+
if (walk.abstractNumId !== void 0) return;
|
|
130
|
+
walk.abstractNumId = integerValue(child);
|
|
131
|
+
},
|
|
132
|
+
lvlOverride: (child, { levelOverrides }) => {
|
|
133
|
+
const override = parseLevelOverride(child);
|
|
134
|
+
if (override) levelOverrides.push(override);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
116
137
|
/**
|
|
117
138
|
* Parse a single w:num element (numbering instance)
|
|
118
139
|
*/
|
|
@@ -121,23 +142,18 @@ function parseNumberingInstance(element) {
|
|
|
121
142
|
if (numIdStr === null) return null;
|
|
122
143
|
const numId = Number.parseInt(numIdStr, 10);
|
|
123
144
|
if (Number.isNaN(numId)) return null;
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
145
|
+
const walk = {
|
|
146
|
+
abstractNumId: void 0,
|
|
147
|
+
levelOverrides: []
|
|
148
|
+
};
|
|
149
|
+
const preserved = dispatchChildrenWithContext({
|
|
127
150
|
element,
|
|
128
151
|
container: "w:num",
|
|
129
152
|
capturePosition: sequencePositions("w:num", element),
|
|
130
|
-
handlers:
|
|
131
|
-
|
|
132
|
-
if (abstractNumId !== void 0) return;
|
|
133
|
-
abstractNumId = integerValue(child);
|
|
134
|
-
},
|
|
135
|
-
lvlOverride: (child) => {
|
|
136
|
-
const override = parseLevelOverride(child);
|
|
137
|
-
if (override) levelOverrides.push(override);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
153
|
+
handlers: NUMBERING_INSTANCE_HANDLERS,
|
|
154
|
+
context: walk
|
|
140
155
|
});
|
|
156
|
+
const { abstractNumId, levelOverrides } = walk;
|
|
141
157
|
if (abstractNumId === void 0) return null;
|
|
142
158
|
const instance = {
|
|
143
159
|
numId,
|
|
@@ -152,6 +168,16 @@ function parseNumberingInstance(element) {
|
|
|
152
168
|
if (preservedAttributes !== void 0) instance.preservedAttributes = preservedAttributes;
|
|
153
169
|
return instance;
|
|
154
170
|
}
|
|
171
|
+
const LEVEL_OVERRIDE_HANDLERS = {
|
|
172
|
+
startOverride: (child, override) => {
|
|
173
|
+
const start = integerValue(child);
|
|
174
|
+
if (start !== void 0 && override.startOverride === void 0) override.startOverride = start;
|
|
175
|
+
},
|
|
176
|
+
lvl: (child, override) => {
|
|
177
|
+
const level = parseListLevel(child);
|
|
178
|
+
if (level && override.lvl === void 0) override.lvl = level;
|
|
179
|
+
}
|
|
180
|
+
};
|
|
155
181
|
/**
|
|
156
182
|
* Parse a single w:lvlOverride element (one level of one numbering instance)
|
|
157
183
|
*/
|
|
@@ -159,20 +185,12 @@ function parseLevelOverride(element) {
|
|
|
159
185
|
const ilvl = parseNumericAttribute(element, "w", "ilvl");
|
|
160
186
|
if (ilvl === void 0) return null;
|
|
161
187
|
const override = { ilvl };
|
|
162
|
-
const preserved =
|
|
188
|
+
const preserved = dispatchChildrenWithContext({
|
|
163
189
|
element,
|
|
164
190
|
container: "w:lvlOverride",
|
|
165
191
|
capturePosition: sequencePositions("w:lvlOverride", element),
|
|
166
|
-
handlers:
|
|
167
|
-
|
|
168
|
-
const start = integerValue(child);
|
|
169
|
-
if (start !== void 0 && override.startOverride === void 0) override.startOverride = start;
|
|
170
|
-
},
|
|
171
|
-
lvl: (child) => {
|
|
172
|
-
const level = parseListLevel(child);
|
|
173
|
-
if (level && override.lvl === void 0) override.lvl = level;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
192
|
+
handlers: LEVEL_OVERRIDE_HANDLERS,
|
|
193
|
+
context: override
|
|
176
194
|
});
|
|
177
195
|
if (preserved !== void 0) override.preserved = preserved;
|
|
178
196
|
const preservedAttributes = attributeRemainder({
|
|
@@ -182,6 +200,34 @@ function parseLevelOverride(element) {
|
|
|
182
200
|
if (preservedAttributes !== void 0) override.preservedAttributes = preservedAttributes;
|
|
183
201
|
return override;
|
|
184
202
|
}
|
|
203
|
+
const LIST_LEVEL_HANDLERS = {
|
|
204
|
+
start: (child, level) => assignDefined(level, "start", integerValue(child)),
|
|
205
|
+
numFmt: (child, level) => {
|
|
206
|
+
const resolved = resolveNumFmt(child);
|
|
207
|
+
if (resolved === null) return CAPTURE;
|
|
208
|
+
Object.assign(level, resolved);
|
|
209
|
+
},
|
|
210
|
+
lvlRestart: (child, level) => assignDefined(level, "lvlRestart", integerValue(child)),
|
|
211
|
+
pStyle: (child, level) => assignDefined(level, "pStyle", attributeValue(child)),
|
|
212
|
+
isLgl: (child, level) => assignDefined(level, "isLgl", parseBooleanElement(child)),
|
|
213
|
+
suff: (child, level) => assignDefined(level, "suffix", narrowEnum(attributeValue(child), LevelSuffixSchema)),
|
|
214
|
+
lvlText: (child, level) => {
|
|
215
|
+
assignDefined(level, "lvlText", attributeValue(child) ?? "");
|
|
216
|
+
const isNull = parseOnOffAttribute(child, "w", "null");
|
|
217
|
+
if (isNull !== void 0) level.lvlTextNull = isNull;
|
|
218
|
+
},
|
|
219
|
+
lvlPicBulletId: (child, level) => assignDefined(level, "lvlPicBulletId", integerValue(child)),
|
|
220
|
+
legacy: (child, level) => assignDefined(level, "legacy", legacyOf(child)),
|
|
221
|
+
lvlJc: (child, level) => assignDefined(level, "lvlJc", narrowEnum(attributeValue(child), ParagraphAlignmentSchema)),
|
|
222
|
+
pPr: (child, level) => assignDefined(level, "pPr", parseParagraphProperties(child, null) ?? {}),
|
|
223
|
+
rPr: (child, level) => assignDefined(level, "rPr", parseRunProperties(child, null, RUN_PROPERTY_OWNERS.standalone) ?? {})
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* `mc:AlternateContent` around a custom `w:numFmt` is read for its format by
|
|
227
|
+
* {@link parseListLevel}, and the writer re-emits that format as the level's
|
|
228
|
+
* own `w:numFmt`, so the walk takes it without a capture.
|
|
229
|
+
*/
|
|
230
|
+
const LIST_LEVEL_UNDECLARED = { AlternateContent: () => void 0 };
|
|
185
231
|
/**
|
|
186
232
|
* Parse a single w:lvl element (list level definition)
|
|
187
233
|
*/
|
|
@@ -194,37 +240,13 @@ function parseListLevel(element) {
|
|
|
194
240
|
lvlText: ""
|
|
195
241
|
};
|
|
196
242
|
const alternateEl = findChild(element, "mc", "AlternateContent");
|
|
197
|
-
const
|
|
198
|
-
if (value === void 0) return;
|
|
199
|
-
level[key] = value;
|
|
200
|
-
};
|
|
201
|
-
const preserved = dispatchChildren({
|
|
243
|
+
const preserved = dispatchChildrenWithContext({
|
|
202
244
|
element,
|
|
203
245
|
container: "w:lvl",
|
|
204
246
|
capturePosition: sequencePositions("w:lvl", element),
|
|
205
|
-
handlers:
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
const resolved = resolveNumFmt(child);
|
|
209
|
-
if (resolved === null) return CAPTURE;
|
|
210
|
-
Object.assign(level, resolved);
|
|
211
|
-
},
|
|
212
|
-
lvlRestart: (child) => read("lvlRestart", integerValue(child)),
|
|
213
|
-
pStyle: (child) => read("pStyle", attributeValue(child)),
|
|
214
|
-
isLgl: (child) => read("isLgl", parseBooleanElement(child)),
|
|
215
|
-
suff: (child) => read("suffix", narrowEnum(attributeValue(child), LevelSuffixSchema)),
|
|
216
|
-
lvlText: (child) => {
|
|
217
|
-
read("lvlText", attributeValue(child) ?? "");
|
|
218
|
-
const isNull = parseOnOffAttribute(child, "w", "null");
|
|
219
|
-
if (isNull !== void 0) level.lvlTextNull = isNull;
|
|
220
|
-
},
|
|
221
|
-
lvlPicBulletId: (child) => read("lvlPicBulletId", integerValue(child)),
|
|
222
|
-
legacy: (child) => read("legacy", legacyOf(child)),
|
|
223
|
-
lvlJc: (child) => read("lvlJc", narrowEnum(attributeValue(child), ParagraphAlignmentSchema)),
|
|
224
|
-
pPr: (child) => read("pPr", parseParagraphProperties(child, null) ?? {}),
|
|
225
|
-
rPr: (child) => read("rPr", parseRunProperties(child, null, RUN_PROPERTY_OWNERS.standalone) ?? {})
|
|
226
|
-
},
|
|
227
|
-
undeclared: { AlternateContent: () => void 0 }
|
|
247
|
+
handlers: LIST_LEVEL_HANDLERS,
|
|
248
|
+
undeclared: LIST_LEVEL_UNDECLARED,
|
|
249
|
+
context: level
|
|
228
250
|
});
|
|
229
251
|
if (preserved !== void 0) level.preserved = preserved;
|
|
230
252
|
const preservedAttributes = attributeRemainder({
|
|
@@ -340,7 +362,8 @@ const markerFormattingFromLevel = (formatting) => {
|
|
|
340
362
|
...formatting.italic !== void 0 ? { italic: formatting.italic } : {},
|
|
341
363
|
...formatting.italicCs !== void 0 ? { italicCs: formatting.italicCs } : {},
|
|
342
364
|
...formatting.rtl !== void 0 ? { rtl: formatting.rtl } : {},
|
|
343
|
-
...formatting.cs !== void 0 ? { cs: formatting.cs } : {}
|
|
365
|
+
...formatting.cs !== void 0 ? { cs: formatting.cs } : {},
|
|
366
|
+
...formatting.color !== void 0 ? { color: formatting.color } : {}
|
|
344
367
|
};
|
|
345
368
|
return Object.keys(markerFormatting).length > 0 ? markerFormatting : void 0;
|
|
346
369
|
};
|
|
@@ -450,6 +473,7 @@ function computeListRendering(numPr, numbering) {
|
|
|
450
473
|
if (level.rPr?.hidden) rendering.markerHidden = true;
|
|
451
474
|
const markerFormatting = markerFormattingFromLevel(level.rPr);
|
|
452
475
|
if (markerFormatting) rendering.markerFormatting = markerFormatting;
|
|
476
|
+
if (level.pPr?.tabs?.length) rendering.levelTabs = level.pPr.tabs;
|
|
453
477
|
if (level.rPr?.allCaps) rendering.markerAllCaps = true;
|
|
454
478
|
const markerAlignment = markerAlignmentForLevel(level.lvlJc);
|
|
455
479
|
if (markerAlignment !== void 0) rendering.markerAlignment = markerAlignment;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { document_d_exports } from "../types/document.js";
|
|
2
2
|
import { NumberingMap } from "./numberingParser.js";
|
|
3
3
|
import { XmlElement } from "./xmlParser.js";
|
|
4
|
+
import { PreviewLedger } from "./previewBudget.js";
|
|
4
5
|
import { StyleMap } from "./styleParser.js";
|
|
5
6
|
//#region src/docx/paragraphParser.d.ts
|
|
6
7
|
declare function parseParagraphPropertyChanges(pPr: XmlElement | null, theme: document_d_exports.Theme | null, currentFormatting: document_d_exports.ParagraphFormatting | undefined): document_d_exports.ParagraphPropertyChange[] | undefined;
|
|
7
8
|
type ParseParagraphOptions = {
|
|
8
9
|
inHeaderFooter?: boolean;
|
|
9
10
|
rootXmlns?: Record<string, string>;
|
|
11
|
+
/** The ledger of the package this paragraph belongs to. */
|
|
12
|
+
previews: PreviewLedger;
|
|
10
13
|
/** Delay run merging until a source-position-dependent enrichment pass completes. */
|
|
11
14
|
runConsolidation?: "immediate" | "deferred";
|
|
12
15
|
};
|
|
@@ -19,7 +22,8 @@ type ParseParagraphOptions = {
|
|
|
19
22
|
* @param numbering - Numbering definitions for list info
|
|
20
23
|
* @param rels - Relationship map for resolving hyperlink URLs
|
|
21
24
|
* @param media - Media files map for image data
|
|
22
|
-
* @param options - Parsing options for context-specific body behavior
|
|
25
|
+
* @param options - Parsing options for context-specific body behavior; a
|
|
26
|
+
* paragraph read without them charges its previews to no package
|
|
23
27
|
* @returns Parsed Paragraph object
|
|
24
28
|
*/
|
|
25
29
|
declare function parseParagraph(node: XmlElement, styles: StyleMap | null, theme: document_d_exports.Theme | null, numbering: NumberingMap | null, rels?: document_d_exports.RelationshipMap | null, media?: Map<string, document_d_exports.MediaFile> | null, options?: ParseParagraphOptions): document_d_exports.Paragraph;
|