Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@xamarin.com>2017-05-09 16:26:03 +0300
committerGitHub <noreply@github.com>2017-05-09 16:26:02 +0300
commit8a965b7585b7e8c4f2fea5cb4ee0746d450872be (patch)
treec383decb9f11accbda8085dc5b52ab2439cfb851 /main
parentf84869cf0a83550e66e1ad4bbd5e327eae046acf (diff)
parent8b79ad7a6483b0623c7e44691f5cca52783660ed (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.cs9
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs6
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];