public void RemoveText(int offset, int length, DelayedEvents delayedEvents)
{
//Log("RemoveText(" + offset + ", " + length + ")");
if (length == 0 || root == null || offset >= root.totalLength)
{
return;
}
TextAnchorNode node = FindNode(ref offset);
while (node != null && offset + length > node.length)
{
TextAnchor anchor = (TextAnchor)node.Target;
if (anchor != null && anchor.SurviveDeletion)
{
// shorten node
length -= node.length - offset;
node.length = offset;
offset = 0;
UpdateAugmentedData(node);
node = node.Successor;
}
else
{
// delete node
TextAnchorNode s = node.Successor;
length -= node.length;
RemoveNode(node);
// we already deleted the node, don't delete it twice
nodesToDelete.Remove(node);
if (anchor != null)
{
anchor.OnDeleted(delayedEvents);
}
node = s;
}
}
if (node != null)
{
node.length -= length;
UpdateAugmentedData(node);
}
DeleteMarkedNodes();
}