@usejunior/docx-core 0.0.1 → 0.1.1
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/LICENSE +21 -0
- package/README.md +86 -28
- package/dist/.tsbuildinfo +1 -0
- package/dist/atomizer.d.ts +218 -0
- package/dist/atomizer.d.ts.map +1 -0
- package/dist/atomizer.js +856 -0
- package/dist/atomizer.js.map +1 -0
- package/dist/baselines/atomizer/atomLcs.d.ts +96 -0
- package/dist/baselines/atomizer/atomLcs.d.ts.map +1 -0
- package/dist/baselines/atomizer/atomLcs.js +347 -0
- package/dist/baselines/atomizer/atomLcs.js.map +1 -0
- package/dist/baselines/atomizer/debug.d.ts +41 -0
- package/dist/baselines/atomizer/debug.d.ts.map +1 -0
- package/dist/baselines/atomizer/debug.js +85 -0
- package/dist/baselines/atomizer/debug.js.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts +64 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.js +939 -0
- package/dist/baselines/atomizer/documentReconstructor.js.map +1 -0
- package/dist/baselines/atomizer/hierarchicalLcs.d.ts +111 -0
- package/dist/baselines/atomizer/hierarchicalLcs.d.ts.map +1 -0
- package/dist/baselines/atomizer/hierarchicalLcs.js +469 -0
- package/dist/baselines/atomizer/hierarchicalLcs.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier.d.ts +183 -0
- package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier.js +1600 -0
- package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -0
- package/dist/baselines/atomizer/numberingIntegration.d.ts +59 -0
- package/dist/baselines/atomizer/numberingIntegration.d.ts.map +1 -0
- package/dist/baselines/atomizer/numberingIntegration.js +209 -0
- package/dist/baselines/atomizer/numberingIntegration.js.map +1 -0
- package/dist/baselines/atomizer/pipeline.d.ts +65 -0
- package/dist/baselines/atomizer/pipeline.d.ts.map +1 -0
- package/dist/baselines/atomizer/pipeline.js +510 -0
- package/dist/baselines/atomizer/pipeline.js.map +1 -0
- package/dist/baselines/atomizer/premergeRuns.d.ts +26 -0
- package/dist/baselines/atomizer/premergeRuns.d.ts.map +1 -0
- package/dist/baselines/atomizer/premergeRuns.js +150 -0
- package/dist/baselines/atomizer/premergeRuns.js.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.d.ts +63 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.d.ts.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.js +254 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.js.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts +64 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js +586 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -0
- package/dist/baselines/atomizer/xmlToWmlElement.d.ts +65 -0
- package/dist/baselines/atomizer/xmlToWmlElement.d.ts.map +1 -0
- package/dist/baselines/atomizer/xmlToWmlElement.js +95 -0
- package/dist/baselines/atomizer/xmlToWmlElement.js.map +1 -0
- package/dist/baselines/diffmatch/documentBuilder.d.ts +44 -0
- package/dist/baselines/diffmatch/documentBuilder.d.ts.map +1 -0
- package/dist/baselines/diffmatch/documentBuilder.js +227 -0
- package/dist/baselines/diffmatch/documentBuilder.js.map +1 -0
- package/dist/baselines/diffmatch/paragraphAlignment.d.ts +75 -0
- package/dist/baselines/diffmatch/paragraphAlignment.d.ts.map +1 -0
- package/dist/baselines/diffmatch/paragraphAlignment.js +206 -0
- package/dist/baselines/diffmatch/paragraphAlignment.js.map +1 -0
- package/dist/baselines/diffmatch/pipeline.d.ts +33 -0
- package/dist/baselines/diffmatch/pipeline.d.ts.map +1 -0
- package/dist/baselines/diffmatch/pipeline.js +84 -0
- package/dist/baselines/diffmatch/pipeline.js.map +1 -0
- package/dist/baselines/diffmatch/runDiff.d.ts +53 -0
- package/dist/baselines/diffmatch/runDiff.d.ts.map +1 -0
- package/dist/baselines/diffmatch/runDiff.js +253 -0
- package/dist/baselines/diffmatch/runDiff.js.map +1 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.d.ts +64 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.d.ts.map +1 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.js +178 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.js.map +1 -0
- package/dist/baselines/diffmatch/xmlParser.d.ts +45 -0
- package/dist/baselines/diffmatch/xmlParser.d.ts.map +1 -0
- package/dist/baselines/diffmatch/xmlParser.js +344 -0
- package/dist/baselines/diffmatch/xmlParser.js.map +1 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts +51 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts.map +1 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.js +83 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.js.map +1 -0
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts +40 -0
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js +135 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -0
- package/dist/benchmark/metrics.d.ts +72 -0
- package/dist/benchmark/metrics.d.ts.map +1 -0
- package/dist/benchmark/metrics.js +45 -0
- package/dist/benchmark/metrics.js.map +1 -0
- package/dist/benchmark/reporter.d.ts +23 -0
- package/dist/benchmark/reporter.d.ts.map +1 -0
- package/dist/benchmark/reporter.js +147 -0
- package/dist/benchmark/reporter.js.map +1 -0
- package/dist/benchmark/runner.d.ts +30 -0
- package/dist/benchmark/runner.d.ts.map +1 -0
- package/dist/benchmark/runner.js +233 -0
- package/dist/benchmark/runner.js.map +1 -0
- package/dist/cli/compare-two.d.ts +28 -0
- package/dist/cli/compare-two.d.ts.map +1 -0
- package/dist/cli/compare-two.js +110 -0
- package/dist/cli/compare-two.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core-types.d.ts +296 -0
- package/dist/core-types.d.ts.map +1 -0
- package/dist/core-types.js +122 -0
- package/dist/core-types.js.map +1 -0
- package/dist/footnotes.d.ts +144 -0
- package/dist/footnotes.d.ts.map +1 -0
- package/dist/footnotes.js +291 -0
- package/dist/footnotes.js.map +1 -0
- package/dist/format-detection.d.ts +120 -0
- package/dist/format-detection.d.ts.map +1 -0
- package/dist/format-detection.js +338 -0
- package/dist/format-detection.js.map +1 -0
- package/dist/index.d.ts +177 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/output-artifacts.d.ts +6 -0
- package/dist/integration/output-artifacts.d.ts.map +1 -0
- package/dist/integration/output-artifacts.js +30 -0
- package/dist/integration/output-artifacts.js.map +1 -0
- package/dist/move-detection.d.ts +211 -0
- package/dist/move-detection.d.ts.map +1 -0
- package/dist/move-detection.js +391 -0
- package/dist/move-detection.js.map +1 -0
- package/dist/numbering.d.ts +136 -0
- package/dist/numbering.d.ts.map +1 -0
- package/dist/numbering.js +446 -0
- package/dist/numbering.js.map +1 -0
- package/dist/primitives/accept_changes.d.ts +30 -0
- package/dist/primitives/accept_changes.d.ts.map +1 -0
- package/dist/primitives/accept_changes.js +241 -0
- package/dist/primitives/accept_changes.js.map +1 -0
- package/dist/primitives/bookmarks.d.ts +12 -0
- package/dist/primitives/bookmarks.d.ts.map +1 -0
- package/dist/primitives/bookmarks.js +248 -0
- package/dist/primitives/bookmarks.js.map +1 -0
- package/dist/primitives/comments.d.ts +88 -0
- package/dist/primitives/comments.d.ts.map +1 -0
- package/dist/primitives/comments.js +703 -0
- package/dist/primitives/comments.js.map +1 -0
- package/dist/primitives/document.d.ts +168 -0
- package/dist/primitives/document.d.ts.map +1 -0
- package/dist/primitives/document.js +532 -0
- package/dist/primitives/document.js.map +1 -0
- package/dist/primitives/document_view.d.ts +93 -0
- package/dist/primitives/document_view.d.ts.map +1 -0
- package/dist/primitives/document_view.js +722 -0
- package/dist/primitives/document_view.js.map +1 -0
- package/dist/primitives/dom-helpers.d.ts +94 -0
- package/dist/primitives/dom-helpers.d.ts.map +1 -0
- package/dist/primitives/dom-helpers.js +219 -0
- package/dist/primitives/dom-helpers.js.map +1 -0
- package/dist/primitives/errors.d.ts +7 -0
- package/dist/primitives/errors.d.ts.map +1 -0
- package/dist/primitives/errors.js +10 -0
- package/dist/primitives/errors.js.map +1 -0
- package/dist/primitives/extract_revisions.d.ts +50 -0
- package/dist/primitives/extract_revisions.d.ts.map +1 -0
- package/dist/primitives/extract_revisions.js +340 -0
- package/dist/primitives/extract_revisions.js.map +1 -0
- package/dist/primitives/footnotes.d.ts +37 -0
- package/dist/primitives/footnotes.d.ts.map +1 -0
- package/dist/primitives/footnotes.js +552 -0
- package/dist/primitives/footnotes.js.map +1 -0
- package/dist/primitives/formatting_tags.d.ts +30 -0
- package/dist/primitives/formatting_tags.d.ts.map +1 -0
- package/dist/primitives/formatting_tags.js +217 -0
- package/dist/primitives/formatting_tags.js.map +1 -0
- package/dist/primitives/index.d.ts +26 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +26 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/layout.d.ts +53 -0
- package/dist/primitives/layout.d.ts.map +1 -0
- package/dist/primitives/layout.js +178 -0
- package/dist/primitives/layout.js.map +1 -0
- package/dist/primitives/list_labels.d.ts +19 -0
- package/dist/primitives/list_labels.d.ts.map +1 -0
- package/dist/primitives/list_labels.js +57 -0
- package/dist/primitives/list_labels.js.map +1 -0
- package/dist/primitives/matching.d.ts +17 -0
- package/dist/primitives/matching.d.ts.map +1 -0
- package/dist/primitives/matching.js +144 -0
- package/dist/primitives/matching.js.map +1 -0
- package/dist/primitives/merge_runs.d.ts +23 -0
- package/dist/primitives/merge_runs.d.ts.map +1 -0
- package/dist/primitives/merge_runs.js +195 -0
- package/dist/primitives/merge_runs.js.map +1 -0
- package/dist/primitives/namespaces.d.ts +90 -0
- package/dist/primitives/namespaces.d.ts.map +1 -0
- package/dist/primitives/namespaces.js +107 -0
- package/dist/primitives/namespaces.js.map +1 -0
- package/dist/primitives/numbering.d.ts +27 -0
- package/dist/primitives/numbering.d.ts.map +1 -0
- package/dist/primitives/numbering.js +182 -0
- package/dist/primitives/numbering.js.map +1 -0
- package/dist/primitives/prevent_double_elevation.d.ts +18 -0
- package/dist/primitives/prevent_double_elevation.d.ts.map +1 -0
- package/dist/primitives/prevent_double_elevation.js +190 -0
- package/dist/primitives/prevent_double_elevation.js.map +1 -0
- package/dist/primitives/reject_changes.d.ts +27 -0
- package/dist/primitives/reject_changes.d.ts.map +1 -0
- package/dist/primitives/reject_changes.js +371 -0
- package/dist/primitives/reject_changes.js.map +1 -0
- package/dist/primitives/relationships.d.ts +7 -0
- package/dist/primitives/relationships.d.ts.map +1 -0
- package/dist/primitives/relationships.js +24 -0
- package/dist/primitives/relationships.js.map +1 -0
- package/dist/primitives/semantic_tags.d.ts +32 -0
- package/dist/primitives/semantic_tags.d.ts.map +1 -0
- package/dist/primitives/semantic_tags.js +139 -0
- package/dist/primitives/semantic_tags.js.map +1 -0
- package/dist/primitives/simplify_redlines.d.ts +19 -0
- package/dist/primitives/simplify_redlines.d.ts.map +1 -0
- package/dist/primitives/simplify_redlines.js +94 -0
- package/dist/primitives/simplify_redlines.js.map +1 -0
- package/dist/primitives/styles.d.ts +36 -0
- package/dist/primitives/styles.d.ts.map +1 -0
- package/dist/primitives/styles.js +190 -0
- package/dist/primitives/styles.js.map +1 -0
- package/dist/primitives/text.d.ts +27 -0
- package/dist/primitives/text.d.ts.map +1 -0
- package/dist/primitives/text.js +416 -0
- package/dist/primitives/text.js.map +1 -0
- package/dist/primitives/validate_document.d.ts +24 -0
- package/dist/primitives/validate_document.d.ts.map +1 -0
- package/dist/primitives/validate_document.js +147 -0
- package/dist/primitives/validate_document.js.map +1 -0
- package/dist/primitives/xml.d.ts +5 -0
- package/dist/primitives/xml.d.ts.map +1 -0
- package/dist/primitives/xml.js +19 -0
- package/dist/primitives/xml.js.map +1 -0
- package/dist/primitives/zip.d.ts +25 -0
- package/dist/primitives/zip.d.ts.map +1 -0
- package/dist/primitives/zip.js +78 -0
- package/dist/primitives/zip.js.map +1 -0
- package/dist/shared/docx/DocxArchive.d.ts +94 -0
- package/dist/shared/docx/DocxArchive.d.ts.map +1 -0
- package/dist/shared/docx/DocxArchive.js +169 -0
- package/dist/shared/docx/DocxArchive.js.map +1 -0
- package/dist/shared/ooxml/namespaces.d.ts +149 -0
- package/dist/shared/ooxml/namespaces.d.ts.map +1 -0
- package/dist/shared/ooxml/namespaces.js +224 -0
- package/dist/shared/ooxml/namespaces.js.map +1 -0
- package/dist/shared/ooxml/types.d.ts +136 -0
- package/dist/shared/ooxml/types.d.ts.map +1 -0
- package/dist/shared/ooxml/types.js +7 -0
- package/dist/shared/ooxml/types.js.map +1 -0
- package/package.json +63 -6
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Footnote Numbering Module
|
|
3
|
+
*
|
|
4
|
+
* Handles sequential footnote/endnote numbering by document order.
|
|
5
|
+
*
|
|
6
|
+
* Per ECMA-376, w:id on footnoteReference is a reference identifier, NOT the
|
|
7
|
+
* display number. Display numbers are sequential based on document order.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* Document has 91 footnotes with XML IDs 2-92 (IDs 0, 1 are reserved):
|
|
11
|
+
* - Incorrect: Display as 2, 3, 4, ..., 92
|
|
12
|
+
* - Correct: Display as 1, 2, 3, ..., 91
|
|
13
|
+
*/
|
|
14
|
+
import { RESERVED_FOOTNOTE_IDS, } from './core-types.js';
|
|
15
|
+
import { childElements, getLeafText } from './primitives/index.js';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Footnote Reference Finding
|
|
18
|
+
// =============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Find all footnote or endnote references in document order.
|
|
21
|
+
*
|
|
22
|
+
* Recursively traverses the document tree to find references in reading order.
|
|
23
|
+
*
|
|
24
|
+
* @param element - The root element to search from
|
|
25
|
+
* @param tagName - The reference tag to find ('w:footnoteReference' or 'w:endnoteReference')
|
|
26
|
+
* @returns Array of reference elements in document order
|
|
27
|
+
*/
|
|
28
|
+
export function findReferencesInOrder(element, tagName) {
|
|
29
|
+
const refs = [];
|
|
30
|
+
function traverse(node) {
|
|
31
|
+
if (node.tagName === tagName) {
|
|
32
|
+
refs.push(node);
|
|
33
|
+
}
|
|
34
|
+
for (const child of childElements(node)) {
|
|
35
|
+
traverse(child);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
traverse(element);
|
|
39
|
+
return refs;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if a footnote/endnote ID is reserved.
|
|
43
|
+
*
|
|
44
|
+
* IDs 0 and 1 are reserved for separator types per ECMA-376.
|
|
45
|
+
*
|
|
46
|
+
* @param xmlId - The XML ID to check
|
|
47
|
+
* @returns True if this is a reserved ID
|
|
48
|
+
*/
|
|
49
|
+
export function isReservedId(xmlId) {
|
|
50
|
+
return (xmlId === RESERVED_FOOTNOTE_IDS.SEPARATOR ||
|
|
51
|
+
xmlId === RESERVED_FOOTNOTE_IDS.CONTINUATION_SEPARATOR);
|
|
52
|
+
}
|
|
53
|
+
// =============================================================================
|
|
54
|
+
// FootnoteNumberingTracker Class
|
|
55
|
+
// =============================================================================
|
|
56
|
+
/**
|
|
57
|
+
* Tracks sequential footnote/endnote numbering by document order.
|
|
58
|
+
*
|
|
59
|
+
* Scans the document for footnote/endnote references and builds a mapping
|
|
60
|
+
* from XML IDs to display numbers.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* const tracker = new FootnoteNumberingTracker(documentRoot);
|
|
64
|
+
* const displayNum = tracker.getDisplayNumber('42'); // Returns 1 if '42' is the first footnote
|
|
65
|
+
*/
|
|
66
|
+
export class FootnoteNumberingTracker {
|
|
67
|
+
footnoteIdToDisplayNumber = new Map();
|
|
68
|
+
endnoteIdToDisplayNumber = new Map();
|
|
69
|
+
footnoteCustomMarks = new Set();
|
|
70
|
+
endnoteCustomMarks = new Set();
|
|
71
|
+
/**
|
|
72
|
+
* Create a new tracker by scanning the document.
|
|
73
|
+
*
|
|
74
|
+
* @param documentRoot - The root element of the main document (w:document or w:body)
|
|
75
|
+
*/
|
|
76
|
+
constructor(documentRoot) {
|
|
77
|
+
this.scanDocument(documentRoot);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Scan the document for footnote and endnote references.
|
|
81
|
+
*/
|
|
82
|
+
scanDocument(documentRoot) {
|
|
83
|
+
// Scan for footnote references
|
|
84
|
+
const footnoteRefs = findReferencesInOrder(documentRoot, 'w:footnoteReference');
|
|
85
|
+
this.buildNumbering(footnoteRefs, this.footnoteIdToDisplayNumber, this.footnoteCustomMarks);
|
|
86
|
+
// Scan for endnote references
|
|
87
|
+
const endnoteRefs = findReferencesInOrder(documentRoot, 'w:endnoteReference');
|
|
88
|
+
this.buildNumbering(endnoteRefs, this.endnoteIdToDisplayNumber, this.endnoteCustomMarks);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build the ID to display number mapping.
|
|
92
|
+
*/
|
|
93
|
+
buildNumbering(refs, idToNumber, customMarks) {
|
|
94
|
+
let displayNum = 1;
|
|
95
|
+
for (const ref of refs) {
|
|
96
|
+
const xmlId = ref.getAttribute('w:id');
|
|
97
|
+
if (!xmlId)
|
|
98
|
+
continue;
|
|
99
|
+
// Skip reserved IDs
|
|
100
|
+
if (isReservedId(xmlId))
|
|
101
|
+
continue;
|
|
102
|
+
// Check for custom mark
|
|
103
|
+
const hasCustomMark = ref.getAttribute('w:customMarkFollows') === '1' ||
|
|
104
|
+
ref.getAttribute('w:customMarkFollows') === 'true';
|
|
105
|
+
if (hasCustomMark) {
|
|
106
|
+
customMarks.add(xmlId);
|
|
107
|
+
// Custom marks don't get automatic numbers but still reserve a slot
|
|
108
|
+
// Some implementations skip numbering, others don't - we follow Word behavior
|
|
109
|
+
}
|
|
110
|
+
// Only assign number if not already seen (handles duplicate references)
|
|
111
|
+
if (!idToNumber.has(xmlId)) {
|
|
112
|
+
if (!hasCustomMark) {
|
|
113
|
+
idToNumber.set(xmlId, displayNum);
|
|
114
|
+
displayNum++;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get the display number for a footnote by its XML ID.
|
|
121
|
+
*
|
|
122
|
+
* @param xmlId - The XML ID (w:id attribute)
|
|
123
|
+
* @returns The display number, or undefined if not found or uses custom mark
|
|
124
|
+
*/
|
|
125
|
+
getFootnoteDisplayNumber(xmlId) {
|
|
126
|
+
return this.footnoteIdToDisplayNumber.get(xmlId);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get the display number for an endnote by its XML ID.
|
|
130
|
+
*
|
|
131
|
+
* @param xmlId - The XML ID (w:id attribute)
|
|
132
|
+
* @returns The display number, or undefined if not found or uses custom mark
|
|
133
|
+
*/
|
|
134
|
+
getEndnoteDisplayNumber(xmlId) {
|
|
135
|
+
return this.endnoteIdToDisplayNumber.get(xmlId);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get the display number for a footnote or endnote by its XML ID.
|
|
139
|
+
*
|
|
140
|
+
* Convenience method that checks both footnotes and endnotes.
|
|
141
|
+
*
|
|
142
|
+
* @param xmlId - The XML ID
|
|
143
|
+
* @returns The display number, or undefined if not found
|
|
144
|
+
*/
|
|
145
|
+
getDisplayNumber(xmlId) {
|
|
146
|
+
return (this.footnoteIdToDisplayNumber.get(xmlId) ??
|
|
147
|
+
this.endnoteIdToDisplayNumber.get(xmlId));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if a footnote uses a custom mark.
|
|
151
|
+
*
|
|
152
|
+
* @param xmlId - The XML ID
|
|
153
|
+
* @returns True if this footnote has w:customMarkFollows
|
|
154
|
+
*/
|
|
155
|
+
hasFootnoteCustomMark(xmlId) {
|
|
156
|
+
return this.footnoteCustomMarks.has(xmlId);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Check if an endnote uses a custom mark.
|
|
160
|
+
*
|
|
161
|
+
* @param xmlId - The XML ID
|
|
162
|
+
* @returns True if this endnote has w:customMarkFollows
|
|
163
|
+
*/
|
|
164
|
+
hasEndnoteCustomMark(xmlId) {
|
|
165
|
+
return this.endnoteCustomMarks.has(xmlId);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get the total number of footnotes (excluding custom marks).
|
|
169
|
+
*/
|
|
170
|
+
getFootnoteCount() {
|
|
171
|
+
return this.footnoteIdToDisplayNumber.size;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get the total number of endnotes (excluding custom marks).
|
|
175
|
+
*/
|
|
176
|
+
getEndnoteCount() {
|
|
177
|
+
return this.endnoteIdToDisplayNumber.size;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get all footnote references as structured data.
|
|
181
|
+
*
|
|
182
|
+
* @returns Array of FootnoteReference objects
|
|
183
|
+
*/
|
|
184
|
+
getFootnoteReferences() {
|
|
185
|
+
const refs = [];
|
|
186
|
+
for (const [xmlId, displayNumber] of this.footnoteIdToDisplayNumber) {
|
|
187
|
+
refs.push({
|
|
188
|
+
xmlId,
|
|
189
|
+
displayNumber,
|
|
190
|
+
customMarkFollows: this.footnoteCustomMarks.has(xmlId),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
// Add custom mark footnotes (no display number)
|
|
194
|
+
for (const xmlId of this.footnoteCustomMarks) {
|
|
195
|
+
if (!this.footnoteIdToDisplayNumber.has(xmlId)) {
|
|
196
|
+
refs.push({
|
|
197
|
+
xmlId,
|
|
198
|
+
customMarkFollows: true,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return refs;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get all endnote references as structured data.
|
|
206
|
+
*
|
|
207
|
+
* @returns Array of FootnoteReference objects
|
|
208
|
+
*/
|
|
209
|
+
getEndnoteReferences() {
|
|
210
|
+
const refs = [];
|
|
211
|
+
for (const [xmlId, displayNumber] of this.endnoteIdToDisplayNumber) {
|
|
212
|
+
refs.push({
|
|
213
|
+
xmlId,
|
|
214
|
+
displayNumber,
|
|
215
|
+
customMarkFollows: this.endnoteCustomMarks.has(xmlId),
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
// Add custom mark endnotes (no display number)
|
|
219
|
+
for (const xmlId of this.endnoteCustomMarks) {
|
|
220
|
+
if (!this.endnoteIdToDisplayNumber.has(xmlId)) {
|
|
221
|
+
refs.push({
|
|
222
|
+
xmlId,
|
|
223
|
+
customMarkFollows: true,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return refs;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// =============================================================================
|
|
231
|
+
// Footnote Content Extraction
|
|
232
|
+
// =============================================================================
|
|
233
|
+
/**
|
|
234
|
+
* Find a footnote element by its ID in the footnotes.xml part.
|
|
235
|
+
*
|
|
236
|
+
* @param footnotesRoot - The root of the footnotes.xml document
|
|
237
|
+
* @param xmlId - The XML ID to find
|
|
238
|
+
* @returns The w:footnote element, or undefined if not found
|
|
239
|
+
*/
|
|
240
|
+
export function findFootnoteById(footnotesRoot, xmlId) {
|
|
241
|
+
if (footnotesRoot.tagName !== 'w:footnotes') {
|
|
242
|
+
return undefined;
|
|
243
|
+
}
|
|
244
|
+
for (const child of childElements(footnotesRoot)) {
|
|
245
|
+
if (child.tagName === 'w:footnote' && child.getAttribute('w:id') === xmlId) {
|
|
246
|
+
return child;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Find an endnote element by its ID in the endnotes.xml part.
|
|
253
|
+
*
|
|
254
|
+
* @param endnotesRoot - The root of the endnotes.xml document
|
|
255
|
+
* @param xmlId - The XML ID to find
|
|
256
|
+
* @returns The w:endnote element, or undefined if not found
|
|
257
|
+
*/
|
|
258
|
+
export function findEndnoteById(endnotesRoot, xmlId) {
|
|
259
|
+
if (endnotesRoot.tagName !== 'w:endnotes') {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
for (const child of childElements(endnotesRoot)) {
|
|
263
|
+
if (child.tagName === 'w:endnote' && child.getAttribute('w:id') === xmlId) {
|
|
264
|
+
return child;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Extract plain text content from a footnote/endnote element.
|
|
271
|
+
*
|
|
272
|
+
* @param noteElement - The w:footnote or w:endnote element
|
|
273
|
+
* @returns Plain text content
|
|
274
|
+
*/
|
|
275
|
+
export function extractNoteText(noteElement) {
|
|
276
|
+
const texts = [];
|
|
277
|
+
function traverse(node) {
|
|
278
|
+
if (node.tagName === 'w:t') {
|
|
279
|
+
const text = getLeafText(node) ?? '';
|
|
280
|
+
if (text) {
|
|
281
|
+
texts.push(text);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
for (const child of childElements(node)) {
|
|
285
|
+
traverse(child);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
traverse(noteElement);
|
|
289
|
+
return texts.join('');
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=footnotes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footnotes.js","sourceRoot":"","sources":["../src/footnotes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format Change Detection Module
|
|
3
|
+
*
|
|
4
|
+
* Detects formatting changes (bold, italic, font size, etc.) between
|
|
5
|
+
* documents after LCS comparison. Runs on atoms marked as Equal to
|
|
6
|
+
* identify text that matches but has different formatting.
|
|
7
|
+
*
|
|
8
|
+
* Pipeline position:
|
|
9
|
+
* LCS() → FlattenToAtomList() → detectMovesInAtomList() → detectFormatChangesInAtomList() → CoalesceRecurse()
|
|
10
|
+
*
|
|
11
|
+
* @see design.md Decision 10: Format Change Detection as Post-LCS Phase
|
|
12
|
+
*/
|
|
13
|
+
import { ComparisonUnitAtom, FormatChangeInfo, FormatDetectionSettings } from './core-types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Extract run properties (w:rPr) from an atom's ancestor elements.
|
|
16
|
+
*
|
|
17
|
+
* Finds the w:r (run) element in ancestors and extracts its w:rPr child.
|
|
18
|
+
*
|
|
19
|
+
* @param atom - The atom to extract properties from
|
|
20
|
+
* @returns The w:rPr element, or null if not found
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // For an atom inside <w:r><w:rPr><w:b/></w:rPr><w:t>text</w:t></w:r>
|
|
24
|
+
* // Returns the <w:rPr><w:b/></w:rPr> element
|
|
25
|
+
*/
|
|
26
|
+
export declare function getRunPropertiesFromAtom(atom: ComparisonUnitAtom): Element | null;
|
|
27
|
+
/**
|
|
28
|
+
* Lightweight property descriptor for normalized comparison.
|
|
29
|
+
* These are NOT DOM Elements — they're ephemeral comparison objects.
|
|
30
|
+
*/
|
|
31
|
+
interface NormalizedProperty {
|
|
32
|
+
tagName: string;
|
|
33
|
+
attrs: [string, string][];
|
|
34
|
+
text?: string;
|
|
35
|
+
}
|
|
36
|
+
interface NormalizedRPr {
|
|
37
|
+
children: NormalizedProperty[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if two run properties are equal after normalization.
|
|
41
|
+
*/
|
|
42
|
+
export declare function areRunPropertiesEqual(rPr1: Element | null, rPr2: Element | null): boolean;
|
|
43
|
+
export { areRunPropertiesEqual as areNormalizedRunPropertiesEqual };
|
|
44
|
+
/**
|
|
45
|
+
* Get the list of property names that changed between two run properties.
|
|
46
|
+
*
|
|
47
|
+
* Returns friendly names (e.g., "bold", "italic") when available,
|
|
48
|
+
* otherwise returns the OOXML tag name.
|
|
49
|
+
*
|
|
50
|
+
* @param oldRPr - Old run properties element (or null)
|
|
51
|
+
* @param newRPr - New run properties element (or null)
|
|
52
|
+
* @returns Array of changed property names
|
|
53
|
+
*/
|
|
54
|
+
export declare function getChangedPropertyNames(oldRPr: Element | null, newRPr: Element | null): string[];
|
|
55
|
+
/**
|
|
56
|
+
* Categorize changed properties into added, removed, and modified.
|
|
57
|
+
*
|
|
58
|
+
* @param oldRPr - Old run properties element (or null)
|
|
59
|
+
* @param newRPr - New run properties element (or null)
|
|
60
|
+
* @returns Object with added, removed, and changed arrays
|
|
61
|
+
*/
|
|
62
|
+
export declare function categorizePropertyChanges(oldRPr: Element | null, newRPr: Element | null): {
|
|
63
|
+
added: string[];
|
|
64
|
+
removed: string[];
|
|
65
|
+
changed: string[];
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Detect format changes in a flat list of atoms.
|
|
69
|
+
*
|
|
70
|
+
* Runs after LCS and move detection to identify Equal atoms where the text
|
|
71
|
+
* matches but formatting differs. Updates atoms in place with format change status.
|
|
72
|
+
*
|
|
73
|
+
* @param atoms - The atom list to process (modified in place)
|
|
74
|
+
* @param settings - Format detection settings (optional, uses defaults)
|
|
75
|
+
*/
|
|
76
|
+
export declare function detectFormatChangesInAtomList(atoms: ComparisonUnitAtom[], settings?: FormatDetectionSettings): void;
|
|
77
|
+
/**
|
|
78
|
+
* Options for generating format change markup.
|
|
79
|
+
*/
|
|
80
|
+
export interface FormatChangeMarkupOptions {
|
|
81
|
+
/** Author name for revision tracking */
|
|
82
|
+
author: string;
|
|
83
|
+
/** Timestamp for revisions */
|
|
84
|
+
dateTime: Date;
|
|
85
|
+
/** ID for the w:rPrChange element */
|
|
86
|
+
id: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Merge format change markup into a run's existing rPr element.
|
|
90
|
+
*
|
|
91
|
+
* Adds the w:rPrChange element as the last child of w:rPr.
|
|
92
|
+
*
|
|
93
|
+
* @param runElement - The w:r element to modify
|
|
94
|
+
* @param rPrChange - The w:rPrChange element to insert
|
|
95
|
+
*/
|
|
96
|
+
export declare function mergeFormatChangeIntoRun(runElement: Element, rPrChange: Element): void;
|
|
97
|
+
/**
|
|
98
|
+
* Extract paragraph properties (w:pPr) from an element.
|
|
99
|
+
*
|
|
100
|
+
* @param paragraphElement - The w:p element
|
|
101
|
+
* @returns The w:pPr element, or null if not found
|
|
102
|
+
*/
|
|
103
|
+
export declare function getParagraphProperties(paragraphElement: Element): Element | null;
|
|
104
|
+
/**
|
|
105
|
+
* Paragraph property friendly names.
|
|
106
|
+
*/
|
|
107
|
+
export declare const PARAGRAPH_PROPERTY_FRIENDLY_NAMES: Record<string, string>;
|
|
108
|
+
/**
|
|
109
|
+
* @deprecated Use areRunPropertiesEqual directly with Element params
|
|
110
|
+
*/
|
|
111
|
+
export declare function normalizeRunProperties(rPr: Element | null): NormalizedRPr;
|
|
112
|
+
/**
|
|
113
|
+
* @deprecated Use getParagraphProperties directly
|
|
114
|
+
*/
|
|
115
|
+
export declare function normalizeParagraphProperties(pPr: Element | null): NormalizedRPr;
|
|
116
|
+
/**
|
|
117
|
+
* @deprecated Removed — use generateFormatChangeMarkup with DOM approach
|
|
118
|
+
*/
|
|
119
|
+
export declare function generateFormatChangeMarkup(formatChange: FormatChangeInfo, options: FormatChangeMarkupOptions): Element;
|
|
120
|
+
//# sourceMappingURL=format-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-detection.d.ts","sourceRoot":"","sources":["../src/format-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,kBAAkB,EAGlB,gBAAgB,EAChB,uBAAuB,EAExB,MAAM,iBAAiB,CAAC;AAOzB;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,kBAAkB,GACvB,OAAO,GAAG,IAAI,CAYhB;AAMD;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAmDD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,IAAI,EAAE,OAAO,GAAG,IAAI,GACnB,OAAO,CAIT;AAGD,OAAO,EAAE,qBAAqB,IAAI,+BAA+B,EAAE,CAAC;AAsCpE;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,MAAM,EAAE,OAAO,GAAG,IAAI,GACrB,MAAM,EAAE,CAuBV;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,MAAM,EAAE,OAAO,GAAG,IAAI,GACrB;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA2C3D;AAMD;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,kBAAkB,EAAE,EAC3B,QAAQ,GAAE,uBAA2D,GACpE,IAAI,CA6BN;AAMD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,QAAQ,EAAE,IAAI,CAAC;IACf,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,GACjB,IAAI,CA0BN;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,OAAO,GACxB,OAAO,GAAG,IAAI,CAQhB;AAED;;GAEG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAcpE,CAAC;AAMF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,aAAa,CAEzE;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,aAAa,CAE/E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,gBAAgB,EAC9B,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAqBT"}
|