Created
May 2, 2024 14:50
-
-
Save bjoerntx/ac51f297863bdddadd4df807923ebbd9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public DocumentComparison(TXTextControl.TextControl originalDocument, TextControl revisedDocument) | |
{ | |
// Initialize document references | |
m_originalDocument = originalDocument; | |
m_revisedDocument = revisedDocument; | |
// Enable track changes in the original document | |
originalDocument.IsTrackChangesEnabled = true; | |
// Compare paragraphs between the original and revised documents | |
for (int p = 1; p <= m_originalDocument.Paragraphs.Count; p++) | |
{ | |
var offsetSentences = 0; | |
// Retrieve the original and revised paragraphs | |
Paragraph originalParagraph = m_originalDocument.Paragraphs[p]; | |
if (p > m_revisedDocument.Paragraphs.Count) | |
break; // Break if the revised document has fewer paragraphs than the original document | |
Paragraph revisedParagraph = m_revisedDocument.Paragraphs[p]; | |
// Get the start position of the original paragraph | |
var startParagraph = originalParagraph.Start; | |
var uncheckedOffset = 0; | |
// Check if the text of the original and revised paragraphs differ | |
if (originalParagraph.Text != revisedParagraph.Text) | |
{ | |
// Extract sentences from the original and revised paragraphs | |
var originalSentences = ExtractSentences(originalParagraph.Text); | |
var revisedSentences = ExtractSentences(revisedParagraph.Text); | |
// Compare sentences and replace words in the original document | |
for (int i = 0; i < originalSentences.Count; i++) | |
{ | |
// Trim sentences and calculate offset | |
var originalTrimOffset = originalSentences[i].Length - originalSentences[i].Trim().Length; | |
var originalSentence = originalSentences[i].Trim(); | |
var revisedSentence = revisedSentences[i].Trim(); | |
// Track changes offset initialization | |
int trackedChangeOffset = 0; | |
var differences = CompareSentences(originalSentence, revisedSentence); | |
// Check if there are any differences | |
if (differences.Count == 0) | |
uncheckedOffset = originalSentences[i].Length - 1; | |
// Apply differences to the original document | |
foreach (var difference in differences) | |
{ | |
m_originalDocument.Selection.Start = trackedChangeOffset + startParagraph + offsetSentences + | |
difference.charIndex + originalTrimOffset + uncheckedOffset - 1; | |
m_originalDocument.Selection.Length = difference.word.Length; | |
m_originalDocument.Selection.Text = difference.replacedWord; | |
trackedChangeOffset += difference.replacedWord.Length; | |
} | |
// Update offset for next sentence | |
offsetSentences += originalSentences[i].Length + trackedChangeOffset; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment