Replace() public méthode

public Replace ( int offset, int length, string replacement ) : void
offset int
length int
replacement string
Résultat void
Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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];
                }
            }
        }
Exemple #4
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]]);
			}
		}