deleteImmutable method
Creates a new Rope with text deleted between start and end (immutable)
Implementation
Rope deleteImmutable(int start, int end) {
if (start < 0 || end < start || end > _length) {
throw RangeError('Invalid range: [$start, $end) for length $_length');
}
if (start == end) return Rope._fromNode(_root, _length);
final first = _split(_root, start);
final second = _split(first.right, end - start);
final newRoot = _concat(first.left, second.right);
return Rope._fromNode(newRoot, _length - (end - start));
}