public void TextInsert (int offset, string text)
{
if (string.IsNullOrEmpty (text))
return;
var line = GetNodeAtOffset (offset);
int textOffset = 0;
int lineOffset = line.Offset;
while (true) {
var delimiter = NextDelimiter (text, textOffset);
if (delimiter.IsInvalid)
break;
int newLineLength = lineOffset + line.LengthIncludingDelimiter - (offset + textOffset);
int delimiterEndOffset = delimiter.Offset + delimiter.Length;
int curLineLength = offset + delimiterEndOffset - lineOffset;
int oldDelimiterLength = line.DelimiterLength;
ChangeLength (line, curLineLength, delimiter.Length);
line = InsertAfter (line, newLineLength, oldDelimiterLength);
textOffset = delimiterEndOffset;
lineOffset += curLineLength;
}
if (textOffset != text.Length)
ChangeLength (line, line.LengthIncludingDelimiter + text.Length - textOffset);
}