@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,182 @@
|
|
|
1
|
+
import { OOXML, W } from './namespaces.js';
|
|
2
|
+
function getWAttr(el, localName) {
|
|
3
|
+
return el.getAttributeNS(OOXML.W_NS, localName) ?? el.getAttribute(`w:${localName}`) ?? el.getAttribute(localName);
|
|
4
|
+
}
|
|
5
|
+
export function parseNumberingXml(numberingDoc) {
|
|
6
|
+
const model = { abstractNums: new Map(), nums: new Map() };
|
|
7
|
+
if (!numberingDoc)
|
|
8
|
+
return model;
|
|
9
|
+
const abs = Array.from(numberingDoc.getElementsByTagNameNS(OOXML.W_NS, W.abstractNum));
|
|
10
|
+
for (const a of abs) {
|
|
11
|
+
const id = getWAttr(a, 'abstractNumId');
|
|
12
|
+
if (!id)
|
|
13
|
+
continue;
|
|
14
|
+
const levels = new Map();
|
|
15
|
+
const lvls = Array.from(a.getElementsByTagNameNS(OOXML.W_NS, W.lvl));
|
|
16
|
+
for (const lvl of lvls) {
|
|
17
|
+
const ilvlStr = getWAttr(lvl, 'ilvl');
|
|
18
|
+
const ilvl = ilvlStr ? Number.parseInt(ilvlStr, 10) : NaN;
|
|
19
|
+
if (Number.isNaN(ilvl))
|
|
20
|
+
continue;
|
|
21
|
+
const startEl = lvl.getElementsByTagNameNS(OOXML.W_NS, W.start).item(0);
|
|
22
|
+
const numFmtEl = lvl.getElementsByTagNameNS(OOXML.W_NS, W.numFmt).item(0);
|
|
23
|
+
const lvlTextEl = lvl.getElementsByTagNameNS(OOXML.W_NS, W.lvlText).item(0);
|
|
24
|
+
const suffEl = lvl.getElementsByTagNameNS(OOXML.W_NS, W.suff).item(0);
|
|
25
|
+
const startVal = startEl ? Number.parseInt(getWAttr(startEl, 'val') ?? '1', 10) : 1;
|
|
26
|
+
const numFmt = numFmtEl ? (getWAttr(numFmtEl, 'val') ?? 'decimal') : 'decimal';
|
|
27
|
+
const lvlText = lvlTextEl ? (getWAttr(lvlTextEl, 'val') ?? `%${ilvl + 1}.`) : `%${ilvl + 1}.`;
|
|
28
|
+
const suff = suffEl ? (getWAttr(suffEl, 'val') ?? 'tab') : 'tab';
|
|
29
|
+
levels.set(ilvl, { ilvl, start: startVal, numFmt, lvlText, suff });
|
|
30
|
+
}
|
|
31
|
+
model.abstractNums.set(id, { abstractNumId: id, levels });
|
|
32
|
+
}
|
|
33
|
+
const nums = Array.from(numberingDoc.getElementsByTagNameNS(OOXML.W_NS, W.num));
|
|
34
|
+
for (const n of nums) {
|
|
35
|
+
const numId = getWAttr(n, 'numId');
|
|
36
|
+
if (!numId)
|
|
37
|
+
continue;
|
|
38
|
+
const absIdEl = n.getElementsByTagNameNS(OOXML.W_NS, W.abstractNumId).item(0);
|
|
39
|
+
const abstractNumId = absIdEl ? (getWAttr(absIdEl, 'val') ?? '') : '';
|
|
40
|
+
if (!abstractNumId)
|
|
41
|
+
continue;
|
|
42
|
+
const startOverrideByLevel = new Map();
|
|
43
|
+
const overrides = Array.from(n.getElementsByTagNameNS(OOXML.W_NS, W.lvlOverride));
|
|
44
|
+
for (const ov of overrides) {
|
|
45
|
+
const ilvlStr = getWAttr(ov, 'ilvl');
|
|
46
|
+
const ilvl = ilvlStr ? Number.parseInt(ilvlStr, 10) : NaN;
|
|
47
|
+
if (Number.isNaN(ilvl))
|
|
48
|
+
continue;
|
|
49
|
+
const startOv = ov.getElementsByTagNameNS(OOXML.W_NS, W.startOverride).item(0);
|
|
50
|
+
if (!startOv)
|
|
51
|
+
continue;
|
|
52
|
+
const v = Number.parseInt(getWAttr(startOv, 'val') ?? '', 10);
|
|
53
|
+
if (!Number.isNaN(v))
|
|
54
|
+
startOverrideByLevel.set(ilvl, v);
|
|
55
|
+
}
|
|
56
|
+
model.nums.set(numId, { numId, abstractNumId, startOverrideByLevel });
|
|
57
|
+
}
|
|
58
|
+
return model;
|
|
59
|
+
}
|
|
60
|
+
function toRoman(n, upper) {
|
|
61
|
+
// Simple roman numeral conversion for 1..3999.
|
|
62
|
+
if (n <= 0)
|
|
63
|
+
return '';
|
|
64
|
+
const pairs = [
|
|
65
|
+
[1000, 'M'],
|
|
66
|
+
[900, 'CM'],
|
|
67
|
+
[500, 'D'],
|
|
68
|
+
[400, 'CD'],
|
|
69
|
+
[100, 'C'],
|
|
70
|
+
[90, 'XC'],
|
|
71
|
+
[50, 'L'],
|
|
72
|
+
[40, 'XL'],
|
|
73
|
+
[10, 'X'],
|
|
74
|
+
[9, 'IX'],
|
|
75
|
+
[5, 'V'],
|
|
76
|
+
[4, 'IV'],
|
|
77
|
+
[1, 'I'],
|
|
78
|
+
];
|
|
79
|
+
let x = n;
|
|
80
|
+
let out = '';
|
|
81
|
+
for (const [val, sym] of pairs) {
|
|
82
|
+
while (x >= val) {
|
|
83
|
+
out += sym;
|
|
84
|
+
x -= val;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return upper ? out : out.toLowerCase();
|
|
88
|
+
}
|
|
89
|
+
function toLetters(n, upper) {
|
|
90
|
+
// 1 -> a, 2 -> b, ..., 26 -> z, 27 -> aa
|
|
91
|
+
if (n <= 0)
|
|
92
|
+
return '';
|
|
93
|
+
let x = n;
|
|
94
|
+
let out = '';
|
|
95
|
+
while (x > 0) {
|
|
96
|
+
x -= 1;
|
|
97
|
+
out = String.fromCharCode(97 + (x % 26)) + out;
|
|
98
|
+
x = Math.floor(x / 26);
|
|
99
|
+
}
|
|
100
|
+
return upper ? out.toUpperCase() : out;
|
|
101
|
+
}
|
|
102
|
+
function formatCounter(numFmt, n) {
|
|
103
|
+
switch (numFmt) {
|
|
104
|
+
case 'decimal':
|
|
105
|
+
return String(n);
|
|
106
|
+
case 'lowerLetter':
|
|
107
|
+
return toLetters(n, false);
|
|
108
|
+
case 'upperLetter':
|
|
109
|
+
return toLetters(n, true);
|
|
110
|
+
case 'lowerRoman':
|
|
111
|
+
return toRoman(n, false);
|
|
112
|
+
case 'upperRoman':
|
|
113
|
+
return toRoman(n, true);
|
|
114
|
+
case 'bullet':
|
|
115
|
+
return '•';
|
|
116
|
+
case 'none':
|
|
117
|
+
return '';
|
|
118
|
+
default:
|
|
119
|
+
// Many formats exist; default to decimal for now.
|
|
120
|
+
return String(n);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function getStartForLevel(model, numId, ilvl) {
|
|
124
|
+
const num = model.nums.get(numId);
|
|
125
|
+
if (!num)
|
|
126
|
+
return 1;
|
|
127
|
+
const ov = num.startOverrideByLevel.get(ilvl);
|
|
128
|
+
if (ov !== undefined)
|
|
129
|
+
return ov;
|
|
130
|
+
const abs = model.abstractNums.get(num.abstractNumId);
|
|
131
|
+
const lvl = abs?.levels.get(ilvl);
|
|
132
|
+
return lvl?.start ?? 1;
|
|
133
|
+
}
|
|
134
|
+
function getLevel(model, numId, ilvl) {
|
|
135
|
+
const num = model.nums.get(numId);
|
|
136
|
+
if (!num)
|
|
137
|
+
return null;
|
|
138
|
+
const abs = model.abstractNums.get(num.abstractNumId);
|
|
139
|
+
return abs?.levels.get(ilvl) ?? null;
|
|
140
|
+
}
|
|
141
|
+
export function computeListLabelForParagraph(model, counters, params) {
|
|
142
|
+
const { numId, ilvl } = params;
|
|
143
|
+
const level = getLevel(model, numId, ilvl);
|
|
144
|
+
if (!level)
|
|
145
|
+
return '';
|
|
146
|
+
let arr = counters.get(numId);
|
|
147
|
+
if (!arr) {
|
|
148
|
+
// Initialize with "start-1" for each level we might see.
|
|
149
|
+
arr = [];
|
|
150
|
+
counters.set(numId, arr);
|
|
151
|
+
}
|
|
152
|
+
// Ensure array has at least ilvl+1 entries.
|
|
153
|
+
while (arr.length <= ilvl)
|
|
154
|
+
arr.push(0);
|
|
155
|
+
// Initialize this level to start-1 if it hasn't been set yet.
|
|
156
|
+
const startThis = getStartForLevel(model, numId, ilvl);
|
|
157
|
+
if (arr[ilvl] === 0)
|
|
158
|
+
arr[ilvl] = startThis - 1;
|
|
159
|
+
// Increment this level.
|
|
160
|
+
arr[ilvl] = arr[ilvl] + 1;
|
|
161
|
+
if (arr[ilvl] < startThis)
|
|
162
|
+
arr[ilvl] = startThis;
|
|
163
|
+
// Reset deeper levels.
|
|
164
|
+
for (let d = ilvl + 1; d < arr.length; d++) {
|
|
165
|
+
const startD = getStartForLevel(model, numId, d);
|
|
166
|
+
arr[d] = startD - 1;
|
|
167
|
+
}
|
|
168
|
+
// Render lvlText by substituting counters.
|
|
169
|
+
const lvlText = level.lvlText || `%${ilvl + 1}.`;
|
|
170
|
+
const rendered = lvlText.replace(/%(\d+)/g, (_m, nStr) => {
|
|
171
|
+
const levelNum = Number.parseInt(String(nStr), 10) - 1;
|
|
172
|
+
if (Number.isNaN(levelNum) || levelNum < 0)
|
|
173
|
+
return '';
|
|
174
|
+
const v = arr[levelNum] ?? 0;
|
|
175
|
+
const lvlDef = getLevel(model, numId, levelNum);
|
|
176
|
+
const fmt = lvlDef?.numFmt ?? 'decimal';
|
|
177
|
+
return formatCounter(fmt, v);
|
|
178
|
+
});
|
|
179
|
+
// For TOON we treat suffix as a display concern; keep label column trimmed.
|
|
180
|
+
return rendered.trim();
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=numbering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbering.js","sourceRoot":"","sources":["../../src/primitives/numbering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type PreventDoubleElevationResult = {
|
|
2
|
+
doubleElevationsFixed: number;
|
|
3
|
+
};
|
|
4
|
+
/**
|
|
5
|
+
* Prevent double elevation on footnote/endnote reference styles.
|
|
6
|
+
*
|
|
7
|
+
* When a style has both w:vertAlign="superscript" and w:position > 0,
|
|
8
|
+
* non-Windows renderers (Mac Pages, LibreOffice) stack the effects,
|
|
9
|
+
* pushing reference numerals too high. This function removes or neutralizes
|
|
10
|
+
* the redundant w:position on allowlisted styles.
|
|
11
|
+
*
|
|
12
|
+
* Scope: Only affects styles in targetStyleIds (default: FootnoteReference,
|
|
13
|
+
* EndnoteReference). Never mutates parent/ancestor styles.
|
|
14
|
+
*/
|
|
15
|
+
export declare function preventDoubleElevation(stylesDoc: Document, options?: {
|
|
16
|
+
targetStyleIds?: string[];
|
|
17
|
+
}): PreventDoubleElevationResult;
|
|
18
|
+
//# sourceMappingURL=prevent_double_elevation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prevent_double_elevation.d.ts","sourceRoot":"","sources":["../../src/primitives/prevent_double_elevation.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,4BAA4B,GAAG;IACzC,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAyEF;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACtC,4BAA4B,CAkF9B"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { OOXML, W } from './namespaces.js';
|
|
2
|
+
const DEFAULT_TARGET_STYLES = ['FootnoteReference', 'EndnoteReference'];
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a w: attribute from an element, checking both namespace-qualified
|
|
5
|
+
* and prefixed forms (matches the getWAttr pattern in styles.ts).
|
|
6
|
+
*/
|
|
7
|
+
function getWAttr(el, localName) {
|
|
8
|
+
return el.getAttributeNS(OOXML.W_NS, localName) ?? el.getAttribute(`w:${localName}`) ?? el.getAttribute(localName);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get the direct child rPr element (not descendant) of a w:style element.
|
|
12
|
+
*/
|
|
13
|
+
function getDirectChildRPr(styleEl) {
|
|
14
|
+
let child = styleEl.firstChild;
|
|
15
|
+
while (child) {
|
|
16
|
+
if (child.nodeType === 1 &&
|
|
17
|
+
child.namespaceURI === OOXML.W_NS &&
|
|
18
|
+
child.localName === W.rPr) {
|
|
19
|
+
return child;
|
|
20
|
+
}
|
|
21
|
+
child = child.nextSibling;
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the value of a specific w: child element within an rPr.
|
|
27
|
+
* Returns the val attribute of the first matching direct child, or null.
|
|
28
|
+
*/
|
|
29
|
+
function getRPrChildVal(rPr, localName) {
|
|
30
|
+
if (!rPr)
|
|
31
|
+
return null;
|
|
32
|
+
let child = rPr.firstChild;
|
|
33
|
+
while (child) {
|
|
34
|
+
if (child.nodeType === 1 &&
|
|
35
|
+
child.namespaceURI === OOXML.W_NS &&
|
|
36
|
+
child.localName === localName) {
|
|
37
|
+
return getWAttr(child, W.val);
|
|
38
|
+
}
|
|
39
|
+
child = child.nextSibling;
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check whether the given rPr has a direct child element with the given localName.
|
|
45
|
+
*/
|
|
46
|
+
function hasRPrChild(rPr, localName) {
|
|
47
|
+
if (!rPr)
|
|
48
|
+
return false;
|
|
49
|
+
let child = rPr.firstChild;
|
|
50
|
+
while (child) {
|
|
51
|
+
if (child.nodeType === 1 &&
|
|
52
|
+
child.namespaceURI === OOXML.W_NS &&
|
|
53
|
+
child.localName === localName) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
child = child.nextSibling;
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Prevent double elevation on footnote/endnote reference styles.
|
|
62
|
+
*
|
|
63
|
+
* When a style has both w:vertAlign="superscript" and w:position > 0,
|
|
64
|
+
* non-Windows renderers (Mac Pages, LibreOffice) stack the effects,
|
|
65
|
+
* pushing reference numerals too high. This function removes or neutralizes
|
|
66
|
+
* the redundant w:position on allowlisted styles.
|
|
67
|
+
*
|
|
68
|
+
* Scope: Only affects styles in targetStyleIds (default: FootnoteReference,
|
|
69
|
+
* EndnoteReference). Never mutates parent/ancestor styles.
|
|
70
|
+
*/
|
|
71
|
+
export function preventDoubleElevation(stylesDoc, options) {
|
|
72
|
+
const targetIds = options?.targetStyleIds ?? DEFAULT_TARGET_STYLES;
|
|
73
|
+
// Build style map: styleId → { el, rPr, basedOn }
|
|
74
|
+
const styleMap = new Map();
|
|
75
|
+
const styleEls = stylesDoc.getElementsByTagNameNS(OOXML.W_NS, W.style);
|
|
76
|
+
for (let i = 0; i < styleEls.length; i++) {
|
|
77
|
+
const el = styleEls.item(i);
|
|
78
|
+
const styleId = getWAttr(el, 'styleId');
|
|
79
|
+
if (!styleId)
|
|
80
|
+
continue;
|
|
81
|
+
const rPr = getDirectChildRPr(el);
|
|
82
|
+
const basedOnEl = el.getElementsByTagNameNS(OOXML.W_NS, W.basedOn).item(0);
|
|
83
|
+
const basedOn = basedOnEl ? (getWAttr(basedOnEl, W.val) ?? null) : null;
|
|
84
|
+
styleMap.set(styleId, { el, rPr, basedOn });
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Walk the basedOn chain from a style, returning the nearest value of a
|
|
88
|
+
* property (by localName) found in rPr. Cycle-safe via seen set.
|
|
89
|
+
*
|
|
90
|
+
* Returns { value, isLocal } where isLocal=true means found on the starting style.
|
|
91
|
+
*/
|
|
92
|
+
function resolveNearest(startId, propLocalName) {
|
|
93
|
+
let curId = startId;
|
|
94
|
+
const seen = new Set();
|
|
95
|
+
let first = true;
|
|
96
|
+
while (curId) {
|
|
97
|
+
if (seen.has(curId))
|
|
98
|
+
break;
|
|
99
|
+
seen.add(curId);
|
|
100
|
+
const info = styleMap.get(curId);
|
|
101
|
+
if (!info)
|
|
102
|
+
break;
|
|
103
|
+
const val = getRPrChildVal(info.rPr, propLocalName);
|
|
104
|
+
if (val !== null) {
|
|
105
|
+
return { value: val, isLocal: first };
|
|
106
|
+
}
|
|
107
|
+
first = false;
|
|
108
|
+
curId = info.basedOn;
|
|
109
|
+
}
|
|
110
|
+
return { value: null, isLocal: false };
|
|
111
|
+
}
|
|
112
|
+
let count = 0;
|
|
113
|
+
for (const targetId of targetIds) {
|
|
114
|
+
const info = styleMap.get(targetId);
|
|
115
|
+
if (!info)
|
|
116
|
+
continue;
|
|
117
|
+
// Resolve effective vertAlign (nearest-in-chain wins)
|
|
118
|
+
const vertAlign = resolveNearest(targetId, W.vertAlign);
|
|
119
|
+
if (vertAlign.value !== 'superscript')
|
|
120
|
+
continue;
|
|
121
|
+
// Resolve effective position
|
|
122
|
+
const position = resolveNearest(targetId, W.position);
|
|
123
|
+
if (position.value === null)
|
|
124
|
+
continue;
|
|
125
|
+
const posNum = parseInt(position.value, 10);
|
|
126
|
+
if (isNaN(posNum) || posNum <= 0)
|
|
127
|
+
continue;
|
|
128
|
+
// Double elevation detected — fix it
|
|
129
|
+
if (position.isLocal) {
|
|
130
|
+
// Remove the local w:position element from the target style's rPr
|
|
131
|
+
removeRPrChild(info.rPr, W.position);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Inherited position — add local w:position="0" to neutralize
|
|
135
|
+
const rPr = ensureRPr(stylesDoc, info.el);
|
|
136
|
+
addPositionZero(stylesDoc, rPr);
|
|
137
|
+
}
|
|
138
|
+
count++;
|
|
139
|
+
}
|
|
140
|
+
return { doubleElevationsFixed: count };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Remove a direct child element with the given localName from an rPr.
|
|
144
|
+
*/
|
|
145
|
+
function removeRPrChild(rPr, localName) {
|
|
146
|
+
let child = rPr.firstChild;
|
|
147
|
+
while (child) {
|
|
148
|
+
const next = child.nextSibling;
|
|
149
|
+
if (child.nodeType === 1 &&
|
|
150
|
+
child.namespaceURI === OOXML.W_NS &&
|
|
151
|
+
child.localName === localName) {
|
|
152
|
+
rPr.removeChild(child);
|
|
153
|
+
}
|
|
154
|
+
child = next;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Ensure the style element has a direct child rPr, creating one if needed.
|
|
159
|
+
*/
|
|
160
|
+
function ensureRPr(doc, styleEl) {
|
|
161
|
+
const existing = getDirectChildRPr(styleEl);
|
|
162
|
+
if (existing)
|
|
163
|
+
return existing;
|
|
164
|
+
const rPr = doc.createElementNS(OOXML.W_NS, 'w:rPr');
|
|
165
|
+
// Insert rPr as first child (after any w:name or w:basedOn per OOXML convention)
|
|
166
|
+
styleEl.insertBefore(rPr, styleEl.firstChild);
|
|
167
|
+
return rPr;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Add w:position w:val="0" to an rPr element.
|
|
171
|
+
*/
|
|
172
|
+
function addPositionZero(doc, rPr) {
|
|
173
|
+
// If there's already a w:position, update it rather than adding a duplicate
|
|
174
|
+
if (hasRPrChild(rPr, W.position)) {
|
|
175
|
+
let child = rPr.firstChild;
|
|
176
|
+
while (child) {
|
|
177
|
+
if (child.nodeType === 1 &&
|
|
178
|
+
child.namespaceURI === OOXML.W_NS &&
|
|
179
|
+
child.localName === W.position) {
|
|
180
|
+
child.setAttributeNS(OOXML.W_NS, 'w:val', '0');
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
child = child.nextSibling;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const posEl = doc.createElementNS(OOXML.W_NS, 'w:position');
|
|
187
|
+
posEl.setAttributeNS(OOXML.W_NS, 'w:val', '0');
|
|
188
|
+
rPr.appendChild(posEl);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=prevent_double_elevation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prevent_double_elevation.js","sourceRoot":"","sources":["../../src/primitives/prevent_double_elevation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* reject_changes — reject all tracked changes in a OOXML document body.
|
|
3
|
+
*
|
|
4
|
+
* Produces the document as it was before tracked changes were made by:
|
|
5
|
+
* - Removing w:ins elements AND their content (insertions undone)
|
|
6
|
+
* - Unwrapping w:del elements and converting w:delText → w:t (deletions restored)
|
|
7
|
+
* - Unwrapping w:moveFrom (keep at original position), removing w:moveTo and content
|
|
8
|
+
* - Restoring original properties from *PrChange records
|
|
9
|
+
* - Preserving cross-paragraph bookmark boundaries when removing inserted paragraphs
|
|
10
|
+
* - Stripping paragraph-level revision markers and rsidDel attributes
|
|
11
|
+
*
|
|
12
|
+
* Operates on the W3C DOM (`@xmldom/xmldom`).
|
|
13
|
+
*/
|
|
14
|
+
export type RejectChangesResult = {
|
|
15
|
+
insertionsRemoved: number;
|
|
16
|
+
deletionsRestored: number;
|
|
17
|
+
movesReverted: number;
|
|
18
|
+
propertyChangesReverted: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Reject all tracked changes in the document body, restoring the
|
|
22
|
+
* document to its pre-edit state.
|
|
23
|
+
*
|
|
24
|
+
* Mutates the Document in place (same convention as acceptChanges).
|
|
25
|
+
*/
|
|
26
|
+
export declare function rejectChanges(doc: Document): RejectChangesResult;
|
|
27
|
+
//# sourceMappingURL=reject_changes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reject_changes.d.ts","sourceRoot":"","sources":["../../src/primitives/reject_changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,MAAM,MAAM,mBAAmB,GAAG;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AA6NF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,mBAAmB,CAoJhE"}
|