diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index 5d40feb3e7..11b37f2ab1 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -1154,6 +1154,10 @@ shortcut = "Control|O" class = "ICSharpCode.SharpDevelop.Commands.OpenFile"/> + + diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs index 71f63f902e..dfae97e7e9 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs @@ -21,7 +21,7 @@ using ICSharpCode.SharpDevelop.Project.Converter; namespace CSharpBinding { /// - /// Description of CSharpProject. + /// IProject implementation for .csproj files. /// public class CSharpProject : CompilableProject { diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin index 2dcd14b0f4..841ba7d11a 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin @@ -16,8 +16,12 @@ + diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj index 5ef2ddd9fc..2848b9176c 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj @@ -80,6 +80,10 @@ + + ChooseEncodingDialog.xaml + Code + @@ -183,6 +187,7 @@ ICSharpCode.SharpDevelop.Dom False + diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs index 5c54543f33..f3e6b1c7de 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs @@ -6,7 +6,11 @@ // using System; +using System.IO; +using System.Text; + using ICSharpCode.AvalonEdit.Highlighting; +using ICSharpCode.AvalonEdit.Utils; using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; @@ -35,8 +39,32 @@ namespace ICSharpCode.AvalonEdit.AddIn public IViewContent CreateContentForFile(OpenedFile file) { - RegisterAddInHighlightingDefinitions(); return new AvalonEditViewContent(file); } } + + public class ChooseEncodingDisplayBinding : IDisplayBinding + { + public bool CanCreateContentForFile(string fileName) + { + return true; + } + + public IViewContent CreateContentForFile(OpenedFile file) + { + ChooseEncodingDialog dlg = new ChooseEncodingDialog(); + dlg.Owner = WorkbenchSingleton.MainWindow; + using (Stream stream = file.OpenRead()) { + using (StreamReader reader = FileReader.OpenStream(stream, Encoding.UTF8)) { + reader.Peek(); // force reader to auto-detect encoding + dlg.Encoding = reader.CurrentEncoding; + } + } + if (dlg.ShowDialog() == true) { + return new AvalonEditViewContent(file, dlg.Encoding); + } else { + return null; + } + } + } } diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs index d55dae8960..3a22fbfa89 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs @@ -8,16 +8,18 @@ using System; using System.IO; using System.Linq; +using System.Text; +using System.Windows.Threading; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Highlighting; +using ICSharpCode.AvalonEdit.Utils; using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Gui; -using System.Windows.Threading; namespace ICSharpCode.AvalonEdit.AddIn { @@ -31,12 +33,17 @@ namespace ICSharpCode.AvalonEdit.AddIn { readonly CodeEditor codeEditor = new CodeEditor(); - public AvalonEditViewContent(OpenedFile file) + public AvalonEditViewContent(OpenedFile file, Encoding fixedEncodingForLoading = null) { + if (fixedEncodingForLoading != null) { + codeEditor.UseFixedEncoding = true; + codeEditor.PrimaryTextEditor.Encoding = fixedEncodingForLoading; + } this.TabPageText = "${res:FormsDesigner.DesignTabPages.SourceTabPage}"; this.Files.Add(file); file.ForceInitializeView(this); + codeEditor.Document.Changed += textEditor_Document_Changed; codeEditor.CaretPositionChanged += CaretChanged; codeEditor.TextCopied += codeEditor_TextCopied; @@ -85,7 +92,7 @@ namespace ICSharpCode.AvalonEdit.AddIn codeEditor.PrimaryTextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinitionByExtension(Path.GetExtension(file.FileName)); - codeEditor.Load(stream); + codeEditor.Load(stream); // we set the file name after loading because this will place the fold markers etc. codeEditor.FileName = FileName.Create(file.FileName); BookmarksAttach(); diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml new file mode 100644 index 0000000000..bb446e7942 --- /dev/null +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml @@ -0,0 +1,43 @@ + + + +