diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin
index c49b66ece7..fedc8a1f1c 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin
@@ -91,18 +91,18 @@
extensions="*.aspx"/>
-
-
+
-
-
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs
index 228c97d5ad..3f31f9c197 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs
@@ -5,9 +5,9 @@ using System;
namespace ICSharpCode.AspNet.Mvc.Folding
{
- public class CSharpRazorLanguageBinding : HtmlLanguageBinding
+ public class CSharpRazorTextEditorExtension : HtmlTextEditorExtension
{
- public CSharpRazorLanguageBinding()
+ public CSharpRazorTextEditorExtension()
: base(
new TextEditorWithParseInformationFoldingFactory(),
new RazorFoldGeneratorFactory(".cshtml"))
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/HtmlLanguageBinding.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/HtmlLanguageBinding.cs
index c45eedf2a4..bd96d8f23d 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/HtmlLanguageBinding.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/HtmlLanguageBinding.cs
@@ -8,13 +8,13 @@ using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.AspNet.Mvc.Folding
{
- public class HtmlLanguageBinding : DefaultLanguageBinding
+ public class HtmlTextEditorExtension : ITextEditorExtension
{
ITextEditorWithParseInformationFoldingFactory textEditorFactory;
IFoldGeneratorFactory foldGeneratorFactory;
IFoldGenerator foldGenerator;
- public HtmlLanguageBinding(
+ public HtmlTextEditorExtension(
ITextEditorWithParseInformationFoldingFactory textEditorFactory,
IFoldGeneratorFactory foldGeneratorFactory)
{
@@ -22,11 +22,7 @@ namespace ICSharpCode.AspNet.Mvc.Folding
this.foldGeneratorFactory = foldGeneratorFactory;
}
- public override IFormattingStrategy FormattingStrategy {
- get { return new DefaultFormattingStrategy(); }
- }
-
- public override void Attach(ITextEditor editor)
+ public void Attach(ITextEditor editor)
{
Attach(textEditorFactory.CreateTextEditor(editor));
}
@@ -36,7 +32,7 @@ namespace ICSharpCode.AspNet.Mvc.Folding
foldGenerator = foldGeneratorFactory.CreateFoldGenerator(editor);
}
- public override void Detach()
+ public void Detach()
{
foldGenerator.Dispose();
}
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/VisualBasicRazorLanguageBinding.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/VisualBasicRazorLanguageBinding.cs
index 3fd5838a1b..7becf735c8 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/VisualBasicRazorLanguageBinding.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/VisualBasicRazorLanguageBinding.cs
@@ -5,9 +5,9 @@ using System;
namespace ICSharpCode.AspNet.Mvc.Folding
{
- public class VisualBasicRazorLanguageBinding : HtmlLanguageBinding
+ public class VisualBasicRazorTextEditorExtension : HtmlTextEditorExtension
{
- public VisualBasicRazorLanguageBinding()
+ public VisualBasicRazorTextEditorExtension()
: base(
new TextEditorWithParseInformationFoldingFactory(),
new RazorFoldGeneratorFactory(".vbhtml"))
diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/WebFormsLanguageBinding.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/WebFormsLanguageBinding.cs
index ca57ef3d86..2bb51c2686 100644
--- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/WebFormsLanguageBinding.cs
+++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/WebFormsLanguageBinding.cs
@@ -6,16 +6,16 @@ using ICSharpCode.SharpDevelop;
namespace ICSharpCode.AspNet.Mvc.Folding
{
- public class WebFormsLanguageBinding : HtmlLanguageBinding
+ public class WebFormsTextEditorExtension : HtmlTextEditorExtension
{
- public WebFormsLanguageBinding()
+ public WebFormsTextEditorExtension()
: base(
new TextEditorWithParseInformationFoldingFactory(),
new WebFormsFoldGeneratorFactory())
{
}
- public WebFormsLanguageBinding(
+ public WebFormsTextEditorExtension(
ITextEditorWithParseInformationFoldingFactory textEditorFactory,
IFoldGeneratorFactory foldGeneratorFactory)
: base(textEditorFactory, foldGeneratorFactory)
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
index 3ba00867e4..ba2b55cdf0 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
@@ -69,6 +69,13 @@
extensions=".cs" />
+
+
+
+
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
index 91ea98d700..5c4c0d455f 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
@@ -25,21 +25,19 @@ namespace CSharpBinding
get { return new CSharpFormattingStrategy(); }
}
-// public override LanguageProperties Properties {
-// get { return LanguageProperties.CSharp; }
-// }
-//
public override IBracketSearcher BracketSearcher {
get { return new CSharpBracketSearcher(); }
}
-
+ }
+
+ public class CSharpTextEditorExtension : ITextEditorExtension
+ {
ITextEditor editor;
IssueManager inspectionManager;
IList contextActionProviders;
- public override void Attach(ITextEditor editor)
+ public void Attach(ITextEditor editor)
{
- base.Attach(editor);
this.editor = editor;
inspectionManager = new IssueManager(editor);
//codeManipulation = new CodeManipulation(editor);
@@ -50,7 +48,7 @@ namespace CSharpBinding
}
}
- public override void Detach()
+ public void Detach()
{
//codeManipulation.Dispose();
if (inspectionManager != null) {
@@ -61,7 +59,6 @@ namespace CSharpBinding
editor.ContextActionProviders.RemoveAll(contextActionProviders.Contains);
}
this.editor = null;
- base.Detach();
}
}
}
diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin
index 7f2a58f9be..04669cbb47 100644
--- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin
+++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin
@@ -43,10 +43,10 @@
-
-
+
diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlContextResolver.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlContextResolver.cs
index aec56c894e..5ab19f17cb 100644
--- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlContextResolver.cs
+++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlContextResolver.cs
@@ -143,10 +143,10 @@ namespace ICSharpCode.XamlBinding
public static XamlCompletionContext ResolveCompletionContext(ITextEditor editor, char typedValue)
{
- var binding = editor.GetService(typeof(XamlLanguageBinding)) as XamlLanguageBinding;
+ var binding = editor.GetService(typeof(XamlTextEditorExtension)) as XamlTextEditorExtension;
if (binding == null)
- throw new InvalidOperationException("Can only use ResolveCompletionContext with a XamlLanguageBinding.");
+ throw new InvalidOperationException("Can only use ResolveCompletionContext with a XamlTextEditorExtension.");
var context = new XamlCompletionContext(ResolveContext(editor.FileName, editor.Document, editor.Caret.Offset)) {
PressedKey = typedValue,
@@ -158,10 +158,10 @@ namespace ICSharpCode.XamlBinding
public static XamlCompletionContext ResolveCompletionContext(ITextEditor editor, char typedValue, int offset)
{
- var binding = editor.GetService(typeof(XamlLanguageBinding)) as XamlLanguageBinding;
+ var binding = editor.GetService(typeof(XamlTextEditorExtension)) as XamlTextEditorExtension;
if (binding == null)
- throw new InvalidOperationException("Can only use ResolveCompletionContext with a XamlLanguageBinding.");
+ throw new InvalidOperationException("Can only use ResolveCompletionContext with a XamlTextEditorExtension.");
var context = new XamlCompletionContext(ResolveContext(editor.FileName, editor.Document, offset)) {
PressedKey = typedValue,
diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlLanguageBinding.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlLanguageBinding.cs
index 851a700c63..30fcd3d031 100644
--- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlLanguageBinding.cs
+++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlLanguageBinding.cs
@@ -11,10 +11,10 @@ using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.XamlBinding
{
///
- /// Description of XamlLanguageBinding.
+ /// Description of XamlTextEditorExtension.
///
[TextEditorService]
- public class XamlLanguageBinding : XmlEditor.XmlLanguageBinding
+ public class XamlTextEditorExtension : XmlEditor.XmlTextEditorExtension
{
// XamlColorizer colorizer;
TextView textView;
@@ -42,7 +42,7 @@ namespace ICSharpCode.XamlBinding
textView.Services.AddService(typeof(IOutlineContentHost), contentHost);
}
// add ILanguageBinding
- textView.Services.AddService(typeof(XamlLanguageBinding), this);
+ textView.Services.AddService(typeof(XamlTextEditorExtension), this);
}
}
@@ -61,7 +61,7 @@ namespace ICSharpCode.XamlBinding
textView.Services.RemoveService(typeof(IOutlineContentHost));
contentHost.Dispose();
}
- textView.Services.RemoveService(typeof(XamlLanguageBinding));
+ textView.Services.RemoveService(typeof(XamlTextEditorExtension));
}
}
}
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
index cb4c1cb4b3..fe723c5cf6 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
@@ -408,7 +408,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
// remove secondary editor
this.Children.Remove(secondaryTextEditor);
this.Children.Remove(gridSplitter);
- secondaryTextEditorAdapter.Language.Detach();
+ secondaryTextEditorAdapter.DetachExtensions();
DisposeTextEditor(secondaryTextEditor);
secondaryTextEditor = null;
secondaryTextEditorAdapter = null;
@@ -646,9 +646,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
SD.ParserService.ParseInformationUpdated -= ParserServiceParseInformationUpdated;
if (primaryTextEditorAdapter.Language != null)
- primaryTextEditorAdapter.Language.Detach();
+ primaryTextEditorAdapter.DetachExtensions();
if (secondaryTextEditorAdapter != null && secondaryTextEditorAdapter.Language != null)
- secondaryTextEditorAdapter.Language.Detach();
+ secondaryTextEditorAdapter.DetachExtensions();
if (errorPainter != null)
errorPainter.Dispose();
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorAdapter.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorAdapter.cs
index 7590829ae0..e3e304c46b 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorAdapter.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorAdapter.cs
@@ -5,7 +5,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-
+using System.Security.Cryptography.X509Certificates;
using ICSharpCode.AvalonEdit.AddIn.Options;
using ICSharpCode.AvalonEdit.AddIn.Snippets;
using ICSharpCode.AvalonEdit.Indentation;
@@ -41,22 +41,42 @@ namespace ICSharpCode.AvalonEdit.AddIn
get { return languageBinding; }
}
+ List extensions;
+ const string extensionsPath = "/SharpDevelop/ViewContent/TextEditor/Extensions";
+
public override ITextEditor PrimaryView {
get { return codeEditor.PrimaryTextEditorAdapter; }
}
internal void FileNameChanged()
{
- if (languageBinding != null)
- languageBinding.Detach();
+ DetachExtensions();
+ extensions = AddInTree.BuildItems(extensionsPath, this, false);
+ AttachExtensions();
- languageBinding = LanguageBindingService.CreateBinding(this); // never returns null
- languageBinding.Attach(this);
+ languageBinding = SD.LanguageService.GetLanguageByFileName(PrimaryView.FileName);
// update properties set by languageBinding
this.TextEditor.TextArea.IndentationStrategy = new OptionControlledIndentationStrategy(this, languageBinding.FormattingStrategy);
}
+ internal void DetachExtensions()
+ {
+ if (extensions != null) {
+ foreach (var extension in extensions)
+ extension.Detach();
+ }
+ }
+
+
+ internal void AttachExtensions()
+ {
+ if (extensions != null) {
+ foreach (var extension in extensions)
+ extension.Attach(this);
+ }
+ }
+
sealed class OptionControlledIndentationStrategy : IndentationStrategyAdapter
{
public OptionControlledIndentationStrategy(ITextEditor editor, IFormattingStrategy formattingStrategy)
diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs
index 45e1159486..1b94fc6878 100644
--- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs
+++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs
@@ -10,27 +10,26 @@ namespace ICSharpCode.XmlEditor
{
public class XmlLanguageBinding : DefaultLanguageBinding
{
- XmlFoldingManager foldingManager;
-
public override IFormattingStrategy FormattingStrategy {
get { return new XmlFormattingStrategy(); }
}
+ }
+
+ public class XmlTextEditorExtension : ITextEditorExtension
+ {
+ XmlFoldingManager foldingManager;
- public override void Attach(ITextEditor editor)
+ public virtual void Attach(ITextEditor editor)
{
foldingManager = new XmlFoldingManager(editor);
foldingManager.UpdateFolds();
foldingManager.Start();
-
- base.Attach(editor);
}
- public override void Detach()
+ public virtual void Detach()
{
foldingManager.Stop();
foldingManager.Dispose();
-
- base.Detach();
}
}
}
diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin
index 016ab367c6..84c81b24e8 100644
--- a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin
+++ b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin
@@ -53,35 +53,42 @@
+
+
+
+
+ type="Secondary"
+ insertbefore="Text"
+ class="ICSharpCode.XmlEditor.XmlDisplayBinding"/>
+ extensions=".manifest;.config;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.xfrm;.targets;.xpt;.xft;.map;.wsdl;.disco;.xaml;.nuspec;.booproj;.fsproj;.pyproj;.rbproj;.vcxproj;.wixproj;.ps1xml"
+ resource="FileIcons.XmlIcon" />
+ insertbefore="AllFiles"
+ name="${res:SharpDevelop.FileFilter.XmlFiles}"
+ extensions="*.xml"/>
+ insertbefore="AllFiles"
+ name="${res:SharpDevelop.FileFilter.XslFiles} (*.xsl;*.xslt)"
+ extensions="*.xsl;*.xslt"/>
@@ -93,23 +100,23 @@
@@ -139,34 +146,34 @@
+ insertafter="Markers"
+ label="${res:ICSharpCode.XmlEditor.XmlSchemasPanel.Title}"
+ class="ICSharpCode.XmlEditor.XmlSchemasPanel"/>
+ insertafter="Markers"
+ insertbefore="XmlSchemasPanel"
+ label="${res:ICSharpCode.XmlEditor.XmlEditorOptionsPanel.Title}"
+ class="ICSharpCode.XmlEditor.XmlEditorOptionsPanel"/>
+ category="Tools"
+ icon="PadIcons.XPathQuery"
+ title="${res:ICSharpCode.XmlEditor.XPathQueryPad.Title}"
+ insertafter="UnitTestingPad"
+ class="ICSharpCode.XmlEditor.XPathQueryPad"
+ defaultPosition="Bottom, Hidden"/>
+ insertafter="ShowCodeCoverage"
+ label="${res:ICSharpCode.XmlEditor.HideXPathResults}"
+ class="ICSharpCode.XmlEditor.RemoveXPathHighlightingCommand"/>
@@ -174,37 +181,37 @@
-
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.AddAttributeMenuLabel}"
+ class="ICSharpCode.XmlEditor.AddAttributeCommand"/>
+
-
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.RemoveAttributeMenuLabel}"
+ icon="Icons.16x16.DeleteIcon"
+ class="ICSharpCode.XmlEditor.RemoveAttributeCommand"/>
+
+ label="${res:XML.TextAreaContextMenu.Cut}"
+ icon="Icons.16x16.CutIcon"
+ shortcut="Control|X"
+ class="ICSharpCode.XmlEditor.CutXmlTreeNode"/>
+ label="${res:XML.TextAreaContextMenu.Copy}"
+ icon="Icons.16x16.CopyIcon"
+ shortcut="Control|C"
+ class="ICSharpCode.XmlEditor.CopyXmlTreeNode"/>
+ label="${res:XML.TextAreaContextMenu.Paste}"
+ icon="Icons.16x16.PasteIcon"
+ shortcut="Control|V"
+ class="ICSharpCode.XmlEditor.PasteXmlTreeNode"/>
+ label="${res:XML.MainMenu.EditMenu.Delete}"
+ icon="Icons.16x16.DeleteIcon"
+ class="ICSharpCode.XmlEditor.DeleteXmlTreeNode"/>
@@ -217,16 +224,16 @@
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.InsertElementBeforeMenuLabel}"
+ class="ICSharpCode.XmlEditor.InsertElementBeforeCommand"/>
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.InsertElementAfterMenuLabel}"
+ class="ICSharpCode.XmlEditor.InsertElementAfterCommand"/>
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.AddChildElementMenuLabel}"
+ class="ICSharpCode.XmlEditor.AddChildElementCommand"/>
@@ -241,16 +248,16 @@
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.InsertTextNodeBeforeMenuLabel}"
+ class="ICSharpCode.XmlEditor.InsertTextNodeBeforeCommand"/>
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.InsertTextNodeAfterMenuLabel}"
+ class="ICSharpCode.XmlEditor.InsertTextNodeAfterCommand"/>
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.AddChildTextNodeAfterMenuLabel}"
+ class="ICSharpCode.XmlEditor.AddChildTextNodeCommand"/>
@@ -260,16 +267,16 @@
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.InsertCommentBeforeMenuLabel}"
+ class="ICSharpCode.XmlEditor.InsertCommentBeforeCommand"/>
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.InsertCommentAfterMenuLabel}"
+ class="ICSharpCode.XmlEditor.InsertCommentAfterCommand"/>
+ label="${res:ICSharpCode.XmlEditor.XmlTreeView.AddChildCommentMenuLabel}"
+ class="ICSharpCode.XmlEditor.AddChildCommentCommand"/>
diff --git a/src/AddIns/Misc/SearchAndReplace/Project/SearchAndReplace.addin b/src/AddIns/Misc/SearchAndReplace/Project/SearchAndReplace.addin
index 11fb5cb846..0737a17c65 100644
--- a/src/AddIns/Misc/SearchAndReplace/Project/SearchAndReplace.addin
+++ b/src/AddIns/Misc/SearchAndReplace/Project/SearchAndReplace.addin
@@ -44,9 +44,9 @@
-
-
+
+ class="SearchAndReplace.SearchAndReplaceTextEditorExtension" />
diff --git a/src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs b/src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs
index d516b2fc79..18117e5789 100644
--- a/src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs
+++ b/src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs
@@ -156,14 +156,13 @@ namespace SearchAndReplace
}
}
- public class SearchAndReplaceBinding : DefaultLanguageBinding
+ public class SearchAndReplaceTextEditorExtension : ITextEditorExtension
{
TextArea textArea;
SearchInputHandler handler;
- public override void Attach(ITextEditor editor)
+ public void Attach(ITextEditor editor)
{
- base.Attach(editor);
textArea = editor.GetService(typeof(TextArea)) as TextArea;
if (textArea != null) {
handler = new SearchInputHandler(textArea);
@@ -180,9 +179,8 @@ namespace SearchAndReplace
SearchOptions.SearchMode = e.UseRegex ? SearchMode.RegEx : SearchMode.Normal;
}
- public override void Detach()
+ public void Detach()
{
- base.Detach();
if (textArea != null) {
textArea.DefaultInputHandler.NestedInputHandlers.Remove(handler);
textArea = null;
diff --git a/src/Main/Base/Project/Editor/AvalonEditTextEditorAdapter.cs b/src/Main/Base/Project/Editor/AvalonEditTextEditorAdapter.cs
index d2ce66aad1..9f2c309a38 100644
--- a/src/Main/Base/Project/Editor/AvalonEditTextEditorAdapter.cs
+++ b/src/Main/Base/Project/Editor/AvalonEditTextEditorAdapter.cs
@@ -58,7 +58,7 @@ namespace ICSharpCode.SharpDevelop.Editor
public virtual ITextEditorOptions Options { get; private set; }
public virtual ILanguageBinding Language {
- get { return AggregatedLanguageBinding.NullLanguageBinding; }
+ get { return DefaultLanguageBinding.DefaultInstance; }
}
sealed class CaretAdapter : ITextEditorCaret
diff --git a/src/Main/Base/Project/Editor/ITextEditorExtension.cs b/src/Main/Base/Project/Editor/ITextEditorExtension.cs
new file mode 100644
index 0000000000..526bebdf20
--- /dev/null
+++ b/src/Main/Base/Project/Editor/ITextEditorExtension.cs
@@ -0,0 +1,76 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.IO;
+using ICSharpCode.Core;
+
+namespace ICSharpCode.SharpDevelop.Editor
+{
+ ///
+ /// Allows add-ins to attach language/project-specific features to ITextEditor (one instance per ITextEditor is created).
+ ///
+ public interface ITextEditorExtension
+ {
+ ///
+ /// Callback function for backend bindings to add services to ITextEditor.
+ /// This is called when the file name of an ITextEditor changes.
+ ///
+ void Attach(ITextEditor editor);
+
+ ///
+ /// Callback function for backend bindings to remove all added services from ITextEditor.
+ /// This is called when the file name of an ITextEditor changes, to unload all added
+ /// features properly.
+ ///
+ void Detach();
+ }
+
+ ///
+ /// Creates ITextEditorExtension objects for the code editor.
+ ///
+ ///
+ /// Semicolon-separated list of file extensions that are handled by the text editor extension (e.g. .xaml)
+ ///
+ ///
+ /// Name of the ITextEditorExtension class.
+ ///
+ /// Only in /SharpDevelop/ViewContent/TextEditor/Extensions
+ ///
+ /// The ILanguageBinding object.
+ ///
+ public class TextEditorExtensionDoozer : IDoozer
+ {
+ public bool HandleConditions {
+ get {
+ return false;
+ }
+ }
+
+ public object BuildItem(BuildItemArgs args)
+ {
+ ITextEditor editor = (ITextEditor)args.Parameter;
+ string[] extensions = args.Codon["extensions"].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
+ if (CanAttach(extensions, editor.FileName)) {
+ return args.AddIn.CreateObject(args.Codon["class"]);
+ } else {
+ return null;
+ }
+ }
+
+ static bool CanAttach(string[] extensions, string fileName)
+ {
+ // always attach when no extensions were given
+ if (extensions.Length == 0)
+ return true;
+ if (string.IsNullOrEmpty(fileName))
+ return false;
+ string fileExtension = Path.GetExtension(fileName);
+ foreach (string ext in extensions) {
+ if (string.Equals(ext, fileExtension, StringComparison.OrdinalIgnoreCase))
+ return true;
+ }
+ return false;
+ }
+ }
+}
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
index 3b58c9df03..0631355e81 100755
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
@@ -41,6 +41,7 @@
+
@@ -81,6 +82,8 @@
class="ICSharpCode.SharpDevelop.Project.BuildService"/>
+
ToolTipService.cs
+
ToolTipService.cs
@@ -520,7 +521,6 @@
-
diff --git a/src/Main/Base/Project/Services/SD.cs b/src/Main/Base/Project/Services/SD.cs
index 9d342e930b..7f5176f2e9 100644
--- a/src/Main/Base/Project/Services/SD.cs
+++ b/src/Main/Base/Project/Services/SD.cs
@@ -230,6 +230,11 @@ namespace ICSharpCode.SharpDevelop
get { return GetRequiredService(); }
}
+ ///
+ public static ILanguageService LanguageService {
+ get { return GetRequiredService(); }
+ }
+
///
public static IUIService UIService {
get { return GetRequiredService(); }
diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/AggregatedLanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/AggregatedLanguageBinding.cs
deleted file mode 100755
index b01313db87..0000000000
--- a/src/Main/Base/Project/Src/Services/LanguageBinding/AggregatedLanguageBinding.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
-// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
-
-using System;
-using System.Collections.Generic;
-using ICSharpCode.SharpDevelop.Editor;
-
-namespace ICSharpCode.SharpDevelop
-{
- ///
- /// Aggregates multiple ILanguageBinding instances to allow more
- /// than one language binding for a filename extension.
- ///
- sealed class AggregatedLanguageBinding : ILanguageBinding
- {
- public static readonly AggregatedLanguageBinding NullLanguageBinding = new AggregatedLanguageBinding(System.Linq.Enumerable.Empty());
-
- readonly IEnumerable allBindings;
-
- public AggregatedLanguageBinding(IEnumerable bindings)
- {
- if (bindings == null)
- throw new ArgumentNullException("bindings");
- this.allBindings = bindings;
- }
-
- public IFormattingStrategy FormattingStrategy {
- get {
- foreach (ILanguageBinding binding in allBindings) {
- if (binding.FormattingStrategy != null)
- return binding.FormattingStrategy;
- }
-
- return DefaultFormattingStrategy.DefaultInstance;
- }
- }
-
- /*
- public LanguageProperties Properties {
- get {
- foreach (ILanguageBinding binding in allBindings) {
- if (binding.Properties != null)
- return binding.Properties;
- }
-
- return LanguageProperties.None;
- }
- }
- */
-
- public void Attach(ITextEditor editor)
- {
- foreach (ILanguageBinding binding in allBindings)
- binding.Attach(editor);
- }
-
- public void Detach()
- {
- foreach (ILanguageBinding binding in allBindings)
- binding.Detach();
- }
-
- public IBracketSearcher BracketSearcher {
- get {
- foreach (ILanguageBinding binding in allBindings) {
- if (binding.BracketSearcher != null)
- return binding.BracketSearcher;
- }
-
- return DefaultBracketSearcher.DefaultInstance;
- }
- }
- }
-}
diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs
index 240b6b1673..2e401ba247 100644
--- a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs
+++ b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs
@@ -3,36 +3,29 @@
using System;
using ICSharpCode.SharpDevelop.Editor;
+using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.SharpDevelop
{
public class DefaultLanguageBinding : ILanguageBinding
{
+ public static readonly DefaultLanguageBinding DefaultInstance = new DefaultLanguageBinding();
+
public virtual IFormattingStrategy FormattingStrategy {
get {
- return null;
+ return DefaultFormattingStrategy.DefaultInstance;
}
}
- /*
- public virtual LanguageProperties Properties {
+ public virtual IBracketSearcher BracketSearcher {
get {
- return null;
+ return DefaultBracketSearcher.DefaultInstance;
}
}
- */
-
- public virtual void Attach(ITextEditor editor)
- {
- }
- public virtual void Detach()
- {
- }
-
- public virtual IBracketSearcher BracketSearcher {
+ public virtual ICodeGenerator CodeGenerator {
get {
- return null;
+ return DefaultCodeGenerator.DefaultInstance;
}
}
}
diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs
index 0502c2964b..3c6cccf241 100644
--- a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs
+++ b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs
@@ -3,30 +3,22 @@
using System;
using ICSharpCode.SharpDevelop.Editor;
+using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.SharpDevelop
{
///
- /// Provides access to language specific features for single files.
+ /// Provides access to language specific features (independent of files).
///
public interface ILanguageBinding
{
///
/// Provides access to the formatting strategy for this language.
///
- IFormattingStrategy FormattingStrategy {
+ IFormattingStrategy FormattingStrategy {
get;
}
- /*
- ///
- /// Provides access to the properties for this language.
- ///
- LanguageProperties Properties {
- get;
- }
- */
-
///
/// Provides access to the bracket search logic for this language.
///
@@ -35,16 +27,10 @@ namespace ICSharpCode.SharpDevelop
}
///
- /// Callback function for backend bindings to add services to ITextEditor.
- /// This is called when the file name of an ITextEditor changes.
+ /// Provides access to the code generator for this language.
///
- void Attach(ITextEditor editor);
-
- ///
- /// Callback function for backend bindings to remove all added services from ITextEditor.
- /// This is called when the file name of an ITextEditor changes, to unload all added
- /// features properly.
- ///
- void Detach();
+ ICodeGenerator CodeGenerator {
+ get;
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDoozer.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDoozer.cs
index dbab2158f7..925449e701 100644
--- a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDoozer.cs
+++ b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDoozer.cs
@@ -31,25 +31,64 @@ namespace ICSharpCode.SharpDevelop
public object BuildItem(BuildItemArgs args)
{
- ITextEditor editor = (ITextEditor)args.Parameter;
- string[] extensions = args.Codon["extensions"].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
- if (CanAttach(extensions, editor.FileName)) {
- return args.AddIn.CreateObject(args.Codon["class"]);
- } else {
- return null;
+ return new LanguageBindingDescriptor(args.Codon);
+ }
+ }
+
+ class LanguageBindingDescriptor
+ {
+ ILanguageBinding binding = null;
+ Codon codon;
+
+ public ILanguageBinding Binding {
+ get {
+ if (binding == null) {
+ binding = (ILanguageBinding)codon.AddIn.CreateObject(codon.Properties["class"]);
+ }
+ return binding;
+ }
+ }
+
+ public Codon Codon {
+ get {
+ return codon;
+ }
+ }
+
+ public LanguageBindingDescriptor(Codon codon)
+ {
+ this.codon = codon;
+ }
+
+ string[] extensions;
+
+ public string[] Extensions {
+ get {
+ if (extensions == null) {
+ if (codon.Properties["extensions"].Length == 0)
+ extensions = new string[0];
+ else
+ extensions = codon.Properties["extensions"].ToLowerInvariant().Split(';');
+ }
+ return extensions;
+ }
+ }
+
+ public string Name {
+ get {
+ return codon.Properties["id"];
}
}
- static bool CanAttach(string[] extensions, string fileName)
+ public bool CanAttach(string extension)
{
// always attach when no extensions were given
- if (extensions.Length == 0)
+ if (Extensions.Length == 0)
return true;
- if (string.IsNullOrEmpty(fileName))
+ if (string.IsNullOrEmpty(extension))
return false;
- string fileExtension = Path.GetExtension(fileName);
- foreach (string ext in extensions) {
- if (string.Equals(ext, fileExtension, StringComparison.OrdinalIgnoreCase))
+ foreach (string ext in Extensions) {
+ if (string.Equals(ext, extension, StringComparison.OrdinalIgnoreCase))
return true;
}
return false;
diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs
index 77b0a73b94..367fcd1e9d 100644
--- a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs
+++ b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs
@@ -3,22 +3,50 @@
using System;
using System.Collections.Generic;
+using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.SharpDevelop
{
- public static class LanguageBindingService
+ public interface ILanguageService
+ {
+ ILanguageBinding GetLanguageByFileName(FileName fileName);
+ ILanguageBinding GetLanguageByExtension(string extension);
+ ILanguageBinding GetLanguageByName(string name);
+ }
+
+ class SDLanguageService : ILanguageService
{
const string languageBindingPath = "/SharpDevelop/Workbench/LanguageBindings";
+ readonly List bindings;
+
+ public SDLanguageService()
+ {
+ bindings = AddInTree.BuildItems(languageBindingPath, null, false);
+ }
+
+ public ILanguageBinding GetLanguageByFileName(FileName fileName)
+ {
+ return GetLanguageByExtension(Path.GetExtension(fileName));
+ }
+
+ public ILanguageBinding GetLanguageByExtension(string extension)
+ {
+ foreach (var language in bindings) {
+ if (language.CanAttach(extension))
+ return language.Binding;
+ }
+ return DefaultLanguageBinding.DefaultInstance;
+ }
- ///
- /// Creates the binding for the specified text editor. This method never returns null.
- ///
- public static ILanguageBinding CreateBinding(ITextEditor editor)
+ public ILanguageBinding GetLanguageByName(string name)
{
- var bindings = AddInTree.BuildItems(languageBindingPath, editor, false);
- return new AggregatedLanguageBinding(bindings);
+ foreach (var language in bindings) {
+ if (language.Name == name)
+ return language.Binding;
+ }
+ return DefaultLanguageBinding.DefaultInstance;
}
}
}