diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2017-05-09 16:26:03 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-09 16:26:02 +0300 |
commit | 8a965b7585b7e8c4f2fea5cb4ee0746d450872be (patch) | |
tree | c383decb9f11accbda8085dc5b52ab2439cfb851 /main | |
parent | f84869cf0a83550e66e1ad4bbd5e327eae046acf (diff) | |
parent | 8b79ad7a6483b0623c7e44691f5cca52783660ed (diff) |
Merge pull request #2401 from mono/master-fix56094
[Ide] Preserve encoding when doing find in files.
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]; |