internal void DeleteInBounds(SelectedTextBounds bounds) { var startStr = bounds.RealStart.Str; var startNum = bounds.RealStart.Chr; var endStr = bounds.RealEnd.Str; var endNum = bounds.RealEnd.Chr; if (bounds.IsOnOneLine) { _textLines[startStr] = _textLines[startStr].Remove(startNum, endNum - startNum); } else { if (startNum != _textLines[startStr].Length) { _textLines[startStr] = _textLines[startStr].Remove(startNum); } _textLines[startStr] += _textLines[endStr].Substring(endNum); var from = startStr + 1; var count = endStr - startStr; _textLines.RemoveRange(from, count); RemoveLineEvent?.Invoke(this, new TextLineEventArgs(from, count)); } UpdateLineEvent?.Invoke(this, new TextLineEventArgs(startStr)); }
internal string GetInBounds(SelectedTextBounds bounds) { var startStr = bounds.RealStart.Str; var startNum = bounds.RealStart.Chr; var endStr = bounds.RealEnd.Str; var endNum = bounds.RealEnd.Chr; string selectedText; if (bounds.IsOnOneLine) { selectedText = _textLines[endStr].Substring(startNum, endNum - startNum); } else { var firstLine = _textLines[startStr].Substring(startNum); var lastLine = _textLines[endStr].Substring(0, endNum); selectedText = endStr - startStr > 1 ? $"{firstLine}\r\n{string.Join("\r\n", _textLines.Where((s, i) => startStr < i && i < endStr))}\r\n{lastLine}" : $"{firstLine}\r\n{lastLine}"; } return(selectedText); }