public void TextRemove (int offset, int length)
{
if (length == 0 || (Count == 1 && Length == 0))
return;
var startNode = GetNodeAtOffset (offset);
int charsRemoved = startNode.EndOffsetIncludingDelimiter - offset;
if (offset + length < startNode.EndOffsetIncludingDelimiter) {
ChangeLength (startNode, startNode.LengthIncludingDelimiter - length);
return;
}
var endNode = GetNodeAtOffset (offset + length);
if (endNode == null)
return;
int charsLeft = endNode.EndOffsetIncludingDelimiter - (offset + length);
if (startNode == endNode) {
ChangeLength (startNode, startNode.LengthIncludingDelimiter - length);
return;
}
var iter = startNode;
iter = iter.GetNextNode ();
int lineNumber = iter.LineNumber;
TreeNode line;
do {
line = iter;
iter = iter.GetNextNode ();
RemoveLine (line, lineNumber);
} while (line != endNode);
ChangeLength (startNode, startNode.LengthIncludingDelimiter - charsRemoved + charsLeft, endNode.DelimiterLength);
}