diff options
Diffstat (limited to 'main')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs | 9 | ||||
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs | 6 |
2 files changed, 11 insertions, 4 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs index 0c57a7c40e..5b8b035080 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs @@ -60,6 +60,8 @@ namespace MonoDevelop.Ide.FindInFiles set; } + public Encoding CurrentEncoding { get; private set; } + public FileProvider(string fileName) : this(fileName, null) { } @@ -107,7 +109,9 @@ namespace MonoDevelop.Ide.FindInFiles return null; if (!readBinaryFiles && TextFileUtility.IsBinary (FileName)) return null; - return TextFileUtility.OpenStream (FileName); + var sr = TextFileUtility.OpenStream (FileName); + CurrentEncoding = sr.CurrentEncoding; + return sr; } catch (Exception e) { LoggingService.LogError ("Error while opening " + FileName, e); return null; @@ -126,11 +130,12 @@ namespace MonoDevelop.Ide.FindInFiles IDisposable undoGroup; Encoding encoding; - public async void BeginReplace (string content) + public async void BeginReplace (string content, Encoding encoding) { somethingReplaced = false; buffer = new StringBuilder (content); document = await SearchDocument (); + this.encoding = encoding; if (document != null) { Gtk.Application.Invoke (delegate { undoGroup = document.Editor.OpenUndoGroup (); diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs index f70545988b..2a90d12253 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs @@ -85,6 +85,7 @@ namespace MonoDevelop.Ide.FindInFiles public TextReader Reader; public List<SearchResult> Results; public string Text { get; internal set; } + public System.Text.Encoding Encoding { get; internal set; } public FileSearchResult (FileProvider provider, TextReader reader, List<SearchResult> results) { @@ -172,6 +173,7 @@ namespace MonoDevelop.Ide.FindInFiles Interlocked.Increment (ref searchedFilesCount); if (replacePattern != null) { content.Text = content.Reader.ReadToEnd (); + content.Encoding = content.Provider.CurrentEncoding; content.Reader = new StringReader (content.Text); } content.Results.AddRange(FindAll (monitor, content.Provider, content.Reader, pattern, replacePattern, filter)); @@ -193,7 +195,7 @@ namespace MonoDevelop.Ide.FindInFiles if (content.Results.Count == 0) continue; try { - content.Provider.BeginReplace (content.Text); + content.Provider.BeginReplace (content.Text, content.Encoding); Replace (content.Provider, content.Results, replacePattern); content.Provider.EndReplace (); } catch (Exception e) { @@ -248,7 +250,7 @@ namespace MonoDevelop.Ide.FindInFiles continue; matches.Add(match); } - provider.BeginReplace (content); + provider.BeginReplace (content, provider.CurrentEncoding); int delta = 0; for (int i = 0; !monitor.CancellationToken.IsCancellationRequested && i < matches.Count; i++) { Match match = matches[i]; |