docxmlater 8.0.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +51 -3
  2. package/dist/core/Document.d.ts +55 -1
  3. package/dist/core/Document.d.ts.map +1 -1
  4. package/dist/core/Document.js +199 -0
  5. package/dist/core/Document.js.map +1 -1
  6. package/dist/core/DocumentParser.d.ts +3 -0
  7. package/dist/core/DocumentParser.d.ts.map +1 -1
  8. package/dist/core/DocumentParser.js +380 -72
  9. package/dist/core/DocumentParser.js.map +1 -1
  10. package/dist/elements/Comment.d.ts +5 -0
  11. package/dist/elements/Comment.d.ts.map +1 -1
  12. package/dist/elements/Comment.js +16 -0
  13. package/dist/elements/Comment.js.map +1 -1
  14. package/dist/elements/CommentManager.d.ts +6 -0
  15. package/dist/elements/CommentManager.d.ts.map +1 -1
  16. package/dist/elements/CommentManager.js +41 -0
  17. package/dist/elements/CommentManager.js.map +1 -1
  18. package/dist/elements/Paragraph.d.ts.map +1 -1
  19. package/dist/elements/Paragraph.js +4 -1
  20. package/dist/elements/Paragraph.js.map +1 -1
  21. package/dist/elements/PropertyChangeTypes.d.ts +37 -0
  22. package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
  23. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  24. package/dist/elements/Revision.d.ts +1 -1
  25. package/dist/elements/Revision.d.ts.map +1 -1
  26. package/dist/elements/Revision.js +11 -0
  27. package/dist/elements/Revision.js.map +1 -1
  28. package/dist/elements/Section.d.ts +11 -0
  29. package/dist/elements/Section.d.ts.map +1 -1
  30. package/dist/elements/Section.js +32 -0
  31. package/dist/elements/Section.js.map +1 -1
  32. package/dist/elements/StructuredDocumentTag.js +8 -8
  33. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  34. package/dist/elements/Table.d.ts +5 -0
  35. package/dist/elements/Table.d.ts.map +1 -1
  36. package/dist/elements/Table.js +28 -0
  37. package/dist/elements/Table.js.map +1 -1
  38. package/dist/elements/TableCell.d.ts +5 -0
  39. package/dist/elements/TableCell.d.ts.map +1 -1
  40. package/dist/elements/TableCell.js +42 -0
  41. package/dist/elements/TableCell.js.map +1 -1
  42. package/dist/formatting/Style.d.ts +1 -0
  43. package/dist/formatting/Style.d.ts.map +1 -1
  44. package/dist/formatting/Style.js +10 -0
  45. package/dist/formatting/Style.js.map +1 -1
  46. package/dist/index.d.ts +5 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +13 -2
  49. package/dist/index.js.map +1 -1
  50. package/dist/utils/parsingHelpers.d.ts +6 -0
  51. package/dist/utils/parsingHelpers.d.ts.map +1 -0
  52. package/dist/utils/parsingHelpers.js +63 -0
  53. package/dist/utils/parsingHelpers.js.map +1 -0
  54. package/dist/utils/xmlSanitization.d.ts +23 -0
  55. package/dist/utils/xmlSanitization.d.ts.map +1 -0
  56. package/dist/utils/xmlSanitization.js +60 -0
  57. package/dist/utils/xmlSanitization.js.map +1 -0
  58. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  59. package/dist/xml/XMLBuilder.js +7 -4
  60. package/dist/xml/XMLBuilder.js.map +1 -1
  61. package/package.json +4 -3
@@ -1,4 +1,5 @@
1
1
  import { BookmarkManager } from "../elements/BookmarkManager";
2
+ import { Comment } from "../elements/Comment";
2
3
  import { ImageManager } from "../elements/ImageManager";
3
4
  import { Paragraph } from "../elements/Paragraph";
4
5
  import { Section } from "../elements/Section";
@@ -46,6 +47,8 @@ export declare class DocumentParser {
46
47
  private parseParagraphWithOrder;
47
48
  private parseOrderedParagraphChildren;
48
49
  private parseRevisionFromXml;
50
+ parseCommentsXml(commentsXml: string): Comment[];
51
+ private parseCommentFromXml;
49
52
  private parseBookmarkStart;
50
53
  private parseBookmarkEnd;
51
54
  private parseParagraphFromObject;
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentParser.d.ts","sourceRoot":"","sources":["../../src/core/DocumentParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DocumentParser.d.ts","sourceRoot":"","sources":["../../src/core/DocumentParser.ts"],"names":[],"mappings":"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"}
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.DocumentParser = void 0;
37
37
  const Bookmark_1 = require("../elements/Bookmark");
38
+ const Comment_1 = require("../elements/Comment");
38
39
  const Field_1 = require("../elements/Field");
39
40
  const FieldHelpers_1 = require("../elements/FieldHelpers");
40
41
  const Footer_1 = require("../elements/Footer");
@@ -56,6 +57,7 @@ const NumberingInstance_1 = require("../formatting/NumberingInstance");
56
57
  const Style_1 = require("../formatting/Style");
57
58
  const diagnostics_1 = require("../utils/diagnostics");
58
59
  const logger_1 = require("../utils/logger");
60
+ const parsingHelpers_1 = require("../utils/parsingHelpers");
59
61
  function getLogger() {
60
62
  return (0, logger_1.createScopedLogger)((0, logger_1.getGlobalLogger)(), 'DocumentParser');
61
63
  }
@@ -460,10 +462,6 @@ class DocumentParser {
460
462
  return null;
461
463
  }
462
464
  const pPr = pElement["w:pPr"];
463
- if (paraXml.includes('Bullet 3') || paraXml.includes('Bullet 4') || paraXml.includes('Bullet 5')) {
464
- console.log(`[DEBUG parseParagraphWithOrder] RAW XML: ${paraXml.substring(0, 400)}...`);
465
- console.log(`[DEBUG parseParagraphWithOrder] pPr.w:numPr: ${JSON.stringify(pPr?.["w:numPr"])?.substring(0, 200)}`);
466
- }
467
465
  this.parseParagraphPropertiesFromObject(pPr, paragraph);
468
466
  const paraId = pElement["w14:paraId"];
469
467
  if (paraId) {
@@ -827,6 +825,7 @@ class DocumentParser {
827
825
  }
828
826
  }
829
827
  if (content.length === 0) {
828
+ logger_1.defaultLogger.debug("[DocumentParser] Empty revision content skipped", { tagName, id: idAttr, author });
830
829
  return null;
831
830
  }
832
831
  const revision = new Revision_1.Revision({
@@ -846,6 +845,59 @@ class DocumentParser {
846
845
  return null;
847
846
  }
848
847
  }
848
+ parseCommentsXml(commentsXml) {
849
+ const comments = [];
850
+ const commentXmls = XMLParser_1.XMLParser.extractElements(commentsXml, "w:comment");
851
+ for (const commentXml of commentXmls) {
852
+ const comment = this.parseCommentFromXml(commentXml);
853
+ if (comment) {
854
+ comments.push(comment);
855
+ }
856
+ }
857
+ return comments;
858
+ }
859
+ parseCommentFromXml(commentXml) {
860
+ try {
861
+ const idAttr = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:id");
862
+ const author = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:author") || "Unknown";
863
+ const dateAttr = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:date");
864
+ const initials = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:initials");
865
+ const parentIdAttr = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:parentId");
866
+ const doneAttr = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:done");
867
+ if (!idAttr) {
868
+ return null;
869
+ }
870
+ const id = parseInt(idAttr, 10);
871
+ const date = dateAttr ? new Date(dateAttr) : new Date();
872
+ const parentId = parentIdAttr ? parseInt(parentIdAttr, 10) : undefined;
873
+ const done = doneAttr === "1" || doneAttr === "true";
874
+ const runs = [];
875
+ const runXmls = XMLParser_1.XMLParser.extractElements(commentXml, "w:r");
876
+ for (const runXml of runXmls) {
877
+ const runObj = XMLParser_1.XMLParser.parseToObject(runXml, { trimValues: false });
878
+ const run = this.parseRunFromObject(runObj["w:r"]);
879
+ if (run) {
880
+ runs.push(run);
881
+ }
882
+ }
883
+ const comment = new Comment_1.Comment({
884
+ id,
885
+ author,
886
+ initials: initials || undefined,
887
+ date,
888
+ content: runs.length > 0 ? runs : "",
889
+ parentId,
890
+ done,
891
+ });
892
+ return comment;
893
+ }
894
+ catch (error) {
895
+ logger_1.defaultLogger.warn("[DocumentParser] Failed to parse comment:", error instanceof Error
896
+ ? { message: error.message }
897
+ : { error: String(error) });
898
+ return null;
899
+ }
900
+ }
849
901
  parseBookmarkStart(bookmarkXml) {
850
902
  try {
851
903
  const idAttr = XMLParser_1.XMLParser.extractAttribute(bookmarkXml, "w:id");
@@ -1045,21 +1097,21 @@ class DocumentParser {
1045
1097
  }
1046
1098
  if (pPrObj["w:ind"]) {
1047
1099
  const ind = pPrObj["w:ind"];
1048
- if (ind["@_w:left"] !== undefined)
1049
- paragraph.setLeftIndent(parseInt(String(ind["@_w:left"]), 10));
1050
- if (ind["@_w:right"] !== undefined)
1051
- paragraph.setRightIndent(parseInt(String(ind["@_w:right"]), 10));
1052
- if (ind["@_w:firstLine"] !== undefined)
1053
- paragraph.setFirstLineIndent(parseInt(String(ind["@_w:firstLine"]), 10));
1100
+ if ((0, parsingHelpers_1.isExplicitlySet)(ind["@_w:left"]))
1101
+ paragraph.setLeftIndent((0, parsingHelpers_1.safeParseInt)(ind["@_w:left"]));
1102
+ if ((0, parsingHelpers_1.isExplicitlySet)(ind["@_w:right"]))
1103
+ paragraph.setRightIndent((0, parsingHelpers_1.safeParseInt)(ind["@_w:right"]));
1104
+ if ((0, parsingHelpers_1.isExplicitlySet)(ind["@_w:firstLine"]))
1105
+ paragraph.setFirstLineIndent((0, parsingHelpers_1.safeParseInt)(ind["@_w:firstLine"]));
1054
1106
  }
1055
1107
  if (pPrObj["w:spacing"]) {
1056
1108
  const spacing = pPrObj["w:spacing"];
1057
- if (spacing["@_w:before"])
1058
- paragraph.setSpaceBefore(parseInt(spacing["@_w:before"], 10));
1059
- if (spacing["@_w:after"])
1060
- paragraph.setSpaceAfter(parseInt(spacing["@_w:after"], 10));
1061
- if (spacing["@_w:line"]) {
1062
- paragraph.setLineSpacing(parseInt(spacing["@_w:line"], 10), spacing["@_w:lineRule"]);
1109
+ if ((0, parsingHelpers_1.isExplicitlySet)(spacing["@_w:before"]))
1110
+ paragraph.setSpaceBefore((0, parsingHelpers_1.safeParseInt)(spacing["@_w:before"]));
1111
+ if ((0, parsingHelpers_1.isExplicitlySet)(spacing["@_w:after"]))
1112
+ paragraph.setSpaceAfter((0, parsingHelpers_1.safeParseInt)(spacing["@_w:after"]));
1113
+ if ((0, parsingHelpers_1.isExplicitlySet)(spacing["@_w:line"])) {
1114
+ paragraph.setLineSpacing((0, parsingHelpers_1.safeParseInt)(spacing["@_w:line"]), spacing["@_w:lineRule"]);
1063
1115
  }
1064
1116
  }
1065
1117
  if (pPrObj["w:pageBreakBefore"])
@@ -1207,16 +1259,16 @@ class DocumentParser {
1207
1259
  if (pPrObj["w:framePr"]) {
1208
1260
  const framePr = pPrObj["w:framePr"];
1209
1261
  const frameProps = {};
1210
- if (framePr["@_w:w"])
1211
- frameProps.w = parseInt(framePr["@_w:w"], 10);
1212
- if (framePr["@_w:h"])
1213
- frameProps.h = parseInt(framePr["@_w:h"], 10);
1262
+ if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:w"]))
1263
+ frameProps.w = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:w"]);
1264
+ if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:h"]))
1265
+ frameProps.h = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:h"]);
1214
1266
  if (framePr["@_w:hRule"])
1215
1267
  frameProps.hRule = framePr["@_w:hRule"];
1216
- if (framePr["@_w:x"])
1217
- frameProps.x = parseInt(framePr["@_w:x"], 10);
1218
- if (framePr["@_w:y"])
1219
- frameProps.y = parseInt(framePr["@_w:y"], 10);
1268
+ if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:x"]))
1269
+ frameProps.x = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:x"]);
1270
+ if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:y"]))
1271
+ frameProps.y = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:y"]);
1220
1272
  if (framePr["@_w:xAlign"])
1221
1273
  frameProps.xAlign = framePr["@_w:xAlign"];
1222
1274
  if (framePr["@_w:yAlign"])
@@ -1225,23 +1277,19 @@ class DocumentParser {
1225
1277
  frameProps.hAnchor = framePr["@_w:hAnchor"];
1226
1278
  if (framePr["@_w:vAnchor"])
1227
1279
  frameProps.vAnchor = framePr["@_w:vAnchor"];
1228
- if (framePr["@_w:hSpace"])
1229
- frameProps.hSpace = parseInt(framePr["@_w:hSpace"], 10);
1230
- if (framePr["@_w:vSpace"])
1231
- frameProps.vSpace = parseInt(framePr["@_w:vSpace"], 10);
1280
+ if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:hSpace"]))
1281
+ frameProps.hSpace = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:hSpace"]);
1282
+ if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:vSpace"]))
1283
+ frameProps.vSpace = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:vSpace"]);
1232
1284
  if (framePr["@_w:wrap"])
1233
1285
  frameProps.wrap = framePr["@_w:wrap"];
1234
1286
  if (framePr["@_w:dropCap"])
1235
1287
  frameProps.dropCap = framePr["@_w:dropCap"];
1236
- if (framePr["@_w:lines"])
1237
- frameProps.lines = parseInt(framePr["@_w:lines"], 10);
1238
- if (framePr["@_w:anchorLock"] !== undefined) {
1239
- const anchorLockVal = framePr["@_w:anchorLock"];
1240
- frameProps.anchorLock =
1241
- anchorLockVal === "1" ||
1242
- anchorLockVal === "true" ||
1243
- anchorLockVal === true ||
1244
- anchorLockVal === 1;
1288
+ if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:lines"]))
1289
+ frameProps.lines = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:lines"]);
1290
+ if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:anchorLock"])) {
1291
+ const val = framePr["@_w:anchorLock"];
1292
+ frameProps.anchorLock = val === "1" || val === 1 || val === "true" || val === true || val === "on";
1245
1293
  }
1246
1294
  if (Object.keys(frameProps).length > 0) {
1247
1295
  paragraph.setFrameProperties(frameProps);
@@ -1333,6 +1381,97 @@ class DocumentParser {
1333
1381
  if (prevPPr["w:pageBreakBefore"]) {
1334
1382
  previousProperties.pageBreakBefore = prevPPr["w:pageBreakBefore"]["@_w:val"] !== "0";
1335
1383
  }
1384
+ if (prevPPr["w:widowControl"]) {
1385
+ previousProperties.widowControl = prevPPr["w:widowControl"]["@_w:val"] !== "0";
1386
+ }
1387
+ if (prevPPr["w:suppressAutoHyphens"]) {
1388
+ previousProperties.suppressAutoHyphens = prevPPr["w:suppressAutoHyphens"]["@_w:val"] !== "0";
1389
+ }
1390
+ if (prevPPr["w:contextualSpacing"]) {
1391
+ previousProperties.contextualSpacing = prevPPr["w:contextualSpacing"]["@_w:val"] !== "0";
1392
+ }
1393
+ if (prevPPr["w:mirrorIndents"]) {
1394
+ previousProperties.mirrorIndents = prevPPr["w:mirrorIndents"]["@_w:val"] !== "0";
1395
+ }
1396
+ if (prevPPr["w:outlineLvl"]?.["@_w:val"] !== undefined) {
1397
+ previousProperties.outlineLevel = parseInt(prevPPr["w:outlineLvl"]["@_w:val"], 10);
1398
+ }
1399
+ if (prevPPr["w:bidi"]) {
1400
+ previousProperties.bidi = prevPPr["w:bidi"]["@_w:val"] !== "0";
1401
+ }
1402
+ if (prevPPr["w:suppressLineNumbers"]) {
1403
+ previousProperties.suppressLineNumbers = prevPPr["w:suppressLineNumbers"]["@_w:val"] !== "0";
1404
+ }
1405
+ if (prevPPr["w:adjustRightInd"]) {
1406
+ previousProperties.adjustRightInd = prevPPr["w:adjustRightInd"]["@_w:val"] !== "0";
1407
+ }
1408
+ if (prevPPr["w:snapToGrid"]) {
1409
+ previousProperties.snapToGrid = prevPPr["w:snapToGrid"]["@_w:val"] !== "0";
1410
+ }
1411
+ if (prevPPr["w:wordWrap"]) {
1412
+ previousProperties.wordWrap = prevPPr["w:wordWrap"]["@_w:val"] !== "0";
1413
+ }
1414
+ if (prevPPr["w:autoSpaceDE"]) {
1415
+ previousProperties.autoSpaceDE = prevPPr["w:autoSpaceDE"]["@_w:val"] !== "0";
1416
+ }
1417
+ if (prevPPr["w:autoSpaceDN"]) {
1418
+ previousProperties.autoSpaceDN = prevPPr["w:autoSpaceDN"]["@_w:val"] !== "0";
1419
+ }
1420
+ if (prevPPr["w:textDirection"]?.["@_w:val"]) {
1421
+ previousProperties.textDirection = String(prevPPr["w:textDirection"]["@_w:val"]);
1422
+ }
1423
+ if (prevPPr["w:pBdr"]) {
1424
+ const pBdr = prevPPr["w:pBdr"];
1425
+ previousProperties.borders = {};
1426
+ const parseBorder = (borderObj) => {
1427
+ if (!borderObj)
1428
+ return undefined;
1429
+ return {
1430
+ val: borderObj["@_w:val"],
1431
+ sz: borderObj["@_w:sz"] !== undefined ? parseInt(borderObj["@_w:sz"], 10) : undefined,
1432
+ space: borderObj["@_w:space"] !== undefined ? parseInt(borderObj["@_w:space"], 10) : undefined,
1433
+ color: borderObj["@_w:color"],
1434
+ themeColor: borderObj["@_w:themeColor"],
1435
+ };
1436
+ };
1437
+ if (pBdr["w:top"])
1438
+ previousProperties.borders.top = parseBorder(pBdr["w:top"]);
1439
+ if (pBdr["w:bottom"])
1440
+ previousProperties.borders.bottom = parseBorder(pBdr["w:bottom"]);
1441
+ if (pBdr["w:left"])
1442
+ previousProperties.borders.left = parseBorder(pBdr["w:left"]);
1443
+ if (pBdr["w:right"])
1444
+ previousProperties.borders.right = parseBorder(pBdr["w:right"]);
1445
+ if (pBdr["w:between"])
1446
+ previousProperties.borders.between = parseBorder(pBdr["w:between"]);
1447
+ if (pBdr["w:bar"])
1448
+ previousProperties.borders.bar = parseBorder(pBdr["w:bar"]);
1449
+ if (Object.keys(previousProperties.borders).length === 0) {
1450
+ delete previousProperties.borders;
1451
+ }
1452
+ }
1453
+ if (prevPPr["w:shd"]) {
1454
+ const shd = prevPPr["w:shd"];
1455
+ previousProperties.shading = {
1456
+ fill: shd["@_w:fill"],
1457
+ color: shd["@_w:color"],
1458
+ val: shd["@_w:val"],
1459
+ themeFill: shd["@_w:themeFill"],
1460
+ themeColor: shd["@_w:themeColor"],
1461
+ };
1462
+ }
1463
+ if (prevPPr["w:tabs"]) {
1464
+ const tabsObj = prevPPr["w:tabs"];
1465
+ const tabArray = tabsObj["w:tab"];
1466
+ if (tabArray) {
1467
+ const tabs = Array.isArray(tabArray) ? tabArray : [tabArray];
1468
+ previousProperties.tabs = tabs.map((tab) => ({
1469
+ val: tab["@_w:val"],
1470
+ pos: tab["@_w:pos"] !== undefined ? parseInt(tab["@_w:pos"], 10) : undefined,
1471
+ leader: tab["@_w:leader"],
1472
+ }));
1473
+ }
1474
+ }
1336
1475
  if (Object.keys(previousProperties).length > 0) {
1337
1476
  change.previousProperties = previousProperties;
1338
1477
  }
@@ -1877,6 +2016,10 @@ class DocumentParser {
1877
2016
  switch (elementType) {
1878
2017
  case "w:t": {
1879
2018
  const textElements = toArray(runObj["w:t"]);
2019
+ if (elementIndex >= textElements.length) {
2020
+ logger_1.defaultLogger.debug("[DocumentParser] Invalid _orderedChildren index for w:t", { index: elementIndex, arrayLength: textElements.length });
2021
+ break;
2022
+ }
1880
2023
  const te = textElements[elementIndex];
1881
2024
  if (te !== undefined && te !== null) {
1882
2025
  const text = extractTextValue(te);
@@ -1888,6 +2031,10 @@ class DocumentParser {
1888
2031
  }
1889
2032
  case "w:instrText": {
1890
2033
  const instrElements = toArray(runObj["w:instrText"]);
2034
+ if (elementIndex >= instrElements.length) {
2035
+ logger_1.defaultLogger.debug("[DocumentParser] Invalid _orderedChildren index for w:instrText", { index: elementIndex, arrayLength: instrElements.length });
2036
+ break;
2037
+ }
1891
2038
  const instr = instrElements[elementIndex];
1892
2039
  if (instr !== undefined && instr !== null) {
1893
2040
  const text = extractTextValue(instr);
@@ -1897,6 +2044,10 @@ class DocumentParser {
1897
2044
  }
1898
2045
  case "w:fldChar": {
1899
2046
  const fldChars = toArray(runObj["w:fldChar"]);
2047
+ if (elementIndex >= fldChars.length) {
2048
+ logger_1.defaultLogger.debug("[DocumentParser] Invalid _orderedChildren index for w:fldChar", { index: elementIndex, arrayLength: fldChars.length });
2049
+ break;
2050
+ }
1900
2051
  const fldChar = fldChars[elementIndex];
1901
2052
  if (fldChar && typeof fldChar === "object") {
1902
2053
  const charType = (fldChar["@_w:fldCharType"] ||
@@ -1937,6 +2088,7 @@ class DocumentParser {
1937
2088
  }
1938
2089
  }
1939
2090
  else {
2091
+ console.warn('[DocumentParser] _orderedChildren missing - using fallback element ordering which may affect tab/break positions');
1940
2092
  const textElement = runObj["w:t"];
1941
2093
  if (textElement !== undefined && textElement !== null) {
1942
2094
  const textElements = toArray(textElement);
@@ -2203,7 +2355,6 @@ class DocumentParser {
2203
2355
  }
2204
2356
  getStandardHyperlinkFormatting() {
2205
2357
  return {
2206
- font: "Verdana",
2207
2358
  color: "0000FF",
2208
2359
  underline: "single",
2209
2360
  };
@@ -2295,29 +2446,21 @@ class DocumentParser {
2295
2446
  run.setVanish(true);
2296
2447
  if (rPrObj["w:specVanish"])
2297
2448
  run.setSpecVanish(true);
2298
- const checkBooleanProp = (prop) => {
2299
- if (!prop)
2300
- return false;
2301
- const val = prop["@_w:val"];
2302
- if (val === undefined)
2303
- return true;
2304
- return val === "1" || val === 1 || val === "true" || val === true;
2305
- };
2306
- if (checkBooleanProp(rPrObj["w:rtl"]))
2449
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:rtl"]))
2307
2450
  run.setRTL(true);
2308
- if (checkBooleanProp(rPrObj["w:b"]))
2451
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:b"]))
2309
2452
  run.setBold(true);
2310
- if (checkBooleanProp(rPrObj["w:bCs"]))
2453
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:bCs"]))
2311
2454
  run.setComplexScriptBold(true);
2312
- if (checkBooleanProp(rPrObj["w:i"]))
2455
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:i"]))
2313
2456
  run.setItalic(true);
2314
- if (checkBooleanProp(rPrObj["w:iCs"]))
2457
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:iCs"]))
2315
2458
  run.setComplexScriptItalic(true);
2316
- if (checkBooleanProp(rPrObj["w:strike"]))
2459
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:strike"]))
2317
2460
  run.setStrike(true);
2318
- if (checkBooleanProp(rPrObj["w:smallCaps"]))
2461
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:smallCaps"]))
2319
2462
  run.setSmallCaps(true);
2320
- if (checkBooleanProp(rPrObj["w:caps"]))
2463
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:caps"]))
2321
2464
  run.setAllCaps(true);
2322
2465
  if (rPrObj["w:u"]) {
2323
2466
  const uVal = rPrObj["w:u"]["@_w:val"];
@@ -2397,6 +2540,179 @@ class DocumentParser {
2397
2540
  if (rPrObj["w:highlight"]) {
2398
2541
  run.setHighlight(rPrObj["w:highlight"]["@_w:val"]);
2399
2542
  }
2543
+ if (rPrObj["w:rPrChange"]) {
2544
+ const changeObj = rPrObj["w:rPrChange"];
2545
+ const propChange = {
2546
+ id: changeObj["@_w:id"] !== undefined ? parseInt(String(changeObj["@_w:id"]), 10) : 0,
2547
+ author: changeObj["@_w:author"] ? String(changeObj["@_w:author"]) : "",
2548
+ date: changeObj["@_w:date"] ? new Date(String(changeObj["@_w:date"])) : new Date(),
2549
+ previousProperties: {},
2550
+ };
2551
+ if (changeObj["w:rPr"]) {
2552
+ const prevRPr = changeObj["w:rPr"];
2553
+ const prevProps = {};
2554
+ if (prevRPr["w:b"]) {
2555
+ prevProps.bold = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:b"]);
2556
+ }
2557
+ if (prevRPr["w:i"]) {
2558
+ prevProps.italic = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:i"]);
2559
+ }
2560
+ if (prevRPr["w:u"]) {
2561
+ const uVal = prevRPr["w:u"]["@_w:val"];
2562
+ prevProps.underline = uVal || true;
2563
+ }
2564
+ if (prevRPr["w:strike"]) {
2565
+ prevProps.strike = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:strike"]);
2566
+ }
2567
+ if (prevRPr["w:rFonts"]) {
2568
+ prevProps.font = prevRPr["w:rFonts"]["@_w:ascii"];
2569
+ }
2570
+ if (prevRPr["w:sz"]) {
2571
+ prevProps.size = (0, parsingHelpers_1.safeParseInt)(prevRPr["w:sz"]["@_w:val"]) / 2;
2572
+ }
2573
+ if (prevRPr["w:color"]) {
2574
+ const colorVal = prevRPr["w:color"]["@_w:val"];
2575
+ if (colorVal && colorVal !== "auto") {
2576
+ prevProps.color = colorVal;
2577
+ }
2578
+ }
2579
+ if (prevRPr["w:highlight"]) {
2580
+ prevProps.highlight = prevRPr["w:highlight"]["@_w:val"];
2581
+ }
2582
+ if (prevRPr["w:vertAlign"]) {
2583
+ const val = prevRPr["w:vertAlign"]["@_w:val"];
2584
+ if (val === "subscript")
2585
+ prevProps.subscript = true;
2586
+ if (val === "superscript")
2587
+ prevProps.superscript = true;
2588
+ }
2589
+ if (prevRPr["w:smallCaps"]) {
2590
+ prevProps.smallCaps = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:smallCaps"]);
2591
+ }
2592
+ if (prevRPr["w:caps"]) {
2593
+ prevProps.allCaps = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:caps"]);
2594
+ }
2595
+ if (prevRPr["w:dstrike"]) {
2596
+ prevProps.dstrike = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:dstrike"]);
2597
+ }
2598
+ if (prevRPr["w:outline"]) {
2599
+ prevProps.outline = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:outline"]);
2600
+ }
2601
+ if (prevRPr["w:shadow"]) {
2602
+ prevProps.shadow = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:shadow"]);
2603
+ }
2604
+ if (prevRPr["w:emboss"]) {
2605
+ prevProps.emboss = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:emboss"]);
2606
+ }
2607
+ if (prevRPr["w:imprint"]) {
2608
+ prevProps.imprint = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:imprint"]);
2609
+ }
2610
+ if (prevRPr["w:vanish"]) {
2611
+ prevProps.vanish = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:vanish"]);
2612
+ }
2613
+ if (prevRPr["w:specVanish"]) {
2614
+ prevProps.specVanish = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:specVanish"]);
2615
+ }
2616
+ if (prevRPr["w:rtl"]) {
2617
+ prevProps.rtl = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:rtl"]);
2618
+ }
2619
+ if (prevRPr["w:noProof"]) {
2620
+ prevProps.noProof = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:noProof"]);
2621
+ }
2622
+ if (prevRPr["w:snapToGrid"]) {
2623
+ prevProps.snapToGrid = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:snapToGrid"]);
2624
+ }
2625
+ if (prevRPr["w:bCs"]) {
2626
+ prevProps.complexScriptBold = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:bCs"]);
2627
+ }
2628
+ if (prevRPr["w:iCs"]) {
2629
+ prevProps.complexScriptItalic = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:iCs"]);
2630
+ }
2631
+ if (prevRPr["w:spacing"]) {
2632
+ const spacingVal = prevRPr["w:spacing"]["@_w:val"];
2633
+ if (spacingVal !== undefined) {
2634
+ prevProps.characterSpacing = (0, parsingHelpers_1.safeParseInt)(spacingVal);
2635
+ }
2636
+ }
2637
+ if (prevRPr["w:w"]) {
2638
+ const scaleVal = prevRPr["w:w"]["@_w:val"];
2639
+ if (scaleVal !== undefined) {
2640
+ prevProps.scaling = (0, parsingHelpers_1.safeParseInt)(scaleVal);
2641
+ }
2642
+ }
2643
+ if (prevRPr["w:position"]) {
2644
+ const posVal = prevRPr["w:position"]["@_w:val"];
2645
+ if (posVal !== undefined) {
2646
+ prevProps.position = (0, parsingHelpers_1.safeParseInt)(posVal);
2647
+ }
2648
+ }
2649
+ if (prevRPr["w:kern"]) {
2650
+ const kernVal = prevRPr["w:kern"]["@_w:val"];
2651
+ if (kernVal !== undefined) {
2652
+ prevProps.kerning = (0, parsingHelpers_1.safeParseInt)(kernVal);
2653
+ }
2654
+ }
2655
+ if (prevRPr["w:lang"]) {
2656
+ const langVal = prevRPr["w:lang"]["@_w:val"];
2657
+ if (langVal) {
2658
+ prevProps.language = String(langVal);
2659
+ }
2660
+ }
2661
+ if (prevRPr["w:rStyle"]) {
2662
+ const styleVal = prevRPr["w:rStyle"]["@_w:val"];
2663
+ if (styleVal) {
2664
+ prevProps.characterStyle = String(styleVal);
2665
+ }
2666
+ }
2667
+ if (prevRPr["w:effect"]) {
2668
+ const effectVal = prevRPr["w:effect"]["@_w:val"];
2669
+ if (effectVal) {
2670
+ prevProps.effect = effectVal;
2671
+ }
2672
+ }
2673
+ if (prevRPr["w:fitText"]) {
2674
+ const fitVal = prevRPr["w:fitText"]["@_w:val"];
2675
+ if (fitVal !== undefined) {
2676
+ prevProps.fitText = (0, parsingHelpers_1.safeParseInt)(fitVal);
2677
+ }
2678
+ }
2679
+ if (prevRPr["w:em"]) {
2680
+ const emVal = prevRPr["w:em"]["@_w:val"];
2681
+ if (emVal) {
2682
+ prevProps.emphasis = emVal;
2683
+ }
2684
+ }
2685
+ if (prevRPr["w:bdr"]) {
2686
+ const bdrObj = prevRPr["w:bdr"];
2687
+ prevProps.border = {
2688
+ style: bdrObj["@_w:val"],
2689
+ size: bdrObj["@_w:sz"] !== undefined ? (0, parsingHelpers_1.safeParseInt)(bdrObj["@_w:sz"]) : undefined,
2690
+ space: bdrObj["@_w:space"] !== undefined ? (0, parsingHelpers_1.safeParseInt)(bdrObj["@_w:space"]) : undefined,
2691
+ color: bdrObj["@_w:color"],
2692
+ };
2693
+ }
2694
+ if (prevRPr["w:shd"]) {
2695
+ const shdObj = prevRPr["w:shd"];
2696
+ prevProps.shading = {
2697
+ fill: shdObj["@_w:fill"],
2698
+ color: shdObj["@_w:color"],
2699
+ val: shdObj["@_w:val"],
2700
+ };
2701
+ }
2702
+ if (prevRPr["w:eastAsianLayout"]) {
2703
+ const eaObj = prevRPr["w:eastAsianLayout"];
2704
+ prevProps.eastAsianLayout = {
2705
+ id: eaObj["@_w:id"] !== undefined ? (0, parsingHelpers_1.safeParseInt)(eaObj["@_w:id"]) : undefined,
2706
+ combine: eaObj["@_w:combine"] ? (0, parsingHelpers_1.parseOoxmlBoolean)({ "@_w:val": eaObj["@_w:combine"] }) : undefined,
2707
+ combineBrackets: eaObj["@_w:combineBrackets"],
2708
+ vert: eaObj["@_w:vert"] ? (0, parsingHelpers_1.parseOoxmlBoolean)({ "@_w:val": eaObj["@_w:vert"] }) : undefined,
2709
+ vertCompress: eaObj["@_w:vertCompress"] ? (0, parsingHelpers_1.parseOoxmlBoolean)({ "@_w:val": eaObj["@_w:vertCompress"] }) : undefined,
2710
+ };
2711
+ }
2712
+ propChange.previousProperties = prevProps;
2713
+ }
2714
+ run.setPropertyChangeRevision(propChange);
2715
+ }
2400
2716
  }
2401
2717
  async parseDrawingFromObject(drawingObj, zipHandler, relationshipManager, imageManager) {
2402
2718
  try {
@@ -2656,7 +2972,7 @@ class DocumentParser {
2656
2972
  const gridColArray = Array.isArray(gridCols) ? gridCols : [gridCols];
2657
2973
  const widths = gridColArray.map((col) => {
2658
2974
  const w = col["@_w:w"];
2659
- return w ? parseInt(w, 10) : 2880;
2975
+ return (0, parsingHelpers_1.isExplicitlySet)(w) ? (0, parsingHelpers_1.safeParseInt)(w, 2880) : 2880;
2660
2976
  });
2661
2977
  if (widths.length > 0) {
2662
2978
  table.setTableGrid(widths);
@@ -2666,10 +2982,6 @@ class DocumentParser {
2666
2982
  const rowChildren = Array.isArray(rows) ? rows : rows ? [rows] : [];
2667
2983
  let rowXmls = [];
2668
2984
  if (rawTableXml) {
2669
- if (rawTableXml.includes('Bullet 3') && rawTableXml.includes('pPrChange')) {
2670
- const pPrChangeIdx = rawTableXml.indexOf('pPrChange');
2671
- console.log(`[DEBUG parseTableFromObject] rawTableXml around pPrChange:`, rawTableXml.substring(pPrChangeIdx - 100, pPrChangeIdx + 200));
2672
- }
2673
2985
  rowXmls = XMLParser_1.XMLParser.extractElements(rawTableXml, "w:tr");
2674
2986
  }
2675
2987
  const rowPositions = [];
@@ -2814,10 +3126,6 @@ class DocumentParser {
2814
3126
  const cellChildren = Array.isArray(cells) ? cells : cells ? [cells] : [];
2815
3127
  let cellXmls = [];
2816
3128
  if (rawRowXml) {
2817
- if (rawRowXml.includes('Bullet 3') && rawRowXml.includes('pPrChange')) {
2818
- const pPrChangeIdx = rawRowXml.indexOf('pPrChange');
2819
- console.log(`[DEBUG parseTableRowFromObject] rawRowXml around pPrChange:`, rawRowXml.substring(pPrChangeIdx - 100, pPrChangeIdx + 200));
2820
- }
2821
3129
  cellXmls = XMLParser_1.XMLParser.extractElements(rawRowXml, "w:tc");
2822
3130
  }
2823
3131
  for (let i = 0; i < cellChildren.length; i++) {
@@ -3269,22 +3577,22 @@ class DocumentParser {
3269
3577
  properties.controlType = "datePicker";
3270
3578
  const dateElement = sdtPr["w:date"];
3271
3579
  properties.datePicker = {
3272
- dateFormat: dateElement?.["w:dateFormat"]?.["@_w:val"],
3273
- fullDate: dateElement?.["w:fullDate"]?.["@_w:val"]
3274
- ? new Date(dateElement["w:fullDate"]["@_w:val"])
3580
+ dateFormat: dateElement?.["@_w:dateFormat"] || dateElement?.["w:dateFormat"]?.["@_w:val"],
3581
+ fullDate: (dateElement?.["@_w:fullDate"] || dateElement?.["w:fullDate"]?.["@_w:val"])
3582
+ ? new Date(dateElement["@_w:fullDate"] || dateElement["w:fullDate"]["@_w:val"])
3275
3583
  : undefined,
3276
- lid: dateElement?.["w:lid"]?.["@_w:val"],
3277
- calendar: dateElement?.["w:calendar"]?.["@_w:val"],
3584
+ lid: dateElement?.["@_w:lid"] || dateElement?.["w:lid"]?.["@_w:val"],
3585
+ calendar: dateElement?.["@_w:calendar"] || dateElement?.["w:calendar"]?.["@_w:val"],
3278
3586
  };
3279
3587
  }
3280
3588
  else if (sdtPr["w14:checkbox"]) {
3281
3589
  properties.controlType = "checkbox";
3282
3590
  const checkboxElement = sdtPr["w14:checkbox"];
3591
+ const checkedVal = checkboxElement?.["w14:checked"]?.["@_w14:val"];
3283
3592
  properties.checkbox = {
3284
- checked: checkboxElement?.["w14:checked"]?.["@_w14:val"] === "1" ||
3285
- checkboxElement?.["w14:checked"]?.["@_w14:val"] === "true",
3286
- checkedState: checkboxElement?.["w14:checkedState"]?.["@_w14:val"],
3287
- uncheckedState: checkboxElement?.["w14:uncheckedState"]?.["@_w14:val"],
3593
+ checked: checkedVal === 1 || checkedVal === "1" || checkedVal === true || checkedVal === "true",
3594
+ checkedState: String(checkboxElement?.["w14:checkedState"]?.["@_w14:val"] ?? ""),
3595
+ uncheckedState: String(checkboxElement?.["w14:uncheckedState"]?.["@_w14:val"] ?? ""),
3288
3596
  };
3289
3597
  }
3290
3598
  else if (sdtPr["w:picture"]) {