highlightInlineDiff method
Compute word-level inline diff between oldLine and newLine.
Returns a pair of span lists: the first for the old line, the second for the new line. Changed words are marked with InlineSpan.isChanged = true.
Implementation
(List<InlineSpan>, List<InlineSpan>) highlightInlineDiff(
String oldLine,
String newLine,
) {
final oldTokens = _tokenize(oldLine);
final newTokens = _tokenize(newLine);
final edits = _myersDiff(oldTokens, newTokens);
final oldSpans = <InlineSpan>[];
final newSpans = <InlineSpan>[];
for (final edit in edits) {
switch (edit.type) {
case _EditType.equal:
oldSpans.add(
InlineSpan(text: oldTokens[edit.oldIndex], isChanged: false),
);
newSpans.add(
InlineSpan(text: newTokens[edit.newIndex], isChanged: false),
);
break;
case _EditType.delete:
oldSpans.add(
InlineSpan(text: oldTokens[edit.oldIndex], isChanged: true),
);
break;
case _EditType.insert:
newSpans.add(
InlineSpan(text: newTokens[edit.newIndex], isChanged: true),
);
break;
}
}
return (_mergeSpans(oldSpans), _mergeSpans(newSpans));
}