override public bool Init() { lines.JoinSelections(); string text = ClipboardExecutor.GetFromRegister(lines, register); if (string.IsNullOrEmpty(text)) { return(false); } LineSubdivider subdivider = new LineSubdivider(text); if (subdivider.GetLinesCount() != selections.Count) { pasted = new string[selections.Count]; for (int i = 0; i < pasted.Length; i++) { pasted[i] = text; } } else { pasted = subdivider.GetLines(); for (int i = 0; i < pasted.Length; i++) { pasted[i] = LineSubdivider.GetWithoutEndRN(pasted[i]); } } mementos = GetSelectionMementos(); return(true); }
public int IndexOf(string text, int startIndex, int length) { Place place = PlaceOf(startIndex); int linesCount = LinesCount; if (text.IndexOf('\n') == -1 && text.IndexOf('\r') == -1) { return(SingleLineIndexOf(text, startIndex, length, place)); } LineSubdivider subdivider = new LineSubdivider(text, true); if (subdivider.GetLinesCount() == 1) { return(SingleLineIndexOf(text, startIndex, length, place)); } string[] texts = subdivider.GetLines(); string text0 = texts[0]; LineIterator iteratorI = GetLineRange(place.iLine, linesCount - place.iLine); iteratorI.MoveNext(); if (place.iChar > iteratorI.current.charsCount - text0.Length) { iteratorI.MoveNext(); } while (true) { Line line = iteratorI.current; if (line.Text.EndsWith(text0)) { int i = iteratorI.Index; bool correct = i + texts.Length <= linesCount; if (correct) { LineIterator iteratorJ = iteratorI.GetNextRange(texts.Length - 1); for (int j = 1; j < texts.Length - 1 && correct; j++) { iteratorJ.MoveNext(); if (texts[j] != iteratorJ.current.Text) { correct = false; } } iteratorJ.MoveNext(); if (correct && iteratorJ.current.Text.StartsWith(texts[texts.Length - 1])) { return(IndexOf(new Place(line.Text.Length - text0.Length, i))); } } } if (!iteratorI.MoveNext()) { break; } } return(-1); }