applyDeletion method
void
applyDeletion(
{ - required int startOffset,
- required int endOffset,
})
Implementation
void applyDeletion({required int startOffset, required int endOffset}) {
final range = _normalizedOffsets(startOffset, endOffset);
final deleteStart = range.start;
final deleteEnd = range.end;
final length = deleteEnd - deleteStart;
if (length <= 0) {
return;
}
final toDelete = <int>[];
for (final entry in _extmarks.entries.toList(growable: false)) {
final extmark = entry.value;
if (extmark.endOffset <= deleteStart) {
continue;
}
if (extmark.startOffset >= deleteEnd) {
_extmarks[entry.key] = TextExtmark(
id: extmark.id,
type: extmark.type,
startOffset: extmark.startOffset - length,
endOffset: extmark.endOffset - length,
virtual: extmark.virtual,
styleKey: extmark.styleKey,
priority: extmark.priority,
data: extmark.data,
);
continue;
}
if (extmark.startOffset >= deleteStart &&
extmark.endOffset <= deleteEnd) {
toDelete.add(entry.key);
continue;
}
if (extmark.startOffset < deleteStart && extmark.endOffset > deleteEnd) {
_extmarks[entry.key] = TextExtmark(
id: extmark.id,
type: extmark.type,
startOffset: extmark.startOffset,
endOffset: extmark.endOffset - length,
virtual: extmark.virtual,
styleKey: extmark.styleKey,
priority: extmark.priority,
data: extmark.data,
);
continue;
}
if (extmark.startOffset < deleteStart &&
extmark.endOffset > deleteStart) {
_extmarks[entry.key] = TextExtmark(
id: extmark.id,
type: extmark.type,
startOffset: extmark.startOffset,
endOffset: deleteStart,
virtual: extmark.virtual,
styleKey: extmark.styleKey,
priority: extmark.priority,
data: extmark.data,
);
continue;
}
if (extmark.startOffset < deleteEnd && extmark.endOffset > deleteEnd) {
_extmarks[entry.key] = TextExtmark(
id: extmark.id,
type: extmark.type,
startOffset: deleteStart,
endOffset: extmark.endOffset - length,
virtual: extmark.virtual,
styleKey: extmark.styleKey,
priority: extmark.priority,
data: extmark.data,
);
}
}
for (final id in toDelete) {
delete(id);
}
}