private void UpdateEnd(int index, int delta) { FindPosition position = searchResult[index]; position.endPoint.X += delta; searchResult[index] = position; }
private void ReplaceSingleOccurence(FindPosition position, string textToReplace) { string resultString = lineList[position.startPoint.Y].Substring(0, position.startPoint.X); resultString += textToReplace; resultString += lineList[position.startPoint.Y].Substring(position.endPoint.X + 1); List <string> originalContent = new List <string>(); originalContent.Add(lineList[position.startPoint.Y]); undoRedoRecorder.RecordInsertion(position.startPoint.Y, 1, originalContent, position.endPoint); lineList[position.startPoint.Y] = resultString; }
private void UpdateStartEnd(int currentIndex, int delta) { FindPosition currentReplace = searchResult[currentIndex]; for (int i = currentIndex + 1; i < searchResult.Count; i++) { if (searchResult[i].endPoint.Y != currentReplace.endPoint.Y) { break; } else { FindPosition position = searchResult[i]; position.startPoint.X += delta; position.endPoint.X += delta; searchResult[i] = position; } } }
private void FindAllOccurences(string textToSearch, FindOptions option, bool isFindOnly) { searchResult = new List <FindPosition>(); int lineNumber = 0; int column = 0; foreach (string line in lineList) { if (option.HasFlag(FindOptions.MatchCase) || (prevOption != null && ((option.HasFlag(FindOptions.FindNext) || option.Equals(FindOptions.FindPrevious)) && prevOption.Equals("MatchCase")))) { column = line.IndexOf(textToSearch); } else { column = line.IndexOf(textToSearch, StringComparison.CurrentCultureIgnoreCase); } if (column != -1) { while (column != -1) { FindPosition position = new FindPosition(); position.startPoint = new Point(column, lineNumber); position.endPoint = new Point(column + textToSearch.Length - 1, lineNumber); searchResult.Add(position); if (column + textToSearch.Length < line.Length) { // "previousColumn stores how much column has already moved int previousColumn = column; if (option.HasFlag(FindOptions.MatchCase) || (prevOption != null && ((option.HasFlag(FindOptions.FindNext) || option.Equals(FindOptions.FindPrevious)) && prevOption.Equals("MatchCase")))) { column = line.Substring(column + textToSearch.Length).IndexOf(textToSearch); } else { column = line.Substring(column + textToSearch.Length).IndexOf(textToSearch, StringComparison.CurrentCultureIgnoreCase); } if (column != -1) { column += textToSearch.Length + previousColumn; } } else { break; } } } lineNumber++; } if (searchResult.Count <= 0) { CurrentSearchIndex = -1; } if ((option.HasFlag(FindOptions.FindNext) || option.HasFlag(FindOptions.FindPrevious) || option.HasFlag(FindOptions.ReplaceOnce) && !isFindOnly)) { return; } if (searchResult.Count > 0) { CurrentSearchIndex = 0; } if (option.HasFlag(FindOptions.MatchCase) || isFindOnly) { prevOption = option.ToString(); } }