int Insert(int lineNumber, int offset, string text) { if (text == null || text.Length == 0) { return 0; } textLength += text.Length; if (lineCollection.Count == 0 || lineNumber >= lineCollection.Count) { return CreateLines(text, lineCollection.Count, offset); } LineSegment line = (LineSegment)lineCollection[lineNumber]; ISegment nextDelimiter = NextDelimiter(text, 0); if (nextDelimiter == null || nextDelimiter.Offset < 0) { line.TotalLength += text.Length; // Console.WriteLine("1:Line length of line {0} set to {1}", lineNumber, line.TotalLength - line.DelimiterLength); markLines.Add(line); OnLineLengthChanged(new LineLengthEventArgs(document, lineNumber, offset -line.Offset, text.Length)); return 0; } int restLength = line.Offset + line.TotalLength - offset; if (restLength > 0) { // Console.WriteLine("Insert: Set restline in line {0} to length {1}", lineNumber, restLength); LineSegment lineRest = new LineSegment(offset, restLength); lineRest.DelimiterLength = line.DelimiterLength; lineRest.Offset += text.Length; markLines.Add(lineRest); if (restLength - line.DelimiterLength < 0) { throw new ApplicationException("tried to insert inside delimiter string " + lineRest.ToString() + "!!!"); } lineCollection.Insert(lineNumber + 1, lineRest); OnLineCountChanged(new LineManagerEventArgs(document, lineNumber - 1, 1)); } line.DelimiterLength = nextDelimiter.Length; int nextStart = offset + nextDelimiter.Offset + nextDelimiter.Length; line.TotalLength = nextStart - line.Offset; // Console.WriteLine("2:Line length of line {0} set to {1}", lineNumber, line.TotalLength - line.DelimiterLength); markLines.Add(line); text = text.Substring(nextDelimiter.Offset + nextDelimiter.Length); return CreateLines(text, lineNumber + 1, nextStart) + 1; }
int Insert(int lineNumber, int offset, string text) { if (text == null || text.Length == 0) { return(0); } textLength += text.Length; if (lineCollection.Count == 0 || lineNumber >= lineCollection.Count) { return(CreateLines(text, lineCollection.Count, offset)); } LineSegment line = (LineSegment)lineCollection[lineNumber]; ISegment nextDelimiter = NextDelimiter(text, 0); if (nextDelimiter == null || nextDelimiter.Offset < 0) { line.TotalLength += text.Length; markLines.Add(line); OnLineLengthChanged(new LineLengthEventArgs(document, lineNumber, offset - line.Offset, text.Length)); return(0); } int restLength = line.Offset + line.TotalLength - offset; if (restLength > 0) { LineSegment lineRest = new LineSegment(offset, restLength); lineRest.DelimiterLength = line.DelimiterLength; lineRest.Offset += text.Length; markLines.Add(lineRest); if (restLength - line.DelimiterLength < 0) { throw new ApplicationException("tried to insert inside delimiter string " + lineRest.ToString() + "!!!"); } lineCollection.Insert(lineNumber + 1, lineRest); OnLineCountChanged(new LineManagerEventArgs(document, lineNumber - 1, 1)); } line.DelimiterLength = nextDelimiter.Length; int nextStart = offset + nextDelimiter.Offset + nextDelimiter.Length; line.TotalLength = nextStart - line.Offset; markLines.Add(line); text = text.Substring(nextDelimiter.Offset + nextDelimiter.Length); return(CreateLines(text, lineNumber + 1, nextStart) + 1); }