Skip to content

Instantly share code, notes, and snippets.

@bjoerntx
Created May 2, 2024 14:50
Show Gist options
  • Save bjoerntx/ac51f297863bdddadd4df807923ebbd9 to your computer and use it in GitHub Desktop.
Save bjoerntx/ac51f297863bdddadd4df807923ebbd9 to your computer and use it in GitHub Desktop.
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