docxmlater 11.0.10 → 12.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.
- package/README.md +53 -13
- package/dist/core/Document.d.ts +29 -3
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +733 -170
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts +1 -0
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +77 -25
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +7 -3
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +427 -81
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +2 -2
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/Comment.d.ts +15 -1
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +67 -12
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts +4 -0
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +74 -16
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts +10 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +76 -34
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts +1 -0
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js +8 -4
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/Footer.d.ts +3 -1
- package/dist/elements/Footer.d.ts.map +1 -1
- package/dist/elements/Footer.js +39 -53
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.d.ts +3 -1
- package/dist/elements/Header.d.ts.map +1 -1
- package/dist/elements/Header.js +39 -53
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.d.ts +4 -2
- package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
- package/dist/elements/HeaderFooterManager.js +36 -6
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +6 -1
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +69 -44
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +33 -6
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts +1 -0
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +11 -0
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +3 -0
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +91 -26
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/Revision.d.ts +4 -0
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +369 -29
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/Run.d.ts +1 -0
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +24 -4
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +17 -7
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js +50 -42
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +9 -1
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +46 -6
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +2 -0
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +90 -42
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +1 -0
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +32 -13
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +5 -7
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableRow.d.ts +1 -0
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +16 -1
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +55 -42
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/esm/core/Document.js +735 -172
- package/dist/esm/core/Document.js.map +1 -1
- package/dist/esm/core/DocumentGenerator.js +77 -25
- package/dist/esm/core/DocumentGenerator.js.map +1 -1
- package/dist/esm/core/DocumentParser.js +427 -81
- package/dist/esm/core/DocumentParser.js.map +1 -1
- package/dist/esm/core/RelationshipManager.js +2 -2
- package/dist/esm/core/RelationshipManager.js.map +1 -1
- package/dist/esm/elements/Comment.js +67 -12
- package/dist/esm/elements/Comment.js.map +1 -1
- package/dist/esm/elements/CommentManager.js +74 -16
- package/dist/esm/elements/CommentManager.js.map +1 -1
- package/dist/esm/elements/EndnoteManager.js.map +1 -1
- package/dist/esm/elements/Field.js +77 -35
- package/dist/esm/elements/Field.js.map +1 -1
- package/dist/esm/elements/FieldHelpers.js +7 -4
- package/dist/esm/elements/FieldHelpers.js.map +1 -1
- package/dist/esm/elements/Footer.js +39 -53
- package/dist/esm/elements/Footer.js.map +1 -1
- package/dist/esm/elements/FootnoteManager.js.map +1 -1
- package/dist/esm/elements/Header.js +39 -53
- package/dist/esm/elements/Header.js.map +1 -1
- package/dist/esm/elements/HeaderFooterManager.js +36 -6
- package/dist/esm/elements/HeaderFooterManager.js.map +1 -1
- package/dist/esm/elements/Hyperlink.js +69 -44
- package/dist/esm/elements/Hyperlink.js.map +1 -1
- package/dist/esm/elements/Image.js +33 -6
- package/dist/esm/elements/Image.js.map +1 -1
- package/dist/esm/elements/ImageManager.js +11 -0
- package/dist/esm/elements/ImageManager.js.map +1 -1
- package/dist/esm/elements/Paragraph.js +91 -26
- package/dist/esm/elements/Paragraph.js.map +1 -1
- package/dist/esm/elements/Revision.js +369 -29
- package/dist/esm/elements/Revision.js.map +1 -1
- package/dist/esm/elements/Run.js +24 -4
- package/dist/esm/elements/Run.js.map +1 -1
- package/dist/esm/elements/Section.js +17 -7
- package/dist/esm/elements/Section.js.map +1 -1
- package/dist/esm/elements/Shape.js +50 -42
- package/dist/esm/elements/Shape.js.map +1 -1
- package/dist/esm/elements/StructuredDocumentTag.js +46 -6
- package/dist/esm/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/esm/elements/Table.js +90 -42
- package/dist/esm/elements/Table.js.map +1 -1
- package/dist/esm/elements/TableCell.js +32 -13
- package/dist/esm/elements/TableCell.js.map +1 -1
- package/dist/esm/elements/TableOfContents.js +5 -7
- package/dist/esm/elements/TableOfContents.js.map +1 -1
- package/dist/esm/elements/TableRow.js +16 -1
- package/dist/esm/elements/TableRow.js.map +1 -1
- package/dist/esm/elements/TextBox.js +55 -42
- package/dist/esm/elements/TextBox.js.map +1 -1
- package/dist/esm/formatting/AbstractNumbering.js +1 -1
- package/dist/esm/formatting/AbstractNumbering.js.map +1 -1
- package/dist/esm/formatting/NumberingLevel.js +8 -6
- package/dist/esm/formatting/NumberingLevel.js.map +1 -1
- package/dist/esm/formatting/NumberingManager.js +16 -1
- package/dist/esm/formatting/NumberingManager.js.map +1 -1
- package/dist/esm/formatting/Style.js +14 -0
- package/dist/esm/formatting/Style.js.map +1 -1
- package/dist/esm/formatting/StylesManager.js +14 -2
- package/dist/esm/formatting/StylesManager.js.map +1 -1
- package/dist/esm/helpers/CleanupHelper.js +103 -26
- package/dist/esm/helpers/CleanupHelper.js.map +1 -1
- package/dist/esm/images/ImageOptimizer.js +52 -4
- package/dist/esm/images/ImageOptimizer.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal.js +1 -1
- package/dist/esm/internal.js.map +1 -1
- package/dist/esm/processors/CompatibilityUpgrader.js +7 -1
- package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -1
- package/dist/esm/processors/InMemoryRevisionAcceptor.js +134 -13
- package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/esm/processors/RevisionWalker.js +223 -39
- package/dist/esm/processors/RevisionWalker.js.map +1 -1
- package/dist/esm/processors/SelectiveRevisionAcceptor.js +116 -17
- package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/esm/processors/acceptRevisions.js +20 -11
- package/dist/esm/processors/acceptRevisions.js.map +1 -1
- package/dist/esm/processors/cnfStyleDecoder.js +7 -7
- package/dist/esm/processors/cnfStyleDecoder.js.map +1 -1
- package/dist/esm/processors/stripTrackedChanges.js +16 -5
- package/dist/esm/processors/stripTrackedChanges.js.map +1 -1
- package/dist/esm/utils/deepClone.js +24 -11
- package/dist/esm/utils/deepClone.js.map +1 -1
- package/dist/esm/utils/units.js +1 -1
- package/dist/esm/utils/units.js.map +1 -1
- package/dist/esm/utils/validation.js +11 -23
- package/dist/esm/utils/validation.js.map +1 -1
- package/dist/esm/utils/xmlSanitization.js +131 -7
- package/dist/esm/utils/xmlSanitization.js.map +1 -1
- package/dist/esm/validation/RevisionAutoFixer.js +69 -55
- package/dist/esm/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/esm/validation/RevisionValidator.js +24 -20
- package/dist/esm/validation/RevisionValidator.js.map +1 -1
- package/dist/esm/xml/XMLBuilder.js +52 -20
- package/dist/esm/xml/XMLBuilder.js.map +1 -1
- package/dist/esm/xml/XMLParser.js +55 -13
- package/dist/esm/xml/XMLParser.js.map +1 -1
- package/dist/esm/zip/ZipHandler.js +37 -13
- package/dist/esm/zip/ZipHandler.js.map +1 -1
- package/dist/esm/zip/ZipReader.js +53 -6
- package/dist/esm/zip/ZipReader.js.map +1 -1
- package/dist/esm/zip/errors.js +7 -0
- package/dist/esm/zip/errors.js.map +1 -1
- package/dist/esm/zip/types.js +4 -0
- package/dist/esm/zip/types.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +1 -1
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +1 -1
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +8 -6
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +16 -1
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +14 -0
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +2 -0
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +14 -2
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +103 -26
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.d.ts.map +1 -1
- package/dist/images/ImageOptimizer.js +52 -4
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -1
- package/dist/internal.js.map +1 -1
- package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/processors/CompatibilityUpgrader.js +7 -1
- package/dist/processors/CompatibilityUpgrader.js.map +1 -1
- package/dist/processors/InMemoryRevisionAcceptor.d.ts +1 -0
- package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/processors/InMemoryRevisionAcceptor.js +135 -13
- package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/processors/RevisionWalker.d.ts +9 -3
- package/dist/processors/RevisionWalker.d.ts.map +1 -1
- package/dist/processors/RevisionWalker.js +223 -39
- package/dist/processors/RevisionWalker.js.map +1 -1
- package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/processors/SelectiveRevisionAcceptor.js +116 -17
- package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/processors/acceptRevisions.d.ts +1 -0
- package/dist/processors/acceptRevisions.d.ts.map +1 -1
- package/dist/processors/acceptRevisions.js +21 -11
- package/dist/processors/acceptRevisions.js.map +1 -1
- package/dist/processors/cnfStyleDecoder.d.ts.map +1 -1
- package/dist/processors/cnfStyleDecoder.js +7 -7
- package/dist/processors/cnfStyleDecoder.js.map +1 -1
- package/dist/processors/stripTrackedChanges.d.ts.map +1 -1
- package/dist/processors/stripTrackedChanges.js +16 -5
- package/dist/processors/stripTrackedChanges.js.map +1 -1
- package/dist/utils/deepClone.d.ts.map +1 -1
- package/dist/utils/deepClone.js +24 -11
- package/dist/utils/deepClone.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/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +11 -23
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.d.ts +2 -0
- package/dist/utils/xmlSanitization.d.ts.map +1 -1
- package/dist/utils/xmlSanitization.js +133 -7
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts +6 -2
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +68 -54
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts +2 -0
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +26 -21
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +1 -0
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +52 -20
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts +1 -0
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +55 -13
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js +37 -13
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +52 -5
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/errors.d.ts +3 -0
- package/dist/zip/errors.d.ts.map +1 -1
- package/dist/zip/errors.js +9 -1
- package/dist/zip/errors.js.map +1 -1
- package/dist/zip/types.d.ts +4 -0
- package/dist/zip/types.d.ts.map +1 -1
- package/dist/zip/types.js +4 -0
- package/dist/zip/types.js.map +1 -1
- package/package.json +2 -2
- package/src/core/Document.ts +1184 -242
- package/src/core/DocumentGenerator.ts +106 -26
- package/src/core/DocumentParser.ts +681 -114
- package/src/core/RelationshipManager.ts +446 -442
- package/src/elements/Comment.ts +123 -18
- package/src/elements/CommentManager.ts +121 -22
- package/src/elements/EndnoteManager.ts +4 -1
- package/src/elements/Field.ts +134 -43
- package/src/elements/FieldHelpers.ts +20 -4
- package/src/elements/Footer.ts +62 -67
- package/src/elements/FootnoteManager.ts +4 -1
- package/src/elements/Header.ts +62 -67
- package/src/elements/HeaderFooterManager.ts +56 -8
- package/src/elements/Hyperlink.ts +150 -55
- package/src/elements/Image.ts +51 -7
- package/src/elements/ImageManager.ts +24 -0
- package/src/elements/Paragraph.ts +161 -40
- package/src/elements/Revision.ts +446 -47
- package/src/elements/Run.ts +44 -6
- package/src/elements/Section.ts +25 -9
- package/src/elements/Shape.ts +52 -44
- package/src/elements/StructuredDocumentTag.ts +83 -8
- package/src/elements/Table.ts +151 -50
- package/src/elements/TableCell.ts +57 -17
- package/src/elements/TableOfContents.ts +10 -9
- package/src/elements/TableRow.ts +35 -3
- package/src/elements/TextBox.ts +58 -43
- package/src/formatting/AbstractNumbering.ts +4 -2
- package/src/formatting/NumberingLevel.ts +50 -12
- package/src/formatting/NumberingManager.ts +32 -3
- package/src/formatting/Style.ts +14 -0
- package/src/formatting/StylesManager.ts +29 -2
- package/src/helpers/CleanupHelper.ts +122 -30
- package/src/images/ImageOptimizer.ts +64 -5
- package/src/index.ts +7 -0
- package/src/internal.ts +1 -0
- package/src/processors/CompatibilityUpgrader.ts +15 -2
- package/src/processors/InMemoryRevisionAcceptor.ts +276 -17
- package/src/processors/RevisionWalker.ts +390 -46
- package/src/processors/SelectiveRevisionAcceptor.ts +164 -28
- package/src/processors/acceptRevisions.ts +67 -17
- package/src/processors/cnfStyleDecoder.ts +18 -12
- package/src/processors/stripTrackedChanges.ts +47 -10
- package/src/utils/deepClone.ts +48 -14
- package/src/utils/units.ts +3 -1
- package/src/utils/validation.ts +30 -32
- package/src/utils/xmlSanitization.ts +218 -22
- package/src/validation/RevisionAutoFixer.ts +109 -65
- package/src/validation/RevisionValidator.ts +48 -23
- package/src/xml/XMLBuilder.ts +82 -22
- package/src/xml/XMLParser.ts +87 -20
- package/src/zip/ZipHandler.ts +61 -21
- package/src/zip/ZipReader.ts +135 -13
- package/src/zip/errors.ts +15 -0
- package/src/zip/types.ts +44 -2
|
@@ -68,6 +68,7 @@ const diagnostics_js_1 = require("../utils/diagnostics.js");
|
|
|
68
68
|
const logger_js_1 = require("../utils/logger.js");
|
|
69
69
|
const parsingHelpers_js_1 = require("../utils/parsingHelpers.js");
|
|
70
70
|
const units_js_1 = require("../utils/units.js");
|
|
71
|
+
const xmlSanitization_js_1 = require("../utils/xmlSanitization.js");
|
|
71
72
|
function getLogger() {
|
|
72
73
|
return (0, logger_js_1.createScopedLogger)((0, logger_js_1.getGlobalLogger)(), 'DocumentParser');
|
|
73
74
|
}
|
|
@@ -249,9 +250,13 @@ class DocumentParser {
|
|
|
249
250
|
const parsed = XMLParser_js_1.XMLParser.parseToObject(elementXml, {
|
|
250
251
|
trimValues: false,
|
|
251
252
|
});
|
|
252
|
-
const sdt = await this.parseSDTFromObject(parsed['w:sdt'], relationshipManager, zipHandler, imageManager);
|
|
253
|
-
if (sdt)
|
|
253
|
+
const sdt = await this.parseSDTFromObject(parsed['w:sdt'], relationshipManager, zipHandler, imageManager, elementXml);
|
|
254
|
+
if (sdt) {
|
|
254
255
|
bodyElements.push(sdt);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
bodyElements.push(new PreservedElement_js_1.PreservedElement(elementXml, 'sdt', 'block'));
|
|
259
|
+
}
|
|
255
260
|
pos = next.pos + elementXml.length;
|
|
256
261
|
}
|
|
257
262
|
else {
|
|
@@ -677,6 +682,7 @@ class DocumentParser {
|
|
|
677
682
|
let permEndIndex = 0;
|
|
678
683
|
let oMathIndex = 0;
|
|
679
684
|
let rubyIndex = 0;
|
|
685
|
+
let sdtIndex = 0;
|
|
680
686
|
let commentRangeStartIndex = 0;
|
|
681
687
|
let commentRangeEndIndex = 0;
|
|
682
688
|
const findClosingTagEnd = (content, tagName, startPos) => {
|
|
@@ -828,6 +834,14 @@ class DocumentParser {
|
|
|
828
834
|
});
|
|
829
835
|
searchPos = selfClosing ? tagEnd + 1 : findClosingTagEnd(paraContent, 'w:ruby', tagEnd);
|
|
830
836
|
}
|
|
837
|
+
else if (tagName === 'w:sdt') {
|
|
838
|
+
children.push({
|
|
839
|
+
type: 'w:sdt',
|
|
840
|
+
pos: tagStart,
|
|
841
|
+
index: sdtIndex++,
|
|
842
|
+
});
|
|
843
|
+
searchPos = selfClosing ? tagEnd + 1 : findClosingTagEnd(paraContent, 'w:sdt', tagEnd);
|
|
844
|
+
}
|
|
831
845
|
else {
|
|
832
846
|
searchPos = tagEnd + 1;
|
|
833
847
|
}
|
|
@@ -908,12 +922,35 @@ class DocumentParser {
|
|
|
908
922
|
paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
|
|
909
923
|
}
|
|
910
924
|
}
|
|
925
|
+
else if (runObj['mc:AlternateContent']) {
|
|
926
|
+
const runXml = extractRunXmlAtPosition(child.pos);
|
|
927
|
+
if (runXml) {
|
|
928
|
+
paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
|
|
929
|
+
}
|
|
930
|
+
}
|
|
911
931
|
else if (runObj['w:drawing']) {
|
|
932
|
+
let imageRun = null;
|
|
912
933
|
if (zipHandler && imageManager) {
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
934
|
+
imageRun = await this.parseDrawingFromObject(runObj['w:drawing'], zipHandler, relationshipManager, imageManager);
|
|
935
|
+
}
|
|
936
|
+
if (imageRun) {
|
|
937
|
+
this.parseRunPropertiesFromObject(runObj['w:rPr'], imageRun);
|
|
938
|
+
paragraph.addRun(imageRun);
|
|
939
|
+
if (runObj['w:t'] ||
|
|
940
|
+
runObj['w:tab'] ||
|
|
941
|
+
runObj['w:br'] ||
|
|
942
|
+
runObj['w:cr'] ||
|
|
943
|
+
runObj['w:noBreakHyphen']) {
|
|
944
|
+
const siblingRun = this.parseRunFromObject(runObj);
|
|
945
|
+
if (siblingRun) {
|
|
946
|
+
paragraph.addRun(siblingRun);
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
else {
|
|
951
|
+
const runXml = extractRunXmlAtPosition(child.pos);
|
|
952
|
+
if (runXml) {
|
|
953
|
+
paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
|
|
917
954
|
}
|
|
918
955
|
}
|
|
919
956
|
}
|
|
@@ -1100,6 +1137,12 @@ class DocumentParser {
|
|
|
1100
1137
|
paragraph.addContent(new PreservedElement_js_1.PreservedElement(elementXml, child.type, 'inline'));
|
|
1101
1138
|
}
|
|
1102
1139
|
}
|
|
1140
|
+
else if (child.type === 'w:sdt') {
|
|
1141
|
+
const sdtXml = extractElementXmlAtPosition(child.pos, 'w:sdt');
|
|
1142
|
+
if (sdtXml) {
|
|
1143
|
+
paragraph.addContent(new PreservedElement_js_1.PreservedElement(sdtXml, 'w:sdt', 'inline'));
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1103
1146
|
}
|
|
1104
1147
|
}
|
|
1105
1148
|
async parseRevisionFromXml(revisionXml, tagName, relationshipManager, zipHandler, imageManager) {
|
|
@@ -1134,19 +1177,63 @@ class DocumentParser {
|
|
|
1134
1177
|
const hyperlinkXmls = XMLParser_js_1.XMLParser.extractElements(revisionXml, 'w:hyperlink');
|
|
1135
1178
|
let xmlWithoutHyperlinks = revisionXml;
|
|
1136
1179
|
for (const hyperlinkXml of hyperlinkXmls) {
|
|
1137
|
-
xmlWithoutHyperlinks = xmlWithoutHyperlinks
|
|
1180
|
+
xmlWithoutHyperlinks = xmlWithoutHyperlinks
|
|
1181
|
+
.split(hyperlinkXml)
|
|
1182
|
+
.join(' '.repeat(hyperlinkXml.length));
|
|
1138
1183
|
}
|
|
1139
1184
|
const runXmls = XMLParser_js_1.XMLParser.extractElements(xmlWithoutHyperlinks, 'w:r');
|
|
1140
|
-
const
|
|
1185
|
+
const orderedChildren = [];
|
|
1186
|
+
let runCursor = 0;
|
|
1141
1187
|
for (const runXml of runXmls) {
|
|
1188
|
+
const pos = xmlWithoutHyperlinks.indexOf(runXml, runCursor);
|
|
1189
|
+
orderedChildren.push({ pos: pos === -1 ? runCursor : pos, type: 'w:r', xml: runXml });
|
|
1190
|
+
if (pos !== -1) {
|
|
1191
|
+
runCursor = pos + runXml.length;
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
let hyperlinkCursor = 0;
|
|
1195
|
+
for (const hyperlinkXml of hyperlinkXmls) {
|
|
1196
|
+
const pos = revisionXml.indexOf(hyperlinkXml, hyperlinkCursor);
|
|
1197
|
+
orderedChildren.push({
|
|
1198
|
+
pos: pos === -1 ? hyperlinkCursor : pos,
|
|
1199
|
+
type: 'w:hyperlink',
|
|
1200
|
+
xml: hyperlinkXml,
|
|
1201
|
+
});
|
|
1202
|
+
if (pos !== -1) {
|
|
1203
|
+
hyperlinkCursor = pos + hyperlinkXml.length;
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
orderedChildren.sort((a, b) => a.pos - b.pos);
|
|
1207
|
+
const content = [];
|
|
1208
|
+
for (const child of orderedChildren) {
|
|
1209
|
+
if (child.type === 'w:hyperlink') {
|
|
1210
|
+
const hyperlinkObj = XMLParser_js_1.XMLParser.parseToObject(child.xml, { trimValues: false });
|
|
1211
|
+
const hyperlinkResult = this.parseHyperlinkFromObject(hyperlinkObj['w:hyperlink'], relationshipManager);
|
|
1212
|
+
if (hyperlinkResult.hyperlink) {
|
|
1213
|
+
content.push(hyperlinkResult.hyperlink);
|
|
1214
|
+
}
|
|
1215
|
+
result.bookmarkStarts.push(...hyperlinkResult.bookmarkStarts);
|
|
1216
|
+
result.bookmarkEnds.push(...hyperlinkResult.bookmarkEnds);
|
|
1217
|
+
continue;
|
|
1218
|
+
}
|
|
1219
|
+
const runXml = child.xml;
|
|
1142
1220
|
const runObj = XMLParser_js_1.XMLParser.parseToObject(runXml, { trimValues: false });
|
|
1143
1221
|
const runElement = runObj['w:r'];
|
|
1144
1222
|
if (runElement?.['w:drawing']) {
|
|
1223
|
+
let imageRun = null;
|
|
1145
1224
|
if (zipHandler && imageManager) {
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1225
|
+
imageRun = await this.parseDrawingFromObject(runElement['w:drawing'], zipHandler, relationshipManager, imageManager);
|
|
1226
|
+
}
|
|
1227
|
+
if (imageRun) {
|
|
1228
|
+
imageRun.setRawRunXml(runXml);
|
|
1229
|
+
content.push(imageRun);
|
|
1230
|
+
}
|
|
1231
|
+
else {
|
|
1232
|
+
const drawingXmls = XMLParser_js_1.XMLParser.extractElements(runXml, 'w:drawing');
|
|
1233
|
+
if (drawingXmls.length > 0 && drawingXmls[0]) {
|
|
1234
|
+
const run = Run_js_1.Run.createFromContent([{ type: 'vml', rawXml: drawingXmls[0] }]);
|
|
1235
|
+
this.parseRunPropertiesFromObject(runElement['w:rPr'], run);
|
|
1236
|
+
content.push(run);
|
|
1150
1237
|
}
|
|
1151
1238
|
}
|
|
1152
1239
|
}
|
|
@@ -1157,15 +1244,6 @@ class DocumentParser {
|
|
|
1157
1244
|
}
|
|
1158
1245
|
}
|
|
1159
1246
|
}
|
|
1160
|
-
for (const hyperlinkXml of hyperlinkXmls) {
|
|
1161
|
-
const hyperlinkObj = XMLParser_js_1.XMLParser.parseToObject(hyperlinkXml, { trimValues: false });
|
|
1162
|
-
const hyperlinkResult = this.parseHyperlinkFromObject(hyperlinkObj['w:hyperlink'], relationshipManager);
|
|
1163
|
-
if (hyperlinkResult.hyperlink) {
|
|
1164
|
-
content.push(hyperlinkResult.hyperlink);
|
|
1165
|
-
}
|
|
1166
|
-
result.bookmarkStarts.push(...hyperlinkResult.bookmarkStarts);
|
|
1167
|
-
result.bookmarkEnds.push(...hyperlinkResult.bookmarkEnds);
|
|
1168
|
-
}
|
|
1169
1247
|
const bookmarkStartXmls = XMLParser_js_1.XMLParser.extractElements(xmlWithoutHyperlinks, 'w:bookmarkStart');
|
|
1170
1248
|
const bookmarkEndXmls = XMLParser_js_1.XMLParser.extractElements(xmlWithoutHyperlinks, 'w:bookmarkEnd');
|
|
1171
1249
|
for (const bookmarkXml of bookmarkStartXmls) {
|
|
@@ -1206,18 +1284,33 @@ class DocumentParser {
|
|
|
1206
1284
|
return result;
|
|
1207
1285
|
}
|
|
1208
1286
|
}
|
|
1209
|
-
parseCommentsXml(commentsXml) {
|
|
1287
|
+
parseCommentsXml(commentsXml, commentsExtendedXml) {
|
|
1210
1288
|
const comments = [];
|
|
1289
|
+
const doneByParaId = commentsExtendedXml
|
|
1290
|
+
? this.parseCommentsExtendedDone(commentsExtendedXml)
|
|
1291
|
+
: undefined;
|
|
1211
1292
|
const commentXmls = XMLParser_js_1.XMLParser.extractElements(commentsXml, 'w:comment');
|
|
1212
1293
|
for (const commentXml of commentXmls) {
|
|
1213
|
-
const comment = this.parseCommentFromXml(commentXml);
|
|
1294
|
+
const comment = this.parseCommentFromXml(commentXml, doneByParaId);
|
|
1214
1295
|
if (comment) {
|
|
1215
1296
|
comments.push(comment);
|
|
1216
1297
|
}
|
|
1217
1298
|
}
|
|
1218
1299
|
return comments;
|
|
1219
1300
|
}
|
|
1220
|
-
|
|
1301
|
+
parseCommentsExtendedDone(commentsExtendedXml) {
|
|
1302
|
+
const doneByParaId = new Map();
|
|
1303
|
+
for (const commentExXml of XMLParser_js_1.XMLParser.extractElements(commentsExtendedXml, 'w15:commentEx')) {
|
|
1304
|
+
const paraId = XMLParser_js_1.XMLParser.extractAttribute(commentExXml, 'w15:paraId');
|
|
1305
|
+
if (!paraId) {
|
|
1306
|
+
continue;
|
|
1307
|
+
}
|
|
1308
|
+
const done = (0, parsingHelpers_js_1.parseOnOffAttribute)(XMLParser_js_1.XMLParser.extractAttribute(commentExXml, 'w15:done'));
|
|
1309
|
+
doneByParaId.set(paraId.toUpperCase(), done);
|
|
1310
|
+
}
|
|
1311
|
+
return doneByParaId;
|
|
1312
|
+
}
|
|
1313
|
+
parseCommentFromXml(commentXml, doneByParaId) {
|
|
1221
1314
|
try {
|
|
1222
1315
|
const idAttr = XMLParser_js_1.XMLParser.extractAttribute(commentXml, 'w:id');
|
|
1223
1316
|
const author = XMLParser_js_1.XMLParser.extractAttribute(commentXml, 'w:author') || 'Unknown';
|
|
@@ -1233,15 +1326,33 @@ class DocumentParser {
|
|
|
1233
1326
|
const id = parseInt(idAttr, 10);
|
|
1234
1327
|
const date = dateAttr ? new Date(dateAttr) : new Date();
|
|
1235
1328
|
const parentId = parentIdAttr ? parseInt(parentIdAttr, 10) : undefined;
|
|
1236
|
-
|
|
1329
|
+
let done = (0, parsingHelpers_js_1.parseOnOffAttribute)(doneAttr);
|
|
1237
1330
|
const runs = [];
|
|
1238
|
-
const
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1331
|
+
const paragraphs = [];
|
|
1332
|
+
const paraXmls = XMLParser_js_1.XMLParser.extractElements(commentXml, 'w:p');
|
|
1333
|
+
const runSources = paraXmls.length > 0 ? paraXmls : [commentXml];
|
|
1334
|
+
if (doneByParaId && paraXmls.length > 0) {
|
|
1335
|
+
const lastParaXml = paraXmls[paraXmls.length - 1];
|
|
1336
|
+
const lastParaId = XMLParser_js_1.XMLParser.extractAttribute(lastParaXml, 'w14:paraId');
|
|
1337
|
+
if (lastParaId) {
|
|
1338
|
+
const extendedDone = doneByParaId.get(lastParaId.toUpperCase());
|
|
1339
|
+
if (extendedDone !== undefined) {
|
|
1340
|
+
done = extendedDone;
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
for (const sourceXml of runSources) {
|
|
1345
|
+
const content = this.parseCommentParagraphContent(sourceXml);
|
|
1346
|
+
for (const item of content) {
|
|
1347
|
+
if (item instanceof Run_js_1.Run) {
|
|
1348
|
+
runs.push(item);
|
|
1349
|
+
}
|
|
1350
|
+
else {
|
|
1351
|
+
runs.push(...item.runs);
|
|
1352
|
+
}
|
|
1244
1353
|
}
|
|
1354
|
+
const pPr = paraXmls.length > 0 ? XMLParser_js_1.XMLParser.extractElements(sourceXml, 'w:pPr')[0] : undefined;
|
|
1355
|
+
paragraphs.push({ pPr, content });
|
|
1245
1356
|
}
|
|
1246
1357
|
const comment = new Comment_js_1.Comment({
|
|
1247
1358
|
id,
|
|
@@ -1252,6 +1363,9 @@ class DocumentParser {
|
|
|
1252
1363
|
parentId,
|
|
1253
1364
|
done,
|
|
1254
1365
|
});
|
|
1366
|
+
if (paraXmls.length > 0) {
|
|
1367
|
+
comment.setParagraphs(paragraphs);
|
|
1368
|
+
}
|
|
1255
1369
|
return comment;
|
|
1256
1370
|
}
|
|
1257
1371
|
catch (error) {
|
|
@@ -1259,18 +1373,59 @@ class DocumentParser {
|
|
|
1259
1373
|
return null;
|
|
1260
1374
|
}
|
|
1261
1375
|
}
|
|
1262
|
-
|
|
1376
|
+
parseCommentParagraphContent(sourceXml) {
|
|
1377
|
+
const positioned = [];
|
|
1378
|
+
const hyperlinkRanges = [];
|
|
1379
|
+
let hyperlinkCursor = 0;
|
|
1380
|
+
for (const hyperlinkXml of XMLParser_js_1.XMLParser.extractElements(sourceXml, 'w:hyperlink')) {
|
|
1381
|
+
const start = sourceXml.indexOf(hyperlinkXml, hyperlinkCursor);
|
|
1382
|
+
if (start === -1) {
|
|
1383
|
+
continue;
|
|
1384
|
+
}
|
|
1385
|
+
hyperlinkCursor = start + hyperlinkXml.length;
|
|
1386
|
+
hyperlinkRanges.push({ start, end: hyperlinkCursor });
|
|
1387
|
+
const innerRuns = [];
|
|
1388
|
+
for (const runXml of XMLParser_js_1.XMLParser.extractElements(hyperlinkXml, 'w:r')) {
|
|
1389
|
+
const run = this.parseCommentRun(runXml);
|
|
1390
|
+
if (run) {
|
|
1391
|
+
innerRuns.push(run);
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
positioned.push({ pos: start, item: { rawXml: hyperlinkXml, runs: innerRuns } });
|
|
1395
|
+
}
|
|
1396
|
+
let runCursor = 0;
|
|
1397
|
+
for (const runXml of XMLParser_js_1.XMLParser.extractElements(sourceXml, 'w:r')) {
|
|
1398
|
+
const start = sourceXml.indexOf(runXml, runCursor);
|
|
1399
|
+
if (start === -1) {
|
|
1400
|
+
continue;
|
|
1401
|
+
}
|
|
1402
|
+
runCursor = start + runXml.length;
|
|
1403
|
+
if (hyperlinkRanges.some((range) => start >= range.start && start < range.end)) {
|
|
1404
|
+
continue;
|
|
1405
|
+
}
|
|
1406
|
+
const run = this.parseCommentRun(runXml);
|
|
1407
|
+
if (run) {
|
|
1408
|
+
positioned.push({ pos: start, item: run });
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
return positioned.sort((a, b) => a.pos - b.pos).map((entry) => entry.item);
|
|
1412
|
+
}
|
|
1413
|
+
parseCommentRun(runXml) {
|
|
1414
|
+
const runObj = XMLParser_js_1.XMLParser.parseToObject(runXml, { trimValues: false });
|
|
1415
|
+
return this.parseRunFromObject(runObj['w:r']);
|
|
1416
|
+
}
|
|
1417
|
+
parseFootnotesXml(footnotesXml, partRels) {
|
|
1263
1418
|
const footnotes = [];
|
|
1264
1419
|
const footnoteXmls = XMLParser_js_1.XMLParser.extractElements(footnotesXml, 'w:footnote');
|
|
1265
1420
|
for (const footnoteXml of footnoteXmls) {
|
|
1266
|
-
const footnote = this.parseFootnoteFromXml(footnoteXml);
|
|
1421
|
+
const footnote = this.parseFootnoteFromXml(footnoteXml, partRels);
|
|
1267
1422
|
if (footnote) {
|
|
1268
1423
|
footnotes.push(footnote);
|
|
1269
1424
|
}
|
|
1270
1425
|
}
|
|
1271
1426
|
return footnotes;
|
|
1272
1427
|
}
|
|
1273
|
-
parseFootnoteFromXml(footnoteXml) {
|
|
1428
|
+
parseFootnoteFromXml(footnoteXml, partRels) {
|
|
1274
1429
|
try {
|
|
1275
1430
|
const idAttr = XMLParser_js_1.XMLParser.extractAttribute(footnoteXml, 'w:id');
|
|
1276
1431
|
const typeAttr = XMLParser_js_1.XMLParser.extractAttribute(footnoteXml, 'w:type');
|
|
@@ -1291,7 +1446,7 @@ class DocumentParser {
|
|
|
1291
1446
|
const footnote = new Footnote_js_1.Footnote({ id, type });
|
|
1292
1447
|
const paraXmls = XMLParser_js_1.XMLParser.extractElements(footnoteXml, 'w:p');
|
|
1293
1448
|
for (const paraXml of paraXmls) {
|
|
1294
|
-
const para = this.parseNoteParaFromXml(paraXml);
|
|
1449
|
+
const para = this.parseNoteParaFromXml(paraXml, partRels);
|
|
1295
1450
|
if (para) {
|
|
1296
1451
|
footnote.addParagraph(para);
|
|
1297
1452
|
}
|
|
@@ -1303,18 +1458,18 @@ class DocumentParser {
|
|
|
1303
1458
|
return null;
|
|
1304
1459
|
}
|
|
1305
1460
|
}
|
|
1306
|
-
parseEndnotesXml(endnotesXml) {
|
|
1461
|
+
parseEndnotesXml(endnotesXml, partRels) {
|
|
1307
1462
|
const endnotes = [];
|
|
1308
1463
|
const endnoteXmls = XMLParser_js_1.XMLParser.extractElements(endnotesXml, 'w:endnote');
|
|
1309
1464
|
for (const endnoteXml of endnoteXmls) {
|
|
1310
|
-
const endnote = this.parseEndnoteFromXml(endnoteXml);
|
|
1465
|
+
const endnote = this.parseEndnoteFromXml(endnoteXml, partRels);
|
|
1311
1466
|
if (endnote) {
|
|
1312
1467
|
endnotes.push(endnote);
|
|
1313
1468
|
}
|
|
1314
1469
|
}
|
|
1315
1470
|
return endnotes;
|
|
1316
1471
|
}
|
|
1317
|
-
parseEndnoteFromXml(endnoteXml) {
|
|
1472
|
+
parseEndnoteFromXml(endnoteXml, partRels) {
|
|
1318
1473
|
try {
|
|
1319
1474
|
const idAttr = XMLParser_js_1.XMLParser.extractAttribute(endnoteXml, 'w:id');
|
|
1320
1475
|
const typeAttr = XMLParser_js_1.XMLParser.extractAttribute(endnoteXml, 'w:type');
|
|
@@ -1335,7 +1490,7 @@ class DocumentParser {
|
|
|
1335
1490
|
const endnote = new Endnote_js_1.Endnote({ id, type });
|
|
1336
1491
|
const paraXmls = XMLParser_js_1.XMLParser.extractElements(endnoteXml, 'w:p');
|
|
1337
1492
|
for (const paraXml of paraXmls) {
|
|
1338
|
-
const para = this.parseNoteParaFromXml(paraXml);
|
|
1493
|
+
const para = this.parseNoteParaFromXml(paraXml, partRels);
|
|
1339
1494
|
if (para) {
|
|
1340
1495
|
endnote.addParagraph(para);
|
|
1341
1496
|
}
|
|
@@ -1347,15 +1502,60 @@ class DocumentParser {
|
|
|
1347
1502
|
return null;
|
|
1348
1503
|
}
|
|
1349
1504
|
}
|
|
1350
|
-
parseNoteParaFromXml(paraXml) {
|
|
1505
|
+
parseNoteParaFromXml(paraXml, partRels) {
|
|
1351
1506
|
try {
|
|
1352
1507
|
const para = new Paragraph_js_1.Paragraph();
|
|
1353
|
-
const
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1508
|
+
const paraObj = XMLParser_js_1.XMLParser.parseToObject(paraXml, { trimValues: false });
|
|
1509
|
+
const pElement = paraObj['w:p'];
|
|
1510
|
+
if (pElement?.['w:pPr']) {
|
|
1511
|
+
this.parseParagraphPropertiesFromObject(pElement['w:pPr'], para);
|
|
1512
|
+
}
|
|
1513
|
+
const pPrEnd = paraXml.indexOf('</w:pPr>');
|
|
1514
|
+
const contentStart = pPrEnd !== -1 ? pPrEnd + '</w:pPr>'.length : paraXml.indexOf('>') + 1;
|
|
1515
|
+
const contentEnd = paraXml.lastIndexOf('</w:p>');
|
|
1516
|
+
if (contentEnd <= contentStart) {
|
|
1517
|
+
return para;
|
|
1518
|
+
}
|
|
1519
|
+
const content = paraXml.substring(contentStart, contentEnd);
|
|
1520
|
+
let searchPos = 0;
|
|
1521
|
+
while (searchPos < content.length) {
|
|
1522
|
+
const tagStart = content.indexOf('<', searchPos);
|
|
1523
|
+
if (tagStart === -1)
|
|
1524
|
+
break;
|
|
1525
|
+
const tagEnd = content.indexOf('>', tagStart);
|
|
1526
|
+
if (tagEnd === -1)
|
|
1527
|
+
break;
|
|
1528
|
+
const tagBody = content.substring(tagStart + 1, tagEnd);
|
|
1529
|
+
const tagName = tagBody.split(/[\s/>]/)[0];
|
|
1530
|
+
const selfClosing = tagBody.endsWith('/');
|
|
1531
|
+
if ((tagName === 'w:r' || tagName === 'w:hyperlink') && !selfClosing) {
|
|
1532
|
+
const closingTag = `</${tagName}>`;
|
|
1533
|
+
const closingPos = content.indexOf(closingTag, tagEnd);
|
|
1534
|
+
const childEnd = closingPos === -1 ? tagEnd + 1 : closingPos + closingTag.length;
|
|
1535
|
+
const childXml = content.substring(tagStart, childEnd);
|
|
1536
|
+
const childObj = XMLParser_js_1.XMLParser.parseToObject(childXml, { trimValues: false });
|
|
1537
|
+
if (tagName === 'w:r') {
|
|
1538
|
+
const run = this.parseRunFromObject(childObj['w:r']);
|
|
1539
|
+
if (run) {
|
|
1540
|
+
para.addRun(run);
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
else {
|
|
1544
|
+
const result = this.parseHyperlinkFromObject(childObj['w:hyperlink'], partRels ?? RelationshipManager_js_1.RelationshipManager.create());
|
|
1545
|
+
if (result.hyperlink) {
|
|
1546
|
+
para.addHyperlink(result.hyperlink);
|
|
1547
|
+
}
|
|
1548
|
+
for (const bookmark of result.bookmarkStarts) {
|
|
1549
|
+
para.addBookmarkStart(bookmark);
|
|
1550
|
+
}
|
|
1551
|
+
for (const bookmark of result.bookmarkEnds) {
|
|
1552
|
+
para.addBookmarkEnd(bookmark);
|
|
1553
|
+
}
|
|
1554
|
+
}
|
|
1555
|
+
searchPos = childEnd;
|
|
1556
|
+
}
|
|
1557
|
+
else {
|
|
1558
|
+
searchPos = tagEnd + 1;
|
|
1359
1559
|
}
|
|
1360
1560
|
}
|
|
1361
1561
|
return para;
|
|
@@ -1453,11 +1653,28 @@ class DocumentParser {
|
|
|
1453
1653
|
if (elementIndex < runArray.length) {
|
|
1454
1654
|
const child = runArray[elementIndex];
|
|
1455
1655
|
if (child['w:drawing']) {
|
|
1656
|
+
let imageRun = null;
|
|
1456
1657
|
if (zipHandler && imageManager) {
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1658
|
+
imageRun = await this.parseDrawingFromObject(child['w:drawing'], zipHandler, relationshipManager, imageManager);
|
|
1659
|
+
}
|
|
1660
|
+
if (imageRun) {
|
|
1661
|
+
this.parseRunPropertiesFromObject(child['w:rPr'], imageRun);
|
|
1662
|
+
paragraph.addRun(imageRun);
|
|
1663
|
+
if (child['w:t'] ||
|
|
1664
|
+
child['w:tab'] ||
|
|
1665
|
+
child['w:br'] ||
|
|
1666
|
+
child['w:cr'] ||
|
|
1667
|
+
child['w:noBreakHyphen']) {
|
|
1668
|
+
const siblingRun = this.parseRunFromObject(child);
|
|
1669
|
+
if (siblingRun) {
|
|
1670
|
+
paragraph.addRun(siblingRun);
|
|
1671
|
+
}
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
else {
|
|
1675
|
+
const runXml = this.objectToXml({ 'w:r': child });
|
|
1676
|
+
if (runXml) {
|
|
1677
|
+
paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
|
|
1461
1678
|
}
|
|
1462
1679
|
}
|
|
1463
1680
|
}
|
|
@@ -1506,11 +1723,28 @@ class DocumentParser {
|
|
|
1506
1723
|
const runChildren = Array.isArray(runs) ? runs : runs ? [runs] : [];
|
|
1507
1724
|
for (const child of runChildren) {
|
|
1508
1725
|
if (child['w:drawing']) {
|
|
1726
|
+
let imageRun = null;
|
|
1509
1727
|
if (zipHandler && imageManager) {
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1728
|
+
imageRun = await this.parseDrawingFromObject(child['w:drawing'], zipHandler, relationshipManager, imageManager);
|
|
1729
|
+
}
|
|
1730
|
+
if (imageRun) {
|
|
1731
|
+
this.parseRunPropertiesFromObject(child['w:rPr'], imageRun);
|
|
1732
|
+
paragraph.addRun(imageRun);
|
|
1733
|
+
if (child['w:t'] ||
|
|
1734
|
+
child['w:tab'] ||
|
|
1735
|
+
child['w:br'] ||
|
|
1736
|
+
child['w:cr'] ||
|
|
1737
|
+
child['w:noBreakHyphen']) {
|
|
1738
|
+
const siblingRun = this.parseRunFromObject(child);
|
|
1739
|
+
if (siblingRun) {
|
|
1740
|
+
paragraph.addRun(siblingRun);
|
|
1741
|
+
}
|
|
1742
|
+
}
|
|
1743
|
+
}
|
|
1744
|
+
else {
|
|
1745
|
+
const runXml = this.objectToXml({ 'w:r': child });
|
|
1746
|
+
if (runXml) {
|
|
1747
|
+
paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
|
|
1514
1748
|
}
|
|
1515
1749
|
}
|
|
1516
1750
|
}
|
|
@@ -2935,9 +3169,9 @@ class DocumentParser {
|
|
|
2935
3169
|
return '';
|
|
2936
3170
|
}
|
|
2937
3171
|
if (typeof node === 'object') {
|
|
2938
|
-
return
|
|
3172
|
+
return node['#text'] != null ? String(node['#text']) : '';
|
|
2939
3173
|
}
|
|
2940
|
-
return
|
|
3174
|
+
return String(node);
|
|
2941
3175
|
};
|
|
2942
3176
|
const parseBooleanAttr = (value) => {
|
|
2943
3177
|
if (value === undefined || value === null) {
|
|
@@ -3540,13 +3774,18 @@ class DocumentParser {
|
|
|
3540
3774
|
anchor: finalAnchor,
|
|
3541
3775
|
text: displayText,
|
|
3542
3776
|
formatting,
|
|
3777
|
+
preserveFormatting: true,
|
|
3543
3778
|
tooltip,
|
|
3544
3779
|
relationshipId: finalRelationshipId,
|
|
3545
3780
|
tgtFrame,
|
|
3546
3781
|
history,
|
|
3547
3782
|
docLocation,
|
|
3548
3783
|
});
|
|
3549
|
-
if (
|
|
3784
|
+
if (parsedRuns.length > 1 && (text || parsedRuns.some((r) => r.getContent().length > 1))) {
|
|
3785
|
+
hyperlink.setRuns(parsedRuns);
|
|
3786
|
+
}
|
|
3787
|
+
else if (parsedRun &&
|
|
3788
|
+
((parsedRuns.length === 1 && text) || parsedRun.getContent().length > 1)) {
|
|
3550
3789
|
hyperlink.setRun(parsedRun);
|
|
3551
3790
|
}
|
|
3552
3791
|
result.hyperlink = hyperlink;
|
|
@@ -3700,6 +3939,26 @@ class DocumentParser {
|
|
|
3700
3939
|
fldLock,
|
|
3701
3940
|
dirty,
|
|
3702
3941
|
});
|
|
3942
|
+
const resultRuns = fieldObj['w:r'];
|
|
3943
|
+
const resultRunArray = Array.isArray(resultRuns)
|
|
3944
|
+
? resultRuns
|
|
3945
|
+
: resultRuns
|
|
3946
|
+
? [resultRuns]
|
|
3947
|
+
: [];
|
|
3948
|
+
const cachedRuns = [];
|
|
3949
|
+
for (const runObj of resultRunArray) {
|
|
3950
|
+
const run = this.parseRunFromObject(runObj);
|
|
3951
|
+
if (run) {
|
|
3952
|
+
const runFormatting = run.getFormatting();
|
|
3953
|
+
cachedRuns.push({
|
|
3954
|
+
text: run.getText(),
|
|
3955
|
+
formatting: Object.keys(runFormatting).length > 0 ? runFormatting : undefined,
|
|
3956
|
+
});
|
|
3957
|
+
}
|
|
3958
|
+
}
|
|
3959
|
+
if (cachedRuns.length > 0) {
|
|
3960
|
+
field.setCachedResultRuns(cachedRuns);
|
|
3961
|
+
}
|
|
3703
3962
|
return field;
|
|
3704
3963
|
}
|
|
3705
3964
|
catch (error) {
|
|
@@ -3886,7 +4145,7 @@ class DocumentParser {
|
|
|
3886
4145
|
if (rPrObj['w:rFonts']) {
|
|
3887
4146
|
const rFonts = rPrObj['w:rFonts'];
|
|
3888
4147
|
if (rFonts['@_w:ascii'] !== undefined)
|
|
3889
|
-
run.
|
|
4148
|
+
run.setFontAscii(String(rFonts['@_w:ascii']));
|
|
3890
4149
|
if (rFonts['@_w:hAnsi'] !== undefined)
|
|
3891
4150
|
run.setFontHAnsi(String(rFonts['@_w:hAnsi']));
|
|
3892
4151
|
if (rFonts['@_w:eastAsia'] !== undefined)
|
|
@@ -4661,8 +4920,9 @@ class DocumentParser {
|
|
|
4661
4920
|
'wp:cNvGraphicFramePr',
|
|
4662
4921
|
'a:graphic',
|
|
4663
4922
|
]);
|
|
4664
|
-
if (anchorExtras)
|
|
4665
|
-
image._setRawPassthrough('anchor-extra', anchorExtras);
|
|
4923
|
+
if (anchorExtras) {
|
|
4924
|
+
image._setRawPassthrough('anchor-extra', (0, xmlSanitization_js_1.normalizeAnchorSizeRel)(anchorExtras));
|
|
4925
|
+
}
|
|
4666
4926
|
}
|
|
4667
4927
|
if (docPrObj) {
|
|
4668
4928
|
const docPrExtras = this.collectUnmodeledChildren(docPrObj, []);
|
|
@@ -4711,7 +4971,9 @@ class DocumentParser {
|
|
|
4711
4971
|
type = 'none';
|
|
4712
4972
|
return {
|
|
4713
4973
|
type,
|
|
4714
|
-
side:
|
|
4974
|
+
side: type === 'none' || type === 'topAndBottom'
|
|
4975
|
+
? wrapObj['@_wrapText']
|
|
4976
|
+
: wrapObj['@_wrapText'] || 'bothSides',
|
|
4715
4977
|
distanceTop: wrapObj['@_distT'] ? parseInt(wrapObj['@_distT'], 10) : undefined,
|
|
4716
4978
|
distanceBottom: wrapObj['@_distB'] ? parseInt(wrapObj['@_distB'], 10) : undefined,
|
|
4717
4979
|
distanceLeft: wrapObj['@_distL'] ? parseInt(wrapObj['@_distL'], 10) : undefined,
|
|
@@ -5699,7 +5961,7 @@ class DocumentParser {
|
|
|
5699
5961
|
}
|
|
5700
5962
|
return depth === 0 ? pos : -1;
|
|
5701
5963
|
}
|
|
5702
|
-
async parseSDTFromObject(sdtObj, relationshipManager, zipHandler, imageManager) {
|
|
5964
|
+
async parseSDTFromObject(sdtObj, relationshipManager, zipHandler, imageManager, rawSdtXml) {
|
|
5703
5965
|
try {
|
|
5704
5966
|
if (!sdtObj)
|
|
5705
5967
|
return null;
|
|
@@ -5760,10 +6022,14 @@ class DocumentParser {
|
|
|
5760
6022
|
else if (sdtPr['w14:checkbox']) {
|
|
5761
6023
|
properties.controlType = 'checkbox';
|
|
5762
6024
|
const checkboxElement = sdtPr['w14:checkbox'];
|
|
6025
|
+
const rawCheckedFont = checkboxElement?.['w14:checkedState']?.['@_w14:font'];
|
|
6026
|
+
const rawUncheckedFont = checkboxElement?.['w14:uncheckedState']?.['@_w14:font'];
|
|
5763
6027
|
properties.checkbox = {
|
|
5764
6028
|
checked: (0, parsingHelpers_js_1.parseOoxmlBoolean)(checkboxElement?.['w14:checked'], '@_w14:val'),
|
|
5765
6029
|
checkedState: String(checkboxElement?.['w14:checkedState']?.['@_w14:val'] ?? ''),
|
|
5766
6030
|
uncheckedState: String(checkboxElement?.['w14:uncheckedState']?.['@_w14:val'] ?? ''),
|
|
6031
|
+
checkedFont: rawCheckedFont === undefined ? undefined : String(rawCheckedFont),
|
|
6032
|
+
uncheckedFont: rawUncheckedFont === undefined ? undefined : String(rawUncheckedFont),
|
|
5767
6033
|
};
|
|
5768
6034
|
}
|
|
5769
6035
|
else if (sdtPr['w:picture']) {
|
|
@@ -5818,6 +6084,32 @@ class DocumentParser {
|
|
|
5818
6084
|
properties.showingPlcHdr = (0, parsingHelpers_js_1.parseOoxmlBoolean)(showingPlcHdr);
|
|
5819
6085
|
}
|
|
5820
6086
|
}
|
|
6087
|
+
let rawSdtPrXml;
|
|
6088
|
+
if (sdtPr !== undefined) {
|
|
6089
|
+
if (rawSdtXml) {
|
|
6090
|
+
const prPos = rawSdtXml.indexOf('<w:sdtPr');
|
|
6091
|
+
if (prPos !== -1) {
|
|
6092
|
+
rawSdtPrXml = this.extractSingleElement(rawSdtXml, 'w:sdtPr', prPos) || undefined;
|
|
6093
|
+
}
|
|
6094
|
+
}
|
|
6095
|
+
if (rawSdtPrXml === undefined) {
|
|
6096
|
+
rawSdtPrXml = this.objectToXml({ 'w:sdtPr': sdtPr }) || undefined;
|
|
6097
|
+
}
|
|
6098
|
+
}
|
|
6099
|
+
let rawSdtEndPrXml;
|
|
6100
|
+
const sdtEndPr = sdtObj['w:sdtEndPr'];
|
|
6101
|
+
if (sdtEndPr !== undefined) {
|
|
6102
|
+
if (rawSdtXml) {
|
|
6103
|
+
const endPrPos = rawSdtXml.indexOf('<w:sdtEndPr');
|
|
6104
|
+
if (endPrPos !== -1) {
|
|
6105
|
+
rawSdtEndPrXml =
|
|
6106
|
+
this.extractSingleElement(rawSdtXml, 'w:sdtEndPr', endPrPos) || undefined;
|
|
6107
|
+
}
|
|
6108
|
+
}
|
|
6109
|
+
if (rawSdtEndPrXml === undefined) {
|
|
6110
|
+
rawSdtEndPrXml = this.objectToXml({ 'w:sdtEndPr': sdtEndPr }) || undefined;
|
|
6111
|
+
}
|
|
6112
|
+
}
|
|
5821
6113
|
const content = [];
|
|
5822
6114
|
const sdtContent = sdtObj['w:sdtContent'];
|
|
5823
6115
|
if (sdtContent) {
|
|
@@ -5861,6 +6153,19 @@ class DocumentParser {
|
|
|
5861
6153
|
content.push(nestedSdt);
|
|
5862
6154
|
}
|
|
5863
6155
|
}
|
|
6156
|
+
else if (!elementType.startsWith('@_') && elementType !== '#text') {
|
|
6157
|
+
const others = sdtContent[elementType];
|
|
6158
|
+
const otherArray = Array.isArray(others)
|
|
6159
|
+
? others
|
|
6160
|
+
: others !== undefined
|
|
6161
|
+
? [others]
|
|
6162
|
+
: [];
|
|
6163
|
+
if (elementIndex < otherArray.length) {
|
|
6164
|
+
const rawXml = this.objectToXml({ [elementType]: otherArray[elementIndex] });
|
|
6165
|
+
if (rawXml)
|
|
6166
|
+
content.push(new PreservedElement_js_1.PreservedElement(rawXml, elementType, 'block'));
|
|
6167
|
+
}
|
|
6168
|
+
}
|
|
5864
6169
|
}
|
|
5865
6170
|
}
|
|
5866
6171
|
else {
|
|
@@ -5886,6 +6191,27 @@ class DocumentParser {
|
|
|
5886
6191
|
if (nestedSdt)
|
|
5887
6192
|
content.push(nestedSdt);
|
|
5888
6193
|
}
|
|
6194
|
+
for (const key of Object.keys(sdtContent)) {
|
|
6195
|
+
if (key === 'w:p' ||
|
|
6196
|
+
key === 'w:tbl' ||
|
|
6197
|
+
key === 'w:sdt' ||
|
|
6198
|
+
key === '#text' ||
|
|
6199
|
+
key === '_orderedChildren' ||
|
|
6200
|
+
key.startsWith('@_')) {
|
|
6201
|
+
continue;
|
|
6202
|
+
}
|
|
6203
|
+
const others = sdtContent[key];
|
|
6204
|
+
const otherArray = Array.isArray(others)
|
|
6205
|
+
? others
|
|
6206
|
+
: others !== undefined
|
|
6207
|
+
? [others]
|
|
6208
|
+
: [];
|
|
6209
|
+
for (const otherObj of otherArray) {
|
|
6210
|
+
const rawXml = this.objectToXml({ [key]: otherObj });
|
|
6211
|
+
if (rawXml)
|
|
6212
|
+
content.push(new PreservedElement_js_1.PreservedElement(rawXml, key, 'block'));
|
|
6213
|
+
}
|
|
6214
|
+
}
|
|
5889
6215
|
}
|
|
5890
6216
|
}
|
|
5891
6217
|
if (properties.buildingBlock?.gallery === 'Table of Contents') {
|
|
@@ -5894,7 +6220,12 @@ class DocumentParser {
|
|
|
5894
6220
|
return new TableOfContentsElement_js_1.TableOfContentsElement(toc);
|
|
5895
6221
|
}
|
|
5896
6222
|
}
|
|
5897
|
-
|
|
6223
|
+
const sdt = new StructuredDocumentTag_js_1.StructuredDocumentTag(properties, content);
|
|
6224
|
+
if (rawSdtPrXml !== undefined)
|
|
6225
|
+
sdt._setRawSdtPrXml(rawSdtPrXml);
|
|
6226
|
+
if (rawSdtEndPrXml !== undefined)
|
|
6227
|
+
sdt._setRawSdtEndPrXml(rawSdtEndPrXml);
|
|
6228
|
+
return sdt;
|
|
5898
6229
|
}
|
|
5899
6230
|
catch (error) {
|
|
5900
6231
|
logger_js_1.defaultLogger.warn('[DocumentParser] Failed to parse SDT:', error instanceof Error
|
|
@@ -6153,10 +6484,10 @@ class DocumentParser {
|
|
|
6153
6484
|
}
|
|
6154
6485
|
objectToXml(obj) {
|
|
6155
6486
|
const buildXml = (o, name) => {
|
|
6156
|
-
if (typeof o
|
|
6157
|
-
|
|
6158
|
-
|
|
6159
|
-
|
|
6487
|
+
if (typeof o !== 'object' || o === null) {
|
|
6488
|
+
const text = String(o ?? '');
|
|
6489
|
+
return name ? `<${name}>${text}</${name}>` : text;
|
|
6490
|
+
}
|
|
6160
6491
|
const keys = Object.keys(o);
|
|
6161
6492
|
if (keys.length === 0 && !name)
|
|
6162
6493
|
return '';
|
|
@@ -6427,6 +6758,8 @@ class DocumentParser {
|
|
|
6427
6758
|
return null;
|
|
6428
6759
|
}
|
|
6429
6760
|
}
|
|
6761
|
+
const sectPrWithChange = sectPr;
|
|
6762
|
+
sectPr = sectPr.replace(/<w:sectPrChange[\s\S]*?<\/w:sectPrChange>/, '');
|
|
6430
6763
|
const sectionProps = {};
|
|
6431
6764
|
const pgSzElements = XMLParser_js_1.XMLParser.extractElements(sectPr, 'w:pgSz');
|
|
6432
6765
|
if (pgSzElements.length > 0) {
|
|
@@ -6788,7 +7121,7 @@ class DocumentParser {
|
|
|
6788
7121
|
}
|
|
6789
7122
|
}
|
|
6790
7123
|
const section = new Section_js_1.Section(sectionProps);
|
|
6791
|
-
const sectPrChangeElements = XMLParser_js_1.XMLParser.extractElements(
|
|
7124
|
+
const sectPrChangeElements = XMLParser_js_1.XMLParser.extractElements(sectPrWithChange, 'w:sectPrChange');
|
|
6792
7125
|
if (sectPrChangeElements.length > 0 && sectPrChangeElements[0]) {
|
|
6793
7126
|
const changeXml = sectPrChangeElements[0];
|
|
6794
7127
|
const id = XMLParser_js_1.XMLParser.extractAttribute(changeXml, 'w:id') || '0';
|
|
@@ -6835,17 +7168,20 @@ class DocumentParser {
|
|
|
6835
7168
|
}
|
|
6836
7169
|
}
|
|
6837
7170
|
}
|
|
6838
|
-
|
|
6839
|
-
const
|
|
6840
|
-
|
|
6841
|
-
:
|
|
6842
|
-
|
|
6843
|
-
|
|
6844
|
-
|
|
6845
|
-
|
|
7171
|
+
let basedOn;
|
|
7172
|
+
const basedOnAttrs = XMLParser_js_1.XMLParser.extractSelfClosingTag(styleXml, 'w:basedOn');
|
|
7173
|
+
if (basedOnAttrs) {
|
|
7174
|
+
basedOn = XMLParser_js_1.XMLParser.extractAttribute(`<w:basedOn${basedOnAttrs}/>`, 'w:val');
|
|
7175
|
+
}
|
|
7176
|
+
let next;
|
|
7177
|
+
const nextAttrs = XMLParser_js_1.XMLParser.extractSelfClosingTag(styleXml, 'w:next');
|
|
7178
|
+
if (nextAttrs) {
|
|
7179
|
+
next = XMLParser_js_1.XMLParser.extractAttribute(`<w:next${nextAttrs}/>`, 'w:val');
|
|
7180
|
+
}
|
|
7181
|
+
const styleBase = styleXml.replace(/<w:tblStylePr[\s\S]*?<\/w:tblStylePr>/g, '');
|
|
6846
7182
|
let paragraphFormatting;
|
|
6847
7183
|
let styleNumPr;
|
|
6848
|
-
const pPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(
|
|
7184
|
+
const pPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(styleBase, '<w:pPr>', '</w:pPr>');
|
|
6849
7185
|
if (pPrXml) {
|
|
6850
7186
|
paragraphFormatting = this.parseParagraphFormattingFromXml(pPrXml);
|
|
6851
7187
|
const numPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(pPrXml, '<w:numPr>', '</w:numPr>');
|
|
@@ -6862,7 +7198,7 @@ class DocumentParser {
|
|
|
6862
7198
|
}
|
|
6863
7199
|
}
|
|
6864
7200
|
let runFormatting;
|
|
6865
|
-
const rPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(
|
|
7201
|
+
const rPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(styleBase, '<w:rPr>', '</w:rPr>');
|
|
6866
7202
|
if (rPrXml) {
|
|
6867
7203
|
runFormatting = this.parseRunFormattingFromXml(rPrXml);
|
|
6868
7204
|
}
|
|
@@ -8065,11 +8401,21 @@ class DocumentParser {
|
|
|
8065
8401
|
return namespaces;
|
|
8066
8402
|
}
|
|
8067
8403
|
parseDocumentBackground(docXml) {
|
|
8068
|
-
const bgMatch = /<w:background([^>]*?)
|
|
8069
|
-
if (!bgMatch
|
|
8404
|
+
const bgMatch = /<w:background([^>]*?)(\/>|>)/.exec(docXml);
|
|
8405
|
+
if (!bgMatch)
|
|
8070
8406
|
return undefined;
|
|
8071
|
-
const attrStr = bgMatch[1];
|
|
8407
|
+
const attrStr = bgMatch[1] ?? '';
|
|
8072
8408
|
const result = {};
|
|
8409
|
+
if (bgMatch[2] === '>') {
|
|
8410
|
+
const innerStart = bgMatch.index + bgMatch[0].length;
|
|
8411
|
+
const closeIndex = docXml.indexOf('</w:background>', innerStart);
|
|
8412
|
+
if (closeIndex !== -1) {
|
|
8413
|
+
const inner = docXml.substring(innerStart, closeIndex);
|
|
8414
|
+
if (inner.length > 0) {
|
|
8415
|
+
result.rawInnerXml = inner;
|
|
8416
|
+
}
|
|
8417
|
+
}
|
|
8418
|
+
}
|
|
8073
8419
|
const colorMatch = /w:color="([^"]+)"/.exec(attrStr);
|
|
8074
8420
|
if (colorMatch?.[1])
|
|
8075
8421
|
result.color = colorMatch[1];
|