Browse Source

- fixed display bug in TaskView (off by one error)

- removed dependency on XmlReader from Resolver
- added Unit Tests

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4289 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Siegfried Pammer 16 years ago
parent
commit
1998c526b6
  1. 153
      src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/UtilsTests.cs
  2. 201
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs
  3. 218
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/Utils.cs
  4. 1
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.csproj
  5. 54
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs
  6. 16
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlColorizer.cs
  7. 4
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs
  8. 19
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlContext.cs
  9. 82
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlResolver.cs
  10. 2
      src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskView.cs
  11. 280
      src/SharpDevelop.sln

153
src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/UtilsTests.cs

@ -18,117 +18,134 @@ namespace ICSharpCode.XamlBinding.Tests
public class UtilsTests public class UtilsTests
{ {
[Test] [Test]
public void XmlNamespacesForOffsetSimple() public void DiffTestSimple()
{ {
string xaml = File.ReadAllText("Test1.xaml"); string xaml = "<Test val1=\"Test\" />";
int offset = xaml.IndexOf("CheckBox") + "CheckBox ".Length; int offset = "<Test val1=\"Te".Length;
int expectedResult = offset - "<Test val1=\"".Length;
var expectedResult = new Dictionary<string, string> { int actualResult = Utils.GetOffsetFromValueStart(xaml, offset);
{"xmlns", "http://schemas.microsoft.com/netfx/2007/xaml/presentation"},
{"xmlns:x", "http://schemas.microsoft.com/winfx/2006/xaml"}
};
var result = Utils.GetXmlNamespacesForOffset(xaml, offset); Assert.AreEqual(expectedResult, actualResult);
}
[Test]
public void DiffTestSimple2()
{
string xaml = "<Test val1=\"Test\" />";
int offset = "<Test val1=\"".Length;
int expectedResult = offset - "<Test val1=\"".Length;
foreach (var p in result) int actualResult = Utils.GetOffsetFromValueStart(xaml, offset);
Debug.Print(p.Key + " " + p.Value);
Assert.AreEqual(expectedResult, result, "Is not equal"); Assert.AreEqual(expectedResult, actualResult);
} }
[Test] [Test]
public void XmlNamespacesForOffsetSimple2() public void GetOffsetTest1()
{ {
string xaml = File.ReadAllText("Test2.xaml"); string text = @"SharpDevelop uses the MSBuild
int offset = xaml.IndexOf("CheckBox") + "CheckBox ".Length; libraries for compilation. But when you compile a project
inside SharpDevelop, there's more going on than a
simple call to MSBuild.";
var expectedResult = new Dictionary<string, string> { int expected = 0;
{"xmlns", "http://schemas.microsoft.com/netfx/2007/xaml/presentation"}, int line = 1;
{"xmlns:x", "http://schemas.microsoft.com/winfx/2006/xaml"}, int col = 1;
{"xmlns:y", "clr-namespace:ICSharpCode.Profiler.Controls;assembly=ICSharpCode.Profiler.Controls"}
};
var result = Utils.GetXmlNamespacesForOffset(xaml, offset); int result = Utils.GetOffsetFromFilePos(text, line, col);
foreach (var p in result) Assert.AreEqual(expected, result);
Debug.Print(p.Key + " " + p.Value);
Assert.AreEqual(expectedResult, result, "Is not equal");
} }
[Test] [Test]
public void XmlNamespacesForOffsetComplex() public void GetOffsetTest2()
{ {
string xaml = File.ReadAllText("Test3.xaml"); string text = @"SharpDevelop uses the MSBuild
int offset = xaml.IndexOf("CheckBox") + "CheckBox ".Length; libraries for compilation. But when you compile a project
inside SharpDevelop, there's more going on than a
var expectedResult = new Dictionary<string, string> { simple call to MSBuild.";
{"xmlns", "http://schemas.microsoft.com/netfx/2007/xaml/presentation"},
{"xmlns:x", "clr-namespace:ICSharpCode.Profiler.Controls;assembly=ICSharpCode.Profiler.Controls"}
};
var result = Utils.GetXmlNamespacesForOffset(xaml, offset); int expected = 4;
int line = 1;
int col = 5;
foreach (var p in result) int result = Utils.GetOffsetFromFilePos(text, line, col);
Debug.Print(p.Key + " " + p.Value);
Assert.AreEqual(expectedResult, result, "Is not equal"); Assert.AreEqual(expected, result);
} }
[Test] [Test]
public void DiffTestSimple() public void GetOffsetTest3()
{ {
string xaml = "<Test val1=\"Test\" />"; string text = @"SharpDevelop uses the MSBuild
int offset = "<Test val1=\"Te".Length; libraries for compilation. But when you compile a project
int expectedResult = offset - "<Test val1=\"".Length; inside SharpDevelop, there's more going on than a
simple call to MSBuild.";
int actualResult = Utils.GetOffsetFromValueStart(xaml, offset); int expected = 0;
int line = 0;
int col = 5;
Assert.AreEqual(expectedResult, actualResult); int result = Utils.GetOffsetFromFilePos(text, line, col);
Assert.AreEqual(expected, result);
} }
[Test] [Test]
public void DiffTestSimple2() public void GetOffsetTest4()
{ {
string xaml = "<Test val1=\"Test\" />"; string text = @"SharpDevelop uses the MSBuild
int offset = "<Test val1=\"".Length; libraries for compilation. But when you compile a project
int expectedResult = offset - "<Test val1=\"".Length; inside SharpDevelop, there's more going on than a
simple call to MSBuild.";
int actualResult = Utils.GetOffsetFromValueStart(xaml, offset); int expected = @"SharpDevelop uses the MSBuild
libraries".Length - 1;
int line = 2;
int col = 10;
Assert.AreEqual(expectedResult, actualResult); int result = Utils.GetOffsetFromFilePos(text, line, col);
Assert.AreEqual(expected, result);
} }
[Test] [Test]
public void ExistingAttributesTest() public void GetOffsetTest5()
{ {
string xaml = "<UserControl\n" + string text = @"SharpDevelop uses the MSBuild
"\txmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n" + libraries for compilation. But when you compile a project
"\txmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n" + inside SharpDevelop, there's more going on than a
"\txmlns:toolkit=\"clr-namespace:System.Windows.Controls;assembly=PresentationFramework\"\n" + simple call to MSBuild.";
"\txmlns:chartingToolkit=\"clr-namespace:XamlTest\" ";
int expected = text.Length;
int line = 10;
int col = 10;
var list = Utils.GetListOfExistingAttributeNames(xaml, xaml.Length); int result = Utils.GetOffsetFromFilePos(text, line, col);
var expected = new List<string> { "xmlns", "xmlns:x", "xmlns:toolkit", "xmlns:chartingToolkit" };
Assert.AreEqual(expected.Count, list.Length, "Wrong count!"); Assert.AreEqual(expected, result);
Assert.AreEqual(list, expected, "Wrong elements!");
} }
[Test] [Test]
public void ExistingAttributesWithInvalidSyntaxTest() public void GetOffsetTest6()
{ {
string xaml = "<UserControl\n" + string text = @"SharpDevelop uses the MSBuild
"\txmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n" + libraries for compilation. But when you compile a project
"\txmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n" + inside SharpDevelop, there's more going on than a
"\txmlns:toolkit=\"clr-namespace:System.Windows.Controls;assembly=PresentationFramework\"\n" + simple call to MSBuild.";
"\txmlns:chartingToolkit=\"clr-namespace:XamlTest\" asd ";
int expected = @"SharpDevelop uses the MSBuild
libraries for compilation. But when you compile a project
inside SharpDevelop, there's more going on than a
simple".Length - 1;
int line = 4;
int col = 7;
var list = Utils.GetListOfExistingAttributeNames(xaml, xaml.Length); int result = Utils.GetOffsetFromFilePos(text, line, col);
var expected = new List<string> { "xmlns", "xmlns:x", "xmlns:toolkit", "xmlns:chartingToolkit" };
Assert.AreEqual(expected.Count, list.Length, "Wrong count!"); Assert.AreEqual(expected, result);
Assert.AreEqual(list, expected, "Wrong elements!");
} }
} }
} }

201
src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs

@ -41,27 +41,77 @@ namespace ICSharpCode.XamlBinding
public const string XamlNamespace = "http://schemas.microsoft.com/winfx/2006/xaml"; public const string XamlNamespace = "http://schemas.microsoft.com/winfx/2006/xaml";
public static XamlContext ResolveContext(ITextEditor editor, char typedValue) public static XamlContext ResolveContext(string text, string fileName, int line, int col)
{ {
string text = editor.Document.Text; int offset = Utils.GetOffsetFromFilePos(text, line, col);
int offset = editor.Caret.Offset;
XamlResolver resolver = new XamlResolver();
ParseInformation info = ParserService.GetParseInformation(editor.FileName); ParseInformation info = ParserService.GetParseInformation(fileName);
XmlElementPath path = XmlParser.GetActiveElementStartPathAtIndex(text, offset); XmlElementPath path = XmlParser.GetActiveElementStartPathAtIndex(text, offset);
string attribute = XmlParser.GetAttributeNameAtIndex(text, offset); string attribute = XmlParser.GetAttributeNameAtIndex(text, offset);
string attributeValue = XmlParser.GetAttributeValueAtIndex(text, offset); string attributeValue = XmlParser.GetAttributeValueAtIndex(text, offset);
bool inAttributeValue = XmlParser.IsInsideAttributeValue(text, offset); bool inAttributeValue = XmlParser.IsInsideAttributeValue(text, offset);
int offsetFromValueStart = Utils.GetOffsetFromValueStart(text, offset); int offsetFromValueStart = Utils.GetOffsetFromValueStart(text, offset);
ResolveResult rr = null;
AttributeValue value = null; AttributeValue value = null;
XamlExpressionContext cxt = new XamlExpressionContext(path, attribute, inAttributeValue); XamlContextDescription description = XamlContextDescription.InTag;
if (path == null || path.Elements.Count == 0) {
description = XamlContextDescription.None;
path = XmlParser.GetParentElementPath(text.Substring(0, offset));
} else {
int ltOffset = XmlParser.GetActiveElementStartIndex(text, offset);
if (ltOffset == -1)
description = XamlContextDescription.AtTag;
else {
string space = text.Substring(ltOffset + 1, offset - ltOffset - 1);
var last = path.Elements.LastOrDefault();
if (last != null && last.ToString().StartsWith(space, StringComparison.Ordinal))
description = XamlContextDescription.AtTag;
}
}
if (inAttributeValue)
description = XamlContextDescription.InAttributeValue;
if (value != null && !value.IsString)
description = XamlContextDescription.InMarkupExtension;
if (Utils.IsInsideXmlComment(text, offset))
description = XamlContextDescription.InComment;
if (!string.IsNullOrEmpty(attribute)) { Dictionary<string, string> xmlnsDefs = new Dictionary<string, string>();
rr = resolver.Resolve(new ExpressionResult(attribute, cxt) { Region = new DomRegion(1,1) }, info, text);
using (XmlTextReader reader = Utils.CreateReaderAtTarget(text, line, col)) {
xmlnsDefs.AddRange(reader.GetNamespacesInScope(XmlNamespaceScope.All));
} }
var context = new XamlContext() {
Description = description,
AttributeName = attribute,
AttributeValue = value,
RawAttributeValue = attributeValue,
ValueStartOffset = offsetFromValueStart,
Path = (path == null || path.Elements.Count == 0) ? null : path,
XmlnsDefinitions = xmlnsDefs,
ParseInformation = info
};
return context;
}
public static XamlCompletionContext ResolveCompletionContext(ITextEditor editor, char typedValue)
{
string text = editor.Document.Text;
int offset = editor.Caret.Offset;
ParseInformation info = ParserService.GetParseInformation(editor.FileName);
XmlElementPath path = XmlParser.GetActiveElementStartPathAtIndex(text, offset);
string attribute = XmlParser.GetAttributeNameAtIndex(text, offset);
string attributeValue = XmlParser.GetAttributeValueAtIndex(text, offset);
bool inAttributeValue = XmlParser.IsInsideAttributeValue(text, offset);
int offsetFromValueStart = Utils.GetOffsetFromValueStart(text, offset);
AttributeValue value = null;
value = MarkupExtensionParser.ParseValue(attributeValue); value = MarkupExtensionParser.ParseValue(attributeValue);
XamlContextDescription description = XamlContextDescription.InTag; XamlContextDescription description = XamlContextDescription.InTag;
@ -92,33 +142,30 @@ namespace ICSharpCode.XamlBinding
Dictionary<string, string> xmlnsDefs = new Dictionary<string, string>(); Dictionary<string, string> xmlnsDefs = new Dictionary<string, string>();
using (XmlTextReader reader = CreateReaderAtTarget(editor.Document.Text, editor.Caret.Line, editor.Caret.Column)) { using (XmlTextReader reader = Utils.CreateReaderAtTarget(text, editor.Caret.Line, editor.Caret.Column)) {
xmlnsDefs.AddRange(reader.GetNamespacesInScope(XmlNamespaceScope.All));
} }
var context = new XamlContext() { var context = new XamlCompletionContext() {
PressedKey = typedValue, PressedKey = typedValue,
Description = description, Description = description,
ResolvedExpression = rr,
AttributeName = attribute, AttributeName = attribute,
AttributeValue = value, AttributeValue = value,
RawAttributeValue = attributeValue, RawAttributeValue = attributeValue,
ValueStartOffset = offsetFromValueStart, ValueStartOffset = offsetFromValueStart,
Path = (path == null || path.Elements.Count == 0) ? null : path, Path = (path == null || path.Elements.Count == 0) ? null : path,
XmlnsDefinitions = xmlnsDefs XmlnsDefinitions = xmlnsDefs,
ParseInformation = info,
Editor = editor
}; };
LoggingService.Debug(context);
return context; return context;
} }
static List<ICompletionItem> CreateListForAttributeName(ITextEditor editor, ParseInformation parseInfo, XamlExpressionContext context, string[] existingItems) static List<ICompletionItem> CreateListForAttributeName(XamlCompletionContext context, string[] existingItems)
{ {
if (context.ElementPath.Elements.Count == 0) QualifiedName lastElement = context.Path.Elements.LastOrDefault();
return null; XamlCompilationUnit cu = context.ParseInformation.BestCompilationUnit as XamlCompilationUnit;
QualifiedName lastElement = context.ElementPath.Elements.LastOrDefault();
XamlCompilationUnit cu = parseInfo.BestCompilationUnit as XamlCompilationUnit;
if (cu == null) if (cu == null)
return null; return null;
IReturnType rt = cu.CreateType(lastElement.Namespace, lastElement.Name.Trim('.')); IReturnType rt = cu.CreateType(lastElement.Namespace, lastElement.Name.Trim('.'));
@ -126,7 +173,7 @@ namespace ICSharpCode.XamlBinding
return null; return null;
var list = new List<ICompletionItem>(); var list = new List<ICompletionItem>();
string xamlPrefix = Utils.GetXamlNamespacePrefix(editor.Document.Text, editor.Caret.Offset); string xamlPrefix = Utils.GetXamlNamespacePrefix(context);
foreach (string item in xamlNamespaceAttributes) { foreach (string item in xamlNamespaceAttributes) {
if (!existingItems.Contains(xamlPrefix + ":" + item)) if (!existingItems.Contains(xamlPrefix + ":" + item))
@ -252,7 +299,7 @@ namespace ICSharpCode.XamlBinding
return neededItems.ToList(); return neededItems.ToList();
} }
public static ICompletionItemList CreateListForContext(ITextEditor editor, XamlContext context) public static ICompletionItemList CreateListForContext(ITextEditor editor, XamlCompletionContext context)
{ {
XamlCompletionItemList list = new XamlCompletionItemList(); XamlCompletionItemList list = new XamlCompletionItemList();
ParseInformation info = ParserService.GetParseInformation(editor.FileName); ParseInformation info = ParserService.GetParseInformation(editor.FileName);
@ -267,18 +314,19 @@ namespace ICSharpCode.XamlBinding
case XamlContextDescription.AtTag: case XamlContextDescription.AtTag:
list.Items.AddRange(standardElements); list.Items.AddRange(standardElements);
if (editor.Document.GetCharAt(editor.Caret.Offset - 1) == '.' || context.PressedKey == '.') { if (editor.Document.GetCharAt(editor.Caret.Offset - 1) == '.' || context.PressedKey == '.') {
var existing = Utils.GetListOfExistingAttributeNames(editor.Document.Text, Utils.GetParentElementStart(editor)); var loc = editor.Document.OffsetToPosition(Utils.GetParentElementStart(editor));
list.Items.AddRange(CreateListForAttributeName(editor, info, new XamlExpressionContext(context.Path, null, false), existing).RemoveEvents()); var existing = Utils.GetListOfExistingAttributeNames(editor.Document.Text, loc.Line, loc.Column);
list.Items.AddRange(CreateListForAttributeName(context, existing).RemoveEvents());
} else } else
list.Items.AddRange(CreateListForElement(info, editor.Document.Text, editor.Caret.Line, editor.Caret.Column, false)); list.Items.AddRange(CreateListForElement(info, editor.Document.Text, editor.Caret.Line, editor.Caret.Column, false));
break; break;
case XamlContextDescription.InTag: case XamlContextDescription.InTag:
var existingAttribs = Utils.GetListOfExistingAttributeNames(editor.Document.Text, editor.Caret.Offset); var existingAttribs = Utils.GetListOfExistingAttributeNames(editor.Document.Text, editor.Caret.Line, editor.Caret.Column);
list.Items.AddRange(CreateListForAttributeName(editor, info, new XamlExpressionContext(context.Path, null, false), existingAttribs)); list.Items.AddRange(CreateListForAttributeName(context, existingAttribs));
QualifiedName last = context.Path.Elements[context.Path.Elements.Count - 1]; QualifiedName last = context.Path.Elements[context.Path.Elements.Count - 1];
TypeResolveResult trr = new XamlResolver().Resolve(new ExpressionResult(last.Name, new XamlExpressionContext(context.Path, null, false)), info, editor.Document.Text) as TypeResolveResult; TypeResolveResult trr = new XamlResolver().Resolve(new ExpressionResult(last.Name, context), info, editor.Document.Text) as TypeResolveResult;
if (trr != null && trr.ResolvedType != null && trr.ResolvedType.GetUnderlyingClass() != null) { if (trr != null && trr.ResolvedType != null && trr.ResolvedType.GetUnderlyingClass() != null) {
if (trr.ResolvedType.GetUnderlyingClass().ClassInheritanceTree.Any(i => i.FullyQualifiedName == "System.Windows.DependencyObject")) { if (trr.ResolvedType.GetUnderlyingClass().ClassInheritanceTree.Any(i => i.FullyQualifiedName == "System.Windows.DependencyObject")) {
@ -313,10 +361,10 @@ namespace ICSharpCode.XamlBinding
return false; return false;
} }
public static IEnumerable<IInsightItem> CreateMarkupExtensionInsight(XamlContext context, ParseInformation info, ITextEditor editor) public static IEnumerable<IInsightItem> CreateMarkupExtensionInsight(XamlCompletionContext context, ParseInformation info, ITextEditor editor)
{ {
var markup = GetInnermostMarkup(context.AttributeValue.ExtensionValue); var markup = GetInnermostMarkup(context.AttributeValue.ExtensionValue);
var trr = ResolveMarkupExtensionType(markup, info, editor, context.Path); var trr = ResolveMarkupExtensionType(markup, context);
if (trr != null) { if (trr != null) {
var ctors = trr.ResolvedType var ctors = trr.ResolvedType
@ -331,14 +379,14 @@ namespace ICSharpCode.XamlBinding
} }
} }
public static ICompletionItemList CreateMarkupExtensionCompletion(XamlContext context, ParseInformation info, ITextEditor editor) public static ICompletionItemList CreateMarkupExtensionCompletion(XamlCompletionContext context, ParseInformation info, ITextEditor editor)
{ {
var list = new XamlCompletionItemList(); var list = new XamlCompletionItemList();
var path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, editor.Caret.Offset); var path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, editor.Caret.Offset);
var markup = GetInnermostMarkup(context.AttributeValue.ExtensionValue); var markup = GetInnermostMarkup(context.AttributeValue.ExtensionValue);
var trr = ResolveMarkupExtensionType(markup, info, editor, path); var trr = ResolveMarkupExtensionType(markup, context);
if (trr == null) { if (trr == null) {
list.Items.AddRange(CreateListOfMarkupExtensions(info, editor.Document.Text, editor.Caret.Line, editor.Caret.Column)); list.Items.AddRange(CreateListOfMarkupExtensions(info, editor.Document.Text, editor.Caret.Line, editor.Caret.Column));
@ -366,7 +414,7 @@ namespace ICSharpCode.XamlBinding
} }
} }
static void DoPositionalArgsCompletion(XamlCompletionItemList list, XamlContext context, TypeResolveResult trr, ParseInformation info, ITextEditor editor) static void DoPositionalArgsCompletion(XamlCompletionItemList list, XamlCompletionContext context, TypeResolveResult trr, ParseInformation info, ITextEditor editor)
{ {
switch (trr.ResolvedType.FullyQualifiedName) { switch (trr.ResolvedType.FullyQualifiedName) {
case "System.Windows.Markup.ArrayExtension": case "System.Windows.Markup.ArrayExtension":
@ -375,7 +423,7 @@ namespace ICSharpCode.XamlBinding
break; break;
case "System.Windows.Markup.StaticExtension": case "System.Windows.Markup.StaticExtension":
if (context.AttributeValue.ExtensionValue.PositionalArguments.Count == 1 && context.PressedKey == ' ') break; if (context.AttributeValue.ExtensionValue.PositionalArguments.Count == 1 && context.PressedKey == ' ') break;
if (context.AttributeValue.ExtensionValue.PositionalArguments.Count <= 1) DoStaticExtensionCompletion(list, context, info, editor); if (context.AttributeValue.ExtensionValue.PositionalArguments.Count <= 1) DoStaticExtensionCompletion(list, context);
break; break;
case "System.Windows.Markup.TypeExtension": case "System.Windows.Markup.TypeExtension":
if (context.AttributeValue.ExtensionValue.PositionalArguments.Count == 1 && context.PressedKey == ' ') break; if (context.AttributeValue.ExtensionValue.PositionalArguments.Count == 1 && context.PressedKey == ' ') break;
@ -421,7 +469,7 @@ namespace ICSharpCode.XamlBinding
} }
} }
public static IEnumerable<ICompletionItem> MemberCompletion(ITextEditor editor, IReturnType type) public static IEnumerable<ICompletionItem> MemberCompletion(XamlCompletionContext context, IReturnType type)
{ {
if (type == null || type.GetUnderlyingClass() == null) if (type == null || type.GetUnderlyingClass() == null)
yield break; yield break;
@ -442,24 +490,27 @@ namespace ICSharpCode.XamlBinding
case ClassType.Delegate: case ClassType.Delegate:
IMethod invoker = c.Methods.Where(method => method.Name == "Invoke").FirstOrDefault(); IMethod invoker = c.Methods.Where(method => method.Name == "Invoke").FirstOrDefault();
if (invoker != null) { if (invoker != null) {
var path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, editor.Caret.Offset); if (context.Path != null) {
if (path != null && path.Elements.Count > 0) { var item = context.Path.Elements.LastOrDefault();
var item = path.Elements[path.Elements.Count - 1]; var evt = ResolveAttribute(context.AttributeName, context) as IEvent;
string attribute = XmlParser.GetAttributeNameAtIndex(editor.Document.Text, editor.Caret.Offset);
var evt = ResolveAttribute(attribute, editor) as IEvent;
if (evt == null) if (evt == null)
break; break;
string prefix = Utils.GetXamlNamespacePrefix(editor.Document.Text, editor.Caret.Offset); int offset = XmlParser.GetActiveElementStartIndex(context.Editor.Document.Text, context.Editor.Caret.Offset);
string name = Utils.GetAttributeValue(editor.Document.Text, editor.Caret.Offset, "name");
if (string.IsNullOrEmpty(name)) if (offset == -1)
name = Utils.GetAttributeValue(editor.Document.Text, editor.Caret.Offset, (string.IsNullOrEmpty(prefix) ? "" : prefix + ":") + "name"); break;
var loc = context.Editor.Document.OffsetToPosition(offset);
Debug.Print("prefix: " + prefix + " name: " + name); string prefix = Utils.GetXamlNamespacePrefix(context);
string name = Utils.GetAttributeValue(context.Editor.Document.Text, loc.Line, loc.Column + 1, "name");
if (string.IsNullOrEmpty(name))
name = Utils.GetAttributeValue(context.Editor.Document.Text, loc.Line, loc.Column + 1, (string.IsNullOrEmpty(prefix) ? "" : prefix + ":") + "name");
yield return new NewEventCompletionItem(evt, (string.IsNullOrEmpty(name)) ? item.Name : name); yield return new NewEventCompletionItem(evt, (string.IsNullOrEmpty(name)) ? item.Name : name);
foreach (var eventItem in CompletionDataHelper.AddMatchingEventHandlers(editor, invoker)) foreach (var eventItem in CompletionDataHelper.AddMatchingEventHandlers(context.Editor, invoker))
yield return eventItem; yield return eventItem;
} }
} }
@ -480,42 +531,38 @@ namespace ICSharpCode.XamlBinding
} }
} }
static IEntity ResolveAttribute(string attribute, ITextEditor editor) static IEntity ResolveAttribute(string attribute, XamlCompletionContext context)
{ {
XamlResolver resolver = new XamlResolver(); XamlResolver resolver = new XamlResolver();
var exp = new ExpressionResult(attribute, context);
var path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, editor.Caret.Offset); var mrr = resolver.Resolve(exp, context.ParseInformation, context.Editor.Document.Text) as MemberResolveResult;
var exp = new ExpressionResult(attribute, new XamlExpressionContext(path, attribute, false));
var info = ParserService.GetParseInformation(editor.FileName);
var mrr = resolver.Resolve(exp, info, editor.Document.Text) as MemberResolveResult;
return mrr.ResolvedMember; return mrr.ResolvedMember;
} }
static void DoStaticExtensionCompletion(XamlCompletionItemList list, XamlContext context, ParseInformation info, ITextEditor editor) static void DoStaticExtensionCompletion(XamlCompletionItemList list, XamlCompletionContext context)
{ {
AttributeValue selItem = context.AttributeValue.ExtensionValue.PositionalArguments.LastOrDefault(); AttributeValue selItem = context.AttributeValue.ExtensionValue.PositionalArguments.LastOrDefault();
if (context.PressedKey == '.') { if (context.PressedKey == '.') {
if (selItem != null && selItem.IsString) { if (selItem != null && selItem.IsString) {
var rr = ResolveStringValue(selItem.StringValue, context.Path, info, editor) as TypeResolveResult; var rr = ResolveStringValue(selItem.StringValue, context) as TypeResolveResult;
if (rr != null) if (rr != null)
list.Items.AddRange(MemberCompletion(editor, rr.ResolvedType)); list.Items.AddRange(MemberCompletion(context, rr.ResolvedType));
} }
} else { } else {
if (selItem != null && selItem.IsString) { if (selItem != null && selItem.IsString) {
int index = selItem.StringValue.IndexOf('.'); int index = selItem.StringValue.IndexOf('.');
string s = (index > -1) ? selItem.StringValue.Substring(0, index) : selItem.StringValue; string s = (index > -1) ? selItem.StringValue.Substring(0, index) : selItem.StringValue;
var rr = ResolveStringValue(s, context.Path, info, editor) as TypeResolveResult; var rr = ResolveStringValue(s, context) as TypeResolveResult;
if (rr != null) { if (rr != null) {
list.Items.AddRange(MemberCompletion(editor, rr.ResolvedType)); list.Items.AddRange(MemberCompletion(context, rr.ResolvedType));
list.PreselectionLength = selItem.StringValue.Length - index - 1; list.PreselectionLength = selItem.StringValue.Length - index - 1;
list.SuggestedItem = list.Items.FirstOrDefault(item => item.Text.StartsWith(selItem.StringValue.Substring(index + 1), StringComparison.OrdinalIgnoreCase)); list.SuggestedItem = list.Items.FirstOrDefault(item => item.Text.StartsWith(selItem.StringValue.Substring(index + 1), StringComparison.OrdinalIgnoreCase));
} else } else
DoStaticTypeCompletion(selItem, list, info, editor); DoStaticTypeCompletion(selItem, list, context.ParseInformation, context.Editor);
} else { } else {
DoStaticTypeCompletion(selItem, list, info, editor); DoStaticTypeCompletion(selItem, list, context.ParseInformation, context.Editor);
} }
} }
} }
@ -535,10 +582,10 @@ namespace ICSharpCode.XamlBinding
} }
} }
static ResolveResult ResolveStringValue(string value, XmlElementPath path, ParseInformation info, ITextEditor editor) static ResolveResult ResolveStringValue(string value, XamlCompletionContext context)
{ {
var resolver = new XamlResolver(); var resolver = new XamlResolver();
var rr = resolver.Resolve(new ExpressionResult(value, new XamlExpressionContext(path, string.Empty, false)), info, editor.Document.Text); var rr = resolver.Resolve(new ExpressionResult(value, context), context.ParseInformation, context.Editor.Document.Text);
return rr; return rr;
} }
@ -563,20 +610,19 @@ namespace ICSharpCode.XamlBinding
return markup; return markup;
} }
public static TypeResolveResult ResolveMarkupExtensionType(MarkupExtensionInfo markup, ParseInformation info, ITextEditor editor, XmlElementPath path) public static TypeResolveResult ResolveMarkupExtensionType(MarkupExtensionInfo markup, XamlCompletionContext context)
{ {
XamlResolver resolver = new XamlResolver(); XamlResolver resolver = new XamlResolver();
TypeResolveResult trr = resolver.Resolve(new ExpressionResult(markup.ExtensionType, new XamlExpressionContext(path, null, false)), info, editor.Document.Text) as TypeResolveResult; TypeResolveResult trr = resolver.Resolve(new ExpressionResult(markup.ExtensionType, context), context.ParseInformation, context.Editor.Document.Text) as TypeResolveResult;
if (trr == null) trr = resolver.Resolve(new ExpressionResult(markup.ExtensionType + "Extension", new XamlExpressionContext(path, null, false)), info, editor.Document.Text) as TypeResolveResult; if (trr == null) trr = resolver.Resolve(new ExpressionResult(markup.ExtensionType + "Extension", context), context.ParseInformation, context.Editor.Document.Text) as TypeResolveResult;
return trr; return trr;
} }
public static TypeResolveResult ResolveType(string name, XamlContext context, ITextEditor editor) public static TypeResolveResult ResolveType(string name, XamlCompletionContext context)
{ {
return new XamlResolver() return new XamlResolver()
.Resolve(new ExpressionResult(name, new XamlExpressionContext(context.Path, null, false)), .Resolve(new ExpressionResult(name, context), context.ParseInformation, context.Editor.Document.Text) as TypeResolveResult;
ParserService.GetParseInformation(editor.FileName), editor.Document.Text) as TypeResolveResult;
} }
public static IEnumerable<ICompletionItem> AddMatchingEventHandlers(ITextEditor editor, IMethod delegateInvoker) public static IEnumerable<ICompletionItem> AddMatchingEventHandlers(ITextEditor editor, IMethod delegateInvoker)
@ -622,22 +668,9 @@ namespace ICSharpCode.XamlBinding
return result; return result;
} }
static XmlTextReader CreateReaderAtTarget(string fileContent, int caretLine, int caretColumn)
{
XmlTextReader r = new XmlTextReader(new StringReader(fileContent));
try {
r.WhitespaceHandling = WhitespaceHandling.Significant;
// move reader to correct position
while (r.Read() && !IsReaderAtTarget(r, caretLine, caretColumn)) { }
} catch (XmlException) {}
return r;
}
static string GetPrefixForNamespace(string @namespace, string fileContent, int caretLine, int caretColumn) static string GetPrefixForNamespace(string @namespace, string fileContent, int caretLine, int caretColumn)
{ {
using (XmlTextReader r = CreateReaderAtTarget(fileContent, caretLine, caretColumn)) { using (XmlTextReader r = Utils.CreateReaderAtTarget(fileContent, caretLine, caretColumn)) {
foreach (var item in r.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml)) { foreach (var item in r.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml)) {
if (item.Value == @namespace) { if (item.Value == @namespace) {
return item.Key; return item.Key;
@ -650,7 +683,7 @@ namespace ICSharpCode.XamlBinding
static IDictionary<string, IEnumerable<IClass>> GetClassesFromContext(ParseInformation parseInfo, string fileContent, int caretLine, int caretColumn) static IDictionary<string, IEnumerable<IClass>> GetClassesFromContext(ParseInformation parseInfo, string fileContent, int caretLine, int caretColumn)
{ {
using (XmlTextReader r = CreateReaderAtTarget(fileContent, caretLine, caretColumn)) { using (XmlTextReader r = Utils.CreateReaderAtTarget(fileContent, caretLine, caretColumn)) {
IProjectContent pc = parseInfo.BestCompilationUnit.ProjectContent; IProjectContent pc = parseInfo.BestCompilationUnit.ProjectContent;
var result = new Dictionary<string, IEnumerable<IClass>>(); var result = new Dictionary<string, IEnumerable<IClass>>();
@ -665,7 +698,7 @@ namespace ICSharpCode.XamlBinding
static List<ICompletionItem> GetListOfAttachedProperties(ParseInformation parseInfo, string fileContent, int caretLine, int caretColumn, string[] existingItems) static List<ICompletionItem> GetListOfAttachedProperties(ParseInformation parseInfo, string fileContent, int caretLine, int caretColumn, string[] existingItems)
{ {
using (XmlTextReader r = CreateReaderAtTarget(fileContent, caretLine, caretColumn)) { using (XmlTextReader r = Utils.CreateReaderAtTarget(fileContent, caretLine, caretColumn)) {
List<ICompletionItem> result = new List<ICompletionItem>(); List<ICompletionItem> result = new List<ICompletionItem>();
IProjectContent pc = parseInfo.BestCompilationUnit.ProjectContent; IProjectContent pc = parseInfo.BestCompilationUnit.ProjectContent;

218
src/AddIns/BackendBindings/XamlBinding/XamlBinding/Utils.cs

@ -24,53 +24,24 @@ namespace ICSharpCode.XamlBinding
/// </summary> /// </summary>
public static class Utils public static class Utils
{ {
public static bool HasMatchingEndTag(string tagname, string text, int offset) internal static bool IsReaderAtTarget(XmlTextReader r, int line, int col)
{ {
int index = XmlParser.GetActiveElementStartIndex(text, offset); if (r.LineNumber > line)
if (index == -1) return true;
else if (r.LineNumber == line)
return r.LinePosition >= col;
else
return false; return false;
text = text.Substring(index);
var path = XmlParser.GetActiveElementStartPathAtIndex(text, index);
XmlReader reader = XmlTextReader.Create(new StringReader(text));
int startTags = 0;
try {
while (reader.Read()) {
switch (reader.NodeType) {
case XmlNodeType.Element:
if (!reader.IsEmptyElement)
startTags++;
break;
case XmlNodeType.EndElement:
startTags--;
if (startTags == 0 && tagname == reader.Name) {
return true;
}
break;
}
}
} catch (XmlException e) {
Debug.Print(e.ToString());
return false;
}
return false;
} }
public static string GetAttributeValue(string text, int offset, string name) public static string GetAttributeValue(string text, int line, int col, string name)
{ {
text = SimplifyToSingleElement(text, offset, "Test"); try {
XmlTextReader reader = new XmlTextReader(new StringReader(text));
if (text == null) reader.XmlResolver = null;
return null;
XmlTextReader reader = new XmlTextReader(new StringReader(text)); while (reader.Read() && !IsReaderAtTarget(reader, line, col)) { }
reader.XmlResolver = null;
try {
reader.ReadToFollowing("Test");
if (!reader.MoveToFirstAttribute()) if (!reader.MoveToFirstAttribute())
return null; return null;
@ -89,68 +60,6 @@ namespace ICSharpCode.XamlBinding
return null; return null;
} }
public static Dictionary<string, string> GetXmlNamespacesForOffset(string fileContent, int offset)
{
if (fileContent == null)
throw new ArgumentNullException("fileContent");
if (offset < 0 || offset > fileContent.Length)
throw new ArgumentOutOfRangeException("offset", offset, "Value must be between 0 and " + fileContent.Length);
var map = new Dictionary<string, string>();
int endIndex = fileContent.IndexOfAny(new char[] {'<', '>'}, offset);
if (endIndex > -1)
fileContent = fileContent.Substring(0, endIndex + 1);
int lastWhiteSpacePos = fileContent.LastIndexOfAny(new char[] {' ', '\t', '\n', '\r'});
bool inDouble = false, inSingle = false;
for (int i = 0; i < fileContent.Length; i++) {
if (fileContent[i] == '"' && !inSingle)
inDouble = !inDouble;
if (fileContent[i] == '\'' && !inDouble)
inSingle = !inSingle;
if (fileContent[i] == '>') {
int lastDelimiterPos = fileContent.Substring(0, i + 1).LastIndexOfAny(new char[] {'>', '/'});
if (inDouble) {
fileContent.Insert(lastDelimiterPos, "\"");
i++;
inDouble = false;
}
if (inSingle) {
fileContent.Insert(lastDelimiterPos, "'");
inSingle = false;
i++;
}
}
}
fileContent = fileContent.Replace("<?", " ").Replace("?>", " ").Replace("<", " ").Replace("/>", " ").Replace(">", " ").Replace("\n", " ").Replace("\r", " ").Replace("\t", " ");
while (fileContent.Contains(" "))
fileContent = fileContent.Replace(" ", " ");
fileContent = fileContent.Replace("= \"", "=\"");
fileContent = fileContent.Replace(" =\"", "=\"");
Debug.Print(fileContent);
string[] data = fileContent.Split(' ');
var filter1 = data.Where(s => s.StartsWith("xmlns"));
foreach (string item in filter1) {
string[] parts = item.Split(new char[] {'='}, 2);
if (parts.Length == 2) {
if (map.ContainsKey(parts[0])) // replace namespace with new one
map.Remove(parts[0]);
map.Add(parts[0], parts[1].Trim('"', '\''));
}
}
return map;
}
public static int GetOffsetFromValueStart(string xaml, int offset) public static int GetOffsetFromValueStart(string xaml, int offset)
{ {
if (xaml == null) if (xaml == null)
@ -166,29 +75,25 @@ namespace ICSharpCode.XamlBinding
return offset - start - 1; return offset - start - 1;
} }
public static string[] GetListOfExistingAttributeNames(string text, int offset) public static string[] GetListOfExistingAttributeNames(string text, int line, int col)
{ {
List<string> list = new List<string>(); List<string> list = new List<string>();
text = SimplifyToSingleElement(text, offset, "Test");
if (text == null) if (text == null)
return list.ToArray(); return list.ToArray();
XmlReader reader = XmlTextReader.Create(new StringReader(text)); using (XmlReader reader = CreateReaderAtTarget(text, line, col)) {
try {
try { if (!reader.MoveToFirstAttribute())
reader.ReadToFollowing("Test"); return list.ToArray();
if (!reader.MoveToFirstAttribute()) do {
return list.ToArray(); LoggingService.Debug("name: " + reader.Name + " value: " + reader.Value);
list.Add(reader.Name);
do { } while (reader.MoveToNextAttribute());
LoggingService.Debug("name: " + reader.Name + " value: " + reader.Value); } catch (XmlException e) {
list.Add(reader.Name); Debug.Print(e.ToString());
} while (reader.MoveToNextAttribute()); }
} catch (XmlException e) {
Debug.Print(e.ToString());
} }
foreach (var item in list) foreach (var item in list)
@ -215,43 +120,12 @@ namespace ICSharpCode.XamlBinding
static char[] whitespace = new char[] {' ', '\t', '\n', '\r'}; static char[] whitespace = new char[] {' ', '\t', '\n', '\r'};
static string SimplifyToSingleElement(string text, int offset, string name) public static string GetXamlNamespacePrefix(XamlContext context)
{ {
int index = XmlParser.GetActiveElementStartIndex(text, offset); var item = context.XmlnsDefinitions.FirstOrDefault(i => i.Value == CompletionDataHelper.XamlNamespace);
if (index == -1) return null;
index = text.IndexOfAny(whitespace, index);
if (index == -1) return null;
string newText = text.Substring(index);
int endIndex = newText.IndexOfAny(new char[] { '<', '>' });
if (endIndex == -1)
endIndex = newText.Length;
newText = newText.Substring(0, endIndex).Trim(' ', '\t', '\n', '\r', '/');
LoggingService.Debug("text: '" + newText + "'");
if (!newText.EndsWith("\"") && newText.LastIndexOfAny(whitespace) > -1) {
newText = newText.Substring(0, newText.LastIndexOfAny(whitespace));
}
string namespaceDecls = "";
var list = Utils.GetXmlNamespacesForOffset(text, offset);
foreach (var item in list) {
if (!Regex.IsMatch(text, item.Key + "\\s*=\\s*\""))
namespaceDecls += item.Key + "=\"" + item.Value + "\" ";
}
text = "<" + name + " " + newText + " " + namespaceDecls + " />";
return text; if (item.Key != null)
} return item.Key;
public static string GetXamlNamespacePrefix(string xaml, int offset)
{
var list = Utils.GetXmlNamespacesForOffset(xaml, offset);
var item = list.FirstOrDefault(i => i.Value == CompletionDataHelper.XamlNamespace);
if (item.Key.StartsWith("xmlns:", StringComparison.OrdinalIgnoreCase))
return item.Key.Substring("xmlns:".Length);
return string.Empty; return string.Empty;
} }
@ -273,6 +147,28 @@ namespace ICSharpCode.XamlBinding
return interestingPart.LastIndexOf("<!--", StringComparison.OrdinalIgnoreCase) != -1; return interestingPart.LastIndexOf("<!--", StringComparison.OrdinalIgnoreCase) != -1;
} }
public static int GetOffsetFromFilePos(string content, int line, int col)
{
if (line < 1)
return 0;
if (line == 1)
return (col > 0) ? col - 1 : 0;
int offset = -1;
while (line > 1) {
int tmp = content.IndexOf('\n', offset + 1);
if (tmp > -1) {
offset = tmp;
line--;
} else {
return content.Length;
}
}
return offset + col - 1;
}
public static int GetParentElementStart(ITextEditor editor) public static int GetParentElementStart(ITextEditor editor)
{ {
Stack<int> offsetStack = new Stack<int>(); Stack<int> offsetStack = new Stack<int>();
@ -296,5 +192,19 @@ namespace ICSharpCode.XamlBinding
return (offsetStack.Count > 0) ? offsetStack.Pop() : -1; return (offsetStack.Count > 0) ? offsetStack.Pop() : -1;
} }
public static XmlTextReader CreateReaderAtTarget(string fileContent, int caretLine, int caretColumn)
{
XmlTextReader r = new XmlTextReader(new StringReader(fileContent));
r.XmlResolver = null;
try {
r.WhitespaceHandling = WhitespaceHandling.Significant;
// move reader to correct position
while (r.Read() && !IsReaderAtTarget(r, caretLine, caretColumn)) { }
} catch (XmlException) {}
return r;
}
} }
} }

1
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.csproj

@ -80,7 +80,6 @@
<Compile Include="XamlContext.cs" /> <Compile Include="XamlContext.cs" />
<Compile Include="XamlExpressionContext.cs" /> <Compile Include="XamlExpressionContext.cs" />
<Compile Include="XamlExpressionFinder.cs"> <Compile Include="XamlExpressionFinder.cs">
<DependentUpon>XamlExpressionContext.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="XamlColorizer.cs" /> <Compile Include="XamlColorizer.cs" />
<Compile Include="MarkupExtensionParseException.cs" /> <Compile Include="MarkupExtensionParseException.cs" />

54
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs

@ -35,7 +35,7 @@ namespace ICSharpCode.XamlBinding
{ {
ParseInformation info = ParserService.GetParseInformation(editor.FileName); ParseInformation info = ParserService.GetParseInformation(editor.FileName);
XamlContext context = CompletionDataHelper.ResolveContext(editor, ch); XamlCompletionContext context = CompletionDataHelper.ResolveCompletionContext(editor, ch);
ICompletionItemList list; ICompletionItemList list;
if (context.Description == XamlContextDescription.InComment) if (context.Description == XamlContextDescription.InComment)
@ -72,7 +72,7 @@ namespace ICSharpCode.XamlBinding
editor.Document.Insert(editor.Caret.Offset, "{}"); editor.Document.Insert(editor.Caret.Offset, "{}");
editor.Caret.Offset--; editor.Caret.Offset--;
DoMarkupExtensionCompletion(editor, info, CompletionDataHelper.ResolveContext(editor, '{')); DoMarkupExtensionCompletion(editor, info, CompletionDataHelper.ResolveCompletionContext(editor, '{'));
return CodeCompletionKeyPressResult.EatKey; return CodeCompletionKeyPressResult.EatKey;
} }
break; break;
@ -130,36 +130,9 @@ namespace ICSharpCode.XamlBinding
return CodeCompletionKeyPressResult.None; return CodeCompletionKeyPressResult.None;
} }
static bool DoXmlTagCompletion(ITextEditor editor)
{
int offset = editor.Caret.Offset;
if (offset > 0) {
int searchOffset = offset - 1;
char c = editor.Document.GetCharAt(searchOffset);
while (char.IsWhiteSpace(c)) {
searchOffset--;
c = editor.Document.GetCharAt(searchOffset);
}
if (c != '/') {
string document = editor.Document.Text.Insert(offset, ">");
XmlElementPath path = XmlParser.GetActiveElementStartPathAtIndex(document, offset);
if (path != null && path.Elements.Count > 0) {
QualifiedName last = path.Elements[path.Elements.Count - 1];
if (!Utils.HasMatchingEndTag(last.Name, document, offset) && !last.Name.StartsWith("/") && !last.Name.StartsWith("!--")) {
editor.Document.Insert(offset, "></" + last.Name + ">");
editor.Caret.Offset = offset + 1;
return true;
}
}
}
}
return false;
}
public bool CtrlSpace(ITextEditor editor) public bool CtrlSpace(ITextEditor editor)
{ {
XamlContext context = CompletionDataHelper.ResolveContext(editor, ' '); XamlCompletionContext context = CompletionDataHelper.ResolveCompletionContext(editor, ' ');
context.Forced = true; context.Forced = true;
var info = ParserService.GetParseInformation(editor.FileName); var info = ParserService.GetParseInformation(editor.FileName);
@ -182,34 +155,35 @@ namespace ICSharpCode.XamlBinding
XamlResolver resolver = new XamlResolver(); XamlResolver resolver = new XamlResolver();
var completionList = new XamlCompletionItemList(); var completionList = new XamlCompletionItemList();
var mrr = resolver.Resolve(new ExpressionResult(context.AttributeName, new XamlExpressionContext(context.Path, context.AttributeName, false)), var mrr = resolver.Resolve(new ExpressionResult(context.AttributeName, context),
info, editor.Document.Text) as MemberResolveResult; context.ParseInformation, context.Editor.Document.Text) as MemberResolveResult;
if (mrr != null && mrr.ResolvedType != null) { if (mrr != null && mrr.ResolvedType != null) {
var c = mrr.ResolvedType.GetUnderlyingClass(); var c = mrr.ResolvedType.GetUnderlyingClass();
completionList.Items.AddRange(CompletionDataHelper.MemberCompletion(editor, mrr.ResolvedType)); completionList.Items.AddRange(CompletionDataHelper.MemberCompletion(context, mrr.ResolvedType));
editor.ShowInsightWindow(CompletionDataHelper.MemberInsight(mrr)); editor.ShowInsightWindow(CompletionDataHelper.MemberInsight(mrr));
} }
if (context.AttributeName == "Property" && context.Path.Elements.LastOrDefault().Name == "Setter") { if (context.AttributeName == "Property" && context.Path.Elements.LastOrDefault().Name == "Setter") {
int offset = Utils.GetParentElementStart(editor); int offset = Utils.GetParentElementStart(editor);
string[] attributes = Utils.GetListOfExistingAttributeNames(editor.Document.Text, offset); var loc = editor.Document.OffsetToPosition(offset);
string[] attributes = Utils.GetListOfExistingAttributeNames(editor.Document.Text, loc.Line, loc.Column);
if (attributes.Contains("TargetType")) { if (attributes.Contains("TargetType")) {
AttributeValue value = MarkupExtensionParser.ParseValue(Utils.GetAttributeValue(editor.Document.Text, offset, "TargetType")); AttributeValue value = MarkupExtensionParser.ParseValue(Utils.GetAttributeValue(editor.Document.Text, loc.Line, loc.Column, "TargetType"));
if (!value.IsString) { if (!value.IsString) {
TypeResolveResult trr = CompletionDataHelper.ResolveMarkupExtensionType(value.ExtensionValue, info, editor, context.Path); TypeResolveResult trr = CompletionDataHelper.ResolveMarkupExtensionType(value.ExtensionValue, context);
var typeName = CompletionDataHelper.ResolveType(GetTypeNameFromTypeExtension(value.ExtensionValue), context, editor); var typeName = CompletionDataHelper.ResolveType(GetTypeNameFromTypeExtension(value.ExtensionValue), context);
if (trr != null && trr.ResolvedClass != null && trr.ResolvedClass.FullyQualifiedName == "System.Windows.Markup.TypeExtension" if (trr != null && trr.ResolvedClass != null && trr.ResolvedClass.FullyQualifiedName == "System.Windows.Markup.TypeExtension"
&& typeName != null && typeName != null) { && typeName != null && typeName != null) {
/* completionList.Items.AddRange( completionList.Items.AddRange(
typeName.ResolvedClass.Properties typeName.ResolvedClass.Properties
.Where(p => p.IsPublic && p.CanSet) .Where(p => p.IsPublic && p.CanSet)
.Select(prop => new DefaultCompletionItem(prop.Name)) .Select(prop => new DefaultCompletionItem(prop.Name))
.Cast<ICompletionItem>() .Cast<ICompletionItem>()
);*/ );
} }
} }
} }
@ -246,7 +220,7 @@ namespace ICSharpCode.XamlBinding
return string.Empty; return string.Empty;
} }
static bool DoMarkupExtensionCompletion(ITextEditor editor, ParseInformation info, XamlContext context) static bool DoMarkupExtensionCompletion(ITextEditor editor, ParseInformation info, XamlCompletionContext context)
{ {
if (context.AttributeValue != null && !context.AttributeValue.IsString) { if (context.AttributeValue != null && !context.AttributeValue.IsString) {
var completionList = CompletionDataHelper.CreateMarkupExtensionCompletion(context, info, editor); var completionList = CompletionDataHelper.CreateMarkupExtensionCompletion(context, info, editor);

16
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlColorizer.cs

@ -65,7 +65,7 @@ namespace ICSharpCode.XamlBinding
{ {
int index = -1; int index = -1;
List<HighlightingInfo> infos = new List<HighlightingInfo>(); List<HighlightingInfo> infos = new List<HighlightingInfo>();
/*
do { do {
index = line.Text.IndexOf('=', index + 1); index = line.Text.IndexOf('=', index + 1);
if (index > -1) { if (index > -1) {
@ -76,7 +76,7 @@ namespace ICSharpCode.XamlBinding
infos.Add(new HighlightingInfo(expr, startIndex, startIndex + expr.Length, line.Offset, path)); infos.Add(new HighlightingInfo(expr, startIndex, startIndex + expr.Length, line.Offset, path));
} }
} }
} while (index > -1); } while (index > -1);*/
return infos.ToArray(); return infos.ToArray();
} }
@ -105,15 +105,15 @@ namespace ICSharpCode.XamlBinding
int startOffset; int startOffset;
int endOffset; int endOffset;
int lineOffset; int lineOffset;
XmlElementPath path; XamlContext context;
public HighlightingInfo(string token, int startOffset, int endOffset, int lineOffset, XmlElementPath path) public HighlightingInfo(string token, int startOffset, int endOffset, int lineOffset, XamlContext context)
{ {
this.token = token; this.token = token;
this.startOffset = startOffset; this.startOffset = startOffset;
this.endOffset = endOffset; this.endOffset = endOffset;
this.lineOffset = lineOffset; this.lineOffset = lineOffset;
this.path = path; this.context = context;
} }
public string Token { public string Token {
@ -132,12 +132,12 @@ namespace ICSharpCode.XamlBinding
get { return lineOffset; } get { return lineOffset; }
} }
public XmlElementPath Path { public XamlContext Context {
get { return path; } get { return context; }
} }
public ExpressionResult GetExpressionResult() { public ExpressionResult GetExpressionResult() {
return new ExpressionResult(token, new XamlExpressionContext(path, token, false)); return new ExpressionResult(token, context);
} }
} }
} }

4
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs

@ -45,7 +45,7 @@ namespace ICSharpCode.XamlBinding
context.Editor.Document.Insert(context.EndOffset, "=\"\""); context.Editor.Document.Insert(context.EndOffset, "=\"\"");
context.Editor.Caret.Offset--; context.Editor.Caret.Offset--;
} else { } else {
XamlContext xamlContext = CompletionDataHelper.ResolveContext(context.Editor, context.CompletionChar); XamlCompletionContext xamlContext = CompletionDataHelper.ResolveCompletionContext(context.Editor, context.CompletionChar);
if (!string.IsNullOrEmpty(xamlContext.RawAttributeValue)) { if (!string.IsNullOrEmpty(xamlContext.RawAttributeValue)) {
string valuePart = xamlContext.RawAttributeValue.Substring(0, xamlContext.ValueStartOffset); string valuePart = xamlContext.RawAttributeValue.Substring(0, xamlContext.ValueStartOffset);
AttributeValue value = MarkupExtensionParser.ParseValue(valuePart); AttributeValue value = MarkupExtensionParser.ParseValue(valuePart);
@ -80,7 +80,7 @@ namespace ICSharpCode.XamlBinding
insertionString = " "; insertionString = " ";
} }
string prefix = Utils.GetXamlNamespacePrefix(context.Editor.Document.Text, context.StartOffset); string prefix = Utils.GetXamlNamespacePrefix(CompletionDataHelper.ResolveCompletionContext(context.Editor, context.CompletionChar));
if (!string.IsNullOrEmpty(prefix)) if (!string.IsNullOrEmpty(prefix))
prefix += ":"; prefix += ":";

19
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlContext.cs

@ -5,12 +5,12 @@
// <version>$Revision: 3731 $</version> // <version>$Revision: 3731 $</version>
// </file> // </file>
using ICSharpCode.SharpDevelop.Editor;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Xml; using System.Xml;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
@ -18,20 +18,23 @@ using ICSharpCode.XmlEditor;
namespace ICSharpCode.XamlBinding namespace ICSharpCode.XamlBinding
{ {
public class XamlContext { public class XamlContext : ExpressionContext {
public XmlElementPath Path { get; set; } public XmlElementPath Path { get; set; }
public string AttributeName { get; set; } public string AttributeName { get; set; }
public ResolveResult ResolvedExpression { get; set; }
public AttributeValue AttributeValue { get; set; } public AttributeValue AttributeValue { get; set; }
public char PressedKey { get; set; }
public string RawAttributeValue { get; set; } public string RawAttributeValue { get; set; }
public int ValueStartOffset { get; set; } public int ValueStartOffset { get; set; }
public XamlContextDescription Description { get; set; } public XamlContextDescription Description { get; set; }
public bool Forced { get; set; }
public Dictionary<string, string> XmlnsDefinitions { get; set; } public Dictionary<string, string> XmlnsDefinitions { get; set; }
public ParseInformation ParseInformation { get; set; }
public XamlContext() {} public XamlContext() {}
public override bool ShowEntry(object o)
{
return true;
}
public override string ToString() public override string ToString()
{ {
return "[XamlContext" + return "[XamlContext" +
@ -43,6 +46,12 @@ namespace ICSharpCode.XamlBinding
} }
} }
public class XamlCompletionContext : XamlContext {
public char PressedKey { get; set; }
public bool Forced { get; set; }
public ITextEditor Editor { get; set; }
}
public enum XamlContextDescription { public enum XamlContextDescription {
/// <summary> /// <summary>
/// Outside any tag /// Outside any tag

82
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlResolver.cs

@ -24,70 +24,49 @@ namespace ICSharpCode.XamlBinding
{ {
IClass callingClass; IClass callingClass;
string resolveExpression; string resolveExpression;
XamlExpressionContext context; int caretLine, caretColumn;
ParseInformation parseInfo; XamlContext context;
int caretLineNumber, caretColumn;
internal bool IsReaderAtTarget(XmlTextReader r)
{
if (r.LineNumber > caretLineNumber)
return true;
else if (r.LineNumber == caretLineNumber)
return r.LinePosition >= caretColumn;
else
return false;
}
public ResolveResult Resolve(ExpressionResult expressionResult, ParseInformation parseInfo, string fileContent) public ResolveResult Resolve(ExpressionResult expressionResult, ParseInformation parseInfo, string fileContent)
{ {
this.resolveExpression = expressionResult.Expression; this.resolveExpression = expressionResult.Expression;
this.parseInfo = parseInfo; this.caretLine = expressionResult.Region.BeginLine;
this.caretLineNumber = expressionResult.Region.BeginLine;
this.caretColumn = expressionResult.Region.BeginColumn; this.caretColumn = expressionResult.Region.BeginColumn;
this.callingClass = parseInfo.BestCompilationUnit.GetInnermostClass(caretLineNumber, caretColumn); this.callingClass = parseInfo.BestCompilationUnit.GetInnermostClass(caretLine, caretColumn);
this.context = expressionResult.Context as XamlExpressionContext; this.context = CompletionDataHelper.ResolveContext(fileContent, parseInfo.MostRecentCompilationUnit.FileName, caretLine, caretColumn);
if (context == null) if (context == null)
return null; return null;
try { if (string.IsNullOrEmpty(context.AttributeName)) {
using (XmlTextReader r = new XmlTextReader(new StringReader(fileContent))) { return ResolveElementName(expressionResult.Expression);
r.WhitespaceHandling = WhitespaceHandling.Significant; }
// move reader to correct position else if (context.Description == XamlContextDescription.InAttributeValue) {
while (r.Read() && !IsReaderAtTarget(r)) { } MemberResolveResult mrr = ResolveAttribute(context.AttributeName);
if (mrr != null) {
if (string.IsNullOrEmpty(context.AttributeName)) { return ResolveAttributeValue(mrr.ResolvedMember, resolveExpression);
return ResolveElementName(r, expressionResult.Expression);
}
else if (context.InAttributeValue) {
MemberResolveResult mrr = ResolveAttribute(r, context.AttributeName);
if (mrr != null) {
return ResolveAttributeValue(mrr.ResolvedMember, resolveExpression);
}
}
else {
// in attribute name
return ResolveAttribute(r, resolveExpression);
}
} }
return null;
} }
catch (XmlException) { else {
return null; // in attribute name
return ResolveAttribute(resolveExpression);
} }
return null;
} }
ResolveResult ResolveElementName(XmlReader r, string exp) ResolveResult ResolveElementName(string exp)
{ {
//Utils.GetXmlNamespacesForOffset(
string xmlNamespace; string xmlNamespace;
string name; string name;
this.resolveExpression = exp; this.resolveExpression = exp;
if (resolveExpression.Contains(":")) { if (resolveExpression.Contains(":")) {
string prefix = resolveExpression.Substring(0, resolveExpression.IndexOf(':')); string prefix = resolveExpression.Substring(0, resolveExpression.IndexOf(':'));
name = resolveExpression.Substring(resolveExpression.IndexOf(':') + 1); name = resolveExpression.Substring(resolveExpression.IndexOf(':') + 1);
xmlNamespace = r.LookupNamespace(prefix); if (!context.XmlnsDefinitions.TryGetValue(prefix, out xmlNamespace))
xmlNamespace = null;
} }
else { else {
xmlNamespace = r.LookupNamespace(""); if (!context.XmlnsDefinitions.TryGetValue("", out xmlNamespace))
xmlNamespace = null;
name = resolveExpression; name = resolveExpression;
} }
if (name.Contains(".")) { if (name.Contains(".")) {
@ -96,7 +75,7 @@ namespace ICSharpCode.XamlBinding
return ResolveProperty(xmlNamespace, name, propertyName, true); return ResolveProperty(xmlNamespace, name, propertyName, true);
} }
else { else {
IProjectContent pc = parseInfo.BestCompilationUnit.ProjectContent; IProjectContent pc = context.ParseInformation.BestCompilationUnit.ProjectContent;
IReturnType resolvedType = XamlCompilationUnit.FindType(pc, xmlNamespace, name); IReturnType resolvedType = XamlCompilationUnit.FindType(pc, xmlNamespace, name);
IClass resolvedClass = resolvedType != null ? resolvedType.GetUnderlyingClass() : null; IClass resolvedClass = resolvedType != null ? resolvedType.GetUnderlyingClass() : null;
if (resolvedClass != null) { if (resolvedClass != null) {
@ -110,7 +89,7 @@ namespace ICSharpCode.XamlBinding
MemberResolveResult ResolveProperty(string xmlNamespace, string className, string propertyName, bool allowAttached) MemberResolveResult ResolveProperty(string xmlNamespace, string className, string propertyName, bool allowAttached)
{ {
IProjectContent pc = parseInfo.BestCompilationUnit.ProjectContent; IProjectContent pc = context.ParseInformation.BestCompilationUnit.ProjectContent;
IReturnType resolvedType = XamlCompilationUnit.FindType(pc, xmlNamespace, className); IReturnType resolvedType = XamlCompilationUnit.FindType(pc, xmlNamespace, className);
if (resolvedType != null && resolvedType.GetUnderlyingClass() != null) { if (resolvedType != null && resolvedType.GetUnderlyingClass() != null) {
IMember member = resolvedType.GetProperties().Find(delegate(IProperty p) { return p.Name == propertyName; }); IMember member = resolvedType.GetProperties().Find(delegate(IProperty p) { return p.Name == propertyName; });
@ -141,18 +120,21 @@ namespace ICSharpCode.XamlBinding
return null; return null;
} }
MemberResolveResult ResolveAttribute(XmlReader r, string attributeName) MemberResolveResult ResolveAttribute(string attributeName)
{ {
if (context.ElementPath.Elements.Count == 0) { if (context.Path == null) {
return null; return null;
} }
string attributeXmlNamespace; string attributeXmlNamespace;
if (attributeName.Contains(":")) { if (attributeName.Contains(":")) {
attributeXmlNamespace = r.LookupNamespace(attributeName.Substring(0, attributeName.IndexOf(':'))); string prefix = attributeName.Substring(0, attributeName.IndexOf(':'));
if (!context.XmlnsDefinitions.TryGetValue(prefix, out attributeXmlNamespace))
attributeXmlNamespace = null;
attributeName = attributeName.Substring(attributeName.IndexOf(':') + 1); attributeName = attributeName.Substring(attributeName.IndexOf(':') + 1);
} }
else { else {
attributeXmlNamespace = r.LookupNamespace(""); if (!context.XmlnsDefinitions.TryGetValue("", out attributeXmlNamespace))
attributeXmlNamespace = null;
} }
if (attributeName.Contains(".")) { if (attributeName.Contains(".")) {
string className = attributeName.Substring(0, attributeName.IndexOf('.')); string className = attributeName.Substring(0, attributeName.IndexOf('.'));
@ -160,7 +142,7 @@ namespace ICSharpCode.XamlBinding
return ResolveProperty(attributeXmlNamespace, className, attributeName, true); return ResolveProperty(attributeXmlNamespace, className, attributeName, true);
} }
else { else {
ICSharpCode.XmlEditor.QualifiedName lastElement = context.ElementPath.Elements[context.ElementPath.Elements.Count - 1]; ICSharpCode.XmlEditor.QualifiedName lastElement = context.Path.Elements.LastOrDefault();
return ResolveProperty(lastElement.Namespace, lastElement.Name, attributeName, false); return ResolveProperty(lastElement.Namespace, lastElement.Name, attributeName, false);
} }
} }

2
src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskView.cs

@ -276,7 +276,7 @@ namespace ICSharpCode.SharpDevelop.Gui
ListViewItem item = new ListViewItem(new string[] { ListViewItem item = new ListViewItem(new string[] {
String.Empty, String.Empty,
(task.Line + 1).ToString(), task.Line.ToString(),
FormatDescription(task.Description), FormatDescription(task.Description),
fileName, fileName,
path path

280
src/SharpDevelop.sln

@ -1,172 +1,172 @@
 
Microsoft Visual Studio Solution File, Format Version 10.00 Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008 # Visual Studio 2008
# SharpDevelop 4.0.0.4182 # SharpDevelop 4.0.0.4279
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "AddIns\Misc\SharpRefactoring\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkflowDesigner", "AddIns\DisplayBindings\WorkflowDesigner\Project\WorkflowDesigner.csproj", "{533F4684-DBA6-4518-B005-C84F22A2DD57}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "86CE7B3F-6273-4215-9E36-6184D98F854E"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{DB137F0B-9B62-4232-AE92-F7BE0280B8D3}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}"
EndProject EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HtmlHelp2JScriptGlobals", "AddIns\Misc\HtmlHelp2\JScriptGlobals\HtmlHelp2JScriptGlobals.vbproj", "{E54A5AD2-418D-4A85-BA5E-CD803DE38715}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "AddIns\Misc\SubversionAddIn\Project\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{DCA2703D-250A-463E-A68A-07ED105AE6BD}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6e59af58-f635-459a-9a35-c9ac41c00339}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}"
EndProject EndProject
Project("{982E8BC1-ACD7-4dbf-96AB-B2CE67D6A008}") = "FSharpBinding", "AddIns\BackendBindings\FSharp\FSharpBinding\Project\FSharpBinding.fsproj", "{99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4}" Project("{982E8BC1-ACD7-4dbf-96AB-B2CE67D6A008}") = "FSharpBinding", "AddIns\BackendBindings\FSharp\FSharpBinding\Project\FSharpBinding.fsproj", "{99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6e59af58-f635-459a-9a35-c9ac41c00339}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "AddIns\Misc\SubversionAddIn\Project\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}" Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HtmlHelp2JScriptGlobals", "AddIns\Misc\HtmlHelp2\JScriptGlobals\HtmlHelp2JScriptGlobals.vbproj", "{E54A5AD2-418D-4A85-BA5E-CD803DE38715}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{DCA2703D-250A-463E-A68A-07ED105AE6BD}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{DB137F0B-9B62-4232-AE92-F7BE0280B8D3}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkflowDesigner", "AddIns\DisplayBindings\WorkflowDesigner\Project\WorkflowDesigner.csproj", "{533F4684-DBA6-4518-B005-C84F22A2DD57}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "86CE7B3F-6273-4215-9E36-6184D98F854E"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "AddIns\Misc\SharpRefactoring\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "Libraries\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "Libraries\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}"
EndProject EndProject
Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "B13EFF7F-7EA4-4B68-A375-D112105E9182" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "B13EFF7F-7EA4-4B68-A375-D112105E9182"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -420,74 +420,74 @@ Global
{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|Any CPU.ActiveCfg = Release|Any CPU {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{8AA421C8-D7AF-4957-9F43-5135328ACB24} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{461606BD-E824-4D0A-8CBA-01810B1F5E02} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{3EAA45A9-735C-4AC7-A799-947B93EA449D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{1F261725-6318-4434-A1B1-6C70CE4CD324} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{918487B7-2153-4618-BBB3-344DBDDF2A2A} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
86CE7B3F-6273-4215-9E36-6184D98F854E = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{3CA90546-3B4C-4663-9445-C4E9371750A7} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{6e59af58-f635-459a-9a35-c9ac41c00339} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{BF38FB72-B380-4196-AF8C-95749D726C61} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}
{8D732610-8FC6-43BA-94C9-7126FD7FE361} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}
{533F4684-DBA6-4518-B005-C84F22A2DD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{DB137F0B-9B62-4232-AE92-F7BE0280B8D3} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{0162E499-42D0-409B-AA25-EED21F75336B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{DCA2703D-250A-463E-A68A-07ED105AE6BD} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} {DCA2703D-250A-463E-A68A-07ED105AE6BD} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} {0162E499-42D0-409B-AA25-EED21F75336B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{DB137F0B-9B62-4232-AE92-F7BE0280B8D3} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{533F4684-DBA6-4518-B005-C84F22A2DD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{08F772A1-F0BE-433E-8B37-F6522953DB05} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} {08F772A1-F0BE-433E-8B37-F6522953DB05} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3}
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3}
{E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3}
{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{BF38FB72-B380-4196-AF8C-95749D726C61} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{6e59af58-f635-459a-9a35-c9ac41c00339} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{8D732610-8FC6-43BA-94C9-7126FD7FE361} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}
{D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}
{3CA90546-3B4C-4663-9445-C4E9371750A7} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
86CE7B3F-6273-4215-9E36-6184D98F854E = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{918487B7-2153-4618-BBB3-344DBDDF2A2A} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{1F261725-6318-4434-A1B1-6C70CE4CD324} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{3EAA45A9-735C-4AC7-A799-947B93EA449D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{461606BD-E824-4D0A-8CBA-01810B1F5E02} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{8AA421C8-D7AF-4957-9F43-5135328ACB24} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
B13EFF7F-7EA4-4B68-A375-D112105E9182 = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
B13EFF7F-7EA4-4B68-A375-D112105E9182 = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

Loading…
Cancel
Save