diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin
index de06a60100..2602cd8606 100644
--- a/AddIns/ICSharpCode.SharpDevelop.addin
+++ b/AddIns/ICSharpCode.SharpDevelop.addin
@@ -6,8 +6,8 @@
version = "1.0.0">
-
-
+
+
@@ -281,7 +281,7 @@
label = "Clea&n"
class = "ICSharpCode.SharpDevelop.Project.Commands.CleanProject"/>
@@ -703,8 +703,7 @@
-
-
+
@@ -1125,7 +1124,7 @@
class = "ICSharpCode.SharpDevelop.Commands.ToggleFullscreenCommand" />
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1751,34 +1750,6 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
index ded9b9fb0e..fc018d7768 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
@@ -23,15 +23,14 @@
-
+
-
+
@@ -67,7 +66,7 @@
-
+
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
index c978ab292e..1192e24e37 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
@@ -20,15 +20,8 @@ namespace CSharpBinding
{
public class CSharpCompletionBinding : DefaultCodeCompletionBinding
{
- public CSharpCompletionBinding() : base(".cs")
- {
- this.EnableXmlCommentCompletion = true;
- }
-
public override bool HandleKeyPress(SharpDevelopTextAreaControl editor, char ch)
{
- if (!CheckExtension(editor))
- return false;
Parser.ExpressionFinder ef = new Parser.ExpressionFinder(editor.FileName);
int cursor = editor.ActiveTextAreaControl.Caret.Offset;
ExpressionContext context = null;
diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
index 502ed41ef8..00f7a9f589 100644
--- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
+++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
@@ -21,18 +21,8 @@ namespace VBNetBinding
{
public class VBNetCompletionBinding : DefaultCodeCompletionBinding
{
- public VBNetCompletionBinding() : base(".vb")
- {
- this.EnableXmlCommentCompletion = true;
- }
-
public override bool HandleKeyPress(SharpDevelopTextAreaControl editor, char ch)
{
- if (!CheckExtension(editor))
- {
- return false;
- }
-
VBNetBinding.Parser.ExpressionFinder ef = new VBNetBinding.Parser.ExpressionFinder();
int cursor = editor.ActiveTextAreaControl.Caret.Offset;
ExpressionContext context = null;
diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin b/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin
index 272a868e0e..1eba5299d6 100644
--- a/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin
+++ b/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin
@@ -54,8 +54,7 @@
-
+
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.addin b/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.addin
index 282d50bae6..279bcf4b6f 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.addin
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.addin
@@ -4,19 +4,18 @@
url = "http://www.icsharpcode.net"
description = "SharpDevelop Form Designer"
version = "1.0.0">
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.addin b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.addin
index 40c00be6a8..c2e6ffbf46 100644
--- a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.addin
+++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.addin
@@ -4,67 +4,69 @@
url = "http://www.icsharpcode.net"
description = "A Display binding for *.resources and *.resx files."
version = "1.0.0">
-
+
-
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlSchemaAssociation.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlSchemaAssociation.cs
index f7f02c889c..f448a9c27e 100644
--- a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlSchemaAssociation.cs
+++ b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlSchemaAssociation.cs
@@ -20,8 +20,6 @@ namespace ICSharpCode.XmlEditor
string extension = String.Empty;
string namespacePrefix = String.Empty;
- static readonly string schemaAssociationElementName = "SchemaAssociation";
-
public XmlSchemaAssociation(string extension)
: this(extension, String.Empty, String.Empty)
{
diff --git a/src/AddIns/Misc/AddinScout/Project/AddInScout.addin b/src/AddIns/Misc/AddinScout/Project/AddInScout.addin
index e09fe62aa1..100349d58a 100644
--- a/src/AddIns/Misc/AddinScout/Project/AddInScout.addin
+++ b/src/AddIns/Misc/AddinScout/Project/AddInScout.addin
@@ -4,18 +4,18 @@
url = "http://home.mchsi.com/~ssatguru"
description = "Display AddIn Information"
version = "0.1.0">
-
+
-
-
+
+
+ insertafter = "Separator1" insertbefore = "Separator2"
+ label = "AddIn Scout"
+ class = "AddInScout.AddInScoutCommand"/>
-
-
+
+
diff --git a/src/AddIns/Misc/RegExpTk/Project/RegExpTk.addin b/src/AddIns/Misc/RegExpTk/Project/RegExpTk.addin
index b04bc9e8d4..f2d6049026 100644
--- a/src/AddIns/Misc/RegExpTk/Project/RegExpTk.addin
+++ b/src/AddIns/Misc/RegExpTk/Project/RegExpTk.addin
@@ -4,16 +4,16 @@
url = "unknown"
description = "Testing toolkit for regular expressions"
version = "1.0.0">
-
+
-
+
-
diff --git a/src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin b/src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin
index ec34d61bd5..c031a3768b 100644
--- a/src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin
+++ b/src/AddIns/Misc/SubversionAddIn/Project/ICSharpCode.Svn.addin
@@ -10,8 +10,7 @@
-
@@ -61,7 +60,7 @@
label = "Subversion Options"
class = "ICSharpCode.Svn.Gui.SubversionOptionsPanel"/>
-
+
@@ -74,5 +73,5 @@
icon = "Svn.Checkout"
class = "ICSharpCode.Svn.Commands.CheckoutCommand"/>
-
+
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Resources/SyntaxModes.xml b/src/Libraries/ICSharpCode.TextEditor/Project/Resources/SyntaxModes.xml
index 9ace8efbb8..53066cd47b 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Resources/SyntaxModes.xml
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Resources/SyntaxModes.xml
@@ -45,5 +45,5 @@
+ extensions = ".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.build;.xfrm"/>
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Resources/XML-Mode.xshd b/src/Libraries/ICSharpCode.TextEditor/Project/Resources/XML-Mode.xshd
index 65e245ec8d..ef238d4fb9 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Resources/XML-Mode.xshd
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Resources/XML-Mode.xshd
@@ -1,6 +1,6 @@
-
+
diff --git a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs
index 84d24a8da2..1e97c0f4fe 100644
--- a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs
+++ b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs
@@ -24,7 +24,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
return fileName.StartsWith("http:")
|| fileName.StartsWith("https:")
|| fileName.StartsWith("ftp:")
- || fileName.StartsWith("browser:");
+ || fileName.StartsWith("browser://");
}
public bool CanCreateContentForLanguage(string language)
@@ -35,8 +35,8 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
public IViewContent CreateContentForFile(string fileName)
{
BrowserPane browserPane = new BrowserPane();
- if (fileName.StartsWith("browser:")) {
- browserPane.Load(fileName.Substring("browser:".Length));
+ if (fileName.StartsWith("browser://")) {
+ browserPane.Load(fileName.Substring("browser://".Length));
} else {
browserPane.Load(fileName);
}
diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs
index 92c9c15317..18a417e2b0 100644
--- a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs
+++ b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs
@@ -11,12 +11,13 @@ using System.IO;
using System.Collections;
using System.Reflection;
using System.CodeDom.Compiler;
+using System.Text.RegularExpressions;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.Core
{
- public class DisplayBindingDescriptor
+ public class DisplayBindingDescriptor
{
object binding = null;
Codon codon;
@@ -56,5 +57,38 @@ namespace ICSharpCode.Core
this.codon = codon;
}
+ ///
+ /// Gets if the display binding can possibly attach to the file.
+ /// If this method returns false, it cannot attach to it; if the method returns
+ /// true, it *might* attach to it.
+ ///
+ ///
+ /// This method is used to skip loading addins like the ResourceEditor which cannot
+ /// attach to a certain file name for sure.
+ ///
+ public bool CanAttachToFile(string fileName)
+ {
+ string fileNameRegex = codon.Properties["fileNamePattern"];
+ if (fileNameRegex == null || fileNameRegex.Length == 0) // no regex specified
+ return true;
+ return Regex.IsMatch(fileName, fileNameRegex, RegexOptions.IgnoreCase);
+ }
+
+ ///
+ /// Gets if the display binding can possibly attach to the language.
+ /// If this method returns false, it cannot attach to it; if the method returns
+ /// true, it *might* attach to it.
+ ///
+ ///
+ /// This method is used to skip loading addins like the ResourceEditor which cannot
+ /// attach to a most languages.
+ ///
+ public bool CanAttachToLanguage(string language)
+ {
+ string languageRegex = codon.Properties["languagePattern"];
+ if (languageRegex == null || languageRegex.Length == 0) // no regex specified
+ return true;
+ return Regex.IsMatch(language, languageRegex, RegexOptions.IgnoreCase);
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingService.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingService.cs
index a3ce5cdc79..bdceb9aad0 100644
--- a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingService.cs
+++ b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingService.cs
@@ -43,7 +43,7 @@ namespace ICSharpCode.Core
static DisplayBindingDescriptor GetCodonPerFileName(string filename)
{
foreach (DisplayBindingDescriptor binding in bindings) {
- if (!binding.IsSecondary && binding.Binding.CanCreateContentForFile(filename)) {
+ if (!binding.IsSecondary && binding.CanAttachToFile(filename) && binding.Binding.CanCreateContentForFile(filename)) {
return binding;
}
}
@@ -53,7 +53,7 @@ namespace ICSharpCode.Core
static DisplayBindingDescriptor GetCodonPerLanguageName(string languagename)
{
foreach (DisplayBindingDescriptor binding in bindings) {
- if (binding.Binding != null && binding.Binding.CanCreateContentForLanguage(languagename)) {
+ if (binding.Binding != null && binding.CanAttachToLanguage(languagename) && binding.Binding.CanCreateContentForLanguage(languagename)) {
return binding;
}
}
diff --git a/src/Main/Base/Project/Src/Services/File/FileService.cs b/src/Main/Base/Project/Src/Services/File/FileService.cs
index 64ad715bbf..038b0a0053 100644
--- a/src/Main/Base/Project/Src/Services/File/FileService.cs
+++ b/src/Main/Base/Project/Src/Services/File/FileService.cs
@@ -84,7 +84,8 @@ namespace ICSharpCode.Core
public static IWorkbenchWindow OpenFile(string fileName)
{
// test, if file fileName exists
- if (!fileName.StartsWith("http://")) {
+ bool isURL = fileName.IndexOf("://") > 0;
+ if (!isURL) {
System.Diagnostics.Debug.Assert(FileUtility.IsValidFileName(fileName));
// test, if an untitled file should be opened
@@ -103,7 +104,7 @@ namespace ICSharpCode.Core
foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) {
if (content.FileName != null) {
try {
- if (fileName.StartsWith("http://") ? content.FileName == fileName : FileUtility.IsEqualFileName(content.FileName, fileName)) {
+ if (isURL ? content.FileName == fileName : FileUtility.IsEqualFileName(content.FileName, fileName)) {
content.WorkbenchWindow.SelectWindow();
return content.WorkbenchWindow;
}
@@ -117,8 +118,7 @@ namespace ICSharpCode.Core
IViewContent viewContent = subViewContent as IViewContent;
if (viewContent != null && viewContent.FileName != null) {
try {
- if (fileName.StartsWith("http://") ? viewContent.FileName == fileName :
- Path.GetFullPath(viewContent.FileName.ToUpper()) == Path.GetFullPath(fileName.ToUpper())) {
+ if (isURL ? viewContent.FileName == fileName : FileUtility.IsEqualFileName(viewContent.FileName, fileName)) {
viewContent.WorkbenchWindow.SelectWindow();
return content.WorkbenchWindow;
}
diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs
index 3fb3dc303e..dcc6153621 100644
--- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs
+++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs
@@ -6,7 +6,9 @@
//
using System;
+using System.Collections;
using System.IO;
+using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
@@ -20,24 +22,56 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
bool HandleKeyPress(SharpDevelopTextAreaControl editor, char ch);
}
- public class DefaultCodeCompletionBinding : ICodeCompletionBinding
+ public class CodeCompletionBindingDoozer : IDoozer
{
- string extension;
+ public bool HandleConditions {
+ get {
+ return false;
+ }
+ }
- public DefaultCodeCompletionBinding(string extension)
+ public object BuildItem(object caller, Codon codon, ArrayList subItems)
{
- this.extension = extension;
+ string ext = codon.Properties["extensions"];
+ if (ext != null && ext.Length > 0)
+ return new LazyCodeCompletionBinding(codon, ext.Split(';'));
+ else
+ return codon.AddIn.CreateObject(codon.Properties["class"]);
}
+ }
+
+ public sealed class LazyCodeCompletionBinding : ICodeCompletionBinding
+ {
+ Codon codon;
+ string[] extensions;
+ ICodeCompletionBinding binding;
- public bool CheckExtension(SharpDevelopTextAreaControl editor)
+ public LazyCodeCompletionBinding(Codon codon, string[] extensions)
{
- string ext = Path.GetExtension(editor.FileName);
- return string.Compare(ext, extension, true) == 0;
+ this.codon = codon;
+ this.extensions = extensions;
}
+ public bool HandleKeyPress(SharpDevelopTextAreaControl editor, char ch)
+ {
+ string ext = Path.GetExtension(editor.FileName);
+ foreach (string extension in extensions) {
+ if (ext.Equals(extension, StringComparison.InvariantCultureIgnoreCase)) {
+ if (binding == null) {
+ binding = (ICodeCompletionBinding)codon.AddIn.CreateObject(codon.Properties["class"]);
+ }
+ return binding.HandleKeyPress(editor, ch);
+ }
+ }
+ return false;
+ }
+ }
+
+ public class DefaultCodeCompletionBinding : ICodeCompletionBinding
+ {
bool enableMethodInsight = true;
bool enableIndexerInsight = true;
- bool enableXmlCommentCompletion = false;
+ bool enableXmlCommentCompletion = true;
bool enableDotCompletion = true;
public bool EnableMethodInsight {
@@ -78,8 +112,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
public virtual bool HandleKeyPress(SharpDevelopTextAreaControl editor, char ch)
{
- if (!CheckExtension(editor))
- return false;
switch (ch) {
case '(':
if (enableMethodInsight && CodeCompletionOptions.InsightEnabled) {
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs
index dad4795745..c8bda4661e 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs
@@ -11,7 +11,7 @@ using System.Diagnostics;
using System.Drawing.Text;
using System.Drawing.Imaging;
using System.Windows.Forms;
-
+
namespace ICSharpCode.Core
{
public class ToolBarCommand : ToolStripMenuItem, IStatusUpdate
@@ -21,7 +21,7 @@ namespace ICSharpCode.Core
string description = String.Empty;
string localizedText = String.Empty;
ICommand menuCommand = null;
-
+
public string Description {
get {
return description;
@@ -45,17 +45,17 @@ namespace ICSharpCode.Core
Image = ResourceService.GetBitmap(codon.Properties["icon"]);
}
- menuCommand = (ICommand)codon.AddIn.CreateObject(codon.Properties["class"]);
- if (menuCommand != null)
- menuCommand.Owner = caller;
-
UpdateStatus();
}
protected override void OnClick(System.EventArgs e)
{
base.OnClick(e);
+ if (menuCommand == null) {
+ menuCommand = (ICommand)codon.AddIn.CreateObject(codon.Properties["class"]);
+ }
if (menuCommand != null) {
+ menuCommand.Owner = caller;
menuCommand.Run();
}
}
diff --git a/src/Main/StartUp/Project/SharpDevelopMain.cs b/src/Main/StartUp/Project/SharpDevelopMain.cs
index 87cc71b2af..196df25096 100644
--- a/src/Main/StartUp/Project/SharpDevelopMain.cs
+++ b/src/Main/StartUp/Project/SharpDevelopMain.cs
@@ -167,6 +167,7 @@ namespace ICSharpCode.SharpDevelop
AddInTree.Doozers.Add("EditAction", new ICSharpCode.SharpDevelop.DefaultEditor.Codons.EditActionDoozer());
AddInTree.Doozers.Add("SyntaxMode", new ICSharpCode.SharpDevelop.DefaultEditor.Codons.SyntaxModeDoozer());
AddInTree.Doozers.Add("BrowserSchemeExtension", new ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionDoozer());
+ AddInTree.Doozers.Add("CodeCompletionBinding", new ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.CodeCompletionBindingDoozer());
MenuCommand.LinkCommandCreator = delegate(string link) { return new LinkCommand(link); };