docxmlater 10.1.3 → 10.1.5
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 +759 -754
- package/dist/constants/legacyCompatFlags.js +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +50 -50
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +483 -471
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts +9 -9
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts +11 -11
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +251 -251
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +15 -15
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +2123 -2155
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js +2 -5
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +3 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +3 -1
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +9 -6
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +18 -17
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +21 -21
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +56 -56
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js +6 -6
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js +6 -7
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +82 -25
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js +2 -2
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js +6 -6
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js +6 -7
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js +2 -2
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +5 -3
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +134 -76
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +238 -106
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +1 -1
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +24 -24
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +181 -188
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js +6 -6
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.d.ts.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +4 -5
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +40 -48
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -16
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +256 -238
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +36 -11
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +6 -6
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +99 -104
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +11 -11
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +102 -107
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +10 -10
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +105 -106
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +4 -4
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +13 -6
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +3 -5
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +4 -4
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +54 -49
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +1 -3
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +5 -5
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +119 -125
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +9 -9
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts +11 -11
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +219 -247
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +2 -2
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +96 -102
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +6 -6
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js +7 -7
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +23 -7
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.d.ts.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/compatibility-types.js.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/list-types.d.ts +6 -6
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.d.ts +2 -2
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js +97 -101
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +1 -1
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
- package/dist/utils/MoveOperationHelper.js +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js +2 -4
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.d.ts.map +1 -1
- package/dist/utils/RevisionWalker.js +4 -12
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.d.ts.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +23 -12
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +40 -40
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.d.ts.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.js +1 -1
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +10 -2
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/list-detection.d.ts +2 -2
- package/dist/utils/list-detection.d.ts.map +1 -1
- package/dist/utils/list-detection.js +21 -23
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +3 -3
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/textDiff.d.ts +1 -1
- package/dist/utils/textDiff.js +8 -8
- package/dist/utils/textDiff.js.map +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +24 -7
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.d.ts.map +1 -1
- package/dist/utils/xmlSanitization.js +3 -3
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +5 -5
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +7 -9
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js +3 -3
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +98 -100
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +61 -66
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +1 -3
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.d.ts +1 -1
- package/dist/zip/ZipWriter.d.ts.map +1 -1
- package/dist/zip/ZipWriter.js +28 -36
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/types.js +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +92 -92
- package/src/__tests__/helper-methods.test.ts +512 -512
- package/src/constants/legacyCompatFlags.ts +138 -138
- package/src/constants/limits.ts +50 -50
- package/src/core/Document.ts +985 -1145
- package/src/core/DocumentContent.ts +461 -467
- package/src/core/DocumentGenerator.ts +1133 -1104
- package/src/core/DocumentIdManager.ts +158 -158
- package/src/core/DocumentParser.ts +2347 -2716
- package/src/core/DocumentValidator.ts +363 -372
- package/src/core/Relationship.ts +367 -367
- package/src/core/RelationshipManager.ts +429 -428
- package/src/elements/AlternateContent.ts +42 -42
- package/src/elements/Bookmark.ts +212 -210
- package/src/elements/BookmarkManager.ts +247 -250
- package/src/elements/Comment.ts +356 -359
- package/src/elements/CommentManager.ts +499 -502
- package/src/elements/CommonTypes.ts +524 -549
- package/src/elements/CustomXml.ts +36 -36
- package/src/elements/Endnote.ts +221 -217
- package/src/elements/EndnoteManager.ts +246 -249
- package/src/elements/Field.ts +1292 -1233
- package/src/elements/FieldHelpers.ts +329 -333
- package/src/elements/FontManager.ts +336 -339
- package/src/elements/Footer.ts +269 -269
- package/src/elements/Footnote.ts +221 -217
- package/src/elements/FootnoteManager.ts +246 -249
- package/src/elements/Header.ts +269 -269
- package/src/elements/HeaderFooterManager.ts +219 -219
- package/src/elements/Hyperlink.ts +1288 -1193
- package/src/elements/Image.ts +1982 -1756
- package/src/elements/ImageManager.ts +437 -432
- package/src/elements/ImageRun.ts +59 -59
- package/src/elements/MathElement.ts +65 -65
- package/src/elements/Paragraph.ts +4347 -4287
- package/src/elements/PreservedElement.ts +53 -53
- package/src/elements/PropertyChangeTypes.ts +458 -442
- package/src/elements/RangeMarker.ts +382 -400
- package/src/elements/Revision.ts +1198 -1217
- package/src/elements/RevisionContent.ts +73 -73
- package/src/elements/RevisionManager.ts +1070 -1070
- package/src/elements/Run.ts +3103 -3073
- package/src/elements/Section.ts +1521 -1421
- package/src/elements/Shape.ts +884 -873
- package/src/elements/StructuredDocumentTag.ts +1176 -1207
- package/src/elements/Table.ts +2468 -2524
- package/src/elements/TableCell.ts +1617 -1621
- package/src/elements/TableGridChange.ts +149 -151
- package/src/elements/TableOfContents.ts +701 -691
- package/src/elements/TableOfContentsElement.ts +89 -89
- package/src/elements/TableRow.ts +960 -929
- package/src/elements/TextBox.ts +766 -768
- package/src/formatting/AbstractNumbering.ts +580 -579
- package/src/formatting/NumberingInstance.ts +295 -299
- package/src/formatting/NumberingLevel.ts +981 -1040
- package/src/formatting/NumberingManager.ts +833 -827
- package/src/formatting/Style.ts +1785 -1879
- package/src/formatting/StylesManager.ts +1090 -1130
- package/src/helpers/CleanupHelper.ts +524 -524
- package/src/images/ImageOptimizer.ts +274 -274
- package/src/index.ts +559 -554
- package/src/managers/DrawingManager.ts +319 -319
- package/src/tracking/DocumentTrackingContext.ts +687 -674
- package/src/tracking/TrackingContext.ts +175 -173
- package/src/types/compatibility-types.ts +49 -49
- package/src/types/formatting.ts +210 -210
- package/src/types/list-types.ts +14 -14
- package/src/types/settings-types.ts +59 -59
- package/src/types/styleConfig.ts +189 -189
- package/src/utils/ChangelogGenerator.ts +1583 -1581
- package/src/utils/CompatibilityUpgrader.ts +235 -237
- package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
- package/src/utils/MoveOperationHelper.ts +233 -238
- package/src/utils/RevisionAwareProcessor.ts +518 -526
- package/src/utils/RevisionWalker.ts +427 -457
- package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
- package/src/utils/ShadingResolver.ts +105 -107
- package/src/utils/acceptRevisions.ts +723 -714
- package/src/utils/cnfStyleDecoder.ts +212 -217
- package/src/utils/corruptionDetection.ts +346 -345
- package/src/utils/dateFormatting.ts +20 -20
- package/src/utils/deepClone.ts +77 -78
- package/src/utils/diagnostics.ts +125 -129
- package/src/utils/errorHandling.ts +80 -80
- package/src/utils/formatting.ts +220 -213
- package/src/utils/list-detection.ts +32 -42
- package/src/utils/logger.ts +412 -404
- package/src/utils/parsingHelpers.ts +190 -190
- package/src/utils/stripTrackedChanges.ts +356 -353
- package/src/utils/textDiff.ts +100 -100
- package/src/utils/units.ts +421 -421
- package/src/utils/validation.ts +553 -542
- package/src/utils/xmlSanitization.ts +179 -182
- package/src/validation/RevisionAutoFixer.ts +541 -542
- package/src/validation/RevisionValidator.ts +470 -460
- package/src/validation/ValidationRules.ts +338 -338
- package/src/validation/index.ts +30 -30
- package/src/xml/XMLBuilder.ts +857 -871
- package/src/xml/XMLParser.ts +877 -919
- package/src/zip/ZipHandler.ts +629 -637
- package/src/zip/ZipReader.ts +295 -299
- package/src/zip/ZipWriter.ts +374 -390
- package/src/zip/types.ts +116 -116
package/src/elements/Footnote.ts
CHANGED
|
@@ -1,217 +1,221 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Footnote - Represents a footnote in a Word document
|
|
3
|
-
*
|
|
4
|
-
* Footnotes appear at the bottom of the page and are referenced
|
|
5
|
-
* within the document text via footnote references.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { Paragraph } from './Paragraph';
|
|
9
|
-
import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Footnote type
|
|
13
|
-
*/
|
|
14
|
-
export enum FootnoteType {
|
|
15
|
-
/** Normal footnote */
|
|
16
|
-
Normal = 'normal',
|
|
17
|
-
/** Separator between document text and footnotes */
|
|
18
|
-
Separator = 'separator',
|
|
19
|
-
/** Continuation separator for footnotes that continue to next page */
|
|
20
|
-
ContinuationSeparator = 'continuationSeparator',
|
|
21
|
-
/** Continuation notice at bottom of page when footnotes continue */
|
|
22
|
-
ContinuationNotice = 'continuationNotice',
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Footnote properties
|
|
27
|
-
*/
|
|
28
|
-
export interface FootnoteProperties {
|
|
29
|
-
/** Footnote ID (required, must be unique) */
|
|
30
|
-
id: number;
|
|
31
|
-
/** Type of footnote */
|
|
32
|
-
type?: FootnoteType;
|
|
33
|
-
/** Custom mark/symbol (optional, otherwise uses numbering) */
|
|
34
|
-
customMark?: string;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Represents a footnote in a document
|
|
39
|
-
*/
|
|
40
|
-
export class Footnote {
|
|
41
|
-
private id: number;
|
|
42
|
-
private type: FootnoteType;
|
|
43
|
-
private customMark?: string;
|
|
44
|
-
private paragraphs: Paragraph[] = [];
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Creates a new footnote
|
|
48
|
-
* @param properties Footnote properties
|
|
49
|
-
*/
|
|
50
|
-
constructor(properties: FootnoteProperties) {
|
|
51
|
-
this.id = properties.id;
|
|
52
|
-
this.type = properties.type || FootnoteType.Normal;
|
|
53
|
-
this.customMark = properties.customMark;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Gets the footnote ID
|
|
58
|
-
*/
|
|
59
|
-
getId(): number {
|
|
60
|
-
return this.id;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Gets the footnote type
|
|
65
|
-
*/
|
|
66
|
-
getType(): FootnoteType {
|
|
67
|
-
return this.type;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Gets the custom mark
|
|
72
|
-
*/
|
|
73
|
-
getCustomMark(): string | undefined {
|
|
74
|
-
return this.customMark;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Sets the custom mark
|
|
79
|
-
* @param mark Custom mark/symbol
|
|
80
|
-
*/
|
|
81
|
-
setCustomMark(mark: string): this {
|
|
82
|
-
this.customMark = mark;
|
|
83
|
-
return this;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Adds a paragraph to the footnote
|
|
88
|
-
* @param paragraph Paragraph to add
|
|
89
|
-
*/
|
|
90
|
-
addParagraph(paragraph: Paragraph): this {
|
|
91
|
-
this.paragraphs.push(paragraph);
|
|
92
|
-
return this;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Creates and adds a new paragraph
|
|
97
|
-
* @param text Optional text content
|
|
98
|
-
* @returns The created paragraph
|
|
99
|
-
*/
|
|
100
|
-
createParagraph(text?: string): Paragraph {
|
|
101
|
-
const para = new Paragraph();
|
|
102
|
-
if (text) {
|
|
103
|
-
para.addText(text);
|
|
104
|
-
}
|
|
105
|
-
this.paragraphs.push(para);
|
|
106
|
-
return para;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Gets all paragraphs in the footnote
|
|
111
|
-
*/
|
|
112
|
-
getParagraphs(): Paragraph[] {
|
|
113
|
-
return [...this.paragraphs];
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Gets the text content of the footnote
|
|
118
|
-
*/
|
|
119
|
-
getText(): string {
|
|
120
|
-
return this.paragraphs.map(p => p.getText()).join('\n');
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Generates the XML for this footnote
|
|
125
|
-
*/
|
|
126
|
-
toXML(): XMLElement {
|
|
127
|
-
const attrs: Record<string, any> = {
|
|
128
|
-
'w:id': this.id.toString(),
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
if (this.type !== FootnoteType.Normal) {
|
|
132
|
-
attrs['w:type'] = this.type;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const children: XMLElement[] = [];
|
|
136
|
-
|
|
137
|
-
// Separator types require specific child elements per ECMA-376
|
|
138
|
-
if (this.type === FootnoteType.Separator) {
|
|
139
|
-
// <w:p><w:r><w:separator/></w:r></w:p>
|
|
140
|
-
children.push(
|
|
141
|
-
XMLBuilder.w('
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
footnote
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Footnote - Represents a footnote in a Word document
|
|
3
|
+
*
|
|
4
|
+
* Footnotes appear at the bottom of the page and are referenced
|
|
5
|
+
* within the document text via footnote references.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Paragraph } from './Paragraph';
|
|
9
|
+
import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Footnote type
|
|
13
|
+
*/
|
|
14
|
+
export enum FootnoteType {
|
|
15
|
+
/** Normal footnote */
|
|
16
|
+
Normal = 'normal',
|
|
17
|
+
/** Separator between document text and footnotes */
|
|
18
|
+
Separator = 'separator',
|
|
19
|
+
/** Continuation separator for footnotes that continue to next page */
|
|
20
|
+
ContinuationSeparator = 'continuationSeparator',
|
|
21
|
+
/** Continuation notice at bottom of page when footnotes continue */
|
|
22
|
+
ContinuationNotice = 'continuationNotice',
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Footnote properties
|
|
27
|
+
*/
|
|
28
|
+
export interface FootnoteProperties {
|
|
29
|
+
/** Footnote ID (required, must be unique) */
|
|
30
|
+
id: number;
|
|
31
|
+
/** Type of footnote */
|
|
32
|
+
type?: FootnoteType;
|
|
33
|
+
/** Custom mark/symbol (optional, otherwise uses numbering) */
|
|
34
|
+
customMark?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Represents a footnote in a document
|
|
39
|
+
*/
|
|
40
|
+
export class Footnote {
|
|
41
|
+
private id: number;
|
|
42
|
+
private type: FootnoteType;
|
|
43
|
+
private customMark?: string;
|
|
44
|
+
private paragraphs: Paragraph[] = [];
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Creates a new footnote
|
|
48
|
+
* @param properties Footnote properties
|
|
49
|
+
*/
|
|
50
|
+
constructor(properties: FootnoteProperties) {
|
|
51
|
+
this.id = properties.id;
|
|
52
|
+
this.type = properties.type || FootnoteType.Normal;
|
|
53
|
+
this.customMark = properties.customMark;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Gets the footnote ID
|
|
58
|
+
*/
|
|
59
|
+
getId(): number {
|
|
60
|
+
return this.id;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Gets the footnote type
|
|
65
|
+
*/
|
|
66
|
+
getType(): FootnoteType {
|
|
67
|
+
return this.type;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Gets the custom mark
|
|
72
|
+
*/
|
|
73
|
+
getCustomMark(): string | undefined {
|
|
74
|
+
return this.customMark;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Sets the custom mark
|
|
79
|
+
* @param mark Custom mark/symbol
|
|
80
|
+
*/
|
|
81
|
+
setCustomMark(mark: string): this {
|
|
82
|
+
this.customMark = mark;
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Adds a paragraph to the footnote
|
|
88
|
+
* @param paragraph Paragraph to add
|
|
89
|
+
*/
|
|
90
|
+
addParagraph(paragraph: Paragraph): this {
|
|
91
|
+
this.paragraphs.push(paragraph);
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Creates and adds a new paragraph
|
|
97
|
+
* @param text Optional text content
|
|
98
|
+
* @returns The created paragraph
|
|
99
|
+
*/
|
|
100
|
+
createParagraph(text?: string): Paragraph {
|
|
101
|
+
const para = new Paragraph();
|
|
102
|
+
if (text) {
|
|
103
|
+
para.addText(text);
|
|
104
|
+
}
|
|
105
|
+
this.paragraphs.push(para);
|
|
106
|
+
return para;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Gets all paragraphs in the footnote
|
|
111
|
+
*/
|
|
112
|
+
getParagraphs(): Paragraph[] {
|
|
113
|
+
return [...this.paragraphs];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Gets the text content of the footnote
|
|
118
|
+
*/
|
|
119
|
+
getText(): string {
|
|
120
|
+
return this.paragraphs.map((p) => p.getText()).join('\n');
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Generates the XML for this footnote
|
|
125
|
+
*/
|
|
126
|
+
toXML(): XMLElement {
|
|
127
|
+
const attrs: Record<string, any> = {
|
|
128
|
+
'w:id': this.id.toString(),
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
if (this.type !== FootnoteType.Normal) {
|
|
132
|
+
attrs['w:type'] = this.type;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const children: XMLElement[] = [];
|
|
136
|
+
|
|
137
|
+
// Separator types require specific child elements per ECMA-376
|
|
138
|
+
if (this.type === FootnoteType.Separator) {
|
|
139
|
+
// <w:p><w:r><w:separator/></w:r></w:p>
|
|
140
|
+
children.push(
|
|
141
|
+
XMLBuilder.w('p', undefined, [
|
|
142
|
+
XMLBuilder.w('r', undefined, [XMLBuilder.wSelf('separator')]),
|
|
143
|
+
])
|
|
144
|
+
);
|
|
145
|
+
} else if (this.type === FootnoteType.ContinuationSeparator) {
|
|
146
|
+
// <w:p><w:r><w:continuationSeparator/></w:r></w:p>
|
|
147
|
+
children.push(
|
|
148
|
+
XMLBuilder.w('p', undefined, [
|
|
149
|
+
XMLBuilder.w('r', undefined, [XMLBuilder.wSelf('continuationSeparator')]),
|
|
150
|
+
])
|
|
151
|
+
);
|
|
152
|
+
} else {
|
|
153
|
+
// Add paragraphs
|
|
154
|
+
for (const para of this.paragraphs) {
|
|
155
|
+
children.push(para.toXML());
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// If no paragraphs, add an empty one (required)
|
|
159
|
+
if (children.length === 0) {
|
|
160
|
+
children.push(XMLBuilder.w('p'));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return XMLBuilder.w('footnote', attrs, children);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Creates a footnote from text
|
|
169
|
+
* @param id Footnote ID
|
|
170
|
+
* @param text Text content
|
|
171
|
+
* @returns New footnote instance
|
|
172
|
+
*/
|
|
173
|
+
static fromText(id: number, text: string): Footnote {
|
|
174
|
+
const footnote = new Footnote({ id });
|
|
175
|
+
footnote.createParagraph(text);
|
|
176
|
+
return footnote;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Creates a separator footnote
|
|
181
|
+
* @param id Footnote ID
|
|
182
|
+
* @returns New separator footnote
|
|
183
|
+
*/
|
|
184
|
+
static createSeparator(id: number): Footnote {
|
|
185
|
+
const footnote = new Footnote({
|
|
186
|
+
id,
|
|
187
|
+
type: FootnoteType.Separator,
|
|
188
|
+
});
|
|
189
|
+
// Separator typically has a horizontal line
|
|
190
|
+
footnote.createParagraph();
|
|
191
|
+
// Add separator formatting if needed
|
|
192
|
+
return footnote;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Creates a continuation separator footnote
|
|
197
|
+
* @param id Footnote ID
|
|
198
|
+
* @returns New continuation separator footnote
|
|
199
|
+
*/
|
|
200
|
+
static createContinuationSeparator(id: number): Footnote {
|
|
201
|
+
return new Footnote({
|
|
202
|
+
id,
|
|
203
|
+
type: FootnoteType.ContinuationSeparator,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Creates a continuation notice footnote
|
|
209
|
+
* @param id Footnote ID
|
|
210
|
+
* @param text Notice text (e.g., "Continued on next page...")
|
|
211
|
+
* @returns New continuation notice footnote
|
|
212
|
+
*/
|
|
213
|
+
static createContinuationNotice(id: number, text = 'Continued...'): Footnote {
|
|
214
|
+
const footnote = new Footnote({
|
|
215
|
+
id,
|
|
216
|
+
type: FootnoteType.ContinuationNotice,
|
|
217
|
+
});
|
|
218
|
+
footnote.createParagraph(text);
|
|
219
|
+
return footnote;
|
|
220
|
+
}
|
|
221
|
+
}
|