Browse Source

Allow user to specify an encoding when opening a text file.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5627 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 16 years ago
parent
commit
cf7adb39dd
  1. 5
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
  3. 6
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
  4. 5
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
  5. 30
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs
  6. 13
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs
  7. 43
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml
  8. 165
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml.cs
  9. 20
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  10. 2
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Commands/SortSelectionCommand.cs
  11. 3
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs
  12. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  13. 48
      src/Main/Base/Project/Src/Commands/FileCommands.cs
  14. 8
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs
  15. 2
      src/Main/Base/Project/Src/Project/CompilableProject.cs
  16. 262
      src/Main/Base/Project/Src/TextEditor/CharacterEncodings.cs
  17. 1
      src/Main/Base/Project/Src/TextEditor/ClipboardHandling.cs
  18. 1
      src/Main/Base/Project/Src/TextEditor/Gui/TextEditorAdapter.cs
  19. 4
      src/Main/Base/Project/Src/Util/SDWindowsFormsHost.cs

5
AddIns/ICSharpCode.SharpDevelop.addin

@ -1154,6 +1154,10 @@ @@ -1154,6 +1154,10 @@
shortcut = "Control|O"
class = "ICSharpCode.SharpDevelop.Commands.OpenFile"/>
<MenuItem id = "OpenWith"
label = "${res:Gui.ProjectBrowser.OpenWith}"
class = "ICSharpCode.SharpDevelop.Commands.OpenFileWith"/>
<MenuItem id = "Project"
label = "${res:XML.MainMenu.FileMenu.Open.Project}"
icon = "Icons.16x16.OpenProjectIcon"
@ -1698,7 +1702,6 @@ @@ -1698,7 +1702,6 @@
<Path name = "/SharpDevelop/Workbench/DisplayBindings">
<DisplayBinding id = "ShellExecute"
insertafter = "Text"
title = "${res:Gui.ProjectBrowser.OpenWith.Bindings.DefaultWindowsApplication}"
class = "ICSharpCode.SharpDevelop.ShellExecuteDisplayBinding" />
</Path>

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs

@ -21,7 +21,7 @@ using ICSharpCode.SharpDevelop.Project.Converter; @@ -21,7 +21,7 @@ using ICSharpCode.SharpDevelop.Project.Converter;
namespace CSharpBinding
{
/// <summary>
/// Description of CSharpProject.
/// IProject implementation for .csproj files.
/// </summary>
public class CSharpProject : CompilableProject
{

6
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin

@ -16,8 +16,12 @@ @@ -16,8 +16,12 @@
<Path name = "/SharpDevelop/Workbench/DisplayBindings">
<DisplayBinding id = "Text"
title = "${res:Gui.ProjectBrowser.OpenWith.Bindings.TextEditor} (AvalonEdit)"
title = "${res:Gui.ProjectBrowser.OpenWith.Bindings.TextEditor}"
class = "ICSharpCode.AvalonEdit.AddIn.AvalonEditDisplayBinding"/>
<DisplayBinding id = "TextWithEncoding"
insertbefore = "ShellExecute"
title = "${res:Gui.ProjectBrowser.OpenWith.Bindings.TextEditorWithEncoding}"
class = "ICSharpCode.AvalonEdit.AddIn.ChooseEncodingDisplayBinding"/>
</Path>
<Path name = "/SharpDevelop/ViewContent/AvalonEdit/ContextMenu">

5
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj

@ -80,6 +80,10 @@ @@ -80,6 +80,10 @@
<Compile Include="Src\AvalonEditEditorUIService.cs" />
<Compile Include="Src\AvalonEditViewContent.cs" />
<Compile Include="Src\BracketHighlightRenderer.cs" />
<Compile Include="Src\ChooseEncodingDialog.xaml.cs">
<DependentUpon>ChooseEncodingDialog.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\CodeEditor.cs" />
<Compile Include="Src\CodeEditorAdapter.cs" />
<Compile Include="Src\CodeEditorView.cs" />
@ -183,6 +187,7 @@ @@ -183,6 +187,7 @@
<Name>ICSharpCode.SharpDevelop.Dom</Name>
<Private>False</Private>
</ProjectReference>
<Page Include="Src\ChooseEncodingDialog.xaml" />
<Page Include="Src\Commands\SortOptionsDialog.xaml" />
<Page Include="Src\Options\BehaviorOptions.xaml" />
<Page Include="Src\Options\GeneralEditorOptions.xaml" />

30
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditDisplayBinding.cs

@ -6,7 +6,11 @@ @@ -6,7 +6,11 @@
// </file>
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 @@ -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;
}
}
}
}

13
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs

@ -8,16 +8,18 @@ @@ -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 @@ -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 @@ -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();

43
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<Window
x:Class="ICSharpCode.AvalonEdit.AddIn.ChooseEncodingDialog" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:core="http://icsharpcode.net/sharpdevelop/core"
Title="{core:Localize Dialog.Options.IDEOptions.TextEditor.General.FontGroupBox.FileEncodingGroupBox}"
Width="335"
SizeToContent="Height"
ResizeMode="NoResize"
WindowStartupLocation="CenterOwner"
Style="{x:Static core:GlobalStyles.DialogWindowStyle}">
<StackPanel>
<Label
Margin="8"
Content="{core:Localize Dialog.Options.IDEOptions.TextEditor.General.FontGroupBox.FileEncodingLabel}" />
<ComboBox
Name="encodingComboBox"
Margin="16,0,8,8" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding EncodingName}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<StackPanel
Orientation="Horizontal"
HorizontalAlignment="Right">
<Button
Content="{core:Localize Global.OKButtonText}"
Width="75"
Height="23"
Name="okButton"
IsDefault="True"
Margin="4"
Click="okButton_Click" />
<Button
Content="{core:Localize Global.CancelButtonText}"
Width="75"
Height="23"
Name="cancelButton"
IsCancel="True"
Margin="4" />
</StackPanel>
</StackPanel>
</Window>

165
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChooseEncodingDialog.xaml.cs

@ -0,0 +1,165 @@ @@ -0,0 +1,165 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <author name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
namespace ICSharpCode.AvalonEdit.AddIn
{
/// <summary>
/// Interaction logic for ChooseEncodingDialog.xaml
/// </summary>
public partial class ChooseEncodingDialog : Window
{
static int[] _wellKnownCodePages = {
37, // IBM EBCDIC (US-Canada)
437, // OEM United States
500, // IBM EBCDIC (International)
708, // Arabic (ASMO 708)
850, // Western European (DOS)
852, // Central European (DOS)
855, // Cyrillic (DOS)
857, // Turkish (DOS)
858, // Western European (DOS with Euro)
860, // Portuguese (DOS)
861, // Icelandic (DOS)
862, // Hebrew (DOS)
863, // French Canadian (DOS)
864, // Arabic (DOS)
865, // Nordic (DOS)
866, // Russian (DOS)
869, // Greek (DOS)
870, // IBM EBCDIC (Latin 2)
874, // Thai (Windows)
875, // IBM EBCDIC (Greek)
932, // Japanese (Shift-JIS)
936, // Chinese Simplified (GB2312)
949, // Korean
950, // Chinese Traditional (Big5)
1026, // IBM EBCDIC (Turkish)
1047, // IBM EBCDIC (Open Systems Latin 1)
1140, // IBM EBCDIC (US-Canada with Euro)
1141, // IBM EBCDIC (Germany with Euro)
1142, // IBM EBCDIC (Denmark/Norway with Euro)
1143, // IBM EBCDIC (Finland/Sweden with Euro)
1144, // IBM EBCDIC (Italy with Euro)
1145, // IBM EBCDIC (Latin America/Spain with Euro)
1146, // IBM EBCDIC (United Kingdom with Euro)
1147, // IBM EBCDIC (France with Euro)
1148, // IBM EBCDIC (International with Euro)
1149, // IBM EBCDIC (Icelandic with Euro)
1200, // Unicode (UTF-16 LE)
1201, // Unicode (UTF-16 Big-Endian)
1250, // Central European (Windows)
1251, // Cyrillic (Windows)
1252, // Western European (Windows)
1253, // Greek (Windows)
1254, // Turkish (Windows)
1255, // Hebrew (Windows)
1256, // Arabic (Windows)
1257, // Baltic (Windows)
1258, // Vietnamese (Windows)
10000, // Western European (Mac)
10007, // Cyrillic (Mac)
10017, // Ukrainian (Mac)
10079, // Icelandic (Mac)
12000, // UTF-32 LE
12001, // UTF-32 BE
20127, // US-ASCII
20261, // T.61
20273, // IBM EBCDIC (Germany)
20277, // IBM EBCDIC (Denmark/Norway)
20278, // IBM EBCDIC (Finland/Sweden)
20280, // IBM EBCDIC (Italy)
20284, // IBM EBCDIC (Latin America/Spain)
20285, // IBM EBCDIC (United Kingdom)
20290, // IBM EBCDIC (Japanese Katakana Extended)
20297, // IBM EBCDIC (France)
20420, // IBM EBCDIC (Arabic)
20424, // IBM EBCDIC (Hebrew)
20866, // Cyrillic (KOI8-R)
20871, // IBM EBCDIC (Icelandic)
21025, // IBM EBCDIC (Cyrillic - Serbian, Bulgarian)
21866, // Ukrainian (KOI8-U)
28591, // Western European (ISO)
28592, // Central European (ISO)
28593, // Latin 3 (ISO)
28594, // Baltic (ISO)
28595, // Cyrillic (ISO)
28596, // Arabic (ISO)
28597, // Greek (ISO)
28598, // Hebrew (ISO)
28599, // Latin 5 (ISO)
28605, // Latin 9 (ISO)
38598, // Hebrew (ISO Alternative)
50220, // Japanese (JIS)
50221, // Japanese (JIS-Allow 1 byte Kana)
50222, // Japanese (JIS-Allow 1 byte Kana - SO/SI)
50225, // Korean (ISO)
50227, // Chinese Simplified (ISO-2022)
51932, // Japanese (EUC)
51936, // Chinese Simplified (EUC)
52936, // Chinese Simplified (HZ)
54936, // Chinese Simplified (GB18030)
57002, // ISCII Devanagari
57003, // ISCII Bengali
57004, // ISCII Tamil
57005, // ISCII Telugu
57006, // ISCII Assamese
57007, // ISCII Oriya
57008, // ISCII Kannada
57009, // ISCII Malayalam
57010, // ISCII Gujarati
57011, // ISCII Punjabi
65000, // Unicode (UTF-7)
65001 // Unicode (UTF-8)
};
public static IList<Encoding> GetSupportedEncodings()
{
List<Encoding> list = new List<Encoding>();
foreach (int cp in _wellKnownCodePages) {
try {
list.Add(Encoding.GetEncoding(cp));
} catch (ArgumentException) {
} catch (NotSupportedException) {
// ignore possible
// System.ArgumentException or
// System.NotSupportedException because
// .NET fx, mono, rotor & Portable.NET
// support different sets of encodings
}
}
list.Sort((a,b) => a.EncodingName.CompareTo(b.EncodingName));
return list;
}
public ChooseEncodingDialog()
{
InitializeComponent();
encodingComboBox.ItemsSource = GetSupportedEncodings();
}
public Encoding Encoding {
get { return (Encoding)encodingComboBox.SelectedItem; }
set { encodingComboBox.SelectedItem = value; }
}
void okButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
Close();
}
}
}

20
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs

@ -10,6 +10,7 @@ using System.Collections.ObjectModel; @@ -10,6 +10,7 @@ using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
@ -244,11 +245,23 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -244,11 +245,23 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
}
/// <summary>
/// Use fixed encoding for loading.
/// </summary>
public bool UseFixedEncoding { get; set; }
// always use primary text editor for loading/saving
// (the file encoding is stored only there)
public void Load(Stream stream)
{
primaryTextEditor.Load(stream);
if (UseFixedEncoding) {
using (StreamReader reader = new StreamReader(stream, primaryTextEditor.Encoding, detectEncodingFromByteOrderMarks: false)) {
primaryTextEditor.Text = reader.ReadToEnd();
}
} else {
// let AvalonEdit do auto-detection
primaryTextEditor.Load(stream);
}
}
public void Save(Stream stream)
@ -554,8 +567,9 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -554,8 +567,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
CustomizedHighlightingColor.ActiveColorsChanged -= CustomizedHighlightingColor_ActiveColorsChanged;
ParserService.ParseInformationUpdated -= ParserServiceParseInformationUpdated;
primaryTextEditorAdapter.Language.Detach();
if (secondaryTextEditorAdapter != null)
if (primaryTextEditorAdapter.Language != null)
primaryTextEditorAdapter.Language.Detach();
if (secondaryTextEditorAdapter != null && secondaryTextEditorAdapter.Language != null)
secondaryTextEditorAdapter.Language.Detach();
if (errorPainter != null)

2
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Commands/SortSelectionCommand.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Commands @@ -20,7 +20,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Commands
{
SortOptionsDialog dlg = new SortOptionsDialog();
dlg.Owner = WorkbenchSingleton.MainWindow;
if (dlg.ShowDialog() ?? false) {
if (dlg.ShowDialog() == true) {
StringComparer comparer = SortOptions.CaseSensitive ? StringComparer.CurrentCulture : StringComparer.CurrentCultureIgnoreCase;
if (SortOptions.IgnoreTrailingWhitespaces)
comparer = new IgnoreTrailingWhitespaceComparer(comparer);

3
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs

@ -828,9 +828,8 @@ namespace ICSharpCode.AvalonEdit @@ -828,9 +828,8 @@ namespace ICSharpCode.AvalonEdit
public void Load(Stream stream)
{
using (StreamReader reader = FileReader.OpenStream(stream, Encoding ?? Encoding.UTF8)) {
reader.Peek(); // peek so that the StreamReader can autodetect the encoding
Text = reader.ReadToEnd();
Encoding = reader.CurrentEncoding;
Encoding = reader.CurrentEncoding; // assign encoding after ReadToEnd() so that the StreamReader can autodetect the encoding
}
}

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -578,7 +578,6 @@ @@ -578,7 +578,6 @@
<Compile Include="Src\TextEditor\Conditions\TextContentCondition.cs" />
<Compile Include="Src\TextEditor\Gui\Editor\ITextAreaControlProvider.cs" />
<Compile Include="Src\TextEditor\Gui\Editor\SharpDevelopTextEditorProperties.cs" />
<Compile Include="Src\TextEditor\CharacterEncodings.cs" />
<Compile Include="Src\TextEditor\Gui\TextEditorAdapter.cs" />
<Compile Include="Src\Services\Tasks\TaskEventHandler.cs" />
<Compile Include="Src\Gui\Pads\DefinitionViewPad.cs" />

48
src/Main/Base/Project/Src/Commands/FileCommands.cs

@ -249,13 +249,55 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -249,13 +249,55 @@ namespace ICSharpCode.SharpDevelop.Commands
fdiag.CheckFileExists = true;
if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
foreach (string name in fdiag.FileNames) {
FileService.OpenFile(name);
OpenFiles(fdiag.FileNames);
}
}
}
protected virtual void OpenFiles(string[] fileNames)
{
foreach (string name in fileNames) {
FileService.OpenFile(name);
}
}
}
public class OpenFileWith : OpenFile
{
protected override void OpenFiles(string[] fileNames)
{
OpenFilesWith(fileNames);
}
/// <summary>
/// Shows the OpenWith dialog for the specified files.
/// </summary>
public static void OpenFilesWith(string[] fileNames)
{
if (fileNames.Length == 0)
return;
List<DisplayBindingDescriptor> codons = DisplayBindingService.GetCodonsPerFileName(fileNames[0]).ToList();
for (int i = 1; i < fileNames.Length; i++) {
var codonsForThisFile = DisplayBindingService.GetCodonsPerFileName(fileNames[1]);
codons.RemoveAll(c => !codonsForThisFile.Contains(c));
}
if (codons.Count == 0)
return;
int defaultCodonIndex = codons.IndexOf(DisplayBindingService.GetDefaultCodonPerFileName(fileNames[0]));
if (defaultCodonIndex < 0)
defaultCodonIndex = 0;
using (OpenWithDialog dlg = new OpenWithDialog(codons, defaultCodonIndex, Path.GetExtension(fileNames[0]))) {
if (dlg.ShowDialog(WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
foreach (string fileName in fileNames) {
FileUtility.ObservedLoad(new FileService.LoadFileWrapper(dlg.SelectedBinding.Binding, true).Invoke, fileName);
}
}
}
}
}
public class ExitWorkbenchCommand : AbstractMenuCommand
{
public override void Run()
@ -263,7 +305,7 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -263,7 +305,7 @@ namespace ICSharpCode.SharpDevelop.Commands
WorkbenchSingleton.MainWindow.Close();
}
}
public class ClearRecentFiles : AbstractMenuCommand
{
public override void Run()

8
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs

@ -73,13 +73,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -73,13 +73,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
/// </summary>
static void OpenWith(string fileName)
{
var codons = DisplayBindingService.GetCodonsPerFileName(fileName);
int defaultCodonIndex = codons.IndexOf(DisplayBindingService.GetDefaultCodonPerFileName(fileName));
using (OpenWithDialog dlg = new OpenWithDialog(codons, defaultCodonIndex, Path.GetExtension(fileName))) {
if (dlg.ShowDialog(WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
FileUtility.ObservedLoad(new FileService.LoadFileWrapper(dlg.SelectedBinding.Binding, true).Invoke, fileName);
}
}
ICSharpCode.SharpDevelop.Commands.OpenFileWith.OpenFilesWith(new string[] { fileName });
}
}

2
src/Main/Base/Project/Src/Project/CompilableProject.cs

@ -339,6 +339,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -339,6 +339,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Browsable(false)]
public bool IsSilverlightProject {
get {
string guids = GetEvaluatedProperty("ProjectTypeGuids") ?? "";
@ -346,6 +347,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -346,6 +347,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Browsable(false)]
public string TestPageFileName {
get {
return GetEvaluatedProperty("TestPageFileName") ?? "";

262
src/Main/Base/Project/Src/TextEditor/CharacterEncodings.cs

@ -1,262 +0,0 @@ @@ -1,262 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Roman Taranchenko" email="rnt@smtp.ru"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections;
using System.Text;
namespace ICSharpCode.SharpDevelop.DefaultEditor
{
/// <summary>
/// Contains supported character encodings.
/// </summary>
public class CharacterEncodings {
static int[] _wellKnownCodePages = {
37, // IBM EBCDIC (US-Canada)
437, // OEM United States
500, // IBM EBCDIC (International)
708, // Arabic (ASMO 708)
850, // Western European (DOS)
852, // Central European (DOS)
855, // Cyrillic (DOS)
857, // Turkish (DOS)
858, // Western European (DOS with Euro)
860, // Portuguese (DOS)
861, // Icelandic (DOS)
862, // Hebrew (DOS)
863, // French Canadian (DOS)
864, // Arabic (DOS)
865, // Nordic (DOS)
866, // Russian (DOS)
869, // Greek (DOS)
870, // IBM EBCDIC (Latin 2)
874, // Thai (Windows)
875, // IBM EBCDIC (Greek)
932, // Japanese (Shift-JIS)
936, // Chinese Simplified (GB2312)
949, // Korean
950, // Chinese Traditional (Big5)
1026, // IBM EBCDIC (Turkish)
1047, // IBM EBCDIC (Open Systems Latin 1)
1140, // IBM EBCDIC (US-Canada with Euro)
1141, // IBM EBCDIC (Germany with Euro)
1142, // IBM EBCDIC (Denmark/Norway with Euro)
1143, // IBM EBCDIC (Finland/Sweden with Euro)
1144, // IBM EBCDIC (Italy with Euro)
1145, // IBM EBCDIC (Latin America/Spain with Euro)
1146, // IBM EBCDIC (United Kingdom with Euro)
1147, // IBM EBCDIC (France with Euro)
1148, // IBM EBCDIC (International with Euro)
1149, // IBM EBCDIC (Icelandic with Euro)
1200, // Unicode
1201, // Unicode (Big-Endian)
1250, // Central European (Windows)
1251, // Cyrillic (Windows)
1252, // Western European (Windows)
1253, // Greek (Windows)
1254, // Turkish (Windows)
1255, // Hebrew (Windows)
1256, // Arabic (Windows)
1257, // Baltic (Windows)
1258, // Vietnamese (Windows)
10000, // Western European (Mac)
10007, // Cyrillic (Mac)
10017, // Ukrainian (Mac)
10079, // Icelandic (Mac)
20127, // US-ASCII
20261, // T.61
20273, // IBM EBCDIC (Germany)
20277, // IBM EBCDIC (Denmark/Norway)
20278, // IBM EBCDIC (Finland/Sweden)
20280, // IBM EBCDIC (Italy)
20284, // IBM EBCDIC (Latin America/Spain)
20285, // IBM EBCDIC (United Kingdom)
20290, // IBM EBCDIC (Japanese Katakana Extended)
20297, // IBM EBCDIC (France)
20420, // IBM EBCDIC (Arabic)
20424, // IBM EBCDIC (Hebrew)
20866, // Cyrillic (KOI8-R)
20871, // IBM EBCDIC (Icelandic)
21025, // IBM EBCDIC (Cyrillic - Serbian, Bulgarian)
21866, // Ukrainian (KOI8-U)
28591, // Western European (ISO)
28592, // Central European (ISO)
28593, // Latin 3 (ISO)
28594, // Baltic (ISO)
28595, // Cyrillic (ISO)
28596, // Arabic (ISO)
28597, // Greek (ISO)
28598, // Hebrew (ISO)
28599, // Latin 5 (ISO)
28605, // Latin 9 (ISO)
38598, // Hebrew (ISO Alternative)
50220, // Japanese (JIS)
50221, // Japanese (JIS-Allow 1 byte Kana)
50222, // Japanese (JIS-Allow 1 byte Kana - SO/SI)
50225, // Korean (ISO)
50227, // Chinese Simplified (ISO-2022)
51932, // Japanese (EUC)
51936, // Chinese Simplified (EUC)
52936, // Chinese Simplified (HZ)
54936, // Chinese Simplified (GB18030)
57002, // ISCII Devanagari
57003, // ISCII Bengali
57004, // ISCII Tamil
57005, // ISCII Telugu
57006, // ISCII Assamese
57007, // ISCII Oriya
57008, // ISCII Kannada
57009, // ISCII Malayalam
57010, // ISCII Gujarati
57011, // ISCII Punjabi
65000, // Unicode (UTF-7)
65001 // Unicode (UTF-8)
};
static ArrayList _encodings;
static ArrayList _names;
static Hashtable _cp2index;
class EncodingWrapper: IComparable {
private Encoding _encoding;
private int _cp;
public EncodingWrapper(int cp) {
_encoding = Encoding.GetEncoding(cp);
_cp = cp;
}
public int CodePage {
get {
return _cp;
}
}
public Encoding Encoding {
get {
return _encoding;
}
}
public String Name {
get {
if (_cp == 0) {
return "System Default [ "+Encoding.EncodingName+" ]";
}
return Encoding.EncodingName;
}
}
public override string ToString() {
return _cp.ToString();
}
public override bool Equals(object o) {
if (o == null) {
return false;
}
if (o == this) {
return true;
}
if (o is EncodingWrapper) {
return _cp == ((EncodingWrapper)o)._cp;
}
return false;
}
public override int GetHashCode() {
return _cp;
}
int IComparable.CompareTo(object o) {
// we need to sort encodings by display name
return Name.CompareTo(((EncodingWrapper)o).Name);
}
}
static IList GetSupportedEncodings() {
ArrayList list = new ArrayList();
foreach (int cp in _wellKnownCodePages) {
try {
list.Add(new EncodingWrapper(cp));
}
catch {
// ignore possible
// System.ArgumentException or
// System.NotSupportedException because
// .NET fx, mono, rotor & Portable.NET
// support different sets of encodings
}
}
list.Sort();
return list;
}
static CharacterEncodings() {
_encodings = new ArrayList();
// try {
// // create system default encoding
// _encodings.Add(new EncodingWrapper(0));
// }
// catch {}
_encodings.AddRange(GetSupportedEncodings());
_names = new ArrayList();
_cp2index = new Hashtable();
int i = 0;
foreach (EncodingWrapper ew in _encodings) {
_names.Add(ew.Name);
_cp2index[ew.CodePage] = i;
++i;
}
}
public static IList Names {
get {
return _names;
}
}
public static Encoding GetEncodingByIndex(int i) {
if (i < 0 || i >= _encodings.Count) {
return null;
}
return ((EncodingWrapper)_encodings[i]).Encoding;
}
public static Encoding GetEncodingByCodePage(int cp) {
return GetEncodingByIndex(GetEncodingIndex(cp));
}
public static int GetEncodingIndex(int cp) {
try {
return (Int32)_cp2index[cp];
}
catch {
return -1;
}
}
public static int GetCodePageByIndex(int i) {
Encoding e = GetEncodingByIndex(i);
if (e != null) {
return e.CodePage;
}
return -1;
}
public static bool IsUnicode(Encoding encoding) {
return IsUnicode(encoding.CodePage);
}
public static bool IsUnicode(int codePage) {
return (codePage == 1200 || codePage == 1201 || codePage == 65000 || codePage == 65001);
}
}
}

1
src/Main/Base/Project/Src/TextEditor/ClipboardHandling.cs

@ -18,6 +18,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor @@ -18,6 +18,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor
/// The problem is that Clipboard.ContainsText may wait for the application owning the clipboard,
/// which in turn may currently wait for SharpDevelop (through the debugger)
/// </summary>
[Obsolete]
static class ClipboardHandling
{
public static void Initialize()

1
src/Main/Base/Project/Src/TextEditor/Gui/TextEditorAdapter.cs

@ -22,6 +22,7 @@ using ICSharpCode.TextEditor.Gui.CompletionWindow; @@ -22,6 +22,7 @@ using ICSharpCode.TextEditor.Gui.CompletionWindow;
namespace ICSharpCode.SharpDevelop
{
[Obsolete]
public class TextEditorAdapter : ITextEditor
{
readonly TextEditorControl editor;

4
src/Main/Base/Project/Src/Util/SDWindowsFormsHost.cs

@ -122,7 +122,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -122,7 +122,7 @@ namespace ICSharpCode.SharpDevelop.Gui
get { return textBox.SelectionLength > 0; }
}
public bool EnablePaste {
get { return !textBox.ReadOnly && ClipboardHandling.GetClipboardContainsText(); }
get { return !textBox.ReadOnly && Clipboard.ContainsText(); }
}
public bool EnableDelete {
get { return !textBox.ReadOnly && textBox.SelectionLength > 0; }
@ -162,7 +162,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -162,7 +162,7 @@ namespace ICSharpCode.SharpDevelop.Gui
get { return comboBox.SelectionLength > 0; }
}
public bool EnablePaste {
get { return ClipboardHandling.GetClipboardContainsText(); }
get { return Clipboard.ContainsText(); }
}
public bool EnableDelete {
get { return true; }

Loading…
Cancel
Save