docxmlater 9.5.38 → 9.6.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 (131) hide show
  1. package/dist/core/Document.d.ts +13 -82
  2. package/dist/core/Document.d.ts.map +1 -1
  3. package/dist/core/Document.js +89 -1696
  4. package/dist/core/Document.js.map +1 -1
  5. package/dist/core/DocumentContent.d.ts +5 -1
  6. package/dist/core/DocumentContent.d.ts.map +1 -1
  7. package/dist/core/DocumentContent.js.map +1 -1
  8. package/dist/core/DocumentGenerator.d.ts +5 -1
  9. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  10. package/dist/core/DocumentGenerator.js.map +1 -1
  11. package/dist/core/DocumentParser.d.ts +6 -1
  12. package/dist/core/DocumentParser.d.ts.map +1 -1
  13. package/dist/core/DocumentParser.js +462 -45
  14. package/dist/core/DocumentParser.js.map +1 -1
  15. package/dist/core/DocumentValidator.d.ts +5 -1
  16. package/dist/core/DocumentValidator.d.ts.map +1 -1
  17. package/dist/core/DocumentValidator.js.map +1 -1
  18. package/dist/core/ListNormalizer.d.ts.map +1 -1
  19. package/dist/core/ListNormalizer.js +3 -5
  20. package/dist/core/ListNormalizer.js.map +1 -1
  21. package/dist/elements/AlternateContent.d.ts +9 -0
  22. package/dist/elements/AlternateContent.d.ts.map +1 -0
  23. package/dist/elements/AlternateContent.js +23 -0
  24. package/dist/elements/AlternateContent.js.map +1 -0
  25. package/dist/elements/CustomXml.d.ts +9 -0
  26. package/dist/elements/CustomXml.d.ts.map +1 -0
  27. package/dist/elements/CustomXml.js +23 -0
  28. package/dist/elements/CustomXml.js.map +1 -0
  29. package/dist/elements/Field.d.ts.map +1 -1
  30. package/dist/elements/Field.js +3 -2
  31. package/dist/elements/Field.js.map +1 -1
  32. package/dist/elements/Hyperlink.d.ts +3 -1
  33. package/dist/elements/Hyperlink.d.ts.map +1 -1
  34. package/dist/elements/Image.d.ts +9 -0
  35. package/dist/elements/Image.d.ts.map +1 -1
  36. package/dist/elements/Image.js +39 -17
  37. package/dist/elements/Image.js.map +1 -1
  38. package/dist/elements/ImageManager.d.ts.map +1 -1
  39. package/dist/elements/ImageManager.js +2 -1
  40. package/dist/elements/ImageManager.js.map +1 -1
  41. package/dist/elements/MathElement.d.ts +16 -0
  42. package/dist/elements/MathElement.d.ts.map +1 -0
  43. package/dist/elements/MathElement.js +42 -0
  44. package/dist/elements/MathElement.js.map +1 -0
  45. package/dist/elements/Paragraph.d.ts +5 -3
  46. package/dist/elements/Paragraph.d.ts.map +1 -1
  47. package/dist/elements/Paragraph.js +4 -0
  48. package/dist/elements/Paragraph.js.map +1 -1
  49. package/dist/elements/PreservedElement.d.ts +14 -0
  50. package/dist/elements/PreservedElement.d.ts.map +1 -0
  51. package/dist/elements/PreservedElement.js +33 -0
  52. package/dist/elements/PreservedElement.js.map +1 -0
  53. package/dist/elements/Run.d.ts +18 -1
  54. package/dist/elements/Run.d.ts.map +1 -1
  55. package/dist/elements/Run.js +137 -10
  56. package/dist/elements/Run.js.map +1 -1
  57. package/dist/elements/Section.d.ts +23 -1
  58. package/dist/elements/Section.d.ts.map +1 -1
  59. package/dist/elements/Section.js +82 -3
  60. package/dist/elements/Section.js.map +1 -1
  61. package/dist/elements/Shape.d.ts +4 -1
  62. package/dist/elements/Shape.d.ts.map +1 -1
  63. package/dist/elements/Shape.js +16 -1
  64. package/dist/elements/Shape.js.map +1 -1
  65. package/dist/elements/Table.d.ts +4 -0
  66. package/dist/elements/Table.d.ts.map +1 -1
  67. package/dist/elements/Table.js +14 -0
  68. package/dist/elements/Table.js.map +1 -1
  69. package/dist/elements/TableRow.d.ts +11 -0
  70. package/dist/elements/TableRow.d.ts.map +1 -1
  71. package/dist/elements/TableRow.js +40 -0
  72. package/dist/elements/TableRow.js.map +1 -1
  73. package/dist/elements/TextBox.d.ts +1 -0
  74. package/dist/elements/TextBox.d.ts.map +1 -1
  75. package/dist/elements/TextBox.js +26 -1
  76. package/dist/elements/TextBox.js.map +1 -1
  77. package/dist/formatting/AbstractNumbering.js.map +1 -1
  78. package/dist/formatting/Style.d.ts.map +1 -1
  79. package/dist/formatting/Style.js +2 -1
  80. package/dist/formatting/Style.js.map +1 -1
  81. package/dist/formatting/StylesManager.js.map +1 -1
  82. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  83. package/dist/helpers/CleanupHelper.js +40 -6
  84. package/dist/helpers/CleanupHelper.js.map +1 -1
  85. package/dist/index.d.ts +59 -55
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +220 -209
  88. package/dist/index.js.map +1 -1
  89. package/dist/ms-doc/converter/DocToDocxConverter.js.map +1 -1
  90. package/dist/ms-doc/properties/SPRM.d.ts.map +1 -1
  91. package/dist/ms-doc/properties/SPRM.js +2 -1
  92. package/dist/ms-doc/properties/SPRM.js.map +1 -1
  93. package/dist/tracking/DocumentTrackingContext.d.ts +7 -7
  94. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  95. package/dist/tracking/DocumentTrackingContext.js +4 -3
  96. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  97. package/dist/tracking/TrackingContext.d.ts +14 -9
  98. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  99. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  100. package/dist/utils/corruptionDetection.d.ts +5 -1
  101. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  102. package/dist/utils/corruptionDetection.js.map +1 -1
  103. package/dist/utils/deepClone.js.map +1 -1
  104. package/dist/utils/diagnostics.d.ts +4 -4
  105. package/dist/utils/diagnostics.d.ts.map +1 -1
  106. package/dist/utils/diagnostics.js.map +1 -1
  107. package/dist/utils/formatting.d.ts +2 -2
  108. package/dist/utils/formatting.d.ts.map +1 -1
  109. package/dist/utils/formatting.js +1 -1
  110. package/dist/utils/formatting.js.map +1 -1
  111. package/dist/utils/units.d.ts +3 -0
  112. package/dist/utils/units.d.ts.map +1 -1
  113. package/dist/utils/units.js +9 -0
  114. package/dist/utils/units.js.map +1 -1
  115. package/dist/validation/RevisionAutoFixer.d.ts +3 -1
  116. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  117. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  118. package/dist/validation/ValidationRules.d.ts +2 -2
  119. package/dist/validation/ValidationRules.d.ts.map +1 -1
  120. package/dist/xml/XMLBuilder.d.ts +3 -1
  121. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  122. package/dist/xml/XMLBuilder.js.map +1 -1
  123. package/dist/zip/ZipReader.d.ts.map +1 -1
  124. package/dist/zip/ZipReader.js +4 -2
  125. package/dist/zip/ZipReader.js.map +1 -1
  126. package/dist/zip/ZipWriter.js.map +1 -1
  127. package/package.json +1 -1
  128. package/dist/core/BaseManager.d.ts +0 -21
  129. package/dist/core/BaseManager.d.ts.map +0 -1
  130. package/dist/core/BaseManager.js +0 -86
  131. package/dist/core/BaseManager.js.map +0 -1
@@ -34,8 +34,12 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.DocumentParser = void 0;
37
+ const AlternateContent_1 = require("../elements/AlternateContent");
37
38
  const Bookmark_1 = require("../elements/Bookmark");
38
39
  const Comment_1 = require("../elements/Comment");
40
+ const CustomXml_1 = require("../elements/CustomXml");
41
+ const PreservedElement_1 = require("../elements/PreservedElement");
42
+ const MathElement_1 = require("../elements/MathElement");
39
43
  const Field_1 = require("../elements/Field");
40
44
  const FieldHelpers_1 = require("../elements/FieldHelpers");
41
45
  const Footer_1 = require("../elements/Footer");
@@ -58,6 +62,7 @@ const Style_1 = require("../formatting/Style");
58
62
  const diagnostics_1 = require("../utils/diagnostics");
59
63
  const logger_1 = require("../utils/logger");
60
64
  const parsingHelpers_1 = require("../utils/parsingHelpers");
65
+ const units_1 = require("../utils/units");
61
66
  function getLogger() {
62
67
  return (0, logger_1.createScopedLogger)((0, logger_1.getGlobalLogger)(), 'DocumentParser');
63
68
  }
@@ -139,6 +144,10 @@ class DocumentParser {
139
144
  const nextP = this.findNextTopLevelTag(bodyContent, "w:p", pos);
140
145
  const nextTbl = this.findNextTopLevelTag(bodyContent, "w:tbl", pos);
141
146
  const nextSdt = this.findNextTopLevelTag(bodyContent, "w:sdt", pos);
147
+ const nextAC = this.findNextTopLevelTag(bodyContent, "mc:AlternateContent", pos);
148
+ const nextMath = this.findNextTopLevelTag(bodyContent, "m:oMathPara", pos);
149
+ const nextCXml = this.findNextTopLevelTag(bodyContent, "w:customXml", pos);
150
+ const nextAltChunk = this.findNextTopLevelTag(bodyContent, "w:altChunk", pos);
142
151
  const candidates = [];
143
152
  if (nextP !== -1)
144
153
  candidates.push({ type: "p", pos: nextP });
@@ -146,6 +155,14 @@ class DocumentParser {
146
155
  candidates.push({ type: "tbl", pos: nextTbl });
147
156
  if (nextSdt !== -1)
148
157
  candidates.push({ type: "sdt", pos: nextSdt });
158
+ if (nextAC !== -1)
159
+ candidates.push({ type: "alternateContent", pos: nextAC });
160
+ if (nextMath !== -1)
161
+ candidates.push({ type: "mathParagraph", pos: nextMath });
162
+ if (nextCXml !== -1)
163
+ candidates.push({ type: "customXml", pos: nextCXml });
164
+ if (nextAltChunk !== -1)
165
+ candidates.push({ type: "altChunk", pos: nextAltChunk });
149
166
  if (candidates.length === 0)
150
167
  break;
151
168
  candidates.sort((a, b) => a.pos - b.pos);
@@ -231,6 +248,46 @@ class DocumentParser {
231
248
  pos = next.pos + 1;
232
249
  }
233
250
  }
251
+ else if (next.type === "alternateContent") {
252
+ const elementXml = this.extractSingleElement(bodyContent, "mc:AlternateContent", next.pos);
253
+ if (elementXml) {
254
+ bodyElements.push(new AlternateContent_1.AlternateContent(elementXml));
255
+ pos = next.pos + elementXml.length;
256
+ }
257
+ else {
258
+ pos = next.pos + 1;
259
+ }
260
+ }
261
+ else if (next.type === "mathParagraph") {
262
+ const elementXml = this.extractSingleElement(bodyContent, "m:oMathPara", next.pos);
263
+ if (elementXml) {
264
+ bodyElements.push(new MathElement_1.MathParagraph(elementXml));
265
+ pos = next.pos + elementXml.length;
266
+ }
267
+ else {
268
+ pos = next.pos + 1;
269
+ }
270
+ }
271
+ else if (next.type === "customXml") {
272
+ const elementXml = this.extractSingleElement(bodyContent, "w:customXml", next.pos);
273
+ if (elementXml) {
274
+ bodyElements.push(new CustomXml_1.CustomXmlBlock(elementXml));
275
+ pos = next.pos + elementXml.length;
276
+ }
277
+ else {
278
+ pos = next.pos + 1;
279
+ }
280
+ }
281
+ else if (next.type === "altChunk") {
282
+ const elementXml = this.extractSingleElement(bodyContent, "w:altChunk", next.pos);
283
+ if (elementXml) {
284
+ bodyElements.push(new PreservedElement_1.PreservedElement(elementXml, 'altChunk', 'block'));
285
+ pos = next.pos + elementXml.length;
286
+ }
287
+ else {
288
+ pos = next.pos + 1;
289
+ }
290
+ }
234
291
  }
235
292
  }
236
293
  if (bodyElements.length > 0 && pos < bodyContent.length) {
@@ -526,6 +583,11 @@ class DocumentParser {
526
583
  let moveToIndex = 0;
527
584
  let bookmarkStartIndex = 0;
528
585
  let bookmarkEndIndex = 0;
586
+ let proofErrIndex = 0;
587
+ let permStartIndex = 0;
588
+ let permEndIndex = 0;
589
+ let oMathIndex = 0;
590
+ let rubyIndex = 0;
529
591
  const findClosingTagEnd = (content, tagName, startPos) => {
530
592
  const closingTag = `</${tagName}>`;
531
593
  const closingPos = content.indexOf(closingTag, startPos);
@@ -615,6 +677,46 @@ class DocumentParser {
615
677
  });
616
678
  searchPos = tagEnd + 1;
617
679
  }
680
+ else if (tagName === "w:proofErr") {
681
+ children.push({
682
+ type: "w:proofErr",
683
+ pos: tagStart,
684
+ index: proofErrIndex++,
685
+ });
686
+ searchPos = tagEnd + 1;
687
+ }
688
+ else if (tagName === "w:permStart") {
689
+ children.push({
690
+ type: "w:permStart",
691
+ pos: tagStart,
692
+ index: permStartIndex++,
693
+ });
694
+ searchPos = tagEnd + 1;
695
+ }
696
+ else if (tagName === "w:permEnd") {
697
+ children.push({
698
+ type: "w:permEnd",
699
+ pos: tagStart,
700
+ index: permEndIndex++,
701
+ });
702
+ searchPos = tagEnd + 1;
703
+ }
704
+ else if (tagName === "m:oMath") {
705
+ children.push({
706
+ type: "m:oMath",
707
+ pos: tagStart,
708
+ index: oMathIndex++,
709
+ });
710
+ searchPos = selfClosing ? tagEnd + 1 : findClosingTagEnd(paraContent, "m:oMath", tagEnd);
711
+ }
712
+ else if (tagName === "w:ruby") {
713
+ children.push({
714
+ type: "w:ruby",
715
+ pos: tagStart,
716
+ index: rubyIndex++,
717
+ });
718
+ searchPos = selfClosing ? tagEnd + 1 : findClosingTagEnd(paraContent, "w:ruby", tagEnd);
719
+ }
618
720
  else {
619
721
  searchPos = tagEnd + 1;
620
722
  }
@@ -676,6 +778,17 @@ class DocumentParser {
676
778
  }
677
779
  }
678
780
  }
781
+ else if (runObj["w:object"]) {
782
+ const runXml = extractRunXmlAtPosition(child.pos);
783
+ if (runXml) {
784
+ const objectXmls = XMLParser_1.XMLParser.extractElements(runXml, "w:object");
785
+ if (objectXmls.length > 0 && objectXmls[0]) {
786
+ const run = Run_1.Run.createFromContent([{ type: "embeddedObject", rawXml: objectXmls[0] }]);
787
+ this.parseRunPropertiesFromObject(runObj["w:rPr"], run);
788
+ paragraph.addRun(run);
789
+ }
790
+ }
791
+ }
679
792
  else {
680
793
  const run = this.parseRunFromObject(runObj);
681
794
  if (run) {
@@ -808,6 +921,19 @@ class DocumentParser {
808
921
  }
809
922
  }
810
923
  }
924
+ else if (child.type === "w:proofErr" || child.type === "w:permStart" || child.type === "w:permEnd") {
925
+ const selfCloseEnd = paraContent.indexOf(">", child.pos);
926
+ if (selfCloseEnd !== -1) {
927
+ const rawXml = paraContent.substring(child.pos, selfCloseEnd + 1);
928
+ paragraph.addContent(new PreservedElement_1.PreservedElement(rawXml, child.type, 'inline'));
929
+ }
930
+ }
931
+ else if (child.type === "m:oMath" || child.type === "w:ruby") {
932
+ const elementXml = this.extractSingleElement(paraContent, child.type, child.pos);
933
+ if (elementXml) {
934
+ paragraph.addContent(new PreservedElement_1.PreservedElement(elementXml, child.type, 'inline'));
935
+ }
936
+ }
811
937
  }
812
938
  }
813
939
  async parseRevisionFromXml(revisionXml, tagName, relationshipManager, zipHandler, imageManager) {
@@ -2284,6 +2410,70 @@ class DocumentParser {
2284
2410
  case "w:noBreakHyphen":
2285
2411
  content.push({ type: "noBreakHyphen" });
2286
2412
  break;
2413
+ case "w:lastRenderedPageBreak":
2414
+ content.push({ type: "lastRenderedPageBreak" });
2415
+ break;
2416
+ case "w:separator":
2417
+ content.push({ type: "separator" });
2418
+ break;
2419
+ case "w:continuationSeparator":
2420
+ content.push({ type: "continuationSeparator" });
2421
+ break;
2422
+ case "w:pgNum":
2423
+ content.push({ type: "pageNumber" });
2424
+ break;
2425
+ case "w:annotationRef":
2426
+ content.push({ type: "annotationRef" });
2427
+ break;
2428
+ case "w:dayShort":
2429
+ content.push({ type: "dayShort" });
2430
+ break;
2431
+ case "w:dayLong":
2432
+ content.push({ type: "dayLong" });
2433
+ break;
2434
+ case "w:monthShort":
2435
+ content.push({ type: "monthShort" });
2436
+ break;
2437
+ case "w:monthLong":
2438
+ content.push({ type: "monthLong" });
2439
+ break;
2440
+ case "w:yearShort":
2441
+ content.push({ type: "yearShort" });
2442
+ break;
2443
+ case "w:yearLong":
2444
+ content.push({ type: "yearLong" });
2445
+ break;
2446
+ case "w:sym": {
2447
+ const symElements = toArray(runObj["w:sym"]);
2448
+ const sym = symElements[elementIndex] || symElements[0];
2449
+ if (sym && typeof sym === "object") {
2450
+ content.push({
2451
+ type: "symbol",
2452
+ symbolFont: sym["@_w:font"],
2453
+ symbolChar: sym["@_w:char"],
2454
+ });
2455
+ }
2456
+ else {
2457
+ content.push({ type: "symbol" });
2458
+ }
2459
+ break;
2460
+ }
2461
+ case "w:ptab": {
2462
+ const ptabElements = toArray(runObj["w:ptab"]);
2463
+ const ptab = ptabElements[elementIndex] || ptabElements[0];
2464
+ if (ptab && typeof ptab === "object") {
2465
+ content.push({
2466
+ type: "positionTab",
2467
+ ptabAlignment: ptab["@_w:alignment"],
2468
+ ptabRelativeTo: ptab["@_w:relativeTo"],
2469
+ ptabLeader: ptab["@_w:leader"],
2470
+ });
2471
+ }
2472
+ else {
2473
+ content.push({ type: "positionTab" });
2474
+ }
2475
+ break;
2476
+ }
2287
2477
  case "w:rPr":
2288
2478
  break;
2289
2479
  }
@@ -2362,6 +2552,70 @@ class DocumentParser {
2362
2552
  if (runObj["w:noBreakHyphen"] !== undefined) {
2363
2553
  content.push({ type: "noBreakHyphen" });
2364
2554
  }
2555
+ if (runObj["w:lastRenderedPageBreak"] !== undefined) {
2556
+ content.push({ type: "lastRenderedPageBreak" });
2557
+ }
2558
+ if (runObj["w:separator"] !== undefined) {
2559
+ content.push({ type: "separator" });
2560
+ }
2561
+ if (runObj["w:continuationSeparator"] !== undefined) {
2562
+ content.push({ type: "continuationSeparator" });
2563
+ }
2564
+ if (runObj["w:pgNum"] !== undefined) {
2565
+ content.push({ type: "pageNumber" });
2566
+ }
2567
+ if (runObj["w:annotationRef"] !== undefined) {
2568
+ content.push({ type: "annotationRef" });
2569
+ }
2570
+ if (runObj["w:dayShort"] !== undefined) {
2571
+ content.push({ type: "dayShort" });
2572
+ }
2573
+ if (runObj["w:dayLong"] !== undefined) {
2574
+ content.push({ type: "dayLong" });
2575
+ }
2576
+ if (runObj["w:monthShort"] !== undefined) {
2577
+ content.push({ type: "monthShort" });
2578
+ }
2579
+ if (runObj["w:monthLong"] !== undefined) {
2580
+ content.push({ type: "monthLong" });
2581
+ }
2582
+ if (runObj["w:yearShort"] !== undefined) {
2583
+ content.push({ type: "yearShort" });
2584
+ }
2585
+ if (runObj["w:yearLong"] !== undefined) {
2586
+ content.push({ type: "yearLong" });
2587
+ }
2588
+ if (runObj["w:sym"] !== undefined) {
2589
+ const symElements = toArray(runObj["w:sym"]);
2590
+ for (const sym of symElements) {
2591
+ if (sym && typeof sym === "object") {
2592
+ content.push({
2593
+ type: "symbol",
2594
+ symbolFont: sym["@_w:font"],
2595
+ symbolChar: sym["@_w:char"],
2596
+ });
2597
+ }
2598
+ else {
2599
+ content.push({ type: "symbol" });
2600
+ }
2601
+ }
2602
+ }
2603
+ if (runObj["w:ptab"] !== undefined) {
2604
+ const ptabElements = toArray(runObj["w:ptab"]);
2605
+ for (const ptab of ptabElements) {
2606
+ if (ptab && typeof ptab === "object") {
2607
+ content.push({
2608
+ type: "positionTab",
2609
+ ptabAlignment: ptab["@_w:alignment"],
2610
+ ptabRelativeTo: ptab["@_w:relativeTo"],
2611
+ ptabLeader: ptab["@_w:leader"],
2612
+ });
2613
+ }
2614
+ else {
2615
+ content.push({ type: "positionTab" });
2616
+ }
2617
+ }
2618
+ }
2365
2619
  }
2366
2620
  const run = Run_1.Run.createFromContent(content, { cleanXmlFromText: false });
2367
2621
  this.parseRunPropertiesFromObject(runObj["w:rPr"], run);
@@ -2721,6 +2975,10 @@ class DocumentParser {
2721
2975
  run.setSmallCaps(true);
2722
2976
  if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:caps"]))
2723
2977
  run.setAllCaps(true);
2978
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:cs"]))
2979
+ run.setComplexScript(true);
2980
+ if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:webHidden"]))
2981
+ run.setWebHidden(true);
2724
2982
  if (rPrObj["w:u"]) {
2725
2983
  const uVal = rPrObj["w:u"]["@_w:val"];
2726
2984
  run.setUnderline(uVal || true);
@@ -2785,14 +3043,24 @@ class DocumentParser {
2785
3043
  run.setSuperscript(true);
2786
3044
  }
2787
3045
  if (rPrObj["w:rFonts"]) {
2788
- run.setFont(rPrObj["w:rFonts"]["@_w:ascii"]);
3046
+ const rFonts = rPrObj["w:rFonts"];
3047
+ if (rFonts["@_w:ascii"])
3048
+ run.setFont(rFonts["@_w:ascii"]);
3049
+ if (rFonts["@_w:hAnsi"])
3050
+ run.setFontHAnsi(rFonts["@_w:hAnsi"]);
3051
+ if (rFonts["@_w:eastAsia"])
3052
+ run.setFontEastAsia(rFonts["@_w:eastAsia"]);
3053
+ if (rFonts["@_w:cs"])
3054
+ run.setFontCs(rFonts["@_w:cs"]);
3055
+ if (rFonts["@_w:hint"])
3056
+ run.setFontHint(rFonts["@_w:hint"]);
2789
3057
  }
2790
3058
  if (rPrObj["w:sz"]) {
2791
- run.setSize(parseInt(rPrObj["w:sz"]["@_w:val"], 10) / 2);
3059
+ run.setSize((0, units_1.halfPointsToPoints)(parseInt(rPrObj["w:sz"]["@_w:val"], 10)));
2792
3060
  }
2793
3061
  if (rPrObj["w:szCs"]) {
2794
- const szCsVal = parseInt(rPrObj["w:szCs"]["@_w:val"], 10) / 2;
2795
- const sizeVal = rPrObj["w:sz"] ? parseInt(rPrObj["w:sz"]["@_w:val"], 10) / 2 : undefined;
3062
+ const szCsVal = (0, units_1.halfPointsToPoints)(parseInt(rPrObj["w:szCs"]["@_w:val"], 10));
3063
+ const sizeVal = rPrObj["w:sz"] ? (0, units_1.halfPointsToPoints)(parseInt(rPrObj["w:sz"]["@_w:val"], 10)) : undefined;
2796
3064
  if (sizeVal === undefined || szCsVal !== sizeVal) {
2797
3065
  run.setSizeCs(szCsVal);
2798
3066
  }
@@ -2844,10 +3112,10 @@ class DocumentParser {
2844
3112
  prevProps.font = prevRPr["w:rFonts"]["@_w:ascii"];
2845
3113
  }
2846
3114
  if (prevRPr["w:sz"]) {
2847
- prevProps.size = (0, parsingHelpers_1.safeParseInt)(prevRPr["w:sz"]["@_w:val"]) / 2;
3115
+ prevProps.size = (0, units_1.halfPointsToPoints)((0, parsingHelpers_1.safeParseInt)(prevRPr["w:sz"]["@_w:val"]));
2848
3116
  }
2849
3117
  if (prevRPr["w:szCs"]) {
2850
- const szCsVal = (0, parsingHelpers_1.safeParseInt)(prevRPr["w:szCs"]["@_w:val"]) / 2;
3118
+ const szCsVal = (0, units_1.halfPointsToPoints)((0, parsingHelpers_1.safeParseInt)(prevRPr["w:szCs"]["@_w:val"]));
2851
3119
  if (!prevRPr["w:sz"] || szCsVal !== prevProps.size) {
2852
3120
  prevProps.sizeCs = szCsVal;
2853
3121
  }
@@ -3037,10 +3305,14 @@ class DocumentParser {
3037
3305
  const docPrObj = imageObj["wp:docPr"];
3038
3306
  let name = "image";
3039
3307
  let description = "Image";
3308
+ let title = undefined;
3040
3309
  let docPrId = 1;
3041
3310
  if (docPrObj) {
3042
3311
  name = docPrObj["@_name"] || "image";
3043
3312
  description = docPrObj["@_descr"] || "Image";
3313
+ if (docPrObj["@_title"]) {
3314
+ title = String(docPrObj["@_title"]);
3315
+ }
3044
3316
  const idAttr = docPrObj["@_id"];
3045
3317
  if (idAttr) {
3046
3318
  docPrId = parseInt(String(idAttr), 10);
@@ -3057,12 +3329,23 @@ class DocumentParser {
3057
3329
  let anchor = undefined;
3058
3330
  if (isFloating && anchorObj) {
3059
3331
  const toBool = (val) => val === "1" || val === 1 || val === true;
3332
+ const toOptInt = (val) => {
3333
+ if (val === undefined || val === null)
3334
+ return undefined;
3335
+ const n = parseInt(String(val), 10);
3336
+ return isNaN(n) ? undefined : n;
3337
+ };
3060
3338
  anchor = {
3061
3339
  behindDoc: toBool(anchorObj["@_behindDoc"]),
3062
3340
  locked: toBool(anchorObj["@_locked"]),
3063
3341
  layoutInCell: toBool(anchorObj["@_layoutInCell"]),
3064
3342
  allowOverlap: toBool(anchorObj["@_allowOverlap"]),
3065
3343
  relativeHeight: parseInt(anchorObj["@_relativeHeight"] || "251658240", 10),
3344
+ simplePos: toBool(anchorObj["@_simplePos"]),
3345
+ distT: toOptInt(anchorObj["@_distT"]),
3346
+ distB: toOptInt(anchorObj["@_distB"]),
3347
+ distL: toOptInt(anchorObj["@_distL"]),
3348
+ distR: toOptInt(anchorObj["@_distR"]),
3066
3349
  };
3067
3350
  }
3068
3351
  const graphicObj = imageObj["a:graphic"];
@@ -3135,6 +3418,7 @@ class DocumentParser {
3135
3418
  height,
3136
3419
  name,
3137
3420
  description,
3421
+ title,
3138
3422
  effectExtent,
3139
3423
  wrap,
3140
3424
  position,
@@ -3266,6 +3550,20 @@ class DocumentParser {
3266
3550
  }
3267
3551
  return Object.keys(effects).length > 0 ? effects : undefined;
3268
3552
  }
3553
+ parseBorderElement(borderObj) {
3554
+ if (!borderObj)
3555
+ return undefined;
3556
+ const border = {
3557
+ style: (borderObj["@_w:val"] || "single"),
3558
+ };
3559
+ if (borderObj["@_w:sz"])
3560
+ border.size = parseInt(borderObj["@_w:sz"], 10);
3561
+ if (borderObj["@_w:space"])
3562
+ border.space = parseInt(borderObj["@_w:space"], 10);
3563
+ if (borderObj["@_w:color"])
3564
+ border.color = borderObj["@_w:color"];
3565
+ return border;
3566
+ }
3269
3567
  async parseTableFromObject(tableObj, relationshipManager, zipHandler, imageManager, rawTableXml) {
3270
3568
  try {
3271
3569
  const table = new Table_1.Table();
@@ -3467,6 +3765,18 @@ class DocumentParser {
3467
3765
  table.setAlignment(alignment);
3468
3766
  }
3469
3767
  }
3768
+ if (tblPrObj["w:tblStyleRowBandSize"]) {
3769
+ const val = parseInt(tblPrObj["w:tblStyleRowBandSize"]["@_w:val"] || "0", 10);
3770
+ if (val > 0) {
3771
+ table.setStyleRowBandSize(val);
3772
+ }
3773
+ }
3774
+ if (tblPrObj["w:tblStyleColBandSize"]) {
3775
+ const val = parseInt(tblPrObj["w:tblStyleColBandSize"]["@_w:val"] || "0", 10);
3776
+ if (val > 0) {
3777
+ table.setStyleColBandSize(val);
3778
+ }
3779
+ }
3470
3780
  if (tblPrObj["w:shd"]) {
3471
3781
  const shd = tblPrObj["w:shd"];
3472
3782
  const shading = {};
@@ -3483,32 +3793,18 @@ class DocumentParser {
3483
3793
  if (tblPrObj["w:tblBorders"]) {
3484
3794
  const bordersObj = tblPrObj["w:tblBorders"];
3485
3795
  const borders = {};
3486
- const parseBorder = (borderObj) => {
3487
- if (!borderObj)
3488
- return undefined;
3489
- const border = {
3490
- style: borderObj["@_w:val"] || "single",
3491
- };
3492
- if (borderObj["@_w:sz"])
3493
- border.size = parseInt(borderObj["@_w:sz"], 10);
3494
- if (borderObj["@_w:space"])
3495
- border.space = parseInt(borderObj["@_w:space"], 10);
3496
- if (borderObj["@_w:color"])
3497
- border.color = borderObj["@_w:color"];
3498
- return border;
3499
- };
3500
3796
  if (bordersObj["w:top"])
3501
- borders.top = parseBorder(bordersObj["w:top"]);
3797
+ borders.top = this.parseBorderElement(bordersObj["w:top"]);
3502
3798
  if (bordersObj["w:bottom"])
3503
- borders.bottom = parseBorder(bordersObj["w:bottom"]);
3799
+ borders.bottom = this.parseBorderElement(bordersObj["w:bottom"]);
3504
3800
  if (bordersObj["w:left"])
3505
- borders.left = parseBorder(bordersObj["w:left"]);
3801
+ borders.left = this.parseBorderElement(bordersObj["w:left"]);
3506
3802
  if (bordersObj["w:right"])
3507
- borders.right = parseBorder(bordersObj["w:right"]);
3803
+ borders.right = this.parseBorderElement(bordersObj["w:right"]);
3508
3804
  if (bordersObj["w:insideH"])
3509
- borders.insideH = parseBorder(bordersObj["w:insideH"]);
3805
+ borders.insideH = this.parseBorderElement(bordersObj["w:insideH"]);
3510
3806
  if (bordersObj["w:insideV"])
3511
- borders.insideV = parseBorder(bordersObj["w:insideV"]);
3807
+ borders.insideV = this.parseBorderElement(bordersObj["w:insideV"]);
3512
3808
  if (Object.keys(borders).length > 0) {
3513
3809
  table.setBorders(borders);
3514
3810
  }
@@ -3588,6 +3884,33 @@ class DocumentParser {
3588
3884
  row.setGridAfter(val);
3589
3885
  }
3590
3886
  }
3887
+ if (trPrObj["w:wBefore"]) {
3888
+ const w = parseInt(trPrObj["w:wBefore"]["@_w:w"] || "0", 10);
3889
+ const type = trPrObj["w:wBefore"]["@_w:type"] || "dxa";
3890
+ if (w > 0) {
3891
+ row.setWBefore(w, type);
3892
+ }
3893
+ }
3894
+ if (trPrObj["w:wAfter"]) {
3895
+ const w = parseInt(trPrObj["w:wAfter"]["@_w:w"] || "0", 10);
3896
+ const type = trPrObj["w:wAfter"]["@_w:type"] || "dxa";
3897
+ if (w > 0) {
3898
+ row.setWAfter(w, type);
3899
+ }
3900
+ }
3901
+ if (trPrObj["w:tblCellSpacing"]) {
3902
+ const w = parseInt(trPrObj["w:tblCellSpacing"]["@_w:w"] || "0", 10);
3903
+ const type = trPrObj["w:tblCellSpacing"]["@_w:type"] || "dxa";
3904
+ if (w > 0) {
3905
+ row.setRowCellSpacing(w, type);
3906
+ }
3907
+ }
3908
+ if (trPrObj["w:cnfStyle"]) {
3909
+ const val = trPrObj["w:cnfStyle"]["@_w:val"];
3910
+ if (val) {
3911
+ row.setCnfStyle(val);
3912
+ }
3913
+ }
3591
3914
  }
3592
3915
  parseTablePropertyExceptionsFromObject(tblPrExObj) {
3593
3916
  if (!tblPrExObj)
@@ -3682,28 +4005,14 @@ class DocumentParser {
3682
4005
  if (tcPr["w:tcBorders"]) {
3683
4006
  const bordersObj = tcPr["w:tcBorders"];
3684
4007
  const borders = {};
3685
- const parseBorder = (borderObj) => {
3686
- if (!borderObj)
3687
- return undefined;
3688
- const border = {
3689
- style: borderObj["@_w:val"] || "single",
3690
- };
3691
- if (borderObj["@_w:sz"])
3692
- border.size = parseInt(borderObj["@_w:sz"], 10);
3693
- if (borderObj["@_w:space"])
3694
- border.space = parseInt(borderObj["@_w:space"], 10);
3695
- if (borderObj["@_w:color"])
3696
- border.color = borderObj["@_w:color"];
3697
- return border;
3698
- };
3699
4008
  if (bordersObj["w:top"])
3700
- borders.top = parseBorder(bordersObj["w:top"]);
4009
+ borders.top = this.parseBorderElement(bordersObj["w:top"]);
3701
4010
  if (bordersObj["w:bottom"])
3702
- borders.bottom = parseBorder(bordersObj["w:bottom"]);
4011
+ borders.bottom = this.parseBorderElement(bordersObj["w:bottom"]);
3703
4012
  if (bordersObj["w:left"])
3704
- borders.left = parseBorder(bordersObj["w:left"]);
4013
+ borders.left = this.parseBorderElement(bordersObj["w:left"]);
3705
4014
  if (bordersObj["w:right"])
3706
- borders.right = parseBorder(bordersObj["w:right"]);
4015
+ borders.right = this.parseBorderElement(bordersObj["w:right"]);
3707
4016
  if (Object.keys(borders).length > 0) {
3708
4017
  cell.setBorders(borders);
3709
4018
  }
@@ -4792,6 +5101,14 @@ class DocumentParser {
4792
5101
  start: start ? parseInt(start, 10) : undefined,
4793
5102
  format: fmt,
4794
5103
  };
5104
+ const chapStyle = XMLParser_1.XMLParser.extractAttribute(pgNumType, "w:chapStyle");
5105
+ if (chapStyle) {
5106
+ sectionProps.chapStyle = parseInt(chapStyle, 10);
5107
+ }
5108
+ const chapSep = XMLParser_1.XMLParser.extractAttribute(pgNumType, "w:chapSep");
5109
+ if (chapSep) {
5110
+ sectionProps.chapSep = chapSep;
5111
+ }
4795
5112
  }
4796
5113
  }
4797
5114
  if (XMLParser_1.XMLParser.hasSelfClosingTag(sectPr, "w:titlePg")) {
@@ -4863,6 +5180,106 @@ class DocumentParser {
4863
5180
  }
4864
5181
  }
4865
5182
  }
5183
+ if (XMLParser_1.XMLParser.hasSelfClosingTag(sectPr, "w:bidi")) {
5184
+ sectionProps.bidi = true;
5185
+ }
5186
+ if (XMLParser_1.XMLParser.hasSelfClosingTag(sectPr, "w:rtlGutter")) {
5187
+ sectionProps.rtlGutter = true;
5188
+ }
5189
+ const docGridElements = XMLParser_1.XMLParser.extractElements(sectPr, "w:docGrid");
5190
+ if (docGridElements.length > 0) {
5191
+ const docGrid = docGridElements[0];
5192
+ if (docGrid) {
5193
+ const gridType = XMLParser_1.XMLParser.extractAttribute(docGrid, "w:type");
5194
+ const linePitch = XMLParser_1.XMLParser.extractAttribute(docGrid, "w:linePitch");
5195
+ const charSpace = XMLParser_1.XMLParser.extractAttribute(docGrid, "w:charSpace");
5196
+ sectionProps.docGrid = {};
5197
+ if (gridType)
5198
+ sectionProps.docGrid.type = gridType;
5199
+ if (linePitch)
5200
+ sectionProps.docGrid.linePitch = parseInt(linePitch, 10);
5201
+ if (charSpace)
5202
+ sectionProps.docGrid.charSpace = parseInt(charSpace, 10);
5203
+ }
5204
+ }
5205
+ const lnNumElements = XMLParser_1.XMLParser.extractElements(sectPr, "w:lnNumType");
5206
+ if (lnNumElements.length > 0) {
5207
+ const lnNum = lnNumElements[0];
5208
+ if (lnNum) {
5209
+ const countBy = XMLParser_1.XMLParser.extractAttribute(lnNum, "w:countBy");
5210
+ const start = XMLParser_1.XMLParser.extractAttribute(lnNum, "w:start");
5211
+ const distance = XMLParser_1.XMLParser.extractAttribute(lnNum, "w:distance");
5212
+ const restart = XMLParser_1.XMLParser.extractAttribute(lnNum, "w:restart");
5213
+ sectionProps.lineNumbering = {};
5214
+ if (countBy)
5215
+ sectionProps.lineNumbering.countBy = parseInt(countBy, 10);
5216
+ if (start)
5217
+ sectionProps.lineNumbering.start = parseInt(start, 10);
5218
+ if (distance)
5219
+ sectionProps.lineNumbering.distance = parseInt(distance, 10);
5220
+ if (restart)
5221
+ sectionProps.lineNumbering.restart = restart;
5222
+ }
5223
+ }
5224
+ const extractChildAttr = (parentXml, childTag, attr) => {
5225
+ const els = XMLParser_1.XMLParser.extractElements(parentXml, childTag);
5226
+ if (els.length > 0 && els[0])
5227
+ return XMLParser_1.XMLParser.extractAttribute(els[0], attr);
5228
+ return undefined;
5229
+ };
5230
+ const footnotePrElements = XMLParser_1.XMLParser.extractElements(sectPr, "w:footnotePr");
5231
+ if (footnotePrElements.length > 0 && footnotePrElements[0]) {
5232
+ const fnPr = footnotePrElements[0];
5233
+ const props = {};
5234
+ const pos = extractChildAttr(fnPr, "w:pos", "w:val");
5235
+ if (pos)
5236
+ props.position = pos;
5237
+ const fmt = extractChildAttr(fnPr, "w:numFmt", "w:val");
5238
+ if (fmt)
5239
+ props.numberFormat = fmt;
5240
+ const startVal = extractChildAttr(fnPr, "w:numStart", "w:val");
5241
+ if (startVal)
5242
+ props.startNumber = parseInt(startVal, 10);
5243
+ const restart = extractChildAttr(fnPr, "w:numRestart", "w:val");
5244
+ if (restart)
5245
+ props.restart = restart;
5246
+ if (Object.keys(props).length > 0)
5247
+ sectionProps.footnotePr = props;
5248
+ }
5249
+ const endnotePrElements = XMLParser_1.XMLParser.extractElements(sectPr, "w:endnotePr");
5250
+ if (endnotePrElements.length > 0 && endnotePrElements[0]) {
5251
+ const enPr = endnotePrElements[0];
5252
+ const props = {};
5253
+ const pos = extractChildAttr(enPr, "w:pos", "w:val");
5254
+ if (pos)
5255
+ props.position = pos;
5256
+ const fmt = extractChildAttr(enPr, "w:numFmt", "w:val");
5257
+ if (fmt)
5258
+ props.numberFormat = fmt;
5259
+ const startVal = extractChildAttr(enPr, "w:numStart", "w:val");
5260
+ if (startVal)
5261
+ props.startNumber = parseInt(startVal, 10);
5262
+ const restart = extractChildAttr(enPr, "w:numRestart", "w:val");
5263
+ if (restart)
5264
+ props.restart = restart;
5265
+ if (Object.keys(props).length > 0)
5266
+ sectionProps.endnotePr = props;
5267
+ }
5268
+ if (XMLParser_1.XMLParser.hasSelfClosingTag(sectPr, "w:noEndnote")) {
5269
+ sectionProps.noEndnote = true;
5270
+ }
5271
+ if (XMLParser_1.XMLParser.hasSelfClosingTag(sectPr, "w:formProt")) {
5272
+ sectionProps.formProt = true;
5273
+ }
5274
+ const printerElements = XMLParser_1.XMLParser.extractElements(sectPr, "w:printerSettings");
5275
+ if (printerElements.length > 0) {
5276
+ const printer = printerElements[0];
5277
+ if (printer) {
5278
+ const rId = XMLParser_1.XMLParser.extractAttribute(printer, "r:id");
5279
+ if (rId)
5280
+ sectionProps.printerSettingsId = rId;
5281
+ }
5282
+ }
4866
5283
  return new Section_1.Section(sectionProps);
4867
5284
  }
4868
5285
  catch (error) {
@@ -5118,7 +5535,7 @@ class DocumentParser {
5118
5535
  if (szElement) {
5119
5536
  const val = XMLParser_1.XMLParser.extractAttribute(`<w:sz${szElement}`, "w:val");
5120
5537
  if (val) {
5121
- formatting.size = parseInt(val, 10) / 2;
5538
+ formatting.size = (0, units_1.halfPointsToPoints)(parseInt(val, 10));
5122
5539
  }
5123
5540
  }
5124
5541
  const colorElement = XMLParser_1.XMLParser.extractSelfClosingTag(rPrXml, "w:color");