@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 @@
|
|
|
1
|
+
{"version":3,"file":"paragraphAlignment.js","sourceRoot":"","sources":["../../../src/baselines/diffmatch/paragraphAlignment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline B: Pure TypeScript document comparison pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the comparison flow:
|
|
5
|
+
* 1. Load DOCX archives
|
|
6
|
+
* 2. Extract paragraphs
|
|
7
|
+
* 3. Align paragraphs (LCS + similarity)
|
|
8
|
+
* 4. Diff runs within matched paragraphs
|
|
9
|
+
* 5. Render track changes
|
|
10
|
+
* 6. Build output document
|
|
11
|
+
*/
|
|
12
|
+
import type { CompareResult } from '../../index.js';
|
|
13
|
+
/**
|
|
14
|
+
* Options for Baseline B comparison.
|
|
15
|
+
*/
|
|
16
|
+
export interface BaselineBOptions {
|
|
17
|
+
/** Author name for track changes. Default: "Comparison" */
|
|
18
|
+
author?: string;
|
|
19
|
+
/** Timestamp for track changes. Default: current time */
|
|
20
|
+
date?: Date;
|
|
21
|
+
/** Minimum similarity to consider paragraphs matched. Default: 0.5 */
|
|
22
|
+
similarityThreshold?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Compare two DOCX documents using the Baseline B (pure TypeScript) approach.
|
|
26
|
+
*
|
|
27
|
+
* @param original - Original document as Buffer
|
|
28
|
+
* @param revised - Revised document as Buffer
|
|
29
|
+
* @param options - Comparison options
|
|
30
|
+
* @returns Comparison result with track changes document
|
|
31
|
+
*/
|
|
32
|
+
export declare function compareDocumentsBaselineB(original: Buffer, revised: Buffer, options?: BaselineBOptions): Promise<CompareResult>;
|
|
33
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/baselines/diffmatch/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAWlE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,aAAa,CAAC,CAqDxB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline B: Pure TypeScript document comparison pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the comparison flow:
|
|
5
|
+
* 1. Load DOCX archives
|
|
6
|
+
* 2. Extract paragraphs
|
|
7
|
+
* 3. Align paragraphs (LCS + similarity)
|
|
8
|
+
* 4. Diff runs within matched paragraphs
|
|
9
|
+
* 5. Render track changes
|
|
10
|
+
* 6. Build output document
|
|
11
|
+
*/
|
|
12
|
+
import { DocxArchive } from '../../shared/docx/DocxArchive.js';
|
|
13
|
+
import { extractParagraphs } from './xmlParser.js';
|
|
14
|
+
import { alignParagraphs, classifyAlignment } from './paragraphAlignment.js';
|
|
15
|
+
import { resetRevisionIds } from './trackChangesRenderer.js';
|
|
16
|
+
import { generateParagraphOperations, buildDocumentWithTrackChanges, } from './documentBuilder.js';
|
|
17
|
+
/**
|
|
18
|
+
* Compare two DOCX documents using the Baseline B (pure TypeScript) approach.
|
|
19
|
+
*
|
|
20
|
+
* @param original - Original document as Buffer
|
|
21
|
+
* @param revised - Revised document as Buffer
|
|
22
|
+
* @param options - Comparison options
|
|
23
|
+
* @returns Comparison result with track changes document
|
|
24
|
+
*/
|
|
25
|
+
export async function compareDocumentsBaselineB(original, revised, options = {}) {
|
|
26
|
+
const { author = 'Comparison', date = new Date(), similarityThreshold = 0.5, } = options;
|
|
27
|
+
// 1. Load archives
|
|
28
|
+
const originalArchive = await DocxArchive.load(original);
|
|
29
|
+
const revisedArchive = await DocxArchive.load(revised);
|
|
30
|
+
// 2. Extract document XML
|
|
31
|
+
const originalXml = await originalArchive.getDocumentXml();
|
|
32
|
+
const revisedXml = await revisedArchive.getDocumentXml();
|
|
33
|
+
// 3. Extract paragraphs from both documents
|
|
34
|
+
const originalParagraphs = extractParagraphs(originalXml);
|
|
35
|
+
const revisedParagraphs = extractParagraphs(revisedXml);
|
|
36
|
+
// 4. Reset revision ID counter for this comparison
|
|
37
|
+
resetRevisionIds();
|
|
38
|
+
// 5. Align paragraphs between documents
|
|
39
|
+
const alignment = alignParagraphs(originalParagraphs, revisedParagraphs, similarityThreshold);
|
|
40
|
+
// 6. Generate paragraph operations with track changes
|
|
41
|
+
const operations = generateParagraphOperations(alignment, originalParagraphs, revisedParagraphs, { author, date });
|
|
42
|
+
// 7. Build new document.xml with track changes
|
|
43
|
+
const newDocumentXml = buildDocumentWithTrackChanges(originalXml, operations);
|
|
44
|
+
// 8. Clone original archive and update document.xml
|
|
45
|
+
const resultArchive = await originalArchive.clone();
|
|
46
|
+
resultArchive.setDocumentXml(newDocumentXml);
|
|
47
|
+
// 9. Save result and compute stats
|
|
48
|
+
const resultBuffer = await resultArchive.save();
|
|
49
|
+
const stats = computeStats(alignment, operations);
|
|
50
|
+
return {
|
|
51
|
+
document: resultBuffer,
|
|
52
|
+
stats,
|
|
53
|
+
engine: 'diffmatch',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Compute comparison statistics from alignment and operations.
|
|
58
|
+
*/
|
|
59
|
+
function computeStats(alignment, operations) {
|
|
60
|
+
// Count operations
|
|
61
|
+
let insertions = 0;
|
|
62
|
+
let deletions = 0;
|
|
63
|
+
let modifications = 0;
|
|
64
|
+
for (const op of operations) {
|
|
65
|
+
if (op.type === 'inserted') {
|
|
66
|
+
insertions++;
|
|
67
|
+
}
|
|
68
|
+
else if (op.type === 'deleted') {
|
|
69
|
+
deletions++;
|
|
70
|
+
}
|
|
71
|
+
else if (op.type === 'modified') {
|
|
72
|
+
modifications++;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Also count modifications from alignment for more accurate stats
|
|
76
|
+
const classification = classifyAlignment(alignment);
|
|
77
|
+
modifications = classification.modified.length;
|
|
78
|
+
return {
|
|
79
|
+
insertions,
|
|
80
|
+
deletions,
|
|
81
|
+
modifications,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/baselines/diffmatch/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAG/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,GAE9B,MAAM,sBAAsB,CAAC;AAc9B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAAgB,EAChB,OAAe,EACf,UAA4B,EAAE;IAE9B,MAAM,EACJ,MAAM,GAAG,YAAY,EACrB,IAAI,GAAG,IAAI,IAAI,EAAE,EACjB,mBAAmB,GAAG,GAAG,GAC1B,GAAG,OAAO,CAAC;IAEZ,mBAAmB;IACnB,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEvD,0BAA0B;IAC1B,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,cAAc,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,CAAC;IAEzD,4CAA4C;IAC5C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAExD,mDAAmD;IACnD,gBAAgB,EAAE,CAAC;IAEnB,wCAAwC;IACxC,MAAM,SAAS,GAAG,eAAe,CAC/B,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,CACpB,CAAC;IAEF,sDAAsD;IACtD,MAAM,UAAU,GAAG,2BAA2B,CAC5C,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;IAEF,+CAA+C;IAC/C,MAAM,cAAc,GAAG,6BAA6B,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAE9E,oDAAoD;IACpD,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;IACpD,aAAa,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAE7C,mCAAmC;IACnC,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAElD,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,KAAK;QACL,MAAM,EAAE,WAAW;KACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CACnB,SAA0B,EAC1B,UAAgC;IAEhC,mBAAmB;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3B,UAAU,EAAE,CAAC;QACf,CAAC;aAAM,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACjC,SAAS,EAAE,CAAC;QACd,CAAC;aAAM,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAClC,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACpD,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;IAE/C,OAAO;QACL,UAAU;QACV,SAAS;QACT,aAAa;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline B: Run-level diff using diff-match-patch.
|
|
3
|
+
*
|
|
4
|
+
* Performs character-level diff on matched paragraphs, then maps
|
|
5
|
+
* the diff operations back to run boundaries for track changes generation.
|
|
6
|
+
*/
|
|
7
|
+
import type { RunInfo, RunDiffResult, DiffOp } from '../../shared/ooxml/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Compute a diff between two strings.
|
|
10
|
+
*
|
|
11
|
+
* @param original - Original text
|
|
12
|
+
* @param revised - Revised text
|
|
13
|
+
* @param cleanupSemantic - Apply semantic cleanup (default: true)
|
|
14
|
+
* @returns Array of diff operations [operation, text]
|
|
15
|
+
*/
|
|
16
|
+
export declare function computeDiff(original: string, revised: string, cleanupSemantic?: boolean): DiffOp[];
|
|
17
|
+
/**
|
|
18
|
+
* Compute a word-level diff (more suitable for document comparison).
|
|
19
|
+
*
|
|
20
|
+
* Tokenizes input by words, performs diff, then reconstructs.
|
|
21
|
+
*/
|
|
22
|
+
export declare function computeWordDiff(original: string, revised: string): DiffOp[];
|
|
23
|
+
/**
|
|
24
|
+
* Split a run at a given character offset.
|
|
25
|
+
*
|
|
26
|
+
* @param run - The run to split
|
|
27
|
+
* @param offset - Character offset to split at
|
|
28
|
+
* @returns [before, after] runs
|
|
29
|
+
*/
|
|
30
|
+
export declare function splitRun(run: RunInfo, offset: number): [RunInfo, RunInfo];
|
|
31
|
+
/**
|
|
32
|
+
* Extract text from runs.
|
|
33
|
+
*/
|
|
34
|
+
export declare function extractText(runs: RunInfo[]): string;
|
|
35
|
+
/**
|
|
36
|
+
* Compute run-level diff between original and revised runs.
|
|
37
|
+
*
|
|
38
|
+
* Maps character-level diff back to run boundaries, splitting runs
|
|
39
|
+
* when necessary.
|
|
40
|
+
*
|
|
41
|
+
* @param originalRuns - Runs from original paragraph
|
|
42
|
+
* @param revisedRuns - Runs from revised paragraph
|
|
43
|
+
* @returns Merged runs with revision markers
|
|
44
|
+
*/
|
|
45
|
+
export declare function diffRuns(originalRuns: RunInfo[], revisedRuns: RunInfo[]): RunDiffResult;
|
|
46
|
+
/**
|
|
47
|
+
* Count changes in a diff result.
|
|
48
|
+
*/
|
|
49
|
+
export declare function countChanges(diffs: DiffOp[]): {
|
|
50
|
+
insertions: number;
|
|
51
|
+
deletions: number;
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=runDiff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runDiff.d.ts","sourceRoot":"","sources":["../../../src/baselines/diffmatch/runDiff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAclF;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,eAAe,UAAO,GACrB,MAAM,EAAE,CAQV;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAkB3E;AAuFD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAgBzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAEnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,YAAY,EAAE,OAAO,EAAE,EACvB,WAAW,EAAE,OAAO,EAAE,GACrB,aAAa,CAkGf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAavF"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline B: Run-level diff using diff-match-patch.
|
|
3
|
+
*
|
|
4
|
+
* Performs character-level diff on matched paragraphs, then maps
|
|
5
|
+
* the diff operations back to run boundaries for track changes generation.
|
|
6
|
+
*/
|
|
7
|
+
import DiffMatchPatch from 'diff-match-patch';
|
|
8
|
+
/** Diff operation codes from diff-match-patch */
|
|
9
|
+
const DIFF_DELETE = -1;
|
|
10
|
+
const DIFF_INSERT = 1;
|
|
11
|
+
const DIFF_EQUAL = 0;
|
|
12
|
+
/** Create a shared diff-match-patch instance */
|
|
13
|
+
const dmp = new DiffMatchPatch();
|
|
14
|
+
// Configure diff-match-patch for better document comparison
|
|
15
|
+
dmp.Diff_Timeout = 5; // 5 seconds timeout
|
|
16
|
+
dmp.Diff_EditCost = 4; // Favor fewer, larger edits
|
|
17
|
+
/**
|
|
18
|
+
* Compute a diff between two strings.
|
|
19
|
+
*
|
|
20
|
+
* @param original - Original text
|
|
21
|
+
* @param revised - Revised text
|
|
22
|
+
* @param cleanupSemantic - Apply semantic cleanup (default: true)
|
|
23
|
+
* @returns Array of diff operations [operation, text]
|
|
24
|
+
*/
|
|
25
|
+
export function computeDiff(original, revised, cleanupSemantic = true) {
|
|
26
|
+
const diffs = dmp.diff_main(original, revised);
|
|
27
|
+
if (cleanupSemantic) {
|
|
28
|
+
dmp.diff_cleanupSemantic(diffs);
|
|
29
|
+
}
|
|
30
|
+
return diffs;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Compute a word-level diff (more suitable for document comparison).
|
|
34
|
+
*
|
|
35
|
+
* Tokenizes input by words, performs diff, then reconstructs.
|
|
36
|
+
*/
|
|
37
|
+
export function computeWordDiff(original, revised) {
|
|
38
|
+
// Tokenize by words (keep punctuation attached to words)
|
|
39
|
+
const tokenize = (text) => {
|
|
40
|
+
return text.match(/\S+\s*/g) ?? [];
|
|
41
|
+
};
|
|
42
|
+
const originalTokens = tokenize(original);
|
|
43
|
+
const revisedTokens = tokenize(revised);
|
|
44
|
+
// Convert tokens to characters for diff-match-patch (1 token = 1 char)
|
|
45
|
+
const { chars1, chars2, lineArray } = tokensToChars(originalTokens, revisedTokens);
|
|
46
|
+
// Compute diff on character representation
|
|
47
|
+
const diffs = dmp.diff_main(chars1, chars2);
|
|
48
|
+
dmp.diff_cleanupSemantic(diffs);
|
|
49
|
+
// Convert back to actual text
|
|
50
|
+
return charsToTokens(diffs, lineArray);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Convert token arrays to character sequences for diffing.
|
|
54
|
+
*/
|
|
55
|
+
function tokensToChars(tokens1, tokens2) {
|
|
56
|
+
const tokenSet = new Map();
|
|
57
|
+
const lineArray = [];
|
|
58
|
+
const encode = (tokens) => {
|
|
59
|
+
let chars = '';
|
|
60
|
+
for (const token of tokens) {
|
|
61
|
+
if (!tokenSet.has(token)) {
|
|
62
|
+
tokenSet.set(token, lineArray.length);
|
|
63
|
+
lineArray.push(token);
|
|
64
|
+
}
|
|
65
|
+
chars += String.fromCharCode(tokenSet.get(token));
|
|
66
|
+
}
|
|
67
|
+
return chars;
|
|
68
|
+
};
|
|
69
|
+
const chars1 = encode(tokens1);
|
|
70
|
+
const chars2 = encode(tokens2);
|
|
71
|
+
return { chars1, chars2, lineArray };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Convert character diff back to token diff.
|
|
75
|
+
*/
|
|
76
|
+
function charsToTokens(diffs, lineArray) {
|
|
77
|
+
const result = [];
|
|
78
|
+
for (const [op, chars] of diffs) {
|
|
79
|
+
let text = '';
|
|
80
|
+
for (let i = 0; i < chars.length; i++) {
|
|
81
|
+
text += lineArray[chars.charCodeAt(i)] ?? '';
|
|
82
|
+
}
|
|
83
|
+
if (text) {
|
|
84
|
+
result.push([op, text]);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Map a character offset to a position in the run array.
|
|
91
|
+
*/
|
|
92
|
+
function offsetToRunPosition(runs, offset) {
|
|
93
|
+
let charCount = 0;
|
|
94
|
+
for (let i = 0; i < runs.length; i++) {
|
|
95
|
+
const run = runs[i];
|
|
96
|
+
const runLength = run.text.length;
|
|
97
|
+
if (charCount + runLength > offset) {
|
|
98
|
+
return {
|
|
99
|
+
runIndex: i,
|
|
100
|
+
charOffset: offset - charCount,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
charCount += runLength;
|
|
104
|
+
}
|
|
105
|
+
// Offset is at or past end
|
|
106
|
+
return {
|
|
107
|
+
runIndex: runs.length - 1,
|
|
108
|
+
charOffset: runs[runs.length - 1]?.text.length ?? 0,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Split a run at a given character offset.
|
|
113
|
+
*
|
|
114
|
+
* @param run - The run to split
|
|
115
|
+
* @param offset - Character offset to split at
|
|
116
|
+
* @returns [before, after] runs
|
|
117
|
+
*/
|
|
118
|
+
export function splitRun(run, offset) {
|
|
119
|
+
const before = {
|
|
120
|
+
text: run.text.slice(0, offset),
|
|
121
|
+
start: run.start,
|
|
122
|
+
end: run.start + offset,
|
|
123
|
+
properties: run.properties ? { ...run.properties } : undefined,
|
|
124
|
+
};
|
|
125
|
+
const after = {
|
|
126
|
+
text: run.text.slice(offset),
|
|
127
|
+
start: run.start + offset,
|
|
128
|
+
end: run.end,
|
|
129
|
+
properties: run.properties ? { ...run.properties } : undefined,
|
|
130
|
+
};
|
|
131
|
+
return [before, after];
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Extract text from runs.
|
|
135
|
+
*/
|
|
136
|
+
export function extractText(runs) {
|
|
137
|
+
return runs.map(r => r.text).join('');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Compute run-level diff between original and revised runs.
|
|
141
|
+
*
|
|
142
|
+
* Maps character-level diff back to run boundaries, splitting runs
|
|
143
|
+
* when necessary.
|
|
144
|
+
*
|
|
145
|
+
* @param originalRuns - Runs from original paragraph
|
|
146
|
+
* @param revisedRuns - Runs from revised paragraph
|
|
147
|
+
* @returns Merged runs with revision markers
|
|
148
|
+
*/
|
|
149
|
+
export function diffRuns(originalRuns, revisedRuns) {
|
|
150
|
+
const originalText = extractText(originalRuns);
|
|
151
|
+
const revisedText = extractText(revisedRuns);
|
|
152
|
+
// Compute character-level diff
|
|
153
|
+
const diffs = computeDiff(originalText, revisedText);
|
|
154
|
+
// Build merged runs with revision markers
|
|
155
|
+
const mergedRuns = [];
|
|
156
|
+
let originalOffset = 0;
|
|
157
|
+
let revisedOffset = 0;
|
|
158
|
+
for (const [op, text] of diffs) {
|
|
159
|
+
if (op === DIFF_EQUAL) {
|
|
160
|
+
// Equal text - use revised runs' formatting
|
|
161
|
+
const startPos = offsetToRunPosition(revisedRuns, revisedOffset);
|
|
162
|
+
const endPos = offsetToRunPosition(revisedRuns, revisedOffset + text.length);
|
|
163
|
+
// Extract runs that cover this range
|
|
164
|
+
for (let i = startPos.runIndex; i <= endPos.runIndex && i < revisedRuns.length; i++) {
|
|
165
|
+
const run = revisedRuns[i];
|
|
166
|
+
const runStart = i === startPos.runIndex ? startPos.charOffset : 0;
|
|
167
|
+
const runEnd = i === endPos.runIndex ? endPos.charOffset : run.text.length;
|
|
168
|
+
if (runEnd > runStart) {
|
|
169
|
+
mergedRuns.push({
|
|
170
|
+
text: run.text.slice(runStart, runEnd),
|
|
171
|
+
start: revisedOffset + runStart,
|
|
172
|
+
end: revisedOffset + runEnd,
|
|
173
|
+
properties: run.properties,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
originalOffset += text.length;
|
|
178
|
+
revisedOffset += text.length;
|
|
179
|
+
}
|
|
180
|
+
else if (op === DIFF_DELETE) {
|
|
181
|
+
// Deleted text - use original runs' formatting, mark as deletion
|
|
182
|
+
const startPos = offsetToRunPosition(originalRuns, originalOffset);
|
|
183
|
+
const endPos = offsetToRunPosition(originalRuns, originalOffset + text.length);
|
|
184
|
+
for (let i = startPos.runIndex; i <= endPos.runIndex && i < originalRuns.length; i++) {
|
|
185
|
+
const run = originalRuns[i];
|
|
186
|
+
const runStart = i === startPos.runIndex ? startPos.charOffset : 0;
|
|
187
|
+
const runEnd = i === endPos.runIndex ? endPos.charOffset : run.text.length;
|
|
188
|
+
if (runEnd > runStart) {
|
|
189
|
+
mergedRuns.push({
|
|
190
|
+
text: run.text.slice(runStart, runEnd),
|
|
191
|
+
start: originalOffset + runStart,
|
|
192
|
+
end: originalOffset + runEnd,
|
|
193
|
+
properties: run.properties,
|
|
194
|
+
revision: {
|
|
195
|
+
id: 0, // Will be assigned later
|
|
196
|
+
author: '',
|
|
197
|
+
date: new Date(),
|
|
198
|
+
type: 'deletion',
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
originalOffset += text.length;
|
|
204
|
+
}
|
|
205
|
+
else if (op === DIFF_INSERT) {
|
|
206
|
+
// Inserted text - use revised runs' formatting, mark as insertion
|
|
207
|
+
const startPos = offsetToRunPosition(revisedRuns, revisedOffset);
|
|
208
|
+
const endPos = offsetToRunPosition(revisedRuns, revisedOffset + text.length);
|
|
209
|
+
for (let i = startPos.runIndex; i <= endPos.runIndex && i < revisedRuns.length; i++) {
|
|
210
|
+
const run = revisedRuns[i];
|
|
211
|
+
const runStart = i === startPos.runIndex ? startPos.charOffset : 0;
|
|
212
|
+
const runEnd = i === endPos.runIndex ? endPos.charOffset : run.text.length;
|
|
213
|
+
if (runEnd > runStart) {
|
|
214
|
+
mergedRuns.push({
|
|
215
|
+
text: run.text.slice(runStart, runEnd),
|
|
216
|
+
start: revisedOffset + runStart,
|
|
217
|
+
end: revisedOffset + runEnd,
|
|
218
|
+
properties: run.properties,
|
|
219
|
+
revision: {
|
|
220
|
+
id: 0, // Will be assigned later
|
|
221
|
+
author: '',
|
|
222
|
+
date: new Date(),
|
|
223
|
+
type: 'insertion',
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
revisedOffset += text.length;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
originalRuns,
|
|
233
|
+
revisedRuns,
|
|
234
|
+
mergedRuns,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Count changes in a diff result.
|
|
239
|
+
*/
|
|
240
|
+
export function countChanges(diffs) {
|
|
241
|
+
let insertions = 0;
|
|
242
|
+
let deletions = 0;
|
|
243
|
+
for (const [op, text] of diffs) {
|
|
244
|
+
if (op === DIFF_INSERT) {
|
|
245
|
+
insertions += text.length;
|
|
246
|
+
}
|
|
247
|
+
else if (op === DIFF_DELETE) {
|
|
248
|
+
deletions += text.length;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return { insertions, deletions };
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=runDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runDiff.js","sourceRoot":"","sources":["../../../src/baselines/diffmatch/runDiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline B: Track changes OOXML renderer.
|
|
3
|
+
*
|
|
4
|
+
* Generates OOXML track changes markup (w:ins, w:del) from diff results.
|
|
5
|
+
*/
|
|
6
|
+
import type { RunInfo } from '../../shared/ooxml/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Reset the revision ID counter.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resetRevisionIds(): void;
|
|
11
|
+
/**
|
|
12
|
+
* Allocate a new revision ID.
|
|
13
|
+
*/
|
|
14
|
+
export declare function allocateRevisionId(): number;
|
|
15
|
+
/**
|
|
16
|
+
* Format a date for OOXML (ISO 8601 format).
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatOoxmlDate(date: Date): string;
|
|
19
|
+
/**
|
|
20
|
+
* Escape XML special characters.
|
|
21
|
+
*/
|
|
22
|
+
export declare function escapeXml(text: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Generate insertion markup.
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateInsertion(runs: RunInfo[], author: string, date: Date): string;
|
|
27
|
+
/**
|
|
28
|
+
* Generate deletion markup.
|
|
29
|
+
*/
|
|
30
|
+
export declare function generateDeletion(runs: RunInfo[], author: string, date: Date): string;
|
|
31
|
+
/**
|
|
32
|
+
* Generate unchanged run markup.
|
|
33
|
+
*/
|
|
34
|
+
export declare function generateUnchangedRun(run: RunInfo): string;
|
|
35
|
+
/**
|
|
36
|
+
* Options for rendering track changes.
|
|
37
|
+
*/
|
|
38
|
+
export interface RenderOptions {
|
|
39
|
+
/** Author name for revisions */
|
|
40
|
+
author: string;
|
|
41
|
+
/** Timestamp for revisions */
|
|
42
|
+
date: Date;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Render merged runs with track changes to OOXML.
|
|
46
|
+
*
|
|
47
|
+
* @param mergedRuns - Runs with revision markers from diffRuns()
|
|
48
|
+
* @param options - Rendering options
|
|
49
|
+
* @returns OOXML paragraph content with track changes
|
|
50
|
+
*/
|
|
51
|
+
export declare function renderTrackChanges(mergedRuns: RunInfo[], options: RenderOptions): string;
|
|
52
|
+
/**
|
|
53
|
+
* Wrap content in a paragraph element.
|
|
54
|
+
*/
|
|
55
|
+
export declare function wrapInParagraph(content: string, pPr?: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Generate a complete deleted paragraph.
|
|
58
|
+
*/
|
|
59
|
+
export declare function generateDeletedParagraph(runs: RunInfo[], author: string, date: Date, pPr?: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Generate a complete inserted paragraph.
|
|
62
|
+
*/
|
|
63
|
+
export declare function generateInsertedParagraph(runs: RunInfo[], author: string, date: Date, pPr?: string): string;
|
|
64
|
+
//# sourceMappingURL=trackChangesRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trackChangesRenderer.d.ts","sourceRoot":"","sources":["../../../src/baselines/diffmatch/trackChangesRenderer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAK3D;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C;AA2DD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,GACT,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,GACT,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,OAAO,EAAE,EACrB,OAAO,EAAE,aAAa,GACrB,MAAM,CAsCR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAGR"}
|