docxmlater 10.3.6 → 10.4.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 +158 -7
- package/dist/core/Document.d.ts +97 -3
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +727 -50
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +0 -8
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +9 -5
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +573 -101
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +4 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/Bookmark.d.ts +7 -0
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +24 -4
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js +4 -3
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +2 -2
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +14 -1
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/Field.d.ts +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +1 -1
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/Footer.d.ts +2 -0
- package/dist/elements/Footer.d.ts.map +1 -1
- package/dist/elements/Footer.js +6 -0
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Header.d.ts +2 -0
- package/dist/elements/Header.d.ts.map +1 -1
- package/dist/elements/Header.js +6 -0
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +3 -0
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +81 -1
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +515 -21
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/Revision.d.ts +0 -1
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +0 -12
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts +0 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +0 -2
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -4
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +114 -22
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts +7 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +185 -4
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/Table.d.ts +30 -1
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +357 -40
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +3 -0
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +30 -3
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts +0 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js +0 -10
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableRow.d.ts +4 -0
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +31 -3
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +5 -0
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +22 -0
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +3 -3
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/Style.d.ts +1 -0
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +25 -59
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +1 -0
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +12 -0
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.d.ts.map +1 -1
- package/dist/images/ImageOptimizer.js +0 -1
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.d.ts.map +1 -1
- package/dist/managers/DrawingManager.js +4 -2
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/types/formatting.d.ts +2 -2
- package/dist/types/formatting.d.ts.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts +2 -2
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js +4 -5
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +0 -1
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.d.ts +2 -2
- package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js +2 -2
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts +0 -2
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +0 -26
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.d.ts.map +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.js +1 -1
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/stripTrackedChanges.js +1 -1
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/units.d.ts.map +1 -1
- package/dist/utils/units.js +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts +2 -1
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/package.json +10 -1
- package/src/constants/CLAUDE.md +28 -0
- package/src/core/CLAUDE.md +4 -0
- package/src/core/Document.ts +1755 -85
- package/src/core/DocumentContent.ts +0 -11
- package/src/core/DocumentGenerator.ts +11 -12
- package/src/core/DocumentParser.ts +599 -138
- package/src/core/RelationshipManager.ts +6 -3
- package/src/elements/Bookmark.ts +39 -4
- package/src/elements/BookmarkManager.ts +4 -3
- package/src/elements/CLAUDE.md +18 -2
- package/src/elements/CommonTypes.ts +35 -8
- package/src/elements/Field.ts +1 -1
- package/src/elements/Footer.ts +23 -0
- package/src/elements/Header.ts +25 -0
- package/src/elements/Image.ts +5 -0
- package/src/elements/Paragraph.ts +1069 -41
- package/src/elements/Revision.ts +0 -19
- package/src/elements/RevisionManager.ts +1 -3
- package/src/elements/Run.ts +265 -35
- package/src/elements/Section.ts +214 -8
- package/src/elements/Shape.ts +1 -1
- package/src/elements/Table.ts +850 -61
- package/src/elements/TableCell.ts +84 -10
- package/src/elements/TableGridChange.ts +2 -16
- package/src/elements/TableRow.ts +94 -9
- package/src/formatting/AbstractNumbering.ts +42 -1
- package/src/formatting/CLAUDE.md +4 -0
- package/src/formatting/NumberingLevel.ts +11 -7
- package/src/formatting/Style.ts +39 -71
- package/src/formatting/StylesManager.ts +36 -0
- package/src/helpers/CleanupHelper.ts +1 -1
- package/src/images/ImageOptimizer.ts +0 -3
- package/src/index.ts +1 -1
- package/src/managers/DrawingManager.ts +5 -3
- package/src/tracking/CLAUDE.md +30 -0
- package/src/types/CLAUDE.md +39 -0
- package/src/types/formatting.ts +2 -2
- package/src/utils/CLAUDE.md +15 -0
- package/src/utils/ChangelogGenerator.ts +4 -5
- package/src/utils/InMemoryRevisionAcceptor.ts +0 -9
- package/src/utils/RevisionAwareProcessor.ts +2 -3
- package/src/utils/SelectiveRevisionAcceptor.ts +0 -39
- package/src/utils/ShadingResolver.ts +0 -1
- package/src/utils/acceptRevisions.ts +1 -1
- package/src/utils/stripTrackedChanges.ts +1 -1
- package/src/utils/units.ts +2 -1
- package/src/validation/CLAUDE.md +40 -0
- package/src/validation/RevisionAutoFixer.ts +2 -1
|
@@ -13,6 +13,7 @@ exports.isTextBox = isTextBox;
|
|
|
13
13
|
const deepClone_1 = require("../utils/deepClone");
|
|
14
14
|
const dateFormatting_1 = require("../utils/dateFormatting");
|
|
15
15
|
const diagnostics_1 = require("../utils/diagnostics");
|
|
16
|
+
const formatting_1 = require("../utils/formatting");
|
|
16
17
|
const logger_1 = require("../utils/logger");
|
|
17
18
|
const XMLBuilder_1 = require("../xml/XMLBuilder");
|
|
18
19
|
const CommonTypes_1 = require("./CommonTypes");
|
|
@@ -280,6 +281,18 @@ class Paragraph {
|
|
|
280
281
|
}
|
|
281
282
|
return this;
|
|
282
283
|
}
|
|
284
|
+
addLineBreak() {
|
|
285
|
+
const run = new Run_1.Run('');
|
|
286
|
+
run.addBreak();
|
|
287
|
+
this.content.push(run);
|
|
288
|
+
return this;
|
|
289
|
+
}
|
|
290
|
+
addColumnBreak() {
|
|
291
|
+
const run = new Run_1.Run('');
|
|
292
|
+
run.addBreak('column');
|
|
293
|
+
this.content.push(run);
|
|
294
|
+
return this;
|
|
295
|
+
}
|
|
283
296
|
setText(text, formatting) {
|
|
284
297
|
this.content = [new Run_1.Run(text, formatting)];
|
|
285
298
|
return this;
|
|
@@ -553,6 +566,11 @@ class Paragraph {
|
|
|
553
566
|
isEmpty() {
|
|
554
567
|
return this.getText().trim().length === 0;
|
|
555
568
|
}
|
|
569
|
+
contains(text, caseSensitive = false) {
|
|
570
|
+
const paraText = caseSensitive ? this.getText() : this.getText().toLowerCase();
|
|
571
|
+
const search = caseSensitive ? text : text.toLowerCase();
|
|
572
|
+
return paraText.includes(search);
|
|
573
|
+
}
|
|
556
574
|
getStyle() {
|
|
557
575
|
return this.formatting.style;
|
|
558
576
|
}
|
|
@@ -719,7 +737,7 @@ class Paragraph {
|
|
|
719
737
|
const previousValue = this.formatting.keepNext;
|
|
720
738
|
this.formatting.keepNext = keepNext;
|
|
721
739
|
if (keepNext) {
|
|
722
|
-
this.formatting.pageBreakBefore =
|
|
740
|
+
this.formatting.pageBreakBefore = undefined;
|
|
723
741
|
}
|
|
724
742
|
if (this.trackingContext?.isEnabled() && previousValue !== keepNext) {
|
|
725
743
|
this.trackingContext.trackParagraphPropertyChange(this, 'keepNext', previousValue, keepNext);
|
|
@@ -730,7 +748,7 @@ class Paragraph {
|
|
|
730
748
|
const previousValue = this.formatting.keepLines;
|
|
731
749
|
this.formatting.keepLines = keepLines;
|
|
732
750
|
if (keepLines) {
|
|
733
|
-
this.formatting.pageBreakBefore =
|
|
751
|
+
this.formatting.pageBreakBefore = undefined;
|
|
734
752
|
}
|
|
735
753
|
if (this.trackingContext?.isEnabled() && previousValue !== keepLines) {
|
|
736
754
|
this.trackingContext.trackParagraphPropertyChange(this, 'keepLines', previousValue, keepLines);
|
|
@@ -1000,14 +1018,16 @@ class Paragraph {
|
|
|
1000
1018
|
if (this.formatting.style) {
|
|
1001
1019
|
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('pStyle', { 'w:val': this.formatting.style }));
|
|
1002
1020
|
}
|
|
1003
|
-
if (this.formatting.keepNext) {
|
|
1004
|
-
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('keepNext'));
|
|
1021
|
+
if (this.formatting.keepNext !== undefined) {
|
|
1022
|
+
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('keepNext', { 'w:val': this.formatting.keepNext ? '1' : '0' }));
|
|
1005
1023
|
}
|
|
1006
|
-
if (this.formatting.keepLines) {
|
|
1007
|
-
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('keepLines'));
|
|
1024
|
+
if (this.formatting.keepLines !== undefined) {
|
|
1025
|
+
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('keepLines', { 'w:val': this.formatting.keepLines ? '1' : '0' }));
|
|
1008
1026
|
}
|
|
1009
|
-
if (this.formatting.pageBreakBefore) {
|
|
1010
|
-
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('pageBreakBefore'
|
|
1027
|
+
if (this.formatting.pageBreakBefore !== undefined) {
|
|
1028
|
+
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('pageBreakBefore', {
|
|
1029
|
+
'w:val': this.formatting.pageBreakBefore ? '1' : '0',
|
|
1030
|
+
}));
|
|
1011
1031
|
}
|
|
1012
1032
|
if (this.formatting.framePr) {
|
|
1013
1033
|
const attrs = {};
|
|
@@ -1062,8 +1082,17 @@ class Paragraph {
|
|
|
1062
1082
|
]);
|
|
1063
1083
|
pPrChildren.push(numPr);
|
|
1064
1084
|
}
|
|
1065
|
-
if (this.formatting.
|
|
1066
|
-
|
|
1085
|
+
else if (this.formatting.numberingSuppressed) {
|
|
1086
|
+
const numPr = XMLBuilder_1.XMLBuilder.w('numPr', undefined, [
|
|
1087
|
+
XMLBuilder_1.XMLBuilder.wSelf('ilvl', { 'w:val': '0' }),
|
|
1088
|
+
XMLBuilder_1.XMLBuilder.wSelf('numId', { 'w:val': '0' }),
|
|
1089
|
+
]);
|
|
1090
|
+
pPrChildren.push(numPr);
|
|
1091
|
+
}
|
|
1092
|
+
if (this.formatting.suppressLineNumbers !== undefined) {
|
|
1093
|
+
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('suppressLineNumbers', {
|
|
1094
|
+
'w:val': this.formatting.suppressLineNumbers ? '1' : '0',
|
|
1095
|
+
}));
|
|
1067
1096
|
}
|
|
1068
1097
|
if (this.formatting.borders) {
|
|
1069
1098
|
const borderChildren = [];
|
|
@@ -1128,8 +1157,10 @@ class Paragraph {
|
|
|
1128
1157
|
pPrChildren.push(XMLBuilder_1.XMLBuilder.w('tabs', undefined, tabChildren));
|
|
1129
1158
|
}
|
|
1130
1159
|
}
|
|
1131
|
-
if (this.formatting.suppressAutoHyphens) {
|
|
1132
|
-
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('suppressAutoHyphens'
|
|
1160
|
+
if (this.formatting.suppressAutoHyphens !== undefined) {
|
|
1161
|
+
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('suppressAutoHyphens', {
|
|
1162
|
+
'w:val': this.formatting.suppressAutoHyphens ? '1' : '0',
|
|
1163
|
+
}));
|
|
1133
1164
|
}
|
|
1134
1165
|
if (this.formatting.kinsoku !== undefined) {
|
|
1135
1166
|
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('kinsoku', { 'w:val': this.formatting.kinsoku ? '1' : '0' }));
|
|
@@ -1162,8 +1193,16 @@ class Paragraph {
|
|
|
1162
1193
|
const attributes = {};
|
|
1163
1194
|
if (spc.before !== undefined)
|
|
1164
1195
|
attributes['w:before'] = spc.before;
|
|
1196
|
+
if (spc.beforeLines !== undefined)
|
|
1197
|
+
attributes['w:beforeLines'] = spc.beforeLines;
|
|
1198
|
+
if (spc.beforeAutospacing !== undefined)
|
|
1199
|
+
attributes['w:beforeAutospacing'] = spc.beforeAutospacing ? '1' : '0';
|
|
1165
1200
|
if (spc.after !== undefined)
|
|
1166
1201
|
attributes['w:after'] = spc.after;
|
|
1202
|
+
if (spc.afterLines !== undefined)
|
|
1203
|
+
attributes['w:afterLines'] = spc.afterLines;
|
|
1204
|
+
if (spc.afterAutospacing !== undefined)
|
|
1205
|
+
attributes['w:afterAutospacing'] = spc.afterAutospacing ? '1' : '0';
|
|
1167
1206
|
if (spc.line !== undefined)
|
|
1168
1207
|
attributes['w:line'] = spc.line;
|
|
1169
1208
|
if (spc.lineRule)
|
|
@@ -1179,22 +1218,28 @@ class Paragraph {
|
|
|
1179
1218
|
attributes['w:left'] = ind.left;
|
|
1180
1219
|
if (ind.right !== undefined)
|
|
1181
1220
|
attributes['w:right'] = ind.right;
|
|
1182
|
-
if (ind.
|
|
1183
|
-
attributes['w:firstLine'] = ind.firstLine;
|
|
1184
|
-
if (ind.hanging !== undefined)
|
|
1221
|
+
if (ind.hanging !== undefined) {
|
|
1185
1222
|
attributes['w:hanging'] = ind.hanging;
|
|
1223
|
+
}
|
|
1224
|
+
else if (ind.firstLine !== undefined) {
|
|
1225
|
+
attributes['w:firstLine'] = ind.firstLine;
|
|
1226
|
+
}
|
|
1186
1227
|
if (Object.keys(attributes).length > 0) {
|
|
1187
1228
|
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('ind', attributes));
|
|
1188
1229
|
}
|
|
1189
1230
|
}
|
|
1190
|
-
if (this.formatting.contextualSpacing) {
|
|
1191
|
-
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('contextualSpacing', {
|
|
1231
|
+
if (this.formatting.contextualSpacing !== undefined) {
|
|
1232
|
+
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('contextualSpacing', {
|
|
1233
|
+
'w:val': this.formatting.contextualSpacing ? '1' : '0',
|
|
1234
|
+
}));
|
|
1192
1235
|
}
|
|
1193
|
-
if (this.formatting.mirrorIndents) {
|
|
1194
|
-
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('mirrorIndents'));
|
|
1236
|
+
if (this.formatting.mirrorIndents !== undefined) {
|
|
1237
|
+
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('mirrorIndents', { 'w:val': this.formatting.mirrorIndents ? '1' : '0' }));
|
|
1195
1238
|
}
|
|
1196
|
-
if (this.formatting.suppressOverlap) {
|
|
1197
|
-
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('suppressOverlap'
|
|
1239
|
+
if (this.formatting.suppressOverlap !== undefined) {
|
|
1240
|
+
pPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('suppressOverlap', {
|
|
1241
|
+
'w:val': this.formatting.suppressOverlap ? '1' : '0',
|
|
1242
|
+
}));
|
|
1198
1243
|
}
|
|
1199
1244
|
if (this.formatting.alignment) {
|
|
1200
1245
|
const alignmentValue = this.formatting.alignment === 'justify' ? 'both' : this.formatting.alignment;
|
|
@@ -1292,6 +1337,43 @@ class Paragraph {
|
|
|
1292
1337
|
if (prev.pageBreakBefore !== undefined) {
|
|
1293
1338
|
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('pageBreakBefore', prev.pageBreakBefore ? { 'w:val': '1' } : { 'w:val': '0' }));
|
|
1294
1339
|
}
|
|
1340
|
+
if (prev.framePr) {
|
|
1341
|
+
const fAttrs = {};
|
|
1342
|
+
const f = prev.framePr;
|
|
1343
|
+
if (f.w !== undefined)
|
|
1344
|
+
fAttrs['w:w'] = f.w.toString();
|
|
1345
|
+
if (f.h !== undefined)
|
|
1346
|
+
fAttrs['w:h'] = f.h.toString();
|
|
1347
|
+
if (f.hRule)
|
|
1348
|
+
fAttrs['w:hRule'] = f.hRule;
|
|
1349
|
+
if (f.x !== undefined)
|
|
1350
|
+
fAttrs['w:x'] = f.x.toString();
|
|
1351
|
+
if (f.y !== undefined)
|
|
1352
|
+
fAttrs['w:y'] = f.y.toString();
|
|
1353
|
+
if (f.xAlign)
|
|
1354
|
+
fAttrs['w:xAlign'] = f.xAlign;
|
|
1355
|
+
if (f.yAlign)
|
|
1356
|
+
fAttrs['w:yAlign'] = f.yAlign;
|
|
1357
|
+
if (f.hAnchor)
|
|
1358
|
+
fAttrs['w:hAnchor'] = f.hAnchor;
|
|
1359
|
+
if (f.vAnchor)
|
|
1360
|
+
fAttrs['w:vAnchor'] = f.vAnchor;
|
|
1361
|
+
if (f.hSpace !== undefined)
|
|
1362
|
+
fAttrs['w:hSpace'] = f.hSpace.toString();
|
|
1363
|
+
if (f.vSpace !== undefined)
|
|
1364
|
+
fAttrs['w:vSpace'] = f.vSpace.toString();
|
|
1365
|
+
if (f.wrap)
|
|
1366
|
+
fAttrs['w:wrap'] = f.wrap;
|
|
1367
|
+
if (f.dropCap)
|
|
1368
|
+
fAttrs['w:dropCap'] = f.dropCap;
|
|
1369
|
+
if (f.lines !== undefined)
|
|
1370
|
+
fAttrs['w:lines'] = f.lines.toString();
|
|
1371
|
+
if (f.anchorLock !== undefined)
|
|
1372
|
+
fAttrs['w:anchorLock'] = f.anchorLock ? '1' : '0';
|
|
1373
|
+
if (Object.keys(fAttrs).length > 0) {
|
|
1374
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('framePr', fAttrs));
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1295
1377
|
if (prev.widowControl !== undefined) {
|
|
1296
1378
|
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('widowControl', {
|
|
1297
1379
|
'w:val': prev.widowControl ? '1' : '0',
|
|
@@ -1309,6 +1391,12 @@ class Paragraph {
|
|
|
1309
1391
|
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.w('numPr', undefined, numPrChildren));
|
|
1310
1392
|
}
|
|
1311
1393
|
}
|
|
1394
|
+
else if (prev.numberingSuppressed) {
|
|
1395
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.w('numPr', undefined, [
|
|
1396
|
+
XMLBuilder_1.XMLBuilder.wSelf('ilvl', { 'w:val': '0' }),
|
|
1397
|
+
XMLBuilder_1.XMLBuilder.wSelf('numId', { 'w:val': '0' }),
|
|
1398
|
+
]));
|
|
1399
|
+
}
|
|
1312
1400
|
if (prev.suppressLineNumbers !== undefined) {
|
|
1313
1401
|
if (prev.suppressLineNumbers) {
|
|
1314
1402
|
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('suppressLineNumbers'));
|
|
@@ -1362,6 +1450,24 @@ class Paragraph {
|
|
|
1362
1450
|
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('suppressAutoHyphens', { 'w:val': '1' }));
|
|
1363
1451
|
}
|
|
1364
1452
|
}
|
|
1453
|
+
if (prev.kinsoku !== undefined) {
|
|
1454
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('kinsoku', { 'w:val': prev.kinsoku ? '1' : '0' }));
|
|
1455
|
+
}
|
|
1456
|
+
if (prev.wordWrap !== undefined) {
|
|
1457
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('wordWrap', { 'w:val': prev.wordWrap ? '1' : '0' }));
|
|
1458
|
+
}
|
|
1459
|
+
if (prev.overflowPunct !== undefined) {
|
|
1460
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('overflowPunct', { 'w:val': prev.overflowPunct ? '1' : '0' }));
|
|
1461
|
+
}
|
|
1462
|
+
if (prev.topLinePunct !== undefined) {
|
|
1463
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('topLinePunct', { 'w:val': prev.topLinePunct ? '1' : '0' }));
|
|
1464
|
+
}
|
|
1465
|
+
if (prev.autoSpaceDE !== undefined) {
|
|
1466
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('autoSpaceDE', { 'w:val': prev.autoSpaceDE ? '1' : '0' }));
|
|
1467
|
+
}
|
|
1468
|
+
if (prev.autoSpaceDN !== undefined) {
|
|
1469
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('autoSpaceDN', { 'w:val': prev.autoSpaceDN ? '1' : '0' }));
|
|
1470
|
+
}
|
|
1365
1471
|
if (prev.bidi !== undefined) {
|
|
1366
1472
|
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('bidi', { 'w:val': prev.bidi ? '1' : '0' }));
|
|
1367
1473
|
}
|
|
@@ -1374,8 +1480,16 @@ class Paragraph {
|
|
|
1374
1480
|
const spacingAttrs = {};
|
|
1375
1481
|
if (prev.spacing.before !== undefined)
|
|
1376
1482
|
spacingAttrs['w:before'] = prev.spacing.before.toString();
|
|
1483
|
+
if (prev.spacing.beforeLines !== undefined)
|
|
1484
|
+
spacingAttrs['w:beforeLines'] = prev.spacing.beforeLines.toString();
|
|
1485
|
+
if (prev.spacing.beforeAutospacing !== undefined)
|
|
1486
|
+
spacingAttrs['w:beforeAutospacing'] = prev.spacing.beforeAutospacing ? '1' : '0';
|
|
1377
1487
|
if (prev.spacing.after !== undefined)
|
|
1378
1488
|
spacingAttrs['w:after'] = prev.spacing.after.toString();
|
|
1489
|
+
if (prev.spacing.afterLines !== undefined)
|
|
1490
|
+
spacingAttrs['w:afterLines'] = prev.spacing.afterLines.toString();
|
|
1491
|
+
if (prev.spacing.afterAutospacing !== undefined)
|
|
1492
|
+
spacingAttrs['w:afterAutospacing'] = prev.spacing.afterAutospacing ? '1' : '0';
|
|
1379
1493
|
if (prev.spacing.line !== undefined)
|
|
1380
1494
|
spacingAttrs['w:line'] = prev.spacing.line.toString();
|
|
1381
1495
|
if (prev.spacing.lineRule)
|
|
@@ -1406,6 +1520,11 @@ class Paragraph {
|
|
|
1406
1520
|
'w:val': prev.mirrorIndents ? '1' : '0',
|
|
1407
1521
|
}));
|
|
1408
1522
|
}
|
|
1523
|
+
if (prev.suppressOverlap !== undefined) {
|
|
1524
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('suppressOverlap', {
|
|
1525
|
+
'w:val': prev.suppressOverlap ? '1' : '0',
|
|
1526
|
+
}));
|
|
1527
|
+
}
|
|
1409
1528
|
if (prev.alignment) {
|
|
1410
1529
|
const alignmentValue = prev.alignment === 'justify' ? 'both' : prev.alignment;
|
|
1411
1530
|
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('jc', { 'w:val': alignmentValue }));
|
|
@@ -1416,9 +1535,18 @@ class Paragraph {
|
|
|
1416
1535
|
if (prev.textAlignment) {
|
|
1417
1536
|
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('textAlignment', { 'w:val': prev.textAlignment }));
|
|
1418
1537
|
}
|
|
1538
|
+
if (prev.textboxTightWrap) {
|
|
1539
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('textboxTightWrap', { 'w:val': prev.textboxTightWrap }));
|
|
1540
|
+
}
|
|
1419
1541
|
if (prev.outlineLevel !== undefined) {
|
|
1420
1542
|
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('outlineLvl', { 'w:val': prev.outlineLevel.toString() }));
|
|
1421
1543
|
}
|
|
1544
|
+
if (prev.divId !== undefined) {
|
|
1545
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('divId', { 'w:val': prev.divId.toString() }));
|
|
1546
|
+
}
|
|
1547
|
+
if (prev.cnfStyle) {
|
|
1548
|
+
prevPPrChildren.push(XMLBuilder_1.XMLBuilder.wSelf('cnfStyle', { 'w:val': prev.cnfStyle }));
|
|
1549
|
+
}
|
|
1422
1550
|
}
|
|
1423
1551
|
if (prevPPrChildren.length > 0) {
|
|
1424
1552
|
const pPrChangeChildren = [
|
|
@@ -1508,6 +1636,9 @@ class Paragraph {
|
|
|
1508
1636
|
if (this.formatting.paraId) {
|
|
1509
1637
|
paragraphAttributes['w14:paraId'] = this.formatting.paraId;
|
|
1510
1638
|
}
|
|
1639
|
+
if (this.formatting.textId) {
|
|
1640
|
+
paragraphAttributes['w14:textId'] = this.formatting.textId;
|
|
1641
|
+
}
|
|
1511
1642
|
return XMLBuilder_1.XMLBuilder.w('p', Object.keys(paragraphAttributes).length > 0 ? paragraphAttributes : undefined, paragraphChildren);
|
|
1512
1643
|
}
|
|
1513
1644
|
getWordCount() {
|
|
@@ -1545,6 +1676,115 @@ class Paragraph {
|
|
|
1545
1676
|
clonedParagraph.commentsEnd = [...this.commentsEnd];
|
|
1546
1677
|
return clonedParagraph;
|
|
1547
1678
|
}
|
|
1679
|
+
toJSON() {
|
|
1680
|
+
const runs = this.getRuns().map((run) => ({
|
|
1681
|
+
text: run.getText(),
|
|
1682
|
+
formatting: run.getFormatting(),
|
|
1683
|
+
}));
|
|
1684
|
+
const result = {
|
|
1685
|
+
text: this.getText(),
|
|
1686
|
+
runs,
|
|
1687
|
+
};
|
|
1688
|
+
if (this.formatting.style)
|
|
1689
|
+
result.style = this.formatting.style;
|
|
1690
|
+
if (this.formatting.alignment)
|
|
1691
|
+
result.alignment = this.formatting.alignment;
|
|
1692
|
+
if (this.formatting.numbering)
|
|
1693
|
+
result.numbering = { ...this.formatting.numbering };
|
|
1694
|
+
if (this.formatting.indentation)
|
|
1695
|
+
result.indentation = { ...this.formatting.indentation };
|
|
1696
|
+
if (this.formatting.spacing) {
|
|
1697
|
+
result.spacing = {
|
|
1698
|
+
before: this.formatting.spacing.before,
|
|
1699
|
+
after: this.formatting.spacing.after,
|
|
1700
|
+
line: this.formatting.spacing.line,
|
|
1701
|
+
lineRule: this.formatting.spacing.lineRule,
|
|
1702
|
+
};
|
|
1703
|
+
}
|
|
1704
|
+
return result;
|
|
1705
|
+
}
|
|
1706
|
+
static fromJSON(data) {
|
|
1707
|
+
const para = new Paragraph();
|
|
1708
|
+
if (data.runs && data.runs.length > 0) {
|
|
1709
|
+
for (const runData of data.runs) {
|
|
1710
|
+
para.addText(runData.text, runData.formatting);
|
|
1711
|
+
}
|
|
1712
|
+
}
|
|
1713
|
+
else if (data.text) {
|
|
1714
|
+
para.addText(data.text);
|
|
1715
|
+
}
|
|
1716
|
+
if (data.style)
|
|
1717
|
+
para.setStyle(data.style);
|
|
1718
|
+
if (data.alignment)
|
|
1719
|
+
para.setAlignment(data.alignment);
|
|
1720
|
+
if (data.numbering)
|
|
1721
|
+
para.setNumbering(data.numbering.numId, data.numbering.level);
|
|
1722
|
+
if (data.indentation) {
|
|
1723
|
+
if (data.indentation.left !== undefined)
|
|
1724
|
+
para.setLeftIndent(data.indentation.left);
|
|
1725
|
+
if (data.indentation.right !== undefined)
|
|
1726
|
+
para.setRightIndent(data.indentation.right);
|
|
1727
|
+
if (data.indentation.firstLine !== undefined)
|
|
1728
|
+
para.setFirstLineIndent(data.indentation.firstLine);
|
|
1729
|
+
if (data.indentation.hanging !== undefined)
|
|
1730
|
+
para.setHangingIndent(data.indentation.hanging);
|
|
1731
|
+
}
|
|
1732
|
+
if (data.spacing) {
|
|
1733
|
+
if (data.spacing.before !== undefined)
|
|
1734
|
+
para.setSpaceBefore(data.spacing.before);
|
|
1735
|
+
if (data.spacing.after !== undefined)
|
|
1736
|
+
para.setSpaceAfter(data.spacing.after);
|
|
1737
|
+
if (data.spacing.line !== undefined) {
|
|
1738
|
+
para.setLineSpacing(data.spacing.line, data.spacing.lineRule ?? 'auto');
|
|
1739
|
+
}
|
|
1740
|
+
}
|
|
1741
|
+
return para;
|
|
1742
|
+
}
|
|
1743
|
+
splitAt(offset) {
|
|
1744
|
+
const tailPara = new Paragraph((0, deepClone_1.deepClone)(this.formatting));
|
|
1745
|
+
const totalLength = this.getText().length;
|
|
1746
|
+
if (offset >= totalLength) {
|
|
1747
|
+
return tailPara;
|
|
1748
|
+
}
|
|
1749
|
+
if (offset <= 0) {
|
|
1750
|
+
tailPara.content = this.content;
|
|
1751
|
+
this.content = [];
|
|
1752
|
+
return tailPara;
|
|
1753
|
+
}
|
|
1754
|
+
let charPos = 0;
|
|
1755
|
+
let splitContentIndex = -1;
|
|
1756
|
+
for (let i = 0; i < this.content.length; i++) {
|
|
1757
|
+
const item = this.content[i];
|
|
1758
|
+
if (item instanceof Run_1.Run) {
|
|
1759
|
+
const runLen = item.getText().length;
|
|
1760
|
+
const runEnd = charPos + runLen;
|
|
1761
|
+
if (runEnd <= offset) {
|
|
1762
|
+
charPos = runEnd;
|
|
1763
|
+
continue;
|
|
1764
|
+
}
|
|
1765
|
+
if (charPos >= offset) {
|
|
1766
|
+
splitContentIndex = i;
|
|
1767
|
+
break;
|
|
1768
|
+
}
|
|
1769
|
+
const localOffset = offset - charPos;
|
|
1770
|
+
const tailRun = item.splitAt(localOffset);
|
|
1771
|
+
this.content.splice(i + 1, 0, tailRun);
|
|
1772
|
+
splitContentIndex = i + 1;
|
|
1773
|
+
break;
|
|
1774
|
+
}
|
|
1775
|
+
else {
|
|
1776
|
+
if (charPos >= offset) {
|
|
1777
|
+
splitContentIndex = i;
|
|
1778
|
+
break;
|
|
1779
|
+
}
|
|
1780
|
+
}
|
|
1781
|
+
}
|
|
1782
|
+
if (splitContentIndex === -1) {
|
|
1783
|
+
return tailPara;
|
|
1784
|
+
}
|
|
1785
|
+
tailPara.content = this.content.splice(splitContentIndex);
|
|
1786
|
+
return tailPara;
|
|
1787
|
+
}
|
|
1548
1788
|
setBorder(borders) {
|
|
1549
1789
|
if (!this.formatting) {
|
|
1550
1790
|
this.formatting = {};
|
|
@@ -1653,6 +1893,260 @@ class Paragraph {
|
|
|
1653
1893
|
}
|
|
1654
1894
|
return replacementCount;
|
|
1655
1895
|
}
|
|
1896
|
+
replaceAll(find, replace) {
|
|
1897
|
+
return this.replaceTextCrossRun(find, replace);
|
|
1898
|
+
}
|
|
1899
|
+
findTextCrossRun(find, options) {
|
|
1900
|
+
const caseSensitive = options?.caseSensitive ?? false;
|
|
1901
|
+
let fullText = '';
|
|
1902
|
+
for (const item of this.content) {
|
|
1903
|
+
if (item instanceof Run_1.Run) {
|
|
1904
|
+
fullText += item.getText();
|
|
1905
|
+
}
|
|
1906
|
+
}
|
|
1907
|
+
if (fullText.length === 0)
|
|
1908
|
+
return [];
|
|
1909
|
+
const escaped = find.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
1910
|
+
const regex = new RegExp(escaped, caseSensitive ? 'g' : 'gi');
|
|
1911
|
+
const results = [];
|
|
1912
|
+
let m;
|
|
1913
|
+
while ((m = regex.exec(fullText)) !== null) {
|
|
1914
|
+
results.push({ offset: m.index, text: m[0] });
|
|
1915
|
+
}
|
|
1916
|
+
return results;
|
|
1917
|
+
}
|
|
1918
|
+
replaceTextCrossRun(find, replace, options) {
|
|
1919
|
+
const caseSensitive = options?.caseSensitive ?? false;
|
|
1920
|
+
const runMap = [];
|
|
1921
|
+
let charPos = 0;
|
|
1922
|
+
for (let i = 0; i < this.content.length; i++) {
|
|
1923
|
+
const item = this.content[i];
|
|
1924
|
+
if (item instanceof Run_1.Run) {
|
|
1925
|
+
const len = item.getText().length;
|
|
1926
|
+
if (len > 0) {
|
|
1927
|
+
runMap.push({ run: item, contentIndex: i, start: charPos, end: charPos + len });
|
|
1928
|
+
}
|
|
1929
|
+
charPos += len;
|
|
1930
|
+
}
|
|
1931
|
+
}
|
|
1932
|
+
if (runMap.length === 0)
|
|
1933
|
+
return 0;
|
|
1934
|
+
const fullText = runMap.map((r) => r.run.getText()).join('');
|
|
1935
|
+
const escaped = find.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
1936
|
+
const regex = new RegExp(escaped, caseSensitive ? 'g' : 'gi');
|
|
1937
|
+
const matches = [];
|
|
1938
|
+
let m;
|
|
1939
|
+
while ((m = regex.exec(fullText)) !== null) {
|
|
1940
|
+
matches.push({ start: m.index, end: m.index + m[0].length });
|
|
1941
|
+
}
|
|
1942
|
+
if (matches.length === 0)
|
|
1943
|
+
return 0;
|
|
1944
|
+
for (let mi = matches.length - 1; mi >= 0; mi--) {
|
|
1945
|
+
const match = matches[mi];
|
|
1946
|
+
const affectedRuns = runMap.filter((r) => r.end > match.start && r.start < match.end);
|
|
1947
|
+
if (affectedRuns.length === 0)
|
|
1948
|
+
continue;
|
|
1949
|
+
const firstAffected = affectedRuns[0];
|
|
1950
|
+
const lastAffected = affectedRuns[affectedRuns.length - 1];
|
|
1951
|
+
const keepBefore = match.start > firstAffected.start
|
|
1952
|
+
? firstAffected.run.getText().slice(0, match.start - firstAffected.start)
|
|
1953
|
+
: '';
|
|
1954
|
+
const keepAfter = match.end < lastAffected.end
|
|
1955
|
+
? lastAffected.run.getText().slice(match.end - lastAffected.start)
|
|
1956
|
+
: '';
|
|
1957
|
+
firstAffected.run.setText(keepBefore + replace + keepAfter);
|
|
1958
|
+
for (let r = affectedRuns.length - 1; r >= 1; r--) {
|
|
1959
|
+
const runEntry = affectedRuns[r];
|
|
1960
|
+
const idx = this.content.indexOf(runEntry.run);
|
|
1961
|
+
if (idx !== -1) {
|
|
1962
|
+
this.content.splice(idx, 1);
|
|
1963
|
+
}
|
|
1964
|
+
}
|
|
1965
|
+
}
|
|
1966
|
+
return matches.length;
|
|
1967
|
+
}
|
|
1968
|
+
deleteRange(start, end) {
|
|
1969
|
+
if (start >= end)
|
|
1970
|
+
return this;
|
|
1971
|
+
const runMap = [];
|
|
1972
|
+
let charPos = 0;
|
|
1973
|
+
for (let i = 0; i < this.content.length; i++) {
|
|
1974
|
+
const item = this.content[i];
|
|
1975
|
+
if (item instanceof Run_1.Run) {
|
|
1976
|
+
const len = item.getText().length;
|
|
1977
|
+
if (len > 0) {
|
|
1978
|
+
runMap.push({ index: i, start: charPos, end: charPos + len });
|
|
1979
|
+
}
|
|
1980
|
+
charPos += len;
|
|
1981
|
+
}
|
|
1982
|
+
}
|
|
1983
|
+
for (let m = runMap.length - 1; m >= 0; m--) {
|
|
1984
|
+
const entry = runMap[m];
|
|
1985
|
+
const run = this.content[entry.index];
|
|
1986
|
+
if (entry.end <= start || entry.start >= end)
|
|
1987
|
+
continue;
|
|
1988
|
+
const runStart = entry.start;
|
|
1989
|
+
const runEnd = entry.end;
|
|
1990
|
+
const delStart = Math.max(0, start - runStart);
|
|
1991
|
+
const delEnd = Math.min(runEnd - runStart, end - runStart);
|
|
1992
|
+
const runLen = runEnd - runStart;
|
|
1993
|
+
if (delStart === 0 && delEnd === runLen) {
|
|
1994
|
+
this.content.splice(entry.index, 1);
|
|
1995
|
+
}
|
|
1996
|
+
else {
|
|
1997
|
+
const textBefore = run.getText().slice(0, delStart);
|
|
1998
|
+
const textAfter = run.getText().slice(delEnd);
|
|
1999
|
+
run.setText(textBefore + textAfter);
|
|
2000
|
+
}
|
|
2001
|
+
}
|
|
2002
|
+
return this;
|
|
2003
|
+
}
|
|
2004
|
+
truncate(maxLength, suffix = '...') {
|
|
2005
|
+
const text = this.getText();
|
|
2006
|
+
if (text.length <= maxLength)
|
|
2007
|
+
return this;
|
|
2008
|
+
const cutoff = Math.max(0, maxLength - suffix.length);
|
|
2009
|
+
this.deleteRange(cutoff, text.length);
|
|
2010
|
+
if (suffix) {
|
|
2011
|
+
this.addText(suffix);
|
|
2012
|
+
}
|
|
2013
|
+
return this;
|
|
2014
|
+
}
|
|
2015
|
+
wrap(prefix, suffix, formatting) {
|
|
2016
|
+
if (prefix) {
|
|
2017
|
+
const prefixRun = new Run_1.Run(prefix, formatting);
|
|
2018
|
+
this.content.unshift(prefixRun);
|
|
2019
|
+
}
|
|
2020
|
+
if (suffix) {
|
|
2021
|
+
const suffixRun = new Run_1.Run(suffix, formatting);
|
|
2022
|
+
this.content.push(suffixRun);
|
|
2023
|
+
}
|
|
2024
|
+
return this;
|
|
2025
|
+
}
|
|
2026
|
+
getRunAtOffset(offset) {
|
|
2027
|
+
if (offset < 0)
|
|
2028
|
+
return undefined;
|
|
2029
|
+
let charPos = 0;
|
|
2030
|
+
for (const item of this.content) {
|
|
2031
|
+
if (!(item instanceof Run_1.Run))
|
|
2032
|
+
continue;
|
|
2033
|
+
const len = item.getText().length;
|
|
2034
|
+
if (charPos + len > offset) {
|
|
2035
|
+
return { run: item, localOffset: offset - charPos };
|
|
2036
|
+
}
|
|
2037
|
+
charPos += len;
|
|
2038
|
+
}
|
|
2039
|
+
return undefined;
|
|
2040
|
+
}
|
|
2041
|
+
getFormattingAtOffset(offset) {
|
|
2042
|
+
const result = this.getRunAtOffset(offset);
|
|
2043
|
+
return result ? result.run.getFormatting() : undefined;
|
|
2044
|
+
}
|
|
2045
|
+
applyFormattingToRange(start, end, formatting) {
|
|
2046
|
+
if (start >= end)
|
|
2047
|
+
return this;
|
|
2048
|
+
const contentMap = [];
|
|
2049
|
+
let charPos = 0;
|
|
2050
|
+
for (let i = 0; i < this.content.length; i++) {
|
|
2051
|
+
const item = this.content[i];
|
|
2052
|
+
let len = 0;
|
|
2053
|
+
if (item instanceof Run_1.Run) {
|
|
2054
|
+
len = item.getText().length;
|
|
2055
|
+
}
|
|
2056
|
+
if (len > 0) {
|
|
2057
|
+
contentMap.push({ index: i, start: charPos, end: charPos + len });
|
|
2058
|
+
}
|
|
2059
|
+
charPos += len;
|
|
2060
|
+
}
|
|
2061
|
+
for (let m = contentMap.length - 1; m >= 0; m--) {
|
|
2062
|
+
const entry = contentMap[m];
|
|
2063
|
+
const run = this.content[entry.index];
|
|
2064
|
+
if (entry.end <= start || entry.start >= end)
|
|
2065
|
+
continue;
|
|
2066
|
+
const runStart = entry.start;
|
|
2067
|
+
const runEnd = entry.end;
|
|
2068
|
+
const splitStart = Math.max(0, start - runStart);
|
|
2069
|
+
const splitEnd = Math.min(runEnd - runStart, end - runStart);
|
|
2070
|
+
const runLen = runEnd - runStart;
|
|
2071
|
+
if (splitStart === 0 && splitEnd === runLen) {
|
|
2072
|
+
this.applyFormattingToRun(run, formatting);
|
|
2073
|
+
}
|
|
2074
|
+
else if (splitStart === 0) {
|
|
2075
|
+
const tail = run.splitAt(splitEnd);
|
|
2076
|
+
this.applyFormattingToRun(run, formatting);
|
|
2077
|
+
this.content.splice(entry.index + 1, 0, tail);
|
|
2078
|
+
}
|
|
2079
|
+
else if (splitEnd === runLen) {
|
|
2080
|
+
const tail = run.splitAt(splitStart);
|
|
2081
|
+
this.applyFormattingToRun(tail, formatting);
|
|
2082
|
+
this.content.splice(entry.index + 1, 0, tail);
|
|
2083
|
+
}
|
|
2084
|
+
else {
|
|
2085
|
+
const mid = run.splitAt(splitStart);
|
|
2086
|
+
const tail = mid.splitAt(splitEnd - splitStart);
|
|
2087
|
+
this.applyFormattingToRun(mid, formatting);
|
|
2088
|
+
this.content.splice(entry.index + 1, 0, mid, tail);
|
|
2089
|
+
}
|
|
2090
|
+
}
|
|
2091
|
+
return this;
|
|
2092
|
+
}
|
|
2093
|
+
applyFormattingToRun(run, formatting) {
|
|
2094
|
+
if (formatting.bold !== undefined)
|
|
2095
|
+
run.setBold(formatting.bold);
|
|
2096
|
+
if (formatting.italic !== undefined)
|
|
2097
|
+
run.setItalic(formatting.italic);
|
|
2098
|
+
if (formatting.underline !== undefined)
|
|
2099
|
+
run.setUnderline(formatting.underline);
|
|
2100
|
+
if (formatting.strike !== undefined)
|
|
2101
|
+
run.setStrike(formatting.strike);
|
|
2102
|
+
if (formatting.subscript !== undefined)
|
|
2103
|
+
run.setSubscript(formatting.subscript);
|
|
2104
|
+
if (formatting.superscript !== undefined)
|
|
2105
|
+
run.setSuperscript(formatting.superscript);
|
|
2106
|
+
if (formatting.smallCaps !== undefined)
|
|
2107
|
+
run.setSmallCaps(formatting.smallCaps);
|
|
2108
|
+
if (formatting.allCaps !== undefined)
|
|
2109
|
+
run.setAllCaps(formatting.allCaps);
|
|
2110
|
+
if (formatting.font !== undefined)
|
|
2111
|
+
run.setFont(formatting.font);
|
|
2112
|
+
if (formatting.size !== undefined)
|
|
2113
|
+
run.setSize(formatting.size);
|
|
2114
|
+
if (formatting.color !== undefined)
|
|
2115
|
+
run.setColor(formatting.color);
|
|
2116
|
+
if (formatting.highlight !== undefined)
|
|
2117
|
+
run.setHighlight(formatting.highlight);
|
|
2118
|
+
if (formatting.characterSpacing !== undefined)
|
|
2119
|
+
run.setCharacterSpacing(formatting.characterSpacing);
|
|
2120
|
+
if (formatting.vanish !== undefined)
|
|
2121
|
+
run.setVanish(formatting.vanish);
|
|
2122
|
+
}
|
|
2123
|
+
consolidateRuns() {
|
|
2124
|
+
if (this.content.length < 2)
|
|
2125
|
+
return 0;
|
|
2126
|
+
const consolidated = [];
|
|
2127
|
+
let eliminated = 0;
|
|
2128
|
+
for (const item of this.content) {
|
|
2129
|
+
if (!(item instanceof Run_1.Run)) {
|
|
2130
|
+
consolidated.push(item);
|
|
2131
|
+
continue;
|
|
2132
|
+
}
|
|
2133
|
+
const prev = consolidated.length > 0 ? consolidated[consolidated.length - 1] : undefined;
|
|
2134
|
+
if (prev instanceof Run_1.Run &&
|
|
2135
|
+
(0, formatting_1.isEqualFormatting)(prev.getFormatting(), item.getFormatting())) {
|
|
2136
|
+
const mergedContent = [...prev.getContent(), ...item.getContent()];
|
|
2137
|
+
const mergedRun = Run_1.Run.createFromContent(mergedContent, (0, deepClone_1.deepClone)(prev.getFormatting()));
|
|
2138
|
+
consolidated[consolidated.length - 1] = mergedRun;
|
|
2139
|
+
eliminated++;
|
|
2140
|
+
}
|
|
2141
|
+
else {
|
|
2142
|
+
consolidated.push(item);
|
|
2143
|
+
}
|
|
2144
|
+
}
|
|
2145
|
+
if (eliminated > 0) {
|
|
2146
|
+
this.content = consolidated;
|
|
2147
|
+
}
|
|
2148
|
+
return eliminated;
|
|
2149
|
+
}
|
|
1656
2150
|
mergeWith(otherPara) {
|
|
1657
2151
|
for (const item of otherPara.content) {
|
|
1658
2152
|
if (item instanceof Run_1.Run) {
|