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" /> - + - + - - + @@ -1193,8 +1193,7 @@ - - + @@ -1274,13 +1273,12 @@ + - - - - + + - + + + + + + + + + + + + + + link = "browser://ms-help://corsavy/"/> - - - - - - - - - - - - - - @@ -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); };