public Replace ( int offset, int length, string replacement ) : void | ||
offset | int | |
length | int | |
replacement | string | |
Résultat | void |
public IEnumerable <SearchResult> Search(FileProvider provider, string content, string pattern, string replacePattern, FilterOptions filter) { if (string.IsNullOrEmpty(content)) { yield break; } int idx = provider.SelectionStartPosition < 0 ? 0 : Math.Max(0, provider.SelectionStartPosition); int delta = 0; var comparison = filter.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; int end = provider.SelectionEndPosition < 0 ? content.Length : Math.Min(content.Length, provider.SelectionEndPosition); while ((idx = content.IndexOf(pattern, idx, end - idx, comparison)) >= 0) { if (!filter.WholeWordsOnly || FilterOptions.IsWholeWordAt(content, idx, pattern.Length)) { if (replacePattern != null) { provider.Replace(idx + delta, pattern.Length, replacePattern); yield return(new SearchResult(provider, idx + delta, replacePattern.Length)); delta += replacePattern.Length - pattern.Length; } else { yield return(new SearchResult(provider, idx, pattern.Length)); } } idx += pattern.Length; } }
IEnumerable <SearchResult> RegexSearch(ProgressMonitor monitor, FileProvider provider, TextReader reader, string replacePattern, FilterOptions filter) { string content = reader.ReadToEnd(); var results = new List <SearchResult> (); if (replacePattern == null) { foreach (Match match in regex.Matches(content)) { if (monitor.CancellationToken.IsCancellationRequested) { break; } if (provider.SelectionStartPosition > -1 && match.Index < provider.SelectionStartPosition) { continue; } if (provider.SelectionEndPosition > -1 && match.Index + match.Length > provider.SelectionEndPosition) { continue; } if (!filter.WholeWordsOnly || FilterOptions.IsWholeWordAt(content, match.Index, match.Length)) { results.Add(new SearchResult(provider, match.Index, match.Length)); } } } else { var matches = new List <Match> (); foreach (Match match in regex.Matches(content)) { if (provider.SelectionStartPosition > -1 && match.Index < provider.SelectionStartPosition) { continue; } if (provider.SelectionEndPosition > -1 && match.Index + match.Length > provider.SelectionEndPosition) { continue; } matches.Add(match); } provider.BeginReplace(content); int delta = 0; for (int i = 0; !monitor.CancellationToken.IsCancellationRequested && i < matches.Count; i++) { Match match = matches[i]; if (!filter.WholeWordsOnly || FilterOptions.IsWholeWordAt(content, match.Index, match.Length)) { string replacement = match.Result(replacePattern); results.Add(new SearchResult(provider, match.Index + delta, replacement.Length)); provider.Replace(match.Index + delta, match.Length, replacement); delta += replacement.Length - match.Length; } } provider.EndReplace(); } return(results); }
public IEnumerable <SearchResult> Search(FileProvider provider, string content, string pattern, string replacePattern, FilterOptions filter) { if (!filter.CaseSensitive) { pattern = pattern.ToUpper(); content = content.ToUpper(); } int plen = pattern.Length - 1; int delta = 0; int i = 0, end = content.Length - pattern.Length; if (provider.SelectionStartPosition > -1) { i = provider.SelectionStartPosition; } if (provider.SelectionEndPosition > -1) { end = provider.SelectionEndPosition - pattern.Length; } while (i <= end) { int j = plen; while (j >= 0 && pattern[j] == content[i + j]) { j--; } if (j < 0) { int idx = i; if (!filter.WholeWordsOnly || FilterOptions.IsWholeWordAt(content, idx, pattern.Length)) { if (replacePattern != null) { yield return(new SearchResult(provider, idx + delta, replacePattern.Length)); provider.Replace(idx + delta, pattern.Length, replacePattern); delta += replacePattern.Length - pattern.Length; } else { yield return(new SearchResult(provider, idx, pattern.Length)); } } i += next[0]; } else if (j + 1 < next.Length && j + i < content.Length && content[j + i] < occ.Length) { i += System.Math.Max(next[j + 1], j - occ[(int)content[i + j]]); } else { i += next[0]; } } }
public void Replace(FileProvider provider, IEnumerable <SearchResult> searchResult, string replacePattern) { int delta = 0; foreach (var sr in searchResult) { provider.Replace(sr.Offset + delta, sr.Length, replacePattern); delta += replacePattern.Length - sr.Length; } }
public void Replace (FileProvider provider, IEnumerable<SearchResult> searchResult, string replacePattern) { int delta = 0; foreach (var sr in searchResult) { provider.Replace (sr.Offset + delta, sr.Length, replacePattern); delta += replacePattern.Length - sr.Length; } }
IEnumerable<SearchResult> RegexSearch (ProgressMonitor monitor, FileProvider provider, string content, string replacePattern, FilterOptions filter) { var results = new List<SearchResult> (); if (replacePattern == null) { foreach (Match match in regex.Matches (content)) { if (monitor.CancellationToken.IsCancellationRequested) break; if (provider.SelectionStartPosition > -1 && match.Index < provider.SelectionStartPosition) continue; if (provider.SelectionEndPosition > -1 && match.Index + match.Length > provider.SelectionEndPosition) continue; if (!filter.WholeWordsOnly || FilterOptions.IsWholeWordAt(content, match.Index, match.Length)) results.Add(new SearchResult(provider, match.Index, match.Length)); } } else { var matches = new List<Match> (); foreach (Match match in regex.Matches(content)) { if (provider.SelectionStartPosition > -1 && match.Index < provider.SelectionStartPosition) continue; if (provider.SelectionEndPosition > -1 && match.Index + match.Length > provider.SelectionEndPosition) continue; matches.Add(match); } provider.BeginReplace (content); int delta = 0; for (int i = 0; !monitor.CancellationToken.IsCancellationRequested && i < matches.Count; i++) { Match match = matches[i]; if (!filter.WholeWordsOnly || FilterOptions.IsWholeWordAt (content, match.Index, match.Length)) { string replacement = match.Result (replacePattern); results.Add (new SearchResult (provider, match.Index + delta, replacement.Length)); provider.Replace (match.Index + delta, match.Length, replacement); delta += replacement.Length - match.Length; } } provider.EndReplace (); } return results; }
public IEnumerable<SearchResult> Search (FileProvider provider, string content, string pattern, string replacePattern, FilterOptions filter) { if (string.IsNullOrEmpty (content)) yield break; int idx = provider.SelectionStartPosition < 0 ? 0 : Math.Max (0, provider.SelectionStartPosition); int delta = 0; var comparison = filter.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; int end = provider.SelectionEndPosition < 0 ? content.Length : Math.Min (content.Length, provider.SelectionEndPosition); while ((idx = content.IndexOf (pattern, idx, end - idx, comparison)) >= 0) { if (!filter.WholeWordsOnly || FilterOptions.IsWholeWordAt (content, idx, pattern.Length)) { if (replacePattern != null) { provider.Replace (idx + delta, pattern.Length, replacePattern); yield return new SearchResult (provider, idx + delta, replacePattern.Length); delta += replacePattern.Length - pattern.Length; } else { yield return new SearchResult (provider, idx, pattern.Length); } } idx += pattern.Length; } }
public IEnumerable<SearchResult> Search (FileProvider provider, string content, string pattern, string replacePattern, FilterOptions filter) { if (!filter.CaseSensitive) { pattern = pattern.ToUpper (); content = content.ToUpper (); } int plen = pattern.Length - 1; int delta = 0; int i = 0, end = content.Length - pattern.Length; if (provider.SelectionStartPosition > -1) i = provider.SelectionStartPosition; if (provider.SelectionEndPosition > -1) end = provider.SelectionEndPosition - pattern.Length; while (i <= end) { int j = plen; while (j >= 0 && pattern[j] == content[i + j]) j--; if (j < 0) { int idx = i; if (!filter.WholeWordsOnly || FilterOptions.IsWholeWordAt (content, idx, pattern.Length)) { if (replacePattern != null) { yield return new SearchResult (provider, idx + delta, replacePattern.Length); provider.Replace (idx + delta, pattern.Length, replacePattern); delta += replacePattern.Length - pattern.Length; } else { yield return new SearchResult (provider, idx, pattern.Length); } } i += next[0]; } else i += System.Math.Max (next[j + 1], j-occ[(int)content[i + j]]); } }